MaixHub 训练调优方法

在使用 MaixHub 训练模型时,可能会遇到识别效果不太好或者模型实际运行速度慢等情况,此处提供一些常见调优方法。

欢迎修改和补充

识别效果优化

  • 尽量多采集实际使用场景的图片,覆盖更多使用场景有利于提高最终识别率。

  • 图片数量尽量不要太小,虽然平台限制最小数量为 20 张图才可以训练, 但要达到比较好的效果,显然一个分类 200 张都不算多,不要一直在 30 张训练图片上纠结为什么训练效果不好。。。

  • 修改迭代次数,在发现val_acc仍然有上升趋势的情况下可以考虑适当增大迭代次数,但是迭代次数越大,训练时间越长,所以要根据实际情况权衡。

  • 修改学习率和批数量大小,学习率不宜太大,否则会导致梯度爆炸出现loss 为 0或者loss 为 inf这样的错误,批数量大小不宜太小,否则会导致训练速度过慢,一般来说,学习率在 0.0001~0.001 之间,批数量大小在 16~64 之间都是比较合适的。另外需要注意批数量越大, 学习率就可以设置得稍微大一点。

  • 每个标签的数据量都尽量多,而不是一个标签只有 20张,另一个500张图, 可以把训练参数处的“数据均衡“开关打开

  • 默认分辨率但是 224x224, 是因为预训练模型是在 224x224 下训练的,当然也有其它分辨率的,比如 128x128,具体发现不支持的分辨率预训练模型,在训练日志中会打印警告信息。

  • 为了让验证集的精确度的可信度更高(也就是在实际开发板上跑的精确度更接近训练时在验证集上的精确度),验证集的数据和实际应用的场景数据一致。比如训练集是在网上找了很多图片,那这些图片可能和实际开发板的摄像头拍出来的图有差距,可以往验证集上传一些实际设备拍的图来验证训练的模型效果。
    这样我们就能在训练的时候根据验证集精确度(val_acc)来判断模型训练效果如何了,如果发现验证集精确度很低,那么就可以考虑增加训练集复杂度和数量,或者训练集用设备拍摄来训练。

  • 对于检测训练项目,如果检测训练的物体很准,但是容易误识别到其它物体,可以在数据里面拍点其它的物体当背景;或者拍摄一些没有目标的图片,不添加任何标注也可以,然后在训练的时候勾选允许负样本来使能没有标注的图片。

  • 检测任务可以同时检测到多个目标,如果你觉得识别类别不准,也有另外一种方式,先只检测模型检测到物体(一个类别),然后裁切出图片中的目标物体上传到分类任务,用分类任务来分辨类别。不过这样就要跑两个模型,需要写代码裁切图片(在板子跑就好了),以及需要考虑内存是否足够

在开发板上运行速度慢

  • 减小输入分辨率,比如在分类任务中可以使用96x96的小图来训练。
  • 裁切一部分图像进行识别,识别时不对整张图片进行识别,可以裁切出部分图像进行识别。
  • 选择更小的网络,比如分类选择mobilenetV1 0.25219KiB, 而mobilenetV1 0.75则是1.85MiB,网络参数量减少了很多,不过相应地,模型识别精度也会降低。

更快地标注数据

  • 可以导入本地已经标注好了的数据到 MaixHub。
  • MaixHub 支持视频辅助自动标注,只需拍摄视频上传的时候使用辅助标注功能即可,对于画面中只有单个物体的场景标注十分有用。
  • 可以使用已经训练好的模型来辅助标注,虽然现在 MaixHub 不支持用训练好的模型来标注,但是你可以下载训练好模型到板子运行,写代码将识别到的物体坐标保存为VOC标注格式,就得到了新的标注数据,虽然可能会因为模型训练效果不够好标得不够准确,但是经过简单的手工筛选调整后,标注数据就可以新的训练了,如此反复,就会得到很多数据啦。
  • MaixHub 未来可能会上线更好用的辅助标注工具哦~ 有建议欢迎通过 MaixHub 的反馈功能告诉我们哦~