前面六篇把通用分割、医学分割都聊了一遍,今天咱们聊聊两个"大场景"——遥感分割和自动驾驶分割。
这两个场景放在一起聊,是因为它们面临的工程挑战惊人地相似:图像大、目标小、实时性要求高、模型要跑在边缘设备上。但它们的"难法"又不太一样——一个是"图大到你显存装不下",一个是"慢了就会出人命"。
遥感分割——你见过10000x10000的图像吗?
先聊遥感。卫星拍下来的一景影像,分辨率通常是几千到几万像素。你拿一个标准的224x224的分类网络来处理?连一张图的万分之一都覆盖不了。
遥感分割的第一大问题是"大图推理"。你不能把整张图塞进模型,显存会爆。必须用滑窗推理(Sliding Window)——把大图切成小块(比如512x512),每块分别送进模型,然后把所有块的结果拼接起来。
滑窗推理说起来简单,做起来全是细节:
窗口尺寸怎么选?太小了,每个窗口里的上下文不够,分割精度下降;太大了,显存放不下。512x512是个常见的折中尺寸。
步长怎么设?步长等于窗口尺寸(不重叠),速度快但窗口边界处的分割结果不连续;步长小于窗口尺寸(有重叠),精度提高了但计算量成倍增加。
边缘效应怎么处理?窗口边缘的像素在分割时缺少外部的上下文信息,容易分错。通常的解决方法是忽略窗口边缘一定宽度的像素(比如忽略边缘8个像素),只取中间区域的预测结果。这样保证了连续性,但降低了有效覆盖面积。
怎么把小块拼接起来?如果使用了重叠区域,重叠区域的像素有多个预测结果,取平均还是取投票?常见做法是"中心权重加权"——离窗口中心越近的像素权重越大,因为中心区域受边缘效应影响最小。
遥感分割还有一个麻烦事儿——旋转不变性。图像上的房子、道路、农田是各种朝向的,如果你的模型只做过水平翻转的数据增强,遇到旋转45度的建筑群可能就认不出来了。所以遥感分割里"旋转增强"是标配,甚至有些工作专门设计了"旋转等变卷积"来让模型对旋转不敏感。
自动驾驶分割——慢了真会出人命
再聊聊自动驾驶。这可能是分割领域"容错率最低"的应用——你分割错了路面上的一块区域,车可能就压到路肩或者撞上障碍物。
自动驾驶分割的核心挑战是"实时性与精度的平衡"。
一辆车在城市道路上行驶,摄像头以30-60帧每秒的速度采集图像。从图像拍到到分割结果出来,留给你的时间窗口只有30-50毫秒——超过了这个时间,控制模块就来不及做决策了。
在30毫秒的约束下,你能做的计算量极其有限。这就是为什么自动驾驶里轻量级模型(比如ENet、ERFNet、SwiftNet)比那些在Cityscapes上刷榜的重型模型更受欢迎。你精度再高,跑不到实时就是没用。
自动驾驶分割的另一个难点是"小目标检测"。道路远处的行人、交通标志、自行车,在图像里可能只有十几个像素大。这些"小目标"对行车安全至关重要,但分割模型在低分辨率特征图上很容易漏掉它们。
解决小目标的方法跟其他领域类似——多尺度特征融合、高分辨率输入、专门的小目标数据增强。但每一个方案都要在"实时性"的约束下做权衡:高分辨率输入意味着更大的计算量,多尺度融合意味着更多的网络分支。
"域适应"——在自动驾驶里逃不掉的宿命
自动驾驶分割有一个极为头疼的问题:训练数据(公开数据集)和部署环境(真实道路)之间的"域差异"。
你在Cityscapes上训好的模型,直接拿到德国的真实道路上跑,表现尚可。但拿到美国、中国、印度去用?光照不同、道路风格不同、车辆类型不同、路标设计不同,精度能掉10-15个百分点。
解决这个问题的方向是"域适应(Domain Adaptation)"。无监督域适应的思路是:源域(有标签的Cityscapes)训练一个模型,目标域(无标签的真实道路数据)上只做推理,通过对抗训练或者自训练的方式让模型适应目标域的分布。这方法在学术界发了不少论文,但工业界用得不多——因为训练太不稳定,而且无法保证在所有场景下都能适应。
工业界更务实的做法是"数据采集+人工标注"——你要在哪个国家/城市部署,就在当地采集大量真实道路数据,然后做人工标注,用这些数据来训练或微调模型。虽然贵(标注一张自动驾驶的街景图要几百块钱),但这是唯一能保证精度的方式。
轻量化架构——在边缘设备上活下去
遥感和自动驾驶有一个共同的工程约束——模型要跑在边缘设备上。
无人机上不可能装一块A100,自动驾驶的车载计算平台(比如NVIDIA Drive Orin)虽然算力比普通嵌入式设备强,但相比服务器还是差了十倍。你必须在"精度"和"速度"之间做出取舍。
轻量化分割模型的设计思路通常是:
用轻量级backbone(MobileNet、EfficientNet-Lite、ShuffleNet)
减少解码器的层数和通道数
用深度可分离卷积替代普通卷积
在关键层做剪枝和量化
用神经架构搜索(NAS)自动寻找"精度-速度"的帕累托最优结构
我见过最极端的案例是在无人机上进行森林火灾检测。那台无人机的边缘盒子只有1.5TOPS的算力,我们最后把模型压缩到了500KB的参数量,推理一帧要80毫秒——虽然精度比原始的DeepLabv3+掉了8个点,但在那种极端算力约束下,已经是"最优解"了。
一个共同的"痛"——标注成本
遥感和自动驾驶还有一个共同的、说出来想哭的问题——标注太贵了。
遥感图像分割要标建筑物、道路、水体、植被、农田……一张卫星图覆盖几平方公里,标注员要像绣花一样把每栋房子、每条路的边界描出来。标一张图的工作量相当于标几百张自然图像。
自动驾驶更不用说了——Cityscapes的一张精细标注图,标注员要花几个小时来描轮廓。标一整套Cityscapes的数据集(几千张图),成本在上百万。
这就是为什么弱监督分割、无监督域适应、自监督预训练在遥感和自动驾驶领域特别受关注——大家都在想方设法降低对"像素级标注"的依赖。
我的感受:这个领域正在从"炫技"走向"务实"
五年前,大家还在拼命刷Cityscapes和PASCAL VOC的精度榜单,谁的mIoU高谁就是老大。但最近几年,风向明显变了——大家更关心"在给定算力约束下的精度"、"在真实场景下的泛化能力"、"在有限标注下的学习效率"。
遥感和自动驾驶分割已经从"实验室竞技"进入了"工程化落地"的阶段。在这个阶段,一个能在Jetson上稳定跑30FPS、精度75%的模型,比一个在A100上跑2FPS、精度85%的模型更有价值。这个道理,做工程的人懂,做学术的人未必懂。