pytorch-ssd
pytorch-ssd copied to clipboard
更低的loss不能更好的检测?
有两类:一类是图表, 一类是公式.数据集中公式比图表多一些. (1)数据集的处理:数据集很少,只有几百张图(train503张,测试150左右) 原始图片大小各异, 我先做了补白(取长边补),保证是数据集是长宽相等的图片,再做了标注. (2) 训练的命令: %run train_ssd.py --dataset_type voc --datasets ./data --net "vgg16-ssd" --base_net models/vgg16_reducedfc.pth --batch_size 6 --freeze_base_net --num_epochs 300 --lr 0.001 (用了vgg16_reducedfc.pth的与训练系数, basenet freeze了其他层的系数参与更新) 其他修改: (1) image_size: 900*900 (每张图片在送入网络之前都会强制resize到这个尺寸,我理解xml的标注的ground truth的box信息应该会根据resize做调整,如果不是这样恐怕就不对了) (2) 设置的预选框做了修改,数量比较多. vgg_config的修改: specs = [ SSDSpec(113, 8, SSDBoxSizes(16, 24, 90,180), [2]), SSDSpec(56, 16, SSDBoxSizes(24, 32, 180,330), [2, 3]), SSDSpec(28, 32, SSDBoxSizes(32, 40, 330,480), [2, 3]), SSDSpec(14, 64, SSDBoxSizes(40, 48, 480,630), [2, 3]), SSDSpec(12, 75, SSDBoxSizes(48, 52, 630,780), [2]), SSDSpec(10, 90, SSDBoxSizes(52, 60, 780,900), [2]) ] 不是用的标准的min max size 在box_utils也做了相应修改,代码较多就不贴了.
训练的loss情况是: train loss 和 val loss都正常降低,而且相差也不大(本以为在我的预期), 到比较稳定的时候停止了训练(train loss 和 val loss的变化一直是差不多的), 从15左右降到4.7左右,然而我发现用更低的loss(4.7左右)的模型去检测新的图片,甚至在训练集上做检测时:效果都不如稍微高一些的loss模型(6左右), 更低的loss模型出现的问题是: 公式几乎检测不到, 只有图表可以检测到. 这让我很费解的, 求大神帮忙...
@HongChow 训练集和新的图片集里含公式的图片或区域差别比较大?