# YMAI **Repository Path**: yao_mi/ymai ## Basic Information - **Project Name**: YMAI - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-20 - **Last Updated**: 2026-10-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # YMAI 可裁剪的 C 神经网络库。应用统一包含 `YMAI/YMAI.h`、链接 `YMAI::YMAI`,产物为 `libymai.a`。MCU 使用静态 FNN;PC 可开启 OpenCL,用同一动态网络组合全连接和卷积层。 RNN/LSTM 和 Transformer 可独立开启,提供 CPU/OpenCL 序列训练与推理;Diffusion 复用动态网络进行训练和生成。 ## 目录 原生 Haar Cascade 支持积分图、五类直立特征、AdaBoost 级联训练、模型保存加载及 多尺度检测;Python 仅整理图片数据。用法和验证范围见 [Haar Cascade](Demo/Haar/README.md)。 - `YMAI/CORE/`:算法和网络组合接口。 - `YMAI/BACKEND/OPENCL/`:可选 OpenCL 执行与内核。 - `YMAI/TRAIN/`、`YMAI/MODEL/`:训练和模型管理。 - `YMAI/OPOBJ/`、`CONFIG/`、`INTERNAL/`:对象、配置和私有实现。 - `Demo/`:无界面示例、`Test/` 验证和 `Support` 数据读取。 - `datasets/`:可复用的测试数据集与序列。 - `modelweight/`:原始预训练参数的推理文件,包括必要的 YMAI 转换格式;短程训练检查点留在 `artifacts/`。 - `Tools/NN/`:性能工具。 - `project_Demo/nn_lab/`:YMGUI 神经网络实验室。 - `extern_lib/YMCV/`、`extern_lib/YMGUI/`:可选视觉库与界面库。 - `legacy/`、`docs/history/`:历史参考,不参与构建。 正式 Demo(含 Support)只通过公开 API 组合库能力;数值测试放在 Demo/Test。 不再按 C_GPU、C_CNN 创建独立库。动态 Dense 和 Conv 共用网络对象及执行/训练流程。 详见 [架构与当前边界](YMAI/ARCHITECTURE.md)。 ## 默认桌面示例 需要 CMake、C99 编译器及 SDL2 开发包。 ```bash cmake -S . -B build -DCMAKE_BUILD_TYPE=Release cmake --build build -j4 ./build/ymai_gui ctest --test-dir build --output-on-failure ``` GUI 可暂停、重置 XOR 训练。无显示环境的 GUI 测试使用 SDL dummy 驱动。 仅编译库可设置 `-DYMAI_BUILD_GUI=OFF -DYMAI_BUILD_DEMOS=OFF`。 ## 分支计算图(纯 C) 开启 `YMAI_ENABLE_GRAPH=ON` 后,可以用公共张量和算子接口组合 Dense、ReLU、Add、Concat, 支持分支反向、SGD、训练模型保存加载。`Demo/Graph/branch.c` 展示完整流程。 关闭训练的构建也能加载同一模型进行推理;当前仍使用动态内存。 图也支持 Conv、BN、SiLU、填充池化、最近邻上采样、任意轴拼接及多根反向。 YOLOv5/YOLO26 已可用通用图完成网络前反向,包含空间注意力、切片、深度卷积和停止梯度;桌面序列也可组合标准 Graph 算子。见 [计算图](YMAI/GRAPH.md)。 ```bash cmake -S . -B build-graph -DYMAI_BUILD_GUI=OFF \ -DYMAI_ENABLE_GRAPH=ON -DYMAI_BUILD_TESTS=ON cmake --build build-graph -j4 ./build-graph/Demo/Graph/ymai_demo_graph /tmp/branch.ymg ctest --test-dir build-graph --output-on-failure ``` ## 无堆图推理 `YMAI/GRAPH/` 与 `CORE` 并列,负责拓扑、形状和调度。ModelIR 可导出 const C 权重与图, 静态运行时由调用方提供激活和临时工作区,复用纯 C 算子,覆盖当前 37 种标准算子(含 Input)及分支; 可关闭动态 Graph、ModelIR、训练和 OpenCL。用法见 [静态模型部署](YMAI/STATIC_GRAPH.md)。 ## ModelIR 模型交换 开启 Graph 时默认包含 ModelIR v1:稳定算子描述、命名多输入/多输出、可读图与二进制权重, 并可恢复为 Graph 执行。CPU 当前覆盖 37 种算子(含 Input),包括 LayerNorm、Softmax、通用 Attention、 转置卷积、双线性缩放和零填充;关闭训练仍可加载推理。全部支持静态 C 导出;OpenCL 支持其中 29 种,新增的 Broadcast、Sin/Cos/Log/Abs/Sign/Reciprocal、GroupNorm 仅支持 CPU/静态图。支持边界见 [能力支持矩阵](YMAI/SUPPORT_MATRIX.md)。 新增 OpenCL 算子的前反向、参数更新和模型往返已通过 GTX 750 设备测试; 详细语义见 [ModelIR 支持范围](YMAI/MODEL_IR.md#通用算子补充)。 顺序 CNN 可从现有 OpenCL NN 导出、恢复为 CPU 图或 OpenCL NN 并继续训练。 通用多输入分支图也可恢复为 OpenCL Graph,支持前向、多根梯度累加、SGD 和保存后续训, 见 [GPU 分支图](YMAI/OPENCL_GRAPH.md)。 `YMAI_ENABLE_MODEL_IR=OFF` 可单独关闭转换与编码能力。ONNX 转换留作后续。 ```bash ./build-graph/Demo/Model/ymai_demo_model_ir /tmp/branch.ymir /tmp/branch.weights ``` 示例训练分支网络,保存加载后验证两个命名输出完全一致。 范围、公共接口、文件格式及裁剪验证见 [ModelIR 说明](YMAI/MODEL_IR.md)。 ## 人脸检测与关键点 YuNet 2023、SCRFD det_10g 与 PFLD68/98 在 `Demo/Face` 中组合 Graph、ModelIR 和 `YMAI_ENABLE_VISION=ON` 的通用组件。 库提供图像变换、框解码、NMS、坐标映射;具体网络、端口约定与任务流程属于 Demo。 YOLO 也有不依赖旧 Detector 的 ModelIR 推理入口,见 [组件与模型边界](YMAI/COMPONENTS.md)。 YOLOv8 n/s/m/l/x 检测权重现可离线转换为标准 ModelIR 并使用通用图推理; 五尺寸原始头数值已对照,640 图片验收覆盖 n。原生基础训练与保存续训已接入,见 [YOLOv8 训练](YMAI/YOLOV8_TRAINING.md)。 CPU 推理和真实权重对照已通过,相关基础算子的 OpenCL 前反向已通过 GTX 750 设备测试; PFLD68/98、YuNet、SCRFD 的基础监督训练/微调、参数冻结和保存续训见 [人脸模型训练](YMAI/FACE_TRAINING.md), 尚未复现各原项目完整训练策略或数据集指标。构建、模型转换和图片示例见 [人脸模块](YMAI/FACE.md)。 CPU Graph 的卷积优化、裁剪开关及 YuNet/SCRFD 实测见 [CPU 性能说明](YMAI/CPU_PERFORMANCE.md)。 最近邻/双线性/双三次、抗混叠与整数裁剪,以及 PFLD 可选原版预处理见 [图像采样组件](YMAI/IMAGE_SAMPLING.md)。 ## 图片分割 SAM 2.1 Tiny/Small 的单图点选、框选分割入口位于 `Demo/Segmentation`,使用标准 ModelIR 和公共 Graph;模型转换、CPU/OpenCL 运行及验证见 [分割示例](Demo/Segmentation/README.md)。 ## 文字检测与识别 PP-OCRv6 tiny/small/medium 的检测和识别共六个原始模型可用专用脚本转换为 ModelIR, 已完成两张截图的 CPU 前向、DB/CTC 后处理、Paddle 数值对照及测速。tiny 另有 OpenCL 验证记录, 不能据此声明全系列 OpenCL 已验证;见 [OCR 示例](Demo/OCR/README.md)。 ## 开启 OpenCL 需要 OpenCL 开发文件,运行时需要可访问的设备和驱动。 ```bash cmake -S . -B build-opencl -DYMAI_BUILD_GUI=OFF \ -DYMAI_ENABLE_OPENCL=ON -DYMAI_BUILD_TESTS=ON cmake --build build-opencl -j4 ctest --test-dir build-opencl --output-on-failure ./build-opencl/ymai_demo_opencl_xor ``` XOR 使用与 CNN 相同的 Dense、激活、反向传播及更新实现。七个动态网络回归不需要外部 数据集,六个需要 OpenCL;MNIST/CIFAR 完整训练需自行提供数据。 可设置 `-DYMAI_BUILD_TOOLS=ON` 构建性能工具。 ```c #include "YMAI/YMAI.h" YMAI_Network *net = YMAI_NetworkCreate(0.01f); /* Check net != NULL before adding layers. */ YMAI_NetworkAddDense(net, 2, 8); YMAI_NetworkAddLeakyReLU(net, 0.1f, 8); YMAI_NetworkAddDense(net, 8, 1); /* YMAI_NetworkTrainMSE(net, inputs, targets, batch); */ YMAI_NetworkFree(net); ``` 网络公开接口不包含 OpenCL 类型。运行时无需切换到源码目录;分发应用时将内核文件 一起部署,必要时设置 `YMAI_OPENCL_KERNEL_DIR`。 ## RNN / LSTM / Transformer 三种序列模型进入同一个 `libymai.a`。桌面 `YMAI_SequenceModel` 提供 FP32 CPU/OpenCL、 多层、batch、连续特征、Graph/ModelIR、状态/KV cache、精确续训、Dense W8A8 混合量化 及匹配结构的 PyTorch 权重导入;RNN/LSTM 共用一个开关,Transformer 单独裁剪。 ```bash cmake -S . -B build-sequence -DYMAI_BUILD_GUI=OFF \ -DYMAI_ENABLE_RNN=ON -DYMAI_ENABLE_TRANSFORMER=ON -DYMAI_BUILD_TESTS=ON \ -DYMAI_ENABLE_GRAPH=ON -DYMAI_ENABLE_MODEL_IR=ON cmake --build build-sequence -j4 ./build-sequence/Demo/Sequence/ymai_demo_sequence ctest --test-dir build-sequence --output-on-failure ``` 旧 `YMAI_Sequence` FP64 单层接口保留兼容。CPU 可关闭训练;动态 OpenCL 仍需开启训练状态。 本轮不涉及 MCU。具体架构范围、导入格式及性能代价见 [桌面序列模型](YMAI/DESKTOP_SEQUENCE.md)。 ## 小型语言模型 小型语言模型已验证 TinyStories-1M:原生 C CPU/OpenCL 生成及 Transformers 对照均通过。 支持范围、测速及复现见 [LLM 验证](YMAI/LLM.md),已接入短上下文 KV cache 与 GPU 常驻缓存优化;当前 CLI 尚无 C tokenizer。 ## Diffusion `YMAI_ENABLE_DIFFUSION=ON` 接入无堆分配的 DDIM/Heun 采样器、加噪目标和损失。 同时开启 OpenCL 后,可用已有 Dense 网络训练并生成 28×28 条件数字,复用库内 Adam/EMA 及单图推理加速;彩色小 CNN 实验另放在 Demo。 ```bash cmake -S . -B build-diffusion -DYMAI_BUILD_GUI=OFF \ -DYMAI_ENABLE_DIFFUSION=ON -DYMAI_ENABLE_OPENCL=ON -DYMAI_BUILD_TESTS=ON cmake --build build-diffusion -j4 ctest --test-dir build-diffusion --output-on-failure ./build-diffusion/Demo/Diffusion/ymai_demo_diffusion_api ``` 公共接口示例使用合成数据;完整数字训练需 MNIST,生成需模型及其 `.meta`。 详见 [Diffusion 接口与示例](YMAI/DIFFUSION.md)。 ## MCU 静态推理 ```bash cmake -S . -B build-inference -DYMAI_ENABLE_TRAINING=OFF \ -DYMAI_ENABLE_OPENCL=OFF -DYMAI_ENABLE_RNN=OFF \ -DYMAI_ENABLE_TRANSFORMER=OFF -DYMAI_ENABLE_DIFFUSION=OFF -DCMAKE_BUILD_TYPE=Release cmake --build build-inference -j4 ctest --test-dir build-inference --output-on-failure ``` 此配置不需要 SDL/OpenCL,保留 `YMAI_fNN_InitStatic`、`Connect` 和 `Forward`。 见 [静态推理说明](YMAI/INFERENCE.md)。动态 OpenCL 网络仍需训练状态,目前不支持 OpenCL 与关闭训练同时启用;MCU 对象、模型格式与动态网络还没有统一转换。 ## 视觉与后续算法 `-DYMAI_BUILD_YMCV=ON` 增加可选视觉库和联合示例。应用按需链接 `YMCV::YMCV`, 不把视觉处理依赖带进 AI 核心。旧 YMKV 只保留历史引用。 Diffusion 的 two-step、drifting 等后续实验仍未接入。后续按公共层、 模型组合、后端算子和任务接口融合,训练入口、验证、数据、权重仍放在库外。 ## Studio 原生训练包 Studio 保持统一原生格式,YMAI 的 `Tools/Data/convert_studio.py` 负责按栏提取矩形标签、 类别映射和训练/验证列表。原图保留 BMP,YOLO 训练/预测读取器直接支持;在线辅助标注 可使用现有 RGB24 内存输入。用法与边界见 [Studio 数据适配](Tools/Data/README.md)。 ## YOLOv5 / YOLO26 训练与推理 开启 `YMAI_ENABLE_YOLO=ON` 和 `YMAI_ENABLE_OPENCL=ON`,检测器、版本对应的损失、全层反向、 SGD/EMA 和检查点进入同一个 `libymai.a`。`Demo/YOLO` 提供训练、图片推理 CLI, 只调用公共接口,按模型内容自动识别 YOLOv5 / YOLO26。此组件默认关闭, 保留 YOLOv5 来源的 GPL-3.0 和共享 YOLO26 执行器的 AGPL-3.0 许可。 构建、数据格式和实跑记录见 [目标检测说明](YMAI/DETECTION.md)。 开启 Graph/ModelIR 后,完整 YOLOv5 V1/V2 和 YOLO26 可逐节点导出为 ModelIR, 恢复到现有检测执行器推理与训练。转换 Demo、检测/训练 CLI 的 ModelIR 输入及边界见 [YOLO 模型交换](YMAI/YOLO_MODEL_IR.md)。 YOLOv5 V1/V2 和 YOLO26 还可用 `--backend graph-opencl` 运行通用图,`--graph 1` 导出标准算子 ModelIR; 接口、实测和桥接边界见 [YOLO 通用图](YMAI/YOLO_GRAPH.md)。 SAM2.1 与 EfficientSAM3 的原生 CPU 微调入口见 [SAM 训练说明](Demo/Segmentation/Training.md):Python 读取和预处理,YMAI 执行网络、损失、反向与参数更新,最多 8 线程。 ## 原生原始输入部署 公共 Runtime 已提供[文字会话与 GUI](YMAI/RUNTIME.md)、[OCR 图片识别](YMAI/OCR.md)、[Zipformer WAV 转写](YMAI/ASR.md)和[EfficientSAM3 RV-M/TV-M 文字分割](YMAI/SAM3.md)的纯 C 入口。对应组件默认关闭,可显式启用;原始输入处理无需 Python 进程。训练数据、模型转换和数值参考仍使用独立 Python 工具。支持模型与输入域、误差及构建证据见[最终验收汇总](artifacts/runtime/20261011/final-summary.md)。