视频链接地址
前期准备知识
filter和channel的具体意义
- 个人理解:filter英文直译为滤波器,主要是针对与卷积核所说的,其数量和卷积核的个数相等,可以将其感性理解为相机传感器中的分层滤色片,每一个卷积核对应一种不同的滤色片,也就能从图像上提取出不同的信息。经过卷积核提取出来的一层信息我们称之为feature map(特征图)
-
channel英文直译为深度,在深度学习中我们有channel、in_channel、out_channel,其中channel一般指矩阵的深度信息,也就是它的层数。in_channel、out_channel也是针对矩阵而言的,但是其数量关系和卷积核又相关,具体数量关系可以见下图。
- 在代码中我们有如下所示关系。
in_channels(这一层输入矩阵的深度)= output_filters[-1](上一层输出矩阵的深度/上一层卷积核的个数)
out_channels(这一层输出矩阵的深度)= filters(这一层卷积核的个数)
参考文献,这篇博客讲的很清楚,可以详细阅读。
代码解析
-
route模块
i对应的为route对应的索引
因为在最初增加了一个图像输入层,也就是第一张图片里的output_filters=[3],所以我们网络架构的第一层对应的索引就从0到了1,之后的以此类推,简而言之就是我们网络在最初的位置多加了一层,所以索引顺序数时要+1,逆序数则不用
区分layer和channel,layer说的是第几层,也就是总体结构中的层数,channel为每个layer层对应的深度channel
-
shortcut模块
这里的output是记录的每一个模块的输出,要和output_layers进行区
-
create_grid模块
其中实现框为预测框,虚线框为我们的先验框,而作为真实标注框(GT)图中并未给出,l为预测值,g为真实值
-
torch.meshgrid模块
- 后续内容可以根据代码注释观看,需要对代码熟悉之后才能跟得上思路