SSD-pytorch训练及检测遇到的问题

这两天下载了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成功的图片,接下来还要去研究一下背后的理论,小伙伴有什么问题欢迎一起交流~

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值