物体検出における学習モデル評価方法IoU, Precision, Recall


 

目次

1. IoUとは

2. PrecisionとRecall

3. 実験

_3.1 データロード

_3.2 IoUの関数

_3.3 Iouの可視化

_3.4 Precisionの関数

_3.5 Precisionの可視化

_3.6 Recallの関数

_3.7 Recallの可視化

 

前回の記事は「画像分類・物体検出・セグメンテーションの比較」を説明しました。また、

今回の記事は物体検出における学習モデル評価方法Iouについて説明したいです。

 

1. IoUとは

IoUとは、Intersection over Unionの英語略称で、画像認識物の体検出精度のひとつのメリットです。画像中の検出したい物体を、作成したモデルがどの程度正しく検出できるかを評価する指標です。IoU は、以下の式で定義されます。つまり、領域の共通部分の割り算します。

予測が完全に正しい場合、IoU は1です。正解領域と予測領域の重なりが大きいほど IoU の値は大きくなります。

2. PrecisionとRecall

Precision を確認 予測したデータのうち,実際に当たっているものです。予測データのうち必要な所を制限です。

Recallは予測データのうち必要な所を実際に合わします。

3. 実験

環境:Google Colab

データセット:車画像

モデル評価:IoU, Precision, Recall

3.1 データロード

ライブラリインポート

from google.colab import files

import cv2

import numpy as np

 

image = files.upload()

image = list(image.keys())[0]

image = cv2.imread(image)

 

name = ‘test.jpg’     # path to test image

cv2.imwrite(name, image)

画像表示

from google.colab.patches import cv2_imshow

 

cv2_imshow(image)

3.2 IoUの関数

def intersection_over_union(boxA, boxB):

# (x, y)作成

xA = max(boxA[0], boxB[0])

yA = max(boxA[1], boxB[1])

xB = min(boxA[2], boxB[2])

yB = min(boxA[3], boxB[3])

 

# 交差長方形の計算

interArea = max(0, xB – xA + 1) * max(0, yB – yA + 1)

# 予測と実績の計算

boxAArea = (boxA[2] – boxA[0] + 1) * (boxA[3] – boxA[1] + 1)

boxBArea = (boxB[2] – boxB[0] + 1) * (boxB[3] – boxB[1] + 1)

# Iouの計算

iou = interArea / float(boxAArea + boxBArea – interArea)

return iou

 

3.3 Iouの可視化

IoUは0.8857になります。

# 実績と予測データ作成

predict_box = (95, 90, 500, 370)

actual_box = (105, 100, 510, 360)

 

# 方形作成

iou_img = cv2.rectangle(image, predict_box[:2], predict_box[2:], (0, 0, 0), 2)

iou_img = cv2.rectangle(iou_img, actual_box[:2], actual_box[2:], (0, 0, 255), 2)

cv2.imwrite(‘output.jpg’, iou_img)

 

# IoU計算

iou = intersection_over_union(predict_box, actual_box)

cv2.putText(iou_img, “IoU: {:.4f}”.format(iou), (20, 40),

cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2)

 

# 画像表示

cv2_imshow(iou_img)

 

 

3.4 Precisionの関数

# Precision

 

def Precision(boxA, boxB):

# (x, y)作成

xA = max(boxA[0], boxB[0])

yA = max(boxA[1], boxB[1])

xB = min(boxA[2], boxB[2])

yB = min(boxA[3], boxB[3])

 

interArea = max(0, xB – xA + 1) * max(0, yB – yA + 1)

boxAArea = (boxA[2] – boxA[0] + 1) * (boxA[3] – boxA[1] + 1)

boxBArea = (boxB[2] – boxB[0] + 1) * (boxB[3] – boxB[1] + 1)

precision = interArea / float(boxAArea)

return precision

 

3.5 Precisionの可視化

# Precision を確認 予測したデータのうち,実際に当たっているもの

# 予測データのうち必要な所を制限

predict_box = (95, 90, 500, 370)

actual_box = (105, 100, 510, 360)

# 赤 実際 /  青 予測

image = list(upimage.keys())[0]

image = cv2.imread(image)

 

# 方形作成

prec_img = cv2.rectangle(image, predict_box[:2], predict_box[2:], (0, 0, 0), 2)

prec_img = cv2.rectangle(prec_img, actual_box[:2], actual_box[2:], (0, 0, 255), 2)

cv2.imwrite(‘output_prec.jpg’, prec_img)

 

# Recall計算

iou = Precision(predict_box, actual_box)

cv2.putText(prec_img, “Precision: {:.4f}”.format(iou), (20, 40),

cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2)

 

# 画像表示

cv2_imshow(prec_img)

 

3.6 Recallの関数

def Recall(boxA, boxB):

# (x, y)作成

xA = max(boxA[0], boxB[0])

yA = max(boxA[1], boxB[1])

xB = min(boxA[2], boxB[2])

yB = min(boxA[3], boxB[3])

 

interArea = max(0, xB – xA + 1) * max(0, yB – yA + 1)

boxAArea = (boxA[2] – boxA[0] + 1) * (boxA[3] – boxA[1] + 1)

boxBArea = (boxB[2] – boxB[0] + 1) * (boxB[3] – boxB[1] + 1)

recall = interArea / float(boxBArea)

return recall

 

3.7 Recallの可視化

# Recallを確認

# 予測データのうち必要な所を実際に合わす

predict_box = (95, 90, 500, 370)

actual_box = (105, 100, 510, 360)

# 赤 実際 /  青 予測

image = list(upimage.keys())[0]

image = cv2.imread(image)

 

# 方形作成

rec_img = cv2.rectangle(image, predict_box[:2], predict_box[2:], (0, 0, 0), 2)

rec_img = cv2.rectangle(rec_img, actual_box[:2], actual_box[2:], (0, 0, 255), 2)

cv2.imwrite(‘output.jpg’, rec_img)

 

# IoU計算

iou = Recall(predict_box, actual_box)

cv2.putText(rec_img, “Recall: {:.4f}”.format(iou), (20, 40),

cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2)

 

# 画像表示

cv2_imshow(rec_img)

 

 

担当者:KW
バンコクのタイ出身 データサイエンティスト
製造、マーケティング、財務、AI研究などの様々な業界にPSI生産管理、在庫予測・最適化分析、顧客ロイヤルティ分析、センチメント分析、SaaS、PaaS、IaaS、AI at the Edge の環境構築などのスペシャリスト