全文共4175字,預計學習時長8分鐘
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
處理成梵高風格的高清圖片
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
處理成梵高風格的高清圖片
具體步驟如下
建立模型
這一步的目標是實現圖像到圖像的轉換(從A域到B域)。可以通過很多方法來實現,也有很多網絡模型,其中最有名的可能就是CycleGAN,也有很多與這個話題相關的論文。
本文在孿生網絡裡自定義了一個模型作為鑑別器,還採用了一個很特別但是非常簡單的損失函數。選擇這個方法的原因是每一個損失項都不那麼依賴於每個像素之間的差異:這就意味著網絡在生成高清圖片時沒有幾何限制,從而能編輯出畫面更加生動的圖片。(這個結論在本例中成立。)
下面將簡單介紹孿生生成式對抗網絡(Siamese GAN)的架構。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
處理成梵高風格的高清圖片
具體步驟如下
建立模型
這一步的目標是實現圖像到圖像的轉換(從A域到B域)。可以通過很多方法來實現,也有很多網絡模型,其中最有名的可能就是CycleGAN,也有很多與這個話題相關的論文。
本文在孿生網絡裡自定義了一個模型作為鑑別器,還採用了一個很特別但是非常簡單的損失函數。選擇這個方法的原因是每一個損失項都不那麼依賴於每個像素之間的差異:這就意味著網絡在生成高清圖片時沒有幾何限制,從而能編輯出畫面更加生動的圖片。(這個結論在本例中成立。)
下面將簡單介紹孿生生成式對抗網絡(Siamese GAN)的架構。
孿生生成式對抗網絡(Siamese GAN)架構
孿生生成式對抗網絡由生成器和鑑別器組成。圖片輸入生成器,輸出編輯過的圖片。圖片輸入鑑別器,輸出一個潛在矢量。
孿生鑑別器有兩個功能:其一,指揮生成器生成畫面更逼真的圖片;其二,對於那些畫面看起來不真實的圖片,維持現有的圖片內容,儘量保持和原圖風格一致。
從A域和B域分別隨機取圖片並命名為A1, A2和B1,B2,X是一張隨機圖片,G(X)是生成器合成的圖片,鑑別器需要將圖片加工成矢量D(X),如:
1. D(B1)和一個固定點(以原點為例)之間的歐幾里得距離必須非常近,與此同時,D(G(A1))必須離這個點非常遠。相應地,矢量與固定點距離越近,能生成的圖片越逼真。另外,在大多數研究對抗網絡的例子中,生成器都要試著縮短從D(G(A1))到這個固定點之間的距離。
2. 如果要保留A和G(A)之間的“內容”,(D(A1)-D(A2))和 (D(G(A1)-D(G(A2))) 的餘弦相似度必須保持一致。生成器和鑑別器都會參與這個步驟。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
處理成梵高風格的高清圖片
具體步驟如下
建立模型
這一步的目標是實現圖像到圖像的轉換(從A域到B域)。可以通過很多方法來實現,也有很多網絡模型,其中最有名的可能就是CycleGAN,也有很多與這個話題相關的論文。
本文在孿生網絡裡自定義了一個模型作為鑑別器,還採用了一個很特別但是非常簡單的損失函數。選擇這個方法的原因是每一個損失項都不那麼依賴於每個像素之間的差異:這就意味著網絡在生成高清圖片時沒有幾何限制,從而能編輯出畫面更加生動的圖片。(這個結論在本例中成立。)
下面將簡單介紹孿生生成式對抗網絡(Siamese GAN)的架構。
孿生生成式對抗網絡(Siamese GAN)架構
孿生生成式對抗網絡由生成器和鑑別器組成。圖片輸入生成器,輸出編輯過的圖片。圖片輸入鑑別器,輸出一個潛在矢量。
孿生鑑別器有兩個功能:其一,指揮生成器生成畫面更逼真的圖片;其二,對於那些畫面看起來不真實的圖片,維持現有的圖片內容,儘量保持和原圖風格一致。
從A域和B域分別隨機取圖片並命名為A1, A2和B1,B2,X是一張隨機圖片,G(X)是生成器合成的圖片,鑑別器需要將圖片加工成矢量D(X),如:
1. D(B1)和一個固定點(以原點為例)之間的歐幾里得距離必須非常近,與此同時,D(G(A1))必須離這個點非常遠。相應地,矢量與固定點距離越近,能生成的圖片越逼真。另外,在大多數研究對抗網絡的例子中,生成器都要試著縮短從D(G(A1))到這個固定點之間的距離。
2. 如果要保留A和G(A)之間的“內容”,(D(A1)-D(A2))和 (D(G(A1)-D(G(A2))) 的餘弦相似度必須保持一致。生成器和鑑別器都會參與這個步驟。
孿生鑑別器
第一條根據矢量大小的變化而變化,第二條更側重於矢量的角度。如果能實現從A域到B域之間的圖像轉換,目標就完成了。
現在有了一個模型,下面就一起探索怎樣運用網絡來得到高清圖片吧。
圖像提取
首先需要兩個高清圖庫,在這個例子中,需要一個風景圖庫作為A域,以及梵高的作品圖庫作為B域。切記,圖片越大,預處理時間就越長,比如裁剪、調整大小等,但這些操作並不會延長調試網絡的時間。
然後需要選擇輸入生成器的圖片大小:顯然不能直接使用圖片庫裡的高清圖片,不然調試時間會變得很長,網絡的規模也很大,這樣就不能解決任何實質性的問題了。所以要選擇足夠小的尺寸(如像素為64*64),以便控制調試時間,即便是比如免費的谷歌Colaboratory等中等表現的圖像處理器也能處理這些圖片。
相應地,想必讀者也已經考慮到了,輸入生成器之前,這些圖片需要預先處理,裁剪成更小的尺寸。輸入圖片後處理成為張量,以隨機的SxS尺寸打包一同輸入進網絡。這聽起來很簡單,實際操作也非常簡單!
現在,假設用這種方法訓練生成對抗網絡,直到生成器把所有尺寸調整好的圖片都轉換成了想要的“梵高風”,這時候問題就來了:如何才能將整張高清圖片從A域轉換到B域呢?
其實很簡單,將圖片像素分解為SxS(如果高清圖片本來像素為BxB,就會出現(B//S)x(B//S)的格式),每個像素尺寸為SxS的圖片都會經過生成器處理,最終組合到一起。
有一個更簡單的方法,將圖片的尺寸由大裁小,但調試GAN的過程中就會發現問題:通過這種方法調整後的圖片再經過生成器轉換到B域的時候,和原圖放在一起很違和。結果顯示,每個像素為SxS的圖片中的輪廓都特別清晰,“奇蹟”般地失敗了。相對來講,這算是小問題,即使使用以像素為單位的CycleGAN等方法也會出現同樣的毛病。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
處理成梵高風格的高清圖片
具體步驟如下
建立模型
這一步的目標是實現圖像到圖像的轉換(從A域到B域)。可以通過很多方法來實現,也有很多網絡模型,其中最有名的可能就是CycleGAN,也有很多與這個話題相關的論文。
本文在孿生網絡裡自定義了一個模型作為鑑別器,還採用了一個很特別但是非常簡單的損失函數。選擇這個方法的原因是每一個損失項都不那麼依賴於每個像素之間的差異:這就意味著網絡在生成高清圖片時沒有幾何限制,從而能編輯出畫面更加生動的圖片。(這個結論在本例中成立。)
下面將簡單介紹孿生生成式對抗網絡(Siamese GAN)的架構。
孿生生成式對抗網絡(Siamese GAN)架構
孿生生成式對抗網絡由生成器和鑑別器組成。圖片輸入生成器,輸出編輯過的圖片。圖片輸入鑑別器,輸出一個潛在矢量。
孿生鑑別器有兩個功能:其一,指揮生成器生成畫面更逼真的圖片;其二,對於那些畫面看起來不真實的圖片,維持現有的圖片內容,儘量保持和原圖風格一致。
從A域和B域分別隨機取圖片並命名為A1, A2和B1,B2,X是一張隨機圖片,G(X)是生成器合成的圖片,鑑別器需要將圖片加工成矢量D(X),如:
1. D(B1)和一個固定點(以原點為例)之間的歐幾里得距離必須非常近,與此同時,D(G(A1))必須離這個點非常遠。相應地,矢量與固定點距離越近,能生成的圖片越逼真。另外,在大多數研究對抗網絡的例子中,生成器都要試著縮短從D(G(A1))到這個固定點之間的距離。
2. 如果要保留A和G(A)之間的“內容”,(D(A1)-D(A2))和 (D(G(A1)-D(G(A2))) 的餘弦相似度必須保持一致。生成器和鑑別器都會參與這個步驟。
孿生鑑別器
第一條根據矢量大小的變化而變化,第二條更側重於矢量的角度。如果能實現從A域到B域之間的圖像轉換,目標就完成了。
現在有了一個模型,下面就一起探索怎樣運用網絡來得到高清圖片吧。
圖像提取
首先需要兩個高清圖庫,在這個例子中,需要一個風景圖庫作為A域,以及梵高的作品圖庫作為B域。切記,圖片越大,預處理時間就越長,比如裁剪、調整大小等,但這些操作並不會延長調試網絡的時間。
然後需要選擇輸入生成器的圖片大小:顯然不能直接使用圖片庫裡的高清圖片,不然調試時間會變得很長,網絡的規模也很大,這樣就不能解決任何實質性的問題了。所以要選擇足夠小的尺寸(如像素為64*64),以便控制調試時間,即便是比如免費的谷歌Colaboratory等中等表現的圖像處理器也能處理這些圖片。
相應地,想必讀者也已經考慮到了,輸入生成器之前,這些圖片需要預先處理,裁剪成更小的尺寸。輸入圖片後處理成為張量,以隨機的SxS尺寸打包一同輸入進網絡。這聽起來很簡單,實際操作也非常簡單!
現在,假設用這種方法訓練生成對抗網絡,直到生成器把所有尺寸調整好的圖片都轉換成了想要的“梵高風”,這時候問題就來了:如何才能將整張高清圖片從A域轉換到B域呢?
其實很簡單,將圖片像素分解為SxS(如果高清圖片本來像素為BxB,就會出現(B//S)x(B//S)的格式),每個像素尺寸為SxS的圖片都會經過生成器處理,最終組合到一起。
有一個更簡單的方法,將圖片的尺寸由大裁小,但調試GAN的過程中就會發現問題:通過這種方法調整後的圖片再經過生成器轉換到B域的時候,和原圖放在一起很違和。結果顯示,每個像素為SxS的圖片中的輪廓都特別清晰,“奇蹟”般地失敗了。相對來講,這算是小問題,即使使用以像素為單位的CycleGAN等方法也會出現同樣的毛病。
輪廓清晰可見
如何解決這一問題?
慣用的方法簡單易懂,並且貫徹了這篇文章想要傳達的中心思想。
首先需要重新訪問數據管道:先將圖片處理成2Sx2S的大小(如果S=64,就需要裁剪成128x128大小),然後再轉換成BxB高清圖片。接著,設置好生成器之後,創建一個新模型,命名為Combo,功能如下:
1. INP:輸入一批A域的圖片,格式為2Sx2S;
2. INPCUT:將每個圖片裁剪成4SxS的格式;
3. 將裁減好的4SxS的圖片(INPCUT)輸進生成器,得到OUTCUT(與INPCUT形狀相同,但每個SxS圖片都已經編輯過了);
4. 將OUTCUT裡的每組4SxS圖片組合起來,得到OUT(與INP形狀相同,但每個2Sx2S圖片都已經編輯過了);
5. 得到輸出結果OUT。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
處理成梵高風格的高清圖片
具體步驟如下
建立模型
這一步的目標是實現圖像到圖像的轉換(從A域到B域)。可以通過很多方法來實現,也有很多網絡模型,其中最有名的可能就是CycleGAN,也有很多與這個話題相關的論文。
本文在孿生網絡裡自定義了一個模型作為鑑別器,還採用了一個很特別但是非常簡單的損失函數。選擇這個方法的原因是每一個損失項都不那麼依賴於每個像素之間的差異:這就意味著網絡在生成高清圖片時沒有幾何限制,從而能編輯出畫面更加生動的圖片。(這個結論在本例中成立。)
下面將簡單介紹孿生生成式對抗網絡(Siamese GAN)的架構。
孿生生成式對抗網絡(Siamese GAN)架構
孿生生成式對抗網絡由生成器和鑑別器組成。圖片輸入生成器,輸出編輯過的圖片。圖片輸入鑑別器,輸出一個潛在矢量。
孿生鑑別器有兩個功能:其一,指揮生成器生成畫面更逼真的圖片;其二,對於那些畫面看起來不真實的圖片,維持現有的圖片內容,儘量保持和原圖風格一致。
從A域和B域分別隨機取圖片並命名為A1, A2和B1,B2,X是一張隨機圖片,G(X)是生成器合成的圖片,鑑別器需要將圖片加工成矢量D(X),如:
1. D(B1)和一個固定點(以原點為例)之間的歐幾里得距離必須非常近,與此同時,D(G(A1))必須離這個點非常遠。相應地,矢量與固定點距離越近,能生成的圖片越逼真。另外,在大多數研究對抗網絡的例子中,生成器都要試著縮短從D(G(A1))到這個固定點之間的距離。
2. 如果要保留A和G(A)之間的“內容”,(D(A1)-D(A2))和 (D(G(A1)-D(G(A2))) 的餘弦相似度必須保持一致。生成器和鑑別器都會參與這個步驟。
孿生鑑別器
第一條根據矢量大小的變化而變化,第二條更側重於矢量的角度。如果能實現從A域到B域之間的圖像轉換,目標就完成了。
現在有了一個模型,下面就一起探索怎樣運用網絡來得到高清圖片吧。
圖像提取
首先需要兩個高清圖庫,在這個例子中,需要一個風景圖庫作為A域,以及梵高的作品圖庫作為B域。切記,圖片越大,預處理時間就越長,比如裁剪、調整大小等,但這些操作並不會延長調試網絡的時間。
然後需要選擇輸入生成器的圖片大小:顯然不能直接使用圖片庫裡的高清圖片,不然調試時間會變得很長,網絡的規模也很大,這樣就不能解決任何實質性的問題了。所以要選擇足夠小的尺寸(如像素為64*64),以便控制調試時間,即便是比如免費的谷歌Colaboratory等中等表現的圖像處理器也能處理這些圖片。
相應地,想必讀者也已經考慮到了,輸入生成器之前,這些圖片需要預先處理,裁剪成更小的尺寸。輸入圖片後處理成為張量,以隨機的SxS尺寸打包一同輸入進網絡。這聽起來很簡單,實際操作也非常簡單!
現在,假設用這種方法訓練生成對抗網絡,直到生成器把所有尺寸調整好的圖片都轉換成了想要的“梵高風”,這時候問題就來了:如何才能將整張高清圖片從A域轉換到B域呢?
其實很簡單,將圖片像素分解為SxS(如果高清圖片本來像素為BxB,就會出現(B//S)x(B//S)的格式),每個像素尺寸為SxS的圖片都會經過生成器處理,最終組合到一起。
有一個更簡單的方法,將圖片的尺寸由大裁小,但調試GAN的過程中就會發現問題:通過這種方法調整後的圖片再經過生成器轉換到B域的時候,和原圖放在一起很違和。結果顯示,每個像素為SxS的圖片中的輪廓都特別清晰,“奇蹟”般地失敗了。相對來講,這算是小問題,即使使用以像素為單位的CycleGAN等方法也會出現同樣的毛病。
輪廓清晰可見
如何解決這一問題?
慣用的方法簡單易懂,並且貫徹了這篇文章想要傳達的中心思想。
首先需要重新訪問數據管道:先將圖片處理成2Sx2S的大小(如果S=64,就需要裁剪成128x128大小),然後再轉換成BxB高清圖片。接著,設置好生成器之後,創建一個新模型,命名為Combo,功能如下:
1. INP:輸入一批A域的圖片,格式為2Sx2S;
2. INPCUT:將每個圖片裁剪成4SxS的格式;
3. 將裁減好的4SxS的圖片(INPCUT)輸進生成器,得到OUTCUT(與INPCUT形狀相同,但每個SxS圖片都已經編輯過了);
4. 將OUTCUT裡的每組4SxS圖片組合起來,得到OUT(與INP形狀相同,但每個2Sx2S圖片都已經編輯過了);
5. 得到輸出結果OUT。
Combo模型:裁剪、編輯、組合
Combo模型的輸出就變成了鑑別器的輸入,並且輸入數據的大小變成了之前的兩倍。這點輕微的調整不會佔用太多計算時間,並且可以有效解決之前的問題。具體方法如下:
現在生成器必須生成邊緣和顏色都保持一致的圖片,否則鑑別器無法將這些圖片識別為真實圖片,這樣就無法幫助生成器進行優化。具體來講,對每張有4個邊界的SxS圖片,生成器必須要生成非常逼真的圖片,即便是一個邊界處理得不好都會毀掉增長2x2圖像的真實感。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
處理成梵高風格的高清圖片
具體步驟如下
建立模型
這一步的目標是實現圖像到圖像的轉換(從A域到B域)。可以通過很多方法來實現,也有很多網絡模型,其中最有名的可能就是CycleGAN,也有很多與這個話題相關的論文。
本文在孿生網絡裡自定義了一個模型作為鑑別器,還採用了一個很特別但是非常簡單的損失函數。選擇這個方法的原因是每一個損失項都不那麼依賴於每個像素之間的差異:這就意味著網絡在生成高清圖片時沒有幾何限制,從而能編輯出畫面更加生動的圖片。(這個結論在本例中成立。)
下面將簡單介紹孿生生成式對抗網絡(Siamese GAN)的架構。
孿生生成式對抗網絡(Siamese GAN)架構
孿生生成式對抗網絡由生成器和鑑別器組成。圖片輸入生成器,輸出編輯過的圖片。圖片輸入鑑別器,輸出一個潛在矢量。
孿生鑑別器有兩個功能:其一,指揮生成器生成畫面更逼真的圖片;其二,對於那些畫面看起來不真實的圖片,維持現有的圖片內容,儘量保持和原圖風格一致。
從A域和B域分別隨機取圖片並命名為A1, A2和B1,B2,X是一張隨機圖片,G(X)是生成器合成的圖片,鑑別器需要將圖片加工成矢量D(X),如:
1. D(B1)和一個固定點(以原點為例)之間的歐幾里得距離必須非常近,與此同時,D(G(A1))必須離這個點非常遠。相應地,矢量與固定點距離越近,能生成的圖片越逼真。另外,在大多數研究對抗網絡的例子中,生成器都要試著縮短從D(G(A1))到這個固定點之間的距離。
2. 如果要保留A和G(A)之間的“內容”,(D(A1)-D(A2))和 (D(G(A1)-D(G(A2))) 的餘弦相似度必須保持一致。生成器和鑑別器都會參與這個步驟。
孿生鑑別器
第一條根據矢量大小的變化而變化,第二條更側重於矢量的角度。如果能實現從A域到B域之間的圖像轉換,目標就完成了。
現在有了一個模型,下面就一起探索怎樣運用網絡來得到高清圖片吧。
圖像提取
首先需要兩個高清圖庫,在這個例子中,需要一個風景圖庫作為A域,以及梵高的作品圖庫作為B域。切記,圖片越大,預處理時間就越長,比如裁剪、調整大小等,但這些操作並不會延長調試網絡的時間。
然後需要選擇輸入生成器的圖片大小:顯然不能直接使用圖片庫裡的高清圖片,不然調試時間會變得很長,網絡的規模也很大,這樣就不能解決任何實質性的問題了。所以要選擇足夠小的尺寸(如像素為64*64),以便控制調試時間,即便是比如免費的谷歌Colaboratory等中等表現的圖像處理器也能處理這些圖片。
相應地,想必讀者也已經考慮到了,輸入生成器之前,這些圖片需要預先處理,裁剪成更小的尺寸。輸入圖片後處理成為張量,以隨機的SxS尺寸打包一同輸入進網絡。這聽起來很簡單,實際操作也非常簡單!
現在,假設用這種方法訓練生成對抗網絡,直到生成器把所有尺寸調整好的圖片都轉換成了想要的“梵高風”,這時候問題就來了:如何才能將整張高清圖片從A域轉換到B域呢?
其實很簡單,將圖片像素分解為SxS(如果高清圖片本來像素為BxB,就會出現(B//S)x(B//S)的格式),每個像素尺寸為SxS的圖片都會經過生成器處理,最終組合到一起。
有一個更簡單的方法,將圖片的尺寸由大裁小,但調試GAN的過程中就會發現問題:通過這種方法調整後的圖片再經過生成器轉換到B域的時候,和原圖放在一起很違和。結果顯示,每個像素為SxS的圖片中的輪廓都特別清晰,“奇蹟”般地失敗了。相對來講,這算是小問題,即使使用以像素為單位的CycleGAN等方法也會出現同樣的毛病。
輪廓清晰可見
如何解決這一問題?
慣用的方法簡單易懂,並且貫徹了這篇文章想要傳達的中心思想。
首先需要重新訪問數據管道:先將圖片處理成2Sx2S的大小(如果S=64,就需要裁剪成128x128大小),然後再轉換成BxB高清圖片。接著,設置好生成器之後,創建一個新模型,命名為Combo,功能如下:
1. INP:輸入一批A域的圖片,格式為2Sx2S;
2. INPCUT:將每個圖片裁剪成4SxS的格式;
3. 將裁減好的4SxS的圖片(INPCUT)輸進生成器,得到OUTCUT(與INPCUT形狀相同,但每個SxS圖片都已經編輯過了);
4. 將OUTCUT裡的每組4SxS圖片組合起來,得到OUT(與INP形狀相同,但每個2Sx2S圖片都已經編輯過了);
5. 得到輸出結果OUT。
Combo模型:裁剪、編輯、組合
Combo模型的輸出就變成了鑑別器的輸入,並且輸入數據的大小變成了之前的兩倍。這點輕微的調整不會佔用太多計算時間,並且可以有效解決之前的問題。具體方法如下:
現在生成器必須生成邊緣和顏色都保持一致的圖片,否則鑑別器無法將這些圖片識別為真實圖片,這樣就無法幫助生成器進行優化。具體來講,對每張有4個邊界的SxS圖片,生成器必須要生成非常逼真的圖片,即便是一個邊界處理得不好都會毀掉增長2x2圖像的真實感。
測試實例(從左到右):A域的圖片,編輯後的圖片(AB), B域的圖片
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
處理成梵高風格的高清圖片
具體步驟如下
建立模型
這一步的目標是實現圖像到圖像的轉換(從A域到B域)。可以通過很多方法來實現,也有很多網絡模型,其中最有名的可能就是CycleGAN,也有很多與這個話題相關的論文。
本文在孿生網絡裡自定義了一個模型作為鑑別器,還採用了一個很特別但是非常簡單的損失函數。選擇這個方法的原因是每一個損失項都不那麼依賴於每個像素之間的差異:這就意味著網絡在生成高清圖片時沒有幾何限制,從而能編輯出畫面更加生動的圖片。(這個結論在本例中成立。)
下面將簡單介紹孿生生成式對抗網絡(Siamese GAN)的架構。
孿生生成式對抗網絡(Siamese GAN)架構
孿生生成式對抗網絡由生成器和鑑別器組成。圖片輸入生成器,輸出編輯過的圖片。圖片輸入鑑別器,輸出一個潛在矢量。
孿生鑑別器有兩個功能:其一,指揮生成器生成畫面更逼真的圖片;其二,對於那些畫面看起來不真實的圖片,維持現有的圖片內容,儘量保持和原圖風格一致。
從A域和B域分別隨機取圖片並命名為A1, A2和B1,B2,X是一張隨機圖片,G(X)是生成器合成的圖片,鑑別器需要將圖片加工成矢量D(X),如:
1. D(B1)和一個固定點(以原點為例)之間的歐幾里得距離必須非常近,與此同時,D(G(A1))必須離這個點非常遠。相應地,矢量與固定點距離越近,能生成的圖片越逼真。另外,在大多數研究對抗網絡的例子中,生成器都要試著縮短從D(G(A1))到這個固定點之間的距離。
2. 如果要保留A和G(A)之間的“內容”,(D(A1)-D(A2))和 (D(G(A1)-D(G(A2))) 的餘弦相似度必須保持一致。生成器和鑑別器都會參與這個步驟。
孿生鑑別器
第一條根據矢量大小的變化而變化,第二條更側重於矢量的角度。如果能實現從A域到B域之間的圖像轉換,目標就完成了。
現在有了一個模型,下面就一起探索怎樣運用網絡來得到高清圖片吧。
圖像提取
首先需要兩個高清圖庫,在這個例子中,需要一個風景圖庫作為A域,以及梵高的作品圖庫作為B域。切記,圖片越大,預處理時間就越長,比如裁剪、調整大小等,但這些操作並不會延長調試網絡的時間。
然後需要選擇輸入生成器的圖片大小:顯然不能直接使用圖片庫裡的高清圖片,不然調試時間會變得很長,網絡的規模也很大,這樣就不能解決任何實質性的問題了。所以要選擇足夠小的尺寸(如像素為64*64),以便控制調試時間,即便是比如免費的谷歌Colaboratory等中等表現的圖像處理器也能處理這些圖片。
相應地,想必讀者也已經考慮到了,輸入生成器之前,這些圖片需要預先處理,裁剪成更小的尺寸。輸入圖片後處理成為張量,以隨機的SxS尺寸打包一同輸入進網絡。這聽起來很簡單,實際操作也非常簡單!
現在,假設用這種方法訓練生成對抗網絡,直到生成器把所有尺寸調整好的圖片都轉換成了想要的“梵高風”,這時候問題就來了:如何才能將整張高清圖片從A域轉換到B域呢?
其實很簡單,將圖片像素分解為SxS(如果高清圖片本來像素為BxB,就會出現(B//S)x(B//S)的格式),每個像素尺寸為SxS的圖片都會經過生成器處理,最終組合到一起。
有一個更簡單的方法,將圖片的尺寸由大裁小,但調試GAN的過程中就會發現問題:通過這種方法調整後的圖片再經過生成器轉換到B域的時候,和原圖放在一起很違和。結果顯示,每個像素為SxS的圖片中的輪廓都特別清晰,“奇蹟”般地失敗了。相對來講,這算是小問題,即使使用以像素為單位的CycleGAN等方法也會出現同樣的毛病。
輪廓清晰可見
如何解決這一問題?
慣用的方法簡單易懂,並且貫徹了這篇文章想要傳達的中心思想。
首先需要重新訪問數據管道:先將圖片處理成2Sx2S的大小(如果S=64,就需要裁剪成128x128大小),然後再轉換成BxB高清圖片。接著,設置好生成器之後,創建一個新模型,命名為Combo,功能如下:
1. INP:輸入一批A域的圖片,格式為2Sx2S;
2. INPCUT:將每個圖片裁剪成4SxS的格式;
3. 將裁減好的4SxS的圖片(INPCUT)輸進生成器,得到OUTCUT(與INPCUT形狀相同,但每個SxS圖片都已經編輯過了);
4. 將OUTCUT裡的每組4SxS圖片組合起來,得到OUT(與INP形狀相同,但每個2Sx2S圖片都已經編輯過了);
5. 得到輸出結果OUT。
Combo模型:裁剪、編輯、組合
Combo模型的輸出就變成了鑑別器的輸入,並且輸入數據的大小變成了之前的兩倍。這點輕微的調整不會佔用太多計算時間,並且可以有效解決之前的問題。具體方法如下:
現在生成器必須生成邊緣和顏色都保持一致的圖片,否則鑑別器無法將這些圖片識別為真實圖片,這樣就無法幫助生成器進行優化。具體來講,對每張有4個邊界的SxS圖片,生成器必須要生成非常逼真的圖片,即便是一個邊界處理得不好都會毀掉增長2x2圖像的真實感。
測試實例(從左到右):A域的圖片,編輯後的圖片(AB), B域的圖片
“全家桶”
為了保證目前為止所有步驟都清楚明瞭,再複習一下整個網絡如何運行的。
我們的目的是將A類圖片編輯成B風格。2Sx2S的圖片大小是從A類和B類的高分辨率圖片來的。A域的圖片是Combo的輸入,這個模型會先把圖片裁剪成4份更小的尺寸,然後使用生成器(G)來轉換它們,最後再組合到一起,稱其為偽圖像(fake images)AB。
接著是孿生鑑別器(D),鑑別器的輸入數據大小是生成器輸入數據大小的兩倍(2Sx2S),其輸出是大小為LENVEC的向量。
D將圖片信息解碼,處理成向量D(X),例如:
1. D(B)必須與原點相近(大小為VECLEN的零向量):
LossD1的值是D(B)到原點距離的歐幾里得距離的平方,也就是Eucl(D(A))2
2. D(AB)必須與原點相隔一定的距離:
LossD2 = (max(0, cost — Eucl(D(AB))))²
3. 轉換向量(D(A1)-D(A2))和(D(AB1)-D(AB2))必須是相似向量,才能保留圖片的內容:
LossD3 = cos_similarity(D(A1)-D(A2), D(AB1)-D(AB2))
另外,生成器必須輸出合成後的圖片AB,比如:
1. D(AB)必須與原點距離相近:
LossG1 = Eucl(D(AB))²
2.轉換向量(D(A1)-D(A2))和(D(AB1)-D(AB2))必須是相似向量(與鑑別器相同):
LossG2 = cos_similarity(D(A1)-D(A2), D(AB1)-D(AB2))
按照這個方法,生成器就能自主學習並生成指定風格的小尺寸圖片,其邊界不會有任何差錯。所以,如果要編輯一整張高清圖片,將其分成更小的SxS圖像再輸入生成器就能得到一張賞心悅目且風格統一的高清圖片了。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
處理成梵高風格的高清圖片
具體步驟如下
建立模型
這一步的目標是實現圖像到圖像的轉換(從A域到B域)。可以通過很多方法來實現,也有很多網絡模型,其中最有名的可能就是CycleGAN,也有很多與這個話題相關的論文。
本文在孿生網絡裡自定義了一個模型作為鑑別器,還採用了一個很特別但是非常簡單的損失函數。選擇這個方法的原因是每一個損失項都不那麼依賴於每個像素之間的差異:這就意味著網絡在生成高清圖片時沒有幾何限制,從而能編輯出畫面更加生動的圖片。(這個結論在本例中成立。)
下面將簡單介紹孿生生成式對抗網絡(Siamese GAN)的架構。
孿生生成式對抗網絡(Siamese GAN)架構
孿生生成式對抗網絡由生成器和鑑別器組成。圖片輸入生成器,輸出編輯過的圖片。圖片輸入鑑別器,輸出一個潛在矢量。
孿生鑑別器有兩個功能:其一,指揮生成器生成畫面更逼真的圖片;其二,對於那些畫面看起來不真實的圖片,維持現有的圖片內容,儘量保持和原圖風格一致。
從A域和B域分別隨機取圖片並命名為A1, A2和B1,B2,X是一張隨機圖片,G(X)是生成器合成的圖片,鑑別器需要將圖片加工成矢量D(X),如:
1. D(B1)和一個固定點(以原點為例)之間的歐幾里得距離必須非常近,與此同時,D(G(A1))必須離這個點非常遠。相應地,矢量與固定點距離越近,能生成的圖片越逼真。另外,在大多數研究對抗網絡的例子中,生成器都要試著縮短從D(G(A1))到這個固定點之間的距離。
2. 如果要保留A和G(A)之間的“內容”,(D(A1)-D(A2))和 (D(G(A1)-D(G(A2))) 的餘弦相似度必須保持一致。生成器和鑑別器都會參與這個步驟。
孿生鑑別器
第一條根據矢量大小的變化而變化,第二條更側重於矢量的角度。如果能實現從A域到B域之間的圖像轉換,目標就完成了。
現在有了一個模型,下面就一起探索怎樣運用網絡來得到高清圖片吧。
圖像提取
首先需要兩個高清圖庫,在這個例子中,需要一個風景圖庫作為A域,以及梵高的作品圖庫作為B域。切記,圖片越大,預處理時間就越長,比如裁剪、調整大小等,但這些操作並不會延長調試網絡的時間。
然後需要選擇輸入生成器的圖片大小:顯然不能直接使用圖片庫裡的高清圖片,不然調試時間會變得很長,網絡的規模也很大,這樣就不能解決任何實質性的問題了。所以要選擇足夠小的尺寸(如像素為64*64),以便控制調試時間,即便是比如免費的谷歌Colaboratory等中等表現的圖像處理器也能處理這些圖片。
相應地,想必讀者也已經考慮到了,輸入生成器之前,這些圖片需要預先處理,裁剪成更小的尺寸。輸入圖片後處理成為張量,以隨機的SxS尺寸打包一同輸入進網絡。這聽起來很簡單,實際操作也非常簡單!
現在,假設用這種方法訓練生成對抗網絡,直到生成器把所有尺寸調整好的圖片都轉換成了想要的“梵高風”,這時候問題就來了:如何才能將整張高清圖片從A域轉換到B域呢?
其實很簡單,將圖片像素分解為SxS(如果高清圖片本來像素為BxB,就會出現(B//S)x(B//S)的格式),每個像素尺寸為SxS的圖片都會經過生成器處理,最終組合到一起。
有一個更簡單的方法,將圖片的尺寸由大裁小,但調試GAN的過程中就會發現問題:通過這種方法調整後的圖片再經過生成器轉換到B域的時候,和原圖放在一起很違和。結果顯示,每個像素為SxS的圖片中的輪廓都特別清晰,“奇蹟”般地失敗了。相對來講,這算是小問題,即使使用以像素為單位的CycleGAN等方法也會出現同樣的毛病。
輪廓清晰可見
如何解決這一問題?
慣用的方法簡單易懂,並且貫徹了這篇文章想要傳達的中心思想。
首先需要重新訪問數據管道:先將圖片處理成2Sx2S的大小(如果S=64,就需要裁剪成128x128大小),然後再轉換成BxB高清圖片。接著,設置好生成器之後,創建一個新模型,命名為Combo,功能如下:
1. INP:輸入一批A域的圖片,格式為2Sx2S;
2. INPCUT:將每個圖片裁剪成4SxS的格式;
3. 將裁減好的4SxS的圖片(INPCUT)輸進生成器,得到OUTCUT(與INPCUT形狀相同,但每個SxS圖片都已經編輯過了);
4. 將OUTCUT裡的每組4SxS圖片組合起來,得到OUT(與INP形狀相同,但每個2Sx2S圖片都已經編輯過了);
5. 得到輸出結果OUT。
Combo模型:裁剪、編輯、組合
Combo模型的輸出就變成了鑑別器的輸入,並且輸入數據的大小變成了之前的兩倍。這點輕微的調整不會佔用太多計算時間,並且可以有效解決之前的問題。具體方法如下:
現在生成器必須生成邊緣和顏色都保持一致的圖片,否則鑑別器無法將這些圖片識別為真實圖片,這樣就無法幫助生成器進行優化。具體來講,對每張有4個邊界的SxS圖片,生成器必須要生成非常逼真的圖片,即便是一個邊界處理得不好都會毀掉增長2x2圖像的真實感。
測試實例(從左到右):A域的圖片,編輯後的圖片(AB), B域的圖片
“全家桶”
為了保證目前為止所有步驟都清楚明瞭,再複習一下整個網絡如何運行的。
我們的目的是將A類圖片編輯成B風格。2Sx2S的圖片大小是從A類和B類的高分辨率圖片來的。A域的圖片是Combo的輸入,這個模型會先把圖片裁剪成4份更小的尺寸,然後使用生成器(G)來轉換它們,最後再組合到一起,稱其為偽圖像(fake images)AB。
接著是孿生鑑別器(D),鑑別器的輸入數據大小是生成器輸入數據大小的兩倍(2Sx2S),其輸出是大小為LENVEC的向量。
D將圖片信息解碼,處理成向量D(X),例如:
1. D(B)必須與原點相近(大小為VECLEN的零向量):
LossD1的值是D(B)到原點距離的歐幾里得距離的平方,也就是Eucl(D(A))2
2. D(AB)必須與原點相隔一定的距離:
LossD2 = (max(0, cost — Eucl(D(AB))))²
3. 轉換向量(D(A1)-D(A2))和(D(AB1)-D(AB2))必須是相似向量,才能保留圖片的內容:
LossD3 = cos_similarity(D(A1)-D(A2), D(AB1)-D(AB2))
另外,生成器必須輸出合成後的圖片AB,比如:
1. D(AB)必須與原點距離相近:
LossG1 = Eucl(D(AB))²
2.轉換向量(D(A1)-D(A2))和(D(AB1)-D(AB2))必須是相似向量(與鑑別器相同):
LossG2 = cos_similarity(D(A1)-D(A2), D(AB1)-D(AB2))
按照這個方法,生成器就能自主學習並生成指定風格的小尺寸圖片,其邊界不會有任何差錯。所以,如果要編輯一整張高清圖片,將其分成更小的SxS圖像再輸入生成器就能得到一張賞心悅目且風格統一的高清圖片了。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
處理成梵高風格的高清圖片
具體步驟如下
建立模型
這一步的目標是實現圖像到圖像的轉換(從A域到B域)。可以通過很多方法來實現,也有很多網絡模型,其中最有名的可能就是CycleGAN,也有很多與這個話題相關的論文。
本文在孿生網絡裡自定義了一個模型作為鑑別器,還採用了一個很特別但是非常簡單的損失函數。選擇這個方法的原因是每一個損失項都不那麼依賴於每個像素之間的差異:這就意味著網絡在生成高清圖片時沒有幾何限制,從而能編輯出畫面更加生動的圖片。(這個結論在本例中成立。)
下面將簡單介紹孿生生成式對抗網絡(Siamese GAN)的架構。
孿生生成式對抗網絡(Siamese GAN)架構
孿生生成式對抗網絡由生成器和鑑別器組成。圖片輸入生成器,輸出編輯過的圖片。圖片輸入鑑別器,輸出一個潛在矢量。
孿生鑑別器有兩個功能:其一,指揮生成器生成畫面更逼真的圖片;其二,對於那些畫面看起來不真實的圖片,維持現有的圖片內容,儘量保持和原圖風格一致。
從A域和B域分別隨機取圖片並命名為A1, A2和B1,B2,X是一張隨機圖片,G(X)是生成器合成的圖片,鑑別器需要將圖片加工成矢量D(X),如:
1. D(B1)和一個固定點(以原點為例)之間的歐幾里得距離必須非常近,與此同時,D(G(A1))必須離這個點非常遠。相應地,矢量與固定點距離越近,能生成的圖片越逼真。另外,在大多數研究對抗網絡的例子中,生成器都要試著縮短從D(G(A1))到這個固定點之間的距離。
2. 如果要保留A和G(A)之間的“內容”,(D(A1)-D(A2))和 (D(G(A1)-D(G(A2))) 的餘弦相似度必須保持一致。生成器和鑑別器都會參與這個步驟。
孿生鑑別器
第一條根據矢量大小的變化而變化,第二條更側重於矢量的角度。如果能實現從A域到B域之間的圖像轉換,目標就完成了。
現在有了一個模型,下面就一起探索怎樣運用網絡來得到高清圖片吧。
圖像提取
首先需要兩個高清圖庫,在這個例子中,需要一個風景圖庫作為A域,以及梵高的作品圖庫作為B域。切記,圖片越大,預處理時間就越長,比如裁剪、調整大小等,但這些操作並不會延長調試網絡的時間。
然後需要選擇輸入生成器的圖片大小:顯然不能直接使用圖片庫裡的高清圖片,不然調試時間會變得很長,網絡的規模也很大,這樣就不能解決任何實質性的問題了。所以要選擇足夠小的尺寸(如像素為64*64),以便控制調試時間,即便是比如免費的谷歌Colaboratory等中等表現的圖像處理器也能處理這些圖片。
相應地,想必讀者也已經考慮到了,輸入生成器之前,這些圖片需要預先處理,裁剪成更小的尺寸。輸入圖片後處理成為張量,以隨機的SxS尺寸打包一同輸入進網絡。這聽起來很簡單,實際操作也非常簡單!
現在,假設用這種方法訓練生成對抗網絡,直到生成器把所有尺寸調整好的圖片都轉換成了想要的“梵高風”,這時候問題就來了:如何才能將整張高清圖片從A域轉換到B域呢?
其實很簡單,將圖片像素分解為SxS(如果高清圖片本來像素為BxB,就會出現(B//S)x(B//S)的格式),每個像素尺寸為SxS的圖片都會經過生成器處理,最終組合到一起。
有一個更簡單的方法,將圖片的尺寸由大裁小,但調試GAN的過程中就會發現問題:通過這種方法調整後的圖片再經過生成器轉換到B域的時候,和原圖放在一起很違和。結果顯示,每個像素為SxS的圖片中的輪廓都特別清晰,“奇蹟”般地失敗了。相對來講,這算是小問題,即使使用以像素為單位的CycleGAN等方法也會出現同樣的毛病。
輪廓清晰可見
如何解決這一問題?
慣用的方法簡單易懂,並且貫徹了這篇文章想要傳達的中心思想。
首先需要重新訪問數據管道:先將圖片處理成2Sx2S的大小(如果S=64,就需要裁剪成128x128大小),然後再轉換成BxB高清圖片。接著,設置好生成器之後,創建一個新模型,命名為Combo,功能如下:
1. INP:輸入一批A域的圖片,格式為2Sx2S;
2. INPCUT:將每個圖片裁剪成4SxS的格式;
3. 將裁減好的4SxS的圖片(INPCUT)輸進生成器,得到OUTCUT(與INPCUT形狀相同,但每個SxS圖片都已經編輯過了);
4. 將OUTCUT裡的每組4SxS圖片組合起來,得到OUT(與INP形狀相同,但每個2Sx2S圖片都已經編輯過了);
5. 得到輸出結果OUT。
Combo模型:裁剪、編輯、組合
Combo模型的輸出就變成了鑑別器的輸入,並且輸入數據的大小變成了之前的兩倍。這點輕微的調整不會佔用太多計算時間,並且可以有效解決之前的問題。具體方法如下:
現在生成器必須生成邊緣和顏色都保持一致的圖片,否則鑑別器無法將這些圖片識別為真實圖片,這樣就無法幫助生成器進行優化。具體來講,對每張有4個邊界的SxS圖片,生成器必須要生成非常逼真的圖片,即便是一個邊界處理得不好都會毀掉增長2x2圖像的真實感。
測試實例(從左到右):A域的圖片,編輯後的圖片(AB), B域的圖片
“全家桶”
為了保證目前為止所有步驟都清楚明瞭,再複習一下整個網絡如何運行的。
我們的目的是將A類圖片編輯成B風格。2Sx2S的圖片大小是從A類和B類的高分辨率圖片來的。A域的圖片是Combo的輸入,這個模型會先把圖片裁剪成4份更小的尺寸,然後使用生成器(G)來轉換它們,最後再組合到一起,稱其為偽圖像(fake images)AB。
接著是孿生鑑別器(D),鑑別器的輸入數據大小是生成器輸入數據大小的兩倍(2Sx2S),其輸出是大小為LENVEC的向量。
D將圖片信息解碼,處理成向量D(X),例如:
1. D(B)必須與原點相近(大小為VECLEN的零向量):
LossD1的值是D(B)到原點距離的歐幾里得距離的平方,也就是Eucl(D(A))2
2. D(AB)必須與原點相隔一定的距離:
LossD2 = (max(0, cost — Eucl(D(AB))))²
3. 轉換向量(D(A1)-D(A2))和(D(AB1)-D(AB2))必須是相似向量,才能保留圖片的內容:
LossD3 = cos_similarity(D(A1)-D(A2), D(AB1)-D(AB2))
另外,生成器必須輸出合成後的圖片AB,比如:
1. D(AB)必須與原點距離相近:
LossG1 = Eucl(D(AB))²
2.轉換向量(D(A1)-D(A2))和(D(AB1)-D(AB2))必須是相似向量(與鑑別器相同):
LossG2 = cos_similarity(D(A1)-D(A2), D(AB1)-D(AB2))
按照這個方法,生成器就能自主學習並生成指定風格的小尺寸圖片,其邊界不會有任何差錯。所以,如果要編輯一整張高清圖片,將其分成更小的SxS圖像再輸入生成器就能得到一張賞心悅目且風格統一的高清圖片了。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
處理成梵高風格的高清圖片
具體步驟如下
建立模型
這一步的目標是實現圖像到圖像的轉換(從A域到B域)。可以通過很多方法來實現,也有很多網絡模型,其中最有名的可能就是CycleGAN,也有很多與這個話題相關的論文。
本文在孿生網絡裡自定義了一個模型作為鑑別器,還採用了一個很特別但是非常簡單的損失函數。選擇這個方法的原因是每一個損失項都不那麼依賴於每個像素之間的差異:這就意味著網絡在生成高清圖片時沒有幾何限制,從而能編輯出畫面更加生動的圖片。(這個結論在本例中成立。)
下面將簡單介紹孿生生成式對抗網絡(Siamese GAN)的架構。
孿生生成式對抗網絡(Siamese GAN)架構
孿生生成式對抗網絡由生成器和鑑別器組成。圖片輸入生成器,輸出編輯過的圖片。圖片輸入鑑別器,輸出一個潛在矢量。
孿生鑑別器有兩個功能:其一,指揮生成器生成畫面更逼真的圖片;其二,對於那些畫面看起來不真實的圖片,維持現有的圖片內容,儘量保持和原圖風格一致。
從A域和B域分別隨機取圖片並命名為A1, A2和B1,B2,X是一張隨機圖片,G(X)是生成器合成的圖片,鑑別器需要將圖片加工成矢量D(X),如:
1. D(B1)和一個固定點(以原點為例)之間的歐幾里得距離必須非常近,與此同時,D(G(A1))必須離這個點非常遠。相應地,矢量與固定點距離越近,能生成的圖片越逼真。另外,在大多數研究對抗網絡的例子中,生成器都要試著縮短從D(G(A1))到這個固定點之間的距離。
2. 如果要保留A和G(A)之間的“內容”,(D(A1)-D(A2))和 (D(G(A1)-D(G(A2))) 的餘弦相似度必須保持一致。生成器和鑑別器都會參與這個步驟。
孿生鑑別器
第一條根據矢量大小的變化而變化,第二條更側重於矢量的角度。如果能實現從A域到B域之間的圖像轉換,目標就完成了。
現在有了一個模型,下面就一起探索怎樣運用網絡來得到高清圖片吧。
圖像提取
首先需要兩個高清圖庫,在這個例子中,需要一個風景圖庫作為A域,以及梵高的作品圖庫作為B域。切記,圖片越大,預處理時間就越長,比如裁剪、調整大小等,但這些操作並不會延長調試網絡的時間。
然後需要選擇輸入生成器的圖片大小:顯然不能直接使用圖片庫裡的高清圖片,不然調試時間會變得很長,網絡的規模也很大,這樣就不能解決任何實質性的問題了。所以要選擇足夠小的尺寸(如像素為64*64),以便控制調試時間,即便是比如免費的谷歌Colaboratory等中等表現的圖像處理器也能處理這些圖片。
相應地,想必讀者也已經考慮到了,輸入生成器之前,這些圖片需要預先處理,裁剪成更小的尺寸。輸入圖片後處理成為張量,以隨機的SxS尺寸打包一同輸入進網絡。這聽起來很簡單,實際操作也非常簡單!
現在,假設用這種方法訓練生成對抗網絡,直到生成器把所有尺寸調整好的圖片都轉換成了想要的“梵高風”,這時候問題就來了:如何才能將整張高清圖片從A域轉換到B域呢?
其實很簡單,將圖片像素分解為SxS(如果高清圖片本來像素為BxB,就會出現(B//S)x(B//S)的格式),每個像素尺寸為SxS的圖片都會經過生成器處理,最終組合到一起。
有一個更簡單的方法,將圖片的尺寸由大裁小,但調試GAN的過程中就會發現問題:通過這種方法調整後的圖片再經過生成器轉換到B域的時候,和原圖放在一起很違和。結果顯示,每個像素為SxS的圖片中的輪廓都特別清晰,“奇蹟”般地失敗了。相對來講,這算是小問題,即使使用以像素為單位的CycleGAN等方法也會出現同樣的毛病。
輪廓清晰可見
如何解決這一問題?
慣用的方法簡單易懂,並且貫徹了這篇文章想要傳達的中心思想。
首先需要重新訪問數據管道:先將圖片處理成2Sx2S的大小(如果S=64,就需要裁剪成128x128大小),然後再轉換成BxB高清圖片。接著,設置好生成器之後,創建一個新模型,命名為Combo,功能如下:
1. INP:輸入一批A域的圖片,格式為2Sx2S;
2. INPCUT:將每個圖片裁剪成4SxS的格式;
3. 將裁減好的4SxS的圖片(INPCUT)輸進生成器,得到OUTCUT(與INPCUT形狀相同,但每個SxS圖片都已經編輯過了);
4. 將OUTCUT裡的每組4SxS圖片組合起來,得到OUT(與INP形狀相同,但每個2Sx2S圖片都已經編輯過了);
5. 得到輸出結果OUT。
Combo模型:裁剪、編輯、組合
Combo模型的輸出就變成了鑑別器的輸入,並且輸入數據的大小變成了之前的兩倍。這點輕微的調整不會佔用太多計算時間,並且可以有效解決之前的問題。具體方法如下:
現在生成器必須生成邊緣和顏色都保持一致的圖片,否則鑑別器無法將這些圖片識別為真實圖片,這樣就無法幫助生成器進行優化。具體來講,對每張有4個邊界的SxS圖片,生成器必須要生成非常逼真的圖片,即便是一個邊界處理得不好都會毀掉增長2x2圖像的真實感。
測試實例(從左到右):A域的圖片,編輯後的圖片(AB), B域的圖片
“全家桶”
為了保證目前為止所有步驟都清楚明瞭,再複習一下整個網絡如何運行的。
我們的目的是將A類圖片編輯成B風格。2Sx2S的圖片大小是從A類和B類的高分辨率圖片來的。A域的圖片是Combo的輸入,這個模型會先把圖片裁剪成4份更小的尺寸,然後使用生成器(G)來轉換它們,最後再組合到一起,稱其為偽圖像(fake images)AB。
接著是孿生鑑別器(D),鑑別器的輸入數據大小是生成器輸入數據大小的兩倍(2Sx2S),其輸出是大小為LENVEC的向量。
D將圖片信息解碼,處理成向量D(X),例如:
1. D(B)必須與原點相近(大小為VECLEN的零向量):
LossD1的值是D(B)到原點距離的歐幾里得距離的平方,也就是Eucl(D(A))2
2. D(AB)必須與原點相隔一定的距離:
LossD2 = (max(0, cost — Eucl(D(AB))))²
3. 轉換向量(D(A1)-D(A2))和(D(AB1)-D(AB2))必須是相似向量,才能保留圖片的內容:
LossD3 = cos_similarity(D(A1)-D(A2), D(AB1)-D(AB2))
另外,生成器必須輸出合成後的圖片AB,比如:
1. D(AB)必須與原點距離相近:
LossG1 = Eucl(D(AB))²
2.轉換向量(D(A1)-D(A2))和(D(AB1)-D(AB2))必須是相似向量(與鑑別器相同):
LossG2 = cos_similarity(D(A1)-D(A2), D(AB1)-D(AB2))
按照這個方法,生成器就能自主學習並生成指定風格的小尺寸圖片,其邊界不會有任何差錯。所以,如果要編輯一整張高清圖片,將其分成更小的SxS圖像再輸入生成器就能得到一張賞心悅目且風格統一的高清圖片了。
高清圖片的編輯:雖然並不完美,但筆觸十分逼真,圖像也很連貫。網絡環境越好、性能越好的情況下圖片分辨率越高。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
處理成梵高風格的高清圖片
具體步驟如下
建立模型
這一步的目標是實現圖像到圖像的轉換(從A域到B域)。可以通過很多方法來實現,也有很多網絡模型,其中最有名的可能就是CycleGAN,也有很多與這個話題相關的論文。
本文在孿生網絡裡自定義了一個模型作為鑑別器,還採用了一個很特別但是非常簡單的損失函數。選擇這個方法的原因是每一個損失項都不那麼依賴於每個像素之間的差異:這就意味著網絡在生成高清圖片時沒有幾何限制,從而能編輯出畫面更加生動的圖片。(這個結論在本例中成立。)
下面將簡單介紹孿生生成式對抗網絡(Siamese GAN)的架構。
孿生生成式對抗網絡(Siamese GAN)架構
孿生生成式對抗網絡由生成器和鑑別器組成。圖片輸入生成器,輸出編輯過的圖片。圖片輸入鑑別器,輸出一個潛在矢量。
孿生鑑別器有兩個功能:其一,指揮生成器生成畫面更逼真的圖片;其二,對於那些畫面看起來不真實的圖片,維持現有的圖片內容,儘量保持和原圖風格一致。
從A域和B域分別隨機取圖片並命名為A1, A2和B1,B2,X是一張隨機圖片,G(X)是生成器合成的圖片,鑑別器需要將圖片加工成矢量D(X),如:
1. D(B1)和一個固定點(以原點為例)之間的歐幾里得距離必須非常近,與此同時,D(G(A1))必須離這個點非常遠。相應地,矢量與固定點距離越近,能生成的圖片越逼真。另外,在大多數研究對抗網絡的例子中,生成器都要試著縮短從D(G(A1))到這個固定點之間的距離。
2. 如果要保留A和G(A)之間的“內容”,(D(A1)-D(A2))和 (D(G(A1)-D(G(A2))) 的餘弦相似度必須保持一致。生成器和鑑別器都會參與這個步驟。
孿生鑑別器
第一條根據矢量大小的變化而變化,第二條更側重於矢量的角度。如果能實現從A域到B域之間的圖像轉換,目標就完成了。
現在有了一個模型,下面就一起探索怎樣運用網絡來得到高清圖片吧。
圖像提取
首先需要兩個高清圖庫,在這個例子中,需要一個風景圖庫作為A域,以及梵高的作品圖庫作為B域。切記,圖片越大,預處理時間就越長,比如裁剪、調整大小等,但這些操作並不會延長調試網絡的時間。
然後需要選擇輸入生成器的圖片大小:顯然不能直接使用圖片庫裡的高清圖片,不然調試時間會變得很長,網絡的規模也很大,這樣就不能解決任何實質性的問題了。所以要選擇足夠小的尺寸(如像素為64*64),以便控制調試時間,即便是比如免費的谷歌Colaboratory等中等表現的圖像處理器也能處理這些圖片。
相應地,想必讀者也已經考慮到了,輸入生成器之前,這些圖片需要預先處理,裁剪成更小的尺寸。輸入圖片後處理成為張量,以隨機的SxS尺寸打包一同輸入進網絡。這聽起來很簡單,實際操作也非常簡單!
現在,假設用這種方法訓練生成對抗網絡,直到生成器把所有尺寸調整好的圖片都轉換成了想要的“梵高風”,這時候問題就來了:如何才能將整張高清圖片從A域轉換到B域呢?
其實很簡單,將圖片像素分解為SxS(如果高清圖片本來像素為BxB,就會出現(B//S)x(B//S)的格式),每個像素尺寸為SxS的圖片都會經過生成器處理,最終組合到一起。
有一個更簡單的方法,將圖片的尺寸由大裁小,但調試GAN的過程中就會發現問題:通過這種方法調整後的圖片再經過生成器轉換到B域的時候,和原圖放在一起很違和。結果顯示,每個像素為SxS的圖片中的輪廓都特別清晰,“奇蹟”般地失敗了。相對來講,這算是小問題,即使使用以像素為單位的CycleGAN等方法也會出現同樣的毛病。
輪廓清晰可見
如何解決這一問題?
慣用的方法簡單易懂,並且貫徹了這篇文章想要傳達的中心思想。
首先需要重新訪問數據管道:先將圖片處理成2Sx2S的大小(如果S=64,就需要裁剪成128x128大小),然後再轉換成BxB高清圖片。接著,設置好生成器之後,創建一個新模型,命名為Combo,功能如下:
1. INP:輸入一批A域的圖片,格式為2Sx2S;
2. INPCUT:將每個圖片裁剪成4SxS的格式;
3. 將裁減好的4SxS的圖片(INPCUT)輸進生成器,得到OUTCUT(與INPCUT形狀相同,但每個SxS圖片都已經編輯過了);
4. 將OUTCUT裡的每組4SxS圖片組合起來,得到OUT(與INP形狀相同,但每個2Sx2S圖片都已經編輯過了);
5. 得到輸出結果OUT。
Combo模型:裁剪、編輯、組合
Combo模型的輸出就變成了鑑別器的輸入,並且輸入數據的大小變成了之前的兩倍。這點輕微的調整不會佔用太多計算時間,並且可以有效解決之前的問題。具體方法如下:
現在生成器必須生成邊緣和顏色都保持一致的圖片,否則鑑別器無法將這些圖片識別為真實圖片,這樣就無法幫助生成器進行優化。具體來講,對每張有4個邊界的SxS圖片,生成器必須要生成非常逼真的圖片,即便是一個邊界處理得不好都會毀掉增長2x2圖像的真實感。
測試實例(從左到右):A域的圖片,編輯後的圖片(AB), B域的圖片
“全家桶”
為了保證目前為止所有步驟都清楚明瞭,再複習一下整個網絡如何運行的。
我們的目的是將A類圖片編輯成B風格。2Sx2S的圖片大小是從A類和B類的高分辨率圖片來的。A域的圖片是Combo的輸入,這個模型會先把圖片裁剪成4份更小的尺寸,然後使用生成器(G)來轉換它們,最後再組合到一起,稱其為偽圖像(fake images)AB。
接著是孿生鑑別器(D),鑑別器的輸入數據大小是生成器輸入數據大小的兩倍(2Sx2S),其輸出是大小為LENVEC的向量。
D將圖片信息解碼,處理成向量D(X),例如:
1. D(B)必須與原點相近(大小為VECLEN的零向量):
LossD1的值是D(B)到原點距離的歐幾里得距離的平方,也就是Eucl(D(A))2
2. D(AB)必須與原點相隔一定的距離:
LossD2 = (max(0, cost — Eucl(D(AB))))²
3. 轉換向量(D(A1)-D(A2))和(D(AB1)-D(AB2))必須是相似向量,才能保留圖片的內容:
LossD3 = cos_similarity(D(A1)-D(A2), D(AB1)-D(AB2))
另外,生成器必須輸出合成後的圖片AB,比如:
1. D(AB)必須與原點距離相近:
LossG1 = Eucl(D(AB))²
2.轉換向量(D(A1)-D(A2))和(D(AB1)-D(AB2))必須是相似向量(與鑑別器相同):
LossG2 = cos_similarity(D(A1)-D(A2), D(AB1)-D(AB2))
按照這個方法,生成器就能自主學習並生成指定風格的小尺寸圖片,其邊界不會有任何差錯。所以,如果要編輯一整張高清圖片,將其分成更小的SxS圖像再輸入生成器就能得到一張賞心悅目且風格統一的高清圖片了。
高清圖片的編輯:雖然並不完美,但筆觸十分逼真,圖像也很連貫。網絡環境越好、性能越好的情況下圖片分辨率越高。
結語
本文介紹的方法仍存在一些問題。
如果選擇了分辨率極高的圖片,那麼用來調試網絡的更小尺寸的圖片可能裡面沒有任何相關信息,很可能就是純色、單一像素的圖片,這樣的調試就沒有任何實際意義:生成器和鑑別器都需要處理一定的信息。鑑別器必須根據其內容進行編程,如果數據內容沒有意義的話,這個過程中可能會出現一些問題。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
處理成梵高風格的高清圖片
具體步驟如下
建立模型
這一步的目標是實現圖像到圖像的轉換(從A域到B域)。可以通過很多方法來實現,也有很多網絡模型,其中最有名的可能就是CycleGAN,也有很多與這個話題相關的論文。
本文在孿生網絡裡自定義了一個模型作為鑑別器,還採用了一個很特別但是非常簡單的損失函數。選擇這個方法的原因是每一個損失項都不那麼依賴於每個像素之間的差異:這就意味著網絡在生成高清圖片時沒有幾何限制,從而能編輯出畫面更加生動的圖片。(這個結論在本例中成立。)
下面將簡單介紹孿生生成式對抗網絡(Siamese GAN)的架構。
孿生生成式對抗網絡(Siamese GAN)架構
孿生生成式對抗網絡由生成器和鑑別器組成。圖片輸入生成器,輸出編輯過的圖片。圖片輸入鑑別器,輸出一個潛在矢量。
孿生鑑別器有兩個功能:其一,指揮生成器生成畫面更逼真的圖片;其二,對於那些畫面看起來不真實的圖片,維持現有的圖片內容,儘量保持和原圖風格一致。
從A域和B域分別隨機取圖片並命名為A1, A2和B1,B2,X是一張隨機圖片,G(X)是生成器合成的圖片,鑑別器需要將圖片加工成矢量D(X),如:
1. D(B1)和一個固定點(以原點為例)之間的歐幾里得距離必須非常近,與此同時,D(G(A1))必須離這個點非常遠。相應地,矢量與固定點距離越近,能生成的圖片越逼真。另外,在大多數研究對抗網絡的例子中,生成器都要試著縮短從D(G(A1))到這個固定點之間的距離。
2. 如果要保留A和G(A)之間的“內容”,(D(A1)-D(A2))和 (D(G(A1)-D(G(A2))) 的餘弦相似度必須保持一致。生成器和鑑別器都會參與這個步驟。
孿生鑑別器
第一條根據矢量大小的變化而變化,第二條更側重於矢量的角度。如果能實現從A域到B域之間的圖像轉換,目標就完成了。
現在有了一個模型,下面就一起探索怎樣運用網絡來得到高清圖片吧。
圖像提取
首先需要兩個高清圖庫,在這個例子中,需要一個風景圖庫作為A域,以及梵高的作品圖庫作為B域。切記,圖片越大,預處理時間就越長,比如裁剪、調整大小等,但這些操作並不會延長調試網絡的時間。
然後需要選擇輸入生成器的圖片大小:顯然不能直接使用圖片庫裡的高清圖片,不然調試時間會變得很長,網絡的規模也很大,這樣就不能解決任何實質性的問題了。所以要選擇足夠小的尺寸(如像素為64*64),以便控制調試時間,即便是比如免費的谷歌Colaboratory等中等表現的圖像處理器也能處理這些圖片。
相應地,想必讀者也已經考慮到了,輸入生成器之前,這些圖片需要預先處理,裁剪成更小的尺寸。輸入圖片後處理成為張量,以隨機的SxS尺寸打包一同輸入進網絡。這聽起來很簡單,實際操作也非常簡單!
現在,假設用這種方法訓練生成對抗網絡,直到生成器把所有尺寸調整好的圖片都轉換成了想要的“梵高風”,這時候問題就來了:如何才能將整張高清圖片從A域轉換到B域呢?
其實很簡單,將圖片像素分解為SxS(如果高清圖片本來像素為BxB,就會出現(B//S)x(B//S)的格式),每個像素尺寸為SxS的圖片都會經過生成器處理,最終組合到一起。
有一個更簡單的方法,將圖片的尺寸由大裁小,但調試GAN的過程中就會發現問題:通過這種方法調整後的圖片再經過生成器轉換到B域的時候,和原圖放在一起很違和。結果顯示,每個像素為SxS的圖片中的輪廓都特別清晰,“奇蹟”般地失敗了。相對來講,這算是小問題,即使使用以像素為單位的CycleGAN等方法也會出現同樣的毛病。
輪廓清晰可見
如何解決這一問題?
慣用的方法簡單易懂,並且貫徹了這篇文章想要傳達的中心思想。
首先需要重新訪問數據管道:先將圖片處理成2Sx2S的大小(如果S=64,就需要裁剪成128x128大小),然後再轉換成BxB高清圖片。接著,設置好生成器之後,創建一個新模型,命名為Combo,功能如下:
1. INP:輸入一批A域的圖片,格式為2Sx2S;
2. INPCUT:將每個圖片裁剪成4SxS的格式;
3. 將裁減好的4SxS的圖片(INPCUT)輸進生成器,得到OUTCUT(與INPCUT形狀相同,但每個SxS圖片都已經編輯過了);
4. 將OUTCUT裡的每組4SxS圖片組合起來,得到OUT(與INP形狀相同,但每個2Sx2S圖片都已經編輯過了);
5. 得到輸出結果OUT。
Combo模型:裁剪、編輯、組合
Combo模型的輸出就變成了鑑別器的輸入,並且輸入數據的大小變成了之前的兩倍。這點輕微的調整不會佔用太多計算時間,並且可以有效解決之前的問題。具體方法如下:
現在生成器必須生成邊緣和顏色都保持一致的圖片,否則鑑別器無法將這些圖片識別為真實圖片,這樣就無法幫助生成器進行優化。具體來講,對每張有4個邊界的SxS圖片,生成器必須要生成非常逼真的圖片,即便是一個邊界處理得不好都會毀掉增長2x2圖像的真實感。
測試實例(從左到右):A域的圖片,編輯後的圖片(AB), B域的圖片
“全家桶”
為了保證目前為止所有步驟都清楚明瞭,再複習一下整個網絡如何運行的。
我們的目的是將A類圖片編輯成B風格。2Sx2S的圖片大小是從A類和B類的高分辨率圖片來的。A域的圖片是Combo的輸入,這個模型會先把圖片裁剪成4份更小的尺寸,然後使用生成器(G)來轉換它們,最後再組合到一起,稱其為偽圖像(fake images)AB。
接著是孿生鑑別器(D),鑑別器的輸入數據大小是生成器輸入數據大小的兩倍(2Sx2S),其輸出是大小為LENVEC的向量。
D將圖片信息解碼,處理成向量D(X),例如:
1. D(B)必須與原點相近(大小為VECLEN的零向量):
LossD1的值是D(B)到原點距離的歐幾里得距離的平方,也就是Eucl(D(A))2
2. D(AB)必須與原點相隔一定的距離:
LossD2 = (max(0, cost — Eucl(D(AB))))²
3. 轉換向量(D(A1)-D(A2))和(D(AB1)-D(AB2))必須是相似向量,才能保留圖片的內容:
LossD3 = cos_similarity(D(A1)-D(A2), D(AB1)-D(AB2))
另外,生成器必須輸出合成後的圖片AB,比如:
1. D(AB)必須與原點距離相近:
LossG1 = Eucl(D(AB))²
2.轉換向量(D(A1)-D(A2))和(D(AB1)-D(AB2))必須是相似向量(與鑑別器相同):
LossG2 = cos_similarity(D(A1)-D(A2), D(AB1)-D(AB2))
按照這個方法,生成器就能自主學習並生成指定風格的小尺寸圖片,其邊界不會有任何差錯。所以,如果要編輯一整張高清圖片,將其分成更小的SxS圖像再輸入生成器就能得到一張賞心悅目且風格統一的高清圖片了。
高清圖片的編輯:雖然並不完美,但筆觸十分逼真,圖像也很連貫。網絡環境越好、性能越好的情況下圖片分辨率越高。
結語
本文介紹的方法仍存在一些問題。
如果選擇了分辨率極高的圖片,那麼用來調試網絡的更小尺寸的圖片可能裡面沒有任何相關信息,很可能就是純色、單一像素的圖片,這樣的調試就沒有任何實際意義:生成器和鑑別器都需要處理一定的信息。鑑別器必須根據其內容進行編程,如果數據內容沒有意義的話,這個過程中可能會出現一些問題。
失敗案例:生成器在一些區域混淆了風格不同的顏色和圖形
即使測試成功,把多個高分辨率的圖片組合到一起時,雖然每一部分的風格進行了轉換,但對一整張高清圖片來講遠遠不夠,最後的結果往往和原圖差不多,只變換了一下顏色。
實驗中發現,測試階段使用低分辨率的高清數據庫,要編輯的時候再切換為原大小的高清圖庫的操作能有效解決第一個問題。
這種方法還有更多內容有待開發:除傳統風格轉換以外的其他圖像編輯也是可能實現的。要知道,這個例子中的生成器並不知道圖片的原貌是什麼樣的,只能識別分辨率比較低的圖片。所以,如果能給生成器提供更多內容,比如編碼後的“內容向量”,就能衍生出各種各樣的其他用法,為更復雜的內容為導向的高清圖片編輯開啟無限可能,比如由一種圖像轉換成另一種圖像、人臉、或動物等。
所以,仍有無限可能等待發掘。
全文共4175字,預計學習時長8分鐘
最近,多項研究採用了生成對抗網絡(Generative Adversarial Networks, 簡稱GANs)這一技術來生成分辨率為1024x1024的高清圖片。超級逼真的人臉、動物和其他算法生成的圖像令人驚歎不已,要知道,這項技術出現也不過短短几年。從分辨率低,像素差的圖片到如今栩栩如生的高清畫質,在很短的時間內就實現了質的飛躍:這一領域進步多大,請看下圖。
生成式對抗網絡技術人臉處理實例
這一領域相關度最高的研究是英偉達的 StyleGAN和谷歌的BigGAN。
要生成高質量的圖片需要極高的計算能力,所以目前仍不是個可以輕鬆解決的問題。因此,本文將介紹如何在不使用昂貴硬件的前提下利用GANs處理高清圖片,這對手上沒有高級顯卡(GPU)的人來說是一個絕好機會。本文討論的所有內容都可以在谷歌的Colaboratory上找到,該平臺提供了免費GPU以供大眾完成自己的機器/深度學習項目。
目標
我們要使用一個很特別而簡單的GAN結構來完成任務,在兩個高清圖片之間進行風格轉換。此外,還會將一張普通的高清風景圖片編輯成梵高的風格。近幾年在計算機視覺領域,風格轉換非常流行。
《藝術化的神經網絡算法》引領了這股潮流,該論文在事先測試好的卷積網絡中對圖片進行內容和風格上的調整。雖然這種方法能處理高清圖片,但它只能用一張圖像作為參照,比如說,它只能用《星夜》作為梵高整體繪畫風格的參照,這不是我們想要的結果。
論文中關於風格遷移的實例
生成對抗網絡技術(GAN)需要大量圖片作為輸入數據才能完全捕捉畫家的風格,CycleGAN這篇論文提到了很多關於風格遷移的有趣發現。
CycleGAN風格遷移實例
然而,調試GANs對計算機配置要求很高:只有高階硬件再花上很長的調試時間才能處理這一代高分辨率圖片。希望本文介紹的方法能在處理高清圖片方面幫助到大家。
梵高的作品
處理成梵高風格的高清圖片
具體步驟如下
建立模型
這一步的目標是實現圖像到圖像的轉換(從A域到B域)。可以通過很多方法來實現,也有很多網絡模型,其中最有名的可能就是CycleGAN,也有很多與這個話題相關的論文。
本文在孿生網絡裡自定義了一個模型作為鑑別器,還採用了一個很特別但是非常簡單的損失函數。選擇這個方法的原因是每一個損失項都不那麼依賴於每個像素之間的差異:這就意味著網絡在生成高清圖片時沒有幾何限制,從而能編輯出畫面更加生動的圖片。(這個結論在本例中成立。)
下面將簡單介紹孿生生成式對抗網絡(Siamese GAN)的架構。
孿生生成式對抗網絡(Siamese GAN)架構
孿生生成式對抗網絡由生成器和鑑別器組成。圖片輸入生成器,輸出編輯過的圖片。圖片輸入鑑別器,輸出一個潛在矢量。
孿生鑑別器有兩個功能:其一,指揮生成器生成畫面更逼真的圖片;其二,對於那些畫面看起來不真實的圖片,維持現有的圖片內容,儘量保持和原圖風格一致。
從A域和B域分別隨機取圖片並命名為A1, A2和B1,B2,X是一張隨機圖片,G(X)是生成器合成的圖片,鑑別器需要將圖片加工成矢量D(X),如:
1. D(B1)和一個固定點(以原點為例)之間的歐幾里得距離必須非常近,與此同時,D(G(A1))必須離這個點非常遠。相應地,矢量與固定點距離越近,能生成的圖片越逼真。另外,在大多數研究對抗網絡的例子中,生成器都要試著縮短從D(G(A1))到這個固定點之間的距離。
2. 如果要保留A和G(A)之間的“內容”,(D(A1)-D(A2))和 (D(G(A1)-D(G(A2))) 的餘弦相似度必須保持一致。生成器和鑑別器都會參與這個步驟。
孿生鑑別器
第一條根據矢量大小的變化而變化,第二條更側重於矢量的角度。如果能實現從A域到B域之間的圖像轉換,目標就完成了。
現在有了一個模型,下面就一起探索怎樣運用網絡來得到高清圖片吧。
圖像提取
首先需要兩個高清圖庫,在這個例子中,需要一個風景圖庫作為A域,以及梵高的作品圖庫作為B域。切記,圖片越大,預處理時間就越長,比如裁剪、調整大小等,但這些操作並不會延長調試網絡的時間。
然後需要選擇輸入生成器的圖片大小:顯然不能直接使用圖片庫裡的高清圖片,不然調試時間會變得很長,網絡的規模也很大,這樣就不能解決任何實質性的問題了。所以要選擇足夠小的尺寸(如像素為64*64),以便控制調試時間,即便是比如免費的谷歌Colaboratory等中等表現的圖像處理器也能處理這些圖片。
相應地,想必讀者也已經考慮到了,輸入生成器之前,這些圖片需要預先處理,裁剪成更小的尺寸。輸入圖片後處理成為張量,以隨機的SxS尺寸打包一同輸入進網絡。這聽起來很簡單,實際操作也非常簡單!
現在,假設用這種方法訓練生成對抗網絡,直到生成器把所有尺寸調整好的圖片都轉換成了想要的“梵高風”,這時候問題就來了:如何才能將整張高清圖片從A域轉換到B域呢?
其實很簡單,將圖片像素分解為SxS(如果高清圖片本來像素為BxB,就會出現(B//S)x(B//S)的格式),每個像素尺寸為SxS的圖片都會經過生成器處理,最終組合到一起。
有一個更簡單的方法,將圖片的尺寸由大裁小,但調試GAN的過程中就會發現問題:通過這種方法調整後的圖片再經過生成器轉換到B域的時候,和原圖放在一起很違和。結果顯示,每個像素為SxS的圖片中的輪廓都特別清晰,“奇蹟”般地失敗了。相對來講,這算是小問題,即使使用以像素為單位的CycleGAN等方法也會出現同樣的毛病。
輪廓清晰可見
如何解決這一問題?
慣用的方法簡單易懂,並且貫徹了這篇文章想要傳達的中心思想。
首先需要重新訪問數據管道:先將圖片處理成2Sx2S的大小(如果S=64,就需要裁剪成128x128大小),然後再轉換成BxB高清圖片。接著,設置好生成器之後,創建一個新模型,命名為Combo,功能如下:
1. INP:輸入一批A域的圖片,格式為2Sx2S;
2. INPCUT:將每個圖片裁剪成4SxS的格式;
3. 將裁減好的4SxS的圖片(INPCUT)輸進生成器,得到OUTCUT(與INPCUT形狀相同,但每個SxS圖片都已經編輯過了);
4. 將OUTCUT裡的每組4SxS圖片組合起來,得到OUT(與INP形狀相同,但每個2Sx2S圖片都已經編輯過了);
5. 得到輸出結果OUT。
Combo模型:裁剪、編輯、組合
Combo模型的輸出就變成了鑑別器的輸入,並且輸入數據的大小變成了之前的兩倍。這點輕微的調整不會佔用太多計算時間,並且可以有效解決之前的問題。具體方法如下:
現在生成器必須生成邊緣和顏色都保持一致的圖片,否則鑑別器無法將這些圖片識別為真實圖片,這樣就無法幫助生成器進行優化。具體來講,對每張有4個邊界的SxS圖片,生成器必須要生成非常逼真的圖片,即便是一個邊界處理得不好都會毀掉增長2x2圖像的真實感。
測試實例(從左到右):A域的圖片,編輯後的圖片(AB), B域的圖片
“全家桶”
為了保證目前為止所有步驟都清楚明瞭,再複習一下整個網絡如何運行的。
我們的目的是將A類圖片編輯成B風格。2Sx2S的圖片大小是從A類和B類的高分辨率圖片來的。A域的圖片是Combo的輸入,這個模型會先把圖片裁剪成4份更小的尺寸,然後使用生成器(G)來轉換它們,最後再組合到一起,稱其為偽圖像(fake images)AB。
接著是孿生鑑別器(D),鑑別器的輸入數據大小是生成器輸入數據大小的兩倍(2Sx2S),其輸出是大小為LENVEC的向量。
D將圖片信息解碼,處理成向量D(X),例如:
1. D(B)必須與原點相近(大小為VECLEN的零向量):
LossD1的值是D(B)到原點距離的歐幾里得距離的平方,也就是Eucl(D(A))2
2. D(AB)必須與原點相隔一定的距離:
LossD2 = (max(0, cost — Eucl(D(AB))))²
3. 轉換向量(D(A1)-D(A2))和(D(AB1)-D(AB2))必須是相似向量,才能保留圖片的內容:
LossD3 = cos_similarity(D(A1)-D(A2), D(AB1)-D(AB2))
另外,生成器必須輸出合成後的圖片AB,比如:
1. D(AB)必須與原點距離相近:
LossG1 = Eucl(D(AB))²
2.轉換向量(D(A1)-D(A2))和(D(AB1)-D(AB2))必須是相似向量(與鑑別器相同):
LossG2 = cos_similarity(D(A1)-D(A2), D(AB1)-D(AB2))
按照這個方法,生成器就能自主學習並生成指定風格的小尺寸圖片,其邊界不會有任何差錯。所以,如果要編輯一整張高清圖片,將其分成更小的SxS圖像再輸入生成器就能得到一張賞心悅目且風格統一的高清圖片了。
高清圖片的編輯:雖然並不完美,但筆觸十分逼真,圖像也很連貫。網絡環境越好、性能越好的情況下圖片分辨率越高。
結語
本文介紹的方法仍存在一些問題。
如果選擇了分辨率極高的圖片,那麼用來調試網絡的更小尺寸的圖片可能裡面沒有任何相關信息,很可能就是純色、單一像素的圖片,這樣的調試就沒有任何實際意義:生成器和鑑別器都需要處理一定的信息。鑑別器必須根據其內容進行編程,如果數據內容沒有意義的話,這個過程中可能會出現一些問題。
失敗案例:生成器在一些區域混淆了風格不同的顏色和圖形
即使測試成功,把多個高分辨率的圖片組合到一起時,雖然每一部分的風格進行了轉換,但對一整張高清圖片來講遠遠不夠,最後的結果往往和原圖差不多,只變換了一下顏色。
實驗中發現,測試階段使用低分辨率的高清數據庫,要編輯的時候再切換為原大小的高清圖庫的操作能有效解決第一個問題。
這種方法還有更多內容有待開發:除傳統風格轉換以外的其他圖像編輯也是可能實現的。要知道,這個例子中的生成器並不知道圖片的原貌是什麼樣的,只能識別分辨率比較低的圖片。所以,如果能給生成器提供更多內容,比如編碼後的“內容向量”,就能衍生出各種各樣的其他用法,為更復雜的內容為導向的高清圖片編輯開啟無限可能,比如由一種圖像轉換成另一種圖像、人臉、或動物等。
所以,仍有無限可能等待發掘。
留言 點贊 關注
我們一起分享AI學習與發展的乾貨
編譯組:翁夢徽、張璐瑤
相關鏈接:
https://towardsdatascience.com/style-transfer-with-gans-on-hd-images-88e8efcf3716
如需轉載,請後臺留言,遵守轉載規範