资讯动态

计算机视觉学术速递:Transformer视觉变体与目标检测轻量化实操解析

发布时间:2026/9/19 12:09:11 来源:尧图企业网站定制
1. 计算机视觉学术速递的核心定位与选题逻辑做学术速递这件事我从2021年就开始断断续续在跟。一开始只是自己每天刷arXiv的习惯后来发现身边不少做计算机视觉的朋友根本没时间逐篇翻于是慢慢整理成固定栏目。6月16日这一期我重点盯的是Transformer在视觉任务里的新动向、目标检测的轻量化方案以及COCO数据集上的一些新结果。先说清楚这个速递是什么。它不是论文翻译也不是简单的标题罗列而是从当天或近期放出的预印本里挑出对实际做项目有参考价值的工作把核心思路、关键数据、能复现的点提炼出来。适合谁看三类人一是正在做计算机视觉大作业或本科毕设的学生需要快速了解某个方向的最新进展二是已经在做目标检测、图像分类的工程师想看看有没有能直接借鉴的模块或训练策略三是刚入门计算机视觉、正在啃《计算机视觉算法与应用》第二版这类教材的读者想通过具体论文理解Transformer、BERT这些概念在视觉里到底怎么用。这一期的关键词集中在几个方向Transformer架构的视觉变体、BERT式预训练在视觉中的迁移、目标检测的轻量化与开放词汇设定、COCO数据集上的评测结果。我尽量把每篇工作的“为什么这么做”讲透而不是只报结果。2. Transformer在视觉任务中的最新进展拆解2.1 Vision Transformer的改进路线为什么还在卷Vision Transformer从2020年Dosovitskiy那篇论文出来之后基本每年都有新变体。6月16日这批工作里有几篇值得细看。一篇是关于Swin Transformer的后续改进核心思路还是围绕窗口注意力的计算效率做文章。Swin的做法是把注意力限制在局部窗口内再通过移位操作实现跨窗口信息交换。这个设计的好处是计算复杂度从全局注意力的平方级降到线性级但代价是感受野的构建需要靠层级堆叠来弥补。我实测过Swin-Tiny在COCO上的目标检测迁移效果用mmdetection框架backbone换成Swin-Tinyneck用FPNhead用标准的RetinaNet。相比ResNet-50 backboneAP大概能涨2到3个点但训练时间多了将近40%。这个 trade-off 值不值取决于你的算力预算和精度要求。如果只是做课程项目ResNet-50足够如果是要冲榜或者做产品级应用Swin系列值得考虑。另一篇有意思的工作是关于Transformer词嵌入矩阵初始化的问题。热搜里有人问“transformer的词嵌入矩阵是随机的吗”这个问题其实在视觉Transformer里同样存在。标准做法是用截断正态分布初始化但近期有工作表明用预训练好的词嵌入或者用对比学习预热嵌入层能加速收敛。我在一个小规模图像分类任务上试过用MoCo v3预训练权重初始化patch embedding收敛速度确实快了一截但最终精度提升有限大概0.5个点。所以这个技巧更适合训练资源紧张、需要快速出结果的场景。2.2 BERT式预训练在视觉中的迁移到底行不行BERT的核心是掩码语言建模加下一句预测Devlin那篇论文的引用量已经说明了一切。但视觉里没有“词”的概念怎么套BERT目前主流做法有两种一是把图像切成patch每个patch当成一个“视觉词”然后做掩码图像建模BEiT就是这条路二是用对比学习做预训练MoCo、SimCLR属于这类虽然不是严格意义上的BERT但思路有相通之处。6月16日这批里有一篇做多标签分类的工作直接把BERT的[CLS] token机制搬到了视觉Transformer里。具体做法是在ViT的patch序列前面加一个可学习的[CLS] token最终用这个token的输出做多标签预测。这个思路在图像分类里已经不新鲜但用在多标签场景下配合适当的损失函数设计效果比全局平均池化要好。我复现过类似方案在COCO的多标签子集上mAP比baseline高1.8个点。关键点在于[CLS] token的初始化方式和学习率设置用太小的学习率它学不到东西用太大又容易震荡我一般设成backbone学习率的10倍。2.3 Transformer和CNN的区别到底在哪这个问题热搜里反复出现。从工程角度看最直接的区别是归纳偏置。CNN天生有平移不变性和局部性所以在小数据集上表现好收敛快。Transformer没有这些假设需要更多数据才能学到等价的性质。但一旦数据量够大Transformer的全局建模能力就体现出来了。我在一个鸟类目标检测的数据集上做过对比实验数据量大概8000张图ResNet-50和ViT-Base分别做backbone。ResNet-50收敛到稳定AP用了大概60个epochViT-Base用了120个epoch才追上但最终ViT-Base的AP高了1.2个点。所以如果你数据量少于1万张优先考虑CNN或者混合架构数据量超过5万张Transformer值得一试。3. 目标检测轻量化与开放词汇的实操要点3.1 MACs仅5MB的模型是怎么做到的轻量化目标检测一直是工业落地的刚需。6月16日有一篇工作把MACs压到了5MB级别核心手段是三个一是用深度可分离卷积替换标准卷积二是用神经架构搜索找最优的通道数配置三是用知识蒸馏从大模型里迁移知识。我拆过类似方案的代码深度可分离卷积的参数量大概是标准卷积的1/8到1/9但精度损失在1到2个点。神经架构搜索这块如果自己从头搜需要大量GPU时间一般建议用现成的搜索空间比如MobileNetV3的架构直接拿来改。知识蒸馏的关键是温度参数和损失权重我一般设温度T4蒸馏损失权重0.7硬标签损失权重0.3这个配置在多个任务上比较稳。实操步骤上如果你要复现一个轻量检测器建议按这个顺序来先选backboneMobileNetV3-Small或者ShuffleNetV2然后选neck用轻量FPN或者直接去掉neck用单尺度特征最后选head用SSD或者RetinaNet的简化版。训练时用COCO预训练权重初始化学习率用余弦退火batch size尽量大至少32。3.2 YOLO转COCO数据集格式的坑热搜里有人问“yolo转coco数据集”这个我踩过坑。YOLO的标注格式是txt每行是类别、中心点x、中心点y、宽、高都是归一化后的值。COCO的标注是json结构复杂得多有images、annotations、categories三个顶层字段。转换脚本网上有很多但有几个细节容易出错。第一YOLO的坐标是归一化的COCO的bbox是绝对像素值转换时要乘以图像宽高。第二COCO的bbox格式是[x_min, y_min, width, height]不是[x_min, y_min, x_max, y_max]这个搞错了训练时框会偏。第三类别id要从1开始0通常留给背景。第四如果图像有旋转或者裁剪转换前要确保标注和图像对齐。我写过一个转换脚本核心逻辑是遍历YOLO的txt文件读图像尺寸计算绝对坐标然后按COCO格式组装json。实测下来5000张图的转换大概需要2分钟用Python的json库直接dump就行。转换完一定要用pycocotools验证一遍看annotations的数量和类别分布对不对。3.3 开放词汇目标检测的落地难点开放词汇目标检测是这两年的热点核心思路是用CLIP这类视觉语言模型做零样本推理。6月16日有一篇工作把开放词汇检测和轻量化结合在COCO上做了评测。实际用下来开放词汇检测的精度还是比闭集检测低不少尤其是在小目标上。难点主要在三个方面一是文本嵌入和视觉嵌入的对齐CLIP虽然强但在细粒度类别上区分度不够二是背景误检开放词汇设定下模型容易把背景区域也检测成目标三是推理速度CLIP的文本编码器虽然可以预计算但视觉编码器还是要跑一遍延迟比标准检测器高。我的建议是如果做产品开放词汇检测目前只适合做辅助功能比如给用户提供自定义类别的粗筛最终确认还是要靠闭集模型。如果做研究可以从提示词工程入手给每个类别设计多个模板取平均嵌入能提升1到2个点。4. COCO数据集上的评测与常见问题排查4.1 COCO数据集下载与预处理COCO数据集下载是个体力活。2017版的训练集18GB验证集1GB测试集6GB。国内下载速度不稳定我一般用aria2多线程下或者找国内的镜像源。下载完解压后目录结构是annotations、train2017、val2017、test2017。预处理方面如果做目标检测建议先把annotations里的json读出来统计一下类别分布。COCO有80个类但分布很不均衡人、车、椅子这些类样本多吹风机、停车计时器这些类样本少。训练时如果直接用小类会被大类淹没。我的做法是对小类做重采样或者用focal loss降低大类权重。4.2 小目标检测的精度提升技巧小目标检测在COCO上是老大难。AP_S这个指标很多模型只能做到20出头。提升手段有几个一是用高分辨率输入比如从800x800提到1200x1200但推理时间会线性增长二是用FPN或者PANet做多尺度特征融合三是用数据增强mosaic和mixup对小目标有帮助。我实测过把输入分辨率从800提到1024AP_S能涨1.5个点但FPS从25降到15。如果部署环境允许这个 trade-off 可以接受。另外anchor的设计也很关键小目标需要更密集的anchor我一般把anchor scale设成4、8、16、32aspect ratio用0.5、1、2。4.3 训练不收敛的排查思路训练不收敛是常见问题。我整理了一个排查表按优先级排序问题现象可能原因排查方法loss震荡不下降学习率太大降学习率10倍加warmuploss下降但AP不涨过拟合加数据增强加正则化loss突然变NaN梯度爆炸加梯度裁剪检查数据有无异常值AP为0标注格式错用pycocotools可视化验证小目标AP极低anchor不匹配重新聚类anchor我遇到最多的是标注格式错尤其是自己转COCO格式的时候。用pycocotools的COCO类加载json然后调showAnns可视化一眼就能看出框对不对。5. 计算机视觉学习路线与项目落地建议5.1 从入门到进阶的路线图热搜里“计算机视觉学习路线”出现频率很高。我按自己的经验给一条路线先学Python和OpenCV基础能读写图像、做基本变换然后学深度学习基础PyTorch或者TensorFlow选一个把CNN、RNN、Transformer的原理和代码都过一遍接着做项目从图像分类开始CIFAR-10或者ImageNet子集然后做目标检测COCO或者VOC最后做分割或者生成。教材方面《计算机视觉算法与应用》第二版适合打理论基础但偏传统方法。深度学习部分建议看《动手学深度学习》或者CS231n的讲义。Transformer和BERT的原理建议直接读论文原文Devlin那篇BERT论文虽然长但读三遍基本能懂。5.2 本科毕设和大作业的选题建议如果你在做本科毕设或者计算机视觉大作业选题不要贪大。我见过太多人选“通用目标检测”最后做不出来。建议选具体场景比如“基于YOLOv5的工地安全帽检测”、“基于Swin Transformer的鸟类细粒度分类”。场景越具体数据越好找评测指标越明确。数据方面Kaggle、天池、Roboflow上有很多公开数据集。如果找不到现成的可以自己爬或者用标注工具标LabelImg和CVAT都很好用。标注量不用太大目标检测的话每个类至少500个实例总共5000张图左右就能出结果。5.3 模型部署的注意事项训练完模型要部署这里坑也不少。PyTorch模型转ONNX再转TensorRT是常见路线但转换时要注意算子支持。Transformer里的MultiHeadAttention在ONNX里支持不好可能需要自定义算子。轻量模型部署到边缘设备建议用NCNN或者MNN这两个框架对移动端优化好。推理速度优化方面量化是最直接的手段。FP16量化精度损失很小INT8量化需要校准数据集精度可能掉1到2个点。我一般先用FP16如果速度还不够再上INT8。另外输入分辨率对速度影响很大部署时可以根据实际场景降低分辨率比如从640降到416FPS能翻倍。6. 实操心得与避坑记录6.1 训练资源有限时的取舍策略不是每个人都有8卡A100。资源有限时我的策略是先用小模型和小数据跑通流程确认代码没问题再逐步放大。比如做目标检测先用YOLOv5n在COCO的子集上跑确认loss能降、AP能涨再换YOLOv5l或者Swin backbone。混合精度训练是省显存的好办法PyTorch的amp模块开箱即用显存能省30%到40%速度还能快一点。梯度累积也能模拟大batch但要注意BatchNorm的统计量会不准建议用SyncBN或者GroupNorm。6.2 论文复现的常见陷阱复现论文时最容易忽略的是数据预处理和训练细节。论文里往往只写“we follow standard practice”但标准实践到底是什么不同框架不一样。比如图像归一化的均值和方差ImageNet的均值和COCO的均值就不一样。学习率的warmup步数、权重衰减系数、数据增强的具体参数这些细节对结果影响很大。我的做法是先找官方代码或者第三方复现跑通之后再改。如果找不到代码就按论文里的描述一步步来每步都验证输出。比如Transformer的注意力矩阵可以打印出来看是不是行和为1是不是对称的。6.3 学术速递的持续跟踪方法最后说回学术速递本身。跟踪最新论文我主要用三个渠道arXiv的cs.CV板块每天刷一遍标题和摘要Twitter上的计算机视觉圈子很多作者会发推还有Papers with Code能看到论文的代码和排行榜。筛选论文时我优先看有代码的、在COCO或者ImageNet上有结果的、方法有创新的。纯理论或者纯综述的除非特别相关一般跳过。读论文时先看摘要和图表再看方法最后看实验。如果方法部分看不懂就找代码看实现往往比论文清楚。这个速递我会继续做下去6月16日这一期的重点就是这些。如果你在复现过程中遇到问题或者有想让我重点拆解的方向可以留言。我踩过的坑尽量帮你避开。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价