52
28

More than 1 year has passed since last update.

2022年最新のYOLOv7の論文解説

Last updated at Posted at 2022-07-11

最新のYOLOv7が出ました。

論文を読むのに必要な周辺情報をいろいろ追加しながらまとめてみました。
あとnetronで表示するためにONNXファイルを置いておきました。

1. どんなもの?

  1. 2022年7月に出た物体検出の最新手法。
  2. YOLOv4のチームが作った正統なやつ(※)。
  3. 5FPSから160FPSのリアルタイム物体検出で最強。
  4. 追加データなし。MS COCO データセットのみので学習している。
  5. エッジデバイスで使いやすいレイヤーを選んでいる。(イントロで気にしている。)

※YOLOの作成者が入り乱れている様子については下のリンクにまとめています。

※論文タイトルの trainable bag-of-freebies は推論時間に影響を与えずに精度を向上する工夫のこと言っています。
bag-of-freebiesというのは YOLOv4のときも使っている言葉で、freebiesはプロモーション用の景品のことみたいです。
image.png

2. 先行研究と比べてどこがすごい?

5FPSから160FPSのリアルタイム物体検出で最強です。(数字や図はdarknetより引用。)

  • YOLOv7-e6 (55.9% AP, 56 FPS) by +500% FPS faster than SWIN-L C-M-RCNN (53.9% AP, 9.2 FPS)
  • YOLOv7-e6 (55.9% AP, 56 FPS) by +550% FPS faster than ConvNeXt-XL C-M-RCNN (55.2% AP, 8.6 FPS)
  • YOLOv7-w6 (54.6% AP, 84 FPS) by +120% FPS faster than YOLOv5-X6-r6.1 (55.0% AP, 38 FPS)
  • YOLOv7-w6 (54.6% AP, 84 FPS) by +1200% FPS faster than Dual-Swin-T C-M-RCNN (53.6% AP, 6.5 FPS)
  • YOLOv7x (52.9% AP, 114 FPS) by +150% FPS faster than PPYOLOE-X (51.9% AP, 45 FPS)
  • YOLOv7 (51.2% AP, 161 FPS) by +180% FPS faster than YOLOX-X (51.1% AP, 58 FPS V100)

image.png
image.png

3. 技術や手法のキモはどこ?

3.1 concatで効率的に動作する Extended efficient layer aggregation networks (E-ELAN)

これはbackbone用のネットワークです。
著者らが提案し、YOLOv4でも使っているCross Stage Partial Network(CSPNet)の発展形です。

CSPNetは勾配の多様性を得ながら計算を減らすために特徴量の分割とconcatを多用しています。下図。
image.png

E-ELANの図を見る前にScaled YOLOv4の図を見ておくと分かりやすいと個人的には思います。
$g$がチャンネル数。kがconvのカーネルサイズです。
チャンネル数2gの特徴量マップを2つに分割し、片方は3x3convします。このように
作った複数の特徴量マップをconcatし合計4gのチャンネル数になっています。
image.png

こちらがYOLOv7の図です。cがチャンネル数です。図の中のpartial はもともと2cチャンネルあった特徴量マップを分割していることを表します。
image.png

補足:DenseNet や VoVNet もこの方針のネットワークです。そのため、上の図にVoVNetが登場しています。
image.png

3.2 model scaling

一般論として、モデルを大きくするときは以下のパラメータがあります。

  • Resolution : 画像サイズ
  • depth : レイヤー数
  • width : チャンネル数
  • stage :フィーチャーピラミッドの数

Neural Architecture Search (NAS)で探索するのが(GPUいっぱい使えるなら)一般的ですが、今回のようなconcatを使うネットワークでは困ってしまいます。
NASは1パラメータずつ探索していくのに対して、concatを使うネットワークはdepthを大きくするとwidthが大きくなるような挙動でパラメータ間の関連が強いためです。

image.png

以下のようなモジュールにすることで、depthが増えても直後のwidhtで調整することでwidthの変化の入力をwidthの変化の出力にできます。

image.png

3.3 model re-parameterization

これは Rep-VGG の考え方をconcatベースのネットワークに入れ込もうとしています。

Rep-VGGは学習時には3x3conv,1x1conv,skip-connectionを並列にして勾配消失問題を解決し、推論時は3つを合成したconv1個にして高速に動きます。
まさに freebies ですね。
(余談ですが、このRep-VGG を出している megviiがYOLO Xを出しています。すごい。)
image.png

ただし、このRepConvはVGGではうまくいっていますが、ResNetやDenseNetに適用するとうまくいきません。
image.png

筆者らの分析によると、RepConvのskip-connectionの部分がResNetのResidualやDenseNetのconcatを破壊しているとのこと。
そこで、RepConvNというskip-connectionなしのモジュールを導入します。
image.png

RepConvで差し替えるか、RepConvNで差し替えるかは下の図のように決めます。
image.png

Coarse for auxiliary and fine for lead loss

最近の流行り2点を取り込むことを目論んでいます。

  1. Deep supervision : 学習中は中間に補助のヘッドを足して浅い層の学習を促します。
  2. ソフトラベル: 正解、不正解だけでなく中間の結果をラベルして学習します。

ということで、もともと使うヘッド(Lead Head)に追加してAuxiliary Head も使って学習します。
学習方法としは、図の(d)と(e)を提案しています。
(c)独立に学習
(d)Lead Head を Aux Head のソフトラベルとして学習する。
(e)Lead Head を Aux Head のソフトラベルとして学習するが、Aux Head がよくなりすぎるとLead Head が考えなくて良くなっちゃうので、完全な結果にならないようにする。【著者達のオススメ】

image.png

4. どうやって有効だと検証した?

  • まずは冒頭のグラフ。強い。すごい。5FPSから160FPSのリアルタイム物体検出で最強です。
    下の図はV7の議論より引用しました。 → https://github.com/WongKinYiu/yolov7/issues/40
    image.png

  • スケーリング方法の比較
    これは違いが出ている。
    image.png

  • model re-parameterization の効果
    skip-connectionから遠いパーツだけ変更した(c)が一番良かった。けど図4を見ると(d)のAPが下がっているのが狙い通りなのか疑問。
    image.png

  • Coarse for auxiliary and fine for lead loss の効果
    AUXヘッドには効果ありそうだが、提案のcoarse-to-fineは微妙では?
    image.png

5. 議論はある?

  • 精度の変化は小さいのでAblation study はパーツごとの速度変化にしてほしかった。
  • あと、モデルの命名規則がよくわからないです。。。

6. 次に読むべき論文は?

”Designing network design strategies"というanonymousの論文。これでELANの全容が分かりそう。

そして次のYOLO!

7. netron表示用のONNX

netronで見たいだけのわりに変換が面倒なので作成したものを置いておきます。
ダウンロードして、netronで開いてください。

ONNX Test Size layers parameters GFLOPS
YOLOv7-tiny 640 200 6219709 13.7
YOLOv7 640 306 36905341 104.5
YOLOv7x 640 354 71311741 189.7
YOLOv7w6 1280 343 70394300 89.9
YOLOv7e6 1280 473 97202940 128.6
YOLOv7d6 1280 539 133757052 175.4
YOLOv7e6e 1280 792 151687420 210.5

比較用: これらはdarknetのcfgがあるのでクリックで直接見れます。

cfg Test Size layers parameters GFLOPS
YOLOv4-CSP 640 52.9M 120.4
YOLOR-CSP 640 52.9M 120.4
YOLOR-CSP-X 640 96.9M 226.8

注:このアクティベーションはSiLUまたはSWISH
image.png

8. 参考

論文 https://arxiv.org/abs/2207.02696
Github https://github.com/WongKinYiu/yolov7

YOLOv4とScaled YOLOv4を知っていることが前提の論文。これらについては本人による記事が良さそう。

52
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
52
28