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


11

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

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

Ответы:


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.