在SeaShips資料集上訓練並測試Yolov3

2021-09-25 16:44:36 字數 2036 閱讀 8118

本文主要記錄我在seaships資料集上訓練yolov3網路進行船隻檢測的簡單過程

對資料集的預處理

修改cfg檔案

修改data資料夾

seaships資料集共有四個資料夾,其中annotations資料夾內是每張的標籤,每個對應乙個xml檔案來儲存標籤,所以要將xml檔案中的內容轉為txt檔案,每張**對應乙個txt檔案,txt檔案命名與**命名一致,如00***x.jpg對應的標籤檔案為00***x.xml,我們要將00***x.xml檔案轉為00***x.txt檔案。

xml檔案給出了每乙個目標的類別,以及對應的bounding box的左上角和右下角的座標,注意對應的均為1920*1080解析度。

在工程中(修改後的工程鏈結會在文末給出),xml2txt.py檔案是用來完成這個任務的,注意轉成txt檔案要求是,一張**對應乙個txt檔案,乙個txt檔案每一行對應乙個船隻目標,每一行五個數,第乙個是類別,0~5分別代表六類船隻,剩下的四個數依次為bounding box中心點的x和y座標,然後是框的width和height,所有的資料均為歸一化後的資料,x和width要除以1920,y和height要除以1080.

注意一點:所有全部放在jpegimages資料夾下,所有標籤全部放在labels資料夾下,然後這兩個檔案下放在同乙個資料夾下。至於train,val,test,則分別建立包含各個集全部路徑的txt檔案。train的時候會根據txt檔案每一行路徑去讀取,然後會把路徑的jpegimages換成labels,把.jpg換為.txt去讀取標籤,這也是為什麼只能這樣命名資料夾且和標籤必須放在同乙個檔案下的原因。

cfg檔案裡面定義了網路框架,**中建立模型就是根據cfg檔案建立的,cfg資料夾內有3個cfg檔案,對應3種網路架構,yolov3,yolov3-spp,yolov3-tiny,複雜度和精確度依次下降,我選的是yolov3-spp,開啟yolov3-spp.cfg檔案,原始yolo含有255個輸出,[4 box coordinates + 1 object confidence + 80 class confidences]*3,乘3是因為yolov3在3個尺度上進行**。因為這裡只有6類船隻,因此搜尋filters=255,將255改為 33=(4+1+6)*3 即可。

開啟資料夾可看到有.data .names .txt三種型別檔案。.data檔案定義了類別數量classes,修改為6。第二行train=,這裡改為乙個txt檔案的路徑,這個txt檔案裡面是訓練集所有的路徑,每一行是一張的路徑,這個txt檔案需要自己寫**生成,**參照工程裡面create_txt.py。第三行,同理,valid=指向含有測試集路徑的txt檔案。第四行names=,指向乙個names檔案,可新建乙個字尾為.names的檔案,裡面每一行是每乙個類別的名字,在這裡6行,分別是6個類別的船的名字。第五行和第六行暫不用修改。(這裡注意,裡面有很多data檔案,**train.py預設使用coco.data,如果不想麻煩可直接修改coco64_img.data即可)

parser.add_argument('--cfg', type=str, default='cfg/yolov3-spp.cfg', help='cfg file path')

parser.add_argument('--data', type=str, default='data/coco.data', help='coco.data file path')

parser.add_argument('--weights', type=str, default='weights/yolov3-spp.weights', help='path to weights file')

test檔案195行左右,注意這裡預設使用coco.data, 和train.py不一樣,應該改為一致,修改weights那裡改為"best. pt"或者「latest. pt",就可以test你訓練的引數的效果了。

注:工程裡面kmena_anchor檔案是用來聚類初始anchor大小,修改初始anchor大小可顯著提公升訓練效果。

還有許多細節沒有體到,需要自己多去嘗試,debug的過程會讓你對整個架構有更清晰的認識。

修改後的工程:yolov3_seahips

在西瓜資料集上訓練 資料標註是做什麼的?

1.訓練集 用來除錯神經網路 2.驗證集 用來檢視訓練效果 檢視模型訓練的效果,是否朝著壞的方向進行,及時停止訓練 用在訓練的過程中,幾個epoch結束後就要跑一次驗證集看看效果,及時發現模型或者引數的問題。如果模型設計不合理,訓練的時候不容易發現,但是在驗證集中可能會發散 map不增長或者增長很慢...

openface 訓練資料集

訓練深度網路模型 openface還不是運用facenet的model作為訓練模型,所以在準確性上比facenet要低,如果你只是做乙個簡單的分類,建議你看看官網的demo3 如果你想自己訓練乙個模型,建議提供乙個大於500k的集作為訓練集。這裡的500k應該是50w張來理解更合適 openface...

在colab上使用自己的資料集

1 colab 可以非常方便地將ipynb儲存到github上!有趣。2 colab 從github上載入資料集,666,簡直不能更方便啊。使用 git clone 即可將github上的檔案轉殖到colab的當前目錄下,然後就可以愉快地使用自己的資料集了。ls r檢視當前目錄下的檔案及所有的子目錄...