模型准备
1、 请打开文件train_from_scrach.ipynb,运行完整版YOLO-v3,将训练结果截图并贴在此处。
打开 docker 后输入网址 http://127.0.0.1:8888/tree 运行write_voc_to_txt.ipynb 文件,将 voc 数据集生成 txt 格式数据,生成 data.txt 文件,后运行 train_from_scrach.ipynb 文件,运行完整版 YOLO-v3, 运行成功结果如下,随着训练次数的增加,人脸识别的准确度提高。
2.请打开文件configuration.py,将第6行参数中的saved_model_full替换为saved_model_simple,加载剪枝后的模型,并再通过文件train_from_scrach.ipynb训练,最终将训练成果截屏并贴到此处。
模型压缩
1、参考5.2.6示例,用TFLite实现post training quantization,并将实验结果截图并贴到此处(Baseline test accuracy和Quant test accuracy)以及(Float model in MB 和 Quantized model in MB)。 如图:
2、参考5.2.7示例,用TFLite实现quantization_aware_training,并将实验结果截图并贴到此处(Baseline test accuracy和Quant test accuracy)以及(Float model in MB 和 Quantized model in MB)。
如图:
3、为什么quantization_aware要比简单的近似量化方法有效?谈谈你的想法。
计算效率提升:对于大多数处理器来说,直觉上整数计算要远比相应的浮点数计算高效。上网查阅资料发现确实如此。以CPU为例,浮点运算指令的latency平均会长于对应的整数运算指令,早期的CPU尤其如此。对于FPGA来说,浮点运算就更麻烦了。根据数字电路知识,乘法运算的复杂度通常与操作数长的平方成正比,因此将表示精度降低可以有效降低复杂度,进而大大提升计算效率。
内存和存储占用减少:float转化为int型后,所需存储空间显然降低。上网查阅资料发现,很多时候性能的瓶颈不在于计算而在于访存,在这种情况下提高计算密度会对耗时有显著的优化效果;其二,节省存储空间,减少数据量,有利于软件的升级更新。
减少能耗:上网查阅资料得知,功耗主要来自计算和访存两部分。一方面,以乘加运算为例,8位整型与32浮点相比能耗有数量级的差异。另一方面,访存主要耗电操作,如果原本只能放在DRAM中的模型经过量化能放入SRAM,不仅能提升性能,还能减少能耗。