033、语义分割边缘粗糙、小目标漏检?U-Net/DeepLab 改进与后处理优化方案
一、从一次真实调试说起
上个月帮一个做遥感图像分割的团队调模型,他们用的是U-Net,跑出来的结果让我血压直接拉满——建筑物边缘像狗啃的,小汽车几乎全漏检,只有大块农田分割得还行。团队负责人一脸无辜:“我们加了数据增强,学习率也调了,怎么还是这样?”
我打开他们的预测结果,放大一看,边缘像素点要么被错误分类成背景,要么就是那种“半死不活”的模糊概率值。小目标区域更是惨不忍睹,一个停车场里十几辆车,模型只认出来两辆,还都是轮廓残缺的。
这种问题太典型了。语义分割的边缘粗糙和小目标漏检,本质上是两个不同层面的问题,但经常同时出现。边缘粗糙是空间信息丢失,小目标漏检是特征尺度不匹配。别指望一个trick能同时解决,得分开下药。
二、边缘粗糙:别只盯着损失函数
很多人一看到边缘粗糙,第一反应就是换损失函数,上Dice Loss、Focal Loss。但说实话,损失函数能做的有限,它只是让模型在训练时更关注难样本,如果网络结构本身就没能力捕捉边缘细节,换啥损失都白搭。
2.1 U-Net的跳跃连接,你真的用对了吗?
U-Net的跳跃连接本来就是为了保留空间信息设计的,但很多人实现的时候偷懒,直接把encoder的特征图拼接到decoder。这里有个坑——encoder的特征图经过多次下采样,分辨率已经降低了,直接拼接会导致decoder学到的边缘信息是“模糊版”的。
<