【21】FCN网络训练及理解

本文介绍了一种基于PyTorch的全卷积网络(FCN)实现图像分割的方法。通过去除传统卷积网络中的全连接层并引入反卷积操作,FCN能够实现端到端的像素级图像分割。文中提供了详细的FCN网络模型代码及训练过程。

准备工作

代码地址:https://github.com/bat67/pytorch-FCN-easiest-demo

论文参考:全卷积网络 FCN 详解

                FCN详解与pytorch简单实现(附详细代码解读)

【1】FCN网络简介

FCN网络实现了端到端的图像分割,去除了卷积网络的全连接层,采用反卷积的方式,实现像素级别的分割,并加入skip方式,提升了分割性能。

【2】训练步骤

文件目录展示

【2.1】打开python -m visdom.server

 [2.1.1]激活深度学习环境(此处的环境名称为tensorflow,之前创建的):

activate tensorflow                

 [2.1.2]激活visdom

python -m visdom.server

 [2.1.3]结果展示

【2.2】打开python解释器,运行train.py

【3】训练结果展示

训练第1个epoch

train result

train label 

train loss function

train loss 

训练第99个epoch

train result

test result

【4】FCN网络模型代码

文件夹介绍

主要.py文件已经在下方展示代码,其中图中位置1为训练的图像,位置2为模型保存的路径

关于网络模型中的FCN32S表示特征图缩小到1/32,随后在变大到32倍。

关于网络模型中的FCN16S表示特征图缩小到1/16,随后在变大到16倍。

关于网络模型中的FCN8S表示特征图缩小到1/8,随后在变大到8倍。

性能:FCN8S>FCN16S>FCN32S

fcn.py

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


class FCN32s(nn.Module):

    def __init__(self, pretrained_net, n_class):
        super().__init__()
        self.n_class = n_class
        self.pretrained_net = pretrained_net
        self.relu    = nn.ReLU(inplace=True)
        self.deconv1 = nn.ConvTranspose2d(512, 512, kernel_size=3, stride=2, padding=1, dilation=1, output_padding=1)
        self.bn1     = nn.BatchNorm2d(512)
        self.deconv2 = nn.ConvTranspose2d(512, 256, kernel_size=3, stride=2, padding=1, dilation=1, output_padding=1)
        self.bn2     = nn.BatchNorm2d(256)
        self.deconv3 = nn.ConvTranspose2d(256, 128, kernel_size=3, stride=2, padding=1, dilation=1, output_padding=1)
        self.bn3     = nn.BatchNorm2d(128)
        self.deconv4 = nn.ConvTranspose2d(128, 64, kernel_size=3, stride=2, padding=1, dilation=1, output_padding=1)
        self.bn4     = nn.BatchNorm2d(64)
        self.deconv5 = nn.ConvTranspose2d(64, 32, kernel_size=3, stride=2, padding=1, dilation=1, output_padding=1)
        self.bn5     = nn.BatchNor
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值