caffe网络可视化工具

MGN是一个多分支的深度网络:一个全局特征表示的分支和两个局部特征表示的分支。通过将图片划分成多个条带,并且改变不同局部分支的条带数量来获得多粒度局部特征表示。
caffe网络可视化工具_第1张图片

最近在用MGN的网络进行多粒度特征提取,由于项目所使用的时候pytorch框架,其backbone主要使用了resnet50的前几层;而后边接着的是三个分支共享网络。但是在pytorch框架下只有简单的导入,为了更直观清晰地看懂网络结构,之后并结合自己的数据进行网络结构的修改,所以找到MGN的caffe网络文件。将结构参数从MGN-20190621.prototxt全部复制到http://ethereon.github.io/netscope/#/editor,并 Shift+Enter ,即可。

pytorch简单易用,但不利于对网络结构的更深的了解。caffe网络可视化工具_第2张图片
caffe网络可视化工具_第3张图片

如上图所示,最上面的分支为全局分支(global branch),在res_conv5_1中使用了stride=2的卷积进行下采样,对得到的feature map采用全局最大池化(global max pooling)生成2048维的特征向量,并通过1✖️1的卷积压缩为256维的特征向量。
    中间和下面的分支用于学习局部的特征表示,为了保留适合局部特征的感受野,这两个分支都没有使用下采样。通过在水平方向上均匀的将feature map划分为N个条带,并对N个条带分别全局最大池化和1✖️1卷积来得到对应的局部特征,不同的N表示不同的粒度,N越大粒度越细。中间的分支N=2,可以理解为将行人分为上半身和下半身;下面的分支N=3,可以理解为将行人分为上,中,下三个部分。
    在测试的时候,将3个256维的全局特征向量和5个256维的局部特征向量concat起来得到的2048维向量作为行人的特征表示,用于相似性搜索

caffe网络可视化工具_第4张图片

首先,输入图的尺寸是 384×128,我们用的是 Resnet50,如果在不做任何改变的情况下,它的特征图谱输出尺寸,从右下角表格可以看到,global 这个地方就相当于对 Resnet 50不做任何的改变,特征图谱输出是 12×4。

下面有一个 part-2 跟 part-3,这是在 Res4_1 的位置,本来是有一个stride 等于 2 的下采样的操作,我们把 2 改成 1,没有下采样,这个地方的尺寸就不会缩小 2,所以 part-2 跟 part-3 比 global 大一倍的尺寸,它的尺寸是 24×8。为什么要这么操作?因为我们会强制分配 part-2 跟 part-3 去学习细粒度特征,如果把特征尺寸做得大一点,相当于信息更多一点,更利于网络学到更细节的特征。

网络结构从左到右,先是两个人的图片输入,这边有 3 个模块。3 个模块的意思是表示 3 个分支共享网络,前三层这三个分支是共享的,到第四层时分成三个支路,第一个支路是 global 的分支,第二个是 part-2 的分支,第三个是 part-3 的分支。在 global 的地方有两块,右边这个方块比左边的方块大概缩小了一倍,因为做了个下采样,下面两个分支没有做下采样,所以第四层和第五层特征图是一样大小的。

接下来我们对 part-2 跟 part-3 做一个从上到下的纵向分割,part-2 在第五层特征图谱分成两块,part-3 对特征图谱从上到下分成三块。在分割完成后,我们做一个 pooling,相当于求一个最值,我们用的是 Max-pooling,得到一个 2048 的向量,这个是长条形的、横向的、黄色区域这个地方。

但是 part-2 跟 part-3 的操作跟 global 是不一样的,part-2 有两个 pooling,第一个是蓝色的,两个 part 合在一起做一个 global-pooling,我们强制 part-2 去学习细节的联合信息,part-2 有两个细的长条形,就是我们刚才引导它去学细节型的信息。淡蓝色这个地方变成小方体一样,是做降维,从 2048 维做成 256 维,这个主要方便特征计算,因为可以降维,更快更有效。我们在测试的时候会在淡蓝色的地方,小方块从上到下应该是 8 个,我们把这 8 个 256 维的特征串连一个 2048 的特征,用这个特征替代前面输入的图片

你可能感兴趣的:(PyTorch)