YOLO原始碼學習(一)
在學習完YOLOv1論文後,我比較想了解為什麼通過這樣的網路就能預測出來一張圖片裡物體的位置座標,帶著好奇的目的我開始了我YOLO原始碼的學習。
大家都知道YOLO訓練所要求的資料格式是PASCAL VOC或者COCO等標準資料集格式,而我們通常對圖片標註後產生的xml檔案,我們要將其轉化為txt格式,而Darknet為我們提供了轉換檔案為voc_label.py。現在我們開始學習該程式,為我們下一步獲取訓練集的資料集做準備。在此我將一句一句進行理解,做解析。
1 獲取VOC2012資料集
首先獲取VOC2012資料集,YOLO官網為我們提供了路徑:
wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
2 VOC2012資料集分析
VOC資料集包括訓練集、測試集,包含20個種類。
資料集的組成架構分為:Annotations,ImageSets,JPEGImages,SegmentationClass,SegmentationObject五個資料夾,分別對5個資料夾進行解析。資料夾如圖所示:
2.1 Annotations資料夾解析
Annotations資料夾包含著所有圖片資訊的.xml資訊,每個.xml檔案代表著每一張圖片。.xml檔案的格式如圖所示。後面講述程式碼會分析.xml檔案內容,讀取.xml檔案並將其轉化為txt格式(YOLO可以使用的txt文件)
2.2 ImageSets
ImageSets下有4個資料夾,我將對這4個資料夾的內容進行解析。4個資料夾如圖所示:
Action資料夾中是包含著人的的動作(如jumping,walking,riding等)
Layout資料夾中是包含著具體人的部位的資料(如人的head,feet等)
Main資料夾中是影象是影象識別的資料,總共分為20類
Segmentation資料夾中是可用於分割的資料
2.3 JPEGImages
JPEGImages就是存放著我們的所有資料集的圖片.
2.4 SegmentationClass
這裡麵包含了2913張圖片,圖片的畫素有20種,即代表了20個種類。
2.5 SegmentationObject
這裡麵包含了2913張圖片,與SegmentationClass不同之處在於該是針對Object的,即一張圖片中出現多個相同物體用不同的顏色來表示。
3 YOLO資料格式
前面博文已經講述Darknet有專門的py檔案來將.xml檔案轉為.txt檔案。即voc_label.py檔案,現在我要將該py檔案進行解析。
總結:通過voc_label.py檔案我們將xml檔案的資料轉化為YOLO所要求的.txt文件,並且得到我們在訓練時的obj.data中訓練集,測試集的位置的txt,便於我們實驗用,但有時候我們標註完產生的不是xml檔案而是txt檔案,我們怎麼做,我遇到過這種問題,下篇部落格我為大家講述出現這種情況我們的程式碼解析,以及實際訓練結果.
參考部落格:https://blog.csdn.net/zhangjunbob/article/details/52769381