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. 创建…

Qt中的网络编程(Tcp和Udp)详解 及 实现

Qt中的网络编程&#xff08;Tcp和Udp&#xff09;详解 及 实现 代码 卡的格式不对&#xff0c;看我的代码标题去 拷贝 &#xff0c;共四个文件。 1、安装qty软件&#xff0c;官网直接下载 在线安装。 怕以后麻烦直接安装选择一个完整版本QT勾选。 在线下载i30多g应该&#xff…

Stream浅解析

Stream流浅解析 package com.w.earn.share;import java.util.*; import java.util.stream.Collectors;/*** Author yang kai bo* Date 2024/5/26 19:43* Description* 概念&#xff1a;stream流是一种对 Java 集合运算和表达的高阶抽象。* 优点&#xff1a;写法简单&#xf…

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

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

mac安装git心得

我是买了一个新的mac但是当我安装git的时候遇见了很多问题 安装不上各种报错 首先我们直接打开git网址&#xff0c;然后打开mac的命令提示&#xff0c;里边输入git大概1g左右&#xff0c;下载完了直接好了

持续总结中!2024年面试必问 20 道 Redis面试题(七)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 20 道 Redis面试题&#xff08;六&#xff09;-CSDN博客 十三、Redis集群的主从复制模型是怎样的&#xff1f; Redis集群的主从复制模型是一种高可用性架构&#xff0c;它允许数据在多个节点之间进行复制&#x…

pod 之资源限制 与健康检查

目录 一 资源限制 1&#xff0c;资源限制是什么 2&#xff0c;资源限制的 标准 3&#xff0c; k8s 创pod 显示 OOMKILLED 是 requests小了 还是limits小了 4&#xff0c; Pod 和 容器 的资源请求和限制 &#xff08;yaml&#xff09; 5&#xff0c; CPU 资源单位 6&…

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

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

这次泰迪杯应该不能答辩

检查了里面还有没修改完的&#xff0c;只能但愿没看到 魔改了又去投水赛&#xff0c;理论加应用

各大模型厂商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…

JavaScript-函数的使用

函数的语法 函数就是包裹在花括号里面的代码&#xff0c;当用户需要多次使用 某个代码时&#xff0c;可以用函数包裹住这个代码&#xff0c;然后调用函数即可 比如js自己封装好的函数doucument.write(),console.log()等等 function functionname() {/*代码块*/ } 函数的组成部…

Flink Kylinv10 java8 Flink镜像制作

1&#xff09;基于麒麟v10版本制作JDK8基础镜像在这里插入代码片 FROM kylinv10/kylin:b09 RUN set -ex; \dnf install -y wget java-1.8.0-openjdk java-1.8.0-openjdk-devel tar; \yum clean all RUN java -version CMD ["echo", "kylinv10 JDK 8 image is …

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

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

【嵌入式DIY实例】-OLED显示DS1307/DS3231实时时钟

OLED显示DS1307/DS3231实时时钟 文章目录 OLED显示DS1307/DS3231实时时钟1、DS1307/DS1321介绍2、硬件准备3、代码实现本文将展示了如何使用ESP8266 NodeMCU开发板、DS3231 RTC 芯片和 SSD1306 OLED 显示屏(12864 像素)构建实时时钟。 DS3231 RTC有一个内置的温度传感器,我们…

力扣:344. 反转字符串

344. 反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#xff1a; 输入&#xff1a;s ["…

Win11禁用数字强制签名:解放硬件选择,自由安装应用

工具原料&#xff1a; 操作系统版本&#xff1a;Windows 11 品牌型号&#xff1a;任意电脑或手机品牌型号 软件版本&#xff1a;任意版本的Win11操作系统 一、禁用数字强制签名的方法 方法一&#xff1a;使用高级启动选项 在Win11中&#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…