使用YOLO訓練Kitti資料集

2021-09-29 07:37:29 字數 3303 閱讀 4488

其他文章

上次寫了一篇關於使用yolo訓練voc資料集的文章,傳送門(/article/details/78724314)。但是總不能只使用乙個資料集,多使用幾個資料集看看效果。因為我主要在做車輛和行人方面的檢測。正好kitti 資料集是做無人駕駛方面的公開權威資料集,包含大量公路,城市街道等各種路況的資料集,官方**(很符合我的要求。

2.      kitti 資料集轉化為voc資料集格式

如果你沒有修改yolo網路的原始碼,我們知道,它需要的是voc資料格式的訓練集。那麼voc資料集格式是這麼樣的呢?簡單來看一下:

--voc  

--annotations

--imagesets

--main

--layout

--segmentation

--jpegimages

--segmentationclass

--segmentationobject

後面兩個是分割用到的,不用管他們。這裡面用到的資料夾是annotation、imagesets和jpegimages。其中資料夾annotation中主要存放xml檔案,每乙個xml對應一張影象,並且每個xml中存放的是標記的各個目標的位置和類別資訊,命名通常與對應的原始影象一樣;而imagesets我們只需要用到main資料夾,這裡面存放的是一些文字檔案,通常為train.txt、test.txt等,該文字檔案裡面的內容是需要用來訓練或測試的影象的名字(無字尾無路徑);jpegimages資料夾中放我們已按統一規則命名好的原始影象。

而kitti資料集又是什麼樣的呢

kitti的標記資訊是乙個txt,裡面的內容如下:

car 0.00 0 -1.67 642.24 178.50 680.14 208.68 1.381.49 3.32 2.41 1.66 34.98 -1.60 

car 0.00 0 -1.75 685.77 178.12 767.02 235.21 1.50 1.62 3.89 3.27 1.67 21.18-1.60

以上內容的含義如下:(截圖自

這部分參考

大概了解了資料的格式,我們就開始轉化吧。首先建立一系列的資料夾:

# 在scipts/資料夾下新建kittidevkit/kitti兩層子目錄,所需檔案放在kitti/中

annotations/

└── 000000.xml

imagesets/

└── main/

└── trainval.txt

└── test.txt#等等

jpegimages/

└── 000000.png

kitti_labels/

└── 000000.txt # 自建資料夾,存放原始標註資訊,待轉化為xml,不屬於voc格式

create_train_test_txt.py# 3個python工具,後面有詳細介紹

modify_annotations_txt.py

txt_to_xml.py

截圖如下:

第一步,類別轉化

pascal voc資料集總共20個類別,如果用於特定場景,20個類別確實多了。此次博主為資料集設定3個類別, 『car』,』cyclist』,』pedestrian』,只不過標註資訊中還有其他型別的車和人,直接略過有點浪費,博主希望將 『van』, 『truck』,『tram』 合併到 『car』類別中去,將『person_sitting』合併到 『pedestrian』類別中去(『misc』和 『dontcare』這兩類直接忽略)。這裡使用的是modify_annotations_txt.py工具。

對原始txt檔案進行上述處理後,接下來需要將標註檔案從txt轉化為xml,並去掉標註資訊中用不上的部分,只留下3類,還有把座標值從float型轉化為int型,最後所有生成的xml檔案要存放在annotations資料夾中。這裡使用的是txt_to_xml.py工具,此處是由kitti_ssd 的**修改而來,感謝作者的貢獻。

用於ssd訓練的pascal voc格式的資料集總共就是三大塊:首先是jpegimages資料夾,放入了所有png;然後是annotations資料夾,上述步驟已經生成了相應的xml檔案;最後就是imagessets資料夾,裡面有乙個main子資料夾,這個資料夾存放的是訓練驗證集,測試集的相關列表檔案,如下圖所示:

到這裡資料轉化已經基本完成。

最後有乙個很重要的細節,不要忽略,voc資料集是jpg格式,而kitti資料集是png格式的。

我們要看一下原始碼是如何讀取和標記資訊的txt檔案。很簡單,之前我們在train.txt檔案裡面只記錄了所有訓練的絕對路徑,並沒有記錄labels檔案的路徑,所以我們要通過的路徑得到labels的路徑,因為如果我們是按照標準方式放置的檔案,那麼labels檔案的位置和png檔案位置很相近,有規律可尋,只要替換一些資料夾和字尾名就可以了。

到這裡應該就可以正常訓練了,這次我的maxbatch設定為40000,訓練了十幾個小時。訓練完的檢測效果可以看一下:訓練命令:darknet.exe detector train data/kitti.data cfg/kitti.cfg pre_model/darknet19_448.conv.23 -gpus 0,1

參考文獻

[1] 官網提供了很多訓練好的模型,很良心

[2] yolo v2**原文

[3]  github原始碼

[4]  kitti資料集官網

[5]還有很多優秀的部落格,感謝他們的貢獻

yolo訓練資料

第一點資料集的標註 使用linux下資料標註工具 bbox生成的檔案格式 lines x1 y1 x2 y1 x3 y3 x4 y4 第一行的資料是總共引數的行數,第二行x,y為所框物件的頂點座標。如果使用python指令碼進行資料的轉換完全不用理會。重點在於下面幾行座標的轉換。在yolo中需要的座...

YOLO訓練自己的資料集

很高興現在已經有幾百人通過我的教程成功地使用yolo處理自己的資料集。最近一直在用cnn的模型做影象二分類,但苦於效果不佳,於是把影象分類問題轉作目標識別問題。做目標識別選擇了yolo you only look once 乙個最近推出的方法,突出的優點就是速度快。查詢了網上關於yolo的訓練自己資...

yolo生成和訓練資料集

裡面共有兩個資料夾,現在我們使用的是xml2txt xml2txt.py檔案來對我們資料進行處理,首先你需要把你所有標註的xml檔案和所有的檔案放在一起,就像這樣 這是手機拍的 所有檔名很麻煩。明白博主為什麼要重新命名所有的了吧 接著切到剛才的xml2txt.py資料夾內,使用命令 python x...