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.7706893453000269
第2个epoch//wh_loss和精度有一定关系
Easy Val AP: 0.9257383419951156
Medium Val AP: 0.9131308732465665
Hard Val AP: 0.7717305552550734
第8个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.7677188301810601
第2个epoch
Easy Val AP: 0.9194535159144702
Medium Val AP: 0.9087459655850176
Hard Val AP: 0.7740983589076761
第3个epoch
Easy Val AP: 0.9197643772830559
Medium Val AP: 0.9079956909536888
Hard Val AP: 0.7762273428659978
第6个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