这里有大概的环境配置:
https://qq742971636.blog.csdn.net/article/details/138048132
yolov5树莓派跑不起来,用yolov5 Lite可以:
https://github.com/ppogg/YOLOv5-Lite
今天我将向您介绍如何使用YOLOv5 Lite在树莓派上进行目标检测。YOLOv5 Lite是一种轻量级目标检测模型,适用于资源受限的设备,如树莓派。在本文中,我将分享环境配置、项目克隆、模型部署以及示例推理的详细步骤。
首先,让我们配置环境以准备部署YOLOv5 Lite。以下是您需要执行的命令:
bashexport http_proxy=http://192.168.3.2:10811
export https_proxy=http://192.168.3.2:10811
接下来,我们将克隆YOLOv5 Lite项目。执行以下命令:
bashgit clone https://github.com/ppogg/YOLOv5-Lite.git
进入项目目录并安装所需的依赖项:
bashcd ~/YOLOv5-Lite-master/python_demo/onnxruntime
python3 -m pip install onnx onnxruntime
现在,让我们下载YOLOv5 Lite的模型权重,您可以通过以下链接获取:
在YOLOv5 Lite中,我们使用end2end方法进行推理。这意味着模型内置了非极大值抑制(NMS),无需额外的后处理步骤。这样可以极大地简化代码并提高推理速度。
比如对下图的左图推理,可以得到12*6的结果:
在Windows系统上,使用YOLOv5 Lite进行推理非常快速,达到了每秒100帧的速度。这使得它成为在资源受限的设备上进行实时目标检测的理想选择。
onnx推理不用管太多底层,不像mnn那样,所以更简单一点,经过上面的步骤,我们有如下文件:
(1)v5lite_e_onnx_end2end.py
(2)v5lite-e_end2end.onnx
执行v5lite_e_onnx_end2end.py就可以直接推理任意图片并保存,下图中的所有文件我放这里:
clikehttps://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?u=bdf8eeb84961492ba2b62f7bfee641ea&tab=BB08J2
FPS只能达到9,即是每秒大概可以推理9帧图像。因为我们是onnx的fp32的运算,这个运算对树莓派来说还是比较大的,最快看宣传可以达到17帧,需要做一些量化之类的,我这里就不做了。
这是代码执行:
执行结果保存为save.jpg,打开看到:
是否可以使用fp16的onnx推理呢,速度会不会快一些呢,尝试一下,win上安装环境:
clikepip install onnxmltools onnxconverter-common
执行python代码:
clikeimport onnxmltools # 加载float16_converter转换器 from onnxmltools.utils.float16_converter import convert_float_to_float16 # 使用onnxmltools.load_model()函数来加载现有的onnx模型 # 但是请确保这个模型是一个fp32的原始模型 onnx_model = onnxmltools.load_model('./v5lite-e_end2end.onnx') # 使用convert_float_to_float16()函数将fp32模型转换成半精度fp16 onnx_model_fp16 = convert_float_to_float16(onnx_model) # 使用onnx.utils.save_model()函数来保存, onnxmltools.utils.save_model(onnx_model_fp16, './v5lite-e_end2end_fp16.onnx')
有警告,但是文件得到了,并且是一半的大小:
执行推理失败了,说明转换的时候有的nms算子还是不能成功转换的,这一条路堵住了。
这一步就比较简单了,建立一个文件写点opencv-python的代码,进行usb摄像头检测即可:
所使用的代码如下,其中v5lite_e_onnx_end2end.py在文档中去搜索获取感谢
clikeimport cv2 from v5lite_e_onnx_end2end import yolov5_lite if __name__ == '__main__': # 初始化摄像头 cap = cv2.VideoCapture(0) # 0 表示第一个摄像头,如果有多个摄像头,可以尝试不同的索引 # 加载模型 modelpath = 'v5lite-e_end2end.onnx' # 模型路径 classfile = 'coco.names' # 类别文件路径 net = yolov5_lite(modelpath, classfile) # 加载模型 # 循环读取摄像头流 while True: ret, frame = cap.read() # 读取一帧图像 if not ret: break # 如果没有读取到图像,退出循环 # 进行检测 detected_img = net.detect(frame) # 显示检测结果 cv2.imshow('YOLOv5Lite Detection', detected_img) # 检测按键,如果按下 q 键则退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放摄像头并关闭所有窗口 cap.release() cv2.destroyAllWindows()
csharphttps://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!