零基础小白,如何入门计算机视觉?

cv-life cv-life     2023-01-13     241

关键词:

计算机视觉是人工智能技术的一个重要领域,打个比方(不一定恰当),我认为计算机视觉是人工智能时代的眼睛,可见其重要程度。计算机视觉其实是一个很宏大的概念,下图是有人总结的计算机视觉所需要的技能树。

技术分享图片

 

如果你是一个对计算机视觉一无所知的小白,千万不要被这棵技能树吓到。没有哪个人能够同时掌握以上所有的技能,这棵树只是让你对计算机视觉有个粗浅的认识。

 

先来打点鸡血,看看计算机视觉有什么用吧。下面的视频是计算机视觉在自动驾驶上的实际应用,其中涉及立体视觉、光流估计、视觉里程计、三维物体检测与识别、三维物体跟踪等计算机视觉领域的关键技术。


以下是我站在一个小白的视角给出一个入门计算机视觉的相对轻松的姿势。

宏观认识

小白通常看到这么多的细分方向大脑一片茫然,到底是学习人脸识别、物体跟踪,又或者是计算摄影,三维重建呢?不知道该怎么下手。其实这些细分方向有很多共通的知识,我的建议是心急吃不了热豆腐,只有对计算机视觉这个领域有了一个初步的全面了解,你才能够结合实际问题找到自己感兴趣的研究方向,而兴趣能够支持一个自学的小白克服困难持续走下去。

 

1、入门书籍

既然说是入门,这里就不推荐类似《 Multiple View Geometry in Computer Vision》这种虽然经典但是小白看了容易放弃的书了。

 

像素级的图像处理知识是计算机视觉的底层基础知识。不管你以后从事计算机视觉的哪个细分领域,这些基础知识都是必须要了解的。即使一个急切入门的小白,这一关也必须走的踏实。看到网上有人说直接从某个项目开始,边做边学,这样学的快。对此我表示部分赞成,原因是他忽略了基础知识的重要性,脑子里没有基本的术语概念知识打底,很多问题他根本不知道如何恰当的表达,遇到问题也没有思路,不知道如何搜索,这会严重拖慢进度,也无法做较深入的研究,欲速则不达。

 

入门图像处理的基础知识也不是直接去啃死书,否则几个公式和术语可能就会把小白打翻在地。这里推荐两条途径,都是从实践出发并与理论结合:一个是OpenCV,一个是MATLAB。

 

OpenCV以C++为基础,需要具备一定的编程基础,可移植性强,运行速度比较快,比较适合实际的工程项目,在公司里用的较多;MATLAB只需要非常简单的编程基础就可以很快上手,实现方便,代码比较简洁,可参考的资料非常丰富,方便快速尝试某个算法效果,适合做学术研究。当然两者搭配起来用更好啦。下面分别介绍一下。

 

用MATLAB学习图像处理

推荐使用冈萨雷斯的《数字图像处理(MATLAB版)》(英文原版2001年出版,中译版2005年)。不需要一上来就全部过一遍,只需要结合MATLAB学习一下基本原理、图像变换、形态学处理、图像分割,以上章节强烈建议按照书上手动敲一遍代码(和看一遍的效果完全不同),其他章节可快速扫描一遍即可。但这本书比较注重实践,对理论的解释不多,理论部分不明白的可以在配套的冈萨雷斯的《数字图像处理(第二版)》这本书里查找,这本书主要是作为工具书使用,以后遇到相关术语知道去哪里查就好。

技术分享图片

 

 

用OpenCV学习图像处理

OpenCV(Open Source Computer Vision Library)是一个开源跨平台计算机视觉程序库,主要有C++预研编写,包含了500多个用于图像/视频处理和计算机视觉的通用算法。

 

学习OpenCV参考《学习OpenCV》或者《OpenCV 2 计算机视觉编程手册》都可以。这两本都是偏实践的书,理论知识较少,按照书上的步骤敲代码,可以快速了解到OpenCV的强大,想要实现某个功能,只要学会查函数(在https://www.docs.opencv.org/查询对应版本),调函数就可以轻松搞定。由于每个例子都有非常直观的可视化图像输出,所以学起来比较轻松有趣。

技术分享图片

 

 

2、进阶书籍

经过前面对图像处理的基本学习,小白已经了解了图像处理的基础知识,并且会使用OpenCV或MATLAB来实现某个简单的功能。但是这些知识太单薄了,并且比较陈旧,计算机视觉领域还有大量的新知识在等你。

 

同样给你两种选择,当然两个都选更佳。一本书是2010年出版的美国华盛顿大学Richard Szeliski写的《Computer Vision: Algorithms and Application》;一本是2012年出版的,加拿大多伦多大学Simon J.D. Prince写的《Computer Vision: Algorithms and Applications》。两本书侧重点不同,前者侧重视觉和几何知识,后者侧重机器学习模型。当然两本书也有互相交叉的部分。虽然都有中文版,但是如果有一定的英语阅读基础,推荐看英文原版(见文末获取方式)。老外写的书,图和示例还是挺丰富的,比较利于 理解。

技术分享图片

 

 

《Computer Vision: Algorithms and Application》

这本书图文并茂地介绍了计算机视觉这门学科的诸多大方向,有了前面《数字图像处理》的基础,这本书里有些内容你已经熟悉了,没有那么强的畏惧感。相对前面的图像处理基础本书增加了许多新的内容,比如特征检测匹配、运动恢复结构、稠密运动估计、图像拼接、计算摄影、立体匹配、三维重建等,这些都是目前比较火非常实用的方向。如果有时间可以全书浏览,如果时间不够,你可以根据兴趣,选择性的看一些感兴趣的方向。这本书的中文版翻译的不太好,可以结合英文原版看。

 

《Computer Vision: Models, Learning, and Inference》

该书从基础的概率模型讲起,涵盖了计算机视觉领域常用的概率模型、回归分类模型、图模型、优化方法等,以及偏底层的图像处理、多视角几何知识,图文并茂,并辅以非常多的例子和应用,非常适合入门。在其主页:

http://www.computervisionmodels.com/

上可以免费下载电子书。此外还有非常丰富的学习资源,包括给教师用的PPT、每章节对应的开源项目、代码、数据集链接等,非常有用。

技术分享图片

 

 

深入实践

当你对计算机视觉领域有了比较宏观的了解,下一步就是选一个感兴趣的具体的领域去深耕。这个时期就是具体编程实践环节啦,实践过程中有疑问,根据相关术语去书里查找,结合Google,基本能够解决你大部分问题。

 

那么具体选择什么方向呢?

 

如果你实验室或者公司有实际的项目,最好选择当前项目方向深耕下去。如果没有具体方向,那么继续往下看。

 

我个人认为计算机视觉可以分为两大方向:基于学习的方法和基于几何的方法。其中基于学习的方法最火的就是深度学习,而基于几何方法最火的就是视觉SLAM。下面就这两个方向给出一个相对轻松的入门姿势。

 

1、深度学习

深度学习(Deep Learning)的概念是Hinton等人于2006年提出的,最早最成功的应用领域就是计算机视觉,经典的卷积神经网络就是为专门处理图片数据而生。目前深度学习已经广泛应用在计算机视觉、语音识别、自然语言处理、智能推荐等领域。

 

学习深度学习需要一定的数学基础,包括微积分、线性代数,很多小白一听到这些课程就想起了大学时的噩梦,其实只用了非常基础的概念,完全不用担心。不过如果一上来就啃书本,可能会有强烈的畏难情绪,很容易早早的放弃。

 

Andrew Ng (吴恩达)的深度学习视频课程我觉得是一个非常好的入门资料。首先他本人就是斯坦福大学的教授,所以很了解学生,可以很清晰形象、深入浅出的从最基本的导数开始讲起,真的非常难得。

技术分享图片

 

该课程可以在网易云课程上免费观看,有中文字幕,但没有配套习题。也可以在吴恩达自己创办的在线教育平台Coursera上学习,有配套习题,限时免费,结业通过后有相应证书。

 

该课程非常火爆,不用担心听不懂,网上有数不清的学习笔记可以参考。简直小白入门必备佳肴。

 

2、视觉SLAM

SLAM(Simultaneous Localization and Mapping)(详见《SLAM初识》),中文译作同时定位与地图创建。视觉SLAM就是用摄像头作为主传感器,用拍摄的视频流作为输入来实现SLAM。视觉SLAM广泛应用于VR/AR、自动驾驶、智能机器人、无人机等前沿领域。

 

视觉SLAM最好的入门资料是高翔(清华博士,慕尼黑理工博后)的《视觉SLAM十四讲-从理论到实践》。该书每章节都涵盖了基础理论和代码示例,深入浅出,非常注重理论与实践结合,大大降低了小白的学习门槛。

技术分享图片

 

 

好了,入门介绍到此为止,你可以开始你的计算机视觉学习之旅了!

 

温馨提示:本文提到的部分书籍资料,在公号「计算机视觉life」菜单栏下方回复“入门”即可获取。

插入的视频不知道为什么无法观看,想看计算机视觉的应用视频,看这里:零基础小白,如何入门计算机视觉?

 


java入门零基础小白教程day06-类和对象(代码片段)

...在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。这里的 查看详情

从linux零基础小白到linux云计算架构师的成长之路!

##从Linux零基础小白到Linux云计算架构师的成长之路很多大学生或从事网管、Windows运维、实施、网络的人员,想了解,一个小白应该如何去入手学习Linux。作为一个搞了15年左右Linux架构的老司机,今天我就给大家详细讲一下如何... 查看详情

公开课零基础小白怎么快速入门java?

...什么要求:学历多高才够?英语和数学不好可以学吗?零基础小白,想学J 查看详情

opencv入门级图像处理教程,从小白到视觉算法工程师

OpenCV是一个开源的计算机视觉和机器学习软件库。OpenCV主要为开发计算机视觉程序提供一组公共的底层结构和加强商业产品中机器的感知能力。OpenCV使用BSD许可证,它可以被商用并可以修改源代码。OpenCV库有超过2500个已优化的算... 查看详情

计算机视觉入门及资料汇总

目录:(未完,持续更新)零、好的博客汇总:一、计算机视觉论文及代码汇总:二、特征提取算法汇总:三、深度学习与计算机视觉汇总:四、C和C++入门汇总:五、数据集汇总:  零、好的博客汇总:(1)jsxyhelu:https... 查看详情

小白福音!零基础入门软件测试,首选必备课程

...划1-4软件测试之“独孤九剑”第2章软件测试工程师必备基础知识本章将讲解软件的概念、软件的生命周期、软件测试方法、软件测试常见模型、软件测试的覆盖率及软件测试规范,一步步带你揭开测试大门。2-1软件的十大特性2-... 查看详情

java入门零基础小白教程day04-数组(代码片段)

day04_java基础课程目标1.【掌握】IDEA的基本使用2.【理解】什么是数组3.【掌握】数组的定义及初始化4.【理解】数组的内存图6.【理解】数组常见的问题7.【掌握】数组的案例8.【理解】二维数组开发工具一维数组什么是数组数组... 查看详情

java入门零基础小白教程day04-数组(代码片段)

day04_java基础课程目标1.【掌握】IDEA的基本使用2.【理解】什么是数组3.【掌握】数组的定义及初始化4.【理解】数组的内存图6.【理解】数组常见的问题7.【掌握】数组的案例8.【理解】二维数组开发工具一维数组什么是数组数组... 查看详情

零基础学java需知:java小白入门解疑大全

...xff0c;越来越多的人有意向到Java行业中发展。其实,零基础学习Java难度还是有的。Java的专业程度本身就不简单,学习这事本来就是一件非常煎熬的事情,人都不愿意学习,可是没办法&# 查看详情

自学c语言零基础看啥书该怎么学

...看过认为还不错的书:1)《C语言小白变怪兽》:既适合对计算机一窍不通的小白,也适合有编程基础的读者,还可以用来进阶。同时,最重要的是,这本书的作者还在不断地更新这本书,我认为最大的特点是通俗易懂,深入浅出... 查看详情

保姆级java入门练习教程,附代码讲解,小白零基础入门必备(建议收藏)(代码片段)

...#x1f332;本文收录于专栏《技术专家修炼》试用于学完「Java基础语法」后的巩固提高及「LeetCode刷题」前的小试牛刀。作者其它优质专栏推荐:📚《源码中的设计模式》——理论和实战的完美结合📚《leetcode300题》——... 查看详情

java零基础小白入门教程第五次课_方法(代码片段)

day05_java基础课程目标1.【理解】什么是方法2.【掌握】方法的格式3.【理解】方法的执行流程4.【掌握】方法的案例5.【理解】方法的重载6.【理解】方法参数的传递一.方法概述什么是方法方法(method)完成某一个特定功能... 查看详情

python基础语法入门(代码片段)

...课程:李宁《PythonPygame游戏开发入门与实战》李宁《计算机视觉OpenCVPython项目实战》1李宁《计算机视觉OpenCVPython项目实战》2李宁《计算机视觉OpenCVPython项目实战》3上一节课,我们了解了基础环境如何配置,这一节我... 查看详情

python基础语法入门(代码片段)

...课程:李宁《PythonPygame游戏开发入门与实战》李宁《计算机视觉OpenCVPython项目实战》1李宁《计算机视觉OpenCVPython项目实战》2李宁《计算机视觉OpenCVPython项目实战》3上一节课,我们了解了基础环境如何配置,这一节我... 查看详情

java零基础小白入门教程第三次课switch&循环(代码片段)

day03_java基础语法课程目标1.【掌握】掌握switch语句2.【掌握】for循环3.【掌握】while循环4.【理解】do...while循环5.【理解】三种循环之间的区别6.【理解】跳转控制语句7.【理解】循环的嵌套8.【掌握】Random的使用一.switch语句switch语... 查看详情

java零基础小白入门教程第三次课switch&循环(代码片段)

day03_java基础语法课程目标1.【掌握】掌握switch语句2.【掌握】for循环3.【掌握】while循环4.【理解】do...while循环5.【理解】三种循环之间的区别6.【理解】跳转控制语句7.【理解】循环的嵌套8.【掌握】Random的使用一.switch语句switch语... 查看详情

学习python爬虫推荐书籍

1、基础书籍:《Python编程》豆瓣评分:9.1分推荐指数:★★★★★推荐理由:架构非常漂亮,针对所有层次的Python读者而作的Python入门书,完美描绘了Python的“景象”,没有教科书式的分章节阐释语法,没有太复杂的概念延伸... 查看详情

java零基础小白必看的学习路线图,快速入门!

Javaweb是用Java技术来解决相关web互联网领域的技术总和。说的简单的就是写网站的一种语言。一般分为前端和后端两种方向,前端所做的东西就像幕前表演的演员,所做的就是让网页看起来顺眼,用起来顺心,而后端则属于处理... 查看详情