可视化
特征图可视化
可视化为深度学习模型的训练和测试过程提供了直观的解释。
在MMYOLO中,可以使用Visualizer
MMEngine中提供的feature map可视化,具有以下特点:
- 支持基本绘图界面和特征图可视化。
- 支持选择模型中的不同层来获取特征图。显示方式包括
squeeze_mean
、select_max
、topk
。用户还可以使用 自定义特征图显示的布局arrangement
。
特征图生成
您可以使用demo/featmap_vis_demo.py
快速查看可视化结果。为了更好地理解所有功能,我们在此处列出了所有主要参数及其功能,如下所示:
-
img
: 要可视化的图像。可以是单个图像文件或图像文件路径列表。 -
config
:算法的配置文件。 -
checkpoint
:对应算法的权重文件。 -
--out-file
:获取的特征图在您设备上的保存路径。 -
--device
:用于图像推理的硬件。例如,--device cuda:0
表示使用第一个 GPU,而--device cpu
表示使用 CPU。 -
--score-thr
:置信度分数阈值。只会显示置信度分数高于此阈值的 bboxes。 -
--preview-model
: 如果需要预览模型。这可以使用户更直接地理解特征层的结构。 -
--target-layers
: 得到可视化特征图结果的特定层。- 如果只有一个参数,则该特定层的特征图将被可视化。例如,
--target-layers backbone
、--target-layers neck
、--target-layers backbone.stage4
等。 - 如果参数是一个列表,对应层的所有特征图都会被可视化。例如,
--target-layers backbone.stage4 neck
表示同时输出backbone的stage4层和neck的三层,一共四层feature maps。
- 如果只有一个参数,则该特定层的特征图将被可视化。例如,
-
--channel-reduction
:如果需要将多个通道压缩成一个通道,然后将其与图片叠加显示,因为输入张量通常有多个通道。这里可以使用三个参数:squeeze_mean
:使用均值函数将输入通道C压缩为一个通道,输出维度变为(1, H, W)。select_max
:在空间空间对输入通道C求和,维度变为(C, )。然后选择值最大的通道。None
:表示不需要压缩。在这种情况下,topk
可以通过topk
参数选择激活度最高的特征图进行显示。
-
--topk
: 仅当channel_reduction
参数为时有效None
。它topk
根据激活程度选择通道,然后将其与图像叠加显示。可以使用--arrangement
参数指定显示布局,参数是由空格分隔的两个数字组成的数组。例如,--topk 5 --arrangement 2 3
表示激活度最高的五个特征图显示在 中2 rows and 3 columns
。同样,--topk 7 --arrangement 3 3
表示激活度最高的七个特征图显示在 中3 rows and 3 columns
。- 如果
topk
不为-1,则选择topk通道按激活程度高低顺序显示。 - 如果
topk
为-1,则通道号C必须为1或3,表示输入数据为图片。否则,将出现错误提示用户使用压缩频道channel_reduction
。
- 如果
-
考虑到输入的特征图通常很小,为了便于可视化,该函数默认会对特征图进行上采样。
注意:当图像和特征图比例不同时,draw_featmap
函数会自动进行升采样对齐。如果你的图片Pad
在inference的时候有preprocessing之类的操作,得到的feature map是用 处理的Pad
,直接upsample图片可能会出现错位问题。
使用示例
以预训练的 YOLOv5-s 模型为例。请将模型权重文件下载到根目录。
cd mmyolo
wget https://download.openmmlab.com/mmyolo/v0/yolov5/yolov5_s-v61_syncbn_fast_8xb16-300e_coco/yolov5_s-v61_syncbn_fast_8xb16-300e_coco_20220918_084700-86e02187.pth
(1) 将多通道特征图压缩成单通道select_max
并显示。通过提取backbone
层的输出进行可视化,将生成图中三个输出层的特征图backbone
:
python demo/featmap_vis_demo.py demo/dog.jpg \
configs/yolov5/yolov5_s-v61_syncbn_fast_8xb16-300e_coco.py \
yolov5_s-v61_syncbn_fast_8xb16-300e_coco_20220918_084700-86e02187.pth \
--target-layers backbone \
--channel-reduction select_max