RetinaNet 分类头和回归头的网络结构分析

news/2024/10/16 20:04:19 标签: 分类, 回归, 数据挖掘

RetinaNet 是由 Facebook AI Research(FAIR)在 2017 年提出的一种高效的一阶段(one-stage)目标检测算法。相比于两阶段(two-stage)方法,RetinaNet 通过引入 Focal Loss 解决了类别不平衡问题,从而在保持高检测速度的同时,实现了与两阶段方法相媲美的检测精度。

本文将深入解析 RetinaNet 的分类回归的网络结构,并详细说明每一层的输入输出尺寸。

RetinaNet 总体架构概述

RetinaNet 主要由以下几个部分组成:

  1. 主干网络(Backbone):通常使用 ResNet(如 ResNet-50 或 ResNet-101)作为特征提取器。
  2. 特征金字塔网络(Feature Pyramid Network, FPN):在主干网络的不同层级生成多尺度的特征图。
  3. 分类头(Classification Head):用于对每个锚框(anchor)进行类别预测。
  4. 回归头(Regression Head):用于对每个锚框进行边界框回归(位置调整)。

下图展示了 RetinaNet 的整体架构、分类头和回归头的结构(图来自于B站up:霹雳吧啦Wz):

在这里插入图片描述
在这里插入图片描述

特征金字塔网络(FPN)

在深入讨论分类头和回归头之前,首先简要介绍 FPN 的输出。FPN 从主干网络的不同层级提取特征,并生成多个尺度的特征图,通常标记为 P3 到 P7,对应不同的下采样率(stride):

  • P3: 下采样率 8,尺寸为 ( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )
  • P4: 下采样率 16,尺寸为 ( H 16 × W 16 × 256 \frac{H}{16} \times \frac{W}{16} \times 256 16H×16W×256 )
  • P5: 下采样率 32,尺寸为 ( H 32 × W 32 × 256 \frac{H}{32} \times \frac{W}{32} \times 256 32H×32W×256 )
  • P6: 下采样率 64,尺寸为 ( H 64 × W 64 × 256 \frac{H}{64} \times \frac{W}{64} \times 256 64H×64W×256)
  • P7: 下采样率 128,尺寸为 ( H 128 × W 128 × 256 \frac{H}{128} \times \frac{W}{128} \times 256 128H×128W×256)

其中,( H ) 和 ( W ) 分别为输入图像的高度和宽度。

分类头和回归头的网络结构

RetinaNet 的分类头和回归头结构基本相同,均由多个卷积层堆叠而成,但在最后的输出层有所不同。以下将分别详细介绍这两个头部的结构及其每一层的输入输出尺寸。

分类头(Classification Head)

分类头的任务是对每个锚框进行类别预测。其结构如下:

  1. 共享卷积层(Shared Convolutional Layers):

    • 层 1: 3x3 卷积,输入通道数 256,输出通道数 256,步幅 1,填充 1
    • 层 2: 3x3 卷积,输入通道数 256,输出通道数 256,步幅 1,填充 1
    • 层 3: 3x3 卷积,输入通道数 256,输出通道数 256,步幅 1,填充 1
    • 层 4: 3x3 卷积,输入通道数 256,输出通道数 256,步幅 1,填充 1

    每一层后均接 ReLU 激活函数。

  2. 分类卷积层(Classification Convolutional Layer):

    • 3x3 卷积,输入通道数 256,输出通道数 ( K × C K \times C K×C ),步幅 1,填充 1

    其中:

    • ( K ) 为每个位置的锚框数量(通常为 9)。
    • ( C ) 为类别数量(不包括背景类)。
  3. 输出层:

    • 最终输出通过 sigmoid 激活函数,生成每个锚框对应的类别概率。

输入输出尺寸示例(以 P3 为例,假设输入尺寸为 ( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 ):

层级输入尺寸卷积参数输出尺寸
共享层 1( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )3x3, stride=1, padding=1, 256 通道( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )
ReLU同上--
共享层 2( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )3x3, stride=1, padding=1, 256 通道( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )
ReLU同上--
共享层 3( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )3x3, stride=1, padding=1, 256 通道( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )
ReLU同上--
共享层 4( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )3x3, stride=1, padding=1, 256 通道( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )
ReLU同上--
分类卷积层( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )3x3, stride=1, padding=1, ( K × C K \times C K×C ) 通道( H 8 × W 8 × ( K × C ) \frac{H}{8} \times \frac{W}{8} \times (K \times C) 8H×8W×(K×C) )
Sigmoid同上--

回归头(Regression Head)

回归头的任务是对每个锚框进行边界框回归,预测边界框的偏移量。其结构与分类头基本相同,唯一区别在于最后的输出层。

  1. 共享卷积层(Shared Convolutional Layers):

    • 层 1: 3x3 卷积,输入通道数 256,输出通道数 256,步幅 1,填充 1
    • 层 2: 3x3 卷积,输入通道数 256,输出通道数 256,步幅 1,填充 1
    • 层 3: 3x3 卷积,输入通道数 256,输出通道数 256,步幅 1,填充 1
    • 层 4: 3x3 卷积,输入通道数 256,输出通道数 256,步幅 1,填充 1

    每一层后均接 ReLU 激活函数。

  2. 回归卷积层(Regression Convolutional Layer):

    • 3x3 卷积,输入通道数 256,输出通道数 ( K × 4 K \times 4 K×4 ),步幅 1,填充 1

    其中:

    • ( K ) 为每个位置的锚框数量(通常为 9)。
    • 4 对应边界框的四个偏移量(中心点偏移量 ( t x , t y t_x, t_y tx,ty ),宽度和高度的对数尺度偏移量 ( t w , t h t_w, t_h tw,th )。
  3. 输出层:

    • 最终输出通常不经过激活函数,直接输出回归偏移量。

输入输出尺寸示例(以 P3 为例,假设输入尺寸为 ( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 ):

层级输入尺寸卷积参数输出尺寸
共享层 1( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )3x3, stride=1, padding=1, 256 通道( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )
ReLU同上--
共享层 2( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )3x3, stride=1, padding=1, 256 通道( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )
ReLU同上--
共享层 3( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )3x3, stride=1, padding=1, 256 通道( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )
ReLU同上--
共享层 4( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )3x3, stride=1, padding=1, 256 通道( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )
ReLU同上--
回归卷积层( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )3x3, stride=1, padding=1, ( K × 4 K \times 4 K×4 ) 通道( H 8 × W 8 × ( K × 4 ) \frac{H}{8} \times \frac{W}{8} \times (K \times 4) 8H×8W×(K×4) )
无激活函数同上--

注:在此示例中,假设类别数量 ( C = 80 ),则分类卷积层输出通道数为 ( 9 × 80 = 720 9 \times 80 = 720 9×80=720)。

具体示例:以 P3 特征层为例

假设输入图像尺寸为 ( 512 × 512 512 \times 512 512×512 ),则 P3 的尺寸为 ( 64 × 64 × 256 64 \times 64 \times 256 64×64×256 )(即 ( 512 8 × 512 8 × 256 \frac{512}{8} \times \frac{512}{8} \times 256 8512×8512×256 ))。

分类头的层级尺寸

层级输入尺寸卷积参数输出尺寸
共享层 164 × 64 × 2563x3, stride=1, padding=1, 256 通道64 × 64 × 256
ReLU64 × 64 × 256--
共享层 264 × 64 × 2563x3, stride=1, padding=1, 256 通道64 × 64 × 256
ReLU64 × 64 × 256--
共享层 364 × 64 × 2563x3, stride=1, padding=1, 256 通道64 × 64 × 256
ReLU64 × 64 × 256--
共享层 464 × 64 × 2563x3, stride=1, padding=1, 256 通道64 × 64 × 256
ReLU64 × 64 × 256--
分类卷积层64 × 64 × 2563x3, stride=1, padding=1, ( 9 × C 9 \times C 9×C ) 通道64 × 64 × ( 9C )
Sigmoid64 × 64 × ( 9C )--

回归头的层级尺寸

层级输入尺寸卷积参数输出尺寸
共享层 164 × 64 × 2563x3, stride=1, padding=1, 256 通道64 × 64 × 256
ReLU64 × 64 × 256--
共享层 264 × 64 × 2563x3, stride=1, padding=1, 256 通道64 × 64 × 256
ReLU64 × 64 × 256--
共享层 364 × 64 × 2563x3, stride=1, padding=1, 256 通道64 × 64 × 256
ReLU64 × 64 × 256--
共享层 464 × 64 × 2563x3, stride=1, padding=1, 256 通道64 × 64 × 256
ReLU64 × 64 × 256--
回归卷积层64 × 64 × 2563x3, stride=1, padding=1, ( 9 × 4 9 \times 4 9×4 ) 通道64 × 64 × 36
无激活函数64 × 64 × 36--

注:在此示例中,假设类别数量 ( C = 80 ),则分类卷积层输出通道数为 ( 9 × 80 = 720 9 \times 80 = 720 9×80=720)。

多尺度特征图的处理

RetinaNet 使用 FPN 生成多个尺度的特征图(P3-P7),每个特征图都会通过独立的分类头和回归头进行处理。因此,对于每个特征图,分类头和回归头的网络结构和层级尺寸类似,只是输入特征图的尺寸不同。

以 P4(下采样率 16,尺寸 ( H 16 × W 16 × 256 \frac{H}{16} \times \frac{W}{16} \times 256 16H×16W×256 ))为例,其分类头和回归头的每一层输入输出尺寸将是 ( H 16 × W 16 × 256 \frac{H}{16} \times \frac{W}{16} \times 256 16H×16W×256 ),最终输出为 ( H 16 × W 16 × ( 9 C ) \frac{H}{16} \times \frac{W}{16} \times (9C) 16H×16W×(9C) )(分类)和 ( H 16 × W 16 × 36 \frac{H}{16} \times \frac{W}{16} \times 36 16H×16W×36 )(回归)。

总结

RetinaNet 的分类头和回归头采用了相同的共享卷积层结构,具体如下:

  • 共享卷积层:4 个 3x3 卷积层,每层 256 个通道,步幅 1,填充 1,后接 ReLU 激活。
  • 输出卷积层
    • 分类:1 个 3x3 卷积层,输出通道数为 ( K × C K \times C K×C )(通常为 9×类别数),后接 sigmoid 激活函数。
    • 回归:1 个 3x3 卷积层,输出通道数为 ( K × 4 K \times 4 K×4 )(9×4),不经过激活函数。

每个特征图(P3-P7)都会独立地通过分类头和回归头进行处理,从而实现多尺度的目标检测。

疑问

我在思考检测头的结构时,曾经问过一个现在看来可笑的问题:我觉得检测头的输出应该是 1 × 1 × 9 C 1\times1\times9C 1×1×9C,这样9C个通道,就是9C个数值,代表了每一种框被分类为每一类的概率,可为什么检测头的输出是 ( H 8 × W 8 × 256 \frac{H}{8} \times \frac{W}{8} \times 256 8H×8W×256 )呢?

Answer: 如果分类头的输出是 1 × 1 × 9 C 1\times1\times9C 1×1×9C,这意味着整个特征图只生成一个锚框的分类概率,这与 RetinaNet 的设计理念不符。RetinaNet 需要在图像的每一个空间位置上预测多个锚框,以便覆盖不同的位置和尺度的目标。所以实际上,该层特征图的尺寸是 H 8 × W 8 \frac{H}{8} \times \frac{W}{8} 8H×8W ,一共有 H 8 × W 8 \frac{H}{8} \times \frac{W}{8} 8H×8W这么多个像素,每个像素都要预测9个anchor属于某一类别的概率。(我的疑问完全是因为自己格局小了)


http://www.niftyadmin.cn/n/5708466.html

相关文章

1.计算机网络_基本知识

基本知识 计算机网络的类别: 1、按作用范围来分类 2、按网络的使用者来分类 什么是计算机网络: 计算机网络由若干个节点和链接这些节点的链路组成,节点可以是计算机、集线器、交换机、路由器等。互联网络是多个网络通过路由器连接在了一起…

C语言[函数嵌套找大数]

输出4个整数&#xff0c;找到其中最大的数 &#xff08;使用函数嵌套调用来处理&#xff09; 代码说明: 使用一个主函数main 两个调用函数max4和max2 max4是4个数中最大的&#xff0c;max2是两个数中最大的&#xff0c;max4是将max2嵌套调用 #include <stdio.h> int …

哪款宠物空气净化器性价比高?希喂、米家和范罗士哪款更好?

这次我真的不是很想抱怨&#xff0c;是我男朋友真的很过分&#xff01;真的很过分&#xff0c;差点让我们两个分道扬镳。先听我说&#xff0c;这不是我和他都嫌家里太安静了吗&#xff0c;每天下班后两个人吃完饭就各玩各的手机&#xff0c;生活太无趣了&#xff0c;加上这几年…

windows mysql 8.0版本重置root密码

1.停止mysql服务 以管理员运行cmd 2.安全模式启动 mysqld --console --skip-grant-tables --shared-memory 3.修改密码 再开个cmd窗口就可以进入了&#xff1a;mysql 先进入mysql database&#xff1a;use mysql 修改密码&#xff1a;ALTER USER rootlocalhost IDENTIFIED …

软件架构师 PV

PV操作与生产者消费者问题是操作系统中进程管理和同步机制的重要概念。以下是对PV操作以及生产者消费者问题的详细解释&#xff1a; 一、PV操作 PV操作由P操作原语和V操作原语组成&#xff0c;这两个原语是不可中断的过程&#xff0c;它们对信号量进行操作。 P操作&#xff…

serv00 恢复如初 清理 回到刚注册状态 重生

内容介绍 本期主要介绍如何将serv00恢复到刚刚注册时的初始状态, 不管你是搭建了节点还是建立了个人博客网站, 使用本期介绍的方法, 都可以将已经写入了内容或者混乱的serv00重置到刚刚注册时的状态. 更多内容&#xff1a;https://lzphy.top/ 1 清除PM2进程 列出进程清单 …

Arthas常用的命令(三)--monitor、jad 、stack

monitor&#xff1a;监控方法的执行情况 监控指定类中方法的执行情况 用来监视一个时间段中指定方法的执行次数&#xff0c;成功次数&#xff0c;失败次数&#xff0c;耗时等这些信息 参数说明 方法拥有一个命名参数 [c:]&#xff0c;意思是统计周期&#xff08;cycle of ou…

认识Java的异常

异常机制 异常机制指的是程序出现错误时&#xff0c;程序的处理方式。 程序的错误分为三种&#xff1a; 编译错误&#xff1a;由于没有遵循对于语言的语法规则&#xff0c;编辑器可以自动发现并提示的错误位置和原因。逻辑错误&#xff1a;程序没有按照预期的顺序执行。运行…