精华内容
下载资源
问答
  • vision-源码

    2021-03-17 05:47:13
    vision
  • Computer VisionComputer VisionComputer VisionComputer VisionComputer VisionComputer VisionComputer VisionComputer VisionComputer VisionComputer VisionComputer Vision
  • vision pro

    2018-07-20 10:43:06
    vision pro 高级教程 quickbuild 常用工具以及编程使用方法
  • Computer vision

    2018-02-13 08:59:38
    Computer vision(models, learning and inference)高清版
  • Stereo vision

    2018-02-02 12:22:19
    Stereo vision in structured environments by consistent semi-global matching_ppt
  • Robot Vision

    2017-09-22 10:30:26
    This book presents a coherent approach to the fast moving field of machine vision, using a consistent notation based on a detailed understanding of the image formation process. It covers even the most...
  • labview vision

    2018-04-21 15:30:20
    labview vision,积分已降到最低,不需要去下载其他高积分的文件
  • computer_vision:dacon_computer_vision
  • Vision estimate

    2021-01-10 09:51:12
    <div><p>This PR adds support for vision position estimates coming in via MAVLink. They are published and the INAV estimator subscribes and reads them. <p>NOTE: Set the parameter CBRK_NO_VISION to 0 to...
  • OpenGL-Vision OpenGL-Vision OpenGL-Vision
  • Labview vision实例

    2019-01-08 10:02:03
    Labview vision教程主要帮助自学Vision的专业人员快速学习
  • NI VISION教程

    2018-11-20 14:32:53
    NI VISION教程,包含Vision Builder及其他工具包的使用方法
  • vision demo

    2012-05-25 23:38:39
    vision demo
  • vision2012

    2014-08-25 20:56:52
    computer vision,计算机视觉算法
  • Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions 文章目录Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions前言与ViT和...

    Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions

    原始文档:https://www.yuque.com/lart/papers/bwpvm1

    image.png

    前言

    关于文章总体概览,这篇文章https://mp.weixin.qq.com/s/LCLQltmBxL9f1XzV4Ci-iw已经讲的非常好了。总的核心就是,实现了一种多阶段具有不同分辨率的Transformer Vision的Backbone。

    image.png

    由于提供了不同分辨率的特征,尤其是高分辨率的特征,所以整合PVT和类似FPN的结构可以很好的应对密集预测任务(检测、分割)。 同时可以比较有效的缓解计算负担,因为后续的Self-Attention都是在一个较低的分辨率上运行的。 从下图中分类任务上的表现对比来看,由于前期的分辨率要大于ViT、DeiT这类模型,在整体层数较少的时候,参数上优势并不明显,但是随着模型的增大,参数会相对更少,并且计算量也有优势,整体而言性能很有竞争力。

    image.png

    这里反映出来了一个重要的现象,逐步缩小Token序列的结构其实也是可以实现与Deit以及ViT那种定长Token序列模型相同的效果,甚至更好。

    即针对图像构造的Token实际上仍是有待进一步优化以更加高效的提炼图像的局部上下文信息,这一点在 Tokens-to-Token ViT: Training Vision Transformers from Scratch on ImageNet 中的T2T Module,以及 Visual Transformers: Token-based Image Representation and Processing for Computer Vision 中的Tokenizer等结构的设计中也是有所体现的。

    抛开其他的不说,这里的多分辨率特征的提取实际上既有传统又结合新潮:

    • 既有CNN多层级特征提取以为后续结构提供丰富的多尺度信息的常见密集预测任务的增强策略
    • 亦有最近的SETR: Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers 这种利用多层Transformer Layer中间的输出特征来送入CNN解码器服务于分割预测的恢复的有效尝试

    二者拍拍手,诶,似乎思路顺其自然。但是想尝试和能做出也并不等价,具体实操细节过程中,遇到的问题,针对性的解决手段,策略的尝试与调整,都不足为外人道也。不过从结果而言,倒也确实可以说是很好的结合了现有的CNN和Transformer的工作的探索。

    与ViT和CNN的比较

    作者指出,ViT(DeiT)存在的问题:

    Although ViT is applicable to image classification, it is challenging to be directly adapted to pixel-level dense predictions, e.g., object detection and segmentation, because

    1. its output feature map has only a single scale with low resolution
    2. its computations and memory cost are relatively high even for common input image size

    针对性的解决策略:

    different from ViT, PVT overcomes the difficulties of conventional Transformer by:

    1. taking finegrained image patches (i.e., 4 × 4 per patch) as input to learn high-resolution representation, which is essential for dense prediction tasks
    2. introducing a progressive shrinking pyramid to reduce the sequence length of Transformer when the depth of network is increased, significantly reducing the computational consumption
    3. adopting a spatial-reduction attention (SRA) layer to further reduce the resource cost to learn high-resolution feature maps.

    针对方案简单粗暴:

    • 输出分辨率不够,那么就加大;
    • patch token序列太长,导致attention矩阵的计算量太大,那么就针对性的缩减总体序列长度,或者是仅仅缩减k和v的长度(如下图)。

    image.png

    这里的空间缩减实际上更像是一个空间的Unfold操作,将空间元素在通道上堆叠后再压缩到原始维度,进而减小了长度,但是这里还会跟一个LayerNorm

    整体来看,PVT的优势如下:

    • Self-Attention的计算利用了全局信息,这也是相较于仅仅具有局部感受野的CNN的优势,对于检测和分割任务而言,这是比较有需要的。
    • 而多尺度的输出,实际上也可以更好地和现有的这些任务的方法进行整合,这倒是一个便利性上的优势。
    • 对于现有的许多针对Vision Transformer的探索的工作,实际上也可以比较方便的整合起来,实现更有效的Vision Transformer,例如文中展示的PVT+DETR的结构。

    下游任务

    image.png

    分类

    为了实现分类任务,PVT实在最后一个阶段的输入上添加了learnable classification token,之后在输出上应用全连接层来实现类别预测。

    检测

    使用四个stage的输出F1~F4作为FPN结构的输入,然后被后续的检测或者实例分割头进一步处理。注意,这里的特征都恢复了HxWxC的结构。
    为了应对任意的输入形状并利用预训练权重,这里的位置嵌入是直接使用双线性插值调整预训练权重中的位置嵌入后得到的。这一策略在ViT的微调过程中也有体现。
    另外,在检测任务的训练中,PVT中的层将不会被冻结,都要加入训练(这里实际上倒是需要思考,对于Vision Transformer结构,冻结部分层来微调的策略是否有效)。

    分割

    这里是基于Semantic FPN进行验证的,中间特征也是直接被送入了FPN结构,也是用双线性插值来调整位置嵌入。

    其他的一些细节

    • 所有的实验都是基于AdamW的,这是Adam的一个比较有效的修正版本。另外,许多Vision Transformer模型都会使用Adam类的优化器。
    • ImageNet上的训练和对比反映出来一个问题,原始的ViT如果不适用额外的JFT300,效果并不能比得上CNN模型,而本文的仅使用ImageNet就可以训练出来这样好的效果,这是否说明这样的逐渐缩小的结构对于Vision Transformer结构而言实际上是一个更合适的选择呢?
      • 看起来,训练起来会更容易?这一点不太好说,因为本文的方法并没有追求极致的分类性能,从文章的讨论中还不太好说。文章也没有过多的讨论这个问题。文章更多是在强调对于下游密集预测任务的友好性和有效性。
    • 另外,这里非常奇怪的一点是Table 2中ViT-Base/16的Top1精度81.8%我在原始的ViT中并没有找到,就很奇怪,感觉是不是作者弄错了?
      • 关于这一点,实际上这里的ViT-B/16和DeiT-B是同样的模型,相同策略下训练得到指标没有差别;
      • 这里的ViT-B/16效果要比ViT论文中的好,主要还是因为本文的训练策略比较有效。
    • 以及,这里比较的DeiT结果并不是DeiT最有代表性的结果,放两个来自DeiT的表:

    image.png

    image.png

    链接

    展开全文
  • Computer_Vision_Lab
  • <div><ul><li><strong>Package Name</strong>: Custom Vision</li><li><strong>Package Version</strong>: 2.0.0</li><li><strong>Operating System</strong>: Linux</li><li><strong>Python Version</strong>: 3.6...
  • Basic Vision Systems

    2018-12-30 23:48:45
    Machine Vision is is the discipline that encompasses imaging technologies and methods to perform automatic inspection and analysis in various applications, such as verification, measurement, process ...
  • NIVision Halcon混合编程——NIVision图像与Halcon图像互转,C#版 VB.Net版 Labview版
  • GigE Vision Spec

    2017-08-09 22:31:27
    GigE Vision Spec
  • Currently IR vision items and mutations are some kind of heat camera thing that can see through walls. This doesn't make sense. <p><strong>Describe the solution you'd like</strong><br /> IR ...
  • computer vision

    2017-10-14 16:09:26
    computer vision
    1. 畸变
         枕形畸变: 长焦镜头
         桶形畸变
         线性畸变
    2. 印刷颜色空间:CMY
    3. 机器 – 统计模型
          学习 – 数据拟合
         
    展开全文
  • Dolby Vision Whitepaper_An Introduction to Dolby Vision_0916.pdf
  • Vision transformer

    千次阅读 热门讨论 2020-11-28 16:09:06
    Vision Transformer将CV和NLP领域知识结合起来,对原始图片进行分块,展平成序列,输入进原始Transformer模型的编码器Encoder部分,最后接入一个全连接层对图片进行分类。在大型数据集上表现超过了当前SOTA模型 前言...

    太长不看版

    Vision Transformer将CV和NLP领域知识结合起来,对原始图片进行分块,展平成序列,输入进原始Transformer模型的编码器Encoder部分,最后接入一个全连接层对图片进行分类。在大型数据集上表现超过了当前SOTA模型

    前言

    当前Transformer模型被大量应用在NLP自然语言处理当中,而在计算机视觉领域,Transformer的注意力机制attention也被广泛应用,比如Se模块,CBAM模块等等注意力模块,这些注意力模块能够帮助提升网络性能。而我们的工作展示了不需要依赖CNN的结构,也可以在图像分类任务上达到很好的效果,并且也十分适合用于迁移学习。

    这里的代码引用自 https://github.com/lucidrains/vit-pytorch,大家有兴趣也可以跑跑demo。

    方法

    首先结构上,我们采取的是原始Transformer模型,方便开箱即用。

    如果对Transformer模型不太了解的可以参考这篇文章 解析Transformer模型

    整体结构如下
    Vision Transformer整体架构

    数据处理部分

    原始输入的图片数据是 H x W x C,我们先对图片作分块,再进行展平。假设每个块的长宽为(P, P),那么分块的数目为
    N=HW/(PP) N = H * W /(P*P)
    然后对每个图片块展平成一维向量,每个向量大小为
    PPC P*P*C
    总的输入变换为
    N×(P2C) N \times (P^2·C)
    这里的代码如下:

    x = rearrange(img, 'b c (h p1) (w p2) -> b (h w) (p1 p2 c)', p1=p, p2=p)
    

    它使用的是一个einops的拓展包,完成了上述的变换工作

    Patch Embedding

    接着对每个向量都做一个线性变换(即全连接层),压缩维度为D,这里我们称其为 Patch Embedding。

    在代码里是初始化一个全连接层,输出维度为dim,然后将分块后的数据输入

    self.patch_to_embedding = nn.Linear(patch_dim, dim)
    
    # forward前向代码
    x = rearrange(img, 'b c (h p1) (w p2) -> b (h w) (p1 p2 c)', p1=p, p2=p)
    x = self.patch_to_embedding(x)
    

    Positional Encoding

    还记得在解析Transformer那篇文章内有说过,原始的Transformer引入了一个 Positional encoding 来加入序列的位置信息,同样在这里也引入了pos_embedding,是用一个可训练的变量替代。

    self.pos_embedding = nn.Parameter(torch.randn(1, num_patches + 1, dim))
    

    文章也提供了可视化图
    Pos Encoding可视化

    很有意思的是这里第二个维度多加了个1。下面会有讲到

    class_token

    这里我们再来仔细看上图的一个结构
    额外插入一个embedding
    假设我们按照论文切成了9块,但是在输入的时候变成了10个向量。这是人为增加的一个向量。

    因为传统的Transformer采取的是类似seq2seq编解码的结构
    而ViT只用到了Encoder编码器结构,缺少了解码的过程,假设你9个向量经过编码器之后,你该选择哪一个向量进入到最后的分类头呢?因此这里作者给了额外的一个用于分类的向量,与输入进行拼接。同样这是一个可学习的变量。

    具体操作如下

    # 假设dim=128,这里shape为(1, 1, 128)
    self.cls_token = nn.Parameter(torch.randn(1, 1, dim))
    
    # forward前向代码
    # 假设batchsize=10,这里shape为(10, 1, 128)
    cls_tokens = repeat(self.cls_token, '() n d -> b n d', b=b)
    # 跟前面的分块为x(10,64, 128)的进行concat
    # 得到(10, 65, 128)向量
    x = torch.cat((cls_tokens, x), dim=1)
    

    知道这个操作,我们也就能明白为什么前面的pos_embedding的第一维也要加1了,后续将pos_embedding也加入到x

     x += self.pos_embedding[:, :(n + 1)]
    

    分类

    分类头很简单,加入了LayerNorm和两层全连接层实现的,采用的是GELU激活函数。
    代码如下

    self.mlp_head = nn.Sequential(
                nn.LayerNorm(dim),
                nn.Linear(dim, mlp_dim),
                nn.GELU(),
                nn.Dropout(dropout),
                nn.Linear(mlp_dim, num_classes)
            )
    

    最终分类我们只取第一个,也就是用于分类的token,输入到分类头里,得到最后的分类结果

    self.to_cls_token = nn.Identity()
    # forward前向部分
    x = self.transformer(x, mask)
    x = self.to_cls_token(x[:, 0])
    return self.mlp_head(x)
    

    可以看到整个流程是非常简单的,下面是ViT的整体代码

    class ViT(nn.Module):
        def __init__(self, *, image_size, patch_size, num_classes, dim, depth, heads, mlp_dim, channels=3, dropout=0.,
                     emb_dropout=0.):
            super().__init__()
            assert image_size % patch_size == 0, 'Image dimensions must be divisible by the patch size.'
            num_patches = (image_size // patch_size) ** 2
            patch_dim = channels * patch_size ** 2
            assert num_patches > MIN_NUM_PATCHES, f'your number of patches ({num_patches}) is way too small for attention to be effective (at least 16). Try decreasing your patch size'
    
            self.patch_size = patch_size
    
            self.pos_embedding = nn.Parameter(torch.randn(1, num_patches + 1, dim))
            self.patch_to_embedding = nn.Linear(patch_dim, dim)
            self.cls_token = nn.Parameter(torch.randn(1, 1, dim))
            self.dropout = nn.Dropout(emb_dropout)
    
            self.transformer = Transformer(dim, depth, heads, mlp_dim, dropout)
    
            self.to_cls_token = nn.Identity()
    
            self.mlp_head = nn.Sequential(
                nn.LayerNorm(dim),
                nn.Linear(dim, mlp_dim),
                nn.GELU(),
                nn.Dropout(dropout),
                nn.Linear(mlp_dim, num_classes)
            )
    
        def forward(self, img, mask=None):
            p = self.patch_size
    
            x = self.patch_to_embedding(x)
            b, n, _ = x.shape
    
            cls_tokens = repeat(self.cls_token, '() n d -> b n d', b=b)
            x = torch.cat((cls_tokens, x), dim=1)
            x += self.pos_embedding[:, :(n + 1)]
            x = self.dropout(x)
    
            x = self.transformer(x, mask)
    
            x = self.to_cls_token(x[:, 0])
            return self.mlp_head(x)
    

    实验部分

    与Transformer一样,ViT也有规模不一样的模型设置,如下图所示
    不同规模ViT的配置
    可以看到整体模型还是挺大的,而经过大数据集的预训练后,性能也超过了当前CNN的一些SOTA结果
    预训练后的ViT性能比较
    另外作者还给了注意力观察得到的图片块,我的一点猜想是可能有利于对神经网络可解释性的研究。
    注意力可视化

    总结

    继DETR后,这又是一个CV和NLP结合的工作。思想非常的朴素简单,就是拿最原始的Transformer模型来做图像分类。现有的性能还需要大量的数据来训练,期待后续工作对ViT做一些改进,降低其训练时间和所需数据量,让人人都能玩得起ViT!

    展开全文
  • Google Vision API 轻松一点! 通过将功能强大的机器学习模型封装在易于使用的REST API中,Cloud Vision API使开发人员能够了解图像的内容。 它可以将图像快速分类为数千个类别(例如“风船”),检测图像中的单个...
  • usb3 vision spec

    2018-03-24 13:58:11
    usb3 vision spec usb3 vision spec usb3 vision spec usb3 vision spec usb3 vision spec
  • roblox.vision Roblox的VISION-根域版本 Dave “ railworks2” Brown拥有的域-我与之没有联系的Gh0stRunner拥有的视频。 如果您希望就此与我联系,请发送电子邮件至或 ,我会尽快给您答复。
  • 视觉项目前端 Vision Project的静态Web文件
  • CSE/EE486 Computer Vision I Introduction to Computer Vision CSE Department, Penn State University Instructor: Robert Collins 包括所有32 Lecture

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,877
精华内容 9,950
关键字:

vision