Fully Convolutional Networks for Semantic Segmentation

时间:2020-08-13 19:31:17 来源:

【摘要】 Fully Convolutional Networks for Semantic Segmentation考必过小编为大家整理了关于Fully Convolutional Networks for Semantic Segmentation的信息,希望可以帮助到大家!

Fully Convolutional Networks for Semantic Segmentation

标签:自动   href   mic   turn   ups   soft   ima   return   求和   

FCN论文地址:https://arxiv.org/abs/1411.4038

FCN源代码地址:https://github.com/shelhamer/fcn.berkeleyvision.org

 

    图像语义分割(Semantic Segmentation)是对图像中每一个像素点进行分类,确定每个点的类别(如属于背景、人或车等),从而进行区域划分。目前,语义分割已经被广泛应用于自动驾驶、无人机落点判定等场景中。

 

     本文提出全卷积网络(Fully Convolutional Networks, FCN)用于图像语义分割。FCN主要思想是将一般的分类网络(如VGG,ResNet等)最后几层的全连接层替换成卷积层。FCN的好处是可以接受任意尺寸的输入图像。

 

 

 下面主要介绍一下FCN在语义分割上具体做法。

 

整个FCN网络基本原理如图5(只是原理示意图):

  1. image经过多个conv和+一个max pooling变为pool1 feature,宽高变为1/2

  2. pool1 feature再经过多个conv+一个max pooling变为pool2 feature,宽高变为1/4

  3. pool2 feature再经过多个conv+一个max pooling变为pool3 feature,宽高变为1/8

  4. ......

  5. 直到pool5 feature,宽高变为1/32。

 

 

那么:

 

利用Pytorch实现FCN-8s的网络结构代码如下:

import torch
import torch.nn as nn
import torch.nn.init as init
import torch.nn.functional as F

from torch.utils import model_zoo
from torchvision import models

class FCN8(nn.Module):
    def __init__(self, num_classes):
        super().__init__()

        feats = list(models.vgg16(pretrained=True).features.children())

        self.feats = nn.Sequential(*feats[0:9])
        self.feat3 = nn.Sequential(*feats[10:16])
        self.feat4 = nn.Sequential(*feats[17:23])
        self.feat5 = nn.Sequential(*feats[24:30])

        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                m.requires_grad = False

        self.fconn = nn.Sequential(
            nn.Conv2d(512, 4096, 7),
            nn.ReLU(inplace=True),
            nn.Dropout(),
            nn.Conv2d(4096, 4096, 1),
            nn.ReLU(inplace=True),
            nn.Dropout(),
        )
        self.score_feat3 = nn.Conv2d(256, num_classes, 1)
        self.score_feat4 = nn.Conv2d(512, num_classes, 1)
        self.score_fconn = nn.Conv2d(4096, num_classes, 1)

    def forward(self, x):
        feats = self.feats(x)
        feat3 = self.feat3(feats)
        feat4 = self.feat4(feat3)
        feat5 = self.feat5(feat4)
        fconn = self.fconn(feat5)

        score_feat3 = self.score_feat3(feat3)
        score_feat4 = self.score_feat4(feat4)
        score_fconn = self.score_fconn(fconn)

        score = F.upsample_bilinear(score_fconn, score_feat4.size()[2:])
        score += score_feat4
        score = F.upsample_bilinear(score, score_feat3.size()[2:])
        score += score_feat3

        return F.upsample_bilinear(score, x.size()[2:])

上述3种网络的效果如下, 明显可以看出效果:FCN-32s < FCN-16s < FCN-8s,即使用多层feature融合有利于提高分割准确性。

 

 

 

 

另外几点说明:

 

 

语义分割的评价指标如下:

 

 

其中, nij表示将本属于第i类的像素预测为属于第j类的像素数量;ncl表示像素的类别总数;ti表示属于第i类的像素总数,

 

 

参考:

图像语义分割入门+FCN/U-Net网络解析 https://zhuanlan.zhihu.com/p/31428783

 

Fully Convolutional Networks for Semantic Segmentation

标签:自动   href   mic   turn   ups   soft   ima   return   求和   

以上就是Fully Convolutional Networks for Semantic Segmentation的内容,更多资讯请及时关注考必过网站,最新消息小编会第一时间发布,大家考试加油!

上一篇      下一篇
前端相关推荐 更多>>
对 Sequence to Sequence Learning with Neural Networks的理解 centos 7 Docker容器启动报WARNING: IPv4 forwarding kubernetes源码剖析之client-go(二) Informer机制
前端热点专题 更多>>
热点问答
国家公务员考试年龄限制是多少 公务员国考和省考考试内容有什么区别 函授大专学历能不能考公务员 国家公务员考试考点能自己选择吗 新闻学专业能报考2022年公务员考试吗 什么是联合培养研究生 什么是破格录取研究生 什么人不适合读研 研究生报名户口所在地填什么 研究生结业和毕业有什么区别
网站首页 网站地图 返回顶部
考必过移动版 https://m.kaobiguo.net