3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

初学者がGoogle ColaboratoryでDCGANしようとして詰まってた話

Last updated at Posted at 2019-10-07

#はじめに
私は文系の私立大学生です。
機械学習初学者の中の更に初学者です。
そんくらいわかれや!とツッコミたくなる箇所があるかもしれませんが、お手柔らかにお願いします。

#ColaboratoryでDCGANを試みる
本記事は、私が学習した流れに沿って記述しています。

##まずColaboratoryに触れる
紆余曲折あって機械学習で画像生成にチャレンジ!となった私ですが、
GPUも積まれてないWindowsラップトップしかありませんでした。
そこでGoogle Colaboratoryの力をお借りすることにします。
こんな凄いサービスが無料で使えるなんて、いい時代ですね。

Colaboratory自体の使い方はこれらを参考に覚えました

[1. はじめに — ディープラーニング入門:Chainer チュートリアル]
(https://tutorials.chainer.org/ja/01_Welcome_to_Chainer_Tutorial.html)
[Google Colaboratoryで初めての機械学習 - Qiita]
(https://qiita.com/mafunity_/items/464d70915c1815e9a628)
[【秒速で無料GPUを使う】TensorFow(Keras)/PyTorch/Chainer環境構築 on Colaboratory - Qiita]
(https://qiita.com/tomo_makes/items/f70fe48c428d3a61e131)

##DCGANを試す
無事にColaboratoryが扱えるようになったので、
DCGANを導入して試してみましょう。ガッテン。
ページはこちらを参考にしました。

[Google ColaboratoryでLINEスタンプ画像生成に挑戦! - Qiita]
(https://qiita.com/enmaru/items/01c3abccd4b132865686)
[DCGANでポケモンとアイマスを作成したった - Qiita]
(https://qiita.com/yoyoyo_/items/4df8d78b5118190bbcd2#%E3%82%AA%E3%83%AA%E3%82%B8%E3%83%8A%E3%83%AB%E5%AD%A6%E7%BF%92)

###DCGAN-tensorflowをGithubからクローンする
この項目のコードは[DCGANでポケモンとアイマスを作成したった - Qiita]
(https://qiita.com/yoyoyo_/items/4df8d78b5118190bbcd2#%E3%82%AA%E3%83%AA%E3%82%B8%E3%83%8A%E3%83%AB%E5%AD%A6%E7%BF%92)を参考に記述しています。

Colaboratoryは最初contentディレクトリにいるので、rootディレクトリに移動してからgitクローンするのがオススメです。

%cd ../
!git clone https://github.com/carpedm20/DCGAN-tensorflow

contentディレクトリにクローンしても何一つ問題はありませんが、/content/DCGAN-tensorflowとなることを把握しましょう。
私は1時間くらい把握できずに「参考記事通りに行かねぇ!」ってほざいてました。

###MNISTを使ってデモ学習してみる
せっかくDCGANを入れたのですから、早速動かしてみたいですよね。
まずはデモ学習をしてみましょう。
デモ学習にあたり、みんな大好きMNISTを使います。
以下のコードでダウンロードできます。

!python download.py mnist

この方法でMNISTをダウンロードすると自動的にdataディレクトリが作成され、DCGAN-tensorflow/data/mnistとなります。
データセットを用意する際はdataディレクトリに置くことになりますので、いちいち作る手間が省けるわけですね。
ダウンロードが完了したら後は以下のコードを実行するだけです。

!python main.py --dataset mnist --input_height=28 --output_height=28 --train

これで貴方もDCGAN経験者ですね!

#本題:どこに詰まってたのか
ページを参考に、

  1. データセット(画像集)zipファイルの作成
  2. Google Driveのマウント
  3. データセット(画像集)zipファイルのディレクトリコピー&解凍
    を完了し、
    「いざ機械学習じゃー!」と走らせた私を待ち受けていたのはエラーでした。
    MNISTは動いたのになんで・・・?

##NameError:name 'j' is not defined
意気揚々とウッキウキに実行させ、10秒ぐらいして止まりました。
「え!?な、なにごと!?!?」と実行文を見るとそこには

File "/DCGAN-tensorflow/utils.py", line 104, in transform
  im = Image.fromarray(image[j:j+crop_h, i:i+crop_w])
NameError:name 'j' is not defined

というエラー文表示・・・。

当初の私は「Githubからクローンしたコードなのだから、コードが間違ってるわけない。MNISTは動いたんだし」と思い込み、ひたすら自分の非を考えました。
結果は[この更新]
(https://github.com/carpedm20/DCGAN-tensorflow/commit/62ce8ac3f2c84d6a85674d51a1a6f982bfeb1bcf#diff-04d2c9518498da64bfa9db44c6211645)が94-95行目の更新と同時に、そのまま104-105行目も同様の更新をしているものの、transform内にj(とi)の変数が定義されてないままというものでした。

今思えばなんてことはありません。エラー文が言ってることそのままです。

変数を新定義できる自信もありませんでしたので、前版のコードに書き換えたものをローカルで作成&Google Driveにアップして、こんな感じでDCGAN-tensorflowディレクトリにコピーしました。

!cp -f /content/drive/My\ Drive/utils.py /DCGAN-tensorflow/utils.py

##'scipy.misc' has no attribute 'imresize'
今度こそ動くはず!と思ったら早速のエラー文。かなしい。
どうやら前版コード

  cropped_image = scipy.misc.imresize(image, [resize_height, resize_width])
  return np.array(cropped_image)/127.5 - 1.

の「scipy.misc」が見当たらなかったそうです。
どこかの更新でいつの間にかオミットされてたんでしょうね。
今の私には必要なので手動で導入することにしました。
導入はこちらのページにお世話になりました。

[scipy.misc.imread の import エラー - Qiita]
(https://qiita.com/2480jiviolet/items/6ff51e0dd12f76c01ecd)

#コイツ・・・動くぞ・・・!
無事に画像ファイルだけを置いたディレクトリを読み込んで学習しはじめてくれました。
ただサンプルコードと先駆者の記事を真似てるだけの状況ですが、動くものはとても嬉しいですね。親父が熱中するわけだ・・・親父いないけど。
現在進行系で学習していますので、完了次第追記すると思います。

#追記:動きました
無事に画像だけが入ったディレクトリで学習・自動生成をすることができました。
使用した画像は3Dグラフィックのポケモンpng画像です。No.001~No.500のポケモン画像500枚を用いました。

実行は以下のコードで行いました。3行目は実行後の出力結果等をGoogle Driveに避難させるために記述しています。
画像の高さや拡張子指定など、パラメータを弄りたい方はこちらを参照してください。

[DCGAN-tensorflow/main.py at master · carpedm20/DCGAN-tensorflow]
(https://github.com/carpedm20/DCGAN-tensorflow/blob/master/main.py)

%cd /DCGAN-tensorflow
!python main.py --train --dataset PokemonAiSet --input_height=120 --output_height=120 --input_fname_pattern="*.png" --epoch=1000
!cp -r /DCGAN-tensorflow/out /content/drive/My\ Drive/samples-on-colab/PokemonAiOut

無事に実行できましたが、なぜか7倍の7000回学習をしていました・・・。epoch=1000なのになぜ?
ひとまず、動くものは動いたし生成もできたので良しとします。

##実際に生成できた画像
学習回数が200回ごとに生成されていますので、200,400,600,...,7000と並んでいます。

x200 x400 x600 x800 x1000
200 400 600 800 1000
train_00000200.png train_00000400.png train_00000600.png train_00000800.png train_00001000.png
1200 1400 1600 1800 2000
train_00001200.png train_00001400.png train_00001600.png train_00001800.png train_00002000.png
2200 2400 2600 2800 3000
train_00002200.png train_00002400.png train_00002600.png train_00002800.png train_00003000.png
3200 3400 3600 3800 4000
train_00003200.png train_00003400.png train_00003600.png train_00003800.png train_00004000.png
4200 4400 4600 4800 5000
train_00004200.png train_00004400.png train_00004600.png train_00004800.png train_00005000.png
5200 5400 5600 5800 6000
train_00005200.png train_00005400.png train_00005600.png train_00005800.png train_00006000.png
6200 6400 6600 6800 7000
train_00006200.png train_00006400.png train_00006600.png train_00006800.png train_00007000.png
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?