白黒写真に着彩する人工知能を使い、実際の色見と推測による色見を比較してみた

早稲田大学の研究グループが、ディープラーニングを使った白黒写真の着彩ツールを公開したというニュースを読んだ。

* [人工知能で白黒写真をカラーに　早大が技術開発、GitHubでコード公開 - ITmedia ニュース](http://www.itmedia.co.jp/news/articles/1605/31/news119.html)
* [satoshiiizuka/siggraph2016_colorization: Code for the paper 'Let there be Color!: Joint End-to-end Learning of Global and Local Image Priors for Automatic Image Colorization with Simultaneous Classification'.](https://github.com/satoshiiizuka/siggraph2016_colorization)

サンプルを見てみると、確かにそれっぽく色が付いている。しかし、どれも最初から白黒写真だったものの様で、実際の色とどの程度差があるのかがよく分からない。そこで、どれくらい色見が再現(?)されているのか自分の写真で実験してみることにした。

**なお、筆者は一介のWeb制作者で、機械学習やその周辺分野には全く詳しくない。インストールして動かすだけの紹介になる。**

# インストール

MacOSXの開発者なら10分で必要なものが揃えられる。機械学習だとPython系のツールが多いが、このコードは[Torch](http://torch.ch)という環境向けにLua言語でできているようだ。

[[MLAC 2013 7日目] Torch7でお手軽ニューラルネットワーク - a lonely miner](http://conditional.github.io/blog/2013/12/07/an-introduction-to-torch7/)

インストールは非常に簡単だった。

```bash
# torchをクローン
git clone https://github.com/torch/distro.git ~/torch --recursive

# 依存ソフトのインストール
cd ~/torch; bash install-deps;

# インストール
./install.sh
```

最後に環境変数を書き加えて良いか聞かれるのでyesにしておく。
ターミナルを再起動して`th`コマンドが動くかどうかを確認してから次のステップへ。

```bash
# 早大のリポジトリをclone
git clone https://github.com/satoshiiizuka/siggraph2016_colorization.git
cd siggraph2016_colorization

# colorization modelをダウンロード
./download_model.sh

# サンプル実行
th colorize.lua ansel_colorado_1941.png output.png
```

シェルスクリプトを実行すると700MBのデータ`colornet.t7`というファイルがダウンロードされてくる。これが人工知能の学習済データになる。

# コマンドの使い方

`th colorize.lua <元画像のパス> [<出力ファイルのパス>]`

画像の拡張子は、自分でやってみたところJPEG・PNGには対応していた(他にもあるかもれない)。PNGだとたまにエラーが出ることがあったので、JPEGで試すのが一番良さそう。

画像の解像度が高いとそれだけ計算時間がかかるが、1200px程度の画像でも結果を出力できた。

# 試してみた

写真は自分で撮ったものを使用。元データには、元々のカラー写真をPhotoshopでグレースケール化したものを用意した。[^1]

[^1]: 写真的な話をすると、単純なグレースケール化では、彩度の高さがそのまま明度には反映されないなどの問題がある。今回は細かい点は無視してグレースケール化している。

**銀座の数寄屋橋交差点**

![アートボード 1.png](https://qiita-image-store.s3.amazonaws.com/0/48238/0983f25a-a47a-5c2b-ba9e-dc2146d19b07.png)

左が実際の色彩。中央が人工知能に解析させる、モノクロ化した元画像。右が人工知能による着色結果になる。もちろん、人工知能は実際の色彩を知らずに、右の画像を生成している。色彩はかなりマイルドで消極的だが、結構雰囲気は出ている。

**リンゴ**

![deeplearning-04.png](https://qiita-image-store.s3.amazonaws.com/0/48238/6935f051-1de8-3e3f-47b0-6a8c7eec5020.png)

元々の色彩よりもくすんだ色見だが、かなりはっきり赤色が出ている。むしろ右のリンゴの方がリアルに見えるかもしれない。

**IKEAの店内**

![deeplearning-05.png](https://qiita-image-store.s3.amazonaws.com/0/48238/1f7b3486-8714-0e1e-66d8-b166d216b267.png)

どことなくIKEAの青・黄っぽさが推測による着色でも出ている気がする。

**式根島の港**

![deeplearning-09.png](https://qiita-image-store.s3.amazonaws.com/0/48238/7a8166ce-4d24-7353-d3b7-7808446a5615.png)

空は判定しやすいのか、かなり強めに青色が出ている。実際の写真よりも彩度が高い。

**船から降りる人々**

![deeplearning-10.png](https://qiita-image-store.s3.amazonaws.com/0/48238/5fb7d616-0217-8a0a-54e7-75bbc68c4587.png)

一番面白かった結果。実際にはコンクリートのシミの部分が、人工知能からは芝生として認識されているようだ。ただ、実際の色を知らずに右側を見ても違和感はなさそう。

**池上線**

![deeplearning-02.png](https://qiita-image-store.s3.amazonaws.com/0/48238/ca1ad02f-2c72-b022-4fcd-c53fabb05e59.png)

全体的に暖色がかかっており、実際の写真と同じ方向性の色見にはなっている。

**空と煙突**

![deeplearning-03.png](https://qiita-image-store.s3.amazonaws.com/0/48238/df476f02-774a-e0c5-c033-0f8157bac161.png)

煙突の色は再現されていないが、背景の空はかなり完璧に色が付いている。

**地下鉄の出口**

![deeplearning-08.png](https://qiita-image-store.s3.amazonaws.com/0/48238/dfafb499-27de-166b-31ac-a9b9c5d0ce61.png)

かなり淡いが、よく見ると看板は黄色、トイレの男女のピクトグラムも正しい傾向の色見で着色されているのが分かる。

**おまけ**

![名称未設定 1.png](https://qiita-image-store.s3.amazonaws.com/0/48238/28466f42-cc2c-e5a6-8c47-606608f1e61c.png)

チャップリンの「モダン・タイムス」のシーンを着色してみた。

うまくいくシーンは限られるだろうが、白黒映画に自動で色を付ける動画再生アプリ……みたいな商売をやる人が現れるかもしれない。

# 感想

ディープラーニングすごい。写真や映像表現の幅を広げることは間違いないと思う。アート・デザインの領域でも何かに使えるかもしれない。

* 思ったよりも高い精度で元の色が推測されている
* オリジナルを知らなければ、かなりそれらしく見える結果ができている
* 空・海・山など、面積が広いモチーフは強めに推測される

### こちらもどうぞ!

機械学習ネタで、テキストマイニングのスライドを発表しています。

* [LIGブログをテキストマイニングしてみた](http://media-massage.net/works/docs/trying_text_mining_lig_blog/)

[![無向ネットワーク図作成](https://qiita-image-store.s3.amazonaws.com/0/48238/3f98cd7b-ec4d-dd6f-8e05-325edde6c905.png)](http://media-massage.net/works/docs/trying_text_mining_lig_blog/)