オタクの情弱日記

情弱が色々書くブログ

DeepScanner

はじめに

こんにちは。結局何も書いてないので1年ぶりのはてぶです。

今回も身内向けのアドベントカレンダー用の投稿になりますが、前回は当たり障りない話しかしなかったので、今回はひとつモノを作ってみました。タイトルにある通り、Deepでスキャナーみたいなものを作ろうという内容です。

Deep詳しい方には物足りないかと思いますので、中身は少しDeepや画像編集に興味があるよって程度の人向けです。研究と冬コミ原稿の合間にちょこちょこやったものなので結果も少ないですがご了承ませ。

 

概要

目的としては、写真で撮った絵やドキュメントをそのままスキャンしたかのような状態の画像にしようというものです。私は未だにラフは紙に書いてからスキャンして取り込むか、写真で撮影してDropboxに突っ込んでPCから取り出して何らかの前処理をしてからペン入れをしています。スキャナ使うの面倒だし、写真で撮ったラフ(影とか裏写りとかがあるもの)を綺麗にスキャンしたようにしてくれるのがあったらいいな、できれば透過pngで出力してほしいな、と思ったのがモチベーションです。

 

最近だとCamScannerとか、Dropboxのアプリにも似たような機能がついてるので二番煎じ感はあるのですが、webサービスとかにしたいなあみたいな願望もあってひとまずやってみることにしました。

 

手法

みなさん大好き、「よっ、ディープラーニング。」ってやつです。最近のDeepによる画像変換の波はすごいですね。色付け、ラフ線画、超解像、etc. エンコーダ・デコーダタイプのネットワークの登場によって画像対画像をそのまま学習できるようになったのは素晴らしいです。今回もそれでいきます。

ネットワーク

ネットワーク構造は、当初小さめのエンコーダ・デコーダタイプのネットワークにしていたのですが、途中で解像度を落とすとどうも出力が薄くなってしまうので、超解像に使われるネットワークのように入力サイズを変えないまま畳み込んでいくネットワーク構造にしました。構造は以下の図の通りです。

f:id:kaid_lc:20171223150504p:plain

 

  • 6層の畳み込みネットワーク
  • 入出力は1チャンネルのグレースケール画像で解像度は入出力で同じ
  • 最終層以外はフィルタは全て32、最終層は1
  • 最初の層のみフィルタカーネル11×11としてサポートを広めに確保、他は3×3
  • 活性化関数は中間層ではすべてReLU、最終層のみSigmoid

データセット

「ラフや線画」を正解データ、その正解データに「影や映り込みの画像」を合成したものを入力として学習させます。解く問題としてはデノイズに近いので、Deepの問題としては比較的簡単だと思います。

データセットと呼ぶほどのものではないですが、そこそこの解像度があるラフや線画と「合成用の映り込み画像」を20枚ずつ程度用意。回転反転スケーリングしてランダムクロップして乗算して合成したものを学習させます。

学習

ロスはMSEロス、更新はADADELTAで行いました。データも少ないしネットワークも大きくないので学習は数時間程度で終わります。

 

結果

パッと見いい感じにスキャンした感のある出力になっていると思います。

上段の画像はめるとん様( @BlackoolongteA )よりご提供いただいております。

 

 

f:id:kaid_lc:20171223153029j:plain
f:id:kaid_lc:20171223153102p:plain
入出力
f:id:kaid_lc:20171223153409p:plain
f:id:kaid_lc:20171223153403p:plain
入出力

 

f:id:kaid_lc:20171223154614p:plain
f:id:kaid_lc:20171223154622p:plain
入出力



 

まとめ

ちょっと遊んでみた程度ですがわりとちゃんとできたので良かったです。もう少しデータ増やして、ドキュメントとかにも対応させてwebサービスとかにしたいなとか勝手に思ってます。とりあえず冬コミの原稿がやばいので今回はこの辺で。読んでいただきたいた方ありがとうございました。

 

参考文献

[1] C. Li, X. Liu, and T.-T. Wong. Deep extraction of manga structural lines. ACM
     Trans. Graph., 36(4):117:1–117:12, July 2017.

[2] J. Kim, J. Kwon Lee, and K. Mu Lee. Accurate image super-resolution using very
     deep convolutional networks. In The IEEE Conference on Computer Vision and 
     Pattern Recognition (CVPR), June 2016. 

 

Fully-CNNがもたらしてくれたもの

 12/17 身内アドベントカレンダー向け

注: この記事はFully-CNNの紹介をする上でDeepの歴史やこれまでの功績をかいつまんで概観するに留まります。Deep そのものの技術や細かい手法の話には触れません。

Deep Learningがもたらしたもの

ここ数か月、巷で「人工知能人工知能」と言葉だけが独り歩きしている。その人工知能を実現する上で特に注目が集まっている機械学習の手法が、Deep Learning であると言っていいだろう。

 

Deep Learningそのものは流行り廃りを繰り返し、GPUなどのリソースが豊富なこの時代になって再度注目を浴び始めた。今のDeep Learning ブームの起爆剤となったのは、2012年の一般物体認識コンペティション ILSVRCにおいて Krizhevsky らのCNN (Convolutional Neural Network) を用いた手法が、従来の手法に大差をつけてたたき出した結果であった。ここからDeepへの期待が飛躍的に高まり、画像への応用、特にComputer Vision の分野においてはスタンダードな手法と言ってよいところまできている。研究が進むとともに、データセットフレームワークなども充実してきており、Deepはより身近な存在になってきたように思う。

f:id:kaid_lc:20161217184822p:plain

KrizhevskyらのCNNモデル。Krizhevsky et al., ImageNet Classification with Deep Convolutional Neural Networks, NIPS2012 より画像を引用。

 

 

Deep で出来ることとして、まず第一に分類問題が挙げられる。上記のような、CNNによって画像から特徴を抽出、ベクトル化し、それをクラス分類するという問題に長けている。Deep Learningは、簡単に言ってしまえば「すべての学習データにフィッティングするような」「大規模な非線形関数」を作っている手法である。例えば分類問題でいうなら、猫の画像を入力として与えたときに「猫」のラベルがきちんと出力されてほしい、犬なら犬、といったようなことを大量の学習データ(この場合では画像とそのラベル)から学習させ、その識別が可能な非線形関数を求めるということである。

 

学習データを変えることで自然言語、音声など、様々な問題への適用が提案され、多くのジャンルでも同様に良い認識精度をあげている。

Fully-CNNがもたらしたもの

近年、Fully-CNNという、畳み込み層のみから構成されるネットワークモデルが提案された。最初は2015年の Long らの研究 [ Long et al. Fully Convolutional Networks for Semantic Segmentation CVPR2015] やNoh らの研究[ Noh et al. Learning Deconvolution Networks for Semantic Segmentation ICCV2015]は、タイトルの通りセグメンテーションを行うために利用されていた。

 

従来用いられてきたCNNのモデルは全結合層を持つため、画像サイズが固定であるという欠点があった。全ての層が畳み込み層で構成されるFully-CNNは、入力画像と出力画像のサイズが同じ、入力画像のサイズが可変という特徴を持つ。また、「画像」を入力として「正解ラベル」を教師データとする従来の分類問題とは違い、何よりも「画像」をターゲットとして「画像」を入力とする学習が可能となったことが一番の貢献である。これにより様々な画像間の関係を直接一つの関数で表すことができるようになった。

f:id:kaid_lc:20161217192453p:plain1枚の画像間で学習させた結果。かいぢうのイラストを使用。極端な例だが、このように画像間の関係を学習することができる。

 

従来、画像の編集などの技術はピクセルごとの処理やパッチベースでの処理など、何らかの制約のもとにユーザーが指定、目的の処理を行うというものが多かった。Fully-CNNがもたらしたこの「大規模な非線形関数」を「画像間の対応関係」に利用するという考え方は、様々な解像度の画像に対し、自動で目的の処理を行うフレームワークを作ることができるという貢献をもたらした。その特に顕著な例が、2016年にSIGGRAPHで発表されたラフスケッチの線画化と白黒画像のカラー化であった。

シモセラ・エドガー ラフスケッチの自動線画化

飯塚里志 — ディープネットワークを用いた大域特徴と局所特徴の学習による白黒写真の自動色付け

これらはそれぞれ「ラフ」と「線画」、「白黒画像」と「カラー画像」のペアを大量に用意し、その対応関係を学習させることで、テストデータに対しても目的の処理を行ってくれるようなフレームワークを作ることが可能であることを示した。

f:id:kaid_lc:20161217195248p:plain

Simo-serra et al. Learning to Simplify: Fully Convolutional Networks for Rough Sketch Cleanup より引用。論文内で使用されているFully-CNNモデル。従来の分類に使用するネットワークモデルと異なり、全結合層を持たない。

 

ただ、これらのような手法も、結果だけを見れば目覚ましいものがあるが、実際の学習ではDeep Learningそのものにつきまとう困難が多い。Deepはネットワークの構造そのものに始まり、学習係数やフィルタ枚数、サイズなどのハイパーパラメータが多く、その最適化は試行錯誤や経験則の域を出ない。近年ではBatch NormalizationやADADELTAなど(引用略)によって学習をスムーズ、効率的に行えるような最適化手法などが提案されてきているが、それでも最終的に人間が実際に学習させ、テストさせ、うまくいくかどうかを確認するまでは結果の保証がなされない。Fully-CNNは問題の設定からデータの用意、学習の最適化など、非常に難しいが、また同時に夢のある手法でもある。

 

最近ではDCGANのような画像生成モデルなどが話題を呼んでいるように、機械学習・画像分野の技術革新はめまぐるしい。その中でも、Fully-CNNは画像の編集などの主にグラフィクスの分野において、今後も注目の集まる技術だと考える。

 

私も引き続きFully-CNNで何か面白いことができないかと考え中でございます。コミケの原稿があるので、今日はこの辺で失礼します。

 

コミケ1日目東U38ab, きてね!(小声)