生成對抗網絡,AI將圖片轉成漫畫風格
哈嘍,大家好。
最近大家都在玩 AI 繪畫,我在 GitHub 找了一個開源項目,跟大家分享一下。
今天分享的這個專案是用 GAN 生成對抗網路實現的,關於GAN的原理和實戰我們之前分享過很多文章,想了解的朋友可以去翻歷史文章。
原始碼和資料集文末獲取,以下分享如何訓練、運行專案。
1. 準備環境
安裝 tensorflow-gpu 1.15.0,GPU顯示卡使用2080Ti,cuda版本10.0。
git下載項目AnimeGANv2原始碼。
建置好環境後,還需要準備資料集和vgg19。
下載dataset.zip壓縮文件,裡麵包含 6k 張真實圖片和2k張漫畫圖片,用於GAN的訓練。
vgg19是用來計算損失的,下面會有詳細介紹。
2. 網路模型
產生對抗網路需要定義兩個模型,一個是生成器,一個是判別器。
生成器網路定義如下:
with tf.variable_scope('A'): inputs = Conv2DNormLReLU(inputs, 32, 7) inputs = Conv2DNormLReLU(inputs, 64, strides=2) inputs = Conv2DNormLReLU(inputs, 64) with tf.variable_scope('B'): inputs = Conv2DNormLReLU(inputs, 128, strides=2) inputs = Conv2DNormLReLU(inputs, 128) with tf.variable_scope('C'): inputs = Conv2DNormLReLU(inputs, 128) inputs = self.InvertedRes_block(inputs, 2, 256, 1, 'r1') inputs = self.InvertedRes_block(inputs, 2, 256, 1, 'r2') inputs = self.InvertedRes_block(inputs, 2, 256, 1, 'r3') inputs = self.InvertedRes_block(inputs, 2, 256, 1, 'r4') inputs = Conv2DNormLReLU(inputs, 128) with tf.variable_scope('D'): inputs = Unsample(inputs, 128) inputs = Conv2DNormLReLU(inputs, 128) with tf.variable_scope('E'): inputs = Unsample(inputs,64) inputs = Conv2DNormLReLU(inputs, 64) inputs = Conv2DNormLReLU(inputs, 32, 7) with tf.variable_scope('out_layer'): out = Conv2D(inputs, filters =3, kernel_size=1, strides=1) self.fake = tf.tanh(out)
生成器中主要的模組是反向殘差區塊
殘差結構( a)與反向殘差塊(b)
判別器網路結構如下:
def D_net(x_init,ch, n_dis,sn, scope, reuse): channel = ch // 2 with tf.variable_scope(scope, reuse=reuse): x = conv(x_init, channel, kernel=3, stride=1, pad=1, use_bias=False, sn=sn, scope='conv_0') x = lrelu(x, 0.2) for i in range(1, n_dis): x = conv(x, channel * 2, kernel=3, stride=2, pad=1, use_bias=False, sn=sn, scope='conv_s2_' + str(i)) x = lrelu(x, 0.2) x = conv(x, channel * 4, kernel=3, stride=1, pad=1, use_bias=False, sn=sn, scope='conv_s1_' + str(i)) x = layer_norm(x, scope='1_norm_' + str(i)) x = lrelu(x, 0.2) channel = channel * 2 x = conv(x, channel * 2, kernel=3, stride=1, pad=1, use_bias=False, sn=sn, scope='last_conv') x = layer_norm(x, scope='2_ins_norm') x = lrelu(x, 0.2) x = conv(x, channels=1, kernel=3, stride=1, pad=1, use_bias=False, sn=sn, scope='D_logit') return x
#3. 損失
計算損失之前先用VGG19網路將圖片向量化。這個過程有點像是NLP中的Embedding操作。
Eembedding是講詞轉換成向量,VGG19是講圖片轉換成向量。
VGG19定義
計算損失部分邏輯如下:
def con_sty_loss(vgg, real, anime, fake): # 真实生成對抗網絡,AI將圖片轉成漫畫風格向量化 vgg.build(real) real_feature_map = vgg.conv4_4_no_activation # 生成生成對抗網絡,AI將圖片轉成漫畫風格向量化 vgg.build(fake) fake_feature_map = vgg.conv4_4_no_activation # 漫画风格向量化 vgg.build(anime[:fake_feature_map.shape[0]]) anime_feature_map = vgg.conv4_4_no_activation # 真实生成對抗網絡,AI將圖片轉成漫畫風格与生成生成對抗網絡,AI將圖片轉成漫畫風格的损失 c_loss = L1_loss(real_feature_map, fake_feature_map) # 漫画风格与生成生成對抗網絡,AI將圖片轉成漫畫風格的损失 s_loss = style_loss(anime_feature_map, fake_feature_map) return c_loss, s_loss
這裡使用vgg19分別計算真實圖片(參數real)與生成的圖片(參數fake)的損失,產生的圖片(參數fake)與漫畫風格(參數anime)的損失。
c_loss, s_loss = con_sty_loss(self.vgg, self.real, self.anime_gray, self.generated) t_loss = self.con_weight * c_loss + self.sty_weight * s_loss + color_loss(self.real,self.generated) * self.color_weight + tv_loss
最終給這兩個損失不同的權重,這樣是的生成器生成的圖片,既保留了真實圖片的樣子,又向漫畫風格進行遷移
4. 訓練
在專案目錄下執行以下命令開始訓練
python train.py --dataset Hayao --epoch 101 --init_epoch 10
運行成功後,可以看到資料。
同時,也可以看到損失不斷下降。
原始碼和資料集都已經打包好了,需要的朋友留言區留言即可。
如果大家覺得本文對你有用就點個 在看 鼓勵一下吧,後續我會持續分享優秀的 Python AI 專案。
以上是生成對抗網絡,AI將圖片轉成漫畫風格的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

創建Oracle數據庫並非易事,需理解底層機制。 1. 需了解數據庫和Oracle DBMS的概念;2. 掌握SID、CDB(容器數據庫)、PDB(可插拔數據庫)等核心概念;3. 使用SQL*Plus創建CDB,再創建PDB,需指定大小、數據文件數、路徑等參數;4. 高級應用需調整字符集、內存等參數,並進行性能調優;5. 需注意磁盤空間、權限和參數設置,並持續監控和優化數據庫性能。 熟練掌握需不斷實踐,才能真正理解Oracle數據庫的創建和管理。

創建Oracle數據庫,常用方法是使用dbca圖形化工具,步驟如下:1. 使用dbca工具,設置dbName指定數據庫名;2. 設置sysPassword和systemPassword為強密碼;3. 設置characterSet和nationalCharacterSet為AL32UTF8;4. 設置memorySize和tablespaceSize根據實際需求調整;5. 指定logFile路徑。 高級方法為使用SQL命令手動創建,但更複雜易錯。 需要注意密碼強度、字符集選擇、表空間大小及內存

Oracle SQL語句的核心是SELECT、INSERT、UPDATE和DELETE,以及各種子句的靈活運用。理解語句背後的執行機制至關重要,如索引優化。高級用法包括子查詢、連接查詢、分析函數和PL/SQL。常見錯誤包括語法錯誤、性能問題和數據一致性問題。性能優化最佳實踐涉及使用適當的索引、避免使用SELECT *、優化WHERE子句和使用綁定變量。掌握Oracle SQL需要實踐,包括代碼編寫、調試、思考和理解底層機制。

MySQL 中字段操作指南:添加、修改和刪除字段。添加字段:ALTER TABLE table_name ADD column_name data_type [NOT NULL] [DEFAULT default_value] [PRIMARY KEY] [AUTO_INCREMENT]修改字段:ALTER TABLE table_name MODIFY column_name data_type [NOT NULL] [DEFAULT default_value] [PRIMARY KEY]

Oracle 數據庫的完整性約束可確保數據準確性,包括:NOT NULL:禁止空值;UNIQUE:保證唯一性,允許單個 NULL 值;PRIMARY KEY:主鍵約束,加強 UNIQUE,禁止 NULL 值;FOREIGN KEY:維護表間關係,外鍵引用主表主鍵;CHECK:根據條件限制列值。

嵌套查詢是一種在一個查詢中包含另一個查詢的方式,主要用於檢索滿足複雜條件、關聯多張表以及計算匯總值或統計信息的數據。實例示例包括:查找高於平均工資的僱員、查找特定類別的訂單以及計算每種產品的總訂購量。編寫嵌套查詢時,需要遵循:編寫子查詢、將其結果寫入外層查詢(使用別名或 AS 子句引用)、優化查詢性能(使用索引)。

Oracle 是全球最大的數據庫管理系統(DBMS)軟件公司,其主要產品包括以下功能:關係數據庫管理系統(Oracle 數據庫)開發工具(Oracle APEX、Oracle Visual Builder)中間件(Oracle WebLogic Server、Oracle SOA Suite)雲服務(Oracle Cloud Infrastructure)分析和商業智能(Oracle Analytics Cloud、Oracle Essbase)區塊鏈(Oracle Blockchain Pla

本文介紹如何在Debian系統上自定義Apache的日誌格式。以下步驟將指導您完成配置過程:第一步:訪問Apache配置文件Debian系統的Apache主配置文件通常位於/etc/apache2/apache2.conf或/etc/apache2/httpd.conf。使用以下命令以root權限打開配置文件:sudonano/etc/apache2/apache2.conf或sudonano/etc/apache2/httpd.conf第二步:定義自定義日誌格式找到或
