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

Мой коллега показал мне этот комикс xkcd год назад, и хотя мы оба без конца хихикали над тяжелым положением всех практикующих ОД, кроме нас, правда была в том, что… мы ничем не отличались. Я проектировал, внедрял и исполнял алгоритмы на основе машинного обучения пару лет, но так и не понял, что происходит (и, по моему опыту, то же самое не понимали и все вокруг меня). Никогда не проходил формальную подготовку по глубокому обучению и не имел докторской степени. чтобы владеть, я всегда чувствовал (иррационально, но понятно), что нахожусь в непреодолимо невыгодном положении. Несмотря на то, что я был очень склонен к математике, я был разочарован всей плотной теорией и шаблонными подходами к нейронным сетям, градиентному спуску, сверткам, ‹вставьте сюда модное словечко ML›.

Достаточно сказать, что я был потрясен, услышав о fast.ai. Несомненно, современная производительность, которую обеспечивают модели на основе библиотеки fast.ai при рекордно высокой скорости и минимальных вычислительных ресурсах / данных, является огромным плюсом, но это видение и вдохновение Джереми Ховарда и Рэйчел Томас. Который меня продал. Тезис состоит в том, что существует исключительность (как в том, как его преподают, так и, что, возможно, более важно, в окружающей его культуре), в глубоком обучении, которое не дает ему двигаться в правильном направлении. fast.ai утверждает, что для полного раскрытия потенциала глубокого обучения технология должна быть намного проще в использовании, более надежной и более интуитивно понятной

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

Как выглядят данные

Чтобы получить мои обучающие и проверочные наборы, мы можем использовать пакет python google-images-download для программного сохранения изображений из каждого из четырех классов fry. Затем мы можем загрузить данные в ImageDataBunch, универсальную структуру библиотеки fast.ai, которая обрабатывает различные механизмы для чтения файлов изображений и работы с преобразованиями и размерами изображений. С помощью этого объекта ImageDataBunch мы можем визуализировать некоторые изображения, чтобы дважды проверить их смысл:

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

Обучение нашей модели

Одним из ключевых направлений fast.ai и важнейших достижений современной практики глубокого обучения является идея трансферного обучения для сверточных нейронных сетей - использования предварительно обученных моделей и соответствующих им весов, полученных из больших наборов данных в качестве отправная точка для другой, но связанной задачи. Для классификации изображений мы обычно используем обширный набор данных ImageNet в качестве отправной точки. В данном конкретном случае мы работаем с resnet34 (часто используемая предварительно обученная модель классификации изображений) в качестве архитектурной основы для нашей изученной модели.

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

Совсем неплохо для первого прохода - давайте посмотрим, сможем ли мы сделать немного лучше!

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

Удивительный! Нам удалось снизить уровень ошибок до 14% (86% правильных прогнозов)!

Интерпретация результатов

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

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

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

Заключение

Я очень взволнован результатами, которые мы получили здесь. Учитывая крохотный размер данных (~ 130 изображений на класс), шокирующе короткий период обучения (в сумме ~ 30 секунд) и качество изображения, я считаю удивительным, что мы смогли достичь точности 86%. Сразу несколько вопросов, которые я с нетерпением жду изучения на следующих занятиях: 1.) как справиться с явным переобучением (на последней итерации потеря 0,2 тренировки против 0,4 потери проверки), структура и механика. resnet34 и аналогичных предварительно обученных архитектур, а также динамика скорости обучения / оптимизации параметров.

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

Полный блокнот для справки здесь :)