跨境上网_数据跨境传输

跨境上网_数据跨境传输多粒度网络(MGN)的结构设计与技术实现云从科技多粒度网络公开介绍:(一)多粒度网络(MGN)设计思路。设计思想是这样子的,一开始是全局特征,把整张图片输入,我们提取它的特征,用这种特征比较Loss或比较图片距离。但这时我们发现有一些不显著的细节,还有出现频率比较低的特征会被忽略。比如衣服上有个LOGO,但不是所有衣服上有LOGO,只有部分人衣服上有LOGO。全局特…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

多粒度网络(MGN)的结构设计与技术实现

云从科技多粒度网络公开介绍:

 

云从科技资深算法研究员:详解跨镜追踪(ReID)技术实现及难点

(一)多粒度网络(MGN)设计思路。

设计思想是这样子的,一开始是全局特征,把整张图片输入,我们提取它的特征,用这种特征比较 Loss 或比较图片距离。但这时我们发现有一些不显著的细节,还有出现频率比较低的特征会被忽略。比如衣服上有个 LOGO,但不是所有衣服上有 LOGO,只有部分人衣服上有 LOGO。全局特征会做特征均匀化,LOGO 的细节被忽略掉了。

云从科技资深算法研究员:详解跨镜追踪(ReID)技术实现及难点

 

我们基于局部特征也去尝试过,用关键点、人体姿态等。但这种有一些先验知识在里面,比如遮挡、姿态大范围的变化对这种方案有一些影响,效果并不是那么强。

后来我们想到全局特征跟多粒度局部特征结合在一起搞,思路比较简单,全局特征负责整体的宏观上大家共有的特征的提取,然后我们把图像切分成不同块,每一块不同粒度,它去负责不同层次或者不同级别特征的提取。

相信把全局和局部的特征结合在一起,能够有丰富的信息和细节去表征输入图片的完整情况。在观察中发现,确实是随着分割粒度的增加,模型能够学到更详细的细节信息,最终产生 MGN 的网络结构。

下面演示一下多粒度特征,演示两张图,左边第一列有 3 张图,中间这列把这3张图用二分之一上下均分,你可以看到同一个人有上半身、下半身,第三列是把人从上到下分成三块——头部、腹胸、腿部,它有 3 个粒度,每个粒度做独立的引导,使得模型尽量对每个粒度学习更多信息。

云从科技资深算法研究员:详解跨镜追踪(ReID)技术实现及难点

右图表示的是注意力的呈现效果,这不是基于我们模型产生的,是基于之前的算法看到的。左边是整张图在输入时网络在关注什么,整个人看着比较均匀,范围比较广一点。第三栏从上到下相当于把它切成 3 块,每一块看的时候它的关注点会更加集中一点,亮度分布不会像左边那么均匀,更关注局部的亮点,我们可以理解为网络在关注不同粒度的信息。

▌(二)多粒度网络(MGN)——网络结构

这是 MGN 的网络架构完整的图,这个网络图比较复杂,第一个,网络从结构上比较直观,从效果来讲是比较有效的,如果想复现我们的方案还是比较容易的。如果你是做深度学习其他方向的,我们这个方案也有一定的普适性,特别是关注细粒度特征时,因为我们不是只针对 ReID 做的。我们设计的结构是有一定普适性,我把它理解为“易迁移”,大家可以作为参考。

云从科技资深算法研究员:详解跨镜追踪(ReID)技术实现及难点

 

首先,输入图的尺寸是 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 的特征,用这个特征替代前面输入的图片。

▌(三)多粒度网络(MGN)——Loss设计

Loss 说简单也简单,说复杂也复杂也复杂,为什么?简单是因为整个模型里只用了两种Loss,是机器学习里最常见的,一个是 SoftmaxLoss 一个是 TripletLoss。复杂是因为分支比较多,包括 global 的,包括刚才 local 的分支,而且在各个分支的 Loss 设计上不是完全均等的。我们当时做了些实验和思考去想 Loss 的设计。现在这个方案,第一,从实践上证明是比较好的,第二,从理解上也是容易理解的。

云从科技资深算法研究员:详解跨镜追踪(ReID)技术实现及难点

 

首先,看一下 global 分支。上面第一块的 Loss 设计。这个地方对 2048 维做了SoftmaxLoss,对 256 维做了一个 TripletLoss,这是对 global 信息通用的方法。下面两个部分 global 的处理方式也是一样的,都是对 2048 做一个 SoftmaxLoss,对 256 维做一个 TripletLoss。中间 part-2 地方有一个全局信息,有 global 特征,做 SoftmaxLoss+TripletLoss。

但是,下面两个 Local 特征看不到 TripletLoss,只用了 SoftmaxLoss,这个在文章里也有讨论,我们当时做了实验,如果对细节当和分支做 TripletLoss,效果会变差。为什么效果会变差?

一张图片分成从上到下两部分的时候,最完美的情况当然是上面部分是上半身,下面部分是下半身,但是在实际的图片中,有可能整个人都在上半部分,下半部分全是背景,这种情况用上、下部分来区分,假设下半部分都是背景,把这个背景放到 TripletLoss 三元损失里去算这个 Loss,就会使得这个模型学到莫名其妙的特征。

比如背景图是个树,另外一张图是某个人的下半身,比如一个女生的下半身是一个裙子,你让裙子跟另外图的树去算距离,无论是同类还是不同类,算出来的距离是没有任何物理意义或实际意义的。从模型的角度来讲,它属于污点数据,这个污点数据会引导整个模型崩溃掉或者学到错误信息,使得预测的时候引起错误。所以以后有同学想复现我们方法的时候要注意一下, Part-2、part-3 的 Local 特征千万不要加 TripletLoss。

▌(四)多粒度网络(MGN)——实验参数

图片展示的是一些实验参数,因为很多同学对复现我们的方案有一定兴趣,也好奇到底这个东西为什么可以做那么好。其实我们在文章里把很多参数说得非常透,大家可以按照我们的参数去尝试一下。

我们当时用的框架是 Pytorch。TripletLoss 复现是怎么选择的?我们这个 batch是选 P=16,K=4,16×4,64 张图作为 batch,是随机选择16 个人,每个人随机选择 4 张图。

云从科技资深算法研究员:详解跨镜追踪(ReID)技术实现及难点

 

然后用 SGD 去训练,我们的参数用的是 0.9。另外,我们做了weight decay,参数是万分之五。像 Market1501 是训练 80epochs,是基于 Resnet50 微调了。我们之前实验过,如果不基于 Resnet50,用随机初始化去训练的话效果很差,很感谢 Resnet50 的作者,对这个模型训练得 非常有意义。

初始学习率是百分之一,到 40 个 epoch 降为千分之一,60 个 epoch 时降为万分之一。我们评估时会对评估图片做左右翻转后提取两个特征,这两个特征求一个平均值,代表这张图片的特征。刚才有人问到我们用了什么硬件,我们用了 2 张的 TITAN 的 GPU。

在 Market1501 上训练 80 epoch的时间大概差不多是 2 小时左右,这个时间是可以接受的,一天训练得快一点可以做出 5-10 组实验。

▌(五)多粒度网络(MGN)——实验结果

我们发表成果时,这个结果是属于三个数据集上最好的。

1、Market1501。我们不做 ReRank 的时候,原始的 Rank1 是 95.7%,mAP 是 86.9%,跟刚才讲的业内比较好的 PCB 那个文章相比,我们的 Rank1 提高差不多 1.9 个点,mAP 整整提高 5.3 个点,得到非常大的提升。

云从科技资深算法研究员:详解跨镜追踪(ReID)技术实现及难点

 

2、RK。Rank1 达到 96.6%,mAP 是 94.2%。RK 是 ReRank 重新排序的简称, ReID 有一篇文章是专门讲 ReRank 技术的,不是从事 ReID 的同学对 ReRank 的技术可能有一定迷惑,大家就理解为这是某种技术,这种技术是用在测试结果重新排列的结果,它会用到测试集本身的信息。因为在现实意义中很有可能这个测试集是开放的,没有办法用到测试集信息,就没有办法做ReRank,前面那个原始的 Rank1 和 mAP 比较有用。

但是对一些已知道测试集数据分布情况下,可以用 ReRank 技术把这个指标有很大的提高,特别是 mAP,像我们方案里从 86.9% 提升到 94.2%,这其中差不多 7.3% 的提升,是非常显著的。

3、DukeMTMC-reID 和 CUHKO3 这两个结果在我们公布研究成果时算是最好的,我们是4月份公布的成果,现在是 6 月份了,最近 2 个月 CEPR 对关于 ReID 的文章出了差不多 30 几篇,我们也在关注结果。现在除了我们以外最好的成果,原始 Rank1 在 93.5%-94% 之间,mAP 在83.5%-84% 之间,很少看到 mAP 超过 84% 或者 85% 的关于。

▌(六)多粒度网络(MGN)——有趣的对比实验

因为网络结构很复杂,这么复杂的事情能说得清楚吗?里面各个分支到底有没有效?我们在文章里做了几组比较有意思的实验,这里跟大家对比一下。

云从科技资深算法研究员:详解跨镜追踪(ReID)技术实现及难点

 

第一个对比,对比 MGN 跟 Resnet50,这倒数第二行,就是那个 MGN w/o TP,跟第一行对比,发现我们的多粒度网络比 Resnet50 水平,Rank1 提高了 7.8%,mAP 提高了 14.8%,整体效果是不错的。

第二个对比,因为我们的网络有三个分支,里面参数量肯定会增加,增加的幅度跟 Resnet101的水平差不多,是不是我们网络成果来自于参数增加?我们做了一组实验,第二行有一个 Resnet101,它的 rank1 是 90.4%,mAP 是 78%,这个比 Resnet50 确实好了很多,但是跟我们的工作成果有差距,说明我们的网络也不是纯粹堆参数堆出来的结果,应该是有网络设计的合理性在。

第三个对比,表格第二个大块,搞了三个分支,把这三个分支做成三个独立的网络,同时独立训练,然后把结果结合在一起,是不是效果跟我们差不多,或者比我们好?我们做了实验,最后的结果是“G+P2+P3(single)”,Rank1 有 94.4%,mAP85.2%,效果也不错,但跟我们三个网络联合的网络结构比起来,还是我们的结构更合理。我们的解释是不同分支在学习的时候,会互相去督促或者互相共享有价值的信息,使得大家即使在独立运作时也会更好。

▌(七)多粒度网络(MGN)——多粒度网络效果示例

这是排序图片的呈现效果,左图是排序位置,4 个人的检索结果,前 2 个人可以看到我们的模型是很强的,无论这个人是侧身、背身还是模糊的,都能够检测出来。尤其是第 3 个人,这张图是非常模糊的,整个人是比较黑的,但是我们这个模型根据他的绿色衣服、白色包的信息,还是能够找出来,尽管在第 9 位有一个判断失误。第 4 个人用了一张背面的图,背个包去检索,可以发现结果里正脸照基本被搜出来了。

云从科技资深算法研究员:详解跨镜追踪(ReID)技术实现及难点

 

右边是我们的网络注意力模型,比较有意思的一个结果,左边是原图,右边从左到右有三列,是 global、part2、part3 的特征组,可以看到 global 的时候分布是比较均匀的,说明它没有特别看细节。

越到右边的时候,发现亮点越小,越关注在局部点上,并不是完整的整个人的识别。第 4 个人我用红圈圈出来了,这个人左胸有一个 LOGO,看 part3 右边这张图的时候,整个人只有在 LOGO 地方有一个亮点或者亮点最明显,说明我们网络在 part3 专门针对这个 LOGO 学到非常强的信息,检索结果里肯定是有这个 LOGO 的人排列位置比较靠前。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185402.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号