2025年最完整Mask2Former图像分割实战指南:从原理到工业级部署

2025年最完整Mask2Former图像分割实战指南:从原理到工业级部署

【免费下载链接】mask2former-swin-large-cityscapes-semantic 【免费下载链接】mask2former-swin-large-cityscapes-semantic 项目地址: https://ai.gitcode.com/mirrors/facebook/mask2former-swin-large-cityscapes-semantic

你还在为语义分割精度不足而烦恼?还在纠结如何用最少代码实现高效图像分割?本文将系统讲解Facebook的Mask2Former模型原理,提供完整的Cityscapes数据集实战案例,教你30分钟内搭建达到SOTA性能的图像分割系统。读完本文你将获得

  • 掌握Mask2Former的核心创新点与工作原理
  • 学会使用预训练模型进行图像分割推理
  • 理解配置文件参数调优技巧
  • 解决实际应用中的常见问题
  • 获取工业级部署的最佳实践

一、图像分割的革命:为什么选择Mask2Former?

图像分割(Image Segmentation)是计算机视觉(Computer Vision)领域的关键任务,它将图像中的每个像素分配到特定类别,实现从"识别是什么"到"定位在哪里"的跨越。目前主流的分割任务包括:

任务类型目标应用场景
语义分割(Semantic Segmentation)将图像中的每个像素分类到预定义类别自动驾驶车道线检测、医学影像分析
实例分割(Instance Segmentation)区分同一类别的不同个体行人计数、物体跟踪
全景分割(Panoptic Segmentation)同时实现语义分割和实例分割机器人导航、视频监控

传统方法往往为不同任务设计专用架构,而Mask2Former提出了一种统一范式:将所有分割任务都转化为"预测一组掩码(Mask)和对应标签"的实例分割问题。这种创新思路带来了性能和效率的双重突破。

1.1 Mask2Former的三大核心优势

1. 性能超越所有前辈

  • 在Cityscapes语义分割任务上达到83.7% mIoU(平均交并比)
  • COCO实例分割任务AP值提升至49.4%
  • 全景分割性能全面领先,尤其在小目标检测上优势明显

2. 效率提升30%以上

  • 采用多尺度可变形注意力(Multi-scale Deformable Attention)机制
  • 引入掩码注意力(Masked Attention)降低计算复杂度
  • 基于采样点的损失计算方法减少冗余运算

3. 真正的任务统一框架

  • 同一模型架构支持语义/实例/全景三种分割任务
  • 无需针对不同任务调整网络结构
  • 训练和推理流程高度一致,降低工程实现难度

1.2 技术演进:从Mask R-CNN到Mask2Former

图像分割技术经历了从区域提议到Transformer的演进历程:

mermaid

Mask2Former在MaskFormer基础上进行了三项关键改进:

mermaid

二、技术原理深度解析

2.1 整体架构:理解Mask2Former的"五脏六腑"

Mask2Former的架构可以分为四个核心组件,形成完整的"编码-解码"流程:

mermaid

骨干网络(Backbone):采用Swin Transformer,通过分层设计提取多尺度特征。配置文件中的depths: [2, 2, 18, 2]表示网络有4个阶段,每个阶段包含的Transformer块数量分别为2、2、18和2。embed_dim: 192定义了初始嵌入维度,随着网络加深会逐步翻倍。

像素解码器(Pixel Decoder):这是Mask2Former的关键创新之一,它取代了MaskFormer中的FPN结构,采用多尺度可变形注意力机制,能够自适应地聚焦于图像中的关键区域,有效提升特征融合能力。

Transformer解码器(Transformer Decoder):使用掩码注意力机制,仅关注与当前查询相关的图像区域,在不增加计算量的前提下提升性能。解码器输出一组查询向量,每个向量对应一个目标掩码。

分割头(Segmentation Head):预测每个掩码的类别和具体形状,通过交叉熵损失(类别预测)和Dice损失(掩码预测)的联合优化进行训练。

2.2 创新点详解:为什么Mask2Former如此高效?

1. 掩码注意力机制(Masked Attention)

传统Transformer的注意力计算是全局的,计算复杂度为O(N²),其中N是序列长度。Mask2Former提出的掩码注意力通过以下方式优化:

# 掩码注意力核心逻辑伪代码
def masked_attention(query, key, value, mask):
    # 计算注意力分数
    scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(d_k)
    
    # 应用掩码,将无关区域的分数设为负无穷
    if mask is not None:
        scores = scores.masked_fill(mask == 0, -1e9)
    
    # 计算注意力权重并应用到value
    attn_weights = F.softmax(scores, dim=-1)
    output = torch.matmul(attn_weights, value)
    
    return output, attn_weights

这种机制使得解码器能够专注于与当前查询相关的区域,大幅减少冗余计算,尤其在处理小目标时效率提升明显。

2. 多尺度可变形注意力(Multi-scale Deformable Attention)

传统卷积操作在固定感受野内处理特征,而可变形注意力允许模型根据图像内容动态调整感受野:

mermaid

该机制让模型能够自动聚焦于目标边界和细节区域,在保持计算效率的同时提升分割精度。

3. 基于采样点的损失计算

传统掩码损失计算需要处理整个掩码区域,计算量大且存在冗余。Mask2Former通过在掩码上采样一组点来计算损失:

# 基于采样点的损失计算伪代码
def point_sample_loss(mask_pred, mask_gt, num_points=12544):
    # 在GT掩码上采样点
    points = sample_points_from_mask(mask_gt, num_points)
    
    # 将预测掩码和GT掩码都采样到这些点上
    pred_points = point_sample(mask_pred, points)
    gt_points = point_sample(mask_gt, points)
    
    # 计算采样点上的损失
    loss = dice_loss(pred_points, gt_points) + cross_entropy_loss(pred_points, gt_points)
    
    return loss

这种方法将计算复杂度从O(HW)降低到O(N)(其中N为采样点数),同时保持了损失计算的准确性。

三、环境准备与快速上手

3.1 系统环境要求

为了顺利运行Mask2Former,建议使用以下环境配置:

组件推荐版本最低版本
Python3.9+3.8
PyTorch1.10.0+1.8.0
CUDA11.3+10.2
transformers4.16.0+4.10.0
OpenCV4.5.0+4.2.0
NumPy1.21.0+1.19.0

3.2 快速安装步骤

# 克隆仓库
git clone https://gitcode.com/mirrors/facebook/mask2former-swin-large-cityscapes-semantic

# 进入项目目录
cd mask2former-swin-large-cityscapes-semantic

# 创建虚拟环境
python -m venv venv
source venv/bin/activate  # Linux/Mac
venv\Scripts\activate     # Windows

# 安装依赖
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
pip install transformers pillow requests opencv-python numpy

3.3 目录结构解析

项目包含以下核心文件:

mask2former-swin-large-cityscapes-semantic/
├── README.md              # 项目说明文档
├── config.json            # 模型配置文件
├── model.safetensors      # 模型权重文件(SafeTensors格式)
├── preprocessor_config.json  # 预处理配置
└── pytorch_model.bin      # PyTorch模型权重
  • config.json:包含模型架构的详细配置,如骨干网络参数、注意力机制设置等
  • model.safetensorspytorch_model.bin:两种格式的模型权重文件,前者更安全且加载速度更快
  • preprocessor_config.json:定义图像预处理的参数,如大小调整、归一化等

四、实战教程:使用预训练模型进行图像分割

4.1 基础推理:3行代码实现图像分割

下面展示如何使用Hugging Face Transformers库加载预训练模型并进行图像分割:

import requests
from PIL import Image
from transformers import AutoImageProcessor, Mask2FormerForUniversalSegmentation

# 1. 加载处理器和模型
processor = AutoImageProcessor.from_pretrained("./")
model = Mask2FormerForUniversalSegmentation.from_pretrained("./")

# 2. 加载图像
url = "https://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw).convert("RGB")

# 3. 预处理图像并进行推理
inputs = processor(images=image, return_tensors="pt")
with torch.no_grad():  # 关闭梯度计算,加速推理
    outputs = model(**inputs)

# 4. 后处理获取语义分割结果
predicted_semantic_map = processor.post_process_semantic_segmentation(
    outputs, target_sizes=[image.size[::-1]]
)[0]

这段代码实现了完整的图像分割流程,包括模型加载、图像预处理、推理和结果后处理。关键步骤解析:

  • AutoImageProcessor:自动加载与模型匹配的图像处理器,负责图像的大小调整、归一化等预处理
  • Mask2FormerForUniversalSegmentation:加载Mask2Former模型,支持通用分割任务
  • post_process_semantic_segmentation:将模型输出转换为语义分割图,target_sizes参数指定输出大小应与输入图像一致

4.2 结果可视化:如何将分割结果呈现出来?

获取分割结果后,我们需要将其可视化。以下是一个完整的可视化函数:

import numpy as np
import matplotlib.pyplot as plt
import torch

def visualize_segmentation(image, semantic_map, save_path=None):
    """
    可视化语义分割结果
    
    Args:
        image: 原始PIL图像
        semantic_map: 模型输出的语义分割图(torch.Tensor)
        save_path: 保存路径,为None则直接显示
    """
    # 将语义图转换为NumPy数组
    semantic_map = semantic_map.cpu().numpy()
    
    # 创建随机颜色映射(针对Cityscapes的34个类别)
    np.random.seed(42)  # 固定随机种子,确保颜色一致
    cmap = np.random.randint(0, 256, size=(34, 3), dtype=np.uint8)
    cmap[0] = [0, 0, 0]  # 背景设为黑色
    
    # 根据语义图生成彩色掩码
    color_mask = cmap[semantic_map]
    
    # 将PIL图像转换为NumPy数组
    image_np = np.array(image)
    
    # 融合原始图像和彩色掩码
    blended = (image_np * 0.5 + color_mask * 0.5).astype(np.uint8)
    
    # 显示结果
    fig, axes = plt.subplots(1, 3, figsize=(18, 6))
    axes[0].imshow(image_np)
    axes[0].set_title("原始图像")
    axes[0].axis("off")
    
    axes[1].imshow(color_mask)
    axes[1].set_title("语义分割掩码")
    axes[1].axis("off")
    
    axes[2].imshow(blended)
    axes[2].set_title("融合结果")
    axes[2].axis("off")
    
    plt.tight_layout()
    
    # 保存或显示
    if save_path:
        plt.savefig(save_path, bbox_inches="tight", pad_inches=0)
        print(f"结果已保存至: {save_path}")
    else:
        plt.show()

# 使用示例
visualize_segmentation(image, predicted_semantic_map, "segmentation_result.png")

4.3 完整推理代码

结合上述步骤,以下是一个完整的图像分割推理脚本:

import torch
import requests
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from transformers import AutoImageProcessor, Mask2FormerForUniversalSegmentation

def load_model(model_path="."):
    """加载模型和处理器"""
    processor = AutoImageProcessor.from_pretrained(model_path)
    model = Mask2FormerForUniversalSegmentation.from_pretrained(model_path)
    model.eval()  # 设置为评估模式
    return processor, model

def segment_image(processor, model, image, device="cuda" if torch.cuda.is_available() else "cpu"):
    """对单张图像进行分割"""
    # 将模型移动到指定设备
    model = model.to(device)
    
    # 预处理图像
    inputs = processor(images=image, return_tensors="pt").to(device)
    
    # 推理
    with torch.no_grad():
        outputs = model(**inputs)
    
    # 后处理
    target_sizes = [image.size[::-1]]  # [height, width]
    results = processor.post_process_semantic_segmentation(outputs, target_sizes=target_sizes)
    
    return results[0]

def visualize_segmentation(image, semantic_map, save_path=None):
    """可视化分割结果"""
    # 实现同4.2节
    
def main(image_path, output_path=None):
    """主函数"""
    # 加载模型
    print("加载模型...")
    processor, model = load_model()
    
    # 加载图像
    if image_path.startswith(("http://", "https://")):
        image = Image.open(requests.get(image_path, stream=True).raw).convert("RGB")
    else:
        image = Image.open(image_path).convert("RGB")
    
    # 分割图像
    print("进行图像分割...")
    semantic_map = segment_image(processor, model, image)
    
    # 可视化结果
    print("生成可视化结果...")
    visualize_segmentation(image, semantic_map, output_path)

if __name__ == "__main__":
    import argparse
    
    parser = argparse.ArgumentParser(description="Mask2Former图像分割工具")
    parser.add_argument("--image", required=True, help="输入图像路径或URL")
    parser.add_argument("--output", help="输出结果保存路径")
    
    args = parser.parse_args()
    main(args.image, args.output)

使用方法:

# 使用URL作为输入
python segment.py --image "https://images.cocodataset.org/val2017/000000039769.jpg" --output result.jpg

# 使用本地图像作为输入
python segment.py --image "test.jpg" --output result.jpg

五、配置文件详解与参数调优

5.1 config.json核心参数解析

配置文件包含了模型的所有关键参数,理解这些参数对于模型调优至关重要:

{
  "architectures": ["Mask2FormerForUniversalSegmentation"],
  "backbone_config": {
    "architectures": ["SwinForImageClassification"],
    "depths": [2, 2, 18, 2],
    "embed_dim": 192,
    "drop_path_rate": 0.3,
    "hidden_size": 1536,
    "num_attention_heads": [6, 12, 24, 48],
    "patch_size": [4, 4],
    "window_size": [7, 7]
  },
  "class_embed_dim": 256,
  "hidden_dim": 256,
  "mask_embed_dim": 256,
  "num_queries": 100,
  "num_labels": 34
}

关键参数说明

参数含义调优建议
depthsSwin骨干网络各阶段的层数增加层数可提升性能但增加计算量,推荐保持默认
embed_dim初始嵌入维度影响特征表达能力,增大可提升性能但需更多显存
drop_path_rateDropPath比率控制正则化强度,数据量小时可适当增大
hidden_size最后一层特征维度模型容量的关键指标,不宜随意修改
num_attention_heads各阶段注意力头数影响模型捕捉不同尺度特征的能力
num_queries查询向量数量决定最多可检测的目标数量,城市场景推荐100-200
num_labels类别数量Cityscapes数据集为34类,根据实际任务修改

5.2 性能优化技巧

1. 输入分辨率调整

Mask2Former对输入分辨率不敏感,但适当调整可平衡速度和精度:

# 修改预处理配置,调整输入分辨率
processor = AutoImageProcessor.from_pretrained(".")
processor.size["shortest_edge"] = 512  # 将最短边调整为512,默认是800
分辨率速度提升精度损失适用场景
320x320~200%~5% mIoU实时应用
512x512~150%~2% mIoU平衡速度和精度
800x800默认追求最高精度
1024x1024~60%+0.5% mIoU高分辨率需求

2. 后处理优化

默认的后处理包含一些耗时操作,可根据需求简化:

# 简化后处理,提升速度
def fast_post_process(outputs, target_sizes):
    """简化的后处理函数"""
    # 获取掩码预测
    masks = outputs.masks_queries_logits
    
    # 获取类别预测
    classes = outputs.class_queries_logits.argmax(dim=-1)
    
    # 调整掩码大小并阈值化
    masks = F.interpolate(
        masks, 
        size=target_sizes[0], 
        mode="bilinear", 
        align_corners=False
    ).squeeze(0)
    
    # 简单阈值化,替代复杂的掩码分配逻辑
    masks = (masks > 0.5).float()
    
    # 生成语义图
    semantic_map = torch.zeros(target_sizes[0], dtype=torch.long)
    for i, (cls, mask) in enumerate(zip(classes, masks)):
        if cls == 0:  # 跳过背景类
            continue
        semantic_map[mask == 1] = cls
    
    return semantic_map

3. 批量推理

批量处理多张图像可显著提升吞吐量:

# 批量推理示例
def batch_segment(processor, model, images, batch_size=4):
    """批量处理图像"""
    results = []
    for i in range(0, len(images), batch_size):
        batch = images[i:i+batch_size]
        inputs = processor(images=batch, return_tensors="pt").to(device)
        with torch.no_grad():
            outputs = model(**inputs)
        target_sizes = [img.size[::-1] for img in batch]
        batch_results = processor.post_process_semantic_segmentation(outputs, target_sizes=target_sizes)
        results.extend(batch_results)
    return results

六、常见问题与解决方案

6.1 推理速度慢怎么办?

问题分析:Mask2Former作为SOTA模型,计算量较大,尤其在CPU上推理速度较慢。

解决方案

1.** 使用GPU加速 **:确保已安装CUDA并正确配置PyTorch

device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)

2.** 模型量化 **:使用PyTorch的量化功能减少计算量和内存占用

# 动态量化示例
model = torch.quantization.quantize_dynamic(
    model, {torch.nn.Linear}, dtype=torch.qint8
)

3.** TensorRT优化 **:对于NVIDIA GPU,可使用TensorRT进一步加速

# 安装TensorRT相关依赖
pip install torch-tensorrt

4.** 减少查询数量 **:在config.json中减小num_queries,如从100减至50

6.2 分割结果中有噪点或空洞

问题分析:这通常是由于阈值设置不当或小目标分割效果不佳导致的。

解决方案

1.** 调整掩码阈值 **:

# 后处理时使用更高的阈值过滤噪声
masks = (masks > 0.6).float()  # 默认阈值是0.5

2.** 形态学后处理 **:

import cv2

# 对分割结果进行形态学操作
def refine_mask(mask):
    mask_np = mask.cpu().numpy().astype(np.uint8)
    # 去除小连通域
    kernel = np.ones((3, 3), np.uint8)
    mask_np = cv2.morphologyEx(mask_np, cv2.MORPH_CLOSE, kernel)
    mask_np = cv2.morphologyEx(mask_np, cv2.MORPH_OPEN, kernel)
    return torch.tensor(mask_np)

3.** 增加输入分辨率**:更高的分辨率有助于捕捉细节

6.3 如何处理视频序列?

问题分析:直接对视频每一帧独立处理会导致结果抖动,且计算效率低。

解决方案

  1. 帧间信息复用
def process_video(video_path, output_path):
    """处理视频序列,复用前一帧信息"""
    cap = cv2.VideoCapture(video_path)
    writer = None
    
    # 加载模型
    processor, model = load_model()
    
    prev_mask = None  # 存储前一帧掩码
    
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break
            
        # 转换为PIL图像
        image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
        
        # 分割当前帧
        curr_mask = segment_image(processor, model, image)
        
        # 如果有前一帧,进行平滑处理
        if prev_mask is not None:
            # 帧间平滑,减少抖动
            curr_mask = (curr_mask * 0.7 + prev_mask * 0.3).round().long()
            
        prev_mask = curr_mask
        
        # 可视化并写入视频
        # ...
        
    cap.release()
    writer.release()
  1. 关键帧采样:对视频进行关键帧采样,只处理关键帧,中间帧使用插值

七、工业级部署最佳实践

7.1 模型导出与优化

1. 导出为ONNX格式

ONNX(Open Neural Network Exchange)是一种通用的模型格式,支持跨平台部署:

import torch.onnx

def export_to_onnx(model, input_sample, output_path="mask2former.onnx"):
    """将PyTorch模型导出为ONNX格式"""
    # 设置为评估模式
    model.eval()
    
    # 导出模型
    torch.onnx.export(
        model,
        input_sample,
        output_path,
        opset_version=12,
        do_constant_folding=True,
        input_names=["input"],
        output_names=["class_queries_logits", "masks_queries_logits"],
        dynamic_axes={
            "input": {0: "batch_size", 2: "height", 3: "width"},
            "masks_queries_logits": {0: "batch_size", 2: "height", 3: "width"}
        }
    )
    
    print(f"模型已导出至: {output_path}")

# 使用示例
processor, model = load_model()
dummy_input = processor(images=Image.new("RGB", (800, 800)), return_tensors="pt")
export_to_onnx(model, (dummy_input["pixel_values"],), "mask2former.onnx")

2. TensorRT优化

对于NVIDIA GPU部署,TensorRT可显著提升性能:

import tensorrt as trt

def optimize_with_tensorrt(onnx_path, trt_path="mask2former.trt"):
    """使用TensorRT优化ONNX模型"""
    TRT_LOGGER = trt.Logger(trt.Logger.WARNING)
    builder = trt.Builder(TRT_LOGGER)
    network = builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))
    parser = trt.OnnxParser(network, TRT_LOGGER)
    
    # 解析ONNX文件
    with open(onnx_path, 'rb') as model_file:
        parser.parse(model_file.read())
    
    # 配置生成器
    config = builder.create_builder_config()
    config.max_workspace_size = 1 << 30  # 1GB
    
    # 构建并保存引擎
    serialized_engine = builder.build_serialized_network(network, config)
    with open(trt_path, 'wb') as f:
        f.write(serialized_engine)
    
    print(f"TensorRT引擎已保存至: {trt_path}")

7.2 多平台部署方案

1. 服务器端部署

使用FastAPI构建高性能API服务:

from fastapi import FastAPI, UploadFile, File
from fastapi.responses import StreamingResponse
import io
import torch
from PIL import Image

app = FastAPI(title="Mask2Former图像分割API")

# 加载模型(全局单例)
processor, model = load_model()
model.eval()

@app.post("/segment")
async def segment_image_api(file: UploadFile = File(...)):
    """图像分割API端点"""
    # 读取图像
    image = Image.open(io.BytesIO(await file.read())).convert("RGB")
    
    # 分割图像
    result = segment_image(processor, model, image)
    
    # 可视化结果
    buf = io.BytesIO()
    visualize_segmentation(image, result, buf)
    buf.seek(0)
    
    return StreamingResponse(buf, media_type="image/png")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

2. 移动端部署

使用ONNX Runtime或TFLite在移动设备上部署:

// Android端使用ONNX Runtime的示例代码
import ai.onnxruntime.OrtEnvironment;
import ai.onnxruntime.OrtSession;
import ai.onnxruntime.TensorInfo;

public class Mask2FormerSegmenter {
    private OrtEnvironment env;
    private OrtSession session;
    
    public void init(String modelPath) throws Exception {
        env = OrtEnvironment.getEnvironment();
        session = env.createSession(modelPath, new OrtSession.SessionOptions());
    }
    
    public Bitmap segment(Bitmap inputImage) {
        // 预处理图像
        float[] inputTensor = preprocessImage(inputImage);
        
        // 运行模型
        try (OrtSession.Result result = session.run(/*输入数据*/)) {
            // 后处理获取分割结果
            return postprocessResult(result);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    
    // 预处理和后处理实现...
}

3. 边缘设备部署

对于 Jetson 等边缘设备,推荐使用 TensorRT 优化:

# Jetson设备上安装必要组件
sudo apt-get install tensorrt
pip3 install torch torchvision onnx onnxruntime

# 优化模型
python3 optimize_for_jetson.py --input mask2former.onnx --output mask2former_jetson.trt

八、总结与未来展望

8.1 本文知识点回顾

通过本文,你已经掌握了:

  1. Mask2Former的核心原理:包括统一分割范式、掩码注意力机制和多尺度可变形注意力
  2. 环境搭建与快速上手:从安装到推理的完整流程
  3. 实战技巧:模型调优、结果可视化和常见问题解决
  4. 工业级部署:模型导出、优化和多平台部署方案

8.2 未来发展趋势

图像分割技术正朝着以下方向发展:

  1. 更高性能:结合更大模型和更多数据,进一步提升分割精度
  2. 更高效率:轻量级模型和高效推理算法将成为研究热点
  3. 更强泛化能力:零样本/少样本分割技术将降低标注成本
  4. 动态适应能力:能够根据输入内容和硬件条件动态调整模型

8.3 扩展学习资源

为了进一步提升你的图像分割技能,推荐以下资源:

  1. 论文

  2. 代码库

  3. 数据集

  4. 在线课程

    • Hugging Face课程中的视觉模块
    • Fast.ai的计算机视觉课程

8.4 最后的话

Mask2Former代表了当前图像分割技术的最高水平之一,它的统一范式和高效设计使其成为实际应用的理想选择。无论是自动驾驶、医学影像还是机器人视觉,Mask2Former都能提供强大的分割能力。

随着技术的不断进步,我们有理由相信,图像分割将在未来几年内实现更大的突破,为计算机视觉应用带来更多可能。

如果你觉得本文对你有帮助,请点赞、收藏并关注,以便获取更多计算机视觉领域的技术分享!

下期预告:《Mask2Former训练指南:从自定义数据集到模型微调》

【免费下载链接】mask2former-swin-large-cityscapes-semantic 【免费下载链接】mask2former-swin-large-cityscapes-semantic 项目地址: https://ai.gitcode.com/mirrors/facebook/mask2former-swin-large-cityscapes-semantic

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值