在树莓派5上配置TensorFlow Lite(TFLite)

1. 安装TensorFlow Lite运行时

如果只需要运行TFLite模型,建议安装轻量级的tflite-runtime,而不是完整的TensorFlow,这样可以节省磁盘空间并提高效率。

pip3 install tflite-runtime --break-system-packages

如果需要访问其他Python API(如TensorFlow Lite Converter),则需要安装完整的TensorFlow。

pip3 install tensorflow --break-system-packages
pip3 install opencv-python

2. 下载并使用TFLite模型

  • 下载预训练模型:可以从TensorFlow官网下载预训练的TFLite模型。例如,下载MobileNetV1模型:
mkdir -p ~/tflite_model
cd ~/tflite_model
wget https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_1.0_224.tgz
wget https://storage.googleapis.com/download.tensorflow.org/data/ImageNetLabels.txt
  • 编写推理代码:使用Python编写代码加载模型并进行推理。以下是一个简单的图像分类示例:
import numpy as np
import tflite_runtime.interpreter as tflite
import cv2


# 加载模型
model_path = "./mobilenet_v1_1.0_224.tflite"

interpreter = tflite.Interpreter(model_path=model_path)
interpreter.allocate_tensors()

# 获取输入输出张量
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# 图像预处理
def preprocess_image(image_path):
    img = cv2.imread(image_path)
    img = cv2.resize(img, (224,224))
    img = np.expand_dims(img, axis=0).astype(np.float32) / 255.0
    return img

image = preprocess_image("./pic2.jpg")

# 运行推理
interpreter.set_tensor(input_details[0]['index'], image)
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])

# 输出推理类别
labels = [line.strip() for line in open("./ImageNetLabels.txt")]
if len(labels) < 1001:
    labels.append("Unknown")

top_class = np.argmax(output_data)
print(f"分类结果: {labels[top_class]}")

  • 量化优化:在模型转换阶段,可以对模型进行量化,以减少模型大小和提高推理速度。
import tensorflow as tf

# 加载原始Keras模型
model = tf.keras.models.load_model('custom_model.h5')

# 转换为TFLite模型并启用量化优化
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()

with open('optimized_model.tflite', 'wb') as f:
    f.write(tflite_model)

4. 其他注意事项

  • 确保树莓派5的系统和Python环境已正确配置。
  • 如果需要实时推理,可以结合OpenCV处理摄像头输入。

5. 汉化lables里面的内容

可以找个大预言模型帮你把labels文本汉化成中文,这样识别就很好理解了。 只是这个模型不行,大熊猫识别成了哈士奇,松鼠识别成了...

001

002