当前位置:   article > 正文

RK3568笔记二十五:RetinaFace人脸检测训练部署

rk3568

若该文为原创文章,转载请注明原文出处。

一、介绍

      Retinaface是来自insightFace的又一力作,基于one-stage的人脸检测网络。RetinaFace是在RetinaNet基础上引申出来的人脸检测框架,所以大致结构和RetinaNet非常像。

    官方提供两种主干特征提取网络:MobilenetV1-0.25和Resnet,本文以MobilenetV1-0.25为模型部署训练。目前 RetinaFace 可称得上是目前最强的开源人脸检测算法。

二、mobilenetV1-0.25的网络结构

mobilenetV1-0.25是mobilenetV1-1通道数压缩为原来1/4的网络,网络结构如下:

具体查看:GitHub - biubug6/Pytorch_Retinaface: Retinaface get 80.99% in widerface hard val using mobilenet0.25.

三、环境

1、训练平台:AutoDL

2、硬件:ATK-DLR3568

四、搭建

1、创建虚拟环境

conda create -n Retinaface_env python=3.8

2、激活

conda activate Retinaface_env

3、下载源码

git clone https://github.com/biubug6/Pytorch_Retinaface.git

4、安装环境

1、ptyorch安裝

根据官方Previous PyTorch Versions | PyTorch ,选择合适版本。

conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=11.0 -c pytorch

2、安装其他

pip install opencv-python
pip install numpy==1.23.5

numpy版本需要对应,其他的没特殊。

3、下载数据

https://drive.google.com/open?id=11UGV3nbVv1x9IC--_tK3Uxf7hA6rlbsS

国内需要梯子才能下载

4、下载预训练模型和训练模型

Retinaface_model_v2_免费高速下载|百度网盘-分享无限制 (baidu.com)

密码:fstq

不想训练模型,可以直接使用网盘上的模型

该模型可以如下所示:

  1. ./weights/
  2. mobilenet0.25_Final.pth
  3. mobilenetV1X0.25_pretrain.tar
  4. Resnet50_Final.pth

五、训练

使用 WIDER FACE 训练模型:

  1. CUDA_VISIBLE_DEVICES=0,1,2,3 python train.py --network resnet50
  2. CUDA_VISIBLE_DEVICES=0 python train.py --network mobile0.25

这里使用的是mobile0.25网络训练

执行

CUDA_VISIBLE_DEVICES=0 python train.py --network mobile0.25

六、评估

1、生成 txt 文件

python test_widerface.py --trained_model weight_file --network mobile0.25

2、评估 txt 结果

  1. cd ./widerface_evaluate
  2. python setup.py build_ext --inplace
  3. python evaluation.py

七、转成ONNX模型

python convert_to_onnx.py -m ./weights/mobilenet0.25_Final.pth --network mobile0.25 --long_side 320 

转换时出错:

File "convert_to_onnx.py", line 83, in <module>
    inputs = torch.randn(1, 3, args.long_side, args.long_side).to(device)
TypeError: randn(): argument 'size' must be tuple of ints, but found element of type str at pos 3
原因是randn输入的不是size int类型,直接修改成320,重新执行

重新执行,导出正常

转成rknn使用的是rknn-toolkit2 v1.5版本,唤醒根据正点原子手册自行安装。

8、转成RKNN模型

1、下载rknn_model_zoo

https://github.com/airockchip/rknn_model_zoo

把转化好的onnx文件拷贝到 model目录下。

转换格式如下:

python convert.py <onnx_model> <TARGET_PLATFORM> <dtype(optional)> <output_rknn_path(optional)>

使用的平台是RK3568,执行下面命令转换

python convert.py ../model/RetinaFace_mobile320.onnx rk3568

模型需要替换成自己的。

9、部署测试

1、Python Demo Test

 测试格式

python RetinaFace.py --model_path <rknn_model> --target <TARGET_PLATFORM>

对应RK3568

python RetinaFace.py --model_path ../model/xx.onnx --target rk3568

2、板载测试

1、修改GCC_COMPILER

export GCC_COMPILER=/opt/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu

修改成自己的路径

2、编译

./build-linux.sh  -t rk3568 -a aarch64 -d RetinaFace

3、运行

把编译后的执行文件通过adb或tftp上传到板子

运行下面命令测试

  1. export LD_LIBRARY_PATH=./lib
  2. ./rknn_retinaface_demo model/RetinaFace.rknn model/test.jpg

注意:尝试搜索 librga.so 的位置,如果在 lib 文件夹中找不到 librga.so,请将其添加到LD_LIBRARY_PATH。 使用以下命令将其添加到LD_LIBRARY_PATH。

export LD_LIBRARY_PATH=./lib:<LOCATION_LIBRGA>

如有侵权,或需要完整代码,请及时联系博主。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/626452
推荐阅读
相关标签
  

闽ICP备14008679号