Caffe 大量の画像を利用してCNNを学習する 1

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

チュートリアルを基に、CNNを学習させてみる。
まだおぼつかないため、とりあえず手順だけ。

[amazonjs asin=”B00P2EG5QM” locale=”JP” title=”パーフェクトPython”]

前提

Ubuntu14.04 Anaconda(Python2)+Caffe(機械学習ライブラリ)をインストール

機械学習ライブラリCaffe で色々するための準備

手順

 

前処理

ホームディレクトリにsourceディレクトリを作成。
その中にtest_dataset、training_datasetディレクトリを作成し、training_datasetの中にとりあえず10枚のダンボー画像を保存した。(実際はもっと大量に保存する必要がある。)

[shell] mkdir ~/source
cd ~/source
mkdir test_dataset
mkdir training_dataset

$ ls training_dataset/
danbo001.jpg danbo003.jpg danbo005.jpg danbo007.jpg danbo009.jpg
danbo002.jpg danbo004.jpg danbo006.jpg danbo008.jpg
[/shell]

 

データベース作成

sourceディレクトリにtest.txt、train.txtを作成し、「画像名 クラス」の順に記載。
(まだクラスがなんなのかよくわかっていないため、とりあえず0にしておいた。)

[shell title=”test.txt、train.txtの内容”] danbo001.jpg 0
danbo002.jpg 0
danbo003.jpg 0
danbo004.jpg 0
danbo005.jpg 0
danbo006.jpg 0
danbo007.jpg 0
danbo008.jpg 0
danbo009.jpg 0
[/shell]

保存した画像とtrain.txtに記載した内容を基に、データベースを作成する。

[shell] ~/caffe/build/tools/convert_imageset ./training_dataset/ train.txt train_leveldb 1 lebeldb 256 256
[/shell]

 

平均画像の生成

保存した画像を基に、平均画像を生成する。

[/shell] cd ~/source
~/caffe/build/tools/compute_image_mean ./train_leveldb meanfile.binaryproto

 

CNNのレイヤ構成を表したパラメータファイルを作る

sourceディレクトリにimagenet_train_val.prototxtというファイルを作成し、こちらからコピーして、以下のように編集する。

[shell title=”imagenet_train_val.prototxtの内容”] imagenet_train_val.prototxt

name: "CaffeNet"

layers {
name: "data"
type: DATA
top: "data"
top: "label"
data_param {
source: "/home/ubuntu/source/train_leveldb"
mean_file: "/home/ubuntu/source/meanfile.binaryproto"
batch_size: 32
crop_size: 227
mirror: true
backend: LMDB
}
include: { phase: TRAIN }
}
layers {
name: "data"
type: DATA
top: "data"
top: "label"
data_param {
source: "/home/ubuntu/source/train_leveldb"
mean_file: "/home/ubuntu/source/meanfile.binaryproto"
batch_size: 32
crop_size: 227
mirror: false
backend: LMDB
}
include: { phase: TEST }
}
[/shell]

次に、imagenet_solver.prototxtというファイルを作成し、こちらからコピーして以下のように編集。

[shell] imagenet_solver.prototxt

train_net: "/home/ubuntu/source/imagenet_train_val.prototxt"
test_net: "/home/ubuntu/source/imagenet_train_val.prototxt"
test_iter: 1000
test_interval: 1000
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 100000
display: 20
max_iter: 450000
momentum: 0.9
weight_decay: 0.0005
snapshot: 10000
snapshot_prefix: "caffe_imagenet_train"
solver_mode: CPU
[/shell]

以下コマンドで、学習させようとしたところ、以下の様なエラーが発生。

[shell] $ ~/caffe/build/tools/caffe train –solver=/home/ubuntu/source/imagenet_solver.prototxt

F0813 08:13:16.135082 26925 db_leveldb.cpp:15] Check failed: status.ok() Failed to open leveldb /home/ubuntu/source/train_leveldb
Invalid argument: /home/ubuntu/source/train_leveldb: does not exist (create_if_missing is false)
*** Check failure stack trace: ***
@ 0x7f2a61edbdaa (unknown)
@ 0x7f2a61edbce4 (unknown)
@ 0x7f2a61edb6e6 (unknown)
@ 0x7f2a61ede687 (unknown)
@ 0x7f2a622fd60a caffe::db::LevelDB::Open()
@ 0x7f2a62280506 caffe::DataLayer<>::DataLayerSetUp()
@ 0x7f2a622430f9 caffe::BasePrefetchingDataLayer<>::LayerSetUp()
@ 0x7f2a62312122 caffe::Net<>::Init()
@ 0x7f2a62313d2e caffe::Net<>::Net()
@ 0x7f2a62320580 caffe::Solver<>::InitTrainNet()
@ 0x7f2a6232151e caffe::Solver<>::Init()
@ 0x7f2a623216b6 caffe::Solver<>::Solver()
@ 0x40cc88 caffe::GetSolver<>()
@ 0x406893 train()
@ 0x404e41 main
@ 0x7f2a613edec5 (unknown)
@ 0x4053ed (unknown)
@ (nil) (unknown)
Aborted (core dumped)
[/shell]

imagenet_train_val.prototxtにbackendを定義する必要があるため、imagenet_train_val.prototxtのdata_paramに以下を追記。

[shell] data_param {
・・・・・・・・
backend: LMDB // 末尾に追記
}
[/shell]

再度以下のコマンドを実行。

[shell] ~/caffe/build/tools/caffe train –solver=/home/ubuntu/source/imagenet_solver.prototxt
[/shell]

とここまで実行したところ、執筆段階で丸々2日ほどプログラムが動き続けていて、終わる気配がない。
やはりCPUモードだと厳しいのだろうか、、、

次回に続く。

Related posts

コメントを残す