`
文章列表
HOG+SVM做行人检测,是非常经典的做法,但是真正使用过的人可以发现,就OpenCV提供的检测算算法而言,其实时性是非常差的。事实上,OpenCV中还做了一定的优化,比如利用CPU对多尺度行人检测进行一个并行计算,但是,在我笔 ...
要把OpenCV的源码改写成CUDA,那么在改写成并行计算之前,我们需要保证CUDA C中(特别是CUDA中的核函数)能够支持OpenCV定义的类型,否则我们只有重写。 所以在将OpenCV源码改写成CUDA并行计算之前,我首先将OpenCV源码改写成了普通的C语言版本------这里的改写指的是:一些结构体的重写、Mat数组和普通一维二维数组的转换等等,具体情况下面的代码将见分晓。 这次改写的是ComputeGradient函数   注意:这里保留了Mat img,因为这里到时候移植到CUDA C中要改写成PtrstepSZ变量,这里就不费功夫把他改成数组了。   #includ ...
  目前的进度有些缓慢了。。。 要想用CUDA实现HOG特征的并行计算,那么首先就要熟悉HOG计算的相关内容、思想,以便实现并行计算方案。 关于HOG特征的介绍,在网上有非常非常多,其中英文原文:http://vision.stanford.edu/teaching/cs231b_spring1213/papers/CVPR05_DalalTriggs.pdf 故这里不作详细介绍,简单摘抄其他博客内容进行介绍:   HOG特征提取方法就是将一个image(你要检测的目标或者扫描窗口): 1)灰度化(将图像看做一个x,y,z(灰度)的三维图像); 2)采用Gamma校正法对输入图 ...
参考http://www.cnblogs.com/dwdxdy/p/3528711.html博客,加之以实践环节,我们可以知道有几种使用到GPU运算的方法:                     1.利用OpenCV中提供的GPU模块                 2.单独使用Cuda API编程                 3.利用OpenCV中提供接口,并结合Cuda API编程 如果仅仅使用OpenCV中的GPU函数,就像博客(三)中演示一下,的确非常的简单而且可以得到比较理想的效果,但是缺点也是显然的,这种直接利用别人的函数是非常不灵活的。很多情况下,并行计算都会存在 ...
上一回演示了使用OpenCV中集成的gpu部分进行gpu编程,实现hog+svm算法对行人进行检测,检测效果对比得出gpu运行时间要远比cpu运行时间小,更加具有实时性。但是直接使用OpenCV中的函数,显得过于呆板,灵活性较差,于是,为了将gpu运算牢牢掌握在自己手里,我选择CUDA编程,接下来,我简单的介绍一下gpu、cuda的一部分内容。   1.CPU是顺序处理;GPU是并行处理,并行计算将大大缩短时间; 2.CUDA是NVIDIA公司推出的语言风格与C语言很相似的一款通用架构,必须要在NVIDIA公司生产的显卡上使用; 3.CUDA虽然是对GPU并行计算的一个编程框架,但是 ...
 在使用cuda进行编程之前,我们不妨再来看看OpenCV中的效果是什么样子的,那么这一次,我将使用OpenCV来进行HOG+SVM的行人检测。 事实上,HOG+SVM在行人检测上的应用在网上已经有了非常丰富的资料,可以说,这个技术相对来说是比较成熟的,那么此次应用OpenCV进行行人检测的实现主要目的如下: 1.了解HOG+SVM在行人检测上的实际效果,并借此熟悉OpenCV中相关程序的编写 2.比较CPU与GPU的运行差别 3.引入我对HOG以及SVM的原理性学习 事实上,我们可以参考http://docs.opencv.org/2.4.9/modules/refman.htm ...
本次我所要完成的項目是 基於GPU加速的行人檢測系統前言 GPU 加速的计算是利用一颗图形处理器 (GPU) 以及一颗 CPU 来加速科学、工程以及企业级应用程序。工业与学术界的数据科学家已将 GPU 用于机器学习以便在各种应用上实现开创性的改进,这些应用包括图像分类、视频分析、语音识别以及自然语言处理等等。我們實驗室的方向是無人駕駛,這個領域最近也是非常火熱,更有人直言三至五年無人駕駛將得以普及。而無人駕駛的必要條件之一就是要能快速、準確地識別出道路情況,相比於串行順序工作方式的CPU,那麼以多核並行計算的工作方式的GPU在運算速度方面將提供更大的優勢,這對於識別的實時性是非常有幫助的。 ...
人生总不能过的那么潇洒吧,不能想做的就做,不想做的就撒手不干,人还是要适当地逼自己一下吧。至少现在我只能这么安慰一下自己。 坐了14个小时的火车+一个多小时的地铁+半个小时的步行,我终于来到阔别已久的闵大荒,我的大学生涯竟然将在这里结束,我的研究生阶段即将在这里开始。一切对我来说都是陌生的,陌生的往往伴随着刺激!是的,我很激动和兴奋,不一样的校园环境,不一样的同学,我也是不一样的心情。还有三十八天就交大120周年校庆了,然而留给我毕业设计的时间也就两个多月了。想当初还没决定来上海的时候,我想着花两个星期做出毕设一个星期写完论文就这么水水就过去了,然而现在不行了,留给我的是一个一个新颖的难题 ...
监督学习之正规方程组 上一篇博客是介绍了梯度下降法,旨在每一次迭代都从下降梯度最大的方向进行,最终找到全局最大值!但是,这样的效率往往是不高的,无论是批量梯度下降法还是改进后的随机梯度下降法,在大样本的情况下都需要进行迭代。那么今天学习的正规方程组就希望用一个式子就将参数表示出来。   数学概念和定理的引入 这里要得到正规方程组,需要一些高等数学和线性代数的知识,在此引入:(公式太难打了) 对于上图中的定理,我给出证明如下(6过程颇多,有兴趣的可以联系我): 于是,正规方程组推导如下:  以上便是推导过程,相比于迭代,正规方程组将直接得出参数值,无疑提高了效率       ...
机器学习在当今社会应用越来越广泛,如计算机视觉、机器人控制、无人机无人车技术等等,都离不开机器学习算法。而机器学习并不像学习一门语言那样简单,算法的实质是数学,有了数学的推导结果,运用什么样的语言那 ...
上文中讲述了两种在android平台中使用opencv的办法,这里我将使用的是opencvforandroid的方法,也就是直接使用opencv提供的Java的API,这种方法对开发者来说是比较简单省事的。由于算法原理在《银行卡号识别》中已经阐述过,这里不再详细介绍,直接上关键代码!     activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.andro ...
前阵子的考试、旅游让我有很长一阵子没来博客看看,现在寒假了,是时候写点、看点新的东西了! 前面我主要围绕着基于OpenCV的机器学习算法在图像识别处理上的应用来展开学习的,当然这些个技术(如银行卡号识别)最终 ...
  一、提取方法的修正        上回说道,我们使用cvFindContours函数来找银行卡上的数字的外包矩形,从而从银行卡上将数字抠下来进行识别,但是,使用后会发现有如下两个问题:       (1)不好筛选         提供的图片大小不一样,那么数字的外包矩形框的大小也就不一样,如果简单地采用面积的办法进行筛选,那么这种方法的适应性是非常的差的。        (2)外包矩形框的不确定性         我们来看看数字8的外包矩形框                                                                   ...
在进行完预处理之后,我们可以开始用算法识别数字了。首先我们不做那么复杂的、一连串银行卡数字的识别,而是做一个数字的测试。   一、机器算法的引入-----K近邻算法 K最近邻(k-Nearest Neighbour,KNN)分类算法是一个理论上比较成熟的算法,也是最简单的机器学习算法之一。顾名思义,k最近邻实际上就是取和待分类物最相似的k个模板,然后这k
 上回书说道,我们对银行卡进行了一系列的预处理后,得到了下面的结果:           银行卡下半部分严重影响到了检测的效果,所以在进行机器学习前,我们还需要做一点处理,把下半部分的噪声给消除掉。 思路:首 ...
Global site tag (gtag.js) - Google Analytics