高效物體檢測:使用ncnn框架部署YOLOv5

  • 前言

隨著人工智慧與機器學習技術的飛速發展,物體檢測已成為電腦視覺領域中的一個重要應用。YOLO(You Only Look Once)作為一種快速而準確的物體檢測方法,受到了廣泛關注和應用。然而,在資源有限的設備上,如樹莓派(Raspberry Pi),部署YOLOv5依然是一項挑戰。

ncnn是一個高效的神經網絡推理框架,特別適合於移動端和嵌入式設備。通過將YOLOv5與ncnn結合,我們可以在樹莓派上實現高效的物體檢測。

本篇博文將詳細介紹如何使用ncnn框架在樹莓派4B上部署YOLOv5。希望通過這篇博文,能夠幫助讀者順利地在樹莓派上實現YOLOv5的部署,並為讀者的物體檢測應用帶來啟發。

  • 樹莓派上的高效物體檢測:使用ncnn框架部署YOLOv5

首先我們使用的樹梅派為樹莓派4B,這需要在上面安裝ncnn。

參照ncnn官方github,首先先確認樹莓派系統已更新到最新版本:

sudo apt update

sudo apt upgrade

  

接下來,我們需要安裝相關依賴:

sudo apt install build-essential git cmake libprotobuf-dev protobuf-compiler libomp-dev libvulkan-dev vulkan-tools libopencv-dev

然後下載ncnn:

git clone https://github.com/Tencent/ncnn.git

cd ncnn

git submodule update –init

接下來進行編譯:

cd ncnn

mkdir -p build

cd build

cmake -DCMAKE_BUILD_TYPE=Release -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=ON ..

make -j$(nproc)

make install

 

這樣ncnn的建置部分就完成了。我們使用的YOLOv5版本為6.2,先在PC上完成訓練並將YOLOv5的.pt檔轉換為.onnx格式。轉換過程也可以在PC上完成,之後將轉換好的模型放入樹莓派上。



使用以下指令進行轉換:

在這裡會生成.param與.bin檔。在進行推論之前,需要對.param文件稍作修改,將最後三個reshape層的值改為0=-1,讓它能夠動態輸入。


接著,我們使用ncnn提供的example進行編譯。使用的文件是yolov5.cpp,在這之前需要做一些修改,主要是修改載入的模型,並將模型路徑放置在/ncnn/build/examples內。


還需要根據模型修正類別。


在extract部分,可以使用netron app查看節點並進行修改。

打開netron app,讀取.param文件,根據三個permute節點中的OUTPUTS依序修改相應的值。

修改完成後,重新執行:

make -j$(nproc)

make install

最後進入/ncnn/build/examples執行:

./yolov5

效果如下,成功在樹莓派上進行推論。

 

  • 結語

透過本文的介紹,我們成功地在樹莓派4B上部署了YOLOv5物體檢測模型,並利用ncnn框架實現了高效的推理。這一過程展示了在資源有限的嵌入式設備上,如何通過合理的軟硬體結合,達到優異的性能。從初步的環境配置和依賴安裝,到ncnn的下載和編譯,再到模型的轉換與調整,每一步都至關重要,確保了模型能夠在樹莓派上正常運行的重要環節。

我們在樹莓派上成功運行了YOLOv5模型,實現了實時的物體檢測。這不僅展示了ncnn在移動端和嵌入式設備上的強大性能,也證明了樹莓派作為一個小型且經濟實惠的設備,依然能夠在複雜的機器學習應用中大放異彩。希望通過本文的介紹,讀者能夠順利地在樹莓派上實現YOLOv5的部署。

未來,希望將類似的技術應用到更小型的設備,比如MCU利用在上TinyML等,以適應這些資源極其有限的平台。同時需要探索新的深度學習框架和技術,以實現在這些平台上的有效部署。

 

  • Q&A
  1. Q: 為什麼選擇樹莓派4B來部署YOLOv5?

A: 樹莓派4B是一個小型且經濟實惠的設備,擁有較高的性能和靈活性,適合進行各類嵌入式應用。通過在樹莓派上部署YOLOv5,我們可以實現便攜的物體檢測,這對於開發者和愛好者來說都是非常有吸引力的選擇。

 

  1. Q: ncnn框架有什麼優勢?

A: ncnn是一個高效的神經網絡推理框架,特別適合於移動端和嵌入式設備。它支持多種加速技術(如Vulkan和CPU加速),能夠在資源有限的設備上提供卓越的性能。ncnn框架還具有良好的兼容性和易用性,使其成為在嵌入式環境中部署深度學習模型的理想選擇。

 

  1. Q: 在部署過程中,為什麼需要修改.param文件?

A: 在部署過程中,修改.param文件是為了確保模型能夠適應動態輸入。將最後三個reshape層的值改為0=-1,使得模型能夠接受不同大小的輸入圖像,從而提高模型的靈活性和適應性。

  1. Q:YOLOv5推論時間較長,是否有推論時間更短的選擇?

A: 可以參考YOLO-FastestV2。該模型相較於YOLOv5,捨去了一些精度以獲得更短的推論時間。如何結合ncnn框架進行部署,作者在GitHub上有詳細的說明,您可以參考這些資料來實現更高效的推論。

 

  1. Q: 樹莓派上部署YOLOv5後,可以應用在哪些實際場景中?

A: 樹莓派上部署YOLOv5後,可以應用於多種實際場景,如:

智能家居:進行家庭安全監控和物體識別。

自動駕駛:實現低成本的車輛和行人檢測。

農業監測:識別作物病害和害蟲。

零售業:客流量統計和商品監控。

醫療設備:實現便攜式醫療影像分析。

 

  • 引用

yolov5 github

Yolo-FastestV2 github

ncnn github

how to build ncnn

 

 

 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論