Ryan Dahl's Automatic Colorizationをpure TensorFlow化してscikit-imageに由来するセグメンテーションフォルトをなくした話

More than 3 years have passed since last update.

Ryan DahlによるAutomatic Colorizationのサンプルがscikit-imageを利用しており環境によってはセグメンテーションフォルトが起きる。それを回避するために画像の入出力をTensorFlowのみで行うように改造した話。


三行


  • オリジナルはこ↑こ↓

  • 今回改造したのはこ↑こ↓

  • 得られたもの = scikitから完全解放された淫夢くんUC

左: 入力画像、右: 入力画像を一度グレイスケールにして再着色した画像

inmukun.jpg inmukun-color.jpg


細かい話


Ryan DahlによるAutomatic Colorization

Ryan DahlによるAutomatic Colorization。いわゆるディープラーニングによるグレイスケール画像の自動着色。アルゴリズムだけでなく学習データと実行スクリプトも公開されているのでTensorFlowの実行環境があれば誰でも試すことができる。


日本語の情報


問題

いくつかのブログに実行するとセグメンテーションフォルトが起きると書いてあり私の環境でも発生した。スクリプトの中で scikit-image を利用しており scikit-image の import でセグメンテーションフォルトが発生している。

これはTensorFlowの依存か何かの問題らしい。

segmentation fault #2034


解決法

今回のスクリプトでは scikit-image は画像ファイルの入出力とクロップ・リサイズのみに使用されている。TensorFlowはこれらも可能であるためpure TensorFlowで実装することで依存を減らした。

環境によっては発生しない問題のようなので無理に使用する必要はない。

TensorFlowは入力はOpノードとして記述し、出力はencode_jpegしたノードをrunで出力することで行う。

この辺の入出力をTensorFlowのグラフで行うか、TensorFlow以外のパッケージで行うかは設計による。大体の場合はTensorFlow外で行えばよいと思う。今回は問題回避のためにTensorFlowの入出力を使用した。