回覆列表
  • 1 # 機器之心Pro

    可以的,我們這裡介紹一箇舊照片著色&修復神器DeOldify,包括修復效果、技術細節等。

    專案地址:https://github.com/jantic/DeOldify/blob/master/README.md

    該專案的目的是為舊照片著色並將其修復。本文將簡要介紹技術細節。首先,先來看一下 DeOldify 對舊照片的修復效果!(大部分原影象來自 r/TheWayWeWere subreddit。)

    和人體骨骼一起拍照的醫學生(約 1890 年)

    Whirling Horse(1898)

    19 世紀 80 年代的巴黎

    20 世紀 20 年代的愛丁堡俯瞰

    倫敦滑鐵盧車站人們第一次看到電視機(1936)

    抽鴉片的大清子民(1880)

    非常舊和質量差的照片也能修復得很好:

    南達科他州枯木鎮(1877)

    家庭合照(1877)

    但,模型效果並不總是完美的。下圖中紅手讓人抓狂:

    塞內卡原住民(1908)

    該模型還能對黑白線稿進行著色:

    技術細節

    這是一個基於深度學習的模型。具體來說,我所做的是將以下方法組合在一起:

    帶自注意力機制的生成對抗網路。生成器是一個預訓練 Unet,我將它修改為具有光譜歸一化和自注意力。這是一個非常簡單的轉換過程。不過,之前我拼命地嘗試用 Wasserstein GAN,但效果並不好,直到用上這個版本,一切都變了。我喜歡 Wasserstein GAN 的理念,但它在實踐中並沒有成功。我愛上了帶自注意力的 GAN。

    受 GAN Progressive Growing 的啟發(參見《Progressive Growing of GANs for Improved Quality, Stability, and Variation》)設計出的訓練結構。不同之處在於層數保持不變——我只是不斷改變輸入的尺寸並調整學習率,以確保尺寸之間的轉換順利進行。似乎基本最終結果是相同的——訓練更快、更穩定,且泛化效果更好。

    兩個時間尺度上的更新規則(參見《GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium》)。這個也非常簡單,只是一個一對一生成器/critic 迭代及較高級別的 critic 學習率。

    生成器損失分為兩個部分:一部分是基於 VGG16 的基本感知損失(或特徵損失)——這只是偏向生成器模型來複制輸入影象。另一部分是來自 critic 的損失分數。感知損失本身不足以產生好的結果,只會帶來大量的棕色/綠色/藍色填充——測試的時候作弊可是神經網路的強項!這裡要理解的重點是:GAN 本質上是在為你學習損失函式——這實際上是朝著我們在機器學習中追求的理想邁進了一大步。當然,讓機器學習你以前手工編碼的東西通常會得到更好的結果。在這個例子中就是這樣。

    該模型的美妙之處在於,它可能適用於所有型別的影象修復,效果也應該很好。上文展示了很多模型結果,但這只是我想開發的流程的一個元件。

    接下來,我想做的是「defade」模型。我已經做了一些初步努力,截至本文寫作時,它還在訓練階段。大體上,是訓練同樣的模型用於重建使用過分的對比度/亮度調整後的影象。我已經看到了一些還不錯的試驗結果:

    關於該專案

    該專案的重點是:我想利用 GAN 使舊照片變得好看,更重要的是,做一個有用的專案。我對影片很感興趣,但是首先我需要先解決如何處理模型和記憶體的關係。如果該模型在 1080TI 上的訓練時間不用花費兩三天就太棒了(然而 GAN 通常需要這麼長時間……)我將積極更新和改進程式碼,並嘗試使該專案對使用者友好。

    開始操作

    該專案基於 Fast.AI 庫構建。不過,我使用的是舊版本庫,即將更新為新版本。構建該專案的先決條件是:

    舊版本 Fast.AI 庫。埋頭該專案兩個月後,我有點疑惑,因為標註為「old」的舊版本 Fast.AI 庫和我用的庫不一樣。因此建議使用這裡的庫:https://github.com/jantic/fastai。

    不管 Fast.AI 的依賴項是什麼,總有方便的 requirements.txt 和 environment.yml。

    Pytorch 0.4.1(需要 spectral_norm,因此需要最新的穩定版本)。

    Jupyter Lab

    Tensorboard(即安裝 Tensorflow)和 TensorboardX (https://github.com/lanpa/tensorboardX)。

    ImageNet:很棒的訓練資料集。

    強大的 GPU:我想要比 GeForce 1080TI (11GB) 更大記憶體的 GPU。記憶體越少花費時間就會越多。Unet 和 Critic 非常大,但是它們規模越大,獲得的結果也會越好。

    至於想要立刻開始轉換自己的影象的人:如果要立刻開始使用自己的影象而不訓練模型的話,你需要我上傳預訓練權重。我正在做這件事。做好之後,你可以在視覺化 notebook 中看到。我將使用 ColorizationVisualization.ipynb。你需要設定 colorizer_path = IMAGENET.parent/("bwc_rc_gen_192.h5")。我上傳的權重檔案用於生成器(著色器)。

    然後你就可以把想轉換的任意影象放在/test_images/資料夾,然後在 notebook 內部看到結果:

    vis.plot_transformed_image("test_images/derp.jpg", netG, md.val_ds, tfms=x_tfms, sz=500)

    我把影象大小設定為 500px 左右,你需要在足夠記憶體的 GPU 上執行(比如 11 GB GeForce 1080Ti)。如果記憶體過少,你需要將影象調小或者嘗試在 CPU 上執行模型。我試過後一種方法,非常慢……我還沒有研究具體原因。

  • 2 # 對話AI

    當然是可以的了,看下面的照片就是用AI來上的色

    經過大量的資料訓練後,人工智慧能夠幫助我們完成很多看似非常難的事情。

    現在來看,反而人類覺得非常簡單的事情,人工智慧反而做不到

  • 中秋節和大豐收的關聯?
  • 姓張帶孟字的名字?