这两天下载了Github上一个关于SSD目标检测的项目,训练和测试过程中遇到了一些问题,在此记录一下:
项目地址: https://github.com/amdegroot/ssd.pytorch
1 关于pip install
在使用 pip install xxx 时,有时可能会出现 ‘Could not fetch URL
https://pypi.python.org’的问题。
解决方法:输入 pip install xxx -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
其中 xxx 就是你想要安装的库,如numpy。
2 GPU和CPU
项目源代码写的是GPU版本,用到了CUDA。如果你没有GPU,则需要将代码转化为CPU版本。这大致需要两个步骤:
(1)将所有的torch.load(xxx),改为torch.load(xxx, map_location=‘cpu’)
(2)去除掉所有张量后面的.cuda(),类似于下图,注释掉的是源代码,添加了后面不加.cuda()的代码,ctrl+F寻找cuda即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200209125721823.png
3 索引问题
IndexError: The shape of the mask [32, 8732] at index 0does not match
the shape of the indexed tensor [279424, 1] at index 0
如果出现类似于以上的索引错误,需要将layers/modules/multibox_loss.py 的代码按照下图修改即可。注释掉的是源代码,下面的是新加的,即交换两行代码的顺序即可。
解决了这个问题,又会出现一个新问题:
IndexError: invalid index of a 0-dim tensor. Use tensor.item() to
convert a 0-dim tensor to a Python number
解决方法:将错误行的 .data[0] 修改为 .item() 即可
# loc_loss += loss_l.data[0]
# conf_loss += loss_c.data[0]
loc_loss += loss_l.item()
conf_loss += loss_c.item()
4 关于数据集
项目中提供了三个可以下载数据集的脚本文件(.sh),在 data/scripts目录下。使用 sh xxx.sh 即可实现数据集 xxx 的下载,解压,删除压缩包等一系列操作。
解压后的文件,如果是Mac,Linux这类系统,默认存放在~/data目录下。我的数据集文件夹结构如下:
~/data
|-- VOCdevkit
|-- VOC2007
|-- VOC2012
|-- coco
5 关于训练SSD
训练时有时在迭代几百轮后,Loss成为nan,发生了梯度爆炸。这时适当减小学习率。在train.py文件的命令行参数里有lr的定义,减小default值即可。
最后放一张测试demo成功的图片,接下来还要去研究一下背后的理论,小伙伴有什么问题欢迎一起交流~