MGN网络详情及代码分析
最近,云阅读了科技最新的REID相关论文和相关的博客和代码。 算法基于MGN。 对于网络部分,在这里记录自己的学习笔记。
以下是我参考的博客和代码网站
博客: https://blog.csdn.net/gavinmiaoc/article/details/80840193
代码: https://github.com/Gavin 666 github/Reid-mgn
以下内容主要是对论文、博客及代码的学习心得
一、我们先来看看网络结构
网络结构从左到右,首先输入两个人的图像,这里有三个模块。 三个模块意味着三个分支共享网络,前三个分支是共享的,分支到第四个是三个分支,第一个分支是global分支,第二个是part-2分支,第三个是part-3分支。 在global的地方有两个区块,右侧的区块比左侧的区块缩小了约两倍。 (124 )、由于下采样,下两个分支没有下采样,因此第四层和第五层的特征图大小相同) 248 )。
接下来,我们来看看图中黄色部分的区域。 网络对part-2和part-3进行自上而下的纵向分割,part-2在第5层特征图像上分为2部分,part-3从上而下分为3部分。 分割完成后,使用Max-pooling获得2048个向量。
接下来,我们来看看具体是怎么操作的。 部件2和部件3的操作与global不同。 part-2有两个pooling,第一个pooling支持Zg p2 (蓝色长条),通过248大小的卷积核直接对第五层特征图进行最大池化生成112048。第二个pooling的将其分解为两个112048的向量,对应于图的part-2中两个连接的长条形。 浅蓝色这个地方呈小方体,大小为11256。 最近在降低维度,从2048维度制作256维度。 主要是为了使特征计算变得容易。 那样更快更有效。
我们在测试的时候在浅蓝色的地方。 小方块从上到下应该有8个。 将这8个256维的特征连接成一个2048的特征,用这个特征代替以前输入的图像。
接下来,我们来对应程序的网络部分进行看看。
二、请看主程序部分(mgn.py )
1.
此部分是引用的相关库
2.
第一条语句是将我们的数据集market-1501的地址指定给root
第二条语句是关于线程的,但在此不进行管理
3.
在这里开始定义MGN网络。 首先来看看_init_函数。 MGN网络的前3层和resnet-50的网络的前3层基本一致,因此MGN网络的前3层可以直接使用resnet-50的前3层网络。
4.
此时,我们的输入图像将采取三种不同的处理方式。 这三种不同处理方式的共同点是通过resnet-50的前三层。 第一种处理方式称为global,代码中的res_g_conv5是这种处理方式的第4层处理,但这种方式的第4层处理与resnet-50相同,因此直接调用。 并且,两组不进行下采样,为了使第五层特征图和第四层特征图的大小均保持在248,进行了上述处理。
但是,由于该网络的结构并不是重点,而是重点如何调用该网络,进行行人的跟踪和识别,所以我们重点研究网络的输出部分。
5.
此处对应于上图所述的最大池化和降维操作
6.
这里对应的部分,将得到的8个256维向量经过全部连接层,变更为识别维数,与损失函数softmax loss对应。
7.
ZG_p1(112048 )、ZG_p2 ) 212048 )、ZG_p3 ) 312048 )分别对应于淡黄色部分被最大化的蓝色2048的矢量
z0_P2、z1_p2、z0_p3、z1_p3、z2_p3分别是p2和P3分离的部分,对应于图中淡黄色部分的其他向量。
8.
该网络的输出由若干部分组成,最主要的部分是与从网络输出的图像对应的特征图像predict,该特征图像与8个子图像(蓝色部分,分别进行降维后产生的fg_p1、fg_p2、fg _ PICT )进行比较
新人第一次发送了CSDN博客。 如果有错误的地方,欢迎您的指导。