在tensorfow lite中对各op进行单元测试

tflite模型测试 tflite模型和pb一样都需要测试,仅仅转换成功只是其中的一步,如果测试结果很差劲,就有可能转换过程中有问题,这个问题就多了,比如模型问题、有些Op问题、UNIT8/FLOAT问题,不可预知。无论哪个环节出现问题,都有可能需要重头再来!!比如换模型,后果不堪设想。 我之前提到过,这里也再说一次,目前tf RNN尚不能直接转为tflite,只有按照官方给的trick才可以,GRU是死都不能转的。... 阅读详情

Tensorflow lite源码中提供了对个op的单元测试源码,但是在官方的tflite Makefile中默认并没有编译该部分代码。本文主要是记录在tflite中对op进行单独测试的方法,平台为ARM嵌入式。

概要

在tflite的源码中单元测试的源码一般在op名后面添加有test,在目录 tensorflow/contrib/lite/kernels下可以看到很多op的单元测试源码,如convolution的实现源码为conv.cc,则对应的单元测试源码为conv_test.cc,查看源码后可以知道单元测试采用googletest来实现。另外,基本上所有op的单元测试都会继承tensorflow/contrib/lite/kernels/test_util.h里面的SingleOpModel类,而官方源码中的Makefile默认是没有编译test_util.cc的。
下面,本文以编译conv_test.cc为例说明怎么使用单元测试。

基本思想为:先修改Makefile把test_util.cc编译进libtensorflow-lite.a,然后对要测试的conv_test.cc源码单独写一个cmake去调用新的libtensorflow-lite.a。

由于unit test需要用到Googletest库,所以需要提前编译准备好Googletest,另外还需要用到absl库。

安装Googletest库

git clone https://github.com/google/googletest 
cd googletest
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/path/to/yourdir ..
make install 

absl地址:https://github.com/abseil/abseil-cpp 先下载放到制定位置,可以暂时不用编译。

修改Makefile,编译新的tflite库

准备工作做好以后就可以修改lite源码中的Makefile了,修改的地方主要是添加googletest到INCLUDES,以及添加对其他源码的编译。

添加新的INCLUDES

INCLUDES += -I/path/to/googletest/include

修改CORE_CC_EXCLUDE_SRCS变量

CORE_CC_EXCLUDE_SRCS := \
$(wildcard tensorflow/contrib/lite/*test.cc) \
$(wildcard tensorflow/contrib/lite/*/*test.cc) \
$(wildcard tensorflow/contrib/lite/*/*/*test.cc) \
$(wildcard tensorflow/contrib/lite/*/*/*/*test.cc) 
##$(wildcard tensorflow/contrib/lite/kernels/test_util.cc) \   把这行注释掉

另外还需要添加

CORE_CC_ALL_SRCS += \
$(wildcard tensorflow/core/platform/default/logging.cc) \
$(wildcard tensorflow/core/platform/env_time.cc)

到此,对Makefile的修改就完成了,运行./tensorflow/contrib/lite/tools/make/build_rpi_lib.sh编译可生成新的libtensorflow-lite.a库。

Tips: 注意上述编译的库在被conv_test.cc调用时会出错,原因是env_time.cc中的 EnvTime类部分函数还没有实现,这个可以自己把相关函数实现下,可以参考 tensorflow/core/platform/posix/env_time.cc的实现方式。

编译conv_test.cc

接下来编译conv_test.cc,编译CMAKE的时候遇到一些坑,下面是填坑后的完整CMakeLists.txt。

cmake_minimum_required(VERSION 3.0)
add_definitions(-std=c++11)  #must use c++11
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(GCC_COMPILER_VERSION "" STRING "GCC Compiler version")

SET(CMAKE_C_COMPILER   aarch64-linux-gnu-gcc) 
SET(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) 
find_package(Threads)
SET(CMAKE_BUILD_TYPE "Release")
#set(CMAKE_EXE_LINKER_FLAGS "-lpthread -lrt -ldl") #special for tflite compile
INCLUDE_DIRECTORIES("/path/to/tflite_lib/include")
INCLUDE_DIRECTORIES("/path/to/googletest/include")
INCLUDE_DIRECTORIES("/path/to/absl")

LINK_DIRECTORIES("/path/to/tflite/lib")
LINK_DIRECTORIES("/path/to/googletest/lib")

add_executable(ConvUnitTest conv_test.cc)
target_link_libraries(ConvUnitTest libtensorflow-lite.a libgtest.a libgmock.a ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS})

如果需要对其他的op进行单元测试,则把对应的op_test.cc替换掉上面的conv_test.cc即可。

pth转onnx转tflite并固定输入(附代码和实验结果) 最近工程上在做基于端侧AI的超分模型,模型量化要从torch转换成onnx,再转为tflite。为了分别测试,我们固定输入输出和batch批次模型超分的结果不是非常理想,原因还在排查中,可能是因为图片输入太小,也可能因为测试代码没有处理好输入输出。总体上量化为tflite_float32,是目前最快和最优的超分模型。 阅读详情

相关推荐

tflite模型可视化工具-Netron(支持各种格式模型结构的可视化)

有一个.tflite的深度学习模型框架文件需要可视化展示,网上搜到一个好用的可视化工具Netron,分享一下。 在线直接打开:https://netron.app/ github地址:https://github.com/lutzroeder/netron Netron的介绍 Netron supportsONNX(.onnx,.pb,.pbtxt),Keras(.h5,.keras),TensorFlow Lite(.tflite),Caffe(.caffemodel,.p...

Briwisdom的博客 4935

【占坑】【cmake】【find_package】待有时间系统整理

【占坑】【cmake】【find_package】待有时间系统整理前言cmake使用find_package使用方法 前言 近期浅浅看了一下cmake的使用方法,觉得还是得整理,不然学过就会忘得一干二净 cmake使用 find_package使用方法 参考文献: cmake(7):find_package命令详解 Cmake语句find_package()函数 CMake如何查找链接库—find_package的使用方法 ...

qq_45954434的博客 381

tensorflow查看pb,lite模型函数总结

想要调用他人保存的pb或lite模型时往往需要查看模型结构,输入节点类型等,总结一些方法 首先考虑使用Netron看图,还有命令行中使用命令的方式,这里总结利用python .Lite模型 interpreter = tf.contrib.lite.Interpreter(model_path=model_path) interpreter.allocate_tensors() # Get...

qq_35503402的博客 1447

paddlelite编译python版: FIND_PACKAGE called with invalid argument或者fatal: no tag exactly matches 。【已解决】

paddlelite编译python版: FIND_PACKAGE called with invalid argument或者fatal: no tag exactly matches 。。。

weixin_42991437的博客 2455

V4L2 Camera 驱动的数据流模型:Buffer Queue 与 Streaming 流程详解

在 Linux V4L2 摄像头驱动架构中,数据流模型由 Buffer Queue 管理机制与 Streaming 流程共同构建,直接关系到图像采集性能、帧稳定性与平台兼容性。本文从工程视角出发,详解 V4L2 的 buffer 管理架构,包括内核态的数据流路径、帧队列调度逻辑、内存映射机制、驱动层对 `VIDIOC_QBUF` 和 `VIDIOC_DQBUF` 的处理,以及 streaming 启停流程的具体状态转换。结合 Qualcomm、MTK 等平台的调度优化策略,深入剖析视频帧在驱动层级的完整生命

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1721

AFC自动售检票系统与人工智能AI结合的关键应用方案

针对售检票、大客流管理、设备运维及服务优化提供了可落地的技术支持和实现细节,可作为地铁智慧交通项目的实践参考

leijinquan01的博客 1513

spconv版本更迭导致的Bug:AttributeError: module ‘spconv‘ has no attribute ‘SparseModule‘

spconv版本更迭导致的Bug:AttributeError: module 'spconv' has no attribute 'SparseModule' import spconv.core_cc as _ext ModuleNotFoundError: No module named 'spconv.core_cc'

weixin_43241894的博客 1万+

安卓逆向实战:用Batch Apktool 3.8.0快速汉化APK的完整流程

本文详细解析了如何使用Batch Apktool 3.8.0进行安卓APK汉化的完整流程,包括环境配置、反编译、资源解析、深度汉化、重构建与签名优化等关键步骤。通过这款集成化逆向工具,开发者可以高效完成APK汉化,提升工作效率。

s1t2u3的博客 1096

Tensorflow移植到ARM

下载Tensorflow相关依赖包 第一步: vim tensorflow/contrib/lite/download_dependencies.sh 修改: 63   if [[ "${url}" == *gz ]]; then 64     curl -Ls "${url}" | tar -C "${dir}" --strip-components=1 -zxv 编译Tensorflow Li...

weixin_41702739的博客 8611

微信小程序获取用户手机号全流程实战(附完整代码)

本文详细介绍了微信小程序获取用户手机号的全流程实战,包括前端授权、后端解密及安全合规要点。通过传统授权按钮和新版手机号快速验证组件两种方案,帮助开发者高效实现功能,并附完整代码示例。重点解析了微信小程序接口的使用技巧和常见问题解决方案,确保数据安全与用户体验。

weixin_29280219的博客 567

Win10系统下Protel 99 SE元件库导入报错?3步搞定File is not recognized问题

本文详细介绍了在Win10系统下解决Protel 99 SE元件库导入报错'File is not recognized'的3步终极方案。通过手动修改配置文件、使用专用工具和优化系统兼容性设置,帮助用户快速解决这一经典PCB设计软件的兼容性问题,提升工作效率。

m3n5b7v8c9x的博客 792

Tensorflow 单元测试

源码编译tensorflow 源码编译tensorflow1 源码编译tensorflow2 1. 基本概念 单元测试 bazel bazel 使用指南 bazel是Google开源的一套编译构建工具,广泛应用于Google内部,包括TensorFlow项目。修改TensorFlow内部源码,需要使用bazel来编译,故有必要了解下bazel。bazel优点很多,主要有 构建快。支持增...

机器学习-深度学习-图像处理-opencv-段子 1533

Coverity本地增量C/C++代码检查(Linux)操作简介

Coverity 是一款精确的综合静态分析与应用安全测试 (SAST) 平台,它可以在编写代码时发现关键的缺陷和安全缺陷,防止它们变成安全漏洞、故障或维护缺陷。

1482

tflite文件解析

一. 安装flatbuffer 下载flatbuffer:https://github.com/google/flatbuffers 解压flatbuffer,进入其根目录 cd flatbuffers mkdir build cd build cmake .. make -j4 sudo make install flatc --version #输出flatbuffer版...

亦梦云烟的博客 5575

【SystemVerilog基础】SystemVerilog Assertion 概述

断言主要是描述复杂的设计行为;是传统验证方法学一个很好的补充,可以检查到电路内部细节,相当于一种白盒验证,传统的验证方法学是纯粹的黑盒验证!property跟上面的sequence差别不大,唯一有差别可能多了两个implication(|->,|=>)注意,当有前置条件时,不满足前置条件不会fail,而是伪真!上面这个因为没有前置条件,每个周期都会去检查!注意:当没有前置条件时,不满足条件会直接fail!

MoorePlus的博客 331

【Py/Java/C++/C/JS/Go六种语言OD独家2024E卷真题】20天拿下华为OD笔试之【固定滑窗】2024E-考勤信息【欧弟算法】全网注释最详细分类最全的华为OD真题题解

可上练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 617

Netron查看.tflite .pb .h5 模型结构

Netron查看.tflite .pb .h5 模型结构 模型查看工具 可以直接对常见格式模型进行查看 pip安装Netron pip install netron 直接运行netron命令 netron 查看模型 模型查看效果如下

qq_45175218的博客 1685

华为OD统一考试 - 模拟消息队列(Java & Python& JS & C++ & C )

让我们来模拟一个消息队列的运作,有一个发布者和若干消费者,发布者会在给定的时刻向消息队列发送消息,

算法大师! 3517

使用tflite预测数据

二话不说,直接上代码! import numpy as np import tensorflow as tf import cv2 as cv # Load TFLite model and allocate tensors. tflite_model = tf.contrib.lite.Interpreter(model_path="/home/zhang/anaconda3/model_...

weixin_36621501的博客 3793

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

生成.tflite文件过程中遇到的问题及解决方案

问题一: 官方给出的例子1: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/toco/g3doc/python_api.md#example-2-export-with-variables import tensorflow as tf img = tf.placeho...

liugan528的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

记录tensorflow2.0源码单元测试(使用bazel)流程——在windows10上进行测试

搞了好多天终于跑通了tensorflow源码中的各个以test结尾的测试文件,下面记录一下整个流程以及过程中踩过的无数的坑。 整个流程大概可以分为三个部分: 下载源码 安装bazel 运行测试程序 我在win10和ubuntu18.04上都分别进行了以上三个步骤。结果是:win10测试失败,ubuntu可以测试 win10在第三步”运行测试程序“步骤出现很多错误,根据stackoverflow上的一些方法解决了一部分,但最终仍有无法解决的问题。 stackoverflow上有一个与这个问题类似的贴子,讲

今天也是板砖的一天呢 1828

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

TFLite文件解析及格式转换

        随着深度学习越来越流行,工业生产不光在PC端应用场景丰富,在移动端也越来越凸显出深度学习的重要性及应用价值。由于嵌入式平台受存储、指令集限制,需要提供更小的网络模型,并且某些DSP平台不支持float指令。tensorflow提供TOCO转换工具能够自动生成量化为U8的TFLite文件。本文将介绍如何解析tflite的网络结构以及权重信息。 一、tflite文件格式      ...

SilentOB的博客 1万+

自定义训练 YOLOv8 分割模型,并以 TFlite 部署

如果你以前使用过目标检测,是否曾因边界框未正确包围物体而感到沮丧?或者它提供了错误的或不完整的包围?那可以尝试使用图像分割,它比目标检测更先进,因为它完全包围了物体。对物体进行分割之后,可以快速将其转换为最先进的TensorFlow Lite(TFLite)模型。什么是物体分割?物体分割是一个计算机视觉问题,包括检测和区分图像中的离散物体或感兴趣区域。它也被称为图像或实例分割。物体分割的目的是为图...

Warmer_Sweeter 2777

TFLite: 模型文件的结构和解析器

TFLite Model file Model table Model { // Version of the schema. version:uint; // A list of all operator codes used in this model. This is // kept in order because operators carry an index...

u011279649的专栏 8532

tflite 可视化

问题来源: 当我将要检查对比的两个tflite拷贝到和visualize.py同一个文件夹下面,并执行python visualize.py tflite.tflite tflite.html后遇到下图的报错: 回到源代码49行发现,原来C:\Users\iwtba\Downloads\tensorflow-master\third_party\flatbuffers下面确实没有fla...

qq_35649072的博客 1383

AI Benchmark V5 tflite 测试模型

AI Benchmark V5 tflite 测试模型 1. AI Benchmark V5 下载 https://ai-benchmark.com/download.html AI Benchmark V5.0.0 Preview - AI_Benchmark_V5_Preview.apk Android application package,APK:Android 应用程序包 2. AI Benchmark V5 tflite 测试模型 1. AI_Benchmark_V5_Preview.apk

程永强 4065
上一篇: 绑定进程的CPU核以及限制进程的CPU使用率
下一篇: Pytorch转tflite
IT修道者
IT修道者 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄17年 326粉丝 95原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值