«SeeFood»: создание двоичного классификатора с использованием трансферного обучения

Силиконовая долина - одно из моих любимых шоу. У него безупречный комедийный тайминг, великолепный актерский состав и идеальная карикатура на все, что связано с технологиями. Одна из моих любимых сцен из сериала - это когда один из начинающих предпринимателей, Цзянь Ян, разрабатывает, казалось бы, бесполезное приложение, которое классифицирует еду как «хот-дог» или «не хот-дог».

Я не буду отдавать должное описанию сцены, поэтому вот видео.

Предупреждение: видео содержит нецензурную лексику.

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

Сбор данных

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

Используя Selenium, мы смогли собрать простой скрипт, который сканирует изображения Google для хот-догов. Через пару часов у нас было загружено 2000 изображений хот-догов.

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

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

Передача обучения с помощью Inception V3

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

В Inception V3 уже есть класс хот-догов, но мы все равно решили доработать модель, чтобы усилить классификатор. В отличие от оригинального Inception V3, новый классификатор будет различать только хот-доги и «не хот-доги».

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

Тестирование модели

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

Однако это дало нам повод купить и съесть хот-доги.

Из исходных изображений, используемых для тестирования, Inception V3 правильно классифицировал хот-доги 9/10, в то время как наш классификатор правильно классифицировал хот-доги 10/10. Оба классификатора смогли идентифицировать «не хот-доги» со 100% точностью.

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