首页 > 软件 > 深度学习YOLOV10模型训练过程中,box_om=4.8合适吗

深度学习YOLOV10模型训练过程中,box_om=4.8合适吗

软件 2026-06-30

YOLOv10训练自己的数据集-onnx\tensorrt推理

YOLOv10
YOLOv10是清华大学研究人员基于先前的YOLO软件包,引入新实时目标检测方法的升级版。旨在解决前版本在后处理与模型架构上的局限性,通过去除非最大抑制(NMS)及优化多种模型组件,显著减少计算开销的同时,保持顶尖性能。实验验证显示,YOLOv10在不同模型尺度上实现了优越的精度与延迟平衡。
YOLOv10系列模型包括:纳米版YOLOv10-N、小型YOLOv10-S、通用中型YOLOv10-M、宽度增加的平衡型YOLOv10-B、大型精度优先版YOLOv10-L与最高精度与性能的超大型版YOLOv10-X。
结构对比
结构上,YOLOv10在原有基础上添加了PSA与C2f结构中的CBI,优化模型性能。
环境配置
通过conda创建虚拟环境,执行特定命令。
数据集准备
将训练数据集置于项目目录下,确保数据集符合特定格式。
训练模型
导入YOLOv10模块,使用指定训练代码进行模型训练。
模型推理
执行推理代码,实现模型在实际场景中的应用。
ONNX推理
推理过程中,输出包括四个元素:box位置(xyxy)、分类评分与预测类标签,其中max_det参数设定为300。
TensorRT推理

学Yolo?必须要知道的基础内容

YOLO系列算法,作为目标检测领域的明星,以其高效和集成的特性备受瞩目。从V1到V4,每个版本都在前代基础上进行着创新与优化。V1开启了融合分类和定位的先河,V2的批标准化和高分辨率微调带来了预测准确度的提升,而V3则引入了多尺度检测和Darknet-53网络结构,为小目标检测带来了显著改进。
基础构建
YOLO的核心在于其独特的anchor boxes机制,将检测任务与分类任务整合于一体,一次预测所有对象。例如,V3的网络结构设计巧妙,448x444的输入经过处理后,输出7x7x30的张量,每个网格对应一个包含两个bbox位置、置信度和20类概率的30维向量。训练过程中,每个样本都需要精心构建,包含目标位置的精确标注和类别信息。
训练之旅
训练过程并非易事,但关键步骤清晰明了。首先,利用梯度下降,从构建的训练样本出发,每个网格的输出张量代表了模型对目标的估计。接着,Yolo采用自定义的损失函数,精确测量预测结果与真实标签的差异,平衡位置误差和存在性置信度误差。通过ImageNet预训练前20层,再在PASCAL VOC数据集上深度学习,加入dropout和数据增强来防止过拟合。
进阶优化
从YoloV2开始,性能得到了显著提升。它通过批标准化提升模型稳定性和性能,不同分辨率输入的优化让分类和检测任务更为精确。YOLOV2的Anchor Boxes策略,通过聚类提取不同尺度的anchor,不仅减少了微调的复杂度,也提高了对小目标的检测能力。此外,多尺度训练和Darknet-19网络结构的使用,让YOLO系列在速度与准确性之间找到了平衡。
YoloV3的飞跃
YOLOv3的革新在于引入多尺度特征,丰富先验框,以及调整网络结构和分类方法。它通过Darknet-53和残差连接,构建了更为强大的基础网络,配合K-means生成的9种尺寸的先验框,实现了更精细的目标检测。同时,logistic回归的使用解决了类别重叠问题,输出的预测结果包含3个尺度的N通道,每个通道都包含了坐标、置信度和类别概率。
YoloV4的突破
YOLOv4在精度和帧率上更上一层楼,它整合了多种检测技巧,结构虽与V3相似,但细节上的改进使其性能更优。CBM、CBL、Res unit等组件的引入,以及输入大小的灵活性,使YOLOv4成为目标检测领域的又一里程碑。
总的来说,要深入学习YOLO,理解其网络架构、样本构建和关键改进是至关重要的。从V1到V4,每一步都见证了YOLO系列在目标检测领域的持续进化和卓越表现。

如何运用yolov5训练自己的数据(手把手教你学yolo)

在这篇博文中,我们将探讨如何使用YOLOv5模型对自定义目标检测数据集进行微调和训练。深度学习领域在过去十年间发生了巨大变化,使得即使是新手也能在短短几周内掌握深度学习知识,并使用最佳模型对自定义数据集进行训练。YOLOv5正是这样一个强大的工具,作为YOLO系列的最新版本,它基于单阶段深度学习,能够以接近实时的速度进行目标检测,并达到先进准确度。本篇博文将引导您通过实际操作,证明使用YOLOv5进行自定义目标检测训练的可能性。
首先,YOLOv5是一种深度学习模型,专为目标检测任务设计。它采用PyTorch框架,由Ultralytics团队在GitHub上开发。模型包含不同大小和准确性的多种模型,以适应各种场景和设备的需求。YOLOv5一共有五个模型,包括小型、中型、大型等,可根据具体需求进行选择。
具体而言,我们将通过以下步骤使用YOLOv5进行自定义目标检测训练:
1. 准备数据集:使用Vehicle-OpenImages数据集作为示例。
2. 数据增强:进行mosaic数据增强以提高模型泛化能力。
3. 自定义训练方法:训练小型、中型模型,并进行性能比较。
4. 推断:对图像和视频进行推断,并分析不同模型的性能。
让我们开始操作过程。首先,下载和准备数据集。我们使用辅助函数将数据集下载并解压。数据集结构如下:
- 训练集:包含用于训练的图像。
- 验证集:包含用于验证模型性能的图像。
接下来,数据集的YAML配置文件至关重要,它包含了训练和验证数据的路径,以及类别名称。在执行训练脚本时,需要提供此文件路径,以便脚本识别图像路径、标签路径和类别名称。数据集已包含此文件。
为了使用YOLOv5代码库的任何功能,我们需克隆存储库并进入yolov5目录。以下是克隆存储库的代码:
git clone
cd yolov5
进行训练前,让我们了解训练脚本的关键参数:
- `--data`:数据集的YAML文件路径。
- `--weights`:用于训练的模型权重。
- `--img`:图像大小。
- `--epochs`:训练轮数。
- `--batch-size`:批次大小。
- `--name`:保存结果的目录名称。
训练过程中,代码会将每个epoch的验证批次预测保存至结果目录。我们编写辅助函数找到所有验证预测并展示结果。通过比较不同模型的mAP(平均精度)指标和FPS(每秒帧数),我们可以分析性能和速度差异。
在本篇博文中,我们将执行多个训练和推理实验,包括使用YOLOv5小型模型的自定义对象检测训练与推理,以及尝试部分冻结中型模型的训练。实验结果展示了YOLOv5代码库的强大功能,并揭示了不同模型性能与速度之间的权衡。
通过实践,您将深入了解YOLOv5代码库的运作机制,以及在实际应用中如何选择和优化模型。实验结果表明,尽管涉及了一些通用Python函数,我们并未编写深度学习代码,这体现了深度学习领域的可访问性。未来,我们希望领域内持续发展,让学习和应用更加便捷。
如果您在自己的数据集上进行自定义训练并发现有趣的结果,请在评论区分享您的成果,与社区成员共同探讨和学习。让我们一起推动深度学习领域的发展,探索更多可能!

如何运用yolov5训练自己的数据(手把手教你学yolo)

在本文中,我们将深入探讨如何利用YOLOv5进行自定义目标检测的训练和推理,展示了深度学习的易用性提升。通过实例,我们展示了如何从训练小型到中型模型,以及如何通过微调和冻结层来优化性能,同时还揭示了YOLOv5模型在不同场景下的应用。随着技术的发展,即使是初学者也能在短短的代码中实现神经网络模型的训练,这无疑简化了深度学习的实践过程。
YOLOv5,作为单阶段深度学习目标检测器的代表,以实时速度和高准确性吸引着众多用户。从YOLOv5系列的介绍,到五个模型的选择,再到使用Vehicle-OpenImages数据集进行自定义训练的详细步骤,我们一步步演示了如何将YOLOv5应用于实际场景。
在训练过程中,我们重点介绍了数据集准备、配置文件设置、克隆代码库、参数调整等关键环节。通过性能比较,我们不仅观察到不同模型在mAP和FPS上的表现,还展示了训练结果的展示和推理过程。
本文的实践实验表明,YOLOv5不仅是一个强大的工具,还标志着深度学习技术正变得越来越易于使用。如果你也想尝试在自己的数据集上应用YOLOv5,现在就行动起来,分享你的成果吧!

目标检测算法(R-CNN,fast R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3)

深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理。  目标检测可以理解为是物体识别和物体定位的综合 ,不仅仅要识别出物体属于哪个分类,更重要的是得到物体在图片中的具体位置。
2014年R-CNN算法被提出,基本奠定了two-stage方式在目标检测领域的应用。它的算法结构如下图
算法步骤如下:
R-CNN较传统的目标检测算法获得了50%的性能提升,在使用VGG-16模型作为物体识别模型情况下,在voc2007数据集上可以取得66%的准确率,已经算还不错的一个成绩了。其最大的问题是速度很慢,内存占用量很大,主要原因有两个
针对R-CNN的部分问题,2015年微软提出了Fast R-CNN算法,它主要优化了两个问题。
R-CNN和fast R-CNN均存在一个问题,那就是 由选择性搜索来生成候选框,这个算法很慢 。而且R-CNN中生成的2000个左右的候选框全部需要经过一次卷积神经网络,也就是需要经过2000次左右的CNN网络,这个是十分耗时的(fast R-CNN已经做了改进,只需要对整图经过一次CNN网络)。这也是导致这两个算法检测速度较慢的最主要原因。
faster R-CNN 针对这个问题, 提出了RPN网络来进行候选框的获取,从而摆脱了选择性搜索算法,也只需要一次卷积层操作,从而大大提高了识别速度 。这个算法十分复杂,我们会详细分析。它的基本结构如下图
主要分为四个步骤:
使用VGG-16卷积模型的网络结构:
卷积层采用的VGG-16模型,先将PxQ的原始图片,缩放裁剪为MxN的图片,然后经过13个conv-relu层,其中会穿插4个max-pooling层。所有的卷积的kernel都是3x3的,padding为1,stride为1。pooling层kernel为2x2, padding为0,stride为2。
MxN的图片,经过卷积层后,变为了(M/16) x (N/16)的feature map了。
faster R-CNN抛弃了R-CNN中的选择性搜索(selective search)方法,使用RPN层来生成候选框,能极大的提升候选框的生成速度。RPN层先经过3x3的卷积运算,然后分为两路。一路用来判断候选框是前景还是背景,它先reshape成一维向量,然后softmax来判断是前景还是背景,然后reshape恢复为二维feature map。另一路用来确定候选框的位置,通过bounding box regression实现,后面再详细讲。两路计算结束后,挑选出前景候选框(因为物体在前景中),并利用计算得到的候选框位置,得到我们感兴趣的特征子图proposal。
卷积层提取原始图像信息,得到了256个feature map,经过RPN层的3x3卷积后,仍然为256个feature map。但是每个点融合了周围3x3的空间信息。对每个feature map上的一个点,生成k个anchor(k默认为9)。anchor分为前景和背景两类(我们先不去管它具体是飞机还是汽车,只用区分它是前景还是背景即可)。anchor有[x,y,w,h]四个坐标偏移量,x,y表示中心点坐标,w和h表示宽度和高度。这样,对于feature map上的每个点,就得到了k个大小形状各不相同的选区region。
对于生成的anchors,我们首先要判断它是前景还是背景。由于感兴趣的物体位于前景中,故经过这一步之后,我们就可以舍弃背景anchors了。大部分的anchors都是属于背景,故这一步可以筛选掉很多无用的anchor,从而减少全连接层的计算量。
对于经过了3x3的卷积后得到的256个feature map,先经过1x1的卷积,变换为18个feature map。然后reshape为一维向量,经过softmax判断是前景还是背景。此处reshape的唯一作用就是让数据可以进行softmax计算。然后输出识别得到的前景anchors。
另一路用来确定候选框的位置,也就是anchors的[x,y,w,h]坐标值。如下图所示,红色代表我们当前的选区,绿色代表真实的选区。虽然我们当前的选取能够大概框选出飞机,但离绿色的真实位置和形状还是有很大差别,故需要对生成的anchors进行调整。这个过程我们称为bounding box regression。
假设红色框的坐标为[x,y,w,h], 绿色框,也就是目标框的坐标为[Gx, Gy,Gw,Gh], 我们要建立一个变换,使得[x,y,w,h]能够变为[Gx, Gy,Gw,Gh]。最简单的思路是,先做平移,使得中心点接近,然后进行缩放,使得w和h接近。如下:
我们要学习的就是dx dy dw dh这四个变换。由于是线性变换,我们可以用线性回归来建模。设定loss和优化方法后,就可以利用深度学习进行训练,并得到模型了。对于空间位置loss,我们一般采用均方差算法,而不是交叉熵(交叉熵使用在分类预测中)。优化方法可以采用自适应梯度下降算法Adam。
得到了前景anchors,并确定了他们的位置和形状后,我们就可以输出前景的特征子图proposal了。步骤如下:
1,得到前景anchors和他们的[x y w h]坐标。
2,按照anchors为前景的不同概率,从大到小排序,选取前pre_nms_topN个anchors,比如前6000个
3,剔除非常小的anchors。
4,通过NMS非极大值抑制,从anchors中找出置信度较高的。这个主要是为了解决选取交叠问题。首先计算每一个选区面积,然后根据他们在softmax中的score(也就是是否为前景的概率)进行排序,将score最大的选区放入队列中。接下来,计算其余选区与当前最大score选区的IOU(IOU为两box交集面积除以两box并集面积,它衡量了两个box之间重叠程度)。去除IOU大于设定阈值的选区。这样就解决了选区重叠问题。
5,选取前post_nms_topN个结果作为最终选区proposal进行输出,比如300个。
经过这一步之后,物体定位应该就基本结束了,剩下的就是物体识别了。
和fast R-CNN中类似,这一层主要解决之前得到的proposal大小形状各不相同,导致没法做全连接。全连接计算只能对确定的shape进行运算,故必须使proposal大小形状变为相同。通过裁剪和缩放的手段,可以解决这个问题,但会带来信息丢失和图片形变问题。我们使用ROI pooling可以有效的解决这个问题。
ROI pooling中,如果目标输出为MxN,则在水平和竖直方向上,将输入proposal划分为MxN份,每一份取最大值,从而得到MxN的输出特征图。
ROI Pooling层后的特征图,通过全连接层与softmax,就可以计算属于哪个具体类别,比如人,狗,飞机,并可以得到cls_prob概率向量。同时再次利用bounding box regression精细调整proposal位置,得到bbox_pred,用于回归更加精确的目标检测框。
这样就完成了faster R-CNN的整个过程了。算法还是相当复杂的,对于每个细节需要反复理解。faster R-CNN使用resNet101模型作为卷积层,在voc2012数据集上可以达到83.8%的准确率,超过yolo ssd和yoloV2。其最大的问题是速度偏慢,每秒只能处理5帧,达不到实时性要求。
针对于two-stage目标检测算法普遍存在的运算速度慢的缺点, yolo创造性的提出了one-stage。也就是将物体分类和物体定位在一个步骤中完成。 yolo直接在输出层回归bounding box的位置和bounding box所属类别,从而实现one-stage。通过这种方式, yolo可实现45帧每秒的运算速度,完全能满足实时性要求 (达到24帧每秒,人眼就认为是连续的)。它的网络结构如下图:
主要分为三个部分:卷积层,目标检测层,NMS筛选层。
采用Google inceptionV1网络,对应到上图中的第一个阶段,共20层。这一层主要是进行特征提取,从而提高模型泛化能力。但作者对inceptionV1进行了改造,他没有使用inception module结构,而是用一个1x1的卷积,并联一个3x3的卷积来替代。(可以认为只使用了inception module中的一个分支,应该是为了简化网络结构)
先经过4个卷积层和2个全连接层,最后生成7x7x30的输出。先经过4个卷积层的目的是为了提高模型泛化能力。yolo将一副448x448的原图分割成了7x7个网格,每个网格要预测两个bounding box的坐标(x,y,w,h)和box内包含物体的置信度confidence,以及物体属于20类别中每一类的概率(yolo的训练数据为voc2012,它是一个20分类的数据集)。所以一个网格对应的参数为(4x2+2+20) = 30。如下图
其中前一项表示有无人工标记的物体落入了网格内,如果有则为1,否则为0。第二项代表bounding box和真实标记的box之间的重合度。它等于两个box面积交集,除以面积并集。值越大则box越接近真实位置。
分类信息: yolo的目标训练集为voc2012,它是一个20分类的目标检测数据集 。常用目标检测数据集如下表:
| Name | # Images (trainval) | # Classes | Last updated |
| --------------- | ------------------- | --------- | ------------ |
| ImageNet | 450k | 200 | 2015 |
| COCO | 120K | 90 | 2014 |
| Pascal VOC | 12k | 20 | 2012 |
| Oxford-IIIT Pet | 7K | 37 | 2012 |
| KITTI Vision | 7K | 3 | |
每个网格还需要预测它属于20分类中每一个类别的概率。分类信息是针对每个网格的,而不是bounding box。故只需要20个,而不是40个。而confidence则是针对bounding box的,它只表示box内是否有物体,而不需要预测物体是20分类中的哪一个,故只需要2个参数。虽然分类信息和confidence都是概率,但表达含义完全不同。
筛选层是为了在多个结果中(多个bounding box)筛选出最合适的几个,这个方法和faster R-CNN 中基本相同。都是先过滤掉score低于阈值的box,对剩下的box进行NMS非极大值抑制,去除掉重叠度比较高的box(NMS具体算法可以回顾上面faster R-CNN小节)。这样就得到了最终的最合适的几个box和他们的类别。
yolo的损失函数包含三部分,位置误差,confidence误差,分类误差。具体公式如下:
误差均采用了均方差算法,其实我认为,位置误差应该采用均方差算法,而分类误差应该采用交叉熵。由于物体位置只有4个参数,而类别有20个参数,他们的累加和不同。如果赋予相同的权重,显然不合理。故yolo中位置误差权重为5,类别误差权重为1。由于我们不是特别关心不包含物体的bounding box,故赋予不包含物体的box的置信度confidence误差的权重为0.5,包含物体的权重则为1。
Faster R-CNN准确率mAP较高,漏检率recall较低,但速度较慢。而yolo则相反,速度快,但准确率和漏检率不尽人意。SSD综合了他们的优缺点,对输入300x300的图像,在voc2007数据集上test,能够达到58 帧每秒( Titan X 的 GPU ),72.1%的mAP。
SSD网络结构如下图:
和yolo一样,也分为三部分:卷积层,目标检测层和NMS筛选层
SSD论文采用了VGG16的基础网络,其实这也是几乎所有目标检测神经网络的惯用方法。先用一个CNN网络来提取特征,然后再进行后续的目标定位和目标分类识别。
这一层由5个卷积层和一个平均池化层组成。去掉了最后的全连接层。SSD认为目标检测中的物体,只与周围信息相关,它的感受野不是全局的,故没必要也不应该做全连接。SSD的特点如下。
每一个卷积层,都会输出不同大小感受野的feature map。在这些不同尺度的feature map上,进行目标位置和类别的训练和预测,从而达到 多尺度检测 的目的,可以克服yolo对于宽高比不常见的物体,识别准确率较低的问题。而yolo中,只在最后一个卷积层上做目标位置和类别的训练和预测。这是SSD相对于yolo能提高准确率的一个关键所在。
如上所示,在每个卷积层上都会进行目标检测和分类,最后由NMS进行筛选,输出最终的结果。多尺度feature map上做目标检测,就相当于多了很多宽高比例的bounding box,可以大大提高泛化能力。
和faster R-CNN相似,SSD也提出了anchor的概念。卷积输出的feature map,每个点对应为原图的一个区域的中心点。以这个点为中心,构造出6个宽高比例不同,大小不同的anchor(SSD中称为default box)。每个anchor对应4个位置参数(x,y,w,h)和21个类别概率(voc训练集为20分类问题,在加上anchor是否为背景,共21分类)。如下图所示:
另外,在训练阶段,SSD将正负样本比例定位1:3。训练集给定了输入图像以及每个物体的真实区域(ground true box),将default box和真实box最接近的选为正样本。然后在剩下的default box中选择任意一个与真实box IOU大于0.5的,作为正样本。而其他的则作为负样本。由于绝大部分的box为负样本,会导致正负失衡,故根据每个box类别概率排序,使正负比例保持在1:3。SSD认为这个策略提高了4%的准确率
另外,SSD采用了数据增强。生成与目标物体真实box间IOU为0.1 0.3 0.5 0.7 0.9的patch,随机选取这些patch参与训练,并对他们进行随机水平翻转等操作。SSD认为这个策略提高了8.8%的准确率。
和yolo的筛选层基本一致,同样先过滤掉类别概率低于阈值的default box,再采用NMS非极大值抑制,筛掉重叠度较高的。只不过SSD综合了各个不同feature map上的目标检测输出的default box。
SSD基本已经可以满足我们手机端上实时物体检测需求了,TensorFlow在Android上的目标检测官方模型ssd_mobilenet_v1_android_export.pb,就是通过SSD算法实现的。它的基础卷积网络采用的是mobileNet,适合在终端上部署和运行。
针对yolo准确率不高,容易漏检,对长宽比不常见物体效果差等问题,结合SSD的特点,提出了yoloV2。它主要还是采用了yolo的网络结构,在其基础上做了一些优化和改进,如下
网络采用DarkNet-19:19层,里面包含了大量3x3卷积,同时借鉴inceptionV1,加入1x1卷积核全局平均池化层。结构如下
yolo和yoloV2只能识别20类物体,为了优化这个问题,提出了yolo9000,可以识别9000类物体。它在yoloV2基础上,进行了imageNet和coco的联合训练。这种方式充分利用imageNet可以识别1000类物体和coco可以进行目标位置检测的优点。当使用imageNet训练时,只更新物体分类相关的参数。而使用coco时,则更新全部所有参数。
YOLOv3可以说出来直接吊打一切图像检测算法。比同期的DSSD(反卷积SSD), FPN(feature pyramid networks)准确率更高或相仿,速度是其1/3.。
YOLOv3的改动主要有如下几点:
不过如果要求更精准的预测边框,采用COCO AP做评估标准的话,YOLO3在精确率上的表现就弱了一些。如下图所示。
当前目标检测模型算法也是层出不穷。在two-stage领域, 2017年Facebook提出了mask R-CNN 。CMU也提出了A-Fast-RCNN 算法,将对抗学习引入到目标检测领域。Face++也提出了Light-Head R-CNN,主要探讨了 R-CNN 如何在物体检测中平衡精确度和速度。
one-stage领域也是百花齐放,2017年首尔大学提出 R-SSD 算法,主要解决小尺寸物体检测效果差的问题。清华大学提出了 RON 算法,结合 two stage 名的方法和 one stage 方法的优势,更加关注多尺度对象定位和负空间样本挖掘问题。
目标检测领域的深度学习算法,需要进行目标定位和物体识别,算法相对来说还是很复杂的。当前各种新算法也是层不出穷,但模型之间有很强的延续性,大部分模型算法都是借鉴了前人的思想,站在巨人的肩膀上。我们需要知道经典模型的特点,这些tricks是为了解决什么问题,以及为什么解决了这些问题。这样才能举一反三,万变不离其宗。综合下来,目标检测领域主要的难点如下:
一文读懂目标检测AI算法:R-CNN,faster R-CNN,yolo,SSD,yoloV2
从YOLOv1到v3的进化之路
SSD-Tensorflow超详细解析【一】:加载模型对图片进行测试 
https://blog.csdn.net/k87974/article/details/80606407
YOLO   
https://pjreddie.com/darknet/yolo/ 
   
https://github.com/pjreddie/darknet 
 
C#项目参考:
https://github.com/AlturosDestinations/Alturos.Yolo
项目实践贴个图。

标签:未分类 学习 软件 人工智能 计算机

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18