重拾舊時光——Bringing-Old-Photos-Back-to-Life

Bringing-Old-Photos-Back-to-Life項目簡介



  最近在公衆號看到有關Bringing-Old-Photos-Back-to-Life的內容,以爲頗有意思,能夠將模糊的,褶皺的照片相應的還原,在這裏插入圖片描述
重拾舊時光的回憶,因此本身嘗試一下。


python

  這個開源的項目在github上能夠找到,這裏給出項目地址Bringing-Old-Photos-Back-to-Life。這個項目是有關於模糊,褶皺照片的修復的算法,是基於2020微軟最新的一篇CPVR的文章,原理簡單來講就是用變分自動編碼機(VAE)將圖像變換到隱藏空間,並在隱空間進行圖像恢復操做在這裏插入圖片描述




git

Bringing-Old-Photos-Back-to-Life項目資源下載與配置

  該項目包含了測試訓練集和資源包,因此先下載該項目,項目地址
https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life
項目也依賴於Synchronized-BatchNorm-PyTorch,文章中也給出了咱們配置教程,因此按照教程來配置便可。

github

  第一步,克隆項目,即下載壓縮包並解壓算法

git clone https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life.git



  第二步,配置環境,進入項目的目錄下

windows

cd Face_Enhancement/models/networks
git clone https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
cp -rf Synchronized-BatchNorm-PyTorch/sync_batchnorm .
cd ../../../
cd Global/detection_models
git clone https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
cp -rf Synchronized-BatchNorm-PyTorch/sync_batchnorm .
cd ../../

而後下載相應的組件函數

cd Face_Detection/
wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
bzip2 -d shape_predictor_68_face_landmarks.dat.bz2
cd ../
cd Face_Enhancement/
wget https://facevc.blob.core.windows.net/zhanbo/old_photo/pretrain/Face_Enhancement/checkpoints.zip
unzip checkpoints.zip
cd ../
cd Global/
wget https://facevc.blob.core.windows.net/zhanbo/old_photo/pretrain/Global/checkpoints.zip
unzip checkpoints.zip
cd ../

安裝依賴項測試

pip install -r requirements.txt

  更詳細的教程能夠查看Colab中的內容。


ui

Bringing-Old-Photos-Back-to-Life的使用和相關問題的解決

  對於沒有裂痕的圖片的修復能夠是用這個代碼,進入項目文件的目錄下編碼

python run.py --input_folder [test_image_folder_path] \
              --output_folder [output_path] \
              --GPU 0

其中[test_image_folder_path]是想要修復的圖片的目錄地址,[output_path]是結果存放的地址,同時這些地址路徑要是絕對路徑spa

  若是是有裂痕的圖片,代碼有所不一樣

python run.py --input_folder [test_image_folder_path] \
              --output_folder [output_path] \
              --GPU 0 \
              --with_scratch

  固然文章中給出的代碼我在實際運行的狀況中仍是會出現問題的,這裏我對我遇到的問題和相應簡單的解決辦法進行介紹:

  在對沒有裂痕的圖片進行修復的時候出現在這裏插入圖片描述
這裏咱們能夠將Face_Enhancement \ test_face.py中的第40行的代碼img_name = img_path[b].split("/")[-1]改成img_name = os.path.split(img_path[b])[-1]問題能夠解決。

  該算法的運行實現對GPU的內存很挺高的要求,對於處理高像素的圖片,我出現過Skip當前圖片的提示,還有CUDA out of memory. Tried to allocate 78.00 MiB (GPU 0; 7.43 GiB total capacity; 6.42 GiB already allocated; 88.94 MiB free; 6.75 GiB reserved in total by PyTorch)這樣的報錯,主要問題仍是內存處理不夠,GPU同時處理不了這些操做,爲了簡單方便,因此我就從輸入上,將要處理的圖片的像素都先縮放至我電腦能夠處理的像素要求,這樣可使算法相應的工做。

  對於處理沒有裂痕的圖片的操做,咱們能夠將Global \ test.py中的data_transforms函數中的

h = int(round(oh / 4)*4)
w = int(round(ow / 4)*4)

直接修改成咱們想要輸入的圖片縮放成能處理的像素大小,好比我這裏就修改成

w = 450
h = 450

將原始輸入圖片縮放爲450 x 450的像素,便可以正常運行(雖然結果會有點不太好看)。

  對於處理有裂痕的圖片,咱們能夠將Global \ detection.py中ata_transforms函數中if full_size == "full_size"中的

h = int(round(oh / 16) * 16)
w = int(round(ow / 16) * 16)

改成

h = 256
w = 256

這樣縮放爲256 x 256像素的圖片。


  處理完問題後,咱們能夠來測試一下,咱們先對項目給出的圖片進行測試。


  對於沒有裂痕的圖片的處理(這裏僅放出部分)

修復前
在這裏插入圖片描述
修復後
在這裏插入圖片描述


修復前
在這裏插入圖片描述
修復後
在這裏插入圖片描述


修復前
在這裏插入圖片描述
修復後
在這裏插入圖片描述
因爲調整了像素,因此與原圖有所出入,可是圖片的清晰程度增長了,咱們也能夠試試本身的圖片,我在網上找了幾張圖:



修復前
在這裏插入圖片描述
修復後
在這裏插入圖片描述


修復前
在這裏插入圖片描述
修復後
在這裏插入圖片描述




  對於有裂痕的圖片的處理

修復前
在這裏插入圖片描述
修復後
在這裏插入圖片描述


修復前
在這裏插入圖片描述
修復後
在這裏插入圖片描述


修復前
在這裏插入圖片描述
修復後
在這裏插入圖片描述


修復前
在這裏插入圖片描述
修復後
在這裏插入圖片描述


一樣,咱們能夠將本身的圖片的進行修復,好比我找到的一張:

修復前
在這裏插入圖片描述
修復後
在這裏插入圖片描述




總結:   怎麼樣,是否是以爲這個算法頗有意思,那就找出那些照片來修復,重拾那些美好的舊時光,同時,有條件的夥伴能夠提升電腦的配置,來修復更高像素的圖片。

相關文章
相關標籤/搜索