当前位置: 首页 > article >正文

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.kler.cn/a/522530.html

相关文章:

  • 蓝桥杯例题四
  • 省市区三级联动
  • 【ESP32】ESP-IDF开发 | WiFi开发 | UDP用户数据报协议 + UDP客户端和服务器例程
  • 【物联网】ARM核常用指令(详解):数据传送、计算、位运算、比较、跳转、内存访问、CPSR/SPSR、流水线及伪指令
  • 【Git】使用笔记总结
  • LLM评估优化与新技术创新综述
  • labelimg闪退的解决办法
  • leetcode 2105. 给植物浇水 II
  • 【QT】- QUdpSocket
  • 2018年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题-解析版
  • 二十三种设计模式-桥接模式
  • 国内flutter环境部署(记录篇)
  • 【数据结构】_以SLTPushBack(尾插)为例理解单链表的二级指针传参
  • 每日一道算法题
  • 第05章 06 VTK标量算法中的Contouring算法
  • 【Linux网络编程】数据链路层
  • 计算机组成原理(2)王道学习笔记
  • 基于Flask的全国奶茶饮品加盟及门店数据分析系统的设计与实现
  • QT中给界面设置qss样式
  • 浅谈Linux 权限、压缩、进程与服务
  • 锐捷EWEB /auth 远程命令执行漏洞复现(附脚本)
  • 01.双Android容器解决方案
  • 【135. 分发糖果 困难】
  • 关联传播和 Python 和 Scikit-learn 实现
  • LeetCode热题100(一)—— 1.两数之和
  • Autogen_core: Reflection