YOLOV5項目復(fù)現(xiàn)
首先說一下軟硬件配置這一塊:win10 + i7-9700kf + rtx2070Super + cuda10.2 + anaconda
一肌幽、YOLOv5 實現(xiàn)檢測
1.1 下載源碼
進入官方地址稚瘾,進行源碼下載 https://github.com/ultralytics/yolov5[大概4M左右]
1.2 下載官方模型(.pt文件)
文中作者是把模型都放到了谷歌網(wǎng)盤里了,如果沒有梯子砰诵,訪問會很慢–>>作者給的模型地址
1.3 配置虛擬環(huán)境
虛擬環(huán)境的優(yōu)點不再闡述
創(chuàng)建虛擬環(huán)境:
conda create -n yolov5 python==3.7,**在yolov5中盡量用python3.7**捌显。
進 入 環(huán) 境 :
conda activate yolov5
再安裝所需庫:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt(使用清華鏡像源)
在pip install的時候茁彭,可能會出現(xiàn)read timeout的情況,你需要更換鏡像源扶歪,或者多執(zhí)行幾次pip install理肺,如果還有其他報錯,請留言評論區(qū)善镰,我會及時回復(fù)妹萨,因為我在安裝的時候也報了一些錯,但是都沒有記錄下來
1.4 進行測試
進入到y(tǒng)olov5根目錄下炫欺,我這里是用的powershell乎完,你也可以在控制臺,都是一樣的品洛。運行測試文件: python detect.py --source 0 【0:是指定的本機攝像頭】PS:我特么的竟然一次運行成功树姨,多少是挺失望
下圖是下載pt文件
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓雷霆嘎巴↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ZBC↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
二摩桶、YOLOV5 實現(xiàn)訓(xùn)練
2.1 首先是準(zhǔn)備數(shù)據(jù)集
★ 數(shù)據(jù)集的準(zhǔn)備工作,我以前的博客有細(xì)寫過帽揪,—>>傳送門
★ 數(shù)據(jù)集準(zhǔn)備好后硝清,一定先確保label和JPEGImages這兩個文件夾在同一目錄里
[圖片上傳失敗...(image-51eb0c-1613616264582)]
2.2 文件修改
2.2.1 修改數(shù)據(jù)集方面的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
# 你數(shù)據(jù)集的類別數(shù)
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 修改網(wǎng)絡(luò)參數(shù)方面的yaml文件
這個相當(dāng)于以前版本的.cfg文件防嗡,在models/yolov3-spp.yaml【當(dāng)然,你想用哪個模型就去修改對應(yīng)的yaml文件】
# parameters
nc: 1 # 數(shù)據(jù)集類別數(shù)
depth_multiple: 1.0 # expand model depth
width_multiple: 1.0 # expand layer channels
# anchors【你也可以使用k-means去產(chǎn)出你自己數(shù)據(jù)集的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中的一些參數(shù)
train.py在根目錄里侠坎,修改一些主要的參數(shù)蚁趁,奧利給
parser.add_argument('--epochs', type=int, default=200) # 訓(xùn)練的epoch
parser.add_argument('--batch-size', type=int, default=16) # batch_size 顯卡垃圾的話,就調(diào)小點
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開始訓(xùn)練
直接 python train.py 就Ok了
成功訓(xùn)練如圖所示
[圖片上傳失敗...(image-b97001-1613616264581)]
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓無情哈拉少↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
2.4 实胸?
等它訓(xùn)練完就沒問題了他嫡,但是還是要時不時看一眼,具體看什么庐完,我也不知道呀钢属,反正是看就完事兒了????????????????????????????????
都訓(xùn)練完了,測試的話门躯,就不用再說的吧淆党,阿sir,
三讶凉、個人對于yolov5的看法
先說一個情況吧染乌,我在復(fù)現(xiàn)yolov4時,使用1080p的攝像頭進行測試的時候懂讯,檢測的幀率只有1.7fps(在我的rtx2070s顯卡上)荷憋,不管我如何調(diào)整cfg文件里的寬高,基本都無濟于事褐望,然后我用480p的攝像頭才可以達到20fps勒庄,不要搞我啊,阿sir,現(xiàn)在攝像頭基本都是在1080p檢測的啊瘫里,480p怎么能滿足J当巍!=鞫痢Q涡搿!我不知道為什么圖像在相同的cfg參數(shù)下,分辨率對檢測速度影響會這么大贼邓。但是阶冈,啊,但是塑径,我在用yolov5的時候女坑,用1080P就可以達到實時,最主要的是yolov5的模型非常小统舀,比yolo的前幾個系列小了大概4倍匆骗,非常適合做嵌入。對于yolov5誉简,雖然是作者自封的碉就,但是非常達到我心里的預(yù)期!C拼瓮钥!,不吹不黑烹吵,yolov5是我遇到最牛啤的目標(biāo)檢測算法碉熄,你說呢,你是不是也這么感覺的呢