日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

[GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(下)

發(fā)布時(shí)間:2023/12/10 pytorch 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(下) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這是本文的最后一部分內(nèi)容了,前兩部分內(nèi)容的文章:

  • [GAN學(xué)習(xí)系列3]采用深度學(xué)習(xí)和 TensorFlow 實(shí)現(xiàn)圖片修復(fù)(上)
  • [GAN學(xué)習(xí)系列3]采用深度學(xué)習(xí)和 TensorFlow 實(shí)現(xiàn)圖片修復(fù)(中)
  • 以及原文的地址:

    http://bamos.github.io/2016/08/09/deep-completion/

    最后一部分的目錄如下:

    • 第三步:為圖像修復(fù)尋找最佳的假圖片
      • 利用 DCGANs 實(shí)現(xiàn)圖像修復(fù)
      • [ML-Heavy] 損失函數(shù)
      • [ML-Heavy] TensorFlow 實(shí)現(xiàn) DCGANs 模型來實(shí)現(xiàn)圖像修復(fù)
      • 修復(fù)你的圖片

    第三步:為圖像修復(fù)尋找最佳的假圖片

    利用 DCGANs 實(shí)現(xiàn)圖像修復(fù)

    在第二步中,我們定義并訓(xùn)練了判別器D(x)和生成器G(z),那接下來就是如何利用DCGAN網(wǎng)絡(luò)模型來完成圖片的修復(fù)工作了。

    在這部分,作者會(huì)參考論文"Semantic Image Inpainting with Perceptual and Contextual Losses" 提出的方法。

    對于部分圖片y,對于缺失的像素部分采用最大化D(y)這種看起來合理的做法并不成功,它會(huì)導(dǎo)致生成一些既不屬于真實(shí)數(shù)據(jù)分布,也屬于生成數(shù)據(jù)分布的像素值。如下圖所示,我們需要一種合理的將y映射到生成數(shù)據(jù)分布上。

    [ML-Heavy] 損失函數(shù)

    首先我們先定義幾個(gè)符號(hào)來用于圖像修復(fù)。用M表示一個(gè)二值的掩碼(Mask),即只有 0 或者是 1 的數(shù)值。其中 1 數(shù)值表示圖片中要保留的部分,而 0 表示圖片中需要修復(fù)的區(qū)域。定義好這個(gè) Mask 后,接下來就是定義如何通過給定一個(gè) Mask 來修復(fù)一張圖片y,具體的方法就是讓y和M的像素對應(yīng)相乘,這種兩個(gè)矩陣對應(yīng)像素的方法叫做哈大馬乘積,并且表示為 M ⊙ y ,它們的乘積結(jié)果會(huì)得到圖片中原始部分,如下圖所示:

    接下來,假設(shè)我們從生成器G的生成結(jié)果找到一張圖片,如下圖公式所示,第二項(xiàng)表示的是DCGAN生成的修復(fù)部分:

    根據(jù)上述公式,我們知道最重要的就是第二項(xiàng)生成部分,也就是需要實(shí)現(xiàn)很好修復(fù)圖片缺失區(qū)域的做法。為了實(shí)現(xiàn)這個(gè)目的,這就需要回顧在第一步提出的兩個(gè)重要的信息,上下文和感知信息。而這兩個(gè)信息的獲取主要是通過損失函數(shù)來實(shí)現(xiàn)。損失函數(shù)越小,表示生成的G(z)越適合待修復(fù)的區(qū)域。

    Contextual Loss

    為了保證輸入圖片相同的上下文信息,需要讓輸入圖片y(可以理解為標(biāo)簽)中已知的像素和對應(yīng)在G(z)中的像素盡可能相似,因此需要對產(chǎn)生不相似像素的G(z)做出懲罰。該損失函數(shù)如下所示,采用的是 L1 正則化方法:

    這里還可以選擇采用 L2 正則化方法,但論文中通過實(shí)驗(yàn)證明了 L1 正則化的效果更好。

    理想的情況是y和G(z)的所有像素值都是相同的,也就是說它們是完全相同的圖片,這也就讓上述損失函數(shù)值為0

    Perceptual Loss

    為了讓修復(fù)后的圖片看起來非常逼真,我們需要讓判別器D具備正確分辨出真實(shí)圖片的能力。對應(yīng)的損失函數(shù)如下所示:

    因此,最終的損失函數(shù)如下所示:

    這里 λ 是一個(gè)超參數(shù),用于控制兩個(gè)函數(shù)的各自重要性。

    另外,論文還采用泊松混合(poisson blending) 方法來平滑重構(gòu)后的圖片。

    [ML-Heavy] TensorFlow 實(shí)現(xiàn) DCGANs 模型來實(shí)現(xiàn)圖像修復(fù)

    代碼實(shí)現(xiàn)的項(xiàng)目地址如下:

    https://github.com/bamos/dcgan-completion.tensorflow

    首先需要新添加的變量是表示用于修復(fù)的 mask,如下所示,其大小和輸入圖片一樣

    self.mask = tf.placeholder(tf.float32, [None] + self.image_shape, name='mask')

    對于最小化損失函數(shù)的方法是采用常用的梯度下降方法,而在 TensorFlow 中已經(jīng)實(shí)現(xiàn)了自動(dòng)微分的方法,因此只需要添加待實(shí)現(xiàn)的損失函數(shù)代碼即可。添加的代碼如下所示:

    self.contextual_loss = tf.reduce_sum(tf.contrib.layers.flatten(tf.abs(tf.mul(self.mask, self.G) - tf.mul(self.mask, self.images))), 1) self.perceptual_loss = self.g_loss self.complete_loss = self.contextual_loss + self.lam*self.perceptual_loss self.grad_complete_loss = tf.gradients(self.complete_loss, self.z)

    接著,就是定義一個(gè) mask。這里作者實(shí)現(xiàn)的是位置在圖片中心部分的 mask,可以根據(jù)需求來添加需要的任意隨機(jī)位置的 mask,實(shí)際上代碼中實(shí)現(xiàn)了多種 mask

    if config.maskType == 'center':scale = 0.25assert(scale <= 0.5)mask = np.ones(self.image_shape)l = int(self.image_size*scale)u = int(self.image_size*(1.0-scale))mask[l:u, l:u, :] = 0.0

    因?yàn)椴捎锰荻认陆?#xff0c;所以采用一個(gè) mini-batch 的帶有動(dòng)量的映射梯度下降方法,將z映射到[-1,1]的范圍。代碼如下:

    for idx in xrange(0, batch_idxs):batch_images = ...batch_mask = np.resize(mask, [self.batch_size] + self.image_shape)zhats = np.random.uniform(-1, 1, size=(self.batch_size, self.z_dim))v = 0for i in xrange(config.nIter):fd = {self.z: zhats,self.mask: batch_mask,self.images: batch_images,}run = [self.complete_loss, self.grad_complete_loss, self.G]loss, g, G_imgs = self.sess.run(run, feed_dict=fd)# 映射梯度下降方法v_prev = np.copy(v)v = config.momentum*v - config.lr*g[0]zhats += -config.momentum * v_prev + (1+config.momentum)*vzhats = np.clip(zhats, -1, 1)

    修復(fù)你的圖片

    選擇需要進(jìn)行修復(fù)的圖片,并放在文件夾dcgan-completion.tensorflow/your-test-data/raw下面,然后根據(jù)之前第二步的做法來對人臉圖片進(jìn)行對齊操作,然后將操作后的圖片放到文件夾dcgan-completion.tensorflow/your-test-data/aligned。作者隨機(jī)從數(shù)據(jù)集LFW中挑選圖片進(jìn)行測試,并且保證其DCGAN模型的訓(xùn)練集沒有包含LFW中的人臉圖片。

    接著可以運(yùn)行下列命令來進(jìn)行修復(fù)工作了:

    ./complete.py ./data/your-test-data/aligned/* --outDir outputImages

    上面的代碼會(huì)將修復(fù)圖片結(jié)果保存在--outDir參數(shù)設(shè)置的輸出文件夾下,接著可以采用ImageMagick工具來生成動(dòng)圖。這里因?yàn)閯?dòng)圖太大,就只展示修復(fù)后的結(jié)果圖片:

    而原始的輸入待修復(fù)圖片如下:


    小結(jié)

    最后,再給出前兩步的文章鏈接:

  • [GAN學(xué)習(xí)系列3]采用深度學(xué)習(xí)和 TensorFlow 實(shí)現(xiàn)圖片修復(fù)(上)
  • [GAN學(xué)習(xí)系列3]采用深度學(xué)習(xí)和 TensorFlow 實(shí)現(xiàn)圖片修復(fù)(中)
  • 當(dāng)然這個(gè)圖片修復(fù)方法由于也是2016年提出的方法了,所以效果不算特別好,這兩年其實(shí)已經(jīng)新出了好多篇新的圖片修復(fù)方法的論文,比如:

  • 2016CVPR Context encoders: Feature learning by inpainting

  • Deepfill 2018–Generative Image Inpainting with Contextual Attention

  • Deepfillv2–Free-Form Image Inpainting with Gated Convolution

  • 2017CVPR–High-resolution image inpainting using multi-scale neural patch synthesis

  • 2018年的 NIPrus收錄論文–Image Inpainting via Generative Multi-column Convolutional Neural Networks


  • 歡迎關(guān)注我的微信公眾號(hào)–機(jī)器學(xué)習(xí)與計(jì)算機(jī)視覺,或者掃描下方的二維碼,在后臺(tái)留言,和我分享你的建議和看法,指正文章中可能存在的錯(cuò)誤,大家一起交流,學(xué)習(xí)和進(jìn)步!

    我的個(gè)人博客:

    http://ccc013.github.io/


    往期精彩推薦

    1.機(jī)器學(xué)習(xí)入門系列(1)–機(jī)器學(xué)習(xí)概覽(上)

    2.機(jī)器學(xué)習(xí)入門系列(2)–機(jī)器學(xué)習(xí)概覽(下)

    3.[GAN學(xué)習(xí)系列] 初識(shí)GAN

    4.[GAN學(xué)習(xí)系列2] GAN的起源

    5.[GAN學(xué)習(xí)系列3]采用深度學(xué)習(xí)和 TensorFlow 實(shí)現(xiàn)圖片修復(fù)(上)

    6.[GAN學(xué)習(xí)系列3]采用深度學(xué)習(xí)和 TensorFlow 實(shí)現(xiàn)圖片修復(fù)(中)

    總結(jié)

    以上是生活随笔為你收集整理的[GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。