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

本文主要是介绍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
#模型转换
./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

这篇关于facenet人脸检测+人脸识别+性别识别+表情识别+年龄识别的C++部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/911546

相关文章

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它

C++类和对象之初始化列表的使用方式

《C++类和对象之初始化列表的使用方式》:本文主要介绍C++类和对象之初始化列表的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C++初始化列表详解:性能优化与正确实践什么是初始化列表?初始化列表的三大核心作用1. 性能优化:避免不必要的赋值操作2. 强

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

C++迭代器失效的避坑指南

《C++迭代器失效的避坑指南》在C++中,迭代器(iterator)是一种类似指针的对象,用于遍历STL容器(如vector、list、map等),迭代器失效是指在对容器进行某些操作后... 目录1. 什么是迭代器失效?2. 哪些操作会导致迭代器失效?2.1 vector 的插入操作(push_back,

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装