Открыть приложение

Как нейросеть узнаёт еду на фотографии

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

Фотография тарелки превращается в число на экране за несколько секунд, и со стороны это выглядит как измерение. Измерения там нет ни на одном шаге: есть узнавание, есть оценка веса и есть справочник. Разобрать цепочку целиком стоит хотя бы затем, чтобы понимать, какой из шагов ошибается чаще.

Три шага, а не один

Ответ «паста с курицей, 620 ккал» собирается из трёх независимых операций, и путать их не стоит: они ошибаются по-разному и лечатся по-разному.

  1. Что на снимке. Модель относит изображение к известным ей категориям блюд и ингредиентов. Это задача классификации, и решается она лучше остальных.
  2. Сколько этого. По плоской картинке оценивается объём и через него — масса. Здесь появляется главная погрешность.
  3. Сколько в этом энергии. Найденное блюдо сопоставляется со справочными значениями на 100 г. Ошибка справочника накладывается на две предыдущие.

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

Первый шаг: модель не измеряет, а узнаёт

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

Отсюда первое ограничение, которое стоит держать в голове: точность в 95 % относится к списку категорий из обучающего набора и к снимкам, похожим на обучающие. Русская домашняя кухня в такие наборы попадает редко: солянка, драники, творожная запеканка, гречка с подливой не входят в известные международные датасеты почти никак.

Второе ограничение серьёзнее. Внутри одной категории разброс калорийности огромен, и распознавание его не снимает. «Салат» — это и листья с огурцом, и оливье под майонезом. «Суп» — и овощной бульон, и харчо на жирной баранине. Модель, назвавшая категорию верно, может ошибиться в разы, если внутри категории она не разглядела заправку.

Второй шаг: вес по плоской картинке

Фотография — проекция. Высота горки риса, глубина тарелки, толщина куска мяса на ней не видны, и восстановить их можно только предположением: обычная тарелка такого-то диаметра, обычная порция такой-то высоты. Именно это предположение и подставляется.

Насколько оно дорого обходится, показывает работа, в которой три большие языковые модели оценивали 52 стандартизованных снимка — отдельные продукты и составленные блюда в трёх размерах порции. У двух лучших моделей средняя абсолютная ошибка составила около 36 % по весу и около 36 % по энергии; у третьей — 65 % и 64 %. По отдельным макронутриентам разброс был ещё шире: по белку у лучших моделей около 61 %, по жиру от 42 до 52 %.

Числа по весу и по энергии почти совпадают, и это не совпадение: ошибка веса переносится в калорийность почти один в один. Справочник даёт калорийность на 100 г; ошибиться в массе на треть значит ошибиться в калориях на треть.

Как оценивать вес порции самому — вилкой, ладонью и посудой — разобрано в материале про вес порции без весов. Человеку та же задача даётся не лучше, и в этом суть следующего раздела.

С чем это честно сравнивать

Тридцать шесть процентов ошибки звучат как приговор, пока не спросишь: а сколько даёт то, чем пользуются вместо этого.

Авторы той же работы отмечают, что достигнутая точность сопоставима с традиционными методами самоотчёта — дневниками питания и опросниками, которые лежат в основе большинства исследований о питании. Люди систематически недооценивают съеденное, и величина этой недооценки того же порядка.

Прямое сравнение делалось и на живых людях: тридцать шесть студентов десять дней подряд вели одновременно и взвешенный дневник, и запись через приложение с распознаванием снимков. Корреляция по энергии и большинству нутриентов оказалась значимой, но со систематическим смещением: приложение завышало энергию примерно на 154 ккал в день, белок на 8,9 г, жир на 10,4 г, углеводы на 33,8 г, и занижало клетчатку на 4,5 г. Границы согласия по отдельным нутриентам авторы называют широкими.

Обзор методов на основе изображений описывает ту же картину в целом: занижение интенсивности потребления и смещение, которое растёт вместе с объёмом порции.

Практический вывод из этого не «пользоваться нельзя», а «пользоваться не для того». Инструмент с ошибкой в треть не годится, чтобы вычислить дефицит в 300 ккал; он вполне годится, чтобы увидеть, что обед стоил не 400 ккал, а 1100 — то есть чтобы отличать порядки, а не десятки. Зачем вообще нужна эта картина и что она даёт, разобрано в материале зачем считать калории.

Третий шаг: справочник

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

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

Что реально улучшает ответ

Погрешность распределена неравномерно, и часть её снимается тем, как сделан снимок.

Последний пункт — общий предел метода. Всё, чего на фотографии нет, оценке недоступно в принципе, и никакое улучшение модели этого не изменит.

Посчитать по фото

Частые вопросы

Насколько точно нейросеть считает калории по фото?
В опубликованных проверках средняя абсолютная ошибка лучших моделей составляла около 36 % и по весу порции, и по калорийности. Это сопоставимо с точностью дневников питания, которые люди ведут вручную, но недостаточно для расчёта, где важны десятки калорий.
Почему одно и то же блюдо получает разную оценку на двух снимках?
Оценивается объём, а он восстанавливается по проекции. Смена ракурса, освещения или посуды меняет видимую площадь и предполагаемую высоту, а вместе с ними — расчётную массу. Устойчивее всего снимок сверху под углом с предметом известного размера в кадре.
Что модель не может увидеть в принципе?
Всё, что не оставляет следа на снимке: масло, добавленное при жарке, сахар в напитке, заправку внутри салата, жирность фарша в котлете. Такие вещи не выводятся из изображения и требуют подписи к фотографии.
Помогает ли снимать с линейкой или монетой?
Помогает любой предмет известного размера — вилка, ложка, кружка. Он задаёт масштаб, без которого маленькая тарелка вблизи и большая издалека выглядят одинаково. Специальный эталон для этого не нужен.
Почему по упакованному продукту ответ точнее, чем по тарелке?
Потому что там работает не оценка, а поиск: по штрихкоду поднимаются значения, заявленные производителем на упаковке. Оценка объёма из цепочки выпадает, и остаётся только вопрос, насколько заявленным значениям можно верить.

Читайте также

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

Сведения о нормах, регламентах и исследованиях приведены по состоянию на момент подготовки материала и могут измениться; их актуальность следует проверять по первоисточникам. Материал не является рекламой, публичной офертой или индивидуальной консультацией. Автор и владелец сайта не несут ответственности за решения, принятые на основании этого текста.