在嵌入式设备上一般只进行模型的推断,即在PC上可以先训练好模型,然后拿到嵌入式设备上来使用。OpenVINO的使用可参考博主前面的系列博客
OpenVINO使用介绍(一)_竹叶青lvye的博客-CSDN博客_openvino
OpenVINO示例介绍_竹叶青lvye的博客-CSDN博客
Intel Movidius Neural Computer Stick 2使用(PC-Based Ubuntu)_竹叶青lvye的博客-CSDN博客
博主这边介绍下如何在树莓派上配置OpenVINO,并结合Intel Movidius Neural Computer Stick 2来进行加速。
一.树莓派上配置OpenVINO
可参考官网
BuildingForRaspbianStretchOS · openvinotoolkit/openvino Wiki · GitHub
1. 下载资源
git clone https://github.com/openvinotoolkit/openvino
博主下载的资源在此处
2.初始化下载目录里的子模块(submodule)
cd到openvino目录下后,终端执行如下命令
git submodule update --init --recursive
此会自动下载一些文件下来,注意过程中由于网络问题,可能下不全,可手动去下载。或者下面cmake中编译时会提示哪些文件不全,这样就可以通过报错信息有针对的去手动下载文件。比如如下红框内蓝色的文件夹。注意这些个子模块下面也有一些需要手动下载的。
也可以从.gitmodules文件中看出需要额外下载的子模块
3.编译和安装
注:这边下面编译指定的python版本还是博主此篇博客时的版本
树莓派4B安装pytorch_竹叶青lvye的博客-CSDN博客_树莓派4b安装pytorch
在目录下新建一个build文件夹,cd进去后,执行如下命令语句
cmake -DCMAKE_BUILD_TYPE=Release -DTHREADING=SEQ -DENABLE_PYTHON=ON -DPYTHON_EXECUTABLE=/home/pi/python3.7/bin/python3.7 -DPYTHON_LIBRARY=/home/pi/python3.7/lib/libpython3.7m.so -DPYTHON_INCLUDE_DIR=/home/pi/python3.7/include/python3.7m -DCMAKE_INSTALL_PREFIX=/home/pi/openvino/install ..
cmake成功会出现如下信息:
再执行make命令,此过程大概会执行1到2个小时,耐心等待
最后再执行下语句进行安装
sudo make install
因为博主在前面编译的时候,指定了安装路径,所以都装到了此处
完毕后,在~./bashrc中添加如下3个环境变量(结合自己的路径)
source /home/pi/openvino/install/setupvars.sh
export LD_LIBRARY_PATH=/home/pi/opencv-3.4.4/install/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export LD_LIBRARY_PATH=/home/pi/openvino/install/runtime/lib/armv71${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
二.测试
1. 将前面install文件夹下里的openvino文件夹拷贝到对应版本的python的site-packages下(结合自己的路径)
2. cd到如下目录,执行如下命令安装NCS 2驱动(结合自己的了路径)
./install_NCS_udev_rules.sh
3. 这边使用博客中的openvino IR模型
Intel Movidius Neural Computer Stick 2使用(PC-Based Ubuntu)_竹叶青lvye的博客-CSDN博客
代码如下:
import numpy
import openvino.runtime as ov
import numpy as np
import time
from PIL import Image
from tensorflow.keras.applications.resnet50 import preprocess_input, decode_predictions
from tensorflow.keras.preprocessing import image
import openvino.runtime as ov
core = ov.Core()
for device in core.available_devices:
print(device)
core = ov.Core()
model = core.read_model("./saved_model.xml")
model.reshape([1, 224, 224, 3])
compiled_model = core.compile_model(model, "MYRIAD")
infer_request = compiled_model.create_infer_request()
img = image.load_img('2008_002682.jpg', target_size=(224, 224))
img = image.img_to_array(img)
img = preprocess_input(img)
img_np = np.expand_dims(img, axis=0)
# Create tensor from external memory
input_tensor = ov.Tensor(array=img_np, shared_memory=False)
infer_request.set_input_tensor(input_tensor)
t_model = time.perf_counter()
infer_request.start_async()
infer_request.wait()
print(f'do inference cost:{time.perf_counter() - t_model:.8f}s')
# Get output tensor for model with one output
output = infer_request.get_output_tensor()
output_buffer = output.data
# output_buffer[] - accessing output tensor data
print(output_buffer.shape)
print('Predicted:', decode_predictions(output_buffer, top=5)[0])
print("ok")
别忘了在树莓派上插上NCS2
运行结果如下:
/home/pi/PythonProject/openvinoTest/bin/python3 /home/pi/PycharmProjects/pythonProject/test_openvino.py
MYRIAD
do inference cost:0.05369431s
(1, 1000)
Predicted: [('n02123597', 'Siamese_cat', 0.16870117), ('n02108915', 'French_bulldog', 0.14099121), ('n04409515', 'tennis_ball', 0.08093262), ('n02095314', 'wire-haired_fox_terrier', 0.05609131), ('n02123045', 'tabby', 0.049865723)]
ok
Process finished with exit code 0
对比博客中的结果可看到
树莓派4B安装Tensorflow2.4.0_竹叶青lvye的博客-CSDN博客_树莓派安装tensorflow
预测结果是一致的,速度从23s提升至了0.05s,可以看到用了神经加速棒后,提速是很明显的。