1 什麼是NCS2
咱們在訓練完深度學習模型以後,須要將其轉移到生產中用以識別和分類對象,這被稱爲推理。將深度學習網絡從訓練環境部署到嵌入式平臺進行推理是一項複雜的任務,存在許多挑戰,好比:html
多個深度學習框架在行業內普遍應用,如 Caffe*、TensorFlow*、MXNet* 等
深度學習網絡的訓練一般在數據中心或服務器羣內執行,推理一般在面向性能和功耗優化的嵌入式平臺內執行。
這些平臺一般受軟件的限制:
編程語言
第三方關聯組件
內存使用
支持的操做系統
平臺還受到硬件的限制:
不一樣的數據類型
有限的功耗範圍
因爲這些限制,通常不建議使用原始訓練框架進行推理,有時這也不能實現,做爲替代方案,英特爾提出面向特定硬件平臺優化的專用推理API,這個時候NCS2出現了(NCS是第一代,NCS2是第二代,性能達到第一代的8倍)編程
NCS 2設備看起來像標準的USB拇指驅動器,能夠插入任何Linux PC或Raspberry Pi。當運行基於神經網絡的計算機視覺應用時,複雜的數學計算被卸載到嵌入在NCS 2棒內的特殊芯片。該芯片旨在加速計算,與標準CPU相比,這使得神經網絡的執行速度更快。簡而言之,NCS 2就像用於推理機器學習模型的微GPU。bash
2 環境部署安裝
NCS2兼容的操做系統有:Ubuntu* 16.04.3 LTS(64 位)、CentOS* 7.4(64 位)、Windows® 10(64 位),我本身在x86的Ubuntu16.04進行配置安裝服務器
2.1 下載安裝OpenVINO工具包
須要註冊intel帳號,而後在下載連接中下載對應的版本網絡
下載到Downloads路徑下,而後解壓,並進入目錄框架
tar -zxf l_openvino_toolkit_p_2018.4.420.tgz
cd l_openvino_toolkit_p_2018.4.420
運行安裝機器學習
sudo ./install_GUI.sh
而後會彈出安裝界面,一直默認安裝下去就行編程語言
2.2 安裝依賴
上述步驟完成後,在opt下會生成intel的文件夾,進入以下目錄,而後運行安裝腳本工具
cd /opt/intel/computer_vision_sdk/install_dependencies
sudo -E ./install_cv_sdk_dependencies.sh
2.3 設置環境變量
爲了永久設置環境變量,在home文件夾中按ctrl+h,會顯示隱藏文件,找到.bashrc,在最後一行添加如下代碼,而後關閉保存性能
source /opt/intel/computer_vision_sdk/bin/setupvars.sh
設置成功後,新開一個終端,會在第一行看到以下輸出,若是沒有,代表環境變量沒有設置成功
[setupvars.sh] OpenVINO environment initialized
2.4 配置優化器
cd /opt/intel/computer_vision_sdk/deployment_tools/model_optimizer/install_prerequisites
sudo ./install_prerequisites.sh
3 配置USB驅動
將算力棒插在主機USB接口上,而後更新udev規則,使得工具套件能正常找到算力棒,並與之通訊。首先新打開一個終端,運行如下指令
cat <<EOF > 97-usbboot.rules
而後成輸入狀態,一條一條輸入如下語句
SUBSYSTEM=="usb", ATTRS{idProduct}=="2150", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEM=="usb", ATTRS{idProduct}=="2485", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEM=="usb", ATTRS{idProduct}=="f63b", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
EOF
輸入完之後,表示保存生成97-usbboot.rules文件,而後
sudo cp 97-usbboot.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo ldconfig
rm 97-usbboot.rules
執行完以上指令後,把算力棒從新插拔,而後在終端中輸入lsusb,可查看是否有算力棒設備(拔下來與插上分別輸入lsusb比較區別)
4 模型測試
完成以上步驟以後,就能夠正常使用算力棒了,這裏舉幾個例子進行測試
4.1 圖像分類
cd /opt/intel/computer_vision_sdk/deployment_tools/demo
sudo ./demo_squeezenet_download_convert_run.sh -d MYRIAD
第一次運行須要一些時間,由於腳本要安裝軟件依賴並編譯全部樣本代碼,運行完後出現如圖所示的結果,就代表環境所有配置完成
4.2 目標檢測
在home文件夾下,生成了inference_engine_samples文件夾,在/intel/Release/文件夾下有不少現成的可執行文件,咱們可直接運行這些文件,只須要輸入配置文件,好比安防攝像頭的例子
cd ~/inference_engine_samples/intel64/Release
./security_barrier_camera_demo -i /opt/intel/computer_vision_sdk/deployment_tools/demo/car_1.bmp -d MYRIAD -m /opt/intel/computer_vision_sdk/deployment_tools/intel_models/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml -d_va MYRIAD -m_va /opt/intel/computer_vision_sdk/deployment_tools/intel_models/vehicle-attributes-recognition-barrier-0039/FP16/vehicle-attributes-recognition-barrier-0039.xml -d_lpr MYRIAD -m_lpr /opt/intel/computer_vision_sdk/deployment_tools/intel_models/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.xml
運行後會出現車輛屬性、車牌檢測與識別,如圖所示,其中有一個參數很重要,-d MYRIAD表示在算力棒中運行,能夠修改該參數,如-d CPU 表示運行在CPU上,若是不加該參數,默認是跑在CPU上
4.3 人臉檢測
cd ~/inference_engine_samples/intel64/Release
./interactive_face_detection_demo -d MYRIAD -m /opt/intel/computer_vision_sdk/deployment_tools/intel_models/face-detection-adas-0001/FP16/face-detection-adas-0001.xml -d_ag MYRIAD -m_ag /opt/intel/computer_vision_sdk/deployment_tools/intel_models/age-gender-recognition-retail-0013/FP16/age-gender-recognition-retail-0013.xml -d_em MYRIAD -m_em /opt/intel/computer_vision_sdk/deployment_tools/intel_models/emotions-recognition-retail-0003/FP16/emotions-recognition-retail-0003.xml -d_hp MYRIAD -m_hp /opt/intel/computer_vision_sdk/deployment_tools/intel_models/head-pose-estimation-adas-0001/FP16/head-pose-estimation-adas-0001.xml
在intel_models下有不少模型,其中index.html文件對這些模型進行了描述,咱們在作同一個任務時能夠選擇不一樣的模型進行比較。好比在作人臉檢測時,上邊的模型我用到了-m /opt/intel/computer_vision_sdk/deployment_tools/intel_models/face-detection-adas-0001/FP16/face-detection-adas-0001.xml 這個模型,測試效果是每秒6幀左右,而當我更換了參數-m /opt/intel/computer_vision_sdk/deployment_tools/intel_models/face-detection-retail-0004/FP16/face-detection-retail-0004.xml時,在算力棒上能夠跑到50幀左右,有很明顯的提高。若是經過index.html文件看這個網絡的介紹時,會知道是因爲SSD的緣由。
5 部署工做流程
以上步驟只是將容許環境配置完成,併成功跑了官方提供的幾個歷程,咱們真正部署時,須要作的不僅這些,這裏簡單介紹一下部署的總體流程,主要步驟如圖所示
1 在服務器上訓練一個模型
2 運行模型優化器,生成中間表示文件(.xml和.bin)
3 在推理引擎中進行模型測試
4 實際應用