対象

Faaster-RCNN,SSD,Yoloなど物体検出手法についてある程度把握している方.
VGG16,VGG19,Resnet,MobileNetなどをSSDに組み込むときの参考が欲しい方.
自作のニューラルネットを作成している方.

1.VGG16とは

オックスフォード大学のVisualGeometoryGroup(VGG)が開発した16層のレイヤーからなるニューラルネットワークであり,他の多くの物体検出手法ではいまだにVGG16がよく使われている.
VGG16.png

筆者がなぜVGG16と書いているかというと,SSDにはそのほかのフレームワークによって精度と速度のトレードオフではあるが,目的に合わせて活用することができるからである.(実際の実装に関する情報はとても少ないのだが・・・)

2.VGG16-SSD

この図は見飽きたという方もいるだろうが,YoloとSSDの比較である.
どちらも畳み込み層とプーリング層からなるネットワークである.今回はYoloについては触れないこととする.
ssdvsyolo.jpg

だいたいどれも同じで,FC層を取っ払ってDetection層を追加している.
カーネルサイズは1,3の組み合わせが主流である.

3. SSDv2AveragePoolling版を試した.

環境構築に関してはほかの方があげてらっしゃるので,そちらを参考にしてくだされー.
https://www.kunihikokaneko.com/dblab/keras/snowmasaya.html
筆者の環境
Keras v2.1.6, Tensorflow v1.6.0 GPU GTX1080

shibuya.PNG

以下の動画は本章とは関係ないが筆者は自動運転に関する研究をしているので参考までに.
以下リンク↓
ドラレコからの検出
car.PNG

4.考察

一般的にObjectDetectionに関してFaster-RCNN,Yolo,SSDのどれも小さい物体の検出は苦手としており,苦労している方も多いであろう.では別のフレームワークにと考える前に原因を考察してみよう.
SSDはconv4-8+poolingの各層から予測しているため,マルチスケールな検出ができる.厳密には畳み込み層4群3番目が一番小さい物体の検出をしており,5,6,7,8と番号が上がるにつれて検出できる物体は大きくなっていく.つまり,小さい物体を検出したければ4番と5番を何とかしよう.(具体的にはDeconvolutionを使って特徴マップを加算して融合して・・・・・( ̄。 ̄ )ボソ....

5.終わりに

よし,記事を書こう!と思ってから投稿するまでモチベーションを保てなくて,気づいたらはや2か月(笑).書き途中だったが,とりあえずあげてみた.考察の内容について何とかしたものについては後々載せていきます...研究のほうが楽しいけど...最近思うのが,DeepLearningは海外のほうが進んでる気がしてきて,ってまあTensorflow,Kerasは海外発だし...言語の壁なのかなあ?まあ自分には関係ないけど...

 参考

https://qiita.com/God_KonaBanana/items/2cf829172087d2423f58
https://arxiv.org/pdf/1409.1556.pdf
http://aidiary.hatenablog.com/entry/20170104/1483535144
https://www.kunihikokaneko.com/dblab/keras/snowmasaya.html

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.