Home -> 雑用 -> 雑用メモ -> [13. 白黒写真の自動着色を試してみる]
2016/05/15 作成
2016/06/21 追記
一切推敲していない糞文章故、大変読み難い代物となっております。
白黒写真をカラー化できるツールができたので試してみた。
ニューラルネットワークを使えば画像をあれこれと弄ることができる。
今までにも、例えば以下のような感じで色んな試みがなされてきた。
ここまでできれば、白黒写真の着色・カラー化など簡単そうに思えるが、学習フェーズは非常にコストがかかる。
GoogleやFacebookが競争相手となった今、ろくな計算資源を持たない一般人は手を出すことさえ憚られる、という状態。
例えば画像分類タスクのコンテストは既にニューラルネットワークの独壇場で、実質的にマシンパワーの勝負になっている。
しかも、よい結果を得たければネットワークの構造やらアルゴリズム本体をそれなりに工夫しなければならない。
ところがこれをやってくれた人たち(というか早稲田のグループ)がいて、学習済みのモデルも公開されているので着色を自分で試すことができる。
でも動作環境の整備は結構面倒だったりする。
そんなわけで、彼らが作ってくれたcolorize.lua を動かして遊ぶのが最終目標。
少し話題になっているようないないような、という感じのコレだが、本当にこんな完璧に色がつくのかという疑問が湧いてくる。
公式の言う約90%の色付け結果が自然である
って本当かよって思う人も多いかと思うので調べてみた。
世の中には白黒写真のカラー化をしてくれる業者も複数あるが、何故か彩度の低い着色結果になりがち。
自然な結果と公言するだけあって期待してしまうが、果たして機械学習は職人を駆逐するに足る存在になり得るのか…?
この節は本題とは無関係なので飛ばしてもおk。
当方はWindowsをメインにしているのでやっぱりWindows上で動くのが一番いい。でも残念ながらWindows用バイナリは配っていない。
仕方がないのでLinux・Mac用のものをWindows上で動かすという方針でとりあえず頑張る。
本来LinuxかMacで動かすものをWindowsで動かすって時には昔からcigwinやらが使われてきた。
cigwinのインストールに丸1日費やしたという人もきっとたくさんいることと思う。
ところがそれからだいぶ時間が経って、このあたりの情勢もかなり変化したらしい。
実は我がWindows機には既にMingwが入っているが、さすがに糞化してきたのでこの機会にMSYS2に鞍替え。
とりあえず上の参考ページ1に従ってセットアップ。
MSYS2自体のインストールはインストラを起動してポチポチするだけなのでサルでもできるようになっている。楽ちん。
で、ここからはMSYS2上で行う。
以下でシステムの更新ができる、らしい。
$ pacman -Suy
何か文字列がたくさん流れて勝手にいろいろインストールしてくれたっぽい。
続いて意気揚々とgitのインストールを試みる。
$ pacman -S git
「forkできません」的な感じでいっぱい怒られた挙句にコケた。
どっかでミスったっぽいので参考ページ2を見てみると本当は再起動しないといけないようだ。
とりあえず再起動して以下を実行。
$ pacman -Sy pacman
たぶん不要だけど以下も一応試しておく。
$ pacman -Syu
$ pacman -Su
「何も行うことがありません」的な感じのことを言われた。これで準備ができたはず。
ようやくgitをインストールする。
$ pacman -S git
今度は何も怒られずにすんなり入ってくれた。
ここからは colorize.lua の動作に必要な Torch7 とその関連物をインストール。
$ git clone https://github.com/torch/distro.git ~/torch --recursive
かなり時間をかけていろいろやってくれる。で、次に
$ cd ~/torch $ bash install-deps
ところが、'==> platform not supported, aborting
'などと言われて Torch7 の関連物がインストールできない。
install-depsを覗いたところ、MacとLinux以外はサポート外として弾いている。
MSYS2上でどうにかならないが検索して調べたが、Torch7の開発者はWindowsをサポートする気は毛頭ない様子だ。
仕方がないのでWindows上で動かそうという路線は断念。頑張ればできるかもしれないけど面倒だし。
最初から上手くいくとわかっている最終手段が1つ残されているのでそっちに切替。
この節も本題とは無関係なので飛ばしてもおk。
後でいろいろ困ってもアレなので仮想マシンを使ってしまう。今時はノートパソコン上でもどうにか動くので使わせてもらう。
最終手段たる力技だが互換性の問題を一気に解決できる(…気がする)代物。本当はあんまりやりたくなかったけどしゃーない。
仮想マシン自体のセットアップは超簡単なので割愛。
気合のある人は自分でインストールからやってもいいが、上のVHDを使えば最初からマウス統合機能が使える。
ちょっと設定すればクリップボードも共有できる。共有フォルダの設定もしておくと後々楽ちん。
で、ここからはUbuntuのターミナルでゴニョゴニョする。
Ubuntuではデフォルトではroot権限で実行できないので必要とあらばsudoすべし。
まずはgitのインストール。sudoしないと権限が云々と言われちゃう。
$ sudo apt-get install git
ここからはようやくTorch7のインストール。今度はsudoしない。仮想マシンなのもあって結構時間が掛かる。元々時間が掛かる操作だが。
$ git clone https://github.com/torch/distro.git ~/torch --recursive $ cd ~/torch; bash install-deps; $ ./install.sh
Do you want to automatically prepend the Torch install location to PATH and LD_LIBRARY_PATH in your /home/si/.bashrc? (yes/no)
と最後に聞かれるのでyesと答える。
$ source ~/.bashrc
これでTorchが使えるようになる。
ここからは siggraph2016_colorization の方をセットアップする。
まずは適当なフォルダにgithubから関連ファイル一式を取ってくる。
ただし学習データのダウンロードだけは別になっているのでスクリプトを走らせて早稲田の鯖から取ってくる。
$ ./download_model.sh
サイズがデカい(663MB)ので待たされる。当方は12分掛かった。
これで準備は完了。サンプルを使って動作を確認する。入力画像は 600x464。
$ th colorize.lua ansel_colorado_1941.png out.png
パフォーマンスがクッソ悪くなるよ的なメッセージが出て、またまたかなり待たされる。
で、待たされた挙句エラーを吐かれた。メモリ不足だと。
not enough memory: you tried to allocate 0GB. Buy new RAM! at /home/si/torch/pkg/torch/lib/TH/THGeneral.c:222
しゃーないので仮想マシンにメモリをたくさん割り当てる。デフォルトだと512MBだが今度は2048MBを割り当ててみた。
ホストPCは8GB積んでるし、へーきへーき。
今度は1分も経たないくらいの短い時間で処理が終わった。out.pngを開くと確かにカラーになってる。やったね!
サンプルだけでは物足りないので色々と遊んでみましょう。
元画像 | 着色結果 |
---|---|
▲01: サンプルに入ってた コロラド国立公園 (1941年) |
1024x706 の画像を入力したら3分待たされた挙句メモリ不足になったので、画像サイズは小さい方が良さげ。
520x358 の画像なら20秒くらいで着色できた。670x374 なら50秒くらい。
さて、ここからが本題。
白黒写真の着色、カラー化といったときに一番大きな需要は何といっても白黒古写真のカラー化。
今回は、絶対に未だにカラー化されていないであろう、色々な被写体の手ごろなサイズの白黒写真があるので、以下から写真を引用する。
結果からいうと上手くいったりいかなかったり。
着色結果が思いのほかくすんだ色で落ち着かなかったので、参考として手動で補正したものも添えておく。
とりあえずは、真ん中の列を見て colorize.lua 単体の能力をメインで確認してほしい。
元画像 (入力) | 自動着色結果 (出力) | 自動着色結果を手動で補正したもの (出力を手動補正) |
---|---|---|
▲02: 藤川の松並木眺望 (1960年頃) 手動で手直しすればいける。 |
||
▲03: 駒の爪方面を眺める (1960年頃) 手直しも限界がある。 |
||
▲04: 「かわき」の水車 (1959年4月) 色としてはたぶん正解に近いだろうけど… |
||
▲05: 「かわき」の風景 (1960年頃) 白く飛んだところ、暗く写ったところ、ボケた所は苦手の様子。 |
||
▲06: 「かわき」の堰 (1960年頃) 草の類が悉く赤茶色になってしまうのは何故だろうか。 |
||
▲07: 藤川西部の風景 (1957年) なんか茶色くなったけど空は若干青く塗り分けてくれたような気がする。 |
||
▲08: 関山神社の傘鉾行列 (1960年頃) 頑張ればもうちょい上手く補正できそう。 |
||
▲09: 御成箇山から山中八幡宮方面の眺望 (1951年頃) 着色失敗。ノイズが多いし仕方なし。 |
||
▲10: 藤川西部付近の松並木 (1956年) 鮮やかな緑ってなかなか出ないね…でも松の木の背景は何となく青空っぽくなっているのは物体認識のお蔭? |
||
▲11: 昭和30年代の農耕風景 (1957年) 割といい感じに。 |
||
▲12: 旧藤川村役場 (1945年頃) まあこんなもんでしょう。 |
||
▲13: 「弘法山」からの藤川遠景 (1940年頃) 手前に桜があるのに色付けてから気付いた。 |
||
▲14: 成就院の入仏式 (1937年3月) 人の塗り分けが適当だがけっこう綺麗な仕上がりに。 |
||
▲15: 藤川駅のプラットホーム (1950年頃) 茶色くなった。 |
||
▲16: 市場町東端からの眺望 (1918年) 彩度を上げたらちょっときれいになった。 |
||
▲17: 「弘法山」からの藤川遠景 (1960年頃) まあまあ。 |
||
▲18: 藤川小学校児童記念写真 (1930年4月) なんか黄色い。 |
||
▲19: 藤川駅からの東方面の眺望 (1960年頃) 中央の電車の色は正解。左端の見切れた電車はダークグリーンが本当の色…のはず。 |
||
▲20: 白壁の塀があった徳性寺 (1925年) 彩度を上げたらマシになった。 |
||
▲21: 松並木にロケがやってきた (1962年頃) 緑が綺麗。人物の塗りは適当だけど合格点。 |
||
▲22: 牛乗山で誕生日会 (1969年頃) 木の枝の背景は空って判断されちゃってるっぽい。あと一人だけ顔が塗られていない。 |
||
▲23: 生い茂る松並木と子どもの神輿 (1962年) 暗い部分はただただ黒っぽい感じに。人の塗り分けもされていない。 |
||
▲24: 関山神社の石段をのぼる傘鉾巡行 (1962年) 緑が鮮やか。石の塗り訳が他と違っている部分があるのが気になる。 |
||
▲25: 弓の訓練 (1945年) 彩度を上げたら物凄く自然な仕上がりに。ほぼ完璧。 |
||
▲26: 薙刀の訓練 (1945年) まあこんなもんか。 |
||
▲27: 藤川関山神社を臨む (1950年頃) 補正したら許せる感じに。 |
||
▲28: 藤川西町「うんとり」 (1960年頃) こいつも割ときれい。 |
ここまで見て、何となくわかったことがいくつか。
ここで疑問がいくつか。
というわけで、カラー写真をグレイスケールに変換したものを入力としてみた。
元となるカラー写真は以下から拝借。
入力 | 出力 | 元画像 |
---|---|---|
▲29: かんのファーム 花の色ってのは判別しづらいみたい。 |
||
▲30: フラワーランドかみふらの 空の色はほぼ完璧。すごい。でも菜の花は汚い色に。 |
||
▲31: 深山峠 自然な色ではあるが緑が消えた。 |
||
▲32: 日の出公園 キャンプ場 やっぱり緑が控えめになった。 |
||
▲33: 千望峠 かなりいい感じに色がついた。 |
||
▲34: ジェットコースターの路 やっぱり緑が汚い… |
||
▲35: パノラマロード江花 やっぱり緑が… |
てなわけで、わかったこと。
とりあえず乗り物の写真をいろいろと突っ込んでみて試した。
入力 | 出力 | 元画像 |
---|---|---|
▲36: 特殊作業車の例 (ダンプカー) まあこんなもんでしょう。 |
||
▲37: 富士産業が戦後まもなく生産したラビットスクーター あれまあ。 |
||
▲38: 日本国有鉄道103系 ありゃりゃ。 |
||
▲39: 気球 もはや笑うしかない。 |
||
▲40: 砕氷船「宗谷」(船の科学館展示) 空は塗れるのに… |
||
▲41: 現代の日本の消防車 東京消防庁 消防車は塗れるらしい。 |
てなわけで、わかったこと。
colorize.lua を使いたいWindows使い全員が仮想マシン用意して云々とかやっていたら大変なことになっちゃうよね。
でもMacやLinuxに浮気したくない、手元の環境を汚さず時間を掛けずサクッと使いたい、という人の為のWebサービスが登場。
開設者はあの(?)@mecabさんなので大丈夫でしょう、多分。
管理人Twitter: @su_te_ak/◆mmft4k9vgtL6
要望等はTwitterへ
Home -> 雑用 -> 雑用メモ -> [13. 白黒写真の自動着色を試してみる]
ここ以降は鯖が勝手に付加するやつです