在目标检测任务中,全连接层(Fully Connected Layers,简称FC层)通常用于最后的输出阶段,尤其是处理每个候选框(或者说是检测框)相关的信息,如类别class、边界框的位置(坐标),以及可能的其他附加信息。
通常,在目标检测任务中,特征图(由卷积神经网络提取的特征)经过一系列的卷积、池化、特征提取后,会被展平(flatten)成一个一维的向量,然后传递到全连接层。
全连接层的作用是将这些特征映射到最终的输出,例如预测目标框的坐标和类别。
全连接层在目标检测中的关键作用是将卷积层提取的高维特征映射到目标检测所需的输出空间,例如:
-
边界框回归(Bounding box regression):用于预测目标边界框的位置。
-
分类(Classification):用于预测每个框内物体的类别。
实现流程
1. 特征提取(通常是卷积层)
首先,我们通过卷积神经网络(CNN)提取图像的特征。假设经过卷积、池化等操作后,得到一个形状为 [B,C,H,W]
的特征图(其中 𝐵是批大小,𝐶是通道数,𝐻和 𝑊是特征图的高和宽)。
2. 展平(Flatten)
在将特征图传递到全连接层之前,我们需要将其展平为一维向量。这个过程通常称为"flatten",是将所有空间维度(高度和宽度)以及通道数压缩为一个长向量。
假设特征图的形状是[B,C,H,W]
,展平后的形状将是 [B,C×H×W]
。
3. 全连接层(FC层)
展平后的特征被输入到全连接层。每个全连接层将对输入进行线性变换,并应用激活函数,最终输出目标检测任务所需要的结果。输出通常包括:
- 每个候选框的类别预测(例如分类为背景、猫、狗等)。
- 每个候选框的位置预测(通常是边界框的坐标:左上角和右下角的 𝑥,𝑦坐标,或者中心点的坐标和宽高)。
全连接层的输出形状将依据任务的需要进行设置。例如,若是进行目标分类,输出可能为类别数量的向量(num=class的个数);若是进行边界框回归,输出将包含框的位置参数(num=4)。
代码实例
通过一个简单的目标检测中全连接网络的实现来讲解。
import torch
import torch.nn as nn
class SimpleObjectDetectionModel(nn.Module):
def __init__(self, num_classes