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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

pytorch

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

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

在之前的兩篇 GAN 系列文章–[GAN學(xué)習(xí)系列1]初識(shí)GAN以及[GAN學(xué)習(xí)系列2] GAN的起源中簡(jiǎn)單介紹了 GAN 的基本思想和原理,這次就介紹利用 GAN 來(lái)做一個(gè)圖片修復(fù)的應(yīng)用,主要采用的也是 GAN 在網(wǎng)絡(luò)結(jié)構(gòu)上的升級(jí)版–DCGAN,最初始的 GAN 采用的還是神經(jīng)網(wǎng)絡(luò),即全連接網(wǎng)絡(luò),而 DCGAN 則是換成卷積神經(jīng)網(wǎng)絡(luò)(CNNs)了,這可以很好利用 CNN 強(qiáng)大的特征提取能力,更好的生成質(zhì)量更好的圖片。

原文是:

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

由于原文比較長(zhǎng),所以會(huì)分為 3 篇來(lái)介紹。


這篇文章的目錄如下:

  • 介紹
  • 第一步:將圖像解釋為概率分布中的樣本
    • 如何填充缺失的信息?
    • 對(duì)于圖片在哪里適配這些統(tǒng)計(jì)數(shù)據(jù)?
    • 我們?nèi)绾涡迯?fù)圖片呢?
  • 第二步:快速生成假的圖片
    • 從未知的概率分布中學(xué)習(xí)生成新的樣本
    • [ML-Heavy] 建立 GAN 模型
    • 采用 G(z) 生成假的圖片
    • [ML-Heavy] 訓(xùn)練 DCGAN
    • 目前的 GAN 和 DCGAN 實(shí)現(xiàn)
    • [ML-Heavy] TensorFlow 實(shí)現(xiàn) DCGAN
    • 在你的數(shù)據(jù)集上運(yùn)行 DCGAN 模型
  • 第三步:為圖像修復(fù)尋找最佳的假圖片
    • 利用 DCGANs 實(shí)現(xiàn)圖像修復(fù)
    • [ML-Heavy] 損失函數(shù)
    • [ML-Heavy] TensorFlow 實(shí)現(xiàn) DCGANs 模型來(lái)實(shí)現(xiàn)圖像修復(fù)
    • 修復(fù)你的圖片
  • 結(jié)論
  • 對(duì)本文/項(xiàng)目的引用
  • 供進(jìn)一步閱讀的部分參考書目
  • 一些未實(shí)現(xiàn)的對(duì)于 TensorFlow 和 Torch 的想法

本文會(huì)先講述背景和第一步的工作內(nèi)容。

介紹

設(shè)計(jì)師和攝像師習(xí)慣使用一個(gè)非常強(qiáng)有力的工具–內(nèi)容感知填充,來(lái)修復(fù)圖片中不需要或者缺失的部分。圖像修復(fù)是指用于修復(fù)圖像中缺失或者毀壞的部分區(qū)域。實(shí)現(xiàn)圖像的修復(fù)有很多種方法。在本文中,介紹的是在 2016年7月26日發(fā)表在 arXiv 上的論文“Semantic Image Inpainting with Perceptual and Contextual Losses”,這篇論文介紹如何采用 DCGAN 來(lái)實(shí)現(xiàn)圖像修復(fù)。這篇文章會(huì)即兼顧非機(jī)器學(xué)習(xí)背景和有機(jī)器學(xué)習(xí)背景的讀者,帶有 [ML-Heavy] 標(biāo)簽的標(biāo)題內(nèi)容表示可以跳過(guò)這部分細(xì)節(jié)內(nèi)容。我們只考慮有限制的修復(fù)帶有缺失像素的人臉圖片的例子。TensorFlow 實(shí)現(xiàn)的源代碼可以在下面的 Github 地址上查看:

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

我們將從以下三個(gè)步驟來(lái)完成圖片修復(fù)工作:

  • 首先將圖像解釋為概率分布中的樣本
  • 這樣的解釋步驟可以讓我們學(xué)習(xí)如何生成假的圖片
  • 為修復(fù)圖片尋找最佳的生成圖片
  • 下面是兩張修復(fù)前和修復(fù)后的圖片例子:

    下面是本文將用到的帶有缺失區(qū)域的人臉例子:

    第一步:將圖像解釋為概率分布中的樣本

    如何填充缺失的信息?

    對(duì)于上述幾張圖片例子,假設(shè)你正在設(shè)計(jì)一個(gè)系列來(lái)填充這些缺失的區(qū)域,你會(huì)選擇如何做?你認(rèn)為人腦會(huì)怎么處理它呢?你需要使用哪些信息來(lái)實(shí)現(xiàn)這個(gè)修復(fù)工作呢?

    本文會(huì)主要關(guān)注下面兩種信息:

  • 上下文信息(Contextual information):利用缺失像素區(qū)域周圍像素提供的信息來(lái)填充
  • 感知信息(Perceptual information):將填充的部分解釋為“正?!?#xff0c;如同現(xiàn)實(shí)生活或者其他圖片中看到的一樣。
  • 這兩種信息都非常重要。沒(méi)有上下文信息,你怎么知道填充什么信息呢?沒(méi)有感知信息,對(duì)于一個(gè)上下文來(lái)說(shuō)會(huì)有很多種有效的填充方式。比如一些對(duì)于機(jī)器學(xué)習(xí)系統(tǒng)來(lái)說(shuō)看上去是“正?!钡奶畛湫畔?#xff0c;但對(duì)于我們?nèi)祟悂?lái)說(shuō)其實(shí)就是非常奇怪的填充內(nèi)容。

    因此,有一個(gè)即精確又直觀的捕獲這兩種屬性,并且可以解釋說(shuō)明如何一步步實(shí)現(xiàn)圖像修復(fù)的算法是再好不過(guò)了。創(chuàng)造出這樣的算法可能只會(huì)適用于特殊的例子,但通常都沒(méi)有人知道如何創(chuàng)造這樣的算法?,F(xiàn)在最佳的做法是使用統(tǒng)計(jì)數(shù)據(jù)和機(jī)器學(xué)習(xí)方法來(lái)實(shí)現(xiàn)一種近似的技術(shù)。

    對(duì)于圖片在哪里適配這些統(tǒng)計(jì)數(shù)據(jù)?

    為了解釋這個(gè)問(wèn)題,首先介紹一個(gè)非常好理解而且能簡(jiǎn)明表示的概率分布:正態(tài)分布。下面是一個(gè)正態(tài)分布的概率密度函數(shù)(probability density function, PDF)的圖示。你可以這么理解 PDF,它是水平方向表示輸入空間的數(shù)值,在垂直方向上表示默寫數(shù)值發(fā)生的概率。

    上面這張圖的繪制代碼如下:

    # !/usr/bin/env python3import numpy as np from scipy.stats import normimport matplotlib as mplmpl.use('Agg') import matplotlib.pyplot as pltplt.style.use('bmh') import matplotlib.mlab as mlabnp.random.seed(0) ### 繪制一個(gè)正態(tài)分布的概率密度函數(shù)圖### # 生成數(shù)據(jù) X范圍是(-3,3),步進(jìn)為0.001, Y的范圍是(0,1) X = np.arange(-3, 3, 0.001) Y = norm.pdf(X, 0, 1) # 繪制 fig = plt.figure() plt.plot(X, Y) plt.tight_layout() plt.savefig("./images/normal-pdf.png")

    接著可以從上述分布中采樣得到一些樣本數(shù)據(jù),如下圖所示:

    繪制代碼如下:

    ### 繪制從正態(tài)分布采樣的 1D 散點(diǎn)圖例子 ### nSamples = 35 # np.random.normal 是從正態(tài)分布中隨機(jī)采樣指定數(shù)量的樣本,這里指定 35個(gè) X = np.random.normal(0, 1, nSamples) Y = np.zeros(nSamples) fig = plt.figure(figsize=(7, 3)) # 繪制散點(diǎn)圖 plt.scatter(X, Y, color='k') plt.xlim((-3, 3)) frame = plt.gca() frame.axes.get_yaxis().set_visible(False) plt.savefig("./images/normal-samples.png")

    這是 1 維概率分布的例子,因?yàn)檩斎霐?shù)據(jù)就只是一維數(shù)據(jù),我們也可以實(shí)現(xiàn)二維的例子,如下圖所示:

    繪制代碼如下:

    ### 繪制從正態(tài)分布采樣的 2D 散點(diǎn)圖例子###delta = 0.025 # 設(shè)置 X,Y 的數(shù)值范圍和步長(zhǎng)值,分別生成 240個(gè)數(shù) x = np.arange(-3.0, 3.0, delta) y = np.arange(-3.0, 3.0, delta) print('x shape', x.shape) # 根據(jù)坐標(biāo)向量來(lái)生成坐標(biāo)矩陣 X, Y = np.meshgrid(x, y) # X, Y shape: (240, 240)print('X shape', X.shape) print('Y shape', Y.shape) # Bivariate Gaussian distribution for equal shape *X*, *Y* # 等形狀的雙變量高斯分布 Z = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) # Z shape (240, 240) print('Z shape', Z.shape)plt.figure() # 繪制環(huán)形圖輪廓 CS = plt.contour(X, Y, Z) plt.clabel(CS, inline=1, fontsize=10)nSamples = 200 mean = [0, 0] cov = [[1, 0], [0, 1]] # 從多元正態(tài)分布中采樣,得到結(jié)果圖中的黑點(diǎn)例子 X, Y = np.random.multivariate_normal(mean, cov, nSamples).T plt.scatter(X, Y, color='k')plt.savefig("./images/normal-2d.png")

    繪制上述三張圖的完整代碼如下所示,代碼地址為:

    https://github.com/bamos/dcgan-completion.tensorflow/blob/master/simple-distributions.py

    圖片和統(tǒng)計(jì)學(xué)之間的關(guān)鍵關(guān)系就是我們可以將圖片解釋為高維概率分布的樣本。概率分布就體現(xiàn)在圖片的像素上。假設(shè)你正采用你的相機(jī)進(jìn)行拍照,照片的像素?cái)?shù)量是有限的,當(dāng)你用相機(jī)拍下一張照片的時(shí)候,就相當(dāng)于從這個(gè)復(fù)雜的概率分布中進(jìn)行采樣的操作。而這個(gè)分布也是我們用來(lái)定義一張圖片是否正常。和正態(tài)分布不同的是,只有圖片,我們是不知道真實(shí)的概率分布,只是在收集樣本而已。

    在本文中,我們采用 RGB 顏色模型表示的彩色圖片。我們采用的是寬和高都是 64 像素的圖片,所以概率分布的維度應(yīng)該是 64×64×3≈12k。

    我們?nèi)绾涡迯?fù)圖片呢?

    首先為了更加直觀,我們先考慮之前介紹的多元正態(tài)分布。給定x=1時(shí),y最有可能的取值是什么呢?這可以通過(guò)固定x=1,然后最大化 PDF 的值來(lái)找到所有可能的y的取值。如下圖所示:

    上圖中垂直的黑色直線經(jīng)過(guò)的黑點(diǎn)就是符合要求的y值。

    這個(gè)概念可以延伸到我們的圖像概率分布中,當(dāng)我們知道某些數(shù)值,然后想填補(bǔ)完成缺失的數(shù)值的時(shí)候。只需要將它當(dāng)做尋找所有可能缺失數(shù)值的最大問(wèn)題,那么找到的結(jié)果就是最有可能的圖片。

    從視覺(jué)上觀察由正態(tài)分布采樣得到的樣本,僅憑它們就找到概率密度函數(shù)是一件似乎很合理的事情。我們只需要選擇最喜歡的統(tǒng)計(jì)模型并將其與數(shù)據(jù)相適應(yīng)即可。

    然而,我們并不會(huì)應(yīng)用這個(gè)方法。雖然從簡(jiǎn)單分布中恢復(fù)概率密度函數(shù)是很簡(jiǎn)單,但這對(duì)于圖像的復(fù)雜分布是非常困難和棘手的事情。其復(fù)雜性一定程度上是來(lái)自于復(fù)雜的條件獨(dú)立性:圖像中的每個(gè)像素值之間都是相互依賴的。因此,最大化一個(gè)通用的概率密度函數(shù)是一個(gè)極其困難而且往往難以解決的非凸優(yōu)化問(wèn)題。


    小結(jié)

    第一篇主要介紹了圖像修復(fù)的簡(jiǎn)單背景,然后就是開(kāi)始實(shí)現(xiàn)的第一步,也是比較偏理論,將我們待處理的圖片數(shù)據(jù)作為一個(gè)概率分布的樣本,并簡(jiǎn)單用代碼實(shí)現(xiàn)了一維和二維的正態(tài)分布函數(shù)圖。

    在下一篇將介紹第二步內(nèi)容,也就是快速生成假數(shù)據(jù)的工作。

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

    總結(jié)

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

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