yolov5训练自己的数据集-问题

1.问题:

第一个错误(忘记截图了): model.yaml 80 with 221 。
原因:在修改数据集类别时,只修改了xxx(voc).yaml,忘记修改yolo.py中的nc类别数了。
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
修改:在这里插入图片描述

2. 问题::No labels in …/train.cache. Can not train without labels

assert nf > 0 or not augment, f'{prefix}No labels in {cache_path}. Can not train without labels. See {help_url}'
AssertionError: train: No labels in ../TSD/data/train.cache. Can not train without labels.

在这里插入图片描述

原因:

数据集格式与yolov5的格式不同,导致yolov5无法读取到图像以及标签。yolov5的数据集格式为.txt,而我自己的数据集只有.xml格式(Annotation)和.jpg格式(train、test),故出现无法读取图像,无法读取标签。

解决方式:

由于yolov5的数据集格式为.txt,而我自己的数据集只有.xml格式(Annotation)和.jpg格式(train、test),因此是很明显的需要将我自己的VOC数据集格式(.xml)转yolov5数据集格式(.txt)。
转数据集格式请参考:https://blog.csdn.net/llh_1178/article/details/114528795
修改数据集格式后,修改train.py、tsd.yaml、yolov5s.yaml中相关路径,其中tsd.yaml中train和val标签路径即为转数据集生成的文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于第一次转数据集格式,python语言之前也没有接触过,所以为了把转数据集代码看懂个大概,我开始学习python基础语言结构,到最后花了四天时间,终于解决了。
在这里插入图片描述

3.问题:Images sizes do not match. This will causes images to be display incorrectly in the UI

在这里插入图片描述

原因:图像大小不匹配。

解决方式:查了很多资料,包括github上作者的回复,表达的意思都是图像大小不匹配问题不影响网络的测试结果,所以可以不用管。

4.问题:ValueError: in_channels must be divisible by groups

在这里插入图片描述

原因:找到相关代码的位置如下,即要满足 :in_channels % groups = 0

在这里插入图片描述

解决方式:看看此时的in_channels输入通道数和groups数是多少,修改这两着的数值。

groups:从输入通道到输出通道阻塞连接数,通道分组的参数,输入通道数、输出通道数必须同时满足被groups整除。
如果输出通道为6,输入通道也为6,假设groups为3,卷积核为1x1;则卷积核的shape为2x1x1,即把输入通道分成了3份;那么卷积核的个数呢?之前是由输出通道决定的,这里也一样,输出通道为6,那么就有6个卷积核。这里实际是将卷积核也平分为groups份,在groups份特征图上计算,以输入输出都为6为例,每个2* h *w的特征图子层就有且仅有2个卷积核,最后相加恰好是6,这里可以起到的作用是不同通道分别计算特征

5.问题:RuntimeError: torch.cat(): Sizes of tensors must match except in dimension 1. Got 128 and 129 in dimension 2 (The offending index is 1)

原因:

解决方式:

6.RuntimeError: Given groups=1, weight of size [32, 64, 1, 1], expected input[1, 96, 128, 128] to have 64 channels, but got 96 channels instead

原因:明显是数据读入的通道数不对,应该是64 通道,但是这里读入的是 96通道。

我的代码出现这个问题是因为我的input是batchsizesizesizechannels,而model所需要的输入是batchsizechannelssizesize的形式,因此只需要 img_new= np.transpose(img_old, (0,3,1,2)) 即可。

解决方式:

7.问题:_pickle.UnpicklingError: STACK_GLOBAL requires str

原因:我将原来训练过的模型重新复制到另外一个地方执行,并改了文件相关部分,造成现在无法使用之前训练数据集标签生成的缓冲文件。

解决方式:删除数据集中标签文件生成的缓冲文件,即数据集文件/labels/train.cache和val.cache。

8.问题:wandb: Network error (ConnectTimeout), entering retry loop.

网络epoch次数训练结束,下一步为全部类的总P、R等信息的时候光标开始一直在闪,不进行下一步,之后便开始显示网络错误(连接超时)进入循环重试
在这里插入图片描述在这里插入图片描述

原因:

解决方式:

  1. wandb/local中说是防火墙或网络配置的问题,需要打开防火墙或以其他方式配置自己的网络以允许来自其他计算机的连接。
  2. wandb/wandb中有人将wandb的版本升级以后解决了问题。
  3. wandb/#2719则将网络断开,使用离线模式训练,然后再同步生成的文件。
  4. wandb/故障排查中运行update-ca-certificates升级SLL证书;或在离线模式下训练;或运行**W&B Private Hosting**

参考

  1. 使用yolov5时出现“assertionerror:no labels found in //*/JPEGImages.cache can not train without labels”问题
  2. wandb: Network error (ConnectionError), entering retry loop.
  3. wandb/Troubleshooting
  4. yolov5关闭wandb

猜你喜欢

转载自blog.csdn.net/qq_40992227/article/details/118580907