一、YOLOv5安卓部署 | 安卓部署理论篇 |
我这里把打包好的APK格式的安装包放到我的网盘里了,安卓手机的同学可以直接安装在自己的手机上体验一下。
打包好后只有88.17 MB
。
链接:https://pan.baidu.com/s/1XVHePn2L1rkIx_ANDWNXpA?pwd=csdn
提取码:csdn
1. 模型量化
量化的工作原理是降低用于表示模型参数的数字(默认情况为32
位浮点数)的精度。这样可以获得较小的模型大小和较快的计算速度。即原来表示一个权重需要使用float32
表示,量化后只需要使用int8
来表示,这样在压缩模型的同时还给网络带来了 4 4 4倍的加速。
TensorFlow Lite 提供以下量化类型:
技术 | 数据要求 | 大小缩减 | 准确率 | 支持的硬件 |
---|---|---|---|---|
float 16 量化(训练后) | 无数据 | 高达 50% | 轻微的准确率损失 | CPU、GPU |
动态量化(训练后) | 无数据 | 高达 75% | 极小的准确率损失 | CPU、GPU (Android) |
整型量化(训练后) | 无标签的代表性样本 | 高达 75% | 极小的准确率损失 | CPU、GPU (Android)、Edge TPU、Hexagon DSP |
量化感知训练 | 带标签的训练数据 | 高达 75% | 极小的准确率损失 | CPU、GPU (Android)、Edge TPU、Hexagon DSP |
2. float 16量化
yolov5量化指令:这里我建议--imgsz
设置的小一点,毕竟是移动端算力有限。
python export.py --weights yolov5s.pt --include tflite --imgsz 320
这里量化需要安装tensorflow
,直接pip就好了。量化成功后会在根目录下生成一个yolov5s-fp16.tflite
文件。
我们可以通过如下指令检测图片:
python detect.py --weights yolov5s-fp16.tflite --imgsz 320
同样可以通过如下指令验证量化后的模型精度:
python val.py --weights yolov5s-fp16.tflite --imgsz 320
终端中也会提示你可以使用NETRON
软件可视化量化后的模型结构。
3. 动态量化
源码里面没有提供动态量化的方式,需要我们对代码进行小改动:
我们在export_tflite
类中直接注释如下代码行:
converter.target_spec.supported_types = [tf.float16]
注释后量化方式和FP16
格式相同:
python export.py --weights yolov5s.pt --include tflite --imgsz 320
动态量化后我们可以通过如下指令检测图片:
python detect.py --weights yolov5s-fp16.tflite --imgsz 320
同样可以通过如下指令验证动态量化后的模型精度:
python val.py --weights yolov5s-fp16.tflite --imgsz