読者です 読者をやめる 読者になる 読者になる

Deep Neural Network ライブラリ

DNN

 

Deep Neural Network (DNN) について知識がない私のために、

DNN を実装する(実際に作る)ために使う

「ライブラリ」について、

ネットで調べたまとめです。

 

DNN 界隈は高速で進化している最中です。

今後1年、2年で状況が全く変わってしまう可能性もあり、

注意が必要です。

 

ざっと調べた印象では

 実装のためには プログラミング言語C++Python を学ぶのが良い。

 GPU を使った演算処理、GPGPU が必須ですが、その実装は大変なので、ライブラリに肩代わりしてもらう感じのようです。

 人気がありそうなのは

 

長い歴史がある? Theano,

高速で研究開発も盛んなため人気な Caffe,

Google 発で注目集める TensorFlow 

 

という感じです。

 

 

 

 

 

目次

1.CUDA/CuDNN
2.TensorFlow
3.Theano
4.CNTK
5.CAFFE
6.Chainer

 

 

 

 

1.CUDA/CuDNN

CUDA

CUDA(Compute Unified Device Architecture:クーダ)とは、NVIDIAが提供するGPU向けのC言語統合開発環境

 

発表は2006年11月、CUDA 1.0の提供開始は2007年7月。

現在は CUDA 8.0 までバージョンアップしているが、最新版を使えるのは Pascal アーキテクチャNvidiaGPU のみ。ザックリ言うと、GeForce GTX 10x 系のみ!

(もし15万円出せるなら、TITAN X、50万円以上出せるなら TESLA という、高機能 GPU も CUDA 8.0 を使えます。また、Nvidia 社は、TITAN X を4枚載せた、Deep Learning に対応したコンピューター, DevBox を販売しています。アメリカ Amazon.com にて 12000 ドルで販売されていました。お金持ちの方はどうぞ)

 

後発のGPGPU関連技術にはOpenCL (1.0仕様公開は2008年) やDirectCompute, Radeon Instinct  などが存在し、これらは Nvidia 以外の GPU を使用できるらしい。

 

C言語以外からも使用することができる。

PythonPerlJava, .NET, Ruby, Lua, MATLAB, IDL, Mathematica などで。

 

CUDAはNVIDIA製のGPUでしか使えない

CUDA - Wikipedia

 

CuDNN

NVIDIA が自社製の GPU に向けて提供している Deep Neural Network (DNN) 開発用のライブラリ

DNNで使われる基本的な機能をまとめたもの。

Theano などの DNN ライブラリに合わせて使うことで、DNN の実装を大幅に省力化できる。らしい。

 

news.mynavi.jp

 

"cuDNNはNVIDIAが公開しているDeep Learning用のライブラリである。このライブラリを使うとCaffeやChainerなどのDeep Learning用のソフトウェアの速度が向上する。 この速度向上に寄与している最も大きな部分がConvolutionの高速化である。"

なぜcuDNNのConvolutionは高速なのか

より引用、 accessed 29 Jan 2017

  

CUDA や cuDNN には複数のバージョンが存在している。ライブラリ毎に対応するバージョンが異なっているため、自分の使いたいライブラリと、それに対応する CUDA, cuDNN のバージョンを確認しておく必要がある。

Pascal + CUDA 8 にて、FP16 での演算、ユニファイドメモリに対応。

 

 

 ネットを見ていますと、次のような記事がありました。

 

"最近リリースされた「TensorFlow」もCuda 7.0とCUDNN 6.5 V2が対応バージョン(最新バーションじゃ上手く動かなかった)なのでこの記事を見ればGPUの環境を整えることができますよ。TensorFlowはまだ勉強中です。"

ry0.github.io

accessed 29 Jan 2017

 

DNN ライブラリによって、CUDA、cuDNNのどのバージョンに対応しているかが異なるらしい。ので注意ですね。

 

 

2.TensorFlow

Google社の開発した(している)機械学習/DNNライブラリ。

www.tensorflow.org

C++言語pythonに対応。OS は Linux/Mac/Windows

特徴は

データフローグラフを使用したライブラリで、複雑なネットワークを分かりやすく記述できる ことらしい。

チュートリアルが素晴らしいとのこと。

比較的新しい割に、ネット上に情報が多い! さすがGoogle

 

以下引用

チュートリアル

各種チュートリアル用データセットが用意されていて、すぐに試せます。

MNIST:手書きの数字を判別
CNN:画像認識
Word2Vec:各単語の関係を学習
RNN:文章から次の単語予測
Seq2Seq Model:フランス語を英語に翻訳

引用終わり。

 

こちらから引用

www.ossnews.jp

より引用。accessed 29 Jan 2017

 

一通りのチュートリアルが揃ってますね。。。

 

 

実際に使ってみた方の講演スライド。

www.slideshare.net

実際の講演動画。

www.youtube.com

 

処理を可視化した、TensorBoard というのが素晴らしいみたいですね。

 

 

 

3.Theano

名前はよく見るが、その特徴はよく分からない。

(テアノ?)

比較的歴史があるらしい。情報は入手しやすい。

 

d.hatena.ne.jp

こちらでは、

 

"TensorFlow、Chainer、Caffe といった機械学習およびディープラーニングの代表的なライブラリ/フレームワーク3種"

 

と書いていて、DNN の有名ライブラリベスト3のうちの一つとされています。

 

 

ベストセラー本である

Python機械学習プログラミング」

「Python機械学習プログラミング」

 

でも、DNNライブラリとして取り上げられていました。

 

"Theanoはモントリオール大学のBengio教授の研究室で開発されています"

 

www.chino-js.com

 

qiita.com

よく分かりませんが、既に広く使われているモデルのようです(適当)。

 

 

4.CNTK

マイクロソフト社の開発したライブラリ。the microsoft CogNitive ToolKit

github.com

C++Python・.NET・BrainScriptをサポート。

複数のマシンの複数のGPUを利用可能で、ニューラルネットワークの訓練時の学習速度を著しく向上させることができる。という素晴らしいメリットがあるが、日本語の情報が極めて乏しいのが問題。

 

複数の PC、複数の GPU をうまく利用できるってのはめっちゃ魅力的!! しかしネット上に情報が乏しい。

 

Block Momentum, 1-bit SGD など、複数のコンピュータ、複数GPUでの学習をサポートする仕組みがあるらしい。

参考:Microsoftが公開したDeep LearningフレームワークCNTKの3つの特徴 - DeepAge

 

複数マシンを利用可能というのが素晴らしいですね。

 

が、マイクロソフトの最近の Windows 10 の動きを見ていると。手放しで信じて使って良いのか心配になります。10 になってバックグラウンドで勝手に通信、勝手にアップデートしていたり、便利ツールのpaintがなくなるとか。MS office でも、2010についていた画像ツール(簡単にトリミング、圧縮などができる、Powerpointの図ツールだけを取り出したようなソフト)が便利だったのですが、2013 や 2016 ではなくなってしまっているし。「あー便利だなー」となったところで梯子を外されないか、不安になりますね。

 

qiita.com

マイクロソフトらしくなく、イケてるって言う意見もあります。(上記qiita参照) 

 

 

こちらをご覧ください。2016年の、Deep Learning Advent Calender (クリスマス前の1ヶ月ほど、毎日みんなでネタを投下していくブログ的なもの)です。

 

それぞれの記事を見ると、どれもおもしろいのですが、その中の一つに、この CNTK が出てきます。「CNTK ってのは、ブログネタになってしまうほど、使われてないんだな・・・」という感想。だって「TensorFlow 使ってみました」なんて記事、ないですからね。

他の記事読むと、「TensorFlow使っていたけど遅かった」ですとか、TF は当たり前の用に扱われてますけど、CNTK は「ネタになる」というところでして。

 

qiita.com

 

 

 

5.CAFFE

カリフォルニア大学バークレー校にて開発されている。

C++で実装され、C++/Python/MATLABで使用できる。

「高速動作」「GPU対応」「洗練されたアーキテクチャ/ソースコード」「開発コミュニティが活発」などが特徴。

www.ossnews.jp

より引用、29 Jan 2017

 

ネットの記事見てて、全体に評価が高い印象です。

 

一例ですが、

 

"代表的なフレームワークには、

Caffe
theano/Pylearn2
Cuda-convnet2
Torch7
などがあります。この中でも最速でありかつ最も活発に開発が行われているのがCaffeです。"

qiita.com

より引用、accessed 29 Jan 2017

 

高速なのは素晴らしいですが、インストールが難しいという話もあります。

d.hatena.ne.jp

 

 

学習速度が速いのは魅力的です。ただし私の目的では、基本的に多施設共同研究となり、中央にデータを集めて中央で解析することになると思います。

おそらく参加施設様にマシーン/GPUの参加も募り、分散処理で学習すると思いますので、単純な速さよりも、分散処理への優れた対応が重要のような気がします。

そうすると CNTK なのですが。。。

 

 

6.Chainer

  Chainer: A flexible framework for neural networks

  Prefered Networks社が開発

 ☆日本製☆ と言うだけで親近感が湧いてくるライブラリ

 

www.slideshare.net

 

"既存の実装のは、独自のミニ言語に対するインタープリタを実装しているようなもの" らしいですが、Chainer では Python の標準の機能?(+Numpy?)を使って実装している様子。

 

Cython も使うようですが、そういう「独自のライブラリ」ではなく、「メジャーなライブラリ」を使う、なるべくシンプルに実装しているらしいところには好感。

 

Deep Learning のフレームワーク Chainer を公開しました | Preferred Research

accessed 29 Jan 2017

 

  1. 好きですけど、実際触って、使いやすいかは別問題なので、確認する必要がありますね。

 

次期モデルで高速化するというニュースあり!

 

"現在のChainerは、マルチノード(複数サーバー)での学習に対応にしていない"

"この分散バージョンのChainerでは設定を変更するだけで、マルチノード環境やマルチGPU環境に対応"

"32ノード/128GPUの環境で画像認識を学習。1ノード/1GPUの環境で20日以上かかっていた学習が、4.4時間で完了"

itpro.nikkeibp.co.jp

accessed Jan 29 2017

 

 

さて、目的に応じて、適切なライブラリを使うことが重要と思われます。

医用画像と言っても単純レントゲンと超音波、CT、MRI核医学、どれも特徴があり、異なっています。

 

特にニーズが高いのは、単純レントゲンと超音波、CT、MRIでしょう。

 

2D画像のレントゲンと超音波、3D画像のCTとMRIで、実装が異なるでしょう。

 

同じ2Dでも、数十ミリ秒単位で速度が必要な超音波と、数10秒が許容できるレントゲンは異なっています。例えばレントゲン、撮影装置に DNN を組み込めれば、ほぼリアルタイムで診療支援が可能なはず。現像の際に使う据え置き装置に組み込む感じですね。

一方、USは基本的にポータブル装置のため、ハードウェア的な制限が大きいでしょう。レントゲン/CT/MRIではクラウドに投げるというウルトラCがありますが、USはリアルタイム性が強み。クラウドに投げるのは無理でしょうな。。。これも将来的には装置に組み込み、危険な部位を指摘してもらえれば素晴らしいですね。比較的内部構造が単純で、早期発見による恩恵が極めて多きい、乳腺USなどがターゲットとして良いだろうなと。

 

3Dでは、もともと3次元のデータ量があるCTで、時間軸方向の変化(比較、ダイナミック造影)と更に2つの次元の情報があり更に複雑となります。MRI、CTの5次元に加え、同時撮影された異なるコントラスト画像(+1次元)があり、6次元で、もっと複雑です。CT・MRIでは、さらに臨床情報も加える(CT:6次元、MRI:7次元)ことで高精度になるでしょうが、それをどのように入力するかが課題。

 

これだけ大量の情報を持つ DNN をトレーニングするには、膨大な医用情報が必要であり、単一の医療機関や、単一の医局で行うことは恐らく不可能です。ネット上の文献から学習したりできれば良いのですが、私の脳みそでは実装方法が思いつかず。多施設共同研究で画像を集める(物理で殴る)しかないと思いますが、それにしたって膨大な情報量です。はたして、職があるうちに収集、実装、学習できるか・・・

 

しかし DNN による画像診断が普及すれば、その恩恵は計り知れません。

ので夢を見て頑張ろうとは思います。