動かざることバグの如し

近づきたいよ 君の理想に

Caffeを使って唐揚げそばチェッカーをつくるまで

単なる備忘録ともいう

用意するもの

  • Ubuntu Server 14.04
  • Caffe
    • この記事create_mnist.shまで行っておくこと)
    • インストール場所はホームディレクトリとする
  • 唐揚げそば画像(正例画像)
  • 唐揚げそばに見えなくもないけど違うっぽい画像(負例画像)

教師データの用意

Caffeでは画像をそのまま扱えないため、まずはLevelDBと呼ばれるデータベース形式に変換する

 mkdir -p ~/caffe/examples/cifar10/images/

images(名前は任意)内にディレクトリごとに分類された画像を格納する。ディレクトリ名は01・・・とする

ここから変換用スクリプトを拝借し、build_leveldb.pyとして保存

このようになる

images
├── 0
│   ├── 001.jpg
│   ├── 002.jpg
│   └── 003.jpg
│ 
├── 1
│   ├── 001.jpg
│   ├── 002.jpg
│   └── 003.jpg
│ 
└── build_leveldb.py

そしてpython build_leveldb.pyを実行するとcifar10/cifar10_train_leveldbcifar10_test_leveldbが生成される 使わないのでcifar10_test_lmdbとcifar10_train_lmdbは削除しても構わない

ネットワークの設定

  • cifar10_quick.prototxt
    • num_outputを分類したい種類数に値を変更 ここでは2となる
  • cifar10_quick_train_test.prototxt
    • 同様に全num_outputを分類したい種類数に値を変更
    • data_param内のbackend: LMDBbackend: LEVELDBに変更
    • data_param内のsource: "examples/cifar10/cifar10_train_lmdb"source: "examples/cifar10/cifar10_train_leveldb"に変更
    • data_param内のsource: "examples/cifar10/cifar10_test_lmdb"source: "examples/cifar10/cifar10_test_leveldb"に変更
  • cifar10_quick_solver.prototxt
    • test_iter:学習データ枚数 / batch_size デフォルトだとbatch_sizeは100

学習

cd ~/caffe
./build/tools/compute_image_mean examples/cifar10/cifar10_train_leveldb examples/cifar10/mean.binaryproto -backend=leveldb
./build/tools/caffe train --solver examples/cifar10/cifar10_quick_solver.prototxt