Bootstrap

一个老程序员的计算机视觉蹒跚学习之路| 社区征文

一、前言

老猿是个C++的老程序员,到底有多老呢,估计现在各平台发技术文章的博主中,很难有年龄比老猿大的。程序员这个活,是年轻人干的,并不怎么适合象我这种年纪的人,工作中也很少需要自己动手开发的。

2019年,各种因缘际会,老猿想学习一下Python,4月入住国内某程序员汇聚的知名技术博客,开启了老猿学习Python并分享学习体会之路,先是Python基础,接着是Python爬虫,然后是Python图像界面开发的PyQt,再接着是Python的音视频剪辑Moviepy,前后花费了1年半左右的时间,这期间发布了近1000篇博客,当然有灌水的内容,也有精华的文章,都是老猿自己学习的总结。

老猿是个对细节蛮纠结的人,很容易钻到各种学习的细节中去,优点就是有些深度的认识和收获,发布的博客文章有区别于别人的内容,缺点有两条,一是学习进展慢,二是有时耗时很久都钻不出某个问题,人很抓狂。不管怎么说,由于文章是老猿从小白的基础上去学习知识的总结,还是圈了一群粉,目前在博客网站粉丝已超5万,并且获得了该网站2020年博客之星评选的季军,也算是无心插柳了。

2020年下半年,一个老同学联系老猿,他开办的公司主要负责计算机视觉应用类软件的开发,例如用于石油行业钻井平台的监控,识别违规操作,提醒作业人员遵章守纪,主要使用OpenCV和人工智能YOLO3进行开发。但是遇到了一些难以解决的问题,一是基于AI的目标检测,依靠训练数据产生的目标识别能力存在不可控的问题,可能绝大多数情况识别都没有问题,但一旦存在问题时很难去解决,无法说出所以然,二是目标识别在多目标出现交叉重叠时无法精准识别,如多个人用不同姿势前后交叉站立,后排人员被遮挡后有些场景无法识别出来每个人。他想基于AI的目标识别加上对象组件化来解决这个问题,利用AI识别各个组件,如人的脑袋、手、足、躯干等,然后再基于这些组件去识别一个人,而不是用AI直接识别一个人,这样应该更精确。

老猿对AI根本没有研究,连图像处理都没学过,感觉帮不上他多少忙,但他给我打开了计算机视觉这扇门,于是从2020年8月开启了计算机视觉的学习之路。

二、计算机视觉涵盖的范围

在介绍学习经历前,我们先简单介绍一下计算机视觉,而在研究计算机视觉前,一个必须探讨的课题就是数字图像处理,数字图像处理从简单的图像对比度增强到图像识别再到计算机视觉,从简单图像处理到AI,涉及的领域跨度很大,并且没有明显的界限,但这一广袤的范围并不全都属于数字图像处理研究的范围。

一种常见的方法是将数字图像处理到计算机视觉这一广袤的范围划分成低级、中级、高级三个阶段:

这一年多的学习,老猿学习进展缓慢,还停留在数字图像处理的低级处理的初始阶段,目前学习了图像处理的部分基础概念和一些基础操作,包括图像处理的步骤、像素间的关系、图像空间相关和卷积、图像滤波、灰度变换、形态变换、图像直方图等相关概念,以及图像读取、保存、鼠标操作、事件捕获、阈值处理、算术运算、图像形态变换以及直方图均衡等OpenCV-Python的操作方法。可见学习进展缓慢。

三、老猿的计算机视觉学习过程

老猿离开大学太多年,高等数学知识已经忘光,同时以前没有学习过图像处理相关知识,导致在计算机视觉学习过程中步履艰难。老猿这一年多的学习过程基本分为三个阶段:

以上是老猿学习的艰难过程,导致这么进展缓慢的原因主要有三个方面,一是缺乏数学知识,二是没有好的可以指导的老师,三是老猿自己过于纠结,钻到一些很多人没关注的细节,并且不弄清楚不放弃,虽然从某种角度讲是个好精神,但在缺乏指导的情况下,这种方式效率太低。

四、学习计算机视觉需要的基础知识

以老猿现阶段已经学习的内容,谈谈计算机视觉学习需要掌握的基础知识,因尚在初级阶段学习,肯定不全,抛砖引玉罢了。

√ 图像的加减乘除、位运算、线性变换、图像相关与卷积、形态变换、仿射变换等,都与矩阵知识紧密相关;

√ 图像的集合运算需要用到集合运算相关知识;

√ 图像灰度变换用到的插值需要用到插值相关知识;

√ 图像灰度处理经常使用概率论相关知识;

√ 图像直方图处理需要了解直方图相关的概率统计知识以及微积分相关知识;

√ ......。

老猿大学毕业已经好多年,高数知识都忘光了,为此断断续续花了4个月时间将集合、线性代数、导数、微积分知识的基础知识全部重新学习了一遍,并且学习时自己被这些数学知识真正的吸引,比大学阶段的被动学习完全不可同日而语。所以如果大学刚毕业没多久,高数知识还在的同学,在学习计算机视觉和其他AI方向时就有很好的基础。

限于见识,就计算机视觉需要的基础知识老猿目前仅能说这么多,希望于大家有益。

五、给准备学习计算机视觉的同好的三点个人建议

在上面介绍了老猿所知的学习计算机视觉需要掌握的基础知识,在这里要谈三点非技术方面的建议: