计算机视觉caffe之路附1:Ubuntu+Opencv+Caffe开发深度学习常见错误及经验

      • Opencv31编译CUDA版本大于80引起
      • GPU选择错误
      • 图像模式错误非RGB
      • mbox_loss 0 1 0 loss
      • bndbox参数超出图像尺寸
      • 找不到或打不开图片文件
      • 关于学习率的设置base_lr
      • cvimshow不显示图片
      • LNK1104 无法打开文件opencv_dep_cudartlib

1.Opencv3.1编译,CUDA版本大于8.0引起

/home/usrname/OpenCV-3.1.0/modules/cudalegacy/src/graphcuts.cpp:120:54: 
error: ‘NppiGraphcutState‘ has not been declared typedef NppStatus (*init_func_t)(NppiSize oSize, NppiGraphcutState** ppStat

解决方法:
进入opencv-3.1.0/modules/cudalegacy/src/目录,修改graphcuts.cpp文件,将:

#include "precomp.hpp"
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

改为

#include "precomp.hpp"
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)

2.GPU选择错误

Check failed: error == cudaSuccess (10 vs. 0) invalid device ordinal

原因:GPU选择错误caffe.set_device(1)

解决方法:
改为
caffe.set_device(0)
Jetson TX1只有一个GPU,#0。

3.图像模式错误:非RGB

在训练自己数据集时报出如下两类错误:

OpenCV Error: Assertion failed ((scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F)) in cvtColor, file /ssda/software/opencv-3.1.0/modules/imgproc/src/color.cpp, line 8141
terminate called after throwing an instance of 'cv::Exception'

或者:

annotated_data_layer.cpp:205] Check failed: std::equal(top_shape.begin() + 1, top_shape.begin() + 4, shape.begin() + 1) 

原因:数据集图片内混有非RGB模式图片,如灰度图(L),img.mode='L'

解决方法:

  • 去掉非RGB图片。
  • python转换L为RGB:
img = img.convert("RGB")
img.save(dir+'/' + name + '.jpg')

4. mbox_loss = 0 (* 1 = 0 loss)

原因是数据集制作错误,如果使用VOC作为参考,需要严格按照其格式,包括数据类型,例如bndbox:

<bndbox>
       <xmin>60xmin>
       <ymin>27ymin>
       <xmax>385xmax>
       <ymax>331ymax>
bndbox>

解决方法:
bndbox参数必须为整数,如果是小数60.0,运行时不会报错,但是训练模型不会成功,持续是loss=0。

5. bndbox参数超出图像尺寸

错误现象:

xml bounding box irregular

解决方法:
修改bndbox参数,使其不超过图片尺寸。

6.找不到或打不开图片文件

在制作数据集的过程中,经常出现can not open or find ..pic.jpg之类的找不到图片的错误,但是路径是正确的,文件也存在。
原因:图片列表文件train.txt、val.txt或者trainval.txt、test.txt的换行符包含’\r’,这是由windows导入到Linux下出现的
解决方法:
将’\r\n’全部替换’\n’。

7.关于学习率的设置:base_lr

不能设置太大,数十次迭代之后就会出现Nan;
不能设置太小,否则loss基本不会下降;
受制于GPU显存大小,通常batch_size不可能设置成容纳全部图片,Jetson TX1训练ssd时只能设置为4,还是在不test的情况下,因此loss波动会很厉害,但是是正常现象,并非学习率设置太大导致的波动,进而改小学习率导致始终无法下降。
通常设置初始学习率base_ir为0.0001,stepsize为20000。实际训练总,设置合适的snapshot,多存储快照,根据 计算机视觉caffe之路第五篇:ImageNet数据集训练及预测实例中绘制loss曲线的方法监控loss下降趋势,如果发现loss不下降,这适当调大base_lr,通常是成倍的增加,自制loss有效下降。
此外可以学习下这篇论文:http://cilvr.nyu.edu/lib/exe/fetch.php?media=deeplearning:dl-optimization.pdf

8.cv::imshow不显示图片

cv::VideoCapture cap(0);//0表示摄像头id  
//cap.open("test.avi");  //或者打开视频
cv::namedWindow("video",1);  
for(;;){  
 cv::Mat frame;  
 cap<<frame;  
 if(frame.empty())  
    break;  
 cv::imshow("video",frame);  
 cv::waitKey(10)  //!!!
}  

注意最后一定要加上waitKey(10),否则显示窗口不会显示,原因是循环中,highgui没有给予imshow绘制处理的时间。

9.LNK1104 无法打开文件“opencv_dep_cudart.lib”

用vs2015编译有些opencv项目时出现此编译错误。
解决方法:
在项目-属性-连接器-输入-附加库目录中,删除opencv_dep_cudart.lib项目。


未完待续

你可能感兴趣的:(ubuntu,opencv,caffe安装,ssd,计算机视觉,Opencv,caffe)