赞
踩
单次检测框架: YOLOv4,像其前身一样,是一个单次检测(One-Stage)算法,意味着它在单个网络传递中执行物体检测,它将物体的定位和分类作为一个单一的回归问题解决,从而实现快速检测。
基础网络(Backbone): YOLOv4使用CSPDarknet53作为其特征提取的基础网络,它是一个强大的特征提取器,并用于从输入图像中获取有用的特征。
特征金字塔(Neck): 网络的“颈部”结构采用了Spatial Pyramid Pooling (SPP) 和 Path Aggregation Network (PAN)来提取不同尺度的特征,这对于检测不同大小的物体很有帮助。
锚点(Anchors): 使用预定义的锚点框(Anchor Boxes)来预测边界框。这些锚点是根据数据集中物体的尺寸分布预先设定的,并在训练过程中进行调整以更好地匹配物体的实际大小和形状。
损失函数: YOLOv4使用了复合损失函数,这通常包括边界框坐标预测的损失、物体置信度损失以及类别预测损失。
数据增强: 引入了多种数据增强技术来提高模型对于各种变换和遮挡的鲁棒性,包括随机缩放、剪切、色彩抖动等。
推理技巧: 为了在推理时提高性能,YOLOv4采用了Batch Normalization、Leaky ReLU激活函数、Mosaic数据增强等策略。
损失权重和Bounding Box处理: 通过对损失的不同部分加权以及使用不同的bounding box处理方法,如IoU(交并比)、CIoU等,使模型更准确地预测物体位置。
图像输入尺寸: YOLOv4能够处理不同分辨率的输入,这允许在牺牲一定的检测准确度以获得更快速度或反之的情况下调整。
交叉小批量训练(Cross mini-Batch Normalization): 一种BN方法,可以在使用多个GPU训练时稳定模型的性能。
可以自己准备数据集也可以从飞桨社区找公共的数据集
下面展示自己的数据集怎么样制作。
第一步准备Labelimg工具,以制作自己的数据集。
首先安装好Anaconda3(方法有很多样,这里只说明一样)如果没有安装好的可以用下面这个方法安装。
2024年最新版Anaconda3的安装配置及使用教程(非常详细),从零基础入门到精通,看完这一篇就够了(附安装包)https://blog.csdn.net/liuhyusb/article/details/135753864?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171420993516800222866933%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171420993516800222866933&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-135753864-null-null.142%5Ev100%5Epc_search_result_base4&utm_term=anaconda3%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B&spm=1018.2226.3001.4187打开Anaconda Prompt。
单独建一个环境(其中python版本以自己的为准)。
conda create -n labeling python=3.11
然后输入下列代码进入环境。
conda activate labelimg
然后输入下列代码安装labelimg包,其中使用清华源来更快捷。
pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
安装成功后就可以给自己的数据集打标签了直接输入labelimg就可以打开工具。
根据上诉操作到这一步后点击Open Dir找到自己的原始图片文件夹就可以打开然后点击Change Save Dir就可以改变标签的保存路径。
使用PascalVOC格式就可以了,然后点击Create RectBox(也可以直接按W)就可以框选需要的部分打上标签。
图片可以从网上找, 其中Microsoft Edge可以加一个扩展插件批量去下载,可以一键下载当前页面的图片,就不用一个一个去保存了。
其中图片保存在VOC2007文件夹下,一般保存为jpg图片会更好,然后训练好的图片就放在Annotations文件夹下
因为上述操作时我们用的是PascalVOC格式,所有保存的就是XML格式,更方便后续操作。
首先这个数据集说大不大说小不小,但是也要训练一百次(是我们课上要求要有不少于一百纸图片)所以内存一定要准备好,显卡要好,不然要跑好久
工具:pycharm(建议版本要新)、python3.11、Anaconda3、labelimg
前一步我们已经创建好了labelimg的环境,直接使用就好
其中源代码从GItHub上面下载的地址在这Yolov4源代码地址
其中requirements.txt的文本中可以看到我们这次要使用的包。
那就可以直接使用下面代码来安装
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
根据上诉准备好之后就万事俱备只欠东风了,让我们大展身手吧。
首先是voc_annotation.py这个文件先开始吧,这篇代码就是要帮我们把图片训练好嘟。
那么它具体的作用让我一一道来
设置注释模式 (annotation_mode
):
类别路径 (classes_path
):
数据集分割比例 (trainval_percent
, train_percent
):
数据集路径 (VOCdevkit_path
):
数据集划分 (VOCdevkit_sets
):
类别和数量统计 (photo_nums
, nums
):
XML标注转换 (convert_annotation
):
主函数 (if __name__ == "__main__":
):
annotation_mode
的值来决定执行哪部分代码,可以是创建ImageSets的txt文件,也可以是创建训练和验证用的txt文件,或者两者都执行。当我们训练好我们的图片之后就到了train.py这个大兄弟上了
那么这个大兄弟的作用是什么捏,如下:
初始化设置:
模型配置:
数据处理:
模型构建:
损失函数定义:
优化器与学习率调度器:
数据加载器:
训练与验证:
回调与日志:
训练循环:
可以看到总共300张图片 。
结果如下:
同样也介绍一下这个代码的作用。
单张图片预测 (predict
):
视频检测 (video
):
FPS测试 (fps
):
目录遍历检测 (dir_predict
):
热力图可视化 (heatmap
):
导出ONNX模型 (export_onnx
):
使用ONNX模型进行预测 (predict_onnx
):
本实验通过使用YOLOv4模型进行目标检测,旨在探索该模型在不同数据集和环境设置下的性能表现。实验在具备高性能GPU支持的环境下进行,以确保足够的计算资源来处理模型的复杂性。YOLOv4模型在测试集上展现出了高精度和召回率,mAP(平均精度均值)达到了竞争力的标准。通过实验,模型能够有效地在复杂背景中定位和识别小型和大型对象。通过本次实验,我深刻体会到数据质量对深度学习模型性能的重要性。优质的、标注精准的数据是模型训练成功的关键。同时,实验过程中对各种训练参数的调整让我认识到,理论知识与实际操作之间往往存在差距,实际应用中需要根据具体情况灵活调整策略。此外,团队协作在解决实验中遇到的问题、优化模型性能中起到了不可或缺的作用,这也提醒我在未来的工作中更加注重团队合作与沟通。
曲线趋势:
平台期和潜在过拟合:
优化和提前停止:
最终 mAP:
(图片来源网络)
其中标注为“person 0.91”,表示对人物的识别置信度为91%;另一个绿色框围绕篮球,标注为“sports ball 0.74”,表示对体育用球的识别置信度为74%
这个实验还有很多不好的地方,不完全的地方,请大家批评指正
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。