Ryan DahlによるAutomatic Colorizationのサンプルがscikit-imageを利用しており環境によってはセグメンテーションフォルトが起きる。それを回避するために画像の入出力をTensorFlowのみで行うように改造した話。
三行
左: 入力画像、右: 入力画像を一度グレイスケールにして再着色した画像
細かい話
Ryan DahlによるAutomatic Colorization
Ryan DahlによるAutomatic Colorization。いわゆるディープラーニングによるグレイスケール画像の自動着色。アルゴリズムだけでなく学習データと実行スクリプトも公開されているのでTensorFlowの実行環境があれば誰でも試すことができる。
日本語の情報
- 人工知能でモノクロ写真を自動でカラーにする方法
- 2016-05-14
TensorFlowコトハジメ Automatic Colorization(白黒画像の自動彩色) - [テスト] 畳み込みニューラルネットワークを用いたモノクロ動画の自動彩色
問題
いくつかのブログに実行するとセグメンテーションフォルトが起きると書いてあり私の環境でも発生した。スクリプトの中で scikit-image を利用しており scikit-image の import でセグメンテーションフォルトが発生している。
これはTensorFlowの依存か何かの問題らしい。
解決法
今回のスクリプトでは scikit-image は画像ファイルの入出力とクロップ・リサイズのみに使用されている。TensorFlowはこれらも可能であるためpure TensorFlowで実装することで依存を減らした。
環境によっては発生しない問題のようなので無理に使用する必要はない。
TensorFlowは入力はOpノードとして記述し、出力はencode_jpegしたノードをrunで出力することで行う。
この辺の入出力をTensorFlowのグラフで行うか、TensorFlow以外のパッケージで行うかは設計による。大体の場合はTensorFlow外で行えばよいと思う。今回は問題回避のためにTensorFlowの入出力を使用した。