як відформатувати дані зображення для навчання / передбачення, коли зображення різного розміру?


87

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


2
Будь ласка, покажіть, що ви пробували дотепер, і що, здається, не працює для вас.
Кіт Джон Хатчісон

16
І там йде код Inception v4. Я не погоджуюся з цим готовим коментарем. Було б чудово трохи більше вводу - наприклад, про яку мережу ми говоримо, - але голоси проти не виправдані взагалі. Те є реальна проблема.
сонце

4
Питання в тому, як ImageNet форматує дані своїх зображень, щоб бути корисними для навчання?
mskw

Відповіді:


148

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

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

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

Якщо це ваша проблема, ось кілька речей, які ви можете зробити:

  • Не дбайте про стиснення зображень. Мережа все одно може навчитися осмислювати вміст; чи так чи інакше масштаб і перспектива щось означають для змісту?
  • Обріжте зображення в центрі до певного розміру. Якщо ви боїтесь втратити дані, виконайте декілька обробок і використовуйте їх для збільшення вхідних даних, щоб оригінальне зображення було розділене наN різні зображення правильного розміру.
  • Обкладіть зображення однотонним кольором до розміру квадрата, а потім змініть розмір.
  • Робіть поєднання цього.

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

Що стосується того, щоб просто не дбати про сквош, ось фрагмент конвеєру попередньої обробки відомої мережі Inception:

# This resizing operation may distort the images because the aspect
# ratio is not respected. We select a resize method in a round robin
# fashion based on the thread number.
# Note that ResizeMethod contains 4 enumerated resizing methods.

# We select only 1 case for fast_mode bilinear.
num_resize_cases = 1 if fast_mode else 4
distorted_image = apply_with_random_selector(
    distorted_image,
    lambda x, method: tf.image.resize_images(x, [height, width], method=method),
    num_cases=num_resize_cases)

Вони це цілком усвідомлюють і роблять це в будь-якому випадку.

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


11
Ця тема здається набагато складнішою, коли ви маєте справу з виявленням об'єктів та сегментацією екземплярів, оскільки розміри прив'язувальних ящиків, які також є гіперпараметрами, потрібно налаштувати, якщо у вас є набір даних з великою різницею у розмірах зображень.
CMCDragonkai

Співвідношення сторін відіграють досить важливу роль для мережі, яка полягає у розрізненні кіл та еліпсів.
HelloGoodbye

1
Іншим загальним зауваженням є те, що партії не обов’язково повинні мати однакові розміри; перша партія могла обробляти зображення 4: 3, друга - 16: 9 тощо, поки доглядаються щільні шари.
сонце

1
@Tobitor, завжди робіть входи мережі максимально наближеними до фактичних (тестових чи часу виводу) даних, наскільки це можливо. Якщо всі ваші зображення набагато ширші, ніж високі, вам також слід змоделювати мережу для обробки таких зображень. Тим не менш, якщо ви не можете сказати, як будуть виглядати ваші дані про "використання", вам доведеться зробити деякі жертви під час навчання. І в такому випадку зміна розміру зображення з 1000x200 на 256x256, як правило, нормальна (уявіть, подивіться на цей номерний знак під кутом 60 градусів - зараз це приблизно приблизно квадрат).
сонце

2
@Tobitor Зовсім не вимагається, щоб зображення були квадратними, це просто найменш поганий компроміс, якщо ви не знаєте фактичних розмірів зображень під час виведення. : ^) Що стосується розміру, то чим менше, тим краще, але зображення повинні бути достатньо великими, щоб все-таки фіксувати найдрібніші необхідні деталі - загалом кажучи, просто майте на увазі, що якщо ви, як експерт-людина, не можете визначити, що в зображення, мережа теж не зможе.
сонце

11

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


Чи не могли б Ви трохи детальніше розказати, що таке "просторове об'єднання пірамід" порівняно із звичайним об'єднанням?
Matthieu

будь-ласка, прочитайте Пул просторових пірамід у глибоких згорткових мережах для візуального розпізнавання в blog.acolyer.org/2017/03/21/convolution-neural-nets-part-2 @Matthieu
Асіф Мохаммед
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.