申请回电

支持

语义分割的技巧

2021 年春

高级算法工程师

作为惠普 Z 系列全球数据科学大使,Yuanhao Wu 的内容由惠普赞助,且向他提供了惠普产品。

 

上个月,我花时间参加了一场 Kaggle 竞赛:HuBMAP - 肾脏“黑客”。这项竞赛的目标是实现一种成功且稳健的肾小球 FTU 检测器。这是一个经典的二元语义分割问题。这是我第二次参加语义分割竞赛,我们的团队以第 43 名的成绩获得银牌。

 

虽然竞赛中出现了一个错误标注的样本,对公开排行榜造成了相当大的影响,也一度让参赛者摸不着头脑,但在展现语义分割的技巧上,这仍是一场精彩的比赛。

 

我想从 Lovasz-Hinge 损失开始说起。这个损失来自于论文《The Lovász Hinge: A Novel Convex Surrogate for Submodular Losses》,其强大的能力已经在许多竞赛中得到了证明。大家可以在知名的 segmentation_models.pytorch 库中找到出色的部署案例。虽然这个损失很强大,但在某些情况下可能很难训练。一个解决方法是将 Lovasz-Hinge 损失与其他损失相结合,如 Dice 损失或 Cross Entropy 损失。一些参赛者也可能使用两阶段式方法:先用 Dice 损失训练模型,然后转用 Lovasz-Hinge 损失。

 

至于模型部分,几乎每一位参赛者都使用了 Unet 及其变体。获胜者在其解决方案博文中提到,他结合使用了 hypercolumn 和注意力机制以及经典的 Unet 网络。我也尝试了这两个技巧,然而它们并没有明显改善我的结果。如下图所示,hypercolumn 的工作原理其实非常简单明了。它将不同层中大小调整后的特征图连接起来,以此提升模型的规模。

Attention Unet 来自论文《Attention U-Net:Learning Where to Look for the Pancreas》。如下图所示,作者在 Unet 的解码器部分加入了注意力门 (AG)。Kaggle 竞赛中常用的注意力机制与原论文中的设计略有不同。大家可以参阅获胜者的博文或 segmentation_models.pytorch 库。

顺便提一下,现行有几种常见的注意力结构,如 SCSE 和 CBAM。知名的参赛者 Bestfitting 说他更喜欢 CBAM。大家可以点击此处此处查看一些更详细的说明。

 

我还在这次竞赛中尝试了深度监督。大体上而言,深度监督可以计算不同规模的损失。它很容易部署,但在这次竞赛中它并没有为我提供多少性能增益。

 

这次竞赛的原始输入图像非常大。参赛者需要先将原始图像分割成数个小的包,然后训练和推理模型。为了避免信息损失,滑动步长要小于包的大小,这就会产生重叠区域。然而,我们发现模型对边界区域的处理能力还是比较弱。于是我们采用了加权的方法来重建输出。如下图所示,如果一个像素被预测了多次(绿色区域),那么当这个像素位于边界区域 (包 2) 时,我们会给预测分配较小的权重,而对于位于内部区域 (包 1) 的像素,我们则会给预测分配较大的权重。这个技巧给了我们很大的帮助。

训练语义分割需要大量的计算。我主要使用 U-Net 和 EfficientNet 作为编码器。利用 HP Z4 工作站中搭载的 24 GB RTX 6000 GPU,我可以用 640 x 640 图像和数量设为 16 的批次来训练模型。我的训练集包括大约 18,000 张图像,而一个 epoch 只需要 17 到 18 分钟。如果计算能力稍有欠缺,也可以尝试采样技巧。由于负样本远多于正样本,所以可以随机抽取一些负样本,而不是使用所有的样本。这不仅可以减少收敛的时间,还可以节省大量的训练时间。

 

还有一点非常重要,那就是一定要相信本地交叉验证的结果。一些参赛者试图过度拟合那些错误标注的公共测试样本,但最终获得的结果并不理想。我们只专心提高我们的 CV 分数,最后我们的排名跃升了 100 多位。遗憾的是,我们没来得及提交 Private Score 最高的结果。否则,金牌可能就是我们的了 :P

有疑问?
联系销售支持。 

不知道该怎么选
Z 系列工作站?

申请回电

 需要 Z 系列工作站方面的支持?

前往支持页面

免责声明

  1. 产品的Logo及位置可能与图片有所差异,不影响产品性能和功能,请以实物为准。

     

    产品图片仅供参考,因不同国家可能存在稍许差异,实际产品以销售为准。

     

    本文所载信息如有变更,恕不另行通知。惠普产品与服务的完整保修条款见此类产品和服务附带的正式保修声明。本文中的信息概不构成额外的保修条款。惠普对本文包含的技术或编辑方面的错误或遗漏概不负责。