ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

计算机视觉学术速递:Transformer与目标检测轻量化及开放词汇进展

计算机视觉学术速递:Transformer与目标检测轻量化及开放词汇进展 1. 计算机视觉学术速递的核心定位与选题逻辑1.1 为什么需要一份“学术速递”做计算机视觉这行的人都有一个共同的痛点这个领域更新得太快了。快到什么程度你花三个月啃完一篇Transformer的经典论文准备动手复现的时候发现社区里已经迭代出了三个改进版本每个版本都在COCO数据集上刷出了更高的mAP。如果你是在校研究生导师可能每周都在问你“最近有没有关注最新的工作”如果你是在工业界做目标检测落地的工程师业务方会不断追问“能不能用最新的方案把精度再提两个点”。“计算机视觉学术速递”这个栏目本质上解决的就是信息筛选和知识压缩的问题。它不是简单的论文搬运而是从每天涌现的大量学术成果中筛选出真正有影响力的工作把核心思想、关键技术、实验结论提炼出来让读者用最短的时间掌握最有价值的信息。我做了几年这个方向的内容整理最大的体会是速递的价值不在于“全”而在于“准”和“深”。一篇好的速递应该让读者看完之后能判断出“这个工作跟我有没有关系”“我要不要花时间去精读原文”“我能不能把它用到自己的项目里”。这一期的速递我重点关注了几个方向Transformer在视觉任务中的新进展、目标检测在轻量化和开放词汇场景下的突破、以及COCO数据集上一些值得注意的新结果。这些方向的选择不是随意的而是基于一个判断当前计算机视觉领域最活跃的创新基本都围绕“如何让模型更高效地处理更复杂的视觉理解任务”这个核心命题展开。1.2 本期速递覆盖的核心方向Transformer从自然语言处理领域跨界到计算机视觉已经不是什么新鲜事了。但2024年到2025年这个时间窗口里Transformer在视觉领域的发展出现了一些很有意思的转向。早期的Vision Transformer主要是把图像切成patch然后直接套用NLP领域的标准Transformer架构。这种做法虽然有效但计算复杂度是patch数量的平方级别处理高分辨率图像时开销巨大。最近的工作开始从不同角度解决这个问题有的通过层次化设计降低计算量有的通过稀疏注意力机制聚焦关键区域还有的干脆重新思考Transformer的基本组件比如用卷积来替代某些注意力操作。目标检测这边轻量化是一个持续的热点。我注意到一个很有意思的趋势越来越多的研究开始关注“在极低计算预算下如何保持检测精度”。MACs仅5MB的目标检测模型这类工作瞄准的是边缘设备和移动端部署场景。这类模型的设计思路跟传统的大模型完全不同需要在骨干网络、特征融合、检测头等各个环节做精细的权衡。另一个值得关注的方向是开放词汇目标检测它要解决的是传统检测器只能识别训练集中出现过的类别这个问题。这个方向的技术路线通常结合视觉-语言预训练模型比如用BERT或CLIP的文本编码器来提供类别语义信息。COCO数据集依然是目标检测领域最主流的评测基准。虽然有人批评COCO的标注质量和类别分布存在一些问题但短期内它的地位很难被取代。围绕COCO数据集我关注到几个值得注意的现象一是小目标检测的性能提升依然缓慢二是模型在COCO上的排名和在实际业务场景中的表现往往存在较大差距三是数据增强和训练策略的改进对最终结果的贡献有时候比模型架构本身还大。2. Transformer在视觉任务中的技术演进与实操要点2.1 从ViT到Swin Transformer架构设计的核心权衡Vision Transformer的原始版本思路非常直接把一张图像分成固定大小的patch每个patch展平后经过线性投影变成token然后加上位置编码送入标准的Transformer编码器。这种做法在ImageNet分类任务上表现不错但有两个明显的短板。第一计算复杂度与图像分辨率的平方成正比处理1024×1024这种高分辨率输入时计算量会大到无法接受。第二Transformer的注意力机制是全局的每个token都要跟其他所有token计算注意力这导致模型很难学到局部特征而局部特征对视觉任务至关重要。Swin Transformer的核心创新在于引入了层次化设计和移动窗口注意力机制。层次化设计借鉴了卷积神经网络中特征金字塔的思路随着网络加深特征图的空间尺寸逐渐减小通道数逐渐增加。这样做的好处是既能捕捉不同尺度的视觉信息又能控制计算量。移动窗口注意力则是把全局注意力限制在局部窗口内同时通过窗口的移动来实现跨窗口的信息交互。这个设计非常巧妙它让模型在保持线性计算复杂度的同时仍然能够建模长距离依赖关系。我在实际复现Swin Transformer的时候踩过几个坑。第一个坑是窗口大小的选择。Swin Transformer默认使用7×7的窗口这个尺寸在ImageNet上效果很好但如果你要处理的是医学图像或者遥感图像7×7可能太小了因为这类图像中的目标通常占据更大的空间范围。我试过在病理图像分类任务上把窗口大小改成14×14精度提升了大约1.5个百分点。第二个坑是相对位置偏置的实现。Swin Transformer使用相对位置偏置而不是绝对位置编码这个偏置是在每个注意力头中学习的。如果你自己从零实现很容易在维度对齐上出错。我的建议是直接用官方开源的实现或者用timm库里的版本不要自己造轮子。2.2 Transformer与CNN的融合不是替代而是互补有一段时间社区里有一种声音认为Transformer会完全取代CNN。但从最近的研究趋势来看更理性的观点是两者互补。CNN在提取局部特征、处理平移不变性方面有天然优势而Transformer在建模全局依赖、处理变长序列方面更强。很多最新的工作都在尝试把两者的优势结合起来。比如有些工作用CNN作为骨干网络提取多尺度特征然后用Transformer来融合这些特征。这种做法在目标检测和语义分割任务中很常见。还有一些工作反过来用Transformer作为骨干网络但在某些层中插入卷积操作来增强局部建模能力。我个人的经验是如果你的任务对局部细节要求很高比如小目标检测或者细粒度分类纯Transformer架构可能不是最优选择加入卷积操作或者使用混合架构往往能带来更好的效果。这里有一个实操建议如果你正在做计算机视觉大作业或者本科毕业设计不要一上来就追求最新的Transformer架构。先把ResNet加FPN这个经典组合跑通理解清楚目标检测的基本流程然后再尝试替换骨干网络或者引入注意力机制。我见过太多学生直接拿Swin Transformer的代码来改结果连数据加载和损失函数都没搞清楚最后项目做不下去。2.3 Transformer训练中的关键参数与调参经验Transformer模型的训练跟CNN有比较大的区别有几个参数需要特别注意。第一个是学习率预热。Transformer对初始学习率非常敏感如果一开始就用较大的学习率训练很容易发散。通常的做法是在前几个epoch或者前几千次迭代中把学习率从很小的值线性增加到设定的初始学习率。这个预热过程对于稳定训练至关重要。第二个是权重衰减。Transformer模型通常需要比CNN更大的权重衰减来防止过拟合。在ViT的原始论文中作者使用了0.1的权重衰减这个值比ResNet常用的1e-4大了三个数量级。当然具体值需要根据你的数据集大小和模型规模来调整。如果数据集比较小权重衰减可以适当增大如果数据集很大可以适当减小。第三个是Dropout和DropPath。这两个正则化手段在Transformer训练中非常关键。Dropout通常加在注意力层的输出和FFN层的输出上DropPath则是在残差连接中随机丢弃整个分支。DropPath的概率通常随着网络深度的增加而增大浅层用较小的值深层用较大的值。我在训练ViT的时候发现如果不用DropPath模型在训练集上很快就能达到很高的精度但验证集精度会明显落后过拟合非常严重。还有一个容易被忽视的点是数据增强。Transformer模型通常比CNN需要更强的数据增强。RandAugment、Mixup、CutMix这些增强策略在ViT的训练中几乎是标配。如果你发现模型过拟合严重除了调整正则化参数也可以尝试增强数据增强的强度。3. 目标检测的轻量化与开放词汇探索3.1 轻量化目标检测的核心设计思路MACs仅5MB的目标检测模型这个方向最近几年涌现了不少有意思的工作。这类模型的设计目标很明确在计算资源极度受限的设备上运行比如手机、嵌入式开发板、边缘计算盒子。跟服务器端的大模型不同轻量化模型需要在精度和速度之间做非常精细的权衡。轻量化目标检测的核心设计思路通常包括几个层面。骨干网络层面深度可分离卷积、分组卷积、通道 shuffle这些操作是标配。MobileNet系列和ShuffleNet系列是常用的骨干网络选择。特征融合层面传统的FPN结构计算量较大轻量化模型通常会简化特征融合路径比如只使用一层或两层特征金字塔或者用更轻量的融合方式。检测头层面共享卷积、减少通道数、使用分组卷积都是常见的优化手段。我实际部署过一个轻量化目标检测模型到嵌入式设备上有几个经验值得分享。第一不要只看MACs和参数量实际推理速度还跟内存访问模式、算子实现效率密切相关。有些模型虽然MACs很低但因为频繁的内存读写实际速度反而不如MACs更高的模型。第二量化是轻量化部署的关键步骤。把模型从FP32量化到INT8通常能带来2到4倍的速度提升精度损失可以控制在1个百分点以内。但量化对某些算子不友好比如sigmoid和softmax需要在模型设计阶段就考虑量化友好性。第三输入分辨率对速度的影响非常大。把输入从640×640降到320×320速度能提升3到4倍但小目标的检测精度会明显下降。如果你的应用场景中小目标不多降低分辨率是一个很有效的加速手段。3.2 开放词汇目标检测的技术路线传统目标检测器有一个根本性的限制它只能检测训练集中出现过的类别。如果你训练的时候只有80个COCO类别那模型就永远无法检测“长颈鹿”之外的动物哪怕它在测试时看到了。开放词汇目标检测要解决的就是这个问题让模型能够检测任意文本描述的物体。实现开放词汇检测的技术路线主要有两条。第一条是基于视觉-语言预训练模型比如用CLIP的文本编码器来编码类别名称用视觉编码器来提取图像特征然后通过对比学习对齐两个模态。第二条是基于大规模图文对数据训练一个生成式模型把检测任务转化为文本生成任务。这两条路线各有优劣前者实现相对简单但受限于预训练模型的能力后者理论上更灵活但训练成本很高。我在尝试开放词汇检测的时候发现一个很实际的问题类别名称的表述方式对检测结果影响很大。比如“狗”和“一只狗”这两个表述在CLIP的文本编码器里得到的特征向量是不同的检测结果也可能有差异。所以实际使用的时候通常需要为每个类别准备多个模板比如“a photo of a {category}”“a {category} in the scene”等等然后把多个模板的特征平均起来这样能提升检测的稳定性。另一个值得注意的点是开放词汇检测模型在COCO数据集上的评测结果跟闭集检测器还有明显差距。在COCO的常见类别上开放词汇模型的AP通常比闭集模型低5到10个百分点。但在稀有类别和新类别上开放词汇模型有明显优势。所以选择哪种方案取决于你的应用场景中类别分布是什么样的。3.3 COCO数据集的使用技巧与常见陷阱COCO数据集是目标检测领域最常用的评测基准但很多人对它的使用存在一些误区。第一个误区是直接把COCO的训练集和验证集拿来用不做任何分析。COCO数据集存在明显的类别不平衡问题有些类别有上万张标注图像有些类别只有几百张。如果你的任务恰好涉及那些稀有类别直接训练会导致模型在这些类别上表现很差。解决办法包括重采样、类别平衡损失、或者针对稀有类别做数据增强。第二个误区是忽视COCO的标注质量。COCO的标注虽然整体质量不错但也不是完美的。我遇到过一些情况图像中明显存在的物体没有被标注或者标注框的位置不够准确。如果你直接用这些数据训练模型会学到一些错误的模式。一个实用的技巧是在训练之前用预训练模型对训练集做一遍推理找出那些模型置信度很高但标注中没有的物体人工检查一下这些是不是漏标。如果漏标比例较高可以考虑用半监督或者自训练的方式来利用这些未标注的物体。第三个误区是不理解COCO的评测指标。COCO使用的AP是在IoU从0.5到0.95的多个阈值上取平均这跟PASCAL VOC只使用0.5阈值是不同的。这意味着COCO更看重检测框的定位精度。如果你的应用场景对定位精度要求不高只关心物体有没有被检测到那COCO的AP可能不是最合适的指标。你可以自己计算IoU0.5时的AP或者使用其他更贴合业务的指标。还有一个实操层面的建议如果你要把YOLO格式的数据集转成COCO格式或者反过来一定要仔细检查转换后的标注是否正确。我见过很多次因为坐标转换错误导致训练完全失败的情况。YOLO使用的是归一化的中心点坐标和宽高COCO使用的是绝对像素坐标的左上角和右下角。转换的时候要注意图像尺寸的对应关系以及类别索引的映射。4. 学术速递的阅读方法与研究落地策略4.1 如何高效阅读一篇计算机视觉论文学术速递只是入口真正要深入理解一个工作还是得读原文。但读论文也是有方法的不是每篇论文都值得从头到尾精读。我的习惯是分三步走。第一步是快速浏览看标题、摘要、图表和结论判断这篇论文跟我的研究方向或项目需求有没有关系。如果没关系直接跳过如果有关系进入第二步。第二步是理解核心思想。重点看方法部分的整体框架图理解作者提出的核心模块是什么解决了什么问题跟已有方法的关键区别在哪里。这个阶段不需要纠结具体的公式推导和实现细节先把大逻辑搞清楚。第三步才是精读针对你关心的部分深入理解。比如你在做轻量化目标检测那重点看模型设计、计算量分析、跟其他轻量模型的对比实验。如果你在做开放词汇检测那重点看文本编码器的使用方式、类别名称的处理策略、零样本迁移的实验结果。读论文的时候要带着问题读。比如这个方法的假设是什么在什么条件下有效在什么条件下可能失效跟我现在用的方法相比优势在哪里劣势在哪里如果我要把它用到我的项目里需要做哪些改动这些问题能帮你把论文里的知识转化成自己的理解。4.2 从学术成果到工程落地的关键步骤学术论文里的方法跟工程落地之间往往有巨大的鸿沟。论文里报告的精度通常是在标准数据集上、用精心调过的超参数、在充足的算力下得到的。但实际项目中你面对的是脏数据、有限的算力、紧迫的工期。把学术成果落地需要经过几个关键步骤。第一步是复现。不要直接相信论文里报告的数字自己跑一遍代码确认能在你的环境下得到相近的结果。复现的过程中你会遇到各种问题依赖库版本不兼容、预训练模型下载不了、训练不稳定等等。这些问题在论文里通常不会提到但它们是真实存在的。第二步是适配。把你的数据喂给模型看看效果怎么样。这一步通常会暴露出很多问题数据分布跟论文里的数据集不一样、类别定义不同、图像尺寸和格式有差异等等。你需要根据实际情况调整数据预处理流程、修改模型输出层、重新设计损失函数。第三步是优化。在保证精度的前提下尽可能提升推理速度、降低内存占用、减少模型大小。这一步可能需要用到量化、剪枝、知识蒸馏等技术。我个人的经验是量化是最容易见效的优化手段通常能带来2到4倍的速度提升而且对精度的影响可控。第四步是部署和监控。模型上线之后不是就没事了你需要持续监控它的表现。实际数据分布会随着时间变化模型精度可能会逐渐下降。建立一套自动化的监控和再训练流程是保证模型长期稳定运行的关键。4.3 计算机视觉学习路线的个人建议经常有人问我计算机视觉该怎么入门、怎么进阶。我的建议是不要一上来就追最新的模型和论文先把基础打牢。计算机视觉与图像处理的基础知识比如图像滤波、边缘检测、特征提取、相机模型这些看起来“过时”的内容其实是你理解后续所有高级方法的基础。入门阶段我建议从经典的图像分类任务开始。用CIFAR-10或者ImageNet的一个子集把ResNet跑通理解卷积、池化、批归一化、残差连接这些基本组件的作用。然后过渡到目标检测从YOLO或者SSD开始理解锚框、非极大值抑制、多尺度检测这些概念。再然后可以尝试语义分割理解全卷积网络、上采样、跳跃连接。进阶阶段可以开始接触Transformer在视觉中的应用。先理解NLP领域的标准Transformer架构然后看ViT是怎么把图像适配到Transformer的。再往后可以关注多模态方向比如视觉-语言预训练、图文生成、视觉问答。这个方向目前非常活跃也是工业界需求比较大的方向。学习过程中动手实践比看视频和读书重要得多。我见过很多人看了很多教程但自己写代码的时候连数据加载都搞不定。建议每学一个概念就自己动手实现一遍。哪怕是最简单的卷积操作自己用numpy实现一遍理解会比只看公式深得多。另外参与开源项目或者复现经典论文是提升实战能力非常有效的方式。GitHub上有很多高质量的计算机视觉项目你可以从复现一个经典模型开始逐步深入到改进和创新。最后说一点个人体会计算机视觉这个领域变化很快但底层的东西变化很慢。数学基础、编程能力、对数据的敏感度、分析问题的思路这些才是长期竞争力的来源。工具和框架会不断更新但解决问题的能力是通用的。
返回列表