YOLOv5目标检测:ubuntu1804从零开始使用YOLOv5训练自己的数据集(亲测有效,一步一步来一定行)

这篇具有很好参考价值的文章主要介绍了YOLOv5目标检测:ubuntu1804从零开始使用YOLOv5训练自己的数据集(亲测有效,一步一步来一定行)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.环境准备工作

(1)首先需要安装Anaconda,这个网上教程太多了,下载最新版本就行,在这里就不在赘述了。

(2)安装Pytorch

1. 首先创建python3.6以上版本的conda环境,在这里我用的是python3.8,环境名称为mypytorch

conda create -n mypytorch python=3.8

2. 激活创建好的conda环境

conda activate mypytorch

3.在PyTorch官网上选择指定版本安装Pytorch

Install PyTorch: https://pytorch.org/get-started/locally/  我在这里安装的是cpu版本,如果安装GPU版网上也有很多详细的教程。

conda install pytorch torchvision torchaudio cpuonly -c pytorch

(3)安装YOLOv5

先在主页面创建一个文件夹名称为catkin_ws作为你的工作空间,在这个文件夹中再创建一个名为src的文件夹。下载YOLOv5安装文件,我将它放在了百度网盘里,

链接:https://pan.baidu.com/s/1FCCz1qs6CcMNQ62Ip5Tj5w?pwd=1234
提取码:1234

下载解压之后放在src文件夹中,在src文件夹中打开终端,执行以下命令。

python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple

cd yolov5_ros/yolov5_ros/yolov5

sudo pip install -r requirements.txt

最后执行,安装opencv-python

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成!

注意每次使用YOLOv5都必须执行指令,来进入mytorch环境

conda activate mypytorch

2.第一步如果实在装不好

如果第一步中实在有报错不能解决,我准备了一个已经配置好的YOLOv5环境,放在了百度网盘里,链接如下

链接:https://pan.baidu.com/s/1FNtkV4igI5kco-qQU3g-6w?pwd=1234
提取码:1234

找到你安装anaconda的位置,下载好后把文件解压后放入/anaconda3/envs/文件夹下,然后在此文件夹下打开终端运行以下指令添加到conda环境中

conda config --add envs_dirs 加上下载好的环境文件夹的路径

最后通过指令,来激活conda环境

conda  activate mypytorch

3.准备自己的数据集

创建数据集,数据集的文件分级如下所示
文件结构必须是这样的,train放训练集,val放测试集,images放图,labels放标签,数据集文件放哪都无所谓,但是一定要记得路径。

|————dataset
	|————train
		|————images
		|————labels
	|————val
		|————images
		|————labels

接下来我们就要进行图片的标注工作了,我参考了教程:超详细从零开始yolov5模型训练_yolo训练-CSDN博客中的方法。图片标注我们用到了一个名为labelimg的工具:https://github.com/tzutalin/labelImg
大家下载解压之后,首先要做的是删除labelImg-master\data\predefined_classes.txt
文件中的内容,不然等会标记的时候会自动添加一些奇怪的类别。

然后在labelImg-master文件夹下打开终端,进入我们的yolo环境中,然后我们还需要在yolo环境中安装一些labelImg运行需要的依赖,依次输入

conda install pyqt=5
conda install -c anaconda lxml
pyrcc5 -o libs/resources.py resources.qrc

现在,我们已经在yolo环境中安装好labelimg的依赖环境了,输入

python labelImg.py

即可进入我们的界面中来。进入之后,首先我们先把一些选项勾上,便于我们标记。然后,最重要的是把标记模式改为yolo。

ubuntu yolov5训练自己的数据集,yolov5,ubuntu,pytorch,目标检测,YOLO,人工智能

之后我们点击打开目录(Open dir)选择我们图片所在的images文件夹,选择之后会弹窗(如果没有弹出就点击改变存放根目录,英文的话叫change save dir)让你选择labels所在的文件夹。当然如果选错了,也可以点存放根目录(change save dir)进行修改。期间容易闪退,可以多试几次,或者可以参考一下下边第六部分可能出现的报错中的第四小块。

然后点击左边的创建区块就可以点击左边创建区块分类拉框打标签了。

ubuntu yolov5训练自己的数据集,yolov5,ubuntu,pytorch,目标检测,YOLO,人工智能

如果在拉框时闪退,并报错labelImg IndexError: list index out of range,可以查看第六部分可能出现的报错中的第六小块。在所有图片标注好之后,我们再来看我们的labels文件夹,可以看到很多txt文件。每个文件都对应着我们标记的类别和框的位置。

ubuntu yolov5训练自己的数据集,yolov5,ubuntu,pytorch,目标检测,YOLO,人工智能

4.修改文件

(1)建立A.yaml文件,我放在了/home/lzl/catkin_ws/src/yolov5_ros/yolov5_ros/yolov5/data里边

touch A.yaml

文件里面内容如下,其中train和val都是我们images的目录,为训练集与验证集的图片,可以根据自己的实际情况改,labels的目录不用写进去,会自动识别。nc代表识别物体的种类数目,names代表种类名称,如果多个物体种类识别的话,可以自行增加。

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ./dataset/train/images
val: ./dataset/val/images
# number of classes
nc: 3

# class names
names: ['cube','cuboid','cylinder']

(2)以下内容参考了Ubuntu使用官方Yolov5训练自己的数据集(小白向)_ubuntu使用yolov5训练自己的数据集-CSDN博客

models文件夹中的yaml文件记录了网络的配置信息,分为yolov5s、yolov5m、yolov5l、yolov5x四个,s是最轻量的版本网络深度最小,其他的依次增大,以yolov5s.yaml为例:

# parameters
nc: 3  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

# anchors
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Focus, [64, 3]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 3, C3, [1024, False]],  # 9
  ]

# YOLOv5 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

nc是要类别数量,根据自己的数据集中的分类数修改nc即可,其他的无需改动。

(3)如果是使用cpu进行训练那就需要修改catkin_ws/src/yolov5_ros/yolov5_ros/yolov5中train.py的第107行改为

cuda = device.type != 'cpu'

5.进行训练

在catkin_ws/src/yolov5_ros/yolov5_ros/yolov5文件夹中打开终端输入

python train.py --help

可以查看可以传入的参数类型

其中weights是权重文件 .pt 格式,可以输入空格,代表使用随机权重,或者输入权重文件的路径
cfg是模型的yaml文件,一般存放在models文件夹里
data是数据集的yaml文件,一般存放在data文件夹里
epochs是训练轮数,默认300轮
batch-size是batch数,默认16
img是输入图片大小,网络会自动按参数进行resize,默认640X640

以上可以根据实际情况修改

之后运行,可能需要安装Arial.ttf字体,请看可能出现的报错(5)

python train.py --img 640 --batch 16 --epochs 6000 --data ./data/A.yaml --cfg ./models/yolov5s.yaml --weights '' 

batch,epoch可以根据实际情况改

6.可能出现的报错

(1)在运行

python train.py --img 640 --batch 16 --epochs 6000 --data ./data/A.yaml --cfg ./models/yolov5s.yaml --weights '' 

可能会出现RuntimeError: result type Float can't be cast to the desired output type long int

定位代码"/home/lzl/catkin_ws/src/yolov5_ros/yolov5_ros/yolov5/utils/loss.py", line 217在loss.py文件的第217行

原因:新版本的torch无法自动执行转换操作,而旧版本可以。

发现gain中元素为float类型,手动将其改为long

改为

indices.append((b, a, gj.clamp_(0, gain[3].long() - 1), gi.clamp_(0, gain[2].long() - 1)))

(2)同样是运行这一句

python train.py --img 640 --batch 16 --epochs 6000 --data ./data/A.yaml --cfg ./models/yolov5s.yaml --weights '' 

出现AttributeError: 'FreeTypeFont' object has no attribute 'getsize'

解决办法:

pip uninstall pillow

pip install Pillow==9.5 -i <https://pypi.tuna.tsinghua.edu.cn/simple>

(3) File "/home/lzl/catkin_ws/src/yolov5_ros/yolov5_ros/yolov5/utils/general.py", line 428, in check_dataset
    raise Exception('Dataset not found.')
Exception: Dataset not found.

主要是因为路径的格式有问题,可以看一下这一篇

运行yolov5训练时遇到Exception: Dataset not found ❌_dataset not found , missing paths-CSDN博客

(4)在运行labelImg.py时如果出现报错 TypeError: expected str, bytes or os.PathLike object, not NoneType

直接在labelImg.py文件中1309行找到这行代码修改即可。

self.show_bounding_box_from_annotation_file(str(self.file_path))

(5) 在训练时,可能会出现无法下载Arial.ttf字体的问题,我将字体的安装包放在了网盘里,可以下载后点开ttf文件点击安装即可。

链接:https://pan.baidu.com/s/1snkvpkaC2lRLtjQHNMb2gA?pwd=1234 
提取码:1234

(6)在拉框标注时出现labelImg IndexError: list index out of range报错

在这部分,我参考了解决labelimg闪退-CSDN博客的文章,问题的原因还是在labels文件夹中生成的classes.txt文件中类别不全的原因。

 ubuntu yolov5训练自己的数据集,yolov5,ubuntu,pytorch,目标检测,YOLO,人工智能

可以看到打开文件之后只有cube一个类,但是我们实际上有三个类别。 系统不知道有其他这个标签,就提示该闪退。

 ubuntu yolov5训练自己的数据集,yolov5,ubuntu,pytorch,目标检测,YOLO,人工智能

我们补上即可。

6.使用训练出的模型进行标注

ubuntu yolov5训练自己的数据集,yolov5,ubuntu,pytorch,目标检测,YOLO,人工智能

在训练结束后可以看到训练好模型的存放位置,exp25中的weights 文件夹下就是通过训练出来的权重文件,best.pt 是最好的

执行命令,在此次一定要注意best.pt与待标注图片的路径

 python detect.py --weights ./runs/train/exp25/weights/best.pt --source ./dataset/val/images/9.jpeg

ubuntu yolov5训练自己的数据集,yolov5,ubuntu,pytorch,目标检测,YOLO,人工智能

可以看到结果存在了此处,打开文件夹可以看到标注结果

ubuntu yolov5训练自己的数据集,yolov5,ubuntu,pytorch,目标检测,YOLO,人工智能

结束!文章来源地址https://www.toymoban.com/news/detail-827488.html

到了这里,关于YOLOv5目标检测:ubuntu1804从零开始使用YOLOv5训练自己的数据集(亲测有效,一步一步来一定行)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 佩戴口罩检测从零开始使用YOLOv5+PyQt5+OpenCV+爬虫实现(支持图片、视频、摄像头实时检测,UI美化升级)

    全流程 教程,从数据采集到模型使用到最终展示。 支持图片检测、视频检测、摄像头实时检测,还支持视频的暂停、结束等功能。若有任何疑问和建议欢迎评论区讨论。 先放上最终UI实现效果 图片检测效果图 视频检测效果图 摄像头实时检测效果图 我已经处理了一份数据形

    2024年02月04日
    浏览(52)
  • 智能零售柜商品识别从零开始使用YOLOv5+PyQt5+OpenCV实现(支持图片、视频、摄像头实时检测)

    全流程 教程,从数据采集到模型使用到最终展示。若有任何疑问和建议欢迎评论区讨论。 先放上最终实现效果 检测效果 智能零售柜商品识别,当顾客将自己选购的商品放置在制定区域的时候,能精准地识别每一个商品,从而能够返回完整地购物清单及计算顾客应付的实际商

    2024年02月08日
    浏览(47)
  • 记录使用yolov5进行旋转目标的检测

    由于实习公司需要使用到旋转目标的检测,所以这几天学习了相关知识,并找了许多资料,饶了许多的弯路。下面记录下项目的整个实现过程。 我参考的是以下几位博主: DOTAv2遥感图像旋转目标检测竞赛经验分享(Swin Transformer + Anchor free/based方案) - 知乎 小鸡炖技术的个人

    2024年02月02日
    浏览(45)
  • 使用YOLOv5实现实时目标检测结果保存

           本文将分享保存实时目标检测结果的方法,包括将目标信息逐帧保存到.txt文件中、逐帧输出检测结果图片、以及如何保存所有检测图片(包括视野中无目标的帧)。 目录 0.准备 1.目标信息保存 2.检测图片保存 3.保存所有帧        本文以单摄像头实时目标检测进行演

    2024年02月03日
    浏览(49)
  • 使用YOLOv5实现图片、视频的目标检测

    接下来我将从官方代码开始,一步一步展示如何进行图片、视频识别 首先从GitHub下载官方代码(也可以从下面链接获取): 链接:https://pan.baidu.com/s/16wzV899D90TY2Xwhx4TwhA 提取码:vzvj (你的环境名可能和我不一样) 可以看到 \\\'--weights\\\' 参数(参数解读详见4.a)的默认值为\\\'yolov

    2023年04月15日
    浏览(42)
  • yolov5实现目标检测系统(使用线程池)

    该系统包含以下几个部分: 从摄像头中读取数据 主线程将数据输出到窗口 后台线程完成计算机视觉的目标检测过程,并且将结果共享给主线程 主线程将结果画在输出图像上 下载yolvo5: YOLOv5的源码放在 Github 地址:https://github.com/ultralytics/yolov5 我使用到的是 yolov5s.pt,yolvo5学习

    2024年02月16日
    浏览(41)
  • 使用YOLOv5实现单摄像头实时目标检测

    我将在上一节的基础上,一步一步展示如何实现单摄像头实时目标检测,其中包括我在配置过程中遇到的报错和解决方法。 将\\\'--source\\\'的默认值改为0 这里的\\\'0\\\'是指系统默认的第一个摄像头,通常是电脑自带的摄像头,所以一定要记得把摄像头打开再运行代码(有些电脑会有摄

    2024年02月03日
    浏览(66)
  • 使用YOLOv5实现多摄像头实时目标检测

    这篇博客将在单摄像头目标检测的基础上,实现单网络多线程的实时目标检测。 在detect.py同级目录下新建streams.txt文件,每个视频流源单独成行: 本地摄像头填0 USB摄像头填1,2,3… IP摄像头要根据摄像头类型,按下面格式填写(我将在之后的博客中讲解实现) 0是电脑自带摄像

    2024年02月05日
    浏览(58)
  • 是否佩戴安全帽识别从零开始使用YOLOv5+PyQt5+OpenCV实现

    全流程 教程,从数据采集到模型使用到最终展示。若有任何疑问和建议欢迎评论区讨论。 先放上最终实现效果 检测效果 在施工现场,对于来往人员,以及工作人员而言,安全问题至关重要。而安全帽更是保障施工现场在场人员安全的第一防线,因此需要对场地中的人员进行

    2024年02月03日
    浏览(49)
  • Python——一文详解使用yolov5进行目标检测全流程(无需gpu)

    本文按步骤详细介绍了使用yolov5进行目标检测的全流程,包括:模型下载、环境配置、数据集准备和数据预处理、模型调整、模型训练、进行目标检测和检测结果分析。本文全部流程使用cpu完成(无需gpu),旨在跑通流程,模型训练过程较慢,且未能到达最优结果。需要 py

    2024年03月18日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包