Deep-Learning(深層学習)について
・生物の脳神経ネットワークをモデルとしてたニューラルネットワークというアルゴリズムを利用している
・例えばある画像を「犬の画像」だと判定する手順を従来であれば人が考えていたが
機械学習ではデータ(犬が入ったものと入っていないもの)を大量投入し判定基準含めて機械が決めて判断する
・今まで画像特徴量をもとになにの画像か判定していたが、
何をもとに判定したらよいかから機械が決めたほうが、より高い評価を得るようになってきた
・CUDA(NVIDA社)によってGPUが利用しやすくなり、
ILSVRC2012でDeep-Learningを利用したチームが他チームを引き離して1位となったことから
最近注目を浴びるようになった
Caffeとは
オープンソースとして開発されているディープラーニングフレームワークの1つ
(カリフォルニア大学バークレー校のコンピュータビジョンおよび機械学習に関する研究センターであるBVLCが中心となって開発している)
・CUDAによるGPU環境での動作をサポートしている。またGPU環境での処理速度が高速
(パラメーターを変更することでGPU環境がなくても利用可能)
・学習済みのモデルが配布されており、自前で学習させようとすると何日もかかるようなデータサイズ、モデルも簡単に使える
・シェルでの実行とAPIを利用したコーディングでの実行が可能
Caffeを利用して画像認識などが可能。デモサイトも用意されている
Install
root@ubuntu1404:/home/shimizu# aptitude install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler libboost-all-dev libatlas-base-dev ... ### デフォルトのgccではコンパイルできないらしい ### root@ubuntu1404:/home/shimizu# aptitude install python-dev libgflags-dev libgoogle-glog-dev liblmdb-dev git g++-4.6 python-protobuf ... root@ubuntu1404:/home/shimizu# cd /usr/local/src/ root@ubuntu1404:/usr/local/src# git clone https://github.com/BVLC/caffe.git ... root@ubuntu1404:/usr/local/src# cd caffe/ root@ubuntu1404:/usr/local/src/caffe# cp Makefile.config.example Makefile.config root@ubuntu1404:/usr/local/src/caffe# vi Makefile.config === ### コメントアウト ### CPU_ONLY := 1 ### 変更 ### CUSTOM_CXX := g++-4.6 === root@ubuntu1404:/usr/local/src/caffe# make ... root@ubuntu1404:/usr/local/src/caffe# make test ... root@ubuntu1404:/usr/local/src/caffe# make runtest ... [ RUN ] NeuronLayerTest/1.TestExpGradientBase2Shift1 [ OK ] NeuronLayerTest/1.TestExpGradientBase2Shift1 (3 ms) [----------] 48 tests from NeuronLayerTest/1 (377 ms total) [----------] Global test environment tear-down [==========] 1048 tests from 146 test cases ran. (60438 ms total) [ PASSED ] 1048 tests.
MNISTを利用してみる
Caffeで手書き数字(MNIST)の認識学習をする
MNIST(Mixed National Institute of Standards and Technology)
MNISTとは28x28pxの60000枚の学習サンプル、10000枚のテストサンプルからなる手書き数字画像データベースで
caffeにて試せるように事前に用意されている
### MNISTのデータセット取得 ### root@ubuntu1404:/usr/local/src/caffe# cd data/mnist/ root@ubuntu1404:/usr/local/src/caffe/data/mnist# vi get_mnist.sh root@ubuntu1404:/usr/local/src/caffe/data/mnist# ./get_mnist.sh ... ### MNISTのデータ変換(Caffeは画像学習を行う際LevelDBかLMDB形式で読み込ませる必要あり。エラー出るが 1394 をオフにした OpenCV をビルドしないといけないようなので無視) ### root@ubuntu1404:/usr/local/src/caffe/data/mnist# cd /usr/local/src/caffe/ root@ubuntu1404:/usr/local/src/caffe# ./examples/mnist/create_mnist.sh Creating lmdb... libdc1394 error: Failed to initialize libdc1394 libdc1394 error: Failed to initialize libdc1394 Done. ### 学習させる(CPU_ONLYの場合は書き換える) ### root@ubuntu1404:/usr/local/src/caffe# vi ./examples/mnist/lenet_solver.prototxt === # solver_mode: GPU solver_mode: CPU === root@ubuntu1404:/usr/local/src/caffe# ./examples/mnist/train_lenet.sh ... ### 学習結果を利用してテストする(./examples/mnist/ 配下の lenet_iter_xxxx.caffemodel が学習結果) ### root@ubuntu1404:/usr/local/src/caffe# ./build/tools/caffe test -model ./examples/mnist/lenet_train_test.prototxt -weights ./examples/mnist/lenet_iter_10000.caffemodel ### prototxtファイルからブロック図を生成する ### root@ubuntu1404:/usr/local/src/caffe# aptitude install python-pip python-dev python-numpy python-scipy python-matplotlib cython python-pandas python-skimage python-pydot root@ubuntu1404:/usr/local/src/caffe# cd python/ root@ubuntu1404:/usr/local/src/caffe/python# pip install -r requirements.txt root@ubuntu1404:/usr/local/src/caffe/python# cd ../ root@ubuntu1404:/usr/local/src/caffe# make pycaffe ... root@ubuntu1404:/usr/local/src/caffe# echo 'export PYTHONPATH=/usr/local/src/caffe/caffe/python/:$PYTHONPATH' >> ~/.bashrc root@ubuntu1404:/usr/local/src/caffe# source ~/.bashrc root@ubuntu1404:/usr/local/src/caffe# python /usr/local/src/caffe/python/draw_net.py /usr/local/src/caffe/examples/mnist/lenet_train_test.prototxt output.png libdc1394 error: Failed to initialize libdc1394 /usr/local/src/caffe/python/caffe/pycaffe.py:13: RuntimeWarning: to-Python converter for boost::shared_ptr<caffe::Net<float> > already registered; second conversion method ignored. from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, \ /usr/local/src/caffe/python/caffe/pycaffe.py:13: RuntimeWarning: to-Python converter for boost::shared_ptr<caffe::Blob<float> > already registered; second conversion method ignored. from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, \ /usr/local/src/caffe/python/caffe/pycaffe.py:13: RuntimeWarning: to-Python converter for boost::shared_ptr<caffe::Solver<float> > already registered; second conversion method ignored. from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, \ Drawing net to output.png
CIFAR-10を利用してみる
root@ubuntu1404:/usr/local/src/caffe# cd data/cifar10/ root@ubuntu1404:/usr/local/src/caffe/data/cifar10# ./get_cifar10.sh root@ubuntu1404:/usr/local/src/caffe/data/cifar10# cd ../../ root@ubuntu1404:/usr/local/src/caffe# ./examples/cifar10/create_cifar10.sh root@ubuntu1404:/usr/local/src/caffe# vi examples/cifar10/cifar10_quick_solver.prototxt === # solver_mode: GPU solver_mode: CPU === root@ubuntu1404:/usr/local/src/caffe# ./build/tools/caffe train --solver examples/cifar10/cifar10_quick_solver.prototxt ... I0403 23:58:47.250635 24251 solver.cpp:404] Test net output #0: accuracy = 0.7119 I0403 23:58:47.250869 24251 solver.cpp:404] Test net output #1: loss = 0.850394 (* 1 = 0.850394 loss) I0403 23:58:47.250948 24251 solver.cpp:322] Optimization Done. I0403 23:58:47.251015 24251 caffe.cpp:222] Optimization Done. ### 判定してみる (何かがおかしいorz) ### root@ubuntu1404:/usr/local/src/caffe# cd python/ root@ubuntu1404:/usr/local/src/caffe/python# wget -d https://dl.dropboxusercontent.com/u/8148946/Develop/aws/cifar10_classifier.py root@ubuntu1404:/usr/local/src/caffe/python# cd ../../ root@ubuntu1404:/usr/local/src# root@ubuntu1404:/usr/local/src# cp caffe/examples/cifar10/cifar10_quick_iter_4000.caffemodel.h5 caffe/examples/cifar10/cifar10_quick_iter_4000.caffemodel root@ubuntu1404:/usr/local/src# wget -d https://upload.wikimedia.org/wikipedia/commons/7/7b/Hyla_japonica_001.jpg root@ubuntu1404:/usr/local/src# python caffe/python/cifar10_classifier.py Hyla_japonica_001.jpg ... [[ 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1]] 0:airplane
plotしてみる
root@ubuntu1404:/usr/local/src# ./caffe/tools/extra/parse_log.sh /tmp/caffe.ubuntu1404.root.log.INFO.20160415-011551.6345 root@ubuntu1404:/usr/local/src# mv caffe.ubuntu1404.root.log.INFO.20160415-011551.6345.test mnist.log.test root@ubuntu1404:/usr/local/src# mv caffe.ubuntu1404.root.log.INFO.20160415-011551.6345.train mnist.log.train root@ubuntu1404:/usr/local/src# gnuplot ./caffe/tools/extra/plot_log.gnuplot.example # your_chart_name.png が出力される
参考URL
CaffeでDeep Learning つまずきやすいところを中心に
ノート/Caffeのデモプログラムを試してみる (2014-12-24)
もう迷わない Caffe入門 その1