快速上手大模型:深度学习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)潜变量模型

相关推荐
baby_hua几秒前
20251011_Pytorch深度学习(快速预览)
人工智能·pytorch·深度学习
natide1 分钟前
词汇/表达差异-1-编辑距离-莱文斯坦距离-Levenshtein
人工智能·深度学习·自然语言处理·知识图谱
Cx330❀4 分钟前
《C++ 动态规划》第001-002题:第N个泰波拉契数,三步问题
开发语言·c++·算法·动态规划
LYFlied5 分钟前
【每日算法】LeetCode 114. 二叉树展开为链表:从树结构到线性结构的优雅转换
数据结构·算法·leetcode·链表·面试·职场和发展
小白狮ww10 分钟前
abaqus 算例教程:考虑动水压力的 koyna 地震非线性动力响应分析
人工智能·深度学习·机器学习·abaqus·材料科学·工程模拟·混凝土抗震分析
毕设源码-钟学长10 分钟前
【开题答辩全过程】以 基于Spark机器学习算法的体育新闻智能分类系统设计与实现为例,包含答辩的问题和答案
算法·机器学习·spark
天勤量化大唯粉13 分钟前
基于距离的配对交易策略:捕捉价差异常偏离的均值回归机会(天勤量化代码实现)
android·开发语言·python·算法·kotlin·开源软件·策略模式
智航GIS13 分钟前
ArcGIS大师之路500技---036通俗易懂讲解克里金法
人工智能·算法·arcgis
拼好饭和她皆失15 分钟前
逆元,除法同余原理
算法·逆元·除法同余原理
小白狮ww16 分钟前
当 OCR 模型开始「理解整页文档」:HunyuanOCR 的端到端之路
人工智能·深度学习·机器学习·ocr·文字识别·文档处理·腾讯混元