自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用 Yolo-NAS 輕松進行對象檢測

開發(fā) 機器視覺
在這個例子中,我將向您展示如何在圖像和視頻上運行自己的 YOLO 模型,以便您可以執(zhí)行對象檢測和分割。

學(xué)習(xí)如何使用 Python 和 yolo-NAS 進行對象檢測。YOLO(You Only Look Once,你只看一次)徹底改變了計算機視覺領(lǐng)域。YOLO 的第一個版本由 Joseph Redmon 等人在 2016 年發(fā)布,它在速度和準(zhǔn)確性方面都打破了基準(zhǔn)。在對象檢測方面,YOLO 一直是數(shù)據(jù)科學(xué)家和機器學(xué)習(xí)工程師的最愛,并且當(dāng)涉及到圖像中實體的分割時,它是首選的模型。自從它推出以來,YOLO 經(jīng)過多次新迭代,改進了以前版本的幾個缺點,即:

  • 改進了底層深度學(xué)習(xí)模型的架構(gòu)。
  • 實施了提高性能的替代方案,如數(shù)據(jù)增強技術(shù)。
  • 將原始的 YOLO 代碼遷移到使用 pytorch 訓(xùn)練和部署框架。
  • 改進了小對象的檢測機制。

需要意識到的一件重要事情是,每個計算機視覺和對象檢測模型都是根據(jù)兩個參數(shù)進行評估的:準(zhǔn)確性(由與計算機視覺分割相關(guān)的指標(biāo)定義)和速度(由推理中的延遲定義)。下面展示了如何評估 CV 算法的一個例子:

不同 YOLO 模型與 EfficientDet 的比較 — 圖片來源:https://blog.roboflow.com/yolov5-is-here/

在這個例子中,我將向您展示如何在圖像和視頻上運行自己的 YOLO 模型,以便您可以執(zhí)行對象檢測和分割。

加載模型

我們將從加載大型 YOLO 模型的預(yù)訓(xùn)練版本開始。在這種情況下,我們將使用帶有 NAS(神經(jīng)架構(gòu)搜索)的 YOLO 實現(xiàn)。神經(jīng)架構(gòu)搜索是神經(jīng)網(wǎng)絡(luò)優(yōu)化技術(shù)的常見實現(xiàn),以改善深度學(xué)習(xí)模型中參數(shù)的自動選擇。我們將使用的模型是在 COCO 數(shù)據(jù)集(上下文中的常見對象)上訓(xùn)練的。這些權(quán)重已經(jīng)包含了在圖像上檢測對象的非常好基線。

首先,讓我們向我們的環(huán)境添加一些我們將需要的庫,即:

  • torchinfo,一個幫助可視化我們神經(jīng)網(wǎng)絡(luò)架構(gòu)的助手;
  • super_gradients,我們將用來加載模型的庫。
!pip install torchinfo
!pip install super_gradients

接下來,我們將加載我們需要的函數(shù)和庫:

from super_gradients.training import models
from torchinfo import summary
import torch

注意:如果您使用的是 Google Colab,并且在安裝 super_gradients 后提示重新啟動內(nèi)核,請執(zhí)行。這是在該環(huán)境中使用 super_learners 的已知問題。然后,我們開始使用 super_gradients 將我們的 COCO 預(yù)訓(xùn)練模型加載到內(nèi)存中:

# Using Yolo NAS Large
yolo_nas_l = models.get("yolo_nas_l", pretrained_weights="coco")

我們已經(jīng)在 yolo_nas_l 中存儲了預(yù)訓(xùn)練模型。使用 models 來獲取這些預(yù)訓(xùn)練版本的 YOLO 是非常容易的。torchinfo 為我們提供了模型架構(gòu)的非??岬囊晥D:

summary(model=yolo_nas_l,
        input_size=(16, 3, 640, 640),
        col_names=["input_size", "output_size", "num_params", "trainable"],
        col_width=20,
        row_settings=["var_names"]
)

出于好奇,如果您想檢查 YOLO 架構(gòu)(來自原始論文),請查看下面的圖片:

圖片來源:https://www.researchgate.net/publication/329038564_Complexity_and_accuracy_analysis_of_common_artificial_neural_networks_on_pedestrian_detection

這是我們 YOLO NAS 模型架構(gòu)的預(yù)覽:

Yolo-NAS 模型架構(gòu)預(yù)覽

分割圖像

讓我們從一張以桌子為中心的簡單圖像開始,周圍有各種物體。在這張圖像中,我們可以看到:

  • 兩把椅子
  • 一張桌子
  • 兩盞燈
  • 一臺電腦
  • 耳機
  • 一盆植物

在我們的代碼中,我們只請求在模型置信度超過 55% 的地方繪制邊界框。只有這些項目的標(biāo)簽才會出現(xiàn)在分割后的圖像中。

url = "https://images.unsplash.com/photo-1476365518243-f738bf58443d?q=80&w=2787&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"
yolo_nas_l.predict(url, cnotallow=0.55).show()

我們的模型能夠自信地檢測到椅子、筆記本電腦、桌子和植物(盡管它錯過了燈、耳機和那個高科技水壺)。讓我們看看如果我們降低我們的置信度閾值會發(fā)生什么:

url = "https://images.unsplash.com/photo-1476365518243-f738bf58443d?q=80&w=2787&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"
yolo_nas_l.predict(url, cnotallow=0.40).show()

降低我們的閾值導(dǎo)致了我們第一次的誤分類。在這種情況下,耳機被錯誤地識別為計算機鼠標(biāo)。降低閾值將不可避免地導(dǎo)致更多的對象檢測和分割錯誤。讓我們嘗試一張更擁擠的場景的圖片:

我們的 YOLO 模型將分割哪些對象?由于這張圖片有更多的元素,我將降低推理的置信度:

url = "https://images.unsplash.com/photo-1496664444929-8c75efb9546f?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"
yolo_nas_l.predict(url, cnotallow=0.3).show()

正如我們所看到的,YOLO 未能分割一些對象 — 特別是更小/更細的對象。盡管如此,對于如此擁擠的圖像來說,性能相當(dāng)不錯。為了提高一些性能,與您的用例相關(guān)的圖像的遷移學(xué)習(xí)非常重要。

在接下來的部分中,我們將學(xué)習(xí)如何使用 YOLO-NAS,但是在分割視頻的背景下。

對于這部分,我將使用 Youtube 上的一個交通短視頻:

交通視頻 — https://www.youtube.com/watch?v=CftLBPI1Ga4

我們將從下載這個視頻到我們的 Google Colab 環(huán)境開始。我們還可以使用 IPython 的便捷 YoutubeVideo 功能來顯示視頻:

from IPython.display import YouTubeVideo


video = YouTubeVideo('CftLBPI1Ga4')
display(video)

要下載我們的視頻,我將使用 youtube-dl:

video_url = f'https://www.youtube.com/watch?v=CftLBPI1Ga4'


!pip install -U "git+https://github.com/ytdl-org/youtube-dl.git"
!python -m youtube_dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4' "$video_url"

我們只需要設(shè)置分割視頻的輸出路徑,就可以將視頻通過 YOLO 模型傳遞了!

input_video_path = f"/content/Cars, Busy Streets, City Traffic - No Copyright Royalty Free Stock Videos-CftLBPI1Ga4.mp4"
output = "traffic.mp4"

一切就緒!讓我們運行我們的分割模型:

device = 'cuda' if torch.cuda.is_available() else "cpu"
yolo_nas_l.to(device).predict(input_video_path).save(output)

注意:根據(jù)您本地系統(tǒng)的配置和 Google Colab 上 GPU 的可用性,此代碼可能需要一些時間來運行。

分割后的交通視頻截圖

YOLO 模型非常強大!您可以使用它們通過幾行代碼快速分割圖像或視頻。使用我在這里展示的代碼,您可以非常容易地使用自己的媒體進行實驗,并嘗試這個偉大的計算機視覺模型。正如您可能注意到的,特別是在復(fù)雜的圖像或視頻中,YOLO 基礎(chǔ)模型仍然有一些需要糾正的缺陷。

責(zé)任編輯:趙寧寧 來源: 小白玩轉(zhuǎn)Python
相關(guān)推薦

2023-11-13 22:17:54

YOLO-NAS目標(biāo)檢測

2024-11-29 16:10:31

2024-09-09 16:35:10

YOLO模型

2024-10-29 16:18:32

YOLOOpenCV

2025-02-18 08:00:00

C++YOLO目標(biāo)檢測

2021-07-01 08:00:00

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)架構(gòu)

2009-05-20 14:43:38

ibmdwEasyMock測試

2024-09-12 17:19:43

YOLO目標(biāo)檢測深度學(xué)習(xí)

2020-10-15 12:00:01

Python 開發(fā)編程語言

2024-10-09 17:02:34

2024-11-28 15:56:05

YOLOEasyOCRPython

2024-12-04 16:50:35

YOLO模型計算機視覺

2010-02-03 16:13:37

2023-11-01 18:02:33

RayPython分布式

2025-01-06 07:15:00

深度學(xué)習(xí)動態(tài)圖異常檢測人工智能

2018-05-08 14:25:22

Pythondlib人臉檢測

2023-11-20 09:47:14

自動駕駛視覺

2024-11-27 16:06:12

2025-01-22 11:10:34

點贊
收藏

51CTO技術(shù)棧公眾號