自動編碼器是什麼?教你如何使用自動編碼器增強模糊影像

資料派THU發表於2020-03-31

概述

  • 自動編碼器是什麼?自動編碼器是如何工作的?本文將回答這些問題。
  • 我們將通過一個案例——如何提高模糊影像的解析度,來探討自動編碼器的概念。

簡介

你還記得膠捲相機的時代嗎?沖洗照片是一個神祕的過程,只有攝影師和專業人士才能夠駕輕就熟。大多數人的印象中只有瀰漫著昏暗紅光的暗室。簡而言之,沖洗照片是一個耗時的過程。

後來數位相機革命開始了,過往的時代一去不復返!我們甚至不想再列印照片了——大多數人的照片儲存在智慧手機、膝上型電腦或雲上。

自動編碼器是什麼?教你如何使用自動編碼器增強模糊影像暗室即使現在,我們也會遇到(點選滑鼠的時候)模糊、畫素化和模糊的圖片。我對此深表愧疚,很多人都在努力呈現出完美的圖片。這正是深度學習自動編碼器的用武之地。

下面將介紹什麼是自動編碼器,以及工作原理。然後,我們會給一個實際案例——基於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/

相關文章