目标检测实战(八): 使用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大模型。
目录
相关文章
|
3月前
|
人工智能 自然语言处理 测试技术
从人工到AI驱动:天猫测试全流程自动化变革实践
天猫技术质量团队探索AI在测试全流程的落地应用,覆盖需求解析、用例生成、数据构造、执行验证等核心环节。通过AI+自然语言驱动,实现测试自动化、可溯化与可管理化,在用例生成、数据构造和执行校验中显著提效,推动测试体系从人工迈向AI全流程自动化,提升效率40%以上,用例覆盖超70%,并构建行业级知识资产沉淀平台。
从人工到AI驱动:天猫测试全流程自动化变革实践
|
3月前
|
数据采集 JSON JavaScript
Cypress 插件实战:让测试更稳定,不再“偶尔掉链子”
本文分享如何通过自定义Cypress插件解决测试不稳定的痛点。插件可实现智能等待、数据预处理等能力,替代传统硬性等待,有效减少偶发性失败,提升测试效率和可维护性。文内包含具体实现方法与最佳实践。
|
4月前
|
存储 关系型数据库 测试技术
玩转n8n测试自动化:核心节点详解与测试实战指南
n8n中节点是自动化测试的核心,涵盖触发器、数据操作、逻辑控制和工具节点。通过组合节点,测试工程师可构建高效、智能的测试流程,提升测试自动化能力。
|
3月前
|
人工智能 自然语言处理 JavaScript
Playwright MCP在UI回归测试中的实战:构建AI自主测试智能体
Playwright MCP结合AI智能体,革新UI回归测试:通过自然语言驱动浏览器操作,降低脚本编写门槛,提升测试效率与覆盖范围。借助快照解析、智能定位与Jira等工具集成,实现从需求描述到自动化执行的闭环,推动测试迈向智能化、民主化新阶段。
|
4月前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
622 11
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
7月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1177 23
|
9月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
1517 24
|
11月前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
898 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
9月前
|
SQL 测试技术
除了postman还有什么接口测试工具
最好还是使用国内的接口测试软件,其实国内替换postman的软件有很多,这里我推荐使用yunedit-post这款接口测试工具来代替postman,因为它除了接口测试功能外,在动态参数的支持、后置处理执行sql语句等支持方面做得比较好。而且还有接口分享功能,可以生成接口文档给团队在线浏览。
431 2