使用OpenMV H7機器視覺模組進行深度學習之影像辨識

在此說明使用OpenMV H7機器視覺模組進行深度學習之影像辨識(影像分類)。簡單介紹一下OpenMV專案:OpenMV是一款小巧,低功耗,低成本的電路板,它幫助你很輕鬆的完成機器視覺(machine vision)應用;你可以透過高階程式語言Python(準確的說是MicroPython),而不是C/C++來進行程式設計。本文會一併討論深度模型建模、訓練與轉換模型到OpenMV上,將用到Caffe這個深度學習框架;因此,所有的實作都會在Ubuntu Linux 16.04 64Bits作業系統上進行。

首先,先到https://openmv.io/pages/download下載OpenMV IDE開發環境:

開發環境安裝與使用可參考官方的教學;在Ubuntu Linux下,使用以下命令進行安裝:

chmod +x openmv-ide-linux-*.run

./openmv-ide-linux-*.run

sudo adduser yilintung dialout

在進行OpenMV H7模組與電腦連接前,要進行鏡頭清理的動作,請參考官方說明:http://docs.openmv.io/openmvcam/tutorial/hardware_setup.html

由於執行深度學習推論(inference)需要將轉換後模型放置到OpenMV H7模組上,考量內建儲存空間有限,實作上我是在模組上安裝MicroSD 32GB記憶卡以避免空間不足;硬體設定完成後將OpenMV H7模組透過USB線與電腦連接,並在Ubuntu Linux終端機執行以下命令啟動OpenMV IDE:

cd ~/openmvide/bin

./openmvide.sh

預設Hello World ( helloworld_1.py ) 執行結果於下,用以確認軟硬體是否正常運作:

先按左下角x圖示停止執行;接著,從https://github.com/openmv/openmv/tree/master/ml/cmsisnn/models/cifar10 下載已訓練及轉換的模型cifar10.network,並把它放到OpenMV H7模組所新增的抽取式儲存裝置空間中:

在OpenMV IDE上,選擇File – Examples – 25-Machine-Learning – nn_cifar10.py,執行後就可以看到影像辨識的結果:

拍攝到一張鳥類的圖片,而OpenMV識別為bird : 74%。

前面是使用廠商已經訓練並轉換好的模型cifar10.network,以下說明如何自行訓練並轉換模型。首先,參考這篇文章的” 安裝OpenCV 3 ” 與 ” 1.環境安裝 “將Caffe深度學習框架所需環境架設起來,之後下載OpenMV原始程式碼:

cd ~

git clone https://github.com/openmv/openmv.git

接著參考以下命令將Caffe深度學習框架安裝起來:

cd ~

git clone git://github.com/BVLC/caffe.git

cd caffe/

cp Makefile.config.example Makefile.config

進行後續步驟前,修改Makefile.config:


OPENCV_VERSION := 3

PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/local/lib/python2.7/dist-packages/numpy/core/include

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

修改後存檔,並進行後續步驟:

make clean

make all

make test

make runtest

make pycaffe

export PYTHONPATH=/home/yilintung/caffe/python:$PYTHONPATH

cd ~/openmv/ml/cmsisnn

ln -s ~/caffe caffe

參考官方說明,進行Cifar10模型訓練與轉換:

cd caffe

./data/cifar10/get_cifar10.sh

./examples/cifar10/create_cifar10.sh

./build/tools/compute_image_mean -backend=lmdb examples/cifar10/cifar10_train_lmdb examples/cifar10/mean.binaryproto

cd ..

./models/cifar10/train.sh

./models/cifar10/test.sh

python nn_quantizer.py --gpu --model models/cifar10/cifar10_train_test.prototxt --weights models/cifar10/cifar10_iter_70000.caffemodel.h5 --save models/cifar10/cifar10.pkl

python nn_convert.py --model models/cifar10/cifar10.pkl --mean caffe/examples/cifar10/mean.binaryproto --output models/cifar10/cifar10.network

最後就會產生出OpenMV H7模組用的cifar10.network模型檔案。若有模型訓練或參數調整的需求,可以聯絡On-Device AI Co., Ltd.取得進一步的協助。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *