Нибблер

Использование машинного зрения для классификации сортов сыра.

«Как вы можете управлять страной, в которой выращивают двести сорок шесть сортов сыра?» Президент Франции Шарль де Голль, 1962 г.

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

Я использовал Python с запросами, Selenium и BeautifulSoup для очистки изображений сыра, чтобы сначала создать базу данных. Затем я использовал TensorFlow и модель Google Inception, чтобы обучить классификатор сыра на собранных мною изображениях.

Создание библиотеки изображений сыра было очень амбициозным, но в конце концов я смог добиться 75% точности первого предположения на модели, обученной распознавать 30 видов французского сыра плюс туман Гумбольдта - потому что это мой личный фаворит.

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

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

Подход

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

Библиотека изображений

Для начала мне нужно было решить, какие сорта сыра включить в мой классификатор - не так просто, как может показаться. ImageNet включил в свою базу данных 33 класса сыра, но, похоже, они не были выбраны строго - например, Velveeta, плавленый сыр и блочный сыр. Я подумал, что было бы лучше сосредоточиться на кустарных сырах, поскольку не имело большого смысла пытаться классифицировать известные бренды.

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

Блокноты для веб-скрейпинга

  • Блокнот для извлечения из результатов поиска Google Images.
  • Блокнот для скрапинга из iStock Photos.

Проверка библиотеки

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

Использование TensorFlow и модели Google Inception для распознавания изображений

Сегодня в области распознавания изображений используются сверточные нейронные сети с глубоким обучением и их разновидности, известные как остаточные сети. За последние несколько лет Google добился большого прогресса в своих моделях Inception, которые были реализованы в TensorFlow, библиотеке машинного обучения Google с открытым исходным кодом. Я буду использовать модель Inception-v3, поскольку она должна тренироваться немного быстрее и по-прежнему давать результаты, аналогичные более поздним моделям Inception-v4 и Inception ResNet.

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

Методика: перенос обучения

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

Современные модели распознавания объектов имеют миллионы параметров, и их полное обучение может занять недели. Трансферное обучение - это метод, который сокращает большую часть этой работы за счет использования полностью обученной модели для набора категорий, таких как ImageNet, и переобучения существующих весов для новых классов . Https://www.tensorflow.org/tutorials/image_retraining

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

Обучение

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

Для первого раунда обучения я использовал настройки по умолчанию, установленные для предварительно обученной модели Inception. Данные были разделены на 80% для обучения, 10% для проверки и 10% для тестирования. Скорость обучения была установлена ​​на 0,01 с 4000 эпох обучения.

К моему небольшому удивлению, модель показала неплохие результаты, точность финальных тестов составила 74,7%. Всего 225 изображений в тестовом наборе, это 168 правильно идентифицированных изображений.

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

В 4-м раунде я увеличил количество эпох до 12000 и снизил скорость обучения до 0,005. Точность как поезда, так и проверки немного улучшилась, но точность теста снизилась на 1,4%, или на 3 изображения.

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

Наилучшая точность теста, которую мне удалось достичь, составила 75,1%, что представляет собой лишь еще одно изображение, правильно идентифицированное в течение первого раунда обучения. Это было достигнуто за 20 000 эпох и скорость обучения 0,004.

Немного интереснее взглянуть на некоторые изображения в тестовом наборе и посмотреть, как модель работает. Ниже приведены некоторые изображения и результат работы функции softmax:

Реблошон:

  • Реблошон: 32,0%
  • Бри де Мо: 29,6%
  • Мюнстер: 11,6%
  • Камамбер: 10,9%
  • Pont l’Eveque: 4,9%

Мимолетт:

  • Мимолетт: 52,6%
  • Святой Нектер: 12,6%
  • Оссау Ирати: 11,2%
  • Конте: 9,9%
  • Канталь: 5,7%

Конте:

  • Конте: 56,3%
  • Бофорт: 40,6%
  • Канталь: 2,8%
  • Морбье: 0,1%
  • Туман Гумбольта: 0,03%

Ливаро:

  • Эпоис: 49,4%
  • Маройль: 31,0%
  • Мюнстер: 7,9%
  • Ливарот: 5,2%
  • Pont l’Eveque: 4,2%

Основные выводы и заключение

Достижение точности в 75% было довольно неожиданным, учитывая, насколько похожи многие виды сыра друг на друга - например, Бри и Камамбер или Грюйер и Конт. Решение попробовать создать библиотеку изображений сыров было очень амбициозным и отняло у меня большую часть времени во время проекта. В ходе этого процесса возникло множество ограничений. Помимо упомянутых ранее, многие изображения сыра, которые появляются при поиске изображений, как правило, являются маркетинговыми изображениями и очень похожи друг на друга. Это, вероятно, добавило к переобучению, наблюдаемому во время тренировки.

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

Ресурсы:

Https://www.tensorflow.org/tutorials/image_retraining https://github.com/tensorflow/models/tree/master/inception