わんちゃんの顔を検知するFaster R-CNN で物体検出実装の理解を深める【PyTorch】

ただレポジトリで○○.pyを実行するのでなく、もうちょっと(モデル構造以外の部分で)中身の理解を深めようとPyTorch の物体検出チュートリアル等を参考にお勉強をしています。チュートリアルを参考に、torchvisionの faster rcnn でわんちゃん(と猫)の顔を検知させるように学習を回してみました。

 

〜カスタムデータセットクラス作成まで

ここまでは前回の記事で書いたので、コードだけ貼ります。

PascalVOC 形式のアノテーションデータから、物体検出用のカスタムデータセットを作成する【PyTorch】

後でファイルを分けて整理したい。

※ どうにもtorchvisionのFaster R-CNNを使う時は、ラベルが背景クラスを0として扱うそうで、今回識別させたいクラスは1から始める必要があるようです。

データローダーを作成する

データセットを7:3にランダム二分割して、train_dataloader, val_dataloaderを作成。

データローダー作成の際に、collate_fn引数でデータをバッチにする時の方法をカスタマイズができるそうで、ここが大事なよう。理解不足です。

チュートリアルでは、レポジトリのutils.pyの中のcollate_fn関数を呼び出していて、それをそのままもってきました。

https://github.com/pytorch/vision/blob/master/references/detection/utils.py

 

モデルをつくる

torchvision 組み込みの物を使います。

この数行は何をしているの?というところは↓の記事にメモを残しました。

PyTorch の object detection チュートリアルでつまったところを残しておく

 

一度、学習前にどんなどんな予測をするか見てみたいと思います。

・推論結果の中には、boxes(bounding box), scores(各bbox の信頼スコア), labels(各bboxのラベル) の3つが含まれています

・信頼スコアが閾値より上のもののみ表示します(今回は閾値0.5)

・Pillow のメソッドでbboxを描画しています。

 

当然ですが、全然デタラメな予測になっていますね。

 

学習を5エポックだけ回す

今回使っているデータは、Oxfordペットデータセットから犬猫およそ200枚ずつとってきたものです。Oxford-IIIT Pet Dataset

学習時間は Google Colab のGPUで 10分くらい。

では改めて、推論してみると・・・

 

圧倒的な進歩を感じます。たった10分なのにすごい。

 

各種評価指標の値を算出したいのだけれど、ここがまた大変そう、、今回はここまでにしよう。

 

最後まで読んでいただきありがとうございました。