Как нейросеть узнаёт еду на фотографии
Фотография тарелки превращается в число на экране за несколько секунд, и со стороны это выглядит как измерение. Измерения там нет ни на одном шаге: есть узнавание, есть оценка веса и есть справочник. Разобрать цепочку целиком стоит хотя бы затем, чтобы понимать, какой из шагов ошибается чаще.
Три шага, а не один
Ответ «паста с курицей, 620 ккал» собирается из трёх независимых операций, и путать их не стоит: они ошибаются по-разному и лечатся по-разному.
- Что на снимке. Модель относит изображение к известным ей категориям блюд и ингредиентов. Это задача классификации, и решается она лучше остальных.
- Сколько этого. По плоской картинке оценивается объём и через него — масса. Здесь появляется главная погрешность.
- Сколько в этом энергии. Найденное блюдо сопоставляется со справочными значениями на 100 г. Ошибка справочника накладывается на две предыдущие.
Перемножать ошибки нельзя, но и складывать их линейно неверно: они частично гасят друг друга, а частично усиливают. Итог обычно определяется вторым шагом — весом.
Первый шаг: модель не измеряет, а узнаёт
Свёрточные сети и их наследники обучаются на размеченных наборах фотографий еды: каждой картинке сопоставлена категория, сети показывают их сотни тысяч, и она подбирает признаки, по которым категории различаются. Никакого понимания рецепта у неё нет — есть статистика форм, цветов и текстур. Опубликованные системы такого рода показывают высокую точность узнавания на тех наборах, на которых их проверяли.
Отсюда первое ограничение, которое стоит держать в голове: точность в 95 % относится к списку категорий из обучающего набора и к снимкам, похожим на обучающие. Русская домашняя кухня в такие наборы попадает редко: солянка, драники, творожная запеканка, гречка с подливой не входят в известные международные датасеты почти никак.
Второе ограничение серьёзнее. Внутри одной категории разброс калорийности огромен, и распознавание его не снимает. «Салат» — это и листья с огурцом, и оливье под майонезом. «Суп» — и овощной бульон, и харчо на жирной баранине. Модель, назвавшая категорию верно, может ошибиться в разы, если внутри категории она не разглядела заправку.
Второй шаг: вес по плоской картинке
Фотография — проекция. Высота горки риса, глубина тарелки, толщина куска мяса на ней не видны, и восстановить их можно только предположением: обычная тарелка такого-то диаметра, обычная порция такой-то высоты. Именно это предположение и подставляется.
Насколько оно дорого обходится, показывает работа, в которой три большие языковые модели оценивали 52 стандартизованных снимка — отдельные продукты и составленные блюда в трёх размерах порции. У двух лучших моделей средняя абсолютная ошибка составила около 36 % по весу и около 36 % по энергии; у третьей — 65 % и 64 %. По отдельным макронутриентам разброс был ещё шире: по белку у лучших моделей около 61 %, по жиру от 42 до 52 %.
Числа по весу и по энергии почти совпадают, и это не совпадение: ошибка веса переносится в калорийность почти один в один. Справочник даёт калорийность на 100 г; ошибиться в массе на треть значит ошибиться в калориях на треть.
Как оценивать вес порции самому — вилкой, ладонью и посудой — разобрано в материале про вес порции без весов. Человеку та же задача даётся не лучше, и в этом суть следующего раздела.
С чем это честно сравнивать
Тридцать шесть процентов ошибки звучат как приговор, пока не спросишь: а сколько даёт то, чем пользуются вместо этого.
Авторы той же работы отмечают, что достигнутая точность сопоставима с традиционными методами самоотчёта — дневниками питания и опросниками, которые лежат в основе большинства исследований о питании. Люди систематически недооценивают съеденное, и величина этой недооценки того же порядка.
Прямое сравнение делалось и на живых людях: тридцать шесть студентов десять дней подряд вели одновременно и взвешенный дневник, и запись через приложение с распознаванием снимков. Корреляция по энергии и большинству нутриентов оказалась значимой, но со систематическим смещением: приложение завышало энергию примерно на 154 ккал в день, белок на 8,9 г, жир на 10,4 г, углеводы на 33,8 г, и занижало клетчатку на 4,5 г. Границы согласия по отдельным нутриентам авторы называют широкими.
Обзор методов на основе изображений описывает ту же картину в целом: занижение интенсивности потребления и смещение, которое растёт вместе с объёмом порции.
Практический вывод из этого не «пользоваться нельзя», а «пользоваться не для того». Инструмент с ошибкой в треть не годится, чтобы вычислить дефицит в 300 ккал; он вполне годится, чтобы увидеть, что обед стоил не 400 ккал, а 1100 — то есть чтобы отличать порядки, а не десятки. Зачем вообще нужна эта картина и что она даёт, разобрано в материале зачем считать калории.
Третий шаг: справочник
Найденное блюдо надо к чему-то привязать, и привязывается оно к таблице калорийности. Таблица составлена по усреднённым рецептурам, у которых свой разброс: домашний борщ у двух хозяек различается по калорийности вдвое, и никакая модель этого не увидит. Откуда берутся сами таблицы и почему в разных приложениях одна и та же сосиска весит разное число калорий — тема материала про базы данных о продуктах.
Отдельный случай — упакованный продукт. Там считать по фотографии блюда не нужно вовсе: на пачке есть штрихкод, и по нему поднимаются заявленные производителем значения. Это единственная ветка, где вместо оценки появляется документ, — со своей оговоркой про то, почему цифры на упаковке не сходятся с реальностью.
Что реально улучшает ответ
Погрешность распределена неравномерно, и часть её снимается тем, как сделан снимок.
- Ракурс сверху под углом, а не строго сверху и не сбоку. Строго сверху пропадает высота, сбоку — площадь. Промежуточный угол оставляет обе.
- Предмет известного размера в кадре. Вилка, ложка, стандартная кружка дают масштаб. Без масштаба тарелка диаметром 20 см и блюдо диаметром 30 см на снимке одинаковы.
- Ничего лишнего в кадре. Вторая тарелка, телефон, салфетница добавляют объектов, которые нужно отнести к еде или не отнести.
- Разобрать многослойное. Бургер, шаурма, слоёный салат снаружи выглядят одинаково при разной начинке. Если начинку видно — ответ точнее.
- Назвать то, что не видно. Ложка масла в каше, сахар в чае, майонез внутри салата не оставляют следа на снимке, а стоят сотню-другую калорий.
Последний пункт — общий предел метода. Всё, чего на фотографии нет, оценке недоступно в принципе, и никакое улучшение модели этого не изменит.
Частые вопросы
- Насколько точно нейросеть считает калории по фото?
- В опубликованных проверках средняя абсолютная ошибка лучших моделей составляла около 36 % и по весу порции, и по калорийности. Это сопоставимо с точностью дневников питания, которые люди ведут вручную, но недостаточно для расчёта, где важны десятки калорий.
- Почему одно и то же блюдо получает разную оценку на двух снимках?
- Оценивается объём, а он восстанавливается по проекции. Смена ракурса, освещения или посуды меняет видимую площадь и предполагаемую высоту, а вместе с ними — расчётную массу. Устойчивее всего снимок сверху под углом с предметом известного размера в кадре.
- Что модель не может увидеть в принципе?
- Всё, что не оставляет следа на снимке: масло, добавленное при жарке, сахар в напитке, заправку внутри салата, жирность фарша в котлете. Такие вещи не выводятся из изображения и требуют подписи к фотографии.
- Помогает ли снимать с линейкой или монетой?
- Помогает любой предмет известного размера — вилка, ложка, кружка. Он задаёт масштаб, без которого маленькая тарелка вблизи и большая издалека выглядят одинаково. Специальный эталон для этого не нужен.
- Почему по упакованному продукту ответ точнее, чем по тарелке?
- Потому что там работает не оценка, а поиск: по штрихкоду поднимаются значения, заявленные производителем на упаковке. Оценка объёма из цепочки выпадает, и остаётся только вопрос, насколько заявленным значениям можно верить.
Читайте также
- Почему ИИ уверенно называет неверную цифру — Неприятная особенность машинного ответа не в том, что он бывает неверным, — неверным бывает и справочник, и этикетка.
- Откуда приложения берут КБЖУ и почему цифры расходятся — Один и тот же творог в двух приложениях получает разную калорийность, и объяснение обычно ищут в ошибке одного из них.
- Как определить вес порции без весов — Вес порции — самая неточная величина в любом подсчёте, включая разбор по фотографии.
Материал носит справочный и информационный характер. Он не является медицинской рекомендацией, диагностикой, назначением лечения или диеты и не заменяет консультацию врача. При заболеваниях, беременности, приёме лекарств и любых состояниях, требующих контроля рациона, решения о питании принимаются с врачом.
Сведения о нормах, регламентах и исследованиях приведены по состоянию на момент подготовки материала и могут измениться; их актуальность следует проверять по первоисточникам. Материал не является рекламой, публичной офертой или индивидуальной консультацией. Автор и владелец сайта не несут ответственности за решения, принятые на основании этого текста.