代码下载地址
型号 | 地址 |
yolov5-5.0 | |
yolov7 | |
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.
解决方法
把True改为False后继续报错
这两种方法均可解决上述问题,但是都会爆下面越界的错误
这个是decode("utf8","ignore")
这个是将将原来的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
安装pyqt,尝试了一下,安装pyqt无法解决,选择卸载labelimg,重装的方法。
清华镜像:pip install xxx -i Simple Index
重装labelimg还是不行,报相同错误,尝试下面的解决方案
该方法还是不行,重装以下四个库
重装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类别)。
至此,即可使用自己的数据集做训练。