准备工作
代码地址:https://github.com/bat67/pytorch-FCN-easiest-demo
论文参考:全卷积网络 FCN 详解
【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

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

996

被折叠的 条评论
为什么被折叠?



