IoU 到全景分割:Maths, CS  AI Compendium 中目标检测与分割的完整技术指南 IoU 到全景分割Maths, CS AI Compendium 中目标检测与分割的完整技术指南【免费下载链接】maths-cs-ai-compendiumBecome a cracked AI/ML researcher/engineer with this unconventional textbook covering maths, computing, and ML with intuition.项目地址: https://gitcode.com/GitHub_Trending/mat/maths-cs-ai-compendium对象检测要回答图中有哪些物体、它们在哪里分割则要回答每个像素属于哪个物体或类别——这正是 Maths, CS AI Compendium 第 08 章计算机视觉部分中从 卷积网络 走向实用视觉系统的核心一步。本文系统讲解 IoU、mAP、NMS 等评估机制R-CNN 系列、YOLO、SSD、RetinaNet 等检测器架构FCN、U-Net、DeepLab、Mask R-CNN 等分割模型并给出三段可直接运行的 JAX 实现IoU/NMS、RPN 锚框、1D U-Net。读完后你将掌握检测与分割任务从评估指标到网络设计再到从零实现的完整技术链路。任务层级从分类到分割的空间理解阶梯第 02 讲卷积网络中的图像分类回答这张图里有什么。对象检测提出了更困难的问题这张图里有哪些物体它们在哪里分割则更进一步哪些像素属于哪个物体或类别这三者构成了空间理解精度逐级提升的层级对象检测模型的输出是一组边界框bounding box每个框由四个坐标左上角 $x, y$、宽、高定义并附带一个类别标签和置信度分数。单张图中可能包含零个、一个或数百个来自多个类别的物体。分割为每个像素分配标签语义分割关心类别实例分割还要区分个体。这一层级关系决定了评估与架构设计检测器输出稀疏的框分割器输出稠密的像素级图两者的指标体系mAP 与像素级 IoU/PQ和计算范式回归与密集分类也随之不同。检测评估基石IoU 与 TP/FP/FN**Intersection over UnionIoU交并比**衡量预测框与真实框ground truth的匹配程度——重叠面积除以并集面积$$\text{IoU} \frac{\text{Area of Intersection}}{\text{Area of Union}}$$IoU 为 1 表示完全重叠为 0 表示毫无重叠。正确检测的标准阈值是 IoU $\geq 0.5$更严格的场景会使用 0.75、0.9。在此基础上定义三类检测结果与 梯度机器学习中的精确率/召回率是同一套概念类型定义True Positive (TP)与某个 ground truth 框 IoU 超过阈值、且类别正确False Positive (FP)未匹配到任何 ground truth 的预测框False Negative (FN)没有任何预测框与之匹配的 ground truth 物体指标体系AP 与 mAP**Average PrecisionAP**用单个数字概括某一类的检测质量将该类所有检测按置信度排序在每个排序位置计算精确率与召回率再取精确率-召回率曲线下面积$$\text{AP} \int_0^1 p(r) , dr$$实践中曲线会做插值处理在每一个召回率水平上精确率被设为所有召回率 $\geq r$ 处的最大精确率。这使得曲线平滑且单调递减。**Mean Average PrecisionmAP**对全部类别的 AP 取平均是检测器的通用榜单指标mAP0.5使用 IoU 阈值 0.5。mAP[.5:.95]COCO 标准在 0.5 到 0.95 之间以 0.05 为步长取 10 个 IoU 阈值分别计算 mAP 再平均同时奖励检测得全与定位得准两个能力。Non-Maximum Suppression去除重复检测模型对同一物体往往会预测出多个重叠框。**NMS非极大值抑制**的处理方式是保留置信度最高的框删除所有与它 IoU 超过阈值的其余框且逐类别应用在模型产生原始预测之后执行。以下实现直接从文档的 Coding Task 1 继承基于 JAX 从零实现 IoU 与 NMS 并可视化结果import jax.numpy as jnp import matplotlib.pyplot as plt import matplotlib.patches as patches def compute_iou(box1, box2): Compute IoU between two boxes [x1, y1, x2, y2]. x1 jnp.maximum(box1[0], box2[0]) y1 jnp.maximum(box1[1], box2[1]) x2 jnp.minimum(box1[2], box2[2]) y2 jnp.minimum(box1[3], box2[3]) intersection jnp.maximum(0, x2 - x1) * jnp.maximum(0, y2 - y1) area1 (box1[2] - box1[0]) * (box1[3] - box1[1]) area2 (box2[2] - box2[0]) * (box2[3] - box2[1]) union area1 area2 - intersection return intersection / (union 1e-6) def nms(boxes, scores, iou_threshold0.5): Non-Maximum Suppression. order jnp.argsort(-scores) # sort by descending confidence keep [] remaining list(range(len(scores))) order_list order.tolist() while order_list: idx order_list[0] keep.append(idx) order_list order_list[1:] new_order [] for j in order_list: iou compute_iou(boxes[idx], boxes[j]) if iou iou_threshold: new_order.append(j) order_list new_order return keep # Example: overlapping detections of the same object boxes jnp.array([ [50, 60, 150, 160], # high confidence [55, 65, 155, 165], # overlapping duplicate [52, 58, 148, 158], # overlapping duplicate [200, 100, 300, 200], # different object [205, 105, 305, 205], # overlapping duplicate ]) scores jnp.array([0.95, 0.80, 0.70, 0.90, 0.60]) keep nms(boxes, scores, iou_threshold0.5) fig, axes plt.subplots(1, 2, figsize(14, 5)) colors [#3498db, #e74c3c, #27ae60, #9b59b6, #f39c12] for ax, title, indices in zip(axes, [Before NMS, After NMS], [range(len(boxes)), keep]): ax.set_xlim(0, 400); ax.set_ylim(0, 300) ax.set_aspect(equal); ax.invert_yaxis() ax.set_title(title) for i in indices: b boxes[i] rect patches.Rectangle((b[0], b[1]), b[2]-b[0], b[3]-b[1], linewidth2, edgecolorcolors[i], facecolornone) ax.add_patch(rect) ax.text(b[0], b[1]-5, f{scores[i]:.2f}, colorcolors[i], fontsize10) plt.tight_layout(); plt.show() print(fKept {len(keep)} of {len(boxes)} boxes after NMS)这段代码值得注意的实现细节compute_iou用jnp.maximum(0, ...)保证无重叠时交集为 0分母加1e-6防止除零nms用jnp.argsort(-scores)按置信度降序贪心保留凡与已保留框 IoU 达到阈值的候选一律剔除。两阶段检测器R-CNN 家族的演进两阶段检测器先提出候选区域proposal再对每个候选做分类与回归修正。这条路线经历了三次关键迭代R-CNN准确但极慢R-CNNGirshick et al., 2014是第一个成功的深度学习检测器。它使用经典算法 selective search 提出约 2,000 个候选区域把每个区域变形warp到固定尺寸后分别送入 CNN最后用 SVM 分类SVM 见第 06 章经典机器学习。准确但每张图要跑 2,000 次 CNN极其缓慢。Fast R-CNN共享特征 RoI PoolingFast R-CNNGirshick, 2015消除了这种冗余对整个图像只跑一次 CNN得到一张共享特征图然后用 **RoI poolingRegion of Interest pooling**从特征图中提取每个候选区域的特征。RoI pooling 的原理是把特征图上任意大小的区域划分成网格对每个网格单元做 max-pooling得到固定尺寸的输出。由于昂贵的 CNN 计算只发生一次速度大幅提升。Faster R-CNNRPN 自举候选区域Faster R-CNNRen et al., 2015用区域提议网络RPN, Region Proposal Network彻底摆脱外部候选算法。RPN 是一个架在共享特征图上的小型 CNN在每个位置滑窗预测 $k$ 个候选对应每个锚框 anchor box各一个。锚框是预定义在每个特征图空间位置上的边界框覆盖不同尺度与长宽比例如 3 个尺度 × 3 个长宽比 每位置 9 个锚框。RPN 为每个锚框预测两件事objectness 分数前景物体 vs 背景坐标偏移量把锚框修正为更紧凑的候选框。这种参数化让回归问题更容易网络不必预测绝对坐标而是对合理的初始框做小幅调整。锚框偏移量的参数化为$$t_x \frac{x - x_a}{w_a}, \quad t_y \frac{y - y_a}{h_a}, \quad t_w \log\frac{w}{w_a}, \quad t_h \log\frac{h}{h_a}$$其中 $(x, y, w, h)$ 是预测框的中心与尺寸$(x_a, y_a, w_a, h_a)$ 是锚框。对宽高取对数变换保证预测框尺寸恒为正并使回归尺度不变。训练时 Faster R-CNN 使用多任务损失类别标签的交叉熵损失见第 05 章信息论加框回归的Smooth L1 损失。Smooth L1 对离群值比 L2 更不敏感$$\text{smooth}_{L1}(x) \begin{cases} 0.5x^2 \text{if } |x| 1 \ |x| - 0.5 \text{otherwise} \end{cases}$$下面是一段简化版 RPN 实现继承自文档 Coding Task 2给定特征图在多个尺度与长宽比下生成锚框并预测 objectness 分数与框偏移import jax import jax.numpy as jnp import matplotlib.pyplot as plt import matplotlib.patches as patches def generate_anchors(feature_h, feature_w, stride, scales, ratios): Generate anchor boxes for each position on the feature map. anchors [] for y in range(feature_h): for x in range(feature_w): cx (x 0.5) * stride cy (y 0.5) * stride for s in scales: for r in ratios: w s * jnp.sqrt(r) h s / jnp.sqrt(r) anchors.append([cx - w/2, cy - h/2, cx w/2, cy h/2]) return jnp.array(anchors) def rpn_forward(feature_map, params): Simplified RPN: predicts objectness and box offsets per anchor. H, W, C feature_map.shape n_anchors params[cls_w].shape[1] # Slide a 1x1 conv over the feature map (simplified) cls_scores feature_map.reshape(-1, C) params[cls_w] # (H*W, n_anchors) box_offsets feature_map.reshape(-1, C) params[reg_w] # (H*W, n_anchors*4) cls_scores jax.nn.sigmoid(cls_scores) return cls_scores.ravel(), box_offsets.reshape(-1, 4) # Setup feature_h, feature_w, channels 4, 4, 16 stride 16 # each feature map cell covers 16x16 pixels scales [32, 64, 128] ratios [0.5, 1.0, 2.0] n_anchors_per_pos len(scales) * len(ratios) key jax.random.PRNGKey(42) k1, k2, k3 jax.random.split(key, 3) feature_map jax.random.normal(k1, (feature_h, feature_w, channels)) params { cls_w: jax.random.normal(k2, (channels, n_anchors_per_pos)) * 0.01, reg_w: jax.random.normal(k3, (channels, n_anchors_per_pos * 4)) * 0.01, } anchors generate_anchors(feature_h, feature_w, stride, scales, ratios) scores, offsets rpn_forward(feature_map, params) print(fFeature map: {feature_h}x{feature_w}, stride{stride}) print(fAnchors per position: {n_anchors_per_pos}) print(fTotal anchors: {len(anchors)}) print(fObjectness scores shape: {scores.shape}) print(fBox offsets shape: {offsets.shape}) # Visualise anchors for one position fig, ax plt.subplots(figsize(6, 6)) img_size feature_h * stride ax.set_xlim(0, img_size); ax.set_ylim(0, img_size) ax.invert_yaxis(); ax.set_aspect(equal) pos_idx feature_h // 2 * feature_w feature_w // 2 # centre position colors [#3498db, #e74c3c, #27ae60] for i, s in enumerate(scales): for j, r in enumerate(ratios): idx pos_idx * n_anchors_per_pos i * len(ratios) j a anchors[idx] rect patches.Rectangle((a[0], a[1]), a[2]-a[0], a[3]-a[1], linewidth1.5, edgecolorcolors[i], facecolornone, linestyle[--, -, :][j]) ax.add_patch(rect) ax.scatter([img_size/2], [img_size/2], cred, s50, zorder5) ax.set_title(fAnchors at centre position\n3 scales × 3 ratios {n_anchors_per_pos}) ax.grid(True, alpha0.3) plt.tight_layout(); plt.show()从源码结构看锚框生成公式与正文公式严格对应以特征图位置 $(x, y)$ 映射回原图坐标 $(x{}0.5)\cdot stride$ 为锚点宽度取 $s\sqrt{r}$、高度取 $s/\sqrt{r}$从而在保持尺度 $s$ 的前提下调整长宽比 $r$。rpn_forward用两次矩阵乘法模拟 1×1 卷积滑窗输出形状(H*W*9,)的 objectness 分数与(H*W*9, 4)的框偏移——正好是 RPN 双头结构的简化体现。FPN解决多尺度检测的骨干组件**Feature Pyramid NetworksFPN, Lin et al., 2017**针对多尺度问题构建一条带横向连接的自顶向下通路把高层语义与低层空间细节融合主干网络产生多个尺度的特征图每过一个 pooling 层分辨率减半即自底向上通路FPN 增加自顶向下通路每一层接收上一层上采样的特征通过横向 1×1 卷积与对应的自底向上层合并。结果是每一层金字塔都同时具备强语义与良好空间分辨率小目标从高分辨率层检测大目标从低分辨率层检测。FPN 如今已是绝大多数现代检测架构的标准组件。单阶段检测器一次前向完成检测单阶段检测器完全跳过候选提议阶段一次前向同时预测类别与边界框。速度更快历史上精度略逊于两阶段——直到 focal loss 弥合了差距。YOLO 家族YOLOYou Only Look Once, Redmon et al., 2016把图像划分为 $S \times S$ 网格每个网格单元预测 $B$ 个边界框与 $C$ 个类别概率。若某个物体的中心落在某网格单元内则由该单元负责检测它。由于整个检测就是无候选阶段的一次前向YOLO 极快。后续版本持续演进版本关键改进YOLOv2引入锚框、batch normalisation、多尺度训练YOLOv3使用 FPN在三个尺度上预测YOLOv4–v8更好的主干、路径聚合网络PANet、马赛克数据增强训练时拼接四张图以增加上下文多样性SSD 与 RetinaNet多尺度与焦点损失SSDSingle Shot MultiBox Detector, Liu et al., 2016在主干内部多个特征图尺度上预测每个尺度配锚框早期高分辨率特征图检测小目标后期低分辨率图检测大目标。SSD 比 Faster R-CNN 更快且精度有竞争力。RetinaNetLin et al., 2017找到了单阶段检测器的核心病灶——类别不平衡绝大多数锚框对应背景产生的大量易分类负样本主导了损失淹没了稀有正样本的梯度。Focal loss通过下调易样本权重解决该问题$$\text{FL}(p_t) -\alpha_t (1 - p_t)^\gamma \log(p_t)$$其中 $p_t$ 是对正确类别的预测概率。当模型自信且正确$p_t$ 高时$(1-p_t)^\gamma$ 很小易负样本的损失贡献被压低超参 $\gamma$通常取 2控制降权强度。$\gamma 0$ 时 focal loss 退化为标准交叉熵。借助 focal lossRetinaNet 以单阶段的速度达到了与两阶段检测器相当的精度。无锚框检测FCOS、CenterNet、CornerNet无锚框anchor-free检测彻底移除锚框减少超参调优、简化流程FCOSFully Convolutional One-Stage, Tian et al., 2019在特征图的每个空间位置预测该位置到最近边界框四条边左、上、右、下的距离外加类别标签。centerness 分数对远离物体中心的预测降权提升检测质量多尺度由 FPN 承担。CenterNetZhou et al., 2019把物体视为点预测一张热图heatmap峰值对应物体中心再在每个峰值处回归宽高——检测变成了关键点估计。优雅且无锚框但需要精细的热图后处理。CornerNet把物体视为一对角点左上与右下预测两张热图各对应一种角点用**关联嵌入associative embedding**把对应的角点配对接成边界框无需锚框即可处理任意形状物体。语义分割给每个像素一个类别语义分割为图像中每个像素分配类别标签输出稠密的像素级图。例如街景中每个像素被标为道路、人行道、汽车、行人、建筑、天空等。FCN把分类 CNN 变成分割网络**Fully Convolutional NetworksFCN, Long et al., 2015**把分类 CNN 改造为分割网络的关键动作把全连接层替换为卷积层使网络输出空间特征图而非单个类别再通过上采样转置卷积或双线性插值把输出恢复到输入分辨率来自浅层的 skip connection 补回下采样丢失的空间细节。**转置卷积transposed convolution又称 deconvolution**是卷积的上采样对偶步长卷积缩小空间维度转置卷积扩大它们——它先在输入元素之间插入零再做标准卷积等价于学习如何上采样。U-Net对称编码器-解码器加全级 skip 连接U-NetRonneberger et al., 2015引入对称的编码器-解码器架构并在每一级都有 skip 连接编码器收缩路径空间分辨率降低、通道数增加与分类 CNN 的下采样过程完全一致解码器扩展路径上采样回到全分辨率Skip 连接在每个层级把编码器特征图与解码器特征图拼接向解码器提供精细空间细节。高层语义与低层细节的组合产生锐利、准确的分割边界。U-Net 最初为生物医学图像分割设计训练数据稀缺场景此后成为众多后续模型的基础包括潜扩散模型中的 U-Net。DeepLab空洞卷积与 ASPP 多尺度上下文DeepLabChen et al., 2014–2018为分割带来两项关键创新空洞dilated卷积ASPP 的基础在标准卷积的滤波器元素之间插入间隙由膨胀率 $r$ 控制。膨胀率 $r$ 的 3×3 滤波器具有 $(2r1)\times(2r1)$ 的感受野却只使用 9 个参数——无需下采样即可多尺度捕捉上下文保住空间分辨率。Atrous Spatial Pyramid PoolingASPP并行应用多组不同膨胀率的空洞卷积如 1、6、12、18拼接结果后用 1×1 卷积融合。ASPP 同时捕获多尺度上下文精神类似于Inception 模块多分支并行卷积后拼接只是用膨胀率代替了不同卷积核大小。DeepLab 还以条件随机场CRF第 05 章作为后处理步骤精化分割边界鼓励空间相近、颜色相似的像素共享同一标签。实例分割与全景分割Mask R-CNN 与 PQ实例分割结合检测与分割识别每个独立物体实例并为每个实例产生像素级 mask。场景中的两辆车会得到两个独立 mask而不是笼统地都标car。Mask R-CNNHe et al., 2017在 Faster R-CNN 之上增加一个小型分割头为每个检测到的物体预测二值 mask架构即 Faster R-CNN mask 分支mask 分支取 RoI-pooled 特征按类别输出 $m \times m$ 二值 mask使用RoIAlign代替 RoI pooling在精确采样的点上做双线性插值而非量化到网格单元避免了量化造成的空间错位。这一小改动显著提升了 mask 质量多任务损失训练分类损失 框回归损失 mask 损失逐像素二元交叉熵。mask 分支对每一类独立预测 mask但只使用预测类别对应的那一个——把 mask 预测与分类解耦两者都受益。**全景分割panoptic segmentation**把语义分割与实例分割统一为单一任务每个像素同时获得类别标签语义与实例 ID实例针对 car、人这类可数的 thing 类别。stuff 类别天空、道路、草地是非定形区域、无实例可数只获得语义标签。**Panoptic QualityPQ**指标将其分解为分割质量匹配片段的平均 IoU与识别质量匹配片段的 F1 分数$$\text{PQ} \underbrace{\frac{\sum_{(p,g) \in \text{TP}} \text{IoU}(p,g)}{|\text{TP}|}}{\text{SQ}} \times \underbrace{\frac{|\text{TP}|}{|\text{TP}| \frac{1}{2}|\text{FP}| \frac{1}{2}|\text{FN}|}}{\text{RQ}}$$实时分割BiSeNet 与 DDRNet自动驾驶与增强现实等应用对延迟预算极其敏感通常每帧 30 毫秒以内实时分割因此至关重要。BiSeNetBilateral Segmentation Network, Yu et al., 2018使用两条并行路径空间路径用宽而浅的层保空间细节上下文路径用深而窄的层捕语义两者输出融合兼顾速度与精度。DDRNetDeep Dual-Resolution Network, Hong et al., 2021全程维持两个不同分辨率的分支并在它们之间反复交换信息高分辨率分支保细节低分辨率分支捕全局上下文多个双边融合模块实现双向信息合并。实时分割的总体趋势是避开沉重的编码器-解码器模式改为在整个网络中始终维持足够的空间分辨率以一些精度换取大幅更低的延迟。动手实现1D U-Net 分割训练全流程文档的第三个编程任务用 JAX 实现了一个带 skip 连接的两级 1D U-Net完成一段 1D 信号的二值分割训练完整覆盖数据构造、前向、二元交叉熵损失、jax.jit(jax.grad(...))梯度与 SGD 更新循环import jax import jax.numpy as jnp import matplotlib.pyplot as plt def conv1d_same(x, kernel): 1D convolution with same padding. k len(kernel) pad k // 2 x_pad jnp.pad(x, pad, modeedge) n len(x) out jnp.zeros(n) for i in range(n): out out.at[i].set(jnp.sum(x_pad[i:ik] * kernel)) return out def downsample(x): return x[::2] def upsample(x, target_len): return jnp.interp(jnp.linspace(0, 1, target_len), jnp.linspace(0, 1, len(x)), x) def unet_1d(x, params): Simplified 1D U-Net with 2 encoder/decoder levels. # Encoder e1 jnp.maximum(0, conv1d_same(x, params[enc1])) e1_down downsample(e1) e2 jnp.maximum(0, conv1d_same(e1_down, params[enc2])) e2_down downsample(e2) # Bottleneck bottleneck jnp.maximum(0, conv1d_same(e2_down, params[bottleneck])) # Decoder with skip connections d2_up upsample(bottleneck, len(e2)) d2 jnp.maximum(0, conv1d_same(d2_up e2, params[dec2])) # skip connection d1_up upsample(d2, len(e1)) d1 conv1d_same(d1_up e1, params[dec1]) # skip connection return jax.nn.sigmoid(d1) # Create signal with labelled regions n 128 t jnp.linspace(0, 4 * jpi : 0, n) if False else jnp.linspace(0, 4 * jnp.pi, n) signal jnp.sin(t) 0.5 * jnp.sin(3 * t) labels (signal 0.5).astype(jnp.float32) # binary segmentation target key jax.random.PRNGKey(42) keys jax.random.split(key, 5) params { enc1: jax.random.normal(keys[0], (5,)) * 0.3, enc2: jax.random.normal(keys[1], (5,)) * 0.3, bottleneck: jax.random.normal(keys[2], (3,)) * 0.3, dec2: jax.random.normal(keys[3], (5,)) * 0.3, dec1: jax.random.normal(keys[4], (5,)) * 0.3, } def loss_fn(params, signal, labels): pred unet_1d(signal, labels) return -jnp.mean(labels * jnp.log(pred 1e-7) (1 - labels) * jnp.log(1 - pred 1e-7))注意原文档此处unet_1d的 skip 连接写为加法式d2_up e2而 2D 版 U-Net 的 skip 是通道维拼接——这是 1D 教学简化的必然选择理解时应区分拼接保细节与相加注入细节两种实现意图。训练循环如下最终输出损失与像素准确率grad_fn jax.jit(jax.grad(loss_fn)) lr 0.05 for step in range(500): grads grad_fn(params, signal, labels) params {k: params[k] - lr * grads[k] for k in params} pred unet_1d(signal, params) fig, axes plt.subplots(3, 1, figsize(12, 7), sharexTrue) axes[0].plot(t, signal, color#3498db, linewidth1.5) axes[0].set_title(Input Signal); axes[0].set_ylabel(Value) axes[1].fill_between(t, 0, labels, alpha0.3, color#27ae60) axes[1].set_title(Ground Truth Labels); axes[1].set_ylabel(Label) axes[2].plot(t, pred, color#e74c3c, linewidth1.5) axes[2].fill_between(t, 0, (pred 0.5).astype(float), alpha0.2, color#e74c3c) axes[2].set_title(U-Net Prediction); axes[2].set_ylabel(Probability) axes[2].set_xlabel(t) plt.tight_layout(); plt.show() print(fFinal loss: {loss_fn(params, signal, labels):.4f}) print(fPixel accuracy: {jnp.mean((pred 0.5) labels):.2%})小结一条从指标到架构的完整技术链本文沿 Maths, CS AI Compendium 第 08 章第 03 讲的主线把检测与分割串成一条可验证的技术链评估层IoU → TP/FP/FN → AP/mAP含 COCO 的 mAP[.5:.95]→ NMS 后处理两阶段检测R-CNN 的冗余 → Fast R-CNN 的共享特征 RoI pooling → Faster R-CNN 的 RPN、锚框参数化与 Smooth L1 回归多尺度FPN 的自顶向下金字塔成为两代架构的公共组件单阶段检测YOLO 网格化预测 → SSD 多尺度 → RetinaNet 的 focal loss 解决类别不平衡 → FCOS/CenterNet/CornerNet 无锚框化分割FCN 全卷积化 → U-Net 对称编码器-解码器 → DeepLab 空洞卷积/ASPP/CRF → Mask R-CNN 实例级 maskRoIAlign→ PQ 度量的全景分割 → BiSeNet/DDRNet 实时化动手层三段 JAX 代码IoU/NMS、RPN 锚框、1D U-Net 训练把每个核心机制落到可运行、可可视化的实现。检测与分割的后续演进——Vision Transformer 主干、扩散模型生成——见同章的第 04 讲视觉 Transformer 与生成它们直接复用本文中的 FPN、检测头与 U-Net 等基础构件。【免费下载链接】maths-cs-ai-compendiumBecome a cracked AI/ML researcher/engineer with this unconventional textbook covering maths, computing, and ML with intuition.项目地址: https://gitcode.com/GitHub_Trending/mat/maths-cs-ai-compendium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考