ホームページ テクノロジー周辺機器 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)

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

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

mysqlはjsonを返すことができますか mysqlはjsonを返すことができますか Apr 08, 2025 pm 03:09 PM

MySQLはJSONデータを返すことができます。 json_extract関数はフィールド値を抽出します。複雑なクエリについては、Where句を使用してJSONデータをフィルタリングすることを検討できますが、そのパフォーマンスへの影響に注意してください。 JSONに対するMySQLのサポートは絶えず増加しており、最新バージョンと機能に注意を払うことをお勧めします。

酸性特性を理解する:信頼できるデータベースの柱 酸性特性を理解する:信頼できるデータベースの柱 Apr 08, 2025 pm 06:33 PM

データベース酸属性の詳細な説明酸属性は、データベーストランザクションの信頼性と一貫性を確保するための一連のルールです。データベースシステムがトランザクションを処理する方法を定義し、システムのクラッシュ、停電、または複数のユーザーの同時アクセスの場合でも、データの整合性と精度を確保します。酸属性の概要原子性:トランザクションは不可分な単位と見なされます。どの部分も失敗し、トランザクション全体がロールバックされ、データベースは変更を保持しません。たとえば、銀行の譲渡が1つのアカウントから控除されているが別のア​​カウントに増加しない場合、操作全体が取り消されます。 TRANSACTION; updateaccountssetbalance = balance-100wh

マスターSQL制限条項:クエリの行数を制御する マスターSQL制限条項:クエリの行数を制御する Apr 08, 2025 pm 07:00 PM

sqllimit句:クエリ結果の行数を制御します。 SQLの制限条項は、クエリによって返される行数を制限するために使用されます。これは、大規模なデータセット、パジネートされたディスプレイ、テストデータを処理する場合に非常に便利であり、クエリ効率を効果的に改善することができます。構文の基本的な構文:SelectColumn1、column2、... FromTable_nameLimitnumber_of_rows; number_of_rows:返された行の数を指定します。オフセットの構文:SelectColumn1、column2、... FromTable_nameLimitoffset、number_of_rows; offset:skip

高負荷アプリケーションのMySQLパフォーマンスを最適化する方法は? 高負荷アプリケーションのMySQLパフォーマンスを最適化する方法は? Apr 08, 2025 pm 06:03 PM

MySQLデータベースパフォーマンス最適化ガイドリソース集約型アプリケーションでは、MySQLデータベースが重要な役割を果たし、大規模なトランザクションの管理を担当しています。ただし、アプリケーションのスケールが拡大すると、データベースパフォーマンスのボトルネックが制約になることがよくあります。この記事では、一連の効果的なMySQLパフォーマンス最適化戦略を検討して、アプリケーションが高負荷の下で効率的で応答性の高いままであることを保証します。実際のケースを組み合わせて、インデックス作成、クエリ最適化、データベース設計、キャッシュなどの詳細な主要なテクノロジーを説明します。 1.データベースアーキテクチャの設計と最適化されたデータベースアーキテクチャは、MySQLパフォーマンスの最適化の基礎です。いくつかのコア原則は次のとおりです。適切なデータ型を選択し、ニーズを満たす最小のデータ型を選択すると、ストレージスペースを節約するだけでなく、データ処理速度を向上させることもできます。

MySQLの主な鍵はヌルにすることができます MySQLの主な鍵はヌルにすることができます Apr 08, 2025 pm 03:03 PM

MySQLプライマリキーは、データベース内の各行を一意に識別するキー属性であるため、空にすることはできません。主キーが空になる可能性がある場合、レコードを一意に識別することはできません。これにより、データの混乱が発生します。一次キーとして自己挿入整数列またはUUIDを使用する場合、効率やスペース占有などの要因を考慮し、適切なソリューションを選択する必要があります。

MongoDBデータベースパスワードを表示するNAVICATの方法 MongoDBデータベースパスワードを表示するNAVICATの方法 Apr 08, 2025 pm 09:39 PM

Hash値として保存されているため、Navicatを介してMongoDBパスワードを直接表示することは不可能です。紛失したパスワードを取得する方法:1。パスワードのリセット。 2。構成ファイルを確認します(ハッシュ値が含まれる場合があります)。 3.コードを確認します(パスワードをハードコードできます)。

Prometheus MySQL ExporterでMySQLおよびMariadb液滴を監視します Prometheus MySQL ExporterでMySQLおよびMariadb液滴を監視します Apr 08, 2025 pm 02:42 PM

MySQLおよびMariaDBデータベースの効果的な監視は、最適なパフォーマンスを維持し、潜在的なボトルネックを特定し、システム全体の信頼性を確保するために重要です。 Prometheus MySQL Exporterは、プロアクティブな管理とトラブルシューティングに重要なデータベースメトリックに関する詳細な洞察を提供する強力なツールです。

See all articles