clw5180/remote_sensing_object_detection_2019

配置文件中RRPN的ANCHOR_SIZES设置有问题

Opened this issue · 3 comments

FPN的结构,每层特征图anchor size的大小从下往上应该是32,64,128,256,512.对应的anchor stride是4,8,16,32,64.
配置文件中的设置是: ANCHOR_STRIDE: (4, 8, 16, 32, 64),ANCHOR_SIZES: (2, 4, 8, 16, 32)
配置文件中的解释是ANCHOR_SIZES里面的值是16的倍数,但是运行的代码中却不是这么写的。
在生成base anchor的时候,
cell_anchors = [
generate_anchors(anchor_stride, (size,), aspect_ratios, anchor_theta).float()
for anchor_stride, size in zip(anchor_strides, sizes)
]
所以anchor_stride=4, 8, 16, 32, 64,size = 2, 4, 8, 16, 32.
anchor_stride=4对应的size应该是32,但是代码中确实如下所示:
base_anchor = np.array([base_size / 2 - 1, base_size / 2 - 1, base_size, base_size, 0], dtype=np.float32)
此时base_size=anchor_stride=4,
加入尺度变化后,代码如下所示:
def _scale_enum(anchor, scales):
x_ctr, y_ctr, width, height, theta = anchor

ws = width * np.array(scales, np.float32)
hs = height * np.array(scales, np.float32)

。。。。。
此时的scales=size=2,这就不对了
我觉得应该这么改
cell_anchors = [
generate_anchors(anchor_stride, (size,), aspect_ratios, anchor_theta).float()
for anchor_stride, size in zip(anchor_strides, sizes)
]
ANCHOR_SIZES的值改为(32,6 4,12 8, 256, 512),然后将上段代码改为
cell_anchors = [
generate_anchors(anchor_stride, (size/anchor_stride,), aspect_ratios, anchor_theta).float()
for anchor_stride, size in zip(anchor_strides, sizes)
]
其实是将def _scale_enum(anchor, scales)中的scales都变成8,这样,anchor size=ANCHOR_STRIDE: (4, 8, 16, 32, 64)*8=(32,64,128,256,512)
不知道我这样理解对不对

你好,ANCHOR_SIZES的值改为(32,6 4,12 8, 256, 512) ;ANCHOR_STRIDE: (4, 8, 16, 32, 64)后。代码改为generate_anchors(anchor_stride, (size/anchor_stride,), aspect_ratios, anchor_theta).float()。但是没有检测结果并没有检测到,请问你是怎么改的呀?

你好,我修改的方法就是上面说的那样啊。你试试debug一下,看看生成的anchor对不对。

你好,我修改的方法就是上面说的那样啊。你试试debug一下,看看生成的anchor对不对。

好的非常感谢,想请教一下在DOTA上的mAP大概是多少呀?可以分享一下配置文件吗