SSブログ

進化型画像生成ソフトウェアの "Evolvotron" で作った画像。 [ソフトウェア]

先日、人工ニューラル ネットワークで多数の画像を学習して素晴らしい画質で画像を拡大したりノイズ低減したり出来るプログラムである " waifu2x " について記事を書きました。

ブログ記事: 最高峰の学習型画像拡大ソフトウェアを使ってみました。
http://crater.blog.so-net.ne.jp/2015-11-26

その中で、学習用の画像データ セットは全て私が " Evolvotron " というアプリケーション ソフトウェアを用いて自動生成したものを使用したと述べました。

この、 " Evolvotron " というソフトウェアは、プログラムが自動的に生成した多数の模様の中から自分の好みのものを選ぶと、他の画像について新たにそれに近いパラメーターを持つ画像に変異(Mutate)させます。
これを繰り返して行くと数世代後には、より自分好みの絵柄が得られるという訳です。

"Evolvotron" の公式ウェブサイトのURL:
http://www.bottlenose.net/share/evolvotron/

" waifu2x " 及び " Evolvotron " については先日の記事をご覧いただくとして、今回はそのEvolvotronに生成させた画像を掲載させて頂きます。

生成画像の大きさは、2048 x 2048[pixels]です。

CG_Art_Original_1
https://c1.staticflickr.com/1/713/23307011139_f803570cce_o.png
CG_Art_Original_2
https://c1.staticflickr.com/1/732/23674973725_a74673a73d_o.png
CG_Art_Original_3
https://c2.staticflickr.com/6/5719/23379300570_d4c8782812_o.png
CG_Art_Original_4
https://c1.staticflickr.com/1/586/23307009709_0bed7066d1_o.png
CG_Art_Original_5
https://c1.staticflickr.com/1/584/23379299660_40c3e1d48d_o.png
CG_Art_Original_6
https://c2.staticflickr.com/6/5771/23046805494_786f2b1a31_o.png
CG_Art_Original_7
https://c1.staticflickr.com/1/735/23648880226_d302a2deeb_o.png
CG_Art_Original_8
https://c2.staticflickr.com/6/5801/23307007729_395b075366_o.png
CG_Art_Original_9
https://c1.staticflickr.com/1/645/23592502051_f86dc96b36_o.png
CG_Art_Original_10
https://c1.staticflickr.com/1/645/23674970235_511eefe8de_o.png
CG_Art_Original_11
https://c2.staticflickr.com/6/5787/23379297560_42c9498709_o.png
CG_Art_Original_12
https://c2.staticflickr.com/6/5658/23379297200_413fddb645_o.png
CG_Art_Original_13
https://c1.staticflickr.com/1/759/23566407422_43fbed9cd6_o.png
CG_Art_Original_14
https://c2.staticflickr.com/6/5823/23592499481_1ebce00337_o.png
CG_Art_Original_15
https://c1.staticflickr.com/1/746/23648876656_3989c857c3_o.png
CG_Art_Original_16
https://c2.staticflickr.com/6/5809/23047900293_ee24dfb075_o.png
CG_Art_Original_17
https://c1.staticflickr.com/1/573/23046801174_69b83d0227_o.png
CG_Art_Original_18
https://c1.staticflickr.com/1/699/23674966985_5e188c8932_o.png
CG_Art_Original_19
https://c2.staticflickr.com/6/5674/23379294000_b62d3a3355_o.png


そして、生成した画像を " XnConvert " というソフトウェアで一括処理で " エンボス(強) " 加工すると、以下の様になります。
CG_Art_Emboss_1
https://c2.staticflickr.com/6/5623/23592517401_f4c4089953_o.png
CG_Art_Emboss_2
https://c2.staticflickr.com/6/5831/23566423182_a75a91bc8b_o.png
CG_Art_Emboss_3
https://c2.staticflickr.com/6/5654/23566422222_b2d9b9971a_o.png
CG_Art_Emboss_4
https://c1.staticflickr.com/1/772/23047915023_3d39592779_o.png
CG_Art_Emboss_5
https://c1.staticflickr.com/1/645/23648886906_4a42f3dac7_o.png
CG_Art_Emboss_6
https://c1.staticflickr.com/1/779/23307014069_b665ff8982_o.png
CG_Art_Emboss_7
https://c2.staticflickr.com/6/5652/23566414492_5802be1d21_o.png
CG_Art_Emboss_8
https://c2.staticflickr.com/6/5779/23566413232_e3e1c729a2_o.png

最高峰の学習型画像拡大ソフトウェアを使ってみました。 [ソフトウェア]

->->
[2018年12月28日追記]
2018年12月28日現在の最高峰の画像拡大プログラムは、SRGAN (超解像敵対的生成ネットワーク / Super-Resolution Generative Adversarial Network)及びその派生型です。

わたしは現在、このSRGANを改造して機械学習を実行して遊んでおります。
信じられないほどに自然で美しい縦横4倍の拡大ができます。
<-<-




2016年9月6日現在最高峰の画像拡大ソフトウェアはと言えば、 " waifu2x " であると言えるでしょう。
私は2015年の11月10日にwaifu2xのリポジトリーをGitHubから私のUbuntu PCにクローンして使用してみまして、私はその非常に優れた画像拡大性能にとても驚いておりました。
2016年08月18日に私は新たにwaifu2xのリポジトリーをGitHubからクローンし直しまして、改良されたwaifu2xの性能に再び驚かされたのと、自作のジェネレーティヴ アート画像による深層学習で良い結果が得られましたので、この度記事を改訂する事に致しました。

Lantana_Comparison_2_Text "waifu2x" で2回2倍に拡大した画像と元の画像とLanczosで2回2倍に拡大した画像との比較画像。ランタナの花の写真を横に3等分して比較している。
https://c1.staticflickr.com/9/8323/29416402671_97b056ff80_o.png
左から順に、自前のジェネレーティヴ アート画像群による学習済みモデル データによって " waifu2x " で2回2倍に拡大(4倍)した画像と、ランタナの花の元の写真と、 " Lanczos " で同様に拡大した画像との比較画像です。

"ultraist" 様のブログ "デー" の "Waifu2x" に関するページのURL:
http://ultraist.hatenablog.com/entry/2015/05/17/183436

githubの "Waifu2x" のディレクトリーのURL:
https://github.com/nagadomi/waifu2x

このソフトウェアは、複数層の畳み込み人工ニューラル ネットワーク(以下NN)を用いて多数の画像例から低解像度画像と高解像度画像の対応関係のパターンを学習させ、拡大させたい画像を入力すると、双三次関数補間法(Bicubic Interpolation)やランツォシュ補間法(Lanczos Resampling)等の昔から使われて来た内挿法だけでは成し得なかった高品質な高解像度画像を出力させる事が出来ます。
また、JPEG画像の中の事物の輪郭部などに見られる様なデジタル圧縮ノイズについても、同様にして圧縮ノイズを除去する事が可能です。

作者の方は大変親切な事に、ウェブ サーヴァーにてこのソフトウェアを使用できる無償のサーヴィスを提供して下さっております。

また、このソフトウェアのソースコードはgithubで公開されており、Ubuntu OS等のLinux ディストリビューションを使用しておりヴィデオ カードがNVIDIA系でCUDAが利用出来る人は直ぐにローカル環境で使用する事が出来る他、自分で学習用の画像データ セットを用意して、NNに学習させる事も出来ます。
更に動画につきましても、 " ffmpeg " などのサード パーティー製ソフトウェアを使用して動画ファイルを連続の静止画に分解する事により、waifu2xは連番の静止画を連続で拡大及びノイズ低減処理をする事が出来ますので、処理完了後に再びffmpegで動画像ファイルに書き出せば、時間は掛かりますが、もの凄く高品質な動画のアップスケーリング及びノイズ リダクションが可能です。

Windows OS環境用には既存の学習済みデータを用いるGUIのアプリケーション ソフトウェアが作られているようです。
更に、動画編集時のフレーム サーヴァーとして有名な " AviSynth " にも組み込む事が出来るプラグインも開発されているようです。

私は、P2P分散型ウェブ検索エンジンである " YaCy " や、自作天体望遠鏡で月を撮影した高画素数の画像データを多数枚自動で位置揃えと幾何学変形と合成をして高解像度化する為に使用するアプリケーション ソフトウェアである " AviStack2 " の為にUbuntu PCに、32[GB]のDDR3 SDRAM メイン メモリーを搭載してあります。

"YaCy" に関する私のブログ記事:
http://crater.blog.so-net.ne.jp/archive/c2305456728-1

月の撮影画像の合成に関する私のブログ記事: UbuntuでAviStack2により月画像処理をする。
http://crater.blog.so-net.ne.jp/2014-09-22

waifu2xの使用方法は添付ファイルに書いてある通りで実に簡単でした。
githubの "Waifu2x" の "README" ファイルのURL:
https://github.com/nagadomi/waifu2x/blob/master/README.md


2016年09月06日現在の私のPC環境は以下の通りです。

OS: Ubuntu 16.04 LTS
Architecture: x86_64
Linux Kernel: 4.4.0
Video Card: GeForce GTX750
Graphics Driver: NVIDIA binary driver version 361.45.18 (Open Source)
Main Memory: DDR3 SDRAM 32GB



私はGitHubから最新の " waifu2x " のリポジトリーをクローンし直すに当たり、まず、waifu2x及びTorch7を一旦削除致しました。
NVIDIAのGPUによる汎用コンピューティング環境であるCUDAにつきましても再び導入致しました。
まだCUDAをインストールしていない方はこれをインストールする必要がございます。

まずはNVIDIAのウェブサイトにアクセスして、私のPCはCPUがIntel Core-i7 3770TでOSは64bit版なので以下の様に環境を選択致しました。
Operating System: Linux
Architecture: x86_64
Distribution: Ubuntu
Version: 14.04
Installer Type: deb(local)

そしてCUDAの .deb パッケージ ファイルをダウンロード致しました。

2016年08月18日時点ではCUDAの正式なリリースはヴァージョン 7.5までであり、Ubuntu 16.04 LTS版は用意されていなかったので、 Ubuntu 14.04版をダウンロード致しました。

また、2016年08月18日時点ではUbuntu 16.04 LTSには、 " GCC (GNU Compiler Collection) 5.4 " がインストールされておりますが、CUDA 7.5は gcc 4.9よりも新しいヴァージョンのgccは正式にサポートされておらず、waifu2xに必要なTorch7のインストール用のシェル スクリプト実行時にビルド エラーとなります。
" unsupported GNU version! gcc versions later than 4.9 are not supported! " と表示されました。
そこで、仕方無く強制的にgcc 5.4を使用させるようにする為、設定ファイルの中のエラー処理部分をコメント アウト致しました。詳しくは当記事内で後述致します。

"NVIDIA" のウェブサイトの "CUDA" のダウンロード ページのURL:
https://developer.nvidia.com/cuda-downloads

" 端末 " から以下のコマンドを実行致しました。
sudo dpkg -i xxxx/cuda-xxxxxxxxxxx.deb
sudo apt-get update
sudo apt-get install cuda


" xxxx/cuda-xxxxxxxxxxx.deb " のパスとファイル名は各自のものを入力致します。

私が一番苦労したのは実はNVIDIAのCUDAの使用許諾契約書を読む事でした。
私はEnglishはとても苦手なのでGoogle翻訳サーヴィスで日本語に訳しながら目を通しました。
それでも読み終えるまでに長い時間が掛かりました。



次に、圧縮/展開プログラムのライブラリーである " Snappy " をインストール致しました。

sudo apt-get install libsnappy-dev




続いて、Facebookがgithubで公開している、NN コンピューティング フレームワークである " Torch7 " を導入致しました。

技術系メディアである "TechCrunch Japan" のウェブサイトの "Torch7" 関連の記事ページのURL:
http://jp.techcrunch.com/2015/01/17/20150116facebook-open-sources-some-of-its-deep-learning-tools/

私はwaifu2xを最新版にするに当たり、下記のコマンドでTorch7を一旦削除致しました。
rm -rf ~/torch


そして説明の通りに、Torch7のgit リポジトリーをクローンしました。
また、 " Lua " モジュール パッケージ管理ツールの " LuaRocks " もインストールされます。
因みにTorch7のインストールの処理が終わるまでには少々時間が掛かりました。

"Torch7" の導入に関するウェブ ページのURL:
http://torch.ch/docs/getting-started.html

まずはTorch7をGitHubからクローンし、Torch7が必要とする諸々のものをインストール致します。
git clone https://github.com/torch/distro.git ~/torch --recursive
cd ~/torch; bash install-deps


先にも述べました通り、2016年08月18日時点ではUbuntu 16.04 LTSには、 " GCC (GNU Compiler Collection) 5.4 " がインストールされておりますが、CUDA 7.5は gcc 4.9よりも新しいヴァージョンのgccは正式にサポートされておらず、waifu2xに必要なTorch7のインストール用のシェル スクリプト実行時にビルド エラーとなります。
" unsupported GNU version! gcc versions later than 4.9 are not supported! " と表示されました。
そこで、仕方無く強制的にgcc 5.4を使用させるようにする為、下記の様に設定ファイルの中のエラー処理部分をコメント アウト致しました。

この方法は以下のウェブサイトに記載されていた情報です。
"Puget Custom Computers" の記事 "NVIDIA CUDA with Ubuntu 16.04 beta on a laptop (if you just cannot wait)" のURL:
https://www.pugetsystems.com/labs/hpc/NVIDIA-CUDA-with-Ubuntu-16-04-beta-on-a-laptop-if-you-just-cannot-wait-775/

警告: この用法を実行する事による危険性に関しては私は承知致しません。 私はこの方法を実行した事によって生じるいかなる損害も補償出来ません。 全てはあなた自身の責任の下に判断して下さい。

/usr/local/cuda/include/host_config.h
上記ファイルの中の該当箇所を下記のように先頭に " // " を付け足してコメント アウト致しました。
//#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!


そして、Torch7のインストール用のシェル スクリプトを実行致します。
cd ~/torch; ./install.sh


これで問題無くビルドに成功致しました。

上記のコマンドを実行したら、 " ~/.bashrc " と " ~/.profile " の最後に次の行が追加されました。
. /home/xxxxxx/torch/install/bin/torch-activate


尚、 " xxxxxx " には各自のユーザー名が入ります。 " ~ " はホーム ディレクトリーを表します。
追加された行の最初にある " . " は " source " コマンドと同じ意味を持ち、引数に指定したファイルに書かれている文字列を実行するものだそうです。

ここで、次のコマンドを実行する事で、ログインし直さずに " torch-activate " が実行されます。
source ~/.bashrc


次回のログイン時からは上記のコマンドの実行は不要です。

" 端末 " から次のコマンドを実行して、 " 端末 " に " Torch " のロゴマークが表示されれば正常に使用出来る状態です。
th


必要があるか、また記述の仕方が正しいかどうかは存じませんが、 " ホーム ディレクトリー " にある " .profile " を編集して以下の行をファイルの最後に追記する事により、環境変数を設定致しました。
export PATH=$PATH:~/torch/bin:/usr/local/cuda-7.5/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/torch/lib:/usr/local/cuda-7.5/lib64


私は " CUDA 7.5 " をインストールしたので環境変数のパスに " cuda-7.5 " と書きましたが、各自の環境に合った名前に致します。

各々のパスは " : "(コロン) で区切られます。
" PATH= " で " PATH " という変数に値を代入します。
" LD_LIBRARY_PATH= " で " LD_LIBRARY_PATH " という変数に値を代入します。
" $PATH " 及び " $LD_LIBRARY_PATH " は既存のパスを表します。
" export " でパスを出力して環境変数を設定します。

" .profile " はUbuntuではユーザーのログイン時に読み込まれるファイルであると私は認識しております。
只、既に " torch-activate " が実行されているのですから、改めて " Torch " のパスを設定する必要は無いのかもしれません。
余談ですが、Linuxでは一般的にシェルに " bash " が使われているところ、Ubuntuではログイン シェルについては " bash " ですが、その他は " dash " が使われているそうです。

シェルやGUI、CUI、ファイル マネージャー、ログイン、端末、TTY、daemon等について、解り易く解説してくれているウェブ ページを勝手ながら紹介させて頂きます。
ブログ "主に言語とシステム開発に関して" の記事ページ "Linux上でシェルが実行される仕組みを,体系的に理解しよう (bash 中級者への道)" のURL:
http://language-and-engineering.hatenablog.jp/entry/20110617/p1



次に、必要な " LuaRocks " パッケージをインストール致しました。

luarocks install graphicsmagick # upgrade
luarocks install lua-csnappy
luarocks install md5
luarocks install uuid
luarocks install csvigo
PREFIX=$HOME/torch/install


説明ページに記載があった " Turbo " は、ウェブ アプリケーション関係のものですが、私はそれには関わらないので、これについてはインストール致しませんでした。



最後に、 " waifu2x " のgit リポジトリーをクローン致しました。




ここで、早速 " waifu2x " を試してみます。
" 端末 " で次のコマンドを実行致します。
cd waifu2x
th waifu2x.lua


しかし、画像処理プログラムである " GraphicsMagick " がインストールされていない場合はエラー メッセージが出ます。
~/waifu2x$ th waifu2x.lua
gm (GraphicsMagick) binary not found, please install (see www.graphicsmagick.org)
images/miku_small(noise_scale).png: 1.1321530342102 sec

この場合は下記の様にして " GraphicsMagick " をインストールします。
sudo apt-get install graphicsmagick


これで正常に動作する筈です。

これで準備が整いましたので、まずは添付されていた学習済みデータを用いて任意の画像の拡大を試してみました。
2倍の寸法にする拡大ですが、非常に素晴らしい画質でした。

以下のコマンドは作業ディレクトリーを " ~/waifu2x/ " としてあります。

" input_image " は拡大対象の画像ファイルのパスとファイル名を入力します。
" output_image " は保存する際の画像ファイルのパスとファイル名を入力します。

[レヴェル1のノイズ除去 + 2倍に拡大]
th waifu2x.lua -m noise_scale -noise_level 1 -i input_image.png -o output_image.png




次に、自前の画像データ セット人工ニューラル ネットワークに学習させる事を試みました。

私は学習用画像データ セットとして、自作のHTML5のCanvas要素とJavaScriptによってジェネレーティヴ アート画像を大量に自動生成させたものだけを使用致しました。
乱数による自動生成画像です。
自作のジェネレーティヴ アート画像自動生成プログラムは下記の " Yahoo!ボックス " にアップロードして公開しております。
御興味がございましたら、どうぞ御自由にお使い下さい。
使い方は簡単で、ダウンロードしたHTML ファイルをFirefoxなどHTML5対応のウェブ ブラウザーで開き、ブラウザーの設定で " .png " 形式の画像ファイルのダウンロード時にダイアログを表示させないようにした上で、 " Play / Stop " ボタンをクリックするだけです。
すると、自動生成された画像が10秒毎にPNG形式のファイルとしてブラウザーで設定されているダウンロード ディレクトリーに次々と2048枚までダウンロードされます。
ダウンロードし終わったら、セキュリティーを維持する為に必ずブラウザーのダウンロード設定を元に戻して下さい。

[Yahoo!ボックス]
http://yahoo.jp/box/4_Sq4x

Generative Art_(2016_09_01)_1 画面全体が色とりどりの複雑に歪んだ蛇腹状の円環模様で埋め尽くされている。
https://c1.staticflickr.com/9/8199/28872340824_fe7e8fc4a7_o.png
自作のジェネレーティヴ アート画像自動生成プログラムが生成した大量のディジタル アートの1枚です。

Generative Art_(2016_09_01)_2
https://c1.staticflickr.com/9/8171/29208180350_099d57a5fc_o.png
これらの画像を大量に学習させました。

尚この画像生成プログラムは、自作インタラクティヴ ディジタル アート プログラムから派生させたプログラムです。

基となったプログラムに関する私のブログ記事: HTML5のCamvasと "JavaScript" で音声処理と画像描画。
http://crater.blog.so-net.ne.jp/2016-06-30

因みに、初めwaifu2xを2048枚で学習させた後に、512枚を追加して " -resume " オプションで追加学習させるといった事も出来ました。
私は生成させた画像2048枚+512枚を " XnConvert " という一括画像処理が出来るフリー ソフトウェアで自動コントラスト調整し、waifu2xで学習させました。
尚、このプログラムで生成した画像データを用いて学習させたwaifu2xのモデルは充分に素晴らしい画質で拡大、ノイズ リダクションが出来ました。

"XnConvert" の公式ウェブサイトのURL:
http://www.xnview.com/en/xnconvert/



ところで、私が学習用画像データ セットをジェネレーティヴ アート画像だけにした理由は、例えば実写の写真に写り込んでいる色々の嫌なもの、汚いものをNNに見せて学習させた結果が適用されるのが嫌だからです。
もし、綺麗な女性のポートレート写真を拡大した際に、睫毛の拡大処理に厳つい男性の髭で学習されたパラメーターが使われていたら嫌だなあと、感覚的な問題ですが、私はそう思ったのです。

その為に以前、フラクタル画像やカオス図形を生成するアプリケーション ソフトウェア等を中心に幾つも試したのですが、フラクタル図形は2D、3D共に、大きな構造から始まって際限無く微細な構造が描かれて行く為細部がノイズになってしまう欠点があり、カオス図形という枠組みで見ても線描画や点描画が多く、最適なものは中々見つかりませんでした。
次に " Evolvotron " というアプリケーション ソフトウェアを試しました。

"Evolvotron" の公式ウェブサイトのURL:
http://www.bottlenose.net/share/evolvotron/

" Ubuntuソフトウェアセンター " からインストール致しました。

Evolvotron_SS_(2015_11_27)_1 ジェネレーティヴ アートのアプリケーション ソフトウェアである "Evolvotron" のスクリーンショット画像。メイン ウィンドウには多数の様々な模様が表示されている。
https://c1.staticflickr.com/1/674/23257755171_2a391b2cec_o.png

プログラムによって作られる幾つもの様式の図形、模様を組み合わせて画像を生成し、乱数のパラメーターによってそれが様々に変化します。
このソフトウェアはGUIで使用出来、メインのウィンドウには横6列、縦5行のランダムに生成された画像が小さく並んでおります。
ユーザーは、この中から好きなパターンを選んでクリックします。
すると、他の画像が、選んだ画像のパラメーターを元にして、変異(Mutate)した画像に置き換わります。
" Autocool " オプションにチェック マークを付けた状態で、これを繰り返して行くと、ユーザーの好みの画像へと収斂して行き、満足の行く作品が出来上がるのです。
途中で、 " Lock " して幾つかの画像を保持する事も出来、また、パラメーターのリセットや、パラメーターのファイルへの書き出しと読み込みも簡単に出来ます。

好みの画像は大きさを選んで別ウィンドウに大きく表示する事が出来ます。
コンテキスト メニューから保存が出来ます。

レンダリングのオプションとして、 " Oversampling (antialiasing) " で輪郭等を滑らかにしたり、 " Jitterd samples " でグラデーションにジッターを加えて、ざらつきを軽減したり出来ます。

実際にどの様な画像を生成したのかにつきましては、次の記事をご覧下さい。
ブログ記事: 進化型画像生成ソフトウェアの "Evolvotron" で作った画像。
http://crater.blog.so-net.ne.jp/2015-11-30

このEvolvotronというソフトウェアが生成した画像もそこそこ良かったのですが、私は更に、乱数だけに基づいた単一のアルゴリズムによる画像群だけで学習させたく思い、HTML5のCanvas要素とJavaScriptによってこれを実現する為に前述の自作プログラムを作成したのです。
そして大量の学習用画像データ セットが用意出来ました。



これにて漸く学習の準備が整いました。
" 端末 " からCUIで学習を行わせます。

以下のコマンドは作業ディレクトリーを " ~/waifu2x/ " としてあります。

" input_image " は拡大対象の画像ファイルのパスとファイル名を入力します。
" output_image " は保存する際の画像ファイルのパスとファイル名を入力します。


[学習済みデータ格納用ディレクトリーの作成]
mkdir models/my_model



[学習用画像リスト作成]
  1. find '/home/xxxxx/xxxxx' -name "*.png" > data/image_list.txt

" xxxxx " の部分は各自の学習用画像ファイルがあるフォルダーのパスを入力します。
パスに半角スペースが含まれる場合等はパス全体をシングル クォーテーション記号で括ります。


[学習用データ変換]
th convert_data.lua



続きまして、実際の学習処理を行いました。

[2倍拡大用の学習]
th train.lua -model upconv_7 -model_dir models/my_model/ -method scale -scale 2 -test images/Reference_1.png


[2倍拡大 + 圧縮ノイズ低減処理用の学習]
th train.lua -model upconv_7 -model_dir models/my_model/ -method noise_scale -scale 2 -noise_level 3 -nr_rate 0.9 -test images/Reference_1.png


ここで、 " Reference_1.png " は私が用意した画像ファイルです。
各自任意の画像ファイルを指定して下さい。
学習が進み、モデル データが更新される度に、 " /models/my_model/ " に指定した画像を拡大した結果が保存され、性能を確認出来ます。

" 2倍拡大 + ノイズ低減処理用の学習 " のコマンドの引数にある " -nr_rate 0.9 " はノイズ低減処理の強さです。
値が大きい程ノイズを消しますが、同時に細部の情報が失われてしまいます。

Waifu2x_SS_(2016_09_01)_1_edited_1 画像拡大ソフトウェアの "waifu2x" を使用している場面のスクリーンショット画像。CUIのウィンドウが表示されている。

上記のコマンドを実行し、Ubuntuのシステム モニターでCPUとメモリーの使用率を見ていたところ、メイン メモリーは僅か12.1[GiB]程しか使用しておりませんでした。CPUはマルチスレッドで全稼働か、シングル スレッドで使用率100[%]となっておりました。
因みに初期のwaifu2xはより多くのメイン メモリーを使用しておりました。
改良によりメイン メモリーの使用率を低減出来たようです。
Waifu2x_SS_(2016_08_27)_1 システムモニターのウィンドウのスクリーンショット画像。グラフが表示されている。


上記のコマンドを実行すると、画像ファイル数の1/20の数の評価用データ セットが作られるようです。
引数で指定せず、初期設定では内部4世代 x 50世代の合計200回の反復処理が行われます。
1世代毎に学習と評価が行われ、評価が過去最高であればモデル データが更新されます。

画面には " loss " , " MSE ", " PSNR " が表示されます。
" MSE " とは " Mean Squared Error " の事で、 " 平均平方誤差 " と言います。
簡略化して述べると、基準用の高解像度画像と、処理した結果の画像との間の差分を取り、これを2乗して平均値を出した値の事だそうです。
処理が上手く行って基準用画像に近付く程、MSEの値は小さくなり、0に近付きます。
PSNR (Peak Signal-to-Noise Ratio / ピーク信号対雑音比)はMSEの値から計算されるそうです。
尚、誤差をRMS(Root Mean Square / 二乗平均平方根)としてRMS Errorとする場合も多いようです。

このMSEやPSNRの値は、学習が進む毎に徐々に変化し難くなって行きます。
また、値を更新させる割合である " learning rate decay " も指数関数的に小さくなっていきます。


私は以前、自作天体望遠鏡とコンパクト ディジタル カメラで撮影した月の画像を合成処理した際は処理完了までに約1週間掛かりましたが、今回の機械学習は僅か1日間で済みました。


上記の処理で学習(トレーニング)は完了です。
次は学習済みモデル データを使用した画像処理です。

以下のコマンドは作業ディレクトリーを " ~/waifu2x/ " としてあります。

" input_image " は拡大対象の画像ファイルのパスとファイル名を入力します。
" output_image " は保存する際の画像ファイルのパスとファイル名を入力します。

[学習させたモデル データによる2倍拡大]
th waifu2x.lua -model_dir models/my_model/ -m scale -scale 2 -i input_image.png -o output_image.png


[学習させたモデル データによる2倍拡大 + 圧縮ノイズ低減処理]
th waifu2x.lua -model_dir models/my_model/ -m noise_scale -scale 2 -noise_level 3 -i input_image.png -o output_image.png



学習が終わった畳み込み人工ニューラル ネットワークによる画像の拡大結果は非常に素晴らしいものでした。
どんな種類の画像でも元からその解像度だったのではないかと思える程綺麗に拡大出来ております。

コンピューター生成画像だけを使った学習実験は大成功でした。



以下に使用前後の比較画像を載せますが、ブログ内では縮小表示されているので、画像下のURLからオリジナルのファイルをご覧下さい。

Lantana_Comparison_1_Text "waifu2x" で2回2倍に拡大した画像と元の画像とLanczosで2回2倍に拡大した画像との比較画像。ランタナの花の写真を横に3等分して比較している。
https://c1.staticflickr.com/9/8340/28871566744_76f7899b1d_o.png
左から順に、自前のジェネレーティヴ アート画像群による学習済みモデル データによって " waifu2x " で2回2倍に拡大(4倍)した画像と、ランタナの花の元の写真と、 " Lanczos " で同様に拡大した画像との比較画像です。

Lantana_Comparison_2_Text "waifu2x" で2回2倍に拡大した画像と元の画像とLanczosで2回2倍に拡大した画像との比較画像。ランタナの花の写真を横に3等分して比較している。
https://c1.staticflickr.com/9/8323/29416402671_97b056ff80_o.png
こちらは記事の最初に掲載した比較用の画像です。

Lanczos補間法によるものと比べて輪郭は鋭利であり、また、アンダーシュートとオーヴァーシュートが無くて綺麗です。


" waifu2x " の作者様、及び、関係するプログラム等の作者様方には心より感謝申し上げます。
本当にありがとうございます。



ところで、拡大の他にもし、不鮮明なぼやけた画像を鮮明にしたい場合には他の何らかのソフトウェアを用いて " Iterative Deconvolution " という処理をするのが効果的です。
オープン ソース ソフトウェアの " GIMP " という画像編集ソフトウェアに " G'MIC - GREYC's Magic for Image Computing " というプラグインがございまして、これの機能の1つに " Iterative Deconvolution " がございます。
" GIMP 2.9.5 "内のメニュー項目は " Filters " - " G'MIC... " - " Details " - " Sharpen [richardson-lucy] " となっております。
これを使用するのが最も簡単であるかと存じます。

"GIMP" の公式ウェブサイトのURL:
http://www.gimp.org/

"G'MIC" のウェブサイトのGIMP プラグインのページのURL:
http://gmic.eu/gimp.shtml

更に、点拡がり関数の画像を自前で用意して様々なメソッドを使えるという点で、Java VM上で動作するオープン ソース ソフトウェアの " ImageJ " にプラグインを導入したものも便利だと思います。
" ImageJ " は医療や生物学等の研究者が使用する事が多いようです。

"ImageJ" の公式ウェブサイトのURL:
http://imagej.nih.gov/ij/

Gaussian_PSF_3D.class:
ガウス関数型点拡がり関数の画像スタックを作るプラグインです。
http://www.optinav.com/Convolve_3D.htm

Iterative_Deconvolution.class:
反復型の、コンヴォリューションとデコンヴォリューションの為のプラグインです。
http://www.optinav.com/Iterative-Deconvolution.htm

Iterative_Deconvolve_3D.class:
2Dと3Dの非負の反復型のデコンヴォリューションの為のプラグインです。
http://www.optinav.com/Iterative-Deconvolve-3D.htm

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。