当前位置: 首页 > news >正文

语义分割--Fcn

语义分割开山之作。Fcn(Fully Convolutional Networks for Semantic Segmentation)主要有两个贡献:
1利用卷积核代替了全连接层(这也是叫全卷积网络的原因),从而支持任何尺寸的图像输入,原文中叫 convolutionalization。如下图所示
在这里插入图片描述

上面这个是分类网络常规操作,对卷积的结果进行展平(flatten),然后利用全连接层降维。输入channel height width分别是51277,展平得到125,088,再乘以全连接层250884096得到14096输出tensor,全连接层的参数250884096。在fcn中提出利用卷积替代全连接层,在下面利用409677的卷积核替代全连接层对输入的51277tensor进行卷积(stride=1,padding=0,dilation=1),根据pytorchconv2d公式计算输出的尺寸:
在这里插入图片描述

Hout=1,Wout=1。因此得到了114096的tensor,输出的大小和全连接层一样,但维度多了一维。Fcn中用卷积层替代了全连接层,所以叫Fully Convolutional Networks。
为什么说如果一个神经网络里面只有卷积层,那么输入的图像大小是可以任意的。但是如果神经网络里不仅仅只有卷积层,还有全连接层,那么输入的图像的大小必须是固定的?
卷积层的参数和输入大小无关,它仅仅是一个卷积核在图像上滑动,不管输入图像多大都没关系。图像进行卷积时,因为每一个卷积核中的权值都是共享的,因此无论输入图像的尺寸多大,都可以按步长滑动做卷积,不同之处在于经过卷积运算,不同大小的输入图片所提取出的卷积特征的大小是不同的。
全连接层的参数与输入图像大小有关,因为它要把输入图像的所有像素点连接起来。在含有全连接层的神经网络中,假设输入的图像大小一样,那经过卷积得到特征的尺寸也都是相同的。如输入特征尺寸为 a×b,之后连接一个 1×c的全连接层,那么卷积层的输出与全连接层间的权值矩阵大小为 ( a × b ) × c。但如果输入与原图像大小不同,得到新的卷积输出为 a1b1。与之对应,卷积层的输出与全连接层间的权值矩阵大小应为 ( a1b1) × c。很明显,权值矩阵大小发生了变化,故而也就无法使用和训练了。
2.使用转置卷积进行上采样
使用卷积网络都会对图像尺寸进行缩小从而得到特征图。而语义分割是对每个像素进行分类,如果将卷积网络得到的特征图恢复到原始图像尺寸呢,fcn的做法是使用转置卷积进行上采样(使用双线性插值对转置卷积核参数进行初始化)。
文中提供了三种思路:
Fcn32s:直接对最后一层输出的特征图(相对于原图已经是32分之一了)上采样,所以非常简单暴力的方法对特征图上采样32倍,就恢复到了原图尺寸:
在这里插入图片描述

Fcn16s: 对最后一层输出的特征图上采样2倍恢复到16分之一的尺寸,再把前面卷积层16分之一的尺寸拿过来,两个相加(也就是下图红色标记的两部分),最后再上采样16倍恢复到原始图像的尺寸。这里叠加了之前的特征图,理论上效果会更好,实验结果也是如此。
在这里插入图片描述

Fcn8s:和fcn16s相同,只不过利用了更多更大尺寸的特征图叠加,最后再进行上采样8倍恢复到原图尺寸。
在这里插入图片描述

注意这里11的卷积核,它的channel是num_cls(也就是分类数量)。11的卷积核不会改变图像尺寸,但会改变channel或者维度。

参考:
https://www.bilibili.com/video/BV1J3411C7zd?vd_source=a0d4f7000e77468aec70dc618794d26f&spm_id_from=333.788.videopod.sections
https://blog.csdn.net/qq_41731861/article/details/120511148
https://zhuanlan.zhihu.com/p/30195134
https://zh-v2.d2l.ai/chapter_computer-vision/fcn.html

http://www.dtcms.com/a/312863.html

相关文章:

  • 回顾MDP的概念
  • RabbitMQ面试精讲 Day 8:死信队列与延迟队列实现
  • dbdiagram:一款简洁高效的免费数据库设计工具
  • 二叉树算法之【前序遍历】
  • 三生原理的“范畴语法”如何启发AI推理?
  • Spring Boot 整合 Minio 实现高效文件存储解决方案(本地和线上)
  • 个人项目介绍:语音识别小助手
  • Spring AI的英语实例
  • Nginux Rewte 相关功能
  • 基于Python实现生产者—消费者分布式消息队列:构建高可用异步通信系统
  • Rustdesk中继服务器搭建(windows 服务器)
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-56,(知识点:电源模块,DCDC电源,LDO电源,原理及其特点)
  • Java(HashMap和HashTable和Properties)
  • kafka 是一个怎样的系统?是消息队列(MQ)还是一个分布式流处理平台?
  • 哔哩哔哩招游戏内容产品运营
  • Ubuntu22.4部署大模型前置安装
  • 零确认双花攻击
  • 智变时代:AI 如何重构工作边界与行业生态?
  • 【软考中级网络工程师】知识点之 IS-IS 协议
  • 百度招黑产溯源安全工程师
  • Spring AOP_2
  • CPA全国青少年编程能力等级测评试卷及答案 Python编程(一级)
  • 【代码详解】Triplane Meets Gaussian Splatting中triplane部分解析
  • 【代码随想录|454.四数相加、383.赎金信、15.三数之和、18.四数之和】
  • 模拟-6.N字形变换-力扣(LeetCode)
  • GPIO交换矩阵和IO_MUX
  • Python Seaborn【数据可视化库】 全面讲解
  • node.js常用函数
  • web前端React和Vue框架与库安全实践
  • Elastic 9.1/8.19:默认启用 BBQ,ES|QL 支持跨集群搜索(CCS)正式版,JOINS 正式版,集成 Azure AI Foundry