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
,而python
,import 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