SSD pytorch 运行debug

  • 出于某些原因需要在一个数据集上测试SSD


  • 数据集处理:
  • 之前为了在faster-rcnn上测试,数据集标注已经用脚本生成为coco的json格式,而这个repos虽然支持coco的训练却不支持coco的测试,想来想去还是把数据集变成voc格式比较方便,coco转voc网上脚本很多,我随便找了个:
    https://blog.csdn.net/minstyrain/article/details/79572155亲测有效,只有路径处理和类别处理需要根据自己的需要做些修改,此外第100行和第101行可以注释掉。

  • 模型脚本修改:然而这个repos的bug实在有点多,即使按上面提到的blog进行修改,还是有其它需要修改的地方,(注意,是先按上面blog进行修改,然后再按下面的进行修改,才可以跑得起来)如下:
  • 由于用脚本生成的voc数据集的文件夹名字是image而不是jpegimage,所以data/voc0712.py文件中VOCDetection类的init函数中self._imgpath要改为self._imgpath = osp.join('%s', 'images', '%s.jpg')
  • 各种路径和类别都要修改,我可能记不全,有遗漏,跑的时候出现bug再改就行了,总的来说不算太麻烦:
    • voc0712.py中的VOC_CLASSES和VOC_ROOT
    • config.py中的voc和HOME,HOME要改为你repos的根目录的地址,如:/home/graduate/wjh/ssd/ssd.pytorch
    • 此外即使你跑VOC,coco部分的路径也需要修改,因为这代码特别坑的是一些os.join之类的并不是放在函数内部而是放在外面,所以即使你没有调用到coco的类,只要用到了这个文件,就会报路径错误,具体是哪里我忘了,报错的时候根据报错改就行了,不难,有一个就是会找不到coco_label.txt,其实你没有跑coco数据集但他还是会这样,你就把这个txt放到那个位置去就行了也不是什么问题
  • 接下来是巨坑的模型训练部分,有两个bug:
    • 一个是layers/modules/multibox_loss.py的第97行,loss_c[pos] = 0这一行会报错,因为loss_c是n x 1的长条状的tensor而pos是a x b的长方形tensor,这行的本意是把loss_c当成长方形tensor,和pos形状一样,然后loss_c在pos等于1的位置的元素置为0,但是形状不匹配会出错,所以在这一行前面加上一行loss_c = loss_c.view_as(pos)
    • 一个是train.py里有一行:images, targets = next(batch_iterator),这个是错误用法,next(batch_iterator)在遍历完一次数据后就会停止,并不会像dataloader那样不停地迭代重新开始,所以要把这一句改成下面这一段:
		try:
            images, targets = next(batch_iterator)
        except StopIteration:
            batch_iterator = iter(data_loader)
            images, targets = next(batch_iterator)
  • 还有一个不算错,就是模型的学习率太高了,最好还是调低点不然跑着跑着就爆掉了,在train.py的43行附近,有一个lr的参数

  • 完成上述修改就行了,我已经跑起来训练了,莫得太大问题,至于测试等我跑完训练再看看
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值