目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)

简介: 本文介绍了如何使用YOLOv7进行目标检测,包括环境搭建、数据集准备、模型训练、验证、测试以及常见错误的解决方法。YOLOv7以其高效性能和准确率在目标检测领域受到关注,适用于自动驾驶、安防监控等场景。文中提供了源码和论文链接,以及详细的步骤说明,适合深度学习实践者参考。

一、目标检测介绍

目标检测(Object Detection)是计算机视觉领域的一项重要技术,旨在识别图像或视频中的特定目标并确定其位置。通过训练深度学习模型,如卷积神经网络(CNN),可以实现对各种目标的精确检测。常见的目标检测任务包括:人脸检测、行人检测、车辆检测等。目标检测在安防监控、自动驾驶、智能零售等领域具有广泛应用前景。

二、YOLOv7介绍

YOLOv7(You Only Look Once version 7)是YOLO系列目标检测算法的最新版本,以其高效的实时性能和出色的检测准确率而备受关注。YOLOv7在目标检测领域具有显著的创新点和优势,以下是对YOLOv7的一些关键介绍:

  1. 模型优化与技术发展:YOLOv7在模型结构、损失函数设计、正负样本匹配等方面进行了优化,以适应日益复杂的目标检测任务。

  2. 模型结构重参化:YOLOv7引入了模型结构重参化,通过优化网络中的不同层来提高模型性能,减少模型复杂度,提高推理速度,并提升检测精度。

  3. 动态标签分配策略:YOLOv7提出了一种新的动态标签分配策略,即coarse-to-fine策略,有效提高了模型的训练效果。

  4. ELAN高效网络架构:YOLOv7采用了名为ELAN的高效网络架构,专注于提高模型的推理速度和检测精度。

  5. 带辅助头的训练:YOLOv7采用了带辅助头的训练方法,通过在模型的不同阶段引入额外的监督信息,提高检测准确率。

  6. 技术原理:YOLOv7的技术原理基于深度学习和计算机视觉技术,包括输入处理、骨干网络、颈部网络和头部网络,其中每个部分都经过了精心设计和优化。

  7. 实际应用与前景展望:YOLOv7在自动驾驶、安防监控、智能家居等领域具有广泛的应用前景。

  8. 性能测试:YOLOv7在不同速度和精度的范围内超过了已知的检测器,特别是在GPU V100上进行测试时,展现了其卓越的性能。

  9. 模型缩放:YOLOv7为不同的GPU设计了不同版本的模型,包括边缘GPU、普通GPU和云GPU,并针对不同的服务需求进行了模型缩放。

  10. 实验与结论:YOLOv7在MS COCO数据集上进行了训练测试,证明了其在实时目标检测中的新标杆地位。

在这里插入图片描述

三、源码/论文获取

代码:https://github.com/WongKinYiu/yolov7
论文:https://arxiv.org/abs/2207.02696

四、环境搭建

# (1)创建python环境
>conda create -n YOLOv8_My python=3.8.10
# (2)激活环境
>conda activate YOLOv8_My
# (3)安装ultralytics和pytorch
>pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116 -i https://pypi.tuna.tsinghua.edu.cn/simple/
>pip install ultralytics==8.1.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
>pip install tensorboard -i https://pypi.tuna.tsinghua.edu.cn/simple/

4.1 环境检测

下载预训练模型:点击
然后命令行输入

python detect.py --weights yolov7.pt

看到以下的图片就说明环境没问题。
在这里插入图片描述

五、数据集准备

这时候说明环境是没问题的了,我们可以准备数据集了,数据集的格式就是VOC格式中的Main里面的txt文件,图片的绝对路径。
在这里插入图片描述

在这里插入图片描述

直接将YOLO图片路径转成txt单文件:

# From Mr. Dinosaur

import os


def listdir(path, list_name):  # 传入存储的list
    for file in os.listdir(path):
        file_path = os.path.join(path, file)
        if os.path.isdir(file_path):
            listdir(file_path, list_name)
        else:
            list_name.append(file_path)


list_name = []
path = r'E:/dataset/yolov5_dataset/steel_defect_datasets/images/train/'.replace("\\","/")  # 文件夹路径
listdir(path, list_name)
print(list_name)

with open(r'E:/dataset/yolov5_dataset/steel_defect_datasets/train.txt'.replace("\\","/"), 'w') as f:  # 要存入的txt
    write = ''
    for i in list_name:
        write = write + str(i) + '\n'
    f.write(write)

这时候我们可以看到Main文件下有train.txt和val.txt。

六、 模型训练

1.修改数据集配置文件:
在这里插入图片描述

2.修改模型配置文件
在这里插入图片描述
3.修改训练代码
在这里插入图片描述
4.命令行输入

python train.py

在这里插入图片描述

七、模型验证

修改test.py
在这里插入图片描述
然后在命令行运行:python test.py

八、模型测试

修改detect.py
在这里插入图片描述然后在命令行运行:python detect.py

九、错误总结

9.1 错误1-numpy jas mp attribute int

在这里插入图片描述
numpy库如果安装最新的1.24.1,会发生module numpy has no attribute int 错误,这个错误我找了很久, 这个是因为numpy版本的原因,1.24以上的版本没有int了,改为inf了,换成1.23的版本就好了,或者把报错出的int改成inf就可以了,所以requirements.txt中的numpy库建议直接替换成numpy==1.23.0,这个就没有问题了。

9.2 错误2-测试代码未能跑出检测框

主函数加入
torch.backends.cudnn.enabled = False

9.3 错误3- Command ‘git tag’ returned non-zero

subprocess.CalledProcessError: Command ‘git tag’ returned non-zero exit status 128.
解决办法
改为绝对路径

    parser.add_argument('--weights', type=str, default=r'F:\python\company_code\Object_detection\yolov7-main\yolov7.pt', help='initial weights path')

9.4 错误4-No loop matching the specified signature and casting was found for ufunc greater

临时解决方法:np.greater去掉dtype

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
目录
相关文章
|
5月前
|
人工智能 自然语言处理 测试技术
从人工到AI驱动:天猫测试全流程自动化变革实践
天猫技术质量团队探索AI在测试全流程的落地应用,覆盖需求解析、用例生成、数据构造、执行验证等核心环节。通过AI+自然语言驱动,实现测试自动化、可溯化与可管理化,在用例生成、数据构造和执行校验中显著提效,推动测试体系从人工迈向AI全流程自动化,提升效率40%以上,用例覆盖超70%,并构建行业级知识资产沉淀平台。
从人工到AI驱动:天猫测试全流程自动化变革实践
|
5月前
|
数据采集 JSON JavaScript
Cypress 插件实战:让测试更稳定,不再“偶尔掉链子”
本文分享如何通过自定义Cypress插件解决测试不稳定的痛点。插件可实现智能等待、数据预处理等能力,替代传统硬性等待,有效减少偶发性失败,提升测试效率和可维护性。文内包含具体实现方法与最佳实践。
|
6月前
|
存储 关系型数据库 测试技术
玩转n8n测试自动化:核心节点详解与测试实战指南
n8n中节点是自动化测试的核心,涵盖触发器、数据操作、逻辑控制和工具节点。通过组合节点,测试工程师可构建高效、智能的测试流程,提升测试自动化能力。
|
5月前
|
人工智能 自然语言处理 JavaScript
Playwright MCP在UI回归测试中的实战:构建AI自主测试智能体
Playwright MCP结合AI智能体,革新UI回归测试:通过自然语言驱动浏览器操作,降低脚本编写门槛,提升测试效率与覆盖范围。借助快照解析、智能定位与Jira等工具集成,实现从需求描述到自动化执行的闭环,推动测试迈向智能化、民主化新阶段。
|
7月前
|
人工智能 缓存 测试技术
Playwright进阶指南 (6) | 自动化测试实战
2025企业级测试解决方案全面解析:从单元测试到千级并发,构建高可用测试体系。结合Playwright智能工具,解决传统测试维护成本高、环境依赖强、执行效率低等痛点,提升测试成功率,内容从测试架构设计、电商系统实战框架、高级测试策略、Docker化部署、CI/CD集成及AI测试应用,助力测试工程师掌握前沿技术,打造高效稳定的测试流程。
Playwright进阶指南 (6) | 自动化测试实战
|
6月前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
837 11
|
7月前
|
算法 测试技术 API
从自学到实战:一位测试工程师的成长之路
在技术快速发展的今天,自动化测试已成为提升职场竞争力的关键技能。本文讲述了一位测试工程师从自学到实战的成长之路,分享他在学习UI、APP和API自动化过程中遇到的挑战,以及如何通过实际项目磨炼技术、突破瓶颈。他从最初自学的迷茫,到实战中发现问题、解决问题,再到得到导师指导,逐步掌握测试开发的核心思维,并向测试平台建设方向迈进。文章总结了他从理论到实践、从执行到思考的转变经验,强调了实战、导师指导和技术服务于业务的重要性。最后,邀请读者分享自己的技术突破故事,共同交流成长。
|
7月前
|
资源调度 前端开发 JavaScript
Jest 测试实战指南
本文系统讲解如何使用 Jest 进行高效的 JavaScript 函数测试,涵盖环境搭建、测试用例编写、模拟函数与快照测试等内容,帮助开发者提升代码质量与测试效率。
274 0
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
9月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1336 23