书接上篇:[EdgeAI] NXP eIQ 机器学习Toolkit (一):准备篇
1. 模型选择
在准备篇中,数据集已OK,下面进行Model的建模训练,
首先要选择模型,点击SELECT MODEL:
eIQ 软件提供了两种不同应用的图像Model,包括Classification分类任务和Detection检测任务。
点击其中任一Model,就会进入到 Model Performance 类型选择:
类似大多现有Release的模型type:
- ·Performance:模型运行速度最快,精度最低
- ·Balanced:折中
- ·Precision:模型运行精度最高,速度最低
(U1S1,这三个图片logo表达的还是非常准确滴~)
我们可以点击左面 选项栏的BaseModel,查看eIQ支持的模型:
可以看到eIQ针对图像分类/检测 Model 是用的 经典的MobileNet/SSD,
这里选择Balance的模型,点进去后,进入Target 目标平台选择,支持 MCU CPU和GPU,NPU
2. 模型训练
选择目标平台和类型后,进入到模型训练界面:
常用训练参数也都在选项栏里:
其中常用的包括:
–> Weight Initialization: 模型权重初始化策略,包括Imagenet(即网络预训练权重),随机权重,以及本地权重文件(即加载本地所保存的模型权重文件)
-> Input Size:指定模型输入尺寸
-> Learning Rate:模型训练学习率,控制每次迭代后模型权重更新速度
Batch Size:每一次迭代所使用的数据大小
-> Epochs ToTrain: 总的训练迭代次数
-> Enable QAT:使能训练中量化
配置好训练参数后,点击 黄色的“START TRAINING” 选项,即可开始训练,并实时更新Train loss曲线和各类参数:
3. 模型评估
当模型训练达到我们所接受的精度之后,我们就可以点击Stop停止模型训练,然后点击 VALIDATA进行模型的评估和测试,
如果精度一直不达标,可以通过修改各训练参数,或者更新训练数据,再次点击CONTINUE TRAINING继续进行训练:
Validating 需要一段时间:
在Validate 页面可以查看评价指标(Evaluation metrics),
eIQ这里 支持 Confusion Matric 和Per Class Metric:
下图我这次训练后的 Confusion Matric (混淆矩阵)
Per Class Metric(每个类别的准确度):
在选项栏 的validation 配置有Softmax threshold阈值 等:
点开Model Tool可以查看 分析Model具体结构
Model Tool这里 一看就是集成的Netron:
能够看到模型每一层的各类参数,包括输入输出和运行时间等,
4. 模型导出
如果评估感觉模型达标,接下来就可以进行导出和部署到 目标设备上,
点击Deploy:
进入导出页面:
这里支持导出为:
- DeepViewRT (*.rtm),用于DeepViewRT推理引擎的rtm格式
- ONNX (*.onnx)
- Tensorflow Lite (*.tflite)
- Keras (*.h5)
导出模型可选的输入输出类型 包括:Float32/Int8/Uint8:
也可以根据需要,针对性的对模型进行Quantized量化
配置好后,点击EXPORT MODEL 即可导出模型文件到本地:
对于保存到本地的模型,可以在Deploy到设备之前,选用PC调用(如python加载)运行试下效果,最后再部署到设备端运行
5. 模型部署
Edge设备端是需要根据模型的类型以及设备的Lib支持,移植相应的Inference Engine ,加载上面保存的模型,运行输出Prediction结果。
而上面的模型 可见 准确度还差得远,不能使用,所以需要retrain提升精度后,Deploy在设备端才能更好的运行以解决问题。
手头的NXP开发板没有适合跑上面模型的,新板子正在路上。。。
未完待续。。。
博主热门文章推荐:
一篇读懂系列:
LoRa Mesh系列:
网络安全系列:
- ATECC508A芯片开发笔记(一):初识加密芯片
- SHA/HMAC/AES-CBC/CTR 算法执行效率及RAM消耗 测试结果
- 常见加密/签名/哈希算法性能比较 (多平台 AES/DES, DH, ECDSA, RSA等)
- AES加解密效率测试(纯软件AES128/256)–以嵌入式Cortex-M0与M3 平台为例
嵌入式开发系列:
- 嵌入式学习中较好的练手项目和课题整理(附代码资料、学习视频和嵌入式学习规划)
- IAR调试使用技巧汇总:数据断点、CallStack、设置堆栈、查看栈使用和栈深度、Memory、Set Next Statement等
- Linux内核编译配置(Menuconfig)、制作文件系统 详细步骤
- Android底层调用C代码(JNI实现)
- 树莓派到手第一步:上电启动、安装中文字体、虚拟键盘、开启SSH等
- Android/Linux设备有线&无线 双网共存(同时上内、外网)
AI / 机器学习系列:
- AI: 机器学习必须懂的几个术语:Lable、Feature、Model…
- AI:卷积神经网络CNN 解决过拟合的方法 (Overcome Overfitting)
- AI: 什么是机器学习的数据清洗(Data Cleaning)
- AI: 机器学习的模型是如何训练的?(在试错中学习)
- 数据可视化:TensorboardX安装及使用(安装测试+实例演示)