日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows10下使用darknet和YOLOV3训练自己的数据集

發布時間:2025/3/21 windows 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows10下使用darknet和YOLOV3训练自己的数据集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

1.我的環境是windows10,vs2015,cuda9.1,cudnn7.1。
2. darknet加yoloV3,用cmake和vs2015編譯成darknet.exe。
3. 我的目錄結構是在darknet目錄下新建了一個build的目錄,這個目錄就是vs生成工程的目錄,在windows下,所有的操作都在這個目錄里面完成。

一、數據準備

1.我使用的數據格式是VOC2007,關于這個數據集,可以看我之后博客。
2.標注工具用的是LabelImag的win版本。可以從這里下載,不用安裝,直接運行,但存在的路徑不能有中文。標注使用也可以看我之后的博客。
3.標注時按VOC形式標注,也可以選yolo的方式標注,如果一開始用yolo方法標注,之后就不用轉換那么麻煩。這兩種標注的標簽,一種是xml,一種是txt。
VOC格式:

YOLO格式:

4.標注好的數據對應存在VOC2007目錄Annotations里面,標注的圖像放在JPEGImages里面。標注好的數據是一一對應的。

二.處理VOC2007數據

1.在darknet的工程目錄下,darknet\build\darknet\x64\data\下,新建立一個VOCdevkit目錄,把VOC2007的目錄放到里面。

2.VOC2007當時下面只有三個目錄。

Annotations里面就標簽文件:

JPEGImages里面是對應的圖像文件:

ImageSets下面有一個Main目錄,但當前為空:

3.用python創建Main目錄里面的train.txt,val.txt,test.txt和trainval.txt這四個文件。
(1)在VOC2007目錄下創建一個python代碼,我這里命名CreateMainDirTex.py
CreateMainDirTex.py的代碼如下:

import os import randomtrainval_percent = 0.1 train_percent = 0.9 xmlfilepath = 'Annotations' txtsavepath = 'ImageSets\Main' total_xml = os.listdir(xmlfilepath)num = len(total_xml) list = range(num) tv = int(num * trainval_percent) tr = int(tv * train_percent) trainval = random.sample(list, tv) train = random.sample(trainval, tr)ftrainval = open('ImageSets/Main/trainval.txt', 'w') ftest = open('ImageSets/Main/test.txt', 'w') ftrain = open('ImageSets/Main/train.txt', 'w') fval = open('ImageSets/Main/val.txt', 'w')for i in list:name = total_xml[i][:-4] + '\n'if i in trainval:ftrainval.write(name)if i in train:ftest.write(name)else:fval.write(name)else:ftrain.write(name)ftrainval.close() ftrain.close() fval.close() ftest.close()


(2)保存之后運行,結果在Main下創建了四個txt文件。文件內容如下:

3.VOC2007數據轉YOLOV3數據。
(1)在工程目錄下darknet\build\darknet\x64\data\voc位置下找到voc_label.py這個文件,復制到darknet\build\darknet\x64\data下。

(2)更改的代碼,有兩個位置,一個是數據格式,一個是標注的標簽名。

具體的代碼更改如下,我只有一個標簽,這個標簽名字是"a"

import xml.etree.ElementTree as ET import pickle import os from os import listdir, getcwd from os.path import joinsets=[ ('2007', 'train'), ('2007', 'val'), ('2007', 'test')]classes = ["a"]def convert(size, box):dw = 1./size[0]dh = 1./size[1]x = (box[0] + box[1])/2.0y = (box[2] + box[3])/2.0w = box[1] - box[0]h = box[3] - box[2]x = x*dww = w*dwy = y*dhh = h*dhreturn (x,y,w,h)def convert_annotation(year, image_id):in_file = open('VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id),'rb')out_file = open('VOCdevkit/VOC%s/labels/%s.txt'%(year, image_id), 'w')tree=ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text))bb = convert((w,h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')wd = getcwd()for year, image_set in sets:if not os.path.exists('VOCdevkit/VOC%s/labels/'%(year)):os.makedirs('VOCdevkit/VOC%s/labels/'%(year))image_ids = open('VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split()list_file = open('%s_%s.txt'%(year, image_set), 'w')for image_id in image_ids:list_file.write('%s/VOCdevkit/VOC%s/JPEGImages/%s.jpg\n'%(wd, year, image_id))convert_annotation(year, image_id)list_file.close()

(2)保存之后運行,會在當前的目錄下多出三個文件和在VOC2007目錄下多出一個labels目錄。
三個txt文件:

文件里面的內容:

labels目錄:

目錄下文件內容:

三、更改配置文件

1.在darknet\build\darknet\x64\data目錄下找到voc.data文件,我這里復制之后改名字成train.data。

打開文件,更改內容如下,就是對上剛剛生成的txt文件。

2.找到obj.names文件,也在darknet\build\darknet\x64\data目錄下,改成自己標注的名字。

3.在darknet\build\darknet\x64目錄在找到yoloV3.cfg文件,我這里復制一份重命名成yoloV3_a.cfg.
(1)打開這個文件,找到classes這個標簽,改成自己標注的種類,我這里只有一種,所以改成1,總共有三個地方要改。

(2)在三個位于[yolo]層之前的[convolutional]層中,將filters修改為(classes *(1 + 4)) × 3,我這里是改成18。

(3)更改迭代次數,找到max_batches,改成自己相要迭代的次數。

四、訓練模型

1.下載權重文件darknet53.conv.74,放到darknet\build\darknet\x64下。

2.win加r鍵,輸入cmd,cd到darknet\build\darknet\x64下。

3.輸入,其中train.data,yolov3_a.cfg和darknet53.conv.74都是剛剛加進來的文件,注意目錄,如果放在別的地方,把路徑寫對就可以了。

darknet.exe detector train data/train.data yolov3_a.cfg darknet53.conv.74

4.開始訓練時loss可能很大,有時候會跑出幾千來,等迭代100次左右就慢慢下降了。

loss曲線圖:

總結

以上是生活随笔為你收集整理的Windows10下使用darknet和YOLOV3训练自己的数据集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。