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.Ai.ToolKit - 一个轻量级的 C++ 工具包_第1张图片

主要功能

  • **简单且用户友好。**简单一致的语法,如 **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 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::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 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

大小 类型 演示 ONNXRuntime MNN NCNN TNN Linux的 macOS 版 窗户 人造人
YoloV5 28 分钟 *检波* 演示 ✔️ ✔️
YoloV3 236 分钟 *检波* 演示 / / / ✔️ ✔️ /
TinyYoloV3 33 分钟 *检波* 演示 / / / ✔️ ✔️ /
YoloV4 176 分钟 *检波* 演示 / / / ✔️ ✔️ /
固态硬盘 76 分钟 *检波* 演示 / / / ✔️ ✔️ /
SSDMobileNetV1 27 分钟 *检波* 演示 / / / ✔️ ✔️ /
YoloX 3.5 分钟 *检波* 演示 ✔️ ✔️
TinyYoloV4VOC 22 分钟 *检波* 演示 / / / ✔️ ✔️ /
TinyYoloV4COCO 22 分钟 *检波* 演示 / / / ✔️ ✔️ /
约洛 39 分钟 *检波* 演示 ✔️ ✔️
缩放的 YoloV4 270 分钟 *检波* 演示 / / / ✔️ ✔️ /
EfficientDet 15 分钟 *检波* 演示 / / / ✔️ ✔️ /
EfficientDetD7 220 分钟 *检波* 演示 / / / ✔️ ✔️ /
EfficientDetD8 322 米 *检波* 演示 / / / ✔️ ✔️ /
约洛普 30 分钟 *检波* 演示 ✔️ ✔️
纳米手套 1.1 米 *检波* 演示 ✔️ ✔️
NanoDetPlus 纳米防爆 4.5 分钟 *检波* 演示 ✔️ ✔️
纳米检测效率 12 分钟 *检波* 演示 ✔️ ✔️
YoloX_V_0_1_1 3.5 分钟 *检波* 演示 ✔️ ✔️
YoloV5_V_6_0 7.5 分钟 *检波* 演示 ✔️ ✔️
GlintArcFace 92 分钟 *面 ID* 演示 ✔️ ✔️
GlintCosFace 92 分钟 *面 ID* 演示 ✔️ ✔️ /
格林特部分FC 170 分钟 *面 ID* 演示 ✔️ ✔️ /
FaceNet 89 分钟 *面 ID* 演示 ✔️ ✔️ /
FocalArcFace 166 分钟 *面 ID* 演示 ✔️ ✔️ /
FocalAsiaArcFace 166 分钟 *面 ID* 演示 ✔️ ✔️ /
腾讯课程Face 249 分钟 *面 ID* 演示 ✔️ ✔️ /
腾讯CifpFace 130 分钟 *面 ID* 演示 ✔️ ✔️ /
CenterLossFace 280 分钟 *面 ID* 演示 ✔️ ✔️ /
SphereFace (球面) 80 分钟 *面 ID* 演示 ✔️ ✔️ /
姿势稳健面 92 分钟 *面 ID* 演示 / / / ✔️ ✔️ /
NaivePoseRobustFace (朴素姿势健壮脸) 43 分钟 *面 ID* 演示 / / / ✔️ ✔️ /
移动人脸网 3.8 中 *面 ID* 演示 ✔️ ✔️
CavaGhostArcFace (卡瓦鬼弧人脸) 15 分钟 *面 ID* 演示 ✔️ ✔️
CavaCombinedFace 250 分钟 *面 ID* 演示 ✔️ ✔️ /
MobileSEFocalFace 4.5 分钟 *面 ID* 演示 ✔️ ✔️
RobustVideoMatting 14 分钟 *消 光* 演示 / ✔️ ✔️
MGMatting 美爵 113 分钟 *消 光* 演示 / ✔️ ✔️ /
MODNet 24 分钟 *消 光* 演示 ✔️ ✔️ /
MODNetDyn 24 分钟 *消 光* 演示 / / / ✔️ ✔️ /
背景榫椴 V2 20 分钟 *消 光* 演示 / ✔️ ✔️ /
背景MattingV2Dyn 20 分钟 *消 光* 演示 / / / ✔️ ✔️ /
UltraFace 超脸 1.1 米 *脸部::d etect* 演示 ✔️ ✔️
RetinaFace 1.6 米 *脸部::d etect* 演示 ✔️ ✔️
FaceBoxes 面板 3.8 中 *脸部::d etect* 演示 ✔️ ✔️
面盒V2 3.8 中 *脸部::d etect* 演示 ✔️ ✔️
SCRFD 2.5 米 *脸部::d etect* 演示 ✔️ ✔️
YOLO5Face 4.8 分钟 *脸部::d etect* 演示 ✔️ ✔️
PFLD 系列 1.0 米 *face::align* 演示 ✔️ ✔️
PFLD98 4.8 分钟 *face::align* 演示 ✔️ ✔️
移动网络V268 9.4 分钟 *face::align* 演示 ✔️ ✔️
移动网络V2SE68 11 分钟 *face::align* 演示 ✔️ ✔️
PFLD68 2.8 米 *face::align* 演示 ✔️ ✔️
人脸地标1000 2.0 米 *face::align* 演示 ✔️ ✔️
PIPNet98 的 44.0 分钟 *face::align* 演示 ✔️ ✔️
PIPNet68 44.0 分钟 *face::align* 演示 ✔️ ✔️
管道网29 44.0 分钟 *face::align* 演示 ✔️ ✔️
PIPNet19 44.0 分钟 *face::align* 演示 ✔️ ✔️
FSANet 1.2 米 *脸部::p* 演示 / ✔️ ✔️
年龄GoogleNet 23 分钟 *face::attr* 演示 ✔️ ✔️
性别GoogleNet 23 分钟 *face::attr* 演示 ✔️ ✔️
EmotionFerPlus 33 分钟 *face::attr* 演示 ✔️ ✔️
VGG16年龄 514 米 *face::attr* 演示 ✔️ ✔️ /
VGG16性别 512 米 *face::attr* 演示 ✔️ ✔️ /
SSRNet 190K *face::attr* 演示 / ✔️ ✔️
EfficientEmotion7 15 分钟 *face::attr* 演示 ✔️ ✔️
EfficientEmotion8 15 分钟 *face::attr* 演示 ✔️ ✔️
移动情感7 13 分钟 *face::attr* 演示 ✔️ ✔️
ReXNetEmotion7 30 分钟 *face::attr* 演示 / ✔️ ✔️ /
高效 NetLite4 49 分钟 *分类* 演示 / ✔️ ✔️ /
ShuffleNetV2 8.7 分钟 *分类* 演示 ✔️ ✔️
密集网121 30.7 分钟 *分类* 演示 ✔️ ✔️ /
幽灵网 20 分钟 *分类* 演示 ✔️ ✔️
HdrDNet 13 分钟 *分类* 演示 ✔️ ✔️
IBNNet 97 分钟 *分类* 演示 ✔️ ✔️ /
移动网络V2 13 分钟 *分类* 演示 ✔️ ✔️
ResNet 公司 44 分钟 *分类* 演示 ✔️ ✔️ /
ResNeXt 95 分钟 *分类* 演示 ✔️ ✔️ /
深度实验室V3ResNet101 232 分钟 *分割* 演示 ✔️ ✔️ /
FCNResNet101 207 分钟 *分割* 演示 ✔️ ✔️ /
FastStyleTransfer 6.4 分钟 *风格* 演示 ✔️ ✔️
着色器 123 分钟 *着色* 演示 / ✔️ ✔️ /
子像素CNN 234K *分辨率* 演示 / ✔️ ✔️
子像素CNN 234K *分辨率* 演示 / ✔️ ✔️
昆虫检测 27 分钟 *检波* 演示 / ✔️ ✔️
昆虫识别 22 分钟 *分类* 演示 ✔️ ✔️ ✔️
植物 ID 30 分钟 *分类* 演示 ✔️ ✔️ ✔️
YOLOv5BlazeFace 3.4 分钟 *脸部::d etect* 演示 / / ✔️ ✔️
YoloV5_V_6_1 7.5 分钟 *检波* 演示 / / ✔️ ✔️
HeadSeg 31 分钟 *分割* 演示 / ✔️ ✔️
FemalePhoto2卡通 15 分钟 *风格* 演示 / ✔️ ✔️
FastPortraitSeg 400 千米 *分割* 演示 / / ✔️ ✔️
肖像SegSINet 380 千米 *分割* 演示 / / ✔️ ✔️
肖像SegExtremeC3Net 180k *分割* 演示 / / ✔️ ✔️
FaceHairSeg 18 分钟 *分割* 演示 / / ✔️ ✔️
HairSeg (头发赛格) 18 分钟 *分割* 演示 / / ✔️ ✔️
MobileHumanMatting 移动人体垫 3M 公司 *消 光* 演示 / / ✔️ ✔️
移动发型隔离 14 分钟 *分割* 演示 / / ✔️ ✔️
YOLOv6 17 分钟 *检波* 演示 ✔️ ✔️
FaceParsingBiSeNet 50 分钟 *分割* 演示 ✔️ ✔️
FaceParsingBiSeNetDyn 50 分钟 *分割* 演示 / / / / ✔️

你可能感兴趣的:(AI开源,开源,人工智能,AI编程,算法)