keras-and-tensorflow-serving
Keras InceptionV3 图像分类模型的 TensorFlow Serving 生产级部署方案,含 Flask API 和完整模型导出流程
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Keras InceptionV3 图像分类模型的 TensorFlow Serving 生产级部署方案,含 Flask API 和完整模型导出流程
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
很多 AI 爱好者都有过这样的经历:在 Jupyter Notebook 里调通了一个图像分类模型,运行效果不错,却不知道怎么把它变成一个真正能用的服务。同事不能直接调用、无法接入产品系统、更谈不上在生产环境中扩展。
himanshurawlani/keras-and-tensorflow-serving 正是为解决这一痛点而生的开源项目。它演示了如何将训练好的 Keras 模型通过 TensorFlow Serving 暴露为高性能 REST API,再由 Flask 提供友好的 HTTP 接口,打通从模型训练到在线服务的最后一公里。
TensorFlow Serving 是 Google 开源的 TensorFlow 模型推理服务框架,专为生产环境设计,支持模型热加载、多版本管理、高吞吐 REST/gRPC 接口。相比直接用 Flask 调用 Keras 模型,TensorFlow Serving 具有显著优势:
本项目作者 Himanshu Rawlani 在 Medium 平台发表了一篇详细教程,通过一个完整的端到端案例,手把手讲解从训练 Keras InceptionV3 模型到上线服务的全流程。项目代码即为教程配套源码。
项目采用经典的前后端分离推理架构,由三个组件协同工作:
第一层:Flask HTTP API 服务端(端口 5000)
Flask 作为 HTTP 网关,接收客户端请求,提供两个接口:
GET /hello/ — 健康检查接口POST /imageclassifier/predict/ — 图像分类核心接口,接收 base64 编码的图片,返回 ImageNet 1000 类分类结果客户端只需将图片转为 base64 字符串 POST 到该接口,即可获得 JSON 格式的分类结果。
第二层:TensorFlow Serving 模型推理服务(端口 9000)
独立运行的 TensorFlow Serving 进程加载 SavedModel 格式的模型文件,通过 REST API 接收推理请求。代码中使用 http://localhost:9000/v1/models/ImageClassifier:predict 接口。
第三层:Keras InceptionV3 预训练模型
模型使用 Keras 内置的 InceptionV3 预训练权重(在 ImageNet 数据集上训练),支持 1000 类图像分类。项目提供了 scripts/download_inceptionv3_model.py 一键下载预训练权重,scripts/export_saved_model.py 将 .h5 模型转换为 TensorFlow SavedModel 格式。
关键代码片段(Flask 推理流程):
# 图片预处理:resize 到 224x224,归一化
img = image.img_to_array(image.load_img(
BytesIO(base64.b64decode(request.form[b64])),
target_size=(224, 224))) / 255.
img = img.astype(float16)
# 构建 TensorFlow Serving 请求 payload
payload = {instances: [{input_image: img.tolist()}]}
# POST 到 TF Serving
r = requests.post(
http://localhost:9000/v1/models/ImageClassifier:predict,
json=payload)
# 解析并返回 ImageNet 分类结果
pred = json.loads(r.content.decode(utf-8))
return jsonify(inceptionv3.decode_predictions(
np.array(pred[predictions]))[0])
1. 全链路覆盖,学习价值极高
从下载预训练模型、转换模型格式、配置 TensorFlow Serving、编写 Flask API,到最后用脚本测试接口,每个环节都有完整可运行的代码。对于想学习模型部署的开发者,这是少有的完整端到端教程。
2. 代码简洁,逻辑清晰
整个 Flask 服务端 app.py 不足 50 行代码,核心逻辑一目了然。没有复杂的依赖注入、没有冗余的框架代码,直击主题。
3. 实用的自动化脚本
scripts/auto_cmd.py 提供了一键启动脚本,自动启动 TensorFlow Serving 和 Flask 服务,支持优雅退出(Ctrl+C 或输入 exit)。
本项目不提供 Dockerfile 和 docker-compose,无法一键容器化部署。需要手动配置:
tensorflow_model_server)部署流程分为三步:① 下载 InceptionV3 预训练权重;② 导出为 SavedModel 格式;③ 启动 TensorFlow Serving 和 Flask 服务。
项目局限性:
keras-and-tensorflow-serving 是一个出色的教育型开源项目,它用最少的代码展示了 Keras + TensorFlow Serving + Flask 的完整部署流程。尽管不适用于现代 TensorFlow 2.x 生产环境,但作为理解模型服务化概念、学习 TensorFlow Serving 用法的入门教程,仍然极具价值。


TensorFlow Serving + Flask 架构测试图片(来自本仓库 test_images 目录)