您的位置:首页 > Web前端

用 caffe做图像分割实验时,loss值很诡异

2016-06-22 16:12 357 查看
最近在做图像分割的实验,使用的是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 ,发现

const int label_value = static_cast<int>(label[i * inner_num_ + j]);


这么算的话,岂不是所有label值都被作成0了吗?!

所以这个 scale是错误的值,不能用 1/256.0。那么该用多少呢?只要让label为0和1就可以了!所以我设置的是 1/128.

总结:

训练深度学习网络时,发现异常需要特别注意。虽然这些异常不见得会导致程序错误,但是可能会让你的训练一两个星期的模型是错误的!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  caffe