MMDetection 框架完整教程(从入门到实战,代码可复现)

MMDetection 是基于 PyTorch 的开源目标检测工具箱,属于 OpenMMLab 生态。它封装了 Faster R-CNN、YOLO、RetinaNet、Mask R-CNN 等数十种经典目标检测/分割算法,支持快速搭建、训练、验证和部署目标检测模型,解决了传统目标检测任务中「算法实现复杂、工程化难度高、调参效率低」的痛点,广泛应用于科研和工业落地场景。

一、前置准备:环境搭建与核心依赖安装

1. 核心依赖说明

MMDetection 运行依赖三大核心组件,版本兼容性要求严格(需重点匹配),避免出现安装失败或运行报错:

  • PyTorch & torchvision:深度学习核心框架,提供模型训练/推理的底层支持;
  • MMEngine:OpenMMLab 生态的核心引擎,提供训练调度、配置管理、日志记录等基础功能;
  • MMCV:OpenMMLab 生态的计算机视觉基础库,提供数据增强、模型组件、推理加速等工具(必须安装带 CUDA 支持的版本,否则性能大幅下降);
  • MMDetection:目标检测工具箱核心,提供各类目标检测算法实现和配置文件。

2. 环境搭建步骤(推荐 conda 虚拟环境)

步骤 1:创建并激活 conda 虚拟环境

bash 复制代码
# 创建 Python 3.9 虚拟环境(兼容性最佳,支持大部分 MMDetection 版本)
conda create -n mmdet_env python=3.9
# 激活虚拟环境
conda activate mmdet_env

步骤 2:安装 PyTorch(匹配 CUDA 版本,优先 GPU 加速)

MMDetection 要求 PyTorch 版本 ≥ 1.8.0,推荐安装对应本地 CUDA 版本的 PyTorch(无 GPU 则安装 CPU 版本,仅用于入门测试)。

  • GPU 版本(推荐,需提前安装 CUDA 11.7+/12.0+) 参考 PyTorch 官网 获取对应安装命令,以 CUDA 11.8 为例:

    bash 复制代码
    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
  • CPU 版本(无 GPU 设备,运行速度较慢)

    bash 复制代码
    pip3 install torch torchvision torchaudio

步骤 3:安装 MMCV(带 CUDA 加速,核心关键步骤)

MMCV 提供两种安装方式,优先选择预编译包安装(快速无编译),避免手动编译耗时且容易报错。

  1. 查看当前环境的 PyTorch 版本和 CUDA 版本(验证兼容性):

    python 复制代码
    import torch
    print(f"PyTorch 版本:{torch.__version__}")
    print(f"CUDA 版本:{torch.version.cuda}")
  2. 下载并安装 MMCV 预编译包(匹配 PyTorch 和 CUDA 版本): 打开 MMCV 预编译包下载地址,找到对应「PyTorch 版本」「CUDA 版本」「Python 版本」的预编译包,复制下载链接,使用 pip 安装(以 PyTorch 2.0.0、CUDA 11.8、Python 3.9 为例):

    bash 复制代码
    pip install mmcv==2.0.1 -f https://download.openmmlab.com/mmcv/dist/cu118/torch2.0.0/index.html -i https://pypi.tuna.tsinghua.edu.cn/simple

    国内用户可使用清华镜像加速,避免下载超时。

步骤 4:安装 MMDetection(核心工具箱)

bash 复制代码
# 方式 1:安装稳定版(推荐,落地优先)
pip install mmdet -i https://pypi.tuna.tsinghua.edu.cn/simple

# 方式 2:安装最新开发版(适合科研,获取最新算法)
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple

步骤 5:环境验证(确认安装成功)

运行以下代码,验证 MMDetection 是否安装成功,并查看支持的模型列表:

python 复制代码
import mmdet
from mmdet.apis import init_detector, inference_detector

# 验证库导入是否成功
print(f"MMDetection 版本:{mmdet.__version__}")
print("MMDetection 环境配置成功!")

# 查看内置模型配置文件(部分核心模型)
from mmdet.utils import get_config_file
print("\n核心模型配置文件示例:")
print("Faster R-CNN 配置:", get_config_file("faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py"))
print("YOLOv3 配置:", get_config_file("yolo/yolov3_d53_mstrain-608_273e_coco.py"))

3. 关键版本兼容性说明(避坑核心)

MMDetection 版本 MMCV 版本 PyTorch 版本 CUDA 版本
3.0.0+(稳定版) 2.0.0+ 1.8.0 - 2.0.0 11.1+
2.28.0+ 1.7.0+ 1.6.0 - 1.13.0 10.2+

落地建议 :优先选择上表中的稳定版组合,避免版本不匹配导致的各类报错(如 ModuleNotFoundErrorCUDA error 等)。

二、MMDetection 核心认知:架构与核心概念

1. 整体架构(OpenMMLab 生态)

MMDetection 基于 OpenMMLab 生态构建,核心依赖「MMEngine」和「MMCV」,整体架构分层清晰:

  • 底层:MMEngine:提供训练调度、优化器管理、日志记录、 checkpoint 保存等通用功能,无需重复开发;
  • 中层:MMCV:提供计算机视觉专属工具,如数据增强、图像预处理、模型组件(卷积层、注意力层)、推理加速等;
  • 上层:MMDetection:封装各类目标检测/分割算法(Faster R-CNN、YOLO 等),提供完整的配置文件和训练/推理接口,用户可快速调用和修改。

2. 核心概念(快速上手关键)

(1) 配置文件(*.py)

MMDetection 的核心是「配置驱动」,所有模型参数、训练参数、数据集参数都通过配置文件管理,无需修改核心代码。配置文件支持「继承」和「覆盖」,可基于官方默认配置快速修改,大幅提升调参效率。

官方默认配置文件位于 mmdet/configs/ 目录下,按算法分类(如 faster_rcnn/yolo/),每个算法提供多个不同规模的配置(如 r50_fpnr101_fpn)。

(2) 预训练模型权重(*.pth)

官方提供了大量基于 COCO 数据集训练的预训练模型权重,可直接用于推理或迁移学习,下载地址位于配置文件对应的注释中,或通过 OpenMMLab 模型库 获取。

预训练权重会自动缓存到 ~/.cache/mmdet/ 目录下,若下载失败可手动下载后放入该目录。

(3) 数据集格式(COCO / VOC)

MMDetection 原生支持 COCO 和 VOC 两种主流目标检测数据集格式,其中 COCO 格式用于大规模训练,VOC 格式用于小型自定义数据集,后续实战将以 VOC 格式为例(更易标注和落地)。

三、快速入门:预训练模型推理(无需训练,直接落地)

使用 MMDetection 官方预训练模型,可快速实现单张图片、批量图片、视频的目标检测推理,核心流程为「加载配置文件→加载预训练权重→初始化模型→执行推理→结果可视化与保存」。

完整实战代码(Faster R-CNN 模型)

python 复制代码
import cv2
import os
from mmdet.apis import init_detector, inference_detector, show_result_pyplot

# 1. 配置参数设置(核心:配置文件路径 + 预训练权重路径)
config_file = "faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py"  # 模型配置文件
checkpoint_file = None  # 预训练权重(None 表示自动下载官方预训练权重)
img_path = "test_cat_dog.jpg"  # 测试图像路径(替换为你的测试图像)
output_dir = "mmdet_inference_results"  # 推理结果保存目录

# 2. 创建结果保存目录
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# 3. 配置设备(优先使用 GPU,无 GPU 则使用 CPU)
device = "cuda:0" if cv2.cuda.getDeviceCount() > 0 else "cpu"
print(f"使用设备:{device}")

# 4. 初始化目标检测模型(加载配置 + 预训练权重)
model = init_detector(
    config_file,
    checkpoint_file,
    device=device,
    cfg_options=None  # 额外配置覆盖(无需修改时设为 None)
)
print("模型初始化成功,开始执行推理...")

# 5. 执行推理(支持单张图片、批量图片、视频帧)
result = inference_detector(model, img_path)

# 6. 结果可视化与保存
# 方式 1:使用官方自带可视化工具,直接显示并保存
show_result_pyplot(
    model,
    img_path,
    result,
    score_thr=0.5,  # 置信度阈值,过滤低置信度检测框
    out_file=os.path.join(output_dir, "inference_result.jpg")  # 保存结果图像
)

# 方式 2:手动解析检测结果,自定义绘制(更灵活)
def visualize_custom_result(img_path, result, model, score_thr=0.5, save_path=None):
    """
    自定义可视化检测结果:绘制检测框、类别、置信度
    """
    # 读取原始图像
    img = cv2.imread(img_path)
    if img is None:
        raise Exception("无法读取图像,请检查文件路径是否正确")
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    
    # 解析检测结果(MMDetection 输出格式:(类别数, 检测框数, 5),最后一维为 [x1, y1, x2, y2, 置信度])
    class_names = model.CLASSES
    for cls_idx, cls_result in enumerate(result):
        for bbox in cls_result:
            x1, y1, x2, y2, score = bbox
            if score < score_thr:
                continue  # 过滤低置信度检测框
            
            # 绘制检测框(红色,线宽 2)
            cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (255, 0, 0), 2)
            
            # 绘制类别与置信度标签(白色背景,黑色文字)
            label = f"{class_names[cls_idx]} {score:.2f}"
            label_size, _ = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)
            y1_label = max(int(y1), label_size[1] + 10)
            cv2.rectangle(
                img,
                (int(x1), y1_label - label_size[1] - 10),
                (int(x1) + label_size[0], y1_label),
                (255, 255, 255),
                -1
            )
            cv2.putText(
                img,
                label,
                (int(x1), y1_label - 5),
                cv2.FONT_HERSHEY_SIMPLEX,
                0.5,
                (0, 0, 0),
                1
            )
    
    # 保存结果图像(转换回 BGR 格式,适配 cv2 保存)
    if save_path is not None:
        img_bgr = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
        cv2.imwrite(save_path, img_bgr)
    
    return img

# 自定义可视化并保存结果
custom_result_img = visualize_custom_result(
    img_path,
    result,
    model,
    score_thr=0.5,
    save_path=os.path.join(output_dir, "custom_inference_result.jpg")
)

print(f"推理完成,结果已保存至 {output_dir} 目录")

核心知识点解析

  1. 模型初始化init_detector() 负责加载配置文件和预训练权重,自动完成模型构建和设备部署,无需手动定义网络结构;
  2. 推理执行inference_detector() 支持单张图片(字符串路径)、批量图片(列表路径)、视频帧(numpy 数组)输入,返回格式为符合 MMDetection 规范的检测结果;
  3. 置信度阈值score_thr=0.5 过滤置信度低于 0.5 的检测框,减少误检,可根据场景调整(如高精度场景设为 0.7,低漏检场景设为 0.3);
  4. 类别解析model.CLASSES 包含预训练模型支持的所有类别(COCO 数据集为 80 类),可直接用于解析检测结果的类别索引。

扩展:视频目标检测推理

python 复制代码
import cv2
from mmdet.apis import init_detector, inference_detector

# 1. 配置参数
config_file = "faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py"
checkpoint_file = None
video_path = "test_road.mp4"  # 测试视频路径
output_video_path = "mmdet_road_detection.mp4"
device = "cuda:0" if cv2.cuda.getDeviceCount() > 0 else "cpu"

# 2. 初始化模型
model = init_detector(config_file, checkpoint_file, device=device)

# 3. 打开视频文件
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
    raise Exception("无法打开视频文件,请检查路径是否正确")

# 4. 获取视频参数
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fourcc = cv2.VideoWriter_fourcc(*"mp4v")

# 5. 初始化视频写入器
out = cv2.VideoWriter(output_video_path, fourcc, fps, (width, height))

# 6. 逐帧推理并写入结果
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    # 执行推理(将视频帧转换为 RGB 格式,适配 MMDetection)
    frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    result = inference_detector(model, frame_rgb)
    
    # 绘制检测结果(使用模型自带绘制函数)
    frame_result = model.show_result(
        frame,
        result,
        score_thr=0.5,
        bbox_color=(0, 255, 0),
        text_color=(0, 255, 0),
        thickness=2,
        font_scale=0.5
    )
    
    # 写入结果视频
    out.write(frame_result)
    
    # 实时显示结果(按 'q' 退出)
    cv2.imshow("MMDetection Video Detection", frame_result)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

# 7. 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
print(f"视频检测完成,结果已保存至 {output_video_path}")

四、核心实战:自定义数据集训练(落地核心,VOC 格式)

传统目标检测模型需要大量标注数据和复杂的工程实现,而 MMDetection 可基于自定义 VOC 格式数据集快速实现模型训练,核心流程为「数据集准备与标注→配置文件修改→执行训练→模型验证→推理测试」。

步骤 1:数据集准备与标注(VOC 格式)

1. VOC 数据集目录结构

首先创建符合 VOC 格式的数据集目录,结构如下(以「猫狗分类检测」为例):

bash 复制代码
custom_cat_dog_dataset/
├── Annotations/  # 标注文件目录(*.xml,每张图片对应一个 xml 文件)
├── Images/       # 图像文件目录(*.jpg / *.png,训练/验证图像放在一起)
├── ImageSets/
│   └── Main/
│       ├── train.txt  # 训练集图像名称列表(无后缀,如 "cat_001")
│       ├── val.txt    # 验证集图像名称列表(无后缀,如 "dog_001")
│       └── test.txt   # 测试集图像名称列表(可选)

2. 图像标注(LabelImg 工具)

使用 LabelImg 工具进行图像标注,生成 VOC 格式的 *.xml 标注文件,步骤如下:

  1. 安装 LabelImg:pip install labelImg -i https://pypi.tuna.tsinghua.edu.cn/simple
  2. 启动 LabelImg:在终端输入 labelImg,选择数据集的 Images 目录和 Annotations 目录;
  3. 开始标注:点击「Create RectBox」绘制检测框,选择对应类别(如 "cat"、"dog"),保存后自动生成 *.xml 标注文件;
  4. 划分训练/验证集:手动创建 train.txtval.txt,写入图像名称(无后缀),建议按 8:2 比例划分。

步骤 2:修改 MMDetection 配置文件

基于官方默认配置文件,修改为适配自定义 VOC 数据集的配置,核心修改内容包括「数据集路径→类别数与类别名称→训练参数→预训练权重」。

1. 复制默认配置文件

mmdet/configs/pascal_voc/ 目录下复制 faster_rcnn_r50_fpn_1x_voc0712.py 配置文件,重命名为 faster_rcnn_r50_fpn_1x_custom_cat_dog.py,放入同一目录下,避免修改官方默认配置。

2. 核心配置修改(关键步骤)

python 复制代码
# 1. 数据集路径修改(指向你的自定义 VOC 数据集目录)
data_root = "custom_cat_dog_dataset/"  # 自定义数据集根目录
data = dict(
    train=dict(
        ann_file=data_root + "ImageSets/Main/train.txt",
        img_prefix=data_root + "Images/",
        ann_prefix=data_root + "Annotations/",
        classes=("cat", "dog"),  # 自定义类别名称(与标注一致)
    ),
    val=dict(
        ann_file=data_root + "ImageSets/Main/val.txt",
        img_prefix=data_root + "Images/",
        ann_prefix=data_root + "Annotations/",
        classes=("cat", "dog"),
    ),
    test=dict(
        ann_file=data_root + "ImageSets/Main/test.txt",
        img_prefix=data_root + "Images/",
        ann_prefix=data_root + "Annotations/",
        classes=("cat", "dog"),
    ),
)

# 2. 模型头部修改(类别数与自定义类别一致,VOC 格式默认 +1 背景类)
model = dict(
    roi_head=dict(
        bbox_head=dict(
            num_classes=2,  # 自定义类别数(cat + dog = 2,无需 +1 背景类,MMDetection 自动处理)
        )
    )
)

# 3. 训练参数修改(适配小型数据集,避免过拟合)
train_cfg = dict(
    max_epochs=30,  # 训练轮数(小型数据集 30-50 即可)
    val_interval=5,  # 每 5 轮验证一次
)
optimizer = dict(
    lr=0.001,  # 学习率(比官方默认略低,避免震荡)
)
data = dict(
    samples_per_gpu=4,  # 每 GPU 批量大小(根据显存调整,显存不足设为 2 或 1)
    workers_per_gpu=2,  # 每 GPU 数据加载线程数
)

# 4. 预训练权重修改(使用 COCO 预训练权重,迁移学习)
load_from = "https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth"  # 官方 COCO 预训练权重

步骤 3:执行模型训练(两种方式)

方式 1:命令行训练(推荐,简单高效)

在终端激活 mmdet_env 虚拟环境,进入 MMDetection 根目录,执行以下命令:

bash 复制代码
python tools/train.py \
    configs/pascal_voc/faster_rcnn_r50_fpn_1x_custom_cat_dog.py \
    --work-dir work_dirs/custom_cat_dog \
    --gpu-id 0 \
    --seed 42
  • --work-dir:训练结果保存目录(包含 checkpoint、日志、配置文件);
  • --gpu-id:指定使用的 GPU 编号;
  • --seed:随机种子,保证训练可复现。

方式 2:Python 脚本训练(灵活,便于二次开发)

python 复制代码
from mmengine.runner import Runner
from mmdet.utils import register_all_modules
from mmdet.apis import init_cfg

# 1. 注册所有 MMDetection 模块
register_all_modules()

# 2. 初始化配置
cfg = init_cfg(
    config_file="configs/pascal_voc/faster_rcnn_r50_fpn_1x_custom_cat_dog.py",
    work_dir="work_dirs/custom_cat_dog",
    gpu_id=0,
)

# 3. 初始化 Runner 并执行训练
runner = Runner.from_cfg(cfg)
runner.train()

步骤 4:模型验证与推理测试

1. 模型验证(评估精度)

训练完成后,使用验证集评估模型精度(mAP 指标),命令行方式如下:

bash 复制代码
python tools/test.py \
    configs/pascal_voc/faster_rcnn_r50_fpn_1x_custom_cat_dog.py \
    work_dirs/custom_cat_dog/epoch_30.pth \
    --eval mAP \
    --gpu-id 0

2. 自定义模型推理测试

使用训练完成的模型权重,执行推理测试,代码与快速入门部分类似,仅需修改配置文件和权重路径:

python 复制代码
from mmdet.apis import init_detector, inference_detector, show_result_pyplot

# 1. 配置参数
config_file = "configs/pascal_voc/faster_rcnn_r50_fpn_1x_custom_cat_dog.py"
checkpoint_file = "work_dirs/custom_cat_dog/epoch_30.pth"  # 训练完成的权重
img_path = "custom_cat_dog_dataset/Images/cat_001.jpg"

# 2. 初始化模型
model = init_detector(config_file, checkpoint_file, device="cuda:0")

# 3. 执行推理
result = inference_detector(model, img_path)

# 4. 可视化结果
show_result_pyplot(
    model,
    img_path,
    result,
    score_thr=0.5,
    out_file="custom_cat_dog_inference_result.jpg"
)

print("自定义模型推理完成,结果已保存")

五、进阶优化:提升模型精度与训练效率

1. 数据增强(减少过拟合,提升泛化能力)

MMDetection 内置丰富的数据增强策略,可在配置文件中修改 train_pipeline 实现,常用增强策略包括:

python 复制代码
data = dict(
    train=dict(
        pipeline=[
            dict(type='LoadImageFromFile'),
            dict(type='LoadAnnotations', with_bbox=True),
            dict(type='RandomFlip', prob=0.5),  # 随机水平翻转
            dict(type='RandomResize', scale=(1333, 800), keep_ratio=True),  # 随机缩放
            dict(type='RandomCrop', crop_size=(768, 768), crop_ratio=(0.5, 1.0)),  # 随机裁剪
            dict(type='BrightnessTransform', brightness_range=(0.8, 1.2)),  # 亮度调整
            dict(type='ContrastTransform', contrast_range=(0.8, 1.2)),  # 对比度调整
            dict(type='Normalize', mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True),
            dict(type='Pad', size_divisor=32),
            dict(type='DefaultFormatBundle'),
            dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']),
        ]
    )
)

2. 模型微调与迁移学习(提升小型数据集精度)

  • 优先使用 COCO 数据集预训练权重(load_from 参数),避免从头训练,大幅提升训练效率和精度;

  • 冻结骨干网络(如 ResNet50)前几层参数,仅训练头部网络,减少过拟合,在配置文件中添加:

    python 复制代码
    optimizer = dict(
        paramwise_cfg=dict(
            custom_keys=dict(
                backbone=dict(lr_mult=0.1),  # 骨干网络学习率为基础学习率的 0.1 倍
            )
        )
    )

3. 学习率调度策略优化(避免训练震荡)

使用余弦退火学习率调度策略,替代默认的阶梯式学习率,在配置文件中修改:

python 复制代码
param_scheduler = [
    dict(
        type='CosineAnnealingLR',
        T_max=30,
        eta_min=1e-5,
        by_epoch=True,
        begin=0,
        end=30,
    )
]

4. 模型量化与部署(提升推理速度,适配边缘设备)

训练完成的模型可通过 MMCV 提供的工具转换为 ONNX 格式,适配边缘设备部署,步骤如下:

bash 复制代码
python tools/export_onnx.py \
    configs/pascal_voc/faster_rcnn_r50_fpn_1x_custom_cat_dog.py \
    work_dirs/custom_cat_dog/epoch_30.pth \
    --output-file faster_rcnn_cat_dog.onnx \
    --input-size 1333 800 \
    --opset-version 11

六、常见问题与避坑指南(MMDetection 落地专属)

  1. 配置文件报错(KeyError / ModuleNotFoundError)
    • 解决方案:检查配置文件的继承关系和参数拼写,确保 MMCV、MMDetection 版本匹配,重新安装对应版本;
  2. 显存不足(CUDA out of memory)
    • 解决方案:降低 samples_per_gpu(批量大小)、减小输入图像尺寸、使用更小模型(如 R18 骨干网络)、启用半精度训练;
  3. 训练不收敛(mAP 接近 0)
    • 解决方案:检查数据集标注格式是否正确、类别数是否匹配、预训练权重是否加载成功、学习率是否过高;
  4. 推理结果为空(无检测框)
    • 解决方案:降低置信度阈值(score_thr)、检查模型权重是否对应自定义数据集、图像预处理是否符合模型要求;
  5. LabelImg 标注文件无法识别
    • 解决方案:确保标注文件的类别名称与配置文件一致、图像名称与标注文件名称一致、无中文路径和特殊字符。

七、进阶扩展方向(从入门到实战落地)

  1. 自定义目标检测算法:基于 MMDetection 框架,实现自定义网络结构和损失函数,满足特定场景需求;
  2. 实例分割任务:使用 Mask R-CNN 等模型,实现目标检测与实例分割的联合任务;
  3. 多尺度训练与推理:提升小目标检测精度,适配远距离目标检测场景;
  4. 边缘设备部署:将模型转换为 TensorRT、OpenVINO 格式,部署到 Jetson Nano、Raspberry Pi 等边缘设备;
  5. 半监督/弱监督学习:利用少量标注数据和大量无标注数据,提升模型精度,降低标注成本。
相关推荐
意趣新2 小时前
OpenCV 中摄像头视频采集 + 实时显示 + 视频保存
python·opencv·计算机视觉
清水白石0082 小时前
《Python 中 deque vs list:性能差异全解析与高效数据结构实战指南》
数据结构·python·list
智航GIS2 小时前
7.2 Try Except语句
开发语言·python
程序员佳佳2 小时前
026年AI开发实战:从GPT-5.2到Gemini-3,如何构建下一代企业级Agent架构?
开发语言·python·gpt·重构·api·ai写作·agi
橙露2 小时前
Python 图形任意角度旋转完整解决方案:原理、实现与可视化展示
开发语言·python
大模型铲屎官2 小时前
【操作系统-Day 46】文件系统核心探秘:深入理解连续分配与链式分配的实现与优劣
人工智能·python·深度学习·大模型·操作系统·文件系统·计算机组成原理
每天早点睡3 小时前
format语句
python