当前位置: 首页 > news >正文

网站动画效果用什么程序做的wordpress中文采集

网站动画效果用什么程序做的,wordpress中文采集,装修平台合作,路桥做网站的公司有哪些SiamRPN论文来源论文背景什么是目标跟踪什么是孪生网络结构Siamese的局限解决的问题论文分析创新点一#xff1a;空间感知策略创新点二#xff1a;ResNet-50深层网络创新点三#xff1a;多层特征融合创新点四#xff1a;深层互相关代码分析整体代码简述#xff08;1#… SiamRPN论文来源论文背景什么是目标跟踪什么是孪生网络结构Siamese的局限解决的问题论文分析创新点一空间感知策略创新点二ResNet-50深层网络创新点三多层特征融合创新点四深层互相关代码分析整体代码简述1特征提取网络2逐层的特征融合Layerwise Aggregation3深层互相关Depthwise Cross Correlation总结论文翻译Abstract1. Introduction2. Related Work3. Siamese Tracking with Very Deep Networks3.1. Analysis on Siamese Networks for Tracking3.2. ResNet-driven Siamese Tracking3.3. Layer-wise Aggregation3.4. Depthwise Cross Correlation4. Experimental Results4.1. Training Dataset and Evaluation4.2. Implementation Details4.3. Ablation Experiments4.4. Comparison with the state-of-the-art5. Conclusions论文来源 论文链接 代码链接 本文参考: 如何理解SiamRPN? SiamRPN理解 SiamRPN 基于深度网络的孪生视觉跟踪的进化 【SOT】Siamese RPN 论文和代码解析 SiamRPN算法详解 论文背景 什么是目标跟踪 使用视频序列第一帧的图像(包括bounding box的位置)来找出目标出现在后序帧位置的一种方法。 什么是孪生网络结构 在进入到正式理解SiamRPN之前为了更好的理解这篇论文我们需要先了解一下孪生网络的结构。 孪生网络是一种度量学习的方法而度量学习又被称为相似度学习。 孪生网络结构被较早地利用在人脸识别的领域(《Learning a Similarity Metric Discriminatively, with Application to Face Verification》)。其思想是将一个训练样本(已知类别)和一个测试样本(未知类别)输入到两个CNN(这两个CNN往往是权值共享的)中从而获得两个特征向量然后通过计算这两个特征向量的的相似度相似度越高表明其越可能是同一个类别。在上面这篇论文中衡量这种相似度的方法是L1距离。 在目标领域中最早利用这种思想的是SiamFC其网络结构如上图。输入的z 是第一帧ROI(也就是在手动在第一帧选择的bounding box)x则是后一帧的图片。两者分别通过两个CNN得到两张特征图。再通过一次卷积操作(L(22-6)/1117)获得最后形状为17×17×1的特征图。在特征图上响应值越高的位置代表其越可能有目标存在。其想法就类似于对上面的人脸识别孪生网络添加了一次卷积操作。获得特征图后可以获得相应的损失函数。y{-1,1}为真实标签v是特征图相应位置的值。下列第一个式子是特征图上每一个点的loss第二个式子是对第一个式子作一个平均第三个式子就是优化目标。 However, both Siamese-FC and CFNet are lack of boundingbox regression and need to do multi-scale test which makesit less elegant. The main drawback of these real-time track-ers is their unsatisfying accuracy and robustness comparedto state-of-the-art correlation filter approaches.但是Siamese-FC和CFNet都没有边界框回归因此需要进行多尺度测试这使得它不太美观。这些实时跟踪器的主要缺点是与最新的相关滤波器方法相比它们的精度和鲁棒性不令人满意。 为了解决SiamFC的这两个问题就有了SiamRPN。可以看到前半部分Siamese Network部分和SiamFC一模一样(通道数有变化)。区别就在于后面的RPN网络部分。特征图会通过一个卷积层进入到两个分支中在Classification Branch中的4×4×(2k×256)特征图等价于有2k个4×4×256形状的卷积核对20×20×256作卷积操作于是可以获得17×17×2k的特征图Regression Branch操作同理。而RPN网络进行的是多任务的学习。17×17×2k做的是区分目标和背景其会被分为k个groups每个group会有一层正例一层负例。最后会用softmax cross-entropy loss进行损失计算。17×17×4k同样会被分为k groups每个group有四层分别预测dx,dy,dw,dh。而k的值即为生成的anchors的数目。而关于anchor box的运行机制可以看下方第二张图(来自SSD)。 correlation操作详解涉及到后续改进以分类分支为例在RPN中分类分支需要输出一个通道数为 2k 的特征图 k 为anchor个数SiamFC中使用的correlation只能提供通道数为1的响应图无法满足要求。所以我们换了一个想法把correlation层当成一个卷积层template分支提取的特征作为卷积核detection分支提取的特征作为卷积层的input这样只需要改变卷积核的形状就可以达到输出2k通道数的目的。具体做法为使用了两个不同的卷积层template分支的卷积层负责升维把通道数提升到 256*2k 为了保持对齐detection分支也增加了一个卷积层不过保持通道数不变。之后进行correlation操作卷积得到最终的分类结果。 Siamese的局限 作者的实验发现较深的网络如 ResNet, 无法带来跟踪精度提升的原因在于: 更深的网络的填充会破坏严格的平移不变性Strict translation invariance padding会破坏这种性质 现代化网络随着何铠明等提出残差网络以后网络的深度得到了巨大的释放通常物体检测和语义分割的baseline backbone都采用ResNet50的结构。为了保证网络具有适当/整齐的分辨率几乎所有的现代网络backbone都需要执行padding操作。而ResNet网络中具有padding操作即该网络肯定不具备严格的平移不变性padding的引入会使得网络输出的响应对不同位置有了不同的认知。而我们进行进一步的训练是希望网络学习到如何通过物体的表观特征来分辨回归物体这就限制了深网络在tracking领域的应用。 RPN要求分类和回归具有不对称特征 即如果将搜索区域图像和模板区域图像进行互换输出的结果应该保持不变。因为是相似度所以应该有对称性。 由于SiamRPN不再是进行相似度计算而是通过计算回归的偏移量和分类的分数来选择最终的目标这将使得该网络不再具有对称性。因而在SiamRPN的改进中需要引入非对称的部件如果完全Siamese的话没法达到目的这一点主要会引导后面的correlation设计。 文中作者引入空间感知策略来克服第一个困难并对第二个问题进行讨论。 针对第一个问题作者认为Strict translation invariance只存在没有padding的网络中例如Alexnet并且假设违反了这种限制将导致空间的倾斜spatial bias。 作者发现如下的几个参数对跟踪结果的影响非常巨大the receptive field size of neurons; network stride; feature padding。 具体来说感受野决定了用于计算 feature 的图像区域。较大的感受野提供了更好的 image context 信息而一个较小的感受野可能无法捕获目标的结构信息 网络的步长影响了定位准确性的程度特别是对小目标而言与此同时它也控制了输出 feature map 的大小从而影响了 feature 的判别性和检测精度。 此外对于一个全卷积的结构来说feature padding 对卷积来说会在模型训练中引入潜在的位置偏移从而使得当一个目标移动到接近搜索范围边界的时候很难做出准确的预测。这三个因素同时造成了 Siamese Tracker 无法很好的从更顶尖的模型中收益。 解决的问题 该论文主要解决的问题是将深层基准网络ResNet、Inception等网络应用到基于孪生网络的跟踪网络中。在SiameseFC算法之后尽管已经有很多的基于孪生网络的跟踪算法但是大家可能会注意到一个问题是这些网络都使用浅层的类AlexNet做为基准特征提取器。其实在这之前也有学者们尝试着使用深层的网络但是发现直接使用预训练好的深层网络反而会导致跟踪算法精度的下降因此这成为了一个基于孪生网络的跟踪器需要解决的一个关键问题 论文分析 创新点一空间感知策略 1.平移不变性的问题 作者认为Strict translation invariance只存在没有padding的网络中例如Alexnet并且假设违反了这种限制将导致空间的倾斜spatial bias。作者发现如下的几个参数对跟踪结果的影响非常巨大the receptive field size of neurons; network stride; feature padding。具体来说感受野决定了用于计算 feature 的图像区域。较大的感受野提供了更好的 image context 信息而一个较小的感受野可能无法捕获目标的结构信息网络的步长影响了定位准确性的程度特别是对小目标而言与此同时它也控制了输出 feature map 的大小从而影响了 feature 的判别性和检测精度。此外对于一个全卷积的结构来说feature padding 对卷积来说会在模型训练中引入潜在的位置偏移从而使得当一个目标移动到接近搜索范围边界的时候很难做出准确的预测。这三个因素同时造成了 Siamese Tracker 无法很好的从更顶尖的模型中收益。 2.如果破坏了网络的平移不变性具体会带来什么问题呢 如果现代化网络的平移不变性被破坏以后带来的弊端就是会学习到位置偏见按照SiamFC的训练方法正样本都在正中心网络逐渐会学习到这种统计特性学到样本中正样本分布的情况。即简而言之网络会给图像的中心位置分配更大的权重。 3.空间感知策略 要想使用更深的特征提取网络就要避免对目标产生强烈的中心偏移我们采用空间感知采样策略训练了具有ResNet-50骨干网的SiamRPN。在训练过程中我们不再把正样本块放在图像正中心而是按照均匀分布的采样方式让目标在中心点附近进行偏移。随着偏移的范围增大深度网络可以由刚开始的完全没有效果逐渐变好。 具体的效果如下图所示当我们将shift设置为0时网络只会关注图像中心的位置对应到图中就是只有中心位置具有较大的响应值而当我们将shift设置为16时网络开始关注更多的图像范围对应到图中就是响应的范围会扩大颜色由深变浅而当我们将shift设置为32时网络会关注更大额图像范围对应到图中就是响应的范围变得更大颜色也更加多样化。 所以说通过均匀分布的采样方式让目标在中心点附近进行偏移可以缓解网络因为破坏了严格平移不变性带来的影响即消除了位置偏见让现代化网络可以应用于跟踪算法中。 4.为什么该问题在检测任务和语义分割任务中并不存在 因为对于物体检测和语义分割而言训练过程中物体本身就是在全图的每个位置较为均匀的分布。我们可以很容易的验证如果在物体检测网络只训练标注在图像中心的样本而边缘的样本都不进行训练那么显然这样训练的网络只会对图像的中心位置产生高响应边缘位置就随缘了不难想象这种时候边缘位置的性能显然会大幅衰减。而更为致命的是按照SiamFC的训练方式中心位置为正样本边缘位置为负样本。那么网络只会记录下边缘永远为负不管表观是什么样子了。这完全背离了我们训练的初衷。 创新点二ResNet-50深层网络 我们主要的实验实在ResNet-50上做的。现代化网络一般都是stride32但跟踪为了定位的准确性一般stride都比较小Siamese系列一般都为8所以我们把ResNet最后两个block的stride去掉了同时增加了dilated convolution一是为了增加感受野二是为了能利用上预训练参数。论文中提到的MobileNet等现代化网络也是进行了这样的改动。如上图所示改过之后后面三个block的分辨率就一致了。 在训练过程中采用了新的采样策略后我们可以训练ResNet网络了并且能够正常跟踪一些视频了。之前跟踪过程中一直聚集在中心根本无法正常跟踪目标。对backbone进行finetune以后又能够进一步得到一些性能提升。 由于所有层的填充都保持不变模板特征的空间大小增加到15这给相关模块带来了沉重的计算负担。因此作者裁剪中心7×7区域作为模板特征其中每个特征单元仍然可以捕获整个目标区域。 创新点三多层特征融合 在以前的工作中仅使用像AlexNet这样的浅层网络多层特性不能提供非常不同的作用。然而考虑到感受野的变化ResNet中的不同层更有意义。浅层的特征主要集中在低层次的信息上如颜色、形状等对于定位是必不可少的而缺乏语义信息深层的特征具有丰富的语义信息在某些挑战场景如运动模糊、形变等中是有益的。使用这种丰富的层次信息有助于跟踪。 在多层使用siamrpn的好处 如创新点2中的图所示我们会观察到作者分别在conv3_3、conv4_6和conv5_3的分支上使用siamrpn网络并将前面siamrpn的结果输入到后面的siamrpn网络中该思路类似于cvpr2019值的C-RPN算法通过多级级联具有两个优点 可以通过多个siamrpn来选择出多样化的样本或者具有判别性的样本块第一个siamrpn可以去除掉一些特别简单的样本块而后面的网络进一步进行滤除最终剩余一些hard negative sample这样其实有利于提升网络的判别能力。由于使用了多级回归操作因此可以获得一个更加准确的BB。 创新点四深层互相关 互相关模块是嵌入两个分支信息的核心操作。SiamFC利用互相关层获得用于目标定位的单信道响应图。在SiamRPN中通过添加一个巨大的卷积层来缩放信道扩展了互相关以嵌入更高级别的信息例如anchors。重上行信道模块使得参数分布严重不平衡使得SiamRPN训练优化困难。   作者提出了一个轻量级的互相关层称为深度互相关以实现有效的信息关联。深度互相关层包含的参数比SiamRPN中使用的互相关层少10倍性能与之相当。   为了达到这个目标作者采用一个 conv-bn block 来调整特征来适应跟踪任务。Bounding box prediction 和 基于 anchor 的分类都是非对称的 (asymmetrical)。为了编码这种不同the template branch 和 search branch 传输两个 non-shared convolutional layers。然后这两个 feature maps 是有相同个数的 channels然后一个 channel 一个 channel 的进行 correlation operation。另一个 conv-bn-relu block用于融合不同 channel 的输出。最终最后一个卷积层用于输出 classification 和 regression 的结果。 通过用 Depthwise correlation 替换掉 cross-correlation我们可以很大程度上降低计算代价和内存使用。通过这种方式template 和 search branch 的参数数量就会趋于平衡导致训练过程更加稳定。 如上图所示图中a互相关层预测方法是取自SiamFC中目标模板和搜索图像之间的单通道相似性映射。模板图像和搜索图像在经过网络后输出通道数相同的featuremap两者逐通道相互卷积最后取平均值。 图中b上行信道互相关层取自SiamRPN模板图像和搜索图像经过特征提取网络生成feature map后输入RPN网络分类分支和回归分支分别经过非权值共享的卷积层后在相互卷积参数量十分巨大。 图中c深度互相关层预测模板和搜索图像之间的多通道相关性特征取自SiamRPN模板图像经过卷积层后并不像SiamRPN那样将通道数增加2k倍每个grid生成k个anchors而是保持不变同时搜索图像也与模板图像保持一致两者逐通道相互卷积之后接一个1×1的卷积层再改变通道数这样在保持精度的同时减少了参数量。如下第一张图输入两个从ResNet获得的特征层(channel数目是一致的)先同样分别通过一个卷积层(由于需要学的任务不同所以卷积层参数不共享)再分别进行DW卷积操作然后两分支再分别通过一层不同的卷积层改变通道数以获得想要的分类和回归结果。这样一来就可以减少计算量且使得两个分支更加平衡。 通道数的研究 下图说明了一个有趣的现象。同一类别的对象在同一信道148信道的car、222信道的person和226信道的face上具有高响应而其余信道的响应被抑制。这一特性可以理解为由深度互相关产生的信道方向特征几乎是正交的每个信道代表一些语义信息。我们还分析了当使用上通道互相关时的热图而响应图的解释性较差。 上图为conv4中的深度相关输出通道。conv4共有256个通道但只有少数信道在跟踪过程中有较高的响应。因此选择第148、222、226个通道作为演示它们是图中的第2、3、4行。第一行包含来自OTB数据集的六个相应的搜索区域。不同的通道表示不同的语义第148通道对汽车的响应较高而对人和脸的响应较低。第222频道和第226频道分别对人和脸有很高的响应。 代码分析 整体代码简述 整体代码主要分成两个部分第一个是初始帧标记的目标box为temple第二个部分为追踪过程中的track目标。 代码首先将初始帧进行处理成127×127的形式然后进入主体网络包括resnet50经过resnet50后输出三个feature_map大小分别是[1 512 15 15]、[1 1024 15 15]、[1 2048 15 15]和adjustnect框架中并将输出的3个feature_map其大小分别是[1 128 7 7]、[1 256 7 7]、[1 512 7 7]进行保存。 追踪过程始终保持上一帧目标位置的中心根据上一帧目标位置的得分判断是否进行长期追踪长期追踪围绕中心位置搜索的面积较大写短期追踪围绕中心面积搜索的范围较小是否进行长期追踪主要是根据上上衣目标帧的得分决定按照追踪形式将上一帧范围内的像素进行剪裁填充以及resize成255×255将剪裁过后的图片输入到网络框架中包括resnet50经过resnet50后输出三个feature_map大小分别是[1 512 31 31]、[1 1024 31 31]、[1 2048 31 31]和adjustnect并输出三个feature_map大小分别为[1 128 31 31]、[1 256 31 31]、[1 512 31 31] 最后temple和track中分别输出的feature_map进入rpn网络中按照索引一一对应进行卷积操之后将templw中的feature展开成[temple.size[0]*temple.size[1], 1,temple.size[2],temple. zise[3]]的形式作为kerneltrack同样改变通道数作输入层进行卷积操作之后将三次卷积操作的结果按照一定权重网络中训练出来的权重参数相加最后输出。rpn中有两个分支一个用来预测是否是目标类别cls输出的tensor大小[1, 10, 25,25]选择的anchor数为5预测为2分类因此第二个维度上的通道数为10另一个分支预测位置的偏移量loc,输出的tensor大小为[1, 20, 25, 25]选择的anchor为5预测四个位置上的偏移[x, y, w, h]。 根据cls何loc的输出预测是否是目标以及目标位置将cls何loc分别展开成[3125, 2], [3125, 4]的形式cls经过softmax分类器并取最后一列最为目标位置的预测概率。anchor box结合回归结果得出bounding box。最后使用余弦窗和尺度变化惩罚来对cls中经过softmax处理过后的最后一列进行排序选最好的。余弦窗是为了抑制距离过大的尺度惩罚是为了抑制尺度大的变化 特征提取网络 改进的残差网络ResNet-50 逐层特征融合Layerwise Aggregation Depthwise Cross Correlation 接下来按照分成的三部分进行详细说明。 1特征提取网络 论文中提到 The original ResNet has a large stride of 32 pixels, which is not suitable for dense Siamese network prediction. As shown in Fig.3, we reduce the effective strides at the last two block from 16 pixels and 32 pixels to 8 pixels by modifying the conv4 and conv5 block to have unit spatial stride, and also increase its receptive field by dilated convolutions. An extra 1 x 1 convolution layer is appended to each of block outputs to reduce the channel to 256. 作者的意思就是嫌弃原来ResNet的stride过大从而在conv4和conv5中将stride2改动为stride1。但是同时为了保持之前的感受野采用了空洞卷积。其代码定义如下 class ResNetPP(nn.Module):def __init__(self, block, layers, used_layers):self.inplanes 64super(ResNetPP, self).__init__()self.conv1 nn.Conv2d(3, 64, kernel_size7, stride2, padding0, # 3biasFalse)self.bn1 nn.BatchNorm2d(64)self.relu nn.ReLU(inplaceTrue)self.maxpool nn.MaxPool2d(kernel_size3, stride2, padding1)self.layer1 self._make_layer(block, 64, layers[0])self.layer2 self._make_layer(block, 128, layers[1], stride2)self.feature_size 128 * block.expansionself.used_layers used_layerslayer3 True if 3 in used_layers else Falselayer4 True if 4 in used_layers else Falseif layer3:self.layer3 self._make_layer(block, 256, layers[2],stride1, dilation2) # 15x15, 7x7self.feature_size (256 128) * block.expansionelse:self.layer3 lambda x: x # identityif layer4:self.layer4 self._make_layer(block, 512, layers[3],stride1, dilation4) # 7x7, 3x3self.feature_size 512 * block.expansionelse:self.layer4 lambda x: x # identityfor m in self.modules():if isinstance(m, nn.Conv2d):n m.kernel_size[0] * m.kernel_size[1] * m.out_channelsm.weight.data.normal_(0, math.sqrt(2. / n))elif isinstance(m, nn.BatchNorm2d):m.weight.data.fill_(1)m.bias.data.zero_()def _make_layer(self, block, planes, blocks, stride1, dilation1):downsample Nonedd dilationif stride ! 1 or self.inplanes ! planes * block.expansion:if stride 1 and dilation 1:downsample nn.Sequential(nn.Conv2d(self.inplanes, planes * block.expansion,kernel_size1, stridestride, biasFalse),nn.BatchNorm2d(planes * block.expansion),)else:if dilation 1:dd dilation // 2padding ddelse:dd 1padding 0downsample nn.Sequential(nn.Conv2d(self.inplanes, planes * block.expansion,kernel_size3, stridestride, biasFalse,paddingpadding, dilationdd),nn.BatchNorm2d(planes * block.expansion),)layers []layers.append(block(self.inplanes, planes, stride,downsample, dilationdilation))self.inplanes planes * block.expansionfor i in range(1, blocks):layers.append(block(self.inplanes, planes, dilationdilation))return nn.Sequential(*layers)def forward(self, x):x self.conv1(x)x self.bn1(x)x_ self.relu(x)x self.maxpool(x_)p1 self.layer1(x)p2 self.layer2(p1)p3 self.layer3(p2)p4 self.layer4(p3)out [x_, p1, p2, p3, p4]out [out[i] for i in self.used_layers]if len(out) 1:return out[0]else:return out从上述代码中的这段代码可以看出 if layer3:self.layer3 self._make_layer(block, 256, layers[2],stride1, dilation2) # 15x15, 7x7self.feature_size (256 128) * block.expansionelse:self.layer3 lambda x: x # identityif layer4:self.layer4 self._make_layer(block, 512, layers[3],stride1, dilation4) # 7x7, 3x3self.feature_size 512 * block.expansion作者在原来的ResNet-50的基础上进行了一些修改包括stride1与空洞卷积的使用。 2逐层的特征融合Layerwise Aggregation 熟悉目标检测的FPN网络的小伙伴们一定不会对Layerwise Aggregation陌生。一般而言浅层的网络包含的信息更多有关于物体的颜色、条纹等深层的网络包含的信息更多包含物体的语义特征。正如作者文中提到的那样 Features from earlier layers will mainly focus on low level information such as color, shape, are essential for localization, while lacking of semantic information 使用特征融合可以弥补浅层信息和深层信息的不足更有助于单目标追踪。 本文中的Siamese RPN利用了ResNet-50在conv3、conv4、conv5的输出作为输入。如下图所示。 也就是这三个输出分别都有各自的RPN网络并不是通过堆叠或者相加进行融合。这在代码中是这样体现的 self.features resnet50(**{used_layers: [2, 3, 4]})先使用改进后的resnet50作为特征提取网络返回输出的层 id 为[2,3,4]其实就是conv3、conv4、conv5的输出。 然后分别对template图像和需要detection的图像分别进行特征提取。 zf self.features(template)xf self.features(detection)事实上zf 和 xf 并不是单一的特征图而是一个列表每个列表中包含了三个特征图。 接着在特征提取结束后需要对提取的特征进行调整代码中是这样实现的 zf self.neck(zf)xf self.neck(xf)那么这个neck的定义如下 AdjustAllLayer(**{in_channels: [512, 1024, 2048], out_channels: [256, 256, 256]})AdjustAllLayer定义如下 class AdjustLayer(nn.Module):def __init__(self, in_channels, out_channels):super(AdjustLayer, self).__init__()self.downsample nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size1, biasFalse),nn.BatchNorm2d(out_channels),)def forward(self, x):x self.downsample(x)if x.size(3) 20:l 4r l 7x x[:, :, l:r, l:r]return xclass AdjustAllLayer(nn.Module):def __init__(self, in_channels, out_channels):super(AdjustAllLayer, self).__init__()self.num len(out_channels)if self.num 1:self.downsample AdjustLayer(in_channels[0], out_channels[0])else:for i in range(self.num):self.add_module(downsamplestr(i2),AdjustLayer(in_channels[i], out_channels[i]))def forward(self, features):if self.num 1:return self.downsample(features)else:out []for i in range(self.num):adj_layer getattr(self, downsamplestr(i2))out.append(adj_layer(features[i]))return out可见上面的AdjustAllLayer的作用就是对特征提取网络输出的三个特征图分别做1x1卷积调整所有特征图的通道数为256。论文中也有提及 An extra 1 x 1 convolution layer is appended to each of block outputs to reduce the channel to 256 上述代码中有个很有趣的forward即 def forward(self, x):x self.downsample(x)if x.size(3) 20:l 4r l 7x x[:, :, l:r, l:r]return x这么做是为了什么呢我们发现原文中提到 Since the paddings of all layers are kept, the spatial size of the template feature increases to 15, which imposes a heavy computational burden on the correlation module. Thus we crop the center 7 x 7 regions as the template feature where each feature cell can still capture the entire target region. 原来是因为降低运算量所以对template的特征图进行了裁剪恍然大悟呀原来原文中的细节都在代码中有所描述所以我十分推荐大家结合代码看论文这是非常容易进行理解的。 特征提取以及所有通道都压缩至256后紧接着代码实现如下 cls, loc self.head(zf, xf)其中head定义如下 self.head MultiRPN(**{anchor_num: 5, in_channels: [256, 256, 256], weighted: True})其中MultiRPN定义如下 class MultiRPN(RPN):def __init__(self, anchor_num, in_channels, weightedFalse):super(MultiRPN, self).__init__()self.weighted weightedfor i in range(len(in_channels)):self.add_module(rpnstr(i2),DepthwiseRPN(anchor_num, in_channels[i], in_channels[i]))if self.weighted:self.cls_weight nn.Parameter(torch.ones(len(in_channels)))self.loc_weight nn.Parameter(torch.ones(len(in_channels)))def forward(self, z_fs, x_fs):cls []loc []for idx, (z_f, x_f) in enumerate(zip(z_fs, x_fs), start2):rpn getattr(self, rpnstr(idx))c, l rpn(z_f, x_f)cls.append(c)loc.append(l)if self.weighted:cls_weight F.softmax(self.cls_weight, 0)loc_weight F.softmax(self.loc_weight, 0)def avg(lst):return sum(lst) / len(lst)def weighted_avg(lst, weight):s 0for i in range(len(weight)):s lst[i] * weight[i]return sif self.weighted:return weighted_avg(cls, cls_weight), weighted_avg(loc, loc_weight)else:return avg(cls), avg(loc)3深层互相关Depthwise Cross Correlation Siamese RPN中选用了Depth-wise Cross Correlation Layer对Template和Search Region进行卷积运算。这么做是为了降低计算量。具体实现过程如下 class DepthwiseXCorr(nn.Module):def __init__(self, in_channels, hidden, out_channels, kernel_size3, hidden_kernel_size5):super(DepthwiseXCorr, self).__init__()self.conv_kernel nn.Sequential(nn.Conv2d(in_channels, hidden, kernel_sizekernel_size, biasFalse),nn.BatchNorm2d(hidden),nn.ReLU(inplaceTrue),)self.conv_search nn.Sequential(nn.Conv2d(in_channels, hidden, kernel_sizekernel_size, biasFalse),nn.BatchNorm2d(hidden),nn.ReLU(inplaceTrue),)self.head nn.Sequential(nn.Conv2d(hidden, hidden, kernel_size1, biasFalse),nn.BatchNorm2d(hidden),nn.ReLU(inplaceTrue),nn.Conv2d(hidden, out_channels, kernel_size1))def forward(self, kernel, search):kernel self.conv_kernel(kernel)search self.conv_search(search)feature xcorr_depthwise(search, kernel)out self.head(feature) #维度提升return outclass DepthwiseRPN(RPN):def __init__(self, anchor_num5, in_channels256, out_channels256):super(DepthwiseRPN, self).__init__()self.cls DepthwiseXCorr(in_channels, out_channels, 2 * anchor_num)self.loc DepthwiseXCorr(in_channels, out_channels, 4 * anchor_num)def forward(self, z_f, x_f):cls self.cls(z_f, x_f)loc self.loc(z_f, x_f)return cls, loc其中xcorr_depthwise定义如下 def xcorr_depthwise(x, kernel):depthwise cross correlationbatch kernel.size(0)channel kernel.size(1)x x.view(1, batch*channel, x.size(2), x.size(3))kernel kernel.view(batch*channel, 1, kernel.size(2), kernel.size(3))out F.conv2d(x, kernel, groupsbatch*channel)out out.view(batch, channel, out.size(2), out.size(3))return out实质上Depthwise Cross Correlation采用的就是分组卷积的思想分组卷积可以带来运算量的大幅度降低被广泛用于MobileNet系列网络中。 通过上述代码可以看出与Siamese RPN网络不同Siamese RPN提升网络通道数为2k或者4k的操作是在卷积操作 Cross Correlation)之后而Siamese RPN网络是在卷积操作之前这样就减少了大量的计算量了。这在DepthwiseXCorr类中的forward中定义出来了如下 def forward(self, kernel, search):kernel self.conv_kernel(kernel)search self.conv_search(search)feature xcorr_depthwise(search, kernel)out self.head(feature) #维度提升return out上面的self.head运算就是升维运算到2k或者4k)可以看出其发生在xcorr_depthwise之后。 最后的最后网络最后输出的3个cls和loc分支进行了按权重融合。这在MultiRPN的forward定义了如下 def forward(self, z_fs, x_fs):cls []loc []for idx, (z_f, x_f) in enumerate(zip(z_fs, x_fs), start2):rpn getattr(self, rpnstr(idx))c, l rpn(z_f, x_f)cls.append(c)loc.append(l)if self.weighted:cls_weight F.softmax(self.cls_weight, 0)loc_weight F.softmax(self.loc_weight, 0)def avg(lst):return sum(lst) / len(lst)def weighted_avg(lst, weight):s 0for i in range(len(weight)):s lst[i] * weight[i]return sif self.weighted:return weighted_avg(cls, cls_weight), weighted_avg(loc, loc_weight)else:return avg(cls), avg(loc)总结 至此Siamese RPN的网络结构就讲解结束了代码总结如下 def forward(self, template, detection):zf self.features(template) #ResNet-50特征提取xf self.features(detection)zf self.neck(zf) #降低维度为256xf self.neck(xf)cls, loc self.head(zf, xf) #RPNreturn cls, loc总体的结构图如下 图中右侧的支路中 adj系列就是降维为256的1x1卷积DW_Conv就是Depthwise Cross Correlation操作Box_Head就是提升维度为4k的1x1卷积Cls_Head就是提升维度为2k的1x1卷积 至此Siamese RPN的结构解析也结束了。 论文翻译 Abstract 1. Introduction 2. Related Work 3. Siamese Tracking with Very Deep Networks 3.1. Analysis on Siamese Networks for Tracking 3.2. ResNet-driven Siamese Tracking 3.3. Layer-wise Aggregation 3.4. Depthwise Cross Correlation 4. Experimental Results 4.1. Training Dataset and Evaluation 4.2. Implementation Details 4.3. Ablation Experiments 4.4. Comparison with the state-of-the-art 5. Conclusions
http://www.sadfv.cn/news/374188/

相关文章:

  • 微网站开发企业选择西樵乐从网站建设
  • 网站建设销售好做嘛网站浮动窗口代码
  • 工程建设标准网官方网站手机上做网站的软件
  • 迅速提高网站排名协会网站改版建议
  • 企业网站建设的研究开发方法及技术路线wordpress如何引入layui路径
  • 网站调用视频社保网站上做减员一直不审核
  • 做网站订房网站app和网站开发哪个难
  • 上海网站建设lv cnhtml可以做网站吗
  • 学习网站建设课程天元建设集团有限公司企查查
  • 网站建设团队管理模板雄安 网站建设
  • 在虚拟机中如何做二级域名网站什么都可以看的浏览器
  • 外贸建站哪好郑州网站制作汉狮
  • 网站建设创作思路怎么写佛山网站建设的市场
  • 网站建设找美橙互联2022年国内重要新闻
  • 微网站下载资料怎么做WordPress怎么文章分类
  • 网站如何报备百度云服务器做php网站
  • 吴江企业建设网站顺口大气三个字公司名字
  • 太仓苏州网站建设wordpress本地编辑
  • 电脑建网站软件电子商务网站建设规划书范文
  • 工商网站官网查询WordPress设置API
  • 网站建设现状青岛 两学一做 网站
  • 网站设计师介绍小程序项目
  • 国际网站空间张楚岚
  • 茂名网站建设技术托管上海企业服务云app
  • 网站怎么做充值系统电脑培训班在哪里报名
  • 用于网站建设的费用怎么备注敬请期待哦
  • 团购网站开发的可行性分析网站制作资质
  • 南京建设网站费用广告优化师工作内容
  • 建设电影网站广告哪里找莱芜最新钟点工招聘
  • 徐州网站建设服务衡阳衡南网站建设