Как работает тренировка по обнаружению объектов при обратном распространении? - PullRequest
0 голосов
/ 14 декабря 2018

Я использую tenorflow для обучения модели f-rcnn inception v2.

Допустим, у меня есть 6000 изображений:

  • от img 1 до 3000: каждыйНа изображении есть и собака, и кошка, но я пометил только собаку.

  • с img 3001 до 6000: на каждом изображении есть и собака, и кошка, но я пометил только кошку.

Таким образом, на каждом изображении есть собака и кошка, но я пометил собаку только на половине, а кошку на другой половине.

При создании набора данных я не перемешиваю изображения, поэтому у меня будут первые 3000 imgs, помеченные собаками, а затем остальные 3000 imgs, помеченные кошками.

Мои вопросы:

  1. Влияет ли порядок изображений на результат?Изменится ли это, если я сначала создам набор данных с собаками, а затем с кошками?Будет ли это по-другому, если я перетасую данные, чтобы смешать кошек и собак?

  2. При обратном распространении влияет ли тот факт, что я не пометил кошек, пока помечал собаку и наоборот, влияет нарезультат?Модель не обучена, потому что у меня есть собаки и кошки без маркировки?Получу ли я тот же результат, что и наличие 3000 изображений с пометкой как собаки, так и кошки для каждого изображения?

  3. Причина, по которой я не помечаю собак и кошек на каждом изображении, заключается в том, что у меня естьизображения неподвижной камеры, где иногда вы видите, как разные собаки или одна и та же собака двигаются вокруг, когда кошка спитПоэтому каждый раз помечать спящего кота будет означать наличие одного и того же изображения на входе несколько раз.(и, конечно, это занимает много времени для маркировки).Как я мог решить это?Должен ли я обрезать изображение перед созданием набора данных?Достаточно ли хорошо, если я создаю набор данных eval, в котором у меня есть как собаки, так и кошки, помеченные на каждом изображении, и набор данных поезда, где у меня есть только метка объекта (собаки), а не кошка?

Спасибо

1 Ответ

0 голосов
/ 14 декабря 2018

1 - Да, порядок изображений влияет на результат [1], и, что более важно, он влияет на скорость, с которой ваш алгоритм будет учиться.По сути, ваш алгоритм пытается выучить конфигурацию весов, которые минимизируют вашу функцию потерь для всех примеров, которые вы ей показываете.Это достигается путем размещения этих весов в конфигурации, которая обнаруживает те особенности в данных, которые различают кошек и собак.Но он делает это только с учетом одного пакета входов за раз.Каждое изображение в пакете рассматривается индивидуально, и подпорка решает, как следует изменить вес, чтобы алгоритм лучше обнаруживал кошку / собаку на этом изображении.Затем он усредняет все эти изменения для каждого изображения в партии и выполняет эту настройку.

Если ваша партия содержит все ваши изображения, то порядок не имеет значения;он внесет корректировку, которая, как он ожидает, обеспечит наибольшее чистое снижение вашей функции потерь для всех данных.Но если партия содержит меньше, чем все данные (что она неизменно делает), тогда она вносит корректировку, которая помогает обнаруживать собак / кошек только на изображениях в этой партии.Это означает, что если вы покажете ему больше кошек, чем собак, он решит, что особенность, принадлежащая в равной степени как кошкам, так и собакам, фактически создает повышенную вероятность того, что рассматриваемое животное является кошкой, что является ложным.Потому что в тех случаях, когда эта особенность была обнаружена, с большей вероятностью были кошки.Это исправит себя со временем, так как соотношение кошек и собак выровняется, но примет окончательную конфигурацию гораздо медленнее, потому что ему придется выучить и отучить ненужные функции в данных.

КакНапример, в вашей настройке к тому времени, когда ваш алгоритм обнаружил половину данных, все, что он узнал, это то, что «все, что похоже на кошку или собаку - это собаки».Те особенности, которые различают кошек и собак на изображениях, не помогли снизить вашу функцию потери.На самом деле он будет иметь плохо изученные функции, общие как для кошек, так и для собак как специфичные для собак, и ему придется позже их отучить, поскольку он увидит больше данных.

С точки зрения общего результата: в процессе обучения вы, по существу, проходите пространство многомерной оптимизации, следуя его градиенту, пока конфигурация весов не достигнет локального минимума в этом пространстве, из которогоВеличина барьера для преодоления превышает уровень, который разрешен вашей скоростью обучения.Отображение одного класса, а затем другого приведет к более извилистому пути к глобальному минимуму и, таким образом, увеличит вероятность застрять в неоптимальном локальном минимуме.[2]


2 - Если все изображения в вашем наборе данных содержат собаку, вы действительно хотите пометить эту собаку на каждом изображении.Это делает три вещи:

  • Удваивает размер вашего набора данных (больше данных = лучшие результаты).
  • Предотвращает ложное наказание модели за точное обнаружение собаки на изображениях, где выне помечены собаки.
  • Запрещает алгоритму обнаруживать несвязанные функции на изображениях.

Удвоение размера набора данных хорошо по очевидным причинам.Но, показывая входные данные, которые содержат собаку, без обозначения этой собаки, вы по сути говорите своему алгоритму, что это изображение содержит no dog [3].Что является ложным.Вы, по сути, меняете шаблоны, которые вы просите, чтобы алгоритм обнаружил, из тех, которые могут отделить кошка / собака от «без кошки / собаки» и кошка против собаки от чьих, которые могут отделить помеченные собаки против непомеченных собак , которые не являются полезными функциями для вашей задачи.

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


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

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

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

Эти предложения могут улучшить ваши результаты, но реальность такова, что выбор больших, разнообразных наборов данных, которые всесторонне включают в себя те функции, которые являются ключевыми для идентификации вашего объекта, является основнойчасть построения успешной модели глубокого обучения.Это зависит от того, насколько однородны экземпляры кошки в ваших данных, но если ваша модель только когда-либо видела кошку спереди, она не будет узнавать кошку сзади.


TLDR:

  • 1 ДА, перемешайте их.
  • 2 ДА, пометьте их всех.
  • 3 Получите более качественные данные.Или: предварительная подготовка, упорядочение и расширение данных.

[1] Это зависит от размера пакетов, в которые вы вводите свои данные в модель.

[2] Это основано на моей собственной интуиции, и я рад, что меня здесь поправили.

[3] Это в некоторой степени зависит от того, как ваша функция потерь обрабатывает изображения, в которых нет собаки.

...