2016年6月26日日曜日

Deep Learning入門(Chainer+Windows編)

最近小難しい画像処理をやるよりかは教育済みの人工知能に判別してもらったほうがいいのではないかと思い、試しにDeep Learningを触ってみるテスト。


下記エントリを参照したところ、Google製TensolFlow、Lasagna、日本製のChainerの3種を比較されていて、GPUによる演算速度についてはLasagna、Chainerが優秀なようで、それほど差もないみたいなので、日本の将来に期待も込めてChainer製をインストールする。




Windwos環境へのChainerインストールについては下記エントリでPythonのインストールから説明されていたので、参照させていただきました。



■環境

CPU: intel i7 3930k
GPU: NVIDIA Geforce TITAN(GK110)
OS:   Windows 8.1 64bit

■インストール済み

・Visual Studio 2013
  => PATH を追加(C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin)

・CUDA 7.5
  => PATHを追加

■Deep Learning環境構築(Chainer編)

1.Python 3.5.1 64bitのインストール
2.PythonのインストールフォルダとScriptsフォルダを環境変数のPATHに追加
3.コマンドプロンプトで pip install -U pip →pipのバージョンアップ
4.git for windowsをインストール
5.cuDNNのダウンロード
6.コマンドプロンプトでpip install chainer -g 0を実行しChanerをインストール

■動作確認

1. コマンドプロンプトで chainer\examples\mnistフォルダへ移動
2.python train_mnist.py -g 0と打つと動作が開始


■実行結果


c:\python35\chainer>cd examples\mnist

c:\python35\chainer\examples\mnist>python train_mnist.py -g 0
GPU: 0
# unit: 1000
# Minibatch-size: 100
# epoch: 20
Network type: simple

load MNIST dataset
epoch 1
graph generated
train mean loss=0.18834821649671843, accuracy=0.9437333369379243, throughput=691
.3110249556729 images/sec
test  mean loss=0.08855921053502243, accuracy=0.97180000603199
epoch 2
train mean loss=0.0747522115187409, accuracy=0.976850009560585, throughput=10381
.941450655235 images/sec
test  mean loss=0.06881112593226135, accuracy=0.9788000071048737
epoch 3
train mean loss=0.04882968860814193, accuracy=0.9839666775862376, throughput=106
20.948297869925 images/sec
test  mean loss=0.06907143144635483, accuracy=0.979700009226799
epoch 4
train mean loss=0.03349738874007016, accuracy=0.9892000088095665, throughput=105
42.620746444218 images/sec
test  mean loss=0.07294375938065059, accuracy=0.97960000872612
epoch 5
train mean loss=0.027073768219270277, accuracy=0.990983340938886, throughput=106
77.88767790045 images/sec
test  mean loss=0.09122716756464797, accuracy=0.9740000069141388
epoch 6
train mean loss=0.0223064595470593, accuracy=0.9927166734139125, throughput=9759
.258058521522 images/sec
test  mean loss=0.0672288033500081, accuracy=0.9820000064373017
epoch 7
train mean loss=0.022047765679805403, accuracy=0.9929500065247218, throughput=10
077.110092376824 images/sec
test  mean loss=0.08667147413810199, accuracy=0.9805000066757202
epoch 8
train mean loss=0.018381894112565834, accuracy=0.9939500054717064, throughput=10
100.60864158346 images/sec
test  mean loss=0.09303110711173758, accuracy=0.9797000068426133
epoch 9
train mean loss=0.01833144460947551, accuracy=0.9945333384474119, throughput=104
19.502815740656 images/sec
test  mean loss=0.08693365473445738, accuracy=0.9802000057697297
epoch 10
train mean loss=0.01621717433361482, accuracy=0.9945166717966397, throughput=104
46.218885223827 images/sec
test  mean loss=0.07281878189469808, accuracy=0.9831000065803528
epoch 11
train mean loss=0.012322531957258132, accuracy=0.9958833369612694, throughput=10
492.04429736561 images/sec
test  mean loss=0.07679061198437238, accuracy=0.9841000080108643
epoch 12
train mean loss=0.011249084522120634, accuracy=0.9963166701793671, throughput=98
15.026065226972 images/sec
test  mean loss=0.11117106852701454, accuracy=0.979300007224083
epoch 13
train mean loss=0.014876986914943397, accuracy=0.9957000040014585, throughput=93
50.331690901867 images/sec
test  mean loss=0.08766837027709584, accuracy=0.9822000062465668
epoch 14
train mean loss=0.01137099189220199, accuracy=0.9963833367824555, throughput=102
50.936668271568 images/sec
test  mean loss=0.11220182075423422, accuracy=0.9790000081062317
epoch 15
train mean loss=0.010550330964031976, accuracy=0.9965500031908353, throughput=10
665.27569862685 images/sec
test  mean loss=0.10793900951127766, accuracy=0.9788000077009201
epoch 16
train mean loss=0.00863217724114899, accuracy=0.9975166690349578, throughput=997
0.245941056204 images/sec
test  mean loss=0.08872542766274882, accuracy=0.9804000055789948
epoch 17
train mean loss=0.009105495277005389, accuracy=0.9970333361625672, throughput=97
21.225698842078 images/sec
test  mean loss=0.1051332284804596, accuracy=0.9813000047206879
epoch 18
train mean loss=0.012184605781218731, accuracy=0.9965500032901764, throughput=98
90.955442871747 images/sec
test  mean loss=0.09870909668044149, accuracy=0.9803000062704086
epoch 19
train mean loss=0.011317851965395675, accuracy=0.9967333363493284, throughput=92
57.925678194886 images/sec
test  mean loss=0.12538345889342226, accuracy=0.976500004529953
epoch 20
train mean loss=0.0084696619688476, accuracy=0.9976500021417936, throughput=9671
.66307419608 images/sec
test  mean loss=0.10508101527237233, accuracy=0.9829000061750413
save the model
save the optimizer

■反省

それぞれのライブラリインストール時に最新版が良いと勝手に判断するとインストールが失敗したり、実行時にエラーが出てどうにもならなくなるので、自分で解決できる自信がない場合は素直に他の方が示した手順通りに進めるのが大切だと痛感しました。。。

ともあれ、これでDeep Learning環境が整ったのでガツガツやっていこう!

2015年5月11日月曜日

Windwos 8.1 ストアアプリ開発 Part.1

諸々の事情でWindows 8.1用のストアアプリを開発することとなったため、発生した問題とその対処法を記す。

ストアアプリは今までのフォームアプリと違い、XAMLによってレイアウトを定義するようになっているため、コントロールの配置、制御等の実装がまるで違うことから、まずはレイアウトに関する部分の情報から集めたい。

その関連リンクを下記に記す。

■UIの作成(XAML)
https://msdn.microsoft.com/ja-jp/library/windows/apps/xaml/br229564.aspx

■コントロール
https://msdn.microsoft.com/ja-jp/library/windows/apps/dn439320.aspx

■ストアアプリ開発入門
http://www.atmarkit.co.jp/ait/subtop/features/dotnet/app/winappprimer_index.html

2014年7月27日日曜日

Geforce TITAN でCUDA6.0を動かす

前回はCUDA5.0でのテストだったので、CUDA6.0ではどんなものかテストしてみた。
使用ソフトとはCUDA6.0のサンプルファイル「bandwidthTest」をVS2012でビルド。

■環境
CPU:3930k
GPU:Geforce TITAN
OS:Windows7 64bit

■前回データ(CUDA5.0)
 Host to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)        Bandwidth(MB/s)
   33554432                     5815.1

 Device to Host Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)        Bandwidth(MB/s)
   33554432                     6282.0

 Device to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)        Bandwidth(MB/s)
   33554432                     220126.1


■今回実施結果(CUDA6.0)n=3
 Host to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)        Bandwidth(MB/s)
   33554432                     5924.5
   33554432                     6016.3
   33554432                     6015.6

 Device to Host Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)        Bandwidth(MB/s)
   33554432                     6361.2
   33554432                     6399.1
   33554432                     6408.2

 Device to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)        Bandwidth(MB/s)
   33554432                     224998.1
   33554432                     224667.3
   33554432                     208915.6

若干高速化されてる?
割合にして3%ほど速くなったみたいだ。
ただ、PCIe Gen.2での話なのでGen.3だとどう変わるのか気になるところです。

CUDA 6.0インストール(Windows7 64bit)

CUDA 6.0が公開されていたのでインストールしてみる。
ついでに、Visual Studio 2012でサンプルファイルが動くところまで試してみた。

■環境
・CPU: Intel i7 3930k
・GPU:Geforce TITAN
・OS:Windows7 64bit
・Visual Studio Professional 2012(Ver.11.0)

■事前準備
下記リンクからCUDAのインストーラーをダウンロードしておく
※OSのビット数に合ったものでなければインストールできません


■インストール手順
(1). ダウンロードしたインストーラーを起動










インストーラーの解凍先を聞かれるが、デフォルトでOK


(2).インストーラーが立ち上がると「同意して続行する」をクリック





















(3).オプションもデフォルトの「高速」でOK





















(4).インストールが完了すると下記の画面になる
 「次へ」をクリックしてインストールは完了






















■インストール完了
はい、これでインストール完了です
前回と比べてえらく簡単に終わってしまいました

後は「C:\ProgramData\NVIDIA Corporation\CUDA Samples」
にサンプルファイルがあるので、インストールされているVisualStudioのバージョンに合うものであれば開くことが可能です。

■余談
ちなみに、私の環境で一度、インストールした後にサンプルファイルをビルドすると「MSB3721」のエラーが発生し、ビルドできませんでした。
前バージョンのように設定ファイルを変えてやる必要があるのかと思い、色々調べましたが有力な手掛かりは得られず、結局アンインストールした後に、再度インストールを行うと正常にサンプルファイルをビルドすることができました。

その前に一度再起動していたので、もしかしたらその時に変更した内容が反映されたのかもしれませんが、今となっては確かめる術も気力もないのでこのまま無かったことにしようと思います。

2014年3月16日日曜日

【VisualStudio2012】C++でフォームアプリ

C++でWindowsフォームアプリケーションを作ったことがなかったので調べてみた。

要約すると、
1.空のCLRプロジェクトを作成
2.ソリューションエクスプローラーから右クリック->追加->UI->Windowsフォーム
3.フォーム追加時にくっついてきた.cppファイルに下記コードを追加


// MyForm.cpp
#include "MyForm.h"//フォーム名

using namespace CPP;//プロジェクト名「CPP」

[STAThreadAttribute]
int main(){
 Application::EnableVisualStyles();
 Application::Run(gcnew MyForm());
}

【コマンドプロンプトを消す】
1.プロパティ->リンカ->システム->サブシステムにWindows (/SUBSYSTEM:WINDOWS)と入力
2.詳細設定のエントリポイントにmainと入力し、OK

2014年3月9日日曜日

C#でOpenCVを動かす

C++で実装するのに難儀していたこともあり、どうにかC#で実装できないか調べていたところ、OpenCvSharpなるものを発見。

どうやら、NuGetからインストールするだけでC#からOpenCVを動かせるそうな・・・

なにこれすごい


詳細については下記リンク先にて紹介されているので割愛します。




早速二値化してみた。

【元画像】


【二値化】



【AdaptiveThreshold MeanC】


















CPU:i7 3930k@1200MHz
上記スペックで1600x1200の適応的二値化を行うと20ms付近とかなり短い処理時間となった。
ただし、GaussianCではブロックサイズを大きくするにつれて、処理時間も伸びていった為、高速ラインで使用するらなMeanCの方が適切かなーと。

他にもblob関数もあったり色々実装されてるのでOpenCV+C#の入門に丁度いい気がする。
とはいえ、さすがにすべての関数を網羅しているわけではないので、そこは注意してほしい。

GPGPUも実装してみたいなぁ・・・