yolo原理
卷积神经网络原理
卷积神经网络(Convolutional Neural Networks,CNNS)是深度学习特征提取的主要算法,它通过卷积提取数据特征。
卷积层:提取图像中的目标信息,降低噪声;
池化层
降低网络的参数量,在图片发生平移旋转等操作时,仍能获得有效信息
降参:通过对特征图的下采样(例如最大池化活平均池化)有效减少了下一层输入的尺寸和相应的计算量。
平移不变性:池化层会提取区域内的最显著特征,增强对图像中操作的鲁棒性。
激活函数:加入非线性因素,把卷积层的输出结果做非线性映射;
全连接层:起到“分类器”的作用,根据训练样本对模型进行训练,从而得到全连接层的权重。
传统的图像分类网络中,例如LeNet-5,使用了卷积层、池化层和全连接层来进行图像分类。
yolo原理
1 backbone(骨干网络)- 特征提取
从输入图像中提取特征,这一部分主要由卷积层 和 池化层 构成。其中 卷积层 负责从图像中提取各种低级到高级的特征(例如边缘、颜色、纹理),而 池化层 负责帮助减少图像的空间维度,从而降低计算量,减少特征图的尺寸。
2 Neck(脖部网络)- 特征融合
进一步处理从骨干网络提取到的特征图,并通过一些结构来增强不同尺度的特征图。通过特征增强模块来进行特征图的融合,帮助YOLO检测到大物体和小物体时都能够保持较高的精度。
3 Head(检测头)- 输出最终预测
检测部分
交并比:交集/并集;一般交并比 IOU>=0.5。
非极大值抑制:算法先找到图像上置信度最大的一个框,然后再遍历其他所有的框,比较交并比是不是大于0.5,大于0.5则移除。可以防止一目标多矩阵,多目标同矩阵;
yolo使用
联网使用
本地使用
yolo常用训练命令
单卡
python .\train.py --img 640 --batch 16 --epochs 100 --data data/dataset.yaml --weights 'yolov5n.pt' --cache
多卡
python train.py --img 640 --batch 16 --epochs 100 --data data/dataset.yaml --weights yolov5n.pt --cache --device 0,1
yolo训练结果分析
精确率:正确预测为正的数据中,占预测正值的比例。衡量模型的误检率,少误检更好。
回召率:预测有正的数据中,占实际正值的比例。衡量模型的漏检率,少漏检更好。
F1-Score:= 2* precision*reacll / precision+recall。综合评估误检和漏检的平衡性。
在目标检测任务中:
Precision 高:预测的检测框中,大部分是正确的目标,误检少。
Recall 高:数据集中绝大部分目标都被检测到,漏检少。
两者通常需要一起分析:
高 Precision、低 Recall:模型保守,只检测出高置信度目标。
高 Recall、低 Precision:模型激进,可能存在大量误检。
Confusion Matrix: 混淆矩阵
混淆矩阵是一种用于分类问题的预测结果总结工具,通过以矩阵形式显示分类模型的预测结果,帮助分析模型的性能。按类别细分预测结果,显示模型在哪些类之间产生了混淆。通过结果分解,克服仅使用分类准确率的局限性,提供更细致的模型表现分析。
F1_curve
labels_correlogram: 不懂
这个是YOLO模型在检测物体时,边界框位置(x, y)和尺寸(width, height)之间的分布和相关性
1、边界框的位置相对均匀分布,意味着检测到的物体在图像中处于各个不同位置
2、边界框的宽度和高度主要集中在较小的值范围,说明大部分检测到的物体尺寸较小
3、宽度和高度之间呈正相关关系的话,说明部分物体的形状比例较为一致
树莓派布置onnx算法
树莓派4B实测,yolov5n 输入512的图像,onnx模型的帧率大概是1.0;
- 安装onnxruntime时的对应库
onnxruntime版本 | numpy版本 |
---|---|
<=1.8.0 | numpy>=1.16.6 |
| <=1.9.0 | numpy>=1.21.4 |