深度学习-全卷积神经网络(FCN)

news2024/9/23 23:25:06

1. 简介
全卷积神经网络(Fully Convolutional Networks,FCN)是Jonathan Long等人于2015年在Fully Convolutional Networks for Semantic Segmentation一文中提出的用于图像语义分割的一种框架,是深度学习用于语义分割领域的开山之作。我们知道,对于一个各层参数结构都设计好的神经网络来说,输入的图片大小是要求固定的,比如AlexNet,VGGNet, GoogleNet等网络,都要求输入固定大小的图片才能正常工作。 而 F C N 的 精 髓 就 是 让 一 个 已 经 设 计 好 的 网 络 可 以 输 入 任 意 大 小 的 图 片 \color{blue}{而FCN的精髓就是让一个已经设计好的网络可以输入任意大小的图片} FCN
2. FC网络结构
FCN网络结构主要分为两个部分:全卷积部分和反卷积部分。其中全卷积部分为一些经典的CNN网络(如VGG,ResNet等),用于提取特征;反卷积部分则是通过上采样得到原尺寸的语义分割图像。FCN的输入可以为任意尺寸的彩色图像,输出与输入尺寸相同,通道数为n(目标类别数)+1(背景)。
3. CNN和FCN网络结构对比
CNN网络
假如我们要设计一个用来区分猫,狗和背景的网络,CNN的网络的架构应该是如下图:
在这里插入图片描述
假如输入图片size为14x14x3的彩色图,如上图,首先经过一个5x5的卷积层,卷积层的输出通道数为16,得到一个10x10x16的一组特征图,然后经过2x2的池化层,得到5x5x16的特征图,接着Flatten后进入两个50个神经元的全连接层,最后输出分类结果。
其 中 F l a t t e n 要 求 卷 积 输 出 的 特 征 图 的 大 小 是 固 定 的 , 因 为 它 要 把 特 征 图 的 所 有 像 素 点 连 接 起 来 , 这 就 导 致 反 推 出 卷 积 层 的 输 入 大 小 要 求 是 固 定 的 。 \color{blue}{其中Flatten要求卷积输出的特征图的大小是固定的,因为它要把特征图的所有像素点连接起来,这就导致反推出卷积层的输入大小要求是固定的。} Flatten
比如:在含有全连接层的神经网络中,假设输入的图像大小一样,那经过卷积得到特征的尺寸也都是相同的。如输入特征尺寸为 a × b,之后连接一个1 × c 的全连接层,那么卷积层的输出与全连接层间的权值矩阵大小为( a × b ) × c。但如果输入与原图像大小不同,得到新的卷积输出为 a ′ × b ′
。与之对应,卷积层的输出与全连接层间的权值矩阵大小应为 ( a ′ × b ′ ) × c 。很明显,权值矩阵大小发生了变化,故而也就无法使用和训练了。

FCN网络
全卷积神经网络,顾名思义是该网络中全是卷积层链接,如下图:
在这里插入图片描述
该网络在前面两步跟CNN的结构是一样的,但是在CNN网络Flatten的时候,FCN网络将之换成了一个卷积核size为5x5,输出通道为50的卷积层,之后的全连接层都换成了1x1的卷积层。1x1的卷积其实就相当于全连接操作。
从上两个图比较可知全卷积网络和CNN网络的 主 要 区 别 在 于 F C N 将 C N N 中 的 全 连 接 层 换 成 了 卷 积 操 作 。 \color{blue}{主要区别在于FCN将CNN中的全连接层换成了卷积操作。} FCNCNN
换成全卷积操作后,由于没有了全连接层的输入层神经元个数的限制,所以卷积层的输入可以接受不同尺寸的图像,也就不用要求训练图像和测试图像size一致。
那么问题也来了,如果输入尺寸不一样,那么输出的尺寸也肯定是不同的,那么该如何去理解FCN的输出呢?
4. 理解FCN网络的输出
特征图尺寸变化
我们首先不考虑通道数,来看一下上面网络中的特征图尺寸的具体变化,如下图,图中绿色为卷积核,蓝色为特征图:
在这里插入图片描述
从上图中,我们可以看到,输入是一个14x14大小的图片,经过一个5x5的卷积(不填充)后,得到一个10x10的特征图,然后再经过一个2x2的池化后,尺寸缩小到一半变成5x5的特征图,再经过一个5x5的卷积后,特征图变为1x1,接着后面再进行两次1x1的卷积(类似全连接操作),最终得到一个1x1的输出结果,那么该1x1的输出结果,就代表最前面14x14图像区域的分类情况,如果对应到上面的猫狗和背景的分类任务,那么最后输出的结果应该是一个1x3的矩阵,其中每个值代表14x14的输入图片中对应类别的分类得分。
不同尺寸的输入图片
好了,不是说可以接收任意尺寸的输入吗?我们接下来看一个大一点的图片输入进来,会得到什么样的结果,如下图:
在这里插入图片描述
我们可以看到上面的图,输入尺寸由原来的14x14变成了16x16,那么经过一个5x5的卷积(不填充)后,得到一个12x12的特征图,然后再经过一个2x2的池化后,尺寸缩小到一半变成6x6的特征图,再经过一个5x5的卷积后,特征图变为2x2,接着后面再进行两次1x1的卷积(类似全连接操作),最终得到一个2x2的输出结果,那么该2x2的输出结果,就代表最前面16x16图像区域的分1类情况,然而,输出是2x2,怎么跟前面对应呢?
哪一个像素对应哪个区域呢?
我们看下图:
在这里插入图片描述
根据卷积池化反推,前面图3,我们知道,最后的输出1x1代表了前面14x14的输入的分类结果,那么我们根据卷积核的作用范围可以推出,上图中最后输出2x2中左上角的橙色输出就代表了16x16中的橙色区域(红色框),依次类推,输出2x2中右上角的蓝色输出就代表了16x16中的黄色框区域,输出2x2中左下角的蓝色输出就代表了16x16中的黑色框区域,输出2x2中右下角的蓝色输出就代表了16x16中的紫色框区域,其中每个框的大小都是14x14.也就是说输出的每个值代表了输入图像中的一个区域的分类情况。

参考
FCN(全卷积神经网络)详解
全卷积神经网络FCN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/67285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【目标检测】【DDPM】DiffusionDet:用于检测的概率扩散模型

文章目录摘要一、Introduction二、相关工作三、方法1.准备工作2.架构3、训练4.预测过程四. 实验1.训练策略2.main property3.消融实验五、代码分析1.测试 demo.py2.训练 train-net.py总结摘要 我们提出了扩散det,一个新的框架,将目标检测作为一个从噪声…

OpenGL基础程序结构

用OpenGL编写的程序结构类似于用其他语言编写的程序。实际上,OpenGL是一个丰富的三维图形函数库,编写OpenGL程序并非难事,只需在基本C语言中调用这些函数,用法同Turbo C、Microsoft C等类似,但也有许多不同之处。   …

[附源码]Python计算机毕业设计Django校园招聘系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

功能测试求职难,现在不懂自动化测试连外包都进不去了?

功能测试求职难 最近因为公司政策原因,部分外包被裁员,其中不乏能力还不错,工作也挺踏实的,比较可惜,为了帮助他们尽快找到下家,我这边也开始帮他们关注招聘情况,发现一个挺让我意外的事情。在…

Java中CAS详解

一、什么是CAS 什么是CAS机制 CAS机制是一种数据更新的方式。在具体讲什么是CAS机制之前,我们先来聊下在多线程环境下,对共享变量进行数据更新的两种模式:悲观锁模式和乐观锁模式。 悲观锁更新的方式认为:在更新数据的时候大概率…

Android 动画和过渡

Android 动画和过渡 (一) 动画 JetpackCompose提供了强大且可扩展的API,可以轻松地在应用程序的UI中实现各种动画。下面描述了如何使用这些API以及根据动画场景使用哪些API。 动画在现代移动应用程序中至关重要,以实现流畅和可理解…

【语音处理】基于自适应差分脉冲编码调制(ADPCM)的实现研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

目标检测算法——安全帽识别数据集(附下载链接)

🎄🎄近期,小海带在空闲之余收集整理了一批安全帽识别数据集供大家参考。 整理不易,小伙伴们记得一键三连喔!!!🎈🎈 目录 一、安全帽佩戴数据集 二、SHWD安全帽佩戴检测…

五、分页总结

文章目录一、分页的几种方式1、使用关键字实现分页(limit)2、通过 RowBounds 类实现分页查询3、使用分页插件实现分页分页的作用:在进行查询时如果数据量庞大的话会造成大量的内存压力,让程序卡顿。这时候使用分页减少数据的处理量…

基于SpringBoot编写starter,自己写个类库引入使用

我们在做springboot项目的时候经常会创建项目后先引入各种starter,比如操作数据库的mybatis-plus-boot-starter,数据源的druid-spring-boot-starter等等。引入starter的好处就是可以将第三方的依赖库快速的整合到我们自己的springboot项目中,…

​最新Xcode9 无证书真机调试流程

写在前面 公司分配了新的测试机,证书99台名额已满,所以上网找教程,学习了一下如何使用Xcode无证书进行真机调试。​ 一. 创建证书​ 1. 运行Xcode, Xcode–》Preference–》添加账号(能在appstore下载的账号)​ 2. 选中刚才添加的AppleID–…

JSP 社区联动系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 社区联动系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开 发,数据库为Mysql,使用ja…

鸿蒙harmony天气预报Demo

1.准备工作 1.1创建项目 sdk为6版本,所以使用华为的远程模拟器p40即可。 1.2准备图片资源 这里把天气预报用到的天气提示的图片全放在资源目录下的media文件下。 具体资源在github仓库已包含,自行前往。 1.3配置文件 接着是修改配置文件&#xff0…

[附源码]Python计算机毕业设计SSM家教管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

DevComponents.DotNetBar2之SuperTabControl使用技巧

关于类似SuperTabControl的使用如何动态调整其TAB标签的顺序问题,搜了全网也没有找到类似答案,都提到tab键的顺序或者是通过控件界面进行调整其顺序,都不是想要的结果,有个网友问的类似问题但是没有一个答案可用。经过反复测试总结…

华为云Nginx配置

配置yum源 mkdir -p /etc/yum.repos.d/repo_bak/ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo_bak/ cd /etc/yum.repos.d wget http://mirrors.myhuaweicloud.com/repo/mirrors_source.sh && sh mirrors_source.sh清除原有yum缓存 yum clean all 执行生成新的…

Win10编译Android版本的FFmpeg库

安装MSYS2 下载地址:MSYS2 安装完成后打开MSYS2执行如下命令, 安装所需要的工具链 pacman -S --needed base-devel mingw-w64-x86_64-toolchain下载android NDK 我在Android Studio里面已经下载过了,没有的可以自己百度去官网下载NDK 我…

[矩阵论] Unit 4. 矩阵的广义逆 - 知识点整理

注: 以下内容均由个人整理, 不保证完全准确, 如有纰漏, 欢迎交流讨论参考: 杨明, 刘先忠. 矩阵论(第二版)[M]. 武汉: 华中科技大学出版社, 2005 4 矩阵的广义逆 4.1 矩阵的左逆与右逆 左逆 右逆 Def’ 4.1: 设 A∈CmnA\in C^{m\times n}A∈Cmn ∃B∈Cnm\exists B\in C^{n\t…

MySQL数据库的性能优化及自动化运维与Mysql高并发优化详细教程

首先,我们来看看DBA的具体工作,我觉得 DBA 真的很忙:备份和恢复、监控状态、集群搭建与扩容、数据迁移和高可用,这是我们 DBA 的功能。 了解这些功能以后要对体系结构有更加深入的了解,你不知道怎么处理这些故障和投诉…

FastReport Online Designer 2023

FastReport Online Designer 2023 添加了以ESRI形状文件格式显示图形地图的新地图组件。 添加了一个用于在数据源中选择表的新按钮。 添加了使用“Shift”或“Ctrl”键在报告树中选择多个项目的选项。 现在可以更改多个选定对象的特性值。 在您使用新配置重置选项后,设计器现在…