这是一个转型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会产生什么影响;几乎没有人能描述上述影响到底是什么原理。
视频:TED演讲《Google无人驾驶汽车的工作原理简介》
编程:Processing 和 Java 中的 OpenCV 库
MATLAB数字图像处理工具箱函数详解[转载]
常用图像处理函数表
本表转载自:http://blog.sina.com.cn/s/blog_89cb90270101eem9.html
函数名 | 功能说明 | 函数名 | 功能说明 |
---|---|---|---|
colorbar | 颜色条显示 | montage | 按矩形剪辑方式显示多帧图像 |
getimage | 从坐标系中获取图像数据 | immovie | 从多帧索引图像中制作电影 |
image | 建立显示图像 | movie | 播放电影 |
subimage | 在同一图像窗口显示多个图像 | trueszie | 调整图像显示大小 |
imagesc | 调整数据并显示图像 | warp | 显示图像为纹理映射表面 |
imshow | 图像显示 | zoom | 二维图形放大或缩小 |
函数名 | 功能说明 | 函数名 | 功能说明 |
---|---|---|---|
imread | 图像文件读入 | load | 将以mat为扩展名的图像文件调入到内存 |
imwrite | 图像写出 | save | 将内存变量中图像保存到mat文件中 |
dicomread | 读取DICOM图像 | dicomwrite | 输出DICOM图像 |
iminfo | 查看图形信息 | |
|
函数名 | 功能说明 | 函数名 | 功能说明 |
---|---|---|---|
impixel | 返回选定图像像素颜色值 | imcontour | 画图像数据轮廓(等高线,等值线) |
improfile | 图像中沿一个路径的数据值计算 | imhist | 求图像数据直方图 |
mean2 | 求均值 | corr2 | 求相关系数 |
std2 | 求标准差 | |
|
函数名 | 功能说明 | 函数名 | 功能说明 |
---|---|---|---|
edge | 灰度图像边缘检测 | qtgetblk | 获得四叉树分解块值 |
qtecomp | 执行四叉树分解 | qtsetblk | 设置四叉树分解块值 |
函数名 | 功能说明 | 函数名 | 功能说明 |
---|---|---|---|
imadjust | 对比度调整 | medfilt2 | 二维中值滤波器 |
histeq | 直方图均衡 | ordfilt2 | 顺序统计滤波器 |
imnoise | 给图像增加噪声 | wiener2 | 二维自适应除噪滤波器 |
函数名 | 功能说明 | 函数名 | 功能说明 |
---|---|---|---|
conv2 | 二维卷积 | freqz2 | 计算二维频率响应 |
convmtx2 | 计算二维卷积矩阵 | fsamp2 | 用频率抽样设计二维FIR滤波器 |
convn | 多维卷积 | ftrans | 用频率抽样转换二维FIRlbq |
filter2 | 二维线性数字滤波器 | fwind1 | 用一维窗口方法设计二维FIR滤波器 |
fspecial | 产生预定义滤波器 | fwind2 | 用二维窗口方法设计二维FIR滤波器 |
frespace | 确定二维频率响应间隔 | |
|
函数名 | 功能说明 | 函数名 | 功能说明 |
---|---|---|---|
fft | 计算一维快速Fourier变换 | dct | 计算离散余弦变换 |
ifft | 计算一维FFT的逆变换 | idct | 计算离散反余弦变换 |
fft2 | 计算二维FFT | dct2 | 计算2D离散余弦变换 |
ifft2 | 计算二维逆FFT | idct2 | 计算2D反离散余弦变换 |
fftn | 计算多维FFT | dctmtx | 计算TCT矩阵 |
ifftn | 计算多维逆FFT | radon | 计算Radon变换 |
fftshift | 直流分量移到频谱中心 | |
|
函数名 | 功能说明 | 函数名 | 功能说明 |
---|---|---|---|
bestblk | 选择块处理的块大小 | colfilt | 使用列方向函数进行领域运算 |
blkproc | 对图像实行不同的块处理 | im2col | 重排图像块为矩阵列 |
col2im | 重排矩阵列成图像块 | nlfilter | 进行一般领域计算 |
函数名 | 功能说明 | 函数名 | 功能说明 |
---|---|---|---|
applylut | 使用查找表进行领域操作 | bwperim | 确定二值图像中的目标边界 |
bwarea | 计算二值图像中的目标区域 | bwselect | 选择二值图像中的目标 |
bweuler | 计算二值图像中的欧拉数 | dilate | 对二值图像进行膨胀计算 |
bwfill | 二值图像背景区域填充 | erode | 对二值图像进行寝蚀运算 |
bwlabel | 标识二值图像中的连接成分 | makelut | 构造查找表(applylut)使用 |
bwmorph | 二值图像形态运算 | |
|
函数名 | 功能说明 | 函数名 | 功能说明 |
---|---|---|---|
roicolor | 根据颜色选择要处理的区域 | roifilt2 | 对要处理区域滤波 |
roifill | 在任意区域内平滑差值 | roipoly | 选择要处理的多边形区域 |
函数名 | 功能说明 | 函数名 | 功能说明 |
---|---|---|---|
imcrop | 图像剪裁 | imrotate | 图像旋转 |
imresize | 图像大小调整 | interp2 | 二维数据差值 |
函数名 | 功能说明 | 函数名 | 功能说明 |
---|---|---|---|
brighten | 颜色图像变亮或变暗 | colormap | 设置获取图 |
cmpermute | 重新排列颜色图中的颜色 | imapprox | 由颜色较少的图像近似索引图像 |
cmunique | 寻找唯一的颜色图及相应的图像 | rgbplot | 绘制RGB颜色图 |
函数名 | 功能说明 | 函数名 | 功能说明 |
---|---|---|---|
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的设置(修改编译环境)