Оцінка калорійності на основі зображень за допомогою глибокого навчання

Фото Чарльза 🇵🇭 на Unsplash

зображень

За даними ВООЗ, майже 20% смертей у всьому світі пов'язані з нездоровим харчуванням. 39% дорослих у віці 18 років і старше мали надмірну вагу в 2016 році, а 13% страждали ожирінням. Більшість населення світу живе в країнах, де надмірна вага та ожиріння вбивають більше людей, ніж недостатню.

Проблема тут полягає не в тому, щоб мати достатню кількість їжі, а в тому, що люди не знають, що є в їх раціоні. Якщо люди можуть оцінити споживання калорій, використовуючи зображення своєї їжі, вони можуть легко визначитися з кількістю калорій, яку вони хочуть спожити. Калькулятор калорій на основі зображень, побудований за допомогою глибокого навчання, може бути зручним додатком для відстеження того, що містить дієта людини

Якби люди знали, скільки калорій містить їхня їжа, тоді ця проблема буде дещо контрольована.

Запропоноване рішення

Люди часто фотографують свою їжу, перш ніж їсти, і розміщують її в соціальних мережах, ну а рішення полягає саме в цьому процесі. Ми пропонуємо оцінити вміст калорій у наданому користувачем зображенні шляхом визначення їжі та оцінки кількості за допомогою глибокого навчання.

Для оцінки калорій нам потрібне точне виявлення об'єкта в поєднанні з точним IoU (перетин над об'єднанням). Вражаючої кількості IoU можна досягти за допомогою виявлення одиночного знімка, яке також швидше, ніж аналоги, але проблема полягає в сегментації. Ми не можемо наблизити суму до результату Bounding Box, нам потрібна більша точність. Отже, рішенням буде використання сегментації екземплярів.

Як це було зроблено?

По-перше, нам потрібні були деякі дані, щоб відповідати моделі Mask-R-CNN для розпізнавання зображень за допомогою машинного навчання. Дані потрібно було позначити межами та класами для кожного продукту на тарілці. Подивившись деякий час, я знайшов набір зображень продуктів харчування, підготовлений Університет Мілано-Бікокка, Італія відповідно до наших вимог, набір даних називався UNIMIB-2016. Після деякої попередньої обробки набір зображень продуктів харчування був готовий до навчання за допомогою Mask R-CNN.

Ідентифікація продукту харчування

Щоб визначити, що є на тарілці, нам потрібно сегментувати дане зображення продуктів харчування на можливі категорії продуктів. Сегментація екземпляру класифікує окремий піксель на даному зображенні за можливими класами, тобто. продукти в нашому випадку. З огляду на проблему сегментації екземплярів, архітектура Mask R-CNN буде відповідним рішенням. Mask R-CNN робить зображення і видає три виходи, маски ідентифікованих елементів, обмежувальні поля та класи для кожної виявленої маски. Маски - це двійкові кодовані одноканальні матриці розміру вхідного зображення, які позначають межі ідентифікованого об'єкта.

Mask R-CNN розроблений на базі Faster R-CNN, який є регіональною згортковою нейронною мережею. Змотна нейронна мережа (ConvNet/CNN) - це алгоритм глибокого навчання, який може приймати вхідне зображення, призначати важливість (зважувані ваги та упередження) різним аспектам/об'єктам зображення та може диференціювати один тип зображення від іншого. Щоб мати можливість виявлення об’єкта, нам потрібно знати клас об’єкта, а також розмір та розташування обмежувального вікна. Звичайно для кожного зображення існує розсувне вікно для пошуку у кожній позиції на зображенні, як показано нижче. Це просте рішення. Однак різні об'єкти або навіть однакові предмети можуть мати різне співвідношення сторін та розміри залежно від розміру об'єкта та відстані від камери. А різні розміри зображення також впливають на ефективний розмір вікна. Цей процес буде надзвичайно повільним, якщо ми використаємо CNN для глибокого навчання для класифікації зображень у кожному місці.

Щоб обійти проблему вибору величезної кількості регіонів, Росс Гіршік та співавт. запропонував метод, коли ми використовуємо вибірковий пошук, щоб виділити із зображення лише 2000 регіонів, і він назвав їх регіональними пропозиціями. Архітектура називається R-CNN.

Той же автор попередньої статті (R-CNN) вирішив деякі недоліки R-CNN, щоб побудувати швидший алгоритм виявлення об'єктів, і він отримав назву Fast R-CNN. Підхід подібний до алгоритму R-CNN. Але замість того, щоб подавати регіональні пропозиції CNN, ми подаємо вхідне зображення на CNN, щоб сформувати згорнуту карту функцій.

Mask R-CNN розширює заголовок до 3 гілок порівняно з лише 2 гілками в Faster R-CNN, одна додаткова гілка ідентифікації маски додається до архітектури Faster R-CNN. A зображення маски - це просто зображення, де деякі значення інтенсивності пікселів дорівнюють нулю, а інші - ненульові, що визначає межі об’єкта. Окрім цього, Mask R-CNN використовує вирівнювання ROI, яке використовує білінійну інтерполяцію для регіону, що цікавить (ROI), порівняно з розподілом підлоги, що використовується в Faster R-CNN, який надзвичайно неправильно розміщував маски на виходах, але слугував достатньою точністю для прогнозування обмежувальної рамки.

Після придбання харчового предмета та маски нам потрібен надійний план, щоб оцінити розмір ідентифікованої їжі. Отже, щоб отримати розмір їжі та, таким чином, оцінити калорійність, нам потрібна оцінка розміру об’єкта. Оцінка розміру об’єкта за допомогою камері-обскури - це складна робота, еталонний об’єкт потрібен для наближення розміру без використання декількох камер.

Оцінка калорійності їжі

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

Оскільки наведена вище демонстрація використовує монету як еталонний об’єкт, ми пропонуємо використовувати тарілку як еталонний об’єкт для оцінки їжі, виявленої на зображеннях. Тарілки можна виявити за допомогою виявлення країв або включити в навчальні дані для виявлення разом з продуктами з єдиною мережею. Після виявлення пластин, pixels_per_inch_sq розраховується з використанням фактичного розміру пластини в реальному житті.

pixels_per_inch_sq= площа_пікселів_площа/фактична_пластина_площі

real_food_area = masked_food_pixel_area/pixels_per_inch_sq

Висновок

За допомогою цього короткого тестування набору зображень продуктів харчування за допомогою Mask R-CNN ми можемо зробити висновок, що цілком можливо досягти програми, яка здатна оцінювати калорії за зображеннями продуктів. Додаток матиме величезний вплив на те, як люди сприймають тарілку з їжею, а також вплине на ринок схуднення та управління вагою.

Мої винос

Після роботи над цим проектом я швидко перейшов до глибокого навчання. Я зміг зрозуміти, що існує багато областей програм, де ми можемо використати можливості Mask R-CNN.

Озираючись назад, ми, безсумнівно, подякуємо Leapfrog за надану нам можливість, і це, безсумнівно, виявиться чудовою основою для нашої кар'єри. Я також хотів би подякувати дуеті KC (Aviskar KC та Bipin KC) за те, що вони були такими видатними наставниками для мого проекту машинного навчання.

Про цей проект

Цей проект є частиною мого стажування в Leapfrog. 6-тижнева програма стажування охоплювала широкий спектр - від аналізу даних, прогнозуючого моделювання до сутності машинного навчання та алгоритмів глибокого навчання. Напруженість програми та обсяг отриманих нами знань заінтригували нас. Ви можете знайти мій проект з оцінки калорійності їжі на GitHub.