1. 学术速递类内容的核心定位与选题逻辑
做学术速递这件事,表面上看就是把几篇新论文的标题和摘要翻译整理一下发出来,但真正做过一段时间的人都知道,这里面门道不少。我前后维护过几个方向的学术速递专栏,计算机视觉与模式识别这个方向是更新频率最高、信息密度最大、也最容易让读者产生疲劳感的领域之一。原因很简单:这个领域的预印本平台每天新增的论文数量动辄几十上百篇,顶会截稿前后更是井喷,如果只是机械搬运,读者根本看不过来,速递本身也就失去了存在的意义。
所以“学术速递”这个形态的核心价值,不在于“全”,而在于“筛”和“串”。筛是把真正有增量贡献的工作从大量增量微调的工作里挑出来;串是把看似独立的研究串成一条线索,让读者知道这个方向最近在往哪里走。我个人的经验是,一期速递如果能让读者记住三到五个核心趋势,并且每个趋势下面有一到两篇代表作可以顺着去读原文,这一期就算成功了。至于那些只是换了数据集、调了超参数、涨了零点几个点的论文,除非有特别值得关注的实验设计,否则不值得占用读者的注意力。
计算机视觉与模式识别这个方向还有一个特点,就是它的子方向之间分化非常明显。底层视觉(去噪、超分、去模糊)、中层视觉(检测、分割、跟踪)、高层视觉(识别、检索、生成)、以及三维视觉和视频理解,各自有各自的社区、各自的评价体系和各自的投稿节奏。一期速递如果什么都想覆盖,最后就会变成大杂烩。我的做法是每期确定一个主线方向,比如这一期以“视觉基础模型的高效适配”为主线,那么检测、分割、生成这些子方向的工作都围绕“如何用更少的参数或数据适配下游任务”这个角度来筛选和组织,这样整期内容就有了内在的逻辑,而不是零散的信息堆砌。
另外,速递的时效性很重要,但不能为了快而牺牲准确性。我见过不少速递为了抢首发,把预印本上的结果直接当成定论来写,结果过几天作者自己撤稿或者大幅修改,读者就被误导了。我的原则是:预印本阶段的工作,在速递里一定要标注清楚“预印本,未经同行评审”,并且对实验结论的表述要留有余地,用“报告了”“声称”这类词,而不是“证明了”“实现了”。这不是保守,而是对读者负责。
2. 计算机视觉与模式识别近期值得关注的技术脉络
2.1 视觉基础模型从“大而全”转向“小而专”
过去两年,视觉基础模型的主旋律是 scaling law,参数越大、数据越多、效果越好。但最近几个月,我注意到一个明显的转向:越来越多的研究工作开始关注如何在保持基础模型通用能力的前提下,把它做小、做专、做快。这个转向背后的驱动力很实际——大模型在真实业务场景里落地的成本太高了,推理延迟、显存占用、部署复杂度都是硬约束。
具体来说,这个方向上有几条技术路线值得关注。第一条是参数高效微调(PEFT)在视觉任务上的深化。早期的工作主要是把 NLP 领域的 LoRA、Adapter 那一套直接搬过来,但视觉任务和 NLP 任务在特征分布上有本质差异,直接搬效果往往打折扣。最近的工作开始针对视觉特征的空间结构设计专门的适配模块,比如在注意力图的特定频段上做低秩修正,或者在特征金字塔的特定层级插入轻量适配器。这些工作的共同思路是:不去动预训练权重,而是用极少的额外参数去“引导”模型适应新任务。
第二条路线是知识蒸馏的复兴。大模型当教师、小模型当学生的范式其实很老了,但最近的工作在蒸馏策略上做了不少创新。比如有的工作不再只蒸馏最终输出,而是蒸馏中间层的注意力分布和特征相似度矩阵,让学生模型学到教师的“思考过程”而不只是“答案”。还有的工作引入了动态蒸馏权重,根据学生模型在不同样本上的表现自适应调整蒸馏强度,避免在简单样本上过度蒸馏导致学生模型失去自己的判断力。
第三条路线是模型剪枝与结构重参数化的结合。剪枝本身不新鲜,但把剪枝和重参数化结合起来,在训练时用大结构、推理时等价转换成小结构,这个思路在视觉任务上最近有不少漂亮的实现。我实测过其中一个方案,在分类任务上能把参数量压到原来的三分之一,精度损失控制在零点五个点以内,推理速度提升接近两倍,对于边缘部署场景来说是很实用的。
2.2 多模态理解从“对齐”走向“融合推理”
多模态这个方向,前几年的核心问题是“对齐”——怎么让图像特征和文本特征在同一个空间里可比。CLIP 那一套对比学习范式基本解决了这个问题,现在的研究重心已经转向“融合推理”——给定对齐好的多模态特征,怎么让模型真正理解图像和文本之间的复杂关系,而不是简单地做匹配。
这个转向体现在几个具体的研究趋势上。一个是细粒度跨模态交互,早期的工作通常是把整张图的特征和整句文本的特征做对齐,但真实场景里往往是图像的一个局部对应文本的一个短语,需要模型具备细粒度的定位和关联能力。最近的工作开始引入可学习的查询向量,让模型自己决定关注图像的哪些区域和文本的哪些片段,然后在这些局部特征之间做交互。
另一个趋势是多模态推理链的构建。这个思路受语言模型里思维链的启发,让模型在给出最终答案之前,先显式地生成一系列中间推理步骤,每一步都基于图像和文本的联合信息。比如问“图中的人接下来最可能做什么”,模型先识别出人的位置和姿态,再识别出周围物体的类别和空间关系,最后基于这些中间结果做预测。这种显式推理的好处是可解释性强,而且中间步骤可以被单独监督和纠正。
还有一个值得关注的方向是多模态预训练中的数据效率问题。现在的高质量图文对数据越来越贵,怎么用有限的配对数据加上大量的单模态数据来训练多模态模型,是一个很实际的问题。最近有工作尝试用单模态数据做自监督预训练,再用少量配对数据做跨模态对齐,在多个下游任务上取得了接近全配对数据训练的效果。
2.3 三维视觉与神经渲染的工程化落地
三维视觉这个方向,NeRF 系列的工作把神经渲染的热度推到了一个新高度,但从研究到落地之间还有不小的距离。最近我观察到的一个积极信号是,越来越多的研究工作开始关注工程化问题:训练速度、渲染速度、内存占用、对稀疏视角的鲁棒性、对动态场景的支持。
训练速度方面,早期 NeRF 训练一个场景要几十个小时,现在基于哈希编码和显式体素网格的方法已经把训练时间压缩到了几分钟甚至几十秒。这个进步的意义在于,它让神经渲染从“离线制作”变成了“近实时交互”成为可能。我实测过一个基于多分辨率哈希网格的实现,在单张消费级显卡上,五分钟内就能完成一个中等复杂度场景的重建,渲染帧率能到三十以上,虽然离实时还有距离,但已经可以支撑一些交互式预览场景了。
稀疏视角重建是另一个工程痛点。真实场景里往往只能拍到有限几个视角的图像,传统方法在这种条件下会严重过拟合。最近的工作通过引入深度先验、法向先验或者跨场景的元学习来解决这个问题。其中基于单目深度估计提供几何先验的思路我觉得最实用,因为单目深度估计模型现在已经很成熟了,拿来当先验几乎不增加额外成本,但效果提升很明显。
动态场景支持也是一个活跃的方向。静态场景的神经渲染已经相对成熟,但真实世界是动态的,人、车、树叶都在动。最近的工作开始把场景分解为静态背景和动态前景,分别用不同的网络建模,再在渲染时合成。这个思路直观且有效,但挑战在于如何在没有显式监督的情况下把动静分离做好。
3. 从速递到实践:如何把论文里的方法跑起来
3.1 论文复现的环境准备与依赖管理
看速递和真正把论文里的方法跑起来,中间隔着一道不小的鸿沟。我见过太多人看完速递觉得某个方法很惊艳,兴冲冲去复现,结果卡在环境配置上就放弃了。所以这一节我想认真聊聊复现的环境准备问题,这部分虽然不性感,但决定了你能不能真正把论文里的东西变成自己的。
第一件事是确定计算资源。计算机视觉的论文,尤其是涉及基础模型和三维视觉的,对显存的要求往往很高。我的经验是,先看论文里的实验设置表格,找到他们用的显卡型号和 batch size,然后估算自己的显存够不够。如果不够,不要硬跑,先想清楚能不能通过梯度累积、混合精度、梯度检查点这些技术把显存需求降下来。如果这些都不行,那就考虑用云端的按需实例,跑完就释放,成本可控。
第二件事是依赖版本的管理。Python 生态里版本冲突是家常便饭,尤其是 PyTorch、CUDA、cuDNN 这三者的版本匹配,以及各种视觉库(如 torchvision、mmcv、detectron2)之间的兼容性。我的做法是,拿到一个开源实现后,先看它的 requirements.txt 或者 environment.yml,如果没有,就看 README 里有没有说明。如果都没有,就去翻 issue 区,通常有人已经踩过坑了。实在找不到,就用 Docker 把整个环境封起来,虽然重一点,但省心。
第三件事是数据准备。计算机视觉论文用的数据集往往很大,下载、解压、预处理都要花不少时间。我的建议是,在开始复现之前,先把数据集的下载脚本和预处理脚本跑通,确认数据格式和论文里描述的一致。这一步很容易出问题,比如图像通道顺序、归一化参数、标注格式的差异,都会导致后续训练出问题。
3.2 训练策略的选择与调参经验
环境配好之后,下一步是训练策略的选择。论文里通常会给出他们用的优化器、学习率、权重衰减、学习率调度等超参数,但这些参数是在他们的计算资源下调出来的,直接搬到自己的环境里未必最优。我的经验是,先按论文的设置跑一遍,确认能复现出接近的结果,然后再根据自己的资源做调整。
学习率是最关键的参数。如果显存不够导致 batch size 必须调小,学习率通常也要相应调小,但缩小的比例不是线性的。我的经验是,batch size 减半,学习率乘以零点七左右比较稳妥。如果用了梯度累积来模拟大 batch,学习率可以保持和论文一致,但要注意 BatchNorm 的统计量更新频率会受影响,可能需要换成 GroupNorm 或者 SyncBN。
权重衰减方面,视觉任务里通常用 1e-4 到 1e-2 之间,具体取决于模型大小和数据集规模。模型越大、数据越少,权重衰减应该越大,防止过拟合。学习率调度方面,余弦退火是目前最常用的,简单且稳定。如果训练轮数不多,warmup 阶段很重要,通常用五百到一千步把学习率从零线性升到初始值,避免训练初期的不稳定。
还有一个容易被忽视的点是数据增强。论文里如果用了特定的增强策略(如 RandAugment、MixUp、CutMix),复现时最好保持一致,因为这些策略对最终精度的影响可能比模型结构还大。如果自己的数据集和论文的不同,增强策略需要相应调整,原则是增强后的数据分布要尽量接近真实测试分布。
3.3 推理部署的性能优化要点
训练出模型只是第一步,真正落地还要过推理部署这一关。计算机视觉模型在部署时的性能瓶颈通常不在计算量,而在内存访问和算子调度。我总结了几条实用的优化经验。
第一条是算子融合。把连续的卷积、批归一化、激活函数融合成一个算子,可以减少内存读写次数,提升推理速度。主流的推理框架(如 TensorRT、ONNX Runtime)都支持自动算子融合,但需要你在导出模型时注意格式,有些动态控制流会阻止融合。
第二条是量化。把 FP32 模型量化成 FP16 或 INT8,可以大幅减少显存占用和提升推理速度。FP16 通常精度损失很小,可以直接用。INT8 需要校准,校准集的选择很关键,要能代表真实推理时的数据分布。我的经验是,校准集用五百到一千张覆盖各种场景的图片就够了,太多反而可能引入偏差。
第三条是动态批处理。在线服务场景下,请求是零散到达的,如果每个请求单独推理,GPU 利用率很低。动态批处理把短时间内到达的多个请求合并成一个 batch 一起推理,可以显著提升吞吐量。但要注意 batch 里的样本要 padding 到相同尺寸,padding 太多会浪费计算,所以通常配合图像缩放策略一起用。
4. 常见问题与排查技巧实录
4.1 复现结果与论文差距大的排查思路
复现结果和论文报告的数字对不上,这是最常见也最让人头疼的问题。我踩过很多次坑之后,总结了一套排查顺序,按这个顺序走,大部分问题都能定位到。
先查数据。确认训练集、验证集、测试集的划分和论文一致,确认数据预处理(归一化、resize、裁剪)的参数一致,确认标签的编码方式一致。我遇到过好几次问题都出在数据上,比如论文用的是 RGB 通道顺序,我用的 BGR,或者论文的归一化均值方差是 ImageNet 的,我用了自己的。
再查模型。确认网络结构的每一层都和论文一致,包括卷积核大小、步长、padding、通道数、激活函数类型。如果论文有开源代码,直接对比代码是最快的。如果没有开源代码,就对着论文里的结构图或者表格逐层核对。我遇到过论文里写的是 3x3 卷积但实际代码里是 5x5 的情况,这种只能靠仔细。
然后查训练。确认优化器类型、学习率、权重衰减、学习率调度、batch size、训练轮数都和论文一致。如果这些都没问题,就查随机种子。深度学习训练对随机种子很敏感,尤其是小数据集上,不同种子可能差好几个点。论文通常只报告最好的那次结果,你复现时如果只跑一次,很可能落在均值附近而不是最好值。
最后查评估。确认评估指标的计算方式和论文一致,比如 mAP 的 IoU 阈值、top-k 的 k 值、是否用了多尺度测试、是否用了模型集成。这些细节对最终数字的影响可能很大。
4.2 训练不收敛或损失异常的快速定位
训练不收敛或者损失出现 NaN,这类问题通常有明确的根因,按下面的顺序排查效率最高。
先看学习率是不是太大了。学习率过大会导致损失震荡甚至发散,表现为损失先下降然后突然飙升。解决办法是降低学习率,或者加 warmup。再看有没有梯度爆炸。如果梯度范数突然变得很大,说明梯度爆炸了,可以用梯度裁剪把梯度范数限制在一个阈值内,通常取 1.0 到 5.0 之间。
然后查数据里有没有异常样本。比如标签越界、图像损坏、标注错误。这些异常样本会产生很大的损失,把整体训练带偏。解决办法是训练前做一遍数据清洗,把损失异常大的样本挑出来检查。
还要查数值稳定性。混合精度训练时,如果某些算子在 FP16 下溢出,会产生 NaN。解决办法是用动态损失缩放,或者把容易溢出的算子(如 softmax、layer norm)强制用 FP32 计算。另外,除零、log 零、sqrt 负数这些数学运算也会产生 NaN,检查损失函数和网络里的这些运算有没有加 epsilon。
4.3 显存不足时的降级方案速查
显存不足是视觉任务里最常遇到的资源问题,下面这张表是我常用的降级方案,按优先级排列,从影响最小的开始试。
| 方案 | 显存节省 | 对精度影响 | 操作复杂度 |
|---|---|---|---|
| 混合精度训练 | 约 30% | 很小 | 低 |
| 梯度检查点 | 约 50% | 无 | 低 |
| 减小 batch size | 线性 | 可能需调学习率 | 低 |
| 梯度累积 | 无(模拟大 batch) | 无 | 低 |
| 减小输入分辨率 | 平方级 | 中等 | 中 |
| 模型剪枝 | 约 30-50% | 中等 | 高 |
| 换更小的模型 | 视模型而定 | 较大 | 中 |
混合精度训练和梯度检查点是我最推荐的两个方案,因为它们对精度几乎没影响,操作也简单。混合精度训练在 PyTorch 里就是几行代码的事,梯度检查点也是调用一个 API 就行。如果这两个还不够,再考虑减小 batch size 配合梯度累积,这样可以在小显存上模拟大 batch 的训练效果。
5. 学术速递的长期维护与信息源管理
5.1 信息源的筛选与去重策略
做学术速递,信息源的质量直接决定了速递的质量。我的信息源分三层:第一层是预印本平台,这是最新工作的主要来源,但噪音也最大;第二层是顶会顶刊的接收列表,这是经过筛选的工作,质量有保证但时效性差一些;第三层是研究机构和学者的个人主页,这是获取代码和补充材料的好渠道。
预印本平台的筛选是个技术活。我的做法是设置关键词订阅,但关键词不能太宽也不能太窄。太宽了每天收到几百封邮件根本看不过来,太窄了又会漏掉重要工作。我的经验是,核心关键词控制在五到八个,覆盖你关注的主要子方向,然后每周根据收到的内容调整一次关键词列表。另外,预印本平台上的论文质量参差不齐,我通常会先看摘要和图表,如果摘要里没有明确的增量贡献,或者图表质量明显粗糙,就直接跳过。
去重也很重要。同一个工作可能先出现在预印本平台,过几周出现在顶会接收列表,再过几个月出现在期刊上。如果不做去重,读者会反复看到同一个工作,体验很差。我的做法是维护一个已收录工作的列表,用标题和作者组合做唯一标识,新工作进来先查重,重复的就跳过或者只更新状态(比如从“预印本”更新为“已被某会议接收”)。
5.2 速递内容的组织与呈现技巧
速递的内容组织,我试过几种不同的结构,最后稳定下来的是一种“趋势先行、论文佐证”的结构。每期先给出三到五个核心趋势,每个趋势用一段话概括这个趋势是什么、为什么值得关注、有哪些代表性工作。然后在每个趋势下面列出具体的论文,每篇论文用三到五句话说明它的核心贡献、方法要点和实验结果。这种结构的好处是读者可以先看趋势,感兴趣再深入看论文,不感兴趣就跳过,信息获取效率高。
呈现技巧方面,我有几个小心得。一是标题要具体,不要用“某方法在某某任务上的应用”这种空泛的标题,要用“某方法解决了某某任务中的某某问题”这种有信息量的标题。二是摘要要控制长度,三到五句话最好,第一句说问题,第二句说方法,第三句说结果,第四句说意义。三是链接要齐全,论文链接、代码链接、项目主页链接都放上,方便读者顺藤摸瓜。
还有一个容易被忽视的点是更新频率。速递的更新频率要和你的信息处理能力匹配,如果每周只能处理二十篇论文,就不要承诺日更。我的经验是,计算机视觉与模式识别这个方向,每周一期、每期十到十五篇精选论文,是一个比较可持续的节奏。频率太高了质量会下降,频率太低了读者会流失。
5.3 读者反馈的收集与内容迭代
速递做久了,很容易陷入自说自话的状态,所以读者反馈的收集很重要。我通常通过几个渠道收集反馈:一是直接在速递末尾放一个简单的反馈入口,让读者可以快速告诉我哪篇论文有用、哪篇没用、希望增加什么方向的内容;二是在相关的社群里观察讨论,看大家对哪些工作讨论得多、对哪些工作有疑问;三是看后台的阅读数据,哪篇论文的链接点击率高,说明读者感兴趣。
收集到反馈之后,内容迭代的方向主要有几个。如果读者普遍反映某个子方向的内容太少,就增加这个方向的信息源和筛选权重。如果读者反映某类论文太多但价值不高,就提高这类论文的收录门槛。如果读者反映摘要太技术看不懂,就调整摘要的写法,增加背景说明和类比解释。如果读者反映更新太慢,就考虑优化信息处理流程,或者引入协作机制。
我自己的体会是,速递这个形态的生命力在于持续迭代。读者的需求在变,研究的热点在变,速递的内容和组织方式也要跟着变。一个一年前很受欢迎的速递格式,一年后可能就过时了。保持对读者反馈的敏感,保持对研究趋势的跟踪,才能让速递一直有价值。
6. 从速递读者到研究参与者的进阶路径
6.1 如何从速递中提炼可研究的问题
速递看多了,自然会想自己动手做点东西。但从哪里入手是个问题。我的经验是,速递里那些“作者在结论部分提到的未来工作”和“实验部分没有充分解释的现象”,往往是很好的研究切入点。前者是作者自己认为有价值但没来得及做的,后者是作者自己也没搞清楚的,这两类问题都有明确的研究价值。
具体来说,读一篇论文时,我会特别关注几个地方。一是方法部分,看作者做了哪些设计选择,这些选择有没有替代方案,替代方案会不会更好。二是实验部分,看作者在哪些数据集上做了实验,有没有在别的数据集上验证,跨数据集的泛化性如何。三是消融实验,看作者对哪些模块做了消融,哪些模块没有做,没做消融的模块是不是真的有必要。四是结论部分,看作者自己承认的局限性是什么,这些局限性有没有可能被解决。
从这些问题里提炼出可研究的问题,还需要做一个可行性评估。评估的维度包括:这个问题有没有明确的技术路线,需要多少计算资源,需要多少数据,需要多少时间。如果一个问题需要上千张显卡跑几个月,那对个人研究者来说就不现实。我的建议是,从小的、具体的问题入手,先做出一个能跑通的原型,再逐步扩展。
6.2 小规模实验的设计与快速验证
确定了研究问题之后,下一步是设计实验来验证你的想法。小规模实验的目的是快速验证核心假设,而不是追求最终性能。所以实验设计要尽量简单、快速、可控。
我的做法是,先用一个很小的数据集(比如原数据集的十分之一)和一个很小的模型(比如原模型的四分之一宽度)跑通整个流程,确认代码没有 bug,确认训练能收敛,确认评估指标计算正确。这个阶段不追求性能,只追求流程通畅。然后逐步放大数据集和模型,观察性能的变化趋势。如果放大之后性能没有提升甚至下降,说明核心假设可能有问题,需要回头检查。
实验的对照设置也很重要。至少要有一个 baseline 和你的方法对比,baseline 可以是论文里的原始方法,也可以是一个简单的替代方案。如果条件允许,最好做消融实验,把你方法里的每个组件单独去掉,看性能变化,这样能确认每个组件是否真的有必要。我见过不少工作,方法里堆了一堆模块,但消融实验显示去掉一半模块性能几乎不变,这种工作就很难让人信服。
6.3 从实验到写作的转化要点
实验做完了,下一步是写成论文或者技术报告。写作这件事,我的经验是,不要等实验全部做完再开始写,而是在实验过程中就持续记录。记录的内容包括:实验设置、超参数、遇到的坑、解决方案、中间结果、失败尝试。这些记录在写作时都是宝贵的素材,尤其是失败尝试,写在论文里可以帮读者避坑,也显得工作更扎实。
写作的结构,计算机视觉的论文通常遵循“问题-方法-实验-结论”的框架。问题部分要说明这个问题的研究现状和未解决的难点,方法部分要详细到别人能复现的程度,实验部分要覆盖多个数据集和多个对比方法,结论部分要诚实说明工作的局限性和未来方向。写作的语言要准确、简洁,避免模糊表述。比如“效果很好”就不如“在某某数据集上比 baseline 提升了多少个百分点”来得有说服力。
最后再分享一个小技巧。写完初稿之后,放两天再回来看,或者找一个不了解这个工作的同学读一遍,看他们能不能看懂。如果他们有疑问的地方,往往就是写作需要改进的地方。这个步骤看起来简单,但能显著提升论文的可读性。我自己每次这么做,都能发现不少之前没注意到的问题。