Автоматическое распознавание еды на изображениях

Опубликовано: 09.03.2022

Автор: Оконешников Дмитрий


Введение

Всем привет, это Оконешников Дмитрий. Я учусь в 11И классе МАОУ Лицея №22 "Надежда Сибири" и хочу представить вам свой проект, выполненный в рамках учебной программы.

Предыстория

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

Идея

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

Актуальность

Согласно Всемирной Организации Здравоохранения излишним весом страдают примерно 2 млрд. людей. Данный проект, при должном его развитии, мог бы помочь этим людям.

Ход работы

Выполнение данной работы началась с изучения различных видов нейронных сетей. Было ясно, что данное приложение будет распознавать изображения, поэтому нужно было смотреть в сторону сверточных нейронных сетей. А также идея подсчета количества калорий привело к сетям, реализующих сегментацию экземпляров. Таким образом, был выбран Mask R-CNN.

Следующим важным шагом была сборка датасета. Для этого нужно было выбрать то, что мы будем распознавать — классы. Это бананы, яблоки, апельсиновый сок, мандарины, киви, рыба, рис, хлеб, молоко, чай, шоколад, апельсины. Для того, чтобы собрать эти изображения были использованы части существующих датасетов и была написана специальная программа, которая скачивала изображения, содержащие данные продукты из гугла. Был собран датасет из 16 классов, 1735 изображений в train и 248 изображений в validation.

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

Был реализован Telegram-бот в качестве интерфейса из-за простоты его создания и удобства для конечного пользователя.

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

Итоги

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

Пример некорректного распознавания (вместо кружки чая был определен шоколад):

Контакты