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

YOLOv3:精度は本当に良くなったのか?論文から読み解く改善の要点

thumb image

YOLOv1YOLOv2を発表したJoseph Redmonが最後に手がけたバージョンがYOLOv3です。

論文の中では「小さな改善がいくつか行われた(just a bunch of small changes that make it better)」と本人は述べています。また、「ほとんど他の人の良いアイデアを拝借した(We mostly took good ideas from other people)」とも言っています。ちょっと自虐的な印象を受ける論文になっています。

また、MS COCOがmAPの計算の仕方を変更したことについての文句も見受けられます。この辺は、以前の記事で開発をやめた理由を探った時にも触れているので、今回はYOLOv3の技術面にフォーカスします。どんな変更があったのでしょうか?

1. YOLOv3の要点🔝

この論文ではYOLOv3に関する幾つかの要点が説明されています。

1.1. 物体位置の予測🔝

物体位置(矩形領域)の予測についての解説がありますが、これはYOLOv2の時と同様の内容になっています。物体位置の中心を計算するときにシグモイド関数($\sigma$)を使用しており、値を0から1に限定するロジスティック回帰になっています。

画像元:論文

これを引き合いに出しているのは、論文の後半でロジスティック回帰を線形回帰に切り替えた実験を行ったのも理由かもしれません。関連してYOLOv2からの図も引用されています。

画像元:論文

また、損失の計算では以下の方法で2乗誤差の和を使ったと書かれています。

正解の値$(b_x, b_y, b_w, b_h)$から$(t_x, t_y, t_w, t_h)$の値を逆算したものを正解値のベクトルを$\hat{t}_*$とし、予測値のベクトルを$t_*$とすれば、損失$\frac{1}{2}(\hat{t}_*-t_*)^2$の勾配は$\hat{t}_* – t_*$となります。

これはシグモイド関数を通す前の値で損失を計算することで勾配消失が起こりにくくなるようにしたものと考えられます。

また、正解の矩形領域とのIoUが一番高いアンカーに物体があるとしています。つまり、スコア(物体があるかどうかの確率)の予測はそのアンカーに対して1となることが望ましいということです。他のアンカーを無理矢理に正解の矩形領域にするのではなく、もともと一番近いアンカーを微調節するように学習させることになります。

よって、他のアンカーをベースに予測されたもので正解と0.5IoU以上のものは訓練では無視されました。一つの正解につき、1つのアンカーしか使わないようになっています。

なお、アンカーがどの正解領域にも対応していない場合は、物体位置の損失計算には含まれず、スコアの計算のみが使われました(スコアは0であるべき)。

1.2. クラス確率予測🔝

クラス確率の予測ではソフトマックス関数ではなくロジスティック関数を使ったと書かれています。これはOpen Imagesデータセットなどではクラスが重複しているケース(例えば、「女」と「人」など)があり、ソフトマックス関数を使うとクラス同士が排他的な予測になるので適していないからです。

全てのクラスに対して別々に「らしさ」を判断することになり、損失関数にバイナリ交差エントロピーが使われました。

1.3. Darknet-53🔝

特徴抽出器としてDarknet-53が使われています(YOLOv2ではDarknet-19でした)。1x、2x、8xなどと書いてあるのはその倍数分の層があるという意味です。

画像元:論文

19層から53層に増えましたが、ResNet-101やResNet-152よりも速く精度も同じくらい良くなっています。

画像元:論文

Joseph Redmonによると「ResNetは層が多すぎで効率がよくない(ResNets have just way too many layers and aren’t very efficient)」とのことです。

1.4. 3つのスケールでの予測🔝

3つのスケール(サイズ)からの特徴マップを使うことで細部の特徴と全体の特徴を利用しています。

論文でも言及されていますが、FPN(feature pyramid networks)を参考にしています。ちなみに、FPNはFaster R-CNNを開発したRoss GirshickKaiming Heらによるものです。

YOLOv2の時と同様にk平均法を使ってアンカーのサイズを決めていますが、YOLOv3はk=9を選んでいます(YOLOv2ではk=5でした)。これを3のスケールで使うので、一つのスケールで3つのアンカーのサイズが使われています。

スケール順序縮小率アンカーボックスサイズ
11/3210×13、16×30、33×23
21/1630×61、62×45、59×119
31/8116×90、156×198、373×326

MS COCOの物体検出には80クラスあります。最後の畳み込みの出力サイズがNxNだとすると、1つのスケールに対して$N\times N\times [3 \times (1 + 4 + 80)]$(スコアに1値、矩形領域に4値)になります。

よって各スケールからの出力は255(=3×85)チャンネルになっています。

下図はMediumの記事から引用しました。

画像元:Medium

入力画像が416×416だと、3つのスケールでの予測が出力が13x13x255、26x26x255、52x52x255となります。よって、予測される矩形領域が3x(13×13+26×26+52×52)=10,647にも及びます。

YOLOv2では13x13x5=845でした。よって、YOLOv3はYOLOv2よりも遅くなっています。

速度を少し犠牲にして精度を上げることを選んだようです。

2. 性能はどうなったか🔝

ここではMS COCOのmAPの計算方法が$AP_{50}$でなく$AP@[.50:.05:.95]$になったために他のモデルより性能が悪くなったと少し非難気味に述べています。

画像元:論文

上図では[A]がないのが気になりませんか?

この図の元になっている図はフォーカル損失(Focal Loss)の論文からのものです。RetinaNetは同じ論文で発表されたモデルです。この論文、実はRoss GirshickとKaiming Heによるものです。下図はその論文から引用しました。

画像元:論文(Focal Loss)

この図ではYOLOv2が[A]として表に入っているのですが、AP(mAPのことをMS COCOではAPと呼ぶ)がグラフからははみ出てしまうのでプロットされていません。つまり、YOLOv2は速いけど精度が悪いと言っています。

その図をJoseph Redmonはわざわざ引用してYOLOv3のグラフを含めたものを掲載しました。何か意地のようなものを感じるのは私だけでしょうか。Joseph RedmonとRoss GirshickはYOLOv1では共同著者だったのですが…

さらに、Joseph Redmonはベンチマークが以前の$AP_{50}$だったらYOLOv3はとても強いと言及しています。しかも、同じ図を使って説明しています。

画像元:論文

YOLOv3の精度が$AP@[.50:.05:.95]$で良くない理由としてIoUの閾値が高くなるほど物体位置の不正確さが露呈しているとしています。大まかにはあっているけどぴったりじゃないという感じでしょうか。

また、以前のYOLOは小さい物体を見逃すことが多かったが、YOLOv3では逆に小さい物体だけを対象にしたベンチマーク$AP_S$での成績が良くなっています。これは3つのスケールからの予測を使ったおかげだそうです。なぜ、大きな物体の方が精度が悪いのかは今後の課題としています。

いずれにせよ、YOLOv2より精度が高くなりました。また、スピードも相変わらず速いです。

3. やってみたが上手くいかなかったこと🔝

3.1. アンカーサイズによる相対位置の予測🔝

矩形領域の$x, y$を予測する際に、アンカーのサイズの(小)数倍として線形回帰するようにしたのですが、訓練が安定せず上手くいかなかったそうです。

3.2. 線形回帰による物体中心位置の予測🔝

ロジスティック回帰の代わりに線形回帰で物体の中心位置からの相対位置を予測してみることを試しました。結果としてmAPが数ポイント悪くなりました。

3.3. フォーカル損失🔝

フォーカル損失は、YOLOやSSDのようなE2E(エンド・ツー・エンド)のモデルの精度がFaster R-CNNやMask R-CNNなどのような2段階(領域選定を間に挟む)のものより悪い理由を考えたのちに、E2EであるFPNを開発する際に使った損失関数です。

物体検出では背景となる部分が多いので、全体の特徴マップを扱うE2Eのモデルではクラスのバランスが悪くなります。その反面、2段階モデルでは領域選定をするため、背景の部分がすでに取り除かれており最後の物体位置の検出などでの精度が良くなると考えられました。

よってフォーカル損失では、背景など簡単に識別できるものに対しての損失を小さく、より難しい物体から損失を大きくする工夫がなされています。

これをYOLOv3でも試したところ、mAPが2ポイント下がりました。これについては理由はよくわからないとのことです。

3.4. 2重IoU閾値🔝

Faster R-CNNでは2つのIoU閾値が使われていました。もし、予測と正解とのIoUが0.7より上であれば正解を予測したものとみなされ、0.3未満なら正解を予測したものではないとされました。それ以外のIoUの場合は無視されています。

YOLOv3でも同じような方法を試したが、上手くいかなかったそうです。これも理由はよくわかりませんでした。

4. 批判の矛先🔝

最後に、Joseph RedmonはMS COCOのベンチマークを非難します。人間の目には0.3IoUも0.5IoUもほとんど区別つかないのだから0.5IoUから0.95IoUまでの閾値で計算したAPの平均を取ることに意味があるのかと問いかけています。

さらに、物体検出器をなんの目的で使うのかと疑問を投げかけ、FacebookやGoogleやアメリカ軍までを批判しています。

この辺は「YOLOの開発をやめたJoseph Redmonの気持ちとは?」に書いたので繰り返しませんが、論文から伝わる異常なテンションの原因が見え隠れしているようです。

最後に「Twitterはやめたから構わないでくれ」と結んでいます。


でも、まだTwitterやってますね。

5. 参照🔝

5.1. YOLOv3: An Incremental Improvement🔝

Joseph RedmonAli Farhadi

https://arxiv.org/abs/1804.02767

5.2. Feature Pyramid Networks for Object Detection🔝

Tsung-Yi LinPiotr DollárRoss GirshickKaiming HeBharath HariharanSerge Belongie

https://arxiv.org/abs/1612.03144

5.3. Focal Loss for Dense Object Detection🔝

Tsung-Yi LinPriya GoyalRoss GirshickKaiming HePiotr Dollár

https://arxiv.org/abs/1708.02002v1

What’s new in YOLO v3?

Ayoosh Kathuria

https://towardsdatascience.com/yolo-v3-object-detection-53fb7d3bfe6b



コメントを残す

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