134、CARAFE 内容感知上采样替换 YOLOv11 中 nn.Upsample:基于语义的插值核学习

📅 2026/7/6 20:10:50
134、CARAFE 内容感知上采样替换 YOLOv11 中 nn.Upsample:基于语义的插值核学习
134、CARAFE 内容感知上采样替换 YOLOv11 中 nn.Upsample:基于语义的插值核学习一个让我半夜爬起来改代码的bug去年做遥感小目标检测的时候,遇到一个让我血压飙升的问题。模型在COCO上跑得好好的,换到遥感数据集上,小目标召回率直接掉了8个点。排查了两天,最后定位到是上采样层的问题——YOLOv11默认的nn.Upsample用的是最近邻插值,对密集小目标场景简直就是灾难。当时我盯着特征图可视化,看到那些被粗暴放大的特征块,就像用马赛克拼图一样,心里那个憋屈。后来在YOLOv5的issue区看到有人提CARAFE,抱着试试看的心态改了一版,效果直接起飞。今天就把这个坑填上,顺便把完整的代码实现和消融实验数据甩出来。CARAFE到底在干什么先别急着看代码,理解原理才能改得顺手。nn.Upsample做的事情很简单:每个输出像素的值,由输入中最近的一个像素决定(最近邻),或者由周围四个像素加权平均决定(双线性)。问题是,这个权重是固定的,跟图像内容没关系。CARAFE的思路就骚了:它让网络自己学习每个位置的上采样核。具体来说,对于输入特征图上的每个点,CARAFE会预测一个k_up×k_up的卷积核,然后用这个核去加权组合输入特征。这意味着纹理区域会用更锐利的核,平滑区域会用更柔和的核,完全由语义内容驱动。核心流程分两步:核预测模块生成上采样核,特征重组模块用这个核做重组。核预测模块里有个压缩操作,把通道数降到C_mid,然后通过一个动态卷积层输