Используя предварительно обученный классификатор CNN и примените его к другому набору данных изображений

11

Как бы вы оптимизировать с заранее обученных neural network применять его в отдельную проблему? Вы бы просто добавили больше слоев в предварительно обученную модель и протестировали ее на своем наборе данных?

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

Sid
источник

Ответы:

15

Читайте - когда трансферное обучение невыгодно? (Благодаря @media) (выглядит очень информативно для меня, поэтому добавлено здесь, чтобы этот ответ был полным ...)

Ответ на свой вопрос .. (начинается здесь)

Трансферное обучение - это то, что вы ищете ..

  • Когда мы дали задачу Deep Learning, скажем, тот, который включает в себя обучение сверточного нейронной сети (Covnet) на наборе изображений, наш первый инстинкт должен был бы обучить сеть с нуля. Однако на практике глубокие нейронные сети, такие как Covnet, имеют огромное количество параметров, часто в диапазоне миллионов. Обучение Covnet на небольшом наборе данных (который меньше, чем число параметров) сильно влияет на способность Covnet обобщать, что часто приводит к переобучению.

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

Когда нужно настроить модели?

  • В общем, если наш набор данных не сильно отличается по контексту от набора данных, на котором обучается предварительно обученная модель, мы должны пойти на тонкую настройку. Предварительное обучение сети на большой и разнообразный набор данных, как в ImageNet захваты универсальных функции, такие как кривые и края в ранних слоях, которые являются актуальными и полезными для большинства задач классификации.

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

  • Еще одна проблема заключается в том, что если наш набор данных небольшой, то точная настройка предварительно обученной сети в небольшом наборе данных может привести к переоснащению, особенно если последние несколько уровней сети полностью связаны между собой, как в случае сети VGG. Исходя из моего опыта, если у нас есть несколько тысяч необработанных выборок с реализованными общими стратегиями увеличения данных (перевод, вращение, переворачивание и т. Д.), То точная настройка обычно дает нам лучший результат.

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

Методы тонкой настройки

Ниже приведены некоторые общие рекомендации по тонкой настройке реализации:

  • Обычная практика - обрезать последний слой (слой softmax) предварительно обученной сети и заменить его нашим новым слоем softmax, которые соответствуют нашей собственной проблеме. Например, предварительно обученная сеть в ImageNet имеет слой softmax с 1000 категориями.

  • Если нашей задачей является классификация по 10 категориям, новый слой softmax сети будет состоять из 10 категорий вместо 1000 категорий. Затем мы запускаем обратное распространение в сети для точной настройки предварительно обученных весов. Убедитесь, что выполняется перекрестная проверка, чтобы сеть могла хорошо обобщать.

  • Используйте меньшую скорость обучения для обучения сети. Так как мы ожидаем, предварительно подготовленных веса вполне хорошо уже по сравнению с случайным образом инициализируются веса, мы не хотим, чтобы исказить их слишком быстро и слишком много. Обычная практика - сделать начальную скорость обучения в 10 раз меньше, чем та, которая используется для тренировки с нуля.

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

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

Источник моего ответа является переводом этих удивительных курсов ..

Для дальнейших чтений,

Адитья
источник
Если вы выполняете только извлечение объектов, как в не тонкой настройке любого из слоев. Есть ли причина заменить последний плотный слой линейным классификатором? Почему бы не сохранить его как новый плотный слой и просто переобучить, сохраняя все нижние слои замороженными? Это просто потому, что тренировка линейного классификатора будет быстрее, чем тренировка нового плотного слоя?
CMCDragonkai
1
Для извлечения объектов нет необходимости добавлять слои, но добавляются несколько слоев, таких как «Объединение в пул» и «Изменение размера фигуры», чтобы соответствовать тусклым цветам и, возможно, уменьшить промежуточные значения; Конечно, обучить линейную модель быстрее, чем NN, но вы можете попробовать оба варианта и посмотреть, что лучше всего подходит для вашего случая использования; Разморозьте последний плотный слой и переподготовку с несколькими дополнительными слоями, чтобы соответствовать вашей проблеме, является обычной практикой
Aditya