锚框

其实根据multibox_prior函数的代码推算,
虽然输入的ration确实就是最终生成的锚框的宽高比,
但是文中的size却并不是真正的 ”锚框/原图面积比“,
记真正的锚框/原图面积比为size_real ,
代码中的size为size_old,输入的原图的高为H,宽为W,
则 size_real = (size_old)^2*H/W, size_real是size_old 的二次函数,
在第一象限内是单调递增的,而根据该方法的代码,
宽高比确实就是r,所以虽然描述和实际不一致,但是却不影响使用

以下推算该式
设生成的锚框宽为w,高为h (均为归一化后的数值)
则根据multibox_prior中的算法
真实锚框宽为 wW = (size_oldsqrt(ratio)H/W)W= Hsize_oldsqrt(ratio)
真实锚框高为 h*H = (size_old/sart(ratio))H = Hsize_old/sart(ratio)

上面两式相除得锚框真实款高比为ratio 符合预期

下面推算真实的锚框/原图面积比size_real
size_real
= (wW hH)/(WH)
= (Hsize_old)**2 /(WH)
= (size_old**2)*H/W
可以看到 size_real是size_old的二次函数

关于assign_anchor_to_bbox() 函数,这个函数分两阶段,第一阶段是在对每一个真实边框界,找到最大IoU的锚框,并且确保这个锚框的IoU大于设定的阈值,如果达不到阈值,这个匹配就会暂缺。进行完第一阶段,第二阶段才是讲解中介绍的丢弃寻找法,这个方法补充了第一阶段没有匹配上的真实边框界,最终确保所有的真实边框界都有一个匹配上的锚框。第二阶段的匹配不会影响第一阶段已经匹配好的结果。讲解部分只涵盖了第二阶段,如果加上第一阶段的解释,有助于对函数的理解。

这里进行了两次变换。他说的不清楚,首先 默认 h = 1 , 计算出来 锚框的 w 和 h
。然后因为原来的锚框的中心坐标被缩放成了,1 X 1 的一个范围,这里要保证,w和h在1X1 的这个缩放下比例也要正确,默认保持 h 不变,只是修改 w ,把 w 在进行缩放。
例如 假设 原图 是 in_w = 2, in_h = 1
然后 锚框h 默认 = 1,假设我们让锚框 根据 r 和 s算出来的形状 是
锚框 w = 2, h = 1 (这里是使用sqrt(s) 是为了防止 s 数值过大,平滑数据用,实际应该是 s )

这时候 原图 缩放成 1 x 1 的正方形, 锚框 缩放完之后也是 1 * 1, 因此对锚框进行一次缩放,缩放因子 是 h / w
h默认是基准1 ,不需要改变