/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)
Check failed: error == cudaSuccess (10 vs. 0) invalid device ordinal
原因:GPU选择错误caffe.set_device(1)
。
解决方法:
改为
caffe.set_device(0)
Jetson TX1只有一个GPU,#0。
在训练自己数据集时报出如下两类错误:
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'
。
解决方法:
img = img.convert("RGB")
img.save(dir+'/' + name + '.jpg')
原因是数据集制作错误,如果使用VOC作为参考,需要严格按照其格式,包括数据类型,例如bndbox:
<bndbox>
<xmin>60xmin>
<ymin>27ymin>
<xmax>385xmax>
<ymax>331ymax>
bndbox>
解决方法:
bndbox参数必须为整数,如果是小数
,运行时不会报错,但是训练模型不会成功,持续是loss=0。
错误现象:
xml bounding box irregular
解决方法:
修改bndbox参数,使其不超过图片尺寸。
在制作数据集的过程中,经常出现can not open or find ..pic.jpg
之类的找不到图片的错误,但是路径是正确的,文件也存在。
原因:图片列表文件train.txt、val.txt或者trainval.txt、test.txt的换行符包含’\r’,这是由windows导入到Linux下出现的
解决方法:
将’\r\n’全部替换’\n’。
不能设置太大,数十次迭代之后就会出现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
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绘制处理的时间。
用vs2015编译有些opencv项目时出现此编译错误。
解决方法:
在项目-属性-连接器-输入-附加库目录中,删除opencv_dep_cudart.lib项目。
未完待续