キカベン
機械学習でより便利な世の中へ
G検定対策
お問い合わせ
   

YOLOv4:高速で正確な物体検出器をGPU1個で推論・訓練できる実用性

thumb image

紆余曲折を経て登場したYOLOv4。この記事では、YOLOv4の論文を追いながら以下の要点を解説します。

  1. どのようにしてYOLOv4が生まれたのか
  2. YOLOv3までのオリジナルの開発者はYOLOv4を認めているのか
  3. YOLOv4は何を目的に構築されたのか
  4. YOLOv4ではどういった工夫がされたのか

特に最後のポイントに力を入れて解説しています。

1. YOLOv4の登場🔝

1.1. 消えるところだったYOLO🔝

YOLOv3の論文で著者のJoseph Redmonはコンピュータービジョン研究の将来に疑問を呈しました。軍事利用やプライバシーの問題に対して研究者は配慮する義務があると考えたからです。

そして2018年の4月にYOLOv3が発表されて以来、約2年の間、新しいバージョンが発表されることはありませんでした。しかも、2020年2月のTwitterのコメントでJoseph RedmonがYOLOの開発から手を引いたことが明確になりました。

YOLOが研究の表舞台から消えている間に、GoogleのQuoc V. LeらによるEfficientDetが登場し特に精度の面で記録を塗り替えていきました。

EfficientDetのバックボーン(特徴マップを抽出する部分)であるEfficientNetでは自動的にニューラルネットワークをデザインするNeural Architecture Search(NAS)が使われており、もはや人間の手探りによるモデルの開発は時代遅れになったかのようでした。

また、NASでは莫大なGPUパワーが必要であることもあり、大企業でなければこういった研究で競争に勝つのは難しいようにも見えました。

1.2. YOLOの開発は続いていた🔝

一方で、Alexey BochkovskiyはGithubでDarknetをフォークして、独自の拡張を加えはじめました。彼は、そのリポジトリのwikiでYOLOv3のカスタマイズの仕方を説明し人々の質問に答えていました。新しい機能をつけたり、まるでYOLOv3を引き継いだかのような活動をしていました。

その成果をまとめたYOLOv4が2020年の4月に発表されました。

Alexey Bochkovskiyはインテルに属しているのですが、なぜかYOLOv4の論文ではGメールのアドレスを使っています。

Joseph Redmonに敬意を払って企業の支援は受けずに研究をしているのかも…(憶測です)

また、他の2人の共著者(Chien-Yao WangHong-Yuan Mark Liao)は中央研究院(台湾の研究機関)からで、後で取り上げられるCSPResNeXt50というバックボーン(物体検出において特徴マップを抽出する部分)の開発者です。CSPNetの論文の中で彼らは当時Alexey Bochkovskiyが維持していたYOLOv3やDarknet-53を使用していたのでつながりがあったのでしょう。

今年のCVPR2021で発表されたScaled YOLOv4でも3人は共著者として名を連ねています。

1.3. EfficientDetよりも高速🔝

さて、YOLOv4では速度と精度を最適化するために様々な手法やテクニックを考慮しています。

速度を上げたり精度を良くするための実験はYOLOv3の論文の中でもJeseph Redmonによって幾つか行われていましたが、あまり系統立ててはいない印象でした。少なくともYOLOv3の論文からは「乱雑に試してみた」感が漂いました。

その反面、YOLOv4の論文では、Alexεy Bochkovskiyはあらゆる情報を整理し理論的に改善方法を探った印象を受けます。

そして人間の頭脳による分析と人間の手による実験を繰り返しGPU1つで実用化できる物体検出のモデルをYOLOv3を土台に作り上げました。結果として、巨大企業Googleの研究者たちがコンピュータのパワーを駆使して作ったEfficientDetと同様の精度を持ち、しかもより高速なモデルが完成しました。

画像元:論文

1.4. Jeseph Redmonは容認?🔝

Twitter上で「YOLOv4を容認するのか?」と尋ねられたJoseph Redmonは「私がどう思うかは関係ない。Alexey BochkovskiyのDarknetとYOLOが今では標準だ。彼は大変な努力をしたし、みんなが彼のYOLOを使っている。私のではなくてね、ワハハ」とコメントし、YOLOv4を(事実上)容認しています。

1.5. YOLOv4の目的🔝

YOLOv4の論文によると、目的はプロダクションで使用可能なスピードを持った物体検出器をデザインすることでした。また、GPUが一つあれば誰でも訓練し、リアルタイムでの推論ができるものを目指していました。

実際、結果としてEfficientDetと同レベルの精度(MS COCOでのAP)を持ちながらより高速な物体検出器になりました。論文では以下のようにまとめられています。

  • NvidiaのGTX 1080tiかRTX 2080tiが一つあれば誰でも正確で高速な物体検出器を訓練できる。
  • 様々なフリービー(Freebies)を試した。
  • 様々なスペシャル(Specials)を試した。
  • 一つのGPUで訓練できるように既存の手法の改良し効率を良くした。

そのため論文ではまず物体検出そのものを構造的に分析しています。

2. 物体検出器の構成要素🔝

物体検出器にはバックボーン(背骨)とヘッド(頭部)があります。バックボーンは特徴量抽出器です。ヘッドはバックボーンからの特徴量を使って物体検出を行う部分です。

イメージ的には下図のような感じです。

2.1. バックボーン🔝

バックボーンはImageNetの画像で訓練された画像分類のモデルからの畳み込み層を使うことが多いです。代表的なものとして以下の既成モデルがよく使われます。

また、新しく開発されたものもあります。

2.2. ヘッド🔝

ヘッドに関しては、二つのタイプがあります。1ステージ物体検出器(one-stage object detector)と2ステージ物体検出器(two-stage object detector)です。

1ステージ物体検出器の代表的なものは以下になります。

2ステージ物体検出器の代表的なものは以下になります。

例えば、物体検出器のYOLOv3を、バックボーンはDarknet53でヘッドはYOLOv3の組み合わせとして捉えます。このような考え方はこれまでにもありました。例えば、YOLOv3のバックボーンをVGGにした実験など。

この論文ではこの考えを明確に定義し、物体検出器のデザインをこれらのパーツを選ぶことで表現します。

2.3. ネック🔝

バックボーンとヘッドに間に入って特徴マップを結合する場合があります。この論文ではこのような層をネック(首部)と呼んでいます。

  • FPN(Feature Pyramid Network)
  • Fully-connected FPN
  • PAN(Path Aggregation Network)
  • BiFPN(Bidirectional FPN)
  • NAS-FPN
  • ASFF(Adaptively Spatial Feature Fusion)
  • SFAM(Scale-wise Feature Aggregation Module)
  • SPP(Spatial Pyramid Pooling)
  • ASPP(Atrous Spatial Pyramid Pooling)
  • RFB(Receptive Field Block)
  • SAM(Spatial Attention Module)

2.4. フリービー(Freebies)🔝

この論文では、推論速度を落とすことなく精度が上がる変更をフリービーと呼んでいます。

コストがかからないので「無償提供品」、「無コストで効果がある」といったイメージです。

フリービーは訓練における変更であるため推論速度に影響はありません。

2.5. スペシャル(Specials)🔝

この論文では、推論速度に少し影響するが精度が上がる変更をスペシャルと呼んでいます。

コストが低い良品なので「特別価格品」、「低コストで効果がある」といったイメージです。

代表的なものに以下があります。

  • 受容野(receptive field)を強化する
    • SPP(Spatial Pyramid Pooling)
    • ASPP(Atrous Spatial Pyramid Pooling)
    • RFB(Receptive Field Block)
  • Attention
    • SE(Squeeze-and-Excitation)
    • SAM(Spatial Attention Module)
  • 特徴統合
    • スキップ結合(skip connection)
    • ハイパーカラム(hyper-column)
    • FPN(Feature Pyramid Network)
    • SFAM(Scale-wise Feature Aggregation Module)
    • ASFF(Adaptively Spatial Feature Fusion)
    • BiFPN(Bidirectional FPN)
  • 活性化関数
    • ReLU(Rectified Linear Unit)
    • LReLU(Leaky ReLU)
    • PReLU(Parameterized ReLU)
    • ReLU6
    • SELU(Scaled Exponential Linear Unit)
  • 後処理(post-processing)

以上の物体検出器の構成要素をもとにYOLOv4のデザインが決められました。

3. YOLOv4のデザイン🔝

3.1. アーキテクチャの選択🔝

YOLOv4の構成要素構成要素名
バックボーンCSPDarknet53
ネックPAN(Path Aggregation Network)
ヘッドYOLOv3
スペシャルSPP

GTX 1080TiやRTX 2080Ti一つでの使用を前提にしているのでCross-GPU Batch Normalization(CGBN、SyncBN)などGPUの複数使用を前提にしたものは使いませんでした。

3.2. フリービーとスペシャルの選択🔝

様々なフリービーとスペシャルがある中、以下は選択肢から除外されました。

  • PReLU、SELU:訓練が難しいので除外
  • ReLU6:量子化されたモデル用なので除外
  • syncBN:複数GPUでの訓練に使うもの(1GPUで訓練するため)なので除外

正則化には、優れていることが明白だったDropBlockを採用し他は除外。

また、追加で以下の改善手法を行なった。

  • Mosaic(Data Augmentation)を追加:これはYOLOv5の開発者Glenn Jocherが発案したもの
  • SAT(Self-Adversarial Training)を追加:これもData Augmentationの手法
  • 遺伝的アルゴリズム(ハイパーパラメータの選択)を使用
  • SAMに変更を加えた
  • PANに変更を加えた
  • CmBN(Cross mini-Batch Normalization)に変更を加えた

結果として以下のフリービー、スベシャルが採用された。

バックボーンに採用されたフリービー:

  • CutMix
  • Mosaic data augmentation
  • DropBlock正則化
  • Class label smoothing

バックボーンに採用されたスペシャル:

  • Mish活性化関数
  • Cross-stage partial connections (CSP)
  • Multi-input weighted residual connections (MiWRC)

物体検出のフリービー:

  • CIoU損失
  • CmBN
  • DropBlock正則化
  • Mosaic data augmentation
  • SAT (Self-Adversarial Training)
  • Eliminate grid sensitivity
  • 複数のアンカーを同一の正解データに適用する
  • Cosine annealingスケジューラー
  • 最適なハイパーパラメータ
  • 訓練にランダムな形を使う(Random training shapes)

物体検出のスペシャル:

  • Mishi活性化関数
  • SPPブロック
  • SAMブロック
  • PAN(path-aggregation block)
  • DIoU-NMS

正直なところ、項目が多すぎて細部まで調べてはいません。興味がある方はリンクを辿って論文を追ってみてください。

4. 実験結果🔝

実験結果も細かく報告されています。

4.1. CSPResNeXt-50:分類器へのフリービーとMish活性化関数による影響🔝

画像元:論文

最後の2行が効果的ですね。

4.2. CSPDarknet-53:分類器へのフリービーとMish活性化関数による影響🔝

画像元:論文

ResNeXtもDarknetも同じフリービーとMish活性化関数が効果的です。

4.3. CSPResNeXt50-PANet-SPP(512×512):検出器へのフリービーの影響🔝

画像元:論文
  • S: Eliminate grid sensitivity
  • M: Mosaic data augmentation
  • IT: IoU threshold
  • GA: Genetic algorithms
  • LS: Class label smoothing
  • CBN: CmBN
  • CA: Cosine annealing scheduler
  • DM: Dynamic min-batch size
  • OA: Optimized anchors
  • GIoU、CIoU、DIoU、MSE(損失関数)

損失関数ではGIoUとCIoUが効果的です。

4.4. CSPResNeXt50-PANet-SPP(512×512):検出器へのスペシャルの影響🔝

画像元:論文

SAMが一番効果がありました。

4.5. CSPResNeXt50-PANet-SPP:検出器を異なる分類器(訓練済)を使って学習した結果🔝

画像元:論文

BoFはBag of Freebies(フリービー)のことで、BoF-backboneとはバックボーン用のフリービーを使ったという意味です。

やはり、フリービーとMish活性化関数に効果があるのがわかります。

4.6. 異なるミニバッチサイズを検出器の訓練に使った結果🔝

画像元:論文

バッチサイズは8が良かったのがわかります。

5. スピードと精度🔝

最後は、スピードと精度の結果です。端的に言えば、リアルタイムで良い精度を出せるのはYOLOv4だけになっています。

画像元:論文

論文にはもっと表があって、テストのデータを見ることができるので興味がある方は参照してください。

6. 参照🔝

6.1. YOLOv4: Optimal Speed and Accuracy of Object Detection🔝

Alexey BochkovskiyChien-Yao WangHong-Yuan Mark Liao

https://arxiv.org/abs/2004.10934

6.2. CSPNet: A New Backbone that can Enhance Learning Capability of CNN🔝

Chien-Yao WangHong-Yuan Mark LiaoI-Hau YehYueh-Hua WuPing-Yang ChenJun-Wei Hsieh

https://arxiv.org/abs/1911.11929

6.3. Hacker News: The original author of YOLO stopped working on it🔝

https://news.ycombinator.com/item?id=22995734



コメントを残す

メールアドレスは公開されません。