DCGANを用いた 画像生成システム 電気電子工学科 T215079 山田 真司 白井研究室
動機および研究背景 ラフな場での発表資料やパンフレットなどにイラストなどの画像が利用され ることが多い。 ラフな場での発表資料やパンフレットなどにイラストなどの画像が利用され ることが多い。 イラストなどの画像は製作者が著作権を有しており、無断の使用や複写は 財産権の侵害に当たるなど利用については注意を払う必要がある。 自身で制作したものならば著作権の心配は無用。しかしながら素人がイラ ストを作成するのはなかなか難しいため、AIによる解決を図ろうと思い立っ た。 https://www.irasutoya.com/
動機および研究背景 GAN(競争的生成ネットワーク)を利用した画像生成技術は最近注目を浴びはじめ てる。 横顔から生成した顔画像 (左:本物、右:生成画像) Rui Huangら https://arxiv.org/abs/1704.04086
研究目的 著作権などの制約無しに、イラストの作成、利用を可能にするシステムの構築 画像生成にあたり、製作者の主観で目的の画像の分類分けを行い、狙った画像 が出来るようにする。
GAN(競争的生成ネットワーク)について GAN(Generative Adversarial Networks=競争的生成ネットワーク)とは人工知能の アルゴリズムの一つ。 生成ネットワーク(生成器)と、識別ネットワーク(識別機)の二つを学習させ、両者の 均衡がとれた状態を学習目標としたネットワーク 生成器 識別成功 noise 生成データ 識別器 識別器の結果 訓練データ 識別失敗
DCGANについて GANに対して畳み込みニューラルネット(CNN)を組み合わせたネットワークモ デル 生成器 画像出力 生成器 入力テンソル Alec Radford ら (2015) https://arxiv.org/abs/1511.06434
画像システムの概要
開発環境 学習時には学内GPUサーバーを利用 パッケージ Anaconda3 使用言語 Python3.6.6 追加ライブラリ Keras2.2.0 TensorFlow-gpu 1.11.0
DCGANによる画像生成 目的の画像情報の入力 画像の出力 Z変数 生成データ(不正解データ) 生成器 画像の種類、特徴の情報 識別成功 識別器 訓練データ (正解データ) 識別器の結果 識別失敗
識別器に関して 入力→ 128×128 RGB画像 出力→ 0 (不正解) or 1 (正解) 不正解→偽物と判断 正解→本物と判断 Layer (type) Output Shape Param # =========================================================== conv2d_1 (Conv2D) (None, 64, 64, 32) 896 _________________________________________________________________ leaky_re_lu_1 (LeakyReLU) (None, 64, 64, 32) 0 dropout_1 (Dropout) (None, 64, 64, 32) 0 conv2d_2 (Conv2D) (None, 32, 32, 64) 18496 leaky_re_lu_2 (LeakyReLU) (None, 32, 32, 64) 0 dropout_2 (Dropout) (None, 32, 32, 64) 0 batch_normalization_1 (Batch (None, 32, 32, 64) 256 conv2d_3 (Conv2D) (None, 16, 16, 128) 73856 leaky_re_lu_3 (LeakyReLU) (None, 16, 16, 128) 0 dropout_3 (Dropout) (None, 16, 16, 128) 0 batch_normalization_2 (Batch (None, 16, 16, 128) 512 conv2d_4 (Conv2D) (None, 16, 16, 256) 295168 leaky_re_lu_4 (LeakyReLU) (None, 16, 16, 256) 0 dropout_4 (Dropout) (None, 16, 16, 256) 0 flatten_1 (Flatten) (None, 65536) 0 dense_1 (Dense) (None, 1) 65537 activation_1 (Activation) (None, 1) 0 ============================================== Total params: 454,721 Trainable params: 454,337 Non-trainable params: 384 識別器に関して 入力→ 128×128 RGB画像 出力→ 0 (不正解) or 1 (正解) 不正解→偽物と判断 正解→本物と判断
識別器の学習について① 損失関数:2値クロスエントロピー 最適化関数:Adam 訓練データ (正解データ) 識別器 本物=1 偽物=0 学習しない Trainable=False 生成器 Z変数 生成画像 (不正解データ)
識別器の学習について② 正解データと不正解データを一つにして訓練データとするのではなく 訓練データ(正解データ) 生成画像 (不正解データ) 訓練データ 正解データと不正解データを一つにして訓練データとするのではなく バッチごとに正解データと不正解データを分けて学習させる。 訓練データ(正解データ) 訓練データ 生成画像 (不正解データ) 訓練データ
生成器に関して 入力→各要素が-1~1の100次元ベクトル 出力→128×128 RGB画像 Alec Radford ら (2015) _________________________________________________________________ Layer (type) Output Shape Param # ============================================= dense_2 (Dense) (None, 131072) 13238272 reshape_1 (Reshape) (None, 32, 32, 128) 0 up_sampling2d_1 (UpSampling2 (None, 64, 64, 128) 0 conv2d_5 (Conv2D) (None, 64, 64, 128) 147584 activation_2 (Activation) (None, 64, 64, 128) 0 batch_normalization_3 (Batch (None, 64, 64, 128) 512 up_sampling2d_2 (UpSampling2 (None, 128, 128, 128) 0 conv2d_6 (Conv2D) (None, 128, 128, 64) 73792 activation_3 (Activation) (None, 128, 128, 64) 0 batch_normalization_4 (Batch (None, 128, 128, 64) 256 conv2d_7 (Conv2D) (None, 128, 128, 3) 1731 activation_4 (Activation) (None, 128, 128, 3) 0 Total params: 13,462,147 Trainable params: 13,461,763 Non-trainable params: 384 入力→各要素が-1~1の100次元ベクトル 出力→128×128 RGB画像 Alec Radford ら (2015) https://arxiv.org/abs/1511.06434
生成器の学習に関して 損失関数:2値クロスエントロピー 最適化関数:Adam 生成器 生成画像 Z変数 学習しない Trainable=False 識別器 本物=1 偽物=0
学習曲線などを載せたい
訓練データについて① イラストのフリー素材を使用。サイズ→460×680 約250種のキャラクターの全身画像をデータ拡張によ り1000枚程度に ある程度の学習を進めたが形にならず断念 他にも、プラモデルの正面写真(600枚、128×128)や ポケットモンスターの画像(918枚、160×160)なども試 したがどれも断念 訓練画像 生成画像 訓練画像 生成画像 訓練画像 生成画像
訓練データについて② 画像に共通するものが多いと形になりやすいのでは ないか 画像に共通するものが多いと形になりやすいのでは ないか 3Dイラスト(実物写真)や立ち絵などの画像は情報量 が多い分、難しいのではないか 訓練画像 生成画像 立ち絵画像に対してアニメ顔検出を適用し、顔画像 の取得。データ拡張し2600枚ほどの顔画像で学習。 サイズは128×128 →顔らしきものは出来たが、精度が悪い 訓練画像 生成画像
訓練データの決定 画像に共通しているものが多い データ数が多く、種類が少ないもの 2Dイラストかつ画像の中の情報が少ないもの →映像ならば解決できるのでは 「名探偵コナン 異次元の狙撃手」を選択 映画作品の動画から静止画像を約12万枚キャプチャ キャプチャ画像にアニメ顔検出を行い顔画像のみを選択 ノイズ除去を行い2万4000枚の訓練データを作成 https://www.yodobashi.com/
画像の出力 出力した画像は顔になるものもあれば、顔と呼ぶには難しいものもあった 出力部にアニメ顔認識のフィルタを通過させる フィルタを通過した複数の画像の平均をとった画像を最終的な出力とした
特徴抽出① 出力された顔画像の中から取 り出したい特徴を持つ画像群 をつくる 画像群のZ変数の平均を特徴 をとる 出力画像群 出力された顔画像の中から取 り出したい特徴を持つ画像群 をつくる 画像群のZ変数の平均を特徴 をとる とった平均のZ変数同士の演算 から特徴を抽出する Z変数① Z変数② Z変数③ 平均画像 平均画像
特徴抽出② 四則演算の容量で特徴を付け足すことが可能 Z変数① Z変数② Z変数③
結果 顔に見える画像の出力には成功。 特徴抽出に関しては、~のキャラクターに似ている顔のような特徴は抽出出来た。 しかしながら、コナンのキャラクターに似た物になってしまい、著作権の観点から見ると怪しいものなった。 訓練画像 生成画像
考察、発展 訓練データ自体をキャラクター自体の種類が少なく、著作権フリーの素材を大量に用意することが可能であれば著作権の問題は解決できるであろうと思われる。 今後、訓練データ自体の画素数向上やデータ数が解決するならば、より高品質の画像が生成することが可能であると思われる。
ご清聴 ありがとうございます 質問、コメントをお願いします。
アニメ顔画像認識 Open CVのカスケードとしてアニメ顔認識が https://github.com/nagadomi/lbpcascade_animeface こちらのGitHub にて公開されている。 訓練データ数は約2万5千枚
Z変数
訓練データ①
訓練データ②
訓練データ③
訓練データ④
参考文献 Ian J.Goodfellow ら (2014)/ 『Generative Adversarial Networks』 Alec Radford ら (2015)/ 「UnsupervisedRepresentationLearningwithDeepConvolutionalGenerativeAdversarial Networks」 Tom White ら ( 2016) / 「Sampling Generative Networks」 [4]坂本俊之 / (2017)/C&R研究所 「Chainerで作るコンテンツ自動生成AIプログラミング入門」