Detectron2を使用してBCCDデータセットを学習する【物体検出】

Detectron2での推論について前回整理したので、今回は訓練について整理していこうと思います。

【物体検出・セグメンテーション】Detectron2を用いて学習済みモデルを用いた推論を試す

 

おしながき

・問題設定

・Detectron2での学習の流れ

 

データセットについて

BCCD Dataset は、血液の顕微鏡写真の3~400枚程度の物体検出用データセットです。

赤血球(RBC)・白血球(WBC)・血小板(Platelet)の3種類についてアノテーションがされています。

アノテーションデータは Pascal VOC形式で、[x0, y0, x1, y1]で表現されるバウンディングボックスが付与されています。

データはこちらのレポジトリからダウンロードできます。

 

Detectron2での学習の流れ

流れは下記のとおりです。

  1. データをCOCOフォーマットに変換する
  2. dataset_dictsを用意する
  3. DatasetCatalog(とMetadataCatalog)を設定する
  4. モデルを構築・学習
  5. 結果をCOCO APIで評価

 

0. 環境合わせ&ライブラリのインポート

Colabのチュートリアル

 

1. データをCOCOフォーマットに変換する

COCOフォーマットが扱いやすいため、変換します。

Pascal VOC→COCOは、こちらのレポジトリを使わせてもらって簡単に変換できます。

 

2. dataset_dicts を用意する

Detectron2で学習させる場合は、アノテーションデータをCOCOフォーマットに似た list[dict]のかたちで用意する必要があります。詳細は、こちらの Standard Dataset Dicts の箇所を見るとわかります。

イメージとしては、一枚の画像ごとに下記のような辞書を用意して、リストに入れてあげます。

“bbox_mode” でバウンディングボックスの表現の仕方を指定することができます。

[x0, y0, x1, y1] の場合は、BoxMode.XYXY_ABS

[x0, y0, w, h] の場合は、BoxMode.XYWH_ABS

といったようにします。他にも指定できこちらから確認できます。

 

ここは、チュートリアルのものをそのまま使うことはできないので、書きます。

 

3. DatasetCatalog(とMetadataCatalog)を設定する

データセットに名前をつけて、DatasetCatalogに登録してあげる必要があります。MetadataCatalogへのメタデータの登録は必要に応じて、だそうですが、このあたりよくわかっていません。

とりあえず、COCOフォーマットのJSONファイルがある場合は、register_coco_instancesというもので登録してあげればOKのようです。

 

ここでいくつか教師データを可視化して確認します。

 

4. モデルを構築・学習

ここまでできたら後は楽です。

前回の推論の箇所でも書きましたが、こちらのConfig Reference でモデル独自のハイパーパラメータを探して設定することが可能です。

Trainer には SimpleTrainer と DefaultTrainer があり、SimpleTrainer は必要最小限の機能(損失を計算して、勾配算出し、更新する)しか備わっていないらしく、DefaultTrainerにしておけば、勝手にTensorBoardへのロギング等いろいろしてくれるみたいです。

 

500エポック回し終わると、ログは TnesorBoard で確認できます。

いくつかテストデータを推論してみて可視化をします。

良さそうに見えますが、どれくらい良いのか、最後にCOCOAPIで検証します。

 

5. 結果をCOCO APIで評価

 

ということで、諸数値を見ることができました。

 

Detectron2を使ってみたいどなたかのお役に立てば幸いです。

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