One-stage
直接在 dense grid 上同时做 objectness、box regression 与 class prediction;你完成的主线在这里。
EECS498 · Deep Learning Revisited · 06
分类输出一个 class;检测必须同时回答“有几个、是什么、在哪里”。你完成的一阶段 detector 把一个 feature map 变成密集的 objectness、box offsets 与 class scores。
30-second recall
你实现了 anchors、proposal transform、IoU、prediction head、loss、inference 与 NMS,并保存了 YOLO checkpoint。
Image classifier 把整图压成一个 label,无法表示多对象与位置。Detector 保留 backbone 的空间 grid,让每个位置/anchor 都能提出一个结构化假设。
Implemented in repository:
A5/single_stage_detector.py 的 GenerateAnchor、GenerateProposal、IoU、PredictionNetwork、SingleStageDetector.forward/inference 与 nms。Notebook 保存到 epoch 49,末尾 epoch loss 0.1430,并有 yolo_detector.pt。
Detection 把“一个输入对应一个答案”改成“空间中每个候选位置都提出一个带置信度的结构化答案,再去重”。
Anchor 是预定义 reference box;网络不从零预测绝对坐标,而是预测相对中心/尺度的 offset。IoU 把 proposal 与 ground truth 配对,正负 anchor 决定哪些输出接受监督。
Your code · 2022
A5/single_stage_detector.py · PredictionNetwork.forward()
preds = self.pred_layer(features)
conf_scores = torch.sigmoid(preds[:, :A*5:5])
offsets = preds[:, :5*A].view(B, A, 5, H, W)[:, :, 1:]
class_scores = preds[:, 5*A:]
直接在 dense grid 上同时做 objectness、box regression 与 class prediction;你完成的主线在这里。
先用 RPN 提 proposals,再对较少候选做 ROI classification/regression,分开“哪里可能有物体”与“是什么”。
Repository completion boundary:
A5/two_stage_detector.py 只有 proposal layer 初始化出现差分,多个 forward/inference TODO 仍为 pass;win22/A4 两份 detector 与 zip skeleton 无实质差分。本课用它们解释两阶段结构,但不声称是已完成实现。
相邻 anchors 常对同一物体产生高分重叠框。NMS 按 score 取最高框,再删除 IoU 超阈值的候选;它不是训练出的 reasoning,而是把冗余 dense hypotheses 变成最终集合的后处理规则。
Common misconception:class score 高不等于 box 准。Detection loss 必须分别监督 objectness、localization 与 class;最终排序还可能组合这些信号。
DETR 用 set prediction 与 bipartite matching 减少 anchors/NMS 依赖,但 structured output 的核心问题没变:模型必须把 dense representation 转成数量可变、带位置的对象集合。
2×9×7×7=882;每张图 441 个,之后还要结合 class scores 与 NMS。
每个 anchor 提供局部 reference 与尺度,目标变成相对的小修正,分布更稳定且可在各 grid location 共享预测头。
它可能错误删除另一个真实类别;class-aware NMS 会分开类别处理。这说明后处理规则也是模型行为的一部分。
Classification 回答“图中是什么”;detection 还要回答“有几个、各在哪里”。因此每个 anchor/candidate 同时需要 objectness、class logits 与 box geometry。
feature map [N,C,H,W]
A anchors per location
objectness logits [N,H,W,A]
class logits [N,H,W,A,K]
box offsets (tx,ty,tw,th) [N,H,W,A,4]若 H=W=7、A=3,就有 147 个 dense candidates;这不是 147 个 objects,而是 147 个待筛选 hypotheses。
同一 object 附近多个 anchors 往往都给高分,输出会包含大量重叠重复 detections;分类正确也不等于结构化输出可用。
Repository 的 one-stage detector 路径有完成实现;two-stage/Faster R-CNN 部分保留未完成区域。课程用它解释 proposal 思想,但不把 skeleton 误标为用户完成代码。
每张图有可变数量 objects,需要在 spatial candidates 上同时预测存在性、类别与位置。
通常不应;低 overlap 暗示可能是两个不同 objects。
若 feature grid 加倍到 14×14、A 不变,candidate 数量和小物体 localization granularity 如何变化?
Detection 将静态 image output 结构化;下一转折把输入本身改成有时间依赖的 sequence。
Based on your implementation