WDK_学习笔记_区块链+ViT和Swin transformer

文章目录

  • 摘要
  • 一、項目:Hyperledger-fabric技术的深入学习
    • 1.1 安装-2.2.0(只记录问题,其余按文档操作即可)
  • 二、深度学习:Version Transformer(ViT)和Swin Transformer
    • 2.1 ViT
      • 2.1 模型架构图
      • 2.2 图片切分为patch
      • 2.3 Patch转换为embedding
      • 2.4 加入位置编码
        • 2.4.1 做法
        • 2.4.2 讨论
      • 2.5 ViT中的Transformer
      • 2.6 整体流程梳理
    • 2.2 Swin
  • 总结

摘要

项目:看了很多区块链资料,大楷知道了一个基于超级账本的区块链项目是如何实现的。

  1. 编写区块链网络配置,如证书文件,组织个数,每个组织分别有多少用户,组织间进行通信的域名,共识机制等;
  2. 启动区块链网络,编写链码,安装链码,链码是执行账本逻辑操作的最底层,如增删查改都是通过链码实现的;
  3. 安装好链码后,通过SDK包,调用链码,给链码发送信息,链码根据该信息执行指定操作;
  4. 用go作为后端开发语言的话,可以用gin框架,搭建路由服务,和前端进行交互,接受前端的消息,调用指定的SDK包,向区块链中插入或查询数据,再将数据返回给前端。

深度学习:学习了ViM和Swin,两者都是基于transformer改进的模型,ViM是第一个比较成熟的让Transformer从NLP领域走向CV领域的模型,当数据量比较大时,ViM表现优于传统的CNN模型,但数据量较小时,效果不佳,Swin是基于ViM改进的模型,Swin是一个已经成熟的将Transformer应用于CV的模型,表现完全优于CNN,刷榜了各个CV比赛,作者希望将Swin作为一个通用的模型,正在研究如何将Swin应用于NLP领域。
论文:无
毕业设计:学弟正在进行应用开发


一、項目:Hyperledger-fabric技术的深入学习

重要参考资料:官方开发文档

1.1 安装-2.2.0(只记录问题,其余按文档操作即可)

通过查阅资料得知,以前安装的1.2.0版本过旧,参考资料缺失严重,而2.2.0是稳定版,官方提供了中文开发文档,并且和现有的开发软件包go-sdk适配,故选择更新。

  1. 问题1:执行在这里插入图片描述
    出现443错误,原因是国外DNS服务器无法帮助我们完成域名解析,可参考问题1解决办法解决问题;
  2. 问题2:运行测试网络命令.network.sh up测试fabric网络环境是否能跑通时出现"networks.test value Additional properties are not allowed (‘name’ was unexpected)",错误原因是docker-compose版本过低,可参考问题2解决办法;
  3. 问题3:按照官网开发文档部署链码时出错,原因是缺少相关依赖,可参考视频10:41解决。

二、深度学习:Version Transformer(ViT)和Swin Transformer

重要参考资料:b站视频ViT,b站视频Swin

2.1 ViT

2.1 模型架构图

Transformer原模型是用来处理NLP任务的,若用来处理图片,则需要将图片转换为embedding,如何将图片转换为emdedding的同时保留图片上的空间位置信息,这是需要解决的问题,ViT是如何处理该问题的呢?

  1. ViT将一张输入图片,分割成多个patch;
  2. 将所有patch拉平得到embedding,此时每个patch的embedding对应NLP中的一个词向量,再将该embedding经过一个线性层处理投映到对应空间;
  3. 加入位置编码信息;
  4. 经过Transformer Encoder;
  5. 经过MLP head层,得到最终结果。
    WDK_学习笔记_区块链+ViT和Swin transformer_第1张图片

2.2 图片切分为patch

为了解决将图像转换为embedding作为transformer输入的问题,故将图片切分为多个小patch,一张图片就是由这些patch组成;此时一张图片对应NLP任务中的一句话,一个patch就像构成这句话的一个词。
WDK_学习笔记_区块链+ViT和Swin transformer_第2张图片

2.3 Patch转换为embedding

将每个batch拉平,变成一维向量,再经过线性层,投映到我们设置的维度;

2.4 加入位置编码

2.4.1 做法

加入位置信息的方式有两种,一种是加入绝对位置信息,另一种是加入相对位置信息,在ViT中是加入绝对位置信息,如何做?加入绝对位置信息的编码方式有两种,1、一维的位置编码; 2、二维的位置编码,如下图:
WDK_学习笔记_区块链+ViT和Swin transformer_第3张图片
然后用得到的位置编码和和2.3得到的embedding相加,得到最终输入transformer的输入。

2.4.2 讨论

直觉上看,二维的位置编码信息应当更准确,但作者做了实验,实验证明:用一维位置编码和二维的位置编码效果差不多(如下图);
WDK_学习笔记_区块链+ViT和Swin transformer_第4张图片
出现该结果的原因可能是,作者用的是位置编码信息与embedding相加,该做法直觉上看,会导致一部分位置信息丧失和混乱,应当有更好的办法引入位置信息。

2.5 ViT中的Transformer

ViT中只用到了Transformer中Encoder的部分,并且做了改动,和原始的Transformer并不同,如下图。
WDK_学习笔记_区块链+ViT和Swin transformer_第5张图片

2.6 整体流程梳理

WDK_学习笔记_区块链+ViT和Swin transformer_第6张图片

2.2 Swin

Swin Transformer是对ViT的改进,改进之处主要有以下几点:

  1. 引入了patch merging,使得patch窗口在不断的变大,增加了感受野,如下图所示:
  2. 将注意力机制放在patch内部,降低了模型复杂度,由 0 ( n 2 ) 0(n^2) 0(n2)变为 0 ( n ) 0(n) 0(n)
  3. 位置编码采用相对位置编码,在计算注意力的时候引入位置信息,计算公式如下:
    在这里插入图片描述
    其中B就是相对位置矩阵,B如何融入呢?如下图:
    WDK_学习笔记_区块链+ViT和Swin transformer_第7张图片

总结

项目方面,已经找到了区块链开发的思路,未来几周会尝试去实现一下,深度学习方面,swin transformer效果强大,下周会去跑一下代码。

你可能感兴趣的:(笔记,区块链)