Обучение объектного детектора на слоях наборов данных с возрастающей неоднозначностью - PullRequest
0 голосов
/ 04 октября 2019

У меня есть несколько камер Raspberry Pi, ориентированных на кормушки для птиц, постоянно использующих график обнаружения объектов TensorFlow (SSD MNet2) для обнаружения птиц. Со временем я построил набор данных с + 10k изображений для 11 видов, часто переучивая график. Я намерен ограничить количество элементов в наборе данных до 10 тыс. Элементов (возможно, произвольно).

В наборе данных происходит поток данных, так что он постоянно улучшается. Новые кандидаты обнаруживаются судьей (мной) следующим образом:

  • Добавить в качестве нового пункта обучения / оценки. Обнаружение оценивается представителем категории. После настройки изображение и обнаружение могут быть добавлены к истинному значению

  • Добавить в качестве примера счетчика. Обнаружение ложно, но может быть преобразовано в неклассифицированный пример счетчика. После настройки изображение и обнаружение могут быть добавлены к наземной истине

  • Сбросить элемент Не полезно для обучения.

Также обратите внимание, что некоторые существующиеданные удаляются при наличии достаточных более качественных данных.

На сегодняшний день все предметы из наземной истины доставляются на обучение с весом 1,0.

См .: https://github.com/tensorflow/models/blob/master/research/object_detection/data_decoders/tf_example_decoder.py

    def default_groundtruth_weights():
      return tf.ones(
          [tf.shape(tensor_dict[fields.InputDataFields.groundtruth_boxes])[0]],
          dtype=tf.float32)

Но это, очевидно, не очень верно. Из проверки я знаю, что некоторые вещи не так хороши, но в любой момент они являются лучшими доступными примерами. Со временем, в конце концов, плохие предметы заменяются лучшими.

Ранжированные записи тренировок

Я задумался о том, как повлияет на обучение и будет ли ситуация улучшена путем ранжирования набора данных некоторымиценность идеальности, а затем обучение в последовательных рядах, так что модель инициализируется на самых идеальных данных и впоследствии изучает все меньше и меньше идеальных данных.

То, что я пытаюсь избежать, это то, что модель платит слишком многовнимание к bad данным и недостаточно к good данным, особенно в начальные эпохи обучения. Где данные bad и good означают, насколько хорошо элементы данных способствуют достоверности и визуализации (с помощью Lucid) обученных моделей.

Набор взвешенных данных

Установка веса (между 0и 1) на предмете означает, что потери, рассчитанные для этого предмета, уменьшаются (на весовой коэффициент);Я предполагаю, что это означает «уделять меньше внимания этому элементу на столько».

См .: Веса классов для балансировки данных в TensorFlow Object Detection API

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

Результаты показаны в следующей таблице:

| Class\Weight Bin | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 | 0.9 | Total| 
| blackbird        |     |     |  34 |  84 | 212 | 305 | 115 |  750 | 
| blue tit         |     |     |  47 |  94 | 211 | 435 | 241 | 1028 |
| collared dove    |     |     |  17 |  52 | 236 | 302 | 101 |  708 |
| dunnock          |     |     |  50 | 140 | 260 | 236 | 228 |  914 |
| goldfinch        |     |     |  60 | 103 | 220 | 392 | 164 |  939 |
| great tit        |     |  35 |  42 |  71 | 234 | 384 | 201 |  967 |
| mouse            |  40 |  29 |  35 |  50 |  87 | 142 |     |  383 |
| robin            |     |  43 |  44 |  97 | 175 | 207 |  52 |  618 |
| sparrow          |     |  31 |  51 |  75 | 278 | 475 | 220 | 1130 |
| starling         |     |  19 |  28 |  39 |  97 | 227 |  73 |  483 |
| wood pigeon      |     |     |  10 |  34 |  82 | 265 | 560 |  951 |
|                  |     |     |     |     |     |     |     | 8871 |

Первые результаты обучения выглядят многообещающими, так как модельтренируется хорошо. Но я еще не рассмотрел визуализации.

Является ли установка соответствующего веса для каждого элемента набора данных эквивалентной распределению по уровням доставки рейтинговых тренировочных записей?

1 Ответ

0 голосов
/ 11 октября 2019

Сначала попробуйте удалить неоднозначные данные из набора данных, обучите модель и сравните ее результаты с предыдущей моделью.

Если это не помогает, тогда используйте данные о весах классов для балансировки данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...