PythonMania

普段はロボットとAIを組み合わせて色々作ってます。Python関係以外も色々投稿していくと思います。

【Python】物体検出モデルの評価の仕方についてまとめてみた


f:id:mizuhiki0111:20190513123830p:plain




YOLOで物体検出を試している中で、どのようにモデルの評価をすればいいのか疑問に思ったので調べたことをまとめておきます。


画像認識の場合、一枚の画像に対する予測結果・正解データ使って様々な指標で評価していくのですが、物体検出(動画)の場合複数の物体を1枚の画像から検出する場合がほとんどです。


YOLOでは物体を検出した際に、バウンディングボックスで物体を囲み、ラベルと検出精度が表示されるので「個々の物体」に対する検出精度は分かるのですが、「学習したモデル自体の精度」を測る場合はどのようにすればいいのでしょうか。


物体検出をする際の主要な指標として「mAP」と「IOU」というものがあるみたいなので、順番にまとめていきます。

※リアルタイム物体検出の場合、処理速度(FPS)も重要な要素ですが、精度の指標では無いので今回は割愛します。





①Mean Average Precision(mAP)


一つ目はMean Average Precision(以下mAP)です。mAPというのは適合率(Precision)の平均の平均になります。

平均の平均ってなんだ?って感じなので、分かりやすいように必要な要素を順番に説明していきます。

mAPはPresicion(適合率)の平均であるAverage Precision(AP)の平均なのでPrecisionから解説していきます。


Precision

モデルの精度を図るための「要素」としてTP、TN、FP、FNという考え方があります。

それぞれ

TP(True Positive) : 画像に物体が写っているのに対して、モデルは物体が写っているものとして判別できた

TN(True Negative) : 画像に物体が写っていないのに対して、モデルは物体が写っていないものとして判別できた

FP(False Positive) :  画像に物体が写っていないのに対して、モデルは物体が写っているものとして判別してしまった

FN:(False Negative) :画像に物体が写っているのに対して、モデルは物体が写っていないものとして判別してしまった



このうちTPとFPの要素を組み合わせて評価する指標がPrecision(適合率)になります。


つまりモデルが物体が写っていると認識したもののうち、実際に物体が存在する割合でモデル評価をする指標がPrecisionになります。

f:id:mizuhiki0111:20190513130548p:plain




Average Precision(AP)


Average Precision(以下AP)はPrecisionの平均を表した指標になります。


物体検出において画像1枚で検出されるラベルが1つとは限りません。

m個のラベルが画像に現れた時にm個のラベルのうちどれだけのラベルを検出できたか、を平均として表したものがAPになります。


Mean Average Precision(mAP)

Mean Average Precision(以下mAP)は全ての時点によるAPを平均したものになります。

全ての時点によるAPを平均というのは、動画などの複数枚の画像処理を想定しています。動画における全ての時点におけるAPを平均的に表現することで、モデル自体の精度評価を行うことができます。






②IoU(Intersection over Union)

もう一つの指標がIoUという指標になります。

これはモデルが物体であると認識した領域のうち、実際に正解である領域がどれくらいあるかを図る指標です。


正解である領域との重なりが大きいほどIoUの値も大きくなります。


f:id:mizuhiki0111:20190513131941p:plain