使用樹(shù)莓派和神經(jīng)計算棒實(shí)踐OpenVINO人流量統計項目
樹(shù)莓派自從2012年問(wèn)世以來(lái),一直受到廣大開(kāi)發(fā)者的喜愛(ài)。今天我們使用樹(shù)莓派和英特爾神經(jīng)計算棒搭建OpenVINO開(kāi)發(fā)環(huán)境,實(shí)踐人流量統計項目。
本文引用地址:http://dyxdggzs.com/article/202111/429363.htm一、樹(shù)莓派系統刷寫(xiě)
當我們拿到樹(shù)莓派以后,首先需要安裝操作系統。適用于樹(shù)莓派的操作系統非常多,官網(wǎng)推薦的系統是Raspberry Pi OS,是目前應用最為廣泛的樹(shù)莓派操作系統,這里我們也將使用Raspberry Pi OS進(jìn)行實(shí)踐。由于樹(shù)莓派沒(méi)有配置板載閃存,因此我們將Raspberry Pi OS燒寫(xiě)在一張16GB的存儲卡上,一般要求存儲卡不小于8GB。
下面介紹樹(shù)莓派操作系統的燒寫(xiě)流程。
1、在樹(shù)莓派官方網(wǎng)站(https://www.raspberrypi.org/software/operating-systems/)下載Raspberry Pi OS系統鏡像。該頁(yè)面下提供了3種Raspberry Pi OS最新版本的鏡像文件,如下圖所示。
Raspberry Pi OS with desktop and recommended software集成了圖形化界面,同時(shí)預安裝了一些常用軟件,Raspberry Pi OS with desktop集成了圖形化界面,Raspberry Pi OS Lite沒(méi)有圖形化桌面。我們選擇Raspberry Pi OS with desktop and recommended software,點(diǎn)擊Downloal或者Download Torrent下載該文件。
2、在Windows系統的電腦中對存儲卡進(jìn)行格式化。
3、使用燒寫(xiě)軟件Etcher將系統刻錄在SD卡。Etcher是支持Windows、macOS以及Linux系統的輕量化軟件(https://www.balena.io/etcher/)。打開(kāi)Etcher后分別選擇鏡像文件目錄以及待燒寫(xiě)SD卡的盤(pán)符,點(diǎn)擊Flash即可。
燒寫(xiě)大概需要10~15分鐘的時(shí)間,具體時(shí)長(cháng)與設備的讀寫(xiě)能力有關(guān)。燒寫(xiě)完成后,我們在Windows的磁盤(pán)管理器中可能看到SD卡的空間只剩下幾十MB,這都是正?,F象,因為Windows無(wú)法識別Linux的文件系統。如果系統提示SD卡需要格式化,切記不要選擇“是”,這會(huì )使我們之前的工作變成無(wú)用功。等待燒寫(xiě)完成,將SD卡插入樹(shù)莓派背面的SD卡卡槽內,就可以連接硬件了。
二、在樹(shù)莓派上搭建OpenVINO環(huán)境
接下來(lái),我們?yōu)闃?shù)莓派上搭建OpenVINO開(kāi)發(fā)環(huán)境。樹(shù)莓派的OpenVINO工具套件包括推理引擎和MYRIAD插件,需要搭配英特爾二代神經(jīng)計算棒進(jìn)行AI推理。由于樹(shù)莓派的OpenVINO工具套件不包含模型優(yōu)化器,我們需要在其他機器上對模型進(jìn)行轉換,然后將優(yōu)化后的模型部署在樹(shù)莓派上。
1、下載樹(shù)莓派的OpenVINO工具套件安裝包
(https://storage.openvinotoolkit.org/repositories/openvino/packages/),這里我們選擇的是2021.4版本。
2、打開(kāi)樹(shù)莓派終端,新建文件夾openvino_2021,將下載好的安裝包解壓到當前文件夾。
sudo mkdir -p /opt/intel/openvino_2021
sudo tar -xf l_openvino_toolkit_runtime_raspbian_p_<version>.tgz --strip 1 -C /opt/intel/openvino_2021
3、安裝外部軟件依賴(lài)cmake
sudo apt install cmake
4、設置環(huán)境變量
source /opt/intel/openvino_2021/bin/setupvars.sh
這樣設置每次重啟終端都需要運行上面的代碼。
永久設置環(huán)境變量
echo "source /opt/intel/openvino_2021/bin/setupvars.sh" >> ~/.bashrc
5、添加USB規則
添加當前用戶(hù)至users組,注銷(xiāo)登錄使其生效。
sudo usermod -a -G users "$(whoami)"
安裝usb規則
sh /opt/intel/openvino_2021/install_dependencies/install_NCS_udev_rules.sh
6、編譯和運行目標檢測樣例
完成上面的步驟后,我們運行工具套件中的人臉檢測模型,測試環(huán)境是否搭建成功。
(1)創(chuàng )建build文件夾用來(lái)編譯項目
mkdir build && cd build
(2)編譯人臉檢測樣例
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=armv7-a" /opt/intel/openvino_2021/deployment_tools/inference_engine/samples/cpp
make -j2 object_detection_sample_ssd
(3)在open_model_zoo中下載人臉檢測模型
git clone --depth 1 https://github.com/openvinotoolkit/open_model_zoo
cd open_model_zoo/tools/downloader
python3 -m pip install -r requirements.in
python3 downloader.py --name face-detection-adas-0001
(4)連接神經(jīng)計算棒,運行模型
./armv7l/Release/object_detection_sample_ssd -m <path_to_model>/face-detection-adas-0001.xml -d MYRIAD -i <path_to_image>
程序運行結束后,我們可以查看生成的out_0.bmp文件中的人臉檢測框。
至此,我們已經(jīng)完成了樹(shù)莓派OpenVINO環(huán)境的搭建。
三、open_model_zoo的使用
OpenVINO官網(wǎng)為我們提供了豐富的資源,方便我們快速構建自己的項目。其中,GitHub中的open_model_zoo(https://github.com/openvinotoolkit/open_model_zoo)倉庫為我們提供了一些公開(kāi)的和英特爾預訓練好的模型,以及一些場(chǎng)景下使用OpenVINO的demo。
由于我們要在樹(shù)莓派上實(shí)踐人流量統計項目,首先我們需要在open_model_zoo中篩選能夠檢測行人的目標檢測模型。我們選擇適用于移動(dòng)端的輕量級深度網(wǎng)絡(luò )模型mobilenet-ssd作為人群檢測模型。https://github.com/openvinotoolkit/open_model_zoo/tree/master/models/public/mobilenet-ssd
倉庫中mobilenet-ssd的介紹文檔向我們詳細描述了模型的輸入、輸出、精度、計算量、參數量等。mobilenet-ssd模型是一個(gè)單階段的目標檢測模型,使用的是Caffe框架,模型的輸入是300*300的BGR三通道圖片,計算量2.316GFLOPs,參數量5.783MParams,在VOC2007數據集上的mAP值是67%。輸入輸出部分向我們介紹了原始模型和使用模型優(yōu)化器轉換后模型的輸入輸出參數。我們可以按照自己對精度、計算量、參數量、框架以及部署環(huán)境的要求,選擇自己需要的模型。
1、模型下載器的使用
確定好模型后,我們使用OpenVINO提供的模型下載器(downloader.py)下載模型。Windows平臺下需要以管理員身份運行Window命令提示符。
切換目錄:cd C:Program Files (x86)Intelopenvino_2021.2.185deployment_toolsopen_model_zootoolsdownloader
--help參數可以查看模型下載器的參數設置。
--print_all參數可以打印所有可以下載的模型:python downloader.py --print_all
下載模型需要在—name參數后面加上模型名稱(chēng) :python downloader.py --name mobilenet-ssd
2、模型優(yōu)化器的使用
模型優(yōu)化器Model Optimizer可以將深度學(xué)習模型轉換為能夠被推理引擎執行的IR文件。IR文件包含一個(gè)*.xml文件用來(lái)描述網(wǎng)絡(luò )結構,還包含一個(gè)*.bin文件用來(lái)存儲網(wǎng)絡(luò )的權重和偏置量。
下載好模型后,使用模型優(yōu)化器優(yōu)化模型,樹(shù)莓派的OpenVINO工具套件不包含模型下載器,因此我們需要在別的機器上對模型進(jìn)行優(yōu)化。運行下面命令,完成對模型的優(yōu)化。--help參數可以查看模型優(yōu)化器的參數設置。
python mo.py --input_model mobilenet-ssdmobilenet-ssd.caffemodel --scale 127.5 --mean_values [127.5,127.5,127.5]
四、應用及代碼展示
1、行人檢測代碼
這里對人流量統計中,使用OpenVINO進(jìn)行人員檢測的代碼進(jìn)行展示。
# 導入模塊
from openvino.inference_engine import IECore,IENetwork
import cv2
# 定義模型、圖片路徑以及計算設備
model_xml = "mobilenet_ssd/mobilenet-ssd.xml"
model_bin = "mobilenet_ssd/mobilenet-ssd.bin"
image_file = "2.jpg"
DEVICE = 'MYRIAD'
# 初始化推理引擎對象
ie = IECore()
# 讀取模型
net = IENetwork(model=model_xml, weights=model_bin)
# 配置輸入輸出
input_blob = next(iter(net.inputs))
out_blob = next(iter(net.outputs))
net.batch_size = 1
# 加載模型到計算設備
exec_net = ie.load_network(network=net, num_requests=1, device_name=DEVICE)
n,c,h,w = net.inputs[input_blob].shape
frame = cv2.imread(image_file)
(initial_h, initial_w, channels) = frame.shape
image = cv2.resize(frame, (w,h))
image = image.transpose((2,0,1))
# 推理計算
res = exec_net.infer(inputs={input_blob:image})
# 可視化展示推理結果
res = res[out_blob]
for obj in res[0][0]:
if obj[2] > 0.7:
xmin = int(obj[3]*initial_w)
ymin = int(obj[4]*initial_h)
xmax = int(obj[5]*initial_w)
ymax = int(obj[6]*initial_h)
class_id = int(obj[1])
color = (0,255,0)
cv2.rectangle(frame, (xmin,ymin), (xmax, ymax), color,2)
cv2.imshow("result", frame)
cv2.waitKey(0)
cv2.destroyAllWindows()
2、人流量統計視頻
人流量統計視頻http://v.eepw.com.cn/video/play/id/15333
在距離視頻畫(huà)面頂部2/3處畫(huà)了一條水平黃線(xiàn),當有人越過(guò)這條黃線(xiàn),使用模型對其進(jìn)行檢測和追蹤,Up和Down分別對應人員流入和人員流出,從而實(shí)現對特定場(chǎng)所進(jìn)入和出去人流量的統計。
3、運行結果對比
我們在樹(shù)莓派上分別對使用OpenCV的dnn相關(guān)函數調用mobilenet-ssd原始模型和OpenVINO運行優(yōu)化后的模型進(jìn)行比較。視頻中左側為OpenCV運行,右側為OpenVINO運行,同時(shí)對推理部分的FPS值進(jìn)行計算??梢钥闯?,樹(shù)莓派上英特爾神經(jīng)計算棒與OpenVINO搭配的FPS值明顯要優(yōu)于單獨使用OpenCV運行原始mobilenet-ssd模型。
人流量統計運行結果對比視頻http://v.eepw.com.cn/video/play/id/15334
參考資料:
樹(shù)莓派官網(wǎng):https://www.raspberrypi.org/software/operating-systems/
樹(shù)莓派搭建OpenVINO環(huán)境指南:https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_raspbian.html
評論