\documentclass[a4paper]{article}

% Basic packages
\usepackage[fontset=fandol]{ctex}
\usepackage{amsmath, amssymb}
\usepackage{graphicx}
\usepackage[margin=2.5cm]{geometry}
\usepackage[most]{tcolorbox}
\usepackage{etoolbox}
\usepackage{listings}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{subcaption}
\usepackage{float}
\usepackage{tikz}
\usetikzlibrary{positioning}
\IfFileExists{pgfplots.sty}{
    \usepackage{pgfplots}
    \pgfplotsset{compat=1.18}
}{}

% Highlight boxes
\newtcolorbox{knowledgebox}[1]{
    enhanced, colback=blue!5!white, colframe=blue!75!black, colbacktitle=blue!75!black,
    coltitle=white, fonttitle=\bfseries, title=#1, attach boxed title to top left={yshift=-2mm, xshift=2mm},
    boxrule=1pt, sharp corners
}

\newtcolorbox{importantbox}[1]{
    enhanced, colback=yellow!10!white, colframe=yellow!80!black, colbacktitle=yellow!80!black,
    coltitle=black, fonttitle=\bfseries, title=#1, sharp corners
}

\newtcolorbox{warningbox}[1]{
    enhanced, colback=red!5!white, colframe=red!75!black, colbacktitle=red!75!black,
    coltitle=white, fonttitle=\bfseries, title=#1, sharp corners
}

% Listings
\lstset{
    language=Python,
    basicstyle=\ttfamily\small,
    keywordstyle=\color{blue},
    stringstyle=\color{red!60!black},
    commentstyle=\color{green!60!black},
    breaklines=true,
    frame=single,
    numbers=left,
    numberstyle=\tiny\color{gray},
    captionpos=b,
    extendedchars=false
}

% Front-page metadata
\newcommand{\notetitle}{CS231N Lecture 9: Object Detection and Image Segmentation}
\newcommand{\noteauthors}{基于 Ehsan Adeli 授课内容整理}
\newcommand{\notedate}{2025}
\newcommand{\videochannel}{Stanford University}
\newcommand{\videopublishdate}{2025}
\newcommand{\videoduration}{1:13:40}
\newcommand{\videourl}{https://www.youtube.com/watch?v=PTypu6GqEd4}
\newcommand{\videocoverpath}{cover.jpg}
\newcommand{\repourl}{https://github.com/hqhq1025/ai-course-notes}


% Footer with repo info
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[C]{\thepage}
\fancyfoot[R]{\footnotesize\color{gray}\href{\repourl}{AI Course Notes}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}

\begin{document}

\begin{titlepage}
\centering
{\Large 课程笔记\par}
\vspace{1.2cm}
{\huge\bfseries \notetitle\par}
\vspace{0.8cm}
{\large \noteauthors\par}
\vspace{0.3cm}
{\large \notedate\par}
\vspace{1.2cm}

\ifdefempty{\videocoverpath}{
{\small 请在生成笔记时填入视频封面图的本地路径。\par}
}{
\includegraphics[width=0.82\textwidth,height=0.45\textheight,keepaspectratio]{\videocoverpath}\par
}

\vfill
\begin{tcolorbox}[width=0.9\textwidth, colback=black!2!white, colframe=black!60, sharp corners]
\textbf{视频作者/频道}：\videochannel\par
\textbf{发布日期}：\videopublishdate\par
\textbf{视频时长}：\videoduration\par
\ifdefempty{\videourl}{}{
\textbf{视频链接}：\href{\videourl}{\nolinkurl{\videourl}}\par
}
\par
\textbf{项目主页}：\href{\repourl}{\nolinkurl{\repourl}}\par
\end{tcolorbox}
\end{titlepage}

\tableofcontents
\newpage

%% ========== Part 1: ViT 回顾与 Transformer 优化 ==========

\section{引言与 Vision Transformer 回顾}

本节课覆盖计算机视觉中若干核心任务——语义分割、目标检测、实例分割，以及神经网络的可视化与理解方法。在正式进入这些主题之前，讲者首先简要回顾了上节课介绍的 Vision Transformer（ViT）架构。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-001.jpg}
\caption{课程大纲：本节涵盖目标检测、语义分割、实例分割和可视化理解\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第2页。}

\subsection{ViT 架构核心}

Vision Transformer 的核心思想是将图像分割为若干 patch（例如 $S \times S$ 的网格），将每个 patch 通过线性投影映射为 $D$ 维的 token，加上位置编码（positional embedding）后送入标准 Transformer encoder。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-003.jpg}
\caption{ViT 架构：图像被切分为 patch，线性投影为 token，加上位置编码后送入 Transformer 层\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第4页。}

以一张 $224 \times 224 \times 3$ 的输入图像为例，ViT 的具体数据流如下：

\begin{enumerate}
    \item 将图像切分为 $14 \times 14 = 196$ 个大小为 $16 \times 16 \times 3$ 的 patch
    \item 每个 patch 展平后为 $768$ 维向量，通过线性变换映射为 $D$ 维 token
    \item 加上可学习的位置编码（$D$ 维向量），告知 Transformer 每个 patch 的二维空间位置
    \item 将 196 个 token 送入标准 Transformer encoder（自注意力 + MLP）
\end{enumerate}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-016.jpg}
\caption{ViT 的详细流程：$224 \times 224 \times 3$ 图像切分为 $16 \times 16$ patch，线性投影到 $D$ 维，再经过 Transformer 层处理\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第17页。}

\begin{importantbox}{ViT 分类的两种方式}
\begin{enumerate}
    \item \textbf{Class Token}：添加一个可学习的特殊 token 作为输入（$D$ 维），其对应的输出经过线性层映射为类别概率向量
    \item \textbf{全局池化}：对所有输出 token 做 pooling，再映射为类别概率
\end{enumerate}
两种方式均使用 softmax 交叉熵损失进行监督训练。关键点在于：ViT 不使用任何 masking——每个 patch 可以关注所有其他 patch，这与 NLP 中的 causal attention 不同。
\end{importantbox}

\begin{knowledgebox}{ViT 与 CNN 的关键差异}
\begin{itemize}
    \item \textbf{感受野}：CNN 的感受野从局部逐步扩大；ViT 从第一层就具有全局感受野
    \item \textbf{归纳偏置}：CNN 具有平移不变性和局部连接假设；ViT 几乎没有这些先验
    \item \textbf{数据需求}：正因缺少归纳偏置，ViT 通常需要更大规模的数据集才能充分训练
    \item \textbf{可扩展性}：ViT 的自注意力复杂度为 $O(N^2)$（$N$ 为 token 数），而 CNN 为 $O(N)$
\end{itemize}
\end{knowledgebox}

\subsection{现代 Transformer 的优化技巧}

讲者介绍了几种在现代 Transformer 架构中广泛使用的优化手段：

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-008.jpg}
\caption{Transformer 优化技巧汇总：Pre-Norm、RMS Norm、SwiGLU MLP、Mixture of Experts\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第9页。}

\textbf{1. Pre-Norm（前置归一化）}：将 Layer Norm 放在自注意力和 MLP 之前（而非之后），以保留残差连接的恒等映射能力，使训练更加稳定。原始 Transformer 使用 Post-Norm（先计算再归一化），现代模型几乎全部改用 Pre-Norm。

\textbf{2. RMS Norm}：使用均方根归一化代替标准 Layer Norm，省去均值中心化步骤：

$$y_i = \frac{x_i}{\text{RMS}(x)} \cdot \gamma_i, \quad \text{RMS}(x) = \sqrt{\varepsilon + \frac{1}{N}\sum_{i=1}^{N} x_i^2}$$

\begin{itemize}
    \item $x$：输入向量（shape $D$）
    \item $\gamma$：可学习的缩放参数（shape $D$）
    \item $\varepsilon$：防止除零的小常数
\end{itemize}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-022.jpg}
\caption{RMS Norm 的公式与在 Transformer 中的位置：替换 Layer Norm，训练更稳定\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第23页。}

\textbf{3. SwiGLU MLP}：使用门控非线性（gated nonlinearity），引入第三个权重矩阵 $W_3$，在保持参数量不变的情况下（隐藏层维度设为 $8d/3$）学习更高维的非线性表示。

\textbf{4. Mixture of Experts (MoE)}：将 MLP 层替换为多组并行的 MLP ``专家''，通过 router 将不同 token 路由到不同专家。这增加了参数量但不成比例地增加计算量（每次只有部分专家被激活），被现代大型语言模型广泛采用。

\begin{table}[H]
\centering
\begin{tabular}{p{3cm}p{4.5cm}p{5cm}}
\toprule
\textbf{技巧} & \textbf{核心改进} & \textbf{典型效果} \\
\midrule
Pre-Norm & 归一化前置于残差分支 & 训练更稳定，不需要 warm-up \\
RMS Norm & 去掉均值归一化步骤 & 计算更快，精度不降 \\
SwiGLU MLP & 门控非线性，三矩阵设计 & 同参数量下表达力更强 \\
MoE & 多专家并行，稀疏激活 & 参数量大增但计算量可控 \\
\bottomrule
\end{tabular}
\caption{现代 Transformer 四大优化技巧对比}
\end{table}

\begin{warningbox}{MoE 并非免费午餐}
MoE 虽然在理论上可以用固定计算量支撑更大的参数空间，但实际部署中面临几个挑战：(1) 专家负载不均衡可能导致部分专家过载；(2) 模型的总参数量更大，推理时需要加载所有专家权重到内存；(3) 路由策略本身需要精心调优。
\end{warningbox}

\subsection{本章小结}

Vision Transformer 将图像视为 patch 序列，通过自注意力机制全局建模像素间关系。以 $224 \times 224$ 的图像为例，ViT 会生成 196 个 token，每个 token 从第一层起就具有全局感受野。现代 Transformer 通过 Pre-Norm、RMS Norm、SwiGLU 和 MoE 等技巧进一步提升了训练稳定性和模型容量，这些改进构成了当前视觉和语言模型的标准组件。

%% ========== Part 2: 语义分割 ==========

\section{语义分割}

\subsection{任务定义}

语义分割（Semantic Segmentation）的目标是为图像中的\textbf{每个像素}分配一个类别标签。与图像分类（为整张图输出一个标签）不同，语义分割输出与输入图像等尺寸的标签图。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-014.jpg}
\caption{计算机视觉核心任务对比：分类、语义分割、目标检测、实例分割\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第15页。}

\begin{importantbox}{四种核心视觉任务的输出对比}
\begin{itemize}
    \item \textbf{图像分类}：输入一张图，输出一个类别标签（如``猫''）
    \item \textbf{语义分割}：输入一张图，输出每个像素的类别标签（$H \times W$ 的标签图）
    \item \textbf{目标检测}：输入一张图，输出若干边界框 + 类别（$(x,y,w,h,c)$ 列表）
    \item \textbf{实例分割}：目标检测 + 每个实例的像素级掩码
\end{itemize}
\end{importantbox}

\begin{warningbox}{语义分割不区分实例}
语义分割只关心每个像素属于哪个类别（如``狗''、``草地''），\textbf{不区分同类的不同个体}。如果图像中有两只狗，语义分割会把所有``狗像素''标为同一类别，无法区分``狗1''和``狗2''。要区分个体，需要实例分割。
\end{warningbox}

\subsection{朴素方法：滑动窗口}

最朴素的做法是对每个像素取一个局部 patch，用分类网络判断中心像素的类别。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-034.jpg}
\caption{滑动窗口方法：对每个像素提取局部 patch，独立运行分类器\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第35页。}

这种方法的问题非常明显：假设图像大小为 $640 \times 480$，共有 $307{,}200$ 个像素，每个像素都要跑一遍完整网络——计算代价极高，且相邻像素的 patch 高度重叠，存在大量冗余计算。

\subsection{全卷积网络（FCN）}

更高效的方案是使用\textbf{全卷积网络（Fully Convolutional Network, FCN）}：训练一个端到端的网络，输入完整图像，直接输出像素级标签图。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-040.jpg}
\caption{全卷积语义分割：不使用下采样，用纯卷积层直接在原分辨率上预测。输出张量为 $C \times H \times W$，取 argmax 得到标签图\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第41页。}

\begin{knowledgebox}{为什么不能在原分辨率上做所有卷积}
如果所有卷积都在原分辨率（如 $640 \times 480$）上操作，计算量和内存占用会非常大。一个 $3 \times 3$ 的卷积核在 $D$ 个通道上的 FLOPs 为 $O(9 \cdot D^2 \cdot H \cdot W)$——当 $H, W$ 很大时，这是不可接受的。因此实际中需要\textbf{先下采样减少空间分辨率}，再上采样恢复。
\end{knowledgebox}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-019.jpg}
\caption{编码器-解码器架构：先下采样减少空间分辨率（降低计算量），再上采样恢复到原始尺寸\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第20页。}

\begin{importantbox}{FCN 的损失函数}
语义分割的训练目标非常直观：对图像中每个像素独立计算 softmax 交叉熵损失，然后对所有像素取平均：
$$L = \frac{1}{HW}\sum_{i=1}^{H}\sum_{j=1}^{W} \text{CrossEntropy}(\hat{y}_{ij}, y_{ij})$$
其中 $y_{ij}$ 是像素 $(i,j)$ 的真实标签，$\hat{y}_{ij}$ 是预测的类别概率分布。注意：类别不平衡（如大面积背景 vs 小面积物体）会影响训练效果，实际中常使用加权交叉熵或 focal loss。
\end{importantbox}

\subsection{上采样方法}

FCN 的编码部分（下采样）可以使用标准的池化和步长卷积，但解码部分（上采样）需要专门设计。讲者详细介绍了四种上采样方法：

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-021.jpg}
\caption{上采样方法对比：最近邻插值、Bed of Nails、Max Unpooling\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第22页。}

\textbf{1. 最近邻插值}：将低分辨率的值复制到对应的高分辨率区域。简单但产生块状伪影。

\textbf{2. Bed of Nails}：将值放在角落位置，其余填零。

\textbf{3. Max Unpooling}：在编码阶段记录 max pooling 的位置索引，解码时将值放回对应位置。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-045.jpg}
\caption{Max Unpooling 数值示例：$4 \times 4$ 输入经 Max Pooling 变为 $2 \times 2$，记录最大值位置；解码时将值放回原始位置，其余填零\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第46页。}

\textbf{4. 转置卷积（Transpose Convolution）}：\textbf{可学习}的上采样方法。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-050.jpg}
\caption{正常卷积回顾：$3 \times 3$ 卷积核，stride 2，padding 1，将 $4 \times 4$ 输入变为 $2 \times 2$ 输出\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第51页。}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-056.jpg}
\caption{转置卷积：$3 \times 3$ 核，stride 2，将 $2 \times 2$ 输入变为 $4 \times 4$ 输出。每个输入值作为滤波器的权重，重叠区域求和\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第57页。}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-024.jpg}
\caption{转置卷积的 1D 示例：每个输入值乘以滤波器权重生成输出，重叠区域求和\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第25页。}

\begin{warningbox}{转置卷积 $\neq$ 反卷积}
转置卷积（Transpose Convolution）有时被误称为``反卷积''（Deconvolution），但它\textbf{并不是}卷积的数学逆运算。它只是在矩阵运算层面使用了卷积矩阵的转置。滤波器权重是通过训练学习的，而非由下采样过程决定。此外，如果 stride 和 kernel size 选择不当，转置卷积会产生\textbf{棋盘格伪影}（checkerboard artifacts），这在生成模型中是常见问题。
\end{warningbox}

\begin{table}[H]
\centering
\begin{tabular}{p{3cm}p{2cm}p{2.5cm}p{4.5cm}}
\toprule
\textbf{方法} & \textbf{可学习} & \textbf{计算开销} & \textbf{特点} \\
\midrule
最近邻插值 & 否 & 极低 & 简单但有块状伪影 \\
Bed of Nails & 否 & 极低 & 大量零值，信息利用率低 \\
Max Unpooling & 否 & 低 & 保留空间位置信息 \\
转置卷积 & 是 & 中等 & 权重可学习，表达力最强 \\
双线性插值 & 否 & 低 & 平滑，可与卷积配合使用 \\
\bottomrule
\end{tabular}
\caption{五种上采样方法对比}
\end{table}

\subsection{U-Net 架构}

U-Net 是语义分割领域最具影响力的架构之一。其结构呈 U 形：左侧为编码器（下采样），右侧为解码器（上采样），关键创新在于\textbf{跳跃连接（skip connections）}——将编码器各层的特征图直接复制并拼接到解码器对应层。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-026.jpg}
\caption{U-Net 架构：对称的编码器-解码器结构，通过跳跃连接保留高分辨率的空间细节信息\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第27页。}

\begin{importantbox}{U-Net 跳跃连接的作用}
下采样过程中空间信息不可避免地丢失。跳跃连接将编码器的高分辨率特征图直接传递给解码器，使得上采样过程能够恢复精细的边界信息。具体来说：
\begin{itemize}
    \item 编码器浅层特征：包含丰富的空间/边缘信息，但语义信息较弱
    \item 编码器深层特征：包含强语义信息，但空间分辨率低
    \item 跳跃连接让解码器同时获得两者，实现``语义 + 空间''的融合
\end{itemize}
U-Net 至今仍是医学图像分割的主流架构，也是 Stable Diffusion 等扩散模型的核心组件。
\end{importantbox}

\begin{knowledgebox}{U-Net 的历史影响}
U-Net 最初由 Ronneberger 等人于 2015 年发表在 MICCAI，目标是解决医学图像分割中标注稀缺的问题。它的成功不仅限于医学领域：在卫星图像分割、材料缺陷检测、扩散生成模型（如 DDPM、Stable Diffusion）中都作为核心架构出现。截至 2025 年，原论文引用量超过 80,000 次。
\end{knowledgebox}

\subsection{本章小结}

语义分割是像素级分类任务。滑动窗口方法虽然概念直观但计算不可行。全卷积网络（FCN）通过编码器-解码器结构实现端到端训练。上采样方法从简单的插值到可学习的转置卷积，逐步提升了重建质量。U-Net 的跳跃连接设计有效解决了下采样导致的空间信息丢失问题，至今仍被广泛使用。

%% ========== Part 3: 目标检测 ==========

\section{目标检测}

\subsection{从语义分割到目标检测}

语义分割的局限在于：它只能为每个像素分配类别标签，但无法区分同类的不同实例。如果图像中有两只狗，语义分割只会标记所有``狗像素''为同一类，无法区分哪些像素属于哪只狗。要解决这个问题，我们首先需要\textbf{目标检测}——找到每个物体的位置（边界框）和类别。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-030.jpg}
\caption{从语义分割到实例分割：需要先检测独立物体，再为每个物体生成像素级掩码\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第31页。}

\subsection{单物体检测：多任务学习}

对于只含单个物体的图像，目标检测可以简化为一个\textbf{多任务学习}问题：

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-032.jpg}
\caption{单物体检测：CNN 同时输出类别概率（softmax loss）和边界框坐标（L2 loss）\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第33页。}

$$L_{\text{total}} = L_{\text{cls}}(\hat{y}, y) + \lambda \cdot L_{\text{box}}(\hat{b}, b)$$

\begin{itemize}
    \item $L_{\text{cls}}$：softmax 交叉熵损失，用于分类
    \item $L_{\text{box}}$：L2 回归损失，用于预测边界框坐标 $(x, y, h, w)$
    \item $\lambda$：平衡两个损失的权重超参数
\end{itemize}

\begin{knowledgebox}{多任务学习中的损失平衡}
分类损失和回归损失的量纲完全不同（交叉熵 vs L2），因此需要通过 $\lambda$ 来平衡。实践中 $\lambda$ 通常通过验证集调优。另一个常见问题是两个损失的梯度量级差异过大，现代方法会使用 uncertainty weighting 或 gradient normalization 来自动平衡。
\end{knowledgebox}

\subsection{多物体检测的挑战}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-070.jpg}
\caption{多物体检测的问题：不同图像中物体数量不同，网络输出维度无法固定\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第71页。}

\begin{warningbox}{直接回归法不可扩展}
当图像中有多个物体时，网络需要同时输出所有物体的边界框和类别。对于 $N$ 个物体，需要输出 $N \times (4 + C)$ 个数值（4 个坐标 + $C$ 类概率）。但 $N$ 事先未知，且可以很大——这使得直接回归方法不可扩展。解决此问题有两条主要路线：(1) 先提议候选区域，再逐个分类（两阶段方法）；(2) 将图像网格化，每个网格独立预测（单阶段方法）。
\end{warningbox}

\subsection{R-CNN：开创区域提议方法}

面对多物体场景，经典方法是先生成\textbf{候选区域（Region Proposals）}，再对每个区域进行分类。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-080.jpg}
\caption{R-CNN 区域提议：使用 Selective Search 生成约 2000 个候选区域（RoI），每个裁剪缩放到 $224 \times 224$\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第81页。}

\textbf{R-CNN}（Regions with CNN, CVPR 2014）的流程：
\begin{enumerate}
    \item 使用选择性搜索（Selective Search）等算法生成约 2000 个候选区域
    \item 将每个区域裁剪并缩放到 $224 \times 224$ 的固定大小
    \item 用 CNN（如 AlexNet）提取特征向量
    \item 用 SVM 分类器判断类别 + 线性回归器精调边界框
\end{enumerate}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-035.jpg}
\caption{R-CNN 完整流程：区域提议 $\rightarrow$ 裁剪 $\rightarrow$ CNN 特征提取 $\rightarrow$ 分类 + 边界框回归\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第36页。}

\begin{warningbox}{R-CNN 的严重效率问题}
R-CNN 对每个候选区域独立运行完整 CNN——2000 个区域就要跑 2000 次前向传播。在 VGG-16 上处理一张图像需要约 47 秒，完全无法满足实时需求。更严重的是，相邻区域之间存在大量重叠，对应的 CNN 计算也完全重复，极其浪费。
\end{warningbox}

\subsection{Fast R-CNN：共享特征图}

\textbf{Fast R-CNN} 的核心改进：不再对每个区域独立运行 CNN，而是先对\textbf{整张图像运行一次 CNN 得到特征图}，然后在特征图上裁剪对应区域（RoI Pooling），大幅减少重复计算。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-090.jpg}
\caption{Fast R-CNN vs ``Slow'' R-CNN：Fast R-CNN 先在整图上运行一次 backbone CNN，再在特征图上提取每个区域的特征\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第91页。}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-037.jpg}
\caption{Fast R-CNN 的 RoI Pooling：将不同大小的区域特征池化为固定大小\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第38页。}

\begin{importantbox}{RoI Pooling 的工作原理}
RoI Pooling 将特征图上不同大小的区域映射到固定大小的输出（如 $7 \times 7$）：
\begin{enumerate}
    \item 将区域均匀划分为 $7 \times 7$ 的子网格
    \item 每个子网格内做 max pooling
    \item 输出固定为 $D \times 7 \times 7$（$D$ 为特征通道数）
\end{enumerate}
这样无论原始区域大小如何，后续的全连接层都能正常工作。改进版本 \textbf{RoI Align} 使用双线性插值替代硬量化，避免坐标对齐误差。
\end{importantbox}

\subsection{Faster R-CNN：端到端训练}

\textbf{Faster R-CNN} 进一步引入\textbf{区域提议网络（Region Proposal Network, RPN）}，用神经网络替代手工区域提议算法，实现全流程端到端训练：

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-095.jpg}
\caption{RPN 详解：在特征图的每个位置放置锚框，预测物体概率（$1 \times 20 \times 15$）和边界框修正（$4 \times 20 \times 15$）\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第96页。}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-039.jpg}
\caption{RPN 的锚框设计：在 CNN 特征图上滑动多种尺度和长宽比的锚框\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第40页。}

\begin{knowledgebox}{锚框（Anchor Boxes）的设计}
RPN 在特征图的每个空间位置预设 $K$ 种锚框（不同尺度和长宽比的组合）。例如使用 3 种尺度 $\times$ 3 种长宽比 = 9 种锚框。对于 $20 \times 15$ 的特征图，总共有 $20 \times 15 \times 9 = 2{,}700$ 个候选锚框。RPN 为每个锚框预测：
\begin{itemize}
    \item \textbf{物体/背景概率}：该锚框是否包含物体
    \item \textbf{边界框修正量}：$(dx, dy, dw, dh)$ 四个偏移值
\end{itemize}
\end{knowledgebox}

\begin{table}[H]
\centering
\begin{tabular}{p{2.5cm}p{3cm}p{3cm}p{2.5cm}p{2cm}}
\toprule
\textbf{方法} & \textbf{区域提议} & \textbf{特征提取} & \textbf{训练方式} & \textbf{速度} \\
\midrule
R-CNN & Selective Search & 每区域独立CNN & 多阶段 & $\sim$47s/图 \\
Fast R-CNN & Selective Search & 共享特征图 & 端到端 & $\sim$2s/图 \\
Faster R-CNN & RPN (学习) & 共享特征图 & 端到端 & $\sim$0.2s/图 \\
\bottomrule
\end{tabular}
\caption{R-CNN 系列演进：从多阶段到端到端，速度提升超过200倍}
\end{table}

\subsection{YOLO：单阶段目标检测}

\textbf{YOLO（You Only Look Once）}是最具代表性的单阶段检测器，通过一次前向传播同时完成候选框生成和分类。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-100.jpg}
\caption{YOLO 的 $S \times S$ 网格：将整张图像划分为网格，每个网格负责检测中心落在该网格内的物体\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第101页。}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-043.jpg}
\caption{YOLO 的设计思想：将图像划分为 $S \times S$ 网格，每个网格预测 $B$ 个边界框及其置信度和类别概率\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第44页。}

YOLO 的核心设计：
\begin{enumerate}
    \item 将图像划分为 $S \times S$ 的网格（如 $7 \times 7$）
    \item 每个网格单元预测 $B$ 个边界框（含位置、大小、置信度）和 $C$ 个类别概率
    \item 输出张量大小为 $S \times S \times (5B + C)$
    \item 通过阈值化和\textbf{非极大值抑制（Non-Maximum Suppression, NMS）}去除冗余框
\end{enumerate}

\begin{importantbox}{NMS（非极大值抑制）的具体步骤}
当多个网格/锚框都预测到同一物体时，需要 NMS 去重：
\begin{enumerate}
    \item 按置信度排序所有候选框
    \item 选择置信度最高的框，加入最终结果
    \item 删除所有与该框 IoU $>$ 阈值（如 0.5）的其他框
    \item 重复步骤 2--3 直到没有剩余候选框
\end{enumerate}
IoU（Intersection over Union）= 两个框交集面积 / 两个框并集面积。
\end{importantbox}

\begin{knowledgebox}{YOLO 的实际影响与版本演进}
YOLO 至今仍是工业界最常用的目标检测框架。版本演进：
\begin{itemize}
    \item \textbf{YOLOv1 (2016)}：提出基本框架，$7 \times 7$ 网格
    \item \textbf{YOLOv2/v3}：引入锚框、多尺度预测、Darknet backbone
    \item \textbf{YOLOv4/v5}：大量工程优化（CSPNet、Mosaic 增强等）
    \item \textbf{YOLOv8+ (Ultralytics)}：现代化设计，anchor-free，高精度实时检测
\end{itemize}
从 v1 到 v8，检测精度（mAP）提升了 30+ 个百分点，但核心的单阶段设计理念始终不变。
\end{knowledgebox}

\begin{table}[H]
\centering
\begin{tabular}{p{3.5cm}p{3cm}p{3cm}p{3cm}}
\toprule
\textbf{特性} & \textbf{Faster R-CNN} & \textbf{YOLO} & \textbf{DETR} \\
\midrule
阶段数 & 两阶段 & 单阶段 & 单阶段 \\
区域提议 & RPN & 网格化 & Object Queries \\
锚框 & 需要 & 需要（v1-v5） & 不需要 \\
NMS 后处理 & 需要 & 需要 & 不需要 \\
速度 & 中等 & 快 & 中等 \\
小物体检测 & 强 & 弱（v1-v3） & 弱 \\
\bottomrule
\end{tabular}
\caption{三种代表性检测方法对比}
\end{table}

\subsection{DETR：基于 Transformer 的目标检测}

\textbf{DETR（DEtection TRansformer）}（ECCV 2020）是将 Transformer 应用于目标检测的里程碑工作，完全去除了锚框和 NMS 后处理。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-110.jpg}
\caption{DETR 完整架构：CNN backbone 提取特征 $\rightarrow$ Transformer Encoder 编码 $\rightarrow$ Transformer Decoder（带 Object Queries）$\rightarrow$ FFN 预测类别和边界框。训练使用二部图匹配损失\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第111页。}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-047.jpg}
\caption{DETR 的 Object Queries 和输出：每个 Query 经过 Decoder 后预测一个（类别, 边界框）或``无物体''\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第48页。}

DETR 的关键创新在于引入\textbf{Object Queries}和\textbf{二部图匹配（Bipartite Matching）}：

\begin{enumerate}
    \item 用 CNN 将图像转换为 patch token，加上位置编码
    \item Transformer Encoder 对 token 进行自注意力编码
    \item Transformer Decoder 接收一组\textbf{可学习的 Object Queries}（如 100 个）
    \item 每个 Query 通过自注意力和交叉注意力生成输出
    \item 每个输出经 FFN 映射为（类别, 边界框）或``无物体''（$\varnothing$）
    \item 训练时用\textbf{匈牙利算法}在预测和真实框之间做一对一最优匹配
\end{enumerate}

\begin{importantbox}{二部图匹配为什么能替代 NMS}
传统方法中，多个锚框可能预测到同一物体，需要 NMS 去重。DETR 用匈牙利算法强制每个真实物体只匹配一个预测——这从损失函数层面就保证了一对一关系，训练完成后自然不会产生重复预测，因此完全不需要 NMS。这也是 DETR ``End-to-End'' 的核心含义。
\end{importantbox}

\begin{warningbox}{DETR 的已知局限}
\begin{itemize}
    \item \textbf{收敛慢}：原始 DETR 需要 500 个 epoch 才能收敛，是 Faster R-CNN 的 10 倍以上
    \item \textbf{小物体检测弱}：Transformer 对低分辨率特征的处理能力有限
    \item \textbf{Query 数量限制}：如果 Query 数量少于实际物体数量，只会检测出置信度最高的物体
    \item 后续改进（Deformable DETR, DINO-DETR 等）已大幅缓解这些问题
\end{itemize}
\end{warningbox}

\subsection{本章小结}

目标检测经历了从两阶段（R-CNN 系列）到单阶段（YOLO）再到基于 Transformer（DETR）的演进。核心挑战在于：如何在保持高精度的同时高效处理数量未知的多个物体。R-CNN 通过区域提议解决了多物体问题但速度较慢（47s $\rightarrow$ 0.2s）；YOLO 通过网格化预测实现了实时检测；DETR 用 Object Queries 和二部图匹配优雅地回避了锚框设计和 NMS 后处理。

%% ========== Part 4: 实例分割 ==========

\section{实例分割}

\subsection{Mask R-CNN}

实例分割在目标检测的基础上，进一步为每个检测到的物体生成\textbf{像素级掩码}。\textbf{Mask R-CNN}（ICCV 2017）在 Faster R-CNN 的基础上增加了一个掩码预测分支：

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-054.jpg}
\caption{Mask R-CNN：在 Faster R-CNN 的基础上增加掩码预测分支，同时输出类别、边界框和实例掩码\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第55页。}

\begin{enumerate}
    \item 对整张图运行 CNN + RPN 获得区域提议
    \item 对每个区域提取特征（\textbf{RoI Align}，使用双线性插值避免量化误差）
    \item 三个并行输出头：
    \begin{itemize}
        \item \textbf{分类头}：输出类别概率
        \item \textbf{回归头}：精调边界框坐标
        \item \textbf{掩码头}：使用 FCN 输出 $C \times M \times M$ 的二值掩码（$C$ 个类别，$M \times M$ 分辨率）
    \end{itemize}
\end{enumerate}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-055.jpg}
\caption{Mask R-CNN 的检测效果：同时输出类别、边界框和精确的实例掩码\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第56页。}

\begin{importantbox}{Mask R-CNN 的掩码预测机制}
掩码头为\textbf{每个类别}独立预测一个 $M \times M$ 的二值掩码（通常 $M=28$），最终根据分类头的预测选取对应类别的掩码作为输出。这种``分类与掩码解耦''的设计比``直接预测多类掩码''效果更好，因为它避免了类别间的竞争。掩码损失使用逐像素的二值交叉熵（Binary Cross-Entropy）。
\end{importantbox}

\begin{knowledgebox}{从 RoI Pooling 到 RoI Align 的关键改进}
原始 RoI Pooling 需要将浮点坐标量化为整数格点，这引入了最多半个格点的对齐误差。对于分类任务，这种误差可以容忍；但对于掩码预测，\textbf{哪怕一两个像素的偏差都会导致边界不准}。RoI Align 使用双线性插值替代硬量化，在非整数坐标处精确采样，使掩码精度显著提升。这一改进是 Mask R-CNN 成功的关键因素之一。
\end{knowledgebox}

\subsection{Panoptic Segmentation}

讲者还简要提到了\textbf{全景分割（Panoptic Segmentation）}——它统一了语义分割和实例分割：对``可数物体''（人、车、狗）做实例分割，对``不可数区域''（天空、草地、道路）做语义分割，最终输出一张完整的场景理解图。

\begin{table}[H]
\centering
\begin{tabular}{p{3cm}p{3.5cm}p{3.5cm}p{3cm}}
\toprule
\textbf{任务} & \textbf{输出} & \textbf{区分实例} & \textbf{代表方法} \\
\midrule
语义分割 & 每像素类别 & 否 & FCN, U-Net \\
实例分割 & 每实例掩码+类别 & 是（仅物体） & Mask R-CNN \\
全景分割 & 统一场景理解 & 是+语义背景 & Panoptic FPN \\
\bottomrule
\end{tabular}
\caption{三种分割任务对比}
\end{table}

\subsection{本章小结}

实例分割通过在目标检测基础上添加掩码预测，实现了像素级的实例区分。Mask R-CNN 凭借三头并行设计（分类 + 回归 + 掩码）和 RoI Align 的精确采样成为标杆方法。全景分割进一步统一了``物体''和``背景区域''的理解。

%% ========== Part 5: 可视化与理解 ==========

\section{可视化与理解}

理解神经网络的内部工作机制对于模型调试、安全评估和科学发现至关重要。讲者介绍了几种核心的可视化方法，从低层（滤波器权重）到高层（类激活图）逐步深入。

\subsection{滤波器可视化}

最直接的方法是可视化卷积层的滤波器权重。对于第一层（输入为 3 通道 RGB），可以直接将滤波器显示为小图片：

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-060.jpg}
\caption{CNN 第一层滤波器可视化：学到的低层特征包括边缘、颜色、纹理等基本模式\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第61页。}

第一层滤波器的学习结果具有高度一致性——无论在 ImageNet、COCO 还是其他数据集上训练，第一层滤波器几乎总是学到类似的边缘检测器和颜色检测器。这暗示了视觉系统底层特征的``普遍性''。

\begin{warningbox}{深层滤波器难以直接可视化}
只有第一层滤波器（输入通道为 3，可映射为 RGB）能被直观可视化。深层滤波器通常有 64、128 甚至 512 个输入通道，无法直接显示为人眼可理解的图像。对于深层特征的理解，需要借助下面介绍的间接方法。常见的替代策略是可视化每个通道的\textbf{最大激活 patch}——找到训练集中使某个神经元激活值最大的图像区域。
\end{warningbox}

\subsection{显著性图（Saliency Maps）}

显著性图回答一个核心问题：\textbf{哪些像素对分类决策影响最大？}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-130.jpg}
\caption{显著性图的计算流程：先前向传播得到类别得分，再反向传播计算梯度对输入像素的绝对值\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第131页。}

具体方法：计算目标类别得分 $S_c$ 对输入像素 $x_{ij}$ 的梯度：

$$\text{Saliency}_{ij} = \left|\frac{\partial S_c}{\partial x_{ij}}\right|$$

对于 RGB 图像，取三个通道梯度绝对值的最大值（max over RGB channels）。梯度绝对值大的像素意味着：微小改变该像素的值就会显著影响分类得分。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-062.jpg}
\caption{显著性图效果展示：高亮区域精确对应了图像中的目标物体轮廓\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第63页。}

\begin{importantbox}{显著性图的医学应用}
在医学影像分析中，显著性图尤其重要。例如，当网络判断一张 CT 图像``有肿瘤''时，医生需要知道网络关注的是图像的哪个区域。如果网络关注的不是肿瘤区域而是图像伪影或标注信息，就意味着模型学到了\textbf{虚假相关}（spurious correlation）。这种检查在模型部署到临床之前是必须的。
\end{importantbox}

\begin{knowledgebox}{显著性图 vs 梯度方法的改进}
原始显著性图使用原始梯度，容易产生噪声。后续改进包括：
\begin{itemize}
    \item \textbf{SmoothGrad}：多次加噪采样后取梯度平均，降低噪声
    \item \textbf{Integrated Gradients}：沿从基线到输入的路径积分梯度，满足公理性质
    \item \textbf{Guided Backpropagation}：只回传正梯度，得到更清晰的可视化
\end{itemize}
\end{knowledgebox}

\subsection{类激活图（CAM）与 Grad-CAM}

\textbf{CAM（Class Activation Mapping）}利用全局平均池化层的结构特性，将分类得分追溯到最后一个卷积层的空间位置：

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-064.jpg}
\caption{CAM 原理：通过最后一层卷积特征图的加权求和，生成类别特定的空间注意力图\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第65页。}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-065.jpg}
\caption{CAM 效果展示：同一张图像对不同类别（宫殿、穹顶、教堂、祭坛）产生不同的类激活图\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第66页。}

CAM 的局限在于\textbf{只能应用于最后一个卷积层之后紧接全局平均池化的架构}。\textbf{Grad-CAM} 通过使用梯度来计算权重，突破了这一限制，可以应用于任意卷积层：

$$\alpha_k^c = \frac{1}{Z}\sum_i\sum_j \frac{\partial S_c}{\partial A^k_{ij}}$$

$$\text{Grad-CAM}^c = \text{ReLU}\left(\sum_k \alpha_k^c \cdot A^k\right)$$

\begin{itemize}
    \item $A^k$：第 $k$ 个特征图（$H' \times W'$ 的空间分辨率）
    \item $\alpha_k^c$：类别 $c$ 对特征图 $k$ 的重要性权重（梯度的全局平均池化）
    \item $Z = H' \times W'$：空间维度的像素总数
    \item ReLU 确保只保留正向激活（对分类有正贡献的区域）
\end{itemize}

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-067.jpg}
\caption{Grad-CAM 效果：可以应用于任意卷积层，生成不同粒度的类激活热力图\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第68页。}

\begin{warningbox}{Grad-CAM 的解读陷阱}
Grad-CAM 显示的是``哪些区域对分类有贡献''，但不等于``模型理解了这个物体''。模型可能只依赖背景上下文（如看到草地就预测``牛''）而非物体本身的特征。此外，Grad-CAM 的分辨率受限于特征图大小（通常是 $7 \times 7$ 或 $14 \times 14$），无法提供像素级精确的解释。
\end{warningbox}

\subsection{Transformer 的注意力可视化}

对于 Vision Transformer，可视化注意力权重矩阵本身就是天然的``激活图''。自注意力机制计算每对 token 之间的注意力分数，这些分数可以直接映射回图像空间。

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-068.jpg}
\caption{ViT 的注意力可视化：自注意力权重天然反映了网络对图像各区域的关注分布\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第69页。}

\begin{importantbox}{CNN vs Transformer 可解释性对比}
\begin{itemize}
    \item \textbf{CNN}：需要 Grad-CAM 等后处理方法来``反向追踪''模型的关注区域；可视化结果受限于特征图分辨率
    \item \textbf{Transformer}：注意力权重本身就是可解释的——直接反映了哪些 token 对当前决策最重要；不同层、不同注意力头可以分别可视化
\end{itemize}
但要注意：注意力权重高并不严格等于``模型依赖这个区域做决策''。有研究表明，梯度加权的注意力（attention $\times$ gradient）比原始注意力更能反映真实的特征重要性。
\end{importantbox}

\subsection{卷积作为矩阵乘法：理解转置卷积}

讲者还从矩阵运算的角度深入解释了为什么``转置卷积''叫这个名字：

\begin{figure}[H]
\centering
\includegraphics[width=0.95\textwidth]{slides-images/slide-150.jpg}
\caption{卷积可以表示为矩阵乘法 $\vec{x} * \vec{a} = X\vec{a}$。转置卷积就是使用 $X^T$，将小向量映射回大向量\protect\footnotemark}
\end{figure}
\footnotetext{Slides 第151页。}

以 1D 为例，kernel size=3, stride=2, padding=1 的卷积可以表示为：
$$\begin{bmatrix} x & y & z & 0 & 0 & 0 \\ 0 & 0 & x & y & z & 0 \end{bmatrix} \begin{bmatrix} 0 \\ a \\ b \\ c \\ d \\ 0 \end{bmatrix} = \begin{bmatrix} ay + bz \\ bx + cy + dz \end{bmatrix}$$

转置卷积就是使用这个矩阵的\textbf{转置} $X^T$，将 2 维输出映射回 6 维输入空间。

\subsection{本章小结}

神经网络可视化方法从低层（滤波器可视化）到高层（显著性图、CAM/Grad-CAM、注意力图），层层深入地揭示了模型的决策依据。显著性图通过梯度直接反映像素对分类的影响；Grad-CAM 将类别得分追溯到卷积特征图的空间位置；Transformer 的注意力机制天然具备可解释性。这些工具在模型调试、安全验证和医学应用中至关重要。

%% ========== 总结与延伸 ==========

\section{总结与延伸}

\subsection{关键 Takeaways}

\begin{importantbox}{核心要点}
\begin{enumerate}
    \item \textbf{语义分割是像素级分类}：编码器-解码器 + 跳跃连接（U-Net）是经典范式
    \item \textbf{上采样方法的选择很重要}：从不可学习的插值到可学习的转置卷积，表达力逐步增强
    \item \textbf{目标检测的三代方法}：两阶段（R-CNN 系列）$\rightarrow$ 单阶段（YOLO）$\rightarrow$ Transformer（DETR）
    \item \textbf{实例分割 = 检测 + 分割}：Mask R-CNN 中 RoI Align 的精确对齐是关键
    \item \textbf{YOLO 仍是工业首选}：简单、快速、不断迭代，适合实时应用
    \item \textbf{DETR 消除了手工组件}：不需要锚框、不需要 NMS，但训练成本高
    \item \textbf{可视化是信任的基础}：显著性图和 Grad-CAM 不仅是研究工具，更是模型部署前的必要验证手段
    \item \textbf{Transformer 天然可解释}：注意力权重直接反映模型关注区域，但也不能过度解读
\end{enumerate}
\end{importantbox}

\subsection{拓展阅读}

\begin{itemize}
    \item Dosovitskiy et al., \textit{An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale}, ICLR 2021
    \item Long et al., \textit{Fully Convolutional Networks for Semantic Segmentation}, CVPR 2015
    \item Ronneberger et al., \textit{U-Net: Convolutional Networks for Biomedical Image Segmentation}, MICCAI 2015
    \item Girshick et al., \textit{Rich Feature Hierarchies for Accurate Object Detection}, CVPR 2014
    \item Girshick, \textit{Fast R-CNN}, ICCV 2015
    \item Ren et al., \textit{Faster R-CNN: Towards Real-Time Object Detection}, NeurIPS 2015
    \item Redmon et al., \textit{You Only Look Once: Unified, Real-Time Object Detection}, CVPR 2016
    \item Carion et al., \textit{End-to-End Object Detection with Transformers (DETR)}, ECCV 2020
    \item He et al., \textit{Mask R-CNN}, ICCV 2017
    \item Selvaraju et al., \textit{Grad-CAM: Visual Explanations from Deep Networks}, ICCV 2017
    \item Ultralytics YOLO: \url{https://github.com/ultralytics/ultralytics}
    \item Detectron2: \url{https://github.com/facebookresearch/detectron2}
\end{itemize}

\end{document}
