ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【嵌入式AI开发&Maxim问题篇】美信Maxim78000Evaluation Kit AI实战开发问题BUG 汇总

2021-12-01 19:30:01  阅读:184  来源: 互联网

标签:AI 美信 self Maxim 嵌入式 开发 量化


上篇:【嵌入式AI开发&Maxim篇四】美信Maxim78000Evaluation Kit AI实战开发二介绍了使用 Maxim78000Evaluation Kit进行开发实战的全过程。

    本篇基于开发实战中遇到的问题以及重难点进行一下小总结,具体一些解决方法上面也有介绍。主要包括五方面:

1. 环境方面

推荐环境配置:

然而,美信的模型量化工具好像并不支持cuda11,当训练到达量化的start_epoch时,训练精度急速下降。因此使用GPUA加速时,推荐使用cuda10 。

2. 训练问题

2.1 模型问题

虽然美信也是基于pytorch进行模型开发部署,但使用的CNN模板库都已经重写过了,添加了支持量化和max78000部署的设计。因此,开发自己的AI模型首先需要根据美信自定义的 PyTorch 类重写AI模型。任何设计为在 MAX78000 上运行的模型都应该使用这些类。ai8x.py与默认类torch.nn.Module有三个主要变化(如下):

  1. 额外的“融合”操作,用于模型中的池化和激活层;

  2. 与硬件匹配的舍入和裁剪;

  3. 支持量化操作(使用-8命令行参数时)。

因为这些特别设计,使得模型似乎在全连接层之前不支持全局池化,且最后一层卷积的特征图不能过小。会造成无法收敛问题。

2.2 优化器问题

由于感知量化训练的存在,是的模型的训练更加困难,因此,对于越复杂的任务,推荐使用Adam优化器,并以较小的学习率训练。(SGD调参不好无法收敛)

2.3 训练问题

除此之外,模型在多GPU训练时会出bug,造成评估时测试精度低的问题,具体解决参考【嵌入式AI开发&美信问题篇一】Maxim78000 AI实战开发-训练与测试评估精度差距大,推荐第一种。

3. 量化问题

量化有两种主要方法——量化感知训练(推荐,默认启用)和训练后量化。

量化感知训练是性能更好的方法。它默认启用。QAT 在训练期间学习有助于量化的其他参数。需要quantize.py.的输入 checkpoint,要么是qat_best.pth.tar,最好的 QAT 时期的 checkpoint,要么是qat_checkpoint.pth.tar,最终的 QAT 时期的 checkpoint。

目前只有ai8x.py库搭建的模型支持量化,且只有经过量化才能正确评估和部署。nn.module库不支持是因为工具有bug,可自行修复或使用外部工具量化

https://github.com/pytorch/glow/blob/master/docs/Quantization.md、

https://github.com/ARM-software/ML-examples/tree/master/cmsisnn-cifar10、 

https://github.com/ARM-software/ML-KWS-for-MCU/blob/master/Deployment/Quant_guide.md或 

Distiller 的方法(美信其实就是调distiller的包)

4. 转换问题

    将模型转换成c代码,最关键以及最容易出错的一步其实是网络的内存与处理器配置.yaml文件。

可参考教程:

https://github.com/MaximIntegratedAI/MaximAI_Documentation/blob/master/Guides/YAML%20Quickstart.md

我在上篇也介绍得比较详细:【嵌入式AI开发&Maxim篇四】美信Maxim78000Evaluation Kit AI实战开发二

# Model: 
#    def forward(self, x):
#        x = self.conv1(x) 
#        x_res = self.conv2(x)      
#        x = self.conv3(x_res)     
#        x = self.add1(x, x_res)
#        x = self.conv4(x)
#     ...
# Layer 0:  self.conv1 = ai8x.FusedConv2dReLU(num_channels, 16, 3, stride=1, padding=1, bias=bias, **kwargs)
- out_offset: 0x2000
  processors: 0x7000000000000000
  operation: conv2d
  kernel_size: 3x3
  pad: 1
  activate: ReLU
  data_format: HWC
  
# Layer 1: self.conv2 = ai8x.FusedConv2dReLU(16, 20, 3, stride=1, padding=1, bias=bias, **kwargs)
- out_offset: 0x0000
  processors: 0x0ffff00000000000
  operation: conv2d
  kernel_size: 3x3
  pad: 1
  activate: ReLU
# Layer 2 - re-form layer 1 data with gap
- out_offset: 0x2000
  processors: 0x00000000000fffff
  output_processors: 0x00000000000fffff
  operation: passthrough
  write_gap: 1  # output is interleaved with 1 word gaps, i.e. 0x2000, 0x2008, ...
# Layer 3: self.conv3 = ai8x.FusedConv2dReLU(20, 20, 3, stride=1, padding=1, bias=bias, **kwargs)
- in_offset: 0x0000   # output of conv2, layer 1
  out_offset: 0x2004  # start output from 0x2004
  processors: 0x00000000000fffff
  operation: conv2d
  kernel_size: 3x3
  pad: 1
  activate: ReLU
  write_gap: 1 # output is interleaved with 1 word gap, i.e. 0x2004, 0x200C, ...
# Layer 4: self.add1 = ai8x.Add()
#          self.conv4 = ai8x.FusedConv2dReLU(20, 20, 3, stride=1, padding=1, bias=bias, **kwargs)
- in_sequences: [2, 3] # get input from layer 2 and 3
  in_offset: 0x2000  # Layer 2 and 3 outputs are interleaved starting from 0x2000
  out_offset: 0x0000
  processors: 0x00000000000fffff
  eltwise: add   # element-wise add from output of layer 2 and 3 executed in the same layer as conv4
  operation: conv2d 
  kernel_size: 3x3
  pad: 1
  activate: ReLU
  
​

5. 部署问题

    部署主要用到两个工具GDB 与 OpenOCD,GDB是一个服务器,OpenOCD是代码烧录和调试工具,使用GDB指导OpenOCD进行部署。

注意的是,linux下生成的makefile文件只能在linux下make,因此若想在windows上make,然后部署,需要拿其他示例的makefile文件过了替代即可。因为处理CNN相关的几个文件,其他都是一样的。

6. 更多精彩内容

嵌入式AI开发系列教程推荐:

【嵌入式AI部署&基础网络篇】轻量化神经网络精述--MobileNet V1-3、ShuffleNet V1-2、NasNet

【嵌入式AI开发】篇六|实战篇二:深度学习模型的压缩、量化和优化方法

stm32篇:

【嵌入式AI开发】篇五|实战篇一:STM32cubeIDE上部署神经网络之pytorch搭建指纹识别模型.onnx

【嵌入式AI开发】篇四|部署篇:STM32cubeIDE上部署神经网络之模型部署

平头哥篇:

【嵌入式AI开发&平头哥篇二】玄铁开发板AI部署流程初探(使用yoctools实现cifar10的迁移部署)

美信篇:

【嵌入式AI开发&美信问题篇一】Maxim78000 AI实战开发-训练与测试评估精度差距大

【嵌入式AI开发&Maxim篇二】美信Maxim78000Evaluation Kit AI开发环境

【嵌入式AI开发&Maxim篇四】美信Maxim78000Evaluation Kit AI实战开发二

标签:AI,美信,self,Maxim,嵌入式,开发,量化
来源: https://blog.csdn.net/qq_39383591/article/details/121662519

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有