Tencent / FaceDetection-DSFD

腾讯优图高精度双分支人脸检测器
Other
2.91k stars 728 forks source link

about some details #5

Closed foralliance closed 5 years ago

foralliance commented 5 years ago

看了code,有几个疑问:

  1. paper中的FEM模块(Fig3)和code实现(class FEM(nn.Module))时,貌似不一样. paper中,输入分3份,然后每份分别经过3个dilation conv层.而code中,貌似并不是这样的操作.

  2. multi_scale_test_pyramid算是对multi_scale_test一个补充吗??感觉就是单纯的用了更多的测试尺度.

  3. 多尺度测试时,为什么图片缩小时,要排除一些小结果(小于30的)??而图片放大时,要排除一些大结果(大于100的)??

  4. paper中提到的:For 4 bounding box coordinates, we round down top left coordinates and round up width and height to expand the detection bounding box.这个在貌似在code中未体现?


还有一个关于PyramidBox的问题:

  1. PyramidBox的Fig3可知:P0,P1,P2,P3,P4,P5生成face_anchors;P1,P2,P3,P4,P5生成head_anchors;P2,P3,P4,P5生成body_anchors.对应关系是:P0的face对应P1的head对应P2的body,而且尺度应该是加倍的,如:face20对应head40对应body80.但是从code来看,并没有体现出加倍

麻烦了!!

swordlidev commented 5 years ago

Hi @foralliance (1) code,paper中都是分了三个分支,通过堆叠层数和dilation的设置,不同的分支其实会有不同的dilation系数。 (2) 是的,一阶段模型中,多尺度测试融合能极大的提升性能,multi_scale_test_pyramid比multi_scale_test测试尺度多,结果好。 (3)可以可视化一下看看结果。其原因是:图片缩小目的是为了检测大目标,因而不需要关心小于30的物体,那些小于30的那些目标就交由放大测试操作进行检测。否则会引入误检。 (4)这个在测试脚本里面应该有体现,write_to_txt函数里面。 (5)在350,351,352三行代码有体现。

foralliance commented 5 years ago

@lijiannuist 谢谢您的回复.

对于第5点: 根据350,351,352三行代码的设置, self.face_priors生层6组anchors,对应尺度[16, 32, 64, 128, 256, 512],对应6个分支p0-p5. self.head_priors生层5组anchors,对应尺度[16, 32, 64, 128, 256],对应5个分支p1-p5. self.body_priors生层4组anchors,对应尺度[16, 32, 64, 128],对应4个分支p2-p5.

根据PyramidBoxFig4的描述:p0上16的face,对应p1上32的head,对应p2上64body.所以,自认为,self.head_priors对应的尺度应该是[32, 64, 128, 256, 512],self.body_priorss对应的尺度应该是[64, 128,256, 512]. 所以说应改为:

self.face_priors = self.init_priors(self.cfg) self.head_priors = self.init_priors(self.cfg , min_size=cfg['min_sizes'][1:], max_size=cfg['max_sizes'][1:]) self.body_priors = self.init_priors(self.cfg , min_size=cfg['min_sizes'][2:], max_size=cfg['max_sizes'][2:])

不知道自己的理解对不?