语义分割 - SegNet / DeconvNet

这篇博客详细介绍了SegNet和DeconvNet两种深度学习语义分割模型。SegNet利用编码器-解码器结构,通过保存最大池化索引来实现反池化,减少信息损失。DeconvNet则采用VGG-16作为编码器,解码器结合反卷积和反池化,并加入全连接层。两者的实现细节在SegNet.py和DeconvNet.py中给出。
摘要由CSDN通过智能技术生成

论文精读

先验知识

编码器 - 解码器结构(Encoder - Decoder frame)

编码器结构:
由普通卷积层和下采样层将特征图尺寸缩小

解码器结构:
由普通卷积、上采样层和融合层组成,用来逐渐恢复空间维度,在尽可能减少信息损失的前提下完成同尺寸输入输出

随机丢弃层(Dropout)

当一个复杂的前馈神经网络被训练在小数据集上时,容易造成过拟合。Dropout通过忽略特征检测器来减少过拟合现象。

在这里插入图片描述

反池化(unpooling)

解码器中每一个最大池化层的索引都存储起来,用于之后在解码器中进行反池化操作。

  • 有助于保持高频信息的完整性
  • 对低分辨率的特征图进行反池化时,会忽略临近的信息

SegNet

本文创新点

  • SegNet 核心的训练引擎包括一个 encoder 网络和一个对称的 decoder 网络,即编码器 - 解码器结构
  • decoder 中直接利用与之对应的 encoder 阶段中最大池化时保留的 pooling index 来反池化

算法架构

在这里插入图片描述

DeconvNet

本文创新点

  • 编码部分使用 VGG-16 卷积层
  • 解码部分使用反卷积和反池化
  • 特殊方法:将 object proposal 送入训练后的网络,整幅图像是由 proposal 分割结果的组合,解决了物体太大或太小带来的分割问题

算法架构

DeconvNet 与 SegNet 的不同之处主要在于

  • 反池化与反卷积结合来形成 decoder
  • encoder 和 decoder 之间加入了全连接

在这里插入图片描述

算法实现

除了模型以外,其他部分与FCN无异

SegNet.py

导入包

import torch
import torchvision.models as models
from torch import nn

解码器中的卷积部分的定义

def decoder(input_channel, output_channel, num=3):
    if num == 3:
        decoder_body = nn.Sequential(
            nn.Conv2d(input_channel, input_channel, 3, padding=1),
            nn.Conv2d(input_channel, input_channel, 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值