这是一个转型AI的励志故事,从非科班到拿下竞赛一等奖[转载]

本文大概描述了机器学习领域之外的人如何转行到机器学习领域内。说得很详细。

下文转载自CSDN:http://blog.csdn.net/qq_40027052/article/details/78542679?locationNum=3&fps=1


在计算机行业,关于从业人员的素质,一直都有一个朴素的认识——科班出身好过非科班,学历高的好过学历低的。大部分时候,这个看法是对的。在学校学习,有老师指点,有同学讨论,有考试压迫,有项目练手。即便不大用心的学生,几年耳濡目染下来,毕业后作为半个专业人士,还是没什么问题的。

不过,量子物理告诉我们,这个世界的本质要看概率。所以,科班出身的同学,在技术上好过非科班出身的同学,这是大概率事件;相反,非机器学习专业,甚至非计算机专业的同学,在这个领域做的比本专业同学更好,则就是小概率事件了。但小概率事件并非“不可能事件”,国内很多做机器学习公司的CTO,都不是机器学习专业的科班出身,却能够抓住这里的“小概率”,让自己华丽地转身并实现弯道超车。

他们是怎么做到的?

如果在上学的时候,我们没能嗅到机器学习领域的机会,而是选择其他领域来学习和工作……如今却打算半路出家、改行机器学习,应该怎么做,才能做到跟这些人一样好?或者,至少是足够好?

我自己痛苦转型的经历,说出来可以供大家参考一下。

我也是非科班出身,但因为工作,一直需要接触计算机视觉的一些传统算法。后来,看到ImageNet竞赛的结果,我意识到了深度学习在视觉领域的巨大优势,遂决定开始转型深度学习和神经网络,走上了这条学习的不归路(笑)。

想要转型,跟上学的时候不同,因为手头正在做的工作意味着,自己需要从没有时间的情况下挤出时间,需要把别人睡觉、打游戏的时间用来学习,而所学的又是一种颇为艰深晦涩的学问。

转型,其实很容易,需要做到的只有一件事:学习。

转型,其实很困难,因为必须做到一件事:坚持学习。

最难的不是下定决心,而是贯彻到底。所以,在开始之前,不妨先问问自己这样几个问题:

“我真的已经想清楚,要踏足这个行业吗?”
“我能够付出比其他人更多的辛苦汗水,在这条路上坚定地走下去吗?”
“在遭受了痛苦甚至打击之后,我对机器学习的热爱,仍然能够维持我继续前进吗?”

根据我掌握的数据,100个程序员里大概有30个考虑过转型,而真正付诸行动的不过10个。一个月以后仍然在坚持的仅有5个,最终能完成第一个阶段学习的,最多两三个而已。

真的这么困难吗?是的。特别是你要白天上班,晚上才能学习,独学而无友,有问题又只能自己查。而要系统地入门,又不是咬牙一天两天就能学出来,恐怕得坚持几个月才能get到点。

我个人的经历是这样:一开始接触时,每周一、三、五固定3天时间,每晚花两个小时去学习、看视频、翻书,周六周日则用来完成课程附带的编程作业,大概也是每天两小时左右。在这种强度下坚持了三个月,我才算是完成了入门的第一步。

也许有的人效率更高一些,也许有的人步子更慢一些,但快和慢不是关键,即使学习最慢的人,也要比一开始放弃学习的人走得更远。

所以,其实真正重要的,不是“我该学什么”,或者“我该怎么学”;而是“我是不是真的有足够的决心”,以及“我是不是能坚持到底”。

上手的课程

定好决心后,我们就能看看:在学机器学习的时候,我们到底在学什么?

几乎所有人都知道人工智能这个概念;有一部分人知道“机器学习”这个概念;其中一小部分人能清楚描述“深度学习”、“机器学习”和“神经网络”的关系; 很少一部分人能够正确说明“卷积”、“池化”、“CTC”这些名词的正确含义与计算/实现的方法;非常少的人能清楚地理解损失函数和反向传播的数学表达;极少极少的人能够阐述网络的一个修改(比如把卷积核改小)对precision/recall会产生什么影响;几乎没有人能描述上述影响到底是什么原理。

MATLAB数字图像处理工具箱函数详解[转载]

常用图像处理函数表

本表转载自:http://blog.sina.com.cn/s/blog_89cb90270101eem9.html

表1 图像显示
函数名 功能说明 函数名 功能说明
colorbar 颜色条显示 montage 按矩形剪辑方式显示多帧图像
getimage 从坐标系中获取图像数据 immovie 从多帧索引图像中制作电影
image 建立显示图像 movie 播放电影
subimage 在同一图像窗口显示多个图像 trueszie 调整图像显示大小
imagesc 调整数据并显示图像 warp 显示图像为纹理映射表面
imshow 图像显示 zoom 二维图形放大或缩小
表2 图像文件输入/输出
函数名 功能说明 函数名 功能说明
imread 图像文件读入 load 将以mat为扩展名的图像文件调入到内存
imwrite 图像写出 save 将内存变量中图像保存到mat文件中
dicomread 读取DICOM图像 dicomwrite 输出DICOM图像
iminfo 查看图形信息    
表3 图像像素值及其统计
函数名 功能说明 函数名 功能说明
impixel 返回选定图像像素颜色值 imcontour 画图像数据轮廓(等高线,等值线)
improfile 图像中沿一个路径的数据值计算 imhist 求图像数据直方图
mean2 求均值 corr2 求相关系数
std2 求标准差    
表4 图像分析
函数名 功能说明 函数名 功能说明
edge 灰度图像边缘检测 qtgetblk 获得四叉树分解块值
qtecomp 执行四叉树分解 qtsetblk 设置四叉树分解块值
表5 图像增强及平滑
函数名 功能说明 函数名 功能说明
imadjust 对比度调整 medfilt2 二维中值滤波器
histeq 直方图均衡 ordfilt2 顺序统计滤波器
imnoise 给图像增加噪声 wiener2 二维自适应除噪滤波器
表6 图像线性滤波及二维线性滤波器设计
函数名 功能说明 函数名 功能说明
conv2 二维卷积 freqz2 计算二维频率响应
convmtx2 计算二维卷积矩阵 fsamp2 用频率抽样设计二维FIR滤波器
convn 多维卷积 ftrans 用频率抽样转换二维FIRlbq
filter2 二维线性数字滤波器 fwind1 用一维窗口方法设计二维FIR滤波器
fspecial 产生预定义滤波器 fwind2 用二维窗口方法设计二维FIR滤波器
frespace 确定二维频率响应间隔    
表7 图像变换
函数名 功能说明 函数名 功能说明
fft 计算一维快速Fourier变换 dct 计算离散余弦变换
ifft 计算一维FFT的逆变换 idct 计算离散反余弦变换
fft2 计算二维FFT dct2 计算2D离散余弦变换
ifft2 计算二维逆FFT idct2 计算2D反离散余弦变换
fftn 计算多维FFT dctmtx 计算TCT矩阵
ifftn 计算多维逆FFT radon 计算Radon变换
fftshift 直流分量移到频谱中心    
表8 图像领域及操作
函数名 功能说明 函数名 功能说明
bestblk 选择块处理的块大小 colfilt 使用列方向函数进行领域运算
blkproc 对图像实行不同的块处理 im2col 重排图像块为矩阵列
col2im 重排矩阵列成图像块 nlfilter 进行一般领域计算
表9 二值图像操作
函数名 功能说明 函数名 功能说明
applylut 使用查找表进行领域操作 bwperim 确定二值图像中的目标边界
bwarea 计算二值图像中的目标区域 bwselect 选择二值图像中的目标
bweuler 计算二值图像中的欧拉数 dilate 对二值图像进行膨胀计算
bwfill 二值图像背景区域填充 erode 对二值图像进行寝蚀运算
bwlabel 标识二值图像中的连接成分 makelut 构造查找表(applylut)使用
bwmorph 二值图像形态运算    
表10 基于区域的图像处理
函数名 功能说明 函数名 功能说明
roicolor 根据颜色选择要处理的区域 roifilt2 对要处理区域滤波
roifill 在任意区域内平滑差值 roipoly 选择要处理的多边形区域
表11 图像几何运算
函数名 功能说明 函数名 功能说明
imcrop 图像剪裁 imrotate 图像旋转
imresize 图像大小调整 interp2 二维数据差值
表12 图像颜色图操作
函数名 功能说明 函数名 功能说明
brighten 颜色图像变亮或变暗 colormap 设置获取图
cmpermute 重新排列颜色图中的颜色 imapprox 由颜色较少的图像近似索引图像
cmunique 寻找唯一的颜色图及相应的图像 rgbplot 绘制RGB颜色图
表13 颜色控件转换
函数名 功能说明 函数名 功能说明
hsv2rgb 将HSV颜色转化为RGB颜色值 mtsc2rgb 将NTSC值转换为RGB颜色空间值
rgb2hsv 将RGB颜色值转换为HSV颜色值 rgb2ntsc 将RGB值转换为NTSC颜色空间值

【转载自百度文库】

第3章 MATLAB数字图像处理工具箱

3.1 MATLAB图像预处理

3.1.1图像处理的基本操作

1. 读入并显示一幅图像

clear               %清除所有的工作平台变量

close all           %关闭已打开的图形窗口

I=imread (‘pout.tif’);   %读取图像pout.tif(该图像是图像处理工具箱自带的图像),

%存储在一个名为I的数组中

imshow(I)           %显示图像I

机器视觉:分享一些OpenCV实现立体视觉的经验[转载]

转载自:Footprint:Chengyao’s Technical Blog
尝试用OpenCV来实现立体视觉也有一段时间了,主要的参考资料就是Learning OpenCV十一、十二章和OpenCV论坛上一些前辈的讨论。过程中磕磕碰碰,走了不少弯路,终于在前不久解决了最头大的问题,把整个标定、校准、匹配的流程调试成功。(虽然还有一些问题至今尚未搞清)

在这里写这篇文章,第一方面是给自己一个总结,第二方面是感觉OpenCV立体视觉方面的资料还是相当零散和不完整,新手入门需要花很长时间才能摸索出来,第三方面,也是自己在过程中有些问题仍旧迷迷糊糊,希望可以抛砖引玉。

1. 摄像头

我用的摄像头是淘宝上买的三维摄像头,两个USB Camera加一个可调节的支架。实物照片如下

1.1 三维摄像头实物图

双USB摄像头的OpenCV驱动可以参考以下链接

http://www.opencv.org.cn/index.php/使用DirectShow采集图像

将上面代码复制到自己的工程之后还需要对工程或者编译环境做一下设置

VC6下的详尽设置可以见代码的注释(修改工程的属性)

VS2008中的设置也可以参照代码注释中VC++2005的设置(修改编译环境)