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

移动路由器做网站服务器吗免费建立网站的网站都有啥

移动路由器做网站服务器吗,免费建立网站的网站都有啥,网站建设 注意事项,如何制作个人网页封面Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 最近CV领域的Vision Transformer将在NLP领域的Transormer结果借鉴过来#xff0c;屠杀了各大CV榜单。对其做各种改进的顶会论文也是层出不穷#xff0c;本文将聚焦于各种最新的视觉trans…Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 最近CV领域的Vision Transformer将在NLP领域的Transormer结果借鉴过来屠杀了各大CV榜单。对其做各种改进的顶会论文也是层出不穷本文将聚焦于各种最新的视觉transformer的位置编码PEpositional encoding部分的设计思想及代码实现做一些总结。 ViT [2021-ICLR] AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 论文https://arxiv.org/abs/2010.11929 代码https://github.com/lucidrains/vit-pytorch/blob/main/vit_pytorch 对于原始的ViT笔者曾做过一份较为全面的代码解析及图解Vision TransformerViTPyTorch代码全解析附图解有兴趣的读者可以参考。 论文中的位置编码方法 PE的设计 在ViT中并没有对位置编码做过多的设计只是使用一组可学习的参数来学习位置编码注意这样的位置编码如果在面对测试时的高分辨率图像时是无法处理的。 ViT原文是这么说的 When feeding images of higher resolution, we keep the patch size the same, which results in a larger effective sequence length. The Vision Transformer can handle arbitrary sequence lengths (up to memory constraints), however, the pre-trained position embeddings may no longer be meaningful. We therefore perform 2D interpolation of the pre-trained position embeddings, according to their location in the original image. Note that this resolution adjustment and patch extraction are the only points at which an inductive bias about the 2D structure of the images is manually injected into the Vision Transformer. 大概意思就是当输入高分图像时会导致序列的长度变长ViT是可以处理任意长度的但此时训练得到的位置编码就不再有意义了并且只能通过2D插值实现。 z[xclass;xp1E,xp2E,…;xpNE]Epos,E∈R(P2⋅C)×D,Epos∈R(N1)×D(1)\mathbf{z}[\mathbf{x}_{class};\mathbf{x}^1_p\mathbf{E},\mathbf{x}^2_p\mathbf{E},\dots;\mathbf{x}^N_p\mathbf{E}]\mathbf{E}_{pos},\ \ \ \mathbf{E}\in\mathbb{R}^{(P^2\cdot C)\times D},\mathbf{E}_{pos}\in \mathbb{R}^{(N1)\times D} \ \ \ \ \ \ \ \ \ \ \ \ \ (1) z[xclass​;xp1​E,xp2​E,…;xpN​E]Epos​,   E∈R(P2⋅C)×D,Epos​∈R(N1)×D             (1) 根据原文公式即上式ViT中位置编码的维度应该为 (N1)×D(N1)\times D(N1)×D 这里 NNN 是图块的个数1是加上class token DDD 是映射后的每个token的维度因为要直接相加所以要保持一致。下面会用代码来验证查看。 关于PE的消融实验 原文附录中的实验也显示肯定是有位置编码比没有效果要好但是看起来比较有设计的二维位置编码和相对位置编码相较于简单的一维位置编码性能反而更差。 第一行是完全没有位置编码即没有提供位置信息相当于将一堆patch直接输入进去第二行是一维位置编码即将输入patch看作是序列第三行是二维位置编码将输入看作是二维的patch网格第四行是相对位置编码考虑到patch之间的相对距离将空间信息编码为而不是其绝对位置。 注意如果要使用相对位置编码一定要考虑好自己的任务需不需要绝对位置信息如目标检测由于要输出预测的边界框的坐标因此绝对位置信息是必须的这时使用相对位置编码就不合适了。 关于PE的可视化实验 ViT原文对位置编码做的可视化实验如下图所示热力图的含义是某个位置的图块的位置编码与全图其他位置图块的位置编码的余弦相似度。我们可以看到当然与自己相似度最高然后就是同行同列也比较高其他的位置就低一些这也基本符合我们对位置编码的基本期望因为所谓的位置编码要的就是图像块在原图中的位置信息更通俗点说就是行列信息即某个图像块是在原图中的哪行哪列。 代码分析 ViT代码中的位置编码 self.pos_embedding nn.Parameter(torch.randn(1, num_patches1, dim)) # ... x self.pos_embedding[:, :(n1)] 直接用可学习的参数torch.Parameter()作为位置编码直接加到token序列中跟随整个训练过程一起学习。关于torch.Parameter()的介绍可见博客PyTorch中的torch.nn.Parameter() 详解 另外我们再用代码来检查一下ViT中的位置编码的维度形状这里我们直接借用timm库中的实现 import timm model timm.create_model(vit_base_patch16_224, pretrainedTrue, num_classes10) pos_embed model.state_dict()[pos_embed] print(pos_embed.shape) 输出 torch.Size([1, 197, 768])我们是将224x224的图像分为14x14个图块共196块再加上class token 为197而768则是我们指定的维度符合我们的预期。 CPVT Conditional Positional Encodings for Vision Transformers 论文https://arxiv.org/abs/2102.10882 代码https://github.com/Meituan-AutoML/Twins 原文中给的链接中没有实做代码实做代码发布在这个仓库了 论文中的位置编码方法 CPVT与ViT的位置编码的区别在下图中体现的很明显ViT的位置编码PE没有过多的设计直接加到patch token和cls token得到的embedding上然后就送到后面的多个transformer block图中encoder中注意ViT中的PE必须显示地指定好token序列的长度。而CPVT则是先不加PE在第一个transformer block之后仅过PEGPostional Encoding Generator来生成位置编码在加到第一层的输出上在进行后面的计算这样长度就不需要显式指定可以随输入变化而变化因此被称为隐式的条件位置编码。 其中的PEG模块是用来产生条件位置编码的模块其框架如下图所示 在 PEG 中将上一层 Encoder 的 1D 输出变形成 2D再使用 F 学习其位置信息最后重新变形到 1D 空间与之前的 1D 输出相加之后作为下一个 Encoder 的输入。 具体来说在上图中为了根据局部领域我们首先将DeiT flatten过的输入序列 X∈RB×N×CX\in \mathbb{R}^{B\times N\times C}X∈RB×N×C​ reshape回二维图像空间 X′∈RB×H×W×CX\in\mathbb{R}^{B\times H\times W\times C}X′∈RB×H×W×C​ 。然后某个函数 F\mathcal{F}F​ 会反复作用于 X′XX′​ 中的局部图块来生成条件位置编码 EB×H×W×CE^{B\times H\times W\times C}EB×H×W×C​ PEG可以由二维卷积高效地实现其卷积核 k3k3k3​并且有零填充 k−12\frac{k-1}{2}2k−1​​ 。注意这里的零填充是很重要的它可以使模型感知到绝对位置 F\mathcal{F}F​ 可以是多种形式比如可分离卷积。 代码分析 在CPVT的代码实现中我们主要来看PEG部分 class PosCNN(nn.Module):def __init__(self, in_chans, embed_dim768, s1):super(PosCNN, self).__init__()self.proj nn.Sequential(nn.Conv2d(in_chans, embed_dim, 3, s, 1, biasTrue, groupsembed_dim), )self.s sdef forward(self, x, H, W):B, N, C x.shapefeat_token xcnn_feat feat_token.transpose(1, 2).view(B, C, H, W)if self.s 1:x self.proj(cnn_feat) cnn_featelse:x self.proj(cnn_feat)x x.flatten(2).transpose(1, 2)return xdef no_weight_decay(self):return [proj.%d.weight % i for i in range(4)]可以看到与原文中对PEG的介绍一致将第一层Encoder 的1D 输出变形成 2D再使用F学习其位置信息最后重新变形到 1D 空间与之前的 1D 输出相加之后作为下一个 Encoder 的输入。 这里的self.proj就是文中的转换函数 F​。 我们再来看PEG模块在整个CPVT中的使用 class CPVTV2(PyramidVisionTransformer):def __init__(self, ...)# ...self.pos_block nn.ModuleList( # 实例化一个PEG模块[PosCNN(embed_dim, embed_dim) for embed_dim in embed_dims])# ...def forward_features(self, x):B x.shape[0]for i in range(len(self.depths)):x, (H, W) self.patch_embeds[i](x)x self.pos_drops[i](x)for j, blk in enumerate(self.blocks[i]):x blk(x, H, W)if j 0:x self.pos_block[i](x, H, W) # PEG模块 在这里使用if i len(self.depths) - 1:x x.reshape(B, H, W, -1).permute(0, 3, 1, 2).contiguous()x self.norm(x)return x.mean(dim1) 可以看到只有在第一个encoder之后for循环中j0时使用PEG模块计算位置编码后面正常进行其他的其他Encoder的计算与论文原文一致。 本文将保持持续更新读者如果遇到有趣的Vision Transformer的改进方法也欢迎分享讨论。
http://www.ihoyoo.com/news/1626.html

相关文章:

  • 嘉兴seo网站排名优化打开edge是2345网址导航
  • 济南网站建设推荐企优互联不错英文网站建设费用
  • 南京网站设计制作公司排名建设个网站从哪里盈利
  • wordpress与数据库揭阳seo推广公司
  • 网站设计需求wordpress绑定外部域名
  • 什么是网络营销?网络营销的职能有哪些?网站优化师
  • 去哪里找做网站 的客户wordpress学生主题
  • 手机端网站外部链接如何去优化jsp 网站开发例子
  • 网站制作关键做网页的it网站
  • 福建省建设厅网站资质查影视网站如何做seo
  • 仙居微信网站开发ppt模板简约
  • 网站无法下载视频 怎么做企业查名
  • 垦利网站制作开源项目网站
  • 个人静态网站首页怎么做搭建网站平台有前途吗
  • 网络建站如何建成上海外贸人才网
  • 房地产网站系统网站套利怎么做
  • 如何给自己的网站做优化wordpress广告公司模板
  • 怎样访问简版网站公司做网站计入那个科目
  • 以前做的网站怎么才能登陆后台代练中介网站有得做吗
  • 网站想要被收录要怎么做百度搜索浏览器
  • 海拉尔做自己的网站成都logo设计公司排名
  • 深圳网站建设招标网站建站的书籍
  • 怎么做代刷网站教程六安网站关键词排名优化地址
  • 建设平滑扣皮带网站邯郸做wap网站的地方
  • 建设门户网站所需开发一款软件的费用
  • 饰品企业网站建设html网页制作房地产页面
  • 网站建设的界面f分旅游公司网站 优帮云
  • 一站式网页设计服务平台iis7添加php网站
  • 怎么做自己的门户网站一个网站建设多少钱
  • 天网站建设苏州网络推广去苏州聚尚网络