Навіщо нормалізувати зображення, віднімаючи середнє зображення зображення, а не поточне зображення, означає глибоке навчання?


88

Існує кілька варіантів, як нормалізувати зображення, але більшість, здається, використовують ці два методи:

  1. Віднімаємо середнє значення на канал, обчислене для всіх зображень (наприклад, VGG_ILSVRC_16_layers )
  2. Віднімання за пікселем / каналом, розраховане на всі зображення (наприклад, CNN_S , також див . Довідкову мережу Caffe )

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

П'єр Серманет в 3.3.3 зазначає, що локальна нормалізація контрасту, що базується на зображенні, але я не натрапив на це в жодному із прикладів / навчальних посібників, які я бачив. Я також бачив цікаве питання щодо Quora та пост Xiu-Shen Wei, але, схоже, вони не підтримують два вище підходи.

Що саме я пропускаю? Це питання нормалізації кольору чи є документ, який насправді пояснює, чому так багато людей використовують такий підхід?


Я не знаю відповіді, але ви випробували кожен із методів? Чи є їхня різниця у виступах?
користувач112758

@ user112758 - реалізація їх трохи болюча (особливо для пікселя), і мій досвід полягає в тому, що нормалізація на зображення працює нормально, але мої дані не є репрезентативною. Я спробую поекспериментувати з нормалізацією, але мені цікаво почути мотивацію, що стоїть за цими (на мій погляд) дивними нормалізаційними процедурами.
Макс Гордон

Гаразд, можливо, ви можете задати це питання в групі Google caffe питання GitHub. Гадаю, на цю тему було б більше експертів.
користувач112758

Відповіді:


58

Віднімання середнього набору даних служить для "центрування" даних. Крім того, ви в ідеалі хотіли б також розділити на sttdev цієї функції або пікселя, якщо ви хочете нормалізувати кожне значення функції до z-балу.

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

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

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

У деяких моделях CNN ви побачите, що застосовується відбілювання на зображення, яке більше відповідає вашим мисленням.


4
Дякую за відповідь. Мені знайома концепція центрування даних і переконання, що діапазон схожий, щоб отримати стабільні градієнти. Питання полягає в тому, чому нам потрібно робити це на всьому наборі даних і чому це допоможе на відміну від відбілювання зображення? Я хотів би просту довідку, яка певним чином показує, що це покращує навчання, перш ніж я прийму відповідь. Я знаю, що пакетна нормалізація - це надзвичайно потужна методика, але я не бачу зв'язку з цілою нормалізацією набору даних.
Макс Гордон

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

Я думав, що партії також є основою для стохастичного градієнтного спуску. Навіть якщо я міг би все вписати в пам'ять, я хочу оновлювати параметри частіше, ніж після кожної епохи.
Макс Гордон

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

2
Як це допомагає перетворити функції в аналогічний діапазон? Якщо у мене є два зображення, одне - від 0 до 255 і одне - від 0 до 50 у значеннях пікселів, скажімо, із середнім значенням 50 і stdev 15. Нормалізація дає мені зображення 1, що становить від -3,3 до 13,6, а зображення 2 - від Від -3,3 до 0. Вони все ще не в одному масштабі.
Даніель

9

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


1
"Я підозрюю, що якщо ви використовуєте пакетну нормалізацію, крок попередньої обробки віднімання за кожним каналом насправді не потрібен, оскільки ви все одно нормалізуєтеся на міні-пакет". Але пакетна норма стосується нормалізації ваг у шарах вашої мережі ... а не власне вхідних зображень. Це 2 різні речі.
Моніка Геднек

4

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


4

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

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

Але f (.) Вище допоможе в оптимізації, зберігаючи всі функції чисельно рівними один одному (звичайно, приблизно)

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