前言
在这一专栏的前面几篇文章之中,作者从不同的问题角度把YOLO V5s version6.0的内容切分成了几个小块讲解YOLO V5s的源码,并且着重讲解了应该如何基于YOLO v5s的模型来对于自己的数据集进行修改应用。如果对于这一块的具体代码解析感兴趣的可以点击下方链接阅读专栏中的其余文章:
全代码全模型解析YOLO V5_vindicater的博客-优快云博客
那么本文起到的作用是总结,将前文的所有修改方式等等总结归纳在一起,从中看出ultralytics公司对于YOLO这一开源项目所付出的努力心血和达成的优良效果
一、高兼容性
1.兼容“.pt”;“.onnx”等等后缀名的模型文件
如上一篇文章中所写的一样,DetectMultiBackend函数满足了对于多个不同后缀名的模型文件的支持,这样可以确保无论是通过什么方式训练得到的模型都可以在这个程序包中得到运用。
2.对于各种表示形式兼容
对于训练集和应用集的内容读入模型的方式都是有所兼容的。比如在训练集和应用集的内容读入这一操作中,代码同时兼容读入训练集图片的路径、训练集文件夹的路径亦或是列举了所有图片路径的txt文件等等,这确保了作为使用者可以很轻松地设置自己的数据集,没有必要为了贴合其形式而特意创造出如下的txt文件,这对于大规模的数据集是很有帮助的。
本图是coco中的索引文件,可以看到记录内容相当得多相当复杂
二、强功能性
1.训练相关
(1)自动调整图片尺寸
对于不合适的图片尺寸可以采用check_img_size函数进行自动填充调整,将图片尺寸统一变成模型能够处理的比例。不仅方便了采用数据集的时候要讲所有图片设置成同一个size的麻烦,更是有效防止了模型因为图片尺寸问题出错的可能性,这一点做的是相当好的。
(2)自动改变Anchor的尺寸适合于数据集
YOLO v5s中给出的Anchor框的大小是适用于自然界中的事物的,但是可能用户的数据集会专注于某些分辨率的物体,此时在模型中内置关于Anchor框尺寸的合适与否的判断就非常重要。本模型的check_anchors函数确保了如果发现Anchor框的尺寸不合理,那么自动加以调整,并将合适的anchor框的尺寸保存在了yaml文件当中,可以说是对于使用者是相当方便的。:
if new_bpr > bpr: # replace anchors
anchors = torch.tensor(anchors, device=m.anchors.device).type_as(m.anchors)
m.anchors[:] = anchors.clone().view_as(m.anchors)
check_anchor_order(m) # must be in pixel-space (not grid-space)
m.anchors /= stride
s = f'{PREFIX}Done ✅ (optional: update model *.yaml to use these anchors in the future)'
else:
s = f'{PREFIX}Done ⚠️ (original anchors better than new anchors, proceeding with original anchors)'
LOGGER.info(s)
2.使用相关
(1)通过source参数实现多形式的输入
在上一篇博客中提到,是加上对于整个模型的使用上,摄像头,图片或者是视屏实际上都可以经过这个模型进行处理生成识别的结果。从这里就直接地体现了模型的性能强大。
(2)类似地,同样有check_img_size函数存在
三、高可塑性
1.网络结构,数据集位置等信息集中,修改较为简单
注意到,最关键的几个能够加以调整的信息和需要调整的信息,都以参数形式保存到了命令行configuration和xx.yaml之中,只需要在其中调整某些参数,就可以完成对于整个模型的内容的翻天覆地的变化,具体如何调整参照第一篇
从数据读取的角度解读YOLOV5源码:如何使用YOLO V5训练自己的数据集?_vindicater的博客-优快云博客
2.网络层的增添方便
YOLO v5将网络结构和每一层具体操作的分开放置虽然会导致整个模型的复杂性变高,使得新学者难以上手,但是其好处是相当显而易见而且令人叹服的。只要在yaml文件中对于网络结构进行修改,并且在common.py中进行备份,那么模型就可以使用相应的网络结构,具体内容在第二篇文章中详细讲述:
从前向传播角度解读YOLOV5的源码:如何修改网络结构或增添多余的层?_vindicater的博客-优快云博客
3.每一次训练的流程简单
由于在detect.py中采用的是increment_path函数方法,每次程序会先读取已经存在的文件夹的名字并且顺序产出下一个,这也就从流程上简化了操作,并不需要管理输出文件夹的命名,只要统一进行顺序删除即可
四、强实时性
作者电脑的配置
作者的电脑型号是拯救者Y9000P,处理器是i9-13900HX,显卡是NVIDIA GeForce RTX 4090 LapTop GPU(16G显存)。
作者运行YOLO v5s的具体情形
运行实录(调用本机摄像头):可以看出虽然速度有些不稳定,但是即使是最慢的10.0ms那一秒钟也有90帧,远超实时这一要求。既然如此,有理由相信对于模型的实时性是可以确保的
后记
本专栏至此也就告一段落了。本专栏主要的内容是对于YOLO V5这一个模型的内容解读。关于YOLO V5的重要性作者已经在前言一文中强调这里就不再赘述。YOLO V5系列的强功能性引起了很多工业和企业的青睐,因此优快云和各大论坛上都有很多对于其的讨论。作者在学习的时候也大量参考学习了其他各路大神的解析专栏。但是作者发现,对于学习了YOLO的结构,只是从模型的思想上了解,正打算从内容上了解的初学者,最先遇到的问题是不知从何开始,对于整个模型的内容理解的较为模糊,做不到自主进行归纳,这也困扰了作者很久,因此作者使用了一个月的时间钻研代码,并且用debug跟进程序,了解每一步究竟在做什么,我从思想上理解的又究竟是如何实现的。完成之后有通透之感。为了让后来者能够轻松地完成我这一个月的努力,我在此用3w+的字数将整个结构整理出来,希望能对于后续的读者能够有所帮助。作者的第二个月主要从事的是NLP领域的学习,作者的下一个专栏就是聚焦NLP的发展和大模型领域,如果感兴趣欢迎关注。
PPT提供下载:
PPT是我用来做交流和培训所使用的,这里以PDF的形式提供给大家