Как запустить API обнаружения объектов TF model_main.py только в режиме оценки - PullRequest
2 голосов
/ 01 апреля 2019

Я бы хотел оценить обученную пользователем модель обнаружения объектов Tensorflow на новом тестовом наборе с помощью Google Cloud.

Я получил начальные контрольные точки от: https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

Я знаю, что API-интерфейс обнаружения объектов Tensorflow позволяет мне одновременно проводить обучение и оценку с помощью:

https://github.com/tensorflow/models/blob/master/research/object_detection/model_main.py

Чтобы начать такую ​​работу, я отправляю следующую команду ml-engine:

gcloud ml-engine jobs submit training [JOBNAME] 
--runtime-version 1.9 
--job-dir=gs://path_to_bucket/model-dir 
--packages dist/object_detection- 
    0.1.tar.gz,slim/dist/slim-0.1.tar.gz,pycocotools-2.0.tar.gz 
--module-name object_detection.model_main 
--region us-central1 
--config object_detection/samples/cloud/cloud.yml 
-- 
--model_dir=gs://path_to_bucket/model_dir 
--pipeline_config_path=gs://path_to_bucket/data/model.config

Однако, после того, как я успешно обучил модели переноса, я хотел бы использовать расчетные метрики производительности, такие как COCO mAP (http://cocodataset.org/#detection-eval) или PASCAL mAP (http://host.robots.ox.ac.uk/pascal/VOC/pubs/everingham10.pdf)) в новом наборе тестовых данных который ранее не использовался (ни во время обучения, ни во время оценки).

Я видел, что в model_main.py:

есть возможный флаг
flags.DEFINE_string(
    'checkpoint_dir', None, 'Path to directory holding a checkpoint. If '
    '`checkpoint_dir` is provided, this binary operates in eval-only 
     mode, '
    'writing resulting metrics to `model_dir`.')

Но я не знаю, действительно ли это означает, что model_main.py можно запустить в монопольном режиме оценки? Если да, то как мне отправить задание ML-Engine?

В качестве альтернативы, есть ли какие-либо функции в Tensorflow API, которые позволяют мне оценивать существующий выходной словарь (содержащий ограничивающие рамки, метки классов, оценки) на основе COCO и / или Pascal mAP? Если есть, я мог бы легко прочитать локально в файле записей Tensorflow, выполнить вывод и затем оценить выходной словарь.

Я знаю, как получить эти метрики для набора данных оценки, который оценивается во время обучения в model_main.py. Тем не менее, исходя из моего понимания, я все равно должен сообщать о производительности модели на новом наборе тестовых данных, поскольку я сравниваю несколько моделей и реализую некоторую оптимизацию гиперпараметров, и, таким образом, я не должен сообщать о наборе данных оценки, я прав? На более общей ноте: я действительно не могу понять, почему можно было бы перейти от отдельного обучения и оценки (как это происходит в унаследованном коде) к комбинированному сценарию обучения и оценки?

Edit: Я нашел два связанных поста. Однако я не думаю, что предоставленные ответы полны:

как проверить обе тренировочные / тестовые характеристики в тензорном потоке object_detection

Как оценить предварительно обученную модель в API обнаружения объекта Tensorflow

Последний был написан, в то время как API обнаружения объектов TF все еще имел отдельные сценарии оценки и обучения. Это уже не так.

Большое спасибо за любую помощь.

1 Ответ

1 голос
/ 04 апреля 2019

Если вы укажете checkpoint_dir и установите run_once в значение true, тогда он должен выполнить оценку ровно один раз для набора данных eval. Я считаю, что метрики будут записаны в model_dir и также должны появиться в журналах вашей консоли. Я обычно просто запускаю это на своем локальном компьютере (так как он просто делает один проход по набору данных) и не является распределенной работой. К сожалению, я не пробовал запускать этот конкретный код на CMLE.

Относительно того, почему у нас есть комбинированный сценарий ... с точки зрения API обнаружения объектов мы пытались написать что-то в парадигме tf.Estimator - но вы правы, что лично я нашел это немного проще, когда две функции жили в отдельных двоичных файлах. Если вы хотите, вы всегда можете обернуть эту функцию в другой двоичный файл:)

...