COCOデータセット上のYOLOv 3のmAP値の計算
7004 ワード
darknetのインストール詳細手順と説明はYOLOv 3の公式サイトを参照してください.ここでは、対応するコマンドラインと特に注意すべき点 を示します.githubからプロジェクトソースをダウンロード ソースコードのコンパイル(デフォルトではYOLOv 3を実行する場合GPUは使用されませんが、YOLOv 3を走る場合はGPUを使用する必要があると仮定しますので、コンパイルオプションを変更する必要があります) 現在のフォルダ下(darknet/)のMakefileファイルの1行目のGPU=0をGPU=1に変更し、変更後のMakefile: コンパイル ウェイトファイル(yolov 3.weights)を現在のディレクトリにダウンロード テスト COCOデータセットのダウンロードと構成スクリプトファイル(scripts/get_coco_dataset.sh)からCOCOデータセットを取得(データセットのダウンロード速度が遅いのでFunctionのデータセットダウンロードステーションからダウンロードし、scripts/get_coco_dataset.shの各コマンドを行単位で実行することを推奨) COCOのプロファイルの変更(cfg/coco.data) YOLOv 3モデルのプロファイルの変更(cfg/yolov 3.cfg) COCO検証セットの検出darknetディレクトリの下で次のコマンドライン を保存
計算mAP
方法:https://blog.csdn.net/xidaoliang/article/details/88397280インストールpycocools darknetディレクトリの下にpythonスクリプト(compute_co_mAP.py)を作成して、mAPを計算します(実際の状況に応じて2つのファイルパスを変更することに注意してください) 実行compute_coco_mAP.pyスクリプト compute_を実行している可能性があります.coco_mAP.pyスクリプトの実行中にエラーが発生します.解決方法: scikit-image をアップグレード修正Numpyバージョン1.16
結果表示 img_sizeが608*608(img_sizeの設定はcfg/yolov 3.cfgファイルのwidthとheightを変更することによって実現できる) img_sizeが416*416の場合: img_sizeが320*320の場合:
結果の説明については、以下を参照してください.https://blog.csdn.net/u014734886/article/details/78831884
git clone https://github.com/pjreddie/darknet
cd darknet
GPU=1
CUDNN=0
OPENCV=0
OPENMP=0
DEBUG=0
...
...
...
make
wget https://pjreddie.com/media/files/yolov3.weights
# ‘-i 0’ 0 , GPU ‘-nogpu’ ‘-i 0’
./darknet -i 0 detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg
cp scripts/get_coco_dataset.sh data
cd data
bash get_coco_dataset.sh
classes= 80
train = /trainvalno5k.txt # COCO
valid = /5k.txt # COCO
names = data/coco.names
backup = backup
eval = coco # json , , classes(80) txt
[net]
# Testing
# batch=1
# subdivisions=1
# Training
batch=64 # batch , ,GeForce RTX 2080Ti 8
subdivisions=8
....
./darknet -i 0 detector valid cfg/coco.data cfg/yolov3.cfg yolov3.weights # '-i 0' 0 GPU
を実行します.上記のコマンドを実行するとresults/coco_が生成されます.results.jsonファイル検出結果計算mAP
方法:https://blog.csdn.net/xidaoliang/article/details/88397280
pip install pycocotools
#-*- coding:utf-8 -*-
import matplotlib.pyplot as plt
from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval
import numpy as np
import skimage.io as io
import pylab,json
pylab.rcParams['figure.figsize'] = (10.0, 8.0)
def get_img_id(file_name):
ls = []
myset = []
annos = json.load(open(file_name, 'r'))
for anno in annos:
ls.append(anno['image_id'])
myset = {}.fromkeys(ls).keys()
return myset
if __name__ == '__main__':
annType = ['segm', 'bbox', 'keypoints']#set iouType to 'segm', 'bbox' or 'keypoints'
annType = annType[1] # specify type here
cocoGt_file = 'data/coco/annotations/instances_val2014.json' #
cocoGt = COCO(cocoGt_file)# coco json
cocoDt_file = 'results/coco_results.json' #
imgIds = get_img_id(cocoDt_file)
print(len(imgIds))
cocoDt = cocoGt.loadRes(cocoDt_file)# image json
imgIds = sorted(imgIds)# coco image_id
imgIds = imgIds[0:5000]# image
cocoEval = COCOeval(cocoGt, cocoDt, annType)
cocoEval.params.imgIds = imgIds#
cocoEval.evaluate()#
cocoEval.accumulate()#
cocoEval.summarize()#
python compute_coco_mAP.py
pip install -U scikit-image
pip install numpy==1.16
結果表示
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.334
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.585
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.345
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.194
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.365
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.439
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.291
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.446
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.470
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.304
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.502
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.593
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.314
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.559
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.318
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.142
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.341
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.464
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.278
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.419
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.442
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.239
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.482
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.611
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.286
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.521
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.284
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.103
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.315
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.449
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.260
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.389
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.408
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.189
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.454
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.601
結果の説明については、以下を参照してください.https://blog.csdn.net/u014734886/article/details/78831884