概述
- 自動編碼器是什麼?自動編碼器是如何工作的?本文將回答這些問題。
- 我們將通過一個案例——如何提高模糊影像的解析度,來探討自動編碼器的概念。
簡介
你還記得膠捲相機的時代嗎?沖洗照片是一個神祕的過程,只有攝影師和專業人士才能夠駕輕就熟。大多數人的印象中只有瀰漫著昏暗紅光的暗室。簡而言之,沖洗照片是一個耗時的過程。
後來數位相機革命開始了,過往的時代一去不復返!我們甚至不想再列印照片了——大多數人的照片儲存在智慧手機、膝上型電腦或雲上。
即使現在,我們也會遇到(點選滑鼠的時候)模糊、畫素化和模糊的圖片。我對此深表愧疚,很多人都在努力呈現出完美的圖片。這正是深度學習和自動編碼器的用武之地。
下面將介紹什麼是自動編碼器,以及工作原理。然後,我們會給一個實際案例——基於Python中的自動編碼器提高影像的解析度。
必備條件:熟悉Keras,基於神經網路和卷積層的影像分類。如果你需要回顧這些概念,可以參考以下:
- 神經網路概論(免費課程)
https://courses.analyticsvidhya.com/courses/Introduction-to-Neural-Networks?utm_source=blog&utm_medium=what-is-autoencoder-enhance-image-resolution - 建立你的第一個影像分類模型
https://www.analyticsvidhya.com/blog/2019/01/build-image-classification-model-10-minutes/?utm_source=blog&utm_medium=what-is-autoencoder-enhance-image-resolution
目錄
一、什麼是自動編碼器
二、關於影像去噪自編碼器
三、問題描述-使用自動編碼器提高影像解析度
四、使用Python實現自動編碼器
一、什麼是自動編碼器
Pulkit Sharma在文章中給出瞭如下定義:
“自動編碼器本質上是學習輸入資料低維特徵表示的神經網路結構。”
自動編碼器由兩個相連的網路組成:編碼器和解碼器。編碼器的目的是獲取一個輸入(x)併產生一個特徵對映(z):
這個特徵對映(z)的大小或長度通常小於x。為什麼是這樣呢?
因為我們只希望z捕獲可以描述輸入資料的有意義的變化因子,因此z的形狀通常小於x。
現在,問題是我們如何獲得這個特徵表示(z)?我們如何訓練這個模型?為此,我們可以在提取的特徵之上新增一個解碼器網路,然後訓練模型:
二、關於影像去噪自編碼器
我們將在本文中解決的問題與影像去噪自動編碼器的功能有關。下面我們詳細介紹下如何利用自動編碼器消除影像中的噪聲。
假設我們有一組手寫數字影像,其中一些已經損壞。 以下是一些帶有噪點(損壞)的影像:
從影像中去除這種噪聲被稱為影像去噪問題。所需的輸出是乾淨的影像,其中大部分噪聲被去除,如下所示:
但是自動編碼器如何從影像中去除這種噪聲呢?
正如我們在上一節中已經看到的,自動編碼器試圖重建輸入資料。因此,如果我們把損壞的影像作為輸入,自動編碼器將嘗試重建噪聲影像。
那麼,我們該怎麼辦呢?改變結構?答案是否定的!
這裡需要的是一個小調整。我們可以通過使用原始影像和重構影像來計算損耗,而不是使用輸入和重構輸出來計算損耗。下圖說明了我的觀點:
現在我們已經熟悉了去噪自動編碼器的功能,下面我們回到期望使用自動編碼器解決的問題。
三、問題描述-使用自動編碼器提高影像解析度
對這個問題相信你不會陌生。我們大多數人遇到模糊影像都很鬱悶,都希望圖片能清晰些。下面我們將使用自動編碼器解決該問題!
假設我們有一組低解析度的人臉影像。我們的任務是提高這些影像的解析度。可以藉助Photoshop等照片編輯工具來完成此操作。但是,當手頭有成千上萬張影像時,我們需要一種更智慧的方法來執行此任務。
以下是一些示例影像及其原始影像:
四、使用Python實現自動編碼器
讓我們開啟我們的Juyter Notebook並匯入所需的庫:
- 下載資料集
我們的研究基於流行的“Labeled Faces in the Wild”資料集。它設計用於研究無約束人臉識別問題。然而,在這裡我們的目標不是人臉識別,而是建立一個模型來提高影像解析度。
讓我們下載和提取資料集:
# download dataset
! wget http://vis-www.cs.umass.edu/lfw/lfw.tgz
# extract dataset
! tar -xvzf lfw.tgz
此資料集將被提取到多個資料夾中。因此,捕獲所有影像的檔案路徑是很重要的。我們可以藉助glob庫輕鬆地做到這一點。
#capture paths to images
face_images = glob.glob('lfw/**/*.jpg')
- 載入和預處理影像
影像的原始大小是250×250畫素。然而,在一般配置的系統上處理這些影像需要消耗相當多的計算資源。因此,我們需要裁剪所有影像的尺寸。
- 模型的訓練資料準備
接下來,我們將資料集(影像)分成兩組——訓練和驗證。我們將使用訓練集來訓練我們的模型,並用驗證集來評估模型的效能:
讓我們來看看資料集中的影像:
這個案例的思想和去噪自動編碼器非常相似。
我們將對輸入影像做一些修改,並使用原始影像計算損失。作為一個提高解析度的任務,我們降低原始影像的解析度,並將其輸入到模型中。
如下是處理後的輸入圖片:
我們將使用下面的函式來降低所有影像的解析度,並建立一組單獨的低解析度影像。
- 準備輸入影像
降低所有影像的解析度,包括訓練集和驗證集。
- 模型建立
模型的結構定義如下:
可以根據需要修改該結構。你可以改變層的數量,改變層的型別,使用正則化,以及其他很多引數。當下我們繼續使用這個結構。
模型結構視覺化對於除錯(如果出現錯誤)很有幫助。在Keras中很容易實現,僅需執行<model name>.summary( )函式即可:
autoencoder.summary()
我們最終可以訓練我們的模型:
- 預測(增強影像)
predictions = autoencoder.predict(val_x_px)
後記
本教程講解了自動編碼器,我們基於影像去噪的思路實現了提高影像解析度。我們可以將其擴充套件到其他很多地方。
例如,我們也可以使用這種技術來提高低解析度視訊的質量。 因此,即使沒有給影像打上標籤,我們也可以處理影像資料並解決一些實際問題。如果您還有其他基於無監督學習的影像處理案例或技術,請在下面的評論部分中共享它。
原文標題:
What are Autoencoders? Learn How to Enhance a Blurred Image using an Autoencoder!
原文連結:
https://www.analyticsvidhya.com/blog/2020/02/what-is-autoencoder-enhance-image-resolution/