ディープラーニングについてディープにラーニング。

思いっきり、自分が学んだことのアウトプットしていきますが、何分初心者。もし何かアドバイス等頂けましたら幸いです!

物体検出のそれぞれの特徴について

物体検出はとても難しい。
それぞれの特徴について、
今一度整理します。


畳み込みの用語

カーネル:フィルターのこと
ストライドカーネルの移動感覚のこと
パディング:入力データに対して、周囲を0で囲むこと。

VGG16モデルについて

f:id:kawam0t0:20191222214805p:plain

VGGはConv層とマックスプーリング層で構成されている代表的なネットワーク。
構成としては、
5ブロックの構成で
それぞれ3×3のConv層とマックスプーリングの5層で構成されている。
チャネル数にも注目が必要。
ざっくりと、深い層ほど、特徴量を512にするので、とても分類に強くなる。
結構転移学習させる対象とされることが多い。


Conv層で特徴マップの縦×横のサイズは変更せずに、チャネル数だけを変える(=パディングは1)
つまり、出力データのサイズは変わらない。
そして、マックスプーリングを通過したら、縦×横が半分になる。
その半分になった分、チャネル数で保管していく。
最終的には、7×7×512の特徴マップに。(特徴量が大きくなる)

物体検出の紹介

FasterR-CNN

f:id:kawam0t0:20191222220110p:plain

CNNとFasterR-CNNのまさかのCNN2段構えの構造。
2つもCNNを構えているから、とても精度が良い。
ベースはVGG16を持っていて、一つ目のCNNは14×14の特徴マップでアンカーボックスを作成。一つ目のCNNでは、物体がどこに映っているのか?を検出し推論。
学習自体は2個目のCNNで何が移っているか、分類と回帰を行って、物体を検出する。
こんな複雑なネットワークのため、
精度はいいが、遅い。

YOLOv1

f:id:kawam0t0:20191222221043p:plain

初めて、1ステージで完結できるモデルができた。
つまり、CNNを2個のせたりしなくてよいモデルに。
→速度が一気に向上。

特徴としては、
まず448×448×3の画像を入力していく。そして、ストライドを2にするので、
どんどん、特徴マップは小さくなっていくが特徴量を倍増させる。
ただし、アンカーボックス(デフォルトボックス)という概念を取り入れていなかったため、直にバウンディングボックスをあてがった。
その結果、精度がいまいちに。
アンカーボックスはその物体があるかも、の指標になる。

SSD

f:id:kawam0t0:20191222221439p:plain

ベースはVGG16のモデルであるが、追加のネットワークによって、合計6層の特徴マップを使用。
今回はこのモデルを使ってセミナーでは物体検出を行うので、
ちょっと具体的に記載する。

VGG
写真サイズ(300×300×3)


Conv(3,3,512) 写真サイズ(38×38×512) セルが38×38だからもう少し細かくないとなぁ…(小さな物体検出)

Conv(3,3,512) 

Pooling

Conv(3,3,1024) 写真サイズ(19×19×1024)

Conv(3,3,1024)

Pooling
↓(ここからExtraレイヤー)
Conv(3,3,512) 写真サイズ(10×10×512)

Conv(3,3,512)

Conv(3,3,512)

Pooling

Conv(3,3,256) 写真サイズ(5×5×256)

Conv(3,3,256)

Conv(3,3,256)

Pooling

Conv(3,3,256) 写真サイズ(3×3×256)

Conv(3,3,256)

Conv(3,3,256)

Pooling

Conv(3,3,256) 写真サイズ(1×1×256) セルが1×1の大きな物体の検出

Conv(3,3,256)

Conv(3,3,256)

アンカーボックス(デフォルトボックス)を取り入れる。
それによって、バウンディングボックスが
セルサイズ×セルサイズ×6とか4とかで合計8732個のバウンディングボックスの生成に成功。
これにより、
精度もよくなったし、速度もいい感じに。(ちょっと小さめの物体検出には弱いけど)

FPN

f:id:kawam0t0:20191222222717p:plain

224×224の画像から、ボトム安比で特徴マップを縮小していく。
そして、更にトップダウンで特徴マップを拡大していく。
これは畳み込みではなくって、単純に画像の解像度を小さくしたり大きくしたりする。
オリジナル(入力の際に入ってきた画像データ)をそのまま拡張したりするから位置が変わってくる。

そのため、横の矢印で、位置を補強してあげていく。

Yolov3

f:id:kawam0t0:20191222222834p:plain


なんと、全部で106層のネットワークからなり、86層以降で特徴マップを拡大していく。(小さな物体検出を行っていく)
まずは416×416×3チャネルの画像を畳み込みで13×13のセルに落とし込む。(大きな物体検出)
そこから26×26の少し細かい中くらいの物体検出を行った。

ちなみに1つのセルに対して、アンカーボックス(デフォルトボックス)は3つ。
でも、52×52のセルにアンカーボックスが3つずつ入るので、できるバウンディングボックスは
最後の層だけで8112個とかなり細かくまで見ていけるようになった。
まじで細かい。


それぞれ、いい感じの物体検出のモデルで
本当に尊敬する。

今回はSSDを使うができたら、
YOLOV3を使ってみたい気もする。