ฉันได้ปรับแต่งโมเดลที่เร็วขึ้นอย่าง สวนสัตว์เพื่อตรวจจับวัตถุที่ฉันกำหนดเอง ฉันแยกข้อมูลออกเป็นชุด Train และ Eval และฉันใช้ข้อมูลเหล่านั้นในไฟล์กำหนดค่าขณะฝึกอบรม หลังจากการฝึกอบรมเสร็จสิ้น ฉันต้องการทดสอบแบบจำลองของฉันกับข้อมูลที่มองไม่เห็น (ฉันเรียกว่าข้อมูลทดสอบ) ฉันใช้ฟังก์ชันสองสามอย่างแต่ไม่สามารถระบุได้ว่าจะใช้โค้ดใดจาก API ของ tensorflow เพื่อประเมินประสิทธิภาพบนชุดข้อมูลทดสอบ ด้านล่างนี้คือสิ่งที่ฉันได้ลอง:
- ฉันใช้ฟังก์ชัน object_detection/metrics/offline_eval_map_corloc.py เพื่อรับการประเมินชุดข้อมูลทดสอบ รหัสทำงานได้ดี แต่ฉันมีค่าเป็นลบหรือ AR และ AP สำหรับกล่องขอบเขตขนาดใหญ่และขนาดกลาง
ความแม่นยำเฉลี่ย (AP) @[ IoU=0.50:0.95 | พื้นที่= ทั้งหมด | สูงสุดDets=100 ] = 0.459
ความแม่นยำเฉลี่ย (AP) @[ IoU=0.50 | พื้นที่= ทั้งหมด | สูงสุดDets=100 ] = 0.601
ความแม่นยำเฉลี่ย (AP) @[ IoU=0.75 | พื้นที่= ทั้งหมด | สูงสุดDets=100 ] = 0.543
ความแม่นยำเฉลี่ย (AP) @[ IoU=0.50:0.95 | พื้นที่= เล็ก | สูงสุดDets=100 ] = 0.459
ความแม่นยำเฉลี่ย (AP) @[ IoU=0.50:0.95 | พื้นที่=ปานกลาง | สูงสุดDets=100 ] = -1.000
ความแม่นยำเฉลี่ย (AP) @[ IoU=0.50:0.95 | พื้นที่= ใหญ่ | สูงสุดDets=100 ] = -1.000
การเรียกคืนเฉลี่ย (AR) @[ IoU=0.50:0.95 | พื้นที่= ทั้งหมด | สูงสุดDets= 1 ] = 0.543
การเรียกคืนเฉลี่ย (AR) @[ IoU=0.50:0.95 | พื้นที่= ทั้งหมด | สูงสุดDets= 10 ] = 0.627
การเรียกคืนเฉลี่ย (AR) @[ IoU=0.50:0.95 | พื้นที่= ทั้งหมด | สูงสุดDets=100 ] = 0.628
การเรียกคืนเฉลี่ย (AR) @[ IoU=0.50:0.95 | พื้นที่= เล็ก | สูงสุดDets=100 ] = 0.628
การเรียกคืนเฉลี่ย (AR) @[ IoU=0.50:0.95 | พื้นที่=ปานกลาง | สูงสุดDets=100 ] = -1.000
การเรียกคืนเฉลี่ย (AR) @[ IoU=0.50:0.95 | พื้นที่= ใหญ่ | สูงสุดDets=100 ] = -1.000
ตอนนี้ ฉันรู้แล้วว่า mAP และ AR ไม่สามารถเป็นค่าลบได้ และมีบางอย่างผิดปกติ ฉันต้องการทราบว่าเหตุใดฉันจึงเห็นค่าลบเมื่อรันการประเมินแบบออฟไลน์บนชุดข้อมูลทดสอบ
แบบสอบถามที่ฉันใช้เรียกใช้ไปป์ไลน์นี้คือ: SPLIT=test
echo "
label_map_path: '/training_demo/annotations/label_map.pbtxt'
tf_record_input_reader: { input_path: '/training_demo/Predictions/test.record' }
" > /training_demo/${SPLIT}_eval_metrics/${SPLIT}_input_config.pbtxt
echo "
metrics_set: 'coco_detection_metrics'
" > /training_demo/${SPLIT}_eval_metrics/${SPLIT}_eval_config.pbtxt
python object_detection/metrics/offline_eval_map_corloc.py \
--eval_dir='/training_demo/test_eval_metrics' \
--eval_config_path='training_demo/test_eval_metrics/test_eval_config.pbtxt' \
--input_config_path='/training_demo/test_eval_metrics/test_input_config.pbtxt'
- ฉันลองใช้ object_detection/legacy/eval.py แล้ว แต่ฉันได้รับค่าสำหรับเมตริกการประเมินผลเป็นค่าลบ:
DetectionBoxes_Recall/AR@100 (กลาง): -1.0 DetectionBoxes_Recall/AR@100 (เล็ก): -1.0 DetectionBoxes_Precision/[email protected]: -1.0 DetectionBoxes_Precision/mAP (กลาง): -1.0 เป็นต้น
ฉันใช้ไปป์ไลน์ python eval.py \ --logtostderr \ --checkpoint_dir=trained-inference-graphs/output_inference_graph/ \ --eval_dir=test_eval_metrics \ --pipeline_config_path=training/faster_rcnn_resnet101_coco-Copy1.config
eval_input_reader ใน fast_rcnn_resnet101_coco-Copy1.config ชี้ไปที่ TFRecord ทดสอบพร้อมข้อมูลความจริงและข้อมูลการตรวจจับ
- ฉันลองใช้ object_detection/utils/object_detection_evalue เพื่อรับการประเมินด้วย นี่ไม่แตกต่างจากการใช้วิธีที่ 1 เพราะมันไม่มีประโยชน์กับฟังก์ชันพื้นฐานเดียวกัน - evaluator.evaluate()
ฉันขอขอบคุณความช่วยเหลือเกี่ยวกับเรื่องนี้