Tensorflowを用いて物体検出の実装を目指す-RCNN
前回に続いて今回はRCNNです。
まずは論文を頑張って読みました。個人的にまとめたスライドを上げておきます。
英語が苦手なので翻訳に頼ってしまった。。BB回帰のところの実装がわからなかったので探したがなかったので今回は無しで実装することに。
RCNNでは要約すると3つのモジュールが必要になるらしい。
一つ目の提案領域の生成には論文通りSelectiveSearch
を使うことにした
SelectiveSearchを実装できるほどアルゴリズムに強いわけでもコーディングスキルがあるわけでもないのでアルパカさんのライブラリを利用することに。大変便利だ・・・
二つ目のCNNにはAlexNetと呼ばれるCNNを使用した。コードはこちら
流石に層が深すぎて学習に時間がとてもかかった。いいインスタンスを借りれる機会があって良かった。
AlexNetの論文を読んでいないので、実装はクラスキャットさんの記事やネットワークのイメージ図を見たりして構築した。
実装しててどうしてもわからなかったのはtf.nn.local_response_normalization
の部分だった。今度ゆっくり調べたい。
三つ目のSVMは、この論文でSVMの存在を知ったレベルで知識がないのでこの部分は二つ目のCNNに識別の部分も任せることにしてみた
モジュールの説明はここまでで、結果はこちらにおいておきます。
結果はこんな感じになった
CNNのモデルが悪いのか変なところも囲んでしまっていてイマイチ。。。
論文ではNon-Maximum-Suppressionと呼ばれるアルゴリズムを導入してるよと書いてあり、このアルゴリズムによって各クラスの四角の重複をいい感じに抑制してくれる。アルゴリズムの内容についてはこちらのサイトを参考に
まだ勉強不足のせいかBoundingBox回帰の実装ができなかった。訓練データにground-truth boxを付与してないからそれもあるのだが。
BoundingBox回帰について詳しい説明などがあるサイトあれば教えて欲しいです。
次はSPP-net
?とやらを調べつつFast-RCNN
を目指す。