
做遥感算法这几年一个很有意思的现象是行业里聊“遥感大模型”和“深度学习”的频率越来越高但真去把模型结构讲清楚的人不多。很多人是拿现成代码跑通一遍结果换到自己的卫星影像上效果就打折卡在最基础的选型问题上到底用CNN还是Vision Transformer还是两个混着用这个问题不是换一个库就能解决的它本质上是“你希望网络怎么理解一张遥感图”。这篇文章我把从CNN到Vision Transformer再到混合架构这条演化路径完整梳理一遍结合遥感任务的真实特点说清楚每一步为什么发生、选型时看哪些指标、落地时最容易踩哪些坑给正在做地物分类、目标检测、变化检测或语义分割的同行一个可以直接参考的路线图。1. 从 CNN 到 ViT遥感大模型背后的深度学习主线1.1 为什么遥感算法圈突然都在聊大模型先说一个我自己的观察。大概从2021年ViT在ImageNet上跑出和CNN相当甚至更好的结果之后遥感圈就开始躁动了。原因并不复杂遥感数据实在太适合“大模型”这套玩法了。每天新增的卫星影像、无人机影像、航空影像数量都是天文数字光谱通道多、空间尺度大、地物类型杂过去小模型在单任务上精雕细琢的成本越来越高。遥感大模型本质上做的事情是用大规模无标注遥感影像先做自监督预训练或者用海量多模态数据对齐图像和文本语义让模型具备遥感领域的通用感知能力。下游任务只需要微调就能在很少标注量下达到以前需要大量人工标注才能实现的效果。这和NLP里BERT、GPT的路子是一个逻辑只是输入从“词汇序列”变成“图像patch序列”而已落到工程上就是深度学习网络结构的选型和训练范式的迁移。真正让讨论热烈起来的是Vision Transformer这套架构的出现。它让遥感算法第一次可以不依赖卷积的局部归纳偏置直接在全局范围建模像素关系。过去CNN统治时代大家调ResNet、调UNet都是在卷积框架里做文章现在ViT把整幅影像当成一串patch来学习网络终于能“看到”全局了。但问题也随之而来全局注意力计算量太大、小样本下容易过拟合、高分辨率遥感影像切patch后语义不连续……这些坑恰好催生了CNN和Transformer混合架构。1.2 这轮演进的本质建模假设和任务范围的改变看任何技术演进千万别只看网络层数或者涨点核心要看它的“建模假设”变了什么。CNN的假设是局部性图像里邻近像素相关性最强所以用一个局部卷积核在空间上滑动天然具备平移等变性。这个假设在自然影像里成立在遥感影像里也成立而且成立得非常朴素——一条马路、一栋建筑、一片农田确实都是局部像素聚合出来的。但这个假设扛不住更复杂的遥感任务。比如变化检测同一地点两个时相的影像要对比模型必须建立跨区域的上下文关系比如超大尺度地物分类一片完整森林可能跨上千个像素局部感知根本拼不出全局格局。Transformer的假设则是序列里任何两个位置都可能有强关联特征关系由数据自己学习。这套假设在 NLP 里验证过搬到图像里就是ViT搬到遥感里天然适合搞全局语义。所以这轮演进的本质是把深度学习模型的感知范围从“看得见邻域”扩展到“看得见全局”同时把任务的边界从单张影像上的局部识别扩展到时序、跨模态、多尺度的联合理解。混合架构的出现不是简单的“CNNTransformer拼在一起”而是把“局部优先”和“全局优先”两种建模假设按遥感任务的实际需求重新组织起来。2. CNN 的十年统治局部卷积如何扛起遥感任务2.1 卷积天然匹配遥感影像的几个理由CNN能在遥感领域统治十几年核心原因是它和遥感影像的底层属性高度匹配。遥感影像的第一个属性是空间连续性地物是成片出现的道路连着道路水体挨着水体一个像素和它周围几十个像素在类别上通常高度一致。卷积核在局部滑动相当于反复确认“我周边长什么样”这正好对应地物的空间自相关性。第二个属性是光谱局部性。多光谱、高光谱影像虽然通道多但相邻波段之间相关性极强卷积在通道维度做加权组合本质上就是在做光谱特征提取和传统遥感里的波段运算思路一脉相承。第三个属性是计算效率。遥感影像是出了名的大一景亚米级影像动辄上万像素CNN用共享权重和局部连接把计算量控制在可接受范围内这在十年前的GPU条件下是唯一可行的选择。我早年做土地覆盖分类最常用的骨干就是ResNet50和UNet。训练时把影像切成512×512的patchbatch size开8一块1080Ti就能跑。那时候如果有人让我上Transformer光显存就爆了。这不是说Transformer不好而是硬件约束决定了CNN是当时唯一能落地的方案。现在GPU强了大家才敢玩更大的架构。2.2 但卷积的“短视”越来越明显CNN的优势是局部感知短板也出在局部感知。它的问题在遥感里会被放大得很明显一张标准512×512的影像经过5次下采样后特征图只有16×16理论上第5层卷积的感受野只有几十像素根本覆盖不了“农田周围是林地、林地下游是水体”这种跨区域依赖。为了补这个问题业内想了各种办法。空洞卷积Dilated Convolution可以在不增加参数的情况下扩大感受野DeepLab系列就是靠ASPP模块在不同空洞率下并行采样多尺度聚合上下文信息。FPN特征金字塔则是从不同层引出特征做融合让高层语义信息和底层空间细节互补。但这些办法都是“打补丁”并没有真正改变CNN局部连接的底层结构。还有一个更隐蔽的短板遥感影像的目标尺度差异极大。一棵独立的树可能只占几十个像素一片城市建成区可能占几十万像素。CNN虽然有层级结构天然能形成多尺度金字塔但局部卷积在建模“区域和区域之间关系”这件事上效率很低。比如判断一个区域是不是工业区需要同时看道路密度、建筑轮廓、周边环境这种判断更像“全局投票”而不像“局部扫描”CNN做起来非常吃力。2.3 遥感里经典 CNN 架构的选型心得真做项目的话CNN里几个经典结构的适用场景我可以直接给结论。UNet和它的变体UNet、DeepLabV3是做语义分割的常青树尤其是UNet编解码结构加跳连接对小样本和边缘细节非常友好在遥感建筑物提取、道路提取任务里至今还在用上限不低跑起来也稳。ResNet系列更适合做特征提取骨干接检测头或者分割头都能用。ResNet50在速度和精度之间平衡最好ResNet101在数据量大、细节要求高的任务上会更稳。但要注意ResNet输出的最后一层特征图空间分辨率很低密集预测任务里必须配合FPN或ASPP把头部的空间信息补回来。还有一个容易踩的坑遥感影像通道数和自然影像不一样。RGB图像是3通道但多光谱可能是8通道高光谱甚至上百通道。很多现成CNN骨干网络第一层卷积是按3通道设计的如果直接换成多光谱输入要么修改第一层结构要么把波段压缩到3通道再输入。前者损失预训练权重后者损失光谱信息。我的经验是多光谱任务优先改第一层随机初始化这一层参数后面层加载预训练权重然后整体微调效果比压缩波段稳定得多。3. Vision Transformer把全局上下文带进遥感3.1 ViT 也好Swin 也好核心都在做一件事ViT的原理听起来很反直觉它把一张图切成固定大小的patch比如16×16像素展平成序列然后几乎完全按照Transformer encoder的方式处理。每个patch经过线性投影变成token加上位置编码后送入多头自注意力层。自注意力机制会计算任意两个patch之间的相关性也就是任意两个图像区域之间的关系然后按相关性加权聚合特征。这个过程像什么像你读一篇文章的时候不是只盯着前一个字和后一个字而是把整段话同时看在眼里遇到“它”这个代词你会自动去关联前面提到的那个主体。ViT就是把整幅影像当成一篇文章所有patch都在互相读对方最后每个token携带的信息都不只有自己那一小块而是包含全图上下文。Swin Transformer在这个基础上做了关键改良它把自注意力限制在窗口内部计算默认窗口是7×7计算复杂度从和图像尺寸平方相关变成和窗口大小相关大幅降低了计算量。同时Swin引入了移动窗口机制每层把窗口偏移一次让信息可以跨窗口流动还通过逐步合并patch形成金字塔结构方便像FPN一样做多尺度特征融合。所以ViT适合做分类或全局理解Swin这类层级Transformer更适合做分割、检测这类密集预测。3.2 全局建模放遥感里到底解决了什么遥感任务里Transformer的表现我最关注的其实是它在三类问题上的提升。第一类是大范围依赖目标。比如检测一片采用大型灌溉系统的农田只有把整个灌溉网络的空间关系看清才能判断哪块地属于这个系统这种情况CNN靠局部卷积根本搞不定Transformer一次就能把全图关系建模出来。第二类是旋转不变性和方向信息。遥感目标检测里大量用旋转框因为飞机、轮船、建筑物在俯视图里的方向是任意的。CNN的卷积核方向固定对旋转变化天然不敏感需要靠数据增强硬扛。Transformer在计算自注意力时对patch的空间排列能学习出方向关系虽然不能完全解决旋转问题但对“全局结构关系”的捕捉能力明显更强配合旋转框损失函数效果会好不少。第三类是时序和多模态。变化检测需要对比两个时相的影像Transformer能把前后时相的patch序列放在一起建模直接学习“哪里变了、怎么变的”。跨模态遥感大模型如GeoChat、RemoteCLIP用Transformer把图像和文本对齐你输入一张影像模型能生成一句自然语言描述这在以前CNN时代是没有的。它不是简单分类或分割而是真正让模型“理解”了遥感影像内容。3.3 绕不开的代价数据、算力、位置编码Transformer的优点很突出代价也非常现实。一是数据量需求大增。ViT没有CNN那种局部归纳偏置所有规律都要从数据里学。在小型遥感数据集上直接训练ViT效果通常不如ResNet因为模型太容易过拟合训练集里的噪声。解决思路是先用大规模数据预训练再在目标数据集上微调或者用MAE这类自监督方法先在遥感影像上做掩码重建学到通用特征再往下游任务迁移。二是算力消耗成倍上涨。ViT对输入序列长度极度敏感。一张512×512的影像按16×16的patch切序列长度是1024自注意力的计算量是1024的平方级别还能接受。如果按8×8切序列长度变成4096计算量翻16倍很多GPU直接跑不动。遥感影像又普遍比自然影像大很多所以直接用ViT版本必须做切块、降分辨率或采用窗口注意力。三是位置编码的处理。ViT的位置编码通常是按固定尺寸训练出来的比如在224×224上训练的ViTpatch后位置编码对应196个位置。你把它搬到512×512的遥感影像上patch数变成1024原来的位置编码不够用。这就必须对位置编码做插值插值后模型需要重新适配最好在目标分辨率上做一段较短的微调来过渡。我遇到不少项目直接加载预训练模型扔到高分辨率遥感图上结果精度反而下降多数就是位置编码没有重采样和适配。4. 混合架构卷积与注意力不是替代关系是互补4.1 混合架构有哪些常见搭法当大家发现CNN和Transformer各有各的强项时第一反应就是“两个一起用”。混合架构的搭法大概分成几类。第一类是串联式早期几层用CNN提取局部特征后几层用Transformer建模全局关系CoAtNet就是这类代表它的设计思路很简单浅层特征图大用卷积划算深层特征图小用注意力划算。这个逻辑对遥感特别友好因为遥感影像浅层就需要保留高分辨率细节。第二类是并联式Transformer分支和CNN分支同时处理输入最后融合两个分支的特征。比如MobileViT在每一层里都有Local和Global两条路径局部路径负责细节全局路径负责语义两个特征图拼接后输出。这种结构在小模型上很有优势参数量和计算量都能压下来。第三类是在Transformer内部引入卷积操作。典型的是Swin Transformer里的相对位置编码本质上是把卷积的权重共享思路融进注意力机制还有HGFormer这类“拓扑感知”的ViT它结合超图学习来建模非局部区域间的复杂关系在遥感场景里可以理解为patch之间不止两两相关可能存在多个patch共享某一类地物属性需要更高阶的关系建模。另外还有一条路线是把大kernel卷积直接做成全局建模工具。RepLKNet、InternImage这类结构用31×31甚至更大的卷积核让CNN在足够大的感受野下模拟Transformer的效果不需要自注意力也能保住全局感知能力。这类设计在遥感上非常好用因为这既保留CNN对局部纹理的敏感度又降低了attention机制带来的显存压力。4.2 遥感大模型里值得参考的混合设计遥感大模型和通用视觉大模型有个不一样的地方输入分辨率更高、图像尺寸更大、必须兼顾局部精细结构和全局语义。所以现在遥感领域出圈的大模型几乎都是混合架构或者基于Transformer做局部适配很少有一个模型从头到尾全是全局自注意力的。以分割大模型为例SAMSegment Anything Model的核心是一个深度Transformer编码器但它在特征提取时采用了多层级、混合卷积与注意力的设计同时引入位置编码和提示编码才能处理任意尺寸的输入图像。遥感圈里大量研究拿SAM做零样本分割或者提供伪标签再用CNN微调效果比纯用SAM直接推理更稳定原因就是SAM的全局语义能力强但局部边界的精细度不够需要CNN来补足。自监督预训练路线的ScaleMAE、SatMAE这类模型也普遍采用卷积stem加Transformer的混合结构。卷积stem负责把高分辨率输入降采样到可控的patch数量Transformer主体负责隐含表示学习。从这个架构设计能看出来混合不是简单堆模块而是让不同结构各管一段图像入口用CNN降维中间层用Transformer做关系建模头部再回到卷积或者上采样做密集预测。4.3 我自己混合配置时踩过的坑混合架构听起来很美好实际调起来有它自己的脾气。我最初在遥感建筑物提取任务里试过把ResNet编码器的后两层换成Swin Transformer想法是浅层保持高分辨率细节深层做全局推理。结果训练时loss下降非常快但验证集mIoU一直上不去。后来排查发现是归一化层的问题CNN沿用的是BatchNormTransformer习惯用LayerNorm混在一起时统计口径不一致训练初期特征分布就抖得厉害。踩过一次之后我把混合模型的每一阶段都按“卷积块主打特征提取、Transformer块主打关系建模”重新梳理并且在阶段之间加了一次归一化层来过渡情况才稳定下来。另外一个坑是多尺度推理。遥感影像天然需要多尺度信息但Transformer全局注意力的尺度敏感性和CNN不一样同样的FPN结构在纯CNN下有效在混合架构下需要重新调各层特征融合权重否则高层全局特征会淹没底层的局部细节导致小目标全部漏检。混合架构还有个常见误区是层数比例。不少人觉得Transformer应该多一点才有“大模型感”其实对于遥感这种高密度、纹理复杂的数据卷积层的比例最好不要低于三成而且patch embedding层最好保持卷积实现否则模型会把影像里细碎的地物噪声当成有意义的结构来建模白白浪费计算量。这个结论是我在一组对比实验里得出的同样的参数量下卷积占比从一成提到三成语义分割mIoU能稳定提升一两个点在建筑物和道路这类线性地物上更明显。5. 遥感大模型落地的实操经验与问题排查5.1 常见进阶路线骨干换 vs 全量微调 vs 冻结微调遥感大模型不是拿来直接就能用的落地基本分三条路线。第一条是换骨干把原来模型里的ResNet编码器换成ViT、Swin或者混合结构保持下游任务头不变训练时全部参数都更新。这条路改造最大适用于数据量充足、任务复杂、老模型已经明显顶不上的情况。优点是上限高缺点是需要重新调参、重新评估工程量大。第二条是全量微调。用遥感领域预训练好的大模型权重加载到自己的模型上整个网络继续在目标数据上训练。这是目前性价比最高的路线因为遥感预训练权重已经在海量影像上学过通用的光谱、空间结构全量微调能让模型在保持泛化能力的同时适配你的具体任务。推荐把backbone的学习率设低一点比如1e-5到3e-5把任务头的学习率设高一些比如1e-4这样迁移稳定得多。第三条是冻结微调。把骨干完全冻结只训练后面的分类头或分割头。适用场景非常明确标注数据极少、或者任务只是做简单分类、且遥感预训练模型提取的特征已经足够。冻结微调的好处是不容易过拟合训练速度快显存占用低。代价是精度上限明显受限如果你发现冻结微调后效果始终不达标就要考虑解冻最后几层再训练。5.2 遥感任务里最容易被忽视的几个细节第一个细节是影像的预处理统计量和预训练模型不一致。很多预训练大模型在ImageNet上训练时图像会做标准化均值和方差都是自然影像的统计值。遥感影像的光谱分布和自然影像完全不同尤其多光谱和红外波段的数值范围差异很大。如果直接用ImageNet的均值和方差去标准化遥感数据模型看到的数据分布和预训练时完全对不上精度会明显下降。我一般会用目标数据集重新计算各波段均值和方差或者做逐影像归一化再做微调。第二个细节是标签噪声。遥感样本标注比自然影像更依赖专家经验不同标注员对“混合地物”的判定标准经常不一致比如林地和草地的过渡带有人标成林地有人标成草地。这种标签噪声在小样本情况下比自然影像危害更大因为Transformer很容易记住错误边界。我的做法是在训练时设置“忽略类”把不确定区域直接忽略掉比强行学习更稳。第三个细节是推理时的切块策略。遥感影像太大推理时必须切成patch逐块预测。如果直接切块同一地物被切到两块里边界两边特征不一致预测结果容易出现“拼缝”。我的经验是采用滑动窗口加重叠区重叠比例大约25%到50%对重叠区域做平均或投票。如果模型是Transformer重叠幅度要比CNN更大一些因为patch尺寸可能跨越语义边界重叠不够边界伪影很严重。5.3 问题排查速查表实践中最常见的几个问题我整理成一个速查表方便照着排查。症状可能原因解决路径训练loss正常下降但验证集指标上不去过拟合小样本预训练权重和任务特征分布不一致加大数据增强降低学习率缩短微调轮数检查是否用了遥感预训练权重模型推理速度太慢、显存不够patch数量过多或序列太长改用窗口注意力加大patch尺寸降低输入分辨率或用混合架构分割结果出现明显拼缝或孤点推理切块沒有重叠或位置编码在变换分辨率后未重新适配加重叠滑动窗口对重叠区平均位置编码插值后微调若干轮多光谱/高光谱任务效果差用3通道预训练模型直接处理多波段数据修改第一层卷积通道随机初始化该层并整体微调大目标准确、小目标全部漏掉模型过度关注全局语义局部细节丢失增加卷积层比例调整FPN融合权重提高到高分辨率层特征变化检测两时相结果不一致两个时相影像的光照、大气条件差异被模型当成地物变化先做辐射归一化输入差分特征或堆叠特征再训练判断层记住一个总原则先排除数据层面的问题再考虑改模型结构。我见过太多同行一上来就换网络结果最后发现是数据归一化没做好。深度学习圈子里有一种“模型焦虑”总觉得换个更强的结构就能涨点实际项目里数据质量、预处理和训练细节往往比架构选择更致命。6. 最后分享一点个人体会从 CNN 到 Vision Transformer 再到混合架构我自己的体会是结构演进确实带来了能力上限的提升但它不自动等于你项目里效果更好。遥感大模型是一个系统工程模型架构只是其中的一环它和预训练数据、微调策略、推理方案、数据质量这些环节紧密耦合。做遥感算法这几年我最明显的感受是能落地的大模型往往是两种模型的折中和融合而不是某一种的“纯粹胜利”。如果让我给一条最实在的建议那就是不要迷信某个网络结构名字。CNN、ViT、混合架构它们只是工具箱里不同的工具。遥感影像的特点决定了很多任务仍然需要CNN式的局部细节抽取能力而Transformer带来的全局感知让复杂地物关系第一次有了解法。真正靠谱的做法是把手头任务的数据规模、目标尺度、计算条件摸清楚再决定用哪个结构、怎么混合、怎么训练。先在已有项目上跑一版CNN基线再用预训练ViT或混合架构替换骨干网络对比多组实验后选择更优方案。最后再分享一个小技巧如果你准备尝试ViT或混合架构别直接从最大模型开始先用一个小版本比如Swin-Tiny规模跑通流程验证数据预处理和训练管线的正确性再逐步放大模型。模型越大对数据的“隐性记忆”能力越强你很难分清效果提升是来自结构优势还是单纯过拟合。小模型先验证、大模型再冲指标这条路我走了很多项目都成立。弄清楚每个结构解决什么问题、在什么条件下发挥作用你才能真正用好遥感大模型这波技术红利。