CV для робота-кассира в столовой
Есть робот-кассир: пользователь ставит поднос с едой, система делает фото и за пару секунд должна распознать блюда и сформировать чек. Как спроектировать ML-систему?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Нужен pipeline: quality checks, tray/dish detection, recognition/classification, business rules по меню и ценам, confidence fallback и жесткий latency budget около пары секунд.
Подробный разбор
Постановка здесь не "просто классифицировать картинку". На входе фото подноса, на выходе список блюд, их количество и чек. Поэтому pipeline лучше строить слоями: контроль качества кадра, детекция зон/тарелок/блюд, распознавание блюда, сверка с меню конкретной точки и расчет цены.
Данные критичны: меню локальное, блюда похожи, рецепты и подача меняются. Нужны фотографии из реальных точек, разметка блюд, hard cases с перекрытиями, плохим светом, перемешанной едой и новыми позициями. Для confidence ниже порога нужен fallback: ручная проверка, подсказка оператору или уточнение пользователю.
В production главное ограничение - latency. Модель, которая отвечает 40 секунд, может быть полезна как teacher/offline разметчик, но не как кассовый inference.
Типичные ошибки
- Предложить один общий classifier на все блюда без меню конкретной точки.
- Не обсудить latency и fallback.
- Не учесть перекрытия, смешанные блюда и смену меню.
Как сказать на собеседовании
- Сначала проговори end-to-end контракт: фото -> блюда -> чек.
- Отдельно назови latency, local menu и confidence fallback.
Почему еду на подносе сложно распознавать
На тарелке может быть несколько блюд, они перемешиваются и перекрывают друг друга. Почему segmentation или metric learning не решают задачу автоматически?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Смешанная еда ломает четкие границы объектов: одно блюдо может лежать внутри другого, классы похожи визуально, а cosine similarity начинает сравнивать смесь, а не отдельный item.
Подробный разбор
У обычной object detection задачи есть относительно понятные объекты. В столовой это часто не так: рис, овощи, соус и мясо могут лежать в одной зоне, перекрывать друг друга и визуально смешиваться. Поэтому bounding box или segmentation mask не всегда соответствует "блюду" как позиции в меню.
Metric learning тоже не магия. Если embedding считается по кропу, где внутри сразу несколько блюд, расстояние отражает смесь признаков. Hard negatives появляются постоянно: похожие гарниры, разные блюда одного цвета, разные подачи одного блюда, локальная кухня, которую модель не видела.
Практичный ответ - гибрид: ограничения меню конкретной точки, несколько view/камер, quality checks, business rules, confidence thresholds, active learning на ошибках и, возможно, VLM/teacher для разметки или reranking.
Типичные ошибки
- Сказать "возьмем YOLO/segmentation и готово".
- Не объяснить, что такое hard negatives в еде.
- Игнорировать меню конкретной столовой.
Как сказать на собеседовании
- Объясни mismatch: mask/object != menu item.
- Предложи hybrid system, а не одну модель.
VLM для распознавания еды: точность vs latency
Большая VLM неплохо распознает блюда, если дать ей фото и меню, но отвечает десятки секунд. Как использовать такую модель в продукте с жестким latency?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Большую VLM лучше использовать offline: как teacher для разметки, проверки сложных кейсов, генерации pseudo-labels и анализа ошибок. Online нужна маленькая модель или специализированный VLM, дообученный на меню/еда-домене.
Подробный разбор
Если пользователь стоит у кассы, 40 секунд inference недопустимы. Поэтому дорогая VLM может быть полезна не в online path, а в offline loop: помогать разметчикам, находить сложные примеры, генерировать pseudo-labels, объяснять ошибки и строить training set для более дешевой модели.
Online-path должен быть быстрым: специализированный detector/classifier/retriever, маленькая VLM, distillation от большой модели, quantization, batch/edge inference и жесткий timeout. Контекст меню конкретной точки можно заранее индексировать или кодировать, чтобы не прокидывать десятки изображений в prompt каждый раз.
В ответе важно назвать fallback: если confidence низкий, отправить на ручную проверку или показать оператору top-k вариантов, а не заставлять всех ждать большую модель.
Типичные ошибки
- Поставить GPT/VLM прямо в кассовый online path.
- Не предложить distillation или offline labeling loop.
- Не обсудить timeout и fallback.
Как сказать на собеседовании
- Раздели offline teacher и online student.
- Скажи про menu-specific context, distillation и confidence fallback.
Production-loop для CV модели после rollout
После запуска CV модели на реальных точках появляются ошибки, новые блюда и новые условия съемки. Как построить поддержку и дообучение?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Нужен цикл мониторинга ошибок, сбора hard cases, постановки разметки, дообучения, offline/online проверки, версионирования модели и безопасного rollout на точки.
Подробный разбор
После rollout CV модель почти неизбежно деградирует на новых точках: меняется меню, освещение, посуда, способы подачи, камеры и поведение людей. Поэтому production-loop должен быть частью системы, а не разовым обучением.
Минимальный loop: логировать predictions, confidence, фото с ошибками и исправления оператора; регулярно выбирать hard cases; отправлять их в разметку; дообучать модель; сравнивать с текущей версией на regression set; выкатывать постепенно и мониторить бизнес-метрики.
Для edge/on-device deployment важны формат модели, совместимость с железом, версия меню/модели и откат. Если есть несколько камер или classic CV алгоритмы, они тоже должны иметь тесты и документацию, а не жить как одноразовый notebook.
Типичные ошибки
- Считать, что модель обучили один раз и забыли.
- Не логировать ошибки и confidence.
- Не иметь regression set перед выкладкой новой версии.
Как сказать на собеседовании
- Назови active learning на ошибках.
- Раздели offline validation, staged rollout и rollback.