Lite.Ai.ToolKit - 一个轻量级的 C++ 工具包

🛠**Lite.Ai.ToolKit**:一个轻量级的 C++ 工具包,包含 100+ 个很棒的 AI 模型,例如对象检测、人脸检测、人脸识别、分割、遮罩等。请参阅 Model Zoo 和 ONNX Hub、MNN Hub、TNN Hub、NCNN Hub。

3700 Stars 711 Forks 0 Issues 6 贡献者 GPL-3.0 License C 语言

代码: https://github.com/DefTruth/lite.ai.toolkit

更多AI开源软件:AI开源 - 小众AI

主要功能

  • **简单且用户友好。**简单一致的语法,如 **lite::cv::Type::Class**,参见示例。
  • **最小依赖项。**默认情况下只需要 **OpenCV** 和 **ONNXRuntime**,详见 build。
  • **支持多种型号。** **300+**C++ 实现和 **500+** 权重 👉 **Supported-Matrix**。

快速开始 🌟🌟

示例 0:使用 YOLOv5 进行对象检测。从 Model-Zoo 下载模型^2^.
#include "lite/lite.h"int main(int argc, char *argv[]) {std::string onnx_path = "yolov5s.onnx";std::string test_img_path = "test_yolov5.jpg";std::string save_img_path = "test_results.jpg";auto *yolov5 = new lite::cv::detection::YoloV5(onnx_path); std::vector<lite::types::Boxf> detected_boxes;cv::Mat img_bgr = cv::imread(test_img_path);yolov5->detect(img_bgr, detected_boxes);lite::utils::draw_boxes_inplace(img_bgr, detected_boxes);cv::imwrite(save_img_path, img_bgr);  delete yolov5;return 0;
}

您可以从 tag/v0.2.0 下载预构建的 lite.ai.tooklit 库和测试资源。

export LITE_AI_TAG_URL=https://github.com/DefTruth/lite.ai.toolkit/releases/download/v0.2.0
wget ${LITE_AI_TAG_URL}/lite-ort1.17.1+ocv4.9.0+ffmpeg4.2.2-linux-x86_64.tgz
wget ${LITE_AI_TAG_URL}/yolov5s.onnx && wget ${LITE_AI_TAG_URL}/test_yolov5.jpg
🎉🎉TensorRT :通过 TensorRT 使用 NVIDIA GPU 提高推理性能。

运行以构建支持 TensorRT 的 lite.ai.toolkit,然后使用下面的代码测试 yolov5 。注意: lite.ai.toolkit 需要 TensorRT 10.x(或更高版本)和 CUDA 12.x(或更高版本)。有关更多详细信息,请查看 build.sh 、 tensorrt-linux-x86_64-install.zh.md 、 test_lite_yolov5.cpp 和 NVIDIA/TensorRT 。bash ./build.sh tensorrt​

// trtexec --onnx=yolov5s.onnx --saveEngine=yolov5s.engine
auto *yolov5 = new lite::trt::cv::detection::YOLOV5(engine_path);

快速设置 👀

要快速设置,您可以按照下面列出的方法进行操作。👇👀lite.ai.toolkitCMakeLists.txt​

set(lite.ai.toolkit_DIR YOUR-PATH-TO-LITE-INSTALL)
find_package(lite.ai.toolkit REQUIRED PATHS ${lite.ai.toolkit_DIR})
add_executable(lite_yolov5 test_lite_yolov5.cpp)
target_link_libraries(lite_yolov5 ${lite.ai.toolkit_LIBS})

与 MNN 或 ONNXRuntime 👇👇 混合

lite.ai.toolkit 的目标不是在 MNN 和 ONNXRuntime 之上抽象。因此,您可以将 lite.ai.toolkit 与 MNN() 或 ONNXRuntime() 混合使用。lite.ai.toolkit 安装包包含完整的 MNN 和 ONNXRuntime。工作流可能如下所示:-DENABLE_MNN=ON, default OFF-DENABLE_ONNXRUNTIME=ON, default ON​

#include "lite/lite.h"
// 0. use yolov5 from lite.ai.toolkit to detect objs.
auto *yolov5 = new lite::cv::detection::YoloV5(onnx_path);
// 1. use OnnxRuntime or MNN to implement your own classfier.
interpreter = std::shared_ptr<MNN::Interpreter>(MNN::Interpreter::createFromFile(mnn_path));
// or: session = new Ort::Session(ort_env, onnx_path, session_options);
classfier = interpreter->createSession(schedule_config);
// 2. then, classify the detected objs use your own classfier ...

MNN 和 ONNXRuntime 包含的标头可以在 mnn_config.h 和 ort_config.h 中找到。

  • 🔑️ 查看详细的 Quick Start!单击此处!
下载资源

您可以从 tag/v0.2.0 下载预构建的 lite.ai.tooklit 库和测试资源。

export LITE_AI_TAG_URL=https://github.com/DefTruth/lite.ai.toolkit/releases/download/v0.2.0
wget ${LITE_AI_TAG_URL}/lite-ort1.17.1+ocv4.9.0+ffmpeg4.2.2-linux-x86_64.tgz
wget ${LITE_AI_TAG_URL}/yolov5s.onnx && wget ${LITE_AI_TAG_URL}/test_yolov5.jpg
tar -zxvf lite-ort1.17.1+ocv4.9.0+ffmpeg4.2.2-linux-x86_64.tgz
编写测试代码

编写 YOLOv5 示例代码并命名:test_lite_yolov5.cpp​

#include "lite/lite.h"int main(int argc, char *argv[]) {std::string onnx_path = "yolov5s.onnx";std::string test_img_path = "test_yolov5.jpg";std::string save_img_path = "test_results.jpg";auto *yolov5 = new lite::cv::detection::YoloV5(onnx_path); std::vector<lite::types::Boxf> detected_boxes;cv::Mat img_bgr = cv::imread(test_img_path);yolov5->detect(img_bgr, detected_boxes);lite::utils::draw_boxes_inplace(img_bgr, detected_boxes);cv::imwrite(save_img_path, img_bgr);  delete yolov5;return 0;
}
设置 CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(lite_yolov5)
set(CMAKE_CXX_STANDARD 17)set(lite.ai.toolkit_DIR YOUR-PATH-TO-LITE-INSTALL)
find_package(lite.ai.toolkit REQUIRED PATHS ${lite.ai.toolkit_DIR})
if (lite.ai.toolkit_Found)message(STATUS "lite.ai.toolkit_INCLUDE_DIRS: ${lite.ai.toolkit_INCLUDE_DIRS}")message(STATUS "        lite.ai.toolkit_LIBS: ${lite.ai.toolkit_LIBS}")message(STATUS "   lite.ai.toolkit_LIBS_DIRS: ${lite.ai.toolkit_LIBS_DIRS}")
endif()
add_executable(lite_yolov5 test_lite_yolov5.cpp)
target_link_libraries(lite_yolov5 ${lite.ai.toolkit_LIBS})
构建示例
mkdir build && cd build && cmake .. && make -j1

然后,将 中列出的 lib 路径导出到 .LD_LIBRARY_PATHlite.ai.toolkit_LIBS_DIRS​

export LD_LIBRARY_PATH=YOUR-PATH-TO-LITE-INSTALL/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=YOUR-PATH-TO-LITE-INSTALL/third_party/opencv/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=YOUR-PATH-TO-LITE-INSTALL/third_party/onnxruntime/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=YOUR-PATH-TO-LITE-INSTALL/third_party/MNN/lib:$LD_LIBRARY_PATH # if -DENABLE_MNN=ON
运行 binary:
cp ../yolov5s.onnx ../test_yolov.jpg .
./lite_yolov5

输出日志:

LITEORT_DEBUG LogId: ../examples/hub/onnx/cv/yolov5s.onnx
=============== Input-Dims ==============
Name: images
Dims: 1
Dims: 3
Dims: 640
Dims: 640
=============== Output-Dims ==============
Output: 0 Name: pred Dim: 0 :1
Output: 0 Name: pred Dim: 1 :25200
Output: 0 Name: pred Dim: 2 :85
Output: 1 Name: output2 Dim: 0 :1
......
Output: 3 Name: output4 Dim: 1 :3
Output: 3 Name: output4 Dim: 2 :20
Output: 3 Name: output4 Dim: 3 :20
Output: 3 Name: output4 Dim: 4 :85
========================================
detected num_anchors: 25200
generate_bboxes num: 48

支持的模型矩阵

  • / = 现在不支持。
  • ✅ = 已知工作和官方支持。
  • ✔️ = 已知工作,但现在支持非官方。
  • ❔ = 在我的计划中,但不会很快出现,也许几个月后。

NVIDIA GPU 推理:TensorRT

系统发动机
✅YOLOv5✅YOLOv6✅YOLOv8✅YOLOv8Face✅YOLOv5人脸Linux的TensorRT
✅YOLOX✅YOLOv5BlazeFace✅稳定扩散//Linux的TensorRT

CPU 推理:ONNXRuntime、MNN、NCNN 和 TNN

大小类型演示ONNXRuntimeMNNNCNNTNNLinux的macOS 版窗户人造人
YoloV528 分钟*检波*演示✔️✔️
YoloV3236 分钟*检波*演示///✔️✔️/
TinyYoloV333 分钟*检波*演示///✔️✔️/
YoloV4176 分钟*检波*演示///✔️✔️/
固态硬盘76 分钟*检波*演示///✔️✔️/
SSDMobileNetV127 分钟*检波*演示///✔️✔️/
YoloX3.5 分钟*检波*演示✔️✔️
TinyYoloV4VOC22 分钟*检波*演示///✔️✔️/
TinyYoloV4COCO22 分钟*检波*演示///✔️✔️/
约洛39 分钟*检波*演示✔️✔️
缩放的 YoloV4270 分钟*检波*演示///✔️✔️/
EfficientDet15 分钟*检波*演示///✔️✔️/
EfficientDetD7220 分钟*检波*演示///✔️✔️/
EfficientDetD8322 米*检波*演示///✔️✔️/
约洛普30 分钟*检波*演示✔️✔️
纳米手套1.1 米*检波*演示✔️✔️
NanoDetPlus 纳米防爆4.5 分钟*检波*演示✔️✔️
纳米检测效率12 分钟*检波*演示✔️✔️
YoloX_V_0_1_13.5 分钟*检波*演示✔️✔️
YoloV5_V_6_07.5 分钟*检波*演示✔️✔️
GlintArcFace92 分钟*面 ID*演示✔️✔️
GlintCosFace92 分钟*面 ID*演示✔️✔️/
格林特部分FC170 分钟*面 ID*演示✔️✔️/
FaceNet89 分钟*面 ID*演示✔️✔️/
FocalArcFace166 分钟*面 ID*演示✔️✔️/
FocalAsiaArcFace166 分钟*面 ID*演示✔️✔️/
腾讯课程Face249 分钟*面 ID*演示✔️✔️/
腾讯CifpFace130 分钟*面 ID*演示✔️✔️/
CenterLossFace280 分钟*面 ID*演示✔️✔️/
SphereFace (球面)80 分钟*面 ID*演示✔️✔️/
姿势稳健面92 分钟*面 ID*演示///✔️✔️/
NaivePoseRobustFace (朴素姿势健壮脸)43 分钟*面 ID*演示///✔️✔️/
移动人脸网3.8 中*面 ID*演示✔️✔️
CavaGhostArcFace (卡瓦鬼弧人脸)15 分钟*面 ID*演示✔️✔️
CavaCombinedFace250 分钟*面 ID*演示✔️✔️/
MobileSEFocalFace4.5 分钟*面 ID*演示✔️✔️
RobustVideoMatting14 分钟*消 光*演示/✔️✔️
MGMatting 美爵113 分钟*消 光*演示/✔️✔️/
MODNet24 分钟*消 光*演示✔️✔️/
MODNetDyn24 分钟*消 光*演示///✔️✔️/
背景榫椴 V220 分钟*消 光*演示/✔️✔️/
背景MattingV2Dyn20 分钟*消 光*演示///✔️✔️/
UltraFace 超脸1.1 米*脸部::d etect*演示✔️✔️
RetinaFace1.6 米*脸部::d etect*演示✔️✔️
FaceBoxes 面板3.8 中*脸部::d etect*演示✔️✔️
面盒V23.8 中*脸部::d etect*演示✔️✔️
SCRFD2.5 米*脸部::d etect*演示✔️✔️
YOLO5Face4.8 分钟*脸部::d etect*演示✔️✔️
PFLD 系列1.0 米*face::align*演示✔️✔️
PFLD984.8 分钟*face::align*演示✔️✔️
移动网络V2689.4 分钟*face::align*演示✔️✔️
移动网络V2SE6811 分钟*face::align*演示✔️✔️
PFLD682.8 米*face::align*演示✔️✔️
人脸地标10002.0 米*face::align*演示✔️✔️
PIPNet98 的44.0 分钟*face::align*演示✔️✔️
PIPNet6844.0 分钟*face::align*演示✔️✔️
管道网2944.0 分钟*face::align*演示✔️✔️
PIPNet1944.0 分钟*face::align*演示✔️✔️
FSANet1.2 米*脸部::p*演示/✔️✔️
年龄GoogleNet23 分钟*face::attr*演示✔️✔️
性别GoogleNet23 分钟*face::attr*演示✔️✔️
EmotionFerPlus33 分钟*face::attr*演示✔️✔️
VGG16年龄514 米*face::attr*演示✔️✔️/
VGG16性别512 米*face::attr*演示✔️✔️/
SSRNet190K*face::attr*演示/✔️✔️
EfficientEmotion715 分钟*face::attr*演示✔️✔️
EfficientEmotion815 分钟*face::attr*演示✔️✔️
移动情感713 分钟*face::attr*演示✔️✔️
ReXNetEmotion730 分钟*face::attr*演示/✔️✔️/
高效 NetLite449 分钟*分类*演示/✔️✔️/
ShuffleNetV28.7 分钟*分类*演示✔️✔️
密集网12130.7 分钟*分类*演示✔️✔️/
幽灵网20 分钟*分类*演示✔️✔️
HdrDNet13 分钟*分类*演示✔️✔️
IBNNet97 分钟*分类*演示✔️✔️/
移动网络V213 分钟*分类*演示✔️✔️
ResNet 公司44 分钟*分类*演示✔️✔️/
ResNeXt95 分钟*分类*演示✔️✔️/
深度实验室V3ResNet101232 分钟*分割*演示✔️✔️/
FCNResNet101207 分钟*分割*演示✔️✔️/
FastStyleTransfer6.4 分钟*风格*演示✔️✔️
着色器123 分钟*着色*演示/✔️✔️/
子像素CNN234K*分辨率*演示/✔️✔️
子像素CNN234K*分辨率*演示/✔️✔️
昆虫检测27 分钟*检波*演示/✔️✔️
昆虫识别22 分钟*分类*演示✔️✔️✔️
植物 ID30 分钟*分类*演示✔️✔️✔️
YOLOv5BlazeFace3.4 分钟*脸部::d etect*演示//✔️✔️
YoloV5_V_6_17.5 分钟*检波*演示//✔️✔️
HeadSeg31 分钟*分割*演示/✔️✔️
FemalePhoto2卡通15 分钟*风格*演示/✔️✔️
FastPortraitSeg400 千米*分割*演示//✔️✔️
肖像SegSINet380 千米*分割*演示//✔️✔️
肖像SegExtremeC3Net180k*分割*演示//✔️✔️
FaceHairSeg18 分钟*分割*演示//✔️✔️
HairSeg (头发赛格)18 分钟*分割*演示//✔️✔️
MobileHumanMatting 移动人体垫3M 公司*消 光*演示//✔️✔️
移动发型隔离14 分钟*分割*演示//✔️✔️
YOLOv617 分钟*检波*演示✔️✔️
FaceParsingBiSeNet50 分钟*分割*演示✔️✔️
FaceParsingBiSeNetDyn50 分钟*分割*演示////✔️

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

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

相关文章

node.js 07.npm下包慢的问题与nrm的使用

一.npm下包慢 因为npm i 默认从npm官网服务器进行下包,但是npm官网服务器是海外服务器所以响应很慢. 于是我们通过npm下包的时候通常用淘宝镜像进行下包,下面是切换到淘宝镜像地址下包的操作. 二.nrm的使用 nrm是一个管理切换npm下包地址的工具,可以快速切换下包的地址. 安…

读书笔记--分布式服务架构对比及优势

本篇是在上一篇的基础上&#xff0c;主要对共享服务平台建设所依赖的分布式服务架构进行学习&#xff0c;主要记录和思考如下&#xff0c;供大家学习参考。随着企业各业务数字化转型工作的推进&#xff0c;之前在传统的单一系统&#xff08;或单体应用&#xff09;模式中&#…

基于ADS的电感和变压器的建模过程

1. 电感二端口建模 对于固定尺寸单圈电感&#xff0c;从0.5G-200GHz的仿真&#xff0c;并提取其模型 如果想要在50GHz前把模型建准&#xff0c;仿真可能要建到200G&#xff0c;因为需要高频的数据&#xff0c;频率越高信息也越多。首先要调用文件由于数据是存在一个文件夹里面的…

使用Maxscript定义纹理贴图的方法

在3ds Max中,MaxScript 是一种用于插件编写和自动化任务的强大工具。通过MaxScript,你可以创建和操作对象、材质、灯光等等。要为材质分配纹理贴图,你可以按照以下方法来编写脚本。直接代码: myBmp = bitmaptexture filename:"D:\map001.tga" meditmaterials[1]…

初阶数据结构:链表(二)

目录 一、前言 二、带头双向循环链表 1.带头双向循环链表的结构 &#xff08;1)什么是带头&#xff1f; (2)什么是双向呢&#xff1f; &#xff08;3&#xff09;那什么是循环呢&#xff1f; 2.带头双向循环链表的实现 &#xff08;1&#xff09;节点结构 &#xff08;2…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(九)(完结篇)

文章目录 一、成绩查询模块实现1、学生成绩查询功能实现1.1 页面设计1.2 前端页面实现1.3 后端功能实现2、成绩分段查询功能实现2.1 页面设计2.2 前端页面实现2.3 后端功能实现二、试卷练习模块实现三、我的分数模块实现1、 页面设计2、 前端页面实现3、 后端功能实现四、交流区…

环境搭建--vscode

vscode官网下载合适版本 安装vscode插件 安装 MinGW 配置环境变量 把安装目录D&#xff1a;\mingw64 配置在用户的环境变量path里即可 选择用户环境变量path 点确定保存后开启cmd输入g&#xff0c;如提示no input files 则说明Mingw64 安装成功&#xff0c;如果提示g 不是内…

爱的魔力转圈圈,基于carsim与simulink模拟仰望u8原地调头

仰望U8原地转向的示意图如下&#xff0c;不动方向盘的情况下&#xff0c;车可以自己转圈圈&#xff1a; 原理也很简单&#xff0c;仰望u8是四轮驱动&#xff0c;四个轮子都单独由四个轮边电机驱动。主要我们将左右的车轮轮速控制成左右两边轮速相同&#xff0c;但是方向相反&am…

1.1第1章DC/DC变换器的动态建模-1.1状态平均的概念--电力电子系统建模及控制 (徐德鸿)--读书笔记

电力电子系统一般由电力电子变换器&#xff08;滤波电路和开关&#xff09;、PWM 调制器、驱动电路、反馈控制单元构成&#xff0c;如图1-1所示。由控制理论的知识&#xff0c;电力电子系统的静态和动态性能的好坏与反馈控制设计密切相关。要进行反馈控制设计&#xff0c;首先要…

6. 使用springboot做一个音乐播放器软件项目【1.0版项目完结】附带源码~

#万物OOP 注意&#xff1a; 本项目只实现播放音乐和后台管理系统。 不分享任何音乐歌曲资源。 上一篇文章我们 做了音乐播放器后台的功能。参考地址&#xff1a; https://jsonll.blog.csdn.net/article/details/145214363 这个项目已经好几天也没更新了&#xff0c;因为临近放…

WGCLOUD使用介绍 - 如何监控ActiveMQ和RabbitMQ

根据WGCLOUD官网的信息&#xff0c;目前没有针对ActiveMQ和RabbitMQ这两个组件专门做适配 不过可以使用WGCLOUD已经具备的通用监测模块&#xff1a;进程监测、端口监测或者日志监测、接口监测 来对这两个组件进行监控

豆包MarsCode:字符串字符类型排序问题

问题描述 思路分析 我们需要对字符串中的字母、数字、问号按照规则进行排序&#xff0c;具体要求是&#xff1a; 问号的位置不变。数字的位置不变&#xff0c;但数字之间要按照从大到小排序。字母的位置不变&#xff0c;但字母之间要按照字典序排序。 解决此问题的思路分为以…

[STM32 标准库]定时器输出PWM配置流程 PWM模式解析

前言&#xff1a; 本文内容基本来自江协&#xff0c;整理起来方便日后开发使用。MCU&#xff1a;STM32F103C8T6。 一、配置流程 1、开启GPIO&#xff0c;TIM的时钟 /*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //开启TIM2的时钟RCC_APB2PeriphClockC…

无人机红外热成像:应急消防的“透视眼”

无人机红外热成像&#xff1a;应急消防的“透视眼” 亲爱的小伙伴们&#xff0c;每年一到夏天&#xff0c;应急消防的战士们就像上紧了发条的闹钟&#xff0c;时刻准备应对各种灾害。炎热天气让火灾隐患“蹭蹭”往上涨&#xff0c;南北各地还有防洪救灾、台风、泥石流等灾害轮…

【Redis】常见面试题

什么是Redis&#xff1f; Redis 和 Memcached 有什么区别&#xff1f; 为什么用 Redis 作为 MySQL 的缓存&#xff1f; 主要是因为Redis具备高性能和高并发两种特性。 高性能&#xff1a;MySQL中数据是从磁盘读取的&#xff0c;而Redis是直接操作内存&#xff0c;速度相当快…

LLM - 大模型 ScallingLaws 的指导模型设计与实验环境(PLM) 教程(4)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/145323420 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 Scalin…

书生大模型实战营2

L0——入门岛 Python基础 Conda虚拟环境 虚拟环境是Python开发中不可或缺的一部分&#xff0c;它允许你在不同的项目中使用不同版本的库&#xff0c;避免依赖冲突。Conda是一个强大的包管理器和环境管理器。 创建新环境 首先&#xff0c;确保你已经安装了Anaconda或Minico…

力扣111二叉树的最小深度(DFS)

Problem: 111. 二叉树的最小深度 文章目录 题目描述思路复杂度Code 题目描述 思路 1.欲望求出最短的路径&#xff0c;先可以记录一个变量minDepth&#xff0c;同时记录每次当前节点所在的层数currentDepth 2.在递的过程中&#xff0c;每次递一层&#xff0c;也即使当前又往下走…

Scrapy如何设置iP,并实现IP重用, IP代理池重用

前置知识 1/3乐观锁 2/3 Scrapy流程(非全部) 3/3 关于付费代理 我用的"快代理", 1000个ip, 每个ip1min的有效期, 你用的时候, 把你的链接, 用户名填上去就行 设置代理IP &#x1f512; & 帮助文档: ①meta ②meta#proxy$ 语法: ①proxy的设置: Request对象中…

渗透测试-WAF是什么以及原理解释 waf功能详解

目录 waf功能介绍 waf出现的地点: 什么是waf 功能: 常见的系统攻击分为两类 一是利用Web服务器的漏洞进行攻击 二是利用网页自身的安全漏洞进行攻击 WAF主要功能&#xff1a; waf的特点1 waf主要功能2 网马木马主动防御及查杀 流量监控 网站漏洞防御功能 危险组件…