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

潍坊模板建站平台网站开发 图形验证码

潍坊模板建站平台,网站开发 图形验证码,网站建设方案书的内容,菜鸟教程网页制作模板ViT-vision transformer 介绍 Transformer最早是在NLP领域提出的#xff0c;受此启发#xff0c;Google将其用于图像#xff0c;并对分类流程作尽量少的修改。 起源#xff1a;从机器翻译的角度来看#xff0c;一个句子想要翻译好#xff0c;必须考虑上下文的信息受此启发Google将其用于图像并对分类流程作尽量少的修改。 起源从机器翻译的角度来看一个句子想要翻译好必须考虑上下文的信息 如The animal didn’t cross the street because it was too tired将其翻译成中文这里面就涉及了it这个词的翻译具体it是指代animal还是street就需要根据上下文来确定所以现在问题就变成如何让机器学习上下文? 例如有两个特征分别为性别和收入二者做交互特征简单的说即两个特征相乘可以得到如此数据为男人的状态下收入为多少的特征则可以利用这个特征去分析性别对收入的影响相对于同时考虑了性别和收入的关系。那么借鉴这个思想相对于引入一个相乘的交互关系就可以去表示上下文信息了。而Attention在本质上用一句话概括就是带权重的相乘求和。 在Attention中假如我们要翻译it这个词这时候it这个词称为queryQ待查询。查询什么呢查询句子中的其他单词包括自己这里其他的单词包括自己称为keysK这里的查询操作相对于上文说的相乘而在Attention中用的是点乘操作。如果还记得Attention的输入是Patch embedding的结果即是一个个N维空间的向量即Q和K代表的内容都为N维空间的向量那么点乘即可以表示这两个向量的相似程度——Q*K |Q||K|cosθ Q和K相乘后可以得到一个代表词和词之间相似度的概念这里记为S。如果我们对这个S取softmax是不是相对于就得到了当前要查询的Q到底对应哪个词的概率比较大的概率这里记为P。 而Attention就是对P做权重加和的结果而为什么还要对P做权重这个权重也是可学习的加和呢其实我觉得这才是Attention的精髓因为每个权重即代表了网络对于哪个概率对应下的内容更加注意对于哪些内容不需要注意使网络可以更加关注与需要注意的东西其他无关的东西通过这个权重相对于舍弃了。而我们记这个权重为V。 思路ViT算法中首先将整幅图像拆分成若干个patch然后把这些patch的线性嵌入序列作为Transformer的输入送入网络然后使用监督学习的方式进行图像分类的训练。 具体流程 将图像拆分成若干个patch将patches通过一个线性映射层得到若干个token embedding将多个token embedding concat一个cls_token可学习参数每个参数均加上position embedding位置编码防止无法找到原来的位置将token embedding、cls_token和position embedding一同传入encoder模块encoder模块L个block Layer Norm标准归一化(便于收敛)MSA/MHA多头子注意力机制输入输出作残差链接Layer Norm标准归一化(便于收敛)MLP全连接层Linear… encoder的输出通过MLP Head作分类任务 优点模型简单且效果好较好的扩展性模型越大效果越好。 与CNN结构对比 Transformer的平移不变性和局部感知性较差在数据量不充分时效果较差但是对于大量的训练数据Transformer的效果更佳无需像CNN构造复杂的网络结构CNN往往是不断加深网络才能对刷新某任务的SOTA 模型结构 图像分块嵌入Patch Embedding 具体步骤 将 H ∗ W ∗ C H * W * C H∗W∗C的图像变成一个 N ∗ ( P 2 ∗ C ) N * (P^2*C) N∗(P2∗C)的序列这个序列由一系列展平的图像块构成即把图像切分成小块后再展平其中 N H W / P 2 NHW/P^2 NHW/P2个图像块每个图像块的维度为 P 2 ∗ C P^2*C P2∗C P P P表示图像块大小 C C C表示通道数量。 将每个图像块的维度由 P 2 ∗ C P^2*C P2∗C变换为 D D D在此进行embedding只需对每个 P 2 ∗ C P^2*C P2∗C图像块做一个线性变换将维度压缩至 D D D。 将 ( N 1 ) ∗ D (N1)*D (N1)∗D的序列作为encoder的输入。 为啥是N1呢因为要多加上一个维度才能关联到全局的信息这个恰好是class token class PatchEmbed(nn.Module):2D Image to Patch Embeddingdef __init__(self, img_size224, patch_size16, in_c3, embed_dim768, norm_layerNone):super().__init__()img_size (img_size, img_size)patch_size (patch_size, patch_size)self.img_size img_sizeself.patch_size patch_sizeself.grid_size (img_size[0] // patch_size[0], img_size[1] // patch_size[1])self.num_patches self.grid_size[0] * self.grid_size[1]self.proj nn.Conv2d(in_c, embed_dim, kernel_sizepatch_size, stridepatch_size)self.norm norm_layer(embed_dim) if norm_layer else nn.Identity()def forward(self, x):B, C, H, W x.shapeassert H self.img_size[0] and W self.img_size[1], \fInput image size ({H}*{W}) doesnt match model ({self.img_size[0]}*{self.img_size[1]}).# flatten: [B, C, H, W] - [B, C, HW]# transpose: [B, C, HW] - [B, HW, C]x self.proj(x).flatten(2).transpose(1, 2)x self.norm(x)return x多头自注意力机制Multi-head Self-attention 多头较于单头的优势是增强了网络的稳定性和鲁棒性 将 ( N 1 ) ∗ D (N1)*D (N1)∗D的序列输入至encoder进行特征提取其最重要的结构是多头自注意力机制2 head的multi-head attention结构如下所示具体步骤如下 输入 a i a^i ai经过转移矩阵 W W W得到 q i , k i , v i q^i,k^i,v^i qi,ki,vi再分别切分成 q i , 1 , q i , 2 , k i , 1 , k i , 2 , v i , 1 , v i , 2 , q i , 1 . . . q^{i,1},q^{i,2},k^{i,1},k^{i,2},v^{i,1},v^{i,2},q^{i,1}... qi,1,qi,2,ki,1,ki,2,vi,1,vi,2,qi,1...接着 q i , j 与 k i , j q^{i,j}与k^{i,j} qi,j与ki,j做attention得到权重向量 α α α将 α α α与 v i , j v^{i,j} vi,j进行加权求和最终得到 b i , j b^{i,j} bi,j将 b i , j b^{i,j} bi,j拼接起来通过一个线性层进行处理得到最终的结果。 具体说说其中的attention q i , j , k i , j 与 v i , j q^{i,j},k^{i,j}与v^{i,j} qi,j,ki,j与vi,j计算 b i , j b^{i,j} bi,j的方法是缩放点积注意力 (Scaled Dot-Product Attention)加权内积得到 α α α α 1 , i q 1 ∗ k i d α_{1,i}\frac{q^1*k^i}{\sqrt{d}} α1,i​d ​q1∗ki​ 其中d是q和k的维度大小除以一个 d \sqrt{d} d ​可以达到归一化的效果。 接着将 α 1 , i α_{1,i} α1,i​取softmax操作并与 v i , j v^{i,j} vi,j相乘得到最后结果。 class Attention(nn.Module):def __init__(self,dim, # 输入token的dimnum_heads8,qkv_biasFalse,qk_scaleNone,attn_drop_ratio0.,proj_drop_ratio0.):super(Attention, self).__init__()self.num_heads num_headshead_dim dim // num_headsself.scale qk_scale or head_dim ** -0.5self.qkv nn.Linear(dim, dim * 3, biasqkv_bias)self.attn_drop nn.Dropout(attn_drop_ratio)self.proj nn.Linear(dim, dim)self.proj_drop nn.Dropout(proj_drop_ratio)def forward(self, x):# [batch_size, num_patches 1, total_embed_dim]B, N, C x.shape# qkv(): - [batch_size, num_patches 1, 3 * total_embed_dim]# reshape: - [batch_size, num_patches 1, 3, num_heads, embed_dim_per_head]# permute: - [3, batch_size, num_heads, num_patches 1, embed_dim_per_head]qkv self.qkv(x).reshape(B, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4)# [batch_size, num_heads, num_patches 1, embed_dim_per_head]q, k, v qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple)# transpose: - [batch_size, num_heads, embed_dim_per_head, num_patches 1]# : multiply - [batch_size, num_heads, num_patches 1, num_patches 1]attn (q k.transpose(-2, -1)) * self.scaleattn attn.softmax(dim-1)attn self.attn_drop(attn)# : multiply - [batch_size, num_heads, num_patches 1, embed_dim_per_head]# transpose: - [batch_size, num_patches 1, num_heads, embed_dim_per_head]# reshape: - [batch_size, num_patches 1, total_embed_dim]x (attn v).transpose(1, 2).reshape(B, N, C)x self.proj(x)x self.proj_drop(x)return x多层感知机Multilayer Perceptron class Mlp(nn.Module):MLP as used in Vision Transformer, MLP-Mixer and related networksdef __init__(self, in_features, hidden_featuresNone, out_featuresNone, act_layernn.GELU, drop0.):super().__init__()out_features out_features or in_featureshidden_features hidden_features or in_featuresself.fc1 nn.Linear(in_features, hidden_features)self.act act_layer()self.fc2 nn.Linear(hidden_features, out_features)self.drop nn.Dropout(drop)def forward(self, x):x self.fc1(x)x self.act(x)x self.drop(x)x self.fc2(x)x self.drop(x)return xDropPath 一种特殊的 Dropout用来替代传统的Dropout结构。作用是若x为输入的张量其通道为[B,C,H,W]那么drop_path的含义为在一个Batch_size中随机有drop_prob的样本不经过主干而直接由分支进行恒等映射。 def drop_path(x, drop_prob: float 0., training: bool False):if drop_prob 0. or not training:return xkeep_prob 1 - drop_probshape (x.shape[0],) (1,) * (x.ndim - 1) # work with diff dim tensors, not just 2D ConvNetsrandom_tensor keep_prob torch.rand(shape, dtypex.dtype, devicex.device)random_tensor.floor_() # binarizeoutput x.div(keep_prob) * random_tensorreturn outputclass DropPath(nn.Module):Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).def __init__(self, drop_probNone):super(DropPath, self).__init__()self.drop_prob drop_probdef forward(self, x):return drop_path(x, self.drop_prob, self.training)Class Token 假设我们将原始图像切分成 3 × 3 9个小图像块最终的输入序列长度却是10也就是说我们这里人为的增加了一个向量进行输入我们通常将人为增加的这个向量称为 Class Token。 若没有这个向量也就是将 N 9 个向量输入 Transformer 结构中进行编码我们最终会得到9个编码向量可对于图像分类任务而言我们应该选择哪个输出向量进行后续分类呢两个方案可以实现 ViT算法提出了一个可学习的嵌入向量 Class Token将它与9个向量一起输入到 Transformer 结构中输出10个编码向量然后用这个 Class Token 进行分类预测即可。取除了cls_token之外的所有token的均值作为类别特征表示即编码中的x[:,self.num_tokens:].mean(dim1) Positional Encoding 在self-attention中输入是一整排的tokens我们很容易知道tokens的位置信息但是模型是无法分辨的因为self-attention的运算是无向的因此才使用positional encoding把位置信息告诉模型。 按照 Transformer 结构中的位置编码习惯这个工作也使用了位置编码。不同的是ViT 中的位置编码没有采用原版 Transformer 中的 sin/cos 编码而是直接设置为可学习的 Positional Encoding。 MLP Head 得到输出后ViT中使用了 MLP Head对输出进行分类处理这里的 MLP Head 由 LayerNorm 和两层全连接层组成并且采用了 GELU 激活函数。 参考链接 https://blog.csdn.net/qq_42735631/article/details/126709656?ops_request_miscrequest_idbiz_id102utm_termvision%20transformer%E6%A8%A1%E5%9E%8Butm_mediumdistribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-126709656.nonecasespm1018.2226.3001.4187https://blog.csdn.net/aixiaomi123/article/details/128025584?ops_request_miscrequest_idbiz_id102utm_termvision%20transformer%E6%A8%A1%E5%9E%8Butm_mediumdistribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-128025584.nonecasespm1018.2226.3001.4187https://github.com/google-research/vision_transformer/tree/mainhttps://blog.csdn.net/lzzzzzzm/article/details/122963640?ops_request_miscrequest_idbiz_id102utm_termvit%20transformer%E4%B8%AD%E7%9A%84%E5%A4%9A%E5%A4%B4%E8%87%AA%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6utm_mediumdistribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-122963640.nonecasespm1018.2226.3001.4187 02utm_termvit%20transformer%E4%B8%AD%E7%9A%84%E5%A4%9A%E5%A4%B4%E8%87%AA%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6utm_mediumdistribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-122963640.nonecasespm1018.2226.3001.4187https://blog.csdn.net/weixin_41803874/article/details/125729668
http://www.zqtcl.cn/news/669508/

相关文章:

  • 建设网站基础wordpress 网络图片
  • 深圳网站搜索优化工具义乌公司网站
  • 百度搜索网站带图片sem是什么品牌
  • 百度网盘app下载辽宁seo
  • 一般做网站用什么软件企业管理咨询服务机构
  • 达内培训网站开发金融公司网站 html
  • 珠海网站制作推荐微信营销和微博营销的区别
  • 电影网站如何做5网站建设公司
  • 河南网站优化公司哪家好南山网站设计线
  • 网站构建代码模板番禺网站建设
  • 拟一份饰品网站建设合同网站开发应注意哪些问题
  • 芜湖建站公司做网站的人多吗
  • 网站怎么加二级域名微信授权登录网站退出怎么做
  • 如何把旅行社网站做的好看网站创建方案怎么写
  • 织梦网站图标更换宠物网页设计图片
  • 如何查找网站竞争对手的宣传方式北京网站搭建公司电话
  • 北京正规制作网站公司wordpress 获取图片地址
  • 大学路网站建设推广图片素材
  • wordpress 创建网站搜索引擎优化代理
  • 设计网站用什么软件盈江城乡建设局网站
  • 网站建设模式有哪些内容seo品牌
  • 衡水做网站服务商济南如何挑选网站建设公司
  • 全屏的网站制作企业网站欢迎界面素材
  • 视频网站切片怎么做网站建设可自学吗
  • 本地推广平台网站seo优化如何做
  • 网站建设费算费用还是固定资产百度秒收录
  • 企业建站系统营销吧tt团队韩国企业网站设计
  • 上海嘉定网站建设公司有没有知道网址的
  • 电商网站的银行支付接入该怎么做杭州微信小程序外包
  • 余姚网站推广策划案门户网站做等保需要备案哪些