怎么運(yùn)用卷積自編碼器對(duì)圖片進(jìn)行降噪?
發(fā)布時(shí)間:2021-07-16 05:50:00 來(lái)源:星空體育官方平臺(tái)
這周作業(yè)太忙,原本想更把Attention tranlsation寫(xiě)出來(lái),但一向抽不出時(shí)刻,等后邊有時(shí)刻再來(lái)寫(xiě),先給大家種個(gè)草。
咱們這周來(lái)看一個(gè)簡(jiǎn)略的自編碼器實(shí)戰(zhàn)代碼,關(guān)于自編碼器的理論介紹我就不具體介紹了,網(wǎng)上一搜一大把。
最簡(jiǎn)略的自編碼器便是經(jīng)過(guò)一個(gè)encoder和decoder來(lái)對(duì)輸入進(jìn)行復(fù)現(xiàn),例如咱們將一個(gè)圖片輸入到一個(gè)網(wǎng)絡(luò)中,自編碼器的encoder對(duì)圖片進(jìn)行緊縮,得到緊縮后的信息,然后decoder再將這個(gè)信息進(jìn)行解碼然后復(fù)現(xiàn)原圖。
自編碼器實(shí)際上是經(jīng)過(guò)去最小化target和input的差別來(lái)進(jìn)行優(yōu)化,即讓輸出層盡或許地去復(fù)現(xiàn)原本的信息。因?yàn)樽跃幋a器的根底方式比較簡(jiǎn)略,關(guān)于它的一些變體也十分之多,包含DAE,SDAE,VAE等等,假如感興趣的小伙伴能夠去網(wǎng)上搜一下其他相關(guān)信息。
本篇文章將完結(jié)兩個(gè)Demo,榜首部分即完結(jié)一個(gè)簡(jiǎn)略的input-hidden-output結(jié)的自編碼器,第二部分將在榜首部分的根底上完結(jié)卷積自編碼器來(lái)對(duì)圖片進(jìn)行降噪。
在這兒,咱們運(yùn)用MNIST手寫(xiě)數(shù)據(jù)集來(lái)進(jìn)行試驗(yàn)。首要咱們需求導(dǎo)入數(shù)據(jù),TensorFlow現(xiàn)已封裝了這個(gè)試驗(yàn)數(shù)據(jù)集,所以咱們運(yùn)用起來(lái)也十分簡(jiǎn)略。
經(jīng)過(guò)input_data就能夠加載咱們的數(shù)據(jù)集。假如小伙伴本地現(xiàn)已有了MNIST數(shù)據(jù)集(四個(gè)緊縮包),能夠把這四個(gè)緊縮包放在目錄MNIST_data下,這樣TensorFlow就會(huì)直接Extract數(shù)據(jù),而不必再?gòu)念^下載。咱們能夠經(jīng)過(guò)imshow來(lái)隨意檢查一個(gè)圖畫(huà)。
因?yàn)樵蹅兗虞d進(jìn)來(lái)的數(shù)據(jù)現(xiàn)已被處理成一個(gè)784維度的向量,因而從頭顯現(xiàn)的時(shí)分需求reshape一下。
咱們把數(shù)據(jù)加載進(jìn)來(lái)今后就能夠進(jìn)行最簡(jiǎn)略的建模。在這之前,咱們首要來(lái)獲取一下input數(shù)據(jù)的巨細(xì),咱們加載進(jìn)來(lái)的圖片是28x28的像素塊,TensorFlow現(xiàn)已幫咱們處理成了784維度的向量。一起咱們還需求指定一下hidden layer的巨細(xì)。
在這兒我指定了64,hidden_units越小,意味著信息丟失的越多,小伙伴們也能夠測(cè)驗(yàn)一下其他的巨細(xì)來(lái)看看成果。
至此,一個(gè)簡(jiǎn)略的AutoEncoder就結(jié)構(gòu)完結(jié),接下來(lái)咱們能夠發(fā)動(dòng)TensorFlow的graph來(lái)進(jìn)行練習(xí)。
經(jīng)過(guò)上面的進(jìn)程,咱們結(jié)構(gòu)了一個(gè)簡(jiǎn)略的AutoEncoder,下面咱們將對(duì)成果進(jìn)行可視化看一下它的體現(xiàn)。
這兒,我選擇了測(cè)試數(shù)據(jù)會(huì)集的5個(gè)樣原本進(jìn)行可視化,相同的,假如想調(diào)查灰度圖畫(huà),指定cmap參數(shù)為’Greys_r’即可。上面一行為test數(shù)據(jù)會(huì)集原始圖片,第二行是經(jīng)過(guò)AutoEncoder復(fù)現(xiàn)今后的圖片,能夠很明顯的看到像素信息的丟失。
經(jīng)過(guò)上面一個(gè)簡(jiǎn)略的比如,咱們了解了AutoEncoder的根本作業(yè)原理,下面咱們將更進(jìn)一步改善咱們的模型,將隱層轉(zhuǎn)換為卷積層來(lái)進(jìn)行圖畫(huà)降噪。
在了解了上面AutoEncoder作業(yè)原理的根底上,咱們?cè)谶@一部分將對(duì)AutoEncoder參加多個(gè)卷積層來(lái)進(jìn)行圖片的降噪處理。
相同的咱們?nèi)允沁\(yùn)用MNIST數(shù)據(jù)集來(lái)進(jìn)行試驗(yàn),關(guān)于數(shù)據(jù)導(dǎo)入的進(jìn)程不再贅述,請(qǐng)下載代碼檢查。在開(kāi)端之前,咱們先經(jīng)過(guò)一張圖片來(lái)看一下咱們的整個(gè)模型結(jié)構(gòu):
咱們經(jīng)過(guò)向模型輸入一個(gè)帶有噪聲的圖片,在輸出端給模型沒(méi)有噪聲的圖片,讓模型經(jīng)過(guò)卷積自編碼器去學(xué)習(xí)降噪的進(jìn)程。
這兒的輸入層和咱們上一部分的輸入層現(xiàn)已不同,因?yàn)檫@兒咱們要運(yùn)用卷積操作,因而,輸入層應(yīng)該是一個(gè)height x width x depth的一個(gè)圖畫(huà),一般的圖畫(huà)depth是RGB格局三層,這兒咱們的MNIST數(shù)據(jù)集的depth只要1。
緊接著對(duì)卷積成果進(jìn)行最大池化操作(max pooling),這兒我設(shè)置了size和stride都是2 x 2,池化操作不改動(dòng)卷積成果的深度,因而池化今后的巨細(xì)為 14 x 14 x 64。
經(jīng)過(guò)三層的卷積和池化操作今后,咱們得到的conv3實(shí)際上就相當(dāng)于上一部分中AutoEncoder的隱層,這一層的數(shù)據(jù)現(xiàn)已被緊縮為4 x 4 x 32的巨細(xì)。
接下來(lái)咱們就要開(kāi)端進(jìn)行Decoder端的卷積。在這之前,或許有小伙伴要問(wèn)了,已然Encoder中都現(xiàn)已把圖片卷成了4 x 4 x 32,咱們假如持續(xù)在Decoder進(jìn)行卷積的話,那豈不是得到的數(shù)據(jù)size越來(lái)越???
所以,在Decoder端,咱們并不是單純進(jìn)行卷積操作,而是運(yùn)用了Upsample(中文翻譯能夠?yàn)樯喜蓸樱? 卷積的組合。
咱們知道卷積操作是經(jīng)過(guò)一個(gè)濾波器對(duì)圖片中的每個(gè)patch進(jìn)行掃描,然后對(duì)patch中的像素塊加權(quán)求和后再進(jìn)行非線性處理。
舉個(gè)比如,原圖中咱們的patch的巨細(xì)假如是3 x 3(說(shuō)的淺顯點(diǎn)便是一張圖片中咱們?nèi)∑渲幸粋€(gè)3 x 3巨細(xì)的像素塊出來(lái)),接著咱們運(yùn)用3 x 3的濾波器對(duì)這個(gè)patch進(jìn)行處理,那么這個(gè)patch經(jīng)過(guò)卷積今后就變成了1個(gè)像素塊。
可是Deconvolution有一些壞處,它會(huì)導(dǎo)致圖片中呈現(xiàn)checkerboard patterns,這是因?yàn)樵贒econvolution的進(jìn)程中,濾波器中會(huì)呈現(xiàn)許多堆疊。為了處理這個(gè)問(wèn)題,有人提出了運(yùn)用Upsample加卷積層來(lái)進(jìn)行處理。
經(jīng)過(guò)三次Upsample的操作,咱們得到了28 x 28 x 64的數(shù)據(jù)巨細(xì)。終究,咱們要將這個(gè)成果再進(jìn)行一次卷積,處理成咱們?cè)紙D畫(huà)的巨細(xì)。
經(jīng)過(guò)上面的進(jìn)程咱們就結(jié)構(gòu)完了整個(gè)卷積自編碼器模型。因?yàn)樵蹅兿虢?jīng)過(guò)這個(gè)模型對(duì)圖片進(jìn)行降噪,因而在練習(xí)之前咱們還需求在原始數(shù)據(jù)的根底上結(jié)構(gòu)一下咱們的噪聲數(shù)據(jù)。
咱們經(jīng)過(guò)上面一個(gè)簡(jiǎn)略的比如來(lái)看一下怎么參加噪聲,咱們獲取一張圖片的數(shù)據(jù)img(巨細(xì)為784),在它的根底上參加噪聲因子乘以隨機(jī)數(shù)的成果,就會(huì)改動(dòng)圖片上的像素。
接著,因?yàn)镸NIST數(shù)據(jù)的每個(gè)像素?cái)?shù)據(jù)都被處理成了0-1之間的數(shù),所以咱們經(jīng)過(guò)numpy.clip對(duì)參加噪聲的圖片進(jìn)行clip操作,確保每個(gè)像素?cái)?shù)據(jù)仍是在0-1之間。
在練習(xí)模型時(shí),咱們的輸入現(xiàn)已變成了參加噪聲后的數(shù)據(jù),而輸出是咱們的原始沒(méi)有噪聲的數(shù)據(jù),首要要對(duì)原始數(shù)據(jù)進(jìn)行reshape操作,變成與inputs_相同的格局。因?yàn)榫矸e操作的深度,所以模型練習(xí)時(shí)分有些慢,主張運(yùn)用GPU跑。
能夠看到經(jīng)過(guò)卷積自編碼器,咱們的降噪作用仍是十分好的,終究生成的圖片看起來(lái)十分順滑,噪聲也簡(jiǎn)直看不到了。
有些小伙伴或許就會(huì)想,咱們也能夠用根底版的input-hidden-output結(jié)構(gòu)的AutoEncoder來(lái)完結(jié)降噪。因而我也完結(jié)了一版用最簡(jiǎn)略的input-hidden-output結(jié)構(gòu)進(jìn)行降噪練習(xí)的模型(代碼在我的GitHub)。咱們來(lái)看看它的成果:
能夠看出,跟卷積自編碼器比較,它的降噪作用更差一些,在重塑的圖畫(huà)中還能夠看到一些噪聲的影子。
至此,咱們完結(jié)了根底版別的AutoEncoder模型,還在此根底上參加卷積層來(lái)進(jìn)行圖片降噪。信任小伙伴對(duì)AntoEncoder也有了一個(gè)開(kāi)始的知道。
每日頭條、業(yè)界資訊、熱門(mén)資訊、八卦爆料,全天盯梢微博播報(bào)。各種爆料、內(nèi)情、花邊、資訊一掃而光。百萬(wàn)互聯(lián)網(wǎng)粉絲互動(dòng)參加,TechWeb官方微博等待您的重視。
友情鏈接:百度中鐵二院環(huán)??萍?/a>
星空體育APP下載(星空·體育)官方平臺(tái)網(wǎng)站入口 版權(quán)所有 技術(shù)支持:星空體育APP下載
公司地址:成都市天府新區(qū)寧波路377號(hào)中鐵卓越中心裙樓512 企業(yè)郵箱:sales@clqcwz.cn 電話:028-65785509