Як підготувати / збільшити зображення для нейронної мережі?


41

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

Як слід підготувати вхідні зображення?

У цьому випадку всі зображення однакового об’єкта, але з варіаціями (подумайте: контроль якості). Вони знаходяться в дещо різних масштабах / дозволах / відстанях / умовах освітлення (і в багатьох випадках я не знаю масштабу). Також у кожному зображенні є область (відома) навколо об'єкта, що цікавить, яку слід ігнорувати мережею.

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

Збільшення набору даних

Я чув про створення більшої кількості навчальних даних випадковим урожаєм / дзеркалом / тощо. Чи існує стандартний метод для цього? Будь-які результати щодо того, наскільки вдосконалення воно призводить до точності класифікатора?

Відповіді:


35

Ідея Neural Networks полягає в тому, що їм потрібна невелика попередня обробка, оскільки важкий підйом виконується за алгоритмом, який відповідає за вивчення особливостей.

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

- Змініть розмір зображень

Що стосується різних розмірів, роздільної здатності або відстані, ви можете зробити наступне. Ви можете просто змінити масштаб найбільшої сторони кожного зображення на фіксовану довжину.

Інший варіант - використовувати openCV або scipy. і це дозволить змінити розмір зображення в розмірі 100 ліній (ширина) і 50 рядків (висота):

resized_image = cv2.resize(image, (100, 50)) 

Ще один варіант - використовувати модуль scipy, використовуючи:

small = scipy.misc.imresize(image, 0.5)

- Збільшення даних

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

  • обертання: випадковий з кутом між 0 ° і 360 ° (рівномірний)
  • переклад: випадковий зі зміщенням між -10 та 10 пікселями (рівномірний)
  • масштабування: випадковий з коефіцієнтом масштабу між 1 / 1,6 і 1,6 (рівномірний журнал)
  • гортання: так чи ні (bernoulli)
  • нахил: випадковий з кутом від -20 ° до 20 ° (рівномірний)
  • розтягування: випадковий з коефіцієнтом розтягування від 1 / 1,3 до 1,3 (рівномірний журнал)

Результати можна побачити на зображеннях чаші Data Science.

Попередньо оброблені зображення

Попередньо оброблені зображення

доповнені версії одних і тих же зображень

введіть тут опис зображення

-Інші прийоми

Вони стосуватимуться інших властивостей зображення, таких як освітлення, і вже пов'язані з основним алгоритмом, як простий крок попередньої обробки. Перевірте повний список у: Підручник з UFLDL


1
Колір також варто переглянути для збільшення даних.
Девід К. Єпископ

Чи можете ви також поділитись кодом обертання та стрижки тощо? @wacax
Арсенал Фанатик

Ви, хлопці, можете використовувати такий пакет, як кераси, для збільшення даних.
Рікардо Крус

2
Для всіх, хто має проблеми з імпортом модуля scipy.misc. Вам потрібно import scipy.misc. stackoverflow.com/questions/13581593 / ...
eleijonmarck

Що стосується зміни розміру зображення, який метод зазвичай застосовують у найсучасніших методах, наприклад, використовуваних у ImageNet?
HelloGoodbye

2

Хоча відповідь wacax є повною і справді пояснювальною, я хотів би додати пару речей, якщо хтось наткнеться на цю відповідь.

По- перше, більшість scipy.miscзображень пов'язаних з ними функцій ( imread, imsave, imresizeERC) стали застарілими на користь тієї або іншої ImageIO або skimage .

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.