YOLOv5快速入門和使用

如此而已~~~發表於2024-06-22

YOLOv5快速入門使用

官方文件地址:https://docs.ultralytics.com/zh/yolov5/

如果文章看不懂,過一遍自己整理過程,然後去參考影片中看對應的影片:環境準備-->程式碼拉取-->打標-->訓練模型-->執行

一、配置虛擬環境(不止是YOLO如果使用其餘的需要隔離環境也可以這樣操作)

為了防止影響我們電腦上已有的Python環境,我們可以使用Anaconda配置虛擬環境,如果沒有請先找教學安裝一下。

(一)、建立虛擬環境

使用 Anaconda 自帶的cmd命令列,不知道在哪裡?直接使用電腦搜尋框搜一下:Anaconda Prompt 這個就是了

提示:(一)到(七)均是在Anaconda的cmd中執行哦

conda create -n yolov5 python=3.8  # 建立一個名為 yolov5 的虛擬環境,使用的是python3.8

(二)、啟用虛擬環境
conda activate yolov5
(三)、檢視已經安裝好的包
pip list

(四)、配置國內源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

(五)、執行環境安裝

1、先切換到指定路徑下:

# 切換磁碟機代號,你的yolov5原始碼所在的磁碟機代號
F:
​
# 到達指定路徑
cd 這裡是你從github上拉取的yolov5的原始碼檔案根目錄

2、根據自己的NVIDIA的控制皮膚選擇合適(比自己的NVIDIA CUDA低的就行)的PyTorch(https://pytorch.org/get-started/previous-versions/)版本:

image-20240622162629183

比如選擇一下這個版本安裝(可以將pip3 換為 pip):

image-20240622163247920

3、安裝其他環境(安裝前先參考一下我的配置檔案):

# 安裝其他的依賴,如果你的目錄下沒有這個檔案,說明你還沒有到專案根目錄下,或者你拉取的程式碼有誤
pip install -r requirements.txt
​
################  參考檔案,修改了其中的numpy版本為等於  ################
# YOLOv5 requirements
# Usage: pip install -r requirements.txt
​
# Base ------------------------------------------------------------------------
gitpython>=3.1.30
matplotlib>=3.3
numpy==1.20.3
opencv-python>=4.1.1
Pillow>=9.4.0
psutil  # system resources
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
thop>=0.1.1  # FLOPs computation
torch>=1.8.0  # see https://pytorch.org/get-started/locally (recommended)
torchvision>=0.9.0
tqdm>=4.64.0
ultralytics>=8.0.232
# protobuf<=3.20.1  # https://github.com/ultralytics/yolov5/issues/8012
​
# Logging ---------------------------------------------------------------------
# tensorboard>=2.4.1
# clearml>=1.2.0
# comet
​
# Plotting --------------------------------------------------------------------
pandas>=1.1.4
seaborn>=0.11.0
​
# Export ----------------------------------------------------------------------
# coremltools>=6.0  # CoreML export
# onnx>=1.10.0  # ONNX export
# onnx-simplifier>=0.4.1  # ONNX simplifier
# nvidia-pyindex  # TensorRT export
# nvidia-tensorrt  # TensorRT export
# scikit-learn<=1.1.2  # CoreML quantization
# tensorflow>=2.4.0,<=2.13.1  # TF exports (-cpu, -aarch64, -macos)
# tensorflowjs>=3.9.0  # TF.js export
# openvino-dev>=2023.0  # OpenVINO export
​
# Deploy ----------------------------------------------------------------------
setuptools>=65.5.1 # Snyk vulnerability fix
# tritonclient[all]~=2.24.0
​
# Extras ----------------------------------------------------------------------
# ipython  # interactive notebook
# mss  # screenshots
# albumentations>=1.0.3
# pycocotools>=2.0.6  # COCO mAP
wheel>=0.38.0 # not directly required, pinned by Snyk to avoid a vulnerability

(六)、檢視和刪除對應的虛擬環境(一點補充)
# 檢視所有的虛擬環境
conda env list
​
# 刪除指定的虛擬環境
conda env remove --name yolov5

(七)、如果遇到換源的地址沒有對應版本(沒遇到就不管):
# 如阿里雲沒有的環境就需要單獨安裝,這裡只是一個例子
pip install torch==1.8.2 torchvision==0.9.2 torchaudio==0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cu102

(八)、在PyCharm中設定虛擬環境

在此處找到我們設定的虛擬環境地址並選擇其中的.exe檔案即可:

image-20240622161839830

檢視是否成功(使用終端開啟,看到命名行前面又這個環境即可):

image-20240622161950139

確定安裝好了:

可以使用預設的訓練檔案看看能不能檢測,這裡推薦使用本機攝像頭,可以正常執行識別就表示你的環境好了,就算失敗也是虛擬環境不怕,根據問題去網上找答案吧,大機率沒有配置好。

python detect.py --weights yolov5s.pt --source 0                # webcam    本機攝像頭
                                               img.jpg          # image
                                               vid.mpp4         # video
                                               screen           # screenshot
                                               path/            # directory
                                               list.txt         # list of images
                                               list.streams     # list of streams
                                               'path/*.jpg'     # glob

二、訓練自己的模型(使用PyCharm)

友情提示: 為了防止 labelimg打標籤 閃退和辛勤付出打水漂,推薦使用線上的打標網站打標,而且有些網站還可以團隊合作和選擇更多形狀的框框出特徵:https://www.makesense.ai/ 這樣的網站很多,如果有好的也可以推薦給我,可以先找好並會用了再開始。——工欲善其事,必先利其器

(一)、資料準備:

首先準備好原始圖片資料,可以使用下面程式透過旋轉生成更多圖片:

from math import *
import cv2
import os
import glob
import imutils
import numpy as np
# 如果這裡匯入依賴有問題,可以直接使用pip 在已經配置號python環境的基礎上
​
# 透過旋轉角度來快速獲取大量圖片
def rotate_img(img, angle):
    '''
    img   --image
    angle --rotation angle
    return--rotated img
    '''
    h, w = img.shape[:2]
    rotate_center = (w / 2, h / 2)
    # 獲取旋轉矩陣
    # 引數1為旋轉中心點;
    # 引數2為旋轉角度,正值-逆時針旋轉;負值-順時針旋轉
    # 引數3為各向同性的比例因子,1.0原圖,2.0變成原來的2倍,0.5變成原來的0.5倍
    M = cv2.getRotationMatrix2D(rotate_center, angle, 1.0)
    # 計算影像新邊界
    new_w = int(h * np.abs(M[0, 1]) + w * np.abs(M[0, 0]))
    new_h = int(h * np.abs(M[0, 0]) + w * np.abs(M[0, 1]))
    # 調整旋轉矩陣以考慮平移
    M[0, 2] += (new_w - w) / 2
    M[1, 2] += (new_h - h) / 2
​
    rotated_img = cv2.warpAffine(img, M, (new_w, new_h))
    return rotated_img
​
​
if __name__ == '__main__':
​
    output_dir = "train-image"  # 生成到的資料夾
    image_names = glob.glob("images/b-zu.png") # 對應圖片
​
    for image_name in image_names:
        image = cv2.imread(image_name, -1)
​
        for i in range(1, 361): # 1 —— 360左閉右開
            rotated_img1 = rotate_img(image, i)
            basename = os.path.basename(image_name)
            tag, _ = os.path.splitext(basename)
            cv2.imwrite(os.path.join(output_dir, 'b-zu-%d.jpg' % i), rotated_img1)

(二)、安裝對應的標記軟體——labelimg(為防閃退一標到底,隨意切換恨意滿滿)
1、安裝
pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

2、開啟 pycharm 控制檯
labelimg

3、使用

先設定:

YOLOv5快速入門和使用

YOLOv5快速入門和使用

建立兩個檔案用於存放訓練的圖片和標籤:

YOLOv5快速入門和使用

儲存標籤檔案的地址:

YOLOv5快速入門和使用

選擇需要標記的圖片:

YOLOv5快速入門和使用

操作(標記和下一張):

按下 W 鍵即可出現一個十字架,按下滑鼠左鍵就可以圈定範圍,然後可以給這個訪問標記一個名字

注意:標記名不要使用中文,同時標記特徵儘可能不要涵蓋其他特徵

YOLOv5快速入門和使用

按下d進入下一張圖片,可以這樣依次打完

(三)、準備對應的GPU環境(你也可以使用自己的電腦訓練只是有點久,但是這個將程式碼上傳的速度也吃網速)

這裡如果自己電腦配置不好可以去租用雲GPU來進行模型訓練,例如矩池雲地址:https://www.matpool.com/

1、先衝值一定金額,在網盤中準備好需要使用的檔案

2、然後租用一個GPU選擇對應的映象配置(這裡有現成的YOLOv5環境)

1668672313992

3、租用成功後 滑鼠右擊win鍵然後選擇Windows PowerShell 進行連線

注意:對應執行好的例項有對應連線地址和密碼複製後滑鼠右鍵貼上即可,密碼複製右鍵就貼上上了

1668672883811

連線好後:

# 在這個目錄下看看能不能找到自己上傳到雲盤上的YOLOv5
cd /mnt

(四)、訓練執行(特別注意,這裡是使用了矩池雲的雲盤後的預設根路徑:/mnt)

在此之前請確定好對應的圖片和標籤的對應位置以及配置檔案資訊:

參考配置檔案:

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: /mnt/yolov5-master/data/ChineseChess  # dataset root dir
train: images/train  # train images (relative to 'path')
val: images/val  # val images (relative to 'path')
test:  # test images (optional)
​
# Classes
nc: 2  # number of classes
names: ['no-arse', 'no-bosom']  # class names

圖片標籤配置檔案放置(這裡是一個放置參考,主要注意看看路徑)

YOLOv5快速入門和使用

訓練配置檔案分析
資料集相關資訊:
​
資料集根目錄:/mnt/yolov5-master/data/ChineseChess
訓練集圖片目錄:images/train(相對於資料集根目錄)
驗證集圖片目錄:images/val(相對於資料集根目錄)
測試集圖片目錄:如果需要指定測試集圖片目錄,可以在test欄位中填寫相應的路徑。在這個配置中,測試集圖片目錄是可選的。
類別資訊:
​
# 這是標籤的分類數量和名稱:
類別數量:2(nc: 2)
類別名稱:['r-bing', 'b-zu'],表示有兩個類別,分別是'r-bing'和'b-zu'
​
# ----------------------
​
訓練集(Train set):訓練集包含用於模型訓練的影像資料。模型透過觀察訓練集中的影像和相應的標註來學習目標物體的特徵和位置資訊。
​
驗證集(Validation set):驗證集用於在訓練過程中對模型進行驗證和調參。通常會從訓練集中分割一部分資料作為驗證集,用於評估模型在未見過的資料上的表現。這有助於監控模型的泛化能力,並避免過擬合。
​
測試集(Test set):測試集包含模型從未見過的影像資料,用於最終評估模型的效能和泛化能力。測試集的設計目的是模擬模型在實際應用中遇到的新資料,以便評估模型的真實表現。

訓練(如果你使用的是自己的配置高的電腦,注意改對應的地址)
# 參考指令:
# data/ChineseChess/ChineseChess.yaml 對應你的配置檔案地址
python3 train.py --weights yolov5s.pt --data data/ChineseChess/ChineseChess.yaml --workers 4 --batch-size 20 --epochs 100

結果的權重檔案就在:runs/train/exp/weights/ 下 這裡多次訓練exp檔名會依次增加 exp exp2...

圖片識別測試結果
Validating runs/train/exp/weights/best.pt...
Fusing layers...
Model summary: 157 layers, 7015519 parameters, 0 gradients
                 Class     Images  Instances          P          R      mAP50   mAP50-95: 100%|██████████| 1/1 [00:00<00:00,  6.54it/s]
                   all         20         56      0.766      0.474       0.53      0.225
               no-arse         20         30      0.658      0.333      0.383      0.126
              no-bosom         20         26      0.874      0.615      0.676      0.324

三、執行

(一)、將訓練好的模型檔案下載並放在yolov5原始碼更目錄下的自定一目錄下
# 比如你放在:
C:\Users\YAN\Desktop\yolov5\myModel\xxx.pt  # 注意,那你的執行指令的對應模型檔案地址就要變哦,不是直接放在根路徑下

(二)、在PyCharm中的控制檯上執行

detect.py 這裡是關鍵程式碼,Python好的可以自行學習修改,也可以透過Flask介面使其可以透過Http介面訪問,當然寫好了可以分享給我康康啊

python detect.py --weights best.pt【即你訓練的模型檔案】 --source 0                # webcam    本機攝像頭
                                               img.jpg          # image
                                               vid.mpp4         # video
                                               screen           # screenshot
                                               path/            # directory
                                               list.txt         # list of images
                                               list.streams     # list of streams
                                               'path/*.jpg'     # glob

四、參考影片和總結展望

(一)、B站參考影片:

1、在這裡你可以學到YOLOv5的使用,對於環境沒有配置好的和想進一步瞭解的看這個(感謝作者的教學):

https://www.bilibili.com/video/BV1ZF4m1K7WY/?spm_id_from=333.999.0.0&vd_source=3482c0c40f6a05b99c21075cb9535764

2、在這裡你可以學到YOLOV5於樹莓派結合,對於矩池雲那裡有問題和沒看清楚的看這個(感謝作者的教學):

https://www.bilibili.com/video/BV1vK411U7Br/?spm_id_from=333.337.search-card.all.click&vd_source=3482c0c40f6a05b99c21075cb9535764

3、一篇外網作者文章(使用 Flask 進行影片流傳輸,腦洞大的你可以猜想,看懂就機器翻譯,哈哈哈): https://blog.miguelgrinberg.com/post/video-streaming-with-flask

(二)、總結展望:

作為一個Java菜鳥程式設計師,目前並對YOLO瞭解不太多。但是我們可以看到其在影像和實時流的識別上可以做很多事情,比如我們可以透過YOLO做圖片的檢測,再透過Flask或者Python後端提供對應的Http介面服務供Java或者直接供前端使用,這點Python後端程式設計師比我熟。

然後我們也可以看到還能用YOLOv5檢測實時流(文中只是提及了攝像頭,但是如果是流媒體的實時流也是可以的所以可以嘗試作為直播場景下的違規檢測),那麼其實可以做一些監控裝置或者是實時流的檢測,這裡比如:車庫往來車輛檢測提取車票獲取司機資訊扣費或者是高速路檢測超速,當然可能也不一定會用YOLOv5類似的專業人士比我熟。

當然也可以和硬體結合起來,以YOLO為眼,然後要不就是自動根據其控制一些硬體操作,或者就是可以識別報警,人工進行控制。至於視覺化怎麼做那就看你的腦洞了。

最後,有好的方法記得分享給我哈。