またGitHubに例示したコードも乱雑になってしまっています。なので、今回はCOCOを使った評価のお話をすると共に、Pascal VOCとCOCOのデータできちんと学習と評価のできるコードをまとめて公開することにします。
これまでもお話したように、Pascal VOCに関しては、Pascal VOC 2007とPascal VOC 2012のtrainvalデータを用いて学習し、Pascal VOC2007のtestデータで評価するという方法が標準的です。Pascal VOC 2007のtrainvalデータは5011、testデータは4952、2012のtrainvalデータは11540ありますので、この方法での学習データの総数は16551、評価データの総数は4952、クラス数は20となります。以下は1epochだけ学習して評価してみた出力です。
AP for aeroplane = 0.4805 AP for bicycle = 0.2982 AP for bird = 0.5053 AP for boat = 0.1416 AP for bottle = 0.2505 AP for bus = 0.3217 AP for car = 0.6830 AP for cat = 0.6837 AP for chair = 0.3224 AP for cow = 0.4169 AP for diningtable = 0.2032 AP for dog = 0.6115 AP for horse = 0.5645 AP for motorbike = 0.3310 AP for person = 0.5807 AP for pottedplant = 0.1872 AP for sheep = 0.3818 AP for sofa = 0.3628 AP for train = 0.3305 AP for tvmonitor = 0.5111 Mean AP = 0.4084
epochを重ねると精度もあがっていきます。最終的に評価結果のMean APで0.80を超えると良い値と考えて良いでしょう。
一方、COCO 2014のデータセットにはtrainデータが82783、valデータが40504含まれています。このvalデータから5000だけを評価データとし、残りのデータを学習データに回した、82783 40504-5000=118287を学習データとして使う、trainval35kという方法が良く使われます。クラス数は80です。
同じく以下が1epochだけ学習して評価してみた出力です。
~~~~ Mean and per-category AP @ IoU=[0.50,0.95] ~~~~ 9.5 ~~~~ Summary metrics ~~~~ Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.095 Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.237 Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.055 Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.038 Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.136 Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.137 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.120 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.225 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.248 Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.089 Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.301 Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.317
こちらはMean and per-category AP@IoU=[0.50:0.95]で30を超えると良い値と考えて良いと思います。
COCOデータセットには対象オブジェクトの存在しない画像が存在し、これをうまく扱わないとエラーになるようです。今回公開するデータはこれらの修正を行っており、うまく動くはずです。参考にPacal VOCとCOCOで学習済みのウェイトも公開しています。公開済みのウェイトはPascal VOC Mean APが0.826、COCO Mean and per-category AP@IoU=[0.50:0.95]で37.0がでるはずです。
Pascal VOC学習データによる推論
COCO学習データによる推論結果