若该文为原创文章,转载请注明原文出处。
一、介绍
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
不想训练模型,可以直接使用网盘上的模型
该模型可以如下所示:
./weights/mobilenet0.25_Final.pthmobilenetV1X0.25_pretrain.tarResnet50_Final.pth
五、训练
使用 WIDER FACE 训练模型:
CUDA_VISIBLE_DEVICES=0,1,2,3 python train.py --network resnet50
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 结果
cd ./widerface_evaluate
python setup.py build_ext --inplace
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上传到板子
运行下面命令测试
export LD_LIBRARY_PATH=./lib
./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>
如有侵权,或需要完整代码,请及时联系博主。