深度学习-4-二维目标检测-YOLOv5源码测试与训练

本文采用的YOLOv5源码是ultralytics发行版3.1

YOLOv5源码测试与训练

1.Anaconda环境配置

1.1安装Anaconda

Anaconda 是一个用于科学计算的 Python 发行版,支持 Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析的 Python 包。

官方网址下载安装包:Free Download | Anaconda

开启终端安装

bash ~/Downloads/Anaconda3-2020.07-Linux-x86_64.sh

anaconda会自动将环境变量添加到PATH里面,但如果终端输入conda后,提示没有该命令。

可以自己配置环境变量。

sudo gedit ~/.bashrc

#在文件最后添加环境变量,保存退出,然后更新环境变量

export PATH=/home/meta/anaconda3/bin:$PATH

source ~/.bashrc

1.2conda虚拟环境中安装pytorch

首先创建虚拟环境,并激活

conda create -n yolov5_ultralytics python=3.7

conda activate yolov5_ultralytics

在新创建的虚拟环境下安装pytorch和其适配的cuda

conda install pytorch torchvision cudatoolkit=11.5 -c pytorch

2.下载项目文件到本地

2.1下载yolov5-ultralytics版本源码v3.1

Release v3.1 - Bug Fixes and Performance Improvements · ultralytics/yolov5 · GitHub

项目文件目录

2.2使用清华镜像源安装依赖包

在yolov5_ultralytics虚拟环境和yolov5项目目录下开启终端执行

终端进入虚拟环境命令,退出当前虚拟环境命令conda deactivate

conda activate yolov5_ultralytics

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

2.3下载预训练权重文件

yolov5s.pt,yolov5m.pt,yolov5l.pt,yolov5x.pt ,放置在weights文件夹下

2.4测试项目文件detect.py

终端执行

python detect.py --source ./inference/images/ --weights weights/yolov5s.pt --conf 0.4

将权重文件替换为yolov5x.pt后图片检测结果对比 

3.准备VOC数据集

3.1从百度网盘下载VOC数据文件

  • VOCtrainval_06-Nov-2007.tar
  • VOCtrainval_11-May-2012.tar
  • VOCtest_06-Nov-2007.tar
  • get_voc_ubuntu.py

3个tar压缩包解压后组合成为一个文件夹VOCdevkit,将其拷贝到yolov5项目文件夹下。

3.2进行数据集的划分

终端执行python脚本,创建VOC文件夹,将数据文件转换为yolo格式

python get_voc_ubuntu.py

在VOCdevkit / VOC2007和VOCdevkit / VOC2012目录下生成了文件夹labels ;

在yolov5目录下生成了文件2007_train.txt, 2007_val.txt, 2007_test.txt, 2012_train.txt,2012_val.txt,train.txt, train.all.txt。

在VOC目录下生成了images和labels文件夹;

  • labels下的文件是JPEGImages文件夹下每一个图像的yolo格式的标注文件,这是由annotations的xml标注文件转换来的
  • yolov5目录下的train.txt和2007_test.txt分别给出了yolov5训练集图片和yolov5验证集图片的列表,含有每个图片的路径和文件名
  • VOC/images文件夹下有train和val文件夹,分别放置yolov5训练集和验证集图片;VOC/labels文件夹有train和val文件夹,分别放置yolov5训练集和验证集标签(yolo格式)

4.修改配置文件

主要是修改data和models目录下的yaml文件

4.1新建data/voc.yaml

复制voc.yaml文件后修改,注释掉自动下载的代码即可。

4.2新建models/yolov5s-voc.yaml

复制yolov5s.yaml文件后修改,只需将类别数量改为nc: 20

5.终端训练VOC数据集

在yolov5_ultralytics虚拟环境和yolov5项目目录下

开启终端执行

python train.py --data data/voc-new.yaml --cfg models/yolov5s-voc.yaml --weights weights/yolov5s.pt --batch-size 16 --epochs 200

训练过程可视化

tensorboard --logdir=./runs

6.测试训练出的网络模型

在yolov5_ultralytics虚拟环境和yolov5项目目录下

开启终端执行,测试图片

python detect.py --source ./VOC/images/val/000001.jpg --weights
runs/exp0/weights/best.pt --conf 0.4

性能统计

python test.py --data data/voc-new.yaml --weights runs/exp0/weights/best.pt --batch-size 16

7.导出ONNX文件

ONNX(Open Neural Network Exchange),开放神经网络交换,是一种模型IR,用于在各种深度学习训练和推理框架转换的一个中间表示格式。在实际业务中,可以使用Pytorch或者TensorFlow训练模型,导出成ONNX格式,然后再转换成目标设备上支持的模型格式,比如TensorRT Engine、NCNN、MNN等格式。ONNX定义了一组和环境、平台均无关的模型结构和参数的标准格式,来增强各种AI模型的可交互性,开放性较强。

# for ONNX export

pip install onnx>=1.7.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

# for CoreML export
pip install coremltools==4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

# export at 640x640 with batch size 1
python models/export.py --weights weights/yolov5s.pt --img 640 --batch 1

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

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

相关文章

pdf怎么编辑文字?了解一下这几种编辑方法

pdf怎么编辑文字?PDF文件的普及使得它成为了一个重要的文件格式。然而,由于PDF文件的特性,它们不可直接编辑,这就使得PDF文件的修改变得比较麻烦。但是,不用担心,接下来这篇文章就给大家介绍几种编辑pdf文字…

go语言基本操作---三

变量的内存和变量的地址 指针是一个代表着某个内存地址的值。这个内存地址往往是在内存中存储的另一个变量的值的起始位置。Go语言对指针的支持介于java语言和C/C语言之间,它即没有想Java语言那样取消了代码对指针的直接操作的能力,也避免了C/C语言中由…

Redis面试题(笔记)

目录 1.缓存穿透 2.缓存击穿 3.缓存雪崩 小结 4.缓存-双写一致性 5.缓存-持久性 6.缓存-数据过期策略 7.缓存-数据淘汰策略 数据淘汰策略-使用建议 数据淘汰策略总结 8.redis分布式锁 setnx redission 主从一致性 9.主从复制、主从同步 10.哨兵模式 服务状态监…

最快1个月录用!9月SCI/SSCI/EI刊源表已更新!

2023年9月SCI/SSCI/EI期刊目录更新 2023年9月份刊源表已更新!计算机、医学、工程、环境、SSCI均有新增期刊,1区(TOP),最快1个月录用,好刊版面紧俏,切莫错失机会! 01 计算机领域 02 医学与制药领域 03 工…

桌面应用小程序,一种创新的跨端开发方案

Qt Group在提及2023年有桌面端应用程序开发热门趋势时,曾经提及三点: 关注用户体验:无论您是为桌面端、移动端,还是为两者一起开发应用程序,有一点是可以确定的:随着市场竞争日益激烈,对产品的期…

Python爬取天气数据并进行分析与预测

随着全球气候的不断变化,对于天气数据的获取、分析和预测显得越来越重要。本文将介绍如何使用Python编写一个简单而强大的天气数据爬虫,并结合相关库实现对历史和当前天气数据进行分析以及未来趋势预测。 1 、数据源选择 选择可靠丰富的公开API或网站作…

电子科大软件系统架构设计——面向对象建模基础

文章目录 面向对象建模基础UML建模语言UML模型图用例图活动图类图顺序图通信图状态机图构件图部署图包图对象图组合结构图扩展图交互概览图时间图 BPMN建模语言业务建模定义模型元素流对象活动事件网关 流数据人工制品泳池和泳道 建模案例订单采购流程建模电商系统订货业务流程…

搭建最简单的SpringBoot项目

1、创建maven项目 2、引入父pom <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.15</version> </parent> 3、引入springboot-web依赖 <dependency…

React【React是什么?、创建项目 、React组件化、 JSX语法、条件渲染、列表渲染、事件处理】(一)

文章目录 React是什么&#xff1f; 为什么要学习React React开发前准备 创建React项目 React项目结构简介 React组件化 初识JSX 渲染JSX描述的页面 JSX语法 JSX的Class与Style属性 JSX生成的React元素 条件渲染&#xff08;一&#xff09; 条件渲染 &#xff0…

系统架构技能之设计模式-工厂模式

一、开篇 本文主要是讲述设计模式中最经典的创建型模式-工厂模式&#xff0c;本文将会从以下几点对工厂模式进行阐述。 本文将会从上面的四个方面进行详细的讲解和说明&#xff0c;当然会的朋友可以之处我的不足之处&#xff0c;不会的朋友也请我们能够相互学习讨论。 二、摘…

Java后端开发面试题——企业场景篇

单点登录这块怎么实现的 单点登录的英文名叫做&#xff1a;Single Sign On&#xff08;简称SSO&#xff09;,只需要登录一次&#xff0c;就可以访问所有信任的应用系统 JWT解决单点登录 用户访问其他系统&#xff0c;会在网关判断token是否有效 如果token无效则会返回401&am…

C#循环定时上传数据,失败重传解决方案,数据库标识

有些时候我们需要定时的上传一些数据库的数据&#xff0c;在数据不完整的情况下可能上传失败&#xff0c;上传失败后我们需要定时在重新上传失败的数据&#xff0c;该怎么合理的制定解决方案呢&#xff1f;下面一起看一下&#xff1a; 当然本篇文章只是提供一个思路&#xff0…

SAP-PP:基础概念笔记-5(物料主数据的MRP1~4视图)

文章目录 前言一、MRP1视图Base Unit of Measure&#xff08;UoM&#xff09;MRP 组采购组ABC 指示器Plant-Specific Material Status 特定的工厂物料状态MRP 类型 MRP TypeMRP 类型 MRP TypeMaster Production Scheduling(MPS) 主生产计划基于消耗的计划(CBP)再订货点Reorder-…

uni-app点击复制指定内容(点击复制)

官方api uni.setClipboardData(OBJECT) uni.setClipboardData({data: 要被复制的内容,success: function () {console.log(success);} });

Liquid UI和Fiori的区别

主要围绕以下几个方面就Liquid UI和Firor来进行比较&#xff1a; 开发周期开发成本稳定性和支援性平台架构 影响Firor决策的因素&#xff1a; 复杂的编程过程&#xff0c;Fiori对开发人员要求高&#xff0c;开发难度大&#xff0c;而Liquid UI让开发人员不需要懂SAP后端&…

yolov5运行过程遇到的小问题(随时更新)

1.关于git的问题 解决办法&#xff1a;插入下面代码 import os os.environ["GIT_PYTHON_REFRESH"] "quiet"2.页面太小无法完成操作 解决办法: 如果不好使再考虑降低Batch_Size大小或者调整虚拟内存可用硬盘空间大小&#xff01;&#xff08;调整虚拟内存…

整理mongodb文档:分页

个人博客 整理mongodb文档:分页 个人博客&#xff0c;求关注&#xff0c;如果文章不够清晰&#xff0c;麻烦指出。 文章概叙 本文主要讲下在聚合以及crud的find方法中如何使用limit还有skip进行排序。 分页的情况很经常出现&#xff0c;这也是这篇博客诞生的理由。 数据准备…

Vue组件之间传值

聊一聊vue里面组件之间的传值 首先总结一下vue里面传值的几种关系&#xff1a; 如上图所示, A与B、A与C、B与D、C与F组件之间是父子关系&#xff1b; B与C之间是兄弟关系&#xff1b;A与D、A与E之间是隔代关系&#xff1b; D与F是堂兄关系&#xff0c;针对以上关系 我们把组件…

Redis 缓存穿透击穿和雪崩

一、说明 Redis 缓存的使用&#xff0c;极大的提升了应用程序的性能和效率&#xff0c;特别是数据查询方面。但同时&#xff0c;它也带来了一些问题。其中&#xff0c;最要害的问题&#xff0c;就是数据的一致性问题&#xff0c;从严格意义上讲&#xff0c;这个问题无解。如果对…

Nginx基础+高级(2022版):待更新

1. 文章说明 说明&#xff1a;目前讲的是第一部分nginx核心技术篇&#xff0c;后需篇章会以第一部分为核心技术篇为基础来展开深度讲解&#xff0c;详情关注后续课程的发布。 2. 介绍和准备环境 2.1 介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xf…