-
利用gen_head_helmet.py文件生成yolo格式的标签新的.txt文件,每一行都是一个目标,类别序号是从零索引开始(因为我们的分类是[‘person’,‘head’,‘helmet’]),每行坐标是x_center,y_center,width,height,同时框坐标采用归一化的(数值都是在0~1之间),通过比例计算得
-
feature map:在每个卷积层,数据都是以三维形式存在的。你可以把它看成许多个二维图片叠在一起,其中每一个称为一个feature map。在输入层,如果是灰度图片,那就只有一个feature map;如果是彩色图片,一般就是3个feature map(红绿蓝)。层与层之间会有若干个卷积核(kernel),上一层和每个feature map跟每个卷积核做卷积,都会产生下一层的一个feature map。该层卷积核的个数,有多少个卷积核,经过卷积就会产生多少个feature map一般网络越深的地方这个值**(卷积核的个数)**越大,因为随着网络的加深,feature map的长宽尺寸缩小,本卷积层的每个map提取的特征越具有代表性(精华部分),所以后一层卷积层需要增加feature map的数量,才能更充分的提取出前一层的特征,一般是成倍增加
-
读取xml文件
root是一个指向Element对象
Element.findall()只查找直接的孩子
Element.iter()用来寻找所有符合要求的Tag,注意,这里查找的范围是所有孩子和孩子的孩子
直接用Element.text来得到这个Element的值
import xml.etree.ElementTree as ET # 第一种读入方式:文件读入 tree = ET.parse('sample.xml') root = tree.getroot() # 第二种读入方式:字符串读入 root = ET.fromstring(sample_as_string)
-
k-means(使用聚类分析求最佳先验框):计算样本之间的距离(相似程度)将较近的样本聚为同一类别(簇)
需要注意两点:a.如何表达样本与样本之间的距离(欧氏距离或者IOU交并比,目标检测通常是IOU,左上角对齐计算交并比);b.分为几类,根据场景选择
-
总共提供四种yolov5的版本,s/m/l/x,逐渐增大(随着架构的增大,训练的时间也同时逐渐增大),yolov5s是网络深度和宽度最小但检测速度最快的模型,四个版本的区别仅在于
depth_multiple
与width_multiple
这两个参数不同。 -
生成best_anchors:
为什么同一组数据每次算得都不一样呢,因为kmeans的种子(初始点)是随机生成的;三种不同尺寸的特征图,一种对应三种大小的锚框所以是9个
-
yolov5s.ymal:
-
yolov5s的anchors的分配规则是:尺度越大的feature map越靠前,相对原图的下采样率越小,感受野越小,则相对可以预测一些尺度比较小的物体,所有分配到定anchor越小;尺度越小的feature map越靠后,相对原图的下采样率越大,感受野越大,则相对可以预测一些尺寸比较大的物体,所有分配到的anchor也越大。
-
yolov5s的backbone:
[from]表示当前模块的输入来自哪一层的输出,-1表示来自上一层的输出,层编号从0开始
[number]表示当前模块的理论重复次数,实际的理论重复次数还要来自上面的参数
depth_multiple
共同决定,该参数影响整体网络模型的深度[model]模块类名(模块的功能)
-
-
os.sep:根据你所处的平台,自动采用相应的分隔符号
-
line47:def train(hyp, tb_writer, opt, device):
logger模块:是python内置的标准模块,在release版本中只输出重要信息,而不必显示大量的调试信息;print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看他的数据,logger则以由开发者决定将信息输出到什么地方,以及怎么输出。logger从来不直接实例化
-
main()
-
scikit-opt:是一个封装了7种启发式算法的python代码库(差分进化算法、遗传算法、粒子群算法、模拟退火算法、蚁群算法、鱼群算法、免疫优化算法)
-
opt.resume断点续训主要保存的是网络模型的参数以及优化器optimizer的状态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ouUZIVVN-1692241193066)(yolov5.assets/image-20230401131306825.png)]
-
# parameters nc: 3 # number of classes类别数量 depth_multiple: 0.67 # model depth multiple控制模型深度(BottleneckCSP个数) width_multiple: 0.75 # layer channel multiple控制卷积通道channelge'shu # anchors anchors: - [7,15, 9,20, 11,23] - [13,28, 18,35, 25,44] - [36,61, 52,89, 85,147] # YOLOv5 backbone backbone: # [from, number, module, args] [[-1, 1, Focus, [64, 3]], # 0-P1/2 [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 [-1, 3, BottleneckCSP, [128]], [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 [-1, 9, BottleneckCSP, [256]], [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 [-1, 9, BottleneckCSP, [512]], [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 [-1, 1, SPP, [1024, [5, 9, 13]]], [-1, 3, BottleneckCSP, [1024, False]], # 9 ] # YOLOv5 head head: [[-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 6], 1, Concat, [1]], # cat backbone P4拼接 [-1, 3, BottleneckCSP, [512, False]], # 13 [-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 4], 1, Concat, [1]], # cat backbone P3 [-1, 3, BottleneckCSP, [256, False]], # 17 [-1, 1, Conv, [256, 3, 2]], [[-1, 14], 1, Concat, [1]], # cat head P4 [-1, 3, BottleneckCSP, [512, False]], # 20 [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, BottleneckCSP, [1024, False]], # 23 [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ]
-
以yolov5算法为核心技术,采用基于目标检测的佩戴安全帽的识别方法,一步到位,把安全帽类别直接当作多个目标检测的类别进行训练,该方案的特点:一是采用one-stage的方法直接端到端训练,任务简单,速度较快,二是部署简单,三是新增类别或数据的话需要人工拉框标注
标检测的佩戴安全帽的识别方法,一步到位,把安全帽类别直接当作多个目标检测的类别进行训练,该方案的特点:一是采用one-stage的方法直接端到端训练,任务简单,速度较快,二是部署简单,三是新增类别或数据的话需要人工拉框标注