成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

YOLO目標(biāo)檢測(cè)模型重新訓(xùn)練

shiina / 3505人閱讀

摘要:本文將介紹如何使用其他數(shù)據(jù)集重新訓(xùn)練模型,文章將會(huì)詳細(xì)介紹每一步。下載數(shù)據(jù)集我們將使用數(shù)據(jù)集訓(xùn)練我們的模型,該數(shù)據(jù)集可以用來(lái)做圖像分類目標(biāo)檢測(cè)圖像分割。模型訓(xùn)練完成后,權(quán)重文件保存路徑。

介紹

YOLO目標(biāo)檢測(cè)快速上手這篇文章我們通過(guò)簡(jiǎn)短的代碼就實(shí)現(xiàn)了一個(gè)視頻目標(biāo)檢測(cè)功能。本文將介紹如何使用其他數(shù)據(jù)集重新訓(xùn)練YOLO模型,文章將會(huì)詳細(xì)介紹每一步。

下載數(shù)據(jù)集

我們將使用Pascal VOC數(shù)據(jù)集訓(xùn)練我們的模型,該數(shù)據(jù)集可以用來(lái)做圖像分類、目標(biāo)檢測(cè)、圖像分割。
下載并解壓文件后,我們介紹下相關(guān)文件的作用。

“Annotations”文件夾:用于存放圖片描述,文件格式為.xml,具體內(nèi)容如下圖所示:

如圖所示,文件保存了圖片文件名,尺寸,標(biāo)注,坐標(biāo),是否分割等信息。

“ImageSets”文件夾:保存了不同用途的圖片名字列表,文件格式是.txt。

“l(fā)ayout”文件夾:保存具有人體部位的圖片名字列表。
“main”文件夾:保存用于圖像物體識(shí)別的圖片名字列表。
“segmenttions”文件夾:保存用于圖像分割的圖片名字列表。
因?yàn)楸敬雾?xiàng)目使用“main”文件夾,所以我們?cè)僭敿?xì)看下:

文件夾一共有20個(gè)分類的文件,通過(guò)文件名字我想大家肯定也知道作用了。這里介紹下文件里的正負(fù)數(shù)代表正負(fù)樣本,如:

“JPEGImages”文件夾:保存全部圖片源文件。

這里我們要留意的是圖片名字,以后我們?cè)谧约簞?chuàng)建數(shù)據(jù)集的時(shí)候,最好也參考此命名方式。

“SegmentationClass”,“SegmentationObject”保存用于圖像分割的源圖片,兩者區(qū)別如圖所示:

創(chuàng)建標(biāo)簽

標(biāo)簽的結(jié)構(gòu)是四維分別是("類別",“中心點(diǎn)x坐標(biāo)”,“中心點(diǎn)y”坐標(biāo),“圖片寬度”,“圖片高度”),其實(shí)就是上面所說(shuō)的圖片xml文件中的內(nèi)容。我們可以通過(guò)官方提供的python文件來(lái)執(zhí)行此操作。

# 獲取py文件
wget https://pjreddie.com/media/files/voc_label.py

執(zhí)行此文件之前留意下相關(guān)路徑是否正確

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join

sets=[("2007", "train"), ("2007", "val"), ("2007", "test")]

classes = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]


def convert(size, box):
    dw = 1./size[0]
    dh = 1./size[1]
    x = (box[0] + box[1])/2.0
    y = (box[2] + box[3])/2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)

def convert_annotation(year, image_id):
    in_file = open("VOCdevkit/VOC%s/Annotations/%s.xml"%(year, image_id))
    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").text
        cls = obj.find("name").text
        if cls not in classes or int(difficult) == 1:
            continue
        cls_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]) + "
")

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
"%(wd, year, image_id))
        convert_annotation(year, image_id)
    list_file.close()

執(zhí)行py文件:

python voc_label.py

執(zhí)行成功后會(huì)生成一個(gè)label文件夾和三個(gè)txt文件,分別是“2007_train.txt”,"2007_test.txt","2007_val.txt"(我只下載了2007的數(shù)據(jù)集),文件保存的是對(duì)應(yīng)功能的全部圖片路徑:

label文件夾內(nèi)文件格式:

分別是:("類別",“中心點(diǎn)x坐標(biāo)”,“中心點(diǎn)y”坐標(biāo),“圖片寬度”,“圖片高度”)

修改配置文件

打開(kāi)darknet/cfg/voc.data,修改“train”,“valid”文件路徑。

“classes”:數(shù)據(jù)集中圖片分類數(shù)量。

“train”:用于訓(xùn)練的圖片數(shù)據(jù)集絕對(duì)路徑。

“valid”:用于驗(yàn)證的圖片數(shù)據(jù)集絕對(duì)路徑。

“names”:數(shù)據(jù)集中圖片分類名字,如:“dog”,“person”等。

“backup”:模型訓(xùn)練完成后,權(quán)重文件保存路徑。

模型訓(xùn)練

首先下載YOLOv3模型:

wget https://pjreddie.com/media/files/darknet53.conv.74

訓(xùn)練之前,我們先看下yolov3-voc.cfg文件里都是什么:

[net]
# Testing
# batch=1
# subdivisions=1 

# 模型訓(xùn)練模式
Training 
# batch_size
batch=64
# 用于進(jìn)一步分割batch_size,分割后的batch_size大小為:batch_size/subdivisions
subdivisions=16
# 模型輸入圖像寬
width=416
# 模型輸入圖像高
height=416
# 圖像通道數(shù)
channels=3
# 使用帶動(dòng)量?jī)?yōu)化函數(shù)的動(dòng)量參數(shù)
momentum=0.9
# 權(quán)重衰減率,用于防止過(guò)擬合
decay=0.0005

# 以下4項(xiàng)是通過(guò)改變圖像角度,飽和度,曝光量,色調(diào)來(lái)生成更多樣本,可用于防止過(guò)擬合
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

# 初始學(xué)習(xí)率
learning_rate=0.001
burn_in=1000
# 迭代次數(shù)
max_batches = 50200
# 當(dāng)?shù)?0000,45000時(shí)更改學(xué)習(xí)率
policy=steps
steps=40000,45000
scales=.1,.1



[convolutional]
# BN標(biāo)準(zhǔn)化處理,可以通過(guò)改變數(shù)據(jù)分布,處理梯度過(guò)小問(wèn)題,加快模型收斂
batch_normalize=1
# 輸出特征大小
filters=32
# 卷積核大小3x3
size=3
# 卷積步長(zhǎng)為1
stride=1
# pad為0,padding由 padding參數(shù)指定。如果pad為1,padding大小為size/2
pad=1
# 激活函數(shù),和relu的區(qū)別是當(dāng)輸入值小于0時(shí),輸出不為0
activation=leaky

**。。。。。省略。。。。。。**

[yolo]
mask = 0,1,2
# 預(yù)選框,可手動(dòng)指定也可通過(guò)聚類學(xué)習(xí)得到
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
# 識(shí)別種類
classes=20
# 每個(gè)cell預(yù)測(cè)box數(shù)量,yolov1時(shí)只有一個(gè)
num=9
# 增加噪聲
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=1

執(zhí)行訓(xùn)練:

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

訓(xùn)練完成后,權(quán)重文件保存在backup文件夾內(nèi)。

總結(jié)

如果訓(xùn)練我們自己的數(shù)據(jù),數(shù)據(jù)準(zhǔn)備工作參考VOC數(shù)據(jù)集,在模型訓(xùn)練之前還要更改cfg/yolov3-voc.cfg文件,修改classes類別數(shù)量和filter數(shù)量,其中filter計(jì)算方式:3*(classes+1+4),然后訓(xùn)練即可。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42851.html

相關(guān)文章

  • YOLO v3有了PaddlePaddle實(shí)現(xiàn) | 代碼+預(yù)訓(xùn)練模型

    摘要:值得一提的是,基于百度自研的開(kāi)源深度學(xué)習(xí)平臺(tái)的實(shí)現(xiàn),參考了論文,增加了,等處理,精度相比于原作者的實(shí)現(xiàn)提高了個(gè)絕對(duì)百分點(diǎn),在此基礎(chǔ)上加入最終精度相比原作者提高個(gè)絕對(duì)百分點(diǎn)。 YOLO作為目標(biāo)檢測(cè)領(lǐng)域的創(chuàng)新技術(shù),一經(jīng)推出就受到開(kāi)發(fā)者的廣泛關(guān)注。值得一提的是,基于百度自研的開(kāi)源深度學(xué)習(xí)平臺(tái)PaddlePaddle的YOLO v3實(shí)現(xiàn),參考了論文【Bag of Tricks for Imag...

    xavier 評(píng)論0 收藏0
  • YOLO目標(biāo)檢測(cè)模型原理介紹

    摘要:將圖像到作為輸入,輸出,即將圖片劃分為,每個(gè)單元格獨(dú)立檢測(cè)。類別損失當(dāng)有物體的中心點(diǎn)落在單元格中,此單元格就負(fù)責(zé)預(yù)測(cè)該物體。 YOLO-v1介紹 YOLO是一個(gè)端到端的目標(biāo)檢測(cè)算法,不需要預(yù)先提取region proposal(RCNN目標(biāo)檢測(cè)系列),通過(guò)一個(gè)網(wǎng)絡(luò)就可以輸出:類別,置信度,坐標(biāo)位置,檢測(cè)速度很快,不過(guò),定位精度相對(duì)低些,特別是密集型小目標(biāo)。 showImg(https:...

    妤鋒シ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<