假设你是学校的一名规划师,校领导只告诉你一句话:“这地方是个操场。”但施工队要动工时,工人却一脸茫然——哪里是跑道?哪里是草坪?哪里是沙坑?哪里是排水沟?校领导那句“这是个操场”只回答了整张图是什么,却没有回答每个位置是什么。这正是计算机视觉里两类任务的区别:分类(Classification)只看整体,语义分割(Semantic Segmentation)要逐块标注。2015年,UC Berkeley 的 Long 等人提出 FCN(Fully Convolutional Network,全卷积网络),它像一支“逐地砖勘察的施工队”,把图像里每一个像素都贴上类别标签,开创了深度学习语义分割的先河。这篇文章,我们就跟随这支施工队,看看他们如何改造操场、如何解决“放大图纸时细节丢失”的难题。
语义分割是计算机视觉从“看懂整体”走向“看懂细节”的必经之路。掌握 FCN,你就掌握了自动驾驶、医学影像、遥感分析等众多场景最底层的“像素级理解”范式,是 CV 工程师的核心基本功。
目录
可视化演示
动态演示FCN的核心机制,通过开始/执行/监控/完成四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
FCN:全卷积网 全卷积网络的核心架构设计 反卷积上采样恢复分辨率 核心机制可视化 FCN整体架构与关键组件
FCN诞生背景:从整图识别到逐块标注
校领导说“这是操场”,施工队却没法动工,因为他们需要知道每一块地砖的用途。这正是语义分割任务的本质:不给整张图贴一个标签,而是给每一个像素贴标签。在 FCN 出现之前,传统方法往往靠滑动窗口加人工设计的特征(颜色、纹理、边缘)来猜测每个区域,像工人蹲在地上用放大镜一块砖一块砖地辨认,既慢又容易出错,精度始终上不去。
与此同时,分类网络(如 AlexNet、VGG)已经在 ImageNet 上大放异彩,但它们只能回答“整张图是什么”。Long 等人敏锐地意识到:分类网络前几层卷积已经在提取丰富的空间特征,为什么不把后面的“经理岗位”全部撤掉,让整支队伍都变成能下到一线的施工员呢?2015 年,他们发表了 FCN,成为第一个端到端训练、端到端推理的深度学习语义分割网络,真正开创了“逐像素理解图像”的先河。
FCN 的出现让语义分割有了统一的评价标准——mIoU(平均交并比)。它的思想是:对每个类别,看预测区域和真实区域“重叠的面积”占“合并的面积”的比例,再对所有类别取平均。就像检查施工队画的跑道区域,和真实跑道重叠越多、多画少画越少,得分就越高。
对施工队来说,mIoU 就像一张“各区域施工合格率”的成绩单,跑道的线画歪了、草坪漏刷了,都会体现在分数里。正因为有了这把统一的尺子,FCN 之后的各种分割模型才能在同一个擂台上公平较量。
- 类别数 $K$一共有多少种类别(比如天空、草地、河流、道路四类),我们要求每类的平均表现,所以要除以 $K$。
- 真正例 $TP_k$第 $k$ 类中“预测对了”的像素数,也就是预测和真实都认为是该类的位置。
- 假正例 $FP_k$ 与假负例 $FN_k$$FP_k$ 是把别的类误标成第 $k$ 类(多画的区域),$FN_k$ 是把第 $k$ 类漏掉了(少画的区域)。
全卷积化改造:全员下放到一线
一个典型的分类 CNN 团队里,卷积层就像一线施工员,边走边记录沿途看到的东西(特征图),而最后的全连接层则像坐在办公室的经理,把前线汇报的所有信息压缩成一份简短的总结(一个类别向量)。经理虽然能给出结论,却把“位置”这个关键信息弄丢了——操场在哪里是跑道、哪里是草坪,总结里完全看不出来。
FCN 的改造方案非常彻底:把最后几层全连接层全部扔掉,换成卷积层。具体来说,VGG 等网络最后的全连接层被替换成 1×1 卷积,而 1×1 卷积只是在每个空间位置上做一次“小范围投票”,不会把整个图压平。这样一来,无论输入多大,网络输出的特征图都保留着完整的空间结构——相当于每个施工员都下放到操场的一小块区域,各管一段,位置信息分毫不丢。
全卷积化还有一个额外的好处:输入图像尺寸不再受限。全连接层要求输入向量的长度固定,就像经理只接受固定格式的报表;而卷积层是滑动窗口在图上移动,无论图大图小都能处理。于是 FCN 可以吃下任意分辨率的航拍图,输出同样分辨率的预测图。一次卷积操作可以写成:
施工队全员下放后,每个卷积层都像一批带着“记录板”的巡查员,在自己的责任区里提取局部特征并标记位置。原始图像经过层层卷积,空间结构被保留下来,为后续逐像素分类打下了最重要的基础——位置信息没有丢。
- 输入特征图 $x$来自上一层的二维特征,比如 $8 \times 8$ 的操场航拍图。
- 卷积核 $\mathbf{W}$ 与互相关运算 $\ast$$\mathbf{W}$ 是一个小尺寸的权重矩阵(如 $3 \times 3$),$\ast$ 表示它在 $x$ 上滑动,逐窗口做加权求和。
- 偏置 $b$ 与激活函数 $\sigma$$b$ 是每个输出位置的偏移量,$\sigma$(如 ReLU)把负值截断,让网络具备非线性表达能力。
反卷积上采样:智能放大镜
施工队想绘制一张 1:1000 的操场规划图,但他们在前期勘察时为了看清整体布局,先退到远处画了一张 1:2000 的缩略图。现在要把缩略图放大回 1:1000,直接用普通放大镜(最近邻插值)会看到明显的马赛克,用简单模糊(双线性插值)则会让线条变糊。FCN 需要一个更聪明的“智能放大镜”——反卷积(Deconvolution),也叫转置卷积(Transposed Convolution)。
反卷积并不是卷积的逆运算(后面误区会细讲),它更像一个“可学习的放大规则”。普通卷积是“多对一”:一个小窗口压成一个值;反卷积是“一对多”:一个值按照可学习的权重扩散到一个更大的区域。网络在训练过程中会不断调整这些扩散权重,学会“放大时该怎么补细节”。除了反卷积,FCN 也尝试过双线性插值作为上采样手段——它在计算上更便宜,但参数不可学习,所以主推方案仍是反卷积。
上采样后特征图的尺寸有一套明确的计算公式,假设输入边长是 $i$,步长是 $s$,卷积核大小是 $k$,填充是 $p$,输出边长 $o$ 为:
施工队的“智能放大镜”把缩略图一点点摊回原始尺寸,虽然放大后的边缘还不够清晰,但至少每一块地砖的位置都回来了。放大镜的规则是从数据里学出来的,总比手工瞎猜靠谱得多——不过,光靠放大还不够,更精细的细节还需要靠后面的“跳跃连接”来补。
- 输入尺寸 $i$ 与步长 $s$$i$ 是放大前特征图的边长(如 $4$),$s$ 是上采样步长(如 $2$),决定了放大倍数。
- 核大小 $k$ 与填充 $p$$k$ 决定每个输入值扩散到多大区域,$p$ 是输出边缘的裁剪量,用来平衡尺寸。
- 输出尺寸 $o$把具体数值代入就能算出结果。比如 $i=4, s=2, k=3, p=1$,则 $o = (4-1)\times 2 + 3 - 2 = 7$。
像素级预测:每块地砖盖章
当特征图被恢复到原始分辨率后,施工队终于可以“盖章”了。所谓分割,就是给图像上每一个位置都分配一个类别:这块地砖是跑道、那块是草坪、远处是沙坑。在 FCN 中,这个“盖章”动作由一个 1×1 卷积完成——它把每个空间位置上的特征向量映射成 $C$ 个类别的得分,就像在每个位置放了一台小打印机,只在该位置打印该位置的类别标签。
FCN 的整个训练过程是端到端的:输入原始图像,输出逐像素类别图,中间所有卷积、反卷积的参数一起由损失函数驱动更新。训练时,网络对每个像素都输出一个概率分布(经过 softmax 归一化),然后与真实的像素标签计算交叉熵损失。交叉熵衡量的是“预测概率分布”与“真实标签分布”之间的差距——如果模型在某个像素上对正确类别给的概率越接近 1,损失就越小。
盖章员每预测一块地砖,就与真实图纸上的标注对比一次,错了就挨批评。经过成千上万次“对比—改正—再对比”,盖章员的准确率越来越高,最终能端到端地完成“看图→盖章”的整套流程,直接输出一张完整的逐像素分割图。
- 像素总数 $N$ 与类别数 $C$一张 $H \times W$ 的图有 $N = H \times W$ 个像素点,每个点都要在 $C$ 个类别里做选择。
- 真实标签 $y_n^c$第 $n$ 个像素的真实类别是 one-hot 编码——如果它属于第 $c$ 类,则 $y_n^c = 1$,否则为 $0$。
- 预测概率 $\hat{y}_n^c$ 与对数求和网络对第 $n$ 个像素预测的属于第 $c$ 类的概率,$\log$ 是对数运算。
与分类网络差异:评估师与测绘队
我们可以把分类网络想象成一位“快速评估师”:他远远地看了一眼操场,立刻得出结论“这是一个运动场”。评估师反应快,但他不会告诉你足球门在哪、跑道线画得直不直。而 FCN 是一支“精细测绘队”:他们扛着仪器走遍操场的每一平方米,不仅知道这是操场,还能画出每一块区域的功能分区图。
从数学角度看,两者的输出空间完全不同。分类网络把 $H \times W \times 3$ 的彩色图像压缩成一个 $C$ 维向量(类别得分),空间的“长宽”维度被全局池化或全连接层抹掉了;而分割网络把同样的输入映射为 $H \times W \times C$ 的张量——每个空间位置都保留下来,每个位置都有 $C$ 个类别的得分。二者的映射关系可以写成:
评估师适合“快速定级”,测绘队适合“精细施工”。自动驾驶、医学影像这类任务,光知道“图里有一辆车”远远不够,还必须知道车具体占了哪些像素——这正是分割网络不可替代的原因,也是 FCN 在架构上与分类网络最本质的分水岭。
- 输入空间 $\mathbb{R}^{H \times W \times 3}$高 $H$、宽 $W$、3 个颜色通道的彩色图像,这是两个网络共同的输入。
- 分类映射 $f_{cls}$把整张图映射到 $C$ 维概率向量,空间位置全部被“压扁”,输出粒度是整图。
- 分割映射 $f_{seg}$把整张图映射到 $H \times W \times C$ 的张量,输出粒度是每个像素。
跳跃连接优化:找回丢失的细节
反卷积把缩略图放大回原尺寸后,施工队发现一个头疼的问题:大块区域(比如整片草坪)分类得很准,可到了跑道与草坪的交界处,边缘总是歪歪扭扭,像复印机反复放大后的图纸,线条发虚。原因在于,网络前期的层反复池化下采样,把细小的轮廓信息磨损掉了;等到反卷积想把这些细节“补”回来时,信息已经永久丢失。
总设计师的解决办法很巧妙:别扔早期的高清草图! 浅层卷积的特征图分辨率高、轮廓信息丰富;深层特征图分辨率低但语义信息强。如果把两者叠加起来,就像把原始高清草图和标注好的功能分区图叠在一起看,既有了“哪里是什么”的语义,又有了“边界在哪里”的细节。FCN 团队由此提出了跳跃连接(Skip Connection)架构,把不同层级的特征图在通道方向拼接(或逐元素相加)后,再进行上采样。
融合操作可以用简洁的公式表达——以 FCN-16s 为例,深层特征(conv7)先 2 倍上采样,再与较浅的池化层特征(pool4)逐元素相加:
经过这一番“草图叠印”,FCN-16s 的边界明显比 FCN-32s 干净。团队更进一步,把 pool3 也纳入融合,得到经典的 FCN-8s——分割效果最好,也成了 FCN 系列的代名词。施工队终于明白:好的图纸不是靠放大镜硬放出来的,而是靠原始草图 + 功能标注叠加出来的。
- 深层特征 $f_{conv7}$来自网络最深处的卷积层,语义抽象度高,知道“这是跑道区域”,但分辨率低、边界粗。
- 上采样操作 $\uparrow 2$把深层特征图的尺寸放大 2 倍,使它能与较浅层的特征图在空间尺寸上对齐。
- 浅层特征 $f_{pool4}$ 与逐元素相加 $+$$f_{pool4}$ 分辨率高、边缘细节清晰,将两个特征图逐元素相加,完成“语义 + 细节”的融合。
FCN价值影响:开创分割新范式
FCN 发表后,作者团队把代码和预训练模型全部开源。这就像施工队不仅完成了操场改造,还把整套“勘察—规划—施工”的标准流程印成手册免费发放。整个计算机视觉社区沸腾了——原来分割可以像分类一样端到端地训练,原来“下采样再上采样”的编码器-解码器结构这么有效。从此,语义分割从“手工特征的时代”正式迈入“深度学习的时代”。
FCN 的影响是奠基性的:U-Net 把它推广到医学影像(并加入了更密集的跳跃连接),SegNet 改进了上采样方式(用反池化),DeepLab 引入了空洞卷积解决分辨率问题,PSPNet 用金字塔池化聚合多尺度上下文……几乎所有后来的分割网络都能看到 FCN 的影子。如今这项技术已经落地到自动驾驶的道路分割、遥感影像的地物分类、医疗影像的器官勾画等场景,成为现代 CV 工程师的必备武器。
FCN 留下最重要的遗产,是把“像素级理解”变成了可衡量、可优化、可复制的工程范式。而衡量它的尺子,正是我们第一节提到的那把“成绩单”——mIoU:
操场改造项目的施工手册被一代代工程师传阅、改进,从 FCN 到 U-Net 再到 DeepLab,每支新队伍都在 FCN 的地基上添砖加瓦。理解了 FCN,你不仅掌握了一个经典网络,更掌握了整个语义分割领域的“第一性原理”。
- 所有类别的平均对 $K$ 个类别逐一计算 IoU 后取平均,避免某个大类主导成绩。
- 单类 IoU 的分子分母分子 $TP_k$ 是交并比中的“交集”,分母三项是“并集”(预测对 + 多预测 + 漏预测),两者之比就是该类别的准确覆盖率。
AI 应用场景
自动驾驶道路分割
阶段:感知层语义理解
解决的问题:传统摄像头方案只能检测出“前方有车”或“车道线位置”,但无法判断路面、人行道、路肩、天空的精确边界。FCN 逐像素分类让车辆知道“哪些像素是可行区域、哪些是障碍物边缘”,为路径规划提供像素级安全边界。
具体案例:一辆自动驾驶测试车行驶在城区,车载 GPU 上的 FCN 模型实时对摄像头画面做分割:路面标为灰色、车辆标为红色、行人标为黄色、天空标为蓝色。当分割结果显示“前方 5 米处有红色像素带”时,规划模块立即触发减速。
医学影像器官勾画
阶段:辅助诊断与治疗规划
解决的问题:医生手动在 CT 或 MRI 上逐层勾画肿瘤和器官边界,耗时且容易疲劳。基于 FCN 的分割模型可以自动完成像素级标注,把医生从重复劳动中解放出来,专注诊断决策。
具体案例:某医院引入 FCN 模型对肝脏 CT 图像做分割,模型自动标出肝脏、血管和肿瘤区域,医生只需在模型输出的分割图上做少量修正。原本需要 40 分钟的勾画工作缩短到 5 分钟,勾画一致性也大幅提升。
遥感图像地物分类
阶段:遥感数据解译
解决的问题:传统遥感解译靠人工目视判读,成本高、效率低。FCN 对高分辨率遥感图像做逐像素分类,可自动区分建筑、农田、水体、林地,支撑国土普查、灾害评估等任务。
具体案例:某地理信息公司用 FCN 对卫星影像做城市绿地普查,输入一张 1024×1024 的影像,输出逐像素的“建筑/道路/绿地/水体”分类图,一天能处理过去一个团队一周才能完成的图幅量。
Python 演示
"""A minimal FCN-style semantic segmentor built with NumPy. This is a teaching implementation of the core ideas of FCN:1. Fully convolutional: only conv/upsample ops, no dense layers.2. Downsampling then upsampling to output pixel-level labels.3. Skip-like connection (simple): fuse fine and coarse features.""" import numpy as np def conv2d(img, kernel, stride=1, pad=0): """2D convolution with zero padding.""" h, w = img.shape k = kernel.shape[0] if pad > 0: img = np.pad(img, pad, mode='constant') out_h = (img.shape[0] - k) // stride + 1 out_w = (img.shape[1] - k) // stride + 1 out = np.zeros((out_h, out_w)) for i in range(out_h): for j in range(out_w): patch = img[i * stride:i * stride + k, j * stride:j * stride + k] out[i, j] = np.sum(patch * kernel) return out def relu(x): """ReLU activation.""" return np.maximum(x, 0.0) def max_pool2x2(x): """2x2 max pooling downsampling.""" h, w = x.shape return x.reshape(h // 2, 2, w // 2, 2).max(axis=(1, 3)) def bilinear_upsample(x, scale=2): """Bilinear upsampling (simplified).""" h, w = x.shape H, W = h * scale, w * scale out = np.zeros((H, W)) for i in range(H): for j in range(W): y = i / scale - 0.5 xv = j / scale - 0.5 y0 = max(int(np.floor(y)), 0) x0 = max(int(np.floor(xv)), 0) y1 = min(y0 + 1, h - 1) x1 = min(x0 + 1, w - 1) dy = y - y0 dx = xv - x0 top = x[y0, x0] * (1 - dx) + x[y0, x1] * dx bot = x[y1, x0] * (1 - dx) + x[y1, x1] * dx out[i, j] = top * (1 - dy) + bot * dy return out def make_scene(size=16): """Synthesize a simple scene: sky / grass / river / road.""" img = np.zeros((size, size)) for i in range(size): for j in range(size): if i < size * 0.25: img[i, j] = 0.2 # sky elif i >= size * 0.75: img[i, j] = 0.9 # road elif abs(i - j) < 2: img[i, j] = 0.5 # river else: img[i, j] = 0.7 # grass return img def tiny_fcn_segment(img): """Run a tiny FCN segmentor on a single-channel image.""" edge_k = np.array([[0, 0, 0], [0, 1, 0], [0, 0, 0]], dtype=float) f1 = relu(conv2d(img, edge_k, pad=1)) p1 = max_pool2x2(f1) blur = np.ones((3, 3)) / 9.0 f2 = relu(conv2d(p1, blur, pad=1)) up = bilinear_upsample(f2, scale=2) labels = np.zeros_like(up, dtype=int) labels[up < 0.35] = 0 labels[(up >= 0.35) & (up < 0.6)] = 2 labels[(up >= 0.6) & (up < 0.8)] = 1 labels[up >= 0.8] = 3 return labels def iou_per_class(pred, truth, num_classes=4): """Mean IoU over classes.""" ious = [] for c in range(num_classes): inter = np.logical_and(pred == c, truth == c).sum() union = np.logical_or(pred == c, truth == c).sum() ious.append(inter / union if union > 0 else 1.0) return np.mean(ious) if __name__ == "__main__": np.random.seed(42) scene = make_scene(16) gt = np.zeros_like(scene, dtype=int) gt[scene < 0.35] = 0 gt[(scene >= 0.35) & (scene < 0.6)] = 2 gt[(scene >= 0.6) & (scene < 0.8)] = 1 gt[scene >= 0.8] = 3 pred = tiny_fcn_segment(scene) m = iou_per_class(pred, gt) print("mIoU on synthetic scene:", round(m, 3))
conv2d(img, kernel, stride=1, pad=0)手工实现卷积的滑动窗口加权求和,对应 FCN 中“卷积层保留空间信息”的核心操作。max_pool2x2(x)用 reshape 技巧实现 2×2 最大池化,对应 FCN 中“下采样压缩特征”的后退一步看整体。bilinear_upsample(x, scale=2)双线性插值上采样,对应 FCN 中“反卷积/插值把特征图放大回原尺寸”。make_scene(16)合成一张 16×16 的“操场航拍图”,值域设为 0.2/0.5/0.7/0.9 分别代表天空、河流、草地、道路。tiny_fcn_segment(img)整个极简 FCN 前向流程:边缘卷积 → 池化 → 平滑卷积 → 上采样 → 阈值分类,输出逐像素标签图。iou_per_class(pred, truth)计算每一类的 IoU 后取平均,对应正文的 mIoU 评估公式。if __name__ == "__main__":程序入口:生成场景、构建真值、运行分割、打印 mIoU 分数。
常见误区
误区我一直以为 FCN 的全称是 Fully Connected Network,就是用很多全连接层做分割的网络,名字里的 FC 指全连接。
正解恰恰相反,FCN(Fully Convolutional Network)的核心思想是去除所有全连接层,让网络只由卷积、池化、反卷积组成。全连接层会把二维特征图压成一维向量,导致空间位置信息丢失;而全卷积结构让每个像素都能独立输出分类结果。名字里的 FC 是 “Fully Convolutional“ 的缩写,不是 ”Fully Connected”。
为何常见:CNN 和 FC 这两个缩写太常见,初学者看到 FCN 很容易望文生义,加上“FC = 全连接”的印象根深蒂固,就产生了反向理解。
误区反卷积既然叫 Deconvolution,那它应该能像减法是加法的逆运算一样,把卷积后的特征图完美恢复成原始图像。
正解反卷积(转置卷积)只是在尺寸上做了“反向”操作——把小特征图放大,但它并不恢复卷积前的数值。它学习到的权重是独立参数,放大结果只是模型学到的特征映射,不是原始图像的精确还原。如果把它当逆运算,就像把照片放大后以为能看到照片里没拍到的细节,实际只是用算法“脑补”。
为何常见:"Deconvolution" 这个命名本身就带有迷惑性,很多人按数学逆运算直觉理解,忽略了深度学习中它只是一种可学习的上采样层。
误区语义分割不就是把图像切成几块,每块给个分类标签吗?和普通的图像分类没本质区别,只是多分了几块而已。
正解分类对整张图输出一个标签,不关心任何空间细节;语义分割对每个像素输出标签,输出是一个与输入同分辨率的标签图。FCN 的每个输出位置都对应输入图像的一个像素位置,空间信息必须完整保留。这相当于评估师只写一句“这是操场”,而测绘队要标出操场上每一块砖的用途,工作量和信息量完全不同。
为何常见:人们习惯用“分块”来理解分割,忽略了像素级是“逐点标注”而非“切大块”,容易低估空间信息保留的难度。
误区跳跃连接就是把浅层和深层的图直接拼在一起,谁都会做,FCN 出名靠的是运气。
正解跳跃连接解决的是一个非常核心的矛盾——深层特征语义强但分辨率低,浅层特征分辨率高但语义弱。怎么选融合层级、怎么对齐尺寸、按什么比例融合,都需要仔细设计。FCN-32s 到 FCN-8s 的精度提升证明了这种融合的分割效果是实打实的,后来 U-Net 的跳跃连接更是成了医学分割的标配。
为何常见:从代码实现上看拼接操作很简单,但背后的“为什么要融合不同层”的动机和设计权衡容易被忽略,导致低估其价值。
面试题
Q1. FCN 的全称是什么?
- A.全连接网络
- B.全卷积网络← 正确答案
- C.快速分类网络
- D.特征编码网络
答案:B。FCN 是 Fully Convolutional Network 的缩写,即全卷积网络。它的核心是去掉全连接层,全部使用卷积层,因此 B 正确。A 是常见误解(Fully Connected),C、D 是干扰项,不存在这两个网络称谓。
Q2. FCN 为什么要去掉全连接层?
- A.计算消耗巨大
- B.丢失空间位置← 正确答案
- C.只能输出向量
- D.无法使用 GPU
答案:B。全连接层会把二维特征图压成一维向量,彻底抹掉像素之间的空间位置关系,而这正是语义分割最需要的信息。B 正确。A、C 只是全连接层的附加特征而非核心原因,D 说法错误,全连接层也能在 GPU 上运行。
Q3. 语义分割的输出是什么?
- A.单一分类标签
- B.边界框坐标
- C.逐像素类别图← 正确答案
- D.固定长度向量
答案:C。语义分割对每个像素预测类别,输出与输入同分辨率的标签图,C 正确。A 是图像分类的输出,B 是目标检测的输出,D 是特征向量或分类头的输出形式。
Q4. 反卷积上采样中,输入尺寸 i=4、步长 s=2、核大小 k=3、填充 p=1,输出尺寸 o 为多少?
- A.6个像素
- B.7个像素← 正确答案
- C.8个像素
- D.9个像素
答案:B。根据反卷积尺寸公式 o = (i-1)×s + k - 2p,代入 i=4、s=2、k=3、p=1,得 o = (4-1)×2 + 3 - 2 = 7。因此 B 正确。A、C、D 都是代入错误或混淆了普通卷积的尺寸公式。
Q5. FCN-8s 中的"8"代表什么?
- A.8层卷积网络
- B.8倍上采样输出← 正确答案
- C.8个目标类别
- D.8个像素步长
答案:B。FCN-8s 是指最终输出相对原始输入缩小 8 倍后进行 8 倍上采样得到分割图,并通过融合 pool3、pool4、conv7 的特征来提升边界精度。B 正确。A、C、D 分别混淆了网络深度、类别数和步长概念。
Q6. FCN 训练时通常使用什么损失函数?
- A.均方误差损失
- B.交叉熵损失函数← 正确答案
- C.铰链损失函数
- D.对比损失函数
答案:B。FCN 对每个像素做分类,配合 softmax 使用交叉熵损失,衡量预测概率分布与真实 one-hot 标签的差距,B 正确。均方误差更适合回归任务,铰链损失常用于 SVM,对比损失用于度量学习。
Q7. 分类网络和分割网络在输出维度上的核心区别是什么?
- A.分类输出 1×1×C,分割输出 H×W×C← 正确答案
- B.分类输出 H×W×C,分割输出 1×1×C
- C.两者都输出 1×1×C 的向量
- D.两者都输出 H×W×C 的张量
答案:A。分类网络经过全局池化或全连接层将空间维度压扁,输出 1×1×C 的类别得分;分割网络保留空间网格,输出 H×W×C 的逐像素得分,A 正确。B 恰好说反,C、D 忽略了二者的结构性差异。
Q8. 关于 FCN 与分类 CNN 的区别,下列说法正确的是?
- A.保留空间维度信息← 正确答案
- B.逐像素输出类别标签← 正确答案
- C.输入必须是正方形图像
- D.采用全连接层输出结果
答案:AB。FCN 全卷积化后保留空间位置,逐像素输出类别图,A、B 正确。FCN 没有全连接层,可以处理任意尺寸输入,C 错误;D 恰好是 FCN 摒弃的做法。
Q9. 关于 FCN 的跳跃连接,下列说法正确的是?
- A.融合浅层轮廓细节← 正确答案
- B.提升边界分割精度← 正确答案
- C.只聚合深层语义信息
- D.上采样倍数越大效果越好
答案:AB。跳跃连接把浅层的高分辨率轮廓信息与深层的强语义信息融合,显著改善边界质量,A、B 正确。C 说反了——只聚合深层反而会丢失细节;D 错误,单纯放大上采样倍数并不能补回下采样丢失的信息,FCN-32s 到 FCN-8s 的提升靠的是特征融合而非更大倍数。
Q10. 关于反卷积(转置卷积),下列说法正确的是?
- A.权重参数可学习← 正确答案
- B.空间上近似卷积反向← 正确答案
- C.能完整复原输入像素值
- D.输出尺寸可通过公式推导← 正确答案
答案:ABD。反卷积的参数在训练中学习,计算方式可看作卷积的“空间反向”(前向传播和反向传播互换),输出尺寸由公式 o=(i-1)s+k-2p 决定,A、B、D 正确。C 错误——反卷积只恢复尺寸,不恢复数值,不是数学意义上的逆运算。