👦👦一个帅气的boy,你可以叫我Love And Program
🖱 ⌨个人主页:Love And Program的个人主页
💖💖如果对你有帮助的话希望三连💨💨支持一下博主
前言
最近重拾目标检测,发现目标检测的基本流程都忘干净了,所以只能着手重新学习,下面来分享一下最近学习目标检测的一些基础知识,只有知道整个事件的基本流程才能加强对目标检测的理解,从而推进项目的进展。
数据集
在进行所有人工智能检测前我们必需准备的工作之一是获取数据集,目标检测算法根据流行的不同模型分为使用voc数据集(也就是xml数据集)、txt数据集、或是coco数据集(也就是json数据集),所以很多时候需要用代码将数据集转换成我们需要的格式。但是其进行下一步创建数据加载类时大都以一种形式将获取到的边界框、类别、旋转角度等特征呈现使用,这里我不确定是不是都全转换成txt文件传入,但是最后形成的特征格式如下图,文件位置非必须)
简单来说就是不论是哪个数据集,放到数据加载类里都是一样的形式,所谓那些主流算法需要使用特定格式数据集只是人家就写了这一部分转换的代码而已,或许是因为团队不一样,公司不一样,所以不必在这一部分过于纠结。
YOLO算法使用txt文件读取,需要把voc格式转换成txt格式,或是更改yaml文件使用voc格式,具体内容请读者自行搜索。
Farst RCNN系列可以直接读取voc数据集。
MMDetection可以直接使用coco数据集。
数据加载类
整理好特征数据,接下来就是合理分配他们,但是这并不能像进行回归预测那样一股脑全部塞进去,受各方面影响,需要分批次进行训练,也就是平时经常听到的bach size,将数据传输给主干网络。
同时在此对数据进行相应预处理,在上述划分数据集之前,我们可以进行数据增强,做个裁剪、加黑边、旋转、图像融合、Mosaic随即拼接都是可以的,在深入可以修改图像的一系列HSV参数,加入随机抖动等操作增加数据集数量。
主干网络(Backclone)
此时数据已经处理好了,接下来我们需要将处理好的数据传入主干网络,主干网络是目标检测任务的基本特征提取器,我们可以理解为进行了一次相比颈部网络较为笼统地特征提取,最终传递所需n个输出特征层传入颈部网络。又因为适用场合不同,又分为更深且连接密集的主干网络和轻量级网络,分别用于研究突破和用于工业、现场使用。
主干网络具体代码咱们就不讨论了,网上已经有很多实例了,本文主要是疏通一下目标检测的整体流程,可以分享一下主干网络主要用的思想就是大家耳熟能详的那几种算法->VGG16/ResNet/CSPDarknet53/MobileNet系列等等。
颈部网络
主干网络产生的输出特征层传入颈部网络,颈部网络的作用是提取一些更复杂的特征,这一块就相对来说更加细节,相对流行的有FPN(特征金字塔),对特征进行多尺度融合;还有 SPP 模块,扩宽感受野,增强对特征图的提取能力,防止过拟合…
这一部分只是可太多了,但他们的本质都是将特征进行进一步处理,使特征的相关性更加紧密,这样训练的模型鲁棒性更好,最后得出模型。如果将目标检测比作做一个精美的木雕的话,数据集就是原材料,主干网络就是雕一个大概原型,颈部网络就是细细雕刻每一个部位,最后的头部网络便是将对应目标木雕分销到各自需要的地方。
头部网络
通过前面网络训练的特征头部网络负责检测与定位,通过loss损失函数和非极大值抑制计算选取出最佳边界候选框位置,最后用mAP指标评价->通俗一点讲就是用来预测最后展示目标的类别和位置。
本文主要介绍目标检测的一个基本流程,仅供熟悉一些通用的操作,并没有过多的分析具体步骤,了解分析相应代码的时候应该先看哪一部分,不能盲目分析,只有找对基本步骤才能一步一步进行剖析拆解
如有错误,请及时指出,感谢支持
转载:https://blog.csdn.net/qq_43604989/article/details/127705632