Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

提一个bug,固定的一组anchors用于多尺度训练存在不严谨。 #607

Open
wangruo91 opened this issue Jun 3, 2021 · 1 comment

Comments

@wangruo91
Copy link

1,在core/config.py:line41中,指定了一组size,训练时会随机从中选取某个尺寸作为输入图片预处理得到的输入tensor的shape。
__C.TRAIN.INPUT_SIZE = [320, 352, 384, 416, 448, 480, 512, 544, 576, 608]

2,anchors/coco_anchors.txt中值是原始聚类结果,分三个head,依次除以8、16、32得到 anchors/basline_anchors.txt 中的结果。这里的8、16、32是head的w和h相比输入的缩小比例,作者定义为strides。

3,在core/yolov3.py中head部分,即decode逻辑,line123如下,
pred_wh = (tf.exp(conv_raw_dwdh) * anchors) * stride
这里的anchors*stride及恢复了原始聚类结果。

然后问题来了,我们通过聚类得到anchors,其单位是依赖与模型的输入shape的,也就是说,输入shape为608608还是416416,聚类得到的原始anchors是不一样的,依次除以相同的8、16、32倍后得到的作者定义的anchors也是不同的。如果固定anchors而不固定输入的shape,就会存在实际候选的anchors不是相应输入shape下最合理的anchors的情况。举个极端的例子,某个anchor尺寸乘回stride后,如其宽度为500,这在608尺寸下是合理的,在320尺寸下直接超过画面尺寸的情况,这显然是不合理的。虽然训练不会出现太大的问题,但是与我们通过聚类得到合适的anchors以使训练简化这一目标有点不match。

@lulu-Lucas
Copy link

赞同

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants