Edited at

YOLOv3 論文訳


YOLOv3論文訳

SSDの3倍速いことで今流行りのYOLOv3の実装にあたって論文を読むことがあると思いますので,簡単な日本語訳でまとめました.詳しくは無心でarXivの元論文を読むことをお勧めします.誤訳はコメントで教えてね❤️

※著者は洋画吹き替えにインスパイヤされているため,一部訳がフランクな箇所があります.

百聞は一見に如かず.この記事を読む前に,YOLOの作者が説明するTED動画を見ることをお勧めします!

Qiita

・元論文(yolov3):https://arxiv.org/abs/1804.02767

・少し概要書いてるサイト:https://sosogu.net/2018/04/05/新しくなったyolov3を使ってみよう/

・コード元(C言語):https://pjreddie.com/darknet/yolo/


Abstract

 ネットワークは前より少し大きくなったけど,精度は良くなったので心配するんじゃ〜ない.320x320だと検出精度の同じでSSDの3倍早いんだ.

YOLOv3
SSD

22ms
61ms

28.2mAP
28.0mAP

※使用しているGPUはPascal TitanX,データセットはCOCO test-dev 

[参照サイト: https://pjreddie.com/darknet/yolo/]

※mAP = Mean Average Precision

[参照サイト:https://petitviolet.hatenablog.com/entry/20110901/1314853107]

古いけどIoU(Intersection-over-Union)ratioが0.5では,YOLOv3はかなりいいんだ.

RetinaNetにおける$198ms$で$57.5AP_{50}$という速度・精度に対して,Titan Xを用いて比較すると,なんと$51ms$で$57.9AP_{50}$を達成したんだよ.このようにYOLOv3は3.8倍も速いんだ.

※IoUは報酬関数の一種で検出精度を表す指標

[参考サイト:https://arxiv.org/pdf/1512.04412.pdf]


1.Introduction

 誰だって気が乗らなくて1年くらい手を引くってことあるじゃん?まじで今年全然研究してなかったんだよね.そんでたくさんの時間をTwitterに使ってた.(←本当に書いてあるので気になる方は原文のarXivを読んでみてください)まぁ少しGANsってやつで遊んだかな.

昨年の論文[12][1]から少し進捗があって,YOLOを少しうまく変えたんだ.しかし正直なところ,超おもしれー!!みたいなことは全くなくて,YOLOをもっと良くする変更をすこーしだけ行ったんだ.あと他の人の研究の手伝いもしてたかな.

実際,それが今回ここに書いてるものなんだ.僕たちはcamera-ready(最終版投稿)の締め切り[4]がある.そして僕がYOLOに行なったいくつかのランダムなアップデートを引用する必要があるけどソースが無い.だからTECH REPORT(技術報告書)の準備をさせてね!

スクリーンショット 2019-03-20 0.33.22.png

図1:

僕たちは損失関数の論文[9]からこの図を採用した.見ての通りYOLOv3はかなり速いことがわかる.実行時間はM40またはTitanXで,基本的に同程度の性能を持つGPUである.


2. The Deal

 YOLOv3の取り扱い:僕たちは他よりも良い新しい識別ネットワークを学習した.システム全体を最初から見直すだけで、すべてを理解できるようになるよ.(end to endのネットワークということ)


2.1. Bounding Box Prediction

 YOLO9000(9000クラスのオブジェクトを検出する前のversion.純正のYOLOv2亜種.)に続いて僕たちのシステムは,次元クラスタをアンカーボックスとして使用するバウンディングボックスを予測する[15].

そんでそのネットワークはバウンディングボックスの4つの座標である$t_x, t_y, t_w, t_h$を予測する.

セルが画像の左上隅から($c_x, c_y$)だけオフセットされていて,バウンディングボックスpriorが幅と高さ$p_w$, $p_h$を持つ場合,予測は次のように対応するよ.

b_x =σ(t_x)+cx\\

b_y =σ(t_y)+cy\\
b_w =p_we^{t_w}\\
b_h = p_he^{t_h}

 学習している間,自乗誤差損失(squared error loss )の合計を使うんだ.もしいくつかの座標予測へのground truthが$\hat{t_✳︎}$ならば,僕たちのgradientは(ground truth value)-(予測),つまり, $\hat{t_✳︎}−t$となる.

このground truth valueは上式を逆転させることによって簡単に計算することができる.

 YOLOv3は,ロジスティック回帰を使って,それぞれのバウンディングボックスのためのobjectness scoreを予測する.バウンディングボックスprior(幅と高さ)が他のどのバウンディングボックスのpriorよりもground truth objectと重なる場合,これは1になります.

スクリーンショット 2019-03-20 0.33.34.png

図2 dimension priorsを用いたバウンディングボックスと位置予測:

僕たちはボックスの幅と高さをクラスタ重心からのオフセットとして予測する.僕たちはシグモイド関数を用いたフィルタアプリケーションのロケーションに関連してボックスの中心座標を予測する.この図は紛れもなく[15]から剽窃したものである.

もしバウンディングボックスpriorが最良ではないが、ground truth objectとある閾値以上重なっている場合、僕たちは[17]に従って予測を無視する.僕たちは0.5の閾値を用いる.[17]とは異なり,僕たちのシステムは1つのバウンディングボックスがそれぞれのground truthに対して事前に割り当てられるだけである.もしバウンディングボックスがground truth objectに事前に割り当てられないならば,それは物体らしさ(objectiveness)だけでなく座標損失がないかもしくはクラス予測がないことを被ります.


2.2. Class Prediction

 それぞれのボックスはバウンディングボックスが含んでいるかもしれないクラスをmultilabel classificationを用いて予測する.僕たちはsoftmaxが良いパフォーマンスの役に立たないと分かったので使わない.代わりに,independent logistic classifierを単に使うんだ.また学習の間,クラス予測のためのbinary cross-entropy lossを使うよ.

 

 このformulation(公式化)は,Open Images Dataset[7]のような複雑なドメインへ移行した時に助けてくれる.

このデータセットではたくさんの重なったlabels(例えばWoman and Person)があるんだ.Soft maxを使うのは,それぞれのボックスが一つのクラスを持つケースばかりでは無いという仮定によるものなんだ.Multilabel approachはデータをより良くモデリングします.


2.3. Predictions Across Scales

 YOLOv3は3つのことなるスケールでボックスを予測する.僕たちのシステムはピラミッドネットワーク特徴に類似のコンセプト[8]を用いて,それらのスケールから特徴を抽出する.僕たちの基本の特徴抽出器からいくつかのconvolutional layersを加える.それらの最後はバウンディングボックスやpbjectnessやclass predictionsをencodingしている3-d tensor を予測する.COCO[10]を用いた僕たちの実験では,3つのboxをそれそれのスケールで予測するので,4つのバウンディングボックスオフセットと1つのobjectness予測と,80class予測のためのtensorはNxNx[3*(4+1+80)]である.

 次に2レイヤー前から特徴マップをとってそれを2xによってupsampleする.また,より早くネットワークの中から特徴マップを取得し,それをconcatenationを用いて,upsampleした特徴と合わせる.この手法はより有意義なセマンティック情報をupsampleした特徴から得ることを許し, finer-grained(きめ細かい)情報をより早く特徴マップから得ることを許す.それからさらにいくつかconvolutuonal layerをこれの組み合わさった特徴マッププロセスに加えて,今はtwice the sizeだけれども.最終的に類似のtensorを予測する.

 僕たちは同じデザインをもう一度最終スケールのためのボックスを予測するために行う.したがって、第3スケールの予測は、ネットワークの初期段階からのすべての事前計算および細かいフィーチャから利益を得ることができる.

 僕たちはバウンディングボックスproprsを決めるためにまたk-means clusteringを使う.私たちは、9つのクラスターと3つのスケールを任意に選んでクラスターをスケール全体に均等に分割します。COCOdatasetでは9クラスタは(10×13),(16×30),(33×23),(30×61),(62×45),(59× 119), (116 × 90), (156 × 198), (373 × 326).


2.4. Feature Extractor

僕たちは特徴抽出をするための新しいネットワークを使う.新しいネットワークはYOLOv2,Darknet-19,と気を衒った残りのネットワークスタッフのなかで使われたネットワークの間のハイブリットアプローチである.僕たちネットワークは連続的な3x3と1x1のconvolutional layersを使う,しかし今はいくつかのショートカットコネクションを使っており,それは著しく大きい.それは 53convolutional layersを持つ.なので僕たちはそれをDarknet-53と呼ぶ.

スクリーンショット 2019-03-20 0.33.48.png

表1 Darknet-53

スクリーンショット 2019-03-20 0.33.59.png

表2 バックボーンの比較:

かなり多くのoperations, floating point operations per second, FPS for various networksなど様々なネットワークの精度.

 この新しいネットワークはDarknet-19よりもっとパワフルなだけでなく,ResNet-101やResNet-152より効率的である.ここでいくつかのImageNetの結果を示す.

 それぞれのネットワークは全く同じセッティングで学習され,256x256のsingle crop accuracyでテストされた.Run timesは256x256でのTItan Xにおいて測定された.このためDarknet-53はpar(parってなんだろう??わかる人いたらコメントください)においてstate-of-the artな識別器を用いるだけでなく,より少ない浮動小数点operationsとより速い速度を示した.Darknet-53はResNet-101よりも良く,1.5倍速い.Darknet-53はResNet-152と似たパフォーマンスを持ち,2倍速い.

 DarkNet-53は1秒あたり最も高い浮動小数点operationsを記録した.これはネットワーク構造がよりGPUを使うことを意味しており,それをより効率的に評価するため速い.それはほとんどResNetsが多すぎるlayersを持ち,全く効率的ではないためである.


2.5. Training

僕たちはhard negative miningやそのstaffを全く使うことなくfull imagesにおいても学習する.僕たちはmulti-scake学習,大量のデータ増大,batch normalization, すべてのstandard stuffを使う.僕たちは学習とテストのためにDarknet neural network framework[14]を使う.


3. How We Do

これ以降は手法の説明でないため省略しています


通常のYOLOについてはこちらの記事で日本一論文に忠実に翻訳しています.