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

动手学深度学习——FCN

1. 前言

前面我们已经学习了语义分割相关的几个基础内容:

  • 什么是语义分割

  • 语义分割数据集如何组织

  • 什么是转置卷积

  • 为什么说转置卷积仍然是一种卷积

这些知识其实都在为一个经典模型做铺垫,那就是:

FCN(Fully Convolutional Network,全卷积网络)

FCN 是语义分割发展中的一个里程碑模型。
它的重要意义在于:

把传统卷积神经网络从“整图分类”改造成“像素级预测”模型。

也就是说,FCN 让卷积网络不再只输出一个类别,而是能够输出一张与空间位置对应的预测图,从而实现语义分割。


2. 什么是 FCN

FCN 的全称是:

Fully Convolutional Network

中文通常翻译为:

全卷积网络

这里“全卷积”三个字非常关键,意思是:

整个网络只使用卷积相关操作,而不再使用传统全连接层。

为什么要这样做?

因为如果网络最后用了全连接层,那么空间结构会被压扁,模型只能输出一个固定长度向量,更适合做图像分类。
而语义分割要求输出一张空间分布图,所以必须尽量保留空间结构。

因此,FCN 的核心思想就是:

把原来用于分类的 CNN 改造成一个能够输出二维预测图的网络。


3. 为什么语义分割需要 FCN

在普通图像分类网络中,整体流程通常是:

  • 输入图像

  • 多层卷积和池化提取特征

  • 最后通过全连接层输出类别

这种结构适合做“整张图是什么”的判断。

但语义分割要求的是:

图像中每个像素属于什么类别

所以模型不能只输出一个类别向量,而必须输出一张标签预测图。

这就要求网络满足两个条件:

3.1 能提取深层语义特征

因为模型仍然要理解图像中的高级语义信息。

3.2 能恢复空间分辨率

因为最终要给每个像素做预测,不能把空间信息彻底丢掉。

FCN 正是在解决这两个问题。


4. FCN 的核心思想

FCN 的核心思想可以概括成三步:

第一步:去掉全连接层

把传统分类网络最后的全连接层换成卷积层,使网络变成“全卷积”的。


第二步:保留空间结构

这样一来,网络输出就不再是单个类别,而仍然是具有空间布局的特征图。


第三步:使用转置卷积上采样

由于经过多次卷积和池化后,特征图分辨率会变小,
所以需要用转置卷积把它恢复到更大的尺寸,得到接近原图大小的预测结果。

所以 FCN 的本质是:

卷积提取语义特征 + 转置卷积恢复分辨率 + 像素级分类输出


5. FCN 和普通 CNN 的根本区别

这是这篇里最关键的一点。

5.1 普通 CNN

普通 CNN 主要用于分类,最后输出通常是:

  • 一个类别

  • 或一个类别概率向量

它更关心整张图的整体语义。


5.2 FCN

FCN 输出的是:

  • 一张空间预测图

  • 图中每个位置都对应一个类别预测

它更关心每个位置的语义归属。

所以可以简单概括成:

普通 CNN 输出“一个答案”,FCN 输出“一张答案图”。


6. FCN 为什么叫“全卷积”

很多初学者会以为“全卷积”只是说卷积层很多,其实不是。

它真正的意思是:

网络中不再使用传统全连接层,而是全部由卷积操作构成。

包括最后原本做分类的位置,也改用卷积层来完成。

这样做的好处是:

6.1 输入尺寸更灵活

全连接层通常要求固定输入尺寸,
而全卷积结构对输入尺寸更灵活。

6.2 保留空间对应关系

卷积输出仍然有二维结构,这对语义分割非常重要。

6.3 更适合做密集预测

语义分割本质上就是密集预测任务,
而全卷积结构天然适合在空间位置上做密集输出。


7. FCN 的整体结构怎么理解

FCN 的结构可以分成两个阶段来看。

7.1 编码阶段

前半部分和普通卷积网络很像,主要负责:

  • 提取特征

  • 逐步扩大感受野

  • 获取更强的语义信息

但与此同时,特征图尺寸会越来越小。


7.2 解码/恢复阶段

后半部分则通过转置卷积,把较小的特征图逐步放大,
恢复出更高分辨率的输出图。

这个输出图中的每个位置,都会对应一个类别预测。

所以 FCN 是一种典型的:

先压缩提特征,再恢复做预测的结构。


8. FCN 中转置卷积起什么作用

这一点必须讲透,因为前面几节都在为它服务。

卷积网络经过多层下采样后,特征图通常变得很小。
例如输入是一张较大的图片,经过若干层后可能只剩下:

  • 1/2

  • 1/4

  • 1/8

  • 甚至更小

如果直接用这个小特征图做输出,那么语义分割结果会很粗糙。

所以需要转置卷积来完成:

上采样,把低分辨率特征图恢复成高分辨率预测图。

因此,在 FCN 中,转置卷积是连接“深层语义特征”和“像素级输出结果”的关键桥梁。


9. FCN 怎样把分类网络改造成分割网络

李沐这里讲 FCN,一个非常典型的思路就是:

用预训练分类网络作为骨干,再把最后部分改造成分割结构。

例如,一个原本用于图像分类的网络,最后可能是:

  • 卷积层提特征

  • 全局池化或全连接

  • 输出类别

而改造成 FCN 后,通常会变成:

  • 前面保留卷积提特征部分

  • 去掉全连接分类头

  • 增加1×1卷积做类别映射

  • 再通过转置卷积恢复尺寸

这样,原来的分类模型就变成了分割模型。


10. 1×1 卷积在 FCN 中的作用

这一点很重要,也很适合写进博客。

在 FCN 中,经常会使用1×1 卷积来做类别预测。
它的作用可以理解为:

对每个空间位置上的通道特征做线性变换,输出该位置属于各类别的分数。

例如:

  • 假设某层特征图有 512 个通道

  • 分割任务有 21 个类别

那么可以用一个1×1卷积把:

512 通道 -> 21 通道

这样输出的 21 个通道,就可以理解为:

  • 每个空间位置在 21 个类别上的打分

所以1×1卷积其实承担了“逐像素分类器”的角色。


11. FCN 的输出是什么

FCN 的输出通常可以理解为:

一个类别通道维度上的预测张量

假设:

  • 输入图像大小为H × W

  • 类别数为C

那么最终模型输出往往可以表示成:

C × H × W

或者在 batch 维度下写成:

N × C × H × W

其中:

  • N:批量大小

  • C:类别数

  • H × W:空间位置

这意味着:

对于图像中的每个像素位置,模型都会给出一个长度为C的类别打分向量。

再对类别维做argmax,就能得到最终分割类别图。


12. FCN 为什么是语义分割里的经典模型

FCN 之所以经典,是因为它第一次比较系统地说明了:

卷积网络不只是能做整图分类,也能做像素级预测。

它的重要贡献主要体现在:

12.1 把分类网络推广到分割任务

让已有 CNN 结构能够迁移到更细粒度的视觉任务中。

12.2 提出了端到端分割思路

输入整张图,输出整张标签图,中间不需要手工设计复杂特征。

12.3 推动了后续大量分割模型发展

后来的很多语义分割网络,本质上都可以看作是在 FCN 基础上的改进。

所以 FCN 在语义分割中的地位,类似于早期 R-CNN 在检测中的地位。


13. FCN 的局限性

当然,FCN 并不是完美的。

13.1 输出边界可能比较粗糙

因为下采样会损失细节,即使后面上采样,也不一定能完全恢复精细边缘。

13.2 小目标和细粒度结构处理不够理想

对于很细小的物体或边界复杂区域,FCN 可能分得不够精确。

13.3 上采样结果依赖特征质量

如果编码阶段已经丢掉太多空间细节,单靠转置卷积也很难补回来。

这也是为什么后来出现了很多改进结构,比如:

  • 跳跃连接

  • U-Net

  • DeepLab 等

不过作为入门模型,FCN 非常重要。


14. FCN 和前面内容是怎么串起来的

回头看一下,你会发现这部分知识其实是一步步铺过来的。

先学语义分割

明白任务目标是像素级分类。

再学语义分割数据集

知道标签是逐像素标注图。

再学转置卷积

明白如何把小特征图恢复成大输出图。

最后学 FCN

把这些知识真正组装成一个完整分割模型。

所以 FCN 这一节,本质上就是前面分割基础知识的集中落地。


15. 李沐这里讲 FCN 的重点是什么

这一节并不是让你立刻掌握最复杂的分割模型,
而是让你建立一个核心认识:

分类网络经过“去全连接 + 1×1卷积 + 转置卷积上采样”后,就可以变成分割网络。

只要把这个主线抓住,后面看代码时就会清楚很多。

也就是说,这节最重要的不是细枝末节,而是把这三个关键词记住:

  • 全卷积

  • 逐像素分类

  • 转置卷积恢复分辨率


16. 本节总结

这一节我们学习了 FCN,核心内容可以总结为以下几点。

16.1 FCN 是全卷积网络

它去掉了传统分类网络中的全连接层,整个网络由卷积相关操作构成。

16.2 FCN 用于语义分割

它能够输出具有空间结构的预测图,实现像素级分类。

16.3 FCN 的核心是“提特征 + 恢复分辨率”

前面用卷积提取深层语义信息,后面用转置卷积进行上采样。

16.4 1×1 卷积负责类别映射

把每个空间位置的特征变成各类别的预测分数。

16.5 FCN 是语义分割中的经典起点模型

后续很多分割方法都建立在它的思想之上。


17. 学习感悟

FCN 这一节特别有意思,因为它让人看到一个很重要的深度学习思想:

一个模型并不是只能做一种任务,关键在于你如何改造它的输出方式。

原本的 CNN 只能做分类,
但通过改造网络尾部结构、保留空间信息、加入上采样机制,它就能完成语义分割。

这也说明,很多经典模型的创新,不一定来自完全推翻旧结构,
而可能来自:

对已有结构进行任务导向的重新组织。

FCN 就是这种思想的典型代表。

http://www.jsqmd.com/news/629211/

相关文章:

  • 免费提升Windows 11性能:Win11Debloat终极优化工具完全指南
  • SITS2026白皮书深度解读:5大工程化瓶颈、3类落地陷阱与7步标准化实施路径
  • 探索游戏自动化技术:MaaAssistantArknights项目深度解析
  • 手机号找回QQ号:3分钟快速上手phone2qq工具指南
  • 别再死记硬背公式了!用Python可视化带你搞懂Gamma、HLG、PQ曲线的本质区别
  • XCA 2.9.0:终极免费证书管理工具,轻松搞定PKI难题 [特殊字符]
  • 如何高效抓取网络媒体资源?猫抓浏览器扩展的完整指南
  • Zemax实战:手把手教你设计一个40倍、NA0.65的显微物镜(附初始结构文件)
  • 【大模型思维链实战军规】:2026奇点大会认证的7步CoT Prompt重构法,上线即提效300%
  • 终极Mac视频预览解决方案:让Finder完美支持MKV等所有视频格式
  • Kali实战:如何用strings命令快速挖掘图片隐藏信息(附CatCatCat解题过程)
  • 告别海康官方SDK:在Ubuntu 22.04上用Harvesters+OpenCV轻松调用工业相机(附GenTL驱动配置)
  • BetterGI完整指南:如何用自动化工具让你的原神游戏体验提升10倍
  • 5分钟入门CH55X Arduino开发:低成本USB微控制器终极指南
  • UE5 行为树实战指南 —— 从基础到高级AI行为设计
  • 读三体:开始
  • PbootCMS代码注入漏洞(CNVD-2025-0171060)
  • GoldHEN作弊管理器深度解析:PS4游戏修改的技术实现与实战指南
  • Ultimate ASI Loader:Windows游戏插件加载终极指南
  • 哥本哈士奇(aspnetx)关
  • Qlearning多基站分簇拓扑控制算法
  • 拆穿名词诈骗!用大白话理解晦涩难懂的AI概念钠
  • 如何用OpCore Simplify在3小时内完成专业级黑苹果配置?
  • Windows Precision Touchpad终极指南:解锁Apple触控板的完整功能
  • ImageGlass:专业级图像查看器的5大高效解决方案
  • 嵌入式Linux学习指南之设备树——Linux内核设备树编译机制深度解析
  • 论文季破局:如何用 AI 十分钟搞定一份高质量开题报告?
  • 5分钟掌握G-Helper:华硕笔记本性能优化终极秘籍
  • 从HC-05到Unity:手把手教你用C#串口类打造稳定蓝牙数据通信(附线程安全避坑指南)
  • 解决conda环境中torch报错libcudnn.so.8缺失的终极指南(附LD_LIBRARY_PATH配置详解)