【AI】光速理解YOLO框架
·
1.要点解析
我们前面学的PyTorch是用来搭建神经网络模型的脚手架,即利用一些算子搭建网络结构,并且支持评估推理等全套API。
区别于PyTorch,YOLO包含了丰富的计算机视觉模型库。有了YOLO,就不需要自己从0开始搭建模型了。YOLO内置模型功能强大,且API简单易用,它的定位就是AI落地,专门为AI工程化设计开发。
所以有了YOLO,你就不需要设计模型了,你要做的事情变成了:
- 选模型。YOLO模型自带权重,当然你也可以用自己的数据集+YOLO的模型或纯网络进行训练,训练过程比我们前面训练简单前馈网络简单多了,难的是准备数据。
- 调参数(调参工程师)
- 写业务
YOLO从最初的支持目标检测,到现在支持图像分割、姿态识别等完整的AI视觉开发套件。
YOLO设计了工程化的算法以提高执行速度,比如采用将图像划分多个网格的方式,进行分区域检测。这就导致目标大小和网格大小的比例影响检测结果。YOLO针对此问题采用多尺度特征融合的方式应对此问题。
常用的YOLO版本有YOLOv5,YOLOv8,YOLOv11。
2. 几十行代码实现智能监控算法
def smart_surveillance_system(video_path):
"""智能监控系统:检测+分割+姿态估计"""
# 加载多任务模型
seg_model = YOLO('yolov8n-seg.pt')
pose_model = YOLO('yolov8n-pose.pt')
cap = cv2.VideoCapture(video_path)
while True:
ret, frame = cap.read()
if not ret:
break
# 同时进行分割和姿态估计
seg_results = seg_model(frame, verbose=False)[0]
pose_results = pose_model(frame, verbose=False)[0]
# 合并结果可视化
combined_frame = seg_results.plot()
pose_frame = pose_results.plot()
# 叠加显示
overlay = cv2.addWeighted(combined_frame, 0.7, pose_frame, 0.3, 0)
cv2.imshow('智能监控', overlay)
# 业务逻辑:检测异常情况
people_count = len([box for box in seg_results.boxes
if seg_results.names[int(box.cls)] == 'person'])
if people_count > 5:
print(f"警告:区域人员密集 ({people_count}人)")
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
3. 示例项目
- yolo测试项目集,包含代码和测试数据,项目地址:https://gitee.com/pivotfuture/yolo_test
4. 边缘部署过程
在边缘侧部署,通常需要以下步骤:
- 将yolo的模型转换为 onnx 标准模型格式
- 然后再转换为边缘设备专有的模型格式,比如在Rockchip上的rknn格式。
- 转为rknn格式后,需要使用rknn的推理框架去编写推理代码
- 因为只使用了yolo的模型,yolo的前后处理是不在模型中的,所以需要在使用模型推理前后进行预处理,比如NMS(非极大值抑制)。
5. 什么时候需要自己训练yolo
如果你有一些自己的数据集,比如要识别一些飞机大炮,就需要自己训练yolo。具体过程如下:
- 标注目标
- 基于yolo的预训练模型进行训练(微调)
6.小结
你可以在完全不知道内部网络结构原理的情况下,构建AI视觉应用,因为算法库封装的很完善,想要去学习AI,最好利用Python快速验证的优势,先把程序跑起来,然后再去深入原理。上来就看原理,先不说原理难不难,很多教程的讲解水平很差,很容易劝退。动手学习是学习的一大技巧。
更多推荐
所有评论(0)