TensorFlow-YOLOv3 從本地訓練到服務器部署全過程
本文爲 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
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/z3--7liaxs1armmGoIdcjA