YOLOv5-CoLab與Docker實作

Share This Post

1. 影像辨識的歷史

1.1 資料集與演算法的選擇

2006年之前,影像辨識的方式仍舊處於傳統的處理方式(型態學支持向量機SVM),當時的科學家們認為電腦辨識的泛化程度不高是因為演算法寫的不夠好的關係。但是李飛飛敏銳的察覺到,或許資料才是真正的關鍵。

因此,李飛飛於2007開始建立 ImageNet 開放資料集,並且透過大量人工抓取、標記的方式來完成,耗時2年,最終完成一個擁有大約1500萬張照片、22000個類別的開放大資料集。但是就算完成了這個創舉,對於當時的人們來說,對於使用更豐富的資料來提高正確率的方式仍抱有遲疑,甚至出現了「連少量物件都沒辦法辨識、何必使用大量資料」的說法。

1.2 持續了8年的競賽、足以改變一切

2010年,李飛飛利用已建立完備的ImageNet資料集,舉辦了 ILSVRC(ImageNet Large-Scale Visual Recognition Challenge) 影像辨識競賽,舉辦方會從資料集中取出1000個類別、分別大約有1000張照片的子集進行競賽。一開始,大家仍是將焦點放在演算法上,然而,2012年所舉辦的影像辨識競賽,徹底顛覆了人們的認知。

當時的 ILSVRC 競賽已具備不小的規模,也有大公司參與,但仍使用著傳統的演算法模型(SVM等)。而被稱為神經網路之父的Hinton麾下的高徒 Alex Krizhevsky 初次將神經網路(CNN 卷積神經網路)應用於模型建立,並且使用 GPU 進行訓練。而這兩個決定不僅使他獲得冠軍,更是將他所建立的模型正確率(15.4%)與第二名差距拉開超過10%以上,徹底的改變了整個影像辨識的生態,而從這年以後的所有模型,紛紛都採用GPU進行訓練,並且也漸漸的使用神經網路取代 SVM 。

而正是這場競賽,帶動了 GPU 的崛起與成長、更是將神經網路帶入到另一個境界之中,從這場競賽之後的模型正確率開始快速上升,到了2015年,Microsoft 使用自家研究院所設計的殘差神經網路(ResNet)以3.5%的錯誤率正式突破人類肉眼極限(5%)。

以下為使用GPU與CPU操作圖像的簡易理解

  • 以下為歷屆冠軍的辨識錯誤率
4749_udebe9stqa.webp

到了2017年,電腦影像辨識能力已與人類無異,甚至更加優秀,因此再繼續專注於影像辨識這個單一領域已經沒有太大意義。因此李飛飛決定2017年將會是最後一屆的 ILSVRC 競賽,之後將會與她創立的另一個資料分析平台 Kaggle 結合,並且展開對於更加複雜的資料結構進行研究(EX: 圖像理解、偏差問題等)。

2. CNN 卷積神經網路

2.1 CNN之前

影像處理對於當時的演算法來說計算量太大,導致速度緩慢,造成了使用成本過高以及效率低下。並且因為無法保留圖像特徵,因此得到的結果也不如預期。

Untitled

2.2 CNN原理

整個 CNN 結構主要分成幾個部分 : 卷積層 ( Convolution layer )、池化層 (Pooling layer) 以及最後一個全連接層 ( Fully Connected layer )

2.2.1 卷積層**( Convolution layer )**

進行特徵萃取的層級,是整個CNN的精神所在。

在這一層,演算法會透過**卷積核(Convolution kernel)**進行特徵提取,將隱藏在圖像中的重要資訊取出並輸出到下一層。

透過這種演算法,能夠克服傳統演算法所遇到的困難,像是容易受到噪音(胡椒粉)、離群值(異常點)的影響,並且也能透過更改核的權重組合來達到提取不同的特徵。

在人工智慧領域內常聽到的訓練就是在指這個部分,透過反向傳播法對卷積核內的權重組合進行調整,最終會得到最符合的結果。由於訓練時我們已經無法準確得知是經過何種運算才得到此權重,因此這層又稱作黑盒子。

  • 三原色矩陣透過相對應的卷積核萃取特徵後所得到的降維結果
Untitled
  • 透過尋邊卷積核所提取出的特徵影像
Untitled

2.2.2 池化層**(Pooling layer)**

池化層能夠將影像進行**subsampling(子取樣),從而降低影像大小,並將卷積層提取出的特徵資訊保留下來。**經過此層級後,原始影像會被降維,並映射成較小的特徵影像,大幅降低的傳統影像處理所需耗費的時間及計算成本。透過此演算法將多餘資訊去除後,能夠有效地降低過擬合的產生。

此層級的計算方式與卷積類似,都是透過一個矩陣進行滑動計算,但是結果是不相同的。卷積的目的是為了要提取出特徵,而池化是為了保留特徵並將影像進行降維(壓縮)。

  • 池化層的概念

2.2.3 全連接層(FC, Fully Connected)

此層可以當作分類器,所有在前面所進行的計算以及產出的影像皆保留二維樣式,但是到了這一層後,將會被壓縮成一維的形式,並進行分類,找出這些特徵最有可能對應到的物體。

傳統的影像處理方式會直接使用全連接來找出特徵值,但是這樣的做法會將位置資訊保留,造成相同物體移動到不同位置後就無法辨識的結果,也就是過擬合。但是在CNN中,我們已經將影像資料經過了許多層的卷積及池化,有效的濾除掉無用的資訊,並保留下重要特徵,因此不受位置及其他雜訊影響,也就是位移等變性。

  • 全連接依照被激活的特徵進行最有可能的物體的選擇
Untitled

2.3 總結

透過CNN改進的神經網路,不僅能夠大幅降低運算成本,也能夠提取出影像中的重要資訊的特徵,並將雜訊及其他較不重要的資訊進行濾除,從而解決物體位置不同所帶來的影響。下面列出使用CNN後辨識能力提升的可視化動畫。

。位移等變性

Untitled

。滑動窗口卷積

Untitled

。特徵綑綁

Untitled

雖然將傳統神經網路透過CNN改進可以大幅減低運算時間及成本,但是仍無法應用在即時檢測上。因此下一單元將介紹一個能夠應用在即時檢測的演算法,也是我們這次的主題 — YOLO。

3. YOLO(You Only Look Once)

Untitled

3.1 前言

由於YOLO目前已經發展到了第七代,也就是YOLOv7,其中涵蓋的技術含量非常大。所以這邊只會大概提到相關概念。

在CNN的概念中,我們知道大致的運作原理,也就是卷積→池化→全連接,這種運作方式也稱作二階段(Two-stage)方法或啟發式(selective search)方法。相較於一階段方法(One-stage),具有較高的準確度,缺點就是速度慢。而在不受時間要求的前提下,我們能夠對影像辨識的任務設計多層CNN架構來提高精確度,但是計算成本就會提升。對於某些具有時間要求的任務,顯然是無法勝任。

此外,CNN層數也不是越多越好,由於每一層都會學習前一層輸出的特徵,因此在層數提高的狀況下,就會遇到困擾科學家已久的問題 — 梯度消失(Gradient Vanishing)以及梯度爆炸(Gradient Explored)。

  • 梯度消失與梯度爆炸

【QA】什麼是梯度消失(Gradient Vanishing)與梯度爆炸(Gradient Explored)? – Cupoy

而Yolo運用的則是一階段方法,因此具有較快速的運作時間,但相對的準確率就會稍微下降。

3.2 YOLO 原理

假設今天需要分辨的物件有3個類別(行人c1、汽車c2、機車c3),則步驟如下:

3.2.1 將圖片分割成 S * S 的網格

Untitled

3.2.2 對每一個網格進行圖像分類及定位處理,獲得一個標籤

Untitled

其中:

  • pc → 物件是否存在網格中的機率
  • bx、by、bh、bw → 指定邊界框
  • c1、c2、c3 代表類別 → 如果物件被標記為汽車,則 c1 = 1,其餘為0

。邊界框計算:

上述標籤中的bx、by、bh、bw代表物件相對於網格的數值,以右邊網格為例:

Untitled

每一格網格都會被賦予固定的正規化座標 → 左上為 (0, 0),右下為(1, 1)

Untitled

bx、by代表物件與網格中心點的x、y座標,可表示為下圖

Untitled

bh、bw則是邊界框的高度與寬度與網格的比值,此圖bh約為0.9、bw約為0.5,整體標前數值如下

Untitled

3.2.3 預測結果判斷

。IoU(並集交叉區域)

假設汽車的預測邊界框以及實際邊界框為下圖所示,使用IoU方式去計算這兩個框的重疊面積比例,若是大於指定閾值,則說明此次預測足夠好。閾值越大,預測就越準確,同時也代表著所需要的訓練次數要增加。

Untitled
Untitled

。非極大值抑制(Non-Max Suppression)

此方法將會建立在IoU之上,首先選擇機率最高的邊界預測框,如下圖所示,機率0.9的方框將會被選定

Untitled

此時會計算與機率0.9方框產生最高的IoU的其他邊界框將會被抑制,在此例中,就是0.6以及0.7的邊界框

Untitled

接下來將選擇有第二高的機率的邊界框,也就是機率0.8的邊界框

Untitled

並且重複上述流程,去掉(抑制)有較高IoU的其餘邊界框,最後的結果如下圖所示

Untitled

整體過程可以用官方文件中的圖形表示

Untitled
Untitled

從以下比較圖可以看出yolo在即時檢測的領先地位

  1. yolov3與其他演算法
Untitled
  1. yolov4與yolov3及其他演算法
Untitled
  1. yolov5
Untitled
  1. yolov7
Untitled

由最後的比較圖來看,物件偵測的演算法前幾名基本上都已經是yolo家族所包下,比較也變成自己人在比了

接下來會介紹實作部分,先將環境建立起來後,會在介紹資料及管理平台,最後會介紹如何將自己的資料集匯入並開始訓練,並用於檢測自己的資料

4.實作 — 建立環境

這裡選擇的yolo版本為yolov5,其原因是因為發展至此版本,yolo已經是非常成熟的演算法,在官網之中也有許多課程可以選擇,並且也有docker映像檔可以使用。其中,最小體積的yolov5s只有27MB,非常適合邊緣裝置使用。

GitHub – ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite

4.1 Colab

Untitled

Colaboratory 是一個免費的 Jupyter 筆記本環境,不需要進行任何設置就可以使用,並且完全在雲端運行。借助 Colaboratory,您可以編寫和執行代碼、保存和共享分析結果,以及利用強大的計算資源,所有這些都可通過瀏覽器免費使用。它可以與 Google 雲端硬碟結合而成為一種數據分析工具。可將代碼,輸出和描述性文本組合到一個協作檔案中。

4.1.1 進入colab網頁

Google Colaboratory

4.1.2 點選新增筆記本

Untitled

4.1.3 將筆記本重新命名

Untitled

4.1.4 變更執行階段 → 獲得免費GPU資源

Untitled
Untitled

4.1.5 建立 google drive 連結

可以先觀察colab的資料夾結構

Untitled

此時 /content資料夾下只有預設的 sample_data,我們的雲端硬碟還沒連上

Untitled

colab會預設將 google drive 建立於 /content 之下,不管是透過按鈕快速建立或是透過指令(差別在於指令可以更改 google drive 建立的名稱,按鈕則是預設為 /content/MyDrive)。

以下為使用按鈕快速建立連結:

Untitled
Untitled

連結建立完成後,可以看到 /content下出現了 drive 的資料夾

Untitled

透過指令建立:

from google.colab import drive
drive.mount('/content/your_drive_name')  # your_drive_name 請改為自己想使用的名稱
Untitled

4.1.6 下載yolov5及所需套件

# 複製 yolov5 倉庫
!git clone <https://github.com/ultralytics/yolov5>

# 進入 yolov5
%cd yolov5

# 下載相關套件
%pip install -qr requirements.txt

# 下載資料集標記及管理平台套件
%pip install -q roboflow
Untitled

4.1.7 預先引入所需套件並取得 GPU 資料

import torch
import os
from IPython.display import Image, clear_output

print(f"Setup complete. Using torch {torch.__version__} ({torch.cuda.get_device_properties(0).name if torch.cuda.is_available() else 'CPU'})")
Untitled

4.1.8 使用範例照片及預訓練權重進行偵測

!python detect.py --weights yolov5s.pt --source /content/yolov5/data/images/

偵測完畢的照片會放在 /detect/yolov5/runs/detect/exp之下,可以直接打開來看

Untitled
Untitled

要改yaml檔案內的路徑

Untitled

RTX3060 —batch 可以用到16

Untitled

4.2 Docker

由於訓練資料時,使用 GPU 可以大幅提升運算能力,因此現在的主流皆為使用 GPU 進行訓練。但是在 windows 上建立 GPU 環境異常的麻煩,如果有人想嘗試可以點擊此連結嘗試看看。

得益於 docker 與 nvidia 在之前有進行合作,利用通透( passthrough )技術,使 docker 內也可以存取本地 GPU 資源,而 yolov5 也是目前有提供 Docker + GPU 環境的版本。因此,為了簡化流程並且給大家一個美好的體驗,這邊將使用 docker 進行操作。

由於筆者是使用 windows 系統進行操作,因此下載的 docker 引擎為 windows 版本,請讀者依照自己的作業系統下載相對應的 docker 引擎版本。另外,yolov5所提供的 docker image 是以存取本地 GPU 資源為主,無法得知其他顯卡是否能夠使用此 image。

4.2.1 下載Docker 引擎

透過下面連結進入 docker 首頁並依照自己的作業系統下載相對應的引擎

Home – Docker

4.2.2 更改映像檔儲存位置 (Optional)

Docker預設會將映像檔放置於C碟。由於等等要下載的 yolov5 image 大小高達15.37GB ,因此若是C碟容量不足可能會無法使用。因此下面介紹如何將 image 預設存放位置改到其他地方。

Untitled

可以到C:\Users\用户名\AppData\Local\Docker\wsl 下,會看到有兩個資料夾data跟distro,這是docker用於存放image的地方

Untitled

接下來我們將改變存放位置。

首先,將docker desktop徹底關閉

Untitled

輸入以下指令,更改 image 存放位置(下面將會把image放到D:\\docker資料夾下)

!!可能需要一些時間!!

# 導出 docker-desktop
wsl --export docker-desktop "D:\\\\docker\\\\docker-desktop.tar"
# 取消註冊 docker-desktop
wsl --unregister docker-desktop
# 導入 docker-desktop
wsl --import docker-desktop "D:\\\\docker\\\\wsl" "D:\\\\docker\\\\docker-desktop.tar" --version 2

# 導出 docker-desktop-data
wsl --export docker-desktop-data "D:\\\\docker\\\\docker-desktop-data.tar"
# 取消註冊 docker-desktop-data
wsl --unregister docker-desktop-data
# 導入 docker-desktop
wsl --import docker-desktop-data "D:\\\\docker\\\\wsl" "D:\\\\docker\\\\docker-desktop-data.tar" --version 2

完成以後即可到D:\\docker確認是否成功,然後將docker desktop打開並測試container開啟關閉是否正常

4.2.3 下載yolov5 docker image 檔案 (15.37GB)

開啟終端機,輸入以下指令

docker pull ultralytics/yolov5

完成後即可在docker desktop看到映像檔

Untitled

4.2.4 進入容器

使用以下指令指定用此映像檔建立容器,並取得GPU資源

docker run --ipc=host -it --gpus all ultralytics/yolov5:latest

以下是進入到容器內的樣子

Untitled

輸入以下指令,確認是否有取得GPU資源

root@2b6da6a8b10c:/usr/src/app# nvidia-smi

若是出現以下畫面即代表有取得,可以使用GPU資源

Untitled

4.2.5 退出及刪除所有容器

要退出docker container只需按 Ctrl + d 即可退出

輸入以下指令可以刪除所有container

docker rm $(docker ps -a -q)

5.Roboflow — 資料集管理、標記及訓練平台

以下介紹一個強大的整合平台,可以讓我們多人協作標記資料集,並且在訓練前執行影像增強以擴充資料、

5.1 roboflow網頁

Roboflow: Give your software the power to see objects in images and video

5.2 註冊帳號並登入

Untitled

5.3 建立專案相關步驟

選擇 Create New Project

輸入Project Name以及你想預測的東西(輸入到紅色框)

Untitled

按下Create Public Project後,進入到匯入資料集頁面

Untitled

將你要訓練的資料集匯入(這裡使用影片,但是照片也差不多)

  • 以下步驟只有影片才有

選擇1秒要保留幾張照片

Untitled

完成匯入後的樣子

Untitled

按下Finish Uploading,開始上傳資料集

Untitled

(可選)上傳完成後,可以邀請其他人幫忙標記(以email邀請,經實測邀請信件會被分類到促銷內容)

Untitled

上傳完成後的樣子,左邊可以看到這個專案的狀態

Untitled

接下來點擊第一張照片開始標記

Untitled

左邊有不同的標記工具及相關操作

不同標記工具.png

完成標記後的狀態

Untitled

選擇訓練、驗證、測試比例

Untitled

按下Generate New Version

Untitled

接下來選擇照片預處理方式

Untitled
  • Auto-Orient → 自動旋轉(自適應旋轉)
  • Resize → 縮放

選擇資料增強方式

Untitled
Untitled

完成資料前處理頁面

Untitled

5.4 匯出資料集

選擇匯出格式

Untitled

匯出方式可以分為以下兩種

  • colab → 直接整段複製貼上即可,包含被遮擋的api key也是
Untitled
  • 下載壓縮檔 → 常用於本地端訓練,需要修改資料集位置
Untitled

6.實作 – 訓練自己的資料集

以下步驟必須要將要訓練的資料集上傳到roboflow,並且完成標記

6.1 Colab

6.1.1 建立一個yolov5的colab環境

# 建立雲端硬碟連結
from google.colab import drive
drive.mount('/content/van')

# 複製 yolov5 倉庫
!git clone <https://github.com/ultralytics/yolov5>

# 進入 yolov5
%cd yolov5

# 下載相關套件
%pip install -qr requirements.txt

# 下載資料集標記及管理平台套件
%pip install -q roboflow

import os

# 設定環境變數
os.environ["DATASET_DIRECTORY"] = "/content/datasets"

6.1.2 利用 roboflow API 下載建立好的資料集

Untitled
Untitled
Untitled

直接複製貼上到colab

Untitled

執行完畢後,左側資料夾樹狀結構就會顯示出資料集

Untitled

6.1.3 開始訓練

接下來使用以下程式碼,即可開始訓練

{dataset.location} → 改成yaml設定檔所在位置 → 位於 datasets/{project_name}下

可以直接按右鍵並點選複製路徑然後複製貼上

Untitled
!python train.py --img 416 --batch 16 --epochs 150 --data {dataset.location}/data.yaml --weights yolov5s.pt --cache

以上面為例,使用的指令就會是這樣:

!python [train.py](<http://train.py/>) --img 416 --batch 16 --epochs 150 --data /content/datasets/test-2/data.yaml --weights [yolov5s.pt](<http://yolov5s.pt/>) --cache

其中有幾個參數可以注意:

  • img: 設定輸入影像的大小(預設即可)
  • batch: 每批次要訓練的影像張數
  • epochs: 訓練次數(建議3000以上)
  • data: data.yaml所在位置
  • weights: 權重檔,共有5種結構可以選擇
  • cache: 加速訓練

以下是weights可選的結構,由左至右速度越慢、但越準確

Untitled
!python train.py --img 416 --batch 16 --epochs 150 --data /content/datasets/test-2/data.yaml --weights yolov5s.pt --cache
!python train.py --img 416 --batch 16 --epochs 150 --data /content/datasets/test-2/data.yaml --weights yolov5s.pt --cache --patience 0

加入 –patience 0 可以讓yolov5停止自動停止訓練

訓練期間的畫面

Untitled

完成後,會提示你到哪裡找相關檔案

Untitled

輸入以下指令可以看到此次訓練的各項指標

%load_ext tensorboard
%tensorboard --logdir runs
Untitled

6.1.4 使用訓練好的權重進行預測

使用下列指令進行預測(路徑一樣要注意改成自己的)

!python detect.py --weights runs/train/exp/weights/best.pt --img 416 --conf 0.1 --source {dataset.location}/test/images

預測結束後一樣會有提示存放位置

Untitled

可以直接到該位置開啟照片檔案(因為只有6張照片而且只訓練150次,所以效果非常爛)

Untitled

因為是即時檢測,所以也可以丟影片給它,只要將 —source {影片路徑} 即可

(需先將影片存入google drive)

Untitled

預測時間很快,20秒的影片一下子就跑完了

Untitled

6.1.5 將權重或是預測完畢的照片、影片匯出

使用指令將影片從雲端複製到自己的資料夾(用直接下載的方式很慢)

第一個參數放要複製的檔案位置,第二個放要複製到的地方

%cp /content/yolov5/yolov5/runs/detect/exp2/breakandturnleft.mp4 /content/van/MyDrive/weights

再到自己的雲端硬碟下載出來

Untitled

6張照片訓練150次

800多張照片訓練12000多次

6.2 Docker

這次啟動docker的指令略有不同,因為要將完成訓練的權重檔或是完成預測的照片或影片拿出來,因此需要建立docker與本地端的一個通道,以 -v {your_path}:/usr/src/app 設定,其他指令不變

6.2.1 建立具有volumn的docker容器

此處會以D:\internship\trunk_internship\yolo 連結到 /usr/src/app/yolo 中為例子,請先到要建立volulmn的資料夾,並開啟終端機

Untitled
  • 如果是使用powershell,請使用${pwd}建立volumn docker run --ipc=host -it --gpus all --name yolov5 -d -v ${pwd}:/usr/src/app/yolo ultralytics/yolov5:latest
  • 如果是使用window CMD,請將${pwd} 改成 %cd% docker run --ipc=host -it --gpus all --name yolov5 -d -v %cd%:/usr/src/app/yolo ultralytics/yolov5:latest
  • 如果是linux,請將${pwd}改成$(pwd) docker run --ipc=host -it --gpus all --name yolov5 -d -v $(pwd):/usr/src/app/yolo ultralytics/yolov5:latest

也可以加入 -d 讓容器再背景執行,以及 —name {your_container_name} 自訂容器名稱,有使用 -d 的話可以將終端機關閉,正在遠端的vscode也不會斷線

docker run --ipc=host -it --gpus all --name yolov5 -d -v ${pwd}:/usr/src/app/yolo ultralytics/yolov5:latest

完成後可以使用 docker ps -l 查看

docker ps -l
Untitled

由於使用了 -d 背景執行的指令,因此不會進入到容器內,可以直接使用vscode遠端進入

6.2.2 使用vscode遠端進入容器

確認vscode有這個docker插件,沒有的話請安裝

Untitled

左側會出現一隻鯨魚,點選他會出現我們剛剛啟動的容器

Untitled

對綠色三角形箭頭那一行按右鍵,選擇 Attach Visual Studio Code

Untitled

點擊後將會以新視窗的方式進入容器內,左下角也會顯示相關資訊

Untitled

我們也可以看到剛剛建立volumn連結的yolo資料夾出現在裡面

Untitled

6.2.3 退出並停止、刪除容器

要退出的話直接點選左下角那一條,選擇關閉遠端連線即可

Untitled

此時容器還沒有關閉,並且因為是背景執行,所以無法直接使用docker rm移除,需先使用docker stop停止容器

Untitled

關閉後再使用docker rm刪除容器

Untitled

或者是一次執行停止及刪除

Untitled

6.2.4 將資料集透過volumn放入docker內部並確認

從roboflow下載資料集(.zip形式),並放入有建立volumn的資料夾內

Untitled

開啟檔案總管並且切到建立volumn的資料夾,將壓縮檔解壓至此

Untitled
Untitled

建立容器,並使用vscode遠端進入,可以從左側的資料夾樹狀結構檢查是否有將資料集匯入

可以看到資料集確實有被匯入到docker

Untitled

6.2.5 更改data.yaml檔

data.yaml是告訴yolov5要去哪裡找資料來訓練及測試,因此放入docker後,必須將路徑指定好,否則會顯示找不到路徑或資料夾的錯誤

Untitled

點擊data.yaml檔案,將train以及val改成資料集內部相同名稱的資料夾的路徑

原始的data.yaml內部

Untitled
Untitled

更改完成後,即可使用以下指令進行訓練({dataset.location} 請改成自己的路徑)

其他參數與colab相同 → 請參考 6.1.3 小節

python train.py --img 416 --batch 16 --epochs 150 --data {dataset.location}/data.yaml --weights yolov5s.pt --cache

在docker訓練比較不一樣的地方是,一開始輸入訓練時,會詢問你要怎麼訓練

Untitled

這邊的(1)跟(2)都是要使用一個叫做wandb的網站來幫你管理這次的訓練,並且可視化訓練的結果。

如果不需要這些,可以選擇(3),一樣可以訓練

Untitled

如果有選的話,就會將訓練結果及成效在完成訓練後可視化出來

Untitled

網頁也會有相關資料

Untitled

6.2.6 使用權重進行預測

訓練完畢後一樣會顯示存放路徑

Untitled

可以將想要預測的影片或照片從本地移動到建立volumn的資料夾,即可開始檢測

python detect.py --weights runs/train/{your_exp_path}/weights/best.pt --img 416 --conf 0.1 --source {your_source}
Untitled

檢測完畢後一樣會提示存放位置

Untitled

一樣使用cp的方式將docker內辨識完成的檔案複製到volumn資料夾內,即可直接點擊觀看(檔名相同的話注意不能與原影片位於同個資料夾路徑,否則原影片會被蓋掉)

cp /usr/src/app/runs/detect/exp/break_and_turnleft.mp4 /usr/src/app/yolo

可於本地有建立volumn的資料夾內看到

Untitled

Colab 連結

問題紀錄

如果出現以下問題,可能是pull新版yolo下來後本地的某個套件未更新,可以使用藍色指令去更新套件

module 'XXX' has no attribute 'XXX'
python -m pip install -U XXX

訂閱研究文章

Get updates and learn from the best

More To Explore

Scroll to Top

hurry up !

軟體工程師培訓

限時免費報名中

藉由與「真實世界軟體專案」相同的技術、工具與開發流程,化簡成與商業機密無關、門檻較低更容易上手的「模擬專案」,讓你有機會在職場前輩的陪伴下,完成真槍實彈的練習,動手解決真實的問題,快速累積個人的經驗與作品,而不只是「學習技術」而已。