個人的なメモ

技術メモがメインです.本ブログはあくまで趣味です.

PyTorchによるディープラーニング

PyTorchによるディープラーニング

ディープラーニングの勉強に関するメモです. 使用しているのはこの本.

https://honto.jp/netstore/pd-book_29719626.html

第二章 物体検出(SSD)

SSD(Single shot multibox detector)の内容.

物体検出タスクのアウトプット 1.画像のどこに物体が存在するのかを示すバウンディングボックスの位置と大きさ情報 2.書くバウンディングボックスが何の物体であるのかを示すラベル 3.その検出に対する信頼度

SSDによる物体検出のステップ 1.画像を300×300にリサイズ 2.デフォルトボックス8732個を用意 3.画像をSSDのネットワークに入力 4.信頼度上位のデフォルトボックスを抽出 5.オフセット情報による修正と被りの除去 6.一定の信頼度以上のものを出力

最初はVGGだが,途中から畳み込む回数が異なる複数の特徴マップを作る.その特徴マップにおいてサイズそれぞれことなるので,空間的に大きな特徴と小さい特徴を分けて抽出できる.

  • 実装

PytorchのModuleListを使って各モジュールを定義すると実装上分かりやすい.

Maxpooling層については,'MC'はceilモードのMaxpooingになる.Maxpooling層は出力テンソルのサイズを計算する際,デフォルトではfloorモード(床関数モード)となっており,整数のテンソルサイズを求める際に小数点を切り捨てるが,cailモード(天井関数モード)にすると小数点切り上げになる.

ReLUの引数inplaceは,ReLUへの入力をメモリ上に保持するか,それとも入力を書き換えて出力にしてしまい,メモリ上に入力を保持しないかを示す.変数inplaceをTrueにするとメモリを書き換えるため,メモリ上に入力を保持しない設定となり,メモリを節約できる.

L2Norm層は,チャネルごとに特徴量マップの統計的性質が異なる点を正規化する. チャンネル方向に正規化をすることで,チャネルごとに特徴量の大きさが著しく異なる状況を修正することができる.

DBox(デフォルトボックス)の種類は 4 種類の設定の場合は,小さい正方形,大きい正方形,1:2の比率の長方形, 2:1の比率の長方形. 6種類の場合はさらに,3:1と1:3の比率の長方形の形のDBoxを用意する.

Non-Maximum Suppressionにより,冗長なBBoxを削除し,1つの物体に対して1つのBBおxのみを残す. 具体的には,BBox同士のかぶっている面積がしきい値を超える場合には,同じ物体への冗長なBBoxと判定する.

SSDの損失関数を定義するにあたり,まず8732個のDBoxから学習データの画像の正解BB0xと近いDBoxを抽出する. 抽出する際はjaccard係数を使用する. jaccard係数は2つのBoxの総面積( BBox ∪ DBox )に対するBBoxとDBox が被っている部分の面積(BBox ∩ SBox )の割合である. jaccard係数は0~1の値をとり,2つのBoxが完全に一致していればjaccard係数は1になり,完全にはずれていると0となる.

jaccard係数が0.5以上となる正解BBoxを持たないDBoxの場合は,そのDBoxをNegative DBoxとし,そのDBoxの予測結果の教師データとなる正解物体のラベルを0とする.