text: 计算机视觉发展历程与最佳实践：从卷积运算到注意力机制
  计算机视觉经历了从特征工程到深度学习的发展阶段，而深度学习又发展出卷积神经网络（）和视觉转换器（）的不同实现方式。使用大量的人工算子提取图片中的视觉特征，例如边缘提取算子、直线特征提取算子、圆特征提取算子等，其中又以算法为发展巅峰。一幅图片经历了全部特征提取算子的处理后，将获得一个特征集合，开发工程师一般需要继续主成分分析、回归分析或支撑向量机（）算法进行特征的手工判别和处理。这样的计算机视觉工程，不仅耗费开发人员的大量精力，而且不同的项目具有不同的视觉特征，开发成果无法共享，逐渐已经被计算机视觉行业所淘汰。：第一阶段是以图像卷积运算为核心的卷积神经网络（）阶段，第二阶段是以多头注意力机制为核心的视觉转换器（）阶段。的信号处理核心算法是卷积运算（）。多个卷积核（）组成一个滤波器（），多个滤波器组成一个二维卷积层（）；其中的每个滤波器都相当于一个传统特征工程所使用的特征提取算子，当多个二维卷积层堆叠在一起的时候，卷积神经网络就相当于成千上万个特征提取算子，其性能自然强于传统手工特征提取的处理方式。从空间映射的角度看，每个算子都将像素域空间的数据映射到低维度特征域，后续算子继续将低维度特征域的数据映射到高维度特征域，不同域的数据通过残差连接进行融合，这些复杂的映射处理是传统手工特征提取的方法无法企及的。卷积神经网络经过近些年的发展，发展方向基本锁定“以为代表的小核卷积”和“以为代表的残差连接”这两个关键技术上。的信号处理核心算法是多头注意力（）机制。视觉转换器将图像视为文本，将一幅图像拆分为若干局部图（），如果把每个局部图看成一个词元（），那么一幅图像就相当于由一串“词元”组成的一句话。按照自然语言的处理逻辑，需要使用向量嵌入（）技术将每个词元都变成一个高维向量，那么一幅图像就相当于一个矩阵，其行数等于词元数量，列数等于高维向量的元素个数。后续的处理就很简单了，只需要使用自然语言处理中的多头注意力机制对这些高维向量进行相关性计算，然后再映射到另一个更高维度的空间即可。视觉转换器的神经网络并没有使用任何图像的先验性知识，而是将整幅图的所有像素点都进行相关性计算，因此图像卷积计算可以看成是多头注意力机制的一个特例，而多头注意力机制可以看成是全画幅的（更复杂的）图像卷积运算。正是因为视觉转换器并没有使用任何图像领域的先验知识，并且多头注意力机制具有极为简单的矩阵运算，这使得视觉转换器能等效于任何特征处理算子，这无疑带来性能上的大幅提升和更为强大的泛化能力。总之，基于特征工程的计算机视觉已经被基于深度学习的计算机视觉完全取代；基于卷积神经网络的深度学习计算机视觉具有运算开销小、数据集要求低的特点，比较适合作为专用人工智能，为各行业的具体应用场景提供智能化支撑；基于视觉转换器的深度学习计算机视觉具有通用性强、跨模态计算能力的特点，比较适合作为人工智能大模型，为“图片文本语音数据”的多模态应用场景提供智能化支撑。基于视觉转换器的神经网络，计算开销和数据集的规模和成本都很高，目前都是大模型一统天下，比较适合大互联网公司面向端客户提供服务，并不适合作为快速入门的切入点。反观基于卷积神经网络的计算机视觉，计算开销和数据集都在可承受范围之内，并且搭配上边缘计算硬件，可以快速将人工智能应用从纯软件的“虚拟应用”转变为具有实体形态的“物化产品”，并且卷积神经网络在多模态领域也有一定的用武之地，不少多模态神经网络也使用计算量较低的卷积神经网络提取视觉特征。各行各业不一定都承受的了基于视觉转换器的多模态大模型，但一定乐于接受性能强、成本低、功耗低的专有人工智能小模型，这也是计算机视觉的最佳切入点。大数据集的标注成本太高，为解决大规模数据集的自监督学习，出现了基于掩码学习的模型、基于个体学习的模型、基于对比学习的模型等。不管怎样，模型越来越大，训练数据越来越多，训练成本越来越高，我们需要的不仅仅是，还有！固然，我们可以将图片的像素点视为向量，也可以将自然语言中的词元视为向量，但是否有一种神经元能无差别的处理图片向量和词元向量？给出了肯定的回答。在没有转换器的年代，大家尝试了很多种方法，建立语言模态与图像模态的相互关联，但效果一般。转换器横空出世后，注意力机制可以无差别的处理图像向量和词元向量，由此产生的模型也能识别从来没有见过的物体，的计算机视觉也成为可能，大名鼎鼎的图像生成模型的文本编码器用的就是模型的文本编码器。在语言模态的辅助下，生成模型也获得了长足的发展。传统对抗神经网络难于训练，自编码器（）模型和变分自编码模型的表现能力有限，结合了语言模态的扩散模型显示出强劲的性能。从最开始的，到目前全球性能最强的三大图像生成模型：、、，均能生成高分辨率的以假乱真的图片，从而打开了人工智能与互联网产业结合的新契机。在此基础上，多模态拓展到语音模态、音乐模态、模态、数据模态，更多的行业蓝海正在显现。希望从事计算机视觉的大学生很多，工程师希望转型从事计算机视觉的人也不少，但能够学精学透的人不多，这是因为基于深度学习的计算机视觉同时具备“知易行难”和“行易知难”的特点。一方面，深度学习计算机视觉“知易行难”。深度学习的方法论推导有着复杂的理论基础，一个简单的计算函数背后对应着严谨的数学定义，严谨的数学定义对应着复杂的数学符号和公式。即便当你费劲看懂了复杂的数学公式了以后，使用哪个计算框架的哪个函数写出什么样的代码，也是非常痛苦和费劲的事情。另一方面，人工智能“行易知难”。你可以从互联网上下载大量的人工智能开源代码，跟着配置说明稍微配置一下即可运行成功，运气好的甚至不需要配置即可顺利运行。但你真的读懂这篇开源代码了吗？当遇到实际情况和预设情况不一致的情况，你是否懂得如何修改其中的某些参数，当需要对其进行优化的时候，你是否懂得修改其中的某些行代码，从而更加适配你目前的开发需求。如果希望达到这种境界，你就需要理解开源代码的每一行后面的数学计算逻辑，这对你提出了很高的数学基础知识的要求。目前的深度学习框架（例如、等）对于卷积神经网络的支持是非常成熟的，它们拥有从便利性到自主性的全套支撑方案。以为例，如果希望自主性强，则可以利用对象或稍微高级一些的对象编写自定义算法逻辑，所有官方的层组件都是继承自这些基础对象。如果希望便利性强一些，则可以利用下面的、、、、等封装好的层组件。如果想更方便一些，还有常用的卷积神经网络模型对象，提供了、、、等无数带权重的预训练模型供开发者使用。对于损失函数、评估指标、个性化训练定制、日志监控、模型量化、边缘计算等，也都有非常成熟的开发生态提供支撑。此时，您需要的就是一套完善的教程，跟着教程，使用计算框架所提供的自主性和便利性，完成卷积神经网络的技术积累，开发出成熟的人工智能产品。如果开发者刚好使用的是，那么非常推荐以下这本书《》，这本书源自企业内部的培训文档，提供了“原理”、“代码”、“数据流图”一一对应的写作方式，经历了一线计算机视觉项目的实战考验，写作风格比较务实。这本书同时获得了北京大学博士、厦门大学教授、心智科学家、中国人工智能学会理事、福建省人工智能学会理事长周昌乐教授和谷歌全球机器学习生态系统项目负责人、亚太地区的开发者生态负责人的强烈推荐，值得阅读。如果对于卷积神经网络的目标检测应用和边缘计算感兴趣，还可以阅读此书的后续《深入理解计算机视觉：在边缘端构建高效的目标检测应用》，这会帮助开发者将软件产品“物化”为可以独立运行的边缘端嵌入式系统，找到卷积神经网络的技术应用价值。对计算机视觉有了初步的认识后，相信大家都跃跃欲试的希望建立一个“端到端”的人工智能应用：让计算机视觉在一个小电路板上跑起来。于是这本书又在第二篇设计了一个巧妙的案例，让读者快速体验数据集载入、神经网络建立、神经网络训练的全流程，并把神经网络部署在云端和边缘端。当读者亲手跑通了一套人工智能代码，并成功部署在电路板或服务器上的瞬间，人工智能将不再陌生，而是变得十分有趣。仅仅学会计算机视觉是不够的，更要学的精。谈起人工智能，大家都在谈梯度下降、损失函数、学习率等，这些都是计算机视觉的基础知识。于是在工程入门的基础上，这本书在第三篇适时的抛出深度学习的数学抽象，给出梯度下降、自动微分的数学公式。在前面两篇的基础上，结合具体的代码和形象的数据流图，公式和理论就不再晦涩和抽象。该书前三篇的知识积累已经足够应付大多数的计算机视觉应用了，但面对千变万化的应用场景，不仅需要工程师具有良好的数学基础，还需要有丰富的调试经验。这本书的第四篇给出了作者在众多项目的日常调试中所总结的神经网络训练经验。例如神经网络的各种组件，以及它们的算法原理和使用方法，神经网络训练中的指标监控和行为控制。甚至包括和的性能分析，方便我们选型、等计算加速硬件。以该书的第、二、三、四篇为基础，该书认为读者已经拥有了扎实的计算机视觉的关键算法理解和神经网络的设计训练能力，于是此书的第五篇带着读者不断了解、拆解、组合各种神经网络组件，按照知名程度，逐一介绍了、、、、、等经典的卷积神经网络，这些神经网络是图像分割、目标检测的骨干网络，直接决定了各种计算机视觉应用的性能高低。此书第五篇甚至将这些经典卷积神经网络拆解到零件级别，将他们的网络结构、计算原理、资源开销抽丝剥茧讲述清楚，十分难得。以这些知识为基础，可以继续阅读此书第六篇所介绍的三维机器视觉和图卷积神经网络，也可以继续阅读后续书籍《深入理解计算机视觉——在边缘端构建高效的目标检测应用》，学习如何在一个嵌入式硬件上构建一个高效率、低功耗、可离网的边缘计算应用。目前的模型公园函数库（例如、、等），支持快速搭建、、模型，甚至自然语言领域的、等知名预训练模型，都能通过一行代码，快速上手使用。基于视觉转换器的神经网络的训练成本很高，因此建议一定要使用迁移学习技术，加载预训练权重，冻结预训练模型微调下游网络。如果您拥有足够的数据集，还可以在下游网络收敛后，解冻预训练权重，将整个模型进行训练。有研究表明，在中小规模数据集上，基于视觉转换器的神经网络性能是弱于基于卷积运算的神经网络的，视觉转换器只有在大规模数据集的配合下，才能达到超越卷积神经网络的性能。如果使用预训练模型仍旧无法达到期待的性能，并且恰好你的手头有达到的次方以上样本的数据集，你就可以通过模型公园函数库提供的代理任务模型，制作自己的预训练模型。这里为什么需要代理任务呢？我们知道基于卷积运算的神经网络一般较小，对数据集的要求也小，因此一般它们的预训练使用的是监督数据；但基于视觉转换器的神经网络一般较大，对数据集的规模要求也高。为避免高昂的标注成本，基于视觉转换器的神经网络一般使用的是自监督学习，自监督学习所构造的神经网络结构和预训练模型略微有所不同，为了获得预训练模型，而专门为自监督学习构造的神经网络训练任务，就是代理任务（），典型的例如图像中的掩码学习模型、个体判别模型、对比学习模型等，以及自然语言中的掩码语言模型，下一句预测等。以我们在自然语言处理方面的经验，在超过条语言样本数据的条件下，开展语言模型的代理任务训练，能大幅提高文本分类任务的准确率，这对于计算机视觉同样奏效。调用、模型公园函数库，使用预训练模型进行迁移学习（Transfer Learning）的代码范例如下，开启个性化代理任务（Agent Task）的代码范例如下。如果开发者对于个性化的多模态模型感兴趣，也可以通过翻看模型公园在上公开的源代码，研究多模态模型的搭建方式和代理任务，开展个性化的训练。入门多模态模型，建议以模型为入门的基础，他第一次将文本和图像结合起来，进而研究模型，他是一个极简多模态模型非常适合入门。进一步的，如果对图片生成的多模态模型感兴趣，一个合理的研究路径是：自动编码器变分自动编码器去噪扩散概率模型稳定扩散模型模型。如果对文本生成感兴趣，可以跟随、、的论文指引，也能建立语言生成模型的能力链条，但是从开始，已经逐渐走向封闭，相关论文已经停止发布或做有限的公开。不管怎样，逐步针对多模态模型的个性化训练，一定要对数据集规模和训练成本有充足的准备，否则以作者的经验，在数据集不充分的情况下，进行个性化的训练，所获得的效果甚至低于使用互联网公开的模型权重所获得的效果，并且动则超过天的训练耗时和电费开销都意味着巨大的试错成本。使用加载，生成图片的代码仅有行，范例如下。成为一个计算机视觉工程师，必须具备以下能力：。对计算机视觉实践感兴趣的，可以逐一对照，确认自己的能力是否全面。，这里包括了软件环境和硬件环境。软件环境包括虚拟环境管理和集成开发工具，硬件环境包括根据数据类型选择并估算硬件算力。。这里包括了对开源数据集了解和对个性化数据集的管理。开源数据集包括数据集、时尚数据集、花卉数据集、手写数字数据集、数据集、数据集、数据集、波士顿房产等，还包括竞赛等。个性化数据集的处理能力对于计算机视觉工程师格外重要，因为日常项目中的数据往往需要工程师自己标注和处理。个性化数据处理能力涉及数据的标注、标注文件的解析、样本特征的生成、单样本的生成、文件的写入和读取等。。具体包括损失函数原理、神经网络的数学抽象、梯度下降原理、自动微分机制、静态图和动态图编程范式等，这些数学原理涉及了高等数学、高等代数、概率统计等基础数学知识，重要的数学知识需要温习和梳理，最好具备将公式与编程代码一一对应的实操能力。。具体包括层组件对象、层算法原理和模型组装。层组件对象包括全连接层、二维卷积层、池化层、批次归一化层、随机失活层、激活层等，层算法原理包括算法行为、实现、内存开销估算、乘法开销估算等。了解层的原理和实现，才可以将多个层对象组装成一个神经网络模型。。神经网络是一个函数，训练的过程就是在寻找最优参数的过程，最优的参数能让神经网络的输出和真实值之间有最小的误差。在训练之前，需要对神经网络进行编译，编译的内容包括损失函数、优化器、评估指标；训练的代码编写方式，需要选择全自动的静态图训练方式还是手工控制的动态图训练方式；训练的过程中，需要使用回调机制，调用早期停止回调函数、检查点保存回调函数、学习率调整回调函数、日志写入回调函数或自定义回调函数。开启训练后，需要使用实时监控训练过程的损失值、准确率、召回率等各种评估指标，从而避免过拟合现象的发生。这些训练的过程控制都是计算机视觉工程师日常调试的必备手段。。包括模型设计和模型使用两个层面的内容。模型设计主要指的是设计的哲学，每个成功的神经网络模型背后都蕴藏着一个模型设计的创意。一个成功的模型设计师，并不是刻板的使用某一个模型，而是根据实际场景的需要，提取众多模型中的可用结构，组合成高效的神经网络模型。要达到这种境界，需要计算机视觉工程师理解众多模型的关键创意，懂得如何拆解和应用。例如神经网络的核心创意在于“二维卷积层池化层”的微观结构，神经网络的核心在于“若干小核卷积等效于一个大核卷积”的创意，神经网络的核心在于“残差连接”的微观结构，神经网络的核心在于“二维卷积层批次归一化层激活层可以等效为一个高性能二维卷积层”的微观结构、神经网络的核心在于多尺度和跨阶段局部残差连接结构。这些经典神经网络是目前正在被使用的神经网络，其中系列神经网络就是知名的神经网络中最为重要的骨干网络，它们不仅具备理论价值也具备实用价值。模型的使用主要指的是迁移学习和预训练模型的使用，使用预训练模型可以大幅加快神经网络的收敛速度，是目前工程中使用较多的模型使用方式。包括神经网络的保存和神经网络的部署。人工智能项目的成果是神经网络，神经网络保存一般分为结构的保存和权重的保存，其中结构的保存一般用于神经网络的分发和部署，权重的保存一般用于再训练，不同保存方式需要遵循不同的保存方法和文件格式。神经网络的部署一般通过云计算部署或边缘计算部署。其中的云计算部署方式下，神经网络通过部署在一台系统的服务器上，软件能智能的将并发请求打包为一个，调用硬件进行一次推理，即可获得多请求数据的计算结果，是目前人工智能云计算部署中最为常见的部署方式。其中的边缘计算部署方式下，神经网络先后被量化、编译，然后才能在边缘端进行部署。懂得神经网络的边缘端部署，可以让企业的人工智能项目从看不见摸不着的云服务，变为一个可以由充电宝供电的电路板，它拥有一个摄像头，一个嵌入式系统，一个边缘计算加速芯片，一个显示器，它将会是一个可以独立运行的小系统，看得见摸得着。边缘计算，是智能化系统从虚拟走向物化的必经之路。特别的，由于边缘计算涉及到嵌入式系统的相关知识，会相对复杂，一个神经网络经过训练、量化、编译过程，并将神经网络下发到开发板，推理耗时会从毫秒锐减到毫秒。包括编程对象的继承和自定义对象组装。人工智能的模型越来越大，越来越复杂，但其进化逻辑和基础结构都是有迹可循的。不论任何计算机视觉的项目，总离不开负责具体算法执行的层对象、负责数据串联的模型对象，这些编程对象有自由度高的对象，也有集成度高的对象，一个经验丰富的计算机视觉工程师应当能灵活调用，并根据实际情况进行修改或重载。自定义对象的组装可以扩展到三维机器视觉和图卷积神经网络，虽然三维机器视觉和二维机器视觉不一样，图卷积神经网络和二维卷积神经网络不一样
  ，但他们共享相同的层组件库，也遵循同样的模型组装方法。总之，如果把神经网络比喻为一个发动机，把神经网络内部的层结构比喻为这个发动机的零件，只有把每个零件拆出来并装回去，才能说具备了微调甚至设计模型的能力。跑通一个计算机视觉代码并不代表具备了计算视觉的开发能力，只有逐一对照计算机视觉的能力地图，逐步填满知识空缺，凭借无数个小知识点的扎实理解，才能在人工智能的道路上走得更远。以上能力拼图，是成为一个计算机视觉工程师的基础，在《》与《深入理解计算机视觉：在边缘端搭建高效的目标检测应用》中均有覆盖和涉及，是计算机视觉工程师必看的参考书籍。在从事计算机视觉行业的过程中，这些能力或多或少，或早或迟，都会用到。积累点滴的能力，才能在今后更复杂的计算机视觉任务中，游刃有余。