SPPnetについてとTensorflowでの畳み込みフィルターの観察

前回の続き

SPPnetを利用した物体検出では入力画像から1回だけ畳み込みの操作を行うことで、大幅な計算時間の削減が可能ということで感動した。

他のサイトの情報や、論文の内容を読み直したりして以下のような手順でSPPnetによる物体検出器を作成しているのかなと考えた。

  1. 入力画像をCNNに渡して畳み込みの操作まで行い、特徴マップを得る。
  2. 入力画像からSelectiveSearch法などで、Region Proposal(物体の候補位置、領域)を得る。
  3. step1で得た特徴マップの対応するRegion Proposal の部分でSPP層の操作を行う。
  4. 各Region Proposalのプーリング結果を出力層に渡して分類結果を得る。

こんな感じかな。
いざTensorflowで実装するぞと意気込んだけど、step3をどう実装すればいいか詰まった。
f:id:Owatank:20170904181723p:plain
入力画像を 224x224 サイズ、特徴マップのサイズを 14x14 とすると入力画像のRegionProposalの座標をどう特徴マップのサイズ内で変換すればいいかわからない。特徴マップのある始点と終点での切り抜きもできるかわかってないけれども。
単純に 224 -> 14 みたいに変換すればいいのかな?特徴マップはフィルター数も多いので悩む。設計するための知識が圧倒的に足りない。。

Fast-RCNNの論文を読み進めてまた悩むことに。

それとは別によく参考書などに畳み込みフィルターなどの小さいマップの画像がよく載っている。
観察してみたかったのでSPPnetでのネットワークで畳み込みフィルターの観察をしてみることにした。

コードはここ
github.com

大体はフィルター適用後の結果を出力してしまった。最後にフィルター自体を出力した。
フィルター自体はf:id:Owatank:20170904183222p:plain
モザイクばかりでエッジなどは見た限りわからない。こんなフィルターでも適用後は
f:id:Owatank:20170904183413p:plain
入力画像の形が残っているので不思議だ。。