Тема: Расчет калорийности пищи

Члены команды: Окан Алан Гёкберк Шахин Эмре Языджи

Это наш шестой пост в блоге. Давайте посмотрим, что мы делали на прошлой неделе.

На этой неделе мы снова попытались обучить модель обнаружения объектов в нашем наборе данных с помощью API обнаружения объектов Tensorflow. Мы использовали модель Faster R-CNN Inception из репозитория GitHub моделей Tensorflow. На этот раз мы остановили шаг обучения при значении лупов около 0,2 и достигли удовлетворительных результатов. Вы можете увидеть этот результат на рисунке 1. За последние две недели мы каждый раз обнаруживали только один объект, но теперь мы можем обнаруживать их оба одновременно, и результаты хорошие.

Нам нужна более обученная модель для сравнения результатов. Поэтому мы обучаем другие модели. Результатами сравнения поделимся на следующей неделе.

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

Как создаются эти функции? Во-первых, мы обнаруживаем предметы. Обнаружение дает нам ограничивающие рамки для каждого объекта на изображении. После того, как мы изучили ограничивающие рамки, мы отправляем изображения по алгоритму grabCut. Мы используем алгоритм GrapCut для удаления фоновых пикселей. Удаление заменяет не объектные пиксели черным на рисунке 2. Мы будем использовать объектные пиксели для оценки объема. После этих обработок мы получаем ширину, высоту, пиксели переднего плана объекта. Когда мы оцениваем объем, нам нужны 2 изображения, одно сбоку и одно сверху. По этой причине мы применяем подпроцесс к 2 изображениям.

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

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

Как мы видим, существует высокая корреляция между количеством пикселей переднего плана и высотой / весом еды. Это естественно, так как чем больше площадь, тем больше пикселей. Однако мы не можем исключить эту функцию только потому, что они сильно коррелированы. Фактически исключение одной из этих функций приведет к ухудшению точности теста, поскольку формула, которую мы пытаемся воспроизвести с помощью этого дерева решений, использует обе эти функции. Используя это наблюдение, мы можем дополнительно попробовать другие комбинации этих функций, такие как умножение ширины и высоты и использование в качестве одной функции, получение соотношения монеты и использование всех функций монеты как одного или нескольких. Но из любопытства мы скармливаем все функции случайному лесу, чтобы посмотреть, насколько хорошо он будет учиться. Мы получили результаты лучше, чем ожидалось. Средняя ошибка составила 33, что является относительно хорошим показателем по сравнению с результатами нашей базовой работы, учитывая, что мы не занимались разработкой функций или какой-либо другой оптимизацией. При оценке объема авторы нашей базовой работы получили среднюю ошибку 20. Вот одно из наших деревьев решений в случайном лесу на рисунке 4.

В этом случайном лесу максимальная глубина была 10. Увеличение глубины приводило к переобучению и снижению точности нашего теста. Кроме того, уменьшение глубины приводило к недостаточной подгонке, что снова снижало точность наших испытаний.

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

Использованная литература:

Https://docs.opencv.org/3.4/d8/d83/tutorial_py_grabcut.html