OpenCV中gpu下使用cascade classifier遇到问题的解决方案
2016-11-02 15:06
567 查看
在使用opencv gpu模块下的CascadeClassifier_GPU时,遇到了几个当时很难理解,网上也找不到答案的问题。最近空闲下来,翻了opencv的源码,找到了问题所在。写出来希望能让遇到同样问题的人少走弯路~
先交代下环境:VS2013+opencv2.4.11
问题1:用haar training训练出分类器,但是gpu调用出现下面的错误:
OpenCV Error: Gpu API call (NCV Assertion Failed: retcode=26, file=opencv-2.4.11/modules/gpu/src/nvidia/NCVHaarObjectDetection.cu, line=1589
解决:这是因为在训练的时候,haar 特征选取了45度特征导致的。
过程:程序运行中断之后,一步一步的查为什么中断
可以看到,是由于haar.bNeedsTiltedII == false引起了中断,然后查找在哪里给haar.bNeedsTiltedII赋值了。分析了xml文件在cpu和gpu中的载入代码,找到了NCVStatus loadFromXML(const std::string &filename,HaarClassifierCascadeDescriptor &haar, std::vector<HaarStage64> &haarStages, std::vector<HaarClassifierNode128>
&haarClassifierNodes,std::vector<HaarFeature64> &haarFeatures)函数,里面有一句对haar.bNeedsTiltedII的更新:
feature是这样子的: CvHaarFeature* feature = &tree->haar_feature
;所以就可以找到CvHaarFeature结构里面tilted的定义。然后,这个变量的定义居然没有注释,最后在另外一个博客中找到了定义,参数titled,0表示该特征是标准的haar-like特征,1表示旋转45°后的特征。
博客地址:http://www.cnblogs.com/pakfahome/p/3611303.html
然后我猛然发现,我自己训练的时候,指定的-mode 是ALL......
问题2:直接把samples/gpu路径下面的cascadeclassifier.cpp文件复制出来,编译运行,使用data下面的haarcascade_frontalface_alt.xml,结果出现下面的错误:
OpenCV Error: Unspecified error (The node does not represent a user object (unknown type?)) in cvRead, file ******(此处是路径)persistence.cpp, line 5008
解决:如果想用opencv自带的那些xml,去下载2.4.13,里面的data文件夹,有一个叫做gpu的文件夹,专门有给gpu 用的xml文件,2.4.11里面没有。
过程:当时实在是不知道为什么,同样的数据集,用cpu载入没有问题,怎么到了gpu下面就出错了呢?看了opencv的帮助
上面说gpu只支持haar training训练出来的分类器,由于当时我需要使用自己训练的xml,所以这个错误也没在意,后续解决也是巧合,偶然看2.4.13的data文件夹,发现里面有一个叫做gpu的文件夹,专门有给gpu 用的数据。
先交代下环境:VS2013+opencv2.4.11
问题1:用haar training训练出分类器,但是gpu调用出现下面的错误:
OpenCV Error: Gpu API call (NCV Assertion Failed: retcode=26, file=opencv-2.4.11/modules/gpu/src/nvidia/NCVHaarObjectDetection.cu, line=1589
解决:这是因为在训练的时候,haar 特征选取了45度特征导致的。
过程:程序运行中断之后,一步一步的查为什么中断
可以看到,是由于haar.bNeedsTiltedII == false引起了中断,然后查找在哪里给haar.bNeedsTiltedII赋值了。分析了xml文件在cpu和gpu中的载入代码,找到了NCVStatus loadFromXML(const std::string &filename,HaarClassifierCascadeDescriptor &haar, std::vector<HaarStage64> &haarStages, std::vector<HaarClassifierNode128>
&haarClassifierNodes,std::vector<HaarFeature64> &haarFeatures)函数,里面有一句对haar.bNeedsTiltedII的更新:
feature是这样子的: CvHaarFeature* feature = &tree->haar_feature
;所以就可以找到CvHaarFeature结构里面tilted的定义。然后,这个变量的定义居然没有注释,最后在另外一个博客中找到了定义,参数titled,0表示该特征是标准的haar-like特征,1表示旋转45°后的特征。
博客地址:http://www.cnblogs.com/pakfahome/p/3611303.html
然后我猛然发现,我自己训练的时候,指定的-mode 是ALL......
问题2:直接把samples/gpu路径下面的cascadeclassifier.cpp文件复制出来,编译运行,使用data下面的haarcascade_frontalface_alt.xml,结果出现下面的错误:
OpenCV Error: Unspecified error (The node does not represent a user object (unknown type?)) in cvRead, file ******(此处是路径)persistence.cpp, line 5008
解决:如果想用opencv自带的那些xml,去下载2.4.13,里面的data文件夹,有一个叫做gpu的文件夹,专门有给gpu 用的xml文件,2.4.11里面没有。
过程:当时实在是不知道为什么,同样的数据集,用cpu载入没有问题,怎么到了gpu下面就出错了呢?看了opencv的帮助
上面说gpu只支持haar training训练出来的分类器,由于当时我需要使用自己训练的xml,所以这个错误也没在意,后续解决也是巧合,偶然看2.4.13的data文件夹,发现里面有一个叫做gpu的文件夹,专门有给gpu 用的数据。
相关文章推荐
- 解决方案:使用OWC11成生统计图时遇到的问题
- 使用Mencoder进行视频转换遇到的问题和相关解决方案
- 关于OpenCV Gpu模块无法使用Cuda4.2以上版本编译成功的解决方案
- 转载:.Cocos2dx2.2下使用JNI技术调用jar包里面的一些方法遇到的一些问题及解决方案。
- 使用PCL::GPU::遇到问题
- Appfuse使用中遇到的问题及解决方案
- 一个笨鸟在使用Eclipse导入Maven项目遇到的问题及解决方案
- visual studio 2010使用中遇到的问题以及解决方案
- MyEclipse使用过程中遇到的问题和解决方案
- 使用kettle工具遇到的问题汇总及解决方案
- Ubuntu 8.10使用过程中遇到的问题及解决方案
- 分享一个copyfile使用时遇到的问题及解决方案 .
- 使用jQuery queue(队列) 遇到的问题及解决方案
- opencv svm使用时遇到的问题
- 使用Mencoder进行视频转换遇到的问题和相关解决方案
- 使用计算机遇到的问题及解决方案
- 使用VS2010时遇到的一些小问题的解决方案
- 分享一个copyfile使用时遇到的问题及解决方案
- 使用easyui过程中遇到的问题及解决方案积累中...
- ADS1.2环境使用过程中遇到的问题及解决方案