• 问答
  • 技术
  • 实践
  • 资源
TensorFlow-YOLOv3 从本地训练到服务器部署全过程 | 保姆级教程
技术讨论
来源:52CV粉丝 OpenCV学堂 我爱计算机视觉


本文为 52CV 粉丝投稿,分享对已开源的 tensorflow-yolov3 版本进行许多细节上算法改进,步骤详细,非常适合新手入门。

01

项目简要说明

本项目主要对原 tensorflow-yolov3 版本做了许多细节上的改进, 增加了TensorFlow-Serving 工程化部署, 训练了多个数据集,包括 Visdrone2019, 安全帽等数据集, 安全帽上 mAP 在 98% 左右, 推理速度1080上608 的尺寸大概25fps。本项目配有完善的说明, 如想你也想入门 TensorFlow 服务端部署, 那么, 这个项目是你非常好的选择.


02

TensorFlow Serving 介绍及优势

PyTorch越来越受欢迎, 但是TensorFlow在工业界的应用依旧比较广泛,

而TensorFlow Serving作为一个用于机器学习模型Serving的高性能开源库,它可以将训练好的机器学习模型部署到线上,使用gRPC作为接口接受外部调用。TensorFlow Serving支持模型热更新与自动模型版本管理,具有非常灵活的特点。

系统非常适用于大规模运行能够基于真实情况的数据并会发生动态改变的多重模型。它给出了一个把模型应用到实际生产的解决方案。

能够简化并加速从模型到生产的过程。它能实现在服务器架构和 API 保持不变的情况下,安全地部署新模型并运行试验。除了原生集成 TensorFlow,还可以扩展服务其他类型的模型,使用(之前训练的)模型来实施推理——基于客户端呈现数据的预测。

file

显著性能优势:

  • Cpu推理速度优化(5倍于Django+模型)

  • 支持分布式tensorflow模型

  • 模型动态加载卸载(无需中断服务,就能实现模型的版本替换)

  • 多个模型同时提供服务

  • 多编程语言客户端(C++,JAVA,GO等)

  • GPU推理加速

  • 多版本便捷管理

  • 本项目还采用了GRPC部署, 速度更加快, 亲测速度比HTTP快35%左右

gRPC显著性能优势:

  • 二进制框架和压缩。HTTP/2协议在发送和接收方面都很紧凑和高效

  • 通过单个TCP连接复用多个HTTP/2调用。多路复用消除了线头阻塞

  • TensorFlow预测API被定义为Protobufs。因此,可以通过生成必要的tensorflow和tensorflow_serving protobuf python 存根(stubs)

  • 在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法

  • 减少数据传输的时间,不用频繁

  • gRPC 是基于 HTTP/2 协议的,要深刻理解 gRPC,理解下 HTTP/2 是必要的,这里先简单介绍一下 HTTP/2 相关的知识,然后在介绍下 gRPC 是如何基于 HTTP/2 构建的


03

本项目主要亮点

  1. 修改了网络结构,支持TensorFlow-1.x 版本saved model模型导出以便进行TensorFlow-Serving部署,自己训练的数据集也可以在线部署, 并给出了 docker+python_client测试脚本, 支持HTTP跟GRPC协议 ;

  2. 修改了ulits文件,优化了demo展示,可以支持中文展示,添加了支持显示成中文的字体;

  3. 详细的中文注释,代码更加易读,添加了数据敏感性处理, 一定程度避免index的错误;

  4. 修改了训练代码,支持其他数据集使用预训练模型了,模型体积减小二分之一(如果不用指数平滑,可以减小到200多M一个模型,减小三分之二),图片视频demo展    示,都支持保存到本地,十分容易操作;

  5. 借鉴视频检测的原理, 添加了批量图片测试脚本,速度特别快(跟处理视频每一帧一样的速度);

  6. 添加了易使用的Anchors生成脚本以及各步操作完整的操作流程;

  7. 添加了 Mobilenetv2 backbone, 支持训练,预测,评估以及部署模型,模型大小70多M  ;

  8. 增加 ONNX 导出 ;

  9. 增加 GRPC 远程过程调用 Serving 接口,加快预测速度 ;

  10. 增加训练好的安全帽检测模型,数据集跟模型都在release中可下载;


04

算法效果

模型精度方面:

由于采用多尺度训练, warm-up等策略, 在VOC2007+2012数据集上的MAP可达88.38%, 在安全帽数据集上可达98%。

file
file

速度方面:

视频预测中, 在 GTX1080 显卡上 FPS 约为 23, 尺度为 608, 416 尺度下更快。

服务器端速度, 结合 Flask 或者 Django 等框架, 处理一张用户请求的图片大概为100ms。

以上皆是基于 darknet 的 backbone, 换成 mobilenetv2 速度会更快。

注:如果觉得有帮助, 麻烦给一个 star 哦, 有什么问题都可以在 issue 里面提, 看到一般都会回复的!


相关推荐:
tensorflow 训练好的模型怎么调用?

  • 0
  • 0
  • 649
收藏
暂无评论