Как добавить пользовательские метрики оценки в API обнаружения объектов Tensorflow? - PullRequest
0 голосов
/ 21 июня 2019

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

  • Точность значений для операций ввода-вывода 0,5-0,95 сс приращениями 0,05
  • Значения восстановления для IOU 0,5-0,95 с приращениями 0,05
  • Значения AUC для точности и повторного вызова в диапазоне 0-1 с шагом 0,05

В настоящее время я протестировал модификацию уже существующих показателей оценки кокосов путем настройки некоторого кода PycocAPI в PythonAPI и файла дополнительных показателей в исследовательской модели Tensorflow.В настоящее время значения вывода по умолчанию для оценки COCO следующие:

Precision/mAP
Precision/mAP@.50IOU
Precision/mAP@.75IOU
Precision/mAP (small)
Precision/mAP (medium)
Precision/mAP (large)
Recall/AR@1
Recall/AR@10
Recall/AR@100
Recall/AR@100 (small)
Recall/AR@100 (medium)
Recall/AR@100 (large)

Поэтому я решил сначала использовать coco_detection_metrics в моем поле eval_config внутри файла .config, используемого для обучения

eval_config: {
  metrics_set: "coco_detection_metrics"
}

И редактируйте cocoeval.py и cocotools.py несколько раз (пропорционально количеству значений), добавляя больше элементов в список статистики и общий словарь статистики, чтобы получить желаемый результат.В демонстрационных целях я собираюсь показать только один пример, добавив точность при IOU = 0,55 на вершину точности при IOU = 0,5.

Итак, это модифицированный метод класса COCOeval внутри cocoeval.py

def _summarizeDets():
    stats[1] = _summarize(1, iouThr=.5, maxDets=self.params.maxDets[2])
    stats[12] = _summarize(1, iouThr=.5, maxDets=self.params.maxDets[2])

и отредактированные методы класса COCOEvalWrapper внутри coco_tools.py

summary_metrics = OrderedDict([
    ('Precision/mAP@.50IOU', self.stats[1]),
    ('Precision/mAP@.55IOU', self.stats[12])
for category_index, category_id in enumerate(self.GetCategoryIdList()):
    per_category_ap['Precision mAP@.50IOU ByCategory/{}'.format( category)] = self.category_stats[1][category_index]
    per_category_ap['Precision mAP@.55IOU ByCategory/{}'.format( category)] = self.category_stats[12][category_index]

Было бы полезноЯ знаю более эффективный способ решения моей проблемы и легко запрашиваю список пользовательских метрик оценки без необходимости настраивать уже существующие файлы COCO.В идеале моя цель primary состоит в том, чтобы

  • иметь возможность создавать настраиваемый вывод консоли на основе показателей, приведенных в начале вопроса

и мои второстепенные цели:

  • Экспорт метрик с соответствующими значениями в формате JSON
  • Визуализация трех графиков в Tensorboard
...