快速上手大模型:深度学习12(目标检测、语义分割、序列模型)

目录

[1 目标检测](#1 目标检测)

[1.1 边界框(Bounding box)](#1.1 边界框(Bounding box))

[1.2 代码](#1.2 代码)

[1.3 常用算法](#1.3 常用算法)

[1.3.1 R-CNN](#1.3.1 R-CNN)

[1.3.2 Fast R-CNN](#1.3.2 Fast R-CNN)

[1.3.3 Faster R-CNN](#1.3.3 Faster R-CNN)

[1.3.4 Mask R-CNN](#1.3.4 Mask R-CNN)

[1.3.5 单发多框检测SSD](#1.3.5 单发多框检测SSD)

多尺度目标检测

[1.3.6 YOLO](#1.3.6 YOLO)

[1.3.7 小结](#1.3.7 小结)

[2 语义分割Semantic Segmentation](#2 语义分割Semantic Segmentation)

[3 序列模型](#3 序列模型)


1 目标检测

1.1 边界框(Bounding box)

用来描述对象的空间位置。 边界框是矩形的,由矩形左上角的以及右下角的𝑥和𝑦坐标决定。 另一种常用的边界框表示方法是边界框中心的(𝑥,𝑦)轴坐标以及框的宽度和高度。

1.2 代码

(1)库

python 复制代码
%matplotlib inline
import torch
from d2l import torch as d2l

d2l.set_figsize()
img = d2l.plt.imread('../img/catdog.jpg')
d2l.plt.imshow(img);

(2)边界框

python 复制代码
#@save
def box_corner_to_center(boxes):
    """从(左上,右下)转换到(中间,宽度,高度)"""
    x1, y1, x2, y2 = boxes[:, 0], boxes[:, 1], boxes[:, 2], boxes[:, 3]
    cx = (x1 + x2) / 2
    cy = (y1 + y2) / 2
    w = x2 - x1
    h = y2 - y1
    boxes = torch.stack((cx, cy, w, h), axis=-1)
    return boxes

#@save
def box_center_to_corner(boxes):
    """从(中间,宽度,高度)转换到(左上,右下)"""
    cx, cy, w, h = boxes[:, 0], boxes[:, 1], boxes[:, 2], boxes[:, 3]
    x1 = cx - 0.5 * w
    y1 = cy - 0.5 * h
    x2 = cx + 0.5 * w
    y2 = cy + 0.5 * h
    boxes = torch.stack((x1, y1, x2, y2), axis=-1)
    return boxes

# bbox是边界框的英文缩写
dog_bbox, cat_bbox = [60.0, 45.0, 378.0, 516.0], [400.0, 112.0, 655.0, 493.0]

torch.stack((cx, cy, w, h), axis=-1):

python 复制代码
#@save
def bbox_to_rect(bbox, color):
    # 将边界框(左上x,左上y,右下x,右下y)格式转换成matplotlib格式:
    # ((左上x,左上y),宽,高)
    return d2l.plt.Rectangle(
        xy=(bbox[0], bbox[1]), width=bbox[2]-bbox[0], height=bbox[3]-bbox[1],
        fill=False, edgecolor=color, linewidth=2)

fig = d2l.plt.imshow(img)
fig.axes.add_patch(bbox_to_rect(dog_bbox, 'blue'))
fig.axes.add_patch(bbox_to_rect(cat_bbox, 'red'));
1.3 常用算法
1.3.1 R-CNN

2014,它先找出可能有物体的区域(候选框),再用CNN对每个区域做分类和位置回归。

工作流程:

(1)Selective Search找候选区域(region proposals)

  • 输入一张图片

  • 使用传统算法(不是CNN)生成大约 2000 个候选框(Region proposals)

  • 这些框可能包含物体

(2)对每个候选框做裁剪 + resize + CNN 特征提取

对每个 Region 裁剪出来后

  • resize 到固定大小(如 224×224)

  • 输入到 CNN(如 AlexNet)

  • 输出特征向量(4096 维)

(3)使用 SVM 分类 + 回归框调整

CNN 提取的特征用于:

  • SVM分类器 → 判断框里是 猫 / 狗 / 人 / 背景

  • 回归器(regressor) → 调整框的位置(更准确)

1.3.2 Fast R-CNN

2015,整张图只做一次CNN → 得到特征图 → 在特征图上裁剪候选框 → 分类 + 回归。

相比R-CNN,它把速度从几十秒/张 → 0.2秒/张。

1.3.3 Faster R-CNN

2015,Faster R-CNN = Fast R-CNN + 用CNN来生成候选框Region Proposal Network(RPN)

1.3.4 Mask R-CNN

2017,Mask R-CNN = Faster R-CNN + 实例分割(Instance Segmentation)

1.3.5 单发多框检测SSD

一次前向就同时预测各位置的类别和边界框(多个预设框/anchor),速度快且精度不错,适合实时检测。

多尺度目标检测

多尺度:模型能够检测图像中不同大小的目标。

python 复制代码
%matplotlib inline
import torch
from d2l import torch as d2l

img = d2l.plt.imread('../img/catdog.jpg')
h, w = img.shape[:2]
h, w

def display_anchors(fmap_w, fmap_h, s):
    d2l.set_figsize()
    # 前两个维度上的值不影响输出
    fmap = torch.zeros((1, 10, fmap_h, fmap_w))
    anchors = d2l.multibox_prior(fmap, sizes=s, ratios=[1, 2, 0.5])
    bbox_scale = torch.tensor((w, h, w, h))
    d2l.show_bboxes(d2l.plt.imshow(img).axes,
                    anchors[0] * bbox_scale)

display_anchors(fmap_w=4, fmap_h=4, s=[0.15])

display_anchors(fmap_w=2, fmap_h=2, s=[0.4])

display_anchors(fmap_w=1, fmap_h=1, s=[0.8])
1.3.6 YOLO

把检测看成回归问题,网络一次前向就同时预测每个网格的类别和框(速度非常快,适合实时)。

1.3.7 小结

上述算法目前已经淘汰,了解即可,目前SLAM+大模型+具身智能主流算法:

(1)实时机器人检测(SLAM 前端)

  • YOLOv8 / YOLOv9(速度最快)

  • RT-DETR(高精度 + transformer)


(2)建图 / 语义 SLAM(多任务 dense 特征)

  • DINOv2(最强 dense feature)

  • SAM / SAM2(大模型分割)

  • Mask2Former(语义分割)


(3)具身智能(Embodied AI + 大模型)

视觉backbone:

  • SigLIP

  • DINOv2

  • ViT-L / ViT-H

  • SAM2(mask-aware reasoning)

前端检测可选:

  • YOLO-World(支持开放词汇检测)

  • DINO-DETR

2 语义分割Semantic Segmentation

语义分割将图片中的每个像素分类到对应的类别。

目前主流使用Mask2Former。

3 序列模型

目标参数随时间变化而变化。典型例子量化模型,股价预测。

建模:在时间t观察到,那么得道T个不独立的随机变量,条件概率展开

对条件概率建模,其中f是对见过的数据建模,亦称自回归模型。

自回归模型计算方法有:

(1)马尔科夫假设

(2)潜变量模型

相关推荐
晚风吹长发几秒前
初步了解Linux中的POSIX信号量及环形队列的CP模型
linux·运维·服务器·数据结构·c++·算法
EnglishJun1 分钟前
数据结构的学习(五)---树和二叉树
数据结构·学习·算法
&星痕&4 分钟前
人工智能:深度学习:1.pytorch概述(1)
人工智能·深度学习
OpenLoong 开源社区8 分钟前
合作官宣 | 技术协同新标杆!openKylin 适配具身智能人形机器人计划正式启动
人工智能·机器人·开源
新新学长搞科研10 分钟前
【CCF主办 | 高认可度会议】第六届人工智能、大数据与算法国际学术会议(CAIBDA 2026)
大数据·开发语言·网络·人工智能·算法·r语言·中国计算机学会
近津薪荼11 分钟前
优选算法——前缀和(1):一维前缀和
c++·学习·算法
多恩Stone12 分钟前
【3D-AICG 系列-2】Trellis 2 的O-voxel (上) Shape: Flexible Dual Grid
人工智能·python·算法·3d·aigc
梵刹古音2 小时前
【C语言】 字符数组相关库函数
c语言·开发语言·算法
Niuguangshuo9 小时前
深入解析Stable Diffusion基石——潜在扩散模型(LDMs)
人工智能·计算机视觉·stable diffusion
迈火9 小时前
SD - Latent - Interposer:解锁Stable Diffusion潜在空间的创意工具
人工智能·gpt·计算机视觉·stable diffusion·aigc·语音识别·midjourney