Нейросеть научили считать калории блюда по фотографии
Людям, которые следят за собственным весом, важна пищевая ценность потребляемой пищи. Если на упаковках продуктов её обычно указывает производитель, то как быть в случае самостоятельно приготовленной пищи или блюд в местах общественного питания? Решить эту проблему взялись немецкие учёные из Технологического института Карлсруэ, которые разработали нейросеть, определяющую пищевую ценность на основе фотографии.
В основе алгоритма лежит свёрточная нейросеть для распознавания объектов, обученная на фотографиях библиотеки ImageNet. Использование предварительно обученной свёрточной нейросети — популярный метод, позволяющий брать за основу алгоритм, который достаточно хорошо умеет определять признаки на изображениях и дополнительно обучать его последние слои под свою конкретную задачу.
Немецкие учёные вдобавок изменили его структуру: вместо классификации он решает задачу регрессии, то есть подбора конкретного значения, а не отнесения фотографии к какому-либо фиксированному классу объектов. Четыре нейрона последнего слоя выдают калорийность блюда и содержание базовых компонентов (белки, жиры, углеводы), а еще 100 нейронов выдают 100 самых вероятных ингредиентов блюда.
Для обучения готового алгоритма авторы воспользовались сайтом рецептов, где у большинства из них есть список ингредиентов и фотография готового блюда, а также базой пищевой ценности различных продуктов. Из него учёные убрали лишние слова и перевели примерные величины в конкретные. Затем они сопоставили данные с двух предварительно обработанных датасетов и собрали их в один, содержащий 70 тысяч рецептов и 308 тысяч фотографий.
Тестирование нейросети на новых рецептах показало, что погрешность расчёта на 100 грамм блюда составляет всего 46,7 калории, 2,51 грамма белка, 3,88 грамма жира и 6,97 грамма углеводов. Результат можно улучшить, если использовать более совершенные алгоритмы для предварительной обработки рецептов. Учёные опубликовали в открытом доступе исходный код нейросети и код для формирования датасета.
Кроме того, алгоритм даже пытается определить, из чего приготовлено блюдо!