SeRanet

41
SeRanet デデデデデデデデデデデデデデデデデデデ https :// github.com/corochann/SeRanet

Transcript of SeRanet

Page 1: SeRanet

SeRanetディープラーニングを用いた超解像ソフトhttps://github.com/corochann/SeRanet

Page 2: SeRanet

目次 導入  機械学習とは  ディープラーニングとは SRCNN  問題設定  既存研究・ソフトの紹介    “ Image Super-Resolution Using Deep Convolutional Networks”     waifu2x

SeRanet   Sprice   Fusion  結果  パフォーマンスおわりに

Page 3: SeRanet

目次

導入  機械学習とは  ディープラーニングとは

Page 4: SeRanet

機械学習とは 有名なものは大きくわけて 3 種類 ・教師あり学習  訓練時には大量の入力データに対し、”正解”となる出力データも与えられる。  機械学習の目的は与えられた入力データから正解を出力するように訓練すること。 例:画像認識 ( 入力:画像データ、出力:認識結果 ( 人・猫・車など、、 ))   音声認識 ( 入力:音声データ、出力:音声をテキストに変換したもの )

・教師無し学習  大量の入力データのみが与えられる。  機械学習の目的はデータに存在する、データ分布の偏りを抽出してカテゴライズすること。 例:癌のタイプ分類   リコメンデーションで趣味が似ているユーザー同士を自動で結びつける ・強化学習 エージェントは毎回可能なアクションが与えられ、選んだアクションによって環境との相互作用をおこしながら報酬を得る。というモデルのもとで、得られる報酬を最大化する問題。 例: Deepmind の DQN が有名。   バックギャモン・囲碁などのゲーム   機械の動作方法を自動獲得

Page 5: SeRanet

機械学習とは 有名なものは大きくわけて 3 種類 ・教師あり学習  訓練時には大量の入力データに対し、”正解”となる出力データも与えられる。  機械学習の目的は与えられた入力データから正解を出力するように訓練すること。 例:画像認識 ( 入力:画像データ、出力:認識結果 ( 人・猫・車など、、 ))   音声認識 ( 入力:音声データ、出力:音声をテキストに変換したもの )

・教師無し学習  大量の入力データのみが与えられる。  機械学習の目的はデータに存在する、データ分布の偏りを抽出してカテゴライズすること。 例:癌のタイプ分類   リコメンデーションで趣味が似ているユーザー同士を自動で結びつける ・強化学習 エージェントは毎回可能なアクションが与えられ、選んだアクションによって環境との相互作用をおこしながら報酬を得る。というモデルのもとで、得られる報酬を最大化する問題。 例: Deepming の DQN が有名。   バックギャモン・囲碁などのゲーム   機械の動作方法を自動獲得

今回扱うのはこれ

Page 6: SeRanet

ディープラーニングとは日本語では深層学習生物の神経回路を模した、多層のニューラルネットワーク(→以下 NN)を用いて行われる機械学習。

入力 出力

“ 情報が第 1 層からより深くへ伝達されるうちに、各層で学習が繰り返される。この過程で、これまでは画像や音声などそれぞれのデータの研究者、技術者が手動で設定していた特徴量が自動で計算される。”                                                         Wikipedia より 

Page 7: SeRanet

目次 SRCNN  問題設定  既存研究・ソフトの紹介    “ Image Super-Resolution Using Deep Convolutional Networks”     waifu2x

Page 8: SeRanet

機械学習を用いた超解像タスク 訓練時のタスク設定 ・サイズを半分に圧縮した画像がインプットとして与えられる。  オリジナルの画像を復元してアウトプットせよ

この写像を構成したい。 機械学習の目標は、この写像としてより最適に近いものを構成 ( 学習 ) すること。 機械学習後にこのような写像が得られると、、、

オリジナル画像 圧縮画像

Page 9: SeRanet

機械学習を用いた超解像タスク 機械学習後 ・任意の画像をインプット → 超解像された2倍のサイズの画像をアウトプット

与えられたインプット画像に 2 倍のサイズのオリジナル画像があったかのようにその ( 存在しない ) 予測画像を”復元”して出力する。

拡大された画像高画質! 拡大したい画像

学習された写像

Page 10: SeRanet

写像の構成方法画像認識などでも用いられる、深層畳み込みニューラルネットワークを用いる。 Deep Convolutional Neural Network (→以下 CNN)

Page 11: SeRanet

先行研究①“Image Super-Resolution Using Deep Convolutional Networks” Chao Dong, Chen Change Loy, Kaiming He and Xiaoou Tang https://arxiv.org/abs/1501.00092

“SRCNN” を提案した元論文。 Convolutional Neural Network を用いることによって、 既存の超解像手法に勝る結果が得られたことを発表。

本スライドでは以下” SRCNN の論文”と表記します。http://mmlab.ie.cuhk.edu.hk/projects/SRCNN.html より

Page 12: SeRanet

手法の概要1.画像ファイルを読み込む2.事前処理として先に画像を 2 倍に拡大しておく (n倍も可 )  3. RGB フォーマットを YCb Cr へ変換し、 Y Channel のみを取り出す。4.正規化: 0-255 の値を 0-1 へ。5.ニューラルネットワークに入力  出力として Y channel で正規化されたものが得られる6.得られた出力を 0-255 の値に戻す。7. Bicubic 法などの方法で拡大された画像の CbCr Channel と合体させて最終画像を得る。※ 3.と7.は RGB すべてを入出力として訓練する場合はスキップ。

Page 13: SeRanet

従来手法の特徴① ・ Y Channel のみを入出力としてトレーニング人間の視覚特性として、輝度 (Luminance) には色差よりも敏感だという特徴があるので、 RGB Channel ではなく、 YCbCr フォーマットの Y 成分のみを入出力と扱うことで、問題をより簡単にしようという工夫。

Y 成分 Cr 成分 Cb 成分 YCbCr 成分に分解

Page 14: SeRanet

従来手法の特徴① ・ Y Channel のみを入出力としてトレーニング人間の視覚特性として、輝度 (Luminance) には色差よりも敏感だという特徴があるので、 RGB Channel ではなく、 YCbCr フォーマットの Y 成分のみを入出力と扱うことで、問題をより簡単にしようという工夫。

Y 成分 Cr 成分 Cb 成分 YCbCr 成分に分解

・ RGB Channel だとトレーニングが難しくなる。 SRCNN の論文内では、 RGB の 3 Channel で訓練した際のパフォーマンスも比較されていて、 CNN の規模を大きくとった場合以外には Y Channel だけで CNN を構成した方がよかったという結果。

Y 成分のみを CNN で扱う

Page 15: SeRanet

従来手法の特徴② ・入力にあらかじめ拡大された画像を用いる。SRCNN の論文では Bicubic法、 waifu2x( 後述 ) では Nearest neighbor 法で拡大した画像をCNN に入力している。

 

[理由]ニューラルネットワークの畳み込み層を機械学習ライブラリを使って実装する場合、入力と出力の画像サイズはほぼ等しくなるため、あらかじめサイズ調整しておく必要がある。(※厳密にはアウトプットの画像サイズはフィルターサイズ分だけ小さくなる )

入力 出力

CNN

画像を拡大Y 成分のみ抽出

画像を拡大  Cr・ Cb Channel は CNN使用しない

合成

Page 16: SeRanet

先行研究①  CNN モデル

CNN の構成 Layer1 Layer2 Layer3

In channel 1 32 64Out channel 32 64 1Kernel size 9 5 5

パラメータ数 2628 51264 1664

畳み込み回数 2592×4WH 51200×4WH 1600×4WH

浅めの階層だが、畳み込みの Kernel size を大きくとっている。

論文中の CNN の構成の一例 (論文内では他にもいろいろなパラメータでテストされている。 )

※パラメータ数 = In channel * Out channel * (kernel size)^2 + Out channel で計算※畳み込み回数は 1ピクセルあたり = In channel * Out channel * (kernel size) ^2 + Out channel で計算。拡大前の画像サイズを w × h ピクセルとすると、 2 倍に拡大後は 2w×2h になることから総計では 4whピクセル分畳み込みを行っている。

総パラメータ数: 55556 総畳み込み量: 55392×4WH

Page 17: SeRanet

先行ソフト②  waifu2xwaifu2x https://github.com/nagadomi/waifu2x

ちなみに waifu は俺の嫁 (wife) のローマ字綴りから来ているようhttps://github.com/nagadomi/waifu2x より

もともとはアニメ調の画像を拡大するソフトとして公開 現在は写真画像に対しても対応 サーバーが動いていて、実際に試せます。 http://waifu2x.udp.jp/

Page 18: SeRanet

先行ソフト②  waifu2x論文という形から、実際にアプリケーションとしてオープンソースで公開されたことにより、一般のソフトウェアエンジニアにもソフト開発できるように。現在多くの派生ソフトが開発されています。

[関連リンク ]・ waifu2xとその派生ソフト一覧  http://kourindrug.sakura.ne.jp/waifu2x.html・サルでも分かる waifu2x のアルゴリズムhttps://drive.google.com/file/d/0B22mWPiNr-6-RVVpaGhZa1hJTnM/view

Page 19: SeRanet

先行ソフト②  waifu2x の CNN モデル

畳み込みの Kernel size を 3 と小さくとる分、深いニューラルネットを構成している。

waifu2x の CNN

CNN の構成 Layer1 Layer2 Layer3 Layer4 Layer5 Layer6 Layer7

In channel 1 32 32 64 64 128 128Out channel 32 32 64 64 128 128 1Kernel size 3 3 3 3 3 3 3

パラメータ数

320 9248 18496 36928 73856 147584 1153

畳み込み量 288×4WH 9216×4WH 18432×4WH 36864×4WH 73728×4WH 147456×4WH 1152×4WH 畳み込みの Kernel size が小さい分、深い CNN を構成。

総パラメータ数: 287585 総畳み込み量:287136×4WH

Page 20: SeRanet

SRCNN タスクの特徴 画像認識タスクと比べた場合の違い 1.位置依存性が望まれる。  →画像認識では Translation invariant な性質が好まれるが、    超解像では各ピクセルでの値を出力したいために Translation variant な出力が求められる。    つまり、 Max pooling や Stride などの画像認識タスクで用いられる手法は歓迎されない。 2.ネットワークの後段にいっても画像サイズを小さくできない  → Feature map を増やすと計算量がとても大きくなってしまうため、    実行速度・メモリの両方に関してよりシビアな条件が求められる。     CNN 計算時に必要なメモリ量≒ CNN の図での直方体の体積といえます。    画像認識タスクでは一般的に後段にいくにしたがって画像サイズが小さくなってい    くため、 Feature map の数が増えてもメモリサイズに問題がでずらいですが、 SRCNN の場合     Feature map が増やすと (1024 など ) 6GBほどのメモリがいっぱいになることはすぐ起きてしまう。

Page 21: SeRanet

目次

ここからようやく本プロジェクトの話。既存研究・ソフトに対してより良い結果が得られないか工夫してみた点を紹介します。

SeRanet   工夫1  Sprice    工夫2  Fusion     SeRanet の CNN モデル

Page 22: SeRanet

SeRanet  工夫1 Splice CNN にもともとのサイズ w × h の画像を入力して、 2w × 2h のサイズの画像を出力として得たい → ネットワークの Split と Splice という概念を導入する。入力はw × h

Split

Splice: 4 つのニューラルネットワークをひとつに合流させて 2w × 2h のサイズを得る。Split: ニューラルネットワークを 4 つに分岐させる

Splice

出力は 2w × 2h LU

RU

LD

RD

Page 23: SeRanet

SeRanet  工夫1 Splice 4 つに Split されたニューラルネットワークはそれぞれ、拡大後の画像の左上 (LU) 、右上(RU) 、左下 (LD) 、右下 (RD) のピクセルに対応

Split Splice

入力画像 出力画像

(1, 1) (1, 2)

(2, 1) (2, 2)

(1, 1) (1, 2)

(2, 1) (2, 2)

(1, 1) (1, 2)

(2, 1) (2, 2)

(1, 1) (1, 2)

(2, 1) (2, 2)

(1, 1) (1, 2)

(2, 1) (2, 2)

(1, 1) (1, 2)

(2, 1) (2, 2)

(1, 1)

(1, 1)(1, 1)

(1, 2)

(1, 2)(1, 2)

(2, 1)

(2, 1)

(2, 1) (2, 2)

(2, 2)

(2, 2)

Splice の段階で 4 つの CNN からの出力結果を”つなぎ合わせ” (splice) して、2倍のサイズの画像にする。

LU RU

LD RD

Page 24: SeRanet

Splice導入による効果  →  ニューラルネットワーク設計の柔軟性が増す

入力はw × h

Split Splice

出力は 2w × 2h

第3 Phase第2 Phase第1 Phase

第1 Phase:画像サイズが wxh と拡大される前なので、後段と比べて計算量が1/4と少ない。        →この段階で比較的大きなサイズの Feature map 、 Kernel size を使用できる。第2 Phase :画像サイズ wxh の畳み込みを4つ行う。        計算量は第3 Phase と同じだが、 LU, RU, LD, RD のそれぞれで異なるパラメータを学習できる。        →モデルの表現力の向上を狙う        また、 1 つ 1 つの畳み込み計算の際の画像サイズは wxh のままなので、 Feature map の数が多くて        もメモリ Overflow しづらい第3 Phase :画像サイズ 2wx2h の畳み込み。最終出力を得るための Phase        ここでは、 Feature map の数が多くなり過ぎると、簡単にメモリ Overflow に達する&        一気に計算時間が長くなってしまうので注意が必要。

Page 25: SeRanet

目次

SeRanet   工夫1  Sprice    工夫2  Fusion     SeRanet の CNN モデル

Page 26: SeRanet

Fusion とはColorization の論文にて紹介されていた手法。まずは論文について紹介を。 ・“ Let there be Color!: Joint End-to-end Learning of Global and Local Image Priors for Automatic Image Colorization with Simultaneous Classification” Satoshi Iizuka, Edgar Simo-Serra and Hiroshi Ishikawa http://hi.cs.waseda.ac.jp/~iizuka/projects/colorization/en/

この研究では、 白黒画像の入力から 色付き画像を出力として得るように、 CNN を教師あり学習させている。

https://github.com/satoshiiizuka/siggraph2016_colorization より

入力

出力

Page 27: SeRanet

Colorization で使用されたニューラルネットワーク

上部がもともとの Colorization で使用される CNN 。下部の NN は画像分類をするために訓練されたニューラルネットワーク。下部の NN は”この画像が屋外で撮られたものである”などのより画像全体にわたる (Global な ) 特徴を学んでいると推測される。そういった Global Feature を Colorization を行う CNN に組み込む= Fusion させることによって、色付けの精度が上がったという結果。Global feature の導入がうまく働いている例として以下のようなものが紹介されている、詳しくは論文で。 例:室内画像で画像上部を空の色に塗るような誤認識が減る。    海の部分を土の赤色で塗るような誤認識が減る。など。

http://hi.cs.waseda.ac.jp/~iizuka/projects/colorization/en/ より

Page 28: SeRanet

SeRanet  工夫2 Fusion SeRanet では画像認識など、他の教師あり学習は行っていないが、二つの種類の CNN を Fusion させている。

狙い:異なる非線形 Activation を用いることによるモデルの表現力の向上。 ※初めは Convolutional Restricted Boltzmann Machine による Pre-training から得られたネットワークとの    Fusion を行いたい、というアイデアから導入したが、いまのところ Convolutional RBM の訓練が  うまくいっていません。

上部ネットワークは Leaky ReLU関数を Activation として利用。 下部ネットワークは Sigmoid関数を Activation として利用。

Page 29: SeRanet

SeRanet の CNN ネットワーク seranet_v1 の CNN

Split Splice第3 Phase第2 Phase第1 Phase

CNN の構成 Layer1 Layer2 Layer3

In channel 3 64 64

Out channel 64 64 128

Kernel size 5 5 5

パラメータ数

4864 102464 204928

畳み込み量 4800×WH 102400×WH 204800×WH

Layer4 Layer5 Layer6

256 512 256

512 256 128

1 1 3

131584 131584 295040

131072×WH 131072×WH 294912×WH

Layer7 Layer8 Layer9 Layer10

128 128 128 128

128 128 128 3

3 3 3 3

147584 147584 147584 3584

147456×4WH 147456×4WH 147456×4WH 3456×4WH

Fusion

総パラメータ数: 3303680 総畳み込み量: 1159150×4WH

× 2 ×4

Page 30: SeRanet

各モデルの比較

パラメータ数は waifu2x の 10 倍以上 総畳み込み量 (≒ 計算量 ) は 4 倍程度計算量に対して、パラメータ数の増加量が多くなっているのは、 Split ・ Splice を導入した効果により位置依存性のあるパラメータがあるため。

( パラメータ数を増やした方がモデルの表現力が広がり、よい結果が出ることを期待している。 )

→ これだけパラメータ数、計算量が増えたのだからいい結果が期待できる、、、??

モデル SRCNN論文 waifu2x SeRanet_v1

パラメータ数 55556 287585 3303680

畳み込み回数 55392×4WH 287136×4WH 1159150×4WH

Page 31: SeRanet

目次 結果  パフォーマンス  各画像拡大手法の比較

・ Bicubic 法 ・ Lanczos 法 ・ waifu2x ・ SeRanet

従来の画像拡大手法CNN を用いた画像拡大

スライドを行ったり来たりさせて比較してみてください。Slideshare だとわかりづらい場合はこちらで → https://github.com/corochann/SeRanet

Page 32: SeRanet

結果入力画像

Page 33: SeRanet

結果Bicubic 法 (OpenCV の resize関数を使用 )

Page 34: SeRanet

結果Lanczos 法 (OpenCV の resize関数を使用 )

Page 35: SeRanet

結果waifu2x   (http://waifu2x.udp.jp/ にて、スタイル:写真、ノイズ除去無し、拡大x2を選択 )

Page 36: SeRanet

結果SeRanet

Page 37: SeRanet

結果オリジナル画像 (参考 )

Page 38: SeRanet

結果オリジナル画像 (参考 )

違いはわかりましたか?1番目のようなとても細かい写真や、 4番目の写真の茎の細い線の部分などの高周波成分で差が見れるかと思います。

Page 39: SeRanet

結果  パフォーマンス  各画像拡大手法の比較 個人の見た目感覚では、、、 ・ Bicubic 法 ・ Lanczos 法 ・ waifu2x ・ SeRanet ・ オリジナル画像 といった結果となりました。 (数値的な計測比較はまだできていません )

従来の画像拡大手法CNN を用いた画像拡大

ほぼ同じほぼ同じ 差がある

差がある

Page 40: SeRanet

まとめ SeRanet で取り入れた工夫・従来手法との違い ・ 大規模な CNN を使用(深さ 9 層、総パラメータ数 3303680 )・ Y の 1 Channel ではなく、 RGB 3 Channel全てを用いたネットワーク構成・訓練・ Split, Splicing を導入 右上・左上・右下・左下それぞれ別パラメータを用いることによるモデル表現力の向上を狙う・ Fusion の導入 異なる非線形 Activation を組み合わせることでモデル表現力の向上・ Convolutional RBM の導入、 Pretraining 。 位置依存したローカルな特徴量を教師無し学習で抽出する。

と、いろいろ試しては見たものの、パフォーマンスの大きな向上は見られていない、といった現状。一方で、オリジナル画像とはまだ確かに差がある状態なので、まだ改善の余地はありそう。

Page 41: SeRanet

さいごに 本プロジェクトはオープンソースプロジェクトです、ソースコードは github にて公開しています。 改善案・ Discussion 大歓迎。

実装のより細かい話はブログにて説明する予定です。 http://corochann.com/

参考文献や写真の引用などで不適切な点があれば削除など対応しますのでお知らせください。 個人で作った資料なので、間違って理解している点があるかもしれません。 間違いがあればご指摘ください。