【论文阅读】Structured Knowledge Distillation for Semantic Segmentation

本文介绍了一种利用知识蒸馏改进紧凑型语义分割网络的方法,通过设计Pixel-wise、Pair-wise和Holistic三种蒸馏损失,有效提高了轻量级网络的预测精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

这篇论文来自CVPR2019 Oral。

  • 论文的出发点:语义分割的模型往往很难兼顾速度与精度,也因此语义分割的网络分为两类,论文中描述为 cumbersome segmentation network与 compact segmentation network,简单地说一个注重精度,一个注重速度。这篇论文利用知识蒸馏来提高compact segmentation network的精度。
  • 论文的创新点(核心):知识蒸馏不是什么新鲜的东西,论文的核心主要是几个loss的设计,最后一个Discriminator的loss也是亮点,然后就是用复杂网络去teach轻量级网络来提高Prediction的精度,这一点让人(至少我是这样的)眼前一亮。
  • 论文中不明白的地方:在loss函数中有两个点不是很清楚概念, Wasserstein distance和 Kullback-Leibler divergence,两个名词听说过,有时间再看一下。

论文内容

整体的网路如下图所示
在这里插入图片描述

  • 结构很明朗,下面看一些几个loss的设计:
    Pixel-wise distillation:两个网络输出feature-map之间的像素之间的差距,用Kullback-Leibler divergence来度量在这里插入图片描述
    Pair-wise distillation:这个loss好像是来自其他论文的启发,直接拿来用了,看公式定义不难理解在这里插入图片描述
    Holistic distillation:这个loss采用了典型的GAN的处理方式,将两个网络的输出分别与原图concatenate,以一种 conditional generative adversarial learning方式进行训练。其中把复杂网络的输出视为real sample,把简单网络的输出视为fake sample。loss公式如下
    在这里插入图片描述

  • 训练过程
    Train the discriminator:训练鉴别器,就是对lhol_{ho}lho做一个minimize,简单明了。
    Train the compact segmentation network:训练分割网络时就是对如下的目标函数做一个minimize.
    在这里插入图片描述

### CVPR Conference Publications on Semantic Segmentation #### HyperSeg: Patch-Wise Hypernetwork for Real-Time Semantic Segmentation HyperSeg 是一种基于超网络的方法,旨在通过分片处理实现高效的实时语义分割。该方法利用轻量级的超网络来动态生成卷积核,从而减少计算开销并提高推理速度[^1]。 #### Laplacian Reconstruction and Refinement for Semantic Segmentation 此研究提出了拉普拉斯重建和细化技术,用于提升语义分割模型的边界精度。通过对预测掩码应用多尺度拉普拉斯算子,可以有效增强边缘区域的表现力,并改善最终分割结果的质量[^2]。 #### Show, Match and Segment: Joint Learning of Semantic Matching and Object Co-segmentation 这篇论文探讨了联合学习框架下的语义匹配与对象共分割问题。作者设计了一种新颖的对比损失函数,能够同时促进特征表示的一致性和区分度,进而显著提高了跨图像实例分割的效果[^3]。 #### Structured Knowledge Distillation for Semantic Segmentation 这项工作中引入了结构化知识蒸馏策略,专注于从复杂教师模型向简单学生模型传递丰富的上下文信息。具体而言,它包含了像素级别、成对关系以及整体分布三个层面的知识迁移机制,共同作用于性能优化过程中[^4]。 ```python import torch.nn as nn class SimpleSegmentationModel(nn.Module): def __init__(self, num_classes=21): super(SimpleSegmentationModel, self).__init__() self.conv = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False) self.fc = nn.Linear(64 * 8 * 8, num_classes) def forward(self, x): x = self.conv(x) x = x.view(-1, 64 * 8 * 8) x = self.fc(x) return x ``` 上述代码展示了一个简单的语义分割模型架构示例,尽管其功能远不及现代先进算法强大,但它可以帮助理解基本原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值