こんにちは。おうちハッカー@リッテルラボラトリーの石田です。
今日は、HOME'Sで大量に保持している間取り画像を使って、ディープラーニングの手法の一つであるDCGANを使い、あり得そうな間取りを生成させてみました。
DCGANとは?
Deep Convolutional Generative Adversial Networkの略で、画像を生成する手法です。 データセットを元に画像を生成する生成器と、生成された画像かデータセット画像かを見分ける判別機の2つのニューラルネットワークを交互に学習させることで、 データセットのような画像を生成します。
論文はこちらです。 またNextremerさま主催の機械学習勉強会で、発表されていた方の資料もあります。 Deep Convolutional Generative Adversarial Networks - Nextremer勉強会資料
昨年末のディープラーニング界隈では、DCGANを用いた顔イラスト生成が話題となっていました。 qiita.com
今回はこちらのChainerでの実装を使わせていただきました。
間取り画像のデータセット
間取り画像を生成しようかと考えたのは、弊社の日本最大の物件数を誇るHOME'Sのデータセットがあるからです。
今回使用した、画像を含むHOME'Sデータセットは、国立情報学研究所を通して、研究者の方に無償で提供させていただいています。
最近、高精度な間取り画像を追加させていただきましたので、ぜひご利用ください。 nextdeveloper.hatenablog.com
こちらの間取り画像から、サイズを96×96に縮小してデータセットを作成します。 データセットには、約500万枚の間取り画像があり、さすがに多すぎるので約50万枚を使用します。
学習経過
30分後 間取りの線がなんとなく見えてきました。
2時間後 間取りの形と色がそれっぽくなってきました。
24時間後 遠目で見る分には、かなり間取りっぽいです。
32時間を超えたあたりで、誤差が発散してしまい、こんなのになってしまいました。
学習経過を動画にしてみました。1画像で10分程度、約32時間分です。 www.youtube.com
どんどん間取りっぽくなっていくのが分かると思います。
ただ間取りに書いてある文字まではさすがに再現されません。文字っぽい模様が見えるだけです。
シード値の操作
画像を生成するジェネレーターは、今回の場合、値域[-1,1]の100次元のシード値zを入力として画像を生成します。
このzを、画像Aを生成したシード値zaから、画像Bを生成したシード値zbに連続的に変化させることで、間取りも連続的に変化するのではないかと思い、やってみます。
すると、このように、1Kぽい部屋が、4LDKっぽい部屋に連続的に変わる様子が見られました。徐々に部屋が増えていきます。なんだか不思議な感覚です。
こっちはワンルームから3LDK
やってみての感想
先人のイラストや景色などは、手書き感があったり、雰囲気が再現できていれば成功しているように見えるけれど、間取り画像はそうはいきません。
生成した間取りでは、間取り上入れない部屋が生成されたり、よく分からない文字らしきものが生成されたりで、間取り図としての機能を果たせていません。
また現状で生成できる解像度も小さいので、なかなか見ずらいです。
DCGANは、こうした精密な画像生成には向いていないと思われます。もう少し人の感性に左右される画像をデータセットにすると面白いかもしれません。
参考
Chainerを使ってコンピュータにイラストを描かせる - Qiita
www.slideshare.net