用 caffe做图像分割实验时,loss值很诡异
2016-06-22 16:12
357 查看
最近在做图像分割的实验,使用的是CRF as RNN的网络,但是训练起来有些诡异,loss降低得飞快,不一会儿就降一半。然后一直到个位数时,我觉得应该可以test了。然后使用训练好了的模型,用python接口加载,输出结果一看,全是黑的,没有分割。
仔细想想,这个loss值这么低,不应该会这样阿!难道是loss计算错了?
然后再想想最后loss层的输入,一个是网络的最后计算结果。于是在test中把最后一层输出来,没有分割信息。把倒数第二层输出,也是一样。这个说明网络并没有学到分割这种特征,为什么呢?
输入的图像应该是不可能错误的。那就只有一种可能了,label有问题。
确实label有问题。做分割时,label就是一幅分割后的图像。于是把这个图像加载进来作为label,输入最后的loss层。但是我们使用了
这个值是 1/256.0 ,那label图中是0-255,所以,这样的输入转换后全部是0-255/256.
打开 softmax_loss_layer.cpp ,发现
这么算的话,岂不是所有label值都被作成0了吗?!
所以这个 scale是错误的值,不能用 1/256.0。那么该用多少呢?只要让label为0和1就可以了!所以我设置的是 1/128.
总结:
训练深度学习网络时,发现异常需要特别注意。虽然这些异常不见得会导致程序错误,但是可能会让你的训练一两个星期的模型是错误的!
仔细想想,这个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.
总结:
训练深度学习网络时,发现异常需要特别注意。虽然这些异常不见得会导致程序错误,但是可能会让你的训练一两个星期的模型是错误的!
相关文章推荐
- Some Notes of Caffe Installation
- Some Notes of Python Interfaces Pycaffe (Caffe)
- TensorFlow人工智能引擎入门教程之十二 Caffe转换tensorflow并 跨平台调用
- TensorFlow人工智能引擎入门教程所有目录
- 安装caffe过程记录
- py-faster-rcnn训练笔记(ubuntu14.04+cuda7.5+cuDNNv3+Python2.7)
- 准确率, 召回率,mAP
- ubuntu 14.04上配置无GPU的Caffe(A卡机适用)
- caffe term: epoch, itr
- caffe+ubuntu14.04
- caffe中的iteration,batch_size, epochs理解
- Mac下Caffe安装-无GPU
- caffe solver.prototxt文件
- caffe模型的使用
- error :No module named google.protobuf.internal
- Extract CNN features using Caffe
- 配置Caffe+VS2013+CUDA 6.5+Windows 8.1 64位系统
- Caffe 深度学习框架及AlexNet结构
- AlexNet 结构学习
- 学习笔记:Caffe上LeNet模型理解