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,如果還有其他報錯,請留言評論區,我會及時回複,因為我在安裝的時候也報了一些錯,但是都沒有記錄下來
1.4 進行測試
進入到yolov5根目錄下,我這裡是用的powershell,你也可以在控制台,都是一樣的。
運作測試檔案: python detect.py --source 0 【0:是指定的本機攝像頭】PS:我特麼的竟然一次運作成功,多少是挺失望
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓雷霆嘎巴↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ZBC↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
二、YOLOV5 實作訓練
2.1 首先是準備資料集
★ 資料集的準備工作,我以前的部落格有細寫過,—>>傳送門
★ 資料集準備好後,一定先確定label和JPEGImages這兩個檔案夾在同一目錄裡
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在根目錄裡,修改一些主要的參數,奧利給
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了
成功訓練如圖所示
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓無情哈拉少↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
2.4 ?
都已經在訓練了,你接下來還有最重要的一步,就是看個日本特産電影啥的,或者是吃個瓜啥的,拉個屎啥的,反正我是去拉屎了🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵
等它訓練完就沒問題了,但是還是要時不時看一眼,具體看什麼,我也不知道呀,反正是看就完事兒了🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷
都訓練完了,測試的話,就不用再說的吧,阿sir,
三、個人對于yolov5的看法
先說一個情況吧,我在複現yolov4時,使用1080p的攝像頭進行測試的時候,檢測的幀率隻有1.7fps(在我的rtx2070s顯示卡上),不管我如何調整cfg檔案裡的寬高,基本都無濟于事,然後我用480p的攝像頭才可以達到20fps,不要搞我啊,阿sir,現在攝像頭基本都是在1080p檢測的啊,480p怎麼能滿足!!!!!我不知道為什麼圖像在相同的cfg參數下,分辨率對檢測速度影響會這麼大。但是,啊,但是,我在用yolov5的時候,用1080P就可以達到實時,最主要的是yolov5的模型非常小,比yolo的前幾個系列小了大概4倍,非常适合做嵌入。對于yolov5,雖然是作者自封的,但是非常達到我心裡的預期!!!,不吹不黑,yolov5是我遇到最牛啤的目标檢測算法,你說呢,你是不是也這麼感覺的呢