最近在做图像分割的实验,使用的是CRF as RNN的网络,但是训练起来有些诡异,loss降低得飞快,不一会儿就降一半。然后一直到个位数时,我觉得应该可以test了。然后使用训练好了的模型,用python接口加载,输出结果一看,全是黑的,没有分割。
仔细想想,这个loss值这么低,不应该会这样阿!难道是loss计算错了?
然后再想想最后loss层的输入,一个是网络的最后计算结果。于是在test中把最后一层输出来,没有分割信息。把倒数第二层输出,也是一样。这个说明网络并没有学到分割这种特征,为什么呢?
输入的图像应该是不可能错误的。那就只有一种可能了,label有问题。
确实label有问题。做分割时,label就是一幅分割后的图像。于是把这个图像加载进来作为label,输入最后的loss层。但是我们使用了
transform_param {
scale: 0.00390625
}
这个值是 1/256.0 ,那label图中是0-255,所以,这样的输入转换后全部是0-255/256.
打开 softmax_loss_layer.cpp ,发现