NVDLA专题5:具体模块介绍——Convolution Buffer

14 篇文章 3 订阅

概述

卷积缓冲器(CBUF)是卷积流水线中的一个阶段,module定义在NV_NVDLA_cbuf.v,module信息如下:

module NV_NVDLA_cbuf (
   nvdla_core_clk       //|< i
  ,nvdla_core_rstn      //|< i
  ,cdma2buf_dat_wr_addr //|< i
  ,cdma2buf_dat_wr_data //|< i
  ,cdma2buf_dat_wr_en   //|< i
  ,cdma2buf_dat_wr_hsel //|< i
  ,cdma2buf_wt_wr_addr  //|< i
  ,cdma2buf_wt_wr_data  //|< i
  ,cdma2buf_wt_wr_en    //|< i
  ,cdma2buf_wt_wr_hsel  //|< i
  ,pwrbus_ram_pd        //|< i
  ,sc2buf_dat_rd_addr   //|< i
  ,sc2buf_dat_rd_en     //|< i
  ,sc2buf_wmb_rd_addr   //|< i
  ,sc2buf_wmb_rd_en     //|< i
  ,sc2buf_wt_rd_addr    //|< i
  ,sc2buf_wt_rd_en      //|< i
  ,sc2buf_dat_rd_data   //|> o
  ,sc2buf_dat_rd_valid  //|> o
  ,sc2buf_wmb_rd_data   //|> o
  ,sc2buf_wmb_rd_valid  //|> o
  ,sc2buf_wt_rd_data    //|> o
  ,sc2buf_wt_rd_valid   //|> o
  );

//
// NV_NVDLA_cbuf_ports.v
//
input  nvdla_core_clk;   /* cdma2buf_dat_wr, cdma2buf_wt_wr, sc2buf_dat_rd_nvdla_ram_addr_ADDR_WIDTH_12_BE_1, sc2buf_dat_rd_nvdla_ram_data_valid_DATA_WIDTH_1024_ECC_SIZE_1, sc2buf_wt_rd_nvdla_ram_addr_ADDR_WIDTH_12_BE_1, sc2buf_wt_rd_nvdla_ram_data_valid_DATA_WIDTH_1024_ECC_SIZE_1, sc2buf_wmb_rd_nvdla_ram_addr_ADDR_WIDTH_8_BE_1, sc2buf_wmb_rd_nvdla_ram_data_valid_DATA_WIDTH_1024_ECC_SIZE_1 */
input  nvdla_core_rstn;  /* cdma2buf_dat_wr, cdma2buf_wt_wr, sc2buf_dat_rd_nvdla_ram_addr_ADDR_WIDTH_12_BE_1, sc2buf_dat_rd_nvdla_ram_data_valid_DATA_WIDTH_1024_ECC_SIZE_1, sc2buf_wt_rd_nvdla_ram_addr_ADDR_WIDTH_12_BE_1, sc2buf_wt_rd_nvdla_ram_data_valid_DATA_WIDTH_1024_ECC_SIZE_1, sc2buf_wmb_rd_nvdla_ram_addr_ADDR_WIDTH_8_BE_1, sc2buf_wmb_rd_nvdla_ram_data_valid_DATA_WIDTH_1024_ECC_SIZE_1 */

input [31:0] pwrbus_ram_pd;

input          cdma2buf_dat_wr_en;    /* data valid */
input   [11:0] cdma2buf_dat_wr_addr;
input    [1:0] cdma2buf_dat_wr_hsel;
input [1023:0] cdma2buf_dat_wr_data;

input         cdma2buf_wt_wr_en;    /* data valid */
input  [11:0] cdma2buf_wt_wr_addr;
input         cdma2buf_wt_wr_hsel;
input [511:0] cdma2buf_wt_wr_data;

input        sc2buf_dat_rd_en;    /* data valid */
input [11:0] sc2buf_dat_rd_addr;

output          sc2buf_dat_rd_valid;  /* data valid */
output [1023:0] sc2buf_dat_rd_data;

input        sc2buf_wt_rd_en;    /* data valid */
input [11:0] sc2buf_wt_rd_addr;

output          sc2buf_wt_rd_valid;  /* data valid */
output [1023:0] sc2buf_wt_rd_data;

input       sc2buf_wmb_rd_en;    /* data valid */
input [7:0] sc2buf_wmb_rd_addr;

output          sc2buf_wmb_rd_valid;  /* data valid */
output [1023:0] sc2buf_wmb_rd_data;

它包含总共512KB的SRAM。SRAMs缓存来自CDMA模块的输入像素数据、输入特征数据、权重数据和WMB数据,并由卷积序列发生器模块读取。CBUF有两个写端口和三个读端口。

CBUF包含16个32KB的bank,每个bank由两个512位宽、256-entry的双端口SRAMs组成。这些bank充当三个逻辑循环缓冲器:

  • 输入数据缓冲器
  • 权重缓冲器
  • WMB缓冲器

如果权重格式被压缩,则bank15被分配给WMB缓冲器,而另外两个缓冲器可以使用bank0~bank14。如果权重格式是未压缩的,WMB缓冲区不分配任何bank。在这种情况下,数据缓冲器和权重缓冲器可以完全使用所有16个bank。如果所需的bank少于16个,则剩余的bank不会被使用。

每个缓冲区充当循环缓冲区。新输入数据/权重/WMB有增量entry地址。如果地址达到最大值,它会绕回零,然后再次开始增加。

功耗

卷积缓冲器对SRAMs之外的数据路径中的寄存器应用时钟门控。卷积缓冲器数据路径的时钟在空闲时由SLCG选通,并且可编程寄存器中没有可用的硬件层。卷积缓冲器内的配置寄存器模块不受时钟门控,因此可以对新配置进行编程。

end

### 回答1: involution是一种用于视觉识别的算法,它反转了卷积的内在特性。它通过将卷积操作中的滤波器权重转换为可学习的点积操作,从而提高了模型的效率和准确性。involution算法在计算机视觉领域中具有广泛的应用,特别是在目标检测和图像分割等任务中。 ### 回答2: involution是在计算机视觉领域中概念比较新的一种方法。它是对传统卷积算法的一种逆运算,用来增强卷积神经网络中的非线性建模能力。involution的核心思想是在特征图的每个位置上利用可学习的感受野(receptive field)来进行特征融合,使得网络可以更好地捕捉目标之间的全局关系。 举个例子,我们在计算机视觉中常用的卷积层中,每一个卷积核通常只能对应一个大小固定的感受野。而involution层通过在每个位置上学习一个可变大小的感受野来取代卷积核,从而增强了网络对于目标间距离的捕捉。同时,involution层不仅可以被添加到普通的卷积神经网络中,还可以嵌入到注意力机制、自注意力机制等模型中,提高了模型的表达能力和性能。 相对于传统的卷积层,involution层有多方面的优点。首先,可变感受野大小的应用让involution能够处理更加复杂的视觉场景。其次,involution能够更好地捕捉目标之间的全局关系,对于跨越较大距离的目标关系识别和图像分割等任务非常有效。最后,involution的结构相对简单,不需要过多的计算与存储,可以大幅度减少网络的训练时间和计算资源占用,同时保证优秀的性能表现。 总之,involution可以被看作是一种高效而又强大的计算机视觉算法,对于面对复杂的图像场景和目标识别任务的解决具有重要的意义。 ### 回答3: Involution是近年来计算机视觉领域中一个新的概念,是一种反转卷积(convolution)的方法,可以更高效地进行视觉识别。所谓卷积,即是将一个滤波器与输入数据的每一个小区域进行乘法运算,然后将所有乘积相加得到一个数值作为输出。而在深度学习中,我们通常使用卷积神经网络来对输入数据进行分类或识别。 然而,在深度学习中,卷积处理是一件十分耗费计算资源的任务。特别是当我们需要处理高分辨率的图像时,其复杂度更是极高。因此,为了提高卷积神经网络的效率,Involution便应运而生。 那么,Involution到底是如何实现反转卷积的呢?其实,它的实现方法非常简单。它通过将输入数据划分成不同的区域,然后在每个小区域内执行局部变换操作,最后再将每个小区域的结果组合成一个输出。这种做法可以使得计算量大幅度降低,同时还可以减少运算中的参数数量。而且,按照这种方法执行的Involution操作还可以在不同分辨率之间进行协作,进一步提高神经网络的效率和准确率。 总之,Involution通过将输入数据分解成小块,实现了卷积操作的反转,从而实现了对图像的高效处理,特别是对于大尺度的图像和超高分辨率的图像,效果是非常显著的。其简单而有效的原理,有望成为未来深度学习领域的重要研究方向之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值