< NCNN-Lession-2 > Net/Layer/Blob

开始

今天我们开始第二课,也就是Net/Layer/Blob的讲解.

![](ncnn-lession-2/lession_2.png)

Net/Layer/Blob这三个类是组成网络的基础.我们今天就学习和实现一下它们的基础功能.

作用

我们来分别说明它们三个类的作用.

Net类是共外部调用的一个类,它提供了两个重要的外部调用接口:

  • load_param()
  • load_model()

这两个接口可以调用用户自己网络的结构和权重信息,不过这个不是我们今天的重点.

Layer这个类包含了网络层的信息,比如层的名字(name), 类型(type)信息等等.

同时它是一个父类,它的子类包含了具体的网络层实现,比如convolution, relu等等.

Blob这个类比较简单,它主要包含了网络每一个blob的名字(name),产生该blob的层id(producer),使用该blob的层的id(consumers).

实现

关于Net的实现,我们先看图

我们今天主要讲它包含的两个变量:

  • layers
  • blobs

layers是一个包含了所有layer*的vector数组,它存放了所有layer的信.blobs是一个包含了所有blob的数组,它存放了所有blob的信息,关于blob我们下面会讲到.

关于layer的实现,我们先看图

它包含了4个重要的变量

  • type
  • name
  • bottoms
  • tops

这四个变量分别是layer的类型(type),名字(name),输入blob的id(bottoms), 输出blob的id(tops).

之所以要在Layer后面加上Father, 是因为它是具体子Layer实现类的父类,而这些具体的Layer实现类我们后面再做介绍.

关于blob的实现,我们先看图

它包含了3个重要变量

  • name
  • producer
  • consumers

name当然是该blob的名字.

producer是一个int类型的变量,它存放着产生该blob的layer_id.

consumers 是一个vector容器,里面存放着需要该blob作为输入的层的id,也就是字面意思的需要“消费”该blob的layer_id,因为可能不止一个层需要用到该blob作为输入,所以这个layer_id可能有多个,它需要一个容器来保存.

代码示例

关于Net/Layer/Blob的测试程序在这里 .代码结构如下:

代码中主要把Net/Layer/Blob的构造函数测试了一下.

< NCNN-Lession-2 > Net/Layer/Blob

https://zhengtq.github.io/2020/12/09/ncnn-lession-2/

Author

Billy

Posted on

2020-12-09

Updated on

2021-03-13

Licensed under

Comments