LoginSignup
10
10

More than 5 years have passed since last update.

DCGANでデスメタルっぽいジャケット画像を生成してみる+そのためにメタルのデータベースサイトをスクレイピングする

Last updated at Posted at 2017-03-14

概要

その名の通り。DCGANのgithubページにもあるように、DCGANで架空のアルバムジャケットを生成することができるらしい。
Generated Album Covers
画像引用:dcgan_code
確かに遠目に見るとそれっぽい。ということで、私が好きなデスメタルのジャケットについても同じことができるかやってみた。以下に示すように、デスメタルのジャケットはホラー調だったりダークファンタジー調だったりアレだったりな画風が多いが、そういった特徴を持った画像が生成できるのだろうか…!!

Domination, by Morbid AngelSlowly We Rot, by ObituaryMortification by Mortification
画像引用:Domination, by Morbid Angel, Slowly We Rot, by Obituary, Mortification, by Mortification

DCGANのTorchによる実装

こちらにはDCGANのTorchによる実装が公開されており、そちらではなんと自分で用意した画像を用いて画像の生成が可能になっている(ありがたい!)
ということで、今回必要になってくる作業は、なるべく多くのデスメタルのCDジャケット画像を集めてくることになる。

ここで今回は古今東西のメタルバンドのデータベースサイトであるEncyclopaedia Metallumを利用する。このサイト内にはあらゆるメタルバンドのディスコグラフィーが網羅されており、今回はこのサイトをスクレイピングして画像を収集する。スクレイピングは、pythonのスクレイピング用モジュールBeautifulSoupを利用したスクリプトonly_coverart_mining.py(コードはgithub上にある)を用いる。このスクリプトについての詳細は割愛するが、そのはたらきは、以下にその一部を示す入力データ用テキストファイルinput.txtに記載されているバンドのページにアクセスし、リリースしているアルバムのジャケット画像を自動で収集するものになっている。今回はデスメタルバンドのみを対象にするが、ここで収集の対象になったバンドは英語版Wikipediaのデスメタルバンドのリストを参考にした。

ここで、input.txtにおいてバンド名とともにに書かれている数字などは、別のプロジェクトで使われる際に使われる情報であり、ここでの説明は割愛する。また、このファイルには他のアーティストの情報も付け加えることが可能なので、もしこのバンドのジャケット画像も学習させたい!という場合は各自ぜひ付け加えてほしい。

input.txt
Aborted,0,Death
Cannibal_Corpse,0,Death
Immolation,0,Death
Deicide,0,Death
Suffocation,0,Death
...

Death Metal Scraping

$ python only_coverart_mining.py

これによって自動的にinput.txtに書かれているバンドを対象にスクレイピングが始まる。
Encyclopaedia Metallum上のデータとの照合や画像ファイルが適切なものかなどといったチェックがあるため少々時間がかかるものの、無事スクレイピングが終われば128x128サイズの画像ファイル群が保存される(保存先は、--imgdirオプションで特に指定しない場合、カレントディレクトリ直下に生成されるimgs/以下に置かれる)。デフォルトではフルレングスアルバムのみを対象にジャケット画像を収集するようになっているが、オプションの指定でEPやシングル、ライブアルバムも収集の対象にできるようになっている。

スクレイピングの結果、2057枚のジャケット写真が集まった(EP, シングルも含む。ライブアルバムは除外)。

DCGANを実行

前述したように、DCGANはTorchによる実装を使う。環境構築がなされているなら、そちらのページにあるように、以下のコマンドを打つだけで学習が始まる(ここではmyimagesはimgsの親ディレクトリ)。

$ DATA_ROOT=myimages dataset=folder th main.lua

Training Process

スクリプトを実行するとこのように生成画像と訓練画像が表示され、GeneratorとDiscriminatorが徐々にパラメータを更新しながら、左側の生成画像がそれらしくなっていく(下部にその変化がわかるGIF画像を用意した)。

途中結果

1000epochほど学習させると、わずかにそれっぽい、言われてみればデスメタルっぽい、ダークな感じだったり、おどろおどろしい感じの画像ができているようにも思える。
experiment1(7).jpg

中には画像中にバンドロゴやアルバムタイトルっぽいものができているものも!ある。
logo

5000epochまで学習させた際の生成画像の変化

上記の実験と条件を変え(エポック数を5000に増加)、再度学習・画像生成を行ってみたところ、以下のような結果となった。
1491319404dfKavNZhgXvi4Rq1491319397.gif

学習終了付近時(epoch数:4770)の画像
epoch@4770.jpg
非常にコメントしづらいが、抽象絵画のような画像が多いような…

所感、今後の展望

遠目から見ればCDショップのデスメタルコーナーで見るようなデザインであるが、ちゃんと見るとなんだかよくわからない画像である(まぁ、そういうジャケットもあるにはあるが)。
冒頭の生成ジャケット写真は学習に一体何枚のジャケット画像を使ったのかわからないが、今回使った2000枚強ではやはり十分な学習は難しかったか。今後は訓練画像を増やしてみるなどして結果がどう変わるかも見てみたい。
また、今回は極端な例としてデスメタルを選んだものの、パワーメタルやブラックメタル、スラッシュメタルのジャケット画像に関しても同様の実験をしてみたい。

コードなど

スクレイピングに必要なファイルはすべてgithub上に置いてあります。メタルのジャケット画像集が欲しい!という場合はどうぞ。

10
10
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
10
10