天天看點

YOLOV5測試及訓練自己的資料集

YOLOV5項目複現

    • 一、YOLOv5 實作檢測
      • 1.1 下載下傳源碼
      • 1.2 下載下傳官方模型(.pt檔案)
      • 1.3 配置虛拟環境
      • 1.4 進行測試
    • 二、YOLOV5 實作訓練
      • 2.1 首先是準備資料集
      • 2.2 檔案修改
        • 2.2.1 修改資料集方面的yaml檔案
        • 2.2.2 修改網絡參數方面的yaml檔案
        • 2.2.3 修改train.py中的一些參數
      • 2.3開始訓練
      • 2.4 ?
    • 三、個人對于yolov5的看法

首先說一下軟硬體配置這一塊:win10 + i7-9700kf + rtx2070Super + cuda10.2 + anaconda

一、YOLOv5 實作檢測

1.1 下載下傳源碼

進入官方位址,進行源碼下載下傳   https://github.com/ultralytics/yolov5[大概4M左右]

1.2 下載下傳官方模型(.pt檔案)

文中作者是把模型都放到了谷歌網盤裡了,如果沒有梯子,通路會很慢–>>作者給的模型位址

如果你實在是下載下傳不下來,并且如果你也還有積分的話–>>CSDN下載下傳模型【可憐可憐孩子吧】

再如果你沒有積分,好吧,好吧,那就,那就,那就留郵箱吧,但别忘了給卑微的我點個贊呦、、、額額額額

2020.10.21更: 想要模型檔案的直接私信我,我一開始設定的5積分,但是積分自己漲的太多了,花那麼多積分下載下傳不值當

2021.04.03更:yolov5官方pt模型檔案→【點我,我是模型位址】如果連結失效,請及時評論區給我回報,我及時更新

1.3 配置虛拟環境

虛拟環境的優點不再闡述

建立虛拟環境:conda create -n yolov5 python==3.7,在yolov5中盡量用python3.7。

進  入  環  境 :conda activate yolov5

再安裝所需庫:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt(使用清華鏡像源)

在pip install的時候,可能會出現read timeout的情況,你需要更換鏡像源,或者多執行幾次pip install,如果還有其他報錯,請留言評論區,我會及時回複,因為我在安裝的時候也報了一些錯,但是都沒有記錄下來

YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集

1.4 進行測試

進入到yolov5根目錄下,我這裡是用的powershell,你也可以在控制台,都是一樣的。

YOLOV5測試及訓練自己的資料集

運作測試檔案:   python detect.py --source 0 【0:是指定的本機攝像頭】PS:我特麼的竟然一次運作成功,多少是挺失望

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓雷霆嘎巴↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ZBC↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集

二、YOLOV5 實作訓練

2.1 首先是準備資料集

★    資料集的準備工作,我以前的部落格有細寫過,—>>傳送門

★    資料集準備好後,一定先確定label和JPEGImages這兩個檔案夾在同一目錄裡

YOLOV5測試及訓練自己的資料集

2.2 檔案修改

2.2.1 修改資料集方面的yaml檔案

作者是把以前用的.data、.names檔案合并到了data/coco.yaml中,打開coco.yaml進行修改

# COCO 2017 dataset http://cocodataset.org
# Download command: bash yolov5/data/get_coco2017.sh
# Train command: python train.py --data ./data/coco.yaml
# Dataset should be placed next to yolov5 folder:
#   /parent_folder
#     /coco
#     /yolov5


# 這些是生成的圖檔的路徑檔案,這裡是我自己的路徑,需要修改成你自己的路徑,絕對路徑也ok
train: ../coco/2007_train.txt  # 118k images
val: ../coco/2007_val.txt  # 5k images
test: ../coco/2007_test.txt  # 20k images for submission to https://competitions.codalab.org/competitions/20794

# 你資料集的類别數
nc: 1

# 類别的名稱
names: ['cell phone']

# Print classes
# with open('data/coco.yaml') as f:
#   d = yaml.load(f, Loader=yaml.FullLoader)  # dict
#   for i, x in enumerate(d['names']):
#     print(i, x)
           

2.2.2 修改網絡參數方面的yaml檔案

這個相當于以前版本的.cfg檔案,在models/yolov3-spp.yaml【當然,你想用哪個模型就去修改對應的yaml檔案】

# parameters
nc: 1  # 資料集類别數
depth_multiple: 1.0  # expand model depth
width_multiple: 1.0  # expand layer channels

# anchors【你也可以使用k-means去産出你自己資料集的anchors】
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# darknet53 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [32, 3, 1]],  # 0
   [-1, 1, Conv, [64, 3, 2]],  # 1-P1/2
   [-1, 1, Bottleneck, [64]],
   [-1, 1, Conv, [128, 3, 2]],  # 3-P2/4
   [-1, 2, Bottleneck, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 5-P3/8
   [-1, 8, Bottleneck, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 7-P4/16
   [-1, 8, Bottleneck, [512]],
   [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32
   [-1, 4, Bottleneck, [1024]],  # 10
  ]

# yolov3-spp head
# na = len(anchors[0])
head:
  [[-1, 1, Bottleneck, [1024, False]],  # 11
   [-1, 1, SPP, [512, [5, 9, 13]]],
   [-1, 1, Conv, [1024, 3, 1]],
   [-1, 1, Conv, [512, 1, 1]],
   [-1, 1, Conv, [1024, 3, 1]],
   [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 16 (P5/32-large)

   [-3, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 8], 1, Concat, [1]],  # cat backbone P4
   [-1, 1, Bottleneck, [512, False]],
   [-1, 1, Bottleneck, [512, False]],
   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, Conv, [512, 3, 1]],
   [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 24 (P4/16-medium)

   [-3, 1, Conv, [128, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P3
   [-1, 1, Bottleneck, [256, False]],
   [-1, 2, Bottleneck, [256, False]],
   [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 30 (P3/8-small)

   [[], 1, Detect, [nc, anchors]],   # Detect(P3, P4, P5)
  ]

           

2.2.3 修改train.py中的一些參數

train.py在根目錄裡,修改一些主要的參數,奧利給

YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
parser.add_argument('--epochs', type=int, default=200)  # 訓練的epoch
parser.add_argument('--batch-size', type=int, default=16)  # batch_size 顯示卡垃圾的話,就調小點
parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml', help='*.cfg path')
parser.add_argument('--data', type=str, default='data/coco.yaml', help='*.data path')
parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='train,test sizes')
           

2.3開始訓練

直接 python train.py 就Ok了

成功訓練如圖所示

YOLOV5測試及訓練自己的資料集

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓無情哈拉少↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集

2.4 ?

都已經在訓練了,你接下來還有最重要的一步,就是看個日本特産電影啥的,或者是吃個瓜啥的,拉個屎啥的,反正我是去拉屎了🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵

YOLOV5測試及訓練自己的資料集

等它訓練完就沒問題了,但是還是要時不時看一眼,具體看什麼,我也不知道呀,反正是看就完事兒了🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷

都訓練完了,測試的話,就不用再說的吧,阿sir,

三、個人對于yolov5的看法

先說一個情況吧,我在複現yolov4時,使用1080p的攝像頭進行測試的時候,檢測的幀率隻有1.7fps(在我的rtx2070s顯示卡上),不管我如何調整cfg檔案裡的寬高,基本都無濟于事,然後我用480p的攝像頭才可以達到20fps,不要搞我啊,阿sir,現在攝像頭基本都是在1080p檢測的啊,480p怎麼能滿足!!!!!我不知道為什麼圖像在相同的cfg參數下,分辨率對檢測速度影響會這麼大。但是,啊,但是,我在用yolov5的時候,用1080P就可以達到實時,最主要的是yolov5的模型非常小,比yolo的前幾個系列小了大概4倍,非常适合做嵌入。對于yolov5,雖然是作者自封的,但是非常達到我心裡的預期!!!,不吹不黑,yolov5是我遇到最牛啤的目标檢測算法,你說呢,你是不是也這麼感覺的呢

YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集
YOLOV5測試及訓練自己的資料集

繼續閱讀