FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages

NVDLAの内部構成調査(7. Caffeのモデルを使ってNVDLAでCIFAR10を動かす)

前回、NVDLA Virtual PlatformでMNISTを動作させることができた。同じように、NVDLAでCIFAR-10も動作させることができるはずだ。

PGMは1色の画像しか認識できないので、PGMでCIFAR-10の画像を渡すことはできない。そこで、JPEG形式でNVDLAにデータを渡して推論を実行することにした。

CIFAR-10の画像は、以下のサイトからPNG形式を取得し、ImageMagickを利用してJPEGに変換した。

pjreddie.com

$ 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番目の数値が高く認識成功だ。

f:id:msyksphinz:20180908013303p:plain