GitHub - Stratosparkfood-101-keras Класифікація продуктів з глибоким навчанням у Keras Tensorflow
Класифікація продуктів з глибоким навчанням у Керасі/Тенсорфлу
Комп’ютер, що я взагалі їжу?

Якщо ви читаєте це на GitHub, демонстрація виглядає так. Будь ласка, перейдіть за посиланням нижче, щоб переглянути демо-версію в моєму блозі.
ОНОВЛЕННЯ
Зворотні нейронні мережі (CNN), техніка в більш широкому полі глибокого навчання, стали революційною силою в програмах Computer Vision, особливо протягом останнього півріччя або близько того. Одним з основних випадків використання є класифікація зображень, наприклад визначення того, чи є зображення собаки чи кота.
Звичайно, вам не потрібно обмежуватися двійковим класифікатором; CNN можна легко масштабувати до тисяч різних класів, як видно з відомого набору даних ImageNet з 1000 класів, що використовується для порівняння продуктивності алгоритму комп'ютерного зору.
Протягом останніх кількох років ці найсучасніші методи стали доступними для широкого кола розробників програмного забезпечення. Промислові пакети міцності, такі як Tensorflow, дали нам ті самі будівельні блоки, які Google використовує для написання додатків глибокого навчання для вбудованих/мобільних пристроїв у масштабовані кластери в хмарі - без необхідності вручну кодувати операції з матрицею графічного процесора, часткові похідні градієнти та стохастичні оптимізатори які роблять можливими ефективні програми.
Крім усього цього, є зручні API, такі як Keras, які абстрагують деякі деталі нижчого рівня і дозволяють зосередитись на швидкому прототипуванні графіку обчислень глибокого навчання. Подібно до того, як ми змішували і поєднували Legos, щоб отримати бажаний результат.
Як вступний проект для себе, я вирішив використати попередньо навчений класифікатор зображень, який постачається з Керасом, і перекваліфікувати його в наборі даних, який мені здається цікавим. Я дуже люблю гарну їжу та домашню кухню, тому щось подібне було апетитним.
У статті Food-101 - Добування дискримінаційних компонентів із випадковими лісами вони представляють набір даних Food-101. Існує 101 різний клас їжі, з 1000 позначених зображень на клас, доступні для тренованих тренувань.
Мене надихнув цей допис у блозі Keras: Створення потужних моделей класифікації зображень з використанням дуже мало даних та пов’язаний скрипт, який я знайшов на github: keras-finetuning.
Нещодавно я побудував систему для експериментів із глибоким навчанням. Ключовими компонентами є Nvidia Titan X Pascal з 12 ГБ пам'яті, 96 ГБ системної оперативної пам'яті, а також 12-ядерний Intel Core i7. На ньому працює 64-розрядна версія Ubuntu 16.04 та використовується дистрибутив Anaconda Python. На жаль, ви не зможете стежити за цим ноутбуком у власній системі, якщо у вас недостатньо оперативної пам'яті. У майбутньому я хотів би дізнатися, як ефективно обробляти набори даних, більші за обсяг оперативної пам'яті. Будь ласка, зв’яжіться, якщо у вас є якісь ідеї!
Я витратив близько 1 місяця на створення та реалізацію цього проекту, намагаючись навчити десятки моделей та досліджуючи різні сфери, такі як багатопроцесорна обробка для швидшого збільшення зображень. Це вичищена версія блокнота, яка містить мою найкращу модель на 22 січня 2017 року.
Після тонкої настройки попередньо навченої моделі Google InceptionV3 я зміг досягти приблизно 82,03% Точність-1 на тестовому наборі з використанням одного урожаю на одиницю. Використовуючи 10 урожаїв на приклад і беручи найчастіші передбачувані класи, я зміг досягти 86,97% Точність-1 і 97,42% Точність-5
Інші змогли досягти більш точних результатів:
- Завантаження великої кількості даних в пам’ять, як цього уникнути?
- Збереження даних у файлі h5py для позадиапазонної обробки?
- Використання Dask для розподіленої обробки?
- Покращення багатопроцесорного збільшення зображень?
- Експорт у мобільний додаток Tensorflow?