当前位置:网站首页>FCN: Fully Convolutional Networks for Semantic Segmentation
FCN: Fully Convolutional Networks for Semantic Segmentation
2022-07-05 17:51:00 【00000cj】
paper: Fully Convolutional Networks for Semantic Segmentation
创新点
提出了全卷积的结构,即将分类网络最后的全连接层换成卷积层,从而可以处理任意大小的输入。
通过反卷积或插值的方法进行上采样,将输出还原回原始输入大小。
在分类网络上进行修改,将全连接层换成卷积层,可以共享前面层的权重,从而进行finetune。
提出skip结构,通过融合浅层特征和深层特征,兼顾了浅层的空间细节信息和深层的语义信息,使得最终的分割结果更加精细。
实现细节解析
这里以MMSegmentation中的实现为例,和原论文相比,backbone由Vgg-16换成了ResNet-50,skip结构换成了膨胀卷积,pytorch官方的实现也是这样的。
Backbone
- 原始的ResNet-50中4个stage的strides=(1, 2, 2, 2),不采用膨胀卷积即dilations=(1, 1, 1, 1),而在FCN中4个stage的strides=(1, 2, 1, 1),dilations=(1, 1, 2, 4)。
- 另外有一个contract_dilation=True的设置,即当空洞>1时,压缩第一个卷积层。这里在第三个和第四个stage的第一个bottleneck中将膨胀率减半,即第三个stage的第一个bottleneck中不采用膨胀卷积,第四个stage的第一个bottleneck中dilation=4/2=2。
- 另外这里采用的是ResNetV1c,即stem中的7x7卷积替换成了3个3x3卷积。
- 最后,注意一下padding,在原始实现中除了stem中7x7卷积的padding=3,其它所有padding=1。在FCN中因为用了膨胀卷积,后两个stage的stride=1,为了保持输入输出分辨率一直,由下式可得padding=dilation。
- 假设batch_size=4,模型输入shape=(4, 3, 480, 480),则backbone四个stage的输出分别为(4, 256, 120, 120)、(4, 512, 60, 60)、(4, 1024, 60, 60)、(4, 2048, 60, 60)。
FCN Head
- 取ResNet第四个stage的输出(4, 2048, 60, 60),经过Conv2d(2048, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)、Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) 两个conv-bn-relu得到 (4, 512, 60, 60)。
- 上一步的输出(4, 512, 60, 60)与输入(4, 2048, 60, 60)拼接得到(4, 2560, 60, 60)。
- 经过一个conv-bn-relu,Conv2d(2560, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False),得到(4, 512, 60, 60)。
- 采用dropout,dropout_ratio=0.1。
- 最后,经过Conv2d(512, num_classes, kernel_size=(1, 1), stride=(1, 1))得到模型的最终输出(4, num_classes, 60, 60),注意这里的类别数包括背景。
Loss
- 上一步的输出(4, 2, 60, 60)经过双线性插值resize成输入大小,得到(4, 2, 480, 480)。
- 采用CrossEntropy loss
Auxiliary Head
- 取ResNet第三个stage的输出(4, 1024, 60, 60),经过Conv2d(1024, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)一个conv-bn-relu得到(4, 256, 60, 60)。
- 采用dropout,dropout_ratio=0.1。
- 经过Conv2d(256, num_classes, kernel_size=(1, 1), stride=(1, 1))得到模型的最终输出(4, num_classes, 60, 60)得到该分支的输出。
边栏推荐
- VC编程入门浅谈「建议收藏」
- 华夏基金:基金行业数字化转型实践成果分享
- 最大人工岛[如何让一个连通分量的所有节点都记录总节点数?+给连通分量编号]
- Tencent music launched its new product "quyimai", which provides music commercial copyright authorization
- 访问数据库使用redis作为mysql的缓存(redis和mysql结合)
- Sophon KG升级3.1:打破数据间壁垒,解放企业生产力
- Neural network self cognition model
- [TestLink] testlink1.9.18 solutions to common problems
- 【PaddlePaddle】 PaddleDetection 人脸识别 自定义数据集
- "Xiaodeng in operation and maintenance" is a single sign on solution for cloud applications
猜你喜欢
星环科技重磅推出数据要素流通平台Transwarp Navier,助力企业实现隐私保护下的数据安全流通与协作
GFS分布式文件系统
Ten top automation and orchestration tools
nacos -分布式事务-Seata** linux安装jdk ,mysql5.7启动nacos配置ideal 调用接口配合 (保姆级细节教程)
论文阅读_医疗NLP模型_ EMBERT
Leetcode exercise - 206 Reverse linked list
ISPRS2022/雲檢測:Cloud detection with boundary nets基於邊界網的雲檢測
Tencent music launched its new product "quyimai", which provides music commercial copyright authorization
ISPRS2020/云检测:Transferring deep learning models for cloud detection between Landsat-8 and Proba-V
Sophon CE Community Edition is online, and free get is a lightweight, easy-to-use, efficient and intelligent data analysis tool
随机推荐
热通孔的有效放置如何改善PCB设计中的热管理?
Access the database and use redis as the cache of MySQL (a combination of redis and MySQL)
LeetCode笔记:Weekly Contest 300
读libco保存恢复现场汇编代码
ITK Example
如何修改mysql字段为自增长字段
消除`if()else{ }`写法
How to modify MySQL fields as self growing fields
Six bad safety habits in the development of enterprise digitalization, each of which is very dangerous!
Tencent music launched its new product "quyimai", which provides music commercial copyright authorization
Teamcenter 消息注册前操作或后操作
一文读懂简单查询代价估算
The comprehensive competitiveness of Huawei cloud native containers ranks first in China!
Unicode processing in response of flash interface
在一台服务器上部署多个EasyCVR出现报错“Press any to exit”,如何解决?
MATLAB查阅
【PaddlePaddle】 PaddleDetection 人脸识别 自定义数据集
OpenShift常用管理命令杂记
mybash
Cmake tutorial Step3 (requirements for adding libraries)