Zing 论坛

正文

ii:一个后端无关的C++20神经网络推理引擎

ii是一个轻量级、高性能的C++20神经网络推理运行器,通过统一的inf::Engine接口封装TensorFlow Lite、NVIDIA TensorRT和ONNX Runtime/DirectML等多种后端,支持YOLO目标检测、图像超分辨率、实时视频推理和INT8量化等功能。

C++神经网络推理引擎TensorFlow LiteTensorRTONNX RuntimeYOLO量化推理边缘计算
发布时间 2026/06/12 05:43最近活动 2026/06/12 05:48预计阅读 6 分钟
ii:一个后端无关的C++20神经网络推理引擎
1

章节 01

导读 / 主楼:ii:一个后端无关的C++20神经网络推理引擎

ii是一个轻量级、高性能的C++20神经网络推理运行器,通过统一的inf::Engine接口封装TensorFlow Lite、NVIDIA TensorRT和ONNX Runtime/DirectML等多种后端,支持YOLO目标检测、图像超分辨率、实时视频推理和INT8量化等功能。

2

章节 02

原作者与来源

  • 原作者/维护者:DEgITx
  • 来源平台:GitHub
  • 原始标题:ii
  • 原始链接:https://github.com/DEgITx/ii
  • 来源发布时间/更新时间:2026-06-11
3

章节 03

项目概述

在深度学习模型部署的实践中,开发者常常面临一个棘手的问题:不同的推理框架有着各自独特的API设计和依赖体系。TensorFlow Lite适合移动端,TensorRT在NVIDIA GPU上性能卓越,而ONNX Runtime则提供了跨平台的通用性——但要在同一个项目中灵活切换这些后端,通常需要编写大量适配代码。

ii项目正是为解决这一痛点而生。它是一个基于C++20开发的轻量级神经网络推理运行器,核心理念是"后端无关"——通过单一的inf::Engine抽象接口,开发者可以在编译时选择所需的后端,在运行时动态切换,而无需修改业务代码。

4

章节 04

核心架构设计

ii的架构设计体现了清晰的模块化思想。整个系统围绕inf::Engine这一核心抽象展开,所有后端(TensorFlow Lite、TensorRT、ONNX Runtime/DirectML)都实现了这一统一接口。这种设计的精妙之处在于:

首先,依赖隔离。每个后端位于独立的翻译单元中(如inference_tflite.cpp、inference_tensorrt.cpp),仅当对应的CMake选项启用时才会被链接进最终二进制文件。这意味着如果你只需要TensorFlow Lite支持,编译产物不会包含TensorRT或ONNX Runtime的任何依赖。

其次,运行时灵活性。尽管后端在编译时确定,但用户可以通过--backend参数在运行时选择使用哪个后端。这为A/B测试、性能对比和跨环境部署提供了极大便利。

第三,向前兼容性。项目作者明确表示,ii的长期目标是演变成一个自包含的推理引擎——即实现原生执行路径,将现有后端作为备选方案。当前的架构已经为这一演进奠定了基础。

5

章节 05

功能特性详解

ii不仅仅是一个简单的模型推理工具,它提供了一整套面向生产环境的实用功能:

多后端支持:目前支持TensorFlow Lite(默认启用)、NVIDIA TensorRT 10+和ONNX Runtime/DirectML。特别值得一提的是,TensorFlow Lite后端支持外部加速委托(delegate),允许接入NPU或专用AI加速器。

目标检测:内置YOLOv8解码和非极大值抑制(NMS)算法,支持在图像上直接绘制检测框。默认使用COCO数据集的80个类别标签,也支持自定义类别文件。

图像增强:支持超分辨率、低光增强、去噪等图像到图像的模型。通过--tile选项可以处理输入尺寸较小的模型,自动使用滑动窗口和边缘羽化技术处理大尺寸图像。

实时视频推理:在Linux平台上,ii支持通过V4L2接口直接捕获摄像头视频流(支持UVC和CSI摄像头,YUYV和MJPEG格式),并进行实时推理。屏幕显示采用Wayland + EGL + GLES2技术栈,实现零拷贝渲染。

性能分析:内置完整的基准测试功能,支持预热+计时运行、CPU与加速委托的对比测试、以及不同精度模型(如FP32 vs INT8)的对比分析。配合--export选项可以将结果导出为CSV格式。

系统监控:--sysmon选项可实时监控进程的CPU占用、内存使用和线程状态,为性能调优提供数据支撑。

量化感知:完整支持INT8、UInt8、Float16、Float32等多种张量格式,自动从模型中读取缩放因子和零点参数。

6

章节 06

构建与使用

ii的构建过程相对直接。需要CMake 3.16或更高版本,以及支持C++20的编译器。图像加载和缩放依赖stb库,会在构建时自动获取。

基础构建命令如下:

cmake -S . -B build -DTFLITE_ROOT=/usr
cmake --build build -j

如果TensorFlow Lite安装在非标准路径,需要显式指定:

cmake -S . -B build \
  -DTFLITE_INCLUDE_DIR=/opt/tflite/include \
  -DTFLITE_LIB=/opt/tflite/lib/libtensorflowlite.so

对于无显示环境的服务器,可以禁用Wayland和摄像头支持:

cmake -S . -B build -DUSE_DISPLAY=OFF -DUSE_CAMERA=OFF

使用示例:

# 基础推理
./ii model.tflite image.jpg

# YOLO目标检测并显示
./ii yolov8m_int8.tflite image.jpg --display --yolo --conf 0.4 --iou 0.5

# 实时摄像头检测
./ii yolov8m_int8.tflite --camera --display --yolo --stats

# 超分辨率增强并保存
./ii fsrcnn_qat.tflite image.jpg --save-output out.png

# 基准测试
./ii model.tflite image.jpg --benchmark --runs 100

# INT8与FP32对比
./ii yolov8m_int8.tflite --random-input --compare model_fp32.tflite --random-runs 50
7

章节 07

代码组织与模块化

ii的源码组织体现了良好的软件工程实践。主要模块包括:

  • inference.*:后端无关的inf::Engine接口和工厂函数make_engine()
  • delegate.*:TensorFlow Lite外部加速委托的选择逻辑
  • preprocess. / image_proc. / tile.***:图像预处理、输出解码和分块处理
  • yolo. / yolo_render.**:YOLOv8解码、NMS和框绘制
  • display.*:屏幕显示抽象(Linux上基于Wayland)
  • camera. / frame_source.**:视频源抽象(Linux上基于V4L2)
  • parallel. / stats. / sysmon.* / csv_export.***:线程池、FPS统计、资源监控和CSV导出

这种模块化的好处是显而易见的:你可以只提取inference层嵌入到自己的项目中,而不需要引入显示、摄像头或其他不需要的功能。

8

章节 08

适用场景与价值

ii项目适合以下几类应用场景:

嵌入式AI开发:对于需要在资源受限设备上部署神经网络的项目,ii的轻量级设计和多后端支持可以显著简化集成工作。特别是其对INT8量化的完整支持,对于边缘设备至关重要。

跨平台原型验证:开发者可以在Linux工作站上使用CPU进行快速迭代,然后无缝切换到带有TensorRT的NVIDIA Jetson平台进行生产部署,而无需修改代码。

性能基准测试:内置的benchmark和compare功能使其成为评估不同后端、不同精度模型性能表现的实用工具。

计算机视觉应用:从静态图像推理到实时视频流处理,ii提供了完整的工具链,特别适合需要快速原型验证的CV项目。