卷积神经网络中的图像特征——以YOLOv5为例进行可视化

文章介绍了图像处理中的特征层次,包括低层特征如边缘、颜色和纹理,以及高层特征涉及的语义信息。重点讨论了特征融合,特别是FPN(特征金字塔网络)在多尺度特征融合中的作用,用于提高物体检测性能。以YOLOv5网络为例,展示了特征从原始图像到高层语义的演化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、图像特征

1. 图像低层特征
  • 图像低层特征指的是:边缘、颜色和纹理等特征。
  • 低层特征的分辨率较高,包含较多的位置、细节信息,但其包含的语义信息较少,噪声较多。
  • 原始图像和浅层卷积网络输出的特征图属于低层特征,从低层特征图中可以看清轮廓、边缘等信息。
2. 图像高层特征
  • 图像的高层语义特征是指人所能理解的东西,比如沙发、狗、瓶子等。
  • 高层特征包含较多的语义信息,但其分辨率较低,对位置和细节的感知能力也较差。
  • 经过深层的卷积网络,可以有效归纳出语义信息,就是类似某个区域就是什么东西,并不需要显示具体的纹理信息。
3. 示例
  • 下面以YOLOv5网络为例,可视化展示了原始图像经过每一层网络后的输出特征图(共23层,逐层可视化),YOLOv5的网络结构如下:在这里插入图片描述
  • 原始输入图像
    在这里插入图片描述
    - Conv输出的的特征图(第0层的输出)
    在这里插入图片描述
    - Conv输出的特征图(第1层的输出)
    在这里插入图片描述
    - C3输出的特征图(第2层的输出)
    在这里插入图片描述
    - Conv输出的特征图(第3层的输出)
    在这里插入图片描述
    - C3后的特征图(第4层的输出)
    在这里插入图片描述
    - Conv输出的特征图(第5层的输出)
    在这里插入图片描述
    - C3输出的特征图(第6层的输出)
    在这里插入图片描述
    - Conv输出的特征图(第7层的输出)
    在这里插入图片描述
    - C3输出的特征图(第8层的输出)
    在这里插入图片描述
    - SPPF输出的特征图(第9层的输出)
    在这里插入图片描述
    - Conv输出的特征图(第10层的输出)
    在这里插入图片描述
    - Upsample输出的特征图(第11层的输出)
    在这里插入图片描述
    - Concat输出的特征图(第12层的输出)
    在这里插入图片描述
    - C3输出的特征图(第13层的输出)
    在这里插入图片描述
    - Conv输出的特征图(第14层的输出)
    在这里插入图片描述
    - Upsample输出的特征图(第15层的输出)
    在这里插入图片描述
    - Concat输出的特征图(第16层的输出)
    在这里插入图片描述
    - C3输出的特征图(第17层的输出)
    在这里插入图片描述
    - Conv输出的特征图(第18层的输出)
    在这里插入图片描述
    - Concat输出的特征图(第19层的输出)
    在这里插入图片描述
    - C3输出的特征图(第20层的输出)
    在这里插入图片描述
    - Conv输出的特征图(第21层的输出)
    在这里插入图片描述
    - Concat输出的特征图(第22层的输出)
    在这里插入图片描述
    - C3输出的特征图(第23层的输出)
    在这里插入图片描述

二、特征融合

1. 多尺度特征融合
  • 低层网络的感受野比较小,几何信息表征能力强,虽然分辨率高,但是语义信息表征能力弱。
  • 高层网络的感受野比较大,可以理解为CNN从更加全局的角度对图像做特征提取,因此产生更加高层次的语义信息,语义信息表征能力强,但是特征图的分辨率低,几何信息的表征能力弱(空间几何特征细节缺乏)。
  • 低层网络的几何信息高层网络的语义信息相融合,是提高检测和分割性能的重要手段。
2. FPN
  • FPN(特征图金字塔网络),主要解决的是物体检测中的多尺度问题,通过简单的网络连接改变,在基本不增加原有模型计算量的情况下,大幅度提升了小物体检测的性能。

  • 算法大致结构如下:一个自底向上的线路,一个自顶向下的线路,横向连接。
    在这里插入图片描述

  • 自底向上:
    自底向上的过程就是神经网络的前向传播过程,特征图经过卷积核计算,尺寸会越变越小。

  • 自上而下:
    自上而下的过程是把更抽象、语义更强的高层特征图进行上采样。

  • 横向连接:
    横向连接则是将上采样的结果和自底向上生成的相同大小的特征图进行融合,横向连接的两层特征在空间尺寸相同,这样做可以利用低层定位细节信息。

参考文章

关于encoder-decoder网络 - 特征融合

深度特征融合—高低层(多尺度)特征融合

对图像中语义信息、高层和底层特征的理解

CNN中的底层、高层特征、上下文信息、多尺度

多尺度特征融合

FPN(特征金字塔)结构笔记

### YOLOv8 模型层级可视化方法 为了实现YOLOv8模型的逐层可视化,可以采用多种技术手段来展示每一层的操作及其特征图。以下是几种常用的方法: #### 使用Netron工具查看ONNX模型结构 将YOLOv8模型转换成ONNX格式之后,可以直接利用Netron这样的图形界面工具来进行直观地观察整个神经网络架构[^1]。 ```bash pip install netron netron.start('best.onnx') ``` 这会启动一个本地服务器,在浏览器中打开链接即可看到详细的层次关系和连接情况。 #### 利用TensorBoard进行训练过程中间激活值监控 如果希望进一步探究每一步计算的结果,则可以在PyTorch环境中集成TensorBoard插件,记录下各阶段产生的张量数据并绘制出来供后续分析。 ```python from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter() def add_graph(model, input_to_model=None): writer.add_graph(model=model, input_to_model=input_to_model) input_tensor = ... # 定义输入张量 add_graph(model, input_tensor) ``` 上述代码片段展示了如何向TensorBoard添加模型图表的功能;对于具体的中间层输出也可以通过`torch.nn.Module.register_forward_hook()`函数挂钩到指定位置获取所需信息后再传入日志管理器显示。 #### 借助第三方库如matplotlib或seaborn制作自定义绘图脚本 当目标是生成静态图片形式的分层效果图时,可以选择编写专门针对该需求的小程序。这类方案通常依赖于Python丰富的科学计算生态链完成最终渲染工作。 ```python import matplotlib.pyplot as plt import numpy as np def plot_feature_maps(features, figsize=(16, 16)): num_features = features.shape[0] fig, axes = plt.subplots(1, num_features, figsize=figsize) for i in range(num_features): ax = axes[i] feature_map = features[i].cpu().numpy() # Normalize the image to [0, 1] normalized_img = (feature_map - feature_map.min()) / \ (feature_map.max() - feature_map.min()) ax.imshow(normalized_img, cmap='gray') ax.axis('off') plt.show() ``` 此段示说明了怎样提取某一层次上的所有通道响应作为灰度图像排列在一起形成网格状布局,便于对比研究各个单元格内的模式特点。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓shuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值