Shuuida/MiniML-Engine
GitHub: Shuuida/MiniML-Engine
MiniML-Engine是一个轻量级的机器学习和深度学习框架,用于在嵌入式系统上训练和部署模型。
Stars: 5 | Forks: 0
### **3. ml_factory.py (El Patrón Factory)**
解耦模型实例化。
* **函数:** $text{create_model}(text{type_string}, text{params_dict})$
* **目的:** 允许系统从简单的 JSON 字符串实例化复杂对象(如 RandomForestRegressor)。这对于保存/加载系统和防止模块之间的循环依赖至关重要。
### **4. ml_exporter.py (序列化和导出)**
处理模型的持久化和转换。
* **结构提取:** 与 Python 的 **pickle**(不安全且特定于 Python)相比,此模块提取纯数学结构(权重、阈值、拓扑)到一个 **语言无关的 JSON 格式**。
* **与 Sklearn 的互操作性:** 如果一个模型使用 **scikit-learn** 训练,此模块提取 NumPy 内部数组($$text{tree_value, coef_}$)并将其转换为 MiniML 标准格式,允许将 Sklearn 模型导出到 Arduino 的 C 语言中。
## **🛠️ 边缘工具和 MLOps**
* **架构分析 (CLI):** 打印模型拓扑、输出维度和可训练参数计数的详细摘要。
* **内存估算器:** 在编译前数学地预测 **SRAM** 和 **闪存** 的精确消耗,防止物理微控制器的重启(崩溃)。
* **确定性模拟:** 生成的代码提供与 Python 驱动程序完全数学一致(1:1)的匹配,通过硬件指令级仿真器(如 Wokwi)进行验证。
## **🚀 扩展用例(工业物联网和机器人)**
1. **预测性维护(声学振动):** 使用 `Conv1D` 和 `ResidualBlock1D`,微控制器可以分析加速度计的时间窗口并本地检测工业电机中的异常(边缘计算)。
2. **传感器融合(软传感器):** 结合低成本传感器(例如 DTH11、LDR)并通过 **Random Forest** 或 **MLP 量化**进行处理,MCU 可以预测复杂变量而无需互联网连接。
3. **Tiny Vision:** 使用 `SeparableConv2D`,可以训练用于低分辨率矩阵(例如热像仪或小型光学相机)的图案分类器,大大降低计算负担。
### **fit() 的差异**
**关键:** MiniML 使用统一的集合数据格式进行 $text{fit}()$,与 Scikit-learn 不同。
* **Scikit-learn:** $text{fit}(X, y)$(两个分离的数组)。
* **MiniML:** $text{fit}(text{dataset})$(一个列表的列表,其中 **最后一列** 是目标)。
### **现实世界工作流程示例(传感器到 Arduino**)
Python
```
import miniml
# 1. 数据集(3个传感器特征,最后一列是类别)
# [温度,湿度,光照水平,类别]
data = [
[25.0, 60.0, 100, 0], # Normal
[26.0, 62.0, 150, 0],
[80.0, 20.0, 800, 1], # Peligro de Incendio
[85.0, 15.0, 900, 1]
]
# 2. 训练管道(自动处理扩展)
print("Entrenando modelo...")
result = miniml.train_pipeline(
model_name="fire_detector",
dataset=data,
model_type="DecisionTreeClassifier",
params={"max_depth": 3},
scaling="minmax" # Crucial para la normalización de datos de sensores
)
# 3. PC上的预测(卫生验证)
# 输入为原始传感器数据。MiniML在预测前自动进行缩放。
sensor_input = [[82.0, 18.0, 850]]
prediction = miniml.predict("fire_detector", sensor_input)
print(f"Predicción (0=Seguro, 1=Peligro): {prediction}")
# 4. 导出到固件
print("Generando código C...")
c_code = miniml.export_to_c("fire_detector")
# 5. 保存到文件
with open("model.h", "w") as f:
f.write(c_code)
```
## **💾 生成 C 代码(工件**)
输出是 C99 标准代码,准备好包含在 Arduino 的 sketch 中 (#include "model.h")。
```
// Exportación MiniML: fire_detector
// Preprocesamiento (Escalador MinMax incorporado)
void preprocess_data(float row[]) {
// Valores codificados (Hardcoded) de la fase de entrenamiento
row[0] = (row[0] - 25.0) / 60.0;
row[1] = (row[1] - 15.0) / 47.0;
row[2] = (row[2] - 100.0) / 800.0;
}
// Arrays del Modelo (Árbol Aplanado)
const int tree_feature_index[] = {0, 2, -1, -1, -1};
const float tree_threshold[] = {0.5, 0.8, 0.0, 0.0, 0.0};
const int tree_left[] = {1, 3, -1, -1, -1};
const int tree_right[] = {2, 4, -1, -1, -1};
const int tree_value[] = {0, 0, 0, 1, 0}; 0=Seguro, 1=Peligro
// Función de Inferencia (Iterativa - Segura para la Pila)
int predict_model(float row[]) {
int node_index = 0;
while (tree_feature_index[node_index] != -1) {
if (row[tree_feature_index[node_index]] <= tree_threshold[node_index]) {
node_index = tree_left[node_index];
} else {
node_index = tree_right[node_index];
}
}
return tree_value[node_index];
}
// Punto de Entrada Unificado
float predict(float inputs[]) {
preprocess_data(inputs); Modifica in-place (en el mismo lugar)
return (float)predict_model(inputs);
}
```
## **💻 MiniTensor 工作流程示例(端到端**)
从 Python 训练到 PlatformIO 打包。
```
import miniml
from miniml import Tensor, nn, optim
from miniml.exporters.library_packer import LibraryPackager
# 1. 定义架构(MiniTensor 深度学习)
model = nn.Sequential([
nn.Conv1d(in_channels=1, out_channels=4, kernel_size=3, stride=1, padding=1),
nn.MaxPool1d(kernel_size=2),
nn.ResidualBlock1D(in_channels=4, out_channels=4),
nn.Flatten(),
nn.Linear(16, 1),
nn.Sigmoid()
])
# 2. 在PC上训练(Autograd 引擎)
optimizer = optim.SGD(model.parameters(), lr=0.01)
# ... 标准训练循环 ...
# 3. 边缘优化(混合INT8量化)
model.quantize()
# 4. 导出到原生C++
from miniml.exporters import cpp_writer
cpp_code = cpp_writer.generate_cpp_code(model, input_shape=(1, 1, 8))
# 5. 打包工业级库(PlatformIO Arduino)
LibraryPackager.create_arduino_zip(
model_name="ResNet_Vibration_Detector",
cpp_code=cpp_code,
version="2.0.0",
quantized=True
)
print("¡Librería ZIP generada, estructurada y lista para compilar en hardware!")
```
## **🛠️ 安装和使用**
### **安装**
由于 MiniML 是一个纯 Python 包,安装简单:
```
pip install miniml-engine
```
*(可选:安装 scikit-learn 以在 PC 上进行更快的训练,但不是必需的).*
## **🤝 贡献**
欢迎贡献。MiniML 的使命是保持其严格的“零依赖”和低级别优化哲学。
1. 对项目进行 *Fork*。
2. 创建你的分支 (`git checkout -b featureNuevaOptimizacion`).
3. 确认你的更改 (`git commit -m 'Añadida nueva característica'`).
4. 推送分支 (`git push origin featureNuevaOptimizacion`).
5. 提交 *Pull Request*。
## **📄 许可证和文档**
在 Apache License 2.0 许可下分发。免费用于学术、商业和工业用途,保证开源的可追溯性。请参阅 `LICENSE` 文件以获取更多信息。
有关如何构建框架和使用它的详细信息,请参阅官方文档中的文档。感谢您访问此存储库!
标签:Apex, Arduino, ESP32, Homebrew安装, JSON格式, Linux系统监控, STM32, 传感器融合, 内存管理, 嵌入式系统, 工业物联网, 微控制器, 机器人技术, 机器学习, 模型优化, 模型传感器融合应用, 模型内存管理工具, 模型分析, 模型分析工具, 模型压缩, 模型参数, 模型可扩展性, 模型可移植性, 模型可维护性, 模型可解释性, 模型可训练性, 模型安全, 模型导出, 模型导出工具, 模型工业应用, 模型序列化, 模型序列化工具, 模型性能, 模型持久化, 模型持久化工具, 模型机器人应用, 模型结构, 模型训练, 模型训练工具, 模型评估, 模型评估工具, 模型软传感器应用, 模型边缘计算工具, 模型迁移, 模型迁移工具, 模型预测性维护应用, 深度学习, 神经网络, 软传感器, 边缘计算, 逆向工具, 预测性维护