caffe-ssd安装问题解决

1.Check failed: a <= b <0 vs -1.19209e-007>

网上办法是注释掉 CHECK_LE(a, b),但是这样会出大问题。解决办法见2。

如果注释掉 CHECK_LE(a, b) 会出现Data layer prefetch queue empty

不注释CHECK_LE(a, b) 会出现错误 a可能大于b

2.训练过程中出现blocking_queue.cpp:50] Data layer prefetch queue empty

法一:找到文件 /data/VOC0712/create_data.sh ,将width=0改为width=300,将height=0改为height=300,生成数据,验证无效。https://blog.csdn.net/weixin_41057320/article/details/81080419

法二:这种问题出现通常是注释掉 CHECK_LE(a, b) 出现Data layer prefetch queue empty。导致程序出现死循环。

解决办法修改src/caffe/util/sampler.cpp,如下面修改代码所示//renew注释下,加入两个判断,使得bbox长宽不要越界。

void SampleBBox(const Sampler& sampler, NormalizedBBox* sampled_bbox) {
  // Get random scale.
  CHECK_GE(sampler.max_scale(), sampler.min_scale());
  CHECK_GT(sampler.min_scale(), 0.);
  CHECK_LE(sampler.max_scale(), 1.);
  float scale;
  caffe_rng_uniform(1, sampler.min_scale(), sampler.max_scale(), &scale);
 
  // Get random aspect ratio.
  CHECK_GE(sampler.max_aspect_ratio(), sampler.min_aspect_ratio());
  CHECK_GT(sampler.min_aspect_ratio(), 0.);
  CHECK_LT(sampler.max_aspect_ratio(), FLT_MAX);
  float aspect_ratio;
  caffe_rng_uniform(1, sampler.min_aspect_ratio(), sampler.max_aspect_ratio(),
      &aspect_ratio);
 
  aspect_ratio = std::max<float>(aspect_ratio, std::pow(scale, 2.));
  aspect_ratio = std::min<float>(aspect_ratio, 1 / std::pow(scale, 2.));
 
  // Figure out bbox dimension.
  float bbox_width = scale * sqrt(aspect_ratio);
  float bbox_height = scale / sqrt(aspect_ratio);
 
  //renew
  if(bbox_width>=1.0)
  {
    bbox_width=1.0;
  }
  if(bbox_height>=1.0)
  {
    bbox_height=1.0;
  }
 
  // Figure out top left coordinates.
  float w_off, h_off;
  caffe_rng_uniform(1, 0.f, 1 - bbox_width, &w_off);
  caffe_rng_uniform(1, 0.f, 1 - bbox_height, &h_off);
 
  sampled_bbox->set_xmin(w_off);
  sampled_bbox->set_ymin(h_off);
  sampled_bbox->set_xmax(w_off + bbox_width);
  sampled_bbox->set_ymax(h_off + bbox_height);
}

原文:https://blog.csdn.net/LuohenYJ/article/details/88416180
修改了c/c++文件,需要重新编译

make clean
make all -j16
make test -j16

3.释放GPU内存

sudo fuser -v /dev/nvidia* #查找占用GPU资源的PID
kill -9 pid #pid替换成相应的数字序号

然后再执行nvidia-smi就可以看到内存已经被释放了

4.Check failed: status == CUDNN_STATUS_SUCCESS(4 vs. 0) CUDNN_STATUS_INTERNAL_ERROR

解决办法:因为你没有permission使用cudnn引擎,命令前加 sudo即可,我是这样解决的。具体参考:https://github.com/shicai/MobileNet-Caffe/issues/3

5.关于python和sudo python的小问题解决办法

法一:
之前在搞ssd的时候没出问题,后来重装了一下系统,把它拷回来,发现出了点问题,在训练或者测试的时候,需要输入:python examples/ssd/ssd_pascal.py 或者python examples/ssd/score_ssd_coco.py,但是这时会出现这个错误:

Check failed: status == CUDNN_STATUS_SUCCESS (4 vs. 0)  
CUDNN_STATUS_INTERNAL_ERROR 

这个错误搞过caffe的都知道,没有权限问题,于是我就加上sudu,改成:

sudo python examples/ssd/ssd_pascal.py 或者
sudo python examples/ssd/score_ssd_coco.py,然而这时候又出现新的问题:
no module named caffe

这个感觉不应该啊,明明之前把pycaffe的路径放到bashrc里面啦。

后来sudo python ,打开输入import caffe 发现果然没有,no module named caffe,而pythonimport caffe就很正常。

找到这个问题的方法是:

python,import sys,sys.path,看输出的路径。

sudo python,import sys,sys.path,看输出的路径。

发现这两个并不一样。python里的有caffe的路径,而sudo python没有。

解决办法:

新建一个lujing.pth,打开,把你的caffe—python路径拷进去,比如我的:/home/zwj/Documents/ssd/caffe/python,把这个文件拷到/usr/lib/python2.7/dist-packages,重新打开终端运行sudo python examples/ssd/score_ssd_coco.py不再出问题啦。

sudo mv lujing.pth  /usr/lib/python2.7/dist-packages

法二:

python, 路径是 /home/lsz/anaconda2/bin/python2.7

直接使用: sudo python testBatchModel.py input.txt out/ , 出现没有caffe包的错误。

是因为, sudo python 调用的是 /user/local/bin/python , 两者调用的不是同一个python解释器。

如果使用: sudo /home/lsz/anaconda2/bin/python2.7 testBatchModel.py input.txt out/, 则不会报错。

原文:https://blog.csdn.net/qq_23944915/article/details/91492986

6.caffe-ssd运行过程中遇到的loss = nan错误:

I0216 10:16:31.513517 16036 sgd_solver.cpp:138] Iteration 50, lr = 0.001
I0216 10:16:50.461427 16036 solver.cpp:243] Iteration 60, loss = nan
I0216 10:16:50.461556 16036 solver.cpp:259]     Train net output #0: mbox_loss = nan (* 1 = nan loss)
I0216 10:16:51.435171 16036 sgd_solver.cpp:138] Iteration 60, lr = 0.001
I0216 10:17:10.880903 16036 solver.cpp:243] Iteration 70, loss = nan
I0216 10:17:10.880944 16036 solver.cpp:259]     Train net output #0: mbox_loss = nan (* 1 = nan loss)
I0216 10:17:10.881077 16036 sgd_solver.cpp:138] Iteration 70, lr = 0.001

损失值溢出,从网上找来的意见是修改base_lr,乘以0.1,改为0.0001

只是修改solver.prototxt中的参数,重新执行后base_lr没有改变,但是mbox_loss没有再出现=nan的情况

ctrl+c中断程序后,再重新执行,需要删除/home/idc/deep/gjj/caffe/models/VGGNet/VOC0712/SSD_300x300路径下的临时文件,不然会从中断点继续执行。
原文:https://blog.csdn.net/panxiying1993/article/details/79089214

7.python2.7安装opencv

pip install opencv-python
原文地址:https://www.cnblogs.com/dindin1995/p/13059178.html