YOLO系列部署问题指南合集+构建自己的数据集

代码下载地址

型号

地址

yolov5-5.0

GitHub - ultralytics/yolov5 at v5.0

yolov7

GitHub - WongKinYiu/yolov7: Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors

yolov8

GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite

V5 代码调试过程中存在的问题和解决办法

部署过程

1.安装环境:安装Anaconda,安装pytorch环境(GPU版)

Pytorch环境安装具体方法,可见视频下方链接:

最详细的 Windows 下 PyTorch 入门深度学习环境安装与配置 CPU GPU 版 | 土堆教程_哔哩哔哩_bilibili

2.到github打包下载对应版本的yolo文件的压缩包(.zip),下载后记得解压缩

3.使用Pycharm,打开解压缩后的yolo文件,打开后如下图

4.打开requirement.txt文件,下载所依赖的库,步骤如下图

5.依赖库安装成功后,即安装完毕。

测试过程

1.对单张图片的物体做检测(使用官方提供的yolov5l.pt权重文件)

2.对图片文件夹内所有图片进行检测,更改detect.py下的source参数路径,指定为文件夹路径即可。

3.对视频做目标检测,更改source路径为视频路径即可

4.对detect.py检测部分代码的参数理解,两种方式指定参数

(1)选中需要指定参数的py文件,进行配置

(2)在terminal使用 python xxx.py 参数 来指定参数并运行

通过指定--classes 0,来保留指定类别的目标,这边指定第0类,为person类。

使用--agument参数做检测效果增强,可以看到,指定参数后检测效果得到一定提升

打个断点,debug一下,查看参数的值情况。在这里制定了--exist-ok参数,那么其值就变为True

5.对train.py参数的理解

至此,部署好了yolov5,可以使用它来训练自己的模型,并且做预测。

问题合集

问题1

使用预训练权重文件对单张图像进行物体检测,问题如下

解决方法

默认下载权重文件的锅,到下面的地址手动下载权重文件,再拉到项目文件里就可以解决,把后缀改成需要下载的模型权重即可。

https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt

问题2

警告信息:UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at C:\cb\pytorch_1000000000000\work\aten\src\ATen\native\TensorShape.cpp:3527.) return _VF.meshgrid(tensors, **kwargs)  # type: ignore[attr-defined]

解决方法

在functional.py文件中增加indexing = 'ij',如上图

问题3

错误信息:detect.py: error: the following arguments are required: --weights

由于没有默认default,只有required=True所导致

解决方法

需要手动指定--weights参数,给定pt权重,如--weight yolov5x6.pt

问题4

错误信息:FutureWarning: is_categorical_dtype is deprecated and will be removed in a future version. Use isinstance(dtype, CategoricalDtype) instead

if pd.api.types.is_categorical_dtype(vector):

D:\Software\anaconda3\envs\ttpytorch\Lib\site-packages\seaborn\_oldcore.py:1498

is_categorical_dtype函数移除警告,使用isinstance代替

解决方法

将1498改为1499,并在顶部引入库,如下图

问题5

警告信息:D:\Software\anaconda3\envs\ttpytorch\Lib\site-packages\seaborn\_oldcore.py:1120: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead. with pd.option_context('mode.use_inf_as_na', True):

解决方法

问题6

在train.py运行时候的警告信息:

D:\Software\anaconda3\envs\ttpytorch\Lib\site-packages\seaborn\_oldcore.py:1121: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.

 with pd.option_context('mode.use_inf_as_na', True):

还是一些废弃的操作导致的,会报警告,但是不影响运行

解决方法

暂时没有找到消除该警告的方法

V7 代码调试过程中存在的问题和解决办法

部署过程

下载yolov7源码,用pycharm打开,按requirement.txt要求安装依赖库。

安装好依赖库,调整detect.py路径,detect.py可以用于检测。

问题合集

问题1

把yolov5和yolov7放在同一个虚拟环境下,由于yolov7对numpy版本有要求限制,出现警示信息。

删除原先1.26.0版本的numpy后,想要安装指定版本的numpy,出现新问题。从镜像源安装指定版本的numpy失败。

错误信息:Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ Build Tools

按这个链接并没有奏效【精选】Microsoft Visual C++ 14.0 is required._哈哈哈,冲冲冲的博客-CSDN博客,不过确实是同一个问题,最后还是老实安装VS及其C++工具解决的

解决方法

删除(pip uninstall)原先版本的numpy(1.26.0),安装在requirement.txt指定范围内的numpy版本

安装VS,选中使用C++的开发,在单个组件中,选中适用于C++的生成工具

安装好C++工具后,安装numpy 1.20.0仍然有问题,发现是python3.11无法支持numpy 1.20.0,于是安装了1.23.0

但是安装成功后,发现有些库无法与numpy1.23.0适配,所以只好卸载1.23.0版的numpy,下载1.23.5版本的numpy

终于tm装好适配版本的numpy了

问题2

错误信息:'git' �����ڲ����ⲿ���Ҳ���ǿ����еij���

���������ļ���

Traceback (most recent call last):

  File "D:\Code\Yolo\yolov7-main\utils\google_utils.py", line 26, in attempt_download

    assets = [x['name'] for x in response['assets']]  # release assets

                                 ~~~~~~~~^^^^^^^^^^

KeyError: 'assets'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "D:\Code\Yolo\yolov7-main\detect.py", line 196, in <module>

    detect()

  File "D:\Code\Yolo\yolov7-main\detect.py", line 34, in detect

    model = attempt_load(weights, map_location=device)  # load FP32 model

            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "D:\Code\Yolo\yolov7-main\models\experimental.py", line 251, in attempt_load

    attempt_download(w)

  File "D:\Code\Yolo\yolov7-main\utils\google_utils.py", line 31, in attempt_download

    tag = subprocess.check_output('git tag', shell=True).decode().split()[-1]

          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "D:\Software\anaconda3\envs\ttpytorch\Lib\subprocess.py", line 466, in check_output

    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,

 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "D:\Software\anaconda3\envs\ttpytorch\Lib\subprocess.py", line 571, in run

    raise CalledProcessError(retcode, process.args,

subprocess.CalledProcessError: Command 'git tag' returned non-zero exit status 1.

解决方法

YOLOv5——报错解决:subprocess.CalledProcessError: Command ‘git tag‘ returned non-zero exit status 1._William.csj的博客-CSDN博客

把True改为False后继续报错

这两种方法均可解决上述问题,但是都会爆下面越界的错误

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 14: invalid start byte 错误解决办法-CSDN博客

这个是decode("utf8","ignore")

YOLOv5——报错解决:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb2 in position 6:invalidstartbyte_William.csj的博客-CSDN博客

这个是将将原来的decode()改成decode(encoding = ‘gbk’)

把decode(),改为decode(encoding = 'gbk'),继续报错

问题2究极解决方案

手动到github下载yolov7的权重文件,把它拉到yolov7项目文件下

即可解决问题2的所有问题,False也不用改为True,decode()也不需要更改。试了下,pt文件用绝对路径或者相对路径都可以。

问题3

Key Error: assets

训练时,git tag报错,发现是代码中原先需要访问的url失效了,更改url

解决方法

两个方法,选取了第一个

1.更改url,由于github库管理出现问题,原来的url失效了,所以更改该部分url。

2.手动下载coco数据集,添加到项目文件中

问题4

训练时,显示KeyError,发现是使用的yaml缺少参数,往yaml添加参数

解决方法

添加参数

问题5

错误信息:爆内存了

爆内存的解决方案:pytorch: 四种方法解决RuntimeError: CUDA out of memory. Tried to allocate ... MiB_runtimeerror: hip out of memory. tried to allocate_xiyou__的博客-CSDN博客(我这边使用法一,调节batch-size来解决了这个问题)

使用yolov7作为预训练权重,用coco128训练集来训练(在scratch.yaml里头添加了参数信息),训练时显示爆内存了。

解决方法

调小batch-size为4,指定使用cuda 0来训练。

可以使用coco128数据集成功做训练了。

coco数据集及其label下载地址:COCO数据集及txt格式Label文件~_coco_label.txt_愿望是当打工人的博客-CSDN博客

V8 代码调试过程中存在的问题和解决办法

部署过程

1.到github下载项目zip文件,解压文件

2.手动下载权重文件.pt

3.安装依赖库

4.调试bug

部署后推理测试&训练测试

对单张图片做推理测试:

指令:yolo task=detect mode=predict model=yolov8s.pt conf=0.25 source='D:\Code\Yolo\yolov8\ultralytics-main\ultralytics\assets\bus.jpg',效果如下图

使用自己创建的数据集训练模型

指令:yolo task=detect mode=train model=D:/Code/Yolo/yolov8/ultralytics-main/yolov8s.pt  data=D:/Code/Yolo/yolov8/ultralytics-main/datasets/mydata.yaml epochs=50 imgsz=640

问题合集

问题1

类型错误

解决方法

把indexing=ij'删除'

问题2

安装依赖库失败

原因是没有进入到项目下,犯了低级错误

解决方法

cd进入,然后再下载依赖库

问题3

使用指令做训练时,同报问题1(类型)的错误

训练时使用的指令如下:yolo task=detect mode=train model=D:/Code/Yolo/yolov8/ultralytics-main/yolov8s.pt  data=D:/Code/Yolo/yolov8/ultralytics-main/datasets/mydata.yaml epochs=50 imgsz=640

解决方法

直接删除报错部分的indexing='ij'即可解决

问题4

训练完后,权重等文件不见了。

解决方案

暂时没有找到解决方法

使用labelimg来打标签,制作自己的训练集

标注格式

labelimg的标注分为两种模式,VOC和YOLO,其实还有一种,两种模式生成的标注文件分别为.xml和.txt。

部署过程(主要是在Debug各种小毛病)

问题:使用anaconda powershell,发现打不开labelimg

解决方法:QObject::moveToThread: Current thread is not the object`s thread. Cannot move to target thread-CSDN博客

安装pyqt,尝试了一下,安装pyqt无法解决,选择卸载labelimg,重装的方法。

清华镜像:pip install xxx -i Simple Index

重装labelimg还是不行,报相同错误,尝试下面的解决方案

[已解决]报错: qt.qpa.plugin: Could not load the Qt platform plugin “windows“ in ““ even though it ...-CSDN博客

该方法还是不行,重装以下四个库

重装4个库后,labelimg可以使用了,但是一画框就会卡住。

修改labelimg文件尝试解决,按下列教程中的方法2来尝试解决。

labelimg 打框就闪退 TypeError: setValue(self, int): argument 1 has unexpected type ‘float‘-CSDN博客

经过修改labelimg.py源文件,labelimg不闪退了,但是打框闪退。

修改canvas.py D:\Software\anaconda3\envs\ttpytorch\Lib\site-packages\libs

修改完canvas和labelimg两个文件后,labelimg可以正常使用了。

突发:这labelimg非常的奇怪,有时还是会闪退,考虑可能是python版本与labelimg的兼容性问题所导致,原先ttpytorch环境下python版本是3.11,决定新建一个conda环境专门安装labelimg

使用conda新建一个虚拟环境labelimg-env,专门用来下载labelimg工具,使用python3.9.16的版本。在新虚拟环境下,安装labelimg,非常流畅。

制作数据集

制作自己的训练集的一些步骤

1.确保images和labels在同一级目录下

2.images底下包括3个子目录,train、test、val,对应labels底下3个子目录,train、test、val

使用自己制作的小数据集来训练模型、做预测

1.在data下,新建yaml文件

2.修改所使用的预训练模型当中的nc类别,和自己数据集的样本类别相同

(对该图的一个修改,这边“更改模型权重文件”说法不正确,应该叫修改模型配置文件中的nc类别)。

至此,即可使用自己的数据集做训练。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值