主要是对generate_anchors的解读,帮助理解anchor的生成过程。
参考代码:
https://github.com/kevinjliang/tf-Faster-RCNNgithub.comFaster RCNN详细介绍:
白裳:一文读懂Faster RCNNzhuanlan.zhihu.com![c0b7f5ee5ef31f3ecf454d190be05c46.png](https://img-blog.csdnimg.cn/img_convert/c0b7f5ee5ef31f3ecf454d190be05c46.png)
首先看main函数
if __name__ == '__main__':
import time
t = time.time()
a = generate_anchors() #最主要的就是这个函数
print time.time() - t
print a
from IPython import embed; embed()
进入到generate_anchors函数中:
def generate_anchors(base_size=16, ratios=[0.5, 1, 2],
scales=2 ** np.arange(3, 6)):
"""
Generate anchor (reference) windows by enumerating aspect ratios X
scales wrt a reference (0, 0, 15, 15) window.
"""
# 请注意anchor的表示形式有两种,一种是记录左上角和右下角的坐标,一种是记录中心坐标和宽高
# 这里生成一个基准anchor,采用左上角和右下角的坐标表示[0,0,15,15]
base_anchor = np.array([1, 1, base_size, base_size]) - 1 # [0,0,15,15]
ratio_anchors = _ratio_enum(base_anchor, ratios) # shape: [3,4],返回的是不同长宽比的anchor
anchors = np.vstack([_scale_enum(ratio_anchors[i, :], scales)
for i in range(ratio_anchors.shape[0])]) # 生成九个候选