【论文复现】人脸检测centerface项目高精度复现记录

1. 2020.02.14

第一次复现成功时项目的精度为:

Easy   Val AP: 0.8927833007822815
Medium Val AP: 0.8572395783332547
Hard   Val AP: 0.574306706687687

2. 2020.02.15

利用centernet项目刚把centerface训练代码复现,并添加了相应的测试脚本。采用randaugment做图像增强,并没有实际提高,IOU 阈值采用原文的0.4。测试结果为:

Easy   Val AP: 0.8824708943649829
Medium Val AP: 0.8422070187808188
Hard   Val AP: 0.4848727085403769

发现的问题: 检测出人脸的置信度没有原项目的高。randaugment的参数没有调好。
继续尝试:

  • 提高hm分支在损失函数中的权重
  • 按论文的方法修改损失函数中wh和lm损失,都除以4

3. 2020.02.16

按2修改之后训练的结果为:

Easy   Val AP: 0.8795451408623859
Medium Val AP: 0.841365184622422
Hard   Val AP: 0.46801452381638775

效果更差了。

3.2 修改单张图片中max_objects=32,结果为:

Easy   Val AP: 0.9172549077118562
Medium Val AP: 0.8789230778805832
Hard   Val AP: 0.5259845738691025

暂时是最好的效果,但是hard部分和论文的结果相差太大了。

3.3 将测试图片的尺寸改为800×800
测试的时候发现,网络采用的是512×512的输入,改为800×800的结果为:

Easy   Val AP: 0.9185999269724219
Medium Val AP: 0.901725875417959
Hard   Val AP: 0.6760566536649796

37个epoch迭代之后为:

Easy   Val AP: 0.9230461666813543
Medium Val AP: 0.9050905330904577
Hard   Val AP: 0.679394673204941

easy和medium部分的大概就2%的差距。hard部分差了20%。应该是哪里出问题了。继续检查

  • 数据处理部分,把hard部分的数据忽略掉了
  • 求loss的时候权重不对…

4. 2020.02.17

4.1 修改dataloader部分
因为项目复现的时候用的是centernet,其中用mask来对人脸bbox是否纳入loss计算进行筛选。但是原项目在没有关键点标注的时候bbox的loss也是忽略的。

# num_kpts = pts[:, 2].sum()                           # 没有关键点标注的时哦
# if num_kpts == 0 or w*h <= 8:                        # 像素小于8人脸bbox忽略
#   print('人脸bbox小于8像素')
#   hm[cls_id, ct_int[1], ct_int[0]] = 0.9999
#   reg_mask[k] = 0

做相应的修改之后,1个epoch的结果为:

Easy   Val AP: 0.9136305801084846
Medium Val AP: 0.9004443217585435
Hard   Val AP: 0.7486346101347016

训练5个epoch后:

Easy   Val AP: 0.9136305801084846
Medium Val AP: 0.9004443217585435
Hard   Val AP: 0.7486346101347016

到这个时候发现怎么都不能达到论文中的精度,而且测试图片的尺寸不一样。将作者开源的推理部分resize到(800, 800)之后的精度为,这个时候发现和作者的精度相差不大了。

Easy   Val AP: 0.8994579960178827
Medium Val AP: 0.8910560421833768
Hard   Val AP: 0.7580032280128222

4.2 按作者的推理尺寸
作者的推理代码并不是resize到固定的800×800进行推理的。改了之后的结果:

Easy   Val AP: 0.7590422828928484
Medium Val AP: 0.7668336456187856
Hard   Val AP: 0.6459016299992617

更加难受。。。。。拉低精度倒是容易,提高难。。。

4.3 推理解码时加上0.5

Easy   Val AP: 0.8944619875905007
Medium Val AP: 0.8786048957443632
Hard   Val AP: 0.6494164547438736

不加0.5时的精度

Easy   Val AP: 0.9139210470027292
Medium Val AP: 0.9004747082816128
Hard   Val AP: 0.7484789672560311

2020.02.19

将单张图片中有大于32个的人脸,随机选择32个纳入训练。整体精度还是有一点提升的。Hard部分首次突破75%

Easy   Val AP: 0.9181172120445322
Medium Val AP: 0.9023252915254976
Hard   Val AP: 0.7514949471830177

随机给定wh_border之后的结果

Easy   Val AP: 0.921870531393536
Medium Val AP: 0.9043039772152575
Hard   Val AP: 0.7503274439736225

忽略w×h<8.0的人脸bbox之后的第一个epoch。猜想:为了提高模型在hard部分的精度,这些小人脸不应该舍弃,而应该加强

Easy   Val AP: 0.9091432736741472
Medium Val AP: 0.896355679513712
Hard   Val AP: 0.7340882460233433

第三个epoch

Easy   Val AP: 0.9063728962158957
Medium Val AP: 0.892580315698702
Hard   Val AP: 0.7362988642547756

在resize中范围为(0.4,1.3)增加小尺寸的生成比例

Easy   Val AP: 0.9341260896091413
Medium Val AP: 0.9138223506232303
Hard   Val AP: 0.7439257153100742

训练图片采用640×640

Easy   Val AP: 0.9156956692042681
Medium Val AP: 0.8995942490443671
Hard   Val AP: 0.7573660571144549

改为800×800,将w×h<9.0的权重改为1.5,第一个epoch

Easy   Val AP: 0.919805885041158
Medium Val AP: 0.9044897728748333
Hard   Val AP: 0.7539699146885644

将w×h<20的权重改为1.5,第二个epoch

Easy   Val AP: 0.9251980847342989
Medium Val AP: 0.9076555245666078
Hard   Val AP: 0.7443846461882706

第4个epoch

Easy   Val AP: 0.9256294186096288
Medium Val AP: 0.9075577176922052
Hard   Val AP: 0.7330352515909425

第6个epoch

Easy   Val AP: 0.9321484931152357
Medium Val AP: 0.911811740023001
Hard   Val AP: 0.738870553332144

Easy   Val AP: 0.9293011175516118
Medium Val AP: 0.9092558384511397
Hard   Val AP: 0.7380024639090104

2020.02.20

和原文作者联系了一下。其说多生成中小人脸。借鉴PyramidBox的data anchor sample。

# 第8个epoch
Easy   Val AP: 0.915616744704825
Medium Val AP: 0.9041150885055822
Hard   Val AP: 0.767681654914798
# 第9个epoch
Easy   Val AP: 0.9195952681800852
Medium Val AP: 0.9095379597957586
Hard   Val AP: 0.77068934530002692个epoch//wh_loss和精度有一定关系
Easy   Val AP: 0.9257383419951156
Medium Val AP: 0.9131308732465665
Hard   Val AP: 0.77173055525507348个epoch//越来越差了
Easy   Val AP: 0.9155440675057671
Medium Val AP: 0.9050454682864626
Hard   Val AP: 0.7695313987415494

重新再来//还没有原来好
Easy   Val AP: 0.9147329106422596
Medium Val AP: 0.9048015125441984
Hard   Val AP: 0.7583140575972848
采用data anchor sample之后不随机resize
第一个epoch
Easy   Val AP: 0.9175326686503387
Medium Val AP: 0.9060623448385641
Hard   Val AP: 0.7610332277042511
Easy   Val AP: 0.9182897122975063
Medium Val AP: 0.9067852239421534
Hard   Val AP: 0.7578530298533288
data anchor sample小尺寸部分设置更加细密
第2个epoch
Easy   Val AP: 0.919762968011499
Medium Val AP: 0.9067558695251335
Hard   Val AP: 0.76771883018106012个epoch
Easy   Val AP: 0.9194535159144702
Medium Val AP: 0.9087459655850176
Hard   Val AP: 0.77409835890767613个epoch
Easy   Val AP: 0.9197643772830559
Medium Val AP: 0.9079956909536888
Hard   Val AP: 0.77622734286599786个epoch
Easy   Val AP: 0.9193314969137405
Medium Val AP: 0.9063078203061292
Hard   Val AP: 0.7669107938641975
  • 将训练过程的图片尺寸按推理的规则处理

attention:项目整理之后开源

官方的结果

# 多尺度测试
Easy Val AP: 0.935
Medium Val AP: 0.924
Hard Val AP: 0.875
# 单尺度
92.2% (Easy), 
91.1% (Medium) and 78.2% (Hard) for validation set.

可继续测试优化项

  • 用mixnet替换mobilenetv2
  • 提高FPN的特征融合策略
  • 借鉴insightface项目,做提高

TO DO

  • 加速项目
  • 做嵌入式推理
  • 剥离pytorch框架的依赖,完成c++推理demo
发布了244 篇原创文章 · 获赞 147 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/u011622208/article/details/104330213
今日推荐