1. 这周的目标检测圈都在卷什么9月20号到26号这一周arXiv上目标检测方向的投稿量依旧稳定在每天十几篇的水平我花了两三个晚上把这一周的论文过了一遍筛掉了纯综述和纯benchmark刷榜的留下了一批我觉得真正有工程参考价值的工作。先说结论这一周的关键词集中在开放词汇检测、移动端小目标、遥感图像和三维检测四个方向其中开放词汇检测的占比明显上升几乎每隔一天就有一篇新的对齐策略或者词汇扩展方案出来。如果你是在做落地的工程师这一周的论文里至少有三四篇是值得你花时间精读的。比如有工作把检测头的分类分支做了重参数化在保持精度的前提下把推理延迟压到了原来的六成左右还有一篇专门针对无人机视角下的小目标重新设计了特征金字塔的融合权重在VisDrone上涨了两个多点。这些不是那种“刷完榜就扔”的论文里面的trick是可以直接搬到你自己项目里的。我整理这批论文的流程其实很固定先用arXiv的API按cs.CV分类拉取当周所有新投稿再用关键词过滤出目标检测相关的然后逐篇看摘要和实验部分最后把值得细读的挑出来做笔记。这套流程跑下来大概两个小时能覆盖一周的量比每天刷首页效率高得多。下面我把这一周的整理思路、筛选标准、精读笔记和踩过的坑都摊开讲一遍你照着做就能搭一套自己的论文追踪流水线。2. 论文追踪流水线的整体设计思路2.1 为什么不用RSS而用API拉取很多人追arXiv论文的第一反应是订阅RSS我早期也这么干过但很快就放弃了。RSS的问题在于它只给你标题和摘要而且更新有延迟更麻烦的是你没法做二次过滤。比如我想只看cs.CV下面带“object detection”或者“open-vocabulary”的论文RSS做不到只能靠人眼扫。用arXiv官方的API就不一样了。它的Query接口支持按分类、日期范围、关键词组合查询返回的是结构化的Atom XML解析起来非常方便。我一般用这样的查询逻辑分类限定在cs.CV日期范围设为当周的周一到周日然后在摘要里搜目标检测相关的词。这样拉下来的结果基本就是当周所有相关论文不会漏也不会多太多。注意arXiv的API有请求频率限制官方建议每次请求间隔3秒以上。我实测下来如果连续快速请求大概十几次之后就会被临时限流返回503。所以批量拉取的时候一定要加延时别图快。2.2 关键词过滤的粒度怎么定关键词定得太宽你会被一堆无关论文淹没定得太窄又会漏掉一些标题里没写但内容相关的。我的做法是分两层第一层用宽泛的词做初筛比如“detection”、“detector”、“localization”这些第二层用具体的子方向词做精筛比如“open-vocabulary”、“small object”、“remote sensing”、“3D”、“point cloud”等。这一周我用的精筛词表大概是这样的open-vocabulary detection、small object detection、aerial detection、remote sensing detection、3D object detection、point cloud detection、anchor-free、label assignment、feature pyramid。每个词单独跑一遍查询然后把结果合并去重。这样虽然请求次数多了点但覆盖面最全。2.3 从摘要到精读的筛选漏斗拉下来几十篇之后不可能每篇都精读。我的筛选漏斗分三步第一步看标题明显不相关的直接跳过第二步看摘要重点看它解决了什么问题、在什么数据集上验证的、涨点幅度有多大第三步看实验部分的表格如果只在某个小众数据集上涨了0.5个点那基本可以略过。经过这三步一周的论文里通常能剩下五到八篇值得精读的。这一周我筛出来六篇其中两篇开放词汇、两篇小目标、一篇遥感、一篇三维。下面我会挑重点的几篇展开讲包括它们的核心思路、关键实现细节以及我自己的复现笔记。3. 本周重点论文的核心细节拆解3.1 开放词汇检测的对齐策略改进这一周有两篇开放词汇检测的工作值得关注它们的共同思路是改进区域特征和文本嵌入的对齐方式。其中一篇的做法我觉得比较巧妙它没有直接去对齐整个区域的特征而是先把区域拆成若干个语义部件然后分别和文本嵌入做对齐最后再聚合。这样做的好处是对于遮挡和形变更鲁棒因为即使整体区域的特征被干扰了局部部件的对齐仍然能提供有效的监督信号。具体实现上它用了一个轻量的部件分解模块把RoI Align出来的特征图按空间位置分成四块每块过一个小的注意力模块得到部件级特征然后和文本编码器输出的词向量做对比学习。损失函数用的是InfoNCE的变体温度系数设的是0.07。这个温度系数我试过调到0.1以上对齐会变松调到0.05以下训练容易不稳定0.07确实是个比较稳的值。另一篇的思路不太一样它关注的是词汇扩展的问题。开放词汇检测的一个痛点是当测试时出现训练集中没见过的类别时模型容易把新类别误判成已知的相似类别。这篇工作提出了一种动态词汇扩展机制在推理阶段根据检测置信度的分布自动调整分类阈值对低置信度的区域重新计算与扩展词汇的相似度。这个方法不需要重新训练可以直接插到现有的开放词汇检测器上。实操心得如果你在做开放词汇检测的落地我建议先别急着上复杂的对齐模块先把基线的文本嵌入质量提上去。很多时候涨点不明显不是对齐策略的问题而是文本编码器本身对细粒度类别的区分度就不够。换一个更强的文本编码器或者对类别名称做prompt ensemble往往比改对齐方式见效更快。3.2 移动端小目标检测的特征融合优化小目标检测一直是落地的老大难这一周有一篇专门针对移动端场景的工作核心贡献在特征金字塔的融合权重上。传统的FPN是自顶向下逐层融合每层权重固定为1但这篇工作发现对于小目标来说浅层特征的重要性被低估了。它提出了一种可学习的融合权重让网络自己决定每层特征在融合时占多大比重。具体做法是在每个融合节点上加一个轻量的权重预测分支输入是当前层的特征图输出是一个标量权重然后做softmax归一化。这个分支的计算量很小大概只增加了3%的FLOPs但在VisDrone和TinyPerson两个数据集上都涨了2个点以上。我复现的时候发现权重初始化很关键如果随机初始化前期训练会震荡建议初始化为均匀分布让网络从一个比较平衡的状态开始学。另外这篇工作还改进了正样本分配策略。对于小目标传统的IoU-based分配容易把正样本给到大目标因为小目标的IoU本身就低。它用了一个尺度感知的分配阈值对小目标放宽IoU阈值对大目标收紧。这个思路其实在ATSS里就有体现但这篇把它做得更细按目标面积分了四档每档用不同的阈值。3.3 遥感图像检测的旋转框处理遥感图像的目标检测和自然图像最大的区别在于目标有任意方向所以旋转框的处理是核心。这一周有一篇工作专门研究了旋转框的回归损失它指出传统的Smooth L1损失在角度回归上存在边界不连续的问题当角度接近边界值时损失会突变导致训练不稳定。它的解决方案是把角度回归拆成两个部分一个是角度的正弦余弦值回归另一个是角度的周期性修正。正弦余弦回归保证了角度表示的连续性周期性修正则处理了角度跨越边界的情况。损失函数上正弦余弦部分用MSE周期性修正部分用了一个自定义的周期损失。我看了它的消融实验去掉周期性修正之后mAP掉了1.8个点说明这个模块确实在起作用。遥感检测还有一个坑是数据集的标注质量参差不齐。DOTA数据集里有些小目标的标注框其实不太准训练的时候如果直接用这些标注模型会学到噪声。这篇工作用了一个标注质量加权的策略对每个标注框根据其与邻域标注的一致性给一个权重一致性低的权重就低。这个思路我觉得挺实用的不光是遥感任何标注质量不稳定的场景都可以借鉴。3.4 三维检测中的点云稀疏性问题三维目标检测这一周有一篇关于点云稀疏性的工作。激光雷达点云在远处非常稀疏导致远距离目标的检测效果很差。这篇工作的思路是在特征空间做稠密化而不是在点云空间做上采样。具体来说它先用一个稀疏卷积网络提取点云特征然后在BEV特征图上用一个轻量的稠密化模块通过邻域特征插值来填补稀疏区域。这个稠密化模块的设计很有意思它不是简单的双线性插值而是用了一个可变形卷积让网络自己学习插值的位置和权重。这样做的好处是对于不同稀疏程度的区域插值策略可以自适应调整。在nuScenes数据集上远距离目标的AP涨了3个多点近距离基本没变说明它确实针对性地解决了稀疏性问题。注意三维检测的复现成本比二维高很多主要是数据预处理和坐标系转换容易出错。我建议如果你要复现这类工作先把数据加载和可视化跑通确认点云和标注框在BEV视角下是对齐的再去调模型。我见过太多人模型代码写得没问题但坐标系搞反了训练半天loss不降。4. 实操过程与核心环节实现4.1 用Python搭建arXiv论文拉取脚本先说环境准备。我用的是Python 3.10依赖就三个requests、feedparser、pandas。requests负责发HTTP请求feedparser解析Atom XMLpandas做数据整理。安装命令很简单pip install requests feedparser pandas拉取脚本的核心逻辑是这样的构造查询URL发送请求解析返回的XML提取每篇论文的标题、作者、摘要、发布日期、arXiv ID和PDF链接存成一个DataFrame。查询URL的格式是http://export.arxiv.org/api/query?search_querycat:cs.CVANDabs:objectdetectionstart0max_results100sortBysubmittedDatesortOrderdescending这里有几个参数需要说明。search_query里的cat:cs.CV限定分类abs:objectdetection表示摘要里包含这个短语。max_results我一般设100因为一周的相关论文不会超过这个数。sortBy用submittedDate按提交日期排序sortOrder用descending让最新的排前面。解析部分用feedparser很简单feedparser.parse(response.text)之后feed.entries就是一个列表每个entry有title、summary、published、id等属性。需要注意的是arXiv返回的摘要里会有换行符和多余空格存之前最好做一下清洗。import requests import feedparser import pandas as pd import time def fetch_arxiv(query, max_results100): base_url http://export.arxiv.org/api/query params { search_query: query, start: 0, max_results: max_results, sortBy: submittedDate, sortOrder: descending } response requests.get(base_url, paramsparams) feed feedparser.parse(response.text) papers [] for entry in feed.entries: papers.append({ title: entry.title.replace(\n, ).strip(), summary: entry.summary.replace(\n, ).strip(), published: entry.published, id: entry.id.split(/)[-1], link: entry.link }) return pd.DataFrame(papers)调用的时候记得加延时我一般每次请求之间sleep(3)秒。如果要查多个关键词就循环调用然后pd.concat合并最后按id去重。4.2 论文筛选与笔记整理的工作流拉下来数据之后我习惯先按发布日期过滤出当周的然后按关键词给每篇论文打标签。打标签这一步我一开始想用文本分类模型自动做后来发现规则匹配就够用了。比如摘要里出现“open-vocabulary”就标“开放词汇”出现“small object”或“aerial”就标“小目标”出现“remote sensing”就标“遥感”出现“3D”或“point cloud”就标“三维”。打完标签之后我会把论文按标签分组每组里按我自己的兴趣排序。然后逐篇看摘要在DataFrame里加一列“优先级”分高、中、低三档。高优先级的精读中优先级的扫一眼实验表格低优先级的直接跳过。精读的时候我会开一个Markdown文件做笔记每篇论文记四块内容核心问题、核心方法、关键实验数据、可借鉴的点。这个笔记格式是我试了好几种之后固定下来的写起来快回头看也清楚。关键是“可借鉴的点”这一块一定要写具体比如“它的正样本分配用了尺度感知阈值可以搬到我的无人机检测项目里”而不是泛泛地写“方法有创新”。4.3 关键论文的复现环境配置这一周我挑了一篇小目标检测的工作做复现环境配置踩了不少坑这里详细说一下。代码是基于PyTorch的我用的版本是1.13.1配CUDA 11.7。创建虚拟环境之后先装PyTorchpip install torch1.13.1cu117 torchvision0.14.1cu117 -f https://download.pytorch.org/whl/torch_stable.html然后装其他依赖这里要注意版本兼容。它requirements里写的numpy是1.21但我实测1.24也能跑只是有个warning。opencv-python建议装4.5以上的版本低版本在读取某些格式的图片时会报错。数据集准备是另一个坑。VisDrone数据集需要自己转成COCO格式作者提供的转换脚本有个bug它把类别ID从1开始编号但COCO格式要求从0开始导致训练的时候所有标签都偏移了一位loss一直不降。我查了半天才发现这个问题把转换脚本里的category_id减1就好了。实操心得复现论文的时候如果loss不降或者指标异常低先别怀疑模型结构优先检查数据加载和标签格式。我踩过的坑里十次有八次是数据问题不是模型问题。具体检查项包括类别ID是否从0开始、标注框坐标是否归一化、图片和标注是否一一对应、数据增强是否把框也同步变换了。4.4 训练过程中的参数调优记录这篇工作的默认训练配置是batch size 16、初始学习率0.01、余弦退火、训练50个epoch。我在单卡2080Ti上跑batch size只能开到8所以学习率相应减半到0.005。这里有个经验batch size减半的时候学习率不一定要严格减半我试过0.008和0.005最后0.005的收敛曲线更平滑。数据增强方面作者用了Mosaic和MixUp但我在小目标数据集上试下来MixUp对小目标不太友好因为混合之后小目标容易被覆盖。我把MixUp的概率从0.5降到了0.2mAP反而涨了0.4个点。Mosaic保留概率0.5不变它对小目标的上下文信息增强还是有帮助的。训练到第30个epoch左右的时候验证集mAP出现了波动上下震荡大概0.5个点。我查了一下学习率曲线发现余弦退火在这个阶段降得比较快导致模型在局部最优附近震荡。后来我把退火周期从50改成了70让学习率降得慢一点波动就小了很多。最终在第62个epoch拿到了最好的mAP比作者报告的还高了0.3个点。5. 常见问题与排查技巧实录5.1 arXiv API请求失败与限流处理用API拉论文最常遇到的问题就是请求失败。我遇到过三种情况一是返回503这是被限流了等几分钟再试就好二是返回空结果这通常是查询语句写错了比如关键词拼写错误或者分类号不对三是返回的XML解析失败这多半是网络问题导致返回了不完整的响应。针对限流我的做法是在脚本里加一个重试机制每次失败后等待时间翻倍最多重试三次。同时把请求间隔从3秒加到5秒基本就不会再被限流了。查询语句写错的话建议先用浏览器打开查询URL看看返回什么确认没问题再写进脚本。import time def fetch_with_retry(query, max_results100, max_retries3): for attempt in range(max_retries): try: df fetch_arxiv(query, max_results) if len(df) 0: return df except Exception as e: print(fAttempt {attempt1} failed: {e}) time.sleep(5 * (attempt 1)) return pd.DataFrame()5.2 论文复现中的环境依赖冲突环境依赖冲突是复现论文时最烦人的问题之一。我这一周复现的那篇工作它的requirements里同时写了opencv-python和opencv-python-headless这两个包会冲突装的时候后装的会覆盖先装的。解决办法是只装opencv-python-headless因为服务器上没有图形界面headless版本就够了。另一个常见冲突是PyTorch和torchvision的版本不匹配。我的经验是去PyTorch官网查版本对应表严格按照表里的组合来装。比如PyTorch 1.13.1对应torchvision 0.14.1你装成0.14.0就可能出问题。还有numpy的版本如果论文代码里用了np.float这种旧APInumpy 1.24以上会报错要么降numpy版本要么把代码里的np.float改成np.float64。5.3 训练不收敛的排查清单训练不收敛的原因很多我整理了一个排查清单按优先级从高到低排排查项检查方法常见问题数据标签格式可视化几张图的标注框类别ID偏移、坐标未归一化学习率打印每层梯度范数学习率过大导致梯度爆炸损失函数单独打印各损失分量某个损失权重过大压制其他损失数据增强关闭增强跑几个epoch增强过强导致模型学不到有效特征预训练权重确认加载成功权重key不匹配导致随机初始化批次归一化检查batch sizebatch size过小导致BN统计不准这个清单我基本每次复现都会过一遍大部分问题在前两项就能定位到。特别是数据标签格式我强烈建议在训练之前先可视化几张图的标注框确认框的位置和类别都是对的。这个步骤花不了五分钟但能省你几个小时的debug时间。5.4 小目标检测的调参避坑指南小目标检测的调参和大目标有很大不同我踩过的坑主要有这几个。第一是输入分辨率小目标需要更高的分辨率才能看清但分辨率提高会显著增加显存占用和推理时间。我的做法是先用较高分辨率训练推理时再根据实际场景降分辨率找到一个精度和速度的平衡点。第二是正样本分配前面也提到了IoU-based的分配对小目标不友好。我试过用ATSS和SimOTA在小目标数据集上SimOTA的效果更好一些但训练时间也更长。如果时间紧ATSS是更稳妥的选择。第三是NMS阈值小目标密集的场景下NMS阈值设太高会漏检设太低会误检。我一般从0.5开始试每次调0.05找到漏检和误检的平衡点。对于特别密集的场景可以试试Soft-NMS它比硬NMS对小目标更友好。提示小目标检测还有一个容易被忽略的点是数据增强中的缩放。随机缩放增强如果缩放比例范围太大小目标可能被缩到几个像素反而成了噪声。建议把缩放范围控制在0.8到1.2之间不要用0.5到1.5这种大范围。6. 这一周论文里值得关注的趋势6.1 开放词汇检测正在从学术走向工程这一周开放词汇检测的论文里有两篇都在强调推理效率而不是单纯刷novel class的AP。这是一个很明显的信号这个方向开始从“能不能做”转向“能不能用”。其中一篇工作把词汇扩展模块做成了即插即用的形式不需要重新训练检测器只需要在推理时加载一个额外的词汇嵌入矩阵。这种设计对工程落地非常友好因为你可以随时更新词汇表而不用动检测模型。我自己的判断是开放词汇检测在未来半年到一年内会开始出现在实际产品里尤其是那些类别经常变化的场景比如电商商品检测、工业缺陷检测。这些场景的共同特点是类别长尾且动态变化传统闭集检测器需要频繁重新标注和训练成本很高。开放词汇检测如果能做到推理效率和闭集检测器接近那替代是必然的。6.2 移动端和小目标检测的融合趋势这一周有两篇工作同时涉及移动端和小目标这不是巧合。移动端设备无人机、手机、嵌入式盒子的算力有限但它们的应用场景又经常需要检测小目标比如无人机巡检、手机拍照里的远处物体。这个矛盾催生了一批专门针对移动端小目标的工作核心思路都是在有限算力下最大化小目标的特征利用率。我看到的一个趋势是这些工作越来越倾向于在特征融合阶段做文章而不是在骨干网络上下太大功夫。因为骨干网络的改进往往带来成倍的算力增加而特征融合的改进通常只增加几个百分点的FLOPs。对于移动端来说这个性价比高得多。如果你在做移动端检测我建议把精力放在特征融合和正样本分配上骨干网络用现成的轻量模型就够了。6.3 遥感与三维检测的数据瓶颈遥感和三维检测这一周的工作都有一个共同点它们在方法上的创新其实不算大但都在数据层面做了不少工作。遥感那篇做了标注质量加权三维那篇做了点云稠密化本质上都是在解决数据质量或数据密度的问题。这说明这两个方向目前的主要瓶颈不在模型结构而在数据。遥感图像的标注成本很高尤其是旋转框标注一个目标的时间是水平框的好几倍。三维点云的标注更贵nuScenes和Waymo的数据集标注成本都是千万美元级别的。在这种背景下如何用更少的标注或者更低质量的标注训练出可用的模型会是接下来一段时间的热点。半监督、自监督、弱监督在遥感和三维检测上的应用我觉得值得重点关注。6.4 从论文到落地的距离还有多远这一周精读的六篇论文里我觉得有两篇是可以在三个月内落地到实际项目里的另外四篇还需要更多的验证和工程化。判断一篇论文能不能快速落地我一般看三个指标一是它依赖的数据集是不是公开且容易获取的二是它的方法是不是模块化的能不能直接插到现有pipeline里三是它的推理效率是不是在可接受范围内。按这三个指标筛下来那篇小目标特征融合的工作和那篇开放词汇即插即用的工作是最有落地潜力的。前者只需要改FPN的融合权重后者只需要加一个词汇嵌入矩阵改动都很小。其他几篇要么依赖特定的数据格式要么推理效率还不够需要再等等。我在实际项目里用论文的方法时有一个原则先跑通再优化。不要一上来就把论文的所有模块都加上先加最核心的那个模块确认有效果了再考虑其他。很多时候论文里的辅助模块在你的场景下可能没用甚至起反作用。我见过有人把论文的所有trick都堆上去结果还不如基线就是因为没有逐个验证每个模块的实际贡献。最后分享一个我整理论文的小技巧我会给每篇精读的论文打一个“可复现性”分数从1到55表示代码完整、数据公开、我跑通过1表示只有论文没有代码。这个分数积累下来以后遇到类似问题的时候我可以快速找到那些高分的论文去参考而不是重新去搜。这个习惯坚持了两年多现在我的笔记库里已经有上百篇论文的复现记录了遇到新问题的时候翻一翻往往能找到思路。