намаляване

Цели:

  1. Разберете основния принцип на работа на изкуствена невронна мрежа
  2. Разберете вида на изкуствените невронни мрежи, наречени автокодери
  3. Използвайте автокодери, за да намалите шума в изображенията

Автокодерите (Autoencoders) са специален вид изкуствена невронна мрежа (ANN за нейното съкращение на английски). Ето защо, за да разберете автокодерите, най-добре е първо да имате представа за това как работи ANN.

Основи на ANN

ANN са изчислителни модели, вдъхновени от биологични невронни мрежи. По опростен начин, ANN може да бъде разделен на три основни компонента: входен слой, няколко скрити слоя и изходен слой (вж. Фигура 1). Наборът от всички скрити слоеве може да се разбере като функция, която зависи от множество априорни неизвестни параметри, наречени невронни тегла. За да се намерят стойностите на тези тегла, ANN трябва да бъде обучен.

Фигура 1: Входният слой може да бъде съставен, например, от стойностите на пикселите на изображение. Скритите слоеве могат да се разберат като определена функция G, която зависи от теглото wi, входните стойности Xi. Функцията G трансформира стойностите на входа и в зависимост от вида на ANN може да върне към изхода друго изображение или вероятността изображението на входа да принадлежи към определен клас, дефиниран по-рано.

За да влезете по-дълбоко в тази тема за невронните мрежи, препоръчително е да прочетете курса в линка по-долу (вмъкнете линка)

Автокодери

Както бе споменато по-рано, автокодерите са частен случай на ANN. Особеността на тях е, че входът обикновено е абсолютно същият като изхода. Използвайки предишния пример, ако изображението на 0 е предадено във входа, автокодерът ще изведе изображението на нула възможно най-близо до изображението на входа (фиг. 2). На този етап е валидно да попитаме: каква е ползата от такава невронна мрежа? За да отговорим на този въпрос, трябва да разберем малко по-добре архитектурата на автокодерите. Основната разлика с конвенционалните мрежи е, че междинните слоеве (скрити слоеве) първо намаляват размера си (Encoder) и след това го увеличават отново (Decoder) симетрично (фиг. 2)

Фигура 2: Обща архитектура на автокодер.

Поради архитектурата на тази ANN средният слой представлява компактно представяне на входните променливи. По този начин слоевете, съставляващи енкодера, ще създадат по-компактна версия на оригиналното изображение, докато слоевете, съставляващи декодера, ще се опитат да възстановят оригиналното изображение от неговата компактна версия. Интересно приложение на този тип алгоритъм е получаването на изображения с висока разделителна способност от изображения с ниска разделителна способност. Друго приложение, извън обхвата на обработката на изображения, е в намаляването на размерите при проблеми, при които има стотици зависими променливи. В този смисъл автокодерите се доказаха като алтернативна и по-стабилна техника от PCA (Анализ на основни компоненти).

Автокодери като филтри за изображения

Като алтернатива на намаляването на размерите, автокодерите могат да се използват и за филтриране на шума от изображенията. За това, по време на фазата на обучение, трябва да се предаде набор от изображения с шум като вход и съответните изображения без шум трябва да се предадат на изхода (фиг. 3)

Фигура 3: Обща архитектура на автокодер за елиминиране на шума от изображението

По този начин автокодерът ще се "научи" да премахва шума от изображенията. След като бъде обучен, автокодерът ще може да премахне шума от всяко изображение на цифри от 0 до 9, дори ако мрежата никога не ги е „виждала“. Имайте предвид, че не е необходимо да се посочва някакво конкретно правило или филтър към мрежата, а че тя се „учи“ по време на фазата на обучение.

Код за генериране на автокодер за филтриране на изображения

По-долу е даден кодът за създаване на автокодер за премахване на шума от изображението. В този пример ще използваме изображенията на ръкописни цифри, извлечени от данните MNIST от библиотеката на Python sklearn. Библиотеката разполага със 70 000 цифрови изображения

Първо, наборът от изображения е разделен на две групи; първата група ще се състои от данните, използвани за обучение на мрежата (85%), а останалите (15%) за оценка на качеството на мрежата. След това в нова променлива запазваме и двата набора изображения, но сега след добавяне на гауссов шум към тях. Това са изображенията, които се предават на входа на автокодера във фазата на обучение, докато оригиналните изображения, извлечени от MNIST, се предават на изхода. За дефиниране на мрежовата архитектура се използва библиотеката на keras Python, която е много прост интерфейс TensorFlow.

И накрая, резултатите, получени при прилагането на автокодера върху някои от изображенията на набора за проверка са показани (Фиг. 4).

Фигура 4: Изображения с гауссов шум (горен ред) и съответните изображения, върнати от филтриращия автокодер (долен ред).

Както можете да видите на Фигура 4, резултатът е доста впечатляващ. Основното предимство на този метод е, че не трябва да се тревожим за вида на филтъра, който трябва да приложим, а че невронната мрежа научава сама по себе си кой е най-оптималният набор от филтри за прилагане, за да се получи очаквания резултат. От друга страна, основният недостатък на този метод е, че за обучение на невронната мрежа са необходими голям брой изображения (над 1000). Така че, както винаги казваме, използването или не на автокодерите с цел намаляване на шума на изображението ще зависи много от конкретния проблем. Като цяло, ако имаме голям набор от изображения за обучение на мрежата, за предпочитане е да използваме автокодери преди всеки друг метод за намаляване на шума на изображенията.