模型脚本修改:然而这个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的参数
完成上述修改就行了,我已经跑起来训练了,莫得太大问题,至于测试等我跑完训练再看看