Методы построения классификаторов изображений (и опор), которые сработали для нас

Как я решил, о чем писать

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

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

Я решил поговорить о методах, которые последовательно улучшали производительность моделей, созданных моей командой на работе (классификация и сегментация изображений, обнаружение объектов) и на досуге (мы получили ранги 1, 2, 3, 4, 9, 13, 22 в Конкурс Analytics Vidya - классификационный конкурс сцены, спонсируемый Intel).

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

Классификаторы изображений полезны не только для классификации

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

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

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

В этом посте мы уделяем особое внимание классификаторам изображений.

Недостаточно ли трансферного обучения?

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

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

Недостаток данных

Все проблемы в реальном мире сводятся к одному: нехватке данных. Отсутствие достаточного количества данных - очевидная проблема, но я хотел бы отметить, что это влияние на качество модели неодинаково для разных задач.

  • Много классов: трансферное обучение, как правило, очень хорошо работает, если количество классов невелико, даже если у нас мало данных. Чем больше у нас классов, тем больше данных нам нужно, и связь, скорее всего, не является линейной (для каждых 2х классов нам может потребоваться 4х данных).
  • Множество детализированных классов: если мы пытаемся классифицировать объекты, которые очень похожи друг на друга (одежда / мода, растения, лица людей), нам понадобится гораздо больше данных, даже если трансферное обучение.
  • Избыточность данных: многие изображения могут быть похожими, не отражая достаточной естественной неизменности и, следовательно, не добавляя большой ценности. Это может быть сложно уловить, но обучение разумной модели для разных размеров выборки даст вам подсказку.

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

GAN для увеличения объема данных

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

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

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

Просмотр изображений с наибольшими потерями

Одна из вещей, которые мне нравились в библиотеке fastai, - это то, как они говорят об инспектировании данных из первых рук, особенно тех, которые несут наибольшую потерю после обучения модели. У них даже есть хорошие утилиты, которые помогут вам легко сделать это на ноутбуках, и Джереми рассказывает об этом в начале своей книги. Напротив, я не видел ни одной книги по глубокому обучению (с использованием fastai, tensorflow или pytorch), в которой говорилось бы об этом (пожалуйста, дайте мне знать, если я что-то упускаю).

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

Пополнение смешанных (и семейных) данных

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

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

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

Увеличение времени тестирования (TTA)

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

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

Однако TTA часто нецелесообразно для моделей, развернутых в большом масштабе, где нам часто приходится много работать, чтобы сократить время вывода для моделей, развернутых на процессоре. Я думаю, что идеи, упомянутые в недавней статье Потери в обучении для увеличения времени тестирования, потенциально полезны, и я с нетерпением жду возможности опробовать их в следующий раз (что может занять некоторое время, не каждый проект получит выгоду от 0,5%). улучшение производительности).

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

Что вам понравилось?

Я бы очень хотел услышать о том, какие методы хорошо сработали для вас на практике, и если вы думаете, что в этом посте что-то упущено / вводит в заблуждение. Оставьте здесь комментарий или напишите мне в Twitter @dataBiryani.