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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

【深度学习】绝了!分割mask生成动漫人脸!爆肝数周,从零搭建

發布時間:2025/3/12 pytorch 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【深度学习】绝了!分割mask生成动漫人脸!爆肝数周,从零搭建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
很多小伙伴期待已久的實戰項目來了,今天分享一個國外論壇medium大佬的文章,從 0 做項目的整個過程,具有很大的參考價值,大家感興趣的可以試著參考這個思路去實現,比起直接跑別人現有的完整,一定能更有收獲和成就感。

如果文章對你有幫助,記得“在看+點贊+分享”!

主要流程包括:

1、確定目標(分割mask ---> 動漫人臉)

2、確定技術路線(語義分割 + 語義合成)

3、實現(數據集標注 + 模型調優 + 界面編寫)

PS:原作者并沒有開源數據集和代碼, 不過給了所有參考資料的源碼和數據集鏈接!復現應該沒有問題


目標

該項目的目標是建立一個深度學習模型,從分割mask生成動漫人臉肖像。

segmentation mask to anime face portrait

在這個項目中,首先手動標注一小批圖像。然后使用數據增強和 U-Net 模型來乘以分割mask的數量來構建數據集。最后,訓練一個 GauGAN 模型,用于從分割mask中合成動漫人臉。

1. 語義分割

語義分割是為圖像中的每個像素分配標簽(也稱為類 id)的過程。它的結果是一個分割mask,它是一個大小為高度 * 寬度的數組,每個像素都包含一個類 ID。

class id: 0 = background, 5 = hair

1.1 Dataset

在進入圖像生成任務之前,我們需要一個分割mask數據集,用于訓練生成模型將mask轉換為圖像。

不幸的是,我在互聯網上找不到任何動漫人臉分割數據集。盡管如此,Danbooru2019-Portraits 上有一個動漫肖像(512 x 512px)數據集。所以我決定從 Danbooru 肖像中標注的分割mask。

數據集鏈接:https://www.gwern.net/Crops#danbooru2019-portraits

1.2 Annotation

要標注圖像,我們必須確定類。最初的想法是列出 15 個類:

background, body, ear, face, eyeball, pupil, eyelash, nose, mouth, hair, hair_accessory, eyebrow, glasses, clothes, hand

后來為了簡單起見,將其縮減為 7 個類,最終的類列表如下:

background, skin, face, eye, mouth, hair, clothes

有許多不同的注釋工具,這里使用的是 labelme。

https://github.com/wkentaro/labelme

labelme GUI

在這項乏味的工作上辛勤工作數周后,設法標注了 200 張圖像

examples of annotated masks

left: original image, middle: segmentation mask, right: visualization of the annotation

1.3 Data Augmentation

當然,200 張帶注釋的圖像不足以讓我們訓練我們的網絡。我們需要使用數據增強技術來增加數據集的大小。

通過隨機旋轉、鏡像和扭曲圖像,我從這 200 個樣本中生成了 3000 多個數據。換句話說,現在我有 3200 個數據。

examples of augmented masks

然而,這些數據在內容和風格方面高度重復,因為它們僅從 200 個樣本中擴充而來。為了訓練網絡將分割掩碼轉換為高質量和多樣化的動漫面孔,我們需要的不僅僅是 200 + 3000 個數據點。因此,我將首先使用這些數據來訓練一個 U-Net 模型來學習從動漫人臉到分割掩碼的翻譯。然后我會將整個 Danbooru 肖像數據集輸入到經過訓練的 U-Net 模型中,以生成更多不同人臉的分割掩碼。

anime face portraits to segmentation mask

1.4 U-Net

U-Net 最初是為了分割醫學圖像進行診斷而引入的。它通過使用跳躍連接來解決傳統 FCN(全卷積網絡)中發生的信息丟失問題,在精確分割方面做得非常好。

U-Net 的架構與 Autoencoder 相似,但從下采樣端到上采樣端有額外的連接層。

source:?https://arxiv.org/abs/1505.04597

在下采樣部分,我使用預訓練的 MobileNetV2 從輸入圖像中提取特征。在上采樣部分,我使用了由 Conv2DTranspose、Batchnorm 和 ReLU 層組成的塊。

U-Net v1, v2 architecture

在我的 U-Net 版本 1 中,輸入和輸出大小為 128 x 128px。經過訓練的模型確實學習了從動漫人臉到分割mask的非常好的映射。但由于我想在我后來的合成模型中擁有 512 x 512px 的輸入和輸出,我將 U-Net 輸出的大小調整為 512 x 512px 并進行插值。然而,結果看起來是像素化的,它未能捕捉到出現在小區域(例如嘴巴)中的某些類別。

在版本 2 中,我只是將輸入和輸出大小更改為 512 x 512px(我一開始并沒有這樣做,因為我不希望輸出嘈雜并在圖像中令人困惑的區域中填充隨機點,例如 衣服)。正如我所料,v2 的輸出很嘈雜。不過,它們看起來比 v1 更好。

U-Net v3 architecture

在版本 3 中,我嘗試通過用 UpSampling2D 層替換 Conv2DTranspose 層來減輕噪音和棋盤偽影。現在的結果比 v2 的要好得多。噪音更少,棋盤偽影更少。

checkerboard artifacts of v2

U-Net segmentation results

最后,我將整個 Danbooru 數據集輸入 U-Net v3 以構建我的分割掩碼數據集。

2. 圖像語義合成

現在,我們有了分割蒙版數據集,是時候深入研究主要任務——圖像語義合成,正如之前所說,這不過是從分割mask到真實圖像的轉換的一個花哨的名稱。

Semantic Image Synthesis: segmentation mask to anime face portrait

2.1 GauGAN

source:?https://github.com/NVlabs/SPADE

GauGAN 由 Nvidia 開發,用于從分割mask合成逼真的圖像。在他們的展示網站上,他們展示了 GauGAN 如何出色地通過幾筆畫來生成逼真的風景圖像。

demo鏈接:https://www.nvidia.com/en-us/research/ai-playground/

GauGAN architecture

上圖展示了 GauGAN 模型的架構。綠色塊完全代表發電機。鑒別器是一個 PatchGAN。

2.2 SPADE

source:?https://nvlabs.github.io/SPADE/

GauGAN 的核心是 SPADE(Spatially-Adaptive Denormalization)模塊,它是從 Batch Norm 修改而來的歸一化層。它旨在克服 pix2pixHD 中的挑戰:在具有統一類 ID 的大區域丟失語義信息。

這是通過將 Conv 層引入Batch Norm來解決的,這樣它具有不同的參數集(β,γ),這些參數以分割mask為條件,并且會隨著不同的區域而變化。這意味著 SPADE 允許生成器在統一標簽區域中學習更多細節。

因此,在我們的問題中,生成的圖像可能如下所示:

2.3 Pretrained Encoder

encoder?實際上是可選的,因為可以直接從高斯分布中采樣 z(潛在向量)而無需任何輸入(就像 vanilla GAN)。這里使用了encoder?,因為我想用參考圖像對生成的圖像進行樣式設置。

VAE architecture

由于與encoder一起訓練 GauGAN 是不穩定的,需要更多的時間和資源,所以我提前使用 VAE 訓練了我的編碼器,然后在 GauGAN 模型的訓練過程中使用預訓練的encoder對 z 進行采樣。

2.4 Results

以下是從不同的分割mask和參考圖像生成的圖像的結果。

semantic image synthesis results

2.5?Latent Attribute Vectors

除了使用參考圖像來控制輸出圖像的風格外,我們還可以直接操縱潛在向量 z 來做到這一點。為此,我們首先需要找出潛在空間中的屬性向量。

動漫角色面部最重要的屬性之一是頭發顏色。但是,由于數據集沒有帶有頭發顏色的標簽,我必須自己使用 i2v 來標記它們,i2v 是一個用于估計插圖標簽的庫。然后,我們可以通過使用 t-SNE 將樣本圖像的潛在向量投影到 2D 空間來可視化潛在空間以及估計的標簽。

t-SNE of 4000 samples (estimated hair colors are indicated by image border colors)

最后,通過計算不同標簽的潛在向量之間的距離和方向,我們可以得到屬性向量。下面的動畫演示了使用提取的屬性向量在頭發顏色之間進行的轉換。

3. GUI

使用 python tkinter 庫創建了一個 GUI,用于編輯生成的圖像和分割mask。以下是演示視頻:

4. 總結

這個項目還有改進的空間,尤其是語義分割模型(U-Net)和語義圖像合成模型(GauGAN)。以下是未來要做的事情的清單:

  • 尋找更好的模型架構以從原始圖像中獲得更準確的分割掩碼

  • 改進 GauGAN 模型以消除頭發區域出現的噪聲

  • 訓練生成模型以生成隨機分割mask

參考資料

[1] D. Gwern Branwen, “Anime Crop Datasets: Faces, Figures, & Hands”, Gwern.net, 2022.?https://www.gwern.net/Crops#danbooru2019-portraits

[2] “ wkentaro/labelme: Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation).”, GitHub, 2022.?https://github.com/wkentaro/labelme

[3] O. Ronneberger, P. Fischer and T. Brox, “U-Net: Convolutional Networks for Biomedical Image Segmentation”, arXiv.org, 2022.?https://arxiv.org/abs/1505.04597

[4] Odena, et al., “Deconvolution and Checkerboard Artifacts”, Distill, 2016.?http://doi.org/10.23915/distill.00003

[5] “The NVIDIA AI Playground”, NVIDIA, 2022.?https://www.nvidia.com/en-us/research/ai-playground/

[6] “NVlabs/SPADE: Semantic Image Synthesis with SPADE”, GitHub, 2022.?https://github.com/NVlabs/SPADE

[7] “Semantic Image Synthesis with Spatially-Adaptive Normalization”, Nvlabs.github.io, 2022.?https://nvlabs.github.io/SPADE/

[8] “rezoo/illustration2vec: A simple deep learning library for estimating a set of tags and extracting semantic feature vectors from given illustrations.”, GitHub, 2022.?https://github.com/rezoo/illustration2vec

往期精彩回顧適合初學者入門人工智能的路線及資料下載(圖文+視頻)機器學習入門系列下載中國大學慕課《機器學習》(黃海廣主講)機器學習及深度學習筆記等資料打印《統計學習方法》的代碼復現專輯 AI基礎下載機器學習交流qq群955171419,加入微信群請掃碼:

總結

以上是生活随笔為你收集整理的【深度学习】绝了!分割mask生成动漫人脸!爆肝数周,从零搭建的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。