ssd+pytorch1.2+visdrone

用的https://github.com/amdegroot/ssd.pytorch这一版本。

复现过程遇到的问题:

1、遇到CUDA error: out of memory

     gpu内存不够,用 watch -n 2 nvidia-smi 监控一下gpu使用情况,2表示的是2秒刷新一下,然后指定一下空着的卡,

用这个以下命令,在train.py中指定一下空着的文件。

import os

os.environ["CUDA_VISIBLE_DEVICES"] = "1,2,5"

2、遇到 IndexError: The shape of the mask [32, 8732] at index 0does not match the shape of the indexed tensor [279424, 1] at index 0

这是因为新版pytorch,不能用data[0]这么取数值了。按照下图说的操作过程进行修改。

ssd+pytorch1.2+visdrone_第1张图片

此外,下面的item也要进行更改。

ssd+pytorch1.2+visdrone_第2张图片

3、遇到StopIteration就退出循环,这个问题出现的原因是dataloader导入数据之后经过了一轮的迭代,再次导入的时候发现没有数据了,也就是iterable完成之后,触发了StopIteration,然后跳出了循环。既然再次导入的时候没有数据了,那我们就再用一个dataloader就行了。

将train.py(165行)的images, targets = next(batch_iterator)更改成:

try:

images, targets = next(batch_iterator)

except StopIteration:

batch_iterator = iter(data_loader)

images, targets = next(batch_iterator)

参考https://blog.csdn.net/dingkm666/article/details/88775428

然后,下一步换成另外的数据进行重新训练。

首先将visdrone数据集对应的txt改成voc里的xml,

文件夹存放的形式也改成对应voc07的子文件样式,所以标注文件都在一个文件夹里。另外ssd原始训练是将voc07和voc12一起加起来训练的,所以另外数据文件夹里有个空的voc12子文件夹,修改config.py和voc0712文件。

ssd+pytorch1.2+visdrone_第3张图片

ssd+pytorch1.2+visdrone_第4张图片

4、后来遇到索引出错,IndexError: too many indices for array

ssd+pytorch1.2+visdrone_第5张图片

参考:https://github.com/amdegroot/ssd.pytorch/issues/224,

查出对应错的文件并删除。都是标注了difficult,如果difficult标为1,说明overlap小于50%便不参加训练,也就是没有正样本目标,所以报错。最后将四个文件删除。解决了问题。

5、出现loss为nan的情况,并且降低学习率不能解决问题,还会导致服务器卡死,不能接着运行程序。

ssd+pytorch1.2+visdrone_第6张图片

经过了一星期的查找原因,发现是原本数据有脏数据造成的,所以要检查一下数据。参考

https://blog.csdn.net/CZW199418/article/details/104611230

这里面对原始代码做了更改,原始代码并没有检查数据中是否存在xmin >= xmax or ymin >= ymax.的问题。

更改如下:

ssd+pytorch1.2+visdrone_第7张图片

最后找出了以下几个脏数据,主要原因是用官方数据的txt文件,发现数据中有高是1的情况,在转换为VOC的Ymin和Ymax的时候,因为坐标是在0开始标的,会对Ymin,Ymax进行减1操作,最后会导致voc里的Ymin=Ymax。,

ssd+pytorch1.2+visdrone_第8张图片

这也会引起下面的问题出现:

RuntimeError: cannot perform reduction function max on tensor with no elements because the operation

然后删除对应xml文件,和jpg图片,以及txt里的文件名。

对TXT上面的文件名删除,可以用vim命令。

1、vim 那个txt

2、输入/ 可以查找

3、回车就到了那一行

4、dd 可以删除光标所在那一行

5、:wq可以保存退出文件、:w可以保存

最后终于正常运行!

 

你可能感兴趣的:(PYTHON,pytorch)