- 博客(129)
- 资源 (35)
- 收藏
- 关注
原创 CUDA学习日志:常量内存和纹理内存
在上一篇博文中,我们谈到了如何利用共享内存来实现线程协作的问题。本篇博文我们主要来谈谈如何利用常量内存和纹理内存来提高程序性能。Jeremy Lin常量内存所谓的常量内存,从它的名字我们就可以知道,它是用来保存在核函数执行期间不会发生变化的数据。NVIDIA硬件提供了64KB的常量内存,并且常量内存采用了不同于标准全局内存的处理方式。在某些情况下,用常量内存来替换全局内存可以有效地减少内存带宽。常量内存的声明方式与共享内存是类似的。要使用常量内存,则需要在变量前面加上 __constant__修饰符
2014-11-29 21:53:59
13155
原创 CUDA学习日志:线程协作与例程
在上篇博文中,我们已经用CUDA C编写了一个程序,知道了如何编写在GPU上并行执行的代码。但是对于并行编程来说,最重要的一个方面就是,并行执行的各个部分如何通过相互协作来解决问题。只有在极少数情况下,各个处理器才不需要了解其他处理器的执行状态而彼此独立地计算出结果。即使对于一些成熟的算法,也仍然需要在代码的各个并行副本之间进行通信和协作。因此,下面我们来讲讲不同线程之间的通信机制和并行执行线程的同步机制。首先,我们来看一个线程块的网格示意图:
2014-11-25 17:22:03
3346
原创 CUDA学习日志:入门例程和编程接口
上篇博文我们主要是介绍了CUDA开发环境的配置和一些学习资源。现在我们正式进入CUDA的学习。如果你还记得上篇最后有一个“Hello World”的例子,你会发现它和C程序根本没什么差。不过,从这个Hello World我们来引出CUDA编程的一个重要区别:我们将CPU以及系统的内存称为主机(host),而将GPU及其内存称为设备(device)。而上篇的Hello World和我们以前写过的代码没啥差别的原因在于它并不考虑主机之外的任何计算设备。现在我们来看看如何使用设备(device)来执行代码。在
2014-11-23 11:03:46
4064
原创 CUDA学习日志:开发环境配置和学习资源
接触CUDA的时间并不长,最开始是在cuda-convnet的代码中接触CUDA代码,当时确实看的比较痛苦。最近得空,在图书馆借了本《GPU高性能编程 CUDA实战》来看看。CUDA(Compute Unified Device Architecture)是一种专门为提高并行程序开发效率而设计的计算架构。在构建高性能应用程序时,CUDA架构能充分发挥GPU的强大计算能力。更多
2014-11-20 17:15:35
7156
原创 BP神经网络的C代码分析
去年在学习Stanford的ML课程的时候整理过一篇BP神经网络原理的解析,链接地址,不过没有对它的code实现作太多的解读,只是用MATLAB的工具箱做了实验。Jeremy Lin具体的原理性资料可以参考:[1] BP神经网络解析 http://blog.youkuaiyun.com/linj_m/article/details/9897839[2] Tom M.Mitchell 机器学习教从上面的算法流程可以看出来,BP神经网络的步骤并不多,如果你之前就了解BP神经网络,那么上面的流程应该还是可以很顺利地
2014-11-01 17:58:02
7169
原创 PGM图片格式与代码
这两天在搞神经网络,里面的一个人脸数据库的图片格式是PGM,其实之前早就知道了这个图片格式,但是没去深究这个图片格式的数据到底是什么安排的。搜索了下百度百科,发现介绍的真是简单,下面就自己来系统地整理一下。 Jeremy Lin PGM是Portable Gray Map的缩写,它是灰度图像格式中一种最简单的格式标准。另外两种与之相近的图片格式是PBM和
2014-10-26 17:32:30
25879
1
原创 暑期开发过程中的一些经验记录
一、GDI+设置二、调试经验当利用VS2010定位出new出现泄漏后,应该在下方(不一定是当前块内)该new变量不使用后delete;三、free和delete如何知道需要释放的内存大小在利用malloc或new分配内存空间的时候,实际分配的空间会比程序员申请的空间大。实际分配的内存空间前面有一部分用于保存所分配内存的大小、校验等信息。四、Linux下调试入门之前对Linux真的是一点儿也不熟悉啊,现在在学校需要苦补。(1)Python在Linux下的调试工具winpdb,部分命令bp
2014-09-16 21:18:25
1768
原创 中值滤波的快速算法
我想学过图像处理的人没有人会不知道中值滤波的,最早的时候我是在冈萨雷斯的图像处理课本[1]中学到的,后来在看Sonka的书[2]的时候又看到了中值滤波的介绍,下面我试着结合课本所学和网上的资料自己整理一篇中值滤波的介绍。Jeremy Lin中值滤波器是一种统计排序滤波器,由Tukey于1971年在文献[3]中提出。所谓的统计排序滤波器是一种非线性的空间滤波器,它的响应基于图像滤波器包围的图像区域中像素的排序,然后用统计排序结果决定的值代替中心像素的值。除了中值滤波器外,最大值滤波器和最小值滤波器也是统计
2014-09-09 15:18:37
18675
2
原创 配置cuda环境的痛苦经历
吐槽:最近太坑爹,要配置一个服务器来验证算法,结果各种不顺~Experience1:给ubuntu安装远程桌面(xrdp)用windows的mstsc连接ubuntu需要先在ubuntu上安装 xrdp(xrdp是一个开源的远程桌面协议服务器)。安装方法:打开终端,输入命令:sudo apt-get install xrdp可能遇到的问题:用windows的mstsc连接ubuntu的xrdp时,仅显示墙纸问题。这个问题的原因是Ubuntu启动了3d桌面,导致xrdp运行异常。解决方
2014-08-17 14:43:23
4185
原创 convnet源码解析(一):基础准备
ConvNet是一个基于GPU实现的卷积神经网络开源代码(C++11),是由多伦多大学的Geoffrey Hinton深度学习团队编写的,它的最初版本是Hinton的学生Alex Krizhevsky编写的cuda-convnet(其项目地址在google code上面),最近cuda-convnet也从1.0版本更新到2.0版本(地址)。在CNN的开源代码中最出名的主要有两个,一个是Berkeley Caffe,另一个是Toronto Convnet。Berkeley的Caffe我目前还没有研究过它的代
2014-07-25 12:58:30
8348
原创 技术讲座:蔡学镛之架构师相关培训
今天上午去听了蔡学镛的架构师培训,PPT的题目没认真看,给忘了~在昨天下午通知前,我对蔡学镛那是一丁点儿都不了解,下面是我搜索到的一些他个人资料~,现场来看,人确实很年轻。蔡学镛,担任过创新工场首席布道师、华硕集团软件工程师、技术总监、元智大学讲师、美商欧莱礼出版社技术编辑、台湾微软杂志专栏作家、CTO、阿里巴巴集团支付宝架构师,创新工场架构师,银联移动支付首席产品架构师。他今天讲的主要东西是关于架构设计方面的内容,比较忏愧,虽然我曾经听说过这个名词,但是从未去学习过,而且在未来两三年时间内在工作上估
2014-07-19 13:22:37
2956
原创 捉虫记录:图像bug杂记25-26日
LinJMBUG 1:GDI+ Image::FromFile 无效m_pImg = Gdiplus::Bitmap::FromFile(m_imgFilePath);m_pImg为NULL原因是没有初始化GDI+。BUG2:GDI+ new Bitmap不能接受三个参数//创建目标Bitmap Bitmap *bmpDest = new Bitmap(destWidth, destHeight, m_pImg->GetPixelFormat());原因://#ifdef _DEB
2014-06-26 09:08:03
1657
原创 捉虫记录:OpenCV中的类型问题
LinJM 2014-06-05这个问题浪费了我差不多一天时间吧。我的本意是要把mag1、mag2和mag3三个梯度图叠加(取相应pixel位置的max值)。可是从下图可以看出Max图只有一部分(1~188)其余(189~484)都为黑。后来调试发现原来是像素的数据类型出错,以后涉及到OpenCV中像素值传递的时候必须要注意原始值和目标值的数据类型。
2014-06-20 13:23:51
1339
原创 Matlab与C/C++混合编程(mex文件)
Matlab是一种矩阵语言,是为vector和matrix操作设计的,这两种类型的运算速度非常快,但是当涉及到大量的循环处理时,Matlab的速度就有点慢了。因此,Matlab提供了MEX脚本来使用C/C++函数以提高循环的运算速度。 现在我们来介绍一下如何编写相应的C/C++函数以生成对应的mexw32或mexw64文件。 MEX文件的编写和编译需要两个基本条件:一是必须按照Matlab应用
2014-06-01 10:02:27
3401
原创 捉虫记录:解决内存泄漏问题
LinJM 2014_05_23解决内存泄漏问题在VS2010的Debug模式下面,点击运行,然后退出,之后会在输出框里面出现内存泄漏信息(如下图所示)。 Analysis:主要是new了之后没有delete相应的变量,所以,很明显就是要在不使用时delete掉这个变量。不过,有个问题,如下图所示:
2014-05-27 13:20:08
1755
翻译 LodePNG入门
LodePNG入门LodePNG是一个集合了PNG图像解码器和编码器的代码文件,不依赖于诸如zlib和libpng的外部链接/库,提供方便友好的PNG编解码器调用方法。LodePNG主要是采用C(ISO C90)编写的,并提供了C++的接口。LodePNG的使用只要在项目文件中包含lodepng.cpp和lodepng.h或者lodepng.c和lodepng.h就可以。
2014-05-25 18:46:42
7329
转载 CString Format的用法(转)
在MFC中会经常用到CString::Format。下面是我收集的一些资料。官方定义:CString::Formatvoid Format( LPCTSTR lpszFormat, ... );void Format( UINT nFormatID, ... );ParameterslpszFormatA format-con
2014-05-21 10:06:13
4652
原创 图像文件格式
最近在做有关图像格式转换的东西,以前对这一块还真有点缺失,只能周末补补。在计算机中,数据是以文件的形式存储在外存储器上的。将图像数据以文件形式保存在外存储器上就形成了图像文件,图像文件就是以数字形式存储的图像数据。图像文件一般由文件头、调色板数据和像素数据3部分组成。文件头用于存放图像文件的各种参数,这些参数表征了图像本身的许多特性;调色板是图像的颜色索引表;像素数据是图像信息的实体所在,
2014-05-11 10:50:45
2088
原创 智能指针 shared_ptr 解析
最近正在进行《Effective C++》的第二遍阅读,书里面多个条款涉及到了shared_ptr智能指针,介绍的太分散,学习起来麻烦,写篇blog整理一下。LinJM @HQUshared_ptr是一个智能指针。在C++ 11颁布之前,它包含在TR1(Technical Report 1)当中,现在囊括在C++11的标准库中。智能指针(Smart pointers)是存储“指向动态分配(在堆上)的对象的指针”的对象。也就是说,智能指针其实是个对象。不过它的行为很像C++的内建指针,只是它们可以在适当
2014-05-05 17:04:15
3623
原创 车牌识别系统开发记录(四) 国内车牌特点
前面谈的车牌图像是国外的,现在谈谈国内的车牌。目前,中国大陆主要有四种牌照,分别是民用蓝底白字牌照、民用黄底黑字牌照、军警用白底黑字或红字牌照以及国外驻华机构用黑底白字牌照。归纳起来,车牌图像主要有如下特点:(1)虽然牌照种类较多,但牌照的尺寸、字间距、字数和字体基本统一。前车牌水平排列的7字符是等大小的,均为45mm宽,90mm高,也就是说单个号码的宽高比是1:2,而对于整个车牌
2014-04-17 16:36:25
7682
原创 车牌识别系统开发记录(三) 字符识别
这篇博文来谈谈车牌的字符识别。目前,车牌字符识别算法主要是基于模板匹配、特征匹配或神经网络的方法。在本文中我们主要来说说基于神经网络的字符识别方法,采用的是OpenCV中的CvANN_MLP。关于神经网络的具体细节,可以参考我以前的博文:BP神经网络解析及Matlab实现更加细节的东西可以查看如下参考文献:Neural Networks【OpenCV Documentation】BackPropWikipedia【Wikipedia】现在我们确定了字符识别的总体框架,那么先来说说字符的特征提
2014-04-15 10:33:28
9503
原创 内存管理内幕 - 动态分配的选择、折衷和实现
本文转载自IBM developerWorks ,英文原文链接如下:Inside memory managementJonathan Bartlett (johnnyb@eskimo.com), 技术总监, New Media Worx简介: 本文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将
2014-04-13 10:45:20
2036
原创 车牌识别系统开发记录(二) 车牌定位
这里面我要具体介绍的检测车牌方法的步骤如下:首先利用Sobel滤波器对灰度图像进行滤波,突出图像中的垂直边缘信息利用数学形态学方法: Close(先膨胀再腐蚀,填充内部空隙)利用findContours函数寻找车牌的潜在轮廓结合车牌的长宽比例的先验知识剔除不符合的轮廓利用floodfill算法结合车牌的颜色信息提取可能的车牌区域再次结合车牌的长宽比例的先验知识剔除不符合的轮廓根据上面初步提取出可能的车牌区域,下一步利用SVM进行判断是否是车牌好了,下面一步步来分析:
2014-04-09 18:29:00
8590
原创 车牌识别系统开发记录(一) 系统概述
1月份的时候,我花了几天时间简单实现了车牌识别系统的部分功能。最近打算结合OpenCV的学习(SVM、ANN)来进一步解析这个系统。我前面的博文如下:基于opencv的车牌识别解析与代码 LinJM-机器视觉车辆牌照识别(License PlateRecognition, LPR)技术作为交通管理自动化的重要手段,在交通监视和控制中占有很重要的地位。它广泛应用于高速公路电子收费
2014-04-08 11:28:52
9006
原创 图像处理软件开发记录(六) 图像特效(浮雕、怀旧)
专栏地址:http://blog.youkuaiyun.com/column/details/imagep.html本篇文章主要记录一下图像处理软件中的图像特效(浮雕、怀旧、Lomo)的实现过程。图像浮雕效果浮雕的算法就是对图像中的每一个点做卷积处理,采用的掩模矩阵如下所示:[1 0 0; 0 0 0; 0 0 -1]假设原图像为X,处理后的图像为Y,也就是说,对
2014-04-01 17:22:25
4425
原创 图像处理软件开发记录(五) 图像特效(素描、油画)
本篇文章主要记录一下图像处理软件中的图像特效(素描和油画)的实现过程。图像素描效果图像素描的实现原理其实很简单,主要是利用边缘检测滤波器来实现。可供选择的边缘检测滤波器有很多,常用的有Sobel、Scharr、Laplacian以及Canny滤波。本文主要是利用Laplacian来实现素描化,它的效果相对于Sobel和Scharr更加相像素描效果。Laplacian算子是一个二阶导数算子,具有各向同性,即与坐标轴方向无关,坐标轴旋转后梯度结果不变。但是,它对噪声比较敏感,所以我们这里先利用中值滤波
2014-03-31 22:26:19
5393
原创 图像处理软件开发记录(四) 美肤功能实现
专栏地址:http://blog.youkuaiyun.com/column/details/imagep.html这一篇文章主要谈谈美肤操作。这个功能基本上很多软件都有,比如美图秀秀,女生们的最爱。美肤的原理,简单来说,其实就是图像平滑操作,不过在这个平滑的过程中最好不能把轮廓给模糊掉。美图秀秀美肤操作的技术没公开,我这里就只谈谈采用双边滤波器实现美肤的技术。关于双边滤波器的相关资料,在我的博文
2014-03-31 20:38:17
7054
原创 图像处理软件开发记录(三) QT图像显示
专栏地址:http://blog.youkuaiyun.com/column/details/imagep.html这一篇文章记录有关图像显示的问题。因为对QT的研究不深,所以在QT上显示图像的设计过程真是坎坎坷坷。在最开始,我用的显示方法最简单,就是用label来显示,就是下面这个:ui->label->setPixmap(QPixmap::fromImage(img))
2014-03-31 18:25:18
4554
1
原创 图像处理软件开发记录(二) 基本图像处理
专栏地址:http://blog.youkuaiyun.com/column/details/imagep.html本篇博客主要记录Image图像处理软件的基本图像处理,包括黑白图像、图像柔化、图像锐化。图像黑白化现在我们得到的大多数图像都是彩色图像,那么如果想要把它变成黑白图像,该怎么操作呢?一个简单的方法就是——利用cvtColor实现。cvtColor的原型如下:
2014-03-31 11:34:33
6379
原创 图像处理软件开发记录(一) 系统概述
专栏地址:http://blog.youkuaiyun.com/column/details/imagep.html本系列博客主要记录Image_Lin图像处理软件的开发记录。Image_Lin软件计划实现的功能包括:(一)、基本图像处理(黑白、锐化、柔化、补光)(二)、人像美容(人脸美肤)(三)、图像特效(素描、油画、浮雕、怀旧、Lomo)(四)、
2014-03-26 21:19:49
4960
3
原创 双边滤波器解析与代码
双边滤波器(Bilateral Filtering)是一种可以保边去噪的滤波器。双边滤波这个概念最初由Tomasi和Manduchi在文献[1]提出,在处理相邻各像素值的灰度值或彩色信息时,不仅考虑到几何上的邻近关系,也考虑到了亮度上的相似性,通过对二者的非线性组合,自适应滤波后得到平滑图像。这样处理过的图像在滤除噪声的同时还能够很好地保持图像的边缘信息。简单地讲:双边滤波器类似于高斯滤波器,它也是给每一个邻域像素分配一个加权系数。不过, 这些加权系数包含两个部分, 第一部分加权方式与高斯滤波一样,第二
2014-03-24 17:12:55
8031
1
原创 Flood Fill(漫水填充)算法
Floodfill算法即漫水填充法,是区域填充法的一种,其实质是种子填充法,这种方法适用于对内定义区域的填充。所谓内定义区域,是指区域内部所有像素具有同一颜色或亮度值,而区域外的所有像素具有另一种颜色或亮度值。Floodfill方法能将该区域中的全部像素都设置为新值,并通过一定的规则确定一组种子点(该种子点为区域内点),然后通过判断种子点的邻域像素是否和种子构成连通域,从而决定是否对其进行填充
2014-03-20 20:04:19
6162
原创 基本图算法(广度优先搜索和深度优先搜索)
图算法对于计算机学科至关重要。成百上千的计算问题最后都可以归约为图论问题。本文主要是对《算法导论》图算法的学习笔记进行整理。首先,我们先对图算法中的一些表达方式进行统一:给定图G=(V,E),当对该图上的一个算法的运行时间进行表述时,我们通常以图的结点数|V|和边的条数|E|作为输入的规模。另外,我们用G.V来表示图G的结点集,用G.E表示图G的边集合,也就是说,我们将结点和边看作是图的属性。
2014-03-17 17:54:46
2506
原创 如何在复杂代码中寻找BUG
来自知乎问答,看了觉得很有益,就整理过来学习一下。原始提问:快毕业的通信学生,之前正式代码经验几乎零。目前在已经给Offer的公司实习安卓开发。Mentor说先从找code base中bug开始。但是我感觉我们的codebase好复杂,这几天突然没什么进展。uml之类的也画了不少。想问问前辈们有什么建议?解答:1:来自姚冬,哥写的不是代码,是梦想我曾经做了两年大型软件的维护
2014-03-14 15:49:45
1962
原创 关于数组指针的一道题
先看下面这段小代码:#include int main(){ int a[5] = {1,2,3,4,5}; int b[100]; int *ptr = (int *)(&a+1); printf("%d\n%d\n",*(a+1),*(ptr-1)); printf("sizeof(b)=%d\n",sizeof(b)); printf("sizeof(&b)=%d\n",
2014-03-12 14:16:13
1340
原创 EM算法主观理解
一句话: EM算法的精华在于 EM——期望最大化,把一个不好MLE的问题用迭代方法解决掉,思路清晰,计算简单。首先,明确我们的目标是什么:那就是要求解一个最大似然估计问题。所谓的最大似然估计问题就是——给定一组数据和一个参数待定的模型,如何确定模型的参数,使得这个确定参数后的模型在所有模型中产生已知数据的概率最大。如果你还是对最大似然估计不了解,那么你可以参看如下的资料:
2014-03-03 22:53:40
1801
原创 libsvm代码阅读:关于svm_group_classes函数分析
upadate :2014-2-28 LinJM @HQU 『 libsvm专栏地址:http://blog.youkuaiyun.com/column/details/libsvm.html 』目前最新的version是3.17,主要的改变是在svm_group_classes函数中加了几行代码。官方的说明如下:svm_group_classes函数的功能是:group training data of the same classImportant:如何将一堆数据归类到一起,同类的连续存储!可参考这个函数。
2014-02-28 13:39:08
3810
原创 libsvm代码阅读:关于svm_train函数分析
在svm中,训练是一个十分重要的步骤,下面我们来看看svm的train部分。在libsvm中的svm_train中分别有回归和分类两部分,我只对其中分类做介绍。分类的步骤如下:统计类别总数,同时记录类别的标号,统计每个类的样本数目将属于相同类的样本分组,连续存放计算权重C训练n(n-1)/2 个模型初始化nozero数组,便于统计SV//初始化概率数组训练过程中,需要重
2014-02-24 22:19:30
10005
原创 关于operator=的自我赋值问题
今天看了一段C++Primer的代码:p506//use-counted assignment operator;use is a pointer to a shared use countSales_item&Saler_item::operator=(const Sales_item &rhs){ ++*rhs.use; decr_use(); p = rhs.p; use
2014-02-23 20:54:26
1879
原创 libsvm代码阅读:关于Solver类分析(二)
如果你看完了上篇博文的伪代码,那么我们就可以开始谈谈它的源代码了。// An SMO algorithm in Fan et al., JMLR 6(2005), p. 1889--1918// Solves://// min 0.5(\alpha^T Q \alpha) + p^T \alpha//// y^T \alpha = \delta// y_i = +1 or -1
2014-02-22 22:15:04
4759
A Tutorial on Support Vector Regression
2014-01-16
最小二乘法及数据拟合建模的回归分析
2013-12-09
Fractal Fern
2013-12-01
Michael Elad 关于稀疏表示的PPT
2013-09-04
OpenCV之_HaarTraining算法剖析
2013-08-19
pixeldup.m
2013-03-31
基于ARM9和嵌入式Linux的门禁系统软件设计
2013-03-30
ATM的漏洞及代码分析
2012-03-16
LMS与RLS自适应滤波算法性能比较
2012-03-16
简明 Vim 练级攻略
2012-03-16
基于DSP的静脉识别系统
2010-11-07
基于Bandelet变换的手背静脉识别算法
2010-11-07
基于2DFLD的手背静脉识别算法
2010-11-07
改进的手背静脉识别算法
2010-11-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人