facenet人脸检测+人脸识别+性别识别+表情识别+年龄识别的C++部署

文章目录

    • 一. 人脸检测
    • 二.人脸识别facenet
      • 2.1 训练人脸识别模型
      • 2.2 导出ONNX
      • 2.3 测试
    • 三.人脸属性(性别、年龄、表情、是否戴口罩)
      • 3.1 训练
      • 3.2 导出ONNX
      • 3.3 测试
    • 四. 集成应用
    • 五、Jetson 部署
      • 5.1 NX
      • 5.2 NANO

一. 人脸检测

代码位置:1.detect

运行环境:TensorRT

NVIDIA TAO(training, adapting and optimizing)工具包是一款专门用于深度学习的工具包,它可以帮助用户轻松地训练和优化深度学习模型,使其能够在各种设备上进行推理操作。TAO工具包基于TensorFlow和PyTorch构建,采用了迁移学习的技术,可以将用户自己的模型或预训练模型与实际或合成数据进行适配,并针对目标平台进行推理吞吐量的优化,从而使整个训练过程变得更加简单、高效。TAO工具包的使用不需要专业的人工智能知识或大量的训练数据集,因此,它可以帮助更多的人轻松进入深度学习的领域,快速实现各种应用场景。

模型地址:https://catalog.ngc.nvidia.com/models

使用 TAO的预训练模型:FaceDetect:

  • 这个模型接受736x416x3维度的输入张量,并输出46x26x4的bbox坐标张量和46x26x1的类别置信度张量。这些输出张量需要经过NMS或DBScan聚类算法进行后处理,以创建适当的边界框。
  • 输入:通道顺序为NCHW,其中N = Batch Size,C = 通道数(3),H = 图像高度(416),W = 图像宽度(736)。输入比例尺度为1/255.0。均值减法:无。
  • 输出:输入图像中每个检测到的人脸的类别标签和边界框坐标。
  • 后处理参考代码:
    • 来源一
    • 来源二
# 启动docker
docker run --gpus all --name facenet_env -p 1936:1935 -p 8556:8554 -v `pwd`:/app  -it nvcr.io/nvidia/tensorrt:22.08-py3 bash


# 下载检测模型
curl -LO 'https://api.ngc.nvidia.com/v2/models/nvidia/tao/facenet/versions/pruned_quantized_v2.0.1/files/model.etlt'
curl -LO 'https://api.ngc.nvidia.com/v2/models/nvidia/tao/facenet/versions/pruned_quantized_v2.0.1/files/int8_calibration.txt'

# download tao-converter
curl -LO 'https://api.ngc.nvidia.com/v2/resources/nvidia/tao/tao-converter/versions/v3.22.05_trt8.4_x86/files/tao-converter'


# 给运行权限
chmod +x ./TAO/tao-converter
#模型转换,转换成engine格式,
./TAO/tao-converter -k nvidia_tlt -d 3,416,736 model/model.etlt -t int8 -c model/int8_calibration.txt

#编译facedet_test 并运行
cmake -B build .
cmake --build build
./build/facedet_test --model saved.engine --img images/test_face.jpg

二.人脸识别facenet

2.1 训练人脸识别模型

代码位置:2.facenet_train

运行环境:Pytorch

对应视频课程教程来操作,注意解压文件可能出现中文乱码:

# 启动容器
docker run --gpus all -it --name env_pyt_1.12 -v $(pwd):/app nvcr.io/nvidia/pytorch:22.03-py3 


# 解压zip,使用这个命令可以防止中文乱码
unzip -O cp936 压缩文件.zip -d ../
# 解压tar,使用这个命令可以防止中文乱码
tar -xvzf 压缩文件.tar.gz -C ../

2.2 导出ONNX

代码位置:3.facenet_export

运行环境:Pytorch

# 在Pytorch环境下生成ONNX文件
python export.py

2.3 测试

代码位置:4.facenet

运行环境:TensorRT

# 生成TensorRT engine
./build/build -onnx_file ./weights/facenet_sim.onnx --input_h 112 --input_w 112 

# 生成人脸库图片列表
find ./crop -type f -printf "%p\n" > face_list.txt

# 测试人脸
./build/facenet_test --img ./test1.jpg 

三.人脸属性(性别、年龄、表情、是否戴口罩)

3.1 训练

代码位置:5.attributes_train

运行环境:Tensorflow

参考附件:5.attributes_train内容,分别训练年龄、表情、年龄、是否戴口罩。可以增加更多属性,或者选择更深网络。

3.2 导出ONNX

代码位置:6.attributes_export

运行环境:Tensorflow

# 安装转换工具:https://github.com/onnx/tensorflow-onnx
pip install tf2onnx

# 性别
python -m tf2onnx.convert --saved-model model/model_gender  --output gender.onnx --opset 10
# 年龄
python -m tf2onnx.convert --saved-model model/model_age  --output age.onnx --opset 10
# 口罩
python -m tf2onnx.convert --saved-model model/model_mask --output mask.onnx --opset 10
# 表情
python -m tf2onnx.convert --saved-model model/model_emotion  --output emotion.onnx --opset 10

# 简化
python simplify.py emotion.onnx

3.3 测试

代码位置:7.attributes_test

运行环境:TensorRT

# 转TRT engine(以表情分类模型为例)
./build/build --onnx_file weights/emotion_sim.onnx --input_h 48 --input_w 48 --input_c 1 --format nhwc

# 性别测试
./build/attribute_test --model weights/gender_sim.engine --type gender --img images/1.gender/man.png

./build/attribute_test --model weights/gender_sim.engine --type gender --img images/1.gender/woman.png

# 年龄测试
./build/attribute_test --model weights/age_sim.engine --type age --img images/2.age/old.png

./build/attribute_test --model weights/age_sim.engine --type age --img images/2.age/young.png

# 口罩测试
./build/attribute_test --model weights/mask_sim.engine --type mask --img images/3.mask/unmask.jpg

./build/attribute_test --model weights/mask_sim.engine --type mask --img images/3.mask/mask.png

# 表情测试
./build/attribute_test --model weights/emotion_sim.engine --type emotion --img images/4.emotion/angry.jpg

./build/attribute_test --model weights/emotion_sim.engine --type emotion --img images/4.emotion/sad.jpg

四. 集成应用

代码位置:8.app

运行环境:TensorRT

# 依次build 对应的engine

# 编译运行stream, 其中很多默认参数已经配置好了,因此,不用传其他参数,如果有模型名不一致,可以查看flags定义传入对应的模型文件。

# 生成人脸库图片列表
find ./crop -type f -printf "%p\n" > face_list.txt

# 运行程序
./build/stream --vid rtsp://localhost:8554/live1.sdp

# 查看推流数据, 在vlc中打开rtmp://localhost:1935/live查看推流数据

五、Jetson 部署

5.1 NX

# 检测模型
sudo apt install curl
curl -LO 'https://api.ngc.nvidia.com/v2/resources/nvidia/tao/tao-converter/versions/v3.22.05_trt8.4_aarch64/files/tao-converter'

chmod +x tao-converter

./TAO/tao-converter -k nvidia_tlt -d 3,416,736 model/model.etlt -t int8 -c model/int8_calibration.txt


# facenet识别模型
./build/build -onnx_file ./backup_onnx/facenet_sim.onnx --input_h 112 --input_w 112 


# 属性模型
./build/build --onnx_file ./backup_onnx/gender_sim.onnx --input_h 48 --input_w 48 --input_c 1 --format nhwc
./build/build --onnx_file ./backup_onnx/age_sim.onnx --input_h 48 --input_w 48 --input_c 1 --format nhwc
./build/build --onnx_file ./backup_onnx/emotion_sim.onnx --input_h 48 --input_w 48 --input_c 1 --format nhwc
./build/build --onnx_file ./backup_onnx/mask_sim.onnx --input_h 48 --input_w 48 --input_c 1 --format nhwc

# 构建
export PATH=$PATH:/usr/local/cuda/bin

# 测试
./build/stream --vid 

5.2 NANO

# 编译运行,nano上删除 /usr/src/tensorrt/samples/common/sampleUtils.cpp的依赖,同时在build.cu上删除safeCommon.h的include, 以及setMemoryPoolLimit的调用

# 以及CMakeLists.txt CUDA ARCH
vim CMakeLists.txt
:%s/61/72/g # 更改编译的cuda arch

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解数据结构第五弹——排序(2)——快速排序

排序(1):深入了解数据结构第四弹——排序(1)——插入排序和希尔排序-CSDN博客 前言: 在前面我们已经讲过了几种排序方式,他们的效率有快有慢,今天我们来学习一种非常高效的排序方式…

【windows-搭建Ubuntu22LTS】

一、环境要求 1. windows版本要求 至少Windows 10 2020年5月(2004) 版, Windows 10 2019年5月(1903) 版,或者 Windows 10 2019年11月(1909) 版 2. 控制面板开启相关的程序(需要重启) 二、Microsoft store安装unbuntu 下载后直接运行(稍微等会&#…

Linux软件安装和部署Java代码

文章目录 1.软件安装1.1.软件安装方式1.2.常用软件安装1.2.1 安装jdk1.2.2 安装Tomcat1.2.3 安装MySQL1.2.4 安装lrzsz 2.项目部署2.1.手工部署项目2.2 通过Shell脚本自动部署项目 1.软件安装 1.1.软件安装方式 (1)二进制发布包安装: 软件已…

基于SSM的学校在线考试系统的设计与实现

功能需求 管理员模块 管理员模块是整个学校在线考试系统中最为重要的管理者,能够对网站内的各种信息进行管理,能够对教师、学生的个人资料进行管理,对于已经离校的学生将其剔除考试名单,将新入校的学生纳入到考试名单中。对于入…

用 element ui 实现季度选择器

由于在数据项目中经常以各种时间条件查询数据,所以时间选择器(DatePicker)组件是很常用的组件。但是在我使用的 Element UI 中,缺少了季度选择器的功能。 简易实现 一开始我根据时间范围使用 select 去遍历,如 2024-Q1、2023-Q4…

win/mac达芬奇19下载:DaVinci Resolve Studio 19

DaVinci Resolve Studio 19 是一款功能强大的视频编辑和调色软件,广泛应用于电影、电视和网络节目的后期制作。这款软件不仅提供了专业的剪辑、调色和音频处理工具,还引入了全新的DaVinci Neural Engine AI工具,对100多项功能进行了大规模升级…

美化博客文章(持续更新)

🎁个人主页:我们的五年 🔍系列专栏:游戏实现:贪吃蛇​​​​​​ 🌷追光的人,终会万丈光芒 前言: 该文提供我的一些文章设计的一些方法 目录 1.应用超链接 1.应用超链接

差速机器人模型LQR 控制仿真——路径模拟

LQR路径跟踪要求路径中带角度,即坐标(x,y,yaw),而一般我们的规划出来的路径不带角度。这里通过总结相关方法,并提供一个案例。 将点路径拟合成一条完整的线路径算法 将点路径拟合成一条完整的线路径是一个常见的问题…

【Java开发指南 | 第十五篇】Java Character 类、String 类

读者可订阅专栏:Java开发指南 |【CSDN秋说】 文章目录 Java Character 类转义序列 Java String 类连接字符串 Java Character 类 Character 类是 Java 中用来表示字符的包装类,它提供了一系列静态方法用于对字符进行操作,其主要分为静态方法…

06 JavaScript学习:语句

JavaScript 语句是用来执行特定任务或操作的一组指令。它可以包括变量声明、条件语句、循环语句、函数调用等。JavaScript 语句以分号结尾,每个语句都会被解释器执行。 分号 ; 在JavaScript中,分号(;)用于表示语句的结束。尽管在…

python爬虫-----深入了解 requests 库(第二十五天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

【汇编语言】初识汇编

【汇编语言】初识汇编 文章目录 【汇编语言】初识汇编前言由机器语言到汇编语言机器语言与机器指令汇编语言与汇编指令汇编语言程序示例 计算机组成指令和数据的表示计算机的存储单元计算机的总线 内存读写与地址空间CPU对存储器的读写内存地址空间 总结 前言 为什么要学习汇编…

Numpy重修系列(一) --- 初识Numpy

一、为什么使用Numpy? 1.1、简介 Python科学计算基础包,提供 多维数组对象 、派生对象(掩码数组、矩阵) 数组的快速操作(数学计算、逻辑、形状变化、排序、选择、输入输出、离散傅里叶变换、基本线性代数、基本统计运…

数据分析案例-中国黄金股票市场的EDA与价格预测

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

【数据结构】单链表经典算法题的巧妙解题思路

目录 题目 1.移除链表元素 2.反转链表 3.链表的中间节点 4.合并两个有序链表 5.环形链表的约瑟夫问题 解析 题目1:创建新链表 题目2:巧用三个指针 题目3:快慢指针 题目4:哨兵位节点 题目5:环形链表 介绍完了…

Activity——spring方式创建activiti所需数据表结构

文章目录 前言依赖引入编写数据库连接等配置配置日志文件编写java代码生成数据库表结构问题反馈与解决思路问题一:Cause: java.sql.SQLSyntaxErrorException: Table activiti_02.act_ge_property doesnt exist 为什么文件名必须写死? 前言 在之前创建ac…

循序渐进丨使用 Python 向 MogDB 数据库批量操作数据的方法

当我们有时候需要向数据库里批量插入数据,或者批量导出数据时,除了使用传统的gsql copy命令,也可以通过Python的驱动psycopg2进行批量操作。本文介绍了使用psycopg2里的executemany、copy_from、copy_to、copy_expert等方式来批量操作 MogDB …

js-pytorch:开启前端+AI新世界

嗨, 大家好, 我是 徐小夕。最近在 github 上发现一款非常有意思的框架—— js-pytorch。它可以让前端轻松使用 javascript 来运行深度学习框架。作为一名资深前端技术玩家, 今天就和大家分享一下这款框架。 往期精彩 Nocode/Doc,可…

python爬虫之爬取携程景点评价(5)

一、景点部分评价爬取 【携程攻略】携程旅游攻略,自助游,自驾游,出游,自由行攻略指南 (ctrip.com) import requests from bs4 import BeautifulSoupif __name__ __main__:url https://m.ctrip.com/webapp/you/commentWeb/commentList?seo0&businessId22176&busines…

“中医显示器”是人体健康监测器

随着科技的进步,现代医学设备已经深入到了人们的日常生活中。然而,在这个过程中,我们不应忘记我们的医学根源,中医。我们将中医的望、闻、问、切四诊与现代科技相结合,通过一系列的传感器和算法将人体的生理状态以数字…
最新文章