Требуются ли отрицательные примеры для обучения переносу классификации изображений?

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

Получил готовую модель. В EfficientNet B4 с весами ImageNet применялось трансферное обучение для определения 4 классов: 3 целевых и 4-й «Нет». Последний обучался на примерах случайных изображений, не содержащих ни одного из целевых объектов.

Вопрос в том, правильный ли это подход – нужен ли 4-й класс?

Моя интуиция такова, что сеть следует обучать только на трех целевых классах. Если выходные вероятности остаются ниже некоторого порога (90%?), изображение следует рассматривать как НЕ содержащее ни одного из целевых объектов. Я прав?


person Serge    schedule 21.02.2020    source источник


Ответы (1)


Из-за характера функции softmax и способа обучения сети вам нужен 4-й класс.

Давайте рассмотрим конкретный пример: вы обучаете свою сеть различать яблоки, апельсины и бананы. Тем не менее, вы каким-то образом получаете фотографию сливы.

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

Вы можете ожидать следующие два случая:

  1. Выходная вероятность гарантированно равна 1/N для неизвестного класса, учитывая, что вы тестируете неизвестный класс N+1.
  2. Некий порог, за которым (как вы предполагали) ‹90% это не класс.

Предположим следующие случаи:

  1. Что, если у вас есть случай, когда яблоко действительно выглядит как апельсин, и ваша модель правильно предсказывает 40 % яблок, 30 % апельсинов, 30 % бананов, но, поскольку вы применили свой порог, правильно идентифицированное яблоко (истинно положительное) исключается? Простой случай, когда вы устраняете хороший выход вашей сети
  2. У вас все еще может быть 91% отнесения к классу, хотя новое поступление «фруктов» не является частью вашего набора данных; это связано с внутренними вычислениями и тем, как работает softmax.

Личный опыт: однажды я обучил сеть различать разные типы дорожных знаков. Из чистого любопытства я привел в пример стулья для одной гостиной. Я ожидал того же, что и вы (порог), но, к моему большому удивлению, это был 85% «урожайность».

person Timbus Calin    schedule 21.02.2020
comment
Спасибо за обмен вашего опыта! Выбор негативных изображений для обучения кажется очень важным — не просто случайные изображения? ImageNet, первоначально использовавшийся для обучения сети, как я где-то читал, представляет собой знание всего мира изображений. Таким образом, добавление отрицательных примеров ничего принципиально нового не принесет? - person Serge; 21.02.2020
comment
Что ж, основное отличие заключается в том, что с помощью трансферного обучения передаются многие предварительно обученные функции, и, таким образом, ваша задача обучения значительно упрощается. Кроме того, вы также можете добиться лучших результатов/большей точности с помощью трансферного обучения. Однако это не означает, что добавление отрицательных примеров не принесет важных изменений: вам все равно нужно обучить проблему на своем собственном наборе данных (на этих n классах). Опять же, вы можете просто надеяться, что если будет передано много функций, поскольку набор данных большой и разнообразный, это устранит любую возможную проблему (splitthecomment) - person Timbus Calin; 21.02.2020
comment
Идея состоит в том, что это не устранит никакой проблемы, но облегчит реальную проблему, которую вы хотите решить (с помощью трансферного обучения обучение проходит быстрее, и вы также можете достичь лучших результатов). В конце концов, если вы хотите различать, скажем, яблоки, апельсины, сливы и «другие фрукты», вам все равно нужно создать четвертый класс с именем «other_fruit», который будет содержать множество примеров многих фруктов. - person Timbus Calin; 21.02.2020