# Lecture 03|课堂讲述与深读 主讲68页;下面展开每页的解释、例子、证据与模拟追问。后续课程预备阅读另列,不代表本讲已讲授。 # P01 训练结束后,网络留下了什么? 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p01.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p01/0 先把第二讲的训练闭环收成可复用对象:参数、当前表示、类别头。由此引出本讲为何讨论训练信号和新任务。 ## 连续讲述 上一讲,我们把网络拆开,看它怎样组织计算、怎样根据误差改变参数。今天把训练过程先停下来,留下已经训练好的网络。我要问的是:它到底给我们留下了什么?是一张类别对照表,还是一种可以继续使用的看图方式? 看这张桌面照片。说出“有杯子”只是一个问题;找到杯子的位置,把杯子的像素分出来,再根据“书左边的杯子”找到目标,是另外几个问题。我们不希望每换一个问题,就把过去学到的东西全部作废。 今天沿三步往前走:先看这些表示还能怎样学,再看它怎样支持区域和像素,最后看语言怎样加入。每一步都追问同一件事:什么留下来,什么必须重新学习。 ## 训练留下参数;一次输入才产生表示 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p01.html#representation-after-training 训练时,我们不断用图像、目标和损失修改参数 $\theta$。训练结束后保存的是参数文件;把新图 $x$ 送入它,才得到表示 $h=f_\theta(x)$。这两样东西不能混叫“特征”:前者是可复用的计算规则,后者是某个输入在这套规则下的输出。 分类头把 $h$ 变成类别分数 $a=Wh+b$。换成“哪一只杯子在左边”时,原分类头的类别名单往往无用,但前面识别轮廓、纹理和部件的计算可能仍有用。这就是移除原头、保留编码器的起点。它提出了一个可检验的假设:**旧任务塑造的中间计算,能降低新任务学习的困难。** 看当前图时,先指向“图像→表示”,再指向“表示→类别”。本讲第一部分改变前一段怎样学习,第二部分改变后一段要交付什么;不要求把所有问题塞进同一个输出向量。 ## 继续学习 读“训练留下参数”后,尝试给自己的科研输入、编码器与输出各写一个实例;暂不运行实验。 - 学习路径:表示怎样迁移到新任务 https://codingai-lec03.pages.dev/course/study/readout-transfer.html - CLS 01 · 学习信号、表示与迁移:https://codingai-lec03.pages.dev/course/notebooks/fb4365d604974dd19df492cb22516e44.html ## 画面与条件 红蓝两杯与书的同一底图,类别标签逐步增加两个杯框和语言指代。 复用现有两杯一书原创场景;没有在画面中添加不存在的零件。框及文字为教学标注,不是模型输出。 - S0 · 原文:https://codingai.pages.dev/ - S1 · 教材与出处:/course/round2-sources.html#S1 - S4 · 教材与出处:/course/round2-sources.html#S4 --- # P02 类别答案,不等于中间表示 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p02.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p02/0 本页拆开最终类别判断和中间表示,避免把“预测对了一个类别”当成已经回答了所有问题。 ## 连续讲述 回到我们已经认识的分类器。图片经过网络,先得到中间特征,再由最后的分类部分给出分数。训练时,它们一起为类别预测服务,但训练后,这两个部分的用途可以不同。 最后一层很贴近原来的类别集合。中间特征却可能同时包含边缘、纹理、部件以及它们的组合。我们可以保留这些计算和参数,为新任务训练新的读出部分,也可以继续调整原网络。这就是迁移的起点。 这里先把一个容易混淆的概念说清:有监督训练也能得到可迁移表示。今天接着讲自监督,不是因为监督表示不能迁移,而是要问:得到这些表示,是否必须始终依赖逐张图片的人工类别答案? ## 丢掉分类头,究竟还剩下什么? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p02.html#category-head-versus-representation 一个十分类头可以把 32 维表示压成十个分数。最高分只保留最终决策,完整分数还保留类别间相对偏好;但两者都经过了为原任务学习的投影。若新任务需要原十类名单之外的区分,直接使用这些分数未必合适。 以数字为例,源任务是 0–9 十分类,新任务是“数字是否大于等于5”。最简单的做法可以先识别数字再合并类别,也可以在中间表示上另学二分类头。这两种使用方式的误差来源不同:前者受原十分类错误约束,后者可以重新组合中间特征。LAB01 采用后者,并明确丢弃原十分类头。 “中间表示更通用”是值得检验的经验判断,不是说它保存了原图的一切。后面的颜色例子会展示,训练目标也可能让中间表示放弃未来有用的差异。 ## 继续学习 接读LAB 01固定32维特征的定义,再到P23看同一特征如何接两种读出。 - 学习路径:表示怎样迁移到新任务 https://codingai-lec03.pages.dev/course/study/readout-transfer.html - CLS 01 · 学习信号、表示与迁移:https://codingai-lec03.pages.dev/course/notebooks/fb4365d604974dd19df492cb22516e44.html - LAB 01 · 固定表示:标签预算与读出:https://codingai-lec03.pages.dev/course/notebooks/4dd8605ed9904820919ea9e13d9e7d7c.html ## 画面与条件 图片经过视觉网络得到空间特征,中间表示分别连接原类别头和新任务头;虚线示意继续调整网络。 - S1 · 教材与出处:/course/round2-sources.html#S1 --- # P03 图片已经很多,答案从哪里来? 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p03.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p03/0 在增加数据之前先确认答案粒度。这个问题会在P25以类别、框、像素和实例四种输出再出现。 ## 连续讲述 现在把数据量扩大。收集一批图片,和得到一批适合训练的数据,不是一回事。类别需要定义,有歧义的图片需要处理;换成框和细轮廓,人的工作又变了。 所以“我们还有更多图片”并没有自动解决监督来源的问题。对于你们的科研,这个矛盾可能很具体:仪器已经保存了很多观测,但能可靠判定类别、病灶或结构的人并不多。 如果每增加一次训练机会,都必须先请专家给出一个新答案,训练规模就受这条链约束。接下来会出现两种不同的努力:一种是把人的判断组织得更好,另一种是重新设计问题,让已有数据自己提供一部分训练答案。 ## 标签预算取决于要回答什么 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p03.html#supervision-budget-output-granularity 同一张桌面照片可以有“室内”的整图类别、两个杯子的矩形框、杯体的像素掩码,或“左侧红杯”的语言描述。这些答案并不是一份标签自动细化而来。类别没有给位置,框内还可能有桌面,掩码也没有自动说明哪个杯子是关系句的目标。 因此“有一百万张图”只描述了输入规模;要估计监督供给,还要问标什么、粒度多细、类别如何定义、模糊样本怎样仲裁。粗标签合并不会凭空产生细标签。一个写成“杯子”的样本,不能同时证明其颜色、材质、遮挡边界都标对了。 可以做一个小预算表:假设整图判断每张10秒、框标注30秒、像素检查120秒,则1000张分别需要约2.8、8.3、33.3工时。这是说明粒度成本的**假设算例**,不是行业测速;真实成本还取决于工具、复核和返工。下一页介绍组织人的判断,随后转向从数据本身构造部分训练答案。 ## 继续学习 先用自己的数据估计一种标签的取得与复核成本,再读P4;假设工时只用来比较,不作行业结论。 - 学习路径:表示怎样迁移到新任务 https://codingai-lec03.pages.dev/course/study/readout-transfer.html - CLS 01 · 学习信号、表示与迁移:https://codingai-lec03.pages.dev/course/notebooks/fb4365d604974dd19df492cb22516e44.html ## 画面与条件 桌面遮挡底图及其对应框、实例轮廓教学标注,显示类别、框和像素归属三种答案。 本页使用现有桌面遮挡场景及其对应的框/实例教学标注,三者来自相同底图。未把未遮挡版本的标注叠到遮挡版本。框与轮廓不是模型实测。 - S2 · 教材与出处:/course/round2-sources.html#S2 - S7 · 原文:https://www.ycombinator.com/blog/scale --- # P04 同一个瓶颈,两种研究与产业选择 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p04.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p04/0 人工判断的组织和数据自带目标是对监督供给的两种回应。本页提供研究与产业选择的共同背景。 ## 连续讲述 Scale 的早期故事可以放在这个问题里理解。2016 年对 Alexandr Wang 和 Lucy Guo 的同期访谈,谈的是把人工任务组织成可以调用的服务。这里面不是只有“找人做标注”,还有任务怎样拆、质量怎样管、需求怎样被接住。 另一条路线则在问:能不能改变学习目标,少依赖专门为这次任务逐条制作的答案?这两条路线并不互相取消。自监督预训练以后,我们仍可能需要人工标注来适配任务、检查错误,或者形成更高质量的数据。 这个故事值得记住的不是公司后来值多少钱,而是一个研究问题的现实来源:当某种学习方式遇到瓶颈,我们既可以改善生产过程,也可以改变学习问题本身。 ## 监督供给的两种回应 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p04.html#human-supervision-service-and-self-supervision 一条回应是改善人工判断的组织:把任务拆分,提供一致界面,路由给合适人员,再做质量检查。2016年的 Scale 同期访谈介绍了通过接口组织人工任务的服务思路;这里用这个公开事实说明监督不仅是算法输入,也是一项生产过程。 另一条回应是改变训练题目。例如原文已有下一个词,图像已有被遮住的像素,同一原图可以产生两种视图。这些目标无需逐项写新的类别答案,但任务设计、数据选择和数据产生本身仍有人类投入。 两条路线可以并存:自监督先学可复用表示,再用少量精确标注适配检测或分割;人工数据也可以帮助评价自监督表示。这里不需要推断企业创始人的个人动机,更不使用估值来论证方法价值。真正的问题是:哪些答案仍需人来定义,哪些训练约束可以由数据结构提供? 来源:2016年 Scale 同期创始人访谈 https://www.ycombinator.com/blog/scale ## 继续学习 读2016年同期访谈的服务机制即可;随后读P5的具体文本例子,无须扩展企业估值。 - 学习路径:表示怎样迁移到新任务 https://codingai-lec03.pages.dev/course/study/readout-transfer.html - CLS 01 · 学习信号、表示与迁移:https://codingai-lec03.pages.dev/course/notebooks/fb4365d604974dd19df492cb22516e44.html ## 画面与条件 2016年Scale的请求、人员组织与质量控制、人工任务结果流程,下方并列人工供给和数据自构目标。 - YC 同期访谈:Scale(2016-07-26):https://www.ycombinator.com/blog/scale --- # P05 文字演示了一种答案来源 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p05.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p05/0 借同一句话构造next-token与masked-token题,核心是答案来源和可见条件,不是语言架构课。 ## 连续讲述 看这句话。把后面的内容暂时挡住,就能用前面的文字预测接下来出现的文字单位;把中间一部分遮掉,又能用其余内容预测缺失部分。训练用的答案就在原文中,不需要标注者为每个位置再写一次。 两种构造并不相同:预测后续时,只能利用允许看到的前文;预测被遮住的部分时,可以利用另一种可见上下文。这里先不研究内部怎样组织长序列,我们只看输入、目标和反馈从哪里来。 这对视觉研究的启发是:不额外给类别标签,仍然可以有明确的预测任务和误差。文本本来也是人写出来的,“没有额外逐条标注”不是“没有人的知识”。那么,对图像,我们能构造什么样的预测或对应关系? ## 同一句原文怎样生成两种预测题 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p05.html#text-target-construction 用教学单位切分 `The / red / cup / is / on / the / table / .`。从左到右预测的一题是:输入 `The red cup`,正确目标是 `is`。遮词预测的一题是:输入 `The red [MASK] is on the table .`,目标是被取走的 `cup`。答案都从原文取得,但模型可见条件不同:前者不能偷看未来,后者可以使用遮词两侧。 训练时原文目标已知。若模型给正确词概率0.25,这一位置的负对数损失是 $-\ln0.25\approx1.386$;提高到0.5后是0.693。这个反馈足以更新参数,不需要先把整句话人工标成“描述桌面”。 本页只借文字说明目标来源。实际 tokenizer 可能把单词分成多个单位,预测器也有不同架构;这些细节不影响这里的闭环:**隐藏一部分信息→用可见条件预测→拿原文作答案**。架构、完整注意力和循环状态留后续课程。 来源:BERT 原论文 https://aclanthology.org/N19-1423/ 来源:GPT-2 技术报告 https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf ## 继续学习 手算正确词概率0.25与0.5的损失,回到P6区分目标来源、输出任务和损失。 - 学习路径:表示怎样迁移到新任务 https://codingai-lec03.pages.dev/course/study/readout-transfer.html - CLS 01 · 学习信号、表示与迁移:https://codingai-lec03.pages.dev/course/notebooks/fb4365d604974dd19df492cb22516e44.html ## 画面与条件 同一句红色杯子放在桌上,前文预测杯子与中间遮挡预测杯子两种可见性规则。 “红色 / 杯子 / 放在 / 桌上”只作词语级教学切分,未声称对应任何 tokenizer。内部序列机制不在本页展开。 - S2 · 教材与出处:/course/round2-sources.html#S2 - S8 · 教材与出处:/course/round2-sources.html#S8 --- # P06 没有类别标签,不等于没有学习目标 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p06.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p06/0 把“自监督、分类、交叉熵”放回不同维度,后面才不会用方法名替代完整学习链。 ## 连续讲述 把刚才的问题整理一下。有监督分类使用人工类别答案;自监督则从数据中构造目标,例如判断两个视图是否对应,或者预测被隐藏的内容。它们仍然可以使用分类式或回归式的损失,仍然通过误差来调整参数。 因此,自监督说的是监督信号怎样获得;对比学习说的是怎样比较样本;重建说的是预测什么。这几个词不在同一个分类维度上,不能排成互相替代的三个版本。 今天先沿两条路线走深:利用视图对应关系学习,以及利用缺失内容预测学习。我们要看到的不只是它们不用类别标签,还要看到研究者怎样通过任务设计,要求表示保留某些区别、忽略另一些变化。 ## 监督来源、预测任务与损失要分开 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p06.html#source-task-loss-three-axes “自监督”说明目标怎样取得;“分类”说明输出怎样组织;“交叉熵”说明怎样惩罚预测。这是三个维度,不是互斥方法名。人工类别标签可以训练softmax分类,从同图视图身份构造的标签也可以训练softmax分类;两者都能用交叉熵。 对比学习的一题是“候选中哪一个和查询同源”;遮挡重建的一题是“这个隐藏位置原来是什么像素”。它们都从数据构造目标,却要求保留不同结构。目标不是“没有答案”,只是答案不是额外写下的类别名称。 判断一个实验时,依次写出输入、目标的取得过程、模型输出、损失和最终评价。若只写“用了自监督”,还不知道它学到了什么;若写出完整链条,就能发现有没有把隐藏真值意外送入输入,或把训练损失当成另一项任务的成绩。 ## 继续学习 选LAB 06或LAB 08之一,标出输入、目标来源、输出、损失、读出;不需要两本同时完成。 - 学习路径:表示怎样迁移到新任务 https://codingai-lec03.pages.dev/course/study/readout-transfer.html - 学习路径:视图、投影头与历史字典 https://codingai-lec03.pages.dev/course/study/contrastive-views.html - 学习路径:从遮挡重建到表示评价 https://codingai-lec03.pages.dev/course/study/masked-reconstruction.html - CLS 01 · 学习信号、表示与迁移:https://codingai-lec03.pages.dev/course/notebooks/fb4365d604974dd19df492cb22516e44.html - CLS 04 · 重建:约束、位置与表示评价:https://codingai-lec03.pages.dev/course/notebooks/23b0affc4b824723927bd0938fd2bbda.html - CLS 05 · 对比学习:视图、投影与历史字典:https://codingai-lec03.pages.dev/course/notebooks/b8320404134f4a2e858ccfe7d50a71d3.html ## 画面与条件 分类图片、同图两裁剪、遮挡网格三种输入分别连接人工类别、指定配对和原图像素目标。 - S1 · 教材与出处:/course/round2-sources.html#S1 - S2 · 教材与出处:/course/round2-sources.html#S2 --- # P07 目标可以扩展,训练还要做得出来 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p07.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p07/0 资源约束在本讲是方法选择的一个条件;真正需要回访它的是批内候选、MoCo缓存与MAE可见块。 ## 连续讲述 找到可扩展的目标以后,训练也不会变成免费的。更多数据、更大的网络、更长的训练,仍然需要存储、计算和时间;设备之间合作,也有额外代价。 但这不是一页“模型很烧钱”的背景介绍。资源条件会影响方法怎么设计:候选特征能不能从历史批次复用?被遮住的图块是不是也要送进昂贵的编码器?这些选择会改变一次实验能够使用多少材料。 我们先记住这几个具体问题,后面看 MoCo 和 MAE 时就能回到它们。至于扩展定律、多设备分片和通信细节,属于后续系统展开的内容。今天只需要理解:好的学习目标,还需要一种可实现的计算组织。 ## 训练目标也在分配计算 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p07.html#objective-and-compute-interface 扩大目标供给后,还要把训练真正做出来。当前批内对比会同时保留多张图两种视图的前向和反向状态;保存历史key的MoCo用特征缓存减少重复编码,但必须处理旧特征的一致性;MAE让较重编码器只处理可见图块,把补全位置的工作放到较轻解码器。 所以计算条件会参与方法设计,而不只是最后购买多少设备。我们可以先画资源账:本步编码多少新图,保留多少激活,缓存多少旧向量,下步需要重复什么。这个账足以理解接下来的batch、队列与可见块取舍。 本讲不在此展开并行算法、显存公式或分片通信。它们保留为第六讲预备阅读;这里带走的是同一个原则:**需要更多比较对象,不一定等于同时反传更多图片;需要预测更多位置,也不一定等于让昂贵编码器看见所有位置。** ## 继续学习 先读本页计算接口,直接进入P8;多设备与分片算例是L06预备选读。 - 学习路径:表示怎样迁移到新任务 https://codingai-lec03.pages.dev/course/study/readout-transfer.html - 学习路径:视图、投影头与历史字典 https://codingai-lec03.pages.dev/course/study/contrastive-views.html - 学习路径:从遮挡重建到表示评价 https://codingai-lec03.pages.dev/course/study/masked-reconstruction.html - CLS 01 · 学习信号、表示与迁移:https://codingai-lec03.pages.dev/course/notebooks/fb4365d604974dd19df492cb22516e44.html - CLS 05 · 对比学习:视图、投影与历史字典:https://codingai-lec03.pages.dev/course/notebooks/b8320404134f4a2e858ccfe7d50a71d3.html - CLS 04 · 重建:约束、位置与表示评价:https://codingai-lec03.pages.dev/course/notebooks/23b0affc4b824723927bd0938fd2bbda.html ## 画面与条件 目标、数据、计算三个相连节点,以及当前批次、历史特征、可见图块三个具体计算取舍。 - S3 · 教材与出处:/course/round2-sources.html#S3 - S5 · 原文:https://arxiv.org/abs/1911.05722 - S9 · 教材与出处:/course/round2-sources.html#S9 --- # P08 同一张图,可以给出两个相关视图 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p08.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p08/0 从同一底图产生两种观察,明确正例身份由数据管线提供,再讨论这种任务可能留下什么共有结构。 ## 连续讲述 看这两个局部视图。像素不完全一样,但我们知道它们从同一张原图产生。这件事不需要额外的类别标签,只需要保存我们做过的变换。 可以据此要求网络:这两个视图的表示应当相互接近,而不是只因为亮度或裁剪不同就完全分开。这里我们还没有告诉模型“这是什么杯子”,只提供了一个关系。 不过,关系并非天然正确到可以随意使用。如果一个裁剪只剩桌面,另一个只剩杯子,或者原图里有多个不同物体,这对视图到底共享多少内容,就要重新检查。增强不是数据清洗之后的附属选项,它开始参与定义模型要学习的东西。 ## 同源视图为什么能当作正例? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p08.html#paired-views-as-a-task 先固定一张原图,再独立采样两次变换,得到 $v=t(x)$ 与 $v^+=t'(x)$。知道它们来自同一个 $x$,是数据管线提供的身份信息;它不是模型事先认出了杯子。训练目标要求两张观察在表示空间仍能互相找到。 若两张裁剪分别改变背景和亮度,但都保留杯身,完成配对就可能需要抓住跨视图共有的轮廓和部件,而不能只记某个像素位置。这是视图训练有机会产生可迁移特征的理由。 但正例规则也施加了假设:如果一张只剩杯子、另一张只剩无关书本,我们仍知道它们同源,却未必给出了理想的语义一致性任务。增强不是越强越好;要问它留下了哪些共有证据,又要求模型忽略哪些差异。 来源:SimCLR 原论文 §2–4 https://proceedings.mlr.press/v119/chen20j/chen20j.pdf ## 继续学习 指认两张视图共同保留的物体部分;去LAB 06看实际输入图,先读图再读代码。 - 学习路径:视图、投影头与历史字典 https://codingai-lec03.pages.dev/course/study/contrastive-views.html - CLS 05 · 对比学习:视图、投影与历史字典:https://codingai-lec03.pages.dev/course/notebooks/b8320404134f4a2e858ccfe7d50a71d3.html - LAB 06 · 颜色干预:视图、投影与读出:https://codingai-lec03.pages.dev/course/notebooks/7c4f531113d7473abc174e2e014e1340.html ## 画面与条件 一张红杯底图按固定坐标裁出两个仍包含杯子的视图,来源箭头保留。 使用现有 concept-red-cup-a.png 同一文件;两个 SVG viewBox 分别为 [145,120,980,980] 与 [280,180,850,850]。裁剪为确定性显示变换,未独立生成两幅正例。本页将稿件中的“零件”替换为“杯子”,不改变论证。 - SimCLR 原论文(2020):https://arxiv.org/abs/2002.05709 --- # P09 “正例”说的是关系,不是类别 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p09.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p09/0 把同源关系与语义同类拆开。负例的定义要相对于训练题,不能直接等同于类别不同。 ## 连续讲述 在这类实例级对比任务中,“正例”通常表示训练指定的对应视图,“负例”表示拿来比较的其他样本。它们并不自动等同于“同类别”和“不同类别”。 如果另外一张图片拍的恰好是同类杯子,训练时仍可能把它当作另一个实例。这说明目标对数据作了近似,而不是提前拥有全部语义关系。 为什么这样的近似仍值得尝试?因为大量不同视图的对应能够迫使网络寻找一些跨变换稳定的线索,而不是只记某一张图片的像素。真正的问题不是一句“负例有噪声,所以方法不行”,而是:这种构造最后能否得到对新图片、新任务有用的表示。 ## 同源、同类与负例不是同一回事 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p09.html#instance-positive-and-false-negative 设A1、A2是同一红杯照片的两种裁剪,B1来自另一只红杯。实例对比通常把A1–A2配为正例,把B1作为A1的其他候选。即便A和B都属于“杯子”,取样过程也没有给它们同源身份。 这解释了“假负例”:在训练的实例身份题中,B确实不是A;在下游语义分类题中,B却可能应该与A接近。两种题目的答案并不矛盾,但会对表示施加不同压力。 本页不要求学生寻找一条永远正确的相似度。先写清关系:同一原图、同一对象、同一类别、同一语句含义是不同层次。以后CLIP用图文配对时,也要重新问正例来自哪一种数据关系,不能沿用“看起来相似就是正例”的模糊定义。 ## 继续学习 画A1、A2、B1三个候选,分别标同源与同类,再去P10计算一次选择。 - 学习路径:视图、投影头与历史字典 https://codingai-lec03.pages.dev/course/study/contrastive-views.html - CLS 05 · 对比学习:视图、投影与历史字典:https://codingai-lec03.pages.dev/course/notebooks/b8320404134f4a2e858ccfe7d50a71d3.html - LAB 07 · MoCo:历史 key、队列与两种更新:https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html ## 画面与条件 红杯查询及同底图裁剪正例;另一红杯实例与法兰构成其他候选,标明同类也可能是负项。 另一杯子用独立的 concept-red-cup-b.png,只用来示意另一个实例;不把其差异宣称为单变量控制。所有候选身份为教学构造。 - SimCLR 原论文(2020):https://arxiv.org/abs/2002.05709 - MoCo 原论文(2019 / CVPR 2020):https://arxiv.org/html/1911.05722v3 --- # P10 一次对比,就是一次有答案的选择 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p10.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p10/0 这一页把相似关系变成可优化的概率与损失。分数、温度、softmax和负对数必须能对上同一组数。 ## 连续讲述 现在用三个候选算一次。我们设它们与查询的相似度分别是 1、0.5、0,第一项是正例。经过温度缩放和归一化,模型给正例的概率约为 0.665。训练希望这个指定对应获得更高的相对分数。 这里的“答案”不是狗或猫,而是:这一组候选里,哪一项与查询对应。负对数损失把这个选择变成可以优化的数值。温度会改变分数差距转换成概率后的尖锐程度,并进一步影响梯度。 不需要把公式背下来,但要能够指着图回答:谁是查询,谁是正例,谁进入比较,误差从哪里来。这四件事清楚以后,对比学习就不再只是散点图上“拉近一点、推远一点”的动画。 ## 把对比损失算成一道选择题 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p10.html#infonce-as-candidate-choice 设查询的三个候选logit为2、1、0,第一项是已知正例。这些是**温度缩放后的分数**,不是三个原始余弦值。softmax分母为 $e^2+e^1+e^0\approx11.107$,概率约为 $(0.6652,0.2447,0.0900)$,正例损失 $-\ln0.6652\approx0.4076$。 一般式为 $L=-\log\{\exp(s_+/\tau)/\sum_j\exp(s_j/\tau)\}$,分母包含正例。提高正例相对分数会降低损失;把所有分数同时加一个常数不会改变概率,所以目标关注相对选择而非绝对分数大。 实际训练中分数由图像经编码器算出,损失反传到参数。手算这一行只解释目标,不是模型实验。接到LAB 07时,应沿真实图像→两视图→向量→logit→loss→参数变化逐项找到对应对象。 ## 温度改变什么,不改变什么? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p10.html#temperature-ranking-probability-gradient 固定相似度为 $(0.8,0.4,0.2)$,第一项是正例。温度1、0.5、0.1时,正例概率分别约0.4506、0.5713、0.9796。排序完全不变,但概率越来越集中。若正例分数低于最强负例,低温度也会更尖锐地放大错误选择。 梯度能解释其作用:$\partial L/\partial s_+=(p_+-1)/\tau$,负例为 $p_j/\tau$。温度既改变分母中的尺度,也改变概率。因此“温度越低,梯度越大”并不总成立:正例已经几乎确定时,$1-p_+$也会接近零。 把温度调低造成的loss下降,不能当作表示已经改善。温度是训练条件,最终仍用固定读出协议评价。课堂上可以让学生先预测哪一项概率增加,再计算;避免同时改相似度、候选数和温度,使原因无法辨认。 ## 继续学习 先算画面2、1、0,再读温度块;LAB 07开头只做数值热身即可,真实训练另读后段。 - 学习路径:视图、投影头与历史字典 https://codingai-lec03.pages.dev/course/study/contrastive-views.html - CLS 05 · 对比学习:视图、投影与历史字典:https://codingai-lec03.pages.dev/course/notebooks/b8320404134f4a2e858ccfe7d50a71d3.html - LAB 07 · MoCo:历史 key、队列与两种更新:https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html ## 画面与条件 三候选相似度1、0.5、0经过温度0.5缩放成2、1、0,概率0.665、0.245、0.090,指定正项损失0.408。 教学设定 s=[1,.5,0],τ=.5,logits=[2,1,0];p=[.6652409558,.2447284711,.0900305732];−ln p+=.4076059644。分母含三个候选,不含查询自身;非模型输出。降低温度提高当前最高分的尖锐程度,并非对所有样本一概增大梯度。 - SimCLR 原论文(2020):https://arxiv.org/abs/2002.05709 - MoCo 原论文(2019 / CVPR 2020):https://arxiv.org/html/1911.05722v3 --- # P11 为什么不能把所有图片都映射成同一个向量? 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p11.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p11/0 先代入常量函数检查目标的平凡解,说明仅有一致性不够,也为教师方法留下合理选读入口。 ## 连续讲述 一个看似省事的办法是:所有输入都输出同一个向量。这样同图的两个视图当然相同,但任何其他图也相同,模型已经没有办法选择对应项。 在这个三候选算例中,所有分数相同,正确项只有三分之一的概率,损失约为 1.099;能区分对应关系时,损失可以更低。这个比较解释了为什么单纯要求“两视图一样”不够,而带有区分任务的目标还提出了另一项要求。 不要由此推成“只要有负例,训练就一定成功”。我们现在只是看见平凡表示为什么不能很好完成这个选择任务。没有负例的方法怎样避免坍塌,是另一组设计问题,已经保留在补充材料,今天不再展开一套教师网络。 ## 常量表示为什么不解决对比任务? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p11.html#collapse-and-discrimination 若只最小化两视图间距离,$f(x)=c$ 对任何图都输出同一向量,配对距离就是零。它满足一致性,却让杯子与书无法区分。加入候选竞争后,如果所有单位向量相同,各候选得分也相同,K个候选的正例概率只能是1/K,损失是 $\ln K$;例如三项时约1.099。 这说明对比目标没有把“全部一样”当成一个好的区分结果。但仅凭这个算例,不应宣布任何网络或优化过程都不可能停在退化状态。真正检查还包括样本间方差、表示秩以及下游读出。 没有显式负例的方法也能成功:它们组合教师目标、预测器、停止梯度和分布处理等设计。下面的教师补充块解释这些组件各自负责什么,不把一条EMA箭头当成防坍塌的充分证明。 ## 教师模型提供的是哪一种答案? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p11.html#teacher-target-source-and-collapse 固定教师蒸馏让学生拟合一个已有模型的概率分布;EMA教师则来自学生参数的历史平均。这两种教师都不是天然正确的类别真值,也不必比学生更大。 以logits(4,2,0)为例,温度1的概率约(0.8668,0.1173,0.0159),温度2约(0.6652,0.2447,0.0900)。软目标除最大类外,还表达其他类别的相对接近。学生可以用交叉熵拟合它,但也可能继承教师的背景捷径。 BYOL、DINO说明不显式使用负例也能学表示;它们采用的不对称预测、停止梯度、教师更新及输出分布处理应整体理解。当前LAB 17训练的是解析输入上的固定线性教师蒸馏,再单独算EMA,不是DINO视觉复现。这里适合作为理解“目标从模型取得”的选读分支,阅读后回到P18。 来源:BYOL 原论文 https://arxiv.org/abs/2006.07733 来源:DINO 原论文 https://arxiv.org/abs/2104.14294 ## 继续学习 用K=3手算常量对比loss;想追问无负例学习,再选LAB 17,不必先学整个DINO。 - 学习路径:表示怎样迁移到新任务 https://codingai-lec03.pages.dev/course/study/readout-transfer.html - 学习路径:视图、投影头与历史字典 https://codingai-lec03.pages.dev/course/study/contrastive-views.html - CLS 06 · 表示的三个检查:目标、信息与新域:https://codingai-lec03.pages.dev/course/notebooks/c0645a4db6e04188ab5b119e87c53bed.html - LAB 17 · 软目标与坍塌:三个数值检查:https://codingai-lec03.pages.dev/course/notebooks/268a4ab11b464c64b065f9fc12b19cc7.html ## 画面与条件 坍塌表示的三候选均分1/3与可区分候选并排,损失ln3约1.099对比0.408。 三候选同分:p+=1/3,L=ln3=1.0986122887。图上的向量与条形为机制示意,没有训练曲线或成功保证。 - SimCLR 原论文(2020):https://arxiv.org/abs/2002.05709 - MoCo 原论文(2019 / CVPR 2020):https://arxiv.org/html/1911.05722v3 --- # P12 训练时比较 z,使用时读取 h 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p12.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p12/0 解释训练空间与使用空间可以不同,同时明确投影头不截断梯度,也不保证保存一切。 ## 连续讲述 SimCLR 在视觉编码器后面增加一个投影头。编码器得到 h,投影头把它变成 z,对比损失作用在 z 上;用于下游任务时,可以取投影头之前的 h。 这就给两个位置不同的分工可能:z 更直接服务于当前的视图比较,h 可能保留一些下游还用得上的变化。原工作通过实验比较了投影头的设计,这不是只为了多加几层。 但请注意,“提供这种可能”和“保证这种分工”不是一回事。损失仍然会通过投影头影响前面的编码器。我们不能看到这张结构图,就宣布某种颜色、边界或者其他细节一定安全地保存在 h 里。接下来用你们的问卷例子检查这个推论。 ## 在 z 上比较,为什么 h 仍会学习? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p12.html#projection-head-gradient-and-retention 训练路径是 $x\to f_\theta\to h\to g_\phi\to z\to L$。投影头不是一道截断墙:链式法则中 $\partial L/\partial\theta=(\partial L/\partial z)(\partial z/\partial h)(\partial h/\partial\theta)$,梯度穿过g更新f。迁移时读取h,是选择另一个使用接口。 考虑一个可行构造:$h=(u,c)$分别含形状与颜色,$g(h)=u$。两视图颜色不同但形状相同,那么z可以满足颜色不变性,而h仍有位置放颜色。这解释了投影头为什么可能缓和“训练要忽略”与“未来要保留”的冲突。 这个构造不保证网络一定学成这样。LAB 06的真实换色训练中,h的颜色5NN读出也接近机会水平(不等于所有读出都无法取得颜色);有时z的形状读出反而优于h。正面理解是投影头提供了分工空间,实证问题则是训练后哪一层对哪项任务更有用。 来源:SimCLR 原论文 §2–4 https://proceedings.mlr.press/v119/chen20j/chen20j.pdf ## 信息还在,与一条直线能读出是两件事 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p12.html#information-and-readable-form 四点 h 为 (−1,−1)、(−1,+1)、(+1,−1)、(+1,+1),同号标签 0、异号标签 1。每一点都不同,标签由 h 完全确定;但两类位于对角,无法用一条直线完全分开。
左图四个 h 坐标:同号两角为标签 0、异号两角为标签 1;右图 z=h1h2 数轴,两个标签 1 输入都落在 −1,两个标签 0 输入都落在 +1,阈值为 0。每个数轴位置对应两个输入。
放大查看四点图 ↗ · 精确构造的四点读出:左图保留输入身份,右图用乘积改变可读形式。图中位置和标签由数据表确定,并非训练输出。
左图每个输入都有独立坐标,标签也完全由坐标确定;但同类占据对角,不能用一条直线把两类完全分开。右图只保留乘积 $z=h_1h_2$:两个异号输入都落在 −1,两个同号输入都落在 +1。现在一个零阈值 $z<0$ 就能正确读取标签;每个数轴位置合并了两个输入,图中不通过抖动伪造不同的 z 值。 | h1 | h2 | 标签 y | z=h1h2 | |---:|---:|---:|---:| | −1 | −1 | 0 | +1 | | −1 | +1 | 1 | −1 | | +1 | −1 | 1 | −1 | | +1 | +1 | 0 | +1 | 这个变换没有增加标签信息,并且合并了原来不同的输入身份。它是四点上的精确构造,不是某次训练得到的表征,也不能证明任意压缩都会改善读出,或少量训练样本一定能学出这个变换。 以下是备课用模拟追问,不是课堂实录。 **学生:**“既然左图不能画一条分界线,是不是标签信息已经丢了?” **教师:**“先看数据表,每个 h 都仍唯一确定标签;失败的是单一直线这类读出。换一个乘积坐标后,一条阈值就足够。可是只看 z,你已不能恢复原来是哪一个同号角点。这正好把‘某任务的信息’‘原输入身份’和‘读出函数能否使用’分开。” 因此低维不必等于丢掉任务信息,线性失败也不必等于信息全无。LAB18 同时报告 XOR 读出与离散 bit 算例;把结论限定在明确的输入、标签和函数类上,比笼统说“表示越压缩越好”更准确。 ## 继续学习 读h=(u,c)构造,再看LAB 06的实际h/z表;需要区分信息与线性可读时读XOR块。 - 学习路径:表示怎样迁移到新任务 https://codingai-lec03.pages.dev/course/study/readout-transfer.html - 学习路径:视图、投影头与历史字典 https://codingai-lec03.pages.dev/course/study/contrastive-views.html - CLS 05 · 对比学习:视图、投影与历史字典:https://codingai-lec03.pages.dev/course/notebooks/b8320404134f4a2e858ccfe7d50a71d3.html - LAB 06 · 颜色干预:视图、投影与读出:https://codingai-lec03.pages.dev/course/notebooks/7c4f531113d7473abc174e2e014e1340.html - CLS 06 · 表示的三个检查:目标、信息与新域:https://codingai-lec03.pages.dev/course/notebooks/c0645a4db6e04188ab5b119e87c53bed.html - LAB 18 · XOR:信息保留与线性读出:https://codingai-lec03.pages.dev/course/notebooks/33066318f5884adc8417068df0f40431.html ## 画面与条件 图像、编码器f、h、投影g、z及对比损失路径;第二状态从冻结h接出可训练线性读出。 f 是视觉编码器,g 是投影头。预训练的损失经 g 传播到 f;读出时冻结 f 并训练线性头。采用 h 不构成特定属性保留保证。 - SimCLR 原论文(2020):https://arxiv.org/abs/2002.05709 --- # P13 该忽略颜色,还是该保留颜色? 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p13.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p13/0 用颜色任务将“什么变化应被忽略”落到可观察干预,避免把增强强度当普遍优劣。 ## 连续讲述 先看任务,而不是先选一个流行增强。如果我要识别零件的形状,红色变蓝色也许不影响答案;如果我要区分涂装,红蓝本身就是答案。类似的颜色变化,对两个任务有不同意义。 所以问卷第一题真正检查的是:不能因为下游使用 h、不使用 z,就放心把训练中的颜色关系随意改掉。h 可能保留,也可能没有保留;即使保留了,给定读出方式和标签预算,能不能用起来还要检查。 这里最有用的行动不是简单说“强增强好”或“颜色增强坏”,而是先标出哪些变换保持任务标签,再比较这些条件下的表示和读出。问题一旦具体到红蓝零件,原先看似抽象的表示讨论就有了可检验的对象。 ## 颜色应被忽略,还是应被保留? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p13.html#color-invariance-is-task-dependent 如果任务是识别杯子形状,轻微光照变化不应改变答案;如果任务是分拣红杯与蓝杯,颜色正是答案来源。增强的含义必须相对于任务判断。“颜色增强”也不是单一操作:亮度缩放可能保留红蓝关系,通道交换却直接改变它。 受控比较应从同一图像出发,固定几何、背景、数据划分和训练预算,只改变预定的颜色操作。独立生成两张不同照片,再声称“只改了颜色”,会混入姿态、纹理和背景。 对照读出时,分别测形状和颜色,而不只给一个总准确率。若形状更好、颜色变差,我们学到的是一种用途取舍;不能把后者掩盖成“更强的表示”。本页问卷可以先投判断,课后在LAB 06用真实训练检验。 ## 已有图像训练给出了一次明确的取舍 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p13.html#color-ablation-existing-image-evidence 当前LAB 06保留了600张训练、240张保留的16×16合成RGB图像训练。卷积编码器产生48维h,投影头产生24维z;训练用InfoNCE,类别标签仅在冻结评价时使用。两个训练臂固定初始化、批次与预算,预定变化是视图是否以50%概率交换红蓝通道。 保存的2026-09-22基准中,保留颜色增强后的h,形状5NN为47.50%、颜色100%;换色增强后的h,形状85.83%、颜色49.17%。换色z的形状5NN为95.42%。因此这次实验观察到:迫使颜色线索不可靠后,形状更易读,而颜色信息的可用性下降。 这是当前Notebook中的历史运行记录,本轮文字整理没有重新训练。它有图像、可学习模型和保留评价,已超出手填向量热身;但仍是一个种子的小型受控任务,不支持给SimCLR与MoCo排通用名次。读出方法也重要:同一个换色h的线性形状读出为98.75%,与5NN问的并非完全同一件事。 ## 继续学习 推荐LAB 06作为第一部分主实验:先看两种视图与历史结果,再只改一个颜色条件。 - 学习路径:视图、投影头与历史字典 https://codingai-lec03.pages.dev/course/study/contrastive-views.html - CLS 05 · 对比学习:视图、投影与历史字典:https://codingai-lec03.pages.dev/course/notebooks/b8320404134f4a2e858ccfe7d50a71d3.html - LAB 06 · 颜色干预:视图、投影与读出:https://codingai-lec03.pages.dev/course/notebooks/7c4f531113d7473abc174e2e014e1340.html ## 画面与条件 同形状法兰的红蓝和明暗四条件;切换形状任务与涂装任务改变标签判定。 红/蓝来自现有确定性颜色变体;明暗来自现有变体及 SVG 亮度显示变换。四格属于教学条件,不是本轮训练或模型性能结果。 - SimCLR 原论文(2020):https://arxiv.org/abs/2002.05709 --- # P14 比较更多候选,代价在哪里? 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p14.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p14/0 从同一个视图列表指认查询、自身和正例:4×4 到 6×6,每行候选从 3 项到 5 项。随后再把候选来源转为计算组织问题,为 MoCo 队列做铺垫。 ## 连续讲述 我们先给格子里的对象起名字。A 和 B 是两张原图,每张各取两个视图,所以两轴都列 A1、A2、B1、B2。固定看 A1 这一行:它和自己比较的格子排除;A2 是我们指定的正例;B1、B2 是另外两个候选。现在每行有三个候选。 把原图增加到三张,得到六个视图,每行就有五个候选。更多候选可以提供比较,但也要付本轮编码与比较的成本;完整矩阵的格子数从 4×4 变为 6×6。我们不把大批次推广成所有对比方法的普遍规律,而是借这张图看见 SimCLR 的一项资源约束。 下一步问,能否复用先前已经算出的键,让候选数量和当前批次分开?这不是向刚才的 SimCLR 矩阵直接加入旧键,而是转向 MoCo 的设计问题。以前算出的向量,和今天正在变化的编码器,是否还处在足够一致的表示空间中? ## 批内候选数为什么和 batch 绑在一起? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p14.html#current-batch-dictionary-cost SimCLR 从 N 张原图产生 2N 个视图。P14 的两轴使用同一个视图列表,行是查询、列是候选。两张原图 A、B 对应 A1、A2、B1、B2;矩阵是 4×4。固定查询 A1,A1 自身排除,A2 是同源正例,B1、B2 是其余候选,所以每行比较 3 项。三张原图再加 C1、C2,矩阵成为 6×6,每行比较 5 项。一般地,每行排除自身后有 2N−1 项:1 个同源正例、2N−2 个其他候选。 主对角用灰色斜线排除,绿色格表示同一原图的另一个视图。若采用“两组不同视图分别作为两轴”的另一种排法,正例可以在对角;不能离开轴身份,仅凭绿色位置判断矩阵的含义。 这些候选都由当前参数编码,彼此处于同一轮表示空间;代价是本步要处理更多图像与反向传播状态,完整的两两比较矩阵随视图数平方增加。增大 N 也会改变优化行为,并不只是免费加几个负例。 MoCo 的提问是:能否复用前几批已经算好的 key,让候选数超过当前 batch?这是下一方法的资源取舍,不是在 SimCLR 这一次比较中直接把旧键塞进矩阵。保存向量通常比保存整个图像计算图轻,但旧向量来自旧参数。下一页的队列解决“从哪里拿更多候选”,再下一页的 EMA 处理“拿来的旧候选是否仍可比较”。 来源:SimCLR 原论文 §2–4 https://proceedings.mlr.press/v119/chen20j/chen20j.pdf ## 模拟师生追问(备课用,非课堂实录) 学生:绿色格为什么不在主对角? 教师:因为本图两轴用的是同一个视图列表,主对角是同一个视图与自身。正例是同一原图的另一个视图。若两轴分别排两组不同视图,绿色可以在对角;判断要先看轴身份。 ## 继续学习 用N=3画出配对与自身屏蔽;随后读P15,暂不展开多设备通信。 - 学习路径:视图、投影头与历史字典 https://codingai-lec03.pages.dev/course/study/contrastive-views.html - CLS 05 · 对比学习:视图、投影与历史字典:https://codingai-lec03.pages.dev/course/notebooks/b8320404134f4a2e858ccfe7d50a71d3.html - LAB 07 · MoCo:历史 key、队列与两种更新:https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html ## 画面与条件 当前批次从原图 A、B 的 A1/A2/B1/B2 四视图(4×4)扩为 A、B、C 的六视图(6×6)。矩阵两轴使用同一视图列表,灰色斜线主对角为自身并排除;每行只有同源的另一个视图为绿色正例,其余 2N−2 个为其他候选。A1 行显示全部候选身份。右侧将复用历史 key 作为下一方法 MoCo 的资源取舍。 两轴同列同一组 2N 个视图,行是查询、列是候选。主对角是同一视图与自身,排除;同源另一个视图是唯一指定正例,其余 2N−2 项为其他候选。N=2 时 4×4,每行 3 项(1 正例、2 其他项);N=3 时 6×6,每行 5 项(1 正例、4 其他项)。当前视图越多,本轮编码也越多;完整两两比较矩阵随视图数平方增长。历史键字典是引入下一方法 MoCo 的问题,不表示 SimCLR 本次直接混入旧键。 - SimCLR 原论文(2020):https://arxiv.org/abs/2002.05709 - MoCo 原论文(2019 / CVPR 2020):https://arxiv.org/html/1911.05722v3 --- # P15 MoCo:字典里保存的是特征 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p15.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p15/0 指认历史key的身份、加入与离开,先理解缓存到底存了什么,再问它是否仍一致。 ## 连续讲述 MoCo 把对比学习看成查询字典。当前查询要在一组键中找到对应项,字典中的其他键可以来自前面的批次。 先看队列这一半。它保存的是已经计算出来的特征,不是每次都重新跑一遍网络的原图。本页容量为 4,旧队列是 [k1,k2,k3,k4];本轮有两个新键 k5、k6。每个查询先与自己的本轮正键和更新前的旧队列比较,再把两个新键按序加入,同时移走最旧的 k1、k2。下一批看到的字典是 [k3,k4,k5,k6]。P17 为便于跟完一整步,只用一个新键,所以只退一个旧键;两页的队列规则相同,示意批大小不同。 这样当前批次可以较小,候选字典仍然较大。数量问题有了办法,但假如编码器每步变化很快,队列里早些时候的特征和新特征就可能不太可比。旧键保存原值,不会自动刷新。MoCo 的另一半设计,正是控制生成键的那个编码器如何变化。 ## 队列保存的是带历史身份的 key 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p15.html#moco-key-queue-identity 沿本页的双样本示意,队列容量为 4,当前保存旧键 `[k1,k2,k3,k4]`。本轮两张图产生两个新键 k5、k6;每个查询先与自己的本轮正键及更新前的旧队列比较。比较完成后,将 k5、k6 按序加入,并移除最旧的 k1、k2;下一批使用的字典于是变为 `[k3,k4,k5,k6]`。这是“容量 4、每批 2 个新键”的教学设置。P17 为便于逐项跟踪,改用每批 1 个新键,得到 `[k2,k3,k4,k5]`;入队和出队遵守相同的先进先出规则。 每个槽保存的是当时算好的向量。k2不会因为查询编码器更新,就自动变成今天重新编码的k2;也没有保存一条可以反传回早先图像的完整计算图。队列的身份标签帮助我们看清“新信息进入、旧信息退出”,向量值则用于相似度计算。 容量更大可以提供更多比较对象,也使最旧条目来自更早的步骤。容量、batch大小和编码器变化速度因此互相影响。课堂图只画4个槽便于指认,不能把4当作MoCo论文的配置。 ## 模拟师生追问(备课用,非课堂实录) 学生:为什么这张图一次移走两个旧键,P17 却只移走一个? 教师:本页一批放入 k5、k6 两个新键,所以容量不变时退掉最旧的 k1、k2,得到 [k3,k4,k5,k6]。P17 用 k5 一个新键跟完一整步,所以只退掉 k1,得到 [k2,k3,k4,k5]。队列规则没有改变,示意的批大小不同。 ## 继续学习 用4槽字典手推两步;LAB 07的trace是对应代码入口,不需要重训就能先理解对象。 - 学习路径:视图、投影头与历史字典 https://codingai-lec03.pages.dev/course/study/contrastive-views.html - CLS 05 · 对比学习:视图、投影与历史字典:https://codingai-lec03.pages.dev/course/notebooks/b8320404134f4a2e858ccfe7d50a71d3.html - LAB 07 · MoCo:历史 key、队列与两种更新:https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html ## 画面与条件 四槽FIFO从k1—k4变为k3—k6;新键为已算向量,最旧两键移出。 容量 4、本轮 2 个新键仅为便于观察的教学队列,不是原论文超参数。比较使用本轮更新前队列;示意下一批的维护结果为 [k3,k4,k5,k6]。 P17 改用每批 1 个新键跟完一次学习,因而只移出 k1,下一批字典为 [k2,k3,k4,k5];两页示意批大小不同,先进先出规则相同。 - MoCo 原论文(2019 / CVPR 2020):https://arxiv.org/html/1911.05722v3 --- # P16 两个编码器,不同的更新方式 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p16.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p16/0 两种参数更新解决不同任务:query学当前选择,key维持较平滑的编码规则。 ## 连续讲述 查询编码器用梯度学习;键编码器不直接通过这条对比损失反向更新,而是用查询编码器参数的移动平均来跟随。 例如只看一个参数分量,旧的键参数是 1,当前查询参数是 2,平均系数取 0.9,那么键参数会变成 1.1,而不是立刻跳到 2。真实网络是对所有参数作这样的更新,这个小数字只是帮助我们看清“缓慢跟随”是什么意思。 这里的 momentum 平均的是网络参数,不是优化器里累积梯度的动量。较慢变化的键编码器,让跨批次保存的键更一致,但旧特征依然不是被神奇地刷新为今天的结果。队列和参数平均,分别回应“大”和“相对一致”两个要求。 ## 梯度更新和 EMA 更新作用在不同地方 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p16.html#moco-two-parameter-updates query编码器从当前损失接收梯度,例如 $\theta_q\leftarrow\theta_q-\eta\nabla_{\theta_q}L$。key编码器不沿当前loss反传,而通过参数移动平均跟随query:$\theta_k\leftarrow m\theta_k+(1-m)\theta_q$。 令旧key参数为(0,2),当前query参数为(2,4),m=0.9,则key变为(0.2,2.2)。若query下一次仍不变,再更新得到(0.38,2.38)。平均的是网络参数,不是历史队列向量;也不同于优化器保存的梯度动量。 较慢的key变化减轻历史向量的坐标系漂移。它并不把历史key全部校正为新参数下的值,也不保证任意队列容量都合适。m=0立即追上query,m=1彻底冻结;这两个极端帮助理解时间尺度,但通常不是希望采用的默认方案。 ## 继续学习 手算两次EMA,并在图上指出梯度箭头与EMA箭头的落点;再到P17串完整一步。 - 学习路径:视图、投影头与历史字典 https://codingai-lec03.pages.dev/course/study/contrastive-views.html - CLS 05 · 对比学习:视图、投影与历史字典:https://codingai-lec03.pages.dev/course/notebooks/b8320404134f4a2e858ccfe7d50a71d3.html - LAB 07 · MoCo:历史 key、队列与两种更新:https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html ## 画面与条件 query分支接受损失梯度,key分支停止梯度且参数由EMA跟随;算例0.9×1+0.1×2=1.1。 EMA 算例 m=.9、旧 θk=1、当前 θq=2,结果1.1。真实网络对参数张量更新;这不是优化器梯度动量。 - MoCo 原论文(2019 / CVPR 2020):https://arxiv.org/html/1911.05722v3 --- # P17 把一次学习完整走通 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p17.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p17/0 本页把前两页对象放回一条可追踪过程。纸面步骤与Notebook时序有细微差异,说明已明确标注。 ## 连续讲述 现在把刚才拆开的部件接起来。同一图片产生两个视图,分别形成查询和正键;再加上队列中的其他键,构成这次需要区分的候选。 比较产生损失,损失通过查询分支改变参数。键编码器按自己的平均规则跟随,新的键进入队列,旧键离开。下一批数据到来时,网络参数和字典内容都已经不是上一批的状态。 请沿着箭头看:视图关系提供答案,损失提供更新方向,字典组织提供更多比较对象,慢编码器支持跨步复用。我们不需要在课堂手写整个训练框架,但要能够说明每个部件解决什么问题。否则拿掉一个部件以后,连实验在检验哪项假设都说不清楚。 ## 把一次学习走通,也读清实现顺序 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p17.html#moco-one-step-paper-and-code 沿当前图逐项走:本批原图产生两视图;query/key编码器分别给出q、k⁺;q与k⁺及旧队列比较;loss更新query;key按EMA跟随;本次已经算出的k⁺入队、最老key出队。旧队列不因本步更新重算。 主讲画面按原论文Algorithm 1排列。当前LAB 07教学代码则在计算本批key之前执行EMA,再计算loss和query更新。这是训练步内的时序约定差异,读代码时必须跟着实际顺序,不要声称逐行相同。两者共享的关键机制是:query接受梯度、key停止梯度并平滑跟随、队列复用历史特征。 LAB 07另外在队列保存源图ID,屏蔽同源旧key,避免同一图片再次出现时成为自己的负例;不同源图仍可能属于同一类别。它没有论文的分布式ShuffleBN,训练15轮的效果也不用于论文排名。学生完成本节后,应能指出一条key何时生成、何时用于比较、何时离开。 来源:MoCo 原论文 §3、§4.2、Table 2 https://arxiv.org/html/1911.05722v3 ## 模拟问答:旧 key 还能比较吗? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p17.html#moco-point-at-the-figure-dialogue 以下为备课用模拟对话,不是实际课堂记录。 **学生:**“你说是前面算过的特征,图上到底哪几个?” **教师:**“队列里的k1到k4是本步开始前就存在的。正在两视图分支里生成的k5是这次的新key。比较结束后k1离开,k5进入;你看下一批字典仍有k2、k3、k4。” **学生:**“编码器已经变了,它们为什么还能比?” **教师:**“这是设计需要处理的困难。query可以随梯度更新,key参数用EMA缓慢跟随,减少相邻批之间的变化。旧向量没有重算,所以只能说缓和漂移,不能说完全一致。队列越长,最旧条目越老,取舍就更明显。” **学生:**“那EMA是不是改了队列里面的数?” **教师:**“没有。看箭头:EMA连的是两套网络参数,FIFO操作连的是向量槽位。把这两条箭头分开,整步就清楚了。” ## 继续学习 先读模拟对话并指着图回答,再读LAB 07真实训练函数;检查key无梯度、FIFO和源图ID屏蔽。 - 学习路径:视图、投影头与历史字典 https://codingai-lec03.pages.dev/course/study/contrastive-views.html - CLS 05 · 对比学习:视图、投影与历史字典:https://codingai-lec03.pages.dev/course/notebooks/b8320404134f4a2e858ccfe7d50a71d3.html - LAB 07 · MoCo:历史 key、队列与两种更新:https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html ## 画面与条件 一对同源视图、query/key编码、正键与旧字典、损失、query梯度、key EMA和下一批字典在同图逐步接齐。 本图按 MoCo 原文 Algorithm 1 理解一次循环:两分支编码并对 key 停止梯度,使用旧字典计算损失,反传更新 query,EMA 更新 key 参数,再将本批键入队并移除最旧键。本页单样本教学循环:正键k+=k5,新字典为[k2,k3,k4,k5],只移出k1。P15另用双样本说明入队批量,二者规模明确区分。字典旧向量不被追溯重算。 - MoCo 原论文(2019 / CVPR 2020):https://arxiv.org/html/1911.05722v3 --- # P18 方法不是一条封闭的家谱 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p18.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p18/0 收束对比路线:方法组件可以组合,是否有用还要看下游证据。由此转向不同目标的重建路线。 ## 连续讲述 刚才为了讲明白计算取舍,我们先用了 SimCLR 的图。这不是历史发表顺序:MoCo 的预印本在 2019 年,SimCLR 在 2020 年,之后的 MoCo v2 明确吸收了 SimCLR 中的非线性投影头和增强设计。 MoCo 原文还比较了多项检测与分割迁移任务,而不只报分类读出的结果。这使“不依赖逐图类别标签也能获得可用视觉表示”有了下游证据。 这是一个很好的研究案例。持续的问题是怎样学习可迁移表示,但一个框架不必只沿着自己的名字演化;别的工作发现的有效设计,可以被吸收进去,再看它在新的组织方式下是否成立。 所以读论文时,不只看方法缩写。把目标、增强、投影头、字典组织和评价协议拆开,才能看见到底换了什么。何恺明及合作者在这里提供的是持续追问问题的线索,不是一份把所有方法归到同一人名下的作品目录。 ## 方法是可组合的设计,不是封闭家谱 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p18.html#contrastive-designs-can-recombine MoCo突出历史字典与动量编码器,SimCLR突出批内两视图比较及投影头等设计。它们不是互相排斥的整套身份:后续方法可以把一方有效的组件放入另一种计算组织中。 这种看法更有助于阅读论文。把一套方法拆成数据与增强、表示网络、目标、候选组织、更新规则、评价协议六个部分,再问新论文究竟改了哪一部分。若同时改了增强、训练时长、模型和loss,最终提高可以是有效工程组合,但不能直接把全部提高归给一个名字。 正面进展也应看清:这些设计使没有人工类别目标的图像学习成为可迁移起点。下一块用MoCo原论文的检测微调结果展示这件事,随后转到另一条不同目标路线——预测缺失像素。 ## MoCo 的表示怎样支持检测迁移? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p18.html#moco-voc-transfer-evidence MoCo原论文Table 2(b)在同一Faster R-CNN、ResNet-50-C4设置下比较预训练起点: | 预训练 | box AP | AP50 | AP75 | |---|---:|---:|---:| | ImageNet-1M 人工类别监督 | 53.5 | 81.3 | 58.8 | | ImageNet-1M MoCo | 55.9 | 81.5 | 62.6 | 两者均在VOC trainval07+12检测标注上全层微调24k次,评价为VOC test2007,取5次实验平均;AP是COCO式多IoU阈值指标,AP50/AP75是指定阈值。MoCo相对提高2.4 AP,说明视图对比学出的参数在这套下游协议下提供了有效起点。 这不是冻结模型直接会检测:检测头与主干都用检测监督适配。它也不把所有预训练和下游总算力配平。相同论文的另一种主干结构收益不同,因此结论应保留具体模型与协议。 来源:MoCo 原论文 §3、§4.2、Table 2 https://arxiv.org/html/1911.05722v3 ## 教师模型提供的是哪一种答案? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p11.html#teacher-target-source-and-collapse 固定教师蒸馏让学生拟合一个已有模型的概率分布;EMA教师则来自学生参数的历史平均。这两种教师都不是天然正确的类别真值,也不必比学生更大。 以logits(4,2,0)为例,温度1的概率约(0.8668,0.1173,0.0159),温度2约(0.6652,0.2447,0.0900)。软目标除最大类外,还表达其他类别的相对接近。学生可以用交叉熵拟合它,但也可能继承教师的背景捷径。 BYOL、DINO说明不显式使用负例也能学表示;它们采用的不对称预测、停止梯度、教师更新及输出分布处理应整体理解。当前LAB 17训练的是解析输入上的固定线性教师蒸馏,再单独算EMA,不是DINO视觉复现。这里适合作为理解“目标从模型取得”的选读分支,阅读后回到P18。 来源:BYOL 原论文 https://arxiv.org/abs/2006.07733 来源:DINO 原论文 https://arxiv.org/abs/2104.14294 ## 继续学习 先读MoCo检测证据表及协议;教师目标为选读,随后直接进P19。 - 学习路径:表示怎样迁移到新任务 https://codingai-lec03.pages.dev/course/study/readout-transfer.html - 学习路径:视图、投影头与历史字典 https://codingai-lec03.pages.dev/course/study/contrastive-views.html - CLS 05 · 对比学习:视图、投影与历史字典:https://codingai-lec03.pages.dev/course/notebooks/b8320404134f4a2e858ccfe7d50a71d3.html - CLS 01 · 学习信号、表示与迁移:https://codingai-lec03.pages.dev/course/notebooks/fb4365d604974dd19df492cb22516e44.html - CLS 06 · 表示的三个检查:目标、信息与新域:https://codingai-lec03.pages.dev/course/notebooks/c0645a4db6e04188ab5b119e87c53bed.html - LAB 17 · 软目标与坍塌:三个数值检查:https://codingai-lec03.pages.dev/course/notebooks/268a4ab11b464c64b065f9fc12b19cc7.html ## 画面与条件 MoCo 2019.11、SimCLR 2020.02、MoCo v2 2020.03时间带;队列/EMA与投影头/增强两路汇合。 原始 arXiv 首次提交:MoCo 2019-11-13;SimCLR 2020-02-13;MoCo v2 2020-03-09。v2 明确采用 MLP 投影头与更多增强。本页不展示论文性能表或未核实提升数字。 - MoCo 原论文(2019 / CVPR 2020):https://arxiv.org/html/1911.05722v3 - SimCLR 原论文(2020):https://arxiv.org/abs/2002.05709 - MoCo v2 技术报告(2020):https://arxiv.org/abs/2003.04297 --- # P19 另一条路线:根据可见内容预测缺失 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p19.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p19/0 重建不是简单复制;瓶颈、破坏或遮挡为学习增加约束,和视图关系形成另一类目标。 ## 连续讲述 刚才的目标要求两个视图建立对应。另一条路线不先问“它和谁相同”,而是问“只看到一部分,能否预测没看到的部分”。视觉补全和重建研究并不是 MAE 才出现,MAE 是在这条线上重新选择任务难度与计算组织。 图像局部经常有冗余。缺一个很小的块,模型可能靠邻近颜色纹理就完成得不错;隐藏更多内容,预测会需要利用更大范围的结构,但任务也可能过难。 所以不能只把语言里的遮挡形式搬过来,就认为视觉问题已经解决。要具体决定遮多少、编码器看什么、解码器做什么,以及最后拿什么评价表示。下面用同一张图把 MAE 的这几个选择连起来。 ## 重建需要什么限制,才不只是在复制? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p19.html#reconstruction-restrictions 如果把原图完整交给一个足够强的模型,再要求原样输出,复制就能得到零误差。重建作为表示学习目标,需要规定信息怎样通过:离散词典限制代码只能是一个索引,PCA限制在线性低维子空间,去噪自编码器限制只能看被破坏输入,MAE限制只看到部分位置。 这些限制迫使模型利用数据规律。反过来,跳连若把目标原样送到输出,或输入预处理意外泄漏被遮像素,就可能完成重建却绕过了希望训练的表示。 本讲不要求先学完所有自编码器。沿“输入可见什么→中间表示允许什么→在哪些位置算误差”即可比较它们。LAB 05保留真实patch词典拟合,CLS 05给PCA与去噪推导,LAB 08再把重建和冻结读出接到同一图像实验。 ## 保留最大方差,不等于保留任务答案 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p19.html#pca-reconstruction-worked-example 取四点 $(2,0),(-2,0),(0,1),(0,-1)$。均值为零,按四个样本取平均的协方差为diag(2,0.5)。PCA只保留一维时选择横轴:前两点不变,后两点投影为原点。平均平方重建误差为 $(0+0+1+1)/4=0.5$;若选纵轴,则为2。 在“尽量重建输入”这个题目下,横轴合理。但若任务要区分纵坐标正负,两点落在原点后就无法再区分。问题不在PCA算错,而在重建目标和未来用途不完全一致。 这个反例同样提醒我们理解深层重建:低像素误差是一个有意义的成绩,却不是所有语义任务的替代指标。需要另外检验表示能否支持类别、颜色或空间读出。 ## 为什么缺失处可能被补得模糊? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p19.html#squared-error-conditional-mean 假设可见条件完全相同,而某个隐藏像素等概率为0或1。总输出0时,平均平方误差是0.5;总输出1也为0.5;输出0.5时,两种情况误差都是0.25,因此平均更小。 一般地,平方损失的最佳确定性预测是给定可见输入的条件均值。存在多种合理补全时,均值可能看起来模糊,即使模型已很好地优化这项损失。这与“完全没学到结构”不是同一个判断。 LAB 08里应把恢复的主要笔画、错误补全和误差图一起读。到第四讲再问:如果我们希望产生某一种合理样本,而不是平均多个可能,训练目标和输出过程应怎样改变?图像描述也已在生成文本,后续生成课将把条件多解作为更一般的问题。 ## 选读:结构与遮挡目标为什么要共同设计 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p19.html#architecture-objective-co-design 把原MAE目标直接搬到卷积网络,并不意味着所有结构假设仍成立。ConvNeXt V2将遮挡图看成稀疏空间输入,用FCMAE组织学习,并引入GRN改善通道响应的多样性。这提供了一个正面研究例子:目标与网络结构可以一起设计。 原论文Table 3的Base比较(ImageNet-1K top-1,%): | 架构 | 监督训练 | FCMAE预训练后微调 | |---|---:|---:| | V1-Base | 83.8 | 83.7 | | V2-Base | 84.3 | 84.6 | FCMAE列先预训练800轮再微调,不能称等总预算。V1中换目标为−0.1,V2中为+0.3;这提示组合值得研究,却不能仅凭四个数识别一个严格因果交互。这里是论文证据,和LAB05的patch词典拟合不是同一实验。读完回到P22的用途评价,不再另开主讲章节。 来源:ConvNeXt V2 原论文 Table 3,800-epoch FCMAE https://arxiv.org/pdf/2301.00808 ## 继续学习 CLS 05提供连续推导;想做最透明优化选LAB 05,想做图像模型选LAB 08,二选一即可。 - 学习路径:从遮挡重建到表示评价 https://codingai-lec03.pages.dev/course/study/masked-reconstruction.html - CLS 04 · 重建:约束、位置与表示评价:https://codingai-lec03.pages.dev/course/notebooks/23b0affc4b824723927bd0938fd2bbda.html - LAB 05 · 像素 patch 词典:拟合与重建:https://codingai-lec03.pages.dev/course/notebooks/de39b998077f44cca4b8407085547766.html - LAB 08 · 图像重建:遮挡损失与表示评价:https://codingai-lec03.pages.dev/course/notebooks/b5ba27f2c5ba4ec0922208a7d5dc80a4.html ## 画面与条件 同一图的完整、单块遮挡和75%遮挡并列,不展示模型重建结果。 遮挡图由同一原图与固定网格生成。小遮挡仅隐藏位置9;大遮挡保留位置0、3、9、14。不绘制、也不宣称本轮有 MAE 重建输出。 - MAE 原论文 §3(2021):https://arxiv.org/html/2111.06377v3 --- # P20 十六个图块,只有四个进入编码器 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p20.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p20/0 固定16块与4个可见位置,让编码器输入可以逐项指认;计算节省与隐藏比例的关系留在本页说明。 ## 连续讲述 为便于观察,把这张图分成十六个图块,遮掉十二个,也就是四分之三。编码器只处理剩下四块,而不是把全部十六个位置都送进去再告诉它哪些是空的。 每个可见图块变成向量,并保留位置线索。这里我们只需要把编码器理解成将可见块组织成表示的网络,不在今天打开 Transformer 内部。 这个结构同时回应学习与计算:任务要求根据少量可见内容推测隐藏部分;昂贵的编码器又少处理了很多输入。注意,十六变四不代表整个系统必然加速四倍,其他计算仍然存在。现在先看清信息流,再看缺失位置怎样回到解码端。 ## 16 块中,编码器真的只看见 4 块 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p20.html#mae-visible-patch-input 当前图把原图切为4×4网格,位置编号0–15,可见集合固定为{0,3,9,14},其余12块隐藏。原图仍由数据管线保存,供损失比较;它不作为完整输入偷偷进入编码器。 可见patch转换成向量,并带着原始位置线索进入编码器。这里的位置不能压成“现在队列中的第1、2、3、4项”:位置0与位置14在原图的含义不同。输出表示还要能够放回原来的空间位置。 4/16是课堂上说明75%遮挡的简单图。随机遮挡会让训练中的可见集合变化;当前固定集合是便于逐项追踪的一个样本。原MAE的非对称设计关键在于让较重编码器只处理可见项,而不是在完整图编码之后才把12块涂黑。 ## 少看图块为何省计算,又为何不是固定加速比 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p20.html#mae-compute-not-sixteen-times 16块只保留4块,编码器处理的项数变为四分之一。一些逐项计算随项数下降;涉及两两位置的计算从16²降为4²,是原来的1/16。这可以解释为什么高遮挡率有计算价值,但不需要在本讲展开注意力算法。 整个训练还包含patch转换、其他网络层、解码器、损失和硬件调度。解码器重新处理完整位置,因此端到端耗时不等于某个二次项的比值。课堂上“16倍”只可描述这个构造的两两项数变化,不能宣称实际训练快16倍。 当前LAB 08用稠密卷积网格加mask通道,仍处理完整8×8图像;它能教遮挡目标与评价,但不能复现原MAE可见token编码器的计算节省。方法机制与教学模型的对应范围应这样逐项标清。 ## 继续学习 对照LAB 08最后的原MAE比较表,明确教学ConvAE仍处理稠密网格;不要拿它测原MAE加速。 - 学习路径:从遮挡重建到表示评价 https://codingai-lec03.pages.dev/course/study/masked-reconstruction.html - CLS 04 · 重建:约束、位置与表示评价:https://codingai-lec03.pages.dev/course/notebooks/23b0affc4b824723927bd0938fd2bbda.html - LAB 08 · 图像重建:遮挡损失与表示评价:https://codingai-lec03.pages.dev/course/notebooks/b5ba27f2c5ba4ec0922208a7d5dc80a4.html ## 画面与条件 4×4共16块,固定可见0、3、9、14四块携位置进入编码器,12个隐藏块不输入。 块索引按从左到右、从上到下的0至15。可见集合={0,3,9,14},隐藏比例=12/16=.75。现实预训练随机采样,此处固定采样结果以便追踪。 - MAE 原论文 §3(2021):https://arxiv.org/html/2111.06377v3 --- # P21 解码器补位置,目标来自原图 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p21.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p21/0 解码阶段恢复位置,再预测内容;目标从原图来,误差只在隐藏集合比较。 ## 连续讲述 来到解码阶段,编码结果和缺失位置的占位向量一起形成完整的位置集合。解码器根据这些信息预测像素,训练时拿原图中被隐藏的内容作目标。 于是答案的来源很清楚:我们先把它挡住,再让模型预测,不需要另外请人标“这是一只猫”。原始 MAE 的损失计算在被遮住的图块上,不能只靠复制已经看见的部分完成任务。 更重要的是,预训练结束后,我们关心的是留下的编码器表示;为重建服务的解码器不必成为后续分类或检测系统的一部分。这也解释了为什么编码端和解码端可以承担不同重量。接下来要问:重建完成得好,是否就说明留下的表示什么都适合? ## 补回位置与补回像素,是两件事 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p21.html#mae-shuffle-restore-worked-example 用4个位置缩小算例。原位置是[0,1,2,3],随机顺序为[2,0,3,1],取前两项进入编码器。得到[z2,z0]后,解码阶段先加两个mask项:[z2,z0,M,M]。逆排列为[1,3,0,2],按它取值后成为[z0,M,z2,M]。 这时我们只是恢复了“谁在什么位置”。位置1和3仍未知,M不是正确像素;解码器要结合可见内容及各位置线索作预测,再与原图相应位置比较。 如果忘了逆排列,模型可能把正确形状放到错误坐标,loss也会对错位置。LAB 08的索引热身正好检查这个对应关系;后面的卷积重建才包含参数学习。不要把数组重排成功写成模型学会了补图。 ## 只在隐藏位置算损失,分母也要一致 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p21.html#mae-masked-loss-denominator 令隐藏集合为 $\mathcal M$,每个patch含P个像素值。一个清晰的口径是先在patch内平均,再在隐藏patch间平均:$L=|\mathcal M|^{-1}\sum_{i\in\mathcal M}P^{-1}\sum_{p=1}^{P}(\hat x_{ip}-x_{ip})^2$。16块中隐藏12块时,外层分母就是12。 若把已知可见像素直接拼回预测图,它们误差天然为零。此时对整图平均会使指标更小,却没有改善隐藏预测。图像面板可以为方便阅读拼回可见真值,但必须说明;数值则继续评价隐藏集合。 原论文还讨论对每个patch的像素做归一化后作为目标。比较不同实验时,要同时核对预测位置、像素缩放及归一化;同样叫“MSE”的数,分母和目标一变就未必可比。 ## 模拟问答:不知道的地方为何还有位置? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p21.html#mae-position-dialogue 以下为备课用模拟对话,不是实际课堂记录。 **学生:**“遮住的地方没有像素,为什么解码器还有16项?” **教师:**“我们不知道内容,但知道问题要问哪个位置。可见位置放编码表示,隐藏位置放共同的mask占位,再给每项自己的位置线索。占位不是答案,位置告诉模型答案该落在哪儿。” **学生:**“既然原图有答案,为什么不直接把它送进去?” **教师:**“原图由损失端保存。若把隐藏像素作为输入,模型就可能复制,遮挡任务被取消了。看图时把编码器入口和损失比较端分开。” **学生:**“补得像原图,就算学会分类了吗?” **教师:**“那说明重建这件事做得更好。下一页再冻住编码器,另用标签做读出;只有测到那份结果,才能说明表示对分类有用。” ## 继续学习 先手算四位置逆排列与分母,再读模拟问答。理解位置后才进入LAB 08重建与误差图。 - 学习路径:从遮挡重建到表示评价 https://codingai-lec03.pages.dev/course/study/masked-reconstruction.html - CLS 04 · 重建:约束、位置与表示评价:https://codingai-lec03.pages.dev/course/notebooks/23b0affc4b824723927bd0938fd2bbda.html - LAB 08 · 图像重建:遮挡损失与表示评价:https://codingai-lec03.pages.dev/course/notebooks/b5ba27f2c5ba4ec0922208a7d5dc80a4.html ## 画面与条件 4个编码结果和12个共享mask加位置线索进入解码器;输出是16个符号像素预测,橙框只标隐藏位置,原图小图为目标。 M 为共享学习向量,各位置还需位置线索;h 为相应可见块的编码结果(进入解码前可投影维度)。ŷ_i 是预测像素向量的符号占位,图中的原图小图是监督目标而不是重建结果。展示未归一化像素MSE;原论文亦比较逐块像素归一化目标。loss 的求和与平均仅在隐藏位置。 - MAE 原论文 §3(2021):https://arxiv.org/html/2111.06377v3 --- # P22 能补图,不等于每项任务都读得好 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p22.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p22/0 重建结果与表示用途分开评价,并给出真实正面研究结果和课程小模型结果各自的身份。 ## 连续讲述 重建好,是关于重建任务的证据。它可能利用了有价值的结构,也可能将很多能力花在纹理和局部统计上;我们还不能由一幅看起来不错的补图,推出所有语义任务都已经解决。 反过来也一样:一种表示不容易被简单分类头读出,不等于它完全没有相关信息。评价方法在限定我们允许怎样使用表示。 因此,要把预训练成绩和下游用途分开。对比学习、遮挡重建、有监督分类,都应该送进你真正关心的任务,检查在相同数据和训练条件下能做什么。我们要的不是一个抽象的“最好表示”称号,而是清楚知道某种表示以什么方式帮助了当前问题。 ## 为什么缺失处可能被补得模糊? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p19.html#squared-error-conditional-mean 假设可见条件完全相同,而某个隐藏像素等概率为0或1。总输出0时,平均平方误差是0.5;总输出1也为0.5;输出0.5时,两种情况误差都是0.25,因此平均更小。 一般地,平方损失的最佳确定性预测是给定可见输入的条件均值。存在多种合理补全时,均值可能看起来模糊,即使模型已很好地优化这项损失。这与“完全没学到结构”不是同一个判断。 LAB 08里应把恢复的主要笔画、错误补全和误差图一起读。到第四讲再问:如果我们希望产生某一种合理样本,而不是平均多个可能,训练目标和输出过程应怎样改变?图像描述也已在生成文本,后续生成课将把条件多解作为更一般的问题。 ## 能补图与能识别,需要两张成绩单 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p22.html#reconstruction-and-readout-two-results 重建评价比较预测像素与原图,冻结读出则固定编码器,用有标签参考集或新头预测类别。前者回答模型是否利用可见结构恢复缺失,后者回答这份表示能否支持指定用途。 当前LAB 08的历史基准用1257张训练、540张保留的8×8数字图。去噪ConvAE的全像素MSE从直接使用破坏图的0.06244降至0.03217;清洁输入h的冻结5NN则从相同架构随机起点84.26%提高到95.00%。遮挡ConvAE的对应读出从88.52%到92.04%。这里是两份独立测量共同支持有用性。 原图先切分,再生成噪声和mask;标签不进入重建损失。结果来自已保存运行,本轮没有重训;当前Notebook另记有旧云端复核。它不是原ViT MAE复现,也没有写作者分组,不能据此声称跨写作者泛化。 ## MAE 的正面证据也依赖评价接口 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p22.html#mae-finetuning-evidence MAE论文Table 3使用ImageNet-1K图像作自监督预训练,再端到端微调分类。ViT-L/16在224输入的top-1为85.9%;同表从零训练实现为82.6%。这里的结果支持:遮挡像素目标可以为较大视觉模型提供有效起点。它不是只看重建图好不好看。 论文Figure 9进一步指出,同一ViT-L表示的线性读出为73.5%,只微调最后一个块即可到81.0%。因此线性读出低,并不自动意味着这份表示不适合适配;评价允许改变多少计算,会影响判断。 这些是论文在明确训练与评价条件下的结果,不是本课程LAB 08的数字。阅读时区分三层:MAE原论文、当前教学卷积模型、页面里的16块索引图。它们分别提供研究实证、可运行学习链和透明机制。 来源:MAE 原论文 §3、Table 3、Figure 9 https://arxiv.org/html/2111.06377v3 ## 选读:结构与遮挡目标为什么要共同设计 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p19.html#architecture-objective-co-design 把原MAE目标直接搬到卷积网络,并不意味着所有结构假设仍成立。ConvNeXt V2将遮挡图看成稀疏空间输入,用FCMAE组织学习,并引入GRN改善通道响应的多样性。这提供了一个正面研究例子:目标与网络结构可以一起设计。 原论文Table 3的Base比较(ImageNet-1K top-1,%): | 架构 | 监督训练 | FCMAE预训练后微调 | |---|---:|---:| | V1-Base | 83.8 | 83.7 | | V2-Base | 84.3 | 84.6 | FCMAE列先预训练800轮再微调,不能称等总预算。V1中换目标为−0.1,V2中为+0.3;这提示组合值得研究,却不能仅凭四个数识别一个严格因果交互。这里是论文证据,和LAB05的patch词典拟合不是同一实验。读完回到P22的用途评价,不再另开主讲章节。 来源:ConvNeXt V2 原论文 Table 3,800-epoch FCMAE https://arxiv.org/pdf/2301.00808 ## 继续学习 在LAB 08对照清洁、破坏、预测、误差四列,再读冻结5NN表;不把两种指标相互替代。 - 学习路径:表示怎样迁移到新任务 https://codingai-lec03.pages.dev/course/study/readout-transfer.html - 学习路径:从遮挡重建到表示评价 https://codingai-lec03.pages.dev/course/study/masked-reconstruction.html - CLS 04 · 重建:约束、位置与表示评价:https://codingai-lec03.pages.dev/course/notebooks/23b0affc4b824723927bd0938fd2bbda.html - LAB 08 · 图像重建:遮挡损失与表示评价:https://codingai-lec03.pages.dev/course/notebooks/b5ba27f2c5ba4ec0922208a7d5dc80a4.html - LAB 05 · 像素 patch 词典:拟合与重建:https://codingai-lec03.pages.dev/course/notebooks/de39b998077f44cca4b8407085547766.html ## 画面与条件 遮挡预训练编码器分别连接形状与颜色任务,重建误差与下游成绩明确分开。 - MAE 原论文 §3(2021):https://arxiv.org/html/2111.06377v3 --- # P23 冻结读出和微调,在问不同的问题 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p23.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p23/0 把第一部分的方法转为使用与评价:冻结读出问现成表示,微调问适配起点,二者应各有协议。 ## 连续讲述 第一种检查,冻结编码器,只训练一个线性读出。这在问:在这种受限的读出方式下,已经得到的特征有多可用? 第二种检查,允许部分或全部参数继续学习。这在问:以已有参数为起点,适配新任务能够达到什么结果?成功可能来自原有表示,也可能包含适配过程中重新学到的能力。 第三种,是把表示放进检测或分割,检查空间任务。它们需要的信息和训练接口又不同。所以报告“迁移很好”时,至少要补上迁移到哪里、训练哪些参数、使用多少标签、怎样切分新数据。对科研实践来说,这比只记一个 ImageNet 分数更有用。 ## MAE 的正面证据也依赖评价接口 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p22.html#mae-finetuning-evidence MAE论文Table 3使用ImageNet-1K图像作自监督预训练,再端到端微调分类。ViT-L/16在224输入的top-1为85.9%;同表从零训练实现为82.6%。这里的结果支持:遮挡像素目标可以为较大视觉模型提供有效起点。它不是只看重建图好不好看。 论文Figure 9进一步指出,同一ViT-L表示的线性读出为73.5%,只微调最后一个块即可到81.0%。因此线性读出低,并不自动意味着这份表示不适合适配;评价允许改变多少计算,会影响判断。 这些是论文在明确训练与评价条件下的结果,不是本课程LAB 08的数字。阅读时区分三层:MAE原论文、当前教学卷积模型、页面里的16块索引图。它们分别提供研究实证、可运行学习链和透明机制。 来源:MAE 原论文 §3、Table 3、Figure 9 https://arxiv.org/html/2111.06377v3 ## 冻结读出与微调分别在问什么? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p23.html#readout-versus-finetuning-protocol 冻结读出把 $f_\theta$ 固定,只学习新头 $Wh+b$。它问“当前表示中,答案能否被这个受限读出取出?”kNN甚至不拟合新网络,但仍用训练标签建参考库,并依赖距离、归一化和k。微调允许编码器改变,问“这个起点经过给定适配后能做到什么?” 公平比较首先固定目标任务、原图划分、标签预算和评价规则。按原图先划分再生成视图,避免同一原图的两个裁剪分别进入训练和测试。超参数和停点用验证集选择,测试集用于最终报告。已经看过的保留结果可供探索,却不再是未知验收题。 冻结参数还不自动冻结所有状态。含BatchNorm时,运行统计可能在train模式改变;`eval()`、`no_grad()`与`requires_grad_(False)`控制不同对象。LAB 02保留这项实现选读,主讲先抓住“哪些参数可动,答案用在哪里”。 ## 同一表示,增加标签与改变读出是两种干预 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p23.html#fixed-representation-label-budget-evidence LAB 01使用一个已有有监督CNN的32维表示,目标为MNIST数字是否≥5。640个目标样本与源模型训练/验证索引分离,目标再分256训练、128验证、256保留;图像统一右移2像素。 保存结果中,标签32→256时,kNN保留准确率从0.7148到0.9492;固定C=10的线性逻辑回归从0.6133到0.8359。编码器从头到尾未变,所以差别来自标签预算与读出使用方式,而不是编码器重新学了一次。 这提供一个很具体的学习动作:先固定预算比较两种读出,再固定读出比较预算。不要把这组结果误读成“自监督胜过监督”;源CNN本来就是监督训练的。也不要据单次差距断言表示中没有某种信息——正则强度和读出函数类都是竞争解释。 ## 解冻更多参数,不保证更好 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p23.html#adaptation-scope-and-negative-result LAB 02从同一十分类CNN出发比较head、late、all,并加入随机起点scratch。新任务仍是数字是否≥5;head只更新新头,late更新后部,all更新全网。三种迁移共享源checkpoint、新头初始化、数据顺序和训练轮数。 已有默认协议是256训练、128验证、4轮、Adam学习率0.002。保存的最低验证交叉熵为head 1.906、late 0.877、all 0.849、scratch 0.611。按预先确定的“最低验证CE”规则,这一次应选择scratch,而不是因为课程在讲迁移就偏爱迁移模型。 这个负结果有教学价值:迁移是一种可检验起点优势,不是身份保证。相同轮数并不等算力,相同学习率也未必给每种范围公平的调优机会。可进一步只改标签预算或位移,再事先确定新的验证协议;不能反复看同一测试集直到挑出喜欢的结果。 ## 信息还在,与一条直线能读出是两件事 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p12.html#information-and-readable-form 四点 h 为 (−1,−1)、(−1,+1)、(+1,−1)、(+1,+1),同号标签 0、异号标签 1。每一点都不同,标签由 h 完全确定;但两类位于对角,无法用一条直线完全分开。
左图四个 h 坐标:同号两角为标签 0、异号两角为标签 1;右图 z=h1h2 数轴,两个标签 1 输入都落在 −1,两个标签 0 输入都落在 +1,阈值为 0。每个数轴位置对应两个输入。
放大查看四点图 ↗ · 精确构造的四点读出:左图保留输入身份,右图用乘积改变可读形式。图中位置和标签由数据表确定,并非训练输出。
左图每个输入都有独立坐标,标签也完全由坐标确定;但同类占据对角,不能用一条直线把两类完全分开。右图只保留乘积 $z=h_1h_2$:两个异号输入都落在 −1,两个同号输入都落在 +1。现在一个零阈值 $z<0$ 就能正确读取标签;每个数轴位置合并了两个输入,图中不通过抖动伪造不同的 z 值。 | h1 | h2 | 标签 y | z=h1h2 | |---:|---:|---:|---:| | −1 | −1 | 0 | +1 | | −1 | +1 | 1 | −1 | | +1 | −1 | 1 | −1 | | +1 | +1 | 0 | +1 | 这个变换没有增加标签信息,并且合并了原来不同的输入身份。它是四点上的精确构造,不是某次训练得到的表征,也不能证明任意压缩都会改善读出,或少量训练样本一定能学出这个变换。 以下是备课用模拟追问,不是课堂实录。 **学生:**“既然左图不能画一条分界线,是不是标签信息已经丢了?” **教师:**“先看数据表,每个 h 都仍唯一确定标签;失败的是单一直线这类读出。换一个乘积坐标后,一条阈值就足够。可是只看 z,你已不能恢复原来是哪一个同号角点。这正好把‘某任务的信息’‘原输入身份’和‘读出函数能否使用’分开。” 因此低维不必等于丢掉任务信息,线性失败也不必等于信息全无。LAB18 同时报告 XOR 读出与离散 bit 算例;把结论限定在明确的输入、标签和函数类上,比笼统说“表示越压缩越好”更准确。 ## 继续学习 基础路线选LAB 01;需要参数迁移再做LAB 02。XOR与域变化是解释某种失败时才打开的分支。 - 学习路径:表示怎样迁移到新任务 https://codingai-lec03.pages.dev/course/study/readout-transfer.html - CLS 04 · 重建:约束、位置与表示评价:https://codingai-lec03.pages.dev/course/notebooks/23b0affc4b824723927bd0938fd2bbda.html - LAB 08 · 图像重建:遮挡损失与表示评价:https://codingai-lec03.pages.dev/course/notebooks/b5ba27f2c5ba4ec0922208a7d5dc80a4.html - CLS 06 · 表示的三个检查:目标、信息与新域:https://codingai-lec03.pages.dev/course/notebooks/c0645a4db6e04188ab5b119e87c53bed.html - LAB 01 · 固定表示:标签预算与读出:https://codingai-lec03.pages.dev/course/notebooks/4dd8605ed9904820919ea9e13d9e7d7c.html - LAB 02 · 参数迁移:冻结、局部与全量微调:https://codingai-lec03.pages.dev/course/notebooks/4bd450d54870432db91c80a4df563b8e.html - LAB 18 · XOR:信息保留与线性读出:https://codingai-lec03.pages.dev/course/notebooks/33066318f5884adc8417068df0f40431.html ## 画面与条件 冻结编码器的线性读出、可训练编码器的微调和空间任务三种协议,训练范围与数据条件并列。 线性读出:冻结编码器,仅训练线性头;微调:注明解冻部分或全部;空间任务也须注明骨干训练范围。不能由一种协议结果替代另一种。 - MAE 原论文 §3(2021):https://arxiv.org/html/2111.06377v3 --- # P24 学到表示之后,新任务提出了什么要求? 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p24.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p24/0 总结表示学习的选择与评价,再引入空间任务:输出要求变了,已有整图答案不能直接交付位置和实例。 ## 连续讲述 第一部分现在可以收起来了。监督分类、视图对比、遮挡重建,用不同信号塑造表示;它们不是“有用”和“没用”的简单对立,也不能只凭训练目标判断迁移能力。 我们已经有了可以复用的网络。下一步不再增加一种预训练方法,而是把它送进更具体的视觉任务。还是这张图,我不仅要说有杯子,还要找到每只杯子的位置,分出杯柄和边缘,并区分相邻两个同类对象。 这些要求会让原来容易忽略的空间信息成为中心。下面先回到分类预训练迁移到检测的历史案例,再看区域计算、像素预测和实例掩码怎样汇合。课堂顺序这样安排,是为了看清问题;历史上,它们并不是等现代自监督成熟才开始。 ## MoCo 的表示怎样支持检测迁移? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p18.html#moco-voc-transfer-evidence MoCo原论文Table 2(b)在同一Faster R-CNN、ResNet-50-C4设置下比较预训练起点: | 预训练 | box AP | AP50 | AP75 | |---|---:|---:|---:| | ImageNet-1M 人工类别监督 | 53.5 | 81.3 | 58.8 | | ImageNet-1M MoCo | 55.9 | 81.5 | 62.6 | 两者均在VOC trainval07+12检测标注上全层微调24k次,评价为VOC test2007,取5次实验平均;AP是COCO式多IoU阈值指标,AP50/AP75是指定阈值。MoCo相对提高2.4 AP,说明视图对比学出的参数在这套下游协议下提供了有效起点。 这不是冻结模型直接会检测:检测头与主干都用检测监督适配。它也不把所有预训练和下游总算力配平。相同论文的另一种主干结构收益不同,因此结论应保留具体模型与协议。 来源:MoCo 原论文 §3、§4.2、Table 2 https://arxiv.org/html/1911.05722v3 ## 新域失效与负迁移不能混为一谈 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p24.html#environment-shift-versus-negative-transfer 设源域中背景与标签强相关,目标域把这条关系翻转。一个使用背景的模型可以在随机源域保留集很好,到目标域却失败。这说明源域评价没有覆盖所需环境变化;还不能单独说明“用了预训练反而更坏”。 负迁移需要在同一目标任务和标签预算下比较预训练起点与合理基线,例如从零训练。当前LAB 22用两维解析输入训练逻辑回归,明确区分源域保留、目标零样本、32标签适配与32标签从零。历史输出中适配准确率0.9922,高于零样本0.0762;但从零为1.0,因此适配收益和相对从零优势不是同一数。 这是受控特征实验,不是视觉模型从照片自动发现因果。它帮助学生设计下一次真正研究:哪些环境被留出,哪些线索稳定,少量目标标签能修正什么? ## 从表示到空间输出:下一部分新增了什么? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p24.html#representation-to-spatial-output-bridge 第一部分回答怎样获得表示,以及怎样判断它对新任务有用。第二部分不重新挑选一套更响亮的预训练名称,而是改变答案格式:整图类别变成对象框、像素类别与实例身份。 整图向量可以告诉我们“有杯子”,但若位置已经被平均掉,后面再加复杂读出也未必能找回哪只在左。保留空间网格以后,还要决定怎样提出区域、给区域分配类别与框、让mask对应到具体对象。训练目标和输出结构必须一起适配。 历史上的R-CNN使用监督分类预训练;它不以MoCo为前提。这里的连接是问题层面的:一份可迁移起点怎样接到新任务,而不是把方法硬排成单线进化史。带着这一问题读P25的同场景四种答案,才能看见为何下一部分需要新的监督与接口。 ## 继续学习 读P25四种输出作为下一段起点;若对源域成功目标域失败感兴趣,再选LAB 22。 - 学习路径:表示怎样迁移到新任务 https://codingai-lec03.pages.dev/course/study/readout-transfer.html - CLS 01 · 学习信号、表示与迁移:https://codingai-lec03.pages.dev/course/notebooks/fb4365d604974dd19df492cb22516e44.html - CLS 05 · 对比学习:视图、投影与历史字典:https://codingai-lec03.pages.dev/course/notebooks/b8320404134f4a2e858ccfe7d50a71d3.html - CLS 06 · 表示的三个检查:目标、信息与新域:https://codingai-lec03.pages.dev/course/notebooks/c0645a4db6e04188ab5b119e87c53bed.html - LAB 19 · 新域:捷径反转与少标签适配:https://codingai-lec03.pages.dev/course/notebooks/c20ef6a65d184331b1b52bf351077504.html ## 画面与条件 人工类别、视图对应、隐藏内容三路汇入视觉表示,再连接类别、区域、像素及实例身份。 回到已有两杯一书同一底图,第一部分结束不引入新预训练方法;进入监督预训练迁移的历史案例也不意味着自监督先于早期检测。 - S1 · 教材与出处:/course/round2-sources.html#S1 - S4 · 教材与出处:/course/round2-sources.html#S4 --- # P25 同一张图,四种不同的答案 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p25.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p25/0 先看同一张图要交付什么:类别存在性、对象框、逐像素类别和实例身份。四幅图保持底图相同,变化的是答案结构;框与 mask 是教学标注。课后从这里进入两个真正学习任务,才能把“更精细”落实为目标与评价的变化。 ## 连续讲述 把同一组杯子和书换成书本遮住部分杯身的场景。下面四种答案都用这张固定底图。 先别急着看网络。请看我们要交付什么答案。分类只需报告图中有什么;检测要对多个对象给出类别和位置;语义分割要给每个像素指定类别;实例分割还要区分这些像素分别属于哪一个对象。 如果两只杯子紧挨着,语义分割可以都标成“杯子”,但这还没有告诉我们哪部分属于左边那只、哪部分属于右边那只。检测框区分了两个对象,却没有给出杯柄的精确轮廓。 所以这几类任务不是精度高低的一条刻度。它们要求不同的输出结构,也要求不同的标注和错误检查。接下来每改一次方法,都先回到这张图:这次究竟增加了哪一种要求? ## 同一场景中,究竟多交付了什么信息? 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p25.html#spatial-four-answers 在这张双杯与书的图里,分类的答案可以写成“有杯子、有书”;这两个词没有给出杯子数量,也没有把词语放到图中的位置。检测把答案改成一组对象记录,每项有类别、分数与框。语义分割交付与图像对应的类别地图;实例分割再保存每个对象的身份。 | 输出 | 双杯场景中的一项答案 | 做不到的逆推 | |---|---|---| | 类别存在性 | 杯子、书 | 仅凭类别列表不能恢复左右杯位置 | | 检测 | 杯子 #1 的矩形框 | 外接框不能恢复杯把空洞 | | 语义类别图 | 这个像素是杯子 | 同类颜色不记录杯一与杯二的分界 | | 实例图 | 这个像素属于杯子 #1 | 可见轮廓不定义被书遮住的完整背面 | 可以把实例 ID 映射为类别,得到语义图;反过来一般没有唯一答案。两只紧挨杯子的许多实例划分,都可能对应同一张“杯子”类别图。因此四种输出不是一条从粗糙到高级的单轴刻度,而是为不同用途保存不同信息。做面积测量需要像素集合,做计数需要对象身份,快速提示操作者位置可能只需要框。 本页轮廓与框是同一底图上的教学标注,帮助定义答案;它们不是模型预测。LAB03 可以直接改变选中对象并查看局部窗口,LAB10 和 LAB11 才分别提供学习得到的框与像素输出。 ## 这条主线的课后顺序:先看输出,再做一项完整实验 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p25.html#spatial-study-route 不必按 Notebook 编号把所有内容从头运行。若刚听完课堂,先用 P25 的同一底图区分类别、框、语义与实例,再用 P41–45 的两个算例区分读取错位与表示碰撞。它们构成理解空间任务所需的最短连续线。 随后只选一项完整学习过程:关心对象位置就读 LAB10,沿图像、目标、匹配、分类/位置损失、预测与错误图走完;关心面积或边界就读 LAB11,比较 RGB 基线与 FCN、查看逐类 IoU 与窄缝错误。无需为了“完整”同时训练两本,也不要把只跑通环境当成理解模型。 LAB09 是检测公式的工作台,遇到匹配、NMS 或 AP 不清时按问题查;LAB03 是同源场景与空间读数的轻量练习。LAB16 的颜色连通域和 LAB20 的集合匹配放在选读,分别解释提示约束和对象排列,不与两项主实验争夺主线。 CLS02 提供区域到掩码的连续导读;CLS07、CLS08 分别展开检测公式与实例输出。各处按教师定稿名称和稳定 ID 回链。每个解释块有独立 URL,可直接带着具体问题交给 AI;链接中的正文先提供推理,再连接代码与原论文。 ## 继续学习 先读本页解释与图,再到 LAB03 改一个坐标或对象。 - 学习路径:一张图怎样变成一组框 https://codingai-lec03.pages.dev/course/study/image-detection.html - CLS 02 · 从类别到区域与掩码:https://codingai-lec03.pages.dev/course/notebooks/f9ab632ba16b4f2084669791cba6ba85.html - LAB 03 · 空间信息:表示、采样与掩码:https://codingai-lec03.pages.dev/course/notebooks/49a2c030eafa4e1db6fc4f1a08c3810a.html - CLS 07 · 检测几何、匹配与评价:https://codingai-lec03.pages.dev/course/notebooks/586e66e049764158a50747e69c219312.html - CLS 08 · 密集预测、实例与集合输出:https://codingai-lec03.pages.dev/course/notebooks/2d81e2a1936043349eacb71c53c0defa.html - LAB 09 · 检测几何:框、匹配、NMS 与 AP:https://codingai-lec03.pages.dev/course/notebooks/90d213b4e1e04c7e889ee6fc042b2358.html - LAB 10 · 从 RGB 图像训练小型检测器:https://codingai-lec03.pages.dev/course/notebooks/a14237bfa9dd413d959ab4e458e11f42.html - LAB 11 · 从 RGB 到像素:读出、FCN 与边界:https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html - LAB 16 · 点、框与负提示:分割规则基线:https://codingai-lec03.pages.dev/course/notebooks/d83defa954034769a1ee94e3ea48640a.html - LAB 20 · 尺度跨度与两对象匹配:https://codingai-lec03.pages.dev/course/notebooks/9315996660f54e92847770355b648f9e.html ## 画面与条件 同一双杯书本底图的分类、检测、语义分割与实例分割四联图;语义颜色编码类别,实例颜色编码对象 ID。 同一底图与原有手工标注;语义颜色编码类别,实例颜色编码实例 ID。仅标可见轮廓,不预测被书遮住的杯子部分。 - Mask R-CNN §3 (2017):https://arxiv.org/html/1703.06870v3 --- # P26 位置还在特征图里吗? 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p26.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p26/0 把特征图读成“空间地址+通道向量”。步长不是感受野,通道也不是预先指定的类别;池化前是否保留网格,是把分类表示迁到空间任务时的关键接口选择。与 P44 的均值碰撞配读,可以避免凭张量大小断言信息是否存在。 ## 连续讲述 分类网络中间通常不是一直只有一个向量,它会保留有空间布局的特征图。不同位置的向量描述相应区域及其上下文,再经过后续处理形成整图答案。 如果任务要找位置,就不能只盯着最终类别分数。我们要考虑在什么层读取特征、保留什么空间结构,再怎样组织预测。这里空间位置和通道共同承载信息,并不是每一个通道都被指定成一个物体类别。 这一点把第二讲的网络结构,变成了今天的任务设计问题:相同的骨干计算可以被复用,但输出要求不同,读取位置和预测部分就不能原样照搬。先看一个最直接的思路:把整张图的问题拆成候选区域的问题。 ## 特征图上的地址、通道与感受野 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p26.html#spatial-feature-address 设骨干网络给出 $F\in\mathbb R^{C\times H'\times W'}$。选定一个网格位置 $(u,v)$,得到的是一个 C 维向量 $F[:,u,v]$。网格索引保留“从哪里读”,通道则保存学到的多种响应。某个通道可能对边缘、纹理或更复杂组合敏感,但我们通常没有事先把第 17 通道指定为“杯子”。 步长说明相邻特征位置相对原图的间隔,感受野说明该位置可以受多大输入区域影响,两者不同。步长 16 的特征点可能受比 16×16 更大的区域影响。图上画一个格子对应杯沿,只是在标读取位置,不能理解成这个向量只看了那一个小方块。 全局平均池化沿空间求均值,使分类头方便读取整图统计;若任务要定位,我们常在池化前读取网格。也不能只凭“一个向量”断言全部位置必丢:通道可能编码位置统计。P44 的反例之所以能证明无法区分,是它明确规定了编码器只取均值,而不是因为它长得像粗网格。 这给迁移增加一个具体选择:除决定冻结多少层,还要决定在何处取表示,以及输出头能否访问位置。 ## 继续学习 先读本页解释与图,再到 [LAB03 · 空间信息:表示、采样与掩码](/course/notebooks/49a2c030eafa4e1db6fc4f1a08c3810a.html) 改一个坐标或对象。 - 学习路径:像素、边界与对象身份 https://codingai-lec03.pages.dev/course/study/pixels-instances.html - LAB 03 · 空间信息:表示、采样与掩码:https://codingai-lec03.pages.dev/course/notebooks/49a2c030eafa4e1db6fc4f1a08c3810a.html - CLS 02 · 从类别到区域与掩码:https://codingai-lec03.pages.dev/course/notebooks/f9ab632ba16b4f2084669791cba6ba85.html ## 画面与条件 两只杯子的位置从图像对应到空间特征;保留网格与全局向量两条出口。 特征图颜色为结构示意,不是模型激活。最终全局向量可能保存某些位置统计,此页不声称全局汇总后一定失去所有位置。 - FCN (2015):https://arxiv.org/abs/1411.4038 --- # P27 R-CNN:让已经会看图的网络看一个区域 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p27.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p27/0 历史上 R-CNN 将监督分类预训练用于区域检测,支持了“先学表示,再适配新任务”的正面判断。按区域提取特征、学习前景/背景和位置修正三个动作都需要具体输入。它不是 MoCo 或 MAE 的历史后继。 ## 连续讲述 R-CNN 的重要启发,是把分类预训练得到的视觉计算用于检测。先提出一批可能包含物体的区域,把区域裁出来,送进网络,再判断类别和位置。 这里迁移的是视觉网络及其参数,不是 ImageNet 原来的答案列表。它还要面向检测作适配,学习前景、背景以及定位任务。这个结果让“在大数据上先学,再用到别的任务”成为很具体的做法。 原始 R-CNN 是 Ross Girshick、Jeff Donahue、Trevor Darrell 和 Jitendra Malik 的工作。今天我们从自监督接到它,是在整理表示与任务的关系;它本来的重要背景是分类预训练,不要把历史改写成它先使用了 MoCo 或 MAE。 ## R-CNN 迁移的是已学会的视觉计算 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p27.html#rcnn-transfer-pipeline R-CNN 先产生可能包含对象的区域,将每个区域变换为 CNN 接受的图像大小,再用 CNN 特征作区域分类与框修正。分类预训练提供的是卷积网络的参数;检测适配需要新的区域样本、前景/背景关系和位置目标。原始实现包含多个训练阶段,因此课堂画面中简洁的两项输出,不应被误读成原论文从一开始就是一个统一损失的端到端系统。 为什么把区域当作一张小图很有力量?因为原来“整图里有什么”的视觉计算,现在可在许多局部窗口上复用。杯子只占整图一小部分时,候选区域让它占据输入的大部分,分类网络就能在更合适的尺度查看它。代价是裁剪、缩放与逐区域计算;区域边缘的上下文也会改变。 原论文摘要报告 VOC 2012 检测 mAP 为 53.3%,相对之前最好结果提高超过 30%。这个同期结果支持“分类预训练与检测适配能够产生有竞争力的检测器”,不是自监督预训练的实验。作者是 Girshick、Donahue、Darrell、Malik;此处从 MoCo/MAE 接到 R-CNN,是课程按问题重组,不能反写历史先后。 来源:R-CNN 原论文 https://arxiv.org/abs/1311.2524 ## 模拟师生追问(备课用,非课堂实录) 学生:这里为什么又用了有标签的预训练? 教师:可迁移不是自监督专属。我们比较了学习信号,现在看已成立的监督迁移案例;逻辑连接不要求伪造历史先后。 ## 继续学习 沿 CLS07 的公式定位疑问,再选 LAB09 解析练习或 LAB10 完整训练。 - 学习路径:一张图怎样变成一组框 https://codingai-lec03.pages.dev/course/study/image-detection.html - 学习路径:像素、边界与对象身份 https://codingai-lec03.pages.dev/course/study/pixels-instances.html - CLS 02 · 从类别到区域与掩码:https://codingai-lec03.pages.dev/course/notebooks/f9ab632ba16b4f2084669791cba6ba85.html - CLS 07 · 检测几何、匹配与评价:https://codingai-lec03.pages.dev/course/notebooks/586e66e049764158a50747e69c219312.html ## 画面与条件 同一场景的候选框、红杯裁剪、ImageNet 预训练 CNN 与区域类别和框修正。 原始 R-CNN 使用监督分类预训练,并进行检测适配;不将教学叙述顺序误写成自监督方法的历史后继。此图省略原始多阶段训练实现。 - R-CNN (2014):https://arxiv.org/abs/1311.2524 --- # P28 候选区域不是已经识别出的物体 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p28.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p28/0 候选集合应覆盖对象,但其中可以有局部、背景与多对象框。先看漏掉对象是候选完全没有覆盖,还是后级没有选中;两种失败需要不同改动。训练分配与评价匹配的规则留在下方算例,不把 proposal 当已识别对象。 ## 连续讲述 为什么先产生很多候选?因为直接在所有位置和大小上寻找对象,搜索空间很大。候选阶段先尽量把真目标覆盖住,后续再筛选与修正。 所以 proposal 不是最终物体答案。这个框只含半只杯子,那个框主要是桌面,还有一个框同时包住两个对象;它们都可能进入候选集合。我们希望候选不要漏掉真对象,却不能因为候选很多就说检测很好。 训练也因此多了新内容:哪些区域算前景,哪些算背景,怎样与人工标注的目标对应。这里先抓住任务分工,不逐条展开所有阈值。下一页看这条朴素路线的计算代价:大量相近的区域,究竟重复算了什么? ## 候选区域先追求覆盖,再由检测头作判断 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p28.html#proposal-coverage proposal 的含义是“值得进一步检查的区域”。它可以覆盖完整杯子,也可以只有半只杯子、包含桌面,或把两只杯子一起框住。候选阶段尚未交付最终的类别、数量与精确边界。 设某张图有两只杯子。若候选集合里完全没有接近右杯的框,后面的区域分类再强,也很难在当前流程中找回它。因此可以先看 proposal recall:在某个 IoU 门槛下,有多少真值对象至少被一个候选覆盖。候选很多可能提高这个召回,却增加计算与重复;后续分类和框回归再筛去背景、校正近似位置。 训练时,“这是不是前景”和“它应该往哪移动”也分开。一个背景区域有分类目标,却没有应当回归到某只杯子的唯一位置目标。具体的正负阈值、强制匹配和忽略区间随方法而异;不要把课堂上一组示例阈值视为所有检测器的定义。 可以先在图上指出一只完全漏掉的杯子,再问该改候选覆盖还是区域分类。这个定位比笼统地说“网络不够强”更能指导实验。 来源:R-CNN 原论文 https://arxiv.org/abs/1311.2524 来源:D2L §14.4 锚框 https://d2l.ai/chapter_computer-vision/anchor.html ## 继续学习 沿 CLS07 的公式定位疑问,再选 LAB09 解析练习或 LAB10 完整训练。 - 学习路径:一张图怎样变成一组框 https://codingai-lec03.pages.dev/course/study/image-detection.html - CLS 07 · 检测几何、匹配与评价:https://codingai-lec03.pages.dev/course/notebooks/586e66e049764158a50747e69c219312.html - LAB 09 · 检测几何:框、匹配、NMS 与 AP:https://codingai-lec03.pages.dev/course/notebooks/90d213b4e1e04c7e889ee6fc042b2358.html ## 画面与条件 完整杯子、半只杯子、背景和两杯共同框四种候选叠加于同一图片。 框是教学候选,不是外部区域方法的实际输出。原始 R-CNN 使用 Selective Search 等候选来源;不把 proposal 当作已识别对象。 - R-CNN (2014):https://arxiv.org/abs/1311.2524 --- # P29 许多重叠区域,为什么要重复卷积? 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p29.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p29/0 同一个 CNN 权重处理多个裁剪,仍可能重复计算共同像素。整图共享改变的是一次推理的计算组织,与预训练参数迁移分开。共享之后每个区域仍需要自己的坐标和读出;计算重排并不保证与原来的裁剪路线数学等价。 ## 连续讲述 看两个相邻候选,它们覆盖的大部分像素相同。如果每个区域分别跑一次卷积,很多共同内容就被反复计算。 于是可以调换组织顺序:先对整张图计算特征,再按区域从特征图中提取表示。这样我们复用的不仅是训练得到的参数,也复用了同一张图的计算结果。 这两种复用不要混在一起。预训练回答“过去学到的知识能否帮助新任务”;共享特征回答“这一张图中哪些计算不必重复”。两个问题合在一起,才能把检测做成可用系统。换顺序后又有新要求:大小不同的区域,怎样得到后续预测器可以处理的表示? ## 参数复用与一次前向结果的复用 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p29.html#shared-convolution-reuse 两张重叠裁剪都使用同一个 CNN,已经共享了参数,但仍分别执行卷积。假如它们都包含杯沿和桌面,这些像素会参与两次运算。SPP-net 和 Fast R-CNN 的路线把较重的卷积移到整图:先计算 $F=f_\theta(I)$,每个候选再用自己的框 $b_i$ 读取 $r_i=R(F,b_i)$。 这里有两种复用。预训练让新的任务借用过去学到的参数;整图共享则让同一次推理中的多个区域借用已算出的中间结果。前者减少从头学习的需要,后者减少重复工作,不能用同一个“迁移”概念含糊带过。 若有 N 个候选,逐区域成本近似为 N 次卷积加区域预测;共享方式近似为一次整图卷积加 N 次轻量读取与预测。这是计算组织的估算,不是实测加速倍数,因为整图与裁剪的分辨率不同,内存、候选产生和预测头也占时间。 先裁再编码与先编码再读取不严格相等:前者改变对象尺度并裁去上下文;后者的感受野可能跨出 RoI。方法的贡献是在这样的取舍下找到能训练、有效率的共享接口。 来源:SPP-net 原论文 https://arxiv.org/abs/1406.4729 来源:Fast R-CNN 原论文 https://arxiv.org/abs/1504.08083 ## 模拟师生追问(备课用,非课堂实录) 学生:两个框共用同一 CNN,不是已经共享了吗? 教师:已经共享参数,仍可能分别计算。此页进一步复用同一张图已经得到的特征结果,这两种共享发生在不同层面。 ## 继续学习 沿 CLS07 的公式定位疑问,再选 LAB09 解析练习或 LAB10 完整训练。 - 学习路径:一张图怎样变成一组框 https://codingai-lec03.pages.dev/course/study/image-detection.html - 学习路径:像素、边界与对象身份 https://codingai-lec03.pages.dev/course/study/pixels-instances.html - CLS 02 · 从类别到区域与掩码:https://codingai-lec03.pages.dev/course/notebooks/f9ab632ba16b4f2084669791cba6ba85.html - CLS 07 · 检测几何、匹配与评价:https://codingai-lec03.pages.dev/course/notebooks/586e66e049764158a50747e69c219312.html ## 画面与条件 左侧两个重叠红杯候选分别经过 CNN;右侧同一全图一次编码后读取两份区域特征。 先裁图再编码与先编码再读区域不严格等价:上下文与几何变换不同。此处比较计算组织,不提供未测加速倍数。 - SPP-net (2014):https://arxiv.org/abs/1406.4729 - Fast R-CNN (2015):https://arxiv.org/abs/1504.08083 --- # P30 不同大小的区域,怎样读成固定结构? 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p30.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p30/0 照着 6×8 矩阵实际取两个区域的 2×2 最大值,确认固定输出形状不等于相同内容。SPP 的不同分格层保存不同相对布局。当前整数例故意避开边界量化,P41 再解释真实连续区域的难点。 ## 连续讲述 SPP-net 等工作让区域读取成为明确的计算模块。区域可以大,也可以小,但可以按相对位置划分成固定数量的格子,在每格汇总特征,得到固定结构的输出。 这不是把不同物体强行说成一样大,而是在为后面的预测器提供统一接口。后续仍然需要知道区域来自哪里,并预测它的类别或位置。 这里有一个值得保留的研究积累:空间聚合并不是深度学习时代凭空出现的主意,新的卷积特征让原有的空间组织经验获得了新用途。需要注意,先裁图再编码和先编码再取区域并不严格相同,它们看到的上下文和几何变换不同;共享计算是取舍,不是无条件等价变形。 ## 同样是 2×2 输出,读到的内容可以不同 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p30.html#roi-fixed-grid-example 区域大小不一,后面的固定形状预测头却希望得到一致长度的输入。把每个区域按相对位置分成 2×2 四格,再对每格取最大值,就能对每个通道得到四个数。若有 C 个通道,输出是 C×2×2,而非一律变成四个类别。 本页 6×8 教学矩阵提供两个整齐对齐的 RoI。橙色区域选择前两行末四列,四格最大值为 `[[2,1],[4,3]]`;青色区域选择第 2–5 行前四列,读出 `[[2,5],[3,4]]`。两份结果有相同形状,数值不同,且各自仍与原来的框配对。 空间金字塔进一步使用 1×1、2×2 等多个分格层。1×1 捕捉整区域统计,2×2 保留相对位置;把结果拼接后,原区域有多大都能得到固定长度。这里统一的是接口,不是抹掉区域之间的差异。 本页特意用整数边界,先隔离“大小不同却可用统一头”的想法。真实 RoI 边界不总落在格点;分箱取整带来的位置偏差,到 P41–43 再处理。 来源:SPP-net 原论文 https://arxiv.org/abs/1406.4729 ## 继续学习 先读本页解释与图,再到 LAB03 改一个坐标或对象。 - 学习路径:一张图怎样变成一组框 https://codingai-lec03.pages.dev/course/study/image-detection.html - 学习路径:像素、边界与对象身份 https://codingai-lec03.pages.dev/course/study/pixels-instances.html - CLS 02 · 从类别到区域与掩码:https://codingai-lec03.pages.dev/course/notebooks/f9ab632ba16b4f2084669791cba6ba85.html - LAB 03 · 空间信息:表示、采样与掩码:https://codingai-lec03.pages.dev/course/notebooks/49a2c030eafa4e1db6fc4f1a08c3810a.html ## 画面与条件 6×8 可核对数值矩阵上的两个 RoI,各按 2×2 分箱取最大值;下方显示多层空间分格。 F 是 6×8 教学矩阵。橙色 RoI 取前两行末四列,按每格最大值产生 [[2,1],[4,3]];青色 RoI 取第2–5行前四列,产生 [[2,5],[3,4]]。这是整齐对齐的简化分格,不模拟历史库的边界取整。 - SPP-net (2014):https://arxiv.org/abs/1406.4729 --- # P31 Fast R-CNN:把区域放回共享计算中 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p31.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p31/0 Fast R-CNN 的改动包括共享卷积、区域读取和类别/位置反馈共同训练。图上的多个区域仍各有答案,合并的是可共用计算。先指出损失从哪里回到同一骨干,再理解为什么外部候选成为下一项瓶颈。 ## 连续讲述 Fast R-CNN 把整图特征、区域读取以及类别和框回归组织在同一个较紧凑的训练流程里。图片主要计算一次,候选区域在共享特征上读取,然后各自产生预测。 学生容易只记住“更快”两个字。真正应该看到的是:系统把原来重复的计算搬到了共同部分,同时让区域任务的反馈回到共享表示。训练怎样组织,和速度怎样改善,在这里是连在一起的。 但此时的候选区域仍然需要产生。当前面主要计算变得更高效,原来相对不显眼的步骤就可能变成新的瓶颈。接下来研究者问的不是再给这个网络起一个更快的名字,而是:候选本身能不能也从共享特征中学出来? ## 共享特征怎样收到每个区域的训练反馈 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p31.html#fast-rcnn-two-heads 从整图特征取到每个 RoI 后,分类分支判断类别或背景,框分支预测相对位置修正。设某个区域属于杯子,损失一部分来自“杯子”概率是否足够大,另一部分来自中心、宽高偏移是否接近匹配目标。背景区域参与分类,通常不承担指向某个对象的位置回归。 把一批区域的损失相加后,梯度沿各自的区域读出回到共享骨干。共享的参数会收到来自不同区域、不同任务的反馈;它并不要求所有区域有相同答案。正如同一把尺子测不同物体可以得到不同长度,同一个预测器处理不同区域特征也会给出不同结果。 Fast R-CNN 保留了外部候选来源,但把共享卷积、RoI 读取、分类和框回归组织进更紧凑的训练流程。卷积不再为每个重叠区域重复做,候选提取的时间便更加突出。下一步自然不是继续增加分类头,而是让候选也从这张 F 中学习。 理解这一页时,能够在图上指出“两个区域各自的输出”和“同一个被共同更新的骨干”,就已经抓住它的机制。历史多阶段实现细节与训练采样放在 CLS07,而不加回主讲页。 来源:Fast R-CNN 原论文 https://arxiv.org/abs/1504.08083 ## 继续学习 沿 CLS07 的公式定位疑问,再选 LAB09 解析练习或 LAB10 完整训练。 - 学习路径:一张图怎样变成一组框 https://codingai-lec03.pages.dev/course/study/image-detection.html - 学习路径:像素、边界与对象身份 https://codingai-lec03.pages.dev/course/study/pixels-instances.html - CLS 02 · 从类别到区域与掩码:https://codingai-lec03.pages.dev/course/notebooks/f9ab632ba16b4f2084669791cba6ba85.html - CLS 07 · 检测几何、匹配与评价:https://codingai-lec03.pages.dev/course/notebooks/586e66e049764158a50747e69c219312.html ## 画面与条件 整图特征、两个不同位置的 RoI Pool、各自类别及框输出;第二状态显示任务反馈到共享骨干的路径。 主图展示共享特征、区域读出及类别/回归的联合训练思想,候选仍来自外部方法。反馈线表示总损失更新共享计算,不表示多个区域同一个答案。 - Fast R-CNN (2015):https://arxiv.org/abs/1504.08083 --- # P32 Faster R-CNN:让候选区域也成为预测 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p32.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p32/0 按“参考框→RPN 候选→最终框”给图中的矩形分配身份,并把人工真值单独留在监督侧。RPN 让候选变为可学习预测。LAB10 采用共享原理的一阶段教学变体,不应把它说成原版 Faster R-CNN。 ## 连续讲述 Faster R-CNN 增加了区域建议网络,也就是 RPN。它在共享特征上判断一些参考框是否像前景,并预测位置修正,形成后面使用的候选。 请区分图上的三个对象:参考框是我们提供的几何起点,候选框是这一步的预测,最终检测框是后续处理后的结果。训练时,还要根据真实标注定义哪些参考框负责哪些对象。 至此,从外部产生区域、反复编码区域,到共享卷积、再学习候选,瓶颈被一段段重新组织。这条路线有跨团队与合作者的汇合,不能把原始 R-CNN、SPP-net 和 Faster R-CNN 都归给一个人。它们相连的是具体问题与可复用的计算。 ## 参考框、候选框与最终检测框 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p32.html#rpn-three-boxes RPN 在共享特征图上铺一组参考框。参考框由网格位置、预设尺度和长宽比决定;它们在看图之前就可生成,不能当成检测结果。网络为每个参考框输出物体性分数和四个偏移,经解码、筛选后形成 proposals,再交给区域头作更具体的类别判断和位置修正。 因此画面中的三个矩形有不同身份:anchor 是几何起点,proposal 是 RPN 的预测,最终 box 是整个检测流程交付的结果。训练真值是第四种对象,它负责给预测规定目标,并不在推理时送进模型告诉它答案。 同一张 F 可同时供 RPN 与后级区域头使用。它把“在哪里值得再看”从外部算法变成从图像特征学习的任务。这是 Faster R-CNN 与 Fast R-CNN 相比发生改变的具体一段,不能只记一个更快的名字。 LAB10 采用单层锚框直接分类与回归的一阶段教学检测器,不是原版两阶段 RPN。它与本页共享锚框、匹配、位置损失等原理,保留了可运行的学习闭环;读实验时应辨明哪些流程共用、哪些结构不同。 来源:Faster R-CNN 原论文 https://arxiv.org/abs/1506.01497 来源:D2L §14.7 TinySSD https://d2l.ai/chapter_computer-vision/ssd.html ## 为什么要有正例、背景和忽略项 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p32.html#anchor-training-assignment 给定参考框与真值的 IoU 矩阵,匹配规则把参考框变成训练样本。例如课堂教学阈值若设正例至少 0.7、背景小于 0.3,则 IoU 为 0.8、0.4、0.1 的三个框分别是正例、忽略、背景。只有正例有对应的框回归目标。忽略的用途是暂不把模糊覆盖强行当正或负,而不是悄悄改成背景。 真实 LAB10 使用另一组公开写明的阈值:正例至少 0.45,背景低于 0.25,中间忽略;再用逐次最大 IoU 为每个真值保留一个不同 anchor,避免某个对象完全收不到位置监督。强制匹配服务于学习,评价时不能为了“每个对象都匹配一次”照搬这条规则。 空图同样是有效训练输入。所有参考框都应学背景,回归项没有正例便归零。如果只训练总有物体的图片,模型可能从未被要求学会空输出。 负例远多于正例时,本实验选难负例参与分类损失,最多正例数的三倍、每图至少十二个。阅读代码时应看 loss 的掩码与归一化,而不只看 $L=L_{cls}+\lambda L_{box}$ 这一行总公式。 来源:D2L §14.4 锚框 https://d2l.ai/chapter_computer-vision/anchor.html ## 从 RGB 到框:当前 LAB10 已经具备完整闭环 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p32.html#detector-learning-evidence 当前 LAB10 的主实验输入是真正的 48×48 RGB 合成图,目标是零至三个对象的类别与归一化框。卷积骨干生成 12×12 网格,每格两个参考框,共 288 个;两个头输出 `[B,288,3]` 类别 logits 与 `[B,288,4]` 偏移。图像进入 `model(images)`,坐标只参与监督与评价。 保留的 2026-09-22 本地完整运行用 768 张训练图、96 张验证图、192 张保留图,训练 28 epoch。它以 TinySSD 的锚框检测闭环为起点,采用单特征层、两种参考尺度,不能称为 D2L 全部多尺度结构的复现。 | 条件 | AP50 | AP75 | |---|---:|---:| | 随机初始化 | .00746 | .00003 | | 训练后原尺度 | .97303 | .70367 | | 同权重,仅对象尺寸减半 | .61490 | .17987 | 这些是已有运行记录,本轮内容整理没有重跑实验。原分布明显改善,且存在多对象与空图,支持“模型学习到了图像到对象位置的映射”。更严格位置门槛与小尺度条件仍显著下降,帮助定位下一步研究问题。红色与矩形、蓝色与椭圆相关,因此不能据此宣称自然图像泛化。 读者可先看同一行的 RGB、真值框、预测框和失败图,再看匹配与损失,最后按需运行。原四维逻辑回归保留在热身位置,它说明分类更新,不承担检测证据。 来源:D2L §14.7 TinySSD https://d2l.ai/chapter_computer-vision/ssd.html ## 选读:一阶段检测保留了哪些相同问题 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p32.html#dense-detector-ssd-extension 一阶段检测不先为每个 proposal 再做一套区域分类,而是在一个或多个特征网格上直接预测类别与位置。这个改变简化了输出路径,却没有消除参考几何、目标匹配、正负不平衡、重复预测与定位评价。 若 16×16 网格每格有 4 个参考框,共 1024 项;每项预测含背景的 3 类 logits 与 4 个偏移,就有 7168 个输出数。这些数还是结构化候选,需按同一位置顺序与参考框配对,随后解码并整理。张量 reshape 顺序错误时,模型的偏移可能被贴到另一个 anchor 上。 D2L TinySSD 在多尺度特征上构造参考框与预测。当前 LAB10 为保持 CPU 可运行,用 12×12 单层网格、每格两个尺寸,共 288 项;它保留图像输入到框输出的学习链,但不等于多尺度模型的全部能力。 本条作为从主讲移出的深入阅读:理解它有助于读实验代码,不要求课堂再开 SSD 全章。FPN 关注怎样形成不同尺度的表示,SSD 关注怎样在特征上预测;两者都出现多尺度,不意味着同一机制。 来源:D2L §14.7 TinySSD https://d2l.ai/chapter_computer-vision/ssd.html ## 继续学习 沿 CLS07 的公式定位疑问,再选 LAB09 解析练习或 LAB10 完整训练。 - 学习路径:一张图怎样变成一组框 https://codingai-lec03.pages.dev/course/study/image-detection.html - CLS 07 · 检测几何、匹配与评价:https://codingai-lec03.pages.dev/course/notebooks/586e66e049764158a50747e69c219312.html - LAB 10 · 从 RGB 图像训练小型检测器:https://codingai-lec03.pages.dev/course/notebooks/a14237bfa9dd413d959ab4e458e11f42.html - LAB 09 · 检测几何:框、匹配、NMS 与 AP:https://codingai-lec03.pages.dev/course/notebooks/90d213b4e1e04c7e889ee6fc042b2358.html ## 画面与条件 共享 F 分为 RPN 和区域预测;RPN 产生候选并供后级使用,参考框与偏移后的候选用不同颜色表示。 参考框是几何起点,RPN 输出 objectness 与偏移形成 proposals,后级再预测类别与框。图省略 NMS、采样与正负匹配阈值,它们在补充材料中保留。 - Faster R-CNN (2015):https://arxiv.org/abs/1506.01497 --- # P33 位置怎样成为可学习的目标? 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p33.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p33/0 把“位置回归”算到四个具体目标:.2、−.1、ln1.2、0;再逆变换回目标框。归一化、坐标格式与尺度因子必须成对。下方匹配说明哪些参考框具有位置目标,背景和忽略项为什么不能照样回归。 ## 连续讲述 类别可以用一个标签训练,框的位置怎样训练?先看这两个具体框。参考框中心是四十、四十,宽高都是四十;目标框中心是四十八、三十六,宽变成四十八,高不变。 网络可以学习相对这个起点的修正:中心往右多少、往上多少,宽高怎样改变。横向移动八个单位,相对于原宽度就是零点二;纵向移动负四个单位,相对于原高度就是负零点一。宽高常用比例的对数来表示,完整计算放在说明里。 这页只要把抽象的“回归”落到对象上。网络并不是突然输出一个完美矩形,而是在明确坐标约定和监督目标下学习几何关系。类别正确但位置错误,因而完全可能发生。 ## 为什么要有正例、背景和忽略项 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p32.html#anchor-training-assignment 给定参考框与真值的 IoU 矩阵,匹配规则把参考框变成训练样本。例如课堂教学阈值若设正例至少 0.7、背景小于 0.3,则 IoU 为 0.8、0.4、0.1 的三个框分别是正例、忽略、背景。只有正例有对应的框回归目标。忽略的用途是暂不把模糊覆盖强行当正或负,而不是悄悄改成背景。 真实 LAB10 使用另一组公开写明的阈值:正例至少 0.45,背景低于 0.25,中间忽略;再用逐次最大 IoU 为每个真值保留一个不同 anchor,避免某个对象完全收不到位置监督。强制匹配服务于学习,评价时不能为了“每个对象都匹配一次”照搬这条规则。 空图同样是有效训练输入。所有参考框都应学背景,回归项没有正例便归零。如果只训练总有物体的图片,模型可能从未被要求学会空输出。 负例远多于正例时,本实验选难负例参与分类损失,最多正例数的三倍、每图至少十二个。阅读代码时应看 loss 的掩码与归一化,而不只看 $L=L_{cls}+\lambda L_{box}$ 这一行总公式。 来源:D2L §14.4 锚框 https://d2l.ai/chapter_computer-vision/anchor.html ## 框回归的四个数怎样编码与还原 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p33.html#box-offset-roundtrip 用中心和宽高记参考框 $a=(40,40,40,40)$,目标框 $g=(48,36,48,40)$。采用不加额外缩放因子的约定: $$ t_x=(g_x-a_x)/a_w=0.2,\quad t_y=(g_y-a_y)/a_h=-0.1, $$ $$ t_w=\log(g_w/a_w)=\log(1.2)\approx0.18232,\quad t_h=0. $$ 中心偏移除以参考框宽高,把绝对位移变为相对比例。宽高用对数比值,则放大和缩小可以由正负实数表示;解码通过指数确保宽高为正。将四个数还原:中心 $40+40\times0.2=48$、$40-4=36$,宽 $40e^{\log1.2}=48$,高 40。 由中心宽高变回连续 `xyxy`,参考框是 `(20,20,60,60)`,目标是 `(24,16,72,56)`。这一来一回检查的是坐标约定相容。网络实际输出只是对四个目标数的估计,偏移接近也不代表每个小目标的 IoU 同样好。 有些实现对偏移再乘 10 或 5 等尺度系数;应同时阅读 encode 与 decode。LAB10 的成对函数没有这些额外系数,不能从另一教材复制半套公式混用。 来源:D2L §14.4 锚框 https://d2l.ai/chapter_computer-vision/anchor.html ## 模拟师生追问(备课用,非课堂实录) 学生:为什么宽度不用减法,而要用对数? 教师:对数比值描述相对缩放,逆变换指数保证正宽度。它是明确的参数化选择;关键是编码、损失与解码使用同一约定。 ## 继续学习 沿 CLS07 的公式定位疑问,再选 LAB09 解析练习或 LAB10 完整训练。 - 学习路径:一张图怎样变成一组框 https://codingai-lec03.pages.dev/course/study/image-detection.html - CLS 07 · 检测几何、匹配与评价:https://codingai-lec03.pages.dev/course/notebooks/586e66e049764158a50747e69c219312.html - LAB 09 · 检测几何:框、匹配、NMS 与 AP:https://codingai-lec03.pages.dev/course/notebooks/90d213b4e1e04c7e889ee6fc042b2358.html - LAB 10 · 从 RGB 图像训练小型检测器:https://codingai-lec03.pages.dev/course/notebooks/a14237bfa9dd413d959ab4e458e11f42.html ## 画面与条件 连续坐标网格上的参考框 (20,20,60,60) 与目标框 (24,16,72,56),中心位移和四项回归目标逐项对应。 使用 xyxy 连续边界,无像素端点 +1。参考宽高40、40,中心40、40;目标宽高48、40,中心48、36。tx=.2、ty=−.1、tw=ln1.2=.1823215568、th=0。解码可精确恢复 (24,16,72,56)。 - R-CNN (2014):https://arxiv.org/abs/1311.2524 - Faster R-CNN (2015):https://arxiv.org/abs/1506.01497 --- # P34 三个框,并不代表三只杯子 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p34.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p34/0 三个重叠预测可能对应一只杯子。NMS 用预测之间的分数与重叠整理重复,评价匹配则使用真值,二者不是同一操作。先看三框算例,再看同一真实教学检测器放宽 NMS 后召回和精度的相反变化。 ## 连续讲述 同一个对象可能被多个候选检测到,于是系统交付了多个重叠框。不能把这些框直接解释成多个物体。 常见的处理是先保留高分框,再抑制与它过度重叠的重复预测,这就是非极大值抑制的基本直觉。它不是重新训练表示,而是在整理已经产生的候选结果。 现在指着图里的 C:它也围着红杯,与 A 的 IoU 约为 0.88,所以阈值 0.5 时同样去掉;右边蓝杯的框是另一个对象,不是这里的 C。 如果两个真实对象非常靠近,过强的抑制也可能误删目标。于是检测效果不是只由骨干网络决定,候选、类别分数、位置和后处理都会影响交付。我们不在这里比较所有 NMS 变体,只看清一个系统事实:怎样组织输出,也是方法的一部分。 ## NMS 不看真值,评价匹配必须看真值 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p34.html#nms-versus-matching NMS 从预测框中整理重复。按类别与分数排序,保留最高分框 A,再抑制与 A 的 IoU 大于阈值的同类低分框,然后继续。输入只有预测框、分数和类别,不需要人工真值。 回到 P34 同一杯子上的三个框。A、B、C 的教学分数分别为 0.90、0.80、0.60;IoU(A,B)≈0.90,IoU(A,C)≈0.88。按分数先保留 A,在 NMS 阈值为 0.5 时,B 和 C 都与 A 过度重叠,因此都被抑制。蓝杯的另一个框与 A 不重叠,仍然保留。这里比较的是预测框彼此之间的重叠,还没有使用真值。 若把阈值放宽到 0.90,在本例原始坐标下,IoU(A,B)=0.8950778、IoU(A,C)=0.8774870,都没有超过阈值;重复框便可能继续留下。因此判定应使用未四舍五入的 IoU,图中 0.90 只是显示精度。下一步评价才用真值判断它们是在补漏检还是重复命中。 若两只真实杯子互相遮挡,两个正确框也可能高度重叠。将 `(0,0,2,2)` 与 `(.5,0,2.5,2)` 当作两只对象的框,交集 3、并集 5,IoU=.6;NMS=.5 就可能删掉较低分的真对象。它以几何重叠近似重复,没有直接知道对象身份。 评价再用保留下来的框与人工对象对应。重复命中同一真值只允许一次计为 TP,其余是 FP;漏掉的对象降低 recall。模型预测、后处理、评价三层分开,就能解释为什么“放宽 NMS 得到更多框”既可能补召回,也可能伤精度。 ## 同一检测器改变 NMS,召回为何变好而精度变差 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p34.html#nms-measured-tradeoff LAB10 已保存一组更接近真实使用的对照:输入与训练后权重保持不变,只把 NMS IoU 阈值从 .35 放宽到 .65。展示/工作点的分数门槛固定 .4。 | NMS IoU | recall@工作点 | precision@工作点 | AP50 | |---|---:|---:|---:| | .35 | .98311 | .94175 | .97303 | | .65 | 1.00000 | .41926 | .95866 | 放宽后,一些原来被抑制的候选重新出现,补到了最后少数对象;同时大量同一对象的重复框留在输出,所以 precision 大降。AP 的变化比这个固定工作点的 precision 小,因为 AP 汇总整个分数排序,而工作点只看分数至少 .4 的输出。 这组已有本地结果不是本轮新运行。它的价值是把 P34 的两种效应落实到同一模型:预测数量增加本身没有确定好坏,必须看新增的是哪个对象、是否重复,以及部署时怎样使用阈值。选阈值应使用验证集与任务成本;不能反复挑保留集最漂亮的数字再称泛化结果。 ## 模拟师生追问(备课用,非课堂实录) 学生:为什么同一杯子上的 C 也要抑制,而蓝杯的框保留? 教师:C 围着红杯,与 A 的 IoU 约为0.88,超过0.5。蓝杯框是另一个框,与A不重叠,所以这轮保留。若把阈值提高到0.90,要用原始IoU计算,不能拿显示成0.90的近似数作严格大于判断。 ## 继续学习 沿 CLS07 的公式定位疑问,再选 LAB09 解析练习或 LAB10 完整训练。 - 学习路径:一张图怎样变成一组框 https://codingai-lec03.pages.dev/course/study/image-detection.html - CLS 07 · 检测几何、匹配与评价:https://codingai-lec03.pages.dev/course/notebooks/586e66e049764158a50747e69c219312.html - LAB 09 · 检测几何:框、匹配、NMS 与 AP:https://codingai-lec03.pages.dev/course/notebooks/90d213b4e1e04c7e889ee6fc042b2358.html - LAB 10 · 从 RGB 图像训练小型检测器:https://codingai-lec03.pages.dev/course/notebooks/a14237bfa9dd413d959ab4e458e11f42.html ## 画面与条件 红杯上的 A、B、C 框分数为 0.90、0.80、0.60。IoU(A,B)≈0.90、IoU(A,C)≈0.88;阈值0.5时保留A、抑制B和C。蓝杯独立框与A不重叠,继续保留。 分数为教学设定。A=(177,238,390,351)、B=(190,246,390,351)、C=(161,252,410,352),此处框写作 xywh;IoU(A,B)=.8950778368≈.90,IoU(A,C)=.8774869809≈.88。同类 greedy NMS,阈值.5。没有报告模型或论文性能。 - Faster R-CNN (2015):https://arxiv.org/abs/1506.01497 --- # P35 检测错在哪里,要分开看 固定阅读链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p35.html 课堂图解:https://codingai-lec03.pages.dev/#/l3-r2-p35/0 从错类、漏检、框偏和重复四项错误读结果。IoU 把位置偏差变成可比较几何量,AP 再加入分数排序与对象唯一匹配。沿下方积分例走完分数排序、精确率与召回率计算,再用 LAB10 的结果辨认这些错误。 ## 连续讲述 现在检验系统,不能只问它有没有认出“杯子”。这个结果漏了一只,那个类别错了,这个位置偏了,另一个把同一只报了两次。这些错误需要分别观察。 位置常用交并比描述:相交面积除以覆盖的总面积。例子中两个框面积都是四,交集为二,交并比就是三分之一。类别分数高,不会自动把这个位置变得准确。 完整评价还要说明预测怎样与真值匹配,怎样处理重复和阈值。今天不手推整套 AP,但要留下这项判断:当你说某个预训练表示改善了检测,必须知道改善体现在哪种任务错误,而不只看一列总分。这也为接下来的像素任务准备了不同的检查方式。 ## 同样移动一个单位,小框为什么更吃亏 区块链接:https://codingai-lec03.pages.dev/course/pages/l3-r2-p35.html#iou-and-small-boxes 两个面积均为 4 的框,交集为 2,并集为 $4+4-2=6$,所以 IoU=1/3,而不是 1/2。分母必须是覆盖总面积,不能只用真值面积。连续坐标的宽写作 $x_2-x_1$,不要混入“整数像素含两端”的加一规则。 把两个同样大小的正方形横向错开 d,边长为 w 且 $0\le d