在线时间4069 小时
UID3441752
注册时间2017-11-21
NXP金币752711
TA的每日心情 | 开心 2024-3-26 15:16 |
---|
签到天数: 266 天 [LV.8]以坛为家I
管理员
- 积分
- 32040
- 最后登录
- 2024-4-28
|
AI实战の电磁智能车(续)——数据处理,训练详解
前文介绍了AI算法在电磁智能车上的应用。有的同学反馈:光看文档不够过瘾。特别是当前疫情气焰嚣张,大部分同学被困在家里,无法施展。小编非常感同身受,大家都憋得很辛苦。所以决定把数据和训练脚本开放出来,大家可以基于我们的数据,设计并训练自己的模型。
网盘链接:
https://pan.baidu.com/s/1k5Fthvd6YxexhbmooGE3Dg
提取码:yk9m。
网盘中文件包括:原始数据文件(txt)、数据处理脚本、模型训练脚本。
实际操作步骤是:
1.运行数据处理脚本生成训练数据集,测试数据集;
2.运行训练脚本训练模型。
数据文件:normal.txt(导航算法抓取数据),manual.txt(手动控制抓取的数据),random.txt(随机干扰抓取的数据)。数据格式如下:
| 字节1 | 字节2 | 字节3 | 字节4 | 字节5 | 字节6 | 字节7 | 字节8 | 字节9 | 字节10 | 字节11 | | 时间高八位 | 时间第八位 | 电感1 | 电感2 | 电感3 | 电感4 | 电感5 | 电感6 | 电感7 | 舵机值 | 固定值 | 数据类型 | uint16 | int8 | int8 | int8 | int8 | int8 | int8 | int8 | int8 | | 数据说明 | 单位2ms | 电感数据已经转换为-128至+127 | 舵机值已经转换为-128至+127 | | | 0x00 | 0x01 | 0xAE | 0xC7 | 0x09 | 0xD8 | 0xB8 | 0xB7 | 0xBB | 0x00 | 0x5A | 数据处理脚本:train_data_convert.py。
python train_data_convert.py -b 1 -f normal.txt
这个脚本从txt中读取数据,经过一阶滤波处理,按照模型设计的数据结构生成两个数据集文件:ad_origin_normal.npy和pwm_origin_normal.npy,分别代表模型的输入数据AD值,和输出标签PWM转向值。三个txt经过数据处理后生成3组数据集文件,之后运行concatenate.py脚本,合并数据集并生成测试集和训练集。
有了测试集、训练集就可以训练模型了。
运行命令python sc_keras.py -a dense -ad 1
从脚本代码可以看到,我们脚本里有两种模型,一个是纯Dense层组成,一个有CNN+Dense。经过我们训练分析,纯Dense层的模型精度更好,计算更简单,资源更小。大家可以开动脑筋,设计自己的模型,比如引入惯性参数:本次的结果作为下次计算的输入参数之一。
由于本模型相对简单,对训练环境要求相对简单。小编的笔记本没有显卡也毫无压力。一个小时训练了77次。软件环境:Python 3.7.3, Keras 2.2.4, Tensorflow 1.13.1
经过多轮训练,生成模型文件smartcar_ad_dense_drop_025_adSize_1_nobn.h5。
由于脚本支持了断点续练的功能,如果大家修改了数据或模型,可以在输入命令时加 -r 参数,重新训练模型。(这里安利一款特别好用的模型查看工具Netron:http://github.com/lutzroeder/netron通过这个工具可以很方便的查看模型的结构,参数等)。
有了这些数据和工具,同学困在家中也能学习AI模型设计,但请注意我们开放的数据仅适用于我们的测试赛道,我们的小车。通过我们的数据训练的模型,不一定能够适用于你们的小车以及你们的赛道。同学们肯定有疑问了,数据不一致,那怎么保证我们在学校训练的模型能够用于真实比赛呢?这也是我们和赛制组织者下一步要重点解决的问题。
作者:张岩@NXP 文章出处:恩智浦MCU加油站
|
|