精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

YOLOv7訓練自己的數據集包括哪些

新機器視覺 ? 來源:新機器視覺 ? 2023-05-29 15:18 ? 次閱讀

YOLOv7訓練自己的數據集整個過程主要包括:環境安裝—制作數據集—模型訓練—模型測試—模型推理

一、準備深度學習環境

本人的筆記本電腦系統是:Windows10

首先下載YOLOv7的代碼,手動下載zip或是git clone 遠程倉庫,本人下載的是YOLOv7的0.1版本代碼:

https://github.com/WongKinYiu/yolov7

代碼文件夾中會有requirements.txt文件,里面描述了所需要的安裝包。

本文最終安裝的pytorch版本是1.8.1,torchvision版本是0.9.1,python是3.7.10,其他的依賴庫按照requirements.txt文件安裝即可。

18c028f6-fc80-11ed-90ce-dac502259ad0.png

二、 準備自己的數據集

本人標注的數據格式是VOC,而YOLOv7能夠直接使用的是YOLO格式的數據,因此下面將介紹如何將自己的數據集轉換成可以直接讓YOLOv7進行使用。

1、創建數據集

在YOLOv7文件夾中的data目錄下創建mydata文件夾(名字可以自定義),目錄結構如下,將之前labelImg標注好的xml文件和圖片放到對應目錄下

mydata

…images # 存放圖片

…xml # 存放圖片對應的xml文件

…dataSet #之后會在Main文件夾內自動生成train.txt,val.txt,test.txt和trainval.txt四個文件,存放訓練集、驗證集、測試集圖片的名字(無后綴.jpg)

示例如下:

mydata文件夾下內容如下:

18ddbd4e-fc80-11ed-90ce-dac502259ad0.png

image為VOC數據集格式中的JPEGImages,內容如下:

18ea5c98-fc80-11ed-90ce-dac502259ad0.png

xml文件夾下面為.xml文件(標注工具采用labelImage),內容如下:

18fe56b2-fc80-11ed-90ce-dac502259ad0.png

dataSet 文件夾下面存放訓練集、驗證集、測試集的劃分,通過腳本生成,可以創建一個split_train_val.py文件,代碼內容如下:

# coding:utf-8
 
import os
import random
import argparse
 
parser = argparse.ArgumentParser()
# xml文件的地址,根據自己的數據進行修改 xml一般存放在Annotations下
parser.add_argument('--xml_path', default='xml', type=str, help='input xml label path')
# 數據集的劃分,地址選擇自己數據下的ImageSets/Main
parser.add_argument('--txt_path', default='dataSet', type=str, help='output txt label path')
opt = parser.parse_args()
 
trainval_percent = 1.0
train_percent = 0.9
xmlfilepath = opt.xml_path
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)
if not os.path.exists(txtsavepath):
  os.makedirs(txtsavepath)
 
num = len(total_xml)
list_index = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list_index, tv)
train = random.sample(trainval, tr)
 
file_trainval = open(txtsavepath + '/trainval.txt', 'w')
file_test = open(txtsavepath + '/test.txt', 'w')
file_train = open(txtsavepath + '/train.txt', 'w')
file_val = open(txtsavepath + '/val.txt', 'w')
 
for i in list_index:
  name = total_xml[i][:-4] + '
'
  if i in trainval:
    file_trainval.write(name)
    if i in train:
      file_train.write(name)
    else:
      file_val.write(name)
  else:
    file_test.write(name)
 
file_trainval.close()
file_train.close()
file_val.close()
file_test.close()

運行代碼后,在dataSet 文件夾下生成下面四個txt文檔:

191167fc-fc80-11ed-90ce-dac502259ad0.png

三個txt文件里面的內容如下:

191c40aa-fc80-11ed-90ce-dac502259ad0.png

2、轉換數據格式

接下來準備labels,把數據集格式轉換成yolo_txt格式,即將每個xml標注提取bbox信息為txt格式,每個圖像對應一個txt文件,文件每一行為一個目標的信息,包括class, x_center, y_center, width, height格式。格式如下:

1939fd84-fc80-11ed-90ce-dac502259ad0.png

創建voc_label.py文件,將訓練集、驗證集、測試集生成label標簽(訓練中要用到),同時將數據集路徑導入txt文件中,代碼內容如下:

# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import os
from os import getcwd
 
sets = ['train', 'val', 'test']
classes = ["a", "b"]  # 改成自己的類別
abs_path = os.getcwd()
print(abs_path)
 
def convert(size, box):
  dw = 1. / (size[0])
  dh = 1. / (size[1])
  x = (box[0] + box[1]) / 2.0 - 1
  y = (box[2] + box[3]) / 2.0 - 1
  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(image_id):
  in_file = open('data/mydata/xml/%s.xml' % (image_id), encoding='UTF-8')
  out_file = open('data/mydata/labels/%s.txt' % (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
    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))
    b1, b2, b3, b4 = b
    # 標注越界修正
    if b2 > w:
      b2 = w
    if b4 > h:
      b4 = h
    b = (b1, b2, b3, b4)
    bb = convert((w, h), b)
    out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '
')
 
wd = getcwd()
for image_set in sets:
  if not os.path.exists('data/mydata/labels/'):
    os.makedirs('data/mydata/labels/')
  image_ids = open('data/mydata/dataSet/%s.txt' % (image_set)).read().strip().split()
  list_file = open('mydata/%s.txt' % (image_set), 'w')
  for image_id in image_ids:
    list_file.write(abs_path + '/mydata/images/%s.jpg
' % (image_id))
    convert_annotation(image_id)
  list_file.close()

3、配置文件

1)數據集的配置

在YOLOv7目錄下的data文件夾下新建一個mydata.yaml文件(可以自定義命名),用來存放訓練集和驗證集的劃分文件(train.txt和val.txt)

這兩個文件是通過運行voc_label.py代碼生成的,然后是目標的類別數目和具體類別列表,mydata.yaml內容如下:

1948e498-fc80-11ed-90ce-dac502259ad0.png

2) 選擇一個你需要的模型

在YOLOv7目錄下的cfg/deploy文件夾下是模型的配置文件,這邊提供yolov7、yolov7-d6、yolov7-e6、yolov7-e6e、yolov7x等多個版本,假設采用yolov7x.yaml,只用修改一個參數,把nc改成自己的類別數,需要取整(可選) 如下:

1953b396-fc80-11ed-90ce-dac502259ad0.png

至此,自定義數據集已創建完畢,接下來就是訓練模型了。

三、模型訓練

1、下載預訓練模型

在YOLOv7的GitHub開源網址上下載對應版本的模型

19653850-fc80-11ed-90ce-dac502259ad0.png

2、訓練

在正式開始訓練之前,需要對train.py進行以下修改:

197b27b4-fc80-11ed-90ce-dac502259ad0.png

以上參數解釋如下:

epochs:指的就是訓練過程中整個數據集將被迭代多少次,顯卡不行你就調小點。

batch-size:一次看完多少張圖片才進行權重更新,梯度下降的mini-batch,顯卡不行你就調小點。

cfg:存儲模型結構的配置文件

data:存儲訓練、測試數據的文件

img-size:輸入圖片寬高,顯卡不行你就調小點。

之后運行訓練命令如下:

python train.py --img 640 --batch 32 --epoch 300 --data data/mydata.yaml --cfg cfg/deploy/yolov7x.yaml --weights weights/yolov7x.pt --device '0' 

四、模型測試

評估模型好壞就是在有標注的測試集或者驗證集上進行模型效果的評估,在目標檢測中最常使用的評估指標為mAP。在test.py文件中指定數據集配置文件和訓練結果模型,如下:

19880d8a-fc80-11ed-90ce-dac502259ad0.png

通過下面的命令進行模型測試:

python test.py --data data/mydata.yaml --weights runs/exp1/weights/best.pt --augment

模型測試效果如下:

19b9c71c-fc80-11ed-90ce-dac502259ad0.png

五、模型推理

最后,模型在沒有標注的數據集上進行推理,在detect.py文件中指定測試圖片和測試模型的路徑

其他參數(img_size、置信度object confidence threshold、IOU threshold for NMS)可自行修改,如下:

19cbc908-fc80-11ed-90ce-dac502259ad0.png

使用下面的命令,其中,weights使用最滿意的訓練模型即可,source則提供一個包含所有測試圖片的文件夾路徑即可。

 python detect.py --weights runs/exp1/weights/best.pt --source inference/images/ --device 0,1

測試完畢后,每個測試圖片會在指定的inference/output輸出文件夾中生成結果圖片文件,如下:

19d8608c-fc80-11ed-90ce-dac502259ad0.png

審核編輯:彭靜

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模型
    +關注

    關注

    1

    文章

    3171

    瀏覽量

    48711
  • 代碼
    +關注

    關注

    30

    文章

    4744

    瀏覽量

    68345
  • 數據集
    +關注

    關注

    4

    文章

    1205

    瀏覽量

    24641

原文標題:YOLOv7訓練自己的數據集(超詳細)

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    YOLOV7網絡架構解讀

    繼美團發布YOLOV6之后,YOLO系列原作者也發布了YOLOV7
    的頭像 發表于 11-29 10:00 ?1765次閱讀
    <b class='flag-5'>YOLOV7</b>網絡架構解讀

    maixcam部署yolov5s 自定義模型

    部分不一樣。 獲得自定義訓練得到的yolov5s onnx模型 準備自定義數據(博主用的是VOC數據
    發表于 04-23 15:43

    CV之YOLOv3:深度學習之計算機視覺神經網絡Yolov3-5clessses訓練自己數據全程記錄

    CV之YOLOv3:深度學習之計算機視覺神經網絡Yolov3-5clessses訓練自己數據
    發表于 12-24 11:51

    使用YOLOv3訓練BDD100K數據之開始訓練

    (三)使用YOLOv3訓練BDD100K數據之開始訓練
    發表于 05-12 13:38

    怎樣使用PyTorch Hub去加載YOLOv5模型

    在Python>=3.7.0環境中安裝requirements.txt,包括PyTorch>=1.7。模型和數據從最新的 YOLOv5版本自動下載。簡單示例此示例從
    發表于 07-22 16:02

    YOLOv6中的用Channel-wise Distillation進行的量化感知訓練

    預測任務很有價值?! ∽髡邔σ恍┟芗念A測任務進行了實驗,包括語義分割和目標檢測。實驗表明提出的方法大大優于最先進的蒸餾方法,并且在訓練期間需要更少的計算成本。特別是,在COCO 數據
    發表于 10-09 16:25

    yolov7 onnx模型在NPU上太慢了怎么解決?

    ://github.com/WongKinYiu/yolov7/releases下載yolov7-tiny.pt ,并重命名yolov7tiny.pt2.將yolov7tiny.pt轉
    發表于 04-04 06:13

    無法使用MYRIAD在OpenVINO trade中運行YOLOv7自定義模型怎么解決?

    無法確定如何將 YOLOv7 模型的重量(.pt 文件)轉換為OpenVINO?中間表示 (IR) 并推斷有 MYRIAD 的 IR。 分辨率 轉換使用此 GitHub* 存儲庫
    發表于 08-15 08:29

    深度解析YOLOv7的網絡結構

    最近,Scaled-YOLOv4的作者(也是后來的YOLOR的作者)和YOLOv4的作者AB大佬再次聯手推出了YOLOv7,目前來看,這一版的YOLOv7是一個比較正統的YOLO續作,
    的頭像 發表于 09-14 11:16 ?7498次閱讀

    一文徹底搞懂YOLOv8【網絡結構+代碼+實操】

    從上面可以看出,YOLOv8 主要參考了最近提出的諸如 YOLOX、YOLOv6、YOLOv7 和 PPYOLOE 等算法的相關設計,本身的創新點不多,偏向工程實踐,主推的還是 ultralytics 這個框架本身。
    的頭像 發表于 06-15 17:15 ?1.2w次閱讀
    一文徹底搞懂<b class='flag-5'>YOLOv</b>8【網絡結構+代碼+實操】

    yolov5和YOLOX正負樣本分配策略

    整體上在正負樣本分配中,yolov7的策略算是yolov5和YOLOX的結合。因此本文先從yolov5和YOLOX正負樣本分配策略分析入手,后引入到YOLOv7的解析中。
    發表于 08-14 11:45 ?2197次閱讀
    <b class='flag-5'>yolov</b>5和YOLOX正負樣本分配策略

    使用OpenVINO優化并部署訓練好的YOLOv7模型

    在《英特爾銳炫 顯卡+ oneAPI 和 OpenVINO 實現英特爾 視頻 AI 計算盒訓推一體-上篇》一文中,我們詳細介紹基于英特爾 獨立顯卡搭建 YOLOv7 模型的訓練環境,并完成了 YOLOv7 模型
    的頭像 發表于 08-25 11:08 ?1455次閱讀
    使用OpenVINO優化并部署<b class='flag-5'>訓練</b>好的<b class='flag-5'>YOLOv7</b>模型

    詳細解讀YOLOV7網絡架構設計

    YOLOV7提出了輔助頭的一個訓練方法,主要目的是通過增加訓練成本,提升精度,同時不影響推理的時間,因為輔助頭只會出現在訓練過程中。
    發表于 11-27 10:45 ?729次閱讀
    詳細解讀<b class='flag-5'>YOLOV7</b>網絡架構設計

    PyTorch如何訓練自己數據

    數據。本文將深入解讀如何使用PyTorch訓練自己數據,
    的頭像 發表于 07-02 14:09 ?1322次閱讀

    如何訓練自己的AI大模型

    訓練AI大模型之前,需要明確自己的具體需求,比如是進行自然語言處理、圖像識別、推薦系統還是其他任務。 二、數據收集與預處理 數據收集 根據任務需求,收集并準備好足夠的
    的頭像 發表于 10-23 15:07 ?580次閱讀