计算机视觉的来世今生

359 阅读21分钟

EAKaKz2AAADLuFDulWZD-KnRpo85wL7W.jpeg

忽略目标,保持好奇心,我们会得到另外一个世界






一、什么是 AI

AI(人工智能)是一个广泛的领域,包含多个细分领域,每个领域专注于不同类型的问题或数据处理方法。这些细分领域各自有其研究方向和应用场景。以下是 AI 的主要细分领域及其具体描述:

1. 机器学习(Machine Learning, ML)

  • 概述:机器学习是 AI 的核心部分,研究如何使计算机系统能够从数据中学习,并在没有明确编程的情况下进行预测或决策。
  • 主要技术:包括监督学习、无监督学习、半监督学习、强化学习等。
  • 应用:
    • 推荐系统:如 Netflix 和 YouTube 的内容推荐。
    • 金融预测:如股票预测和信用评分。
    • 医疗诊断:如预测疾病和发现病症模式。

2. 深度学习(Deep Learning, DL)

  • 概述:深度学习是机器学习的一个子集,使用多层神经网络来模拟人脑结构,能处理高维度和复杂的任务,特别适用于图像、语音和文本数据。
  • 主要技术:卷积神经网络(CNN)、循环神经网络(RNN)、生成对抗网络(GAN)、自编码器等。
  • 应用:
    • 图像识别:如自动驾驶汽车的路况识别和人脸识别。
    • 自然语言处理:如机器翻译和语音识别。
    • 内容生成:如图像生成、风格迁移、文字生成。

3. 自然语言处理(Natural Language Processing, NLP)

  • 概述:NLP 使得计算机能够理解、生成和处理人类语言,涵盖文本分析、情感分析、机器翻译等任务。
  • 主要技术:词向量、词嵌入(Word Embedding)、BERT、GPT 等。
  • 应用:
    • 聊天机器人:如客服聊天机器人、虚拟助手(如 Siri、Alexa)。
    • 机器翻译:如 Google 翻译。
    • 情感分析:如分析社交媒体的情绪倾向,用于市场研究或用户反馈分析。

4. 计算机视觉(Computer Vision, CV)

  • 概述:计算机视觉使计算机“看懂”图像或视频,分析和理解图像的内容。
  • 主要技术:图像分类、目标检测、图像分割、人脸识别等。
  • 应用:
    • 自动驾驶:用于识别车道、交通标志和行人。
    • 医疗图像分析:如 X 光片和 MRI 图像的分析,协助医生进行诊断。
    • 安防监控:如人脸识别和行为监控。

5. 强化学习(Reinforcement Learning, RL)

  • 概述:强化学习是通过试错的方式,从环境的反馈中学习最佳策略,适用于需要长期决策的任务。
  • 主要技术:Q-learning、策略梯度、深度强化学习等。
  • 应用:
    • 游戏 AI:如 AlphaGo、AlphaZero 通过自我对弈学习最优策略。
    • 机器人控制:使机器人学会自主导航和动作决策。
    • 推荐系统优化:根据用户反馈不断优化推荐策略。

6. 专家系统(Expert Systems)

  • 概述:专家系统模仿人类专家在特定领域的决策过程,通常基于规则和知识库。
  • 主要技术:规则推理、知识表示。
  • 应用:
    • 医疗诊断:帮助医生在疾病诊断中提供建议。
    • 法律咨询:为法律决策提供参考和支持。
    • 财务分析:协助进行投资和财务规划。

7. 机器人学(Robotics)

  • 概述:机器人学是 AI 和工程学的结合,通过物理设备实现智能行为,涉及机器人自主导航、运动控制等。
  • 主要技术:传感器融合、路径规划、运动控制、物体抓取。
  • 应用:
    • 自动化工厂:机器人在流水线执行装配、搬运等任务。
    • 服务机器人:如送餐机器人、物流机器人等。
    • 无人机:用于巡逻、快递、农业勘测等。

8. 生成对抗网络(Generative Adversarial Networks, GANs)

  • 概述:GAN 是一种生成模型,由生成器和判别器组成,通过对抗训练生成高质量的数据,如图像、音频等。
  • 主要技术:生成器、判别器、对抗训练。
  • 应用:
    • 图像生成:生成高分辨率图像、图像修复、超分辨率。
    • 视频和音频生成:生成视频或音乐内容。
    • 图像风格迁移:如将照片转换为特定艺术风格。

9. 数据挖掘(Data Mining)

  • 概述:数据挖掘是从大规模数据中发现模式和关联性,通常与机器学习结合使用。
  • 主要技术:聚类、分类、关联规则挖掘。
  • 应用:
    • 市场分析:用于客户细分、市场研究。
    • 欺诈检测:识别异常模式,防止欺诈行为。
    • 推荐系统:分析用户行为,为其推荐合适的内容或商品。

10. 情感计算(Affective Computing)

  • 概述:情感计算专注于识别、理解和适应人类的情感状态,使人机交互更加自然。
  • 主要技术:情感分析、面部表情识别、语音情感分析。
  • 应用:
    • 心理健康监控:用于情绪识别、心理健康状态跟踪。
    • 情感分析:在市场营销中了解用户情绪和反馈。
    • 智能客服:根据用户情绪调整回复风格,提供更友好的人机互动。

11. 语音识别(Speech Recognition)

  • 概述:语音识别使计算机能够将人类的语音转换为文本,是自然语言处理的重要分支。
  • 主要技术:声学模型、语言模型、发音词典。
  • 应用:
    • 语音助手:如 Siri、Alexa,实现语音命令识别和回答。
    • 自动字幕生成:用于视频和会议的字幕生成。
    • 语音转文字:转录语音内容,常用于语音消息、电话会议等场景。

12. 推荐系统(Recommendation Systems)

  • 概述:推荐系统根据用户的行为或兴趣,为其推荐个性化内容。
  • 主要技术:协同过滤、基于内容的推荐、混合推荐、深度学习推荐。
  • 应用:
    • 电商平台:如亚马逊的商品推荐。
    • 流媒体服务:如 Netflix、Spotify 的视频和音乐推荐。
    • 新闻和社交媒体:为用户推荐个性化的新闻或帖子。





二、AI 对前端领域的影响

  1. 丰富用户交互方式

    • 华为 mate70 通过手势隔空投送
  2. 人脸识别和情绪分析:前端应用可以实时检测用户的人脸,进行身份验证(如登录)、个性化推荐或情绪分析。

  3. 语音和图像交互:用户可以通过上传图片快速搜索商品,语音命令实现快速操作。

  4. 前端智能化,不再强依赖服务端

    • 自动化图像处理:前端页面可以实现 AI 驱动的实时图像编辑(如滤镜、增强、去背景等)。
    • 图像识别:通过 OCR(光学字符识别)和 NLP(自然语言处理),前端可以自动提取用户上传的文件或图片中的信息
  5. 提高前端开发效率

    • 前端代码生成和优化:AI 自动生成页面代码(如 HTML、CSS、JavaScript),或优化代码性能。
    • UI/UX 设计自动化:通过计算机视觉模型,AI 能够将设计稿(如 Figma、Sketch)自动转换为前端代码。
    • 智能调试与测试:AI 模型帮助前端开发者自动定位和修复代码中的 Bug,或自动生成测试用例。





三、计算机视觉的发展史

  1. 初期探索阶段(1960s-1980s)
    • 背景:计算机视觉在这一阶段处于早期研究阶段,主要依赖数学和几何方法进行图像处理。
    • 方法:早期的方法多为基于规则和几何的简单算法,如边缘检测、图像分割、形状匹配等。通过数学模型和简单算法,试图提取图像中的形状和轮廓。
    • 局限性:这些方法对噪声和图像的复杂性非常敏感,难以应对多样化的图像特征,尤其在处理自然场景中的复杂物体时效果较差。
  2. 基于特征和机器学习的方法(1980s-2010s)
    • 背景:随着计算机性能的提高,研究人员开始采用统计方法进行特征提取和分类,并结合机器学习来提高图像识别的准确性。
    • 主要技术:
    • 特征提取方法:如 SIFT(尺度不变特征)、SURF(加速鲁棒特征)、HOG(方向梯度直方图)等,用于提取图像中的特征点,便于分类和识别。
    • 传统机器学习:如支持向量机(SVM)、K-近邻(KNN)等,用于对提取的特征进行分类。
    • 局限性:这些方法依赖于人为设计的特征提取算法,难以适应图像的多样性。在复杂场景、不同角度和光照下,表现仍然有限。手工设计的特征也往往难以兼顾计算效率和识别准确性。
  3. 深度学习的崛起(2012年-至今)
    • 背景:2012年,深度学习在图像分类挑战赛 ImageNet 中展现出突破性成果,AlexNet 模型在该比赛中显著超越了传统算法的表现,标志着深度学习在计算机视觉中的崛起。
    • 关键技术:
      • 卷积神经网络(CNN):CNN 利用多层神经网络和卷积操作来自动提取图像的低级到高级特征,消除了对手工特征设计的依赖。
      • 大型数据集和强大计算资源:随着 ImageNet 等大型数据集的开放,研究人员能够利用大量标注数据来训练深度神经网络,且 GPU 的发展提供了足够的计算力。
      • 迁移学习:预训练的深度学习模型(如 VGG、ResNet 等)可以在新任务中通过迁移学习快速适应新的数据,大大降低了训练成本。
    • 深度学习带来的关键突破:
      • 自动特征提取:深度学习网络通过多层卷积层逐级提取图像的特征,从低级特征(如边缘、纹理)到高级语义特征(如物体和场景)。这种自动特征提取能力克服了传统手工设计特征的局限性,使得模型可以适应更多样化的图像数据。
      • 模型性能显著提升:深度学习模型尤其在大规模数据集上表现出色,错误率显著低于传统算法。在 ImageNet 之后,深度学习推动了计算机视觉领域的多项任务(如目标检测、图像分割、图像生成)取得突破性进展。
      • 强大的迁移学习能力:深度学习模型可以从大型数据集(如 ImageNet)上学习到通用特征,并迁移到其他视觉任务中,使得许多小规模数据集的任务也能受益。

深度学习和传统机器学习的区别:

简单说两者最核心的区别就是深度学习通过 CNN 能够自动提取图像特征,而传统机器学习通常依赖人工设计特征。“说人话”就是传统机器就是个机器,符合单一输出原则,而深度学习是真正的“学习”。举个例子,比如我们要识别图片中画的是否是一只猫:

传统机器学习的做法

  1. 人工设计规则(手工设计特征):
    • 想象你是一个艺术家,需要自己分析“猫”的特点:猫有耳朵、有胡须、有圆圆的眼睛、身体上有毛发……
    • 你需要为机器定义一堆规则。例如:
      • 边缘特征:图像中有没有两只尖耳朵的轮廓?
      • 纹理特征:图像中有没有“毛茸茸”的区域?
      • 形状特征:有没有一个圆形的头和一个椭圆形的身体?
    • 这些规则需要用编程实现,也就是传统机器学习的“特征提取”阶段。
  2. 输入这些特征到机器学习算法:
    • 把这些定义好的特征交给模型(如 SVM 或决策树),让它根据这些特征学会分辨“猫”和“非猫”。 问题:
    • 这种方法很依赖你设计的规则。如果规则写得不够全面,比如没有考虑光线暗的照片或猫的侧脸,模型就很难识别出猫。
    • 总结:传统方法就像人工制定“猫的1标准”,机器只是照着这些标准做选择,没有自主学习的能力。

深度学习的做法:自动学习特征

CNN 的方法就像一个“勤奋又聪明的学生”,不需要我们告诉它猫长什么样,而是自己从图片中学习和总结猫的特征。 步骤:

  1. 把图片交给 CNN:
    • 我们直接把图片(像素数据)输入 CNN,不需要提前设计规则。
    • 对于猫的图片,CNN 会自动去找出哪些像素或图案是猫的“特征”。
  2. 输出结果:
    • 最终,CNN 会输出一个概率值,比如:
      • 是猫:95%
      • 不是猫:5% 问题解决:CNN 的优势
  • CNN 不需要人工去定义规则,而是通过大量猫的图片自己学习“猫的特征”。
  • 它能够适应不同场景的图片(比如光线暗、猫的姿势不同等),因为它能从数据中总结规律。

通俗类比:可以把 CNN 和人类学习的过程进行类比:

  • 人类小孩学识别猫:你不用告诉孩子“猫的耳朵是尖的,眼睛是圆的”,只需要给孩子看足够多的猫的图片,他会自己发现规律,比如猫有毛、耳朵尖、眼睛圆,而篮球虽然是圆的,但没有毛和耳朵,所以不是猫。
  • CNN 学识别猫:CNN 和孩子一样,通过“看”图片自己发现规律,学会区分“猫”和“非猫”。





四、AI 是如何“学习”到图片内容的呢?就还拿识别图片上的猫举例

第一步:数据收集和准备

  • 收集数据:首先需要收集大量包含猫和非猫的图像数据。为了让模型具备泛化能力,数据集应包含各种各样的猫的照片,涵盖不同品种、颜色、角度、背景等变化。
  • 数据标注:将这些图片进行标注,即明确标记哪些图片中有猫、哪些没有,通常需要人类标注,以确保数据准确性。
  • 数据清洗:清理和整理数据,去除模糊、不清晰或误标的图片,以提高数据质量。

第二步:数据预处理

  • 图像缩放和标准化:将所有图像调整为统一大小,以便输入模型。同时可以对像素值进行归一化处理(例如缩放到[0,1]),使数据分布稳定,帮助模型更快地收敛。
  • 数据增强:为了增加数据的多样性,可以对图像进行数据增强,如旋转、裁剪、翻转等。这有助于提高模型的鲁棒性,使其在不同角度和背景下都能识别出猫。

第三步:构建神经网络模型

  • 选择模型架构:通常使用卷积神经网络(CNN)来进行图像分类任务。CNN能很好地提取图像的空间特征,并保留图像的结构信息。
  • 设置层结构:构建模型的卷积层、池化层和全连接层。卷积层用于提取图像中的特征,池化层用于降低数据维度、减少计算量,而全连接层则用于最后的分类决策。
  • 激活函数:选择合适的激活函数(如ReLU),使得网络能够捕捉图像的非线性特征。

第四步:训练模型

  • 前向传播和误差计算:将图片输入模型,得到初始的预测结果,并计算与真实标签的误差。
  • 反向传播和参数更新:通过反向传播算法计算误差的梯度,使用优化算法(如梯度下降)更新权重,逐步减少误差,使模型学会识别猫的特征。
  • 训练迭代:经过多轮迭代训练(称为“epoch”),模型逐渐学会区分“猫”和“非猫”图片。

第五步:模型评估和优化

  • 验证集评估:在训练过程中,用验证集来测试模型的效果,评估模型是否存在过拟合或欠拟合情况。通过观察验证集的准确率、召回率等指标,判断模型的表现。
  • 模型优化:如果模型表现不佳,可以通过调整参数(如学习率、层数等)、增加数据量或进行数据增强等方式优化模型。
  • 测试集评估:最后,用一个从未见过的数据集(测试集)来评估模型的最终表现,检验其在真实场景下的泛化能力。

第六步:部署模型

  • 模型部署:当模型训练完成并且在测试集上表现良好,就可以将模型部署到实际应用中。部署方式可以是将模型集成到应用程序中,或者通过云端服务器部署以供调用。
  • 持续监控和更新:在实际使用中,监控模型的表现,收集更多新的数据,定期重新训练和更新模型,以保证识别猫的准确性不随时间而下降。

第七步:推理与识别

  • 当有新图像输入时,模型会对图片进行推理(即前向传播),输出“猫”或“非猫”的分类结果。
  • 阈值调整:模型通常会输出属于“猫”的概率,通过设定一个阈值(如0.5),如果概率高于阈值则判断为“猫”,否则为“非猫”。





五、核心:CNN 是如何提取图像特征的?

1. 将图像转换为矩阵

2. 数据输入与预处理

在 CNN 中,输入通常是一个 RGB 图像,即 3 个通道的矩阵(对应红、绿、蓝),每个像素的值表示颜色的强度。在输入前,通常进行一些预处理,如: - 归一化:将每个像素值缩放到 0 到 1 之间(或者 -1 到 1 之间)【除以 255】,以加速收敛并减少梯度爆炸或消失的可能性。 - 尺寸调整:如果图像的尺寸不统一,需要将它们调整到相同的大小(例如 224x224),以适应模型输入要求。【长宽不一定要相等,只是相等的话计算更加方便】 - 数据增强:如旋转、翻转、裁剪等技术,增强数据多样性,提高模型泛化能力。

3. 卷积操作(Convolution Operation)

卷积神经网络的核心操作是卷积。卷积操作通过一个小的滤波器(kernel)在图像上滑动,逐步提取局部特征。卷积的具体过程如下: - 滤波器定义:滤波器的大小通常为 (3 \times 3)、(5 \times 5) 等,初始化时会随机赋值,之后在训练过程中不断更新。 - 滑动卷积:滤波器在图像上滑动,每次选取一小块图像区域,计算该区域与滤波器元素的乘积和,然后生成一个输出值,称为“特征图”。 - 将卷积核放置在图像的左上角,然后将卷积核与图像区域进行元素相乘并求和,得到一个新的数值,称为卷积结果。 - 将卷积核向右滑动一定步长(通常步长为 1 或 2),对下一部分区域重复同样的操作。 - 当卷积核遍历完一行后,移到下一行,继续在图像上滑动,直到遍历整个图像。

例如,对于一个 3x3 卷积核在图像上的操作:

Image Matrix (5x5 example):
[ [1, 2, 3, 0, 1],
 [0, 1, 2, 3, 4],
 [2, 1, 0, 1, 3],
 [1, 0, 3, 2, 1],
 [3, 2, 1, 0, 2]
]

Convolution Kernel (3x3):
[ [1, 0, -1],
 [1, 0, -1],
 [1, 0, -1]
]
  • 将卷积核覆盖在图像的左上角,并进行点积计算(即元素相乘后求和):
  • Result = (1*1 + 2*0 + 3*(-1) + 0*1 + 1*0 + 2*(-1) + 2*1 + 1*0 + 0*(-1)) = -1
  • 将这个结果存储在一个新的矩阵中,这个矩阵即为卷积特征图。
    • 特征图的尺寸通常比原图像小,因为卷积核滑动过程中边缘区域会略微丢失。可以通过**填充(padding)**在图像边缘添加额外像素来保持特征图尺寸与输入图像相同。
  • 激活函数:卷积操作之后,通常应用 ReLU 激活函数,使特征图中的负值变为 0,从而引入非线性,提升模型对复杂模式的表达能力。
  • 特征图生成:滑动完成后,生成的所有值组成了一个新的矩阵,即特征图(Feature Map),它捕捉到特定滤波器所关注的特征模式。

4. 池化操作(Pooling)

池化操作是卷积神经网络的一种降采样技术,用于减少计算量、控制过拟合并提取特征的空间不变性。最常见的池化方法是最大池化(Max Pooling)和平均池化(Average Pooling)。

  • 最大池化:在特征图上选取一个滑动窗口(如 (2 \times 2)),只保留窗口区域内的最大值,从而减少图像尺寸。
  • 平均池化:取窗口内的平均值,虽然减少信息丢失,但通常不如最大池化效果好。

池化操作后,图像的空间尺寸会减小,但深度保持不变,这样可以压缩特征图,减少数据冗余。

5. 多层卷积与池化

CNN 通常包含多层卷积和池化操作,逐层提取更高级的特征。早期层提取简单的边缘、纹理等低级特征,随着层数的加深,提取的特征会越来越复杂,捕捉到图像中的模式、形状等高级信息。

例如:

  • 第一层:卷积滤波器可能捕捉边缘、线条等基本形状特征。
  • 中间层:可以提取简单形状组合而成的特征,如角、纹理等。
  • 后期层:识别特定物体的轮廓和特定模式,甚至可以识别出具体物体。

6. 全连接层(Fully Connected Layer)

在卷积层和池化层处理完成后,特征图会被展平成一个向量,通过全连接层进行处理:

  • 展平操作:将多维特征图展平成一维向量,使其能进入全连接层。
  • 全连接层处理:输入向量经过一系列的全连接层,每层包含一定数量的神经元,用于组合之前提取到的特征。

全连接层主要用于将图像特征整合起来,形成对图像内容的高层次理解。这些神经元的输出表示了图片中所含特征的组合模式。

7. 输出层

输出层的设计取决于具体的任务。如果是分类任务,输出层通常是一个 Softmax 层,将特征映射到每个类的概率分布;如果是回归任务,则输出层为一个线性层,用于预测连续值。

8. 反向传播与优化

卷积神经网络的参数(卷积滤波器、全连接层的权重)通过反向传播和优化算法(如 SGD、Adam)进行更新,以降低损失函数值。具体步骤如下:

  • 损失计算:比较模型输出与真实标签,计算损失(如交叉熵损失、均方误差)。
  • 反向传播:通过链式法则计算梯度,将误差从输出层逐层反向传播到前面各层,直到卷积滤波器。
  • 权重更新:根据梯度值,利用优化算法更新权重,使模型逐渐学习到有用的特征。

9. 特征提取过程总结

在整个卷积神经网络中,每一层卷积层提取图像的不同特征,通过多层结构逐步抽象出高级特征。这种分层结构允许 CNN 自适应地学习图片中的复杂模式与结构。

  • 初级特征:简单形状、边缘。
  • 中级特征:组合的几何图形、纹理。
  • 高级特征:具体物体模式、结构。

10. 特征可视化

在训练完成后,我们可以通过特征图可视化,理解 CNN 在不同层提取的特征。例如,可以将早期层的特征图展示为边缘检测的效果,将中期层的特征图展示为纹理效果,最终层则展示图像中物体轮廓等信息。这对于解释模型、调试模型都有帮助。

举个例子

这是一张猫的图片

image.png

我们使用转置卷积将特征图映射回原始图像空间,来观察每层的特征图。

这是第一层的特征图

image2.png

这是最后一层卷积层特征图(部分):

image3.png

可以看出第一层的卷积层输出,特征图里面还可以看出猫的形状,最后一层卷积网络的输出特征图,看着有点像热力图,并且完全没有猫的样子,是更加抽象的图片表达了。