การประเมินโมเดลการตรวจจับวัตถุ Tensorflow บนชุดข้อมูลทดสอบ

ฉันได้ปรับแต่งโมเดลที่เร็วขึ้นอย่าง สวนสัตว์เพื่อตรวจจับวัตถุที่ฉันกำหนดเอง ฉันแยกข้อมูลออกเป็นชุด Train และ Eval และฉันใช้ข้อมูลเหล่านั้นในไฟล์กำหนดค่าขณะฝึกอบรม หลังจากการฝึกอบรมเสร็จสิ้น ฉันต้องการทดสอบแบบจำลองของฉันกับข้อมูลที่มองไม่เห็น (ฉันเรียกว่าข้อมูลทดสอบ) ฉันใช้ฟังก์ชันสองสามอย่างแต่ไม่สามารถระบุได้ว่าจะใช้โค้ดใดจาก API ของ tensorflow เพื่อประเมินประสิทธิภาพบนชุดข้อมูลทดสอบ ด้านล่างนี้คือสิ่งที่ฉันได้ลอง:

  1. ฉันใช้ฟังก์ชัน 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'
  1. ฉันลองใช้ 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 ทดสอบพร้อมข้อมูลความจริงและข้อมูลการตรวจจับ

  1. ฉันลองใช้ object_detection/utils/object_detection_evalue เพื่อรับการประเมินด้วย นี่ไม่แตกต่างจากการใช้วิธีที่ 1 เพราะมันไม่มีประโยชน์กับฟังก์ชันพื้นฐานเดียวกัน - evaluator.evaluate()

ฉันขอขอบคุณความช่วยเหลือเกี่ยวกับเรื่องนี้


person Manish Rai    schedule 07.01.2019    source แหล่งที่มา
comment
จากการทดสอบและการสืบสวนสองสามหน่วยชี้ไปที่การใช้การแมปหมวดหมู่ที่ไม่ถูกต้อง (แผนผังป้ายกำกับ) ในข้อมูล ตัวอย่างเช่น หากแผนผังป้ายกำกับไม่มีคลาส 4 แต่เนื่องจากข้อผิดพลาดในข้อมูล มีคลาส 4 ในความจริงภาคพื้นดิน ค่าของหน่วยวัดจะเป็น -1.0   -  person Manish Rai    schedule 12.01.2019


คำตอบ (3)


เมทริกการประเมินอยู่ในรูปแบบ COCO ดังนั้นคุณจึงสามารถอ้างอิงถึง COCO API สำหรับความหมายของค่าเหล่านี้ได้

ตามที่ระบุไว้ใน coco api โค้ด, -1 เป็นค่าเริ่มต้นหากไม่มีหมวดหมู่ ในกรณีของคุณ วัตถุทั้งหมดที่ตรวจพบจะเป็นของพื้นที่ 'เล็ก' เท่านั้น หมวดหมู่พื้นที่ของ 'เล็ก', 'กลาง' และ 'ใหญ่' ขึ้นอยู่กับพิกเซลที่พื้นที่ใช้ตามที่ระบุ ที่นี่

person danyfang    schedule 18.03.2019

สำหรับฉัน ฉันเพิ่งเรียกใช้ model_main.py เพียงครั้งเดียวและเปลี่ยน eval_input_reader ใน pipeline.config เป็นชุดข้อมูลทดสอบ แต่ฉันไม่แน่ใจว่าควรทำอย่างไร

python model_main.py \
    --alsologtostderr \
    --run_once \
    --checkpoint_dir=$path_to_model \
    --model_dir=$path_to_eval \
    --pipeline_config_path=$path_to_config

ไปป์ไลน์.config

eval_config: {
  metrics_set: "coco_detection_metrics"
  num_examples: 721 # no of test images
  num_visualizations: 10 # no of visualizations for tensorboard
}

eval_input_reader: {
  tf_record_input_reader {
    input_path: "/path/to/test-data.record"
  }
  label_map_path: "/path/to/label_map.pbtxt"
  shuffle: true
  num_readers: 1
}

นอกจากนี้สำหรับฉันแล้ว mAP ไม่มีความแตกต่างระหว่างการตรวจสอบและชุดข้อมูลการทดสอบ ฉันจึงไม่แน่ใจว่าจำเป็นต้องแยกข้อมูลการฝึกอบรม การตรวจสอบ และ การทดสอบ จริงหรือไม่

person rayon    schedule 22.09.2019

!python eval.py --logtostderr --pipeline_config_path=--checkpoint_dir--eval_dir=eval/

คุณสามารถค้นหา Eval.py ได้ในโฟลเดอร์เดิม

person jamal ansary    schedule 06.08.2020