본문 바로가기

Computer Vision/Object detection

Object detection mAP 측정방법

Object detection mAP 측정방법

해당 문서는 Object detection의 성능 평가를 위한 mAP측정 tool 사용방법을 안내하는 문서 입니다.
해당 방법은 YOLO를 기준으로 설명합니다.

mAP tool 다운로드

git clone <https://github.com/Cartucho/mAP.git>

YOLO 의 test set detection result 생성

(해당 문서에서는 test set을 따로 두지않고, train set에서 사용된 데이터를 그대로 사용)
YOLO mark에서 추출되는 절대경로로된 labeling image list 텍스트파일 준비

darknet폴더에 result.txt로 해당 이미지 목록의 detection 결과를 추출

./darknet detector test custom/ground.data custom/ground_yolov4.cfg ground_yolov4_best.weights -dont_show -ext_output < custom/ground_train.txt > result.txt

result.txt 파일 생성

result파일로 yolo detection result파일 생성

cp result.txt /home/govis/mAP/scripts/extra
cd /home/govis/mAP/scripts/extra
python convert_dr_yolo.py

mAP/input/detection-results 폴더에 파일이 생성되었는지 확인

Ground truth 데이터 set 생성

mAP/scripts/extra 폴더 안에 class_list를 데이터의 객체이름으로 변경

사용하는 darknet폴더의 names파일 내용을 복사해서 붙여넣기 해주면 된다.
기존에 있던 파일 전부 삭제 및 이미지 폴더 생성

cd /home/govis/mAP
rm -rf input/ground-truth/*
rm -rf input/images-optional
mkdir input/images

ground-truth 데이터와 images 데이터 이동

cp /media/govis/extra/vision_project/Yolo_mark/x64/Release/data/ground/*.txt input/ground-truth
cp /media/govis/extra/vision_project/Yolo_mark/x64/Release/data/ground/*.jpg input/images

이동 되었으면 다시 convert 파일 실행

cd scripts/extra
python convert_gt_yolo.py

mAP/input/ground-truth 폴더안에 backup 이란 폴더가 생성되면 convert가 잘 된것임

mAP 측정하기

main.py파일을 열어 50번째 줄 수정

# make sure that the cwd() is the location of the python script (so that every path makes sense)
os.chdir(os.path.dirname(os.path.abspath(__file__)))

GT_PATH = os.path.join(os.getcwd(), 'input', 'ground-truth')
DR_PATH = os.path.join(os.getcwd(), 'input', 'detection-results')
# if there are no images then no animation can be shown
# IMG_PATH = os.path.join(os.getcwd(), 'input', 'images-optional')
IMG_PATH = os.path.join(os.getcwd(), 'input', 'images')

main.py실행

python main.py

실행 중 화면

Output 파일 확인

측정이 완료되면 output 폴더에 다양한 output파일이 생성됨

output/images 에는 측정과정의 이미지들이 저장됨

파란색box가 ground-truth, 초록색 box가 detection-result, 빨간색 box는 ground-truth box이나 detector가 인식하지 못한 box

토핑별 mAP가 터미널 창에 출력

97.41% = Bacon AP
94.10% = Bell_pepper AP
93.15% = Black_olive AP
97.00% = Bulgogi AP
85.12% = Corn AP
87.53% = Crab AP
99.78% = Dough AP
94.08% = Garlic_chip AP
97.51% = Gorgonzola AP
98.43% = Mushroom AP
90.69% = Onion AP
98.19% = Pepperoni AP
97.53% = Pineapple AP
100.00% = SP_cube AP
96.92% = Shrimp AP
98.31% = Slice_ham AP
97.95% = Teriyaki_onion AP
98.05% = Wedge_potato AP
mAP = 95.65%

다양한 그래프 출력

토핑별 AP 및 전체 mAP

ground-truth 대비 가장 miss를 많이한 객체 rate

ground-truth 대비 가장 miss를 많이한 객체 count

토핑별 AP가 계산되는 그래프
(곡선이 완만하거나 일정할수록 정확한 계산이 이루어진다.)