ホームページ テクノロジー周辺機器 AI 敵対的生成ネットワーク、AI が写真をコミック風に変換

敵対的生成ネットワーク、AI が写真をコミック風に変換

Apr 11, 2023 pm 09:58 PM
写真 ai gan

###こんにちは、みんな。

最近みんな AI ペイントで遊んでいます。GitHub でオープンソース プロジェクトを見つけたので共有します。

敵対的生成ネットワーク、AI が写真をコミック風に変換

今日共有したプロジェクトは、GAN 敵対的生成ネットワークを使用して実装されています。GAN の原理と実践については、これまでに多くの記事を共有しました。さらに詳しく知りたい友人は、次の記事を読むことができますそれは歴史的な記事です。

ソース コードとデータ セットは記事の最後で入手できるので、プロジェクトのトレーニング方法と実行方法を共有しましょう。

1. 環境を準備します

tensorflow-gpu 1.15.0 をインストールし、GPU グラフィックス カードとして 2080Ti を使用し、cuda バージョン 10.0 を使用します。

git プロジェクトの AnimeGANv2 ソース コードをダウンロードします。

環境を設定したら、データセットと vgg19 を準備する必要があります。

敵対的生成ネットワーク、AI が写真をコミック風に変換

dataset.zip 圧縮ファイルをダウンロードします。このファイルには、GAN トレーニング用の 6,000 枚の実際の画像と 2,000 枚のコミック画像が含まれています。

敵対的生成ネットワーク、AI が写真をコミック風に変換

vgg19 は損失の計算に使用されます。これについては、後で詳しく説明します。

2. ネットワーク モデル

敵対的生成ネットワークでは、ジェネレーターとディスクリミネーターの 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)
ログイン後にコピー

ジェネレーターのメイン モジュールは逆残差ブロックです

敵対的生成ネットワーク、AI が写真をコミック風に変換

残差構造( 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 の埋め込み操作に少し似ています。

Eembedding は単語をベクトルに変換すること、VGG19 は画像をベクトルに変換することです。

敵対的生成ネットワーク、AI が写真をコミック風に変換

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 は実画像の計算に使用されます。それぞれ、絵の喪失(パラメーターフェイク)、生成された絵の喪失(パラメーターフェイク)、漫画スタイル(パラメーターアニメ)の世代です。

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
ログイン後にコピー

最後に、これら 2 つの損失に異なる重みを与えることで、ジェネレーターによって生成された画像が実際の画像の外観を保持するだけでなく、コミック スタイルに移行するようになります

4. トレーニング

プロジェクト ディレクトリで次のコマンドを実行してトレーニングを開始します

python train.py --dataset Hayao --epoch 101 --init_epoch 10
ログイン後にコピー

操作が成功すると、データが表示されます。

敵対的生成ネットワーク、AI が写真をコミック風に変換#同時に、損失が減少していることもわかります。

ソース コードとデータ セットはパッケージ化されています。必要な場合は、コメント エリアにメッセージを残してください。

この記事が役に立ったと思われる場合は、クリックして読んでいただければ励みになります。今後も優れた Python AI プロジェクトを共有していきます。

以上が敵対的生成ネットワーク、AI が写真をコミック風に変換の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

vue.jsのストリングをオブジェクトに変換するためにどのような方法が使用されますか? vue.jsのストリングをオブジェクトに変換するためにどのような方法が使用されますか? Apr 07, 2025 pm 09:39 PM

vue.jsのオブジェクトに文字列を変換する場合、標準のjson文字列にはjson.parse()が推奨されます。非標準のJSON文字列の場合、文字列は正規表現を使用して処理し、フォーマットまたはデコードされたURLエンコードに従ってメソッドを削減できます。文字列形式に従って適切な方法を選択し、バグを避けるためにセキュリティとエンコードの問題に注意してください。

インストール後にMySQLの使用方法 インストール後にMySQLの使用方法 Apr 08, 2025 am 11:48 AM

この記事では、MySQLデータベースの操作を紹介します。まず、MySQLWorkBenchやコマンドラインクライアントなど、MySQLクライアントをインストールする必要があります。 1. mysql-uroot-pコマンドを使用してサーバーに接続し、ルートアカウントパスワードでログインします。 2。CreatedAtaBaseを使用してデータベースを作成し、データベースを選択します。 3. createTableを使用してテーブルを作成し、フィールドとデータ型を定義します。 4. INSERTINTOを使用してデータを挿入し、データをクエリし、更新することでデータを更新し、削除してデータを削除します。これらの手順を習得することによってのみ、一般的な問題に対処することを学び、データベースのパフォーマンスを最適化することでMySQLを効率的に使用できます。

MySQLを解決する方法は開始できません MySQLを解決する方法は開始できません Apr 08, 2025 pm 02:21 PM

MySQLの起動が失敗する理由はたくさんあり、エラーログをチェックすることで診断できます。一般的な原因には、ポートの競合(ポート占有率をチェックして構成の変更)、許可の問題(ユーザー許可を実行するサービスを確認)、構成ファイルエラー(パラメーター設定のチェック)、データディレクトリの破損(テーブルスペースの復元)、INNODBテーブルスペースの問題(IBDATA1ファイルのチェック)、プラグインロード障害(エラーログのチェック)が含まれます。問題を解決するときは、エラーログに基づいてそれらを分析し、問題の根本原因を見つけ、問題を防ぐために定期的にデータをバックアップする習慣を開発する必要があります。

Laravelの地理空間:インタラクティブマップと大量のデータの最適化 Laravelの地理空間:インタラクティブマップと大量のデータの最適化 Apr 08, 2025 pm 12:24 PM

700万のレコードを効率的に処理し、地理空間技術を使用したインタラクティブマップを作成します。この記事では、LaravelとMySQLを使用して700万を超えるレコードを効率的に処理し、それらをインタラクティブなマップの視覚化に変換する方法について説明します。最初の課題プロジェクトの要件:MySQLデータベースに700万のレコードを使用して貴重な洞察を抽出します。多くの人は最初に言語をプログラミングすることを検討しますが、データベース自体を無視します。ニーズを満たすことができますか?データ移行または構造調​​整は必要ですか? MySQLはこのような大きなデータ負荷に耐えることができますか?予備分析:キーフィルターとプロパティを特定する必要があります。分析後、ソリューションに関連している属性はわずかであることがわかりました。フィルターの実現可能性を確認し、検索を最適化するためにいくつかの制限を設定しました。都市に基づくマップ検索

Vue Axiosのタイムアウトを設定する方法 Vue Axiosのタイムアウトを設定する方法 Apr 07, 2025 pm 10:03 PM

Vue axiosのタイムアウトを設定するために、Axiosインスタンスを作成してタイムアウトオプションを指定できます。グローバル設定:Vue.Prototype。$ axios = axios.create({Timeout:5000});単一のリクエストで:this。$ axios.get( '/api/users'、{timeout:10000})。

MySQLインストール後にデータベースのパフォーマンスを最適化する方法 MySQLインストール後にデータベースのパフォーマンスを最適化する方法 Apr 08, 2025 am 11:36 AM

MySQLパフォーマンスの最適化は、インストール構成、インデックス作成、クエリの最適化、監視、チューニングの3つの側面から開始する必要があります。 1。インストール後、INNODB_BUFFER_POOL_SIZEパラメーターやclose query_cache_sizeなど、サーバーの構成に従ってmy.cnfファイルを調整する必要があります。 2。過度のインデックスを回避するための適切なインデックスを作成し、説明コマンドを使用して実行計画を分析するなど、クエリステートメントを最適化します。 3. MySQL独自の監視ツール(ShowProcessList、ShowStatus)を使用して、データベースの健康を監視し、定期的にデータベースをバックアップして整理します。これらの手順を継続的に最適化することによってのみ、MySQLデータベースのパフォーマンスを改善できます。

vue.js文字列タイプの配列をオブジェクトの配列に変換する方法は? vue.js文字列タイプの配列をオブジェクトの配列に変換する方法は? Apr 07, 2025 pm 09:36 PM

概要:Vue.js文字列配列をオブジェクト配列に変換するための次の方法があります。基本方法:定期的なフォーマットデータに合わせてマップ関数を使用します。高度なゲームプレイ:正規表現を使用すると、複雑な形式を処理できますが、慎重に記述して考慮する必要があります。パフォーマンスの最適化:大量のデータを考慮すると、非同期操作または効率的なデータ処理ライブラリを使用できます。ベストプラクティス:コードスタイルをクリアし、意味のある変数名とコメントを使用して、コードを簡潔に保ちます。

リモートシニアバックエンジニア(プラットフォーム)がサークルが必要です リモートシニアバックエンジニア(プラットフォーム)がサークルが必要です Apr 08, 2025 pm 12:27 PM

リモートシニアバックエンジニアの求人事業者:サークル場所:リモートオフィスジョブタイプ:フルタイム給与:$ 130,000- $ 140,000職務記述書サークルモバイルアプリケーションとパブリックAPI関連機能の研究開発に参加します。ソフトウェア開発ライフサイクル全体をカバーします。主な責任は、RubyonRailsに基づいて独立して開発作業を完了し、React/Redux/Relay Front-Endチームと協力しています。 Webアプリケーションのコア機能と改善を構築し、機能設計プロセス全体でデザイナーとリーダーシップと緊密に連携します。肯定的な開発プロセスを促進し、反復速度を優先します。 6年以上の複雑なWebアプリケーションバックエンドが必要です

See all articles