YOLOv5釋出v6.0版本,看看都更新了啥?

語言: CN / TW / HK

小知識,大挑戰!本文正在參與“程式設計師必備小知識”創作活動。

環境

  • ubuntu 18.04 64bit
  • GTX 1070Ti
  • anaconda with python 3.8
  • pytorch 1.7
  • cuda 10.1

前言

就在昨天(2021年10月13日),yolov5 釋出了 V6.0 版本,這個新版本在 V5.0 的基礎上集成了很多的新特性,而且在網路結構上也做了微調,引入了全新的更小( Nano )的模型 P5(YOLOv5n) 和 P6(YOLOv5n6)。Nano 模型保持了 yolov5s 模型的深度( depth ),寬度( width ) 則是從0.5降到了0.25,經過這個操作後,總引數減少了 75%,從 7.5M 縮小到了 1.9M,這樣的話,就非常適合於移動端或者是 CPU 的環境。

在效能指標方面,V6.0 也有所提升,看下圖

yolov5 v6.0

新特性

下面整理了 V6.0 新增的主要特性

  • 整合了 Roboflow

    roboflow 前面我們提過了,它公開了很多非常有用的資料集,在 v6.0 上可以直接使用他們的資料集,參考 http://github.com/ultralytics/yolov5/issues/4975,非常的方便

  • 支援 tensorflowkeras模型的匯出

    使用 python export.py --include saved_model pb tflite tfjs 就可以完成 tensorFlowkerastflitetf.js 模型的匯出

  • 同時支援 OpenCV DNNONNX Runtime

    匯出的 onnx 同時支援 opencv dnnonnx runtime

    python export --weights yolov5s.pt --include onnx --opset 12 --dynamic

    在檢測的時候也可以使用指定的 onnxpython detect.py --weights yolov5s.onnx --dnn

  • 模型結構

    • Conv(k=6, s=2, p=2) 代替 Focus 層,主要是為了方便模型匯出
    • 使用 SPPF 代替 SPP
    • 減少 P3 主幹層 C3
    • SPPF 放在主幹的後面
    • 在最後一個 C3 主幹層中重新引入快捷方式
    • 更新超引數
  • 增加了 Flask REST API

    提供了 web api 的支援,遠端測試非常方便,常見的開放平臺都是這麼做的

flask api實踐

下載 V6.0 原始碼

git clone -b v6.0 http://github.com/ultralytics/yolov5.git cd yolov5/utils/flask-rest-api

安裝必要依賴並啟動服務

``` pip install flask

通過引數port可以指定特定埠,如--port 8080

python restapi.py ```

指令碼啟動過程中會去下載 yolov5 的原始碼和 yolov5s.pt 模型檔案,存放在 ~/.cache/torch/hub

(base) [email protected]:~/workshop/yolov5/data/images$ ls ~/.cache/torch/hub/ultralytics_yolov5_master/ CONTRIBUTING.md detect.py export.py LICENSE __pycache__ requirements.txt tutorial.ipynb val.py data Dockerfile hubconf.py models README.md train.py utils yolov5s.pt

這個下載的動作,預設情況下,在每次指令碼執行時都會進行。可以通過修改 restapi.py 來使用現有版本

```

將force_reload,由原來的True改為False

model = torch.hub.load("ultralytics/yolov5", "yolov5s", force_reload=False) ```

服務啟動後,我們來到客戶端,使用 curl 命令進行測試

curl -X POST -F [email protected] 'http://192.168.1.140:5000/v1/object-detection/yolov5s'

成功後,可以得到介面返回的結果

(base) [email protected]:~/workshop/yolov5/data/images$ curl -X POST -F [email protected] 'http://192.168.1.140:5000/v1/object-detection/yolov5s' [{"xmin":752.0,"ymin":46.0,"xmax":1148.0,"ymax":716.0,"confidence":0.875,"class":0,"name":"person"},{"xmin":100.0,"ymin":201.5,"xmax":1002.0,"ymax":718.5,"confidence":0.5795898438,"class":0,"name":"person"},{"xmin":438.25,"ymin":422.0,"xmax":509.75,"ymax":720.0,"confidence":0.5219726562,"class":27,"name":"tie"}]

或者

使用 postman 進行測試,使用的是 POST 請求,urlhttp://192.168.1.140

yolov5 v6.0

如果要使用 python 進行請求,專案中也給出了示例 example_request.py,使用的是 request 模組

關聯閱讀