前言
图像卷积神经网络(Convolution Neural Network ,CNN)是通过Kernel对图像Tensor进行卷积(废话 )从而提取出高维向量,对图像进行分类,目标识别,语义分割。写网络的过程中,不由得好奇每个层中图像被提取出了什么特征,所以简单编写了一个以Yolov3为例的特征层可视化函数。
一、Yolov3
Yolov3是一个目标识别卷积神经网络,该网络均由Convolutional
layer组成,一个Convolutional
layer包括一个Conv2d
层,一个BN
层和一个LeakyReLU
层组成。
1.Darknet53
Yolov3的主干网络被称为Darknet53,是在Darknet基础上的魔改网络,其结构为
其中两个Convolutional
又组成了一个Residual
块,一共有23个残差块。
这里根据输出Tensor的shape不同将网络特征层分为5个部分进行依次输出,对backbone的每层残差块进行特征层可视化。
二、特征图像可视化
1.可视化函数
对特征层的可视化实际上就是对卷积层输出结果的分层输出
只需要将每一个块的输出压缩batch维度后进行逐层转换为array并保存即可。
import os
import cv2
import numpy as np
import torch
import torch.nn as nn
def to_image(input_tensor, channel, layer_name):
print("input_tensor_size===>",input_tensor.shape)
img_out = input_tensor[:1,channel,:,:]
img_out = img_out.squeeze()
img_out = img_out.unsqueeze(dim = 0)
print(img_out.shape)
with torch.no_grad():
img_out = np.array(img_out.permute(1,2,0