1. 项目概述:为什么在Sentinel-2影像上做船舶检测,不是“换个数据源”那么简单
你打开Google Earth Engine,拖出一块长江口的Sentinel-2 Level-2A产品,10米分辨率的RGB真彩色图看着挺清晰——但放大到单个码头,你会发现集装箱船的轮廓是模糊的、边缘是发虚的,船体和泊位阴影混在一起,连船头朝向都难判断。这时候如果直接套用在WorldView或GF-2影像上训练好的YOLOv5模型,mAP可能直接掉到0.3以下。这不是模型不行,而是 Sentinel-2的成像机制、光谱特性、重访周期和典型应用场景,从根本上重构了船舶检测的技术路径 。我过去三年在港口智能调度、近海渔业监管和溢油应急响应三个方向落地过7个类似项目,最深的体会是:把“Mask R-CNN跑在Sentinel-2上”这句话拆开看,“Sentinel-2”不是背景板,而是整个技术方案的约束条件和设计起点。它决定了你必须放弃高精度几何定位的执念,转而追求“可验证的语义存在性”;它迫使你重新定义“小目标”——在10米分辨率下,长度不足30米的渔船(约3像素宽)就是检测瓶颈;它还让云、薄雾、太阳耀斑这些光学干扰不再是“偶尔出现的噪声”,而是每景影像里必须建模的常态变量。关键词“Ship detection”“Sentinel-2”“Mask R-CNN”背后,实际是一场对遥感物理层、深度学习表征层和业务逻辑层的三重对齐。这篇文章不讲Mask R-CNN原理复述,也不堆砌论文指标,只说我在宁波舟山港实测时怎么调参、为什么选特定波段组合、怎么用不到200张标注图让模型在多云场景下保持82%召回率,以及那些没写进论文但决定项目成败的细节:比如如何用NDWI阈值自动过滤90%的误检岸线、为什么训练时必须把“停泊密集区”和“开阔航道”分成两个子数据集采样、还有那个让推理速度提升3倍却几乎没人提的ROI Align缓存技巧。
2. 整体设计思路与方案取舍:为什么坚持用Mask R-CNN,而不是更火的YOLO或DETR
2.1 核心矛盾:业务需求倒逼模型选型
港口管理方第一次提需求时说的是:“我们要知道今天靠泊了多少艘船,每艘船在哪个泊位,有没有违规停靠。”注意,这里没有要求“厘米级定位”,但明确需要“单船实例分割”——因为两艘并排停靠的散货船,如果只给一个边界框,系统无法判断是1艘超大型船还是2艘中型船。这直接排除了所有仅输出bbox的检测器。而实例分割方案中,Mask R-CNN和SOLOv2、QueryInst等新模型对比,胜在三点:一是其RoIAlign层对形变鲁棒性极强,Sentinel-2影像因地形起伏导致的几何畸变(尤其在岛屿周边)不会让mask严重偏移;二是其双分支结构(分类+mask)天然支持“置信度可解释”——当某艘船mask置信度0.65但分类置信度0.92时,我们能判断这是“船体被云影遮挡但特征仍可识别”,而非模型胡猜;三是生态成熟,TensorFlow 1.x版本的Mask R-CNN实现(matterport版)在国产昇腾910芯片上经华为CANN优化后,单卡吞吐达12.4 FPS,比PyTorch版快1.8倍,这对需要实时处理每日新增200景影像的省级海事平台至关重要。我试过用YOLOv8-seg微调,虽然训练快,但在舟山群岛多山地形下,同一艘船在不同坡度区域的mask IoU波动达±17%,而Mask R-CNN稳定在±4%以内。
2.2 Sentinel-2数据特性驱动的预处理重构
Sentinel-2的13个波段不是均匀分布的,B04(红)、B03(绿)、B02(蓝)是10米,B08(近红外)也是10米,但B05-B07、B8A、B11-B12全是20米。直接插值到10米会引入高频噪声,尤其B11(短波红外)对船舶金属表面反射敏感,却是20米。我们的解法是: 构建双流输入 ——主干网络用B02/B03/B04/B08四波段堆叠(10米),专门提取形状和纹理;辅助分支用B11/B12(20米)经双线性插值后送入轻量CNN(3层卷积+1层注意力),输出空间权重图,再与主干特征图逐点相乘。这个设计源于一个物理事实:船舶在SWIR波段的反射率比海水高3-5倍,但空间细节差,所以它不参与定位,只负责“告诉主干网络哪里更可能是船”。实测显示,该结构使小船(<40米)检测F1-score从0.61提升至0.73,且未增加推理延迟——因为辅助分支参数量仅为主干的2.3%。
2.3 训练策略的底层逻辑:为什么不用ImageNet预训练
主流做法是加载COCO预训练权重,但Sentinel-2影像的统计特性与自然图像天差地别:其像素值范围是0-10000(16位),而COCO是0-255;其色彩分布集中在蓝绿灰(水体主导),几乎没有红色植被大块区域;更重要的是,船舶在影像中占比通常<0.05%,而COCO中目标平均占比>15%。直接迁移会导致backbone早期层梯度爆炸。我们采用 分阶段冻结训练 :第一阶段,仅训练RPN网络(Region Proposal Network),用自建的1200张Sentinel-2船舶图生成anchors(k-means聚类得5种尺寸:16×16, 24×24, 32×32, 48×48, 64×64像素),此时backbone完全冻结;第二阶段,解冻backbone最后两个stage,联合训练RPN和head;第三阶段,全网络微调。这个流程让收敛稳定性提升40%,且避免了传统方法中常见的“anchor漂移”问题——即模型学会用极大anchor覆盖整片港区来骗loss。


1867

被折叠的 条评论
为什么被折叠?



