保姆级教程 |TF-YOLOv3从本地训练到服务器部署全过程
bigegpt 2024-11-24 12:01 5 浏览
作者:52CV 粉丝
本文为 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,还可以扩展服务其他类型的模型,使用(之前训练的)模型来实施推理——基于客户端呈现数据的预测。
显著性能优势:
- 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 本项目主要亮点
- 修改了网络结构,支持TensorFlow-1.x 版本saved model模型导出以便进行TensorFlow-Serving部署,自己训练的数据集也可以在线部署, 并给出了 docker+python_client测试脚本, 支持HTTP跟GRPC协议 ;
- 修改了ulits文件,优化了demo展示,可以支持中文展示,添加了支持显示成中文的字体;
- 详细的中文注释,代码更加易读,添加了数据敏感性处理, 一定程度避免index的错误;
- 修改了训练代码,支持其他数据集使用预训练模型了,模型体积减小二分之一(如果不用指数平滑,可以减小到200多M一个模型,减小三分之二),图片视频demo展 示,都支持保存到本地,十分容易操作;
- 借鉴视频检测的原理, 添加了批量图片测试脚本,速度特别快(跟处理视频每一帧一样的速度);
- 添加了易使用的Anchors生成脚本以及各步操作完整的操作流程;
- 添加了 Mobilenetv2 backbone, 支持训练,预测,评估以及部署模型,模型大小70多M ;
- 增加 ONNX 导出 ;
- 增加 GRPC 远程过程调用 Serving 接口,加快预测速度 ;
- 增加训练好的安全帽检测模型,数据集跟模型都在release中可下载;
04 算法效果
模型精度方面:
由于采用多尺度训练, warm-up等策略, 在VOC2007+2012数据集上的MAP可达88.38%, 在安全帽数据集上可达98%。
速度方面:
视频预测中, 在 GTX1080 显卡上 FPS 约为 23, 尺度为 608, 416 尺度下更快。
服务器端速度, 结合 Flask 或者 Django 等框架, 处理一张用户请求的图片大概为100ms。
以上皆是基于 darknet 的 backbone, 换成 mobilenetv2 速度会更快。
- 项目链接:https://github.com/Byronnar/tensorflow-serving-yolov3
注:如果觉得有帮助, 麻烦给一个 star 哦, 有什么问题都可以在 issue 里面提, 看到一般都会回复的!
相关推荐
- 悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)
-
新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...
- 高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源
-
凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...
- 微服务架构实战:商家管理后台与sso设计,SSO客户端设计
-
SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...
- 还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑
-
在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...
- Seata源码—6.Seata AT模式的数据源代理二
-
大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...
- 30分钟了解K8S(30分钟了解微积分)
-
微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...
- SpringBoot条件化配置(@Conditional)全面解析与实战指南
-
一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...
- 一招解决所有依赖冲突(克服依赖)
-
背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...
- 你读过Mybatis的源码?说说它用到了几种设计模式
-
学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...
- golang对接阿里云私有Bucket上传图片、授权访问图片
-
1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...
- spring中的资源的加载(spring加载原理)
-
最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...
- Android资源使用(android资源文件)
-
Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...
- 如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)
-
深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...
- @Autowired与@Resource原理知识点详解
-
springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...
- java的redis连接工具篇(java redis client)
-
在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)