在树莓派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文本汉化成中文,这样识别就很好理解了。 只是这个模型不行,大熊猫识别成了哈士奇,松鼠识别成了...