2.2 下载依赖
在PC的Linux系统上,运行TFLM基准测试之前,需要先安装依赖的一些工具:
sudo apt install git unzip wget python3 python3-pip
2.3 设置pip源
将pip源设置为国内源,可以加速pip包安装,执行如下命令:
pip config set global.index-url
http://mirrors.aliyun.com/pypi/simple/
pip config set global.trusted-host mirrors.aliyun.com
pip config set global.timeout 120
2.4 安装Pillow库
tflite-micro的benchmark编译过程中会依赖python环境的pillow库,对数据集的图片进行预处理。
执行如下命令,安装pillow库: pip install pillow
安装过程会编译pillow包中的C/C++源代码文件,速度较慢,耐心等待。
如果Pillow安装过程报错:The headers or library files could not be found for jpeg
需要先安装libjpeg库:apt-get install libjpeg-dev zlib1g-dev
三、在VisionFive上运行TFLM3.1 下载TFLM源码
下载tflite-micro源码使用如下命令:
git clone <
https://github.com/tensorflow/tflite-micro.git>
3.2 TFLM基准测试说明
TFLM代码仓的顶层的README.md中给出了benchmarks链接:
https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/benchmarks/README.md
该文档篇幅不长:
通过这个目录我们可以知道,TFLM实际上提供了两个基准测试(实际有三个),分别是:
- 关键词基准测试
- 关键词基准测试使用的是程序运行时生产的随机数据作为输入,所以它的输出是没有意义的
- 人体检测基准测试
- 人体检测基准测试使用了两张bmp图片作为输入
- 具体位于tensorflowlitemicroexamplesperson_detectiontestdata子目录
3.3 TFLM基准测试命令
参考”Run on x86”,在x86 PC上运行关键词基准测试的命令是:
make -f tensorflow/lite/micro/tools/make/Makefile run_keyword_benchmark
在PC上运行人体检测基准测试的命令是:
make -f tensorflow/lite/micro/tools/make/Makefile run_person_detection_benchmark
执行这两个命令,会依次执行如下步骤:
- 调用几个下载脚本,下载依赖库和数据集;
- 编译测试程序;
- 运行测试程序;
tensorflow/lite/micro/tools/make/Makefile代码片段中,可以看到调用了几个下载脚本:
flatbuffers_download.sh和kissfft_download.sh脚本第一次执行时,会将相应的压缩包下载到本地,并解压,具体细节参见代码内容;
pigweed_download.sh脚本会克隆一个代码仓,再检出一个特定版本:
这里需要注意的是,代码仓
https://pigweed.googlesource.com/pigweed/pigweed 国内一般无法访问(因为域名googlesource.com被禁了)。将此连接修改为我克隆好的代码仓:
https://github.com/xusiwei/pigweed.git 可以解决因为国内无法访问googlesource.com而无法下载pigweed测试数据的问题。
3. 4 Keyword基准测试
关键词基准测试使用的模型较小,比较适合在
STM32 F3/F4这类主频低于100MHz的MCU。
这个基准测试的模型比较小,计算量也不大,所以在PC上运行这个基准测试的耗时非常短:
可以看到,在PC上运行关键词唤醒的速度非常快,10次时间才2毫秒。
模型文件路径为:./tensorflow/lite/micro/models/keyword_scrambled.tflite
可以使用Netron软件查看模型结构:
3. 5 Person detection基准测试
人体检测基准测试的计算量相对要大一些,运行的时间也要长一些:
可以看到,人像检测模型运行10次的时间是四千多毫秒,一次平均四十几毫秒。
模型文件路径为:./tensorflow/lite/micro/models/person_detect.tflite
同样,可以使用Netron查看模型结构,模型结构过于复杂,这里不再展示。
四、和树莓派3B+结果对比
我手头还有一块吃灰很久的树莓派3B+,拿出来做个对比。
4.1 在树莓派3B+上运行TFLM基准测试
在树莓派3B+上运行TFLM基准测试,所需的操作和VisionFive的完全一致。由于关键词识别的模型计算量太小了,这里直接跑一下人像检测的模型,最终结果为:
可以看到,在树莓派3B+上的,对于有人脸的图片,连续运行10次人脸检测模型,总体耗时4186毫秒,每次平均耗时418.6毫秒;对于无人脸的图片,连续运行10次人脸检测模型,耗时4190毫秒,每次平均耗时419毫秒。
4.2 VisionFive和树莓派3B+上TFLM基准测试结果对比
结果汇总如下:
| VisionFive V1 | 树莓派3B+ |
有人脸平均耗时(ms) | 477.6 | 418.6 |
无人脸平均耗时(ms) | 476.9 | 419 |
CPU最高主频(Hz) | 1.0GHz | 1.4G |
从上表可以看到,在TFLM人像检测模型计算场景下,VisionFive和树莓派3B+单次计算耗时基本相当。树莓派3B+的CPU频率比VisionFive要高出40%,VisionFive能跑出这样的成绩说明U74 RISC-V CPU核和ARM Cortex A53的单核计算能力上差距不大(TFLM是单线程的)。但是,树莓派3B+有4个Cortex A53核心,而VisionFive V1只有两个U74 CPU核心,因此在多线程计算性能上必然存在较大差距。