mmdet scrfd修改关键点个数训练

博客介绍了如何将最新的SCRFD人脸检测算法应用于现有项目,以替代两段式网络。作者详细记录了在代码中修改WiderFace数据集的5个关键点为4个关键点的过程,涉及到的数据集、转换函数和模型头的调整。通过这些修改,项目成功适配了SCRFD,并实现了更高效率和精度的人脸检测。
摘要由CSDN通过智能技术生成

SCRFD 是高效率高精度人脸检测算法,2021年5月刚发出来的,速度和精度相比其他算法都有提升,可以同时预测人脸框和关键点。

初始想法就是使用scrfd替换掉我在项目中正在使用的两段式网络,目前项目中基本上是使用yolo或者ssd先检测出对应的目标,然后将这个目标作为输入给另一个小型的网络预测关键点。

从scrfd的文章里的效果来看可以较好的替代现在的实现方式,但是在使用的过程中遇到了一个问题。原文使用的widerface数据集的标注关键点数量为5个,而项目中实际只有四个关键点。因此需要对代码进行修改,经过一段时间的努力已经找到了需要修改的部分,在这里记录一下。

本文所使用的版本如下

https://github.com/deepinsight/insightface

commit:42a241caec2ba137b1900aaaf18ee032a2ff5971

  • mmdet/datasets/retinaface.py
# line 31
self.NK = 5 改为
self.NK = 4

# line 52
kps = np.array( values[4:19], dtype=np.float32).reshape((self.NK,3)) 改为
kps = np.array( values[4:16], dtype=np.float32).reshape((self.NK,3))
  • mmdet/datasets/pipelines/transforms.py
# line 435 flip函数修改
assert keypointss.shape[1]==5 改为
assert keypointss.shape[1]==4

# line 441
flip_order = [1,0,2,4,3] 改为
flip_order = [1,0,3,2]
  • mmdet/models/dense_heads/scrfd_head.py
# line 122
self.NK = 5 改为
self.NK = 4

# line 335
kps_pred = kps_head.permute(2,3,0,1).reshape(-1,10) 改为
kps_pred = kps_head.permute(2,3,0,1).reshape(-1,8)

MMDetection中调整训练参数通常涉及修改其基础配置文件,该文件通常是一个`.yaml`格式的文件,例如`config.py`或`train.py`中的配置。这里是一些常见的训练参数及其含义: 1. **learning_rate** (学习率): 控制权重更新的速度。你可以通过设置`lr`关键字来调整初始值,并在`optimizer`部分指定衰减策略(如step decay, cosine annealing等)。 ```yaml learning_rate: _delete_: True lr_config: policy: 'step' warmup: None # 或者 'linear', 'constant', 等 gamma: 0.1 # 学习率衰减因子 ``` 2. **epochs** (周期数): 训练的完整轮数。通常在`runner`部分设定。 ```yaml total_epochs: 24 ``` 3. **batch_size**: 批次大小,影响计算效率和内存需求。可在`data.train.pipeline`中调整。 ```yaml train_pipeline: batch_size: 8 ``` 4. **weight_decay** (权重衰减): L2正则化项,用于防止过拟合。 ```yaml optimizer: weight_decay: 0.0001 ``` 5. **momentum** (动量) 和 **nesterov momentum** (尼氏动量): 加速梯度下降过程,优化器如SGD可用。 ```yaml optimizer: type: 'sgd' momentum: 0.9 nesterov: True ``` 6. **warmup_steps** (暖机步数): 针对某些学习率策略(如线性增加),可以设置起始阶段的学习率逐渐增长。 ```yaml lr_config: warmup: {type: 'linear', by_epoch: False, steps: 500} ``` 7. **checkpoint_interval**: 每多少轮保存一个检查点。 ```yaml checkpoint_config: interval: 1 ``` 记得每次更改参数后,最好验证新设置对模型性能的影响,可能需要多次迭代来找到最佳组合。你也可以参考MMDetection官方文档,以及MMDetection社区论坛中的教程和经验分享。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值