标签: tensorflow-lite

如何将在自定义循环子类 tf.keras.model 中训练的训练转换为 tflite?

tf.keras.Model在将自定义循环中经过训练的子类模型 ( )转换为 TFLite 时遇到问题。

假设我们有一个小的 CNN 架构,它使用输入数据 ( x) 和取决于批量大小和其他维度 ( add_info) 的附加信息:

class ContextExtractor(tf.keras.Model):
    def __init__(self):
        super().__init__()
        self.model = self.__get_model()

    def call(self, x, training=False, **kwargs):
        b, h, w, c = x.shape
        add_info = tf.zeros((b, h, w, c), dtype=tf.float32) 
        features = self.model(tf.concat([x, add_info], axis=-1), training=training)
        return features

    def __get_model(self):
        return self.__get_small_cnn()

    def __get_small_cnn(self):
        model = tf.keras.Sequential()
        model.add(layers.Conv2D(32, (3, 3), strides=(2, 2), padding='same'))
        model.add(layers.LeakyReLU(alpha=0.2))

        model.add(layers.Conv2D(32, (3, 3), strides=(2, 2), padding='same'))
        model.add(layers.LeakyReLU(alpha=0.2))

        model.add(layers.Conv2D(64, (3, 3), strides=(2, 2), …
Run Code Online (Sandbox Code Playgroud)

python tensorflow tensorflow-lite tf.keras tensorflow2.0

5
推荐指数
0
解决办法
556
查看次数

可视化 TFLite 图并获取特定节点的中间值?

我想知道是否有办法知道 tflite 中特定节点的输入和输出列表?我知道我可以获得输入/输出详细信息,但这不允许我重建Interpreter. 所以我要做的是:

interpreter = tf.lite.Interpreter(model_path=model_path)
interpreter.allocate_tensors()

input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
interpreter.get_tensor_details()
Run Code Online (Sandbox Code Playgroud)

最后 3 个命令基本上为我提供了似乎没有必要信息的字典。

所以我想知道是否有办法知道每个节点的输出去哪里?当然Interpreter以某种方式知道这一点。我们可以吗?谢谢。

python keras tensorflow tensorflow-lite tensorflow2.0

5
推荐指数
1
解决办法
5578
查看次数

如何解析姿态估计 tflite 模型的热图输出?

我从姿势估计 tflite 模型开始,用于获取人类的关键点。

https://www.tensorflow.org/lite/models/pose_estimation/overview

我已经开始拟合单个图像或一个人并调用模型:

img = cv.imread('photos\standing\\3.jpg')
img = tf.reshape(tf.image.resize(img, [257,257]), [1,257,257,3])
model = tf.lite.Interpreter('models\posenet_mobilenet_v1_100_257x257_multi_kpt_stripped.tflite')
model.allocate_tensors()
input_details = model.get_input_details()
output_details = model.get_output_details()
floating_model = input_details[0]['dtype'] == np.float32
if floating_model:
    img = (np.float32(img) - 127.5) / 127.5
model.set_tensor(input_details[0]['index'], img)
model.invoke()
output_data =  model.get_tensor(output_details[0]['index'])# o()
offset_data = model.get_tensor(output_details[1]['index'])
results = np.squeeze(output_data)
offsets_results = np.squeeze(offset_data)
print("output shape: {}".format(output_data.shape))
np.savez('sample3.npz', results, offsets_results)
Run Code Online (Sandbox Code Playgroud)

但我正在努力正确解析输出以获得每个身体部位的坐标/置信度。有没有人有解释这个模型结果的 python 例子?(例如:使用它们将关键点映射回原始图像)

我的代码(一个类的片段,它基本上直接从模型输出中获取 np 数组):

def get_keypoints(self, data):
        height, width, num_keypoints = data.shape
        keypoints = []
        for keypoint in range(0, …
Run Code Online (Sandbox Code Playgroud)

python machine-learning tensorflow tensorflow-lite

5
推荐指数
1
解决办法
2075
查看次数

如何在 (Android Studio) NDK (C / C++ API) 中运行 Tensorflow-Lite 推理?

信息

  • 我从 Keras 构建了一个 Tensorflow (TF) 模型并将其转换为 Tensorflow-Lite (TFL)
  • 我在 Android Studio 中构建了一个 Android 应用程序并使用 Java API 来运行 TFL 模型
  • 在 Java 应用程序中,我使用了 TFL 支持库(请参阅此处)和来自 JCenter 的 TensorFlow Lite AAR,方法是将其包含implementation 'org.tensorflow:tensorflow-lite:+'在我的build.gradle依赖项下

推理时间不是那么好,所以现在我想在 Android 的 NDK 中使用 TFL。

所以我在 Android Studio 的 NDK 中构建了 Java 应用程序的精确副本,现在我试图在项目中包含 TFL 库。我按照TensorFlow-Lite 的 Android 指南在本地构建了 TFL 库(并获得了一个 AAR 文件),并将该库包含在我在 Android Studio 中的 NDK 项目中。

现在我试图在我的 C++ 文件中使用 TFL 库,尝试#include在代码中使用它,但我收到一条错误消息:(cannot find tensorflow或我尝试使用的任何其他名称,根据我在我的CMakeLists.txt文件)。 …

c++ gradle android-ndk android-studio tensorflow-lite

5
推荐指数
1
解决办法
3680
查看次数

TensorFlow 伪量化层也从 TF-Lite 中调用

我正在使用 TensorFlow 2.1 来训练具有量化感知训练的模型。

这样做的代码是:

import tensorflow_model_optimization as tfmot
model = tfmot.quantization.keras.quantize_annotate_model(model)
Run Code Online (Sandbox Code Playgroud)

这将向图中添加假量化节点。这些节点应该调整模型的权重,以便它们更容易被量化为 int8 并使用 int8 数据。

训练结束后,我将模型转换并量化为 TF-Lite,如下所示:

converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = [give data provider]
quantized_tflite_model = converter.convert()
Run Code Online (Sandbox Code Playgroud)

在这一点上,我不希望在 TL-Lite 图中看到假量化层。但令人惊讶的是,我确实看到了它们。此外,当我在 TF-Lite C++示例应用程序中运行这个量化模型时,我发现它在推理过程中也在运行假量化节点。除此之外,它还对每层之间的激活进行反量化和量化。

这是 C++ 代码的输出示例:

节点 0 运算符内置代码 80 FAKE_QUANT
输入:1
输出:237
节点 1 运算符内置代码 114 QUANTIZE
输入:237
输出:238
节点 2 运算符内置代码 3 CONV_2D
输入:238 59 58
输出:167 运算符内置代码 6
临时代码:237
DEQUANTIZE
输入:167
输出:239
节点 4 运算符内置代码 80 FAKE_QUANT
输入:239
输出:166 …

quantization tensorflow tensorflow-lite quantization-aware-training

5
推荐指数
1
解决办法
946
查看次数

如何从 Tensorflow.js (.json) 模型转换为 Tensorflow (SavedModel) 或 Tensorflow Lite (.tflite) 模型?

我已经从谷歌下载了一个用于 Tensorflow.js (tfjs) 的预训练 PoseNet 模型,所以它是一个json文件。

但是,我想在Android上使用它,所以我需要.tflite模型。虽然有人在这里将类似的模型从 tfjs 移植到 tflite ,但我不知道他们转换了什么模型(PoseNet 有很多变体)。我想自己做这些步骤。另外,我不想运行一些有人上传到 stackOverflow 文件中的任意代码:

注意:小心不受信任的代码——TensorFlow 模型就是代码。有关详细信息,请参阅安全使用 TensorFlow。Tensorflow 文档

有谁知道任何方便的方法来做到这一点?

tensorflow tensorflow-lite tensorflow.js tensorflow2

5
推荐指数
1
解决办法
3213
查看次数

使用深度机器学习的 Android 文档边缘检测应用程序

我使用 OpenCV 边缘检测功能开发了 Android 文档扫描仪,该功能无法一直按预期工作,并且需要特殊背景才能像深色纯背景一样正常工作。此外,文档颜色可能会影响文档边缘检测的准确性。所有这些要求对应用程序用户来说都是真正的挫败感。

在互联网上搜索我了解到 google play 上的所有专业移动文档扫描仪都使用机器学习,如 Tensorflow 或任何其他 DML,以便扫描仪应用程序在任何情况下都能以极高的准确性工作。

我浏览了 TensorFlow 示例,例如图像分类和图像分割。我不知道这些是否可以用于文档边缘检测。任何人都可以帮助我使用 TensorFlow 开发 android 文档边缘检测应用程序(文档扫描仪)。

谢谢

android document edge-detection image-scanner tensorflow-lite

5
推荐指数
0
解决办法
374
查看次数

将保存的 tensorflow 模型转换为 tensorflow Lite 的正确方法是什么

我有一个与模型动物园中的所有模型相同的已保存的 tensorflow 模型。

我想将其转换为 tesorflow lite,我从 tensorflow github 中找到了以下方法(我的 tensorflw 版本是 2):

!wget http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8.tar.gz 
# extract the downloaded file
!tar -xzvf ssd_resnet50_v1_fpn_640x640_coco17_tpu-8.tar.gz
    
Run Code Online (Sandbox Code Playgroud)
!pip install tf-nightly
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model('ssd_mobilenet_v2_320x320_coco17_tpu-8/saved_model')
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.experimental_new_converter = True

converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS]
tflite_model = converter.convert()

open("m.tflite", "wb").write(tflite_model)
Run Code Online (Sandbox Code Playgroud)

但是转换模型的输出和输入形状与原始模型不匹配,请检查以下内容:

  • 原始模型输入和输出形状

在此处输入图片说明

  • 转换后的模型输入和输出形状

在此处输入图片说明

所以这里有问题!输入/输出形状应该与原始模型相匹配!任何的想法?

tensorflow tensorflow-lite tensorflow2.0

5
推荐指数
1
解决办法
1402
查看次数

缺少 Tensorflow Lite 中的一些增强树操作

我有一个Tensorflow基于的模型BoostedTreesClassifier,我想借助Tensorflow Lite.

但是,当我尝试将我的模型转换为Tensorflow Lite模型时,我收到一条错误消息,指出存在不受支持的操作(截至Tensorflow v2.3.1):

tf.BoostedTreesBucketize
tf.BoostedTreesEnsembleResourceHandleOp
tf.BoostedTreesPredict
tf.BoostedTreesQuantileStreamResourceGetBucketBoundaries
tf.BoostedTreesQuantileStreamResourceHandleOp
Run Code Online (Sandbox Code Playgroud)

添加tf.lite.OpsSet.SELECT_TF_OPS选项有点帮助,但仍有一些操作需要自定义实现:

tf.BoostedTreesEnsembleResourceHandleOp
tf.BoostedTreesPredict
tf.BoostedTreesQuantileStreamResourceGetBucketBoundaries
tf.BoostedTreesQuantileStreamResourceHandleOp
Run Code Online (Sandbox Code Playgroud)

我也试过Tensorflow v2.4.0-rc3,这将集合减少到以下一个:

tf.BoostedTreesEnsembleResourceHandleOp
tf.BoostedTreesPredict
Run Code Online (Sandbox Code Playgroud)

转换代码如下:

converter = tf.lite.TFLiteConverter.from_saved_model(model_path, signature_keys=['serving_default'])
converter.target_spec.supported_ops = [
    tf.lite.OpsSet.TFLITE_BUILTINS,
    tf.lite.OpsSet.SELECT_TF_OPS
]

tflite_model = converter.convert()
Run Code Online (Sandbox Code Playgroud)

signature_keys明确指定,因为导出的模型BoostedTreesClassifier#export_saved_model具有多个签名。

除了为不受支持的 ops 编写自定义实现之外,有没有办法在移动设备上部署这个模型?

machine-learning tensorflow tensorflow-lite

5
推荐指数
0
解决办法
177
查看次数

使用 Pycoral 库和 Google Coral USB 加速器进行二进制图像分类

我有一个使用 sigmoid 函数进行二元分类的 Keras 模型。我编译了我的模型以.tflite按照 Coral USB 的要求进行格式化以运行推理。但是,我注意到该脚本classify_image.py执行多类分类。因此,当我尝试对图像进行分类时,我对任何图像都得到了 100% 的预测。例如,我的模型将红外图像分类为发烧状态。即使我传球图像,它也会为发烧级提供 100% 阳性。

因此,我再次使用完全自定义的模型对植物使用 layer softmax 测试了多类模型,这一次它起作用了。它为植物 A、植物 B 和植物 C 提供了合理的 85% 准确度。

因此,我想知道我需要做哪些更改,才能使用二进制分类自定义模型与 Pycoral 配合使用。

这是我用于分类的代码:

import argparse
import time

from PIL import Image
from pycoral.adapters import classify
from pycoral.adapters import common
from pycoral.utils.dataset import read_label_file
from pycoral.utils.edgetpu import make_interpreter
import cv2 as cv
import numpy as np


def main():
  parser = argparse.ArgumentParser(
      formatter_class=argparse.ArgumentDefaultsHelpFormatter)
  parser.add_argument('-m', '--model', required=True,
                      help='File path of .tflite file.')
  parser.add_argument('-i', '--input', required=True, …
Run Code Online (Sandbox Code Playgroud)

python machine-learning tensorflow tensorflow-lite google-coral

5
推荐指数
0
解决办法
165
查看次数