Нейросеть научили считать калории блюда по фотографии

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

Кроме того, алгоритм даже пытается определить, из чего приготовлено блюдо!

Людям, которые следят за собственным весом, важна пищевая ценность потребляемой пищи. Если на упаковках продуктов её обычно указывает производитель, то как быть в случае самостоятельно приготовленной пищи или блюд в местах общественного питания? Решить эту проблему взялись немецкие учёные из Технологического института Карлсруэ, которые разработали нейросеть, определяющую пищевую ценность на основе фотографии.

В основе алгоритма лежит свёрточная нейросеть для распознавания объектов, обученная на фотографиях библиотеки ImageNet. Использование предварительно обученной свёрточной нейросети — популярный метод, позволяющий брать за основу алгоритм, который достаточно хорошо умеет определять признаки на изображениях и дополнительно обучать его последние слои под свою конкретную задачу.

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

Для обучения готового алгоритма авторы воспользовались сайтом рецептов, где у большинства из них есть список ингредиентов и фотография готового блюда, а также базой пищевой ценности различных продуктов. Из него учёные убрали лишние слова и перевели примерные величины в конкретные. Затем они сопоставили данные с двух предварительно обработанных датасетов и собрали их в один, содержащий 70 тысяч рецептов и 308 тысяч фотографий.

Тестирование нейросети на новых рецептах показало, что погрешность расчёта на 100 грамм блюда составляет всего 46,7 калории, 2,51 грамма белка, 3,88 грамма жира и 6,97 грамма углеводов. Результат можно улучшить, если использовать более совершенные алгоритмы для предварительной обработки рецептов. Учёные опубликовали в открытом доступе исходный код нейросети и код для формирования датасета.