Оценка модели обнаружения объектов Tensorflow на тестовом наборе данных

Я настроил модель Fast_rcnn_resnet101, доступную в модели Zoo для обнаружения моих пользовательских объектов. У меня были данные, разделенные на набор train и eval, и я использовал их в файле конфигурации во время обучения. Теперь, после завершения обучения, я хочу протестировать свою модель на невидимых данных (я называю это тестовыми данными). Я использовал несколько функций, но не могу точно определить, какой код использовать из API-интерфейса tenorflow для оценки производительности тестового набора данных. Вот то, что я пробовал:

  1. Я использовал функцию object_detection / metrics / offline_eval_map_corloc.py, чтобы получить оценку тестового набора данных. Код работает нормально, но я имею отрицательные значения или AR и AP для ограничивающих прямоугольников большого и среднего размера.

Средняя точность (AP) @ [IoU = 0,50: 0,95 | площадь = все | maxDets = 100] = 0,459

Средняя точность (AP) @ [IoU = 0,50 | площадь = все | maxDets = 100] = 0,601

Средняя точность (AP) @ [IoU = 0,75 | площадь = все | maxDets = 100] = 0,543

Средняя точность (AP) @ [IoU = 0,50: 0,95 | площадь = малая | maxDets = 100] = 0,459

Средняя точность (AP) @ [IoU = 0,50: 0,95 | площадь = средняя | maxDets = 100] = -1,000

Средняя точность (AP) @ [IoU = 0,50: 0,95 | площадь = большая | maxDets = 100] = -1,000

Средний отзыв (AR) @ [IoU = 0,50: 0,95 | площадь = все | maxDets = 1] = 0,543

Средний отзыв (AR) @ [IoU = 0,50: 0,95 | площадь = все | maxDets = 10] = 0,627

Средний отзыв (AR) @ [IoU = 0,50: 0,95 | площадь = все | maxDets = 100] = 0,628

Средний отзыв (AR) @ [IoU = 0,50: 0,95 | площадь = малая | maxDets = 100] = 0,628

Средний отзыв (AR) @ [IoU = 0,50: 0,95 | площадь = средняя | maxDets = 100] = -1,000

Средний отзыв (AR) @ [IoU = 0,50: 0,95 | площадь = большая | maxDets = 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 / mAP @ .50IOU: -1.0 DetectionBoxes_Precision / mAP (средний): -1,0 и т. Д.

Я использовал конвейер, python eval.py \ --logtostderr \ --checkpoint_dir = обученные-выводы-графики / output_inference_graph / \ --eval_dir = test_eval_metrics \ --pipeline_config_path = training / fast_rcnn_resnet101_coco-Copy1.config

Eval_input_reader в fast_rcnn_resnet101_coco-Copy1.config указывает на тестовый TFRecord с достоверной информацией и информацией об обнаружении.

  1. Я также попробовал object_detection / utils / object_detection_evaluation, чтобы получить оценку. Это ничем не отличается от первого подхода, потому что в нем бесполезны одни и те же базовые функции - evalator.evaluate ()

Буду признателен за любую помощь в этом.


person Manish Rai    schedule 07.01.2019    source источник
comment
С помощью пары модульных тестов и исследований указывается на использование неправильного сопоставления категорий (карты меток) в данных. Например, если карта меток не содержит класса 4, но из-за ошибки в данных в наземной истине есть класс 4, тогда значения метрики будут -1,0.   -  person Manish Rai    schedule 12.01.2019


Ответы (3)



Для меня я просто запускаю 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

pipeline.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