introduction to yolo detection model

Post on 15-Apr-2017

660 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ディープラーニングの最新動向 物体検出編① YOLOモデル

2017/1/13 株式会社ウェブファーマー

大政 孝充

今回取り上げるのはこれ

[1] J Redmon, et al.”You Only Look Once: Unified, Real-Time Object Detection”arXiv:1506.02640v5 9 May 2016. 物体検出において、1つのモデルで矩形の候補領域と分類を同時に行うことで早い速度を達成した!

解説のポイント

①取り組んだ課題とは ②全体のアーキテクチャ ③学習方法 ④結果どうなった?

解説のポイント

①取り組んだ課題とは ②全体のアーキテクチャ ③学習方法 ④結果どうなった?

Detectionの従来手法は

例えばR-CNNだと・・・

画像から矩形領域の候補を多数選び出し(sliding window)、このそれぞれをCNNにかける →時間がかかるしスマートじゃない

Detectionの従来手法は

人間はひと目見ただけで物体の分類と位置の推定を行っている。

このような仕組みができないだろうか・・・

手前に犬、その後ろに自転車、右奥に車がある!

解説のポイント

①取り組んだ課題とは ②全体のアーキテクチャ ③学習方法 ④結果どうなった?

手法全体の流れ

出力 ①

l  画像全体を    個のセルに分ける l  それぞれのセルは  個の矩形領域を保持する

S × S

S

S

B

B = 3 の場合0.44

0.71 0.08

信頼度:Pr Object( )∗ IOUpredtruth

= Pr Object( )∗ pred∩ truthpred ∪ truth

B1 B2

B3

出力 ②

l  それぞれの矩形領域は中心座標    、矩形の大きさ    、信頼度  を保持する

x, y( )

S

S

h,w( ) F

B1 = x1, y1,h1,w1,F1( )x1, y1( ) h1w1

出力 ③

l  それぞれのセルはクラスごとにそのクラスである確率   も推測する C

S

S

C = Pr Class |Object( )

C1 = Pr Class |OO( ) = 0.14ex)分類が3つの場合

C2 = Pr Class |OO( ) = 0.74車

C3 = Pr Class |OO( ) = 0.12犬

推論の流れ

l  7×7 個のセルがそれぞれ 2 個の矩形候補領域を出力する

l  信頼度 F を太さで表現

B x, y,h,w,F( )

推論の流れ

閾値で信頼度 F の高いものだけ採用

B x, y,h,w,F( )

推論の流れ

対応セルにおける確率の高いクラスと照らし合わせて、矩形領域のクラスを決定

B x, y,h,w,F( )

C = Pr Class |Object( )

モデルのアーキテクチャ

l  24層の畳み込みのあと、2層の全結合

解説のポイント

①取り組んだ課題とは ②全体のアーキテクチャ ③学習方法 ④結果どうなった?

事前学習

まず最初に入力側conv20層までをImageNetデータで事前学習した。

これでGoogLeNetに比肩する性能を獲得した

本学習

l  この事前学習した部分にconv4層と全結合を追加した l  活性化関数は出力層がReLu、他がLeakly Relu

出力マップ

出力マップはグリッド   の大きさで、   、    として チャンネル数は

・・・ C1 C20・・・

・・・ x1 y1 w1h1 F1

B1 B2

7× 7 C = 20B = 25×B+C = 5×2+ 20 = 30

損失関数 全体

l  損失関数は以下のsum squared loss

L = λcoord Ιijobj xi − xi( )2 + yi − yi( )2⎡⎣

⎤⎦

j=0

B

∑i=0

S2

∑ +λcoord Ιijobj wi − wi( )

2+ hi − hi( )

2⎡

⎣⎢

⎦⎥

j=0

B

∑i=0

S2

+ Ιijobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ +λnoobj Ιijnoobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ + Ιiobj pi c( )− pi c( )( )

2

c∈classes∑

i=0

S2

λnoobj = 0.5λcoord = 5

Ιijobj = 1

0

⎧⎨⎩

Ιiobj = 1

0

⎧⎨⎩

・・・object がグリッド  のときi・・・それ以外

・・・ j 番目の矩形領域が  番目のグリッドに中心があるときi・・・それ以外

損失関数 全体

l  各項にあえて名前をつけるなら・・・

L = λcoord Ιijobj xi − xi( )2 + yi − yi( )2⎡⎣

⎤⎦

j=0

B

∑i=0

S2

∑ +λcoord Ιijobj wi − wi( )

2+ hi − hi( )

2⎡

⎣⎢

⎦⎥

j=0

B

∑i=0

S2

+ Ιijobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ +λnoobj Ιijnoobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ + Ιiobj pi c( )− pi c( )( )

2

c∈classes∑

i=0

S2

矩形の大きさ項 矩形の中心座標項

矩形の信頼度項 矩形の不信頼度項 セルのクラス分類項

損失関数 全体

l      ならば・・・

L = λcoord Ιijobj xi − xi( )2 + yi − yi( )2⎡⎣

⎤⎦

j=0

B

∑i=0

S2

∑ +λcoord Ιijobj wi − wi( )

2+ hi − hi( )

2⎡

⎣⎢

⎦⎥

j=0

B

∑i=0

S2

+ Ιijobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ +λnoobj Ιijnoobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ + Ιiobj pi c( )− pi c( )( )

2

c∈classes∑

i=0

S2

矩形の大きさ項 矩形の中心座標項

矩形の信頼度項 矩形の不信頼度項 セルのクラス分類項

L→ 0

それぞれが 0 に収束することが期待できるだろう

0 0

0 0

0

損失関数 矩形の中心座標項

L = λcoord Ιijobj xi − xi( )2 + yi − yi( )2⎡⎣

⎤⎦

j=0

B

∑i=0

S2

∑ +λcoord Ιijobj wi − wi( )

2+ hi − hi( )

2⎡

⎣⎢

⎦⎥

j=0

B

∑i=0

S2

+ Ιijobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ +λnoobj Ιijnoobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ + Ιiobj pi c( )− pi c( )( )

2

c∈classes∑

i=0

S2

教師データ出力マップ

0.2, 0.6( )

0.1, 0.8( )

0.7, 0.2( )

l  出力マップで矩形候補領域の中心座標があるセルだけ計算する(indicator 関数)

l  座標はセル内で正規化 l  学習の進行にしたがっ

て、出力マップの座標が教師データの座標に収束してくれるだろう

0.4, 0.1( )0.9, 0.2( )

0.3, 0.9( )

損失関数 矩形の大きさ項

L = λcoord Ιijobj xi − xi( )2 + yi − yi( )2⎡⎣

⎤⎦

j=0

B

∑i=0

S2

∑ +λcoord Ιijobj wi − wi( )

2+ hi − hi( )

2⎡

⎣⎢

⎦⎥

j=0

B

∑i=0

S2

+ Ιijobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ +λnoobj Ιijnoobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ + Ιiobj pi c( )− pi c( )( )

2

c∈classes∑

i=0

S2

教師データ出力マップ

l  出力マップで矩形候補領域の中心座標があるセルだけ計算する(indicator 関数)

l  大きさは画像の範囲で正規化

l  学習の進行にしたがっ

て、出力マップの矩形大きさが教師データのそれに収束してくれるだろう

0.3, 0.4( )0.6, 0.4( )

0.3, 0.1( ) 0.3, 0.2( )

0.7, 0.6( )0.3, 0.4( )

損失関数 矩形の信頼度項

L = λcoord Ιijobj xi − xi( )2 + yi − yi( )2⎡⎣

⎤⎦

j=0

B

∑i=0

S2

∑ +λcoord Ιijobj wi − wi( )

2+ hi − hi( )

2⎡

⎣⎢

⎦⎥

j=0

B

∑i=0

S2

+ Ιijobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ +λnoobj Ιijnoobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ + Ιiobj pi c( )− pi c( )( )

2

c∈classes∑

i=0

S2

教師データ出力マップl  出力マップで矩形候補

領域の中心座標があるセルだけ計算する(indicator 関数)

l  学習の進行にしたがっ

て、出力マップにおける矩形の信頼度が教師データのそれに収束してくれるだろう

11

1

0.2

0.4

0.7

損失関数 矩形の不信頼度項

L = λcoord Ιijobj xi − xi( )2 + yi − yi( )2⎡⎣

⎤⎦

j=0

B

∑i=0

S2

∑ +λcoord Ιijobj wi − wi( )

2+ hi − hi( )

2⎡

⎣⎢

⎦⎥

j=0

B

∑i=0

S2

+ Ιijobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ +λnoobj Ιijnoobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ + Ιiobj pi c( )− pi c( )( )

2

c∈classes∑

i=0

S2

教師データ出力マップl  出力マップで矩形候補

領域の中心座標がないセルだけ計算する(indicator 関数)

l  学習の進行にしたがっ

て、出力マップにおける矩形の信頼度が教師データのそれに収束してくれるだろう

0.2

0.2

0.4

0.4

0.4 0.4

0.4 0.4

0.4

0.2

0.2

0.2

0.1

0.1

0.1

0.1

0.3

0.3

0.3

0.5

0.5

0.50.5

0.6

0.6

0.6

0.7

0.7

0.7

0.7

0.7

0.8

0.8

0.8

0.8

0.9

0.9

0.9

0.9

0.6

0.20.6

0.6

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

損失関数 セルのクラス分類項

L = λcoord Ιijobj xi − xi( )2 + yi − yi( )2⎡⎣

⎤⎦

j=0

B

∑i=0

S2

∑ +λcoord Ιijobj wi − wi( )

2+ hi − hi( )

2⎡

⎣⎢

⎦⎥

j=0

B

∑i=0

S2

+ Ιijobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ +λnoobj Ιijnoobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ + Ιiobj pi c( )− pi c( )( )

2

c∈classes∑

i=0

S2

教師データ出力マップl  出力マップでクラス分類されているセルだけ計算する(indicator 関数)

l  セルごと、クラスごとにそのクラスである確率の差を計算

l  学習の進行にしたがっ

て、出力マップの矩形大きさが教師データのそれに収束してくれるだろう

個人的にはここが面白い

L = λcoord Ιijobj xi − xi( )2 + yi − yi( )2⎡⎣

⎤⎦

j=0

B

∑i=0

S2

∑ +λcoord Ιijobj wi − wi( )

2+ hi − hi( )

2⎡

⎣⎢

⎦⎥

j=0

B

∑i=0

S2

+ Ιijobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ +λnoobj Ιijnoobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ + Ιiobj pi c( )− pi c( )( )

2

c∈classes∑

i=0

S2

出力には常に s × s × B 個の矩形が存在するが、indicator 関数により、教師データにある矩形の位置、大きさしか学習しない。よって、それ以外の大部分の矩形は学習が進行しても、てんでバラバラ。

出力には常に s × s × B 個の矩形が存在するが、indicator 関数により、教師データにある矩形の位置、大きさしか学習しない。よって、それ以外の大部分の矩形は学習が進行しても、てんでバラバラの位置と大きさを出力する。

学習するのはこの3つの矩形の位置と大きさ

それ以外は学習しない

個人的にはここが面白い

+ Ιijobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ +λnoobj Ιijnoobj Ci − Ci( )

2

j=0

B

∑i=0

S2

∑ + Ιiobj pi c( )− pi c( )( )

2

c∈classes∑

i=0

S2

しかし、学習しない矩形は信頼度が下がるので、 推論の段階では閾値ではじかれる。よって大丈夫。 しかし、学習しない矩形は信頼度が下がるので、 推論の段階では閾値ではじかれる。よって大丈夫。

学習対象の3つの矩形は信頼度が上がる

それ以外は信頼度が下がる

学習の設定項目

学習の設定項目 値

epoch 135 data sets PASCAL VOC 2007, 2012

batch size 64

optimizer momentum

その他 dropout data augmentation

解説のポイント

①取り組んだ課題とは ②全体のアーキテクチャ ③学習方法 ④結果どうなった?

検出例

l  写真や絵画でちゃんと検出できている

精度の比較結果

l  RCNNやDPMモデルよりは性能がいい

速度の比較結果

l  検出速度はYOLOの早いバージョンが一番

まとめ

l  YOLOモデルは矩形の候補領域とそのクラスを同時に同じCNNで学習する手法である

l  この手法により、まぁまぁいい精度でめちゃめちゃ

早い検出速度を達成した

おわり

top related