一.引言

这篇文章既适合没有学过图像识别相关知识的人看,也适合刚刚从事图像识别相关工作不久的人看。

对本公司地图团队图像识别相关工作的作用:打下理论基础,基于本文提出的原则、理念对道路相关目标进行图像识别。

对团队其他人员的作用、解决的问题:

  1. 产品经理、销售人员能理解视觉产品能力边界
  2. 图像标注人员更能站在图像识别算法人员的角度来进行标注。
  3. 同步团队对图像识别工作的认知。

二.什么是计算机视觉?

计算机视觉 = 让机器从图像或视频中提取“可用信息”的能力

我们人眼看到的世界都是以图像的形式输入给计算机,然后让计算机反馈有用的信息。以下举几个例子:

场景

输入

输出

人脸识别

摄像头画面

这个人是谁

自动驾驶

前方道路图像

行人、车辆、车道线

工业检测

产品图像

是否有缺陷

道路病害

路面图像

裂缝、坑洞位置

图像只是“数据”,真正有价值的是从中提取的结构化信息

三.图像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)本质是:通过大量数据学习“特征分布”,而不是规则

也就是说:

  1.  深度学习模型不是在“理解人、理解花
  2.  而是在匹配“像的模式、像花的模式 

5.3.带来的工程问题

5.3.1.难以debug

当结果错误时: 不是代码错了,也不是逻辑错了 ,而是“模型学歪了” ,无法像改代码一样Debug。

5.3.2.泛化不稳定

模型在训练集表现很好,但在新场景:光照变化角度变化材质变化性能可能突然下降

5.3.3.难以建立信任

在一些场景(如自动驾驶):你不能接受“它大概率是对的”必须知道:(1)为什么这样判断?(2)这次判断是否可靠?(3)是否一直可靠?。

六.工程上如何“对抗不可解释性”

虽然无法完全解决,但可以“工程化缓解”

6.1.1.数据优先(最有效)

用数据约束模型行为80%的问题,可以通过数据解决

  1.  清洗错误标注 
  2.  数据增强(亮度、模糊)
  3.  增加困难样本(阴影、噪声) 

6.1.2.可视化分析

例如: 热力图(Grad-CAM) 用来观察:模型到底在“看哪里”。如图6.1,偏红部位就是模型更关注的特征。

图6.1

6.1.3.结果约束(工程技巧)

在你的项目中可以这样做:

  1.  限制检测区域 
  2.  结合上帧信息过滤异常
  3.  加规则(例如面积、形状) 

模型识别结果 + 工程规则 → 更稳定输出

6.1.4.多传感器融合

图像中没有物体的三维信息,如果有激光雷达可排除部分错误识别。例如:相机检测到水泥墙上的裂缝 ,模型识别成路面裂缝,这时候就跟根据高度来排除。

七.一个重要认知转变

新手、外行思维:“模型应该是能做到100%正确的,或者无限接近100%

工程思维:模型一定会犯错,系统要能容错

八.计算机视觉系统是如何工作的?

一个完整项目或系统通常不是“模型 = 全部”,而是一系列流程。且工程中80%的问题,发生在“模型之外”

新手刚接触一个视觉模型通常是这样:

加载模型 → 输入图片 → 输出结果

如果工程不仅仅是纯图像工程,则工程中变成:

多数据采集 → 修正、融合 → 推理 → 计算业务数据等等 → 入库、输出

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐