什么是计算机视觉
一.引言
这篇文章既适合没有学过图像识别相关知识的人看,也适合刚刚从事图像识别相关工作不久的人看。
对本公司地图团队图像识别相关工作的作用:打下理论基础,基于本文提出的原则、理念对道路相关目标进行图像识别。
对团队其他人员的作用、解决的问题:
- 产品经理、销售人员能理解视觉产品能力边界。
- 图像标注人员更能站在图像识别算法人员的角度来进行标注。
- 同步团队对图像识别工作的认知。
二.什么是计算机视觉?
计算机视觉 = 让机器从图像或视频中提取“可用信息”的能力。
我们人眼看到的世界都是以图像的形式输入给计算机,然后让计算机反馈有用的信息。以下举几个例子:
|
场景 |
输入 |
输出 |
|
人脸识别 |
摄像头画面 |
这个人是谁 |
|
自动驾驶 |
前方道路图像 |
行人、车辆、车道线 |
|
工业检测 |
产品图像 |
是否有缺陷 |
|
道路病害 |
路面图像 |
裂缝、坑洞位置 |
图像只是“数据”,真正有价值的是从中提取的结构化信息。
三.图像vs视频vs流数据
计算机视觉的基础输入数据是图像,图像来源有很多,可以大致分为单张图像、视频文件、流数据三种。
3.1.图像
我们这里说的图像是日常的“照片图像”,也属于“数字图像”。在计算机内存或磁盘文件中,数字图像的底层组成就是基本数据类型(如uint8)构成的数组。
常见图像就是灰度图像与彩色图像。目前计算机视觉任务基本使用的是彩色图像。一张彩色图像由大量像素组成,每个像素包含三个分量(红、绿、蓝),分别表示该位置三种颜色的强度。如下图所示:

图3.1
每个小方格就可以代表一个像素,每个像素在计算机中是一个三维向量(R,G,B),R、G、B的数值取值范围为0到255,如(255,25,2),分别表示红绿蓝三个通道的强度。有这些数值,计算机才能对一张图进行视觉任务。
3.2.视频
视频本质上就是按时间排列组成的一系列彩色图像(帧)。视频可以看作在时间维度上扩展的像素数据,每一个时间点对应一帧图像,而每一帧图像由像素 (R, G, B) 组成。
3.3.流数据
流数据在生活中也很常见,比如你和别人发起视频聊天,通过网络传输到你设备上的就是流数据。本质上就是按时间连续产生、持续传输的数据序列。流数据是实时的,可以通过一系列操作获取到流数据中的每一帧图像。
四.计算机视觉的三大核心任务
4.1.图像分类
拿图3.1举例,该图输入视觉模型后需要给出该模型能够分类出的结果。如果该模型在训练时训练数据类别包含了“人”和“花”,那么模型在分类结果中就会给出“人”和“花”。
4.2.目标检测
依旧拿图3.1举例,目标检测任务不仅要能分类,还要定位出目标在图像中的位置,位置会以画框和数据的形式给出。大多数模型也会给出“置信度”,“置信度”代表模型对该检测出的目标分类把握有多大。如图4.1:

图4.1
4.3.图像分割
图像分割是像素级的任务,它会将模型检测出的目标在图像中占了哪些像素的结果给出。如图4.2所示。计算机中会输出“人所占全部像素的位置”和“花所占全部像素的位置”。

图4.2
五.计算机视觉的"不可解释性"
5.1.什么是“不可解释性”
在实际工程中,你很快会遇到一个非常“反直觉”的现象:模型给出了结果,但你不知道它“为什么这么判断”,这就是深度学习中的一个核心问题:不可解释性。
传统算法通常是“可解释”的,例如: (1)边缘检测 → 根据梯度变化(2)阈值分割 → 根据像素值大小 ,此时可以明确说出:“因为满足某个规则,所以结果是这样”。
但在深度学习(例如YOLO)中:
输入:一张图像;输出:一个检测框(人)
问题来了:
- 为什么是这个位置?
- 为什么置信度是0.8而不是0.6?
- 为什么有时候会误检?
没有明确规则可以解释。
5.2.本质原因
深度学习模型(CNN)本质是:通过大量数据学习“特征分布”,而不是规则。
也就是说:
- 深度学习模型不是在“理解人、理解花” 。
- 而是在匹配“像人的模式、像花的模式”。
5.3.带来的工程问题
5.3.1.难以debug
当结果错误时: 不是代码错了,也不是逻辑错了 ,而是“模型学歪了” ,无法像改代码一样Debug。
5.3.2.泛化不稳定
模型在训练集表现很好,但在新场景:光照变化、角度变化、材质变化,性能可能突然下降。
5.3.3.难以建立信任
在一些场景(如自动驾驶):你不能接受“它大概率是对的”,必须知道:(1)为什么这样判断?(2)这次判断是否可靠?(3)是否一直可靠?。
六.工程上如何“对抗不可解释性”
虽然无法完全解决,但可以“工程化缓解”。
6.1.1.数据优先(最有效)
用数据约束模型行为,80%的问题,可以通过数据解决。
- 清洗错误标注。
- 数据增强(亮度、模糊)。
- 增加困难样本(阴影、噪声)。
6.1.2.可视化分析
例如: 热力图(Grad-CAM), 用来观察:模型到底在“看哪里”。如图6.1,偏红部位就是模型更关注的特征。

图6.1
6.1.3.结果约束(工程技巧)
在你的项目中可以这样做:
- 限制检测区域。
- 结合上帧信息过滤异常 。
- 加规则(例如面积、形状)。
模型识别结果 + 工程规则 → 更稳定输出。
6.1.4.多传感器融合
图像中没有物体的三维信息,如果有激光雷达可排除部分错误识别。例如:相机检测到水泥墙上的裂缝 ,模型识别成路面裂缝,这时候就跟根据高度来排除。
七.一个重要认知转变
新手、外行思维:“模型应该是能做到100%正确的,或者无限接近100%”。
工程思维:模型一定会犯错,系统要能容错。
八.计算机视觉系统是如何工作的?
一个完整项目或系统通常不是“模型 = 全部”,而是一系列流程。且工程中80%的问题,发生在“模型之外”。
新手刚接触一个视觉模型通常是这样:
加载模型 → 输入图片 → 输出结果
如果工程不仅仅是纯图像工程,则工程中变成:
多数据采集 → 修正、融合 → 推理 → 计算业务数据等等 → 入库、输出
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)