此文章记录如何在ubuntu下部署yolov5网络,并训练自己的数据集
环境:ubuntu16.04+Pycharm+Pytorch1.7.1+Cuda10.1
具体如何在ubuntu下配置深度学习环境,可以参照此篇博客
下载地址:github链接
下载方式:进入github页面,点击右上角的code
,复制图中网址。在目标文件夹中打开终端(进入目标文件夹中右键点击弹出框中的在终端打开),运行以下命令,将yolov5下载至该目录中
git clone https://github.com/ultralytics/yolov5
如果在pycharm中配置了深度学习环境,也可以像下图一样,先进入其中的Teminal
界面,在到目标文件夹下(我这里将yolov5保存在了curling_detection文件夹下),运行上述命令,将yolov5下载到此文件夹下。
注意:此处需要先进入深度学习的环境中(我这里是lls_pytorch
)
下载完成后,会在目标文件夹下出现名为yolov5的文件夹,打开文件夹,包含以下内容。
yolov5中的requirements.txt
,这是一个配置环境依赖的脚本,里面包含了对所需各种库的版本要求。
先进入yolov5文件夹下,运行下面命令来配置环境依赖
shell pip install -r requirements.txt
在路径yolov5/weights/
下有脚本download_weights.sh
,执行脚本可以下载yolov5系列的s,m,l,x四个模型,由于这里我只用到了最轻量级(当然也是最快)的yolov5s,所以我这里将脚本列表中的’m’、‘l’、'x’均删掉了,然后进入yolov5目录下执行该文件,使用
bash ./weights/download_weights.sh
下载完成后,会生成一个名为yolov5s.pt
的压缩包,将此压缩包移至yolov5/weights/
目录下。
可以直接进入网页中进行下载,然后放到yolov5的同级目录下
下载地址:在此处
注意观察coco128数据集的目录格式,在其数据集下分为了images和label文件夹,一个存放原图像,而另一个是存放的是与之对应的打标签后生成的txt文件。
在制作自己数据集时也要以此目录格式组织。(具体如何打标签后文会提到)
关于coco128数据集的配置文件,yolov5中都已经为我们写好,下面做简要介绍。
首先在yolov5/data/
文件夹下有一个coco128.yaml
文件,该文件中写有数据集的训练集train
和验证集val
路径,类别数nc
,类别名称names
。
(由于我们已经下载好了数据集,这里可以将下载网址注释掉)
在yolov5/models
中存放着模型的配置文件,我们打开yolov5s的配置文件yolov5s.yaml
。当我们需要用自己的数据集进行训练时,只需改动该文件下的类别数nc
。
还是在yolov5目录下,运行下述命令
python train.py --img 640 --batch 16 --epochs 5 --data ./data/coco128.yaml --weights ./weights/yolov5s.pt
> 参数说明:
--img 640 训练和测试输入大小,默认为[640, 640]
--batch 16 默认为16
--epoch 5 训练执行的周期数,一个epoch遍历一遍数据集
--data 数据集的配置文件路径
--cfg:模型的配置文件,默认为yolov5s.yaml
--weights 初始化权重参数路径,默认值''
开始训练:
最后,在训练结束后,会在yolov5/runs/train/
下生成相应的exp文件夹,第n次测试会生成一个名为expn的文件夹,打开此文件夹,里面存放着训练的结果,最重要的是其中weights
文件中的权重文件,其中包括best.pt
为过程中效果最好的权重文件,last.pt
为最后一次的权重文件。将best.pt
改名为coco128.pt
放入到yolov5/weights
文件夹下。
python detect.py --source 0
使用单张图片进行测试
在yolov5/data/images
中存放着为我们准备好的两张图片bus.jpg和zidane.jpg
例:我们使用bus.jpg进行测试,原图如下
我们在终端中运行下面的命令:
python detect.py --source ./data/images/bus.jpg --weights ./weights/coco128.pt --conf 0.25
参数说明
–source 测试图片的路径
–weights 训练得到的权重文件
–conf 0.25 只显示置信度大于0.25的部分
最终的结果存放在yolov5/runs/detect
中的最后一个exp文件中,最终的结果如下:
实验目的:使用yolov5实现对冰壶的检测与跟踪
拍摄大量的冰壶图片。(这里我收集了516张冰壶图片)
在yolov5的同级目录下创建新的文件夹(我这里设置为curling_data),且包含images和labels两个子文件夹
将所有的冰壶图片放在images文件夹中
这里使用的打标签工具为labelImg
下载地址:github官网地址
具体安装使用方法可以参考这篇博客
标注要选择yolo格式,这样生成的文件为.txt文件,将所有.txt标签文件存放在label文件夹下。这样,image和label文件夹下分别存放着图片以及与之对应的标签文件。如下所示:
注意:如果你的标签数据是xml格式,xml与txt文件间的转换可以参考这篇博客
像上述coco样例一样,我们的数据集也要按下面的目录结构组织。
分别在images和labels文件夹下新建两个文件夹train和val,train中存放需要训练的图片(即516张冰壶图片),val中存放训练集中的一部分用作验证。创建好文件夹好,可以通过以下命令快速实现文件的移动
cd images/ #进入images文件夹
cp 2020010900*.jpg ./val #将0-99图片复制到val文件夹中
mv *.jpg ./train #将所有的jpg图片移动到train文件夹中
cd labels/ #进入labels文件夹
cp 2020010900*.txt ./val #将0-99txt文件复制到val文件夹中
mv *.txt ./train #将所有的txt文件移动到train文件夹中
整理好后的目录格式如下:
进入yolov5/data
目录下,修改coco128.yaml文件内容。这里,我们可以先复制一份coco128.yaml,然后更名为curling516.yaml,修改内容如下:
声明train
和val
文件的路径,类别数nc
以及类别名names
(这里分为了两类,分别为red和yellow代表冰壶的颜色)
进入yolov5/models
目录下,修改yolov5s.yaml文件内容。这里,我们可以先复制一份yolov5s.yaml,然后更名为curling_yolov5s.yaml,只需要修改类别数nc
:
使用yolov5s进行训练,进入到yolov5文件夹下
执行训练命令:
python train.py --img 640 --batch 16 --epochs 30 --data ./data/curling516.yaml --cfg ./models/curling_yolov5s.yaml --weights ./weights/yolov5s.pt
训练结束后,会在yolov5/runs/train
目录下的最后一个exp文件夹下生成一个名为weights
文件夹,我们将该文件间里面的权重文件best.pt
文件复制到yolov5/weights
中,并更名为curling516_best.pt
yolov5/data
下新建一个文件夹名为curling_img
,将图片存放在该文件夹中。python detect.py --source ./data/curling_img/curling.jpg --weights ./weights/curling516_best.pt --conf 0.5
最后会在yolov5/runs/detect
目录下最后一个exp文件夹中生成检测后的图片如下:
yolov5
路径下,然后执行下面命令(curling.avl为视频名称)python detect.py --source curling.avl --weights ./weights/curling516_best.pt --conf 0.5
最终结果也保存在了yolov5/runs/detect
的最后一个exp文件夹中。
参考文献:
1. Yolov5详细使用教程,以及使用yolov5训练自己的数据集
2. wiki/Train-Custom-Data
3. Ubuntu下深度学习环境的配置
4. 在 Ubuntu下安装使用labelImg
5. Yolo格式和Voc格式的相互转换
C语言函数的变量的作用域、生命周期作用域:变量能被引用到的区间 局部变量:在函数内定义的变量 作用域:在函数内 全局变量:在函数名定义的变量 作用域:在整个文件内 注:1、在同一作用域下,不能同名定义 2、引用变量时,局部优先 生命周期:变量空间被分配开始,到空间被分配结束。动态变量:动态的分配(当函数调用开始时分配空间,当函数调用结束时释放空间) [动静态] [...
简述本人的开发板是友善之臂的smart210,学习内核移植已经有些时间了,期间的过程可谓历经千辛万苦,想必学习嵌入式的朋友们都有体会,最近想把学习内核移植的过程做一下笔记,完整的记录一下内核移植的过程,一方面希望可以帮助到刚开始学习内核移植的朋友,另一方面也是纯粹的做一下总结,方便自己以后回顾。内核初步配置我使用的内核版本是3.10.46,u-boot版本是2014.04,随后我也会做一个u...
一、html代码 百度地图API自定义地图 地图生成工具基于百度地图JS api v2.0版本开发,使用请申请密匙。 了解如何申请密匙 申请密匙 //创建和初始化地图函数: f
随着企业的发展,几乎所有的管理者都有同样一个痛点:如何才能让自己的团队变得更强,技术能力更能匹配企业发展需求?msup的创立毫无疑问解决了这个难点。麦思博(msup)有限公司发源于美国西雅图,是一家面向软件研发团队的培训咨询机构,专注于软件研发中心的快速成长,服务于软件开发团队的技能提升、软件工程的实际应用和软件品质的创新与超越。每年超过1000家企业续单参与msup旗下公开课、工作坊、案例研
从C/C++到Python人工智能—1Python基本语法数据类型及操作字符串[^1]列表字典曾很羡慕那些掌握编程技能的老师和同学们,羡慕他们能自己编程实现些有趣功能,于是自己花费很多时间自学C/C++/数据结构/模式设计/算法/LINUX等等。研究生几年时间也基本上都再C/C++中绕(MFC、OpenCV、PCL及源码编译等),自认为C/C++也学得不错;后来发现在LINUX中写或研究算法的人很多,我也深深着迷于SLAM、ROS、ML或DL技术,于是断断续续的开始学习LINUX、Python、SLAM
Gray码问题问题描述Gray码是一个长度为2n的序列。序列中无相同的元素,每个元素都是长度为n位的串,相邻元素恰好只有一位不同。用分治策略设计一个算法对任意的n构造相应的Gray码。由文件input.txt提供输入数据n。程序运行结束时,将得到的所有编码输出到文件output.txt中。实验设计int arr[1024][1024]; //arr[i][j]表示第i个格雷码的第j位ifstream f(“D://算法分析与设计/input2.txt”); //从文件中读取gray码位数递归算法
ch2 递归与分治策略二分搜索技术/*** 二分搜索核心代码** @param a: 查询数组* @param x: 查询的值* @param n: 数组a的个数* @return 查找到的下标值,若没有找到返回-1*/int BinarySearch(Type a[], const Type& x, int n){ int left = 0; int right...
枚举解密有密码的压缩包应该是常见需求了。没有工具的情况下可以自己写一段py脚本来实现。环境:Windows10,python3.7.6文章目录仅支持ZIP的版本支持ZIP和RAR的版本安装代码解释参考链接仅支持ZIP的版本我稍微改了下参考链接1的代码,可以正确运行。 他的代码在解密基础上加了多线程,但是他的代码会打印很多个密码(第一个打印的就是真密码)。我对多线程了解很少,但我认为我这段代码是对的(只要对flag变量的所有操作都是原子的),因为只有一个线程能找到密码,找到密码的线程等待cpu调度期
1. FlexSPI driver API1.1 API产生背景 i.MXRT系列都是Flashless(没有内置NVM)的芯片,所以BootROM必不可少。BootROM是个很特殊的东西,本质上它是一个完整的C代码写成的系统级App,这个系统级App专门用于从外部存储器中加载用户级App执行。简单地说,BootROM就是PC机里的BIOS。 BootROM代码是存放在专门的ROM区域的(前面讲i.MXRT系列没有内置NVM,其实不够准确,其实是有内部ROM空间的,只不过这个ROM区域
DLL注入的多种方式注册表注入在Windows NT/2000/XP/2003操作系统中,当需要加载user32.dll的程序启动时,user32.dll会加载注册表键HLM\Software\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_DIls下面列出的所有模块。因此,可以将要注入的模块所在的路径写到AppInit_DIls 键下,待游戏进程启动并将外挂模块带人之后,再删除AppInit_DIls 键的值以清除痕迹,其核心函数如下://定义
1. 资产组合VaR建模方法回顾文章中总结了通过DCC模型估计组合向前一日VaR的方法,整体思路如下:●通过Garch族模型估计各资产的波动率●通过DCC模型估计各资产间的相关系数,结合1得到资产组合的协方差矩阵●在各资产正态性假设的前提下,可以知道资产组合也服从正态分布,并且均值与协方差阵已在1,2中计算得到●在已知组合中各但资产权重w的情况下,根据下式计算组合VaR文章中总结了...
一、 前言Hello小伙伴们,你们好,又是日常get新技能的一天,今天,咱们来整一下如何玩转Linux下Python虚拟环境,0基础入门,趁着热乎,快上车啦~。之前小编有写过Windows下的虚拟环境创建和基本使用方法,感兴趣的小伙伴们可以去看看,手把手教你进行Python虚拟环境配置、在Windows下如何创建指定的虚拟环境、浅谈虚拟环境管理工具virtualenvwrapper、手把手教你如何在Pycharm中加载和使用虚拟环境。二、为什么需要虚拟环境其实虚拟环境要解决的根本问题就是