用yolov5训练kitti数据集
一、KITTI數(shù)據(jù)集介紹
KITTI數(shù)據(jù)集是一個用于自動駕駛場景下的計(jì)算機(jī)視覺算法測評數(shù)據(jù)集,由德國卡爾斯魯厄理工學(xué)院(KIT)和豐田工業(yè)大學(xué)芝加哥分校(TTIC)共同創(chuàng)立。
包含場景:市區(qū)、鄉(xiāng)村和高速公路
在這里,我們只用到它的部分與行人,車輛有關(guān)的內(nèi)容
下載可以轉(zhuǎn)到官網(wǎng)
http://www.cvlibs.net/download.php?file=data_object_image_2.zip
http://www.cvlibs.net/download.php?file=data_object_label_2.zip
得到我們的圖片和標(biāo)簽
我們再yolov5/dataset下創(chuàng)建文件夾kitti
再kiiti中放入我們的數(shù)據(jù)
注意此時先不要把標(biāo)簽數(shù)據(jù)放入,我們需要對標(biāo)簽轉(zhuǎn)換一下
二、KITTI數(shù)據(jù)集轉(zhuǎn)換
我們打開標(biāo)簽中的一個內(nèi)容
比如000000.txt
這里是kitty獨(dú)有的數(shù)據(jù)格式,不適用于我們的yolov5網(wǎng)絡(luò),所以我們得轉(zhuǎn)換一下
首先我們把類別歸一一下,因?yàn)槲覀冎恍枰玫饺齻€類(代碼中的路徑自行修改)
# modify_annotations_txt.py #將原來的8類物體轉(zhuǎn)換為我們現(xiàn)在需要的3類:Car,Pedestrian,Cyclist。 #我們把原來的Car、Van、Truck,Tram合并為Car類,把原來的Pedestrian,Person(sit-ting)合并為現(xiàn)在的Pedestrian,原來的Cyclist這一類保持不變。 import glob import string txt_list = glob.glob('你下載的標(biāo)簽文件夾的標(biāo)簽路徑/*.txt') def show_category(txt_list):category_list= []for item in txt_list:try:with open(item) as tdf:for each_line in tdf:labeldata = each_line.strip().split(' ') # 去掉前后多余的字符并把其分開category_list.append(labeldata[0]) # 只要第一個字段,即類別except IOError as ioerr:print('File error:'+str(ioerr))print(set(category_list)) # 輸出集合 def merge(line):each_line=''for i in range(len(line)):if i!= (len(line)-1):each_line=each_line+line[i]+' 'else:each_line=each_line+line[i] # 最后一條字段后面不加空格each_line=each_line+'\n'return (each_line) print('before modify categories are:\n') show_category(txt_list) for item in txt_list:new_txt=[]try:with open(item, 'r') as r_tdf:for each_line in r_tdf:labeldata = each_line.strip().split(' ')if labeldata[0] in ['Truck','Van','Tram']: # 合并汽車類labeldata[0] = labeldata[0].replace(labeldata[0],'Car')if labeldata[0] == 'Person_sitting': # 合并行人類labeldata[0] = labeldata[0].replace(labeldata[0],'Pedestrian')if labeldata[0] == 'DontCare': # 忽略Dontcare類continueif labeldata[0] == 'Misc': # 忽略Misc類continuenew_txt.append(merge(labeldata)) # 重新寫入新的txt文件with open(item,'w+') as w_tdf: # w+是打開原文件將內(nèi)容刪除,另寫新內(nèi)容進(jìn)去for temp in new_txt:w_tdf.write(temp)except IOError as ioerr:print('File error:'+str(ioerr)) print('\nafter modify categories are:\n') show_category(txt_list)然后我們再把它轉(zhuǎn)換為xml文件
創(chuàng)建一個Annotations文件夾用于存放xml
這個時候我們已經(jīng)將.txt轉(zhuǎn)化為.xml并存放在Annotations下了
最后我們再把.xml轉(zhuǎn)化為適合于yolo訓(xùn)練的標(biāo)簽?zāi)J?br /> 也就是darknet的txt格式
例如:
最后我們將得到的Annotations/下的所有txt文件放入我們之前的dataset/labels中
|——kitti ├── imgages │ ├── val │ │ └── 000000.png ├── ....... │ └── train │ │ └── 000000.png ├── ....... │ └── labels└── train└── 000000.txt├── .......這樣我們的數(shù)據(jù)集就準(zhǔn)備好了
接下來我們可以訓(xùn)練了,跟我上一篇的教程一樣,你們可以先了解怎么訓(xùn)練yolov5的步驟
https://blog.csdn.net/qq_45978858/article/details/119686255?spm=1001.2014.3001.5501
三、KITTI數(shù)據(jù)集訓(xùn)練
這里我們直接開始
1.在data文件夾中復(fù)制一份coco.yaml然后改名kitti.yaml修改內(nèi)容
2.在models文件夾修改yolov5s.yaml內(nèi)容
# Parameters nc: 3 # number of classes depth_multiple: 0.33 # model depth multiple width_multiple: 0.50 # layer channel multiple 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# YOLOv5 backbone backbone:# [from, number, module, args][[-1, 1, Focus, [64, 3]], # 0-P1/2[-1, 1, Conv, [128, 3, 2]], # 1-P2/4[-1, 3, C3, [128]],[-1, 1, Conv, [256, 3, 2]], # 3-P3/8[-1, 9, C3, [256]],[-1, 1, Conv, [512, 3, 2]], # 5-P4/16[-1, 9, C3, [512]],[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32[-1, 1, SPP, [1024, [5, 9, 13]]],[-1, 3, C3, [1024, False]], # 9]# YOLOv5 head head:[[-1, 1, Conv, [512, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 6], 1, Concat, [1]], # cat backbone P4[-1, 3, C3, [512, False]], # 13[-1, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 4], 1, Concat, [1]], # cat backbone P3[-1, 3, C3, [256, False]], # 17 (P3/8-small)[-1, 1, Conv, [256, 3, 2]],[[-1, 14], 1, Concat, [1]], # cat head P4[-1, 3, C3, [512, False]], # 20 (P4/16-medium)[-1, 1, Conv, [512, 3, 2]],[[-1, 10], 1, Concat, [1]], # cat head P5[-1, 3, C3, [1024, False]], # 23 (P5/32-large)[[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)]當(dāng)然你也要有個一yolo5s.pt權(quán)重文件放在yolov5文件夾中,在我的前面的博客也有下載地址
3.開始訓(xùn)練
我這里雖然只訓(xùn)練了十個周期,但是還是花了一個多小時,準(zhǔn)確率也非常不錯,達(dá)到了0.9以上
現(xiàn)在我們在runs/train/exp下可以看到我們的訓(xùn)練的結(jié)果
準(zhǔn)確率都可以
我們可以拿著訓(xùn)練完的最好的權(quán)重試一試
python detect.py --weights runs/train/exp/weights/best.pt --source Road_traffic_video2.mp4 這里可以是圖片 也可以是視頻 也可以是0(攝像頭)--device 0
可以看到效果還是可以的,我這只訓(xùn)練了10個epoch,條件好的可以訓(xùn)練300個甚至更久
總結(jié)
以上是生活随笔為你收集整理的用yolov5训练kitti数据集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux上mysql忘记密码重置密码
- 下一篇: iweboffice2015库文件Web