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

欧美网站欣赏好的logo设计网站

欧美网站欣赏,好的logo设计网站,中国外包加工网,北京装饰公司招聘工长一、说明 在这个由 4 部分组成的系列中#xff0c;我们将使用 PyTorch 中的深度学习技术从头开始逐步实现图像分割。本部分将重点介绍如何实现基于视觉转换器的图像分割模型。 图 1#xff1a;使用视觉转换器模型架构运行图像分割的结果。 从上到下#xff0c;输入图像、地面… 一、说明         在这个由 4 部分组成的系列中我们将使用 PyTorch 中的深度学习技术从头开始逐步实现图像分割。本部分将重点介绍如何实现基于视觉转换器的图像分割模型。   图 1使用视觉转换器模型架构运行图像分割的结果。         从上到下输入图像、地面实况分割掩码和预测分割掩码。来源作者 二、文章大纲         在本文中我们将参观风靡深度学习世界的变压器架构。变压器是一种多模态架构可以对语言、视觉和音频等不同模态进行建模。         在本文中我们将 了解变压器架构和所涉及的关键概念了解视觉变压器架构介绍从头开始编写的视觉转换器模型以便您可以欣赏所有构建块和移动部件跟踪输入到该模型的输入张量并检查它如何改变形状使用此模型对牛津 IIIT 宠物数据集执行图像分割观察此分割任务的结果简要介绍SegFormer一种用于语义分割的最先进的视觉转换器         在本文中我们将引用此笔记本中的代码和结果进行模型训练。如果要重现结果则需要一个 GPU 来确保第一个笔记本在合理的时间内完成运行。 三、本系列文章         本系列面向所有深度学习经验水平的读者。如果您想了解深度学习和视觉AI的实践以及一些扎实的理论和实践经验那么您来对地方了这将是一个由 4 部分组成的系列包含以下文章 概念和想法基于 CNN 的模型深度可分离卷积基于视觉变压器的模型本文         让我们从对变压器架构的介绍和直观理解开始我们的视觉变压器之旅。 四、变压器架构         我们可以将变压器架构视为交错的通信和计算层的组合。图 2 直观地描述了这一想法。变压器有N个处理单元图3中的N为2每个单元负责处理输入的1/N部分。为了使这些处理单元产生有意义的结果每个处理单元都需要具有输入的全局视图。因此系统将有关每个处理单元中的数据的信息重复传达给每个其他处理单元;使用从每个处理单元到每个其他处理单元的红色、绿色和蓝色箭头进行显示。接下来是基于此信息进行的一些计算。在充分重复此过程后模型能够产生预期的结果。 图 2变压器中的交错通信和计算。该图像仅显示了 2 层通信和计算。         值得注意的是大多数在线资源通常会讨论变压器的编码器和解码器如题为“注意力是你所需要的”的论文中所述。但是在本文中我们将仅描述变压器的编码器部分。         让我们仔细看看变压器中的通信和计算构成。 4.1 变压器中的通信注意         在变压器中通信由称为注意力层的层实现。在 PyTorch 中这被称为 MultiHeadAttention。我们稍后会谈到这个名字的原因。         文档说 “允许模型共同关注来自不同表示子空间的信息如论文中所述注意力就是你所需要的。         注意力机制使用形状批处理、长度、特征的输入张量 x并生成形状相似的张量 y以便根据张量在同一实例中关注的其他输入更新每个输入的特征。因此在大小为“长度”的实例中长度为“特征”的每个张量的特征会根据其他每个张量进行更新。这就是注意力机制的二次成本的用武之地。 图3相对于句子中其他单词显示的单词“it”的注意。我们可以看到“它”是在同一句话中注意“动物”、“太”和“tired”等词。          在视觉变压器的上下文中变压器的输入是图像。假设这是一个 128 x 128宽度、高度的图像。我们将其分成多个较小的大小块16 x 16。对于 128 x 128 的图像我们得到 64 个补丁长度每行 8 个补丁和 8 行补丁。         这 64 个大小为 16 x 16 像素的块中的每一个都被视为变压器模型的单独输入。在不深入细节的情况下将此过程视为由 64 个不同的处理单元驱动就足够了每个处理单元都在处理单个 16x16 图像补丁。         在每一轮中每个处理单元中的注意力机制负责查看它负责的图像补丁并查询其余 63 个处理单元中的每一个以询问它们可能相关和有用的任何信息以帮助它有效地处理自己的图像补丁。         通过注意力的沟通步骤之后是计算我们接下来将研究。 4.2 变压器中的计算多层感知器         变压器中的计算只不过是一个多层感知器MLP单元。该单元由 2 个线性层组成介于两者之间具有 GeLU 非线性。也可以考虑使用其他非线性。该单元首先将输入投影到大小的 4 倍然后将其重新投影回 1 倍这与输入大小相同。         在我们将在笔记本中看到的代码中此类称为多层感知器。代码如下所示。 class MultiLayerPerceptron(nn.Sequential):def __init__(self, embed_size, dropout):super().__init__(nn.Linear(embed_size, embed_size * 4),nn.GELU(),nn.Linear(embed_size * 4, embed_size),nn.Dropout(pdropout),)# end def # end class         现在我们了解了变压器架构的高级工作原理让我们把注意力集中在视觉转换器上因为我们将执行图像分割。 五、视觉转换器         视觉转换器最初是由题为“图像价值16x16字大规模图像识别的变压器”的论文介绍的。本文讨论了作者如何将原版变压器架构应用于图像分类问题。这是通过将图像拆分为大小为 16x16 的补丁并将每个补丁视为模型的输入令牌来完成的。转换器编码器模型被馈送这些输入令牌并被要求预测输入图像的类。 图 4来源用于大规模图像识别的变压器。         在我们的例子中我们对图像分割感兴趣。我们可以将其视为像素级分类任务因为我们打算预测每个像素的目标类。         我们对原版视觉转换器进行了一个小但重要的更改并更换了MLP头以便由MLP头进行像素级分类。我们在输出中有一个线性层由每个补丁共享其分割掩模由视觉变压器预测。此共享线性层预测作为模型输入发送的每个补丁的分割掩码。         在视觉转换器的情况下大小为 16x16 的补丁被视为等效于特定时间步长的单个输入令牌。 图 5用于图像分割的视觉转换器的端到端工作。使用此笔记本生成的图像。 5.1 在视觉转换器中构建张量维度的直觉         当使用深度CNN时我们大部分使用的张量维度是NC HW其中字母代表以下内容 N批量大小C通道数H身高W宽度         您可以看到这种格式面向 2D 图像处理因为它闻起来非常特定于图像的特征。         另一方面有了变压器事情变得更加通用和领域无关。我们将在下面看到的内容适用于视觉、文本、NLP、音频或其他输入数据可以表示为序列的问题。值得注意的是当张量流经我们的视觉转换器时在张量的表示中几乎没有视觉特定偏差。         在使用转换器和一般情况下我们希望张量具有以下形状BTC其中字母代表以下内容 B批量大小与CNN相同T时间维度或序列长度。此维度有时也称为 L。在视觉变压器的情况下每个图像块对应于这个维度。如果我们有 16 个图像补丁那么 T 维度的值将为 16C通道或嵌入大小维度。此维度有时也称为 E。处理图像时大小为 3x16x16通道、宽度、高度的每个补丁通过补丁嵌入层映射到大小为 C 的嵌入。我们稍后会看到如何做到这一点。         让我们深入了解输入图像张量在预测分割掩码的过程中如何变异和处理。 5.2 视觉转换器中张量的旅程         在深度CNN中张量的旅程看起来像这样在UNetSegNet或其他基于CNN的架构中。         输入张量通常是形状为 1 3 128 128。该张量经过一系列卷积和最大池化操作其中其空间维度减小通道维度增加通常每个增加 2 倍。这称为特征编码器。在此之后我们执行反向操作增加空间维度并减少通道维度。这称为特征解码器。在解码过程之后我们得到一个形状的张量164128128。然后将其投影到我们希望的输出通道 C 的数量中使用 1x128 无偏差的逐点卷积作为 128 C 1 1。 图 6张量形状通过用于图像分割的深度 CNN 的典型进展。          使用视觉变压器时流程要复杂得多。让我们看一下下面的一张图片然后尝试了解张量如何在每一步中转换形状。 图 7张量形状通过用于图像分割的视觉转换器的典型进展。          让我们更详细地看一下每个步骤看看它如何更新流经视觉转换器的张量的形状。为了更好地理解这一点让我们为张量维度取具体值。 批量规范化输入和输出张量具有形状 1 3 128 128。形状保持不变但值归一化为零均值和单位方差。图像到补丁形状 1 3 128 128 的输入张量被转换为 16x16 图像的堆叠块。输出张量具有形状 1 64 768。补丁嵌入补丁嵌入层将 768 个输入通道映射到 512 个嵌入通道在本例中。输出张量的形状为 1 64 512。补丁嵌入层基本上只是一个 nn。PyTorch 中的线性层。位置嵌入位置嵌入层没有输入张量但有效地贡献了一个可学习的参数PyTorch 中的可训练张量其形状与补丁嵌入相同。这是形状164512。加贴片和位置嵌入分段地加在一起以产生视觉变压器编码器的输入。这个张量的形状是164512。您会注意到视觉变压器的主要主力即编码器基本上保持这种张量形状不变。变压器编码器形状为164512的输入张量流经多个变压器编码器块每个转换器编码器块具有多个注意头通信后跟一个MLP层计算。张量形状保持不变如 1 64 512。线性输出投影如果我们假设要将每个图像分成 10 个类那么我们需要每个大小为 16x16 的补丁有 10 个通道。该 nn.用于输出投影的线性层现在会将 512 个嵌入通道转换为 16x16x10 2560 个输出通道此张量将类似于 1 64 2560。在上图中 C 10。理想情况下这将是一个多层感知器因为“MLP 是通用函数近似器”但我们使用单个线性层因为这是一项教育练习补丁到映像该层将编码为 64 1 64 张量的 2560 个补丁转换回看起来像分割掩码的东西。这可以是 10 个单通道图像或者在本例中是单个 10 通道图像每个通道是 10 个类别之一的分割掩码。输出张量的形状为 1 10 128 128。          就是这样 — 我们已经使用视觉转换器成功分割了输入图像接下来让我们看一个实验以及一些结果。 5.3 视觉变压器的实际应用         此笔记本包含此部分的所有代码。         就代码和类结构而言它非常模仿上面的框图。上面提到的大多数概念都与此笔记本中的类名 11 对应。         有一些与注意力层相关的概念是我们模型的关键超参数。我们之前没有提到多头关注的细节因为我们提到它超出了本文的范围。如果您对变压器中的注意力机制没有基本的了解我们强烈建议您在继续之前阅读上述参考资料。         我们将以下模型参数用于视觉变压器进行分割。 补丁嵌入层的 768 个嵌入维度12 变压器编码器块每个变压器编码器块中有 8 个注意头多头注意力和 MLP 中 20% 的辍学率 这种配置可以在 VisionTransformerArgs Python 数据类中看到。 dataclass class VisionTransformerArgs:Arguments to the VisionTransformerForSegmentation.image_size: int 128patch_size: int 16in_channels: int 3out_channels: int 3embed_size: int 768num_blocks: int 12num_heads: int 8dropout: float 0.2 # end class         在模型训练和验证期间使用了与以前类似的配置。配置指定如下。 随机水平翻转和颜色抖动数据增强应用于训练集以防止过度拟合在非宽高比保留调整大小操作中将图像大小调整为 128x128 像素不会对图像应用任何输入归一化而是使用批量归一化层作为模型的第一层该模型使用 LR 为 50.0 的 Adam 优化器和每 0004 个 epoch 将学习率衰减 0.8 倍的 StepLR 调度器训练 12 个 epoch交叉熵损失函数用于将像素分类为属于宠物、背景或宠物边框         该模型具有 86.28M 参数经过 85 个训练周期后验证准确率为 89.50%。这低于深度 CNN 模型在 88 个训练周期后达到的 28.20% 的准确率。这可能是由于一些需要通过实验验证的因素。 最后一个输出投影图层为单个 nn。线性而非多层感知器16x16 色块大小太大无法捕获更细粒度的细节训练时期不足没有足够的训练数据 - 众所周知与深度CNN模型相比转换器模型需要更多的数据来有效训练学习率太低 我们绘制了一个 gif显示了模型如何学习预测验证集中 21 张图像的分割掩码。 图 8显示图像分割模型的视觉转换器预测的分割掩码进程的 gif。          我们在早期训练时期注意到一些有趣的事情。预测的分割掩码有一些奇怪的阻塞伪影。我们能想到的唯一原因是我们将图像分解为大小为 16x16 的补丁经过很少的训练时期模型除了一些非常粗略的信息之外没有学到任何有用的东西关于这个 16x16 补丁通常被宠物或背景像素覆盖。 图 9使用视觉转换器进行图像分割时预测分割中看到的阻塞伪影会掩盖。          现在我们已经看到了一个基本的视觉转换器让我们把注意力转向用于分割任务的最先进的视觉转换器。 5.4 SegFormer使用转换器进行语义分割         本文于 2021 年提出了 SegFormer 架构。我们在上面看到的转换器是SegFormer 架构的简化版本。 图 10SegFormer 架构。资料来源          最值得注意的是SegFormer 生成 4 组映像其中包含大小为 4x4、8x8、16x16 和 32x32 的修补程序而不是具有大小为 16x16 的修补程序的单个修补映像使用 4 个变压器编码器块而不仅仅是 1 个。这感觉就像一个模型合奏在自我注意的前阶段和后期阶段使用卷积不使用位置嵌入每个变压器模块以空间分辨率 H/4 x W/4、H/8 x W/8、H/16 x W/16 和 H/32、W/32 处理图像同样当空间维度减小时通道也会增加。这感觉类似于深度CNN对多个空间维度的预测进行上采样然后在解码器中合并在一起MLP 将所有这些预测结合起来提供最终预测最终的预测是在空间维度H/4W/4而不是在HW。 六、结论 在本系列的第 4 部分中我们特别介绍了变压器架构和视觉变压器。我们对视觉变压器的工作原理以及视觉变压器的通信和计算阶段所涉及的基本构建块有了直观的理解。我们看到了视觉转换器采用的基于补丁的独特方法用于预测分割掩模然后将预测组合在一起。 我们回顾了一个实验该实验显示了视觉转换器的实际作用并能够将结果与深度CNN方法进行比较。虽然我们的视觉转换器不是最先进的但它能够取得相当不错的结果。我们提供了对最先进的方法的一瞥例如SegFormer。 现在应该很清楚与基于深度CNN的方法相比变压器具有更多的活动部件并且更复杂。从原始FLOP的角度来看变压器有望提高效率。在变压器中唯一计算繁重的实层是nn。线性。这是在大多数架构上使用优化的矩阵乘法实现的。由于这种架构的简单性与基于深度CNN的方法相比变压器有望更容易优化和加速。 恭喜你走到了这一步我们很高兴您喜欢阅读有关 PyTorch 中高效图像分割的系列文章。如果您有任何问题或意见请随时将其留在评论部分。 七、延伸阅读 注意力机制的细节超出了本文的范围。此外您还可以参考许多高质量的资源来详细了解注意力机制。以下是我们强烈推荐的一些内容。 图解变压器使用 PyTorch 从头开始 NanoGPT 我们将在下面提供文章的链接这些文章提供了有关视觉转换器的更多详细信息。 在 PyTorch 中实现视觉转换器 ViT本文详细介绍了在 PyTorch 中实现用于图像分类的视觉转换器。值得注意的是它们的实现使用 einops我们避免这样做因为这是一个以教育为中心的练习我们建议学习和使用 einops 以提高代码可读性。我们改用原生 PyTorch 运算符来排列和重新排列张量维度。此外作者在一些地方使用 Conv2d 而不是线性图层。我们希望构建一个完全不使用卷积层的视觉转换器实现。视觉转换器AI之夏在 PyTorch 中实现 SegFormer 德鲁夫·马塔尼 ·
http://www.w-s-a.com/news/203148/

相关文章:

  • 啥网站都能看的浏览器下载网站后台管理系统展望
  • 新建站点步骤汉中 wordpress联盟
  • 坪山网站设计的公司网站 seo 设置
  • 济南网站设计公司排名如何免费注册网站域名
  • 网站开发分工甜妹妹福利wordpress
  • 网站中英文要怎么做网站建设的策划文案
  • 合肥推广外包公司佛山seo
  • 成都网站品牌设计策划课堂网站开发
  • 做直播网站赚钱公司网站空间怎么续费
  • 企业网站制作公司有哪些太原网站建设 thinkphp3.2
  • 云集网站哪个公司做的百度竞价排名怎么做
  • 做网站公司赚钱吗网站建设英语翻译
  • 网络公司除了做网站产品设计作品
  • dede网站模板替换湘潭建设路街道网站
  • 东莞网站优化效果如何网络设计工作
  • 网站备案系统验证码出错的解决方案任丘建设银行网站
  • 个人博客建站wordpress叮当app制作
  • 网站式的公司记录怎么做二手书网站策划书
  • 营销型网站的建设重点是什么帝国程序和WordPress
  • 正能量网站推荐不需要下载巴中网站建设开发公司
  • 学生模拟网站开发西安seo平台
  • 免费的app推广平台免费网站seo
  • 建一个个人网站网站建设中小企业广西
  • 优惠券网站做淘客违规吗个人建网站运营.
  • 旅游网站制作建设华大基因 网站建设
  • sem推广竞价托管南京seo网站优化
  • 网站优化网站建站教程网站建设 成都
  • 网站 配色表html代码在线
  • 城乡和建设部建造师网站众筹平台网站建设
  • 外贸网站模板免费下载微网站制作软件