统一框架
输入数据
→ 表示与预处理
→ Backbone / Encoder 提取特征
→ 多尺度或全局信息交互
→ 任务 Head / Decoder
→ logits、框、mask、深度或重建图像
→ loss → backward → 参数更新
无论图片多复杂,我都可以问:输入输出、旧瓶颈、新数据流、训练监督、推理代价。
资料索引
基础、并行与环境
计算图.png、2.png、分布式.png、张量并行.png、113.png、aa.png,以及 pycharm报错处理/ 下 8 张截图。
骨干与卷积结构
DenseNet.png、VoVNet.png、ACNet_DBB.png、RFB-Net.png。
目标检测
YOLO v3.png、FCOS.png、Cascade R-CNN_HTC .png、DETR.png、Deformable-DETR.png、DINO.png、BorderDet.png、MimicDet.png、DCL.png、SaccadeNet.png。
实例分割
Mask R-CNN_Mask Scoring R-CNN_PointRend.png、YOLACT_YOLACT++.png、BlendMask.png、CondInst-BoxInst.png、CenterMask.png、SOLO.png、PolarMask.png、TensorMask.png。
Transformer 与自监督
Transformer.png、ViT.png、Swin_Transformer.png、MAE_drawio.png。
具体任务
RDN_Meta-SR.png、HDR-Net.png、DeepLPF.png、AEMatter.png、Mannequin_Challenge_Depth.png、VideoFlow_drawio.png、PredNet.png。
比较模型时的统一表格
| 维度 | 我要问什么 |
|---|---|
| 任务 | 分类、检测、分割、深度、重建还是视频? |
| 表示 | anchor、中心点、query、mask、射线还是 patch token? |
| 特征 | CNN、层级 Transformer,还是混合结构? |
| 多尺度 | FPN、膨胀卷积、窗口层级或多尺度采样? |
| 监督 | 分类、框回归、IoU、mask、重建或一致性? |
| 成本 | 标注、收敛、显存、通信、延迟和后处理? |
论文 AP、FPS、参数量不能脱离数据集、输入尺寸、硬件、batch、精度模式和代码实现直接横比。结构图能证明模型怎么设计,不能证明它一定适合我的任务。
阅读检查
backward()与step()分别做什么?- 数据并行和张量并行分别切分什么?
- FCOS 没有 anchor,为什么仍需要样本分配?
- DETR 为什么可以不用传统 NMS?
- YOLACT 的 prototype 和实例系数分别负责什么?
- patch 变小后,ViT 为什么明显变贵?
- Swin 的 shifted window 解决什么问题?
- MAE 预训练后为什么通常只保留 Encoder?
- 为什么
KMP_DUPLICATE_LIB_OK=TRUE不能算正式修复?
能用自己的话回答这些问题,才算把 47 张孤立图片变成一套可继续生长的知识框架。
讨论稿
1. backward() 与 step() 分别做什么?
loss.backward() 沿计算图使用链式法则,把损失对各个可训练参数的梯度写入参数的 .grad;它只负责“算应该往哪里改”。optimizer.step() 才根据优化算法、学习率和这些梯度真正修改参数。因此只有 backward() 而没有 step(),模型不会学习;普通训练还要先 zero_grad(),否则梯度会继续累积。
2. 数据并行和张量并行分别切分什么?
数据并行复制完整模型,把一个 batch 切给不同 GPU,各卡算出梯度后再同步。张量并行把同一层的大矩阵或张量切到多卡上,各卡共同完成一次前向与反向。前者解决吞吐量问题,前提是模型能放进单卡;后者主要解决模型或单层放不进单卡的问题。
3. FCOS 没有 anchor,为什么仍需要样本分配?
去掉 anchor 只是取消预设框,并没有自动回答“特征图上的哪个位置负责哪个真实目标”。训练仍要决定正负位置、重叠目标如何选择、不同尺度的目标分到哪一层。分配规则如果不好,模型会得到冲突或低质量监督,所以 anchor-free 不等于 assignment-free。
4. DETR 为什么可以不用传统 NMS?
经典检测器常让多个候选同时命中同一目标,因此推理后用 NMS 去重。DETR 通过匈牙利匹配,把每个真实目标一对一分配给一个预测 query,其余预测对应 no-object。重复框在训练阶段就会受到惩罚,因此模型被训练为直接输出一个无重复的目标集合,通常不再需要传统 NMS。
5. YOLACT 的 prototype 和实例系数分别负责什么?
prototype masks 是整张图共享的一组基础形状或空间成分;实例系数决定某个目标如何线性组合这些基础成分。前者回答“有哪些可复用的 mask 基底”,后者回答“这个实例该用哪些基底、各占多少”。最后再裁剪到对应框附近,得到实例 mask。
6. patch 变小后,ViT 为什么明显变贵?
patch 数 N = HW/P2。边长 P 减半时,token 数变成 4 倍;全局注意力矩阵是 N × N,相关计算和显存会接近原来的 16 倍。更小 patch 保留了更多空间细节,但代价不是线性增长。
7. Swin 的 shifted window 解决什么问题?
如果每层都使用相同的不重叠窗口,窗口内部可以交流,窗口之间却长期隔离。下一层把窗口平移后,原来属于不同窗口的 token 会进入同一个新窗口,从而产生跨窗口连接。它以局部注意力的成本,逐层扩大信息传播范围。
8. MAE 预训练后为什么通常只保留 Encoder?
Decoder 的作用是完成预训练阶段的像素/patch 重建任务,而真正希望迁移到分类、检测、分割等下游任务的是 Encoder 学到的视觉表征。MAE 特意让 Decoder 较轻,因此预训练结束后可以丢弃它,再给 Encoder 接上新的任务头。
9. 为什么 KMP_DUPLICATE_LIB_OK=TRUE 不能算正式修复?
它只是允许进程继续加载多个 OpenMP runtime,没有消除二进制依赖冲突。程序可能暂时运行,也可能出现性能下降、崩溃,甚至难以察觉的错误结果。正式修复应统一解释器与包来源,在干净环境中重装兼容依赖,并确认进程只加载一套 OpenMP runtime。
回到研究主线
这九个答案又回到同一个学习方法:先找数据如何流,再找监督如何分配,最后区分训练机制与推理行为。只要这三条线清楚,新模型的名字再多,也能被放进已有知识地图里。
研究向后续计划
下一轮整理可以从“资料索引”升级为“论文阅读矩阵”:每个模型补充论文年份、核心假设、数据集、指标、关键消融、计算成本和失败场景。这样这套资料会从学习笔记变成可持续扩展的视觉模型研究手册。