MGN网络详解以及代码分析

最近阅读了云从科技最新的关于REID的论文以及相关的博客和代码,算法是基于MGN,关于网络的部分,这里记录一些自己的学习笔记。
以下是我参考的博客和代码的网址

博客: https://blog.csdn.net/Gavinmiaoc/article/details/80840193
代码: https://github.com/Gavin666Github/reid-mgn

以下内容主要为对于论文、博客以及代码的学习心得

一、首先看一下网络结构

网络结构从左到右,先是两个人的图片输入,这边有 3 个模块。3 个模块的意思是表示 3 个分支共享网络,前三层这三个分支是共享的,到第四层时分成三个支路,第一个支路是 global 的分支,第二个是 part-2 的分支,第三个是 part-3 的分支。在 global 的地方有两块,右边这个方块比左边的方块大概缩小了一倍(12×4),因为做了个下采样,下面两个分支没有做下采样,所以第四层和第五层特征图是一样大小的(24×8)。
接下来我们看一下图中黄色部分的区域。网络对 part-2 跟 part-3 做一个从上到下的纵向分割,part-2 在第五层特征图谱分成两块,part-3 对特征图谱从上到下分成三块。在分割完成后,我们用Max-pooling,得到一个 2048 的向量。
然后我们来看一下具体是怎么操作的,part-2 跟 part-3 的操作跟 global不一样,part-2 有两个 pooling,第一个pooling对应Zg p2(蓝色的长条),通过24×8大小的卷积核,将第五层特征图直接最大池化生成1×1×2048的向量。第二个pooling的卷积核大小和第一个不一样,为12×8,因此生成的是2×1×2048的向量,我们将其拆成2个1×1×2048的向量,对应图中part-2 中的2个接在一起的长条形。淡蓝色这个地方变成了小方体 ,大小为1×1×256,这个地方是做的降维,从 2048 维做成 256 维,主要是为了方便特征计算,这样更快更有效。
我们在测试的时候会在淡蓝色的地方,小方块从上到下应该是 8 个,我们把这 8 个 256 维的特征串连一个 2048 的特征,用这个特征替代前面输入的图片。
接下来我们对应程序中的网络部分来看一下。

二、看一下主程序的部分(mgn.py)
1.

该部分为引用的相关库
2.

第一句是将我们数据集market-1501的地址赋给root
第二句是关于线程方面的,此处不用管
3.

这个地方开始定义MGN网络,首先我们看到_init_函数,由于MGN网络的前3层和resnet-50的网络前三层基本上是一致的,所以我们MGN网络前三层就可以照搬resnet-50的前三层网络。
4.

此时我们的输入图片,会进行三组不同的处理方式,这3组不同处理方式的共同点就是都会经过resnet-50的前三层,第一种处理方式我们称为global,代码中的res_g_conv5就是该处理方式的第四层处理,不过该方式的第四层处理和resnet-50无异,因此直接调用。而后2组我们不做下采样,保持第五层特征图和第四层特征图的大小均为24×8,因此作上述处理。
不过该网络的结构并非重点,重点是如何调用该网络,使其进行行人的追踪和识别,因此我们重点研究网络的输出部分。
5.

这里对应上图中提到的最大池化和降维操作
6.

这里对应的部分将得到的8个256维向量经过全连接层,将维度改为识别的类别数,对应损失函数softmax loss。
7.

zg_p1(1×1×2048)、zg_p2(2×1×2048)、zg_p3(3×1×2048)分别对应淡黄色部分最大池化后的蓝色2048 的向量
z0_p2、z1_p2、z0_p3、z1_p3、z2_p3则分别是P2和P3被分开的部分,对应图中淡黄色部分的其他向量。
8.

该网络的输出由几部分组成,最主要的部分就是网络输出的图片对应的特征图谱predict,这个特征图谱由8个子图谱(淡蓝色部分,分别对应降维后生成的fg_p1, fg_p2, fg_p3, f0_p2, f1_p2, f0_p3, f1_p3, f2_p3)拼接而成,其余的部分(L)则为图中的softmax损失函数。

新人第一次发CSDN博客,如有错误的地方,欢迎指教!!!

MGN网络详解以及代码分析相关推荐

  1. 干货 | MTCNN实时人脸检测网络详解与代码演示

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 MTCNN模型概述 多任务卷积神经网络 ...

  2. 跨境追踪(ReID)多粒度网络(MGN)详解及代码实现(2)

    多粒度网络(MGN)的结构设计与技术实现 代码实现: (一)参考代码:https://github.com/hugh67/reid-MGN-pytorch (二)我的实验: 目标平台:类脑平台  ht ...

  3. 跨境追踪(ReID)多粒度网络(MGN)详解及代码实现(1)

    多粒度网络(MGN)的结构设计与技术实现 云从科技多粒度网络公开介绍: (一)多粒度网络(MGN)设计思路. 设计思想是这样子的,一开始是全局特征,把整张图片输入,我们提取它的特征,用这种特征比较 L ...

  4. facenet 中心损失函数(center loss)详解(代码分析)含tf.gather() 和 tf.scatter_sub()函数

    我们来解读一下,中心损失,再来看代码. 链接:https://www.cnblogs.com/carlber/p/10811396.html 我们的重点是分析代码,所以定义部分,大家详情参见上面的博客 ...

  5. Glove论文详解及代码分析

    Glove算法报告 算法简介 我觉得Glove算法非常的厉害,它是一种训练词向量的方法.它结合了俩种经典算法:一个是基于奇异值分解(SVD)的LSA算法,另一个是word2vec算法. Glove的算 ...

  6. 水平集详解与代码分析二

    上一节我们分析了CV模型的原理并列出了演化公式,这一节我们将通过该公式编写CV模型的C++代码,代码调用了opencv库的一些函数,可以根据自己使用的版本更改.代码一一对应公式里的各项系数. 头文件. ...

  7. 水平集详解与代码分析一

    前面我们从大体上描述了一下水平集方法的思想,实际上,各种水平集方法的区别只是在于如何构建能量函数E(C).当构建好能量泛函E(C)之后,通过水平集的思想,将曲线C用水平集函数Φ代替,再通过求解能量泛函 ...

  8. IFM网络详解及torch复现

    文章目录 IFM网络详解 网络结构代码 训练代码 main IFM网络详解 https://mp.weixin.qq.com/s?__biz=Mzk0MzIzODM5MA==&mid=2247 ...

  9. 组合模式详解附有代码案例分析(包含透明组合模式、安全组合模式的代码示例)

    组合模式 一.组合模式的概念和角色 (一).组合模式的概念 (二).组合模式的角色 二.组合模式的应用场景 三.透明组合模式的代码示例 四.安全组合模式的代码示例 五.组合模式的优缺点 (一).优点 ...

最新文章

  1. 从0到1,网上搜不到的企业信息安全搭建全过程,这本书讲透了!
  2. 使用树莓派(Raspberry Pi)远程GPIO
  3. linux安装xz解压xz文件和安装python
  4. Linux中su 和 su -的区别
  5. Python open()函数用法详解
  6. PHP 的面向方面编程
  7. Java笔记-JdbcTemplate批量执行insert及update
  8. 测者的测试技术手册:Junit执行单元测试用例成功,mvn test却失败的问题和解决方法...
  9. SpringMvc 跨域
  10. spring FileCopyUtils类 上传图片
  11. 使用ASP.NET Atlas实现拖放(Drag Drop)效果(下)
  12. 专科python应届生工资多少-应届毕业生自述面试15K月薪的Python后端开发经历,希望对你有用...
  13. 【MVC4升级到MVC5】ASP.Net MVC 4项目升级MVC 5的方法
  14. 内联失败函数变成static函数的一些问题
  15. 使用升级版的 Bootstrap typeahead v1.2.2
  16. java+整合handwrite_E-signature-master
  17. 绝地求生刺激战场辅助卧底外挂群,菜鸟一秒变高手
  18. handler机制及使用场景
  19. Linux网络驱动MDIO及Phy梳理
  20. 大数据分析-第十二章 Spark与数据分析

热门文章

  1. python自动获取cookie_python如何获取cookie
  2. 2020年最后15天总结
  3. 甘肃地形图之陇右地形分析、DEM数据下载
  4. Mybatis-Plus用纯注解搞定一对多查询
  5. STM32F1单片机零基础学习(1)
  6. Linux Snap 命令
  7. 数据结构之顺序表的删除、查找、遍历
  8. 常用的mysql存储引擎及其特点
  9. 波特率、数据传输速率和带宽的关系(转)
  10. JDK安装配置-只需两步即可(附jdk安装包,win10系统)