新聞中心

EEPW首頁 > 智能計算 > 進階指南 > 使用樹莓派和神經(jīng)計算棒實踐OpenVINO人流量統(tǒng)計項目

使用樹莓派和神經(jīng)計算棒實踐OpenVINO人流量統(tǒng)計項目

作者: 時間:2021-11-04 來源:電子產(chǎn)品世界 收藏

自從2012年問世以來,一直受到廣大開發(fā)者的喜愛。今天我們使用和英特爾神經(jīng)搭建開發(fā)環(huán)境,實踐項目。

本文引用地址:http://m.butianyuan.cn/article/202111/429363.htm

一、系統(tǒng)刷寫

    當(dāng)我們拿到樹莓派以后,首先需要安裝操作系統(tǒng)。適用于樹莓派的操作系統(tǒng)非常多,官網(wǎng)推薦的系統(tǒng)是Raspberry Pi OS,是目前應(yīng)用最為廣泛的樹莓派操作系統(tǒng),這里我們也將使用Raspberry Pi OS進行實踐。由于樹莓派沒有配置板載閃存,因此我們將Raspberry Pi OS燒寫在一張16GB的存儲卡上,一般要求存儲卡不小于8GB。

    下面介紹樹莓派操作系統(tǒng)的燒寫流程。

    1、在樹莓派官方網(wǎng)站(https://www.raspberrypi.org/software/operating-systems/)下載Raspberry Pi OS系統(tǒng)鏡像。該頁面下提供了3種Raspberry Pi OS最新版本的鏡像文件,如下圖所示。

 

1635992199729802.png

    Raspberry Pi OS with desktop and recommended software集成了圖形化界面,同時預(yù)安裝了一些常用軟件,Raspberry Pi OS with desktop集成了圖形化界面,Raspberry Pi OS Lite沒有圖形化桌面。我們選擇Raspberry Pi OS with desktop and recommended software,點擊Downloal或者Download Torrent下載該文件。

    2、在Windows系統(tǒng)的電腦中對存儲卡進行格式化。

    3、使用燒寫軟件Etcher將系統(tǒng)刻錄在SD卡。Etcher是支持Windows、macOS以及Linux系統(tǒng)的輕量化軟件(https://www.balena.io/etcher/)。打開Etcher后分別選擇鏡像文件目錄以及待燒寫SD卡的盤符,點擊Flash即可。

 

1635992248645599.png

1635992252318311.png

    燒寫大概需要10~15分鐘的時間,具體時長與設(shè)備的讀寫能力有關(guān)。燒寫完成后,我們在Windows的磁盤管理器中可能看到SD卡的空間只剩下幾十MB,這都是正?,F(xiàn)象,因為Windows無法識別Linux的文件系統(tǒng)。如果系統(tǒng)提示SD卡需要格式化,切記不要選擇“是”,這會使我們之前的工作變成無用功。等待燒寫完成,將SD卡插入樹莓派背面的SD卡卡槽內(nèi),就可以連接硬件了。

二、在樹莓派上搭建環(huán)境

    接下來,我們?yōu)闃漭缮洗罱?a class="contentlabel" href="http://m.butianyuan.cn/news/listbylabel/label/OpenVINO">OpenVINO開發(fā)環(huán)境。樹莓派的OpenVINO工具套件包括推理引擎和MYRIAD插件,需要搭配英特爾二代神經(jīng)進行AI推理。由于樹莓派的OpenVINO工具套件不包含模型優(yōu)化器,我們需要在其他機器上對模型進行轉(zhuǎn)換,然后將優(yōu)化后的模型部署在樹莓派上。

1、下載樹莓派的OpenVINO工具套件安裝包

https://storage.openvinotoolkit.org/repositories/openvino/packages/),這里我們選擇的是2021.4版本。

2、打開樹莓派終端,新建文件夾openvino_2021,將下載好的安裝包解壓到當(dāng)前文件夾。

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、安裝外部軟件依賴cmake

sudo apt install cmake

4、設(shè)置環(huán)境變量

source /opt/intel/openvino_2021/bin/setupvars.sh

這樣設(shè)置每次重啟終端都需要運行上面的代碼。

永久設(shè)置環(huán)境變量

echo "source /opt/intel/openvino_2021/bin/setupvars.sh" >> ~/.bashrc

5、添加USB規(guī)則

添加當(dāng)前用戶至users組,注銷登錄使其生效。

sudo usermod -a -G users "$(whoami)"

安裝usb規(guī)則

sh /opt/intel/openvino_2021/install_dependencies/install_NCS_udev_rules.sh

6、編譯和運行目標檢測樣例

完成上面的步驟后,我們運行工具套件中的人臉檢測模型,測試環(huán)境是否搭建成功。

    (1)創(chuàng)建build文件夾用來編譯項目

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>

    程序運行結(jié)束后,我們可以查看生成的out_0.bmp文件中的人臉檢測框。

    至此,我們已經(jīng)完成了樹莓派OpenVINO環(huán)境的搭建。

三、open_model_zoo的使用

OpenVINO官網(wǎng)為我們提供了豐富的資源,方便我們快速構(gòu)建自己的項目。其中,GitHub中的open_model_zoo(https://github.com/openvinotoolkit/open_model_zoo)倉庫為我們提供了一些公開的和英特爾預(yù)訓(xùn)練好的模型,以及一些場景下使用OpenVINO的demo。

1635992360240689.png

由于我們要在樹莓派上實踐項目,首先我們需要在open_model_zoo中篩選能夠檢測行人的目標檢測模型。我們選擇適用于移動端的輕量級深度網(wǎng)絡(luò)模型mobilenet-ssd作為人群檢測模型。https://github.com/openvinotoolkit/open_model_zoo/tree/master/models/public/mobilenet-ssd

 

1635992399405751.png

倉庫中mobilenet-ssd的介紹文檔向我們詳細描述了模型的輸入、輸出、精度、計算量、參數(shù)量等。mobilenet-ssd模型是一個單階段的目標檢測模型,使用的是Caffe框架,模型的輸入是300*300的BGR三通道圖片,計算量2.316GFLOPs,參數(shù)量5.783MParams,在VOC2007數(shù)據(jù)集上的mAP值是67%。輸入輸出部分向我們介紹了原始模型和使用模型優(yōu)化器轉(zhuǎn)換后模型的輸入輸出參數(shù)。我們可以按照自己對精度、計算量、參數(shù)量、框架以及部署環(huán)境的要求,選擇自己需要的模型。

1、模型下載器的使用

確定好模型后,我們使用OpenVINO提供的模型下載器(downloader.py)下載模型。Windows平臺下需要以管理員身份運行Window命令提示符。

切換目錄:cd C:Program Files (x86)Intelopenvino_2021.2.185deployment_toolsopen_model_zootoolsdownloader

--help參數(shù)可以查看模型下載器的參數(shù)設(shè)置。

--print_all參數(shù)可以打印所有可以下載的模型:python downloader.py --print_all

下載模型需要在—name參數(shù)后面加上模型名稱 :python downloader.py --name mobilenet-ssd

 

1635992563501480.png

2、模型優(yōu)化器的使用

模型優(yōu)化器Model Optimizer可以將深度學(xué)習(xí)模型轉(zhuǎn)換為能夠被推理引擎執(zhí)行的IR文件。IR文件包含一個*.xml文件用來描述網(wǎng)絡(luò)結(jié)構(gòu),還包含一個*.bin文件用來存儲網(wǎng)絡(luò)的權(quán)重和偏置量。

下載好模型后,使用模型優(yōu)化器優(yōu)化模型,樹莓派的OpenVINO工具套件不包含模型下載器,因此我們需要在別的機器上對模型進行優(yōu)化。運行下面命令,完成對模型的優(yōu)化。--help參數(shù)可以查看模型優(yōu)化器的參數(shù)設(shè)置。

python mo.py --input_model mobilenet-ssdmobilenet-ssd.caffemodel --scale 127.5 --mean_values [127.5,127.5,127.5]

1635992626547252.png

四、應(yīng)用及代碼展示

1、行人檢測代碼

這里對中,使用OpenVINO進行人員檢測的代碼進行展示。

# 導(dǎo)入模塊

from openvino.inference_engine import IECore,IENetwork

import cv2

# 定義模型、圖片路徑以及計算設(shè)備

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

# 加載模型到計算設(shè)備

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})

# 可視化展示推理結(jié)果

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、人流量統(tǒng)計視頻

視頻1封面.jpg

人流量統(tǒng)計視頻http://v.eepw.com.cn/video/play/id/15333

在距離視頻畫面頂部2/3處畫了一條水平黃線,當(dāng)有人越過這條黃線,使用模型對其進行檢測和追蹤,Up和Down分別對應(yīng)人員流入和人員流出,從而實現(xiàn)對特定場所進入和出去人流量的統(tǒng)計。

3、運行結(jié)果對比

我們在樹莓派上分別對使用OpenCV的dnn相關(guān)函數(shù)調(diào)用mobilenet-ssd原始模型和OpenVINO運行優(yōu)化后的模型進行比較。視頻中左側(cè)為OpenCV運行,右側(cè)為OpenVINO運行,同時對推理部分的FPS值進行計算。可以看出,樹莓派上英特爾神經(jīng)計算棒與OpenVINO搭配的FPS值明顯要優(yōu)于單獨使用OpenCV運行原始mobilenet-ssd模型。

 

1635992699611809.png

人流量統(tǒng)計運行結(jié)果對比視頻http://v.eepw.com.cn/video/play/id/15334

參考資料:

樹莓派官網(wǎng):https://www.raspberrypi.org/software/operating-systems/

樹莓派搭建OpenVINO環(huán)境指南:https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_raspbian.html



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉