macacon ディープラーニングで白黒動画をカラー化して楽しむOpenCVラッパー

 

f:id:eiji-kb:20160616165553j:plain

以前Youtubeにアップしていた自動彩色の動画に、外国人らしき人から動画作成のチュートリアルを作って欲しいとコメントが付きました。そこで、ラッパーを作成して公開しました。入力動画に対し彩色データを拡大して合わせる定番の処理をしていますので、元動画の解像感は保持されます。

 

自動彩色

自分の知る限り、ディープラーニングによる自動彩色で実行可能な学習済みモデルを公開したのは、Dahl氏が最初だと思います。
Automatic Colorization

そしてこのモデルを元に動画を作成したのがsamin氏で、氏はffmegを使用して動画を作成する方法を公開しています。
forward.py · GitHub
Dahl氏のモデルを使用した動画は、多くはこのsamin氏の方法を使用して作成されているようですね。

www.youtube.com

私も、白黒画像を用意してモデルに読み込ませる作業が退屈になってしまっため、同時期OpenCVを使って処理していました。OpenCVを使って動画を読み込み、Dahlモデルで彩色、動画出力までを一気に処理しますので、上のffmpegを使用した方法に比べ大幅に手間が減り高速に処理することができます。なお、ここでの動画作成ですが単にフレームごと彩色して動画出力しているだけです。難しい処理ではありません。


準備
実行確認環境

音声も後述のバッチで処理する場合

OpenCVのインストールがやや面倒ですが、その価値はあります。今回のラッパーの画像変換部分をOpenCVで処理したものとscikit-imageで処理したものとで速度を比較したところOpenCVの方が4倍ほど高速でした。(テスト動画でOpenCV版471.30sec、scikit-image版2143.16sec)

 

セットアップ

Dahl氏Automatic Colorization をダウンロードしてください。
http://tinyclouds.org/colorize/

 
次に以下のGitから、macacon.pyをmacacon.shをダウンロードして、上と同じフォルダに保存して下さい。

github.com

 

macacon.pyのスクリプトを以下に示します。

macacon python list

 

使い方

・基本的な使い方 (例:白黒動画ファイル名input_movie.mp4  出力ファイル名output_movie.mp4)

python macacon.py input_movie.mp4 output_movie.mp4

・オプション -mで オプションでモニタ画面を表示します。彩色作業中の様子を見たい場合に使用。

python macacon.py input_movie.mp4 output_movie.mp4 -m

                              f:id:eiji-kb:20160709160128p:plain

 

・オプション -c 倍率 で、彩度の強調もできます。ただし不自然なのであまりお薦めしません。また元々色が良くついていないところは強調しても効果はありません。

python macacon.py input_movie.mp4 output_movie.mp4 -c 2.8

    youtu.be


音声の処理
macacon.pyは動画の彩色処理だけで、音声処理はしません。そのため音声は動画編集ソフトなどで処理してください。自分はほとんどAviUtlで処理しています。
また動画編集ソフト以外の処理方法として、ffmpegを用いて白黒動画の音声を彩色した動画に付加する方法を示しておきます。

ffmpeg -i input_movie.mp4 -acodec copy -map 0:1 soundtrack.m4a
ffmpeg -i output_movie.mp4 -i soundtrack.m4a -vcodec copy -acodec copy output_movie_color.mp4

 

 

動画の彩色と音声の処理をまとめて行うバッチ
上2つの処理をバッチ化したものです。 


・基本的な使い方(例:白黒動画のファイル名input_movie.mp4  出力ファイル名output_movie.mp4)

sh ./macacon.sh input_movie.mp4 output_movie.mp4

・オプション -mで オプションでモニタ画面を表示します。彩色作業中の様子を見たい場合に使用。

sh ./macacon.sh -m input_movie.mp4 output_movie.mp4

・-c 倍率 で、彩度の強調もできます。ただし不自然なのであまりお薦めしません。また元々色が良くついていないところには強調しても効果ありません。

sh ./macacon.sh -c 2.8 input_movie.mp4 output_movie.mp4

 


処理時間

テスト環境

以下は、動画1秒あたり彩色に必要な時間(秒)です。(解像度720x540の動画でテスト)

 

f:id:eiji-kb:20160709214703j:plain


GPUであれば元動画の3.5倍程度の時間で彩色しますので、2時間の映画を彩色するのに7時間くらい見ておけばよいです。寝る前にセットしておけば翌朝には出来ています。
CPUの場合は、13.5倍の時間がかかるので2時間の映画を彩色するには27時間ほど必要ということになります。日曜に見たいのなら金曜日の寝る前に仕込んでおく必要がありますね。

なお、-mオプションはそれほど負荷がかかりませんので、パソコンを別件で操作しながら彩色する際は利用することをお薦めします。見ているだけでも楽しいので。

 

サンプル
以下はmacaconラッパーを使って彩色した例です。
 
ローマの休日

   www.youtube.com

西部戦線異常なし

   www.youtube.com

1:40くらいから、俳優の演技がすごいですね。緑のこけが生えたりはしていますが。

 

蛇足ですが、元モデルの学習データにないようなものを彩色しようとしてもあまりぱっとしない結果になると思います。あるいは変な結果、たとえば白髪の日本人の頭が金髪のサッカー選手みたいになったりします。これは学習データに日本人がなかったためでしょう。満足する結果を得たいのであれば、本来彩色したい対象に対する、十分な量の適切なデータセットで学習しておく必要があります。日本の映画なら、日本人のデータで学習するのが理想です。なお今回のモデルでは提供されていません。

またDahl氏のモデルは多様性(平均化)問題があります。例えばスポーツカーなど赤でも青でもあり得る(多様な色を持つ)対象データを学習した場合、その対象の色として、色空間上の赤と青の平均の値として学習してしまいます。この平均化の効果により、彩色の予測が灰色がかった低い彩度となってしまうとのことです。(引用Zhang, Richard, Phillip Isola, and Alexei A. Efros. "Colorful Image Colorization."arXiv preprint arXiv:1603.08511 (2016).

 

使用条件
・非商用
・もしカラー化した動画をアップしようとするなら、監督など製作者の意志(遺志)の確認と尊重を願います。

これは製作者がカラー化を望んでいなかった場合も多いためです。あるいは、最新の技術を使って彩色するというのなら話は違ったのかもしれませんが、製作者が故人となった今では永遠にわからないことです。しかし個人で楽しむ分には問題ないと思います。もっとも、カラー化すれば白黒映画を見る取っ掛かりにはなりますが、不思議なことに一時間くらい続けて見ていると彩色のパターンにも慣れるのか、白黒でも構わないなと思えてきます。もしくは名作と言われるものは現代の並の映画よりはるかにおもしろいため、作品自体にのめり込み相対的に色のことがあまり気にならくなるためかもしれません。それでも、ひそかにカラー化した名画を、休みの日に、ビールでも飲みながらゆっくり見るのは幸せ…ですね。