🤖 Дълбоко обучение

Невронно имплантиране с AutoEncoders и TensorFlow

Реконструкция на изображение с AutoEncoders (с прескачащи връзки)

Интуицията

Представете си, че решавате пъзел. Завършихте по-голямата част от него. Да предположим, че трябва да поправите парче в средата на картина (която е почти завършена). Трябва да изберете парче от кутията, което да се впише в пространството и да завърши цялата картина.

Сигурен съм, че можете да направите това бързо. Но как мозъкът ви прави това?

Първо анализира картината около празния слот (където трябва да поправите част от пъзела). Ако на снимката има дърво, ще потърсите зелено оцветено парче (което е очевидно!). И така, накратко, нашият мозък е в състояние да предвиди парчето (което ще се побере в гнездото), като знае заобикалящия контекст на изображението.

Нашият модел в този урок ще изпълни подобна задача. Той ще научи контекста на изображението и след това ще предвиди част от изображението (която липсва), използвайки този научен контекст.

Внедряване на код

Препоръчвам ви да отворите този бележник (имплементацията на TF) в друг раздел, за да имате интуиция какво се случва.



Постановка на проблема

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

Така че нашият модел ще реконструира липсващата част от изображението, използвайки контекста, който е научил по време на обучението.

Данните

Ще изберем един домейн за нашата задача. Ние избираме няколко планински изображения, които са част от набора от данни Intel Image Classification от Puneet Bansal на Kaggle.

Защо само изображения на планини?

Тук избираме изображения, които принадлежат към определен домейн. Ако изберем набор от данни, който има в дивата природа изображения, моделът ни няма да работи добре. Следователно, ние го ограничаваме до един домейн.

Изтеглете данните, които съм хоствал в GitHub, като използвате wget

!wget https://github.com/shubham0204/Dataset_Archives/blob/master/mountain_images.zip?raw=true -O images.zip
!unzip images.zip

За да направим нашите данни за обучение, ще преминем през всяко изображение в нашия набор от данни и ще изпълним върху него следните задачи,

  1. Първо ще прочетем нашия файл с изображение с помощта на PIL.Image.open(). Преобразувайте този Image обект в масив NumPy с помощта на np.asarray().
  2. Определете размера на прозореца. Това ще бъде дължината на страната на квадрата, която ще вземем от оригиналното изображение.
  3. Генерирайте 2 произволни числа в диапазона [ 0 , image_dim — window_size ]. Където image_dim е размерът на нашето квадратно входно изображение.
  4. Тези две числа (наречени px и py) са позициите, откъдето оригиналното изображение ще бъде изрязано. Изберете частта от масива с изображения и я заменете с нулев масив.

Кодът изглежда така,

Модел на автоматичен енкодер с прескачащи връзки

Добавяме прескачащи връзки към нашия модел на автоенкодер. Тези прескачащи връзки осигуряват по-добра дискретизация. Чрез използването на слоеве с максимално обединяване голяма част от пространствената информация се губи, докато преминава през енкодера. За да реконструираме изображението от латентното му представяне (произведено от енкодера), ние добавяме прескачащи връзки, които въвеждат информация от енкодера към декодера.

Накрая обучаваме нашия модел на автоенкодер с прескачащи връзки,

model.fit( x_train , y_train , epochs=150 , batch_size=25 , validation_data=( x_test , y_test ) )

Горните резултати са получени на няколко тестови изображения. Наблюдаваме, че моделът почтисе е научил как да попълва черните кутии! Но все още можем да разберем къде е била кутията в оригиналното изображение. Така че по този начин можем да конструираме модел, за да предвидим липсващата част от изображението.

Допълнителна информация

Ако ви е харесал този блог, не забравяйте да прочетете още мои истории тук, в Medium.

Това е всичко!

Това е просто готино приложение на Auto Encoders. Вдъхнових се за това видео от тук. Благодаря за четенето!