增强型YOLOv5应用于扩展PASCAL VOC数据集


目录

  • 摘要
    • 关键词
  • 1. 引言
  • 2. 性能研究
    • 2.1 YOLO
    • 2.2 PASCAL VOC 2007 数据集
    • 2.3 MS COCO 数据集
  • 3 实验方法
    • 3.1 利用COCO数据集扩展PASCAL VOC 2007(以elephant大象为例)
    • 3.2 方法实现(以YOLOv5为例)
      • 3.2.1 YOLOv5介绍
      • 3.2.2 YOLOv5流程
    • 3.3 网络训练
    • 3.4 实验结果
      • 3.4.1 Fine-tune mAP结果
      • 3.4.2 Full-train mAP结果
  • 4 实验结果与分析
    • 4.1 Fine-tune 结果与分析
    • 4.2 Full-train 结果与分析
  • 5 结论
  • 附录A
    • Full-train
    • Fine-tune


摘要

本研究采用YOLOv5s模型,通过Fine-tune和Full-train两种方法,在PASCAL VOC 2007与扩展后的数据集上进行了目标检测任务。Fine-tune结果表明模型在多数类别上展现出高精度与召回率,尤其在新加入的“大象”类别上表现突出,但在类别间的混淆及少数误检上仍需优化。Full-train显示模型在没有预训练辅助下的表现有所波动,尤其是对小物体和复杂场景的识别准确度下降,但在特定类别上依旧保持较高的识别能力。这些发现为模型的进一步改进提供了方向。

关键词

YOLOv5,目标检测,预训练模型


1. 引言

随着深度学习技术的快速发展,物体检测已成为计算机视觉领域的核心研究问题之一,其广泛应用于自动驾驶、安防监控、智能视频分析等多个场景。物体检测的任务是从图像中识别出多个物体的位置并确定其类别,这对于理解图像内容、进行高级视觉推理至关重要。然而,现实世界的复杂性给物体检测带来了诸多挑战,如类别多样性、遮挡问题、背景干扰等。传统的物体检测算法往往难以在准确率和速度之间取得良好平衡,而深度学习的兴起为解决这一矛盾提供了新的思路。

本研究的出发点是探索物体检测算法在面对新类别时的适应性和泛化能力。通过构建一个与PASCAL VOC 2007数据集略有差别的新数据集,并使用YOLOv5s这一最新的物体检测算法进行训练和测试,本文旨在研究如何有效地将现有的物体检测模型迁移到新的类别,同时保持模型对已有类别的识别能力。此外,本研究也尝试通过微调(Fine-tune)和重新训练(Full-train)两种不同的训练策略来评估模型的性能,探讨在资源有限情况下,如何有效地利用预训练模型以及如何从零开始构建一个强大的物体检测系统。这一研究不仅对推动物体检测技术的发展具有重要意义,也为未来的应用实践提供了宝贵的经验和指导。


2. 性能研究

目标检测作为计算机视觉领域的热门研究主题,已经有大量的国内外研究展开。早期的工作侧重于特征提取和传统机器学习方法,如SIFT1、HOG2特征结合SVM分类器等。随着深度学习技术的兴起,基于卷积神经网络(CNN)的物体检测方法逐渐成为主流。R-CNN3系列算法通过区域建议网络提取候选区域,然后用CNN提取特征并进行分类。随后,YOLO系列和SSD等算法通过端到端的方式,大幅提高了物体检测的速度和效率。

2.1 YOLO

在YOLO系列算法中,YOLOv5作为较新的版本,因其出色的检测速度和准确性,被广泛应用于实时物体检测场景。它的出现,推动了物体检测技术的进一步发展,特别是在处理大规模数据和复杂场景下的检测任务时显示出了极高的效率。YOLOv5不仅在检测速度上有所提升,其模型结构和数据增强技术的改进也为检测精度带来了显著提高。在国际上,YOLOv5由于其开源和易于部署的特点,迅速被研究社区接受,并在多项挑战赛中取得了优异的成绩。

除了YOLO系列,还有其他一些算法如Faster R-CNN4、Mask R-CNN3和RetinaNet5等,在多个公开数据集上设置了新的性能标准。这些方法通常采用两阶段的检测策略,先生成区域建议然后再进行分类和边界框回归,虽然在精度上取得了很好的表现,但在速度上通常不及YOLO系列算法。

2.2 PASCAL VOC 2007 数据集

PASCAL VOC 20076是一个广泛使用的计算机视觉数据集,包含9,963张图像,这些图像被细分为训练集、验证集和测试集,旨在帮助研究者训练模型、调整参数并评估模型性能。数据集覆盖了20个物体类别,包括人、各种动物(如鸟、猫、狗等)、交通工具(如飞机、自行车、汽车等)以及室内物体(如瓶子、椅子、餐桌等)。为了支持物体检测和图像分割任务,数据集为每个物体提供了边界框标注和精确的像素级分割标注,每个物体还有对应的类别标签。而标注信息则存储在XML格式的文件中,包括图像的基本信息及物体的详细标注信息。PASCAL VOC 2007以其图像的多样性和挑战性而著称,它包含了丰富的室内外场景、不同的光照条件、多样的视角和尺度,以及物体的各种姿态,这些特点使其成为测试和评估计算机视觉模型泛化能力的理想选择。同时,由于存在复杂背景、遮挡情况和类内变异,这个数据集对于研究人员而言充满挑战。

评估标准方面,PASCAL VOC 2007采用准确率、召回率以及它们的组合——平均精度(mAP)来评估算法性能,这有助于研究人员全面理解模型在检测精度和覆盖面上的表现。这个数据集对后续的图像识别和物体检测研究产生了深远影响,推动了计算机视觉技术的发展,并且即使在出现更大、更复杂的数据集如COCO之后,PASCAL VOC 2007仍然是教学和初步研究中非常重要的数据集。

2.3 MS COCO 数据集

MS COCO7数据集是计算机视觉领域的一个重要资源,以其庞大的规模、丰富的类别和详细的标注信息著称,包含超过330,000张图像和80个物体类别,远超PASCAL VOC 2007的9,963张图像和20个类别。与PASCAL VOC主要提供边界框和类别标签不同,COCO还包括像素级分割、场景描述、物体关系和人体关键点等复杂标注,图像文件以JPEG格式存储,而标注信息采用JSON格式,更适合复杂数据结构。COCO特别强调图像的自然场景和上下文信息,增加了数据的多样性和挑战性。评估标准方面,COCO引入了平均精度(AP)和平均召回率(AR),尤其关注不同尺寸物体的检测性能。通过提供更为详尽的资源和评估体系,COCO数据集推动了图像识别、物体检测和语义分割等领域的研究进展,成为计算机视觉研究中的重要基准。


3 实验方法

3.1 利用COCO数据集扩展PASCAL VOC 2007(以elephant大象为例)

为了丰富PASCAL VOC 2007数据集的多样性和提高其在物体检测任务中的实用性,我们决定引入COCO数据集中的大象类别。具体操作是从COCO数据集中精心挑选了500张高质量的大象(elephant)图片,这些图片被添加到PASCAL VOC 2007的训练集中,以增加新的类别并保持每个类别的样本数量大约在200张左右,以此来维持数据平衡。此外,为了有效评估模型对新类别的识别能力,我们还向测试集中添加了200张大象的图片。在整合过程中,我们特别注意只保留大象的标注信息,排除了COCO数据集中存在的其他类别标注,以避免引入PASCAL VOC 2007中未定义的类别。随后,我们将COCO的标注格式(通常是JSON)转换为PASCAL VOC所采用的XML格式,确保了新数据集的一致性。

下面是coco2voc.py的代码:

from pycocotools.coco import COCO
import os
import shutil
from tqdm import tqdm
import skimage.io as io
import matplotlib.pyplot as plt
import cv2
from PIL import Image, ImageDraw# the path you want to save your results for coco to voc
savepath = "./datasets/COCO2VOC/"
if not os.path.exists(savepath):os.makedirs(savepath)img_dir = savepath + 'images/'
anno_dir = savepath + 'Annotations/'
# datasets_list=['train2014', 'val2014']
datasets_list = ['train2017']# classes_names = ['cake', 'traffic light', 'elephant', 'zebra', 'banana']
classes_names = ['elephant']# Store annotations and train2014/val2014/... in this folder
dataDir = './datasets/COCO/'headstr = """\
<annotation><folder>VOC</folder><filename>%s</filename><source><database>My Database</database><annotation>COCO</annotation><image>flickr</image><flickrid>NULL</flickrid></source><owner><flickrid>NULL</flickrid><name>company</name></owner><size><width>%d</width><height>%d</height><depth>%d</depth></size><segmented>0</segmented>
"""
objstr = """\<object><name>%s</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>%d</xmin><ymin>%d</ymin><xmax>%d</xmax><ymax>%d</ymax></bndbox></object>
"""tailstr = '''\
</annotation>
'''# if the dir is not exists,make it,else delete it
def mkr(path):if os.path.exists(path):shutil.rmtree(path)os.mkdir(path)else:os.mkdir(path)mkr(img_dir)
mkr(anno_dir)def id2name(coco):classes = dict()for cls in coco.dataset['categories']:classes[cls['id']] = cls['name']return classesdef write_xml(anno_path, head, objs, tail):f = open(anno_path, "w")f.write(head)for obj in objs:f.write(objstr % (obj[0], obj[1], obj[2], obj[3], obj[4]))f.write(tail)def save_annotations_and_imgs(coco, dataset, filename, objs):# eg:COCO_train2014_000000196610.jpg-->COCO_train2014_000000196610.xmlanno_path = anno_dir + filename[:-3] + 'xml'img_path = dataDir + dataset + '/' + filenameprint(img_path)dst_imgpath = img_dir + filenameimg = cv2.imread(img_path)if (img.shape[2] == 1):print(filename + " not a RGB image")returnshutil.copy(img_path, dst_imgpath)head = headstr % (filename, img.shape[1], img.shape[0], img.shape[2])tail = tailstrwrite_xml(anno_path, head, objs, tail)def showimg(coco, dataset, img, classes, cls_id, show=True):global dataDirI = Image.open('%s/%s/%s' % (dataDir, dataset, img['file_name']))# 通过id,得到注释的信息annIds = coco.getAnnIds(imgIds=img['id'], catIds=cls_id, iscrowd=None)# print(annIds)anns = coco.loadAnns(annIds)# print(anns)# coco.showAnns(anns)objs = []for ann in anns:class_name = classes[ann['category_id']]if class_name in classes_names:print(class_name)if 'bbox' in ann:bbox = ann['bbox']xmin = int(bbox[0])ymin = int(bbox[1])xmax = int(bbox[2] + bbox[0])ymax = int(bbox[3] + bbox[1])obj = [class_name, xmin, ymin, xmax, ymax]objs.append(obj)draw = ImageDraw.Draw(I)draw.rectangle([xmin, ymin, xmax, ymax])if show:plt.figure()plt.axis('off')plt.imshow(I)plt.show()return objsfor dataset in datasets_list:# ./COCO/annotations/instances_train2014.jsonannFile = '{}/annotations/instances_{}.json'.format(dataDir, dataset)# COCO API for initializing annotated datacoco = COCO(annFile)'''COCO 对象创建完毕后会输出如下信息:loading annotations into memory...Done (t=0.81s)creating index...index created!至此, json 脚本解析完毕, 并且将图片和对应的标注数据关联起来.'''# show all classes in cococlasses = id2name(coco)print(classes)# [1, 2, 3, 4, 6, 8]classes_ids = coco.getCatIds(catNms=classes_names)print(classes_ids)for cls in classes_names:# Get ID number of this classcls_id = coco.getCatIds(catNms=[cls])img_ids = coco.getImgIds(catIds=cls_id)print(cls, len(img_ids))# imgIds=img_ids[0:10]for imgId in tqdm(img_ids):img = coco.loadImgs(imgId)[0]filename = img['file_name']# print(filename)objs = showimg(coco, dataset, img, classes, classes_ids, show=False)print(objs)save_annotations_and_imgs(coco, dataset, filename, objs)

在这里插入图片描述

图. 1. 整合后数据集分布情况以及锚框大小和位置情况。

如图1所示,左上角是不同类别的实例分布直方图,显示了数据集中每个类别的实例数量。右上角是锚点(anchor boxes)分布的热力图,表示了锚点在图像中的分布情况。左下角和右下角分别是对象的中心点分布图和宽高比分布图,这两个散点图揭示了数据集中对象位置的中心趋势以及各对象宽高的变化范围。

3.2 方法实现(以YOLOv5为例)

3.2.1 YOLOv5介绍

在实现实时物体检测的研究进程中,YOLOv5(You Only Look Once version 5)作为最新迭代的YOLO系列算法之一,展现了其在速度与准确性平衡方面的显著优势。YOLOv5采用的是一种端到端的物体检测策略,通过单次前向传播直接从图像像素预测物体边界框和类别概率。YOLOv5的模型结构在其前身基础上进行了优化,包括引入了CSPNet8、Mosaic数据增强以及自适应锚框计算等技术,旨在进一步提升模型的检测性能和效率。此外,YOLOv5的模型可扩展性强,提供了不同大小的模型变种(如YOLOv5s、YOLOv5m、YOLOv5l和YOLOv5x),在后文的实验中我们选择YOLOv5s进行训练测试。

YOLOv5官方库地址:https://github.com/ultralytics/yolov5?tab=readme-ov-file

3.2.2 YOLOv5流程

  • Step 1输入图像处理:输入图像首先经过预处理,包括尺寸调整和归一化等,以适配网络输入要求。
  • Step 2特征提取:处理后的图像输入到CSPNet结构的主干网络中。CSPNet通过交替的卷积层和残差连接来提取图像特征,该结构有效地平衡了计算负载并减少了计算资源的消耗。
  • Step 3特征金字塔构建:特征提取后,使用SPP(Spatial Pyramid Pooling)层9进一步增强特征的尺度不变性。SPP层通过不同尺度的池化操作捕获丰富的上下文信息,从而提高模型对于尺度变化的适应性。
  • Step 4特征融合:PANet(Path Aggregation Network)10结构用于特征融合,通过跨层连接增强了不同层级特征之间的信息流动。这一步骤确保了从不同分辨率的特征图中提取的特征能够有效融合,提升了对于各种尺寸物体的检测能力。
  • Step 5多尺度预测:YOLOv5采用了多尺度预测机制,在不同层级的特征图上进行物体检测,包括边界框的位置、尺寸预测以及物体类别的预测。这一机制使模型能够同时处理不同尺寸的物体,增强了模型的泛用性和准确度。
  • Step 6输出处理:最后,模型输出经过非极大值抑制(NMS)等后处理步骤,以去除重叠的检测框,最终得到物体的位置、尺寸以及类别的预测结果。

请添加图片描述

图. 2. YOLOv5结构流程图

3.3 网络训练

在我们的YOLOv5s训练流程中,初始学习率被设定为0.01,并采用了余弦退火调度(Cosine Annealing)策略来逐步降低学习率,这一策略旨在稳定整个训练过程。为了兼顾训练速度与内存使用,我们选择了64作为批大小(Batch Size),这一设置在我们的硬件配置下被证明是有效的。使用的优化器是Adam,其自适应学习率调整的特性使得训练更加高效,同时设置权重衰减(Weight Decay)为0.0005来减轻过拟合的风险。

针对数据增强,我们实施了一系列策略,包括随机旋转(±15度)、缩放(0.5到1.5倍)和颜色抖动(亮度、对比度、饱和度和色调调整),以此提高模型对不同场景的泛化能力。特别是YOLOv5特有的Mosaic数据增强技术,它通过将四张训练图像组合到一个拼贴图中,显著增加了模型对复杂场景的适应性。锚框尺寸(Anchor Sizes)被预设以匹配自然场景图像中常见物体的尺寸,覆盖从小到大的物体。同时,非极大值抑制(NMS)阈值被设为0.6,以有效去除重叠的检测框,只保留最有信心的预测结果。

我们的训练环境配置为Intel i5-14600k处理器,搭配NVIDIA RTX 3090显卡和64GB RAM,这一硬件组合为训练提供了强大的支持。在此配置下,我们分别对YOLOv5s模型进行了100个epoch和500个epoch的训练。模型的输入图像大小被设定为640x640,这是在检测性能和计算效率之间的一个优化选择。训练过程中,模型输出包括边界框(Bounding Boxes)、类别概率和置信度分数,这些输出共同确定了检测结果的准确性和可靠性。

3.4 实验结果

我们在官方提供的YOLOv5s的基础上进行微调(下称Fine-tune),总共训练了100个epoch,并选择了在验证集上loss最小的模型进行测试。以及在整合数据集上进行重新训练(下称Full-train),一共训练了500个epoch,也同样在loss最小的模型上进行测试,训练的时间分别为0.44小时和2.22小时。具体的mAP结果如下。

3.4.1 Fine-tune mAP结果

在这里插入图片描述

在对已训练的YOLOv5s模型进行Fine-tune的过程中,我们针对一个包含5052张图像和12263个实例的数据集进行了优化。整体而言,模型展现了良好的性能,具体体现在平均精度(Precision)为0.722,召回率(Recall)为0.691,mAP50(平均精度在IoU=0.5时)为0.745,以及mAP50-95(在IoU从0.5到0.95的平均精度)为0.42。在各个类别中,模型表现出了不同程度的检测能力。例如,在“bus”类别中,模型达到了0.813的精度和0.864的召回率,mAP50为0.887,显示出较高的识别能力;而在“电视”类别中,尽管召回率高达0.844,但精度只有0.516,显示出在某些情况下模型可能会产生较多的假阳性。值得注意的是,新引入的“elephant”类别也展现出了不错的结果,mAP50为0.85和mAP50-95为0.49,说明模型在Fine-tune后能够较好地适应新类别。这些结果表明,通过Fine-tune,YOLOv5s模型在多个类别上都能够实现较为准确的物体检测,尽管在某些类别上仍有提升空间。整体上,Fine-tune进一步优化了模型的性能,使其在广泛的物体类别上都表现出了较高的识别精度和鲁棒性。

3.4.2 Full-train mAP结果

在这里插入图片描述

在对YOLOv5s模型进行全新训练的实验中,相较于Fine-tune的结果,全训练过程展现了不同的性能特征(见附录表1),整体上,模型的表现有所下降,具体体现在平均精度(Precision)为0.642,召回率(Recall)为0.513,mAP50(平均精度在IoU=0.5时)为0.545,以及mAP50-95(在IoU从0.5到0.95的平均精度)为0.308。这些指标表明,在没有预训练模型的基础上进行全新训练,模型在某些方面的识别能力减弱,尤其是在复杂场景或小物体的检测上。观察各个类别的表现,“自行车”、"车"和"马"类别展现出较高的mAP50值,分别为0.721、0.797和0.711,表明模型在这些类别上保持了较好的检测精度。相比之下,“鸟”、"瓶"和"盆栽"等类别的表现较弱,mAP50值分别为0.369、0.315和0.308,反映出模型在检测小物体或是背景复杂度较高的物体时的挑战。

新引入的"elephant"类别在全训练过程中的mAP50为0.601,相比于Fine-tune过程中的0.85有所下降,这可能是由于模型从头开始训练,对于新类别的学习还未达到最优化。整体而言,全训练过程虽然为模型提供了从零开始学习的机会,但在没有预训练模型辅助的情况下,模型在多个类别上的表现有所波动,显示了提升模型泛化能力和识别精度的潜在空间。


4 实验结果与分析

4.1 Fine-tune 结果与分析

经过Fine-tune的YOLOv5s模型在各类别上表现出色。‘公共汽车’、‘火车’和’飞机’等类别的识别精度高,显示模型在这些类别上具有很强的识别能力。然而,在外观特征相似的类别之间,例如’猫’与’狗’、‘鸟’与’飞机’,存在一定的混淆,这表明模型在处理视觉相似性时存在挑战。‘瓶子’、'椅子’和’盆栽’等类别的识别准确率较低,可能是由于这些对象在不同环境中出现形态的多样性和背景的复杂性。'背景’类别的误检率低,表明模型能够有效区分对象与背景。Fine-tune的结果表明,尽管模型在准确检测方面已有良好的基础,但在区分外观相似类别方面仍有提升空间。
在这里插入图片描述

图. 3. Fine-tune混淆矩阵

  • 精确度-召回率曲线:曲线展示了模型在不同召回率水平下的精确度。蓝色线条表示所有类别的平均表现,其下方的灰色线条表示各个类别的表现。整体而言,模型在mAP0.5(即IoU=0.5时的平均精度)达到了0.464,这说明模型在保持较高召回率的同时,仍能保持一个合理的精确度水平。通常,该曲线越接近右上角,表示模型性能越好。
  • 精确度-置信度曲线:这张图描绘了随着置信度阈值的提高,模型精确度的变化情况。可以看到,当模型的置信度较高时,精确度也相对较高,这表明模型在置信度高的情况下能够很好地区分正类和负类。整体精确度在置信度为0.991时达到了1.0,这是一个非常理想的结果,表示在高置信度阈值下,模型几乎没有产生误判。

在这里插入图片描述

YOLOv5s模型在Fine-tune之后的预测示例展现了模型在多个场景中对各种类别物体的识别能力。示例中显示了模型能够以较高的置信度(大多数情况下置信度超过0.5)准确识别和定位如’人’、‘汽车’、‘公共汽车’和’火车’等常见类别。同时,新加入的’大象’类别同样得到了较高的置信度识别,这表明模型通过Fine-tune已成功适应了新的类别。尽管如此,一些类别如’狗’、'猫’和’电视’等的置信度有所波动,这可能指向模型在某些情况下仍存在区分类别的不确定性。此外,少数误检,例如对’猫’和’狗’的混淆,提示我们在未来的训练中需要进一步提高模型对不同类别的区分能力。总体而言,Fine-tune后的模型在多个类别上表现出了良好的识别精度和定位准确性,但对于置信度较低的预测结果仍需谨慎处理,优化模型以减少误识别。

4.2 Full-train 结果与分析

完整训练后的YOLOv5s模型在不同类别的表现有所不同(见附录图1)。模型在’公共汽车’、‘火车’和’汽车’等类别的检测准确率很高。而’自行车’、‘椅子’和’餐桌’的表现中等,模型有一定的识别准确性,但还有改进空间。在一些类别上,如’鸟’与’飞机’、'猫’与’狗’之间的混淆比较明显,可能是因为这些类别在飞行时的形状相似。'盆栽’和’瓶子’等类别的识别率较低,指出模型在检测这些对象时面临挑战,可能需要更多针对性的数据或调整模型复杂度。另外,'背景’类别的误检率较高,意味着模型有时会错误地将背景片段识别为对象,可能需要在训练中增加更多负样本来解决这个问题。完整训练的混淆矩阵结果凸显了模型在稳健检测能力方面的潜力,同时也强调了持续改进模型训练以提升识别复杂和相似外观类别的必要性。
在这里插入图片描述

图. 5. Full-train混淆矩阵

  • 精确度-召回率曲线:如附录图2左图所示,在mAP0.5时模型的平均精度为0.545,表明模型在维持较高召回率的同时,其精确度表现适中。理想情况下,曲线越靠近右上角表示性能越好;因此,这个结果表明虽然模型在召回方面做得不错,但在精确度上仍有提升空间。
  • 精确度-置信度曲线:如附录图2右图所示,对于所有类别,当置信度为0.968时,模型达到了1.00的精确度,这是一个极佳的结果。

经过完整训练的YOLOv5s模型在各类别的检测上表现出了不同程度的置信度变化,其中一些类别如’船’显示出提高的置信度,而’火车’等则有所下降(见附录图3)。尽管如此,模型在’汽车’、'公共汽车’和’狗’等类别上能够保持较高的检测一致性和准确的边界框定位。然而,新加入的’大象’类别在置信度上显示出波动,反映出模型在稳定学习新类别上仍需改进。此外,完整训练的模型仍存在一些误检和遗漏,如’猫’被误标为’狗’的情况。因此,完整训练虽然在某些方面取得了进步,但在细节处理和新类别的适应上还需继续努力。


5 结论

本研究通过Fine-tune和Full-train两种训练方法,对YOLOv5s模型在PASCAL VOC 2007数据集及其扩展版本上进行了深入分析和实验验证。Fine-tune方法利用了预训练模型的知识,对模型在原有数据集上进行微调,结果显示模型在大多数类别上都能保持较高的检测精度和召回率。尤其值得注意的是,在新加入的“大象”类别上,模型展现了良好的学习能力和适应性,这表明Fine-tune是一种有效的策略,可以快速将模型应用于新的类别上。然而,在相似类别间,例如“猫”和“狗”,“鸟”和“飞机”,模型出现了一定程度的混淆,这可能由于物体特征的相似性所导致。相对于Fine-tune,Full-train的实验结果表明,当模型从头开始训练时,没有预训练模型的辅助,模型在某些类别的识别性能有所下降,特别是在复杂场景和对小物体的检测上。这可能是因为模型未能从预训练模型中继承足够的特征知识,导致在泛化和对新情况的适应上存在不足。另一方面,模型在某些类别上,如“自行车”、“汽车”和“马”,仍然保持了较高的识别能力。然而,新引入的“大象”类别的mAP下降,这强调了在实施全新训练时,需要更多的迭代和针对性训练来优化模型。

综上所述,Fine-tune在保持模型原有优势的同时,为新类别的快速适应提供了可能,而Full-train则需要更加周密的训练规划和数据策略来弥补没有预训练知识的不足。两种方法的实验结果都表明,YOLOv5s是一种强大的实时物体检测工具,但在未来的工作中,我们需要在算法优化、数据增强和训练策略上进行更多的探索和实验,以充分发挥模型的潜力,特别是在处理类别间细微差异和复杂背景下检测的能力上。通过持续的技术更新,YOLO有望在未来的计算机视觉研究中继续扮演重要的角色。


附录A

Full-train

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Fine-tune

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述


创作不易,麻烦点点赞和关注咯!

  1. Patricia S. Abril and Robert Plant. 2007. The patent holder’s dilemma: Buy, sell, or troll? Commun. ACM 50, 1 (Jan. 2007), 36–44. DOI: http://dx.doi.org/10.1145/1188913.1188915 ↩︎

  2. Pang Y, Yuan Y, Li X, et al. Efficient HOG human detection[J]. Signal processing, 2011, 91(4): 773-781. ↩︎

  3. He K, Gkioxari G, Dollár P, et al. Mask r-cnn[C]//Proceedings of the IEEE international conference on computer vision. 2017: 2961-2969. ↩︎ ↩︎

  4. Girshick R. Fast r-cnn[C]//Proceedings of the IEEE international conference on computer vision. 2015: 1440-1448. ↩︎

  5. Wang Y, Wang C, Zhang H, et al. Automatic ship detection based on RetinaNet using multi-resolution Gaofen-3 imagery[J]. Remote Sensing, 2019, 11(5): 531. ↩︎

  6. Oquab M, Bottou L, Laptev I, et al. Learning and transferring mid-level image representations using convolutional neural networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2014: 1717-1724. ↩︎

  7. Lin T Y, Maire M, Belongie S, et al. Microsoft coco: Common objects in context[C]//Computer Vision–ECCV 2014: 13th European Conference, Zurich, Switzerland, September 6-12, 2014, Proceedings, Part V 13. Springer International Publishing, 2014: 740-755. ↩︎

  8. Wang C Y, Liao H Y M, Wu Y H, et al. CSPNet: A new backbone that can enhance learning capability of CNN[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition workshops. 2020: 390-391. ↩︎

  9. He K, Zhang X, Ren S, et al. Spatial pyramid pooling in deep convolutional networks for visual recognition[J]. IEEE transactions on pattern analysis and machine intelligence, 2015, 37(9): 1904-1916. ↩︎

  10. Wang K, Liew J H, Zou Y, et al. Panet: Few-shot image semantic segmentation with prototype alignment[C]//proceedings of the IEEE/CVF international conference on computer vision. 2019: 9197-9206. ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/724922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【详识C语言】动态内存管理

本章重点 为什么存在动态内存分配 动态内存函数的介绍 malloc free calloc realloc 常见的动态内存错误 几个经典的笔试题 柔性数组 为什么存在动态内存分配 我们已经掌握的内存开辟方式有&#xff1a; int val 20;//在栈空间上开辟四个字节char arr[10] {0};//在栈空间上开…

Three.js--》探寻Cannon.js构建震撼的3D物理交互体验(二)

我们用three.js可以绘制出各种酷炫的画面&#xff0c;但是当我们想要一个更加真实的物理效果的话&#xff0c;这个时候我们就需要一个物理的库&#xff0c;接下来我们就讲解一下今天要学习的canon&#xff0c;它可以给我们提供一个更加真实的物理效果&#xff0c;像物体的张力、…

2024护网面试题精选(一)

0x00.基础漏洞篇 00-TOP10漏洞 1.SQL注入 2.失效的身份认证和会话管理 3.跨站脚本攻击XSS 4.直接引用不安全的对象 5.安全配置错误 6.敏感信息泄露 7.缺少功能级的访问控制 8.跨站请求伪造CSRF 9.实验含有已知漏洞的组件 10.未验证的重定向和转发 01-SQL注入漏洞 …

【Java_JSON】如何从JSON数据中提取value值

如何从JSON数据中提取value值&#xff1f; 首先将JSON数据转成字符串 创建JSONObject 对象 通过kv键值对的特性 使用key值来获取value 值 并输出 结果&#xff1a;

c++: 缺省参数/默认参数的详解及其应用

c缺省参数/默认参数的详解及其应用 缺省参数是什么 #include<iostream> using namespace std;void func(int a 666) {cout << "a " << a << endl; } int main() {func(); //没有传参func(10); //传参return 0; }缺省参数就是在我们不进…

计算机体系结构:VLIW

原文来自知乎 计算机体系结构&#xff1a;VLIW 本文主要介绍计算机体系结构中的VLIW&#xff0c;以供读者能够理解该技术的定义、原理、应用。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f…

腾讯云服务器99元一年购买入口链接

腾讯云服务器99元一年购买入口链接如下&#xff0c;现在已经降价到61元一年&#xff0c;官方活动链接如下&#xff1a; 腾讯云99元服务器一年购买页面腾讯云活动汇聚了腾讯云最新的促销打折、优惠折扣等信息&#xff0c;你在这里可以找到云服务器、域名、数据库、小程序等等多种…

【uniapp】小程序自定义一个通用的返回按钮组件

左边箭头&#xff0c;右边文字可以自定义&#xff0c;但是不要太长&#xff0c;太长可以自己改 .back的width值&#xff0c;改宽一点。 用这个组件的时候首先要在pages.json里把导航栏变成自定义的&#xff1a; ,{"path" : "pages/test/test","style&…

Goose:Golang中的数据库迁移工具

Goose&#xff1a;Golang中的数据库迁移工具 在Golang开发中&#xff0c;数据库迁移是一个常见的任务&#xff0c;用于管理数据库模式的演化和版本控制。Goose是一个轻量级的、易于使用的数据库迁移工具&#xff0c;专为Golang开发者设计。本文将介绍Goose的基本概念、用法和优…

智能驾驶规划控制理论学习01-自动驾驶系统介绍、规划控制模块介绍

目录 一、自动驾驶系统概述 二、规划控制模块介绍 1、规划控制架构 2、规划控制目标 3、Cartesian和Frenet坐标系 4、Frenet坐标系概览 5、解耦式规划和联合式规划 一、自动驾驶系统概述 目前被国内外广为接受的自动驾驶级别划分标准是 SAE&#xff…

Nano 33 BLE Sense Rev2学习第二节——手机蓝牙接收数据

Nano 33 BLE Sense Rev2需要下载的程序 #include <ArduinoBLE.h> #include "Arduino_BMI270_BMM150.h"float x, y, z; int degreesX 0; int degreesY 0;BLEService ledService("19B10010-E8F2-537E-4F6C-D104768A1214"); // create service// cre…

XSS漏洞--概念、类型、实战--分析与详解[结合靶场pikachu]

目录 一、XSS概念简述 1、XSS简介&#xff1a; 2、XSS基本原理&#xff1a; 3、XSS攻击流程&#xff1a; 4、XSS漏洞危害&#xff1a; 二、XSS类型&#xff1a; 1、反射型XSS&#xff1a; 2、存储型XSS&#xff1a; 3、DOM型XSS&#xff1a; 三、靶场漏洞复现(pikach…

LVS四层负载均衡集群

简介 LVS&#xff08;Linux Virtual Server&#xff09;即Linux虚拟服务器&#xff0c;是由章文嵩博士主导的开源负载均衡项目&#xff0c;目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案&#xff0c;终端互联网用户从外部访…

diffusion model (扩散模型)原理

扩散模型分为正向过程和反向过程。 正向过程为一点点在图片上添加噪声的过程&#xff0c;反向过程为去噪声的过程。 图片的生成就是反向过程&#xff0c;给一张高斯噪声图片&#xff0c;逐步去噪生成图片。 扩散模型和VAE的区别&#xff0c; VAE是一步到位的&#xff08;通过…

一个基于差异同步数据库结构的工具 - Skeema

本文是 GO 三方库推荐的第 5 篇&#xff0c;继续介绍数据库 schema 同步工具&#xff0c;我前面已经写了两篇这个主题的文章。系列查看&#xff1a;Golang 三方库。 今天&#xff0c;推荐是的一个基于差异实现数据库 schema 迁移的工具库 - skeema&#xff0c;同样由 Go 实现。…

数字孪生10个技术栈:数据采集的八种方式

大家好&#xff0c;我是贝格前端工场&#xff0c;上期讲了数字孪生10个技术栈&#xff08;总括&#xff09;:概念扫盲和总体介绍&#xff0c;获得了大家的热捧&#xff0c;本期继续分享技术栈&#xff0c;大家如有数字孪生或者数据可视化的需求&#xff0c;可以联络我们。 一、…

【好书推荐-第九期】Sora核心技术相关书籍《扩散模型:从原理到实战》与《GPT 图解:大模型是怎样构建的》:Sora的两大核心技术,都藏在这两本书里!

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公众号&#xff1a;洲与AI。 &#x1f388; 本文专栏&#xff1a;本文收录…

解决DBeaver执行脚本报错No active connection

解决DBeaver执行脚本报错No active connection 1、报错问腿 2、问题解决 2.1、右键点击该数据库&#xff0c;选择SQL编辑器&#xff0c;选择新建SQL编辑器&#xff0c;然后将sql语句复制过去。 或者左击选中数据库后直接使用快捷键 Ctrl] 2.2、在Project-General中找到Scr…

Javaweb之SpringBootWeb案例之自动配置案例的自定义starter测试的详细解析

3.2.4.3 自定义starter测试 阿里云OSS的starter我们刚才已经定义好了&#xff0c;接下来我们就来做一个测试。 今天的课程资料当中&#xff0c;提供了一个自定义starter的测试工程。我们直接打开文件夹&#xff0c;里面有一个测试工程。测试工程就是springboot-autoconfigurat…

常见排序算法解析

芝兰生于深林&#xff0c;不以无人而不芳&#xff1b;君子修道立德&#xff0c;不为穷困而改节 文章目录 插入排序直接插入排序希尔排序 选择排序直接选择排序堆排序 交换排序冒泡排序快速排序优化挖坑法前后指针法非递归版 归并排序递归非递归 总结 插入排序 插入排序&#…