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

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

一、介绍

      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>

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 中别再用 ‘+‘ 拼接字符串了!

当我开始学习 Python 时&#xff0c;使用加号来连接字符串非常直观和容易&#xff0c;就像许多其他编程语言&#xff08;比如Java&#xff09;一样。 然而&#xff0c;很快我意识到许多开发者似乎更喜欢使用.join()方法而不是。 在本文中&#xff0c;我将介绍这两种方法之间的…

关于数据库和数据表的基础SQL

目录 一. 数据库的基础SQL 1. 创建数据库 2. 查看当前有哪些数据库 3. 选中数据库 4. 删除数据库 5. 小结 二. 数据表的基础SQL 1. 创建数据表 2. 查看当前数据库中有哪些表 3. 查看指定表的详细情况(查看表的结构) 4. 删除表 5. 小结 一. 数据库的基础SQL 1. 创建…

python内置函数map/filter/reduce详解

在Python中&#xff0c;map(), filter(), 和 reduce() 是内置的高级函数(实际是class)&#xff0c;用于处理可迭代对象&#xff08;如列表、元组等&#xff09;的元素。这些函数通常与lambda函数一起使用&#xff0c;以简洁地表达常见的操作。下面我将分别解释这三个函数。 1. …

xgboost项目实战-保险赔偿额预测与信用卡评分预测001

目录 算法代码 原理 算法流程 xgb.train中的参数介绍 params min_child_weight gamma 技巧 算法代码 代码获取方式&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1QV7nMC5ds5wSh-M9kuiwew?pwdx48l 提取码&#xff1a;x48l 特征直方图统计&#xff1a; fig, …

各大模型厂商API使用:百度、阿里、豆包、kimi、deepseek

百度ERNIE(支持requests接口) ERNIE Speed、ERNIE Lite免费 免费测试下来模型ernie_speed输出吞吐量计算20-30来个,“{length/cost} tokens/s” 输出总长度/耗时 https://qianfan.cloud.baidu.com/ 文档: https://cloud.baidu.com/doc/WENXINWORKSHOP/s/dltgsna1o a…

智能进化:深度学习与进化计算的融合艺术

《进化深度学习》这本书深入探索了进化计算&#xff08;EC&#xff09;在深度学习领域的应用&#xff0c;为读者提供了一套丰富而实用的技术工具&#xff0c;这些工具可以贯穿深度学习的整个过程&#xff0c;助力研究者们解决各种复杂的问题。书中不仅详细介绍了遗传算法和进化…

怎么理解直接程序控制和中断方式?

直接程序控制 看完之后是不是依然一头雾水&#xff1f;来看下面两个例子 无条件传送 假设你正在使用键盘打字。当你敲击键盘上的一个键时&#xff0c;键盘会立即产生一个信号&#xff08;即输入数据&#xff09;&#xff0c;并且这个信号会立即被电脑接收。在这个过程中&…

比较两列数据

点其中一个数据 删掉S&#xff0c;回车 大的标红

v-cloak 用于在 Vue 实例渲染完成之前隐藏绑定的元素

如果你是后端开发者&#xff08;php&#xff09;&#xff0c;在接触一些vue2开发的后台时&#xff0c;会发现有这段代码&#xff1a; # CDN <script src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js"></script> # 或 <script src"https://cd…

三十六计的笔记

系列文章目录 三十六计的笔记 文章目录 系列文章目录1、瞒天过海2、围魏救赵3、借刀杀人4、以逸待劳5、趁火打劫6、声东击西7、无中生有8、暗渡陈仓9、隔岸观火10、笑里藏刀11、李代桃僵12、顺手牵羊13、打草惊蛇14、借尸还魂15、调虎离山16、欲擒故纵17、抛砖引玉18、擒贼擒王…

9.3 Go语言入门(变量声明和函数调用)

Go语言入门&#xff08;变量声明和函数调用&#xff09; 目录二、变量声明和函数调用1. 变量声明1.1 使用 var 关键字声明1.2 简短声明1.3 零值1.4 常量 2. 函数调用2.1 函数定义2.2 多个返回值2.3 命名返回值2.4 可变参数2.5 匿名函数和闭包 目录 Go 语言&#xff08;Golang&a…

粤嵌—2024/5/21—打家劫舍(✔)

代码实现&#xff1a; int rob(int *nums, int numsSize) {if (numsSize 1) {return nums[0];}if (numsSize 2) {return fmax(nums[0], nums[1]);}int dp[numsSize];dp[0] nums[0];dp[1] fmax(nums[0], nums[1]);for (int i 2; i < numsSize; i) {dp[i] fmax(dp[i - 1…

高中数学:平面向量-正交分解、坐标表示、坐标运算

一、正交分解 二、坐标表示 这里注意一点 坐标A(x,y)与向量 a → \mathop{a}\limits ^{\rightarrow} a→的坐标记作&#xff1a; a → \mathop{a}\limits ^{\rightarrow} a→(x,y)&#xff0c;表示方式的区别 引申 三、加减运算的坐标表示 四、数乘运算的坐标表示 引申 两向量…

Go微服务: Nacos的搭建和基础API的使用

Nacos 概述 文档&#xff1a;https://nacos.io/docs/latest/what-is-nacos/搭建&#xff1a;https://nacos.io/docs/latest/quickstart/quick-start-docker/有很多种搭建方式&#xff0c;我们这里使用 docker 来搭建 Nacos 的搭建 这里&#xff0c;我们选择单机模式&#xf…

pytest-sugar插件:对自动化测试用例加入进度条

摘要 在自动化测试过程中&#xff0c;测试进度的可视化对于开发者和测试工程师来说非常重要。本文将介绍如何使用pytest-sugar插件来为pytest测试用例添加进度条&#xff0c;从而提升测试的可读性和用户体验。 1. 引言 自动化测试是软件开发过程中不可或缺的一部分&#xff…

Linux系统命令traceroute详解(语法、选项、原理和实例)

目录 一、traceroute概述 二、语法 1、基本语法 2、命令选项 三、帮助信息 四、示例 1. 使用默认模式&#xff08;ICMP Echo&#xff09;追踪到目标主机 2. 使用UDP模式&#xff08;需要root权限&#xff09;追踪到目标主机 3. 不解析IP地址为主机名&#xff0c;直接显…

纯电动汽车硬件在环测试

纯电动汽车硬件在环测试技术研究综述 1、新能源汽车概述 随着新能源汽车“电动化、智能化、网联化、共享化”进程的不断推进&#xff0c;新能源汽车的整体性能得到显著提高&#xff0c;纯电动汽车已经逐渐走进大众视野&#xff0c;消费者对于新能源汽车的认可度和购买欲望也稳…

让大模型变得更聪明三个方向

让大模型变得更聪明三个方向 随着人工智能技术的飞速发展&#xff0c;大模型在多个领域展现出了前所未有的能力&#xff0c;但它们仍然面临着理解力、泛化能力和适应性等方面的挑战。那么&#xff0c;如何让大模型变得更聪明呢&#xff1f; 方向一&#xff1a;算法创新 1.1算…

粤嵌—2024/5/20—三角形最小路径和(✔)

代码实现&#xff1a; int minimumTotal(int **triangle, int triangleSize, int *triangleColSize) {if (triangleSize 1) {return triangle[0][0];}for (int i 1; i < triangleSize; i) {for (int j 0; j < triangleColSize[i]; j) {int x i - 1;int y1 j - 1, y2…

【数据结构】快速排序详解!

文章目录 1. 快速排序的非递归版本2. 快速排序2.1 hoare 版本一2.2 挖坑法 &#x1f427;版本二2.3 前后指针 版本三2.4 调用以上的三个版本的快排 3. 快速排序的优化 1. 快速排序的非递归版本 &#x1f192;&#x1f427;关键思路&#xff1a; &#x1f34e;① 参数中的begin…