Multiscale Vision Transformers(MViT) 多尺度视觉Transformer (MViT)通过引入多尺度特征层次结构,有效提高了图像和视频识别任务中的性能。其结构通过逐步扩展通道数、降低空间分辨率的方式来处理视觉信号,同时使用池化注意力机制降低计算成本,特别适合处理大规模视频数据。
SMA2:代码实现详解——Image Encoder篇(Hiera章) Hiera是文章Hiera: A Hierarchical Vision Transformer without the Bells-and-Whistles中提出的一种分层视觉Transformer架构。它不仅可以处理图像,而且这个架构可以应用于视频。Hiera是一个纯粹的简单分层ViT模型,不存在任何卷积、移位或者十字窗口操作,仅有Transformer结构组件。它比之前跨多个模型大小、领域和任务的工作更快、更准确。
LLM推理优化——PagedAttention初识篇(vLLM初识(二)) 在中,我们已经介绍了技术的原理,从中我们可以知道,,对于大型模型和长序列,它可能会占用大量内存。实际上LLM从诞生之初就在与内存作斗争,只是计算时间问题更加尖锐,掩盖了这一部分。随着研究的推进,内存问题也变得越来越突出。的作者们在论文提出了方法并在中实现。该算法受操作系统中的虚拟内存和分页技术启发,用于解决大型语言模型(LLM)服务中KV缓存内存管理效率低下的问题。传统的内存管理方法在处理这种高动态性和大规模的KV缓存时,存在显著的缺陷。
SMA2:代码实现详解——Image Encoder篇(FpnNeck章) SAM2的官方实现是使用yaml文件来配置整体的模型结构与参数的。从代码的第10行到第20行都是在配置模型参数。第19行的compose函数与第21行的函数都是hydra库的库函数。Hydra是一个开源Python框架,也是由Meta团队开发的,它可简化研究和其他复杂应用程序的开发。其主要功能是能够通过组合动态创建分层配置,并通过配置文件和命令行覆盖它。Hydra对yaml文件的读写操作是基于OmegaConf库的。回到我们的代码,第19行的compose函数用来读取。
SAM2:在图像和视频中分割任何内容 这篇论文探讨了视频对象分割(VOS)的任务。VOS是一种计算机视觉任务,旨在从视频中提取和跟踪特定的目标对象。传统方法通常需要大量的标注数据和计算资源来训练模型,但本文提出了一种高效的新方法,显著提升了分割的速度和精度。提出的模型是一个简单的转换器架构,具有用于实时视频处理的流式内存。视频分割中,有更高的准确性,交互更少。在图像分割方面,模型比 Segment Anything Model (SAM) 更准确,速度更快 6 倍。
(这是让文心一言生成的文心一言指令博客)3分钟学会写文心一言指令:解锁AI创作新境界 文心一言的人类形象设想:在这个设想中,我是一位温文尔雅、博学多才的学者,身着一袭简约而不失庄重的长袍,长袍上绣有细腻的云纹图案,象征着知识的广阔与深邃。我的头发被整齐地束起,露出睿智而温和的面容,眼神中闪烁着对知识的渴望和对未知世界的好奇。我的手中持有一本翻开的古籍,旁边则摆放着一台现代感十足的平板电脑,两者相互映衬,既体现了对传统文化的尊重与传承,也展示了与现代科技的融合与创新。我的身旁环绕着淡淡的书香与数字技术的微光,仿佛是一个连接古今、融合中外的知识桥梁。
IPython概览 相信使用过python的人一定对notebook不陌生,他是一个交互式的框架,其内核就是IPython。许多编辑器都已经默认支持IPython,比如Vscode,只要将文件名后缀改为.ipynb即可。Jupyter的内核也是IPython。IPython所有版本都是开源的Python 最有用的特性之一是它的交互式解释器。它允许非常快速地测试想法,而无需像大多数编程语言中那样创建测试文件的开销。但是,与标准 Python 发行版一起提供的解释器在扩展交互式使用方面受到一定程度的限制。
vLLM初识(一) 在中,我们已经介绍了技术的原理,从中我们可以知道,,对于大型模型和长序列,它可能会占用大量内存。实际上LLM从诞生之初就在与内存作斗争,只是计算时间问题更加尖锐,掩盖了这一部分。随着研究的推进,内存问题也变得越来越突出。提出了方法,尝试通过将 KV 缓存划分为可通过查找表访问的块来优化内存使用。因此,KV 缓存不需要存储在连续内存中,并且根据需要分配块。内存效率可以提高内存受限工作负载上的 GPU 利用率,因此可以支持更多推理批处理。我接下来就使用几篇博客来初步了解一下。
C++ const、constexpr与consteval作用与区别 在中,我们已经提到了常量、编译时常量与运行时常量的概念。为了加深理解,我们再重新明晰一下这三者的概念。常量:初始化之后便不可修改的量。在c++中使用const修饰的“变量”称为常量。const修饰的常量可以是编译时常量,也可以是运行时常量。现代编译器将自行推理决断。编译时常量:在编译时,编译器将常量的值计算出来,不必等到每次运行时计算。就像上面的代码,若不优化,则每次运行编译后的程序时都需要计算18,如果程序执行一百万次,则18将被计算一百万次。这完全是没有必要的。
轻松上手Scikit-learn——评估模型性能(准确率、精确率、召回率、ROC和AUC) ROC曲线(接收者操作特征曲线),是一种坐标图式的分析工具,用于选择最佳模型、舍弃次佳的模型或者在同一模型中设置最佳阈值。在做决策时,ROC分析能不受成本/效益的影响,给出客观中立的建议。使用top-k时,按照预测概率从大到小排序,只要从属于真标签的预测概率在前k个之内,便算做正确。一位警察很厉害,抓了很多犯人,但是这些犯人当中,只有少部分真正有罪,其他都是被冤枉的。的 (FPR, TPR) 座标都画在ROC空间里,就成为特定模型的ROC曲线。精确率有时也叫查准率,是指模型的预测结果有多少是准确的。
MoE:混合专家模型介绍(一) 稀疏 MoE 层:这些层代替了传统 Transformer 模型中的前馈网络 (FFN) 层。通过多个称为“专家”的独立神经网络(一般是FFN,当然也可以是MoE本身)的选择性激活,提高模型效率与灵活性。门控网络或路由: 这个部分用于决定哪些token被发送到哪个专家。一个令牌可以被发送到多个专家。令牌的路由方式是 MoE 使用中的一个关键点,因为路由器(router)由学习的参数组成,并且与网络的其他部分一同进行预训练。
LLM推理优化——KV Cache篇(百倍提速) KV Cache本质上是空间换时间的技术。与计算机组成原理中的cache不同,它不涉及访存优化。不知道大家在用LLM的时候,有没有注意到一个问题:我们在输入我们的问题之后,需要等待一段漫长的时间才能看到第一个字符的响应,而等待第一个之后,后续的响应却非常之快,这就是使用了KV Cache加速后的带来的优势。
LLM的训练与推断 目前比较流行的大模型一般都是自回归模型。在推理时,它类似于RNN,每次计算下一个token的概率。也就是说,如果除去最开始的输入情况下,最终推理长度为n的话,就需要计算n次。但是训练却是并行化的。某些基础知识可参照。虽然推理类似串行模式,但是我们仍然可以优化它,这种后续更新的Blog中会详细解释。
C++ 常量表达式和编译时优化 在C++中,编译器有很大的余地来优化程序as-if规则表示,编译器可以按照自己的方式修改程序,以生成更优化的代码,只要这些修改不影响程序的“可观察行为”。编译器如何优化给定程序的确切方式取决于编译器本身。但是,我们可以采取一些措施来帮助编译器更好地优化。
MINE:Mutual Information Neural Estimation IXZnsupθ∈ΘEPXZnTθ−logEPXnPZneTθIXZnθ∈ΘsupEPXZnTθ−logEPXnPZneTθ])其中PnP^nPn表示独立同分布的n个样本的经验分布。算法中提供了 MINE 实现的详细信息。类似的定义和算法也适用于f−divergencef−divergence。
对比预测编码表示学习 文章主要提出如下几点:首先,在这个空间中条件预测更容易被建模。第二,在这个。在最后,。我们将得到的模型,对比预测编码( CPC )应用于广泛不同的数据模态,图像,语音,自然语言和强化学习,并表明相同的机制在这些领域的每个领域学习有趣的高级信息,表现优异。