51c视觉~合集47

我自己的原文哦~     https://blog.51cto.com/whaosoft/13462458

#深度学习~跌倒检测

    传统的跌倒检测方法(例如分析突然的姿势变化、计算角度或测量加速度)在发生意外动作时通常会失效,从而导致许多误报。在本文中,我们探索了一种不同的方法:我们将YOLO Pose与GRU 网络相结合以提取身体关键点,从而分析随时间变化的动作,从而实现更智能、更可靠的跌倒检测系统。

图片

为什么是 GRU

    门控循环单元 ( GRU ) 网络是一种循环神经网络,旨在高效处理顺序数据。与 LSTM 不同,GRU 的架构更简单,消除了存储单元,只使用两个门(更新和重置)。这使它们更快、更轻量,非常适合我们的情况,因为我们需要实时处理动作而不影响性能。此外,对于跌倒检测等短序列,GRU 的表现通常与 LSTM 一样好,提供了更高效的解决方案而不牺牲准确性。

    为了使用 GRU 识别动作,我们将每个动作表示为一系列单独的姿势 - 我们的基本单位。每个姿势都由与身体关节相对应的关键点列表组成。由于人类运动通常遵循平滑的轨迹,因此 GRU 学会捕捉时间模式而无需存储复杂状态,使其成为这项任务的更有效选择。

构建数据集

    为了构建数据集,我使用了YouTuber Kevin Parry的视频《50 Ways to Fall》。使用FFmpeg,我将视频分成三个部分:跌倒、正常时刻和完整视频。对于训练,我只使用了跌倒和正常运动部分,以确保数据集更加平衡。您可以在以下链接下载预处理和分类后的数据:

https://www.youtube.com/channel/UCzgkpehSWuFTQx9E8NkBqzw

    使用YOLOv11 Pose模型进行姿势提取,该模型检测人体的17个关键点,提供有关关节位置和运动的详细信息。

    我没有使用整个序列作为单个数据点,而是选择使用较小的子序列。人类动作识别通常只需要几个连续的帧(1 到 10 帧之间)即可有效。在这种情况下,我使用了20 帧的序列长度。

    如果视频少于20 帧,我们会通过复制最后检测到的姿势来填充序列。如果视频较长,我们只取最后 20 帧,以便更好地捕捉跌倒的最后阶段,这对于检测最为重要。

import os
import cv2
import numpy as np
from ultralytics import YOLO
def extract_keypoints_from_video(video_path: str, model, sequence_length: int = 10, save: bool = False, output_path: str = 'keypoints.npy'):
    num_keypoints = 17 * 2  # Número de keypoints (17 puntos * 2 coordenadas x, y)
    
    if not os.path.exists(video_path):
        raise FileNotFoundError(f'El archivo de video {video_path} no existe')
    
    cap = cv2.VideoCapture(video_path)
    keypoints_buffer = []
    
    while True:
        ret, frame = cap.read()
        if not ret:
            break  # Video terminado
        
        results = model(frame)[0]
        
        if len(results.keypoints.xy) > 0:
            keypoints = results.keypoints.xy[0].numpy().flatten()
            if keypoints.shape[0] != num_keypoints:
                keypoints = np.pad(keypoints, (0, num_keypoints - keypoints.shape[0]))
        else:
            # Si no se detectan keypoints, usar ceros
            keypoints = np.zeros(num_keypoints, dtype=np.float32)
            
        keypoints_buffer.append(keypoints)
    
    cap.release()
    
    # Manejar casos donde el video es más corto o más largo que sequence_length
    if len(keypoints_buffer) < sequence_length:
        # Si el video es más corto, repetir el último frame hasta completar sequence_length
        last_frame = keypoints_buffer[-1]
        while len(keypoints_buffer) < sequence_length:
            keypoints_buffer.append(last_frame)
    elif len(keypoints_buffer) > sequence_length:
        # Si el video es más largo, tomar solo los últimos sequence_length frames
        keypoints_buffer = keypoints_buffer[-sequence_length:]
    
    keypoints_buffer = np.array(keypoints_buffer, dtype=np.float32)
    
    if save:
        np.save(output_path, keypoints_buffer)
        print(f'Guardado en {output_path}')
    
    return keypoints_buffer

    提取姿势数据时的一个常见问题是无法检测某些身体部位。最初,这些缺失关键点的 (x, y) 坐标设置为0,然后在后期处理期间替换为NaN。然而,GRU 无法处理 NaN 值,而留下零会通过引入误导性信息对模型性能产生负面影响。

    为了解决这个问题,我选择使用具有5 个最近邻居的K-Nearest Neighbors (KNN) 来填补缺失值。这种方法有助于适应非线性运动轨迹,提供更一致的输入数据并提高模型的准确性。

构建 GRU 模型

    利用预处理后的数据,我们现在可以构建基于 GRU 的模型,将动作分为两类:“跌倒”或“不跌倒”。我们选择基于 GRU 的架构而不是 LSTM,因为 GRU 的计算效率更高,并且可以更好地处理短序列而不会丢失重要信息。

    为了实现,我们使用了 PyTorch 并定义了一个顺序模型。第一层是 GRU,它处理从YOLO Pose中提取的关键点序列。然后,我们应用批量归一化来稳定训练,然后是具有 ReLU 激活的密集层,以捕获更复杂的模式。此外,我们在输出层中加入了 dropout 以减少过度拟合,并加入了 sigmoid 激活,因为这是一个二元分类问题。

import torch
import torch.nn as nn
class FallDetectionGRU(nn.Module):
    def __init__(self, input_size, hidden_size, num_layers, output_size, dropout_prob=0.5):
        super(FallDetectionGRU, self).__init__()
        self.hidden_size = hidden_size
        self.num_layers = num_layers
        
        # Capa GRU (en vez de LSTM)
        self.gru = nn.GRU(input_size, hidden_size, num_layers, batch_first=True, dropout=dropout_prob if num_layers > 1 else 0)
        
        # Batch Normalization
        self.bn = nn.BatchNorm1d(hidden_size)
        
        # Capas fully connected adicionales
        self.fc1 = nn.Linear(hidden_size, hidden_size // 2)
        self.fc2 = nn.Linear(hidden_size // 2, hidden_size // 4)
        self.fc3 = nn.Linear(hidden_size // 4, output_size)
        
        # Dropout para regularización
        self.dropout = nn.Dropout(dropout_prob)
        
        # Funciones de activación
        self.relu = nn.ReLU()
        self.sigmoid = nn.Sigmoid()
        
        # Inicialización de pesos
        self._init_weights()
    
    def _init_weights(self):
        """Inicialización de pesos para mejorar la convergencia."""
        for name, param in self.gru.named_parameters():
            if 'weight_ih' in name or 'weight_hh' in name:
                nn.init.xavier_uniform_(param.data)
            elif 'bias' in name:
                param.data.fill_(0)
        for m in self.modules():
            if isinstance(m, nn.Linear):
                nn.init.kaiming_normal_(m.weight, mode='fan_in', nnotallow='relu')
                m.bias.data.fill_(0.01)
    
    def forward(self, x):
        # Inicializar estado oculto (sin c0)
        h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)
        
        # Pasar a través de la GRU
        out, _ = self.gru(x, h0)
        
        # Tomar la salida del último paso de tiempo
        out = out[:, -1, :]
        
        # Batch Normalization
        out = self.bn(out)
        
        # Capas fully connected con activaciones y dropout
        out = self.fc1(out)
        out = self.relu(out)
        out = self.dropout(out)
        
        out = self.fc2(out)
        out = self.relu(out)
        out = self.dropout(out)
        
        out = self.fc3(out)
        
        # Aplicar sigmoide para obtener probabilidades
        out = self.sigmoid(out)
        return out

模型训练

    对于训练,我使用BCELoss(二元交叉熵损失)作为损失函数,它非常适合这类二元分类问题。由于模型的输出是概率(经过S 型激活后),BCELoss 有助于最大限度地减少跌倒分类中的不确定性。

    作为优化器,我选择了AdamW ,这是Adam的一个带有权重衰减的变体。与标准 Adam 不同,AdamW 将 L2 正则化与梯度更新分离,使其在深度网络中更能抵抗过度拟合。此外,它比 SGD 更高效,因为它可以动态调整每个参数的学习率,从而加速收敛。

    为了防止过拟合,我实施了提前停止,耐心等待 10 个时期。如果验证损失在连续迭代中停止改善,则训练会自动停止。这有助于防止过度拟合并消除不必要的训练时间。此外,根据最低验证损失保存最佳模型,确保最终版本最适用于新数据。

import torch
import torch.nn as nn
import torch.optim as optim
def train_model(model, train_loader, val_loader, num_epochs=200, learning_rate=0.0001, 
                weight_decay=1e-4, patience=10, device="cuda" if torch.cuda.is_available() else "cpu"):
    """
    Entrena un modelo de detección de caídas usando GRU.
    Args:
        model (torch.nn.Module): Modelo a entrenar.
        train_loader (DataLoader): DataLoader para los datos de entrenamiento.
        val_loader (DataLoader): DataLoader para los datos de validación.
        num_epochs (int): Número de épocas de entrenamiento.
        learning_rate (float): Tasa de aprendizaje.
        weight_decay (float): Parámetro de regularización L2.
        patience (int): Número de épocas sin mejora antes de early stopping.
        device (str): Dispositivo a usar ("cuda" o "cpu").
    Returns:
        model: Modelo entrenado.
        history: Diccionario con métricas de entrenamiento y validación.
    """
    model.to(device)
    criterion = nn.BCELoss()  # Binary Cross Entropy Loss
    optimizer = optim.AdamW(model.parameters(), lr=learning_rate, weight_decay=weight_decay)
    # Listas para almacenar métricas
    history = {"train_loss": [], "val_loss": [], "train_acc": [], "val_acc": []}
    best_val_loss = float("inf")
    patience_counter = 0
    best_model = None
    for epoch in range(num_epochs):
        model.train()
        train_loss, correct, total = 0, 0, 0
        for batch_X, batch_y in train_loader:
            batch_X, batch_y = batch_X.to(device), batch_y.to(device)
            optimizer.zero_grad()
            outputs = model(batch_X).squeeze()
            loss = criterion(outputs, batch_y)
            loss.backward()
            optimizer.step()
            train_loss += loss.item()
            predicted = (outputs >= 0.5).float()
            correct += (predicted == batch_y).sum().item()
            total += batch_y.size(0)
        avg_train_loss = train_loss / len(train_loader)
        train_accuracy = correct / total
        history["train_loss"].append(avg_train_loss)
        history["train_acc"].append(train_accuracy)
        # Evaluación en validación
        model.eval()
        val_loss, correct, total = 0, 0, 0
        with torch.no_grad():
            for batch_X, batch_y in val_loader:
                batch_X, batch_y = batch_X.to(device), batch_y.to(device)
                outputs = model(batch_X).squeeze()
                loss = criterion(outputs, batch_y)
                val_loss += loss.item()
                predicted = (outputs >= 0.5).float()
                correct += (predicted == batch_y).sum().item()
                total += batch_y.size(0)
        avg_val_loss = val_loss / len(val_loader)
        val_accuracy = correct / total
        history["val_loss"].append(avg_val_loss)
        history["val_acc"].append(val_accuracy)
        # Guardar el mejor modelo
        if avg_val_loss < best_val_loss:
            best_val_loss = avg_val_loss
            best_model = model.state_dict()
            patience_counter = 0
        else:
            patience_counter += 1
        # Early Stopping
        if patience_counter >= patience:
            print(f"⏹️ Early stopping en la época {epoch + 1}")
            break
        if (epoch + 1) % 5 == 0:
            print(f'Epoch {epoch + 1}: '
                  f'Train Loss: {avg_train_loss:.4f}, Train Acc: {train_accuracy:.4f} | '
                  f'Val Loss: {avg_val_loss:.4f}, Val Acc: {val_accuracy:.4f}')
    # Restaurar el mejor modelo
    if best_model:
        model.load_state_dict(best_model)
        print("✔️ Modelo restaurado al mejor estado guardado.")
    return model, history

    为了优化基于 GRU 的模型的性能,我对几个关键的超参数进行了微调,包括 epoch 的数量、批量大小和学习率。

    由于实施了提前停止,因此epoch 的数量并不是一个关键因素,因此将其设置为300 epoch。关于批大小,我测试了8、16、32 和 64,发现8在模型收敛中提供了更大的稳定性。0.0005的学习率确保了稳定的训练。

    为了增强泛化能力并防止过度拟合,我采用了1e-6的权重衰减,在不影响性能的情况下调节模型的权重。最后,使用了0.6的dropout率来减少对特定模式的依赖,从而提高了模型对新数据进行泛化的能力。

from src.models import FallDetectionGRU
from src.training import train_model


batch_size = 8
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False)


model = FallDetectionGRU(
    input_size=34, 
    hidden_size=64, 
    num_layers=2, 
    output_size=1, 
    dropout_prob=0.6
)


trained_model, history = train_model(
    model, 
    train_loader, 
    val_loader, 
    num_epochs=300,
    learning_rate=.0005,
    weight_decay=1e-6, 
    patience=15
)

    该模型实际运行的一些示例:

图片

图片

图片

测试结果

    测试集的结果是积极的,对可用数据的分类准确。但需要注意的是,使用的数据集很小,没有涵盖各种场景或姿势,这可能会影响模型推广到新情况的能力。

混淆矩阵 GRU 测试

    为了排除过拟合,我使用外部数据集中的视频测试了该模型,例如GMDCSA24:视频中人体跌倒检测的数据集。跌倒检测非常准确,可以正确识别跌倒视频和相关姿势。但是,在某些情况下,它会产生误报,在没有发生跌倒的场景中检测到跌倒,例如弯腰捡起物体、在地板上做俯卧撑或躺在床上。

应用场景

    跌倒检测在各种场景中都有多种应用,可以提供关键帮助。一些示例包括:

  • 老年人护理:能够自动监控行动不便的个人,一旦发生跌倒,即可向家人或医疗服务部门发出警报。
  • 医院和康复中心:帮助监督有跌倒风险的患者,减少房间或走廊内的事故。
  • 在危险环境中的工人:例如建筑或采矿,及时检测到跌倒可以防止致命事故。
  • 孩子们在游乐场上摔倒和受伤的情况很常见。

    在危急情况下,快速跌倒检测可以及时干预,避免造成严重甚至致命的后果。

源码下载:

https://github.com/Erik172/fall-detection-deep-learning?source=post_page-----2941db4c95a3---------------------------------------

#视觉机械臂自主抓取全流程推导

简介

视觉机械臂是智能机器人的一个重要分支,它主要包括控制芯片、驱动电路、机械臂、相机等部分。

自主抓取是指,在没有人为干预的情况下,视觉机械臂系统通过摄像头获取到目标物体的位置,并且通过驱动机械臂来完成对于目标物体的抓取任务。

整个抓取过程大致分为以下几步(含图中九步):

相机标定——→相机和机械臂进行手眼标定

——→①读取摄像头信息

——→②识别出目标物体并得出位姿

——→③物体在相机中的二维坐标转化成相对于相机光心的三维坐标

——→④再转换成相对于机械臂底座的世界坐标

——→⑤计算机械臂末端执行器抓取物体时的位姿

——→⑥通过已知的目标位置和末端执行器的位姿信息来计算机械臂上每个电机应转动的角度

——→⑦根据有无障碍物、路径距离要求、时间要求规划出合适的路径

——→⑧驱动机械臂各个关节一步一步到达合适的位置

——→⑨末端执行器抓取物体——→投放到指定位置

下面我将根据以上这些步骤,对视觉机械臂自主抓取全流程做出更加详细的介绍。

相机标定

什么是相机标定?为什么要进行相机标定呢?

由于相机采用小孔成像的原理来采集图像,为了使物体成像更加清晰,就采用了透镜的方式。但是,因为透镜本身在成像的过程中会不可避免的引入径向畸变和切向畸变(比如一条直线成像后会显示成一条弧线)。

为了使得现实中的图像能够真实的呈现在图片当中,有利于之后机械臂的抓取,则需要对相机进行畸变校正。

一般情况下,只要是对于成像精度较高的场景都需要进行标定,比如三维结构光成像、人脸识别、视觉测量等。

现在对于相机标定最常用的方法是张正友相机标定法,这种方法是利用棋盘格标定板每个角点像素坐标的相对关系以及在已知真实坐标相对关系的条件下计算出来的。

在OpenCv当中已经有了对应的库,在使用前只需设置一下每个格子的大小以及格子的行列数(减去一)即可进行标定。相机标定的合格指标一共有四个,分别是x轴方向、y轴方向、远近以及旋转角度。

捕捉到多张有效图片之后,进度条会变成绿色,点击CALIBRATE可直接计算出关系矩阵。以下就是我采用奥比中光Astro Pro设备得到的标定结果。

我们采用逆向计算的方法通过物体的像素坐标获取到图像的真实空间位置(世界坐标),在下图的推到过程中会涉及到以下四个坐标系:

OW-XWYWZW:世界坐标系,描述相机位置,单位m

Oc-XcYcZc:相机坐标系,光心为原点,单位m

xy:图像坐标系,光心为图像中点,单位mm

uv:像素坐标系,原点为图像左上角,单位pixel

P:世界坐标系中的一点,现实空间中的点

p:点P在图像中的成像点,在图像坐标系中的坐标为(x,y),在像素坐标系中的坐标为(u,v)

f:相机焦距,等于o与Oc的距离,f=||o-Oc||

世界坐标系是为了更好的描述相机的空间位置,原点(OW)的选择在双目深度相机当中一般会是其中一个相机的中心或者两个相机的中点。

在视觉机械臂的标定中,原点(OW)一般被确定为机械臂底座的中心。

世界坐标和相机坐标的变换过程属于刚体变换:即物体不会发生形变,只是进行了平移和旋转的变换。其中R表示旋转矩阵,T表示偏移向量(R、T被称为外参)。

围绕着不同的坐标轴,旋转不同的角度都是有对应矩阵的,如下图所示:

从相机坐标系到图像坐标系的变换,是从3D向2D的转换,主要思想就是相似三角形原理,对应原理图如下:

图中P点就是现实世界的坐标,p点就是在相机中的成像坐标,f就是透镜的焦距。

图像坐标与像素坐标的转换关系如下:

图像坐标系的原点是相机光轴和成像平面的交点,单位是mm,属于物理单位。像素坐标系的原点是成像平面的左上角,单位是pixel。

将以上这几个公式进行整理,结果如下:

相机的内参和外参已在图中标明,由于未知数有很多个,所以需要多组数据才能求解。

手眼标定

首先讲一下什么是手眼标定?为什么要手眼标定?

因为一个物体与相机的相对位置关系和这个物体与机械臂之间的关系是不一样的,所以在相机确定了物体的位置之后,还要把此时的位置转换成相对于机械臂的位置,这样机械臂才能进行抓取。

这个位置转换需要一个矩阵,这个矩阵就是由手眼标定得出的。

手眼标定的核心公式只有一个,AX=XB,这里的X就是指手(机械臂末端)与眼(摄像头)之间的坐标转换关系。

视觉机械臂的相机和机械臂有两种结合方式,一种是眼在手上(Eye-In-Hand),一种是眼在手外(Eye-To-Hand),所以手眼标定也分两种。

Eye-In-Hand(摄像头被安装在机械臂上):

这种方式的手眼标定是通过两次运动解得相机坐标系(Camera)与机械臂末端坐标系(End)之间的坐标关系。

注意:

1、机械臂末端(End)在机器人(Base)坐标系下的坐标是可以通过机械臂各个关节的角度值直接解算出来的。

2、摄像头与机械臂末端之间的坐标转换关系不变,也就是说,TE→C始终不变;标定板与机械臂底座之间的坐标转换关系不变,也就是说,TB→O也是不变的。

把TB→O按照前后两次运动展开,有:

TB→E1TE1→C1TC1→O=TB→E2TE2→C2TC2→O

(TB→E2)-1TB→E1TE1→C1TC1→O=TE2→C2TC2→O

(TB→E2)-1TB→E1TE1→C1=TE2→C2TC2→O(TC1→O)-1

TE2→E1TE1→C1=TE2→C2TC2→C1

A = TE2→E1 =  (TB→E2)-1TB→E1

B = TC2→C1 = TC2→O(TC1→O)-1

X = TE→C = TE1→C1 = TE2→C2

就得到了

AX = XB

Eye-To-Hand(摄像头被安装在一个固定不动的位置,而标定板被拿在机械臂手上):

这种方法的手眼标定是通过两次运动解得相机坐标系(Camera)与机器人坐标系(Base)之间的坐标关系。

注意:

1、机械臂末端(End)在机器人(Base)坐标系下的坐标是可以通过机械臂各个关节的角度值直接解算出来的。

2、摄像头与机械臂底座之间的坐标转换关系不变,也就是说,TB→C始终不变;标定板与机械臂末端之间的坐标转换关系不变,也就是说,TE→O始终不变。

把TB→O按照前后两次运动展开,有:

TE1→BTB→CTC→O1=TE2→BTB→CTC→O2

(TE2→B)-1TE1→BTB→CTC→O1=TB→CTC→O2

(TE2→B)-1TE1→BTB→C=TB→CTC→O2(TC→O1)-1

A = (TE2→B)-1TE1→B

B = TC→O2(TC→O1)-1

X = TB→C

就得到了

AX = XB

实际上,求解的只是一个固定的6自由度的位置姿态关系,可以用3X3的旋转矩阵和3X1的平移矩阵表示,也可以用其他方法表示如用四元数表示角度关系等。

求解(Eye-In-Hand)

坐标系之间的转换关系说明:

baseHend:表示机械手坐标系到基础坐标系的转换关系,可以由机器人系统中得出。(已知)

endHcam:表示相机坐标系到机械手坐标系的转换关系;这个转化关系在机械手移动过程中是不变的;(未知,待求)

objHcam:表示相机坐标系到标定板坐标系的转换关系(相机外參),可以由相机标定求出;(相当于已知)

baseHobj:表示标定板坐标系到基础坐标系的变换,这个是最终想要得到的结果;只要机械手和标定板的相对位置不变,这个变换矩阵不发生变化。

基础坐标系(求解baseHend)

符合右手定则的XYZ三个坐标轴:

原点:机器人底座的中心点

X轴正向:指向机器人的正前方

Z轴正向:指向机器人的正上方

Y轴正向:由右手定则确定

六个自由度

三个位置:x、y、z(第六轴法兰盘圆心相对于原点的偏移量)

三个角:Rx、Ry、Rz(第六轴法兰盘的轴线角度,由初始姿态即竖直向上绕x轴旋转Rx度,再绕Y轴旋转Ry度,再绕Z轴旋转Rz度得到)

旋转方式

绕定轴X-Y-Z旋转(判断机械臂输出四元数与代码得到的四元数是否相等得到)

旋转矩阵的计算方法如下:R = R z ∗R y ∗R x

(opencv的旋转方式是 z y x,所以旋转矩阵R=Rx*Ry*Rz)

图片

R=Rx∗Ry∗Rz=X1Y1Z3

其中c为cos,s为sin。

所以:

其中t=[x,y,z]^T,从示教器读取Rx、Ry、Rz分别是绕x、y、z轴的旋转角度。

欧拉角:分别绕x、y、z轴旋转的角度,不一样的旋转次序,得到的R不一样;

李代数:维度是3,是绕一个轴转动一定的角度。欧拉角可以理解成李代数在x、y、z轴上的分解旋转。

camHobj相机到标定板

思路大致如下:

已知双目相机的内参、畸变系数、外参(Pr=R∗Pl+t),

对左右相机的两张图片调用OpenCV中的findChessboardCorners函数,找到内角点(如果结果不好,继续提取亚像素点);

将左右相机的像素点对应起来,得到匹配的2d点;

使用空间异面直线的方法,用对应的2d点计算出以右相机为世界坐标系的3维坐标Pcam;

计算出每个角点以棋盘格为世界坐标的3维坐标Pcal;

通过解方程Pcam=camHcal*Pcal求解出外参;

这个部分可以用张正友相机标定Opencv实现

求解AX=XB

李代数到李群的转换满足指数映射关系,假设[w]∈so(3),而exp[w]∈SO(3),则其指数映射满足罗德里格斯公式:

其中∣∣ω∣∣^2=ω12+ω22+ω32

利用李群知识求解AX=XB

展开得到:

θA∗θX=θX∗θB,θA∗bX+bA=θX∗bB+bX

采用“两步法”求解上述方程,先解算旋转矩阵,再求得平移向量。

求解旋转矩阵

假设AX=XB,这里的都是旋转矩阵(SO(3)),并非变换矩阵(SE(3))。

变换可得到:A =XBX^T

两边取对数:log(A)=log(XBX^T)(对数映射)

令logA=[α],logB=[β],则上式可以化为[α]=X[β]X^T=[Xβ]从而α=Xβ

存在多组观测值时,求解该方程可以转化为下面最小二乘拟合问题:

很显然,上述问题是典型的绝对定向问题,因而求解上式与绝对定向相同,其解为

 其中,

当只有两组A、B时,即有A1,A2,B1,B2

α1=logA1,α2=logA2,β1=logB1,β2=logB2,θX=MN^−1  

其中,M=(α1 α2 α1×α2),N=(β1 β2 β1×β2)(×表示叉乘)

即可求得旋转矩阵。

求解平移向量

θA∗bX+bA=θX∗bB+bX 移项化简得到:(I−θA)∗bX=bA−(θX∗bB)计作:c*X=d

又c不一定是可逆,所以两边同时乘以c^T。即为:c^T∗c∗X=c^T∗d

所以:X=(c^T∗c)^−1∗(c^T∗d)

当有多组数据时:(c1^T∗c1+c2^T∗c2+...+cn^T∗cn)∗X=c1^T∗d1+c2^T∗d2+...+cn^T∗dn

即可求得X,即平移向量

手眼标定步骤

  1. 事先准备:机械臂可以按照正常的位姿移动,并且能够正常的输出机械臂末端姿态;机械臂能够稳定搭载相机;相机能够正确稳定地检测到物体,并且能够正确输出位置参数。
  2. 通过机械臂上面的相机,对待测物体进行位姿检测,并且输出参数。
  3. 输出机械臂末端的位置参数。
  4. 重复2、3步骤,采集十组以上有效参数。
  5. 将采集的有效参数放入代码中进行计算。
  6. 输出手眼转换矩阵。

代码:

​https://blog.csdn.net/hellohake/article/details/104808149​

读取出摄像头信息并确定目标物体的位姿

前两步完成之后就要通过摄像头读取信息了,这个步骤不难,比较难的是确定目标物体的姿态。

它首先要进行图像分割(实例分割、语义分割、部件分割),把图像中的每个个体单独分出来。然后进行物体识别,来确定哪个物体才是目标物体。

之后是确定物体的姿态,比如一个瓶子,它是立着的,还是倒着的,是横着的,还是竖着的。

最后确定抓取的位置,是抓取瓶子的盖子下面,还是抓取瓶子的中间部分,还是底部。

此处的图像还分为二维的灰度图、RGB图,三维的点云图、三角面片、Volumetric、Multi-View等。

图像分割

图像分割是计算机视觉研究中的一个经典难题,已经成为图像理解领域关注的一个热点,图像分割是图像分析的第一步,是计算机视觉的基础,是图像理解的重要组成部分,同时也是图像处理中最困难的问题之一。

所谓图像分割是指根据灰度、彩色、空间纹理、几何形状等特征把图像划分成若干个互不相交的区域,使得这些特征在同一区域内表现出一致性或相似性,而在不同区域间表现出明显的不同。

简单的说就是在一副图像中,把目标从背景中分离出来。对于灰度图像来说,区域内部的像素一般具有灰度相似性,而在区域的边界上一般具有灰度不连续性。

图像分割的方法主要分为以下几类:基于阈值的分割方法、基于区域的分割的方法、基于边缘的分割方法以及基于特定理论的分割方法。

下图中就是基于边缘的分割方法,正方体和香蕉的分割效果很好,易拉罐分割效果次之。

三维对象实例分割

三维对象实例分割是指从输入的三维点云中检测某一类的点集实例对象。与二维对象实例分割类似,双阶段方法需要区域建议,而单阶段方法则需要自由建议。

三维对象实例分割的典型功能曲线图如图所示。

三维对象实例分割在机器人抓取任务中非常重要。但目前的方法主要是利用二维实例分割方法来获得目标对象的三维点云,这利用了RGB-D图像的优势。

目前,三维对象实例分割仍是一个快速发展的领域,如果其性能和速度大大提高,在未来将得到广泛的应用。

姿态估计

先简单介绍三种方法:

A.通过深度神经网络处理,来生成几个候选的抓取位置。这些候选的抓握姿态被编码到一个堆叠的多通道图中。使用一个四层卷积神经网络对每个候选抓握姿态进行评估,以获得一个分数。

B.对整个三维空间进行均匀采样生成候选抓取,利用三维CNN和候选抓取姿态的抓取可达性预测抓取稳定性,得到抓取成功概率。

C.还有一种名为6-自由度GraspNet的算法,该算法使用变分自动编码器对抓取建议进行采样,并使用抓取评估器模型对采样的抓取进行参考。

第一幅图可以看到,算法生成了很多的抓取位置,然后以评分的方式选择其中一种。第二幅图中,通过算法进行模型匹配,来生成最佳的抓取位置。

机械臂正逆运动学求解

首先,大致说一下什么是正逆学求解。机械臂的运动主要是靠电机的旋转来实现末端的移动,一个旋转,一个空间的位置移动。

输入每个电机旋转的角度j1,j2…,jn,输出是机械臂末端执行器的位置(x,y,z)与姿态(α,β,γ),这就是机械臂运动学正解。反之,为逆解。

机械臂还有一个常用的参数叫自由度。机械臂机架上有n个电机,就是n自由度机械臂,也叫n轴机械臂,记为n DOF。(末端执行器上的不算,因为它不影响机械臂的运动学结果。)

UR5机械臂的Gazebo仿真图

运动学正解

正运动学是已知关节六个角度求变换矩阵T

图片

图片

图片

图片

所以末端坐标系6到基座固定坐标系0的变换矩阵

图片

那么求正解就很简单了,只要输入六个关节角度θi,就得到末端坐标在基坐标系的变换矩阵T。

ur机械臂的视教板上末端点的坐标是用六个值[x, y, z, rx, ry, rz]表示的。

前三个值[x, y, z]是三维笛卡尔坐标,表示空间位置,后三个值[rx, ry, rz]是坐标旋转向量,表示空间姿态。我们得到的变换矩阵T怎么变成六值坐标[x, y, z, rx, ry, rz]呢?设

图片

T的左上角的3x3矩阵是旋转矩阵,旋转矩阵和旋转向量之间可以通过罗德里格斯(Rodrigues)变换进行转换。

opencv里有相应的函数调用。算法也比较简单,不用opencv的函数自己写代码也不难。T的右上角3x1就是空间位置[x, y, z]。这样有变换矩阵T得到六值坐标,完成了正解。

运动学逆解

逆解相对复杂一些,根据机械臂末端的空间位置和姿态,来求解可能的关节角度。求逆解的方法有解析法,迭代法和几何法等。下面我们推导一下ur的逆解。

首先计算变换矩阵T过程中的一些中间矩阵

图片

 ,其中c23=cos(θ2+θ3),s23=sin(θ2+θ3)。

图片

图片

图片

得到

图片

计算

图片

得到

图片

等式两边矩阵的行列应该分别相等,由第三行第四列得到

图片

可解得

图片

有两个解。这里注意写程序的时候,求解这里的反正切是用atan2()这类的函数,返回之在(-π,+π]。

而反余弦的返回值在[0,π],从而保证在2π范围每个解是唯一的。

由第三行第三列得

图片

可解得

图片

两个解。由第三行第二列得到

图片

可解得

图片

接着由

图片

计算

图片

得出等式左边等于

图片

图片

图片

总结

视觉机械大致有11步,前文图中九步加上相机标定、手眼标定。里面有很多知识也是借鉴别人的,毕竟一个的能力有限,不可能完成这么多理论知识。

自己在学习前也是找了很多资料,没有发现一篇能把视觉机械臂全流程讲详细的帖子。所以我学习并理解了全流程之后,自己整理了一篇文章,仅供大家参考。

因为视觉机械臂本身涉及的内容比较多,所以我对于每一步的讲解也不是非常的透彻。如果想更详细的了解其中的某个或某些步骤,可以自行网上检索。

#OpenVLA-OFT

破解VLA泛化微调技术难题!

使用视觉 - 语言 - 动作模型(VLAs)的朋友们可能发现,在实际应用中,当面对自己的新机器人或新任务时,别人的VLA就失灵了,结果一塌糊涂。

实际上,不同机器人在硬件配置(如传感器类型、关节数量和运动范围等)、控制频率等方面存在差异。以在模拟环境训练的 VLA 模型为例,若应用到真实的双手机器人上,由于真实环境中机器人的动作空间、感知输入更为复杂,模型的表现会大打折扣,所以需要微调来适应新的机器人设置。同时,新任务可能涉及不同的语义理解和动作规划,比如从简单的物体抓取任务转换到复杂的组装任务,模型也需要重新调整才能准确执行

当面对新机器人或新任务时,微调是让模型适配并良好运行的关键,但目前却没有明确有效的微调方法。首先,现有微调方法速度较慢。Kim 等人提出通过 LoRA 进行参数高效微调,然而其自回归动作生成速度较慢,仅为 3 - 5Hz,这对于需要高频控制(25 - 50+Hz)的任务,如双手机器人快速操作物体的任务来说,远远无法满足实时性要求。在实际操作中,机器人需要快速响应指令做出动作,迟缓的动作生成速度会导致任务执行效率低下甚至失败。

其次,在双手机器人操作任务中执行不可靠。在双手机器人操作任务中,例如在 ALOHA 机器人进行的折叠衣物任务,使用 LoRA 或全量微调的自回归 VLAs 表现不佳。因为双手操作任务需要机器人双臂协同配合,对动作的精准度和协调性要求高,现有微调方法难以让模型有效学习和执行这类复杂任务,可能出现动作不协调、无法完成任务目标的情况。

针对这些问题,文章提出 OpenVLA - OFT 模型,通过以下方式解决速度慢、双手操作任务执行不可靠等局限:

  • 改进动作生成策略:采用并行解码替代自回归生成,并结合动作分块。并行解码使模型能在单次前向传递中生成所有动作,减少推理时间,且可自然扩展到动作分块,提高动作生成吞吐量,解决了推理速度慢不适合高频控制的问题,同时提升了下游任务成功率。
  • 优化动作表示:使用连续动作表示代替离散动作表示。连续动作表示可让模型直接建模动作分布,避免离散化造成的细节损失,从而提高模型性能,在任务执行中表现更精确。
  • 调整学习目标:采用 L1 回归作为学习目标。实验表明,L1 回归与基于扩散的微调性能相当,但训练收敛更快、推理速度更快,在保证任务性能的同时提高了效率。
  • 增强语言基础:在 ALOHA 机器人实验中,为 OpenVLA - OFT 引入 FiLM(Feature-wise Linear Modulation)。FiLM 将语言嵌入融入视觉表示,使模型更关注语言输入,解决了模型在处理多视角视觉输入时难以遵循语言指令的问题,提升了语言跟随能力。

模型框架

文章基于OpenVLA提出OpenVLA-OFT模型框架,通过一系列改进提升性能,主要包含以下关键部分:

输入处理模块:OpenVLA-OFT可处理多摄像头图像,如第三人称视角和手腕摄像头图像,通过共享的SigLIP-DINOv2骨干网络提取256维patch嵌入,再经3层MLP投影到语言嵌入空间。同时,14维机器人本体感受状态(如关节角度)经2层MLP投影到语言嵌入空间,所有输入嵌入按序列维度拼接,为后续动作生成提供丰富信息。

解码与动作生成模块

并行解码:摒弃OpenVLA原有的自回归解码,采用并行解码。模型接收空动作嵌入作为输入,将因果注意力掩码替换为双向注意力掩码,使解码器能在单次前向传递中预测所有动作,大幅提升推理效率。结合动作分块技术,通过在解码器输入中插入额外空动作嵌入,可一次预测多个未来时间步的动作,如设置分块大小为K时,模型一次前向传递能预测KD个动作。

动作表示:原OpenVLA使用离散动作表示,而OpenVLA-OFT采用连续动作表示。通过4层ReLU激活的MLP动作头,将Llama-2解码器的最终隐藏状态直接映射为连续动作,避免离散化带来的信息损失,提高动作预测精度。

学习目标模块:采用L1回归作为学习目标,训练模型最小化预测动作与真实动作之间的平均L1差异。相比基于扩散的方法,L1回归训练收敛更快,推理速度更快,且能使高容量的OpenVLA模型有效学习多任务动作分布。

语言增强模块(FiLM):在ALOHA机器人实验中,为解决模型在多视角视觉输入下语言跟随困难的问题,OpenVLA-OFT+引入FiLM。计算任务描述的语言嵌入平均值,投影得到缩放向量γ和偏移向量β ,对视觉特征进行仿射变换,公式为

图片

在每个视觉Transformer块的自注意力层之后、前馈层之前应用FiLM,且为每个块设置单独的投影仪,使模型更好地关注语言输入,增强语言基础。

实验结果

通过控制变量实验,评估论文提出的VLA适应设计决策的效果,回答三个关键问题:各设计决策如何影响微调策略在下游任务的成功率;如何影响模型推理效率(动作生成吞吐量和延迟);如何影响模型输入输出规范的灵活性。

选用LIBERO模拟基准进行评估,实验以原始微调的OpenVLA模型为主要基线,同时纳入其他先进模仿学习方法的结果作更广泛对比。实验中,通过LoRA对OpenVLA进行微调,根据方法不同设置不同训练步数,使用特定批次大小在多个GPU上训练,并在训练过程中定期测试检查点,报告最佳性能。

LIBERO任务性能比较:为评估不同VLA微调设计决策对任务成功率的影响,实验结合并行解码(PD)和动作分块(AC)技术,对比使用离散动作、基于L1回归的连续动作和基于扩散的连续动作的OpenVLA策略变体。结果表明,并行解码和动作分块不仅提高了吞吐量,还显著提升了性能,使平均成功率比自回归OpenVLA策略提高了14%。连续动作变体比离散动作变体成功率进一步提高5%,且L1回归和扩散变体性能相当,说明OpenVLA模型即使使用简单的L1回归也能有效建模多任务动作分布。

LIBERO推理效率比较:评估并行解码、动作分块和连续动作表示对模型推理速度的影响,通过在NVIDIA A100 GPU上查询每个模型变体100次,测量平均延迟(生成一个机器人动作或动作块所需时间)和吞吐量(每秒生成的总动作数)。结果显示,并行解码减少了延迟并将吞吐量提高4倍;添加动作分块虽使延迟增加17%,但与并行解码结合后,吞吐量大幅提升,相比基线OpenVLA实现26倍加速;基于L1回归的连续动作变体在效率上与其他变体差异可忽略不计,而基于扩散的变体虽延迟较高,但通过并行解码和分块仍实现了比基线OpenVLA高2倍的吞吐量。

模型输入输出灵活性:并行解码使OpenVLA能以最小的延迟增加生成动作块,增强了模型输出的灵活性,且为处理更多输入创造了空间。实验通过微调OpenVLA,添加机器人本体感受状态和手腕摄像头图像等输入,结果表明,尽管输入序列长度大幅增加,微调后的OpenVLA策略仍保持高吞吐量(71.4 Hz)和低延迟(0.112 sec)(表2),且在LIBERO基准上的平均成功率进一步提高(表1),超过了其他优秀的微调模型,证明了该设计决策的有效性。

优化微调方案

基于上述实验在任务性能、推理效率和模型输入输出灵活性方面的改进,文章提出了VLA适应的优化微调(OFT)方案,该方案结合了并行解码与动作分块、连续动作表示、L1回归目标这三个关键组件,这些设计选择共同作用,可产生能在高频下部署的强大策略,同时保持算法的简单性。使用该方案从OpenVLA基础模型微调得到的策略被称为OpenVLA-OFT。

额外实验:考虑到替代微调公式以及额外的模型输入输出可能导致基础VLA预训练和微调之间的分布转移,文章进行了消融实验,去掉OpenVLA预训练阶段,直接用OFT方案微调基础预训练VLM。结果表明,去掉预训练表示后,在LIBERO评估套件中的平均成功率下降了5.2%,证实了OpenVLA预训练表示对下游策略学习仍有益处。

将OpenVLA模型应用于真实世界ALOHA机器人,验证OpenVLA - OFT在模拟环境中表现出的有效性,是否也能在与预训练时差异较大的真实世界机器人平台上成功部署,以此证明其广泛适用性。

实验设置

ALOHA平台介绍:ALOHA平台包含两个ViperX 300 S机械臂、三个摄像头视角(一个俯视、两个手腕佩戴)以及机器人状态输入(14维关节角度),运行频率为25Hz,动作代表目标绝对关节角度。该平台与OpenVLA预训练时的单臂机器人数据、单摄像头视角、无机器人状态输入、低频控制(3 - 10Hz)和相对末端执行器位姿动作等条件差异显著。

任务设计:设计了四个具有代表性的任务,分别为 “fold shorts”(折叠短裤)、“fold shirt”(折叠衬衫)、“scoop X into bowl”(将X舀入碗中)和 “put X into pot”(将X放入锅中)。

模型微调:使用增强版的OFT +(包含特征线性调制FiLM以增强语言基础)对OpenVLA在每个任务上独立进行50 - 150K梯度步的微调,动作块大小设为K = 25 ,推理时执行完整动作块后再请求模型生成下一块动作。

对比方法:将OpenVLA - OFT +与近期的VLAs(RDT - 1B和pi0 )进行对比。同时,还评估了两个流行的模仿学习基线方法ACT和Diffusion Policy。

实验结果

任务性能:非VLA基线方法中,ACT能完成基本任务,但动作不够精确,整体性能最低;Diffusion Policy在部分任务表现较强,但在 “put X into pot” 任务上表现不佳,显示出与基于VLA的方法相比可扩展性有限。在微调的VLAs中,RDT - 1B语言跟随能力较好,但处理闭环反馈存在局限;(pi_{0})执行更稳健,动作更平滑,对反馈反应更好;OpenVLA - OFT +在任务执行和语言跟随方面均取得最高性能,即便其基础OpenVLA模型仅在单臂数据上预训练,这表明微调技术对下游性能的影响比预训练数据覆盖范围更关键。

FiLM的重要性:通过消融实验评估FiLM在OpenVLA - OFT +中的重要性,去掉FiLM后,模型在需要良好语言基础的任务上,语言跟随能力下降到随机选择指令的水平,证明FiLM对防止模型过度拟合虚假视觉特征、确保关注语言输入至关重要。

推理效率:OpenVLA - OFT +的吞吐量为77.9Hz,虽然由于需要处理更多输入图像,其延迟比之前LIBERO实验中的策略更高,但相比原始OpenVLA已有显著提升。其他方法因架构较小,吞吐量高于OpenVLA - OFT +,如ACT结合L1回归和紧凑架构实现了最高速度,(pi_{0})凭借优化的JAX实现也在速度上表现出色,但OpenVLA - OFT +的吞吐量仍接近RDT - 1B,且生成动作只需单次前向传递,无需多次去噪步骤。

总结与展望

文章先介绍了视觉 - 语言 - 动作模型(VLAs)在新机器人设置和任务中微调的研究背景,阐述以 OpenVLA 为基础模型进行研究的方法,包括改进动作生成策略、优化动作表示、调整学习目标和增强语言基础等。通过 LIBERO 模拟实验和 ALOHA 机器人真实实验,结果表明改进后的 OpenVLA - OFT 模型在任务成功率、推理效率和输入输出灵活性等方面有显著提升。同时文章也指出自己的局限性,比如处理多模态演示、预训练与微调关系以及语言基础不一致等方面存在的问题,为后续研究指明方向。

参考文献

Fine-Tuning Vision-Language-Action Models:Optimizing Speed and Success
Moo Jin Kim, Chelsea Finnl, Percy Liang
​​​https://openvla-oft.github.io​​https://arxiv.org/pdf/2502.19645v1

作者信息:https://moojink.com/

#SegMAN

Mamba和局部自注意力的首次碰撞:一种性能强大的混合视觉架构

本篇分享 CVPR 2025 论文,俞益洲教授团队提出新型语义分割框架SegMAN,在三大语义分割基准(ADE20K,Cityscapes, COCO-Stuff-164k)测试中展现出了卓越的性能。代码已开源!

摘要

香港大学计算和数据科学学院俞益洲教授(https://i.cs.hku.hk/~yzyu/index.html)及其研究团队提出新型语义分割框架SegMAN,包含全球首个融合动态状态空间模型(Mamba)局部自注意力的通用视觉主干网络(SegMAN Encoder)基于Mamba的多尺度解码器(SegMAN Decoder)

主干网络创新

SegMAN Encoder首次在视觉主干网络中实现Mamba全局建模能力与局部自注意力机制的融合,该模型通过线性复杂度Mamba捕获长程依赖滑动窗口局部自注意力保持像素级细节精度,在ImageNet-1k 上显著超越现有的Mamba与Transformer 模型。

解码器创新

SegMAN Decoder核心为基于Mamba的多尺度信息增强模块(MMSCopE),该模块采用卷积来提取多分辨率区域的语义信息,然后通过空间扫描机制实现跨尺度的全局语义传播

整体架构

结合了主干网络与解码器,提出一种新的语义分割模型SegMAN,在三大语义分割基准(ADE20K,Cityscapes, COCO-Stuff-164k)测试中展现出了卓越的性能。

动机

在计算机视觉领域,语义分割任务要求为图像中的每个像素赋予类别标签,是自动驾驶、医学影像分析、智能安防等应用的核心技术。然而,这一任务面临三大关键挑战:全局上下文建模(理解整体场景)、局部细节编码(精确识别边界与细微特征)以及多尺度特征提取(适应不同尺寸的目标)。

现有方法往往顾此失彼---全局建模能力强的模型可能丢失细节,而关注细节的模型又难以覆盖全局。针对这一瓶颈, SegMAN创新性地构建了编码-解码协同框架,高效的整合全局上下文建模、局部细节表征与多尺度动态融合三大核心机制。

方法

SegMAN Encoder构建了4阶段金字塔结构,创新性地将邻域注意力(Natten)与二维选择性动态状态空间模型扫描(SS2D)融合为一个即插即用的LASS混合模块。该模块通过级联式架构实现:Natten采用滑动窗口机制捕捉不同邻域内的细粒度特征,SS2D通过四向扫描路径建模全局长程依赖,二者通过残差连接实现局部-全局特征的动态融合。LASS模块突破传统Transformer的二次方复杂度限制,通过Natten的局部窗口约束与SS2D的状态空间压缩策略,在保持线性计算复杂度的同时,实现多尺度特征的协同优化。

SegMAN Decoder设计基于状态空间模型的MMSCopE模块,该模块可以无缝插入到任何金字塔网络,并且通过像素重组技术将原始特征()、 降采样特征()和 降采样特征()沿通道维度拼接提取多分辨率区域的语义信息,随后利用SS2D的单次空间扫描机制实现跨尺度的全局语义传播,然后将多尺度特征注入编码器各阶段输出(),最终经双层MLP生成像素级预测。

SegMAN通过编码-解码协同优化,在全局建模、局部感知与多尺度融合三个关键维度实现突破,为实时高精度语义分割任务提供了新的技术路径。 SegMAN的整体架构如图1所示:

图1 SegMAN架构: (a) SegMAN Encoder;(b)由滑动窗口局部注意力(Natten)和动态状态空间模型(SS2D)组成的LASS,模块通过线性复杂度优势协同建模全局上下文与局部细节特征;(c)SegMAN Decoder;(d)基于Mamba的多尺度信息增强模块 MMSCopE

图1 SegMAN架构: (a) SegMAN Encoder;(b)由滑动窗口局部注意力(Natten)和动态状态空间模型(SS2D)组成的LASS,模块通过线性复杂度优势协同建模全局上下文与局部细节特征;(c)SegMAN Decoder;(d)基于Mamba的多尺度信息增强模块 MMSCopE​

实验结果​

图像分类性能

SegMAN Encoder在图像分类基准数据集 ImageNet-1K 上表现出了卓越的性能,相较于现有方法,在公平比较里展现出更高的准确率。如图2和表1所示,SegMAN Encoder 在不同尺寸的模型上都具有更高的准确率。SegMAN-B Encoder(45M)以大约一半的参数量就超越了VMamba-B, ConvNeXt-B, InterImage-B等模型的准确率。

图片

图2 不同模型在ImageNet-1K上的上的准确率对比

图2 不同模型在ImageNet-1K上的上的准确率对比

表1 不同模型在ImageNet-1k 上的准确率对比

表1 不同模型在ImageNet-1k 上的准确率对比​

语义分割性能

表2 不同模型在ADE20K,Cityscapes, COCO-Stuff-164K 上的语义分割性能对比

表2 不同模型在ADE20K,Cityscapes, COCO-Stuff-164K 上的语义分割性能对比​

计算效率

在Cityscapes数据集(2048×1024分辨率)的推理速度测试中,使用NVIDIA L40S GPU并以批次大小2运行128个步骤,SegMAN-T的平均帧率(FPS)显著优于对比模型。如表3所示,SegMAN-T在FPS约为EDAFormer-T三倍的同时,mIoU指标提升1.6%,体现了模型在计算效率与语义分割性能之间的优越tradeoff

表3 不同模型在Cityscapes上的速度对比

表3 不同模型在Cityscapes上的速度对比​

通用性实验

如表4所示,当将SegMAN Encoder与Decoder模块集成到现有最新方法中时,二者均能有效提升模型性能。

表4 SegMAN Encoder 与 Decoder 集成到现有方法中时的性能

表4 SegMAN Encoder 与 Decoder 集成到现有方法中时的性能​

消融实验

研究团队在ImageNet-1K与ADE20K数据集上系统性验证编码器架构设计。核心模块LASS采用Natten与SS2D的级联结构,通过SS2D残差连接实现局部-全局特征融合,并在第四阶段以全局注意力替代SS2D以增强高层语义建模。架构验证通过三组消融实验展开:

  1. 混合器架构对比:将LASS替换为MaxViT、ACMix等主流结构时,LASS在分类与分割任务中均表现出最优性能。其优势源于Natten对局部细节的精准捕捉与SS2D对全局关联的高效建模形成的双向互补效应。
  2. 组件连接方式分析:实验表明,SS2D与Natten的级联结构配合残差连接具备必要性。若改用并行架构或移除残差连接,分类准确率与分割mIoU分别下降0.9%和1.8%。
  3. 核心算子有效性:替换SS2D为空间缩减注意力(SRA)或线性注意力时,性能出现0.3%-1.8%的显著下滑;将Natten替换为卷积或移位窗口注意力则导致0.5%-1.8%的精度损失,验证原始组件组合的不可替代性。

详细数据支持如表5所示。

表5 SegMAN Encoder 消融实验

表5 SegMAN Encoder 消融实验​

可视化

图3、4、5分别对比了ADE20K、Cityscapes及COCO-Stuff-164K数据集上不同方法的分割效果。如图所示,相较于现有方法,SegMAN生成的分割边界更精准,且能细致捕捉场景中的复杂细节(如微小物体等),在结果完整性与真实感上实现显著提升

图3 不同方法在ADE20K上的分割效果

图3 不同方法在ADE20K上的分割效果

图4 不同方法在CityScapes上的分割效果

图4 不同方法在CityScapes上的分割效果

图5 不同方法在COCO-Stuff-164k上的分割效果

图5 不同方法在COCO-Stuff-164k上的分割效果

#MambaOut

在视觉任务中,我们真的需要 Mamba 吗?

在 ImageNet 图像分类中有效地超过了视觉 Mamba 模型

Mamba,一种使用类似 RNN 的状态空间模型 (State Space Model, SSM) 作为 token mixer 的架构,能够解决 Self-attention 的二次计算复杂度,并随后引入视觉任务中。但是,与基于卷积或者 Attention 的模型相比,Mamba 在视觉方面的性能往往不足。

在本文中,作者深入研究了 Mamba 的本质,并得出结论:Mamba 非常适合具有长序列自回归特征的任务。视觉任务中的图像分类任务与上面的特征都不匹配,因此作者假设 Mamba 在此任务中不是必需的;检测和分割任务也不是自回归的,但它们遵循长序列特征,因此作者认为探索 Mamba 在这些任务上的潜力仍然是值得的。

为了实证验证这一假设,作者通过在移除核心 token mixer SSM 的同时堆叠 Mamba Block 来构建一系列名为 MambaOut 的模型。实验结果有力地支持了我们的假设。具体来说,对于 ImageNet 图像分类,MambaOut 超过了所有视觉 Mamba 模型,这表明该任务确实没有必要 Mamba。对于检测和分割,MambaOut 无法与最先进的视觉 Mamba 模型的性能相匹配,展示了 Mamba 对长序列视觉任务的潜力。

图片

图1:左:Gated CNN 和 Mamba Block 的架构。Mamba 模块通过一个额外的状态空间模型 (State Space Model, SSM) 来延展 Mamba。右:MambaOut 在 ImageNet 分类任务上超越了多个 Mamba 模型,包括 PlainMamba,Vision Mamba,VMamba

图片

图2:纪念科比布莱恩特---What can I say, Mamba out; 2016 年于 NBA farewell speech

本文做了哪些具体的工作

  1. 分析了 SSM 中类似 RNN 的机制,并在概念上得出结论,Mamba 适用于具有长序列和自回归特征的任务。
  2. 检查了视觉任务的特征,认为 SSM 对于 ImageNet 图像分类任务是没必要的,因为此任务不满足自回归和长序列,但是探索 SSM 在检测分割任务的潜力仍然很有价值,因为这些任务尽管不是自回归的,但是符合长序列的特征。
  3. 开发了一系列名为 MambaOut 的模型,该模型基于 Gated CNN Block,但没有 SSM。实验表明,MambaOut 在 ImageNet 图像分类中有效地超过了视觉 Mamba 模型。

1 MambaOut:在视觉任务中,我们真的需要 Mamba 吗?

论文名称:MambaOut: Do We Really Need Mamba for Vision? (Arxiv 2024.05)

论文地址:​http://arxiv.org/pdf/2405.07992​

代码链接:​http://github.com/yuweihao/MambaOut​

1.1 在视觉任务中,我们真的需要 Mamba 吗?

近年来,Transformer[1]已经成为各种任务的主流骨干,支持 BERT、GPT 系列和 ViT 等突出模型。然而,Transformer 的 token mixer Self-attention 有关于序列长度的二次计算复杂度,对长序列任务提出了重大的挑战。为了解决这个问题,前人的工作引入了各种各样的具有线性复杂度的 token mixer,比如动态卷积[2]、Linformer[3]、Longformer[4]、Big Bird[5]和 Performer[6]等。最近,出现了一种新的类似 RNN 的模型浪潮[7][8][9],因其可并行化训练以及对长序列执行有效推理的能力,引起了社区的极大兴趣。值得注意的是,RWKV[8]和 Mamba[9]等模型被证明对大语言模型 (LLM) 的主干[10]有效。

受这些类似 RNN 的模型展示出的 promising 的能力的启发,各种研究工作试图将 Mamba[9]引入到视觉工作中,例如 Vision Mamba[11],VMamba[12],LocalMamba[13]和 PlainMamba[14]等工作。本着 RNN 的精神,Mamba 的令牌混合器是结构化状态空间模型 (State Space Model, SSM)。然而,他们的实验表明,与最先进的基于卷积[15][16]和基于 Attention[17][18]的模型相比,基于 SSM 的视觉模型的性能不足。这就产生了一个研究问题:在视觉任务中,我们真的是否需要 Mamba?

1.2 本文有哪些新的发现?

在本文中,作者研究了 Mamba 的性质,并在概念上总结了 Mamba 非常适合具有两个关键特征的任务:长序列 (long-sequence) 和**自回归 (autoregressive)**,原因是 SSM 固有的 RNN 机制[19][20]。但不是所有的视觉任务都具有这两个特征。例如,ImageNet 图像分类两者都不符合,COCO 目标检测和实例分割,ADE20K 语义分割任务仅符合长序列这个特征。另一方面,自回归特性要求每个 token 仅从前一个 token 和当前 token 中聚合信息,也就是一种 causal mode 的 token mixing 策略。事实上,所有的视觉识别任务都属于是理解领域而非生成任务,意味着模型一次可以看到整个图像。因此,在视觉识别模型中对 token mixing 施加额外的 causal 约束可能会导致性能下降。虽然这个问题可以通过添加 Bidirectional 分支[21]来缓解,但这个问题不可避免地存在于每个分支中。

基于上述概念讨论,作者提出以下两个假设:

  • 假设1:图像分类任务没必要使用 SSM。因为这个任务既不属于长序列任务,也不属于自回归任务。
  • 假设2:SSM 可能对目标检测,实例分割和语义分割任务有益,因为它们尽管不是自回归的,但遵循长序列特征。

为了验证这两个假设,作者开发了一系列模型,称为 MambaOut,通过堆叠 Gated CNN[22]Block。Gated CNN 和 Mamba Block 之间的主要区别在于 SSM 的存在,如图1所示。实验结果表明,更简单的 MambaOut 模型已经超过了视觉 Mamba 模型的性能,这反过来又验证了本文假设1。作者还通过实验证明,MambaOut 在 检测和分割任务中没有达到最先进的视觉 Mamba 模型的性能,表明 SSM 在这些任务上的潜力,并有效地验证了本文假设2。

1.3 Mamba 适合什么任务?

在本节中,作者首先讨论 Mamba 模型适合的任务的特征。接下来,检查视觉识别任务是否符合这些特征。基于检查结果,作者提出了关于 Mamba 在视觉的必要性的假设。

Mamba 模型的 token mixer 是 selective SSM[9][20],其包含4个 input-dependent 的参数, 并将它们通过下式变为  :

图片

然后,SSM 的序列到序列变换可以表示为:

图片

其中  表示时间步长,  表示输入,  表示隐藏状态,  表示输出, 上式2的循环属性  将 SSM 与 Causal Attention 区分开来。隐藏状态  可以看作是存储所有历史信息的固定大小的 memory。通过式2, 更新此内存, 同时其大小保持不变。固定大小意味着 memory 不可避免地是有损的, 但它确保将 memory 与当前输入集成的计算复杂度保持不变。相反, Causal Attention 将来自先前 token 的所有键和值存储为其 memory, 它通过为每个新输入添加当前 token 的键和值来扩展。这个 memory 在理论上是无损的。然而, 随着输入更多的 tokens, memory 的大小也会增加, 从而增加了将 memory 与当前输入集成的复杂性。图2进一步说明了类似 RNN 的模型和 Causal Attention 之间的记忆机制的差异。

图片

图3:从 memory 的角度说明 Causal attention 和 RNN-like 模型的区别,x_i 代表第 i 步的输入 tokens。(a): Causal attention 将之前的所有 key 和 value 存入 memory。memory 是无损的;(b):RNN-like 模型将之前的 tokens 压缩为固定大小的状态,存入 memory。memory 是有损的

SSM 的 memory 在本质上是有损的,它在逻辑上落后于 Attention 的无损 memory。因此,Mamba 无法展示处理短序列方面的优势。而 Attention 在短序列处理上很容易处理好。然而,在涉及长序列的场景中,Attention 会因其二次复杂度而发生变化。在这种情况下,Mamba 可以突显其在将内存与当前输入合并时的效率,从而平滑地处理长序列。因此,Mamba 特别适合处理长序列。

虽然 SSM 的循环性质 (式2) 允许 Mamba 有效地处理长序列,但它引入了一个显著的局限性: 只能访问前一个时间步和当前时间步的信息。如图3所示,这种类型的 token mixing 称为 Causal Mode,可以表示为:

图片

其中  和  分别表示第  个 token 的输入和输出。由于其因果性质,这种模式非常适合自回归生成任务。

另一种模式称为完全可见模式,其中每个 token 都可以聚合来自所有先前和后续 tokens 的信息。这意味着每个 token 的输出取决于所有 tokens 的输入:

图片

式中,  代表总的 token 数。完全可见模式适用于理解任务,其中模型可以同时访问所有输入。

默认情况下,Attention 处于完全可见的模式,但它可以通过将 Causal Mask 应用于注意力图轻松转变为 Causal Mode。RNN-like 模型由于其循环特性固有地以因果模式运行。由于这种固有特性,RNN-like 模型无法转换为完全可见的模式。尽管 RNN 可以使用双向分支近似完全可见的模式,但每个分支仍然是 Causal Mode。因此,由于 Mamba 的循环特性的固有限制,导致它非常适合需要 Causal token mixing 的任务。

总之,Mamba 非常适合显示以下特征的任务:

  • 特征1:该任务涉及处理长序列。
  • 特征2:该任务需要 Causal 的 token mixing 模式。

接下来,作者将讨论视觉识别任务是否表现出这两个特征。

1.4 视觉任务有长序列吗?

作者探讨了视觉识别任务是否需要长序列建模。作者使用 Transformer 作为案例研究。考虑一个常见的 MLP 比为 4 的 Transformer Block; 假设其输入  的长度为 , Embedding dimension 的维度为 , Block 的 FLOPs 可以计算为:

图片

由此,推导出二次项与线性项的比率为:

图片

如果  ,则二次项的计算负载超过了线性项的计算量。这提供了一个简单的指标来确定任务是否涉及长序列。例如, 在 ViT-S 中有384个 channel, 阈值 , ViT-B 中有 768 个 channel, 阈值  。

对于 ImageNet 图像分类任务, 典型的输入图像大小为 , 就会有  个 token, Patch Size 为  。显然, 196 远小于  和 , 这表明 ImageNet 图像分类任务不属于长序列任务。

对于  目标检测和实例分割任务, 推理图像大小为 , 在 ADE20K 语义分割任务, 推理图像大小为 , 给定 Patch Size 为 , token 的数量约为  。由于  以及 , 因此  检测和 ADE20K 语义分割都可以被认为是长序列任务。

1.5 视觉任务需要 Causal 的 token mixing 模式吗?

图片

图4:(a) 两种模式的 token mixing 策略。共计 T 个 tokens,全部可见模式允许 token t 根据所有的 tokens 来计算输出,而 Causal 模式则限制 token t 根据当前以及之前的所有的 tokens 来计算输出。(b) 作者将完全可见模式修改为 Causal 模式,并观察到 ImageNet 的性能下降

如上图3所示,完全可见模式进行 token mixing 时候不限制范围,而 Causal 模式限制仅仅访问之前 token 的信息。视觉识别被归类为理解任务,其中模型一次可以看到整个图像,消除了对 token mixing 的限制。对 token mixing 施加额外的约束可能会降低模型性能。如图 3(b) 所示,当 Causal 的限制应用于 Vision Transformers (ViT) 时,可以观察到性能的显着下降。一般来说,完全可见的模式适用于理解任务,而因果模式更适合自回归任务。这也是为什么 BERT 和 ViT 比 GPT-1/2 和 Image GPT 更多用于理解任务。

1.6 关于 Mamba 在视觉的必要性的假设

基于之前的讨论,作者总结了假设,即为视觉识别任务引入 Mamba 的必要性:

  • 假设 1:没有必要在 ImageNet 上引入 SSM 进行图像分类,因为此任务不满足特征1或特征2。
  • 假设 2:仍然值得进一步探索 SSM 在检测和分割方面的潜力,因为这些任务与特征1一致,尽管不满足特征2。

1.7 Gated CNN 和 MambaOut

接下来, 作者通过实验来验证之前的假设。如图 1(a) 所示, Mamba Block 基于 Gated CNN Block  。Gated CNN 和 Mamba 的元架构都可以被认为是 MetaFormer  中的 token mixer 和 MLP 的简化集成, 类似于 MetaNeXt  。形式上, 给定输入 , 元架构表示为:

图片

式中, TokenMixer()代表 token mixer,其在 Gated CNN 和 Mamba 中分别为:

图片

可以发现,Gated CNN 和 Mamba Block 之间的主要区别在于 SSM 的存在。作者开发了一系列模型,称为 MambaOut,它基于没有 SSM 的 Gated CNN Block。通过 MambaOut 来评估 Mamba 对视觉识别任务的必要性。

具体而言,作者按照 ConvNeXt 的做法将 Gated CNN 的 token mixer 指定为 7×7 的 Depth-Wise Convolution。此外,为了提高实际速度,我们仅对部分 channels 进行 Depth-Wise Convolution。如下图5所示,Gated CNN 的实现简单而优雅。与 ResNet 类似,我们采用 4 阶段框架,通过在每个阶段堆叠 Gated CNN 的来构建 MambaOut,如图6所示。

图片

图5:Gated CNN Block 的 PyTorch 代码

图片

图6:(a) MambaOut 的总体架构;(b) Gated CNN Block 的设计

1.8 ImageNet 实验结果

ImageNet 实验结果如下图7所示。本文不包含 SSM 的 MambaOut 模型始终优于包含所有模型大小的 SSM 的视觉 Mamba 模型。比如,MambaOut-Small 模型实现了 84.1% 的 top-1 精度,比 LocalVMamba-S 高 0.4%,同时只需要 79% 的 MAC。这些结果有力地支持了本文假设 1,即没有必要在 ImageNet 上引入 SSM 进行图像分类,这与 Occam 的 razor 的原理对齐。

图片

图7:ImageNet 实验结果

此外,与最先进的卷积和注意力模型相比,视觉 Mamba 模型目前表现出显著的性能差距。例如,CAFormer-M36[18]采用了简单的可分离卷积和标准注意机制等传统 token mixer,在准确率上优于所有大小相当的视觉 Mamba 模型。

1.9 COCO 目标检测和实例分割实验结果

作者使用 Mask R-CNN[27]作为目标检测和实例分割框架。虽然 MambaOut 在 COCO 目标检测和实例分割任务中可以超越一些视觉 Mamba 模型,但它仍然落后于最先进的视觉 Mamba,例如 VMamba 和 LocalVMamba。这种性能差异强调了在长序列视觉任务中集成 Mamba 的好处,验证了本文假设2。然而,与最先进的卷积注意混合模型 TransNeXt[28]相比,视觉 Mamba 仍然表现出显着的性能差距。视觉 Mamba 需要通过在视觉检测任务中优于其他最先进的模型来进一步验证其有效性。

图片

图8:COCO 目标检测和实例分割实验结果

1.10 ADE20K 语义分割实验结果

作者使用 UperNet[29]作为语义分割框架。ADE20K 语义分割的性能趋势类似于 COCO 目标检测的结果。MambaOut 可以胜过一些视觉 Mamba 模型,但不能匹配最先进的 Mamba 模型的结果。例如,LocalVMamba-T 在单尺度 (SS) 和多尺度 (MS) 评估中都超过了 MambaOut-Tiny 0.5 mIoU,进一步验证实了本文假设2。此外,与包含了卷积和注意力机制的更先进的混合模型 (如 SG-Former[30]和 TransNeXt[28]) 相比,视觉 Mamba 表现出了显著的性能缺陷。因此,还应该通过在分割任务中提供更强的性能来进一步展示其长序列建模的优势。

图片

图9:ADE20K 语义分割实验结果

参考

  1. ^Attention is All you Need
  2. ^Lite Transformer with Long-Short Range Attention
  3. ^Linformer: Self-Attention with Linear Complexity
  4. ^Longformer: The Long-Document Transformer
  5. ^Big Bird: Transformers for Longer Sequences
  6. ^Masked Language Modeling for Proteins via Linearly Scalable Long-Context Transformers
  7. ^Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention
  8. ^abRWKV: Reinventing RNNs for the Transformer Era
  9. ^abcdMamba: Linear-Time Sequence Modeling with Selective State Spaces
  10. ^Jamba: A hybrid transformer-mamba language model
  11. ^Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model
  12. ^VMamba: Visual State Space Model
  13. ^LocalMamba: Visual State Space Model with Windowed Selective Scan
  14. ^Plainmamba: Improving non-hierarchical mamba in visual recognition
  15. ^A ConvNet for the 2020s
  16. ^Scaling Up Your Kernels to 31x31: Revisiting Large Kernel Design in CNNs
  17. ^Going deeper with Image Transformers
  18. ^abMetaFormer Baselines for Vision
  19. ^Combining Recurrent, Convolutional, and Continuous-time Models with Linear State-Space Layers
  20. ^abEfficiently Modeling Long Sequences with Structured State Spaces
  21. ^Bidirectional recurrent neural networks
  22. ^Language Modeling with Gated Convolutional Networks
  23. ^Long Short-Term Memory
  24. ^Language Modeling with Gated Convolutional Networks
  25. ^MetaFormer Is Actually What You Need for Vision
  26. ^InceptionNeXt: When Inception Meets ConvNeXt
  27. ^Mask R-CNN
  28. ^abTransNeXt: Robust Foveal Visual Perception for Vision Transformers
  29. ^Unified perceptual parsing for scene understanding
  30. ^SG-Former: Self-guided Transformer with Evolving Token Reallocation

#Mamba-Transformer

英伟达提出首个Mamba-Transformer视觉骨干网络!打破精度/吞吐瓶颈

CVPR 2025,混合新架构MambaVision来了!Mamba+Transformer混合架构专门为CV应用设计。MambaVision 在Top-1精度和图像吞吐量方面实现了新的SOTA,显著超越了基于Transformer和Mamba的模型。

正如标题所言「Attention is all you need」,Transformer已成为不同领域的「霸主」,包括计算机视觉、自然语言处理、语音处理和机器人技术。

第一个挑战Transformer架构的是Mamba,一种新的状态空间模型(SSM),它具有线性时间复杂度,并在多个语言建模任务中超越或与Transformer媲美。

但在不同的视觉任务上,Vision Transformer (ViT) 和卷积神经网络 (CNN) 架构的骨干网络,仍然优于基于Mamba的视觉模型。

而这一次,英伟达高级工程师Ali Hatamizade,宣布被顶会CVPR-2025接受的MambaVision,在视觉任务上超越以往的模型,而设计的关键在于将Mamba和Transformer混合。

正如图1所示,在ImageNet-1K基准上,MambaVision的Top-1准确率和图像处理能力达到了新的Pareto最优点,超越了Mamba、CNN和ViT基于的模型,有时差距非常显著。

在下游任务如目标检测、实例分割以及语义分割中,采用MambaVision作为骨干网络的模型在MS COCO和ADE20数据集上分别超越了同等规模的对比模型。

MambaVision是首个针对计算机视觉应用,结合Mamba和Transformer的混合架构的尝试。主要贡献总结如下:

1 引入了重新设计的适用于视觉任务的Mamba模块,提升了相较于原始Mamba架构的准确性和图像处理能力。

2 系统性地研究了Mamba和Transformer模块的融合模式,并展示了在最终阶段加入自注意力模块,显著提高了模型捕捉全局上下文和长距离空间依赖的能力。

论文链接:​​https://arxiv.org/abs/2407.08083​

在这项工作中,作者系统地重新设计了Mamba模块,使其更加适合视觉任务。

新方法是一种混合架构,结合了新提出的公式(即MambaVision Mixer和MLP)以及Transformer模块。

具体来说,研究了不同的集成模式,比如以等参数方式将Transformer模块添加到早期、中间和最终层,或者每隔l层添加一次。

分析表明,在最终阶段利用多个自注意力模块,可以显著增强捕捉全局上下文和长程空间依赖的能力。

使用混合架构相较于纯Mamba或ViT模型,图像处理能力也得到了显著提升。

网络架构

宏观架构

如图2所示,MambaVision 采用了分层架构,由4个不同的阶段组成。

前两个阶段使用基于CNN的层,负责在较高输入分辨率下进行快速特征提取,而第3和第4阶段则包括了新提出的 MambaVision和Transformer模块。

具体来说,给定一个大小为H×W×3的图像,输入首先被转换为大小为H/4×W/4×C的重叠patch,并通过两层连续 3×3的CNN 层(步幅为2)构成的主干投影到C维嵌入空间中。

在各个阶段之间的下采样模块由一个批归一化的3×3的CNN 层(步幅为2)组成,将图像分辨率减半。

此外,第1和第2阶段中的CNN模块,采用了通用的残差模块结构,具体如下:

其中:Conv3×3 表示3×3卷积操作;BN表示批归一化(Batch Normalization);GELU 是激活函数,表示 Gaussian Error Linear Unit;z^ 是经过卷积、批归一化和激活函数处理后的中间结果;最后,z是通过卷积和批归一化后的结果与原始输入相加,形成残差连接。

这种结构有助于缓解深层网络训练中的梯度消失问题,并提高模型的训练效率。

Mamba架构

Mamba是结构化状态空间序列模型的扩展,能够通过可学习的隐状态 h(t),将一维连续输入x(t)转换为y(t)。该过程的公式如下:

其中,矩阵A,B,C是模型的参数。

离散化:为了提高计算效率,以上公式中的连续参数A,B和C需要转化为离散参数。具体而言,假设时间步长为Δ,可以应用零阶保持规则来获取离散参数:

这种离散化方法能够提升计算效率,便于在实际应用中实现 Mamba 模型。

使用离散参数代入到原方程:

此外,对于一个大小为T的输入序列,可以用带有卷积核K的全局卷积,进一步简化上式中的输出,具体如下

选择性:Mamba 进一步扩展了S4公式,引入了一种选择机制,使得模型能够进行依赖于输入的序列处理。这种机制使得模型的参数B 、C和Δ可以根据输入动态调整,从而滤除无关信息。

设输入X是TxC矩阵,其中 T 为序列长度,C为嵌入维度,第3和第4阶段的第n层输出可以按如下方式计算:

其中,NormNorm和MixerMixer分别表示层归一化和 token 混合模块的选择。

层架构

在不失一般性的情况下,层归一化(Layer Normalization)被用于 NormNorm。给定N层,前 N/2层使用 MambaVision混合模块,而剩余的N/2层使用自注意力机制。

MambaVision 混合模块:重新设计了原始的Mamba混合模块,使其更适合视觉任务。

如图3所示,首先将因果卷积(causal convolution)替换为常规卷积,因为因果卷积将信息限制在一个方向上,这对视觉任务来说不仅没必要,而且局限性还很大。

此外,添加了一个不包含SSM(状态空间模型)的对称分支,该分支由额外的卷积和SiLU激活函数组成,以补偿由于SSM的顺序约束而可能丢失的内容。

然后,将两个分支的输出拼接起来,并通过最终的线性层进行投影。这种组合确保了最终的特征表示,同时包含顺序信息和空间信息,从而充分利用了两个分支的优势。

注意到,每个分支的输出被投影到一个大小为C/2的嵌入空间(即原始嵌入维度的一半),以保持与原始模块设计相似的参数量。

给定输入Xin,MambaVision混合模块的输出Xout计算如下:

其中,Linear(Cin,Cout)(⋅)表示一个线性层,输入和输出的嵌入维度分别为Cin和Cout;Scan是选择性扫描操作(selective scan);σ是激活函数,这里使用的是Sigmoid线性单元(SiLU;Conv和Concat 分别表示1D卷积和拼接操作。

实验结果

表1展示了ImageNet-1K分类结果。具体来说,与不同类别的模型进行了比较,包括基于卷积的模型、基于 Transformer的模型、卷积-Transformer混合模型以及基于Mamba的模型,并证明新模型在ImageNet Top-1准确率和图像处理能力方面大幅超越了之前的工作。

例如,与流行的模型如ConvNeXt和Swin Transformers相比,MambaVision-B(84.2%)优于 ConvNeXt-B(83.8%)和 SwinB(83.5%),同时在图像处理能力上也有显著优势。

在与基于 Mamba 的模型比较时也观察到了类似的趋势。具体来说,尽管MambaVision-B(84.2%的图像处理能力显著更高,但仍优于 VMamba-B(83.9%)。

与同等规模的模型相比,MambaVision 型变体的FLOPs远低于它们。例如,MambaVision-B 的GFLOPs比 MaxViT-B 少了56%。

表2展示在MS COCO数据集上的目标检测和实例分割结果。

具体来说,训练了不同检测尺寸的模型,以进一步验证 MambaVision 不同场景下的有效性。

通过简单的Mask-RCNN检测头,预训练的MambaVision-T骨干网络,超过了 ConvNeXt-T和 Swin-T模型。

使用Cascade Mask-RCNN网络时,MambaVision-T、MambaVision-S和MambaVision-B都超过了竞争对手。

表3展示了在ADE20K数据集上的语义分割基准测试。

对于这些实验,使用了 UPerNet,以便与其他模型进行比较。

观察到,MambaVision 模型在不同变体下超越了同等规模的竞争模型。

例如,MambaVision-T、MambaVision-S 和 MambaVision-B分别在mIoU上超越了Swin-T、Swin-S和Swin-B,提升幅度为+0.6、+0.6和+1.0。

尽管没有对下游任务进行大量的超参数调优优化,这些结果仍然证明了MambaVision作为一种有前景的视觉任务骨干网络的可行性,特别是在高分辨率设置下。

消融实验和更多细节请参考原文。

参考资料:

​https://arxiv.org/abs/2407.08083​

​https://x.com/ahatamiz1/status/1894838302450295183​

#Pixel2Pixel

从像素到像素:一种全新的零样本图像去噪方法

本文提出Pixel2Pixel,一种创新性零样本去噪框架,不需要除噪声图像本身之外的任何额外训练数据。

提出一种全新的从像素到像素(Pixel2Pixel)零样本图像去噪方法,借鉴传统Non-Local Means方法深度挖掘图像的自相似性,构建像素库(Pixel Bank),在此基础上利用随机采样策略生成大量伪实例(噪声样本图像),最终实现高效零样本图像去噪。此外,理论证明了提出方法的有效性和对噪声的泛化能力。

论文地址: Pixel2Pixel: A Pixelwise Approach for Zero-shot Single Image Denoising

项目地址:​​https://github.com/qingma2016/Pixel2Pixel​​​

1. 引言

近年来,基于深度学习的方法凭借其卓越性能主导了图像去噪领域。监督学习方法通过大规模成对数据集训练网络,取得了最佳效果,但其对噪声-干净或噪声-噪声图像对的依赖导致数据收集耗时且复杂。为缓解这一问题,自监督去噪方法通过挖掘噪声图像内部监督信号,避免了干净数据的需求,但仍需大量训练图像,且对真实噪声的泛化能力不足,尤其面对未知噪声类型时性能显著下降。

进一步减少数据依赖的零样本方法成为研究热点。这类方法聚焦于单张噪声图像生成训练对及高效网络设计,例如通过添加随机噪声或下采样构造数据,并采用U-Net等轻量架构。然而,现有方法存在明显局限:一方面,基于像素独立噪声假设的模型难以应对真实噪声的空间相关性(由图像信号处理器引入);另一方面,数据生成策略过度依赖局部平滑性假设(如Neighbor2Neighbor的邻域相似性、Noise2Fast的方向性约束),忽略了自然图像中广泛存在的非局部自相似性——即图像中重复出现的相似结构块。这种局限性导致传统方法在真实噪声场景下性能受限。

图1 不同的图像去噪方法框架。

针对上述挑战,本文提出Pixel2Pixel,一种创新性零样本去噪框架,其核心贡献体现在理论与方法两方面:

理论层面:我们首次证明,在Noise2Noise范式下,全局最小化器本质上是条件风险最小化器。这一发现表明,统计模式可在比整图更微观的层面被捕捉,且通过选择合适的损失函数(如基于噪声统计特性的L1或Huber损失),可等效实现Noise2Clean式的优化目标,为无监督学习提供了新的理论支撑。

方法层面:提出两大核心技术:

  1. 非局部像素库构建:通过大范围滑动窗口搜索相似像素,聚合图像全局自相似性,形成冗余特征库。相较于传统方法局限于较小邻域或固定方向采样,该方法能够挖掘非局部的结构相似性(如建筑物纹理、生物显微结构的重复模式),为噪声抑制提供丰富先验。
  2. 像素级随机采样策略:从像素库中随机选择不连续位置像素生成伪训练对。该策略通过空间置换打破噪声的空间相关性,同时保留真实信号的非局部一致性。例如,在显微图像中,随机采样可有效分离荧光噪声的空间关联性,提升去噪信噪比。

2. 方法

图2 提出的Pixel2Pixel框架概述。左侧:基于非局部的相似像素搜索。右侧:使用搜索得到的像素生成伪实例。

2.1 像素点搜索

我们方法构建训练样本的主要思想如图2所示。给定一个噪声图像,对于中的每个像素,我们提取一个局部块,并在的足够大窗口内搜索个与相似的非局部块。考虑到噪声的多样化统计特性,我们选择适当的距离来衡量块的相似性。特别地,对于零均值噪声,我们使用距离;对于非零均值噪声中占主导地位的干净像素,我们使用距离。在对非局部块进行排名后,我们从每个块中提取中心像素,创建一个张量。这种技术旨在利用图像的NSS先验,寻找与相似但不同的像素。直接使用进行搜索可能会得到相同的像素匹配,无法为网络训练提供新信息。通过对中所有像素重复此过程,我们生成了一个张量,称为“像素库”。

2.2 像素点采样

构建像素库后,我们能够使用逐像素随机采样策略抽取大量样本(总共个),我们称之为“伪实例”。这种方法在防止网络过度拟合方面非常有效。在每次训练迭代中,网络随机抽取一对(总共有对,对于每个空间位置,我们确保两次采样的像素不同)进行训练。在创建伪实例对时,Pixel2Pixel打乱了噪声图像中像素的原始空间排列。这个过程不限于邻近像素形成对,有助于减少真实噪声图像中邻近像素间噪声的空间相关性。这种策略显著增强了该算法在真实世界噪声图像上的去噪效果。

图3 网络训练和推理。(a) 网络训练:在每次迭代之前,我们通过逐像素随机采样从像素库中抽取两个伪实例和进行网络训练。(b) 网络推理:使用训练好的去噪网络和原始噪声图像进行推理。

2.3 网络训练

接下来,我们详细介绍我们的网络架构、训练方案和使用的损失函数。我们的神经网络使用一个简单的CNN架构,包含五层,每层的卷积有64个通道,每个卷积层后面跟着一个leaky ReLU激活层。在最后一层,我们使用的卷积。值得注意的是,我们的网络设计省略了残差连接,并避免使用残差损失,因为这会导致性能下降。

如图3所示,在我们的网络训练过程中,我们不使用噪声图像作为固定输入,而是在每次迭代中随机从像素库中抽取两个伪实例作为输入和输出。这种增加样本随机性的方法显著提高了网络性能。与以前的方法如Neighbour2Neighbour或ZS-N2N不同,我们的训练样本可能有对应像素在噪声图像中位置更远。我们根据噪声的统计特性选择合适的损失函数。具体来说,对于零均值噪声,我们使用损失,而对于非零均值噪声中占主导地位的干净像素,我们使用损失。

3. 实验

3.1 合成噪声零均值噪声: 在表1中,我们展示了不同方法的去噪性能。值得注意的是,BM3D需要输入特定的噪声水平。对于高斯噪声,我们直接输入实际噪声水平,而对于泊松噪声,我们使用基于估计的噪声水平。对于零样本方法,传统方法BM3D在已知噪声水平(高斯)下表现优秀,但在未知噪声水平(泊松)下效果减弱。对于基于深度学习的方法,DIP远远落后于其它方法,而S2S在较高噪声水平下表现出色,尽管其成功很大程度上依赖于其集成策略,这往往会导致图像过度平滑。ZS-N2N在较低噪声水平下表现良好,但在较高噪声水平下性能显著下降,这是由于其降采样策略在训练和测试图像之间造成的噪声水平不匹配。相比之下,我们的Pixel2Pixel方法在大多数情况下始终实现最佳或接近最佳的性能,突显出最为稳健的选择。在图4中,我们展示了不同方法在高斯噪声上的去噪效果。

图4 在Kodak24 数据集上高斯去噪的实验结果。上中下的噪声等级分别为10、25和50。

表1 高斯噪声和泊松噪声在Kodak24和McMaster18数据集上的平均峰值信噪比(PSNR)。最佳和次佳结果分别以粗体和下划线表示。

干净像素占主导的非零均值噪声: 我们主要考虑三种不同类型的非零均值噪声:伯努利噪声、椒盐噪声和脉冲噪声。在处理以干净像素为主的非零均值噪声时,我们采用损失函数。为了保持公平比较,我们也将其他方法的损失函数调整为它们各自的变体。如表2中所示,ZS-N2N在处理非零均值噪声时遇到困难。这个限制来源于它的方法,在原始噪声图像中的区域内沿主对角线和反对角线平均像素以创建降采样对。这种方法无意中改变了噪声的性质,影响了去噪效果。例如,在椒盐噪声的情况下,这种降采样技术会将值为0和1的噪声像素转换为中间值。另一方面,S2S在处理伯努利噪声方面表现出色,这归功于其训练过程中涉及通过伯努利采样原始噪声图像生成图像。我们的Pixel2Pixel方法在处理椒盐噪声和脉冲噪声方面达到了最佳性能。在图5中,我们展示了用于非零均值噪声去除的去噪图像的定性比较。结果清楚地表明,我们的方法在所有测试方法中提供了有竞争力的视觉质量。值得注意的是,对于伯努利噪声,尽管S2S方法获得了更高的PSNR分数,但由于它是50个网络测试结果的平均值,出现了过度平滑的问题。

图5 非零均值噪声去除的视觉结果。上图:在Kodak24的“img04”图像上进行伯努利去噪,噪声概率为。下图:在McMaster18的“im13”图像上进行脉冲去噪,噪声概率为。

表2 伯努利噪声、椒盐噪声和脉冲噪声在Kodak24和McMaster18数据集上的平均峰值信噪比(PSNR)得分。

3.2 真实噪声

相机噪声: 我们在PolyU数据集和SIDD数据集上进行评估。对于每个数据集,我们并从每张图像的中心提取一个的区域。不同方法在处理真实相机噪声方面的去噪性能总结在表3中。与合成噪声不同,在处理真实相机噪声方面,DIP的表现优于S2S和ZS-N2N。我们的方法在两个数据集上都取得了最佳性能。这归功于S2S、ZS-N2N和我们的方法都基于不同像素点噪声独立的假设。然而,真实噪声图像中相邻像素的噪声总是显示出相关性,这在S2S和ZS-N2N算法的设计中没有考虑到。相比之下,我们的方法从非局部块的中心像素创建像素库,并从像素库中随机抽样形成伪实例,有效地打破了噪声的空间相关性。在图6中,我们提供了去噪图像在相机噪声去除方面的定性比较。结果显示,尽管原始噪声图像中的噪声不强烈,S2S和ZS-N2N仍导致图像质量受损。这种不足源于它们依赖噪声独立的假设,忽略了真实图像中噪声的固有空间相关性。在构建训练数据时的这种疏忽导致它们在处理真实相机噪声方面的效果降低。显然,我们的方法脱颖而出,取得了优越的主观和客观结果。

表3 真实相机噪声去噪的实验结果

图6 我们的方法与其它对比方法在真实世界PloyU数据集的一个样本上的视觉比较。

显微镜噪声: 我们还使用荧光显微数据集(FMD)来评估比较方法在显微镜噪声上的性能。FMD数据集由使用商业共聚焦、双光子和宽场显微镜拍摄的图像组成,这些显微镜对细胞、斑马鱼和小鼠脑组织等代表性生物样本进行成像。我们选择三个类别进行测试:光子BPAE、光子Mice和共聚焦BPAE,每个类别包含20张图像。表4中显示了不同方法的结果,我们的方法在各个类别中和平均所有类别中都达到了最佳性能,取得了显著的提升。

表4 真实显微噪声去噪的实验结果

3.3 计算复杂度

我们比较了零样本去噪方法的计算效率。表5详细说明了使用不同方法对Kodak24数据集中单张图像进行去噪所需的平均时间,以及网络参数和PSNR分数。值得注意的是,对于BM3D,我们报告的是CPU运行时间,而基于深度学习的方法报告的是GPU运行时间。表格显示,在所有基于深度学习的方法中,ZS-N2N具有最少的参数数量和最短的计算时间,但其性能较差。另一方面,S2S方法在去噪质量方面表现出高性能,但代价是显著的计算资源消耗,使其在处理时间和资源利用方面成为较低效的选择。Pixel2Pixel方法作为一个强大的解决方案,实现了高质量性能和计算效率之间的令人称赞的平衡。其网络参数和计算时间略高于ZS-N2N,但在去噪能力方面显著优于后者。这使Pixel2Pixel成为在性能和效率都受重视的场景中的最佳选择。

表5 不同方法的计算效率、网络参数和PSNR。​

4. 结论

本文提出了Pixel2Pixel,一种零样本去噪方法,不需要除噪声图像本身之外的任何额外训练数据。通过为每个像素点搜索相似像素(基于块评估相似性),我们构建了一个像素库。然后通过逐像素随机采样生成训练样本。构建像素库并通过从像素库中逐像素随机采样生成训练图像可以减少相邻像素间噪声的空间相关性,从而增强算法处理真实世界噪声图像的能力。我们使用了一个只有五层的网络,使训练过程非常快。广泛的实验表明,Pixel2Pixel的性能超过了现有的基于深度学习的零样本去噪方法,特别是在存在真实相机噪声和真实显微镜噪声的情况下。

#图像标注生存指南 1:光线变化挑战

在计算机视觉应用中,光线变化一直是图像标注领域的重要挑战。尤其在自动驾驶、安防监控等包含人、车的高精度场景以及农业等户外监控场景中,复杂的光线变化不仅直接影响数据质量,更会引发特征提取偏差与标注置信度下降。光线作为图像形成的关键要素,其变化直接决定了图像细节的呈现程度、对比度的高低以及色彩的还原效果,具体体现包括:

1. 图像质量变化

不同的光照条件会导致图像出现过曝或欠曝,从而使图像细节丢失、整体画面变得模糊不清。过曝会掩盖物体表面的颜色和纹理信息,而欠曝则使暗部区域难以辨认,进而影响标注的准确度。例如,在夜间或光线较暗的环境中,行人或车辆往往难以被精确识别并标注。

图1 过曝(左)和欠曝(右)

2. 阴影影响

阴影会改变物体的整体外观甚至将其部分遮挡,造成物体轮廓、形状及细节识别的困难。在实际场景中,车道、行人、汽车或者路标可能被树荫、建筑物阴影部分覆盖,导致标注系统很难区分真实物体与阴影区域,增加了误判的风险。

图片

图2 行人和车辆被阴影覆盖

3. 颜色失真

光线的色温在不同时间与环境下会发生变化。例如,在清晨或傍晚时分,光线会呈偏红或偏黄的暖色调;在阴天或多云天气时则偏冷色调。这种色彩偏移会影响基于颜色特征的检测与标注算法,进而降低识别准确率。

图3 傍晚的暖色调(左)和阴雨天的冷色调(右)

4. 对比度变化

光线不足或光线过强都会导致图像对比度下降或过高,使得物体与背景之间的边界不够清晰。在雾天或阴天下,对比度下降会让物体的轮廓模糊;在强光直射时,对比度过高则可能出现部分细节“淹没”在高亮区域中。

图4 雾天对比度下降(左)和强光对比度过高(右)

为了更详细地展示在具体的生产应用场景中,光线变化带来的潜在挑战,本文列举了在自动驾驶以及农业监测场景下,光线对特定目标标注造成的不利影响。与此同时,本文使用了 T-Rex Label 图像标注工具对相关场景进行了实际的 AI 标注展示,以验证 T-Rex Label 在复杂光照条件下是否同样拥有稳定、可靠的图像标注性能:

5. 自动驾驶场景

自动驾驶作为对图像标注准确性要求极高的应用场景,光线的细微变化都可能干扰算法对环境的正确感知,尤其体现在对行人和车辆的识别过程中:

a)行人识别:强光照射时,行人的服装或面部容易出现过曝现象,致使行人检测算法难以提取完整特征,影响对行人身份的准确判断;处于阴影中时,行人部分身体被遮挡,模型难以识别其整体轮廓,增加误判风险;在夜间或弱光环境里,行人柔和的细节被黑暗 “吞没”,进一步加大了识别难度,可能导致算法无法及时准确地检测到行人。

b)车辆识别:强光下,车辆金属表面会产生强烈反光,使车辆的关键特征被掩盖,算法难以识别车辆的相关特征;在阴影区域,车辆部分被遮挡,车辆轮廓不完整,也会影响对车辆特征的判断;而在夜间或低光照条件下,车辆灯光与周围环境的对比度低,容易使算法混淆车辆与背景,造成检测误差。

基于此,针对不同光线变化下的行人(黄色边框)和车辆场景(红色边框),T-Rex Label 的 AI 标注效果如下:

图5 过曝(左)和欠曝(右)环境的 AI 标注效果

图6 暖色调(左)和冷色调(右)环境的 AI 标注效果

图7 强光高对比度(左)和雾天对比度(右)环境的 AI 标注效果

图片

图8 阴影环境的 AI 标注效果

6. 农业监测场景

机器人或无人机在农田或林地执行航测任务时,拍摄图像常面临多重光线干扰:阳光强度随天气与时间段不断变化,云层移动会导致局部区域忽明忽暗,季节更替则使光照角度与色温呈现显著差异。

在这种动态且复杂的光照环境下,农作物与林地植被的颜色、纹理往往发生明显波动;因此,如图9所示,部分区域若过曝或过暗,便难以识别相关目标的细节,无法准确标注。

图9 过曝或阴影覆盖的视觉状态

针对上述不同光线变化下的水果识别,T-Rex Label 的 AI 标注效果如下:

图10 过曝或阴影覆盖的水果的标注效果

实验证明,尽管光线变化对图像标注带来了极大的挑战,但 T-Rex Label 凭借出色的零样本检测视觉提示能力(Zero-Shot Visual Prompt),依旧能够在复杂多样的光照条件下,稳定发挥高效、精准的标注性能。然而,随着视觉感知技术的不断成熟和应用需求在实际生产领域的不断拓展,光线变化带给图像标注工具们的挑战将会愈发多元化,应对光线变化的竞赛才刚刚开始。

彩蛋:

免费高效的 T-Rex Label 产品入口:

​https://www.trexlabel.com/?source=wx​

#图像标注生存指南 2:密集场景难题

在计算机视觉的广泛应用领域中,高密度目标场景是另一个制约图像标注效率与准确度提升的关键瓶颈。以公共安全监控为例,在城市的大街小巷,监控摄像头需要捕捉大量行人、车辆的信息;大型活动实时跟踪场景下,要对现场密集的人群、各类设施进行持续监测;物流仓储自动化识别场景里,需要快速准确地识别众多紧密排列的货物、搬运设备等。在这些场景中,目标大量重叠或紧密相邻的现象极为常见,这无疑给图像标注算法带来了前所未有的挑战。

鉴于密集场景下目标检测与定位存在特殊需求,我们将这些挑战主要归纳为以下几个方面:

1. 遮挡叠加问题

当人群或物品排列密集时,彼此间遮挡或重叠的现象极为普遍,导致一些目标仅有部分轮廓可见。较之处理单个物体的情形,这类遮挡既造成特征信息丢失,也提升了算法的判定难度。对于安保场合或者高价值货品的自动巡检而言,准确区分被遮挡目标与背景信息显得尤为重要。

图1 人群(左)和物品(右)相互遮挡

2. 目标密集度过高所致的特征丢失

当图中目标数量过于庞大且分布稠密,局部区域内的特征可能相互“侵占”,令算法难以提取清晰的轮廓或关键点。比如,在大型演唱会或交通要道的实时监控中,当众多运动目标同现于镜头中,较小且靠近的对象就更易在此“繁杂”环境里被忽略或混淆。

图2 大型活动的人群(左)和拥堵的交通(右)

3. 环境噪声与背景干扰

密集场景的背景往往更加丰富,包括指示牌、横幅广告、灯光复杂的舞台效果等等,这些元素容易转化成干扰因素。若目标与背景呈现相似的纹理或配色,标注算法就需较强的区分能力来准确分割目标与非目标区域。

图3 背景与目标融合度过高的装配线(左)和灯光舞台(右)

4. 目标尺寸跨度过大

当摄像头拍摄角度或距离变动较大时,目标在镜头中的视觉尺寸往往会产生明显变化。比如在物流分拣中心,从货物最远端到传送带入口处,物品可能在图中从非常小到非常大,并且物品间距也会发生改变。而在密集场景下,尺寸差异带来的标注难度要远高于普通场景。

图片

图4 传送带视角的物品尺寸和边界发生变化

为了进一步呈现高密度场景对图像标注所带来的影响,我们选取了人员监控和仓储物流两类典型应用来说明常见的干扰与难点,并结合 T-Rex Label 工具的 AI 标注示例,探讨其在处理高目标密度下的标注表现:

5. 人员密集场景监控

无论在城市公共区域还是大型集会活动中,高密度人群带来了更大的监控与管理挑战:

  • a) 行人重复遮挡:在拥挤环境下,行人的面部或肢体特征经常被部分遮盖,需要算法整合可见信息快速辨别身份或动作。
  • b) 场景动态多变:当人群大规模流动或朝不同方向散开,摄像头捕捉到的画面中目标都在频繁更新,易出现跟踪失误或丢帧现象。
  • c) 杂乱背景:灯光、指示标志和多种视觉元素往往穿插于人群之中,进一步增加了图像标注的分割难度。

基于上述,针对密集场景中的人员的检测,T-Rex Label 的 AI 标注效果如下:

图5 行人重复遮挡(左)和舞台人群(右)的 AI 标注效果

图6 大规模人群的方框标注(左)和点标注(右) 效果

6. 仓储物流自动化场景

在物流分拣中心和智能仓储系统内部,数以百计相似套餐、元件和商品都可能堆叠或经过传送带:

  • a) 外观同质化:不同产品批次或零部件外形相似度高,导致算法难以通过视觉特征区分相邻目标。
  • b) 运动速度快:在高速传送带上,每帧图像中的目标都在快速更替,对实时检测提出了严苛的速度与精度要求。
  • c) 堆叠现象:若货品分布不均就难以辨别其边缘,尤其当关键部位被覆盖时,更易出现漏检或错判。

基于上述,针对密集场景中的物品检测,T-Rex Label 的 AI 标注效果如下:

图7 外观同质化(左)和运动中(右)的流水线的 AI 效果

图片

图8 水果堆叠(左)和运动中(右)的流水线的 AI 效果

实验证明,在密集目标场景下,相较于其他视觉模型,T-Rex Label 的视觉提示能力优势显著。它能够精准捕捉微小目标的边缘细节,准确框选目标对象。即便是面对同质化货品堆叠,或是处于运动场景中,T-Rex Label 也能有效减少误判情况的发生。这些技术创新成果,让 T-Rex Label 在安防布控、智能物流、智慧城市等典型密集场景里,为构建高精度视觉系统的数据标注工作,提供了更为高效的解决方案。

彩蛋:

免费高效的 T-Rex Label 产品入口:

​https://www.trexlabel.com/?source=wx​

#图像标注生存指南 3:外观多样性与形变困境

在图像标注的过程中,我们经常遇到目标“千人千面”的情形:同一种类的物体可能表现出截然不同的外观差异、变形形式或扭曲姿态,这些都极大地干扰了传统标注算法的准确度。在高密度目标环境下,这种“外观不统一”和“姿态随意变换”尤为突出,进一步增大了标注模型的判定难度,其中包括:

1. 外观多样性造成的特征混淆

外观多样性极易造成特征混淆:比如在人群监控场景中,不同人员的衣着风格、身高高低以及朝向方向都大相径庭。这种情况对于植物更甚,比如同一种植物可能因品种、种植批次或养分差异而在颜色或株型上有所不同。

即便生长在同一区域里,光照充足的植株往往生长更快更茂盛,而处于遮阴处的植株可能叶片发黄。面对多元的外观,如果模型不具备足够丰富且泛化性强的特征提取能力,就难以系统地把握目标间的 “核心区别”。

图1 人群(左)和植物(右)的外观多样性

2. 多姿态与部分形变导致的识别不确定性

不同目标在镜头中会以多种姿态出现——例如人群中有人坐着、有人奔跑、有人半蹲;而将视角切换到自然环境或温室大棚,植物的茎叶可能因光照或水分不同而倾斜、扭曲,甚至出现叶片细长化或卷曲拉伸等形变。当目标处于拉伸、扭曲状态,或是存在局部残缺时,其整体轮廓不再符合标准形态。

更何况在密集排列的场景中,对象之间常常相互遮挡。一旦目标的形变与遮挡情况同时出现,目标区域就极易变成难以获取有效信息的 “信息盲区” 。姿态迥异导致关键特征分布位置差异明显,需要标注算法能够灵活提取关键点或多区域特征。

图2 人群(左)和植物(右)的多种姿态和形变

为了展示外观多样性与目标形变对图像标注所带来的影响,我们选取了人员监控和仓储物流两类典型应用来说明常见的干扰与难点,并结合 T-Rex Label 工具的 AI 标注示例,探讨其在处理高目标密度下的标注表现:

3. 人员安防

在人员密集的场所,人群的外观和姿态极为复杂。有人可能穿着夸张的奇装异服,独特的造型增加了识别难度;有人背着过大的背包,或者携带各类形状不规则的杂物,这不仅改变了人体原本的轮廓,还可能遮挡部分身体关键部位。

此外,人们在行走、交谈、活动过程中,衣着会随着身体动作发生形变,随时产生褶皱、拉伸等变化。这些因素要求标注算法能够对不同外观、姿态下的人体特征进行快速分析,迅速找到共性特征,有效定位关键目标。

基于此,针对密集场景中的人员多样性和形变问题,T-Rex Label 的 AI 标注效果如下:

图3 人群多姿态和形变 AI 标注效果

4. 植物监测

在诸如温室种植等环境中,作物无论在形状、颜色还是具体株型上都存在差异,而且在生长过程中容易出现弯曲、倒伏或花期变化等形变,这些自然因素要求标注工具能够准确地识别植物被遮挡的部分或微小的局部变形,避免遗漏关键目标。

基于此,针对植物人员多样性和形变问题,T-Rex Label 的 AI 标注效果如下:

图4 植物多姿态和形变 AI 标注效果

实验表明,在人群监控、植物检测等多目标场景里,面对人与物体外观差异、姿态变化、局部遮挡等常见难题,T-Rex Label 凭借卓越的视觉提示能力,都能够精准识别并框选出姿态复杂或发生变形的目标,显著提升了标注效率与准确率。

但不可忽视的是,现实世界中的外观多样性与形变情况极为复杂,不仅出现频率高,且难以提前预估。这类复杂状况,对算法提出了更加严苛的要求:既要精准提炼目标自身特征,还要在复杂背景、多目标干扰的情况下,牢牢把控目标关键细节。倘若结合光线变化,以及高密度场景,那么算法面临的挑战将呈几何倍数增长,当前主流目标检测算法从“看见”到“看清楚”,依旧任重而道远。

#非常简洁的图像复原新方法:退化分类预训练

文章介绍了名为DCPT的新图像复原预训练方法,通过退化分类预训练提升模型对不同退化类型的判别能力和高质量图像生成能力,从而在多种复原任务上取得显著性能提升。

Universal Image Restoration Pre-training via Degradation Classification

论文地址:​​https://openreview.net/forum?id=PacBhLzeGO​

代码地址:​​https://github.com/MILab-PKU/dcpt​

背景

图像复原是利用模型将低质量(LQ)图像改进为高质量(HQ)图像的任务,在深度学习时代,图像复原任务可以被进一步理解为:以低质量图像为条件生成高质量图像

通用图像复原(Universal Image Restoration, UIR)任务是图像复原的一项重要的子任务。UIR 试图创造一种方法,使得模型能够自主的应对不同退化,并生成语义、细节纹理一致的高质量图像。可以简单地认为,一个合格的UIR模型应当包含以下两种能力:

退化判别、生成高质量图像

  • 退化判别:用于提升模型对输入低质量图像的退化的鉴别能力,使得模型能够“自如”地使用自身参数进行自适应复原(这种解释的正确性有待商榷,但已经有大量文献证明退化判别能力的引入有助于图像复原性能增长)
  • 生成高质量图像:生成prior将有助于复原能力的提升,尤其在输入图像退化极其严重的情况下。在干净、高质量图像数据集下训练的生成模型,能够促进复原模型恢复出干净、高质量的图像。

这导向了两种不同的通用图像复原方法设计思路:(1)促进退化判别;(2)引入生成Prior。其中前者已经被得到广泛的研究。流行的方法使用输入图像的退化表征作为判别提示,如:梯度、频率、附加参数和经神经网络压缩的抽象特征等等。虽然这些方法通过使用精确有效的退化提示获得了很高的复原性能,但它们未能利用复原模型本身所蕴含的潜在先验信息。DCPT的诞生来源于对复原模型自我退化判别能力的分析。​

发现

我们对复原模型自身的退化判别能力进行了分析,并得到三个有趣的发现:

  1. 随机初始化模型显示出对退化进行分类的内在能力;
  2. 在一体化(All-in-one)复原任务中训练的模型表现出辨别未知退化的能力;
  3. 在修复模型的早期训练中,有一个退化理解步骤。

我们进行了一项简单的预实验来说明这三点:我们提取了复原训练过程中网络复原头之前的输出特征,训练过程中,模型仅见到雾霾、雨、高斯噪声三种退化。根据该特征, kNN 分类器将对五种退化类型(包括雾霾、雨天、高斯噪声、运动模糊和弱光)进行分类。

预实验结果如下:

图片

可以看到四种网络在网络初始化时就表现出52%~71%的分类准确率,且在复原训练过程早期(前200k次迭代)快速收敛到90%以上的分类准确率。

  • 当退化数量进一步增多,…
    遗憾的是,我们发现复原模型对未知退化的辨别能力会随着退化种类的增多而逐渐减弱。我们将在后续工作中对此进行更充分的讨论。

动机

由于图像复原的核心任务还是以低质量图像为条件生成高质量图像,我们不希望在复原训练过程中出现与该任务存在潜在冲突的其他训练子任务,例如退化分类。于是,我们选择将显式地将该训练阶段提前为“预训练”,并进一步创造了DCPT。​

方法

Degradation Classification Pre-Training (DCPT) 是一个简单且有效的方法,可见下图。

图片

在单次迭代中,它包含两个阶段:退化分类阶段、生成阶段,这两个阶段交替进行。其中,

  • 退化分类阶段:通过提取复原网络的深层特征,并将其输入一个轻量级分类器,以对输入图像的退化种类进行分类。
  • 生成阶段:我们利用最原始的Autoencoder手段对复原模型的生成能力进行保留。

实现代码也非常简洁:

### train to generate the clean image  
encoder.train()  
decoder.eval()  
optimizer_encoder.zero_grad()  
pix_output = encoder(gt, hook=False)  
l_total = 0  
# pixel loss  
if cri_pixel:  
 l_pix = cri_pixel(pix_output, gt)  
 l_total += l_pix  

### train to classify the degradation  
decoder.train()  
optimizer_decoder.zero_grad()  
hook_outputs = encoder(lq, hook=True)  
cls_output = decoder(lq, hook_outputs[::-1])  
# classification loss  
if cri_cls:  
 l_cls = cri_cls(cls_output, dataset_idx)  
 l_total += l_cls  

l_total.backward()  
optimizer_encoder.step()  
optimizer_decoder.step()

需要注意,在预训练结束后,仍需要进行复原任务上的fine-tune。​

实验结果

5D All-in-one image restoration

图片

可以看出,无论是 CNN 网络还是 Transformer 网络,无论是直线网络还是类 UNet 网络,DCPT在 5D All-in-one image restoration 任务上的平均性能提升始终保持在 2.08 dB 及以上。

我们也展示一些可视化数据,以证明DCPT也确实能提升输出图像的视觉感观。

图片

10D All-in-one image restoration

我们选取了十种退化进行试验,并绘制了雷达图。

图片

可以看到使用DCPT预训练后,NAFNet的PSNR与SSIM指标都有比较显著的提升。具体数值指标如下:

图片

Mixed degradation

我们也在混合退化场景下进行研究,我们使用了CDD数据集,结果如下:

图片

Transfer learning

众所周知,图像复原模型的过拟合现象严重。在A退化任务下训练的复原模型极难泛化到B退化任务。我们发现DCPT中的退化分类器有助于模型跨任务泛化。

为此,我们首先设计了DC-guided training,如下图所示:

图片

我们冻结在DCPT阶段训练的退化分类解码器,通过让模型对退化、非退化图像进行二分类,让模型知晓自身在处理何种退化(何种复原任务),从而增强任务间泛化能力。泛化结果如下:

图片

更多其他实验结果请关注我们的文章(https://openreview.net/forum?id=PacBhLzeGO)。​

讨论

  • Q: 在复原训练中,仅仅只是存在退化分类嘛?

A. 否定。或许可以在实验结果中窥见一二。在5D All-in-one任务中,SwinIR的去雾结果展示出明显的“区域性”。我们猜测,对于退化在全局图像中不均匀出现的情况,复原模型也会对输入图像的退化进行“分割”。

  • 复原中隐藏着(退化)辨别

之前的研究(https://arxiv.org/abs/2108.00406)已经调查了超分辨率模型在复原过程中区分不同类型退化的能力。DCPT的初步实验也表明,随机初始化模型能够对退化进行分类。此外,一体化复原训练也能增强了模型的退化分类能力,并赋予复原模型在退化分类任务上的泛化能力。这些结果表明,复原中隐藏着(退化)辨别

DCPT的实验结果凸显了判别先验在图像复原预训练中的有效性。这些结果表明,在训练前将足够的判别信息纳入模型可以显著提高其性能。我们假设,在复原模型中加入卓越的降解感知判别信息,并最大限度地提高其判别能力,将进一步提高模型的复原性能。预计这一假设将为通用复原领域开发大量新型预训练方法铺平道路。

#K-LoRA

破解LoRA融合密码!无需训练夺得SOTA!巧用Top-K策略,让风格与主体完美融合

K-LoRA是一种无需额外训练的LoRA融合方法,通过Top-K选择机制和缩放因子,能有效融合独立训练的风格和主体LoRA模型,保留原始风格细节的同时实现精确的对象微调,在多样化的图像风格化任务中表现出色,超越了现有方法。

论文链接:​​https://arxiv.org/pdf/2502.18461​

项目链接:​​https://k-lora.github.io/K-LoRA.io/​

亮点直击

  • 提出了K-LoRA,一种简单而有效的优化技术,能够无缝融合内容和风格LoRA,从而在保留细节的同时生成任何主题的任意风格。
  • 本文的方法用户友好,无需重新训练,可直接应用于现有的LoRA权重。它在多样化的图像风格化任务中表现出色,超越了现有方法。

总结速览解决的问题

  • 风格与内容的同时保留:现有方法在融合不同LoRA(Low-Rank Adaptation)时,难以同时有效保留原始图像的主体内容和风格细节。
  • 额外训练需求:现有方法通常需要手动调整超参数或进行额外的训练,增加了复杂性和计算成本。

提出的方案

  • K-LoRA方法:提出了一种无需额外训练的LoRA融合方法,称为K-LoRA。该方法在每个注意力层中,通过比较待融合的每个LoRA的Top-K元素,选择最优的LoRA进行融合。
  • Top-K选择机制:在注意力层的前向传播过程中,引入Top-K选择过程,以确定每个位置最合适的注意力组件。
  • 缩放因子应用:在融合过程中应用缩放因子,以强调风格和内容在扩散过程中的不同作用。

应用的技术

  • LoRA(Low-Rank Adaptation):利用LoRA在图像生成任务中的高效微调能力,独立训练风格和内容特征。
  • 扩散模型:结合扩散模型的时间步长,将LoRA的注意力层按时间步长融入模型,以评估其对性能的影响。
  • Top-K选择:在每个注意力层中,通过Top-K选择机制,选择最具代表性的特征进行融合。

达到的效果

  • 有效融合风格与内容:K-LoRA能够有效融合原始LoRA学习到的主体和风格信息,生成图像中同时保留风格细节和主体特征。
  • 无需额外训练:该方法无需额外训练,简化了操作流程,提高了用户友好性。
  • 性能提升:在定性和定量结果上,K-LoRA均优于现有的基于训练的方法,显著提升了融合LoRA的性能。

方法

K-LoRA

在[26]中指出,在使用LoRA进行微调时,使用较少的关键元素可以实现与原始方法相同的生成结果。然而,作者并未在图像生成领域提供相关实验来解释这一点。本文首先尝试利用这种方法,通过类似于Magmax的方法,将值较小的元素赋值为零。通过这种方式修改矩阵元素所得到的结果与[26, 30]的结果相似,因为模型未能正确解释其先前学习到的概念,导致图像生成质量欠佳。

鉴于直接修改注意力元素的复杂性和局限性,一个问题随之而来:能否在去噪过程中利用LoRA矩阵的稀疏特性?目标是找到一种替代方法,在不修改原始LoRA权重的情况下,为每一步或每一层找到一个良好的权重选择方法和精确的LoRA定位。基于多LoRA组合,随机将内容LoRA注意力层应用于扩散步骤,通过使用x%的注意力层来影响对象,以观察生成结果。如下图3(a)所示,发现当x > 50时,结果与原始模型几乎无法区分。然而,当x < 25时,模型维持原始个性化概念的能力显著下降。

受近期研究[20, 29, 35]的启发,本文进一步扩展了下图2中的实验,发现将风格LoRA应用于较早的时间步对原始对象的重建有显著影响,而在较晚的时间步应用则可以保留风格信息而不影响原始对象。对于内容LoRA,在较早的时间步应用比在较晚的时间步应用效果显著更好。

上述分析促使通过自适应选择每个注意力层的LoRA模块来实现生成对象和风格的融合。根据发现(i),选择策略应保留整体对象和风格信息。此外,根据发现(ii),生成过程应通过适当安排对象和风格组件来实现。即在早期扩散步骤中,模型应更专注于对象重建,同时引入风格纹理;而在后期步骤中,最好通过细微的对象细节来优化风格。本文提出了K-LoRA,如下图4所示,它可以自适应地选择适当的LoRA层来融合学习到的主体和风格。

首先,对LoRA层中的每个元素取绝对值,以确定某个值是否在生成过程中起到重要作用。

图片

其中, 和  分别表示内容LoRA和风格LoRA的权重。由于一小部分主导元素可以实现原始生成效果,而数据分布(见前面图3(b))显示较小元素占据了大部分位置,这会影响重要元素的选择,因此我们使用较少数量的最大元素来表示每一层的重要性。

分别从  和  中选择值最大的前  个元素。通过累加这些Top-K元素,我们评估给定注意力层中两个矩阵的重要性:

图片

其中,Top-K 返回最大  个值的索引。对于  的选择,注意到 LoRA 训练过程中的秩数在一定程度上反映了矩阵中包含的信息量。因此,选择的  与每个 LoRA 的秩保持一致:

图片

其中, 和 分别表示内容LoRA层和风格LoRA层的秩。通过比较这两个和,能够确定注意力层中适当的权重:

图片

为了更有效地利用发现(ii),并让对象和风格在不同阶段发挥各自的作用,同时确保从以对象为中心的表示平滑过渡到以风格为中心的表示,本文引入了一个缩放因子  。该因子  直接应用于 Top-K 选择过程,在生成的早期阶段增强对象内容,并在后期逐步强调风格。

图片

其中, 表示反向去噪过程中的当前步骤, 是总步骤数, 和  是超参数。

为了避免在使用来自不同来源的社区LoRA模型时出现过大的权重差异(这可能导致Top-K选择在注意力分配上失效),本文引入了一个新的因子  来平衡这两个权重。

图片

首先,计算每一层  中元素的绝对值之和,然后逐层累加这些和以计算  。

图片

引入  解决了两个LoRA组件中元素之间的显著数值差异,如前面图3(b)所示。这一调整突出了LoRA层中的有用组件。通过  ,内容LoRA和风格LoRA权重在每一层中的比例关系如下图5所示。可以观察到,在应用LoRA的每一前向层中,主导组件之和的比例存在显著差异。这凸显了每一层中不同LoRA权重的重要性,为选择提供了坚实的基础。

随后,将  应用于风格LoRA并更新  。

图片

通过引入  ,我们可以在早期时间步中增强内容的影响,同时在后期时间步中放大风格的主导地位。这一调整能够有效利用发现(ii),优化对象和风格的选择,以最大化它们在图像生成过程中的贡献。最终的LoRA权重可以通过计算  获得。为了更清晰地说明,在下算法1中提供了伪代码。

为了更好地解释权重选择过程,在下图6中展示了选择比例,其中对象和风格无缝地相互渗透和融合。第一部分主要关注对象,同时融入少量风格,而后半部分则主要强调风格,同时保留对象的微妙存在,这进一步证实了我们的关键发现。​

实验

实验设置

数据集:遵循ZipLoRA的惯例,对于通过本地训练获得的LoRA,从DreamBooth数据集中选择了一组多样化的内容图像,每组包含4-5张给定主题的图像。对于风格,我们选择了StyleDrop作者提供的先前数据集,并包括一些经典杰作和现代创新风格。对于每种风格,仅使用单张图像进行训练。

实验细节:使用SDXL v1.0基础模型和FLUX模型进行实验,并使用本地训练的LoRA和社区训练的LoRA测试K-LoRA的性能。对于社区训练的LoRA,使用Hugging Face上广泛可用的LoRA模型进行测试。对于本地训练的LoRA,基于ZipLoRA中概述的方法获得一组风格和内容LoRA。对于公式(7)中提到的超参数,设置 和 。该配置被发现在几乎所有情况下都能有效工作,生成结果一致良好。

结果

定量比较:随机选择了18组对象和风格的组合,每组包含10张图像进行定量比较。使用CLIP来衡量风格相似性,并通过CLIP分数和DINO分数计算主体相似性。将本文的方法与社区中流行的方法以及最先进的方法进行比较,包括直接算术融合、联合训练、ZipLoRA和B-LoRA。结果如下表1所示。可以观察到,与之前的方法相比,本文的方法显著提高了主体相似性指标,同时也实现了令人满意的风格相似性。

定性比较:为了确保公平评估,本阶段的所有实验均使用SD进行,结果如下图7所示。直接设置融合比例为1:2而不进行大量参数调整或种子选择时,融合LoRA的方法难以保留对象的原始形状、颜色和风格特征。B-LoRA主要捕捉原始图像中对象的颜色和外观,但往往导致颜色过拟合,使得生成图像中难以区分原始对象。在ZipLoRA和联合训练方法中,虽然融入了某些风格纹理,但模型倾向于关注风格的背景元素而非风格本身,导致成功率较低。相比之下,本文的方法通过生成更高质量的输出图像并在广泛的种子变化中表现稳定,解决了这些局限性。此外,本文的方法无需额外训练或参数微调。

随机选择了22组结果供用户进行比较评估。每组包括ZipLoRA、B-LoRA和本文的方法的输出,以及训练对象和风格的参考图像。用户被要求确定哪种方法最能同时保留风格和对象。结果显示在下表2中,表明本文的方法最受青睐。此外,我们还咨询了GPT-4o进行类似评估。本文的方法在GPT-4o评估中显示出显著优势,进一步反映了我们方法的优越性。

消融分析

Top-K选择:本文进行了两项实验来验证Top-K选择方法的有效性:固定选择和随机选择。发现(ii)提出了一种直接的方法:如果缩放因子大于1,则选择内容LoRA;否则,选择风格LoRA。这种方法称之为“固定选择”,作为测试Top-K选择方法消融的有用基线。它也可以被视为多LoRA组合的扩展和改进,在某些场景中显示出良好的效果。然而,在特定的风格LoRA条件下,这种方法可能会导致对象模糊或内容外观的改变,如图9所示。

为了确保模块在指定的前向层安排中表现一致,而不是依赖于任意配置,进行了一项称为“随机选择”的对照实验,使用随机种子。在此设置中,模型使用一个随机数,有1/3的概率选择内容注意力,2/3的概率选择风格注意力。如图9所示,在这些随机选择条件下,生成的图像通常仅保留单一的对象特征或风格特征,或者完全无法保留两者。这一结果进一步验证了我们的发现(ii),突出了对象和风格组件在早期和后期扩散时间步中的不同作用。

此外,评估了不同  值对生成图像的影响,如下图 8 所示。在Top-K方法中,系统地改变了  的值。当 较小时,风格和对象的特征都不够突出。随着  的增加,这一问题逐渐改善。然而,如果  过大,风格可能无法保留,对象的形状也可能发生显著扭曲。

缩放因子:为了评估缩放因子的有效性,将其移除,仅关注原始的Top-K方法。在第一个实验中,如下图9所示,分析表明,虽然在某些条件下仅使用Top-K可以产生令人满意的结果,但扩大实验范围会发现对象失真和风格丢失的情况。为了进一步评估缩放因子中的重要性,我们测试了两个来源不同的LoRA模型的性能,其特征是元素和的显著差异。如图9底部所示,Top-K选择未能准确捕捉风格,而固定选择中对象和风格的融合明显弱于本文的方法。

总之,移除这两个模块会导致生成性能下降,突出了它们对模型整体有效性的关键贡献。​

结论

K-LoRA,它能够无缝融合独立训练的风格和主体LoRA模型。K-LoRA在保留原始风格复杂细节的同时,实现了精确的对象微调。本文的方法通过Top-K选择和缩放因子,有效利用了对象和风格LoRA在每一步扩散中的贡献,最大化地利用了原始权重,并实现了无需重新训练或手动超参数调整的精确风格融合。​

参考文献

[1] K-LoRA: Unlocking Training-Free Fusion of Any Subject and Style LoRAs

#TPM

迁移视觉基础模型实现可泛化的机器人操作能力

本文提出了一种新的机器人操作范式,通过将互联网规模的基础模型生成的语言推理分割掩码融入端到端策略模型中,实现了样本高效的泛化能力,显著提升了机器人在新物体、新环境下的操作性能。此外,作者还设计了一个双流策略模型(TPM),通过局部-全局感知方式处理图像和掩码信息,进一步增强了模型的泛化能力和操作精度。 

本文介绍我们组(南京大学媒体计算研究组)在具身智能领域的系列工作之一 TPM,该工作和MSRA、人大等机构合作,论文最初版完成于23年6月,目前arxiv上已更新了最新版。

论文链接:

Transferring Foundation Models for Generalizable Robotic Manipulation

​https://arxiv.org/abs/2306.05716v5​

Pave the Way to Grasp Anything: Transferring Foundation Models for Universal Pick-Place Robots

​https://arxiv.org/abs/2306.05716v1​

Demo链接:

bilibili:​​https://www.bilibili.com/video/BV178411Z7H2/​

Youtube v2:
​https://www.youtube.com/watch%3Fv%3DMAcUPFBfRIw​

Youtube v1:​​https://www.youtube.com/watch%3Fv%3D1m9wNzfp_4E%26t%3D1s​

1.研究愿景

构建能够在动态复杂环境中操控各种物体,并运用多种技能以满足人类指令需求的通用机器人,一直是具身智能领域的长期愿景。试想一下,你在家里不小心把牛奶洒在桌面上,并向机器人助手求助。它环顾四周,找到仅有的一块海绵并递给你。要实现这样的能力,整个机器人系统需要具备在开放环境下完成多模态感知-推理规划-决策-执行的能力,并构建它们之间的闭环控制回路。​

2.研究背景与动机

长期以来,实现该愿景的主要挑战有两点。第一,目前robot manipulation的主流范式是基于真机遥操作数据和行为克隆训练policy。但由于真机数据采集成本及高且同质化严重,目前的policy相比于互联网模型数据效率低且泛化性很差,尤其是处理新的物体或环境时,例如首次开始大规模scaling up数据的RT-1[1]花了13个月采数据,仍无法泛化到新的物体概念。最近一年,随着用VLLM做初始基座,进一步scaling up数据并配合先进的的生成式policy来构建VLA,泛化性已经得到了明显提升。但我们看目前效果最好的π0[2]的fail cases,在做一些很简单的技能时仍可能失败。第二,人类的指令需求一般复杂抽象且常有歧义,尽管23年以来多模态大模型进展迅速,现有的VLLM已经能够比较好地完成具身推理和任务规划,但是生成的子任务依然只是告诉机器人“做什么”而缺乏“如何做”的行为信息。

针对第一点,和模仿学习得到的policy相比,互联网规模数据训练的基础模型有很强的泛化性,但是其没有与真实世界交互,物理知识匮乏,而模仿学习尽管数据效率低泛化性差,却恰恰能从人类的遥操作数据中学习到技能行为和相关的物理知识。在当时最先进的RT-1类工作基础上,我们希望将二者的优势结合起来。针对第二点,我们使用GPT-4来做指令推理和任务规划,相比于经典的使用自然语言做polciy conditioning的方式,我们使用语言推理的物体mask来做policy conditioning,相比于语言形式的sub-task,这隐式提供了互联网基础模型中强大的语义、几何和时序关联先验,细节见下节技术方案部分。​

3.技术方案

如头图所示,在第一阶段,我们使用GPT-4(具体部署时可使用开源的DeTGPT[3]等替换)来对人类需求指令进行推理规划,得到当前子任务需要交互的物体。接下来,我们基于GroundingDINO[4]和SAM[5]得到物体的mask,在执行过程中,由于物体和环境可能发生遮挡及运动,后续物体mask由MixFormer[6]跟踪得到。在这一阶段,我们发现在日常室内场景中分割和跟踪的效果很好,系统误差主要源于GroundingDINO的误检(一些视觉概念容易识别错误,我们给GPT-4的输出添加<颜色>prompt来提高成功率),因此分割检测我们推荐蒸馏的小模型如MobileSAM[7]和MixFormerv2[8]等来加速部署。

在第二阶段,一个轻量化的policy接受当前的实时视觉观测和任务相关物体的mask作为输入,输出机械臂的末端位置变化和夹爪开关状态。如头图所示,我们的policy在设计上使用了双流的架构,其中一个较深的分支提取RGB观测的特征,一个较浅的分支提取RGB+mask的特征,这确保了模型联合捕获整个场景的全局特征以及物体附近的局部特征,并使用CBAM[9]进行融合。我们在实验中发现显式引入额外RGB-only分支的双流设计在泛化到新背景的设定中提升(相较于同参数量的baseline)非常明显,我们推测是因为RGB-only分支可以有效地捕获场景全局信息进而增强深度感知的能力。这里,对于不同的原子技能我们分配不同的mask value来进行区分,例如pick分配0,place分配1,.......,fold分配128等。

总结起来,我们的方法有效地统一了互联网基础模型泛化性强和模仿学习有效捕获人类示教数据中多模技能分布的优势,将互联网基础模型中蕴含的语义、几何与时序关联先验注入到端到端训练的策略模型中,有效地提升了机器人操控系统的泛化能力和样本效率。​

4.与其他技术方案的比较

自RT-2[10]以来,最近一年多将多模态基础模型和机器人学习结合已成为逐渐收敛的思路。目前最主流的范式大概有以下两类:

  • 多模态基础模型做感知规划+传统model-based planning/control: 代表性工作有Voxposer[11],Copa[12]和ReKep[13]等。这类方法具备强大的新任务零样本泛化能力,但由于通常需要深度校准、task-specific的prompt和没有进行训练,可扩展性可能有些受限。
  • 多模态基础模型做policy的基座初始化+模仿学习微调: 这类工作目前最为火爆,代表性的有RT-2,OpenVLA[14], RDT-1B[15]和π0等。这类工作同样同时结合了基础模型以及模仿学习的优势,泛化性取得了巨大的提升。但是这种统一的一体化大模型做policy,可解释性较弱,同时通常需要较大的训练和数据采集开销,更重要的是带来巨大的推理开销,这对于要求实时高频控制的任务来说可能有些挑战。
  • 相比于第二类范式,TPM大大降低了训练和推理开销(每次执行动作只需要推理轻量化的跟踪分割模型和policy),同时也取得了出色的泛化性和数据效率,并保留了原基础模型固有的能力。我们发现,近期许多工作同样采用层次化设计的思想,将多模态基础模型和policy进行适当地解耦,例如RoboDual[16],以及2月底几乎同时发布的Figure AI的Helix[17]和Physical Intelligence的Hi Robot[18]。早在去年3月,Watney Robotics发布了他们使用双臂机器人收拾餐桌的demo,我们高兴地发现他们采用了和TPM高度相似的范式:使用基础模型推理得到的mask取代语言来condition policy。同时与我们的结论类似,他们也发现与一体化大模型的范式相比,这种multi-model的设计具有更好的样本效率及推理速度

5.实验结果

我们基于Franka机械臂并采集了1000条数据来验证我们TPM范式和policy架构设计的有效性以及对新物体概念、背景和复杂干扰物的泛化能力。同时由于无需精确的深度校准和显式地跟踪模块,TPM可以很好地应对透明物体以及动态物体。此外,我们也验证了TPM的可扩展性,包括开关抽屉、叠布、放置到容器内等技能和部署在低成本的双臂机器人中。关于更多的实验设定和结果比较细节,欢迎大家check我们的paper。

6.总结与展望

尽管展示了优异的数据效率、推理成本和泛化能力,TPM这套范式仍存在许多缺点。第一,我们使用物体的mask替代语言去condition policy,尽管提供了更多的的先验和信息,但是对于不同的原子技能需要分配不同的mask value,这相对比较手工,同时视觉和文本有着比较好的对齐先验,这导致TPM在可扩展性上不如一体化的多模态基础模型policy。此外,对于不同的技能或任务,我们通常需要给基础模型设计和尝试相应的prompt,例如对于叠衣服这个任务,我们需要提示它寻找两个合适的夹取区域用于后续检测分割。第二,相对于一体化的多模态基础模型policy,TPM的范式引入了多模块化的机器人栈,系统中每个模块的误差都会被累计传递。总的来说,对于机械臂执行起来相对比较成熟的技能(尤其是object-centric的manipulation任务),TPM兼具了数据效率、推理成本和泛化能力,比较实用。对于系统误差问题,在未来可以进一步对每个模块进行单独scaling和优化,同时也可以像UniAD[19]那样进行联合地端到端训练。

参考文献

[1] Rt-1: Robotics transformer for real-world control at scale
[2] π0: A Vision-Language-Action Flow Model for General Robot Control
[3] Detgpt: Detect what you need via reasoning
[4] Grounding dino: Marrying dino with grounded pre-training for open-set object detection
[5] segment anything
[6] Mixformer: End-to-end tracking with iterative mixed attention
[7] Faster segment anything: Towards lightweight sam for mobile applications
[8] Mixformerv2: Efficient fully transformer tracking
[9] Cbam: Convolutional block attention module
[10] Rt-2: Vision-language-action models transfer web knowledge to robotic control
[11] Voxposer: Composable 3d value maps for robotic manipulation with language models
[12] CoPa: General Robotic Manipulation through Spatial Constraints of Parts with Foundation Models
[13] Rekep: Spatio-temporal reasoning of relational keypoint constraints for robotic manipulation
[14] Openvla: An open-source vision-language-action model
[15] Rdt-1b: a diffusion foundation model for bimanual manipulation
[16] Towards Synergistic, Generalized, and Efficient Dual-System for Robotic Manipulation
[17] Helix: A Vision-Language-Action Model for Generalist Humanoid Control
[18] Hi Robot: Open-Ended Instruction Following with Hierarchical Vision-Language-Action Models
[19] Planning-oriented Autonomous Driving

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值