来看一下ssd300与ssd512的cfg文件对比
# SSD300 CONFIGS
# voc = {
# #'num_classes': 21,
# 'num_classes': 7,
# 'lr_steps': (80000, 100000, 120000),
# 'max_iter': 180000,
# #'max_iter': 10000,
# 'feature_maps': [38, 19, 10, 5, 3, 1],
# 'min_dim': 300,
# 'steps': [8, 16, 32, 64, 100, 300],
# 'min_sizes': [30, 60, 111, 162, 213, 264],
# 'max_sizes': [60, 111, 162, 213, 264, 315],
# 'aspect_ratios': [[2], [2, 3], [2, 3], [2, 3], [2], [2]],
# 'variance': [0.1, 0.2],
# 'clip': True,
# 'name': 'VOC',
# }
# SSD512 CONFIGS
voc = {
#'num_classes': 21,
'num_classes': 7,
'lr_steps': (80000, 100000, 120000),
'max_iter': 180000,
#'max_iter': 10000,
'feature_maps': [64, 32, 16, 8, 4, 2, 1],
'min_dim': 512,
'steps': [8, 16, 32, 64, 128, 256, 512],
'min_sizes': [35.84, 76.8, 153.6, 230.4, 307.2, 384.0, 460.0],
'max_sizes': [76.8, 153.6, 230.4, 307.2, 384.0, 460.8, 537.6],
'aspect_ratios': [[2,3], [2, 3], [2, 3], [2, 3],[2, 3], [2], [2]],
'variance': [0.1, 0.2],
'clip': True,
'name': 'VOC',
}
def build_ssd(phase, size=512, num_classes=4):
if phase != "test" and phase != "train":
print("ERROR: Phase: " + phase + " not recognized")
return
# if size != 300:
# print("ERROR: You specified size " + repr(size) + ". However, " +
# "currently only SSD300 (size=300) is supported!")
# return
base_, extras_, head_ = multibox(ResNet(BasicBlock, [2,2,2,2], 3),
add_extras(extras[str(size)], 512),
mbox[str(size)], num_classes)
return SSD(phase, size, base_, extras_, head_, num_classes)
修改head_和extras_,
extras = {
'300': [256, 'S', 512, 128, 256, 128, 256],
'512': [256, 'S', 512, 128, 256, 128, 256, 'S', 256, 'S', 256],
}
mbox = {
'300': [4, 6, 6, 6, 4, 4], # number of boxes per feature map location
'512': [4, 6, 6, 6, 6, 4, 4],
}
参考文献:
https://blog.csdn.net/github_36923418/article/details/85226306