32
目次 1 序論 1 1.1 背景 ............................................ 1 1.2 目的 ............................................ 1 2 理論 2 2.1 機械学習とは ....................................... 2 2.2 ニューラルネットワークとは .............................. 2 2.3 Encoder-Decoder とは .................................. 3 2.4 Convolutional Neural Networks とは .......................... 3 2.5 Generative Adversarial Networks とは ......................... 4 2.6 ConditionalGAN とは .................................. 5 2.6.1 pix2pix ...................................... 5 2.7 CycleGAN とは ..................................... 6 2.8 StackGAN とは ..................................... 7 3 深層学習による自動着色 8 3.1 Automatic Image Colorization ............................. 8 3.2 PaintsChainer ...................................... 9 4 提案手法 10 4.1 Dataset の選択方法 ................................... 10 4.2 U-Net StackGAN .................................... 11 5 実装 12 5.1 CycleGAN の実装 .................................... 12 5.1.1 システム構成 ................................... 12 5.1.2 実装環境 ..................................... 12 5.1.3 ネットワーク構造 ................................ 13 5.2 StackGAN の実装 .................................... 14 5.2.1 システム構成 ................................... 14 5.2.2 実装環境 ..................................... 14 5.2.3 ネットワーク構造 ................................ 14 5.3 U-Net StackGAN の実装 ................................ 15 5.3.1 システム構成 ................................... 15 -i-

5.3 · のニューロンへと伝播させることで, ニューラルネットワークの出力から損失を求め, 全てのニューロン へと伝播させる方法を誤差逆伝播法という

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

目次

第 1章 序論 1

1.1 背景 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 目的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

第 2章 理論 2

2.1 機械学習とは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.2 ニューラルネットワークとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.3 Encoder-Decoderとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.4 Convolutional Neural Networksとは . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.5 Generative Adversarial Networksとは . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.6 ConditionalGANとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.6.1 pix2pix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.7 CycleGANとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.8 StackGANとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

第 3章 深層学習による自動着色 8

3.1 Automatic Image Colorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.2 PaintsChainer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

第 4章 提案手法 10

4.1 Datasetの選択方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

4.2 U-Net StackGAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

第 5章 実装 12

5.1 CycleGANの実装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

5.1.1 システム構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

5.1.2 実装環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

5.1.3 ネットワーク構造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

5.2 StackGANの実装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

5.2.1 システム構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

5.2.2 実装環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

5.2.3 ネットワーク構造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

5.3 U-Net StackGANの実装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

5.3.1 システム構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

- i -

5.3.2 実装環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

5.3.3 ネットワーク構造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

第 6章 実験 18

6.1 使用データ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

6.2 計算環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

6.3 各手法による自動着色 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

6.3.1 CycleGANによる実験結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

CycleGANによる着色結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

CycleGANの loss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

6.3.2 StackGANの実験結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

StackGANによる着色結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

StackGANの loss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

6.3.3 U-Net StackGANの実験結果 . . . . . . . . . . . . . . . . . . . . . . . . . . 22

U-Net StackGANによる着色結果 . . . . . . . . . . . . . . . . . . . . . . . 22

U-Net StackGANの loss . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

6.4 考察 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

6.4.1 CycleGANの考察 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

6.4.2 StackGANの考察 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

6.4.3 U-Net StackGANの考察 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

第 7章 結論 26

7.1 結論 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

謝辞 27

参考文献 28

- ii -

図目次

2.1 Encoder-Decoderの構成図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.2 CNNの構成図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.3 GANの構成図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.4 ConditionalGANの構成図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.5 U-Netのネットワーク図 引用元:https://arxiv.org/pdf/1505.04597.pdf(p.2) . 6

2.6 CycleGANの構成図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.7 StackGANの構成図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3.1 Automatic Image Colorization の構成図 引用元:http://hi.cs.waseda.ac.jp/

\~iizuka/projects/colorization/data/colorization_sig2016.pdf(p.4) . . . 8

3.2 Automatic Image Colorizationの実行結果 . . . . . . . . . . . . . . . . . . . . . . . 9

3.3 PaintsChainerの実行結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

4.1 Datasetの構成図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

4.2 U-Net StackGANの構成図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

5.1 CycleGANのシステム構成図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

5.2 StackGANのシステム構成図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

5.3 U-Net StackGANのシステム構成図 . . . . . . . . . . . . . . . . . . . . . . . . . . 16

6.1 CycleGANの実行結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

6.2 CycleGANの loss推移グラフ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

6.3 StackGANの実行結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

6.4 StackGANの loss推移グラフ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

6.5 U-Net StackGANの実行結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

6.6 StackGANの loss推移グラフ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

- iii -

表目次

5.1 CycleGAN Generatorのネットワーク構造 . . . . . . . . . . . . . . . . . . . . . . . 13

5.2 CycleGAN Discriminatorのネットワーク構造 . . . . . . . . . . . . . . . . . . . . . 13

5.3 StackGAN Generatorのネットワーク構造 . . . . . . . . . . . . . . . . . . . . . . . 15

5.4 StackGAN Discriminatorのネットワーク構造 . . . . . . . . . . . . . . . . . . . . . 15

5.5 U-Net StackGAN Generator Encoderのネットワーク構造 . . . . . . . . . . . . . . 17

5.6 U-Net StackGAN Generator Decoderのネットワーク構造 . . . . . . . . . . . . . . 17

5.7 U-Net StackGAN Discriminatorのネットワーク構造 . . . . . . . . . . . . . . . . . 17

- iv -

第 1章

序論

1.1 背景

近年,深層学習を含む人工知能技術は急速に発展を遂げている. それに伴い,医療現場での疾患候補

の示唆や, 自動運転の物体認識等, 幅広い分野で活用されている. 自動着色においても, 飯塚里志らが,

ディープネットワークを用いた大域特徴と局所特徴の学習による白黒写真の自動色付けという,色付け

に関する論文を発表した. これは,畳み込みネットワークモデル (Convolutional Neural Networks)を

利用し,白黒写真に対して自動着色を行う技術である. また,最近では, PaintsChainerという自動着色

サービスがリリースされた. これは, Generative Adversarial Networksを用いて,線画に対して自動着

色を行っている.

1.2 目的

本研究の目的は,装飾や背景などの細かい自動着色を実現させることである. これまで,畳み込みネッ

トワークモデル (Convolutional Neural Networks) を利用した白黒画像に対する自動着色技術はあっ

た. しかし,線画の着色には不向きであった. 近年では, Generative Adversarial Networksを用いて, 線

画の自動着色が実現され,線画の自動着色サービスとして PaintsChainerがリリースされた. この技術

は,人物の着色が中心で,細かい装飾等の着色には不向きである. その為,本研究では,入力データに線画

を用い,細部まで着色された画像を自動生成させることを目的とする.

- 1 -

第 2章

理論

2.1 機械学習とは

機械学習とは, 学習器に訓練データを学習させ,学習モデルを生成し, 生成された学習モデルを用い処

理を行う仕組みの事を指す. 学習器は,データから規則性やパターンを抽出するため,データを投入する

必要がある. この投入するデータを訓練データと言う. 訓練データを元に学習を行うため,生成されるモ

デルは,訓練データに依存する. 学習器に訓練データを入力し,学習を行わせることで,学習モデルが生

成される.

2.2 ニューラルネットワークとは

人間の神経細胞を数式で表現したものをパーセプトロンと言う. ニューラルネットワークとは,パー

セプトロンとパーセプトロンのつながりの強さを数式で,表現したものを指す. また,ニューラルネット

ワークは入力層,隠れ層,出力層から構成される. パーセプトロンのつながりの強さを数値で表現したも

のを重み (w)と言う. パーセプトロンは複数の入力 (x)をとり,一つの2進数を出力 (output)する. b

はバイアスといい,パーセプトロンが 1を出力する傾向の高さを示す. 数式は下記に示すように,簡単な

数学要素で構成される.

output(0) : w ∗ x+ b <= 0 (2.1)

output(1) : w ∗ x+ b > 0 (2.2)

このようなパーセプトロンを多数組み合わせ,複雑な関数近似を行うことが可能となる. また,隠れ層

は多層にすることが可能である. 隠れ層が多数存在する多層構造のニューラルネットワークよる機械学

習手法をディープラーニングと言う.

ニューラルネットワークに対する機械学習で使用される関数に,損失関数がある. ニューラルネット

ワークの出力に対する,正解データとの差を数値で返す. 損失関数はニューラルネットワークの学習時

に用いられ, 単純な数値で正解データとの差を表現する. 損失関数の返す値ののことを, 損失または誤

差,lossと言う. 損失関数はニューラルネットワークの出力の後に導入される関数である. そのため, 損

失関数は学習の際に使用される.

ニューラルネットワークの学習を行う際には, 損失関数が返す値をニューラルネットワーク内に向

かって逆順に伝播させる. この時,損失の値に,ニューロン内の計算式の微分をかけ合わせた値を 1つ前

- 2 -

のニューロンへと伝播させることで,ニューラルネットワークの出力から損失を求め,全てのニューロン

へと伝播させる方法を誤差逆伝播法という.

2.3 Encoder-Decoderとは

Encoder-Decoder は翻訳モデルの一種であり, 画像から画像への変換に一般的に用いられている.

Encoder-Decoderの構成図を図 2.1に示す.

図 2.1 Encoder-Decoderの構成図

図 2.1の抽象表現では Encodeされ,局所的な特徴が抽出される. しかし, Encodeを行う際,物体の

局所的特徴と全体的な位置情報はぼかされてしまう. その為,局所的な復元は難しい.

2.4 Convolutional Neural Networksとは

Convolutional Neural Networks(以下 CNN) とは,畳込みニューラルネットワークのことを指す. 畳

み込み層とプーリング層を含むニューラルネットワークである. CNNを図 2.2に示す.

図 2.2 CNNの構成図

CNNは,全結合ネットワークに比べ,階層を深くした場合に精度が上がらない問題が起こりにくいと

言われている.

- 3 -

2.5 Generative Adversarial Networksとは

Generative Adversarial Networks(以下 GAN)[1] とは深層学習のネットワークを用いた生成モデル

の一種である. Generator 部と Discriminator 部にニューラルネットワークを用いる. GAN の構成図

を図 2.3に示す.

図 2.3 GANの構成図

GANは,Generatorと Discriminatorの 2つのニューラルネットワークを競わせて学習を行う. その

為,Generatorと Discriminatorの lossの値は近い値が好ましい.

Generator は入力に, ノイズを使用する. 入力から, 正解データと同じような画像を生成する.

Discriminatorは入力に,正解データと Generatorの生成データを使用する.入力から,生成データが正

解データであるかを見分けさせる. Generatator は, Discriminator に Generatator の生成データを正

解データであると判別させるよう,学習を行う. このような学習を行うことで,人間でも生成させた画像

か判別できないような画像の生成を行うことが出来るようになる.

GANでは Generatorと Discriminatorが足並みを揃えて学習することが必要となる. Generatorと

Discriminator の何れかが相手より, 先に学習を進めてしまうと学習の遅れたネットワークの学習が不

可能となり,学習が破綻してしまう.

Discriminatorの関数は以下のように定義される. x は教師データとなる画像からのニューラルネッ

トワークの出力を示す. yは生成した結果となる画像からのニューラルネットワーク出力を示す.

lossD(x, y) = Σ f(−x) +Σ f(y) (2.3)

xの値が大きい程,損失関数の出力は0に近い値となる. また,yの値が小さい程,損失関数の出力は0

に近い値となる. 計算結果が,0に近づく方向へとニューラルネットワークを学習させる. その為,教師

データとなる画像からのニューラルネットワークの出力では大きな値を出力するように学習させる. ま

た,生成した結果となる画像からのニューラルネットワークの出力では,小さな値を出力するように学習

させる.

Generatorの損失関数は以下のように定義される.

lossG(y) = Σ f(−y) (2.4)

- 4 -

Generator の損失関数は生成した結果となる画像からのニューラルネットワーク出力の値が大きいほ

ど, 損失関数の出力は0に近づく. この損失関数を使用して Generator を学習させる時,Discriminator

の出力を大きな値にするように,ネットワークを学習させる.

2.6 ConditionalGANとは

ConditionalGAN[2]は,元画像とそれに対応したラベルをペアとして学習させる生成モデルである.

ConditionalGANの構成図を図 2.4に示す.

図 2.4 ConditionalGANの構成図

図 2.4では緑丸がラベル,青丸が正解データを示す. Generatorの入力に,ノイズとラベルの情報を用

いる. 入力を元に正解データに似たデータを生成する. Discriminatorに,ラベルと正解データを入力す

る. そのペアが正しいペアか偽物のペアか判定する. Generatorは, Discriminatorに Generatorの生成

データからなるペアが正しいペアであると判別させるよう学習を行う. ConditionalGANの Generator

には Encoder-Decoderが用いられている.

2.6.1 pix2pix

pix2pix[3]は ConditionalGANを用い,アーキテクチャ設計を行った GANである. Generatorには

U-Net[4]を使用している.

U-Netのネットワーク図を図 2.5に示す.

- 5 -

図 2.5 U-Netのネットワーク図 引用元:https://arxiv.org/pdf/1505.04597.pdf(p.2)

Encoder-Decoder では Encode を行う際, 局所的な復元は困難だった. U-Net では図 2.5 のように

Decodeする際, Encode時の畳込みを付属することにより,特徴を保持したまま, Decodeを行うことが

できる. Encodeと Decodeの画像サイズが同じものを深い層から統合を行う. これにより,局所的特徴

を保持し,全体的位置情報の復元が可能となる.

2.7 CycleGANとは

CycleGAN[5]は元データをある形に生成させ,生成したデータから元データに戻すような生成を行う.

CycleGANの構成図を図 2.6に示す.

図 2.6 CycleGANの構成図

CycleGANも ConditionalGANのように,入力にラベルと正解データからなるペアデータを用いる.

図 2.6 の緑丸がラベル, 青丸が正解データを示す. Generator の入力にラベルを与え, ラベルを元に正

解データに似たデータを生成させる. Discriminatorの入力には Generatorで生成されたデータと正解

データを用いる. Discriminator は, 入力データが正解データか生成データか判定する. Generator は,

Discriminatorに Generatorの生成データが,正解データであると判別させるよう,学習を行う.

次に, 生成データを, 再度 Generator に入力する. Generator は, 入力された生成データを元に, ラベ

ルに似た画像の生成を行う. Discriminator に Generator の生成したラベルと元のラベルを入力する.

Discriminatorは,生成ラベルが元のラベルか生成ラベルか判定する. 生成ラベルが,元のラベルである

と判別させるよう,学習を行う. 生成ラベルと元のラベルの出力が近いほど,生成データも正解データに

近いものが出力される.

- 6 -

2.8 StackGANとは

StackGAN[6] は GAN を 2 段階構造にすることでより精度の高い画像を生成するモデルである.

StackGANの構成図を図 2.7に示す.

図 2.7 StackGANの構成図

StackGANは GANを 2段階構造にし,図 2.7にあるように, 1段階目の GANを STAGE1, 2段階

目の GANを STAGE2という.

STAGE1 の Generator の入力には textdata と noise を用いる. textdata と noise から正解データ

に似たデータを生成する. STAGE1 の Discriminator の入力には STAGE1 の Generator で生成され

たデータと正解データを用いる. Discriminatorは,入力データが正解データか生成データか判定する.

Generatorは, Discriminatorに Generatorの生成データが,正解データであると判別させるよう,学習

を行う.

STAGE2 の Generator の入力には, STAGE1 の入力と同じ textdata と STAGE1 の Generator で

生成したデータを用いる. STAGE2では, textdataと STAGE1の Generatorで生成したデータから,

より高解像度のデータの生成を行う. STAGE2の Discriminatorの入力には STAGE2の Generatorで

生成されたデータと正解データを用いる. Discriminatorは,入力データが正解データか生成データか判

定する. Generatorは, Discriminatorに Generatorの生成データが,正解データであると判別させるよ

う,学習を行う.

STAGE1で色やレイアウト等大まかに判断した画像の生成を行う.STAGE2で STAGE1で生成さ

れた画像を元に修正した高解像度画像の生成を行う.

- 7 -

第 3章

深層学習による自動着色

3.1 Automatic Image Colorization

Automatic Image Colorization[7]とは,飯塚里志らが,ディープネットワークを用いた大域特徴と

局所特徴の学習による白黒写真の自動着色技術である.畳み込みネットワークモデル(CNN)を用い,

画像全体の構造を考慮した色付けを行っている. モデルの学習には画像分類の Dataset を用い, 画像

の色とラベルを同時に学習させることで,効果的に帯域特徴を学習できるようにしている. Automatic

Image Colorizationのモデル構造を図 3.1に示す.

図 3.1 Automatic Image Colorization の構成図 引用元:http://hi.cs.waseda.ac.jp/

\~iizuka/projects/colorization/data/colorization_sig2016.pdf(p.4)

Automatic Image Colorizationは,4つのネットワークで構成されている. 低レベル特徴ネットワー

ク,中レベル特徴ネットワーク,大域特徴ネットワーク,色付けネットワークである.モデルに白黒画像を

入力し,1/2サイズの彩度画像を出力する.この出力画像を 2倍にスケーリングし,入力画像と統合しカ

ラー画像を生成させている.

この技術は画像の輝度から彩度画像を生成し,入力データと彩度画像を統合しカラー画像を出力して

いる. 線のみで構成された線画はグレースケールのような輝度はない. その為,この技術では線画の着色

に向かない.

実際に Automatic Image Colorizationで着色を行った画像を図 3.2に示す. 線画の色が少し異なっ

てはいるが着色は出来ていない事が分かる.

- 8 -

図 3.2 Automatic Image Colorizationの実行結果

3.2 PaintsChainer

PaintsChainer[8]は深層学習を用いて線画の着色を行っている webサービスである. Datasetに着色

画像とその線画のペア画像を使用しており,60万件のペア画像を学習させている. 線画は着色画像から

OpenCV2 で dilate と absdiff を使用し, 抽出を行っている. PaintsChainer は, 生成モデルに pix2pix

を使用している. その為,局所的特徴と全体的位置情報が入力側と出力側で対応させ結合している.

実際に PaintsChainerで着色を行った画像を図 3.3に示す.

図 3.3 PaintsChainerの実行結果

人物や服などの着色は可能だが,赤丸の中のように,背景や細かい装飾等の自動着色はあまり自然な

色にならない事が分かる.

- 9 -

第 4章

提案手法

4.1 Datasetの選択方法

PaintsChainerでは,人物が主となる Datasetを使用していた. 本研究では,装飾や背景など細かい着

色を実現させたいため,背景画像を Datasetとして用意する.

構成図を図 4.1に示す.

図 4.1 Datasetの構成図

データセットの収集には python3.5.2を使用した. まず, pixivからスクレイピングを行い,データの

収集を行った. pixivとは,イラスト投稿コミュニティサイトである. イラストを投稿する際,題名やタ

グ等を付け投稿される. また,イラストに対して,ユーザが点数を付ける機能や,追加でタグ付けを行う

事も可能である. スクレイピングをする際,点数が 500点以上かつタグを背景や情景等指定し,着色画像

の収集を行った.

次に, GANに入力するための前処理を行った. 今回,データとして,着色画像と線画画像が必要とな

る. 着色画像は, pixivから収集を行った. 線画画像は,着色画像をグレースケールで読み込み,グレース

ケール画像の,白色部分に膨張処理を行った. グレースケール画像と膨張処理を行った画像の差を取り,

白黒反転させることで,線画画像の抽出を行った.

- 10 -

ConditionalGANと CycleGANに画像を入力する際,256*256の画像が必要となり, StackGANに画

像を入力する際には 64*64の画像が必要となるため,着色画像と線画画像のリサイズを行った. 画像処

理ライブラリ PillowImageの Imageモジュールを使いリサイズを行った.

画像の着色が目的となるため, 着色画像が最初から線画画像のものを省いた. 画像処理ライブラリ

OpenCV2を用い,各画像の shapeを取り,チャネルが 3か4 (カラー)のもの以外は削除を行った. 更

に,各画像の配列を取得し,配列要素が 0(黒)か 255(白)の割合が 8割以上の画像は線画画像とみなし削

除を行った.

最後に,入力データを増やすため,データ拡張を行った. 画像処理ライブラリ OpenCV2を用い,各画

像に flip処理を行った.

以上から 28424組の着色画像と線画画像を取得した.

4.2 U-Net StackGAN

本研究では, 装飾や背景など細かい着色を実現させたい. そのため, U-Net StackGAN を提案する.

Stackgan の STAGE1, STAGE2 の両方に pix2pix を使用し実装を行う. U-Net StackGAN を図 4.2

に示す.

図 4.2 U-Net StackGANの構成図

 図 4.2の緑丸が線画画像,青丸が着色画像を示す. STAGE1の Generatorの入力に,ランダムノイ

ズと線画画像を用いる. 入力を元に着色画像に似た画像を生成する. STAGE1の Discriminatorに,線

画画像と生成した着色画像を入力する. そのペアが正しいペアか偽物のペアか判定する. Generatorは,

Discriminatorに Generatorの生成した着色画像からなるペアが正しいペアであると判別させるよう学

習を行う.

次に, STAGE2の Generatorの入力に, STAGE1で生成された着色画像とランダムノイズを用いる.

入力を元に,元の着色画像に似た画像を生成する. STAGE2の Discriminatorに,線画画像と STAGE2

で生成した着色画像を入力する. そのペアが正しいペアか偽物のペアか判定する.

U-Net StackGANを用いることで, pix2pixを一段階で生成させるより, 2段階に生成を行うことで,

StackGANのように,高解像度画像の生成が可能であると考え,提案する.

- 11 -

第 5章

実装

5.1 CycleGANの実装

5.1.1 システム構成

Dataset は, 第 4 章の Dataset の選択方法で述べた方法で収集を行った. 背景画 28424 枚, 背景画

から抽出した白黒画像 28424 枚. いずれも 256 * 256pixel の画像を使用する. 収集した Dataset を

CycleGANに学習させる. CycleGANに学習させ,生成されたモデルに,白黒画像を入力することで,カ

ラー画像が出力される.

図 4.1にシステムの構成図を示す.

図 5.1 CycleGANのシステム構成図

5.1.2 実装環境

CycleGANでの実装を以下の環境で学習を行った.

- 12 -

• Python version : python3.5.2

• CUDA version : cuda-7.5

• Chainer viersion : chainer2.0.0

5.1.3 ネットワーク構造

Generatorのネットワーク構造を表 5.1に示す.

表 5.1 CycleGAN Generatorのネットワーク構造

name in channels out channels filter stride pad

Conv1 3 32 7 1 3

Conv2 32 64 4 2 1

Conv3 64 128 4 2 1

Conv4 128 128 3 1 1

Conv5 128 128 3 1 1

Conv6 128 128 3 1 1

Conv7 128 128 3 1 1

Conv8 128 128 3 1 1

Conv9 128 128 3 1 1

Conv10 128 128 3 1 1

Conv11 128 128 3 1 1

Conv12 128 128 3 1 1

unpool13 128 64 2 2 0

unpool14 64 32 2 2 0

Conv15 32 3 7 1 3

Discriminatorのネットワーク構造を表 5.2に示す.

表 5.2 CycleGAN Discriminatorのネットワーク構造

name in channels out channels filter stride pad

Conv0 3 64 4 2 1

Conv1 64 128 4 2 1

Conv2 128 256 4 2 1

Conv3 256 512 4 2 1

Conv4 256 1 3 1 1

- 13 -

5.2 StackGANの実装

5.2.1 システム構成

Dataset は, 第 4 章の Dataset の選択方法で述べた方法で収集を行った. 背景画 28424 枚, 背景画

から抽出した白黒画像 28424 枚. いずれも 64 * 64pixel の画像を使用する. 収集した Dataset を

StackGANに学習させる. StackGANに学習させ,生成されたモデルに,白黒画像を入力することで,カ

ラー画像が出力される.

図 5.2にシステムの構成図を示す.

図 5.2 StackGANのシステム構成図

5.2.2 実装環境

StackGANでの実装を以下の環境で学習を行った.

• Python version : python3.5.2

• CUDA version : cuda-8.0

• Chainer viersion : chainer1.23.0

5.2.3 ネットワーク構造

Generatorのネットワーク構造を表 5.3に示す.

Discriminatorのネットワーク構造を表 5.4に示す.

- 14 -

表 5.3 StackGAN Generatorのネットワーク構造

name in channels out channels filter stride pad

Conv1 None 128 3 1 1

Conv2 None 256 4 2 1

Conv3 None 512 4 2 1

Conv joint None 512 3 1 1

Convr1 0 None 512 3 1 1

Convr1 1 None 512 3 1 1

Convr2 0 None 512 3 1 1

Convr2 1 None 512 3 1 1

Convr3 0 None 512 3 1 1

Convr3 1 None 512 3 1 1

Convr4 0 None 512 3 1 1

Convr4 1 None 512 3 1 1

Conv1 None 256 3 1 1

Conv2 None 128 3 1 1

Conv5 None 3 3 1 1

表 5.4 StackGAN Discriminatorのネットワーク構造

name in channels out channels filter stride pad

Conv10 1 None 64 4 2 1

Conv10 2 None 128 4 2 1

Conv10 3 None 256 4 2 1

Conv10 4 None 512 4 2 1

Conv11 1 None 128 1 1 0

Conv11 2 None 128 3 1 1

Conv11 3 None 512 3 1 1

Conv2 None 512 1 1 0

Linear3 None - - - -

5.3 U-Net StackGANの実装

5.3.1 システム構成

pix2pix を StackGAN のように2段階構造に実装することで, より高解像度画像の生成を行う.

Datasetは,第 4章の Datasetの選択方法で述べた方法で収集を行った. 背景画 28424枚,背景画から抽

出した白黒画像 28424 枚. いずれも 128 * 128pixel の画像を使用する. 収集した Dataset を pix2pix

- 15 -

に学習させる. pix2pixに学習させ,生成されたモデルに,白黒画像を入力することで,カラー画像が出力

される. ここまでの, pix2pixの学習を STAGE1とする, STAGE1で生成したカラー画像を, STAGE2

の Generatorの入力として,2段階目の pix2pixに学習させる. 2段階の pix2pixに学習させ,生成され

たモデルに,白黒画像を入力することで,カラー画像が出力される.

図 5.3にシステムの構成図を示す.

図 5.3 U-Net StackGANのシステム構成図

5.3.2 実装環境

U-Net StackGANでの実装を以下の環境で学習を行った.

• Python version : python3.5.2

• CUDA version : cuda-8.0

• Chainer viersion : chainer2.0.0

5.3.3 ネットワーク構造

Generator部のネットワーク構造を表 5.5と表 5.6に示す.

Discriminatorのネットワーク構造を表 5.7に示す.

- 16 -

表 5.5 U-Net StackGAN Generator Encoderのネットワーク構造

name in channels out channels filter stride pad

Conv0 - 64 3 1 1

Conv1 64 128 4 2 1

Conv2 128 256 4 2 1

Conv3 256 512 4 2 1

Conv4 512 512 4 2 1

Conv5 512 512 4 2 1

Conv6 512 512 4 2 1

Conv7 512 512 4 2 1

表 5.6 U-Net StackGAN Generator Decoderのネットワーク構造

name in channels out channels filter stride pad

Dconv0 512 512 4 2 1

Dconv1 1024 512 4 2 1

Dconv2 1024 512 4 2 1

Dconv3 1024 512 4 2 1

Dconv4 1024 512 4 2 1

Dconv5 512 128 4 2 1

Dconv6 256 64 4 2 1

Conv7 128 - 3 1 1

表 5.7 U-Net StackGAN Discriminatorのネットワーク構造

name in channels out channels filter stride pad

Conv0 0 - 32 4 2 1

Conv0 1 - 32 4 2 1

Conv1 64 128 4 2 1

Conv2 128 256 4 2 1

Conv3 256 512 4 2 1

Conv4 512 1 3 1 1

- 17 -

第 6章

実験

6.1 使用データ

GANに入力したデータを以下に示す. 本実験で使用した画像は全て jpegファイルの画像となる.

• CycleGAN

第 4 章提案手法の 4.1 に示した方法で収集した, Dataset を用いて学習を行った. 画像サイズ

256*256の着色画像と線画画像を 28424組,使用した.

• StackGAN

第 4 章提案手法の 4.1 に示した方法で収集した, Dataset を用いて学習を行った. 画像サイズ

256*256の着色画像と線画画像を 28424組,使用した.

• U-NET StackGAN

第 4 章提案手法の 4.1 に示した方法で収集した, Dataset を用いて学習を行った. 画像サイズ

128*128と 512* 512の着色画像と線画画像を 28424組,使用した.

6.2 計算環境

学習に使用した GPUの詳細を以下に示す.

• CycleGAN

– GPU : GeForce GTX 980 Ti

– CUDA Core : 2048

– Memory : 6000MB

• StackGAN

– GPU : TITAN X (Pascal)

– CUDA Core : 3072

– Memory : 12000MB

• U-NET StackGAN

– GPU : TITAN X (Pascal)

– CUDA Core : 3072

– Memory : 12000MB

- 18 -

6.3 各手法による自動着色

6.3.1 CycleGANによる実験結果

CycleGANによる着色結果

バッチサイズを 3, iterationは,600000iterationで学習を行った. CycleGANで着色を行った画像を

図 6.1に示す. originalの列の画像が正解データの画像, 右側の3列の画像が生成画像となる.

図 6.1 CycleGANの実行結果

CycleGANの loss

CycleGANの lossを図 6.2に示す. lossは出力に対する正解データとの差を数値で返すものである.

GANは Generaterと Discriminatorを競わせるように学習を行う為, Generatorと Discriminatorの

lossは近い値が好ましい.

gen g lossは線画画像を元に着色画像を生成する Generatorの lossとなる. gen f lossは生成した着

色画像を元に線画画像を生成する Generatorの lossとなる. dis y lossは線画画像を元に生成された着

- 19 -

色画像を判別する Discriminatorの lossとなる. dis x lossは生成した着色画像を元に生成された線画

画像を判別する Discriminatorの lossとなる.

図 6.2 CycleGANの loss推移グラフ

6.3.2 StackGANの実験結果

StackGANによる着色結果

バッチサイズ 32, 600epochで学習を行った. epochとは,学習が終わり,各レイヤの重みの更新を終

えるまでのサイクルを指す. StackGANで着色を行った画像を図 6.4に示す. originalの列の画像が正

解データの画像, 右側の3列の画像が生成画像となる.

- 20 -

図 6.3 StackGANの実行結果

StackGANの loss

StackGANの lossを図 6.6に示す. cnn loss lは線画画像を元に着色画像を生成する Generatorの

lossとなる. dis lossは,線画画像を元に生成された着色画像を判別する Discriminatorの lossとなる.

- 21 -

図 6.4 StackGANの loss推移グラフ

6.3.3 U-Net StackGANの実験結果

U-Net StackGANによる着色結果

STAGE1 をバッチサイズ 16, 20epoch で学習を行った. STAGE2 をバッチサイズ 4, 20epoch で学

習を行った. U-Net StackGANで着色を行った画像を図 6.5に示す. originalの列の画像が正解データ

の画像, 右側の3列の画像が生成画像となる.

- 22 -

図 6.5 U-Net StackGANの実行結果

U-Net StackGANの loss

U-Net StackGAN の loss を図 6.6 に示す. cnn loss l は線画画像を元に着色画像を生成する

Generatorの lossとなる. dis lossは線画画像を元に生成された着色画像を判別する Discriminatorの

lossとなる.

- 23 -

図 6.6 StackGANの loss推移グラフ

6.4 考察

6.4.1 CycleGANの考察

CycleGANの実行結果から,色付けは学習できているが,全体的に色が青や茶色や黒に寄ってしまっ

ている. また,細かい着色が出来ていないが,出力画像の上部が青く着色されていることも確認できた.

lossの推移グラフから, gen f lossの値が 400000iterationから 600000iterationの間で減少が見られ,

その後増加していることが分かる. 400000iteration 段階では全体的に青く, 正解データと離れている

が,600000iteration 段階では全体的に紫がかっており, 正解データの画像と近い画像が出力されている

ことが分かる. しかし 1000000iteration では, 色が青に寄っているのが分かる. また, 着色画像生成と

線画画像生成の何れも Discriminatorよりも Generatorの lossが高いため, Discriminatorが勝ってし

まっていると考えられる.

色が寄ってしまった原因として,Dataset に夜空や青空等が多かった為, それ以外の学習がまず, 着色

画像を生成した時の lossが大きくなったためと考えられる. また,lossの推移に関しては,着色画像を生

成した時の lossが大きいため生成した線画画像の lossも大きくなったと考えられる. 一般的な色の配置

が学習できていたが,細かい着色が出来なかった原因としては,全体的な位置情報は学習できたが,局所

的な特徴が学習できなかったことが挙げられる.

6.4.2 StackGANの考察

StackGAN の実験結果から, 生成画像にノイズがかかってしまい, 色付けが学習できていないこと

が分かる. loss の推移グラフからも分かるように,   Discriminator の loss が0に近いにも関わらず,

Generatorの lossが高いことが見られる. また,Generatorの lossで定期的に低下が見られる.

- 24 -

色付けが学習できなかった原因として,Generatorの入力をテキストデータから線画画像に変える際,

ネットワークも変更したため, 変更したネットワークに原因があると考えられる. また,Generator の

loss で見られる定期的な低下は, 局所的であることから, 特定のデータの時のみ loss の低下が見られる

が,大多数のデータでは上手く学習できていないと考えられる.

6.4.3 U-Net StackGANの考察

U-Net StackGAN の実行結果から, 色付けは学習しきれてはいないが,90000iteration から色付けの

学習が見られ,他の GANに比べ,輪郭に沿ったはっきりとした着色が見られる.

色付けが学習しきれていない原因として,lossの推移グラフから, Generatorの学習が 250000iteration

までは上昇しているものの, それ以降は低下していることが分かる. 実行結果もそれに比例するよう

に,250000iterationではブロックノイズのようなノイズが見られるが 490000iterationでは改善されて

いることが確認できる. その為,epoch数を増やすことで,学習を続けることで,より自然な着色が実現さ

れると考えられる. また,はっきりとした着色については U-Netを使用し,更に GANを 2段階構造に

したことで,局所的な特徴を捉えられたためと考えられる.

- 25 -

第 7章

結論

7.1 結論

GANを用い,背景の自動着色を行った. CycleGANを用いた実装では,色付けは学習できてはいるが,

色がよってしまう結果となった. StackGANを用いた実装では,ノイズが乗ってしまい,色付けも上手く

学習が出来ていない結果となった。U-Net StackGANでは色塗りの学習はしきれていないものの,局所

的な特徴は捉えられていると考えられる.

実装中に,入力データの線画画像にノイズが多く乗ってしまう場合も見受けられた. また, StackGAN

では実装したネットワークに問題があったと考えられる. これらを見直すことで,より良い結果が得ら

れる可能性があると考えられる.

本研究では,細かい装飾や背景の着色を目的としていた. U-Net StackGANの実装では局所的な着色

がみられた. その為,更に U-Net StackGANの学習を続けることでより人間の制作物に近い結果が得ら

れると考えられる. しかし,最も色付けの学習が出来た手法は,CycleGANであるといえる.

- 26 -

謝辞

ご指導頂きました柴田先生,先輩方に深く感謝致します. 本研究に協力して頂いた同期の方,皆様へ感

謝の気持ちと御礼を申し上げたく, 謝辞に代えさせていただきます.

- 27 -

参考文献

[1] Ian J. Goodfellow : “Generative Adversarial Nets” https://arxiv.org/pdf/1406.2661.pdf

(2017/07/28).

[2] Mehdi Mirza : “Conditional Generative Adversarial Nets” https://arxiv.org/pdf/1411.

1784.pdf (2017/07/28).

[3] Phillip Isola : “Image-to-Image Translation with Conditional Adversarial Networks” https:

//arxiv.org/pdf/1611.07004v1.pdf (2017/07/28).

[4] Olaf Ronneberger : “U-Net” https://arxiv.org/pdf/1505.04597.pdf (2018/01/14).

[5] Jun-Yan Zhu : “Unpaired Image-to-Image Translationusing Cycle-Consistent Adversarial Net-

works” https://arxiv.org/pdf/1703.10593.pdf (2017/07/28).

[6] Han Zhang : “StackGAN” https://arxiv.org/pdf/1612.03242.pdf (2017/07/28).

[7] 飯塚里志 : “ディープネットワークを用いた大域特徴と局所特徴の学習による白黒写真の自動色付

け” http://hi.cs.waseda.ac.jp/~iizuka/projects/colorization/data/colorization_

sig2016.pdf (2017/07/28).

[8] 米辻泰山 : “PaintsChainer -線画自動着色サービス-” https://paintschainer.preferred.

tech/index_ja.html (2018/01/14).

[9] Tim Dalimans : “Improved Techniques for Training GANs” https://arxiv.org/pdf/1606.

03498.pdf (2018/01/15).

[10] Zhiming Zhou, Han Cai : “ACTIVATION MAXIMIZATION GENERATIVE ADVER- SAR-

IAL NETS” https://arxiv.org/pdf/1703.02000.pdf (2018/01/15).

[11] 武井宏将 : “初めてのディープラーニング” 株式会社 リクテックコム (2016/03/04).

[12] 斎藤康毅 : “ゼロから作る Deep Learning Python で学ぶディープラーニングの理論と実装”

O’REILLY’ (2016/09).

[13] Hisa Ando : “GPUを支える技術” 株式会社時術評論社 (2017/07/13).

[14] 鈴木たかのり : “いちばんやさしい Pythonの教本” 株式会社インプレス (2017/08/11).

[15] 坂本俊之 : “Chainerで作るコンテンツ AIプログラミング入門” 株式会社 シーアンドアール研

究所 (2017/12/22).

- 28 -