Evaluasi model deteksi Objek Tensorflow pada Test Dataset

Saya telah menyempurnakan model fast_rcnn_resnet101 yang tersedia di Model Kebun Binatang untuk mendeteksi objek khusus saya. Saya membagi data menjadi set train dan eval, dan saya menggunakannya dalam file konfigurasi saat pelatihan. Sekarang setelah pelatihan selesai, saya ingin menguji model saya pada data yang tidak terlihat (saya menyebutnya data uji). Saya menggunakan beberapa fungsi tetapi tidak tahu pasti kode mana yang akan digunakan dari API tensorflow untuk mengevaluasi kinerja pada kumpulan data pengujian. Berikut adalah hal-hal yang saya coba:

  1. Saya menggunakan fungsi object_detection/metrics/offline_eval_map_corloc.py untuk mendapatkan evaluasi pada kumpulan data pengujian. Kode berjalan dengan baik tetapi saya memiliki nilai negatif atau AR dan AP untuk kotak pembatas berukuran besar dan sedang.

Presisi Rata-rata (AP) @[ IoU=0,50:0,95 | luas= semua | maxDets=100 ] = 0,459

Presisi Rata-rata (AP) @[ IoU=0,50 | luas= semua | maxDets=100 ] = 0,601

Presisi Rata-rata (AP) @[ IoU=0,75 | luas= semua | maxDets=100 ] = 0,543

Presisi Rata-rata (AP) @[ IoU=0,50:0,95 | luas= kecil | maxDets=100 ] = 0,459

Presisi Rata-rata (AP) @[ IoU=0,50:0,95 | luas=sedang | maxDets=100 ] = -1.000

Presisi Rata-rata (AP) @[ IoU=0,50:0,95 | luas= besar | maxDets=100 ] = -1.000

Penarikan Rata-rata (AR) @[ IoU=0,50:0,95 | luas= semua | maxDets= 1 ] = 0,543

Penarikan Rata-rata (AR) @[ IoU=0,50:0,95 | luas= semua | maxDets= 10 ] = 0,627

Penarikan Rata-rata (AR) @[ IoU=0,50:0,95 | luas= semua | maxDets=100 ] = 0,628

Penarikan Rata-rata (AR) @[ IoU=0,50:0,95 | luas= kecil | maxDets=100 ] = 0,628

Penarikan Rata-rata (AR) @[ IoU=0,50:0,95 | luas=sedang | maxDets=100 ] = -1.000

Penarikan Rata-rata (AR) @[ IoU=0,50:0,95 | luas= besar | maxDets=100 ] = -1.000

Sekarang saya tahu bahwa mAP dan AR tidak boleh negatif dan ada yang salah. Saya ingin tahu mengapa saya melihat nilai negatif ketika saya menjalankan evaluasi offline pada kumpulan data pengujian?

Kueri yang saya gunakan untuk menjalankan saluran ini adalah: 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. Saya juga mencoba object_detection/legacy/eval.py tetapi saya mendapatkan nilai metrik evaluasi sebagai negatif:

DetectionBoxes_Recall/AR@100 (medium): -1.0 DetectionBoxes_Recall/AR@100 (kecil): -1.0 DetectionBoxes_Precision/[email protected]: -1.0 DetectionBoxes_Precision/mAP (medium): -1.0 dll.

Saya menggunakan pipa, 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 di fast_rcnn_resnet101_coco-Copy1.config menunjuk ke TFRecord pengujian dengan informasi kebenaran dasar dan deteksi.

  1. Saya juga mencoba object_detection/utils/object_detection_evaluation untuk mendapatkan evaluasi. Ini tidak ada bedanya dengan menggunakan pendekatan pertama karena fungsi dasar yang sama tidak berguna - evaluator.evaluate()

Saya akan sangat menghargai bantuan apa pun dalam hal ini.


person Manish Rai    schedule 07.01.2019    source sumber
comment
Dengan beberapa pengujian unit dan investigasi menunjukkan penggunaan pemetaan kategori yang salah (peta label) dalam data. Misalnya, jika peta label tidak berisi kelas 4 tetapi karena kesalahan pada data terdapat kelas 4 pada kebenaran dasarnya maka nilai metriknya adalah -1,0.   -  person Manish Rai    schedule 12.01.2019


Jawaban (3)


Metrik evaluasi berformat COCO sehingga Anda dapat merujuk ke COCO API untuk mengetahui arti nilai-nilai ini.

Sebagaimana ditentukan dalam kode coco api, -1 adalah nilai default jika kategori tersebut tidak ada. Dalam kasus Anda, semua objek yang terdeteksi hanya milik area 'kecil'. Kategori area 'kecil', 'sedang', dan 'besar' juga bergantung pada piksel yang diambil area tersebut seperti yang ditentukan di sini.

person danyfang    schedule 18.03.2019

Bagi saya, saya hanya menjalankan model_main.py sekali saja dan mengubah eval_input_reader di pipeline.config ke dataset pengujian. Namun saya tidak yakin apakah ini yang harus dilakukan.

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

pipa.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
}

Bagi saya juga tidak ada perbedaan peta antara dataset validasi dan pengujian. Jadi saya tidak yakin apakah pemisahan data pelatihan, validasi & pengujian benar-benar diperlukan.

person rayon    schedule 22.09.2019

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

Anda dapat menemukan Eval.py di folder lama

person jamal ansary    schedule 06.08.2020