TensorFlowLite是一个开源软件库,专注于在移动设备和嵌入式设备上运行机器学习模型(可在http://www.tensorflow.org/lite上获得)。它支持具有低延迟和小二进制大小的设备上的机器学习推断。张量流Lite还支持使用安卓操作系统神经网络API(NNAPI)进行硬件加速。
我们试用一下TensorFlowLite,试用之前我们先介绍一位老前辈,当然也是BUG的出处。
Bug一词指在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题。但是Bug一词是如何由来的呢?这一切起源于1947年,从一只不小飞入Mark II计算机的飞虫说起。
扩展阅读:
1947年9月9日,当人们测试Mark II计算机时,它突然发生了故障。经过几个小时的检查后,工作人员发现了一只飞蛾被打死在面板F的第70号继电器中。当把这个飞蛾取出后,机器便恢复了正常。
当时为Mark II计算机工作的著名女科学家Grace Hopper将这只飞蛾粘帖到当天的工作手册中,并在上面加了一行注释,
“First actual case of bug being found”
当时的时间是15:45.随着这个故事的广为流传,越来越多的人开始使用Bug一词来指代计算机中的设计错误,并把Grace Hopper上登记的那只飞蛾看作是计算机里上第一个被记录在文档中的Bug.
这一称呼后来演变成表达缺陷漏洞的计算机专业术语,人们习惯地把排除程序故障叫做“debug”(除虫)。
今天我们测试TensorFlow的 image classification 的主角就是老前辈grace_hopper的相片。
1、在CPU上使用移动网络模型运行此示例,请使用以下命令:
root@myd-jx8mp:/usr/bin/tensorflow-lite-2.4.0/examples# ./label_image -m mobilenet_v1_1.0_224_quant.tflite -i grace_hopper.bmp -l labels.txt
运行结果如下
INFO: Loaded model mobilenet_v1_1.0_224_quant.tflite
INFO: resolved reporter
INFO: invoked
INFO: average time: 44.477 ms
INFO: 0.780392: 653 military uniform
INFO: 0.105882: 907 Windsor tie
INFO: 0.0156863: 458 bow tie
INFO: 0.0117647: 466 bulletproof vest
INFO: 0.00784314: 835 suit
2、要使用xnnpack委托在CPU上运行示例应用程序,请使用-x1开关
./label_image -m mobilenet_v1_1.0_224_quant.tflite -i grace_hopper.bmp -l labels.txt -x 1
运行结果如下
INFO: Loaded model mobilenet_v1_1.0_224_quant.tflite
INFO: resolved reporter
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
INFO: Applied XNNPACK delegate.
INFO: invoked
INFO: average time: 44.514 ms
INFO: 0.780392: 653 military uniform
INFO: 0.105882: 907 Windsor tie
INFO: 0.0156863: 458 bow tie
INFO: 0.0117647: 466 bulletproof vest
INFO: 0.00784314: 835 suit
3、若要在GPU/NPU硬件加速器上使用相同的模型运行该示例,请添加-a1命令行参数。要区分3DGPU和NPU,请使用USE_GPU_INFERENCE开关。例如,对于NPU硬件加速器,请使用以下命令:
USE_GPU_INFERENCE=0 ./label_image -m mobilenet_v1_1.0_224_quant.tflite -i grace_hopper.bmp -l labels.txt -a 1
运行结果如下
INFO: Loaded model mobilenet_v1_1.0_224_quant.tflite
INFO: resolved reporter
INFO: Created TensorFlow Lite delegate for NNAPI.
INFO: Applied NNAPI delegate.
INFO: invoked
INFO: average time: 2.773 ms
INFO: 0.768627: 653 military uniform
INFO: 0.105882: 907 Windsor tie
INFO: 0.0196078: 458 bow tie
INFO: 0.0117647: 466 bulletproof vest
INFO: 0.00784314: 835 suit
3、使用Python3运行
root@myd-jx8mp:/usr/bin/tensorflow-lite-2.4.0/examples# python3 label_image.py
运行结果
INFO: Created TensorFlow Lite delegate for NNAPI.
Applied NNAPI delegate.
Warm-up time: 6612.9 ms
Inference time: 3.0 ms
0.870588: military uniform
0.031373: Windsor tie
0.011765: mortarboard
0.007843: bow tie
0.007843: bulletproof vest
从运行结果来看同样的图片,NPU运行要比CPU快很多, NPU和CPU运算结果相差不大,NNAPI运行结果相似度更高。