LLaMA 最近开源,分别开源了 7e9, 1.3e10, 3.3e10, 6.5e10 四个参数量的模型。但是这里有意思的是,他们管自己的模型称为 smaller models。
Google 推出了 22B 的 ViT
更高效,哪里慢就让它快起来
让所有的方法更 efficient 一些。
论文:AIM: Adapting Image Models for Efficient Video Action Recognition
如何使用 parameter efficient fine-tuning
本篇是做视频动作识别(视频理解)
之前的视频理解的工作,粗略地可以被分为两类:

比如这里的左图,先预训练好一个图片模型,接下来地步骤大致分为:
虽然效果很好,但是计算代价实在太大,这些模型都需要 Full Fine Tune,尤其是视频数据集非常大的时候很难受。
本文研究动机来自于 CLIP,证明了它自己即使直接 zero-shot 就会很好,而且它也说明了在视频方面的任务上:
于是本文拿到一个好的图像模型后,直接把其参数锁住。然后通过修改周边的方式,来让这个模型具备时序建模的能力,来让这个模型能够直接做视频理解任务。
而 PEFT 有两个简单的方式:
Adapter 论文:Parameter-Efficient Transfer Learning for NLP

Adapter Layer 结构
它是把 Adapter 可以随意地插入 TFM block 中,然后锁住原 TFM 的参数,只训练 Adapter。
这样由于 Adapter 相比 TFM 参数量很小,因此不是特别大。
Prompt tuning 方法简单地讲,就是给模型一个提示,让模型做要做的事。
Prompt tuning 论文:Learning to Prompt for Vision-Language Models


上面是文本的分支,和预测的 [CLASS] 一起进入文本编码器,得到文本的特征。
下面图片进入图片编码器,得到一个图像特征。然后这一个图像特征和文本特征做相似度,看哪个最高选哪个。
这里和 CLIP 的区别在于:prompt 变成了一个可以学习的上下文。
通过这种方式把原来的模型锁住,只学习 prompt,减少计算量。
纯视觉也可以用 prompt,例如论文:Visual Prompt Tuning

上图是 Visual Prompt Tuning 模型的总览图。
首先有个输入(图片),和一些已经训练好并被冻结的层。
接下来开始加 prompt。这个 prompt 加在前面。
图片打成 patch 后先通过 embedding 层。然后和学习的 prompt 一起丢尽模型里
然后整个模型只优化 prompt 这个 \(P_0\)
VPT deep 的意思是说,每一层的输入输出的时候,都加上 learnable 的 prompt。
Deep 的效果比 Shallow 要好一些,这俩都比不用 prompt 要好。

作者都认为自己的方法简单。
主要思路就是锁住模型参数,然后往模型里加 Adapter。
有三种方式进行修改:

TimesFormer 做 baseline,跟 AIM 结果也很相近。

上表是在 AIM 在 K400 数据集上的表现。比之前的方法要高。

上表是 AIM 在 Something-Something 数据集、K700 数据集和 Diving-48 数据集上的表现。
大部分实验都是一台 8 卡机能完成的,短则半天,长则三四天。
能不 pretraining 就不 pretraining
能借助已有的东西,就尽量借助已有的东西,例如别人的预训练模型。
简单给几个新的 topic:
论文:Unsupervised Semantic Segmentation with Self-supervised Object-centric Representations
做的是 Unsupervised Semantic segmentation
具体使用的方法是 Self-supervised Object-Centric Representations
训练开销很小,只是训练了一个 DeepLab v3 的一个网络,4 卡机就能跑大部分实验

主要流程在 Unsupervised Object Categories Discovery 这一步。这一步是让模型在无监督的情况下找到新的物体。
如果想学习一个 Segmentation 的网络,那么需要某种程度上的 Mask information。
那么最初始的 Mask information 从哪来?于是借助之前 Saliency Detection(显著性检测)的工作,比如这里直接用了 DeepUSPS 的工作,很多之前无监督 Segmentation 工作用的也是它。就可以直接给定一张图,给你显著物体的 mask。然后就可以借助这个 mask 把图片中的物体给抠出来。
把它检测出来后,还需要分类,接下来借助 DINO 这个工作去抽它的特征。
有了特征然后做聚类(Clustering),然后就能无监督地判断物体是什么 id,暂时还无法确定这些物体是什么,因此这里称作 Noisy pseudo masks。
于是这里有了图像和 label,于是就可以无监督训练了。另外一个图片可能有多个物体,所以加一个 self-training,多做几个轮回。
超越了之前的 SOTA
其实也就只有 Semantic segmentation network 训练需要时间。
做通用的,能够即插即用的模块,它可能是:
总之就是一个很简单的东西, 但是能够用到各种领域的。
好处在于,只要选一个比较好用的 baseline,然后在一个所能承受的 setting 之下,做实验。
论文:MixGen: A New Multi-Modal Data Augmentation
本文主要提出了一种多模态的数据增强的方法。
在研究多模态模型的时候,发现它们都没有使用数据增强。
CV 领域中觉得数据增强还是很必要的。
也就是说在数据增强的过程中,有一些信息被破坏,或者说是丢弃掉了。
那么怎么办呢?可以一个模态一个模态来想。
但是文本部分其实可以直接把两个句子拼在一起就行,这样什么信息也不会丢失。

比如说上图有 \((I_1, T_1), (I_2,T_2)\) 这两个图片文本对,那么我们把两个图像直接 Mixup,然后文本把两句话拼起来。

可以观察到相比于原来的方法有普遍的提升。
投 NeuIPS 的时候,审稿人一致认为这个方法太简单了,有一个审稿人提出了建设性的意见:数据增强是在没有那么多数据的时候才会去做的选择,但是在多模态的预训练里面,由于已经有大量的数据存在,所以预训练过程没什么用。但是在 Finetuning 过程中,由于下游数据集的数据不多,因此这个方法大概可以应用于 Finetuning 过程中。
这个方向最不需要计算资源,同样很有影响力。
论文:BigDetection: A Large-scale Benchmark for Improved Object Detector Pre-training
这是一个非常大的目标检测的数据集。本论文是把 LVIS,OpenImages 和 Object 365 结合到了一起。需要重新分布数据里的类。而且根据任务的需求,也决定了物体类别有多细粒度。
600 类、3.4e6 的训练图片,且有 3.6e7 的目标检测框及注释。
由于数据集很新,刷的人很少,如果感兴趣的话,朱老师给出如下提议:
论文:A Comprehensive Study of Deep Video Action Recognition
写的综述论文,理解优点缺点在哪,以及分析当前的痛点。然后找到下一步的发展方向。
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序
我正在使用Rails3.1并在一个论坛上工作。我有一个名为Topic的模型,每个模型都有许多Post。当用户创建新主题时,他们也应该创建第一个Post。但是,我不确定如何以相同的形式执行此操作。这是我的代码:classTopic:destroyaccepts_nested_attributes_for:postsvalidates_presence_of:titleendclassPost...但这似乎不起作用。有什么想法吗?谢谢! 最佳答案 @Pablo的回答似乎有你需要的一切。但更具体地说...首先改变你View中的这一行对此#