代码:https://github.com/amdegroot/ssd.pytorch
复现的过程按照github的步骤进行即可。
下载数据
由于我之前下载过voc0712、coco的数据,不需要再运行sh下载,按照sh指示建立相关文件夹。将sh所需下载的文件放进去,并将3个sh文件部分代码进行注释:
再运行sh,对文件进行操作即可。
训练之前,需要修改代码
1、在multibox_loss.py中调换97,98两行,改成如下:
loss_c = loss_c.view(num, -1) # The line added
loss_c[pos] = 0 # filter out pos boxes for now
2、在multibox_loss.py中116行改为如下:
N = num_pos.data.sum().float()
3、train.py中169行改为:
try:
images, targets = next(batch_iterator)
except StopIteration:
batch_iterator = iter(data_loader)
images, targets = next(batch_iterator)
4、train.py中192,193行改为:
loc_loss += loss_l.data
conf_loss += loss_c.data
5、train.py中199行改为:
print('iter ' + repr(iteration) + ' || Loss: %.4f ||' % (loss.data), end=' ')
6、train.py中45行改为:
训练时loss出现一直nan会导致训练出来的模型检测不出来任何东西,只需降低学习率即可。
parser.add_argument('--lr', '--learning-rate', default=1e-4, type=float, # 1e-3
help='initial learning rate')
差不多了,可以训练了,先打开Visdom。
python -m visdom.server
python train.py
结果显示:
使用训练的网络进行评估:
SSD300受VOC0712(最新的PyTorch权重)训练: https://s3.amazonaws.com/amdegroot-models/ssd300_mAP_77.43_v2.pth
将ssd300_mAP_77.43_v2.pth下载到weights文件夹下。
然后
python eval.py
当然,如果你自己训练好了的模型,更改eval.py中39行加载的权重文件,在进行评估。
经过120000轮训练,最终得到VOC.pth的权重文件,我的第一次训练模型评估结果:
显然不如人家已给出的ssd300_mAP_77.43_v2.pth表现好。。。