caffe train error


原文链接: caffe train error

[] SSD训练出错解决:math_functions.cpp:250 Check failed: a (=b (0 vs -1.19209e-007)

Check failed: a <= b (0 vs. -1.19209e-07)

在进入Caffe-SSD的训练环节时,总是出现如下报错:

math_functions.cpp:250] Check failed: a <= b <0 vs -1.19209e-007>

在谷歌了很多方法后,才解决了问题,目前的最好办法只能规避这个问题,如下:

1.找到math_functions.cpp,并打开第一个路径为~/caffe/src/caffe/util的math_functions.cpp

vi src/caffe/util/math_functions.cpp

2.找到第250行出错的地方,双斜杠屏蔽

template <typename Dtype>
void caffe_rng_uniform(const int n, const Dtype a, const Dtype b, Dtype* r) {
  CHECK_GE(n, 0);
  CHECK(r);
  // CHECK_LE(a, b);
  boost::uniform_real<Dtype> random_distribution(a, caffe_nextafter<Dtype>(b));
  boost::variate_generator<caffe::rng_t*, boost::uniform_real<Dtype> >
      variate_generator(caffe_rng(), random_distribution);
  for (int i = 0; i < n; ++i) {
    r[i] = variate_generator();
  }
}

src/caffe/util/math_functions.cpp

3.重新在caffe路径下make py

这样之后,就可进行训练了。

另外,还有其他的方法,比如在math_functions.cpp的250行前:

我这样尝试没有成功
————————————————
版权声明:本文为CSDN博主「house_s」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/house_s/article/details/82502938

cudnn_conv_layer.cpp:53] Check failed: status == CUDNN_STATUS_SUCCESS (4 vs. 0) CUDNN_STATUS_INTERNAL_ERROR

解决方式 :修改 train.prototxt deploy.prototxt

取消 #engine: CAFFE --》 engine: CAFFE
sed -i 's/#engine:/engine:/g' train.prototxt
sed -i 's/#engine:/engine:/g' deploy.prototxt

2、按照1修改后,训练,但读到conv5-3还是报同样的错

(1)搜索资料,发现这个错的原因,还有可能是内存溢出

因此,怀疑是否是内存溢出问题,将batch size从1000改成256,再改成128,再改成10都不行

(2)确定caffe编译时是支持cudnn的,因此,将1中的engine:caffe恢复,再将batch size修改下,训练成功。
————————————————
版权声明:本文为CSDN博主「有石为玉」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41770169/article/details/87113052

问题描述:训练过程中出现blocking_queue.cpp:50] Data layer prefetch queue empty

原因:SSD训练慢的原因是 在生成LMDB文件时没有将图片转化为300*300分辨率大小 所以在训练网络时需要转换图片分辨率 这样就造成了数据输入层预存队列为空 GPU一直在等待数据中 所以造成了训练异常缓慢。(图片resize是在CPU上运行的,CPU数据读入慢于GPU计算,导致GPU处于空闲,使得计算速度下降,迭代时间间隔扩大。)

解决办法:找到文件  /data/VOC0712/create_data.sh ,将width=0改为width=300,将height=0改为height=300.

ln -s /data/opendata/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb trainval_lmdb
/home/ubuntu/caffe/models/weiliu89/build/tools/caffe train --solver=solver_train.prototxt
————————————————
版权声明:本文为CSDN博主「ready_xiao」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41057320/article/details/81080419

training error: Data layer prefetch queue empty

SSD 代码里面有bug, 参考 training error: Data layer prefetch queue empty · Issue https://github.com/weiliu89/caffe/issues/863 #863 ·

weiliu89/caffe如果注释掉 CHECK_LE(a, b) 会出现Data layer prefetch queue empty不注释CHECK_LE(a, b) 会出现错误 a可能大于b
template
void caffe_rng_uniform(const int n, const Dtype a, const Dtype b, Dtype* r) {
CHECK_GE(n, 0);
CHECK(r);
CHECK_LE(a, b);
boost::uniform_real random_distribution(a, caffe_nextafter(b));
boost::variate_generator >

  variate_generator(caffe_rng(), random_distribution);

for (int i = 0; i < n; ++i) {

r[i] = variate_generator();

}
}

正确的解决方案

in src/caffe/util/sampler.cpp

@@ -106,6 +106,12 @@ void SampleBBox(const Sampler& sampler, NormalizedBBox* sampled_bbox) {

  float bbox_width = scale * sqrt(aspect_ratio);
  float bbox_height = scale / sqrt(aspect_ratio);
106 行
+  // Make sure bbox_width & bbox_height <= 1.0
+  // When 0.f > 1 - bbox_width caffe_rng_uniform will get
+  // a error on some devices
bbox_width = bbox_width >= 1.0? 1.0f : bbox_width;
bbox_height = bbox_height >= 1.0? 1.0f : bbox_height;

  // Figure out top left coordinates.
  float w_off, h_off;
  caffe_rng_uniform(1, 0.f, 1 - bbox_width, &w_off);
`