前回、NVDLA Virtual PlatformでMNISTを動作させることができた。同じように、NVDLAでCIFAR-10も動作させることができるはずだ。
PGMは1色の画像しか認識できないので、PGMでCIFAR-10の画像を渡すことはできない。そこで、JPEG形式でNVDLAにデータを渡して推論を実行することにした。
CIFAR-10の画像は、以下のサイトからPNG形式を取得し、ImageMagickを利用してJPEGに変換した。
$ for pgm in `ls -1 *.pgm`; do convert ${pgm} +compress conv_${pgm}; done
CaffeでのCIFAR-10の学習
こちらもExampleが用意されている。 fullモードで学習を行うと非常に時間がかかるので、Quickで学習を行った。
$ data/cifar10/get_cifar10.sh $ examples/cifar10/create_cifar10.sh $ examples/cifar10/train_quick.sh
これでCIFAR-10のCaffeのモデルが生成されるので、nvdla_compiler
でコンパイルしてNVDLA用のバイナリを作成する。
nvdla_compiler --prototxt ../cifar10/cifar10_full.prototxt --caffemodel ../cifar10/cifar10_quick_iter_4000.caffemodel
basic.nvdla
が生成されたので、NVDLAに渡して実行してみる。
以下はQEMU上で実行する。
# ./nvdla_runtime --loadable ../cifar10/basic.nvdla --rawdump --image ../cifar10/0_cat.jpg # cat output.dimg 0.00832367 0.000235677 0.00159931 0.0301514 0.00696945 0.122803 0.000342846 0.192383 0.623535 0.0136414 # # ./nvdla_runtime --loadable ../cifar10/basic.nvdla --rawdump --image ../cifar10/1_ship.jpg # cat output.dimg 0.00250626 5.126e-06 9.77516e-06 0.00281715 0.000716209 0.00065136 1.01924e-05 0.00177479 0.991211 0.000142932 # # ./nvdla_runtime --loadable ../cifar10/basic.nvdla --rawdump --image ../cifar10/3_airplane.jpg &> /dev/null # cat output.dimg 0.548828 0.000263214 0.00307655 0.0654297 0.00289726 0.00300217 0.000976562 0.0108719 0.364258 0.000113666 #
CIFAR-10は以下の順番でラベルが定義されている。
カテゴリ | 番号 |
---|---|
airplane | 0 |
automobile | 1 |
bird | 2 |
cat | 3 |
deer | 4 |
dog | 5 |
frog | 6 |
hourse | 7 |
ship | 8 |
truck | 9 |
0_cat.jpg
は推論に失敗している(9番目が選択されている)。
1_ship.jpg
は9番目が選択されており、認識成功だ。
3_airplane.jpg
は0番目の数値が高く認識成功だ。