## 先算 35/16,再判断取整改变了什么 ## 解释、算例与证据 # P41 · 三个像素的偏移,为什么会伤到轮廓? 先固定简单坐标约定 x/stride,再看 35→2.1875→取整 2 所造成的位置变化。真实库的像素中心与边界设置必须另核对;本页的三个像素误差是指定算例,不是所有实现的固定偏差。 图内标签与数值:Lecture 03 课堂图解 P41;约定:原图 x ÷ 16 → 特征坐标;原图 x;0;16;32;48;64;35;连续位置;35/16 = 2.1875;32;取整后;2 × 16 = 32;读的位置变了 3 个原图像素;坐标示意,不模拟各框架的半像素约定;RoIAlign 避免相关坐标量化。 原图坐标轴上的 x=35 映射到 stride16 特征坐标 2.1875;量化到 2 时对回 x=32,明确三像素偏移。 - 约定:原图 x ÷ 16 → 特征坐标 - 原图 x - 0 - 16 - 32 - 48 - 64 - 35 - 连续位置 - 35/16 = 2.1875 - 32 - 取整后 - 2 × 16 = 32 - 读的位置变了 3 个原图像素 - 坐标示意,不模拟各框架的半像素约定;RoIAlign 避免相关坐标量化。原图坐标轴上的 x=35 映射到 stride16 特征坐标 2.1875;量化到 2 时对回 x=32,明确三像素偏移。 [查看对应图解状态](/#/l3-r2-p41/1)[查看完整图解](/course/figures/l3-r2-p41-1.html) ## 课堂讲述 用一个小坐标例子看。特征图相对原图的步长是十六,原图横坐标三十五对应特征坐标二点一八七五。如果简单变成整数二,就相当于换到了原图三十二附近的位置。 识别“大概是什么”时,这样的偏差可能不太显眼;但在杯柄或细边界上,几个像素就会改变哪些位置应该属于对象。 这里不是说所有取整都造成同样大小的错误,而是指出一种信息通路问题:我们希望读取这个区域,却在离散化过程中改变了它的几何对应。RoIAlign 的关键,就是在区域提取中避免相关量化,并用连续位置采样。下一页让这个采样变成能算出来的东西。 ### 35 除以 16 之后,为什么不应急着取整 [独立阅读](/course/blocks/roi-coordinate-conventions.html) 本页采用教学约定 (u=x/s),不额外加入像素中心偏移。原图 x=35、特征步长 s=16,得到 u=2.1875。若立即取整为 2,读到的位置就相当于原图 x=32;对分类可能仍包含相似内容,但细杯柄边缘已偏了三个像素。 这不表示所有实际库都直接使用 x/s。具体实现还可能约定像素中心、半像素偏移、对齐端点及边界外采样。对照库输出时必须先统一这些约定,不能把差异都归结为数值误差。课堂算例选择简单坐标,是为了单独看清连续位置与量化的差别。 RoI 提取不只涉及框起点,还要把框划成固定数量 bins,并在每个 bin 中选择采样位置。若框边界或 bin 边界被取整,细小移动可能完全不改变读数,跨过阈值又会突然跳变。保留连续几何,再通过邻域插值得值,便能把这些连续变化传到区域读出。 到 P42 我们真正算一个点;到 P43 再把点值放回局部二维目标。一次插值算对,是理解组件,不等于已经完成整套实例分割。 ## 沿这个问题继续 先读本页解释与图,再到 LAB03 改一个坐标或对象。 #### 按问题回查的讲解与短练习(1) **出处:**[Mask R-CNN §3 (2017)](https://arxiv.org/html/1703.06870v3) #### 图示条件与公式约定 教学坐标假设图像边界坐标/stride,无半像素偏置。35/16=2.1875,取整2对回32。仅用于解释量化误差,不声称还原 torchvision 等具体框架全部坐标约定。 #### 这条线索的展开与后续阅读 - [边界在 35,为什么被读到 32?](/supplement.html?return=l3-r2-p41/0#/l3-roi-coordinates/0) 本页说明 - [RoIAlign 修复读取错位,不修复表示丢失|问题从哪里出现](/supplement.html?return=l3-r2-p41/0#/l3-roi-align-chain-problem/0) 本页说明