Переклад зображення на рецепт із глибокими згортковими нейронними мережами

Муріз Серіфович

9 вересня 2018 · 13 хв читання

У цій статті ми розглянемо, як тренувати глибокі згорткові нейронні мережі разом із Keras класифікувати зображення за категоріями продуктів та вивести відповідний рецепт. Набір даних містить> 800 000 зображень продуктів та> 300 000 рецептів від chefkoch.de.

глибокими

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

Фактом є те, що як би ви не відрізнялися один від одного, гарна їжа цінується всіма.

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

Підручник поділено на менші частини у відповідності з девізом "розділяй і володарюй":

Згідно з поточним станом, найбільший набір даних на німецькій мові з понад 300 000 рецептів буде зібраний та проаналізований. Потім буде представлено нещодавно розроблений метод, згідно з відомими автором: поєднання розпізнавання об’єктів або розпізнавання судів з використанням згорткових нейронних мереж (короткий CNN) та пошук найближчих сусідів (Класифікація наступного сусіда) в записі з понад 800 000 зображень. Ця комбінація допомагає швидше знайти правильний рецепт, оскільки топ-5 категорій CNN порівнюються з категорією наступних сусідів із рангованою кореляцією. Підходи, засновані на кореляції рангу, такі як Кендалл Тау по суті вимірюють ймовірність того, що два елементи будуть в однаковому порядку в двох рейтингових списках. Математично Кендалл Тау обчислюється як

  • N = Загальна кількість пар
  • C = Кількість збіжних пар
  • D = Кількість суперечливих пар

Точний конвеєр виглядає так:

  1. Для кожного рецепта W є К кількість картинок. Для кожного з цих зображень виділяються вектори функцій із попередньо підготовленої нейромережі Convolution, підготовленої за 1000 категоріями в конкурсі ILSVRC 2014 на розпізнавання зображень з мільйонами зображень. Вектори функцій формують внутрішнє представлення зображення в останньому повністю зв’язаному шарі перед шаром Softmax 1000-категорії, який було попередньо видалено. Потім ці вектори характеристик розмірно зменшуються за допомогою PCA (аналіз основних компонентів) з N x 4096 матриця до N x 512 матриця. Як результат, вибирається 5 найкращих зображень із найменшою евклідовою відстанню до вхідного зображення (приблизний найближчий сусід), тобто 5 найкращих оптичних, лише за інформацією про зображення, подібні до вхідного зображення.
  2. Крім того, CNN проходить навчання з C кількість категорій із зображеннями W рецепти. C. було визначено динамічно з використанням моделювання тем та семантичного аналізу назв рецептів. В результаті ми отримуємо для кожної категорії ймовірність, до якої могло належати вхідне зображення.
  3. Категорії топ-k із CNN (2.) порівнюються з категоріями з оптично подібних зображень топ-k (1.) з кореляцією Кендалла Тау.

Схема для візуалізації методу виглядає так:

1│── Підготовка даних
│ └── Очищення даних
│ └── Збільшення даних

2│── Аналіз та візуалізація даних, розділення даних (Поїзд, Дійсний, Тест)

3│── Тематичне моделювання
│ └── Приховане розподіл Діріхле (LDA)
│ └── Невід’ємне розбиття на матриці

4│── Витяг функцій
│ └── k-найближчі сусіди
│ └── візуалізація t-SNE

5│── Навчання передачі: Навчання попередньо навченого CNN (згорткова нейронна мережа)
│ └── AlexNet, VGG, ResNet, GoogLeNet

6└── Розгортання за допомогою Flask на now.sh, безсерверне розгортання додатків

Кожна частина містить блокноти Jupyter, які ви можете переглянути на сторінці Github.

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

Безсоромний штекер: я працюю над редактором коду на python, який спрощує аналіз та побудову даних. Додаткову інформацію можна отримати за адресою: Редактор коду Мебіуса

Пітер Норвіг, директор з досліджень Google, розповів про це в інтерв’ю в 2011 році

У нас немає кращих алгоритмів. Ми просто маємо більше даних.

Без винятку якість та кількість набору даних не є незначною. Ось чому найбільша в Європі кулінарна платформа буде скасована: кожен рецепт, нарешті 316'756 рецептів (станом на грудень 2017 року), завантажується загалом 879'620 зображень. Важливо не продовжувати занадто швидко під час завантаження та захищати сервери із занадто великою кількістю запитів, оскільки інакше заборона власної IP-адреси ускладнить збір даних.

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

Виконуючи обробку веб-сайтів, важливо поважати файл robots.txt. Деякі адміністратори не хочуть відвідувати ботів до певних каталогів. https://www.chefkoch.de/robots.txt надає:

Перераховані каталоги, які нас не цікавлять, тому ви можете впевнено продовжувати. Тим не менше, такі заходи, як випадкові заголовки та досить великі паузи між окремими запитами, рекомендуються, щоб уникнути можливої ​​заборони веб-сайту (я дізнався про це, працюючи над іншим проектом важким шляхом).

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

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

Зверніть увагу, що вказаний код скорочено. Щоб отримати повний код, відвідайте відповідний блокнот Jupyter.

Далі нам потрібно зішкребти список інгредієнтів, приготування, мітки та всі зображення кожного рецепту.

Якщо з завантаженням все пройшло гладко, наші дані виглядають так:

  • Всього 879'620 зображень (35 ГБ)
  • 316'756 рецептів
    - З яких 189'969 містять одне або кілька малюнків
    - - з них 107 052 ​​рецепти містять більше 2 зображень
    - 126'787 не містить зображення

Статистика

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