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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lableimg闪退_CV学习笔记(二十五):数据集标注与制作

發(fā)布時間:2025/3/8 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lableimg闪退_CV学习笔记(二十五):数据集标注与制作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近在做一些數(shù)據(jù)標(biāo)注的工作,雖然標(biāo)注數(shù)據(jù)比較枯燥,但這也是每個做算法的工程師升級打怪的必由之路。使用一些合適的工具往往可以事半功倍,效率UP。

一:數(shù)據(jù)標(biāo)注流程

二:數(shù)據(jù)處理的一些小代碼

1:重命名

當(dāng)?shù)玫竭@樣格式命名不一致的數(shù)據(jù)的時候,重命名是最好的方法。

代碼:

#coding=UTF-8

'''

重命名工具

'''

import os

import sys

def rename():

path=input(r"請輸入路徑(例如D:\picture):")

name=input("請輸入開頭名:")

startNumber=input("請輸入開始數(shù):")

fileType=input("請輸入后綴名(如 .jpg、.txt等等):")

print("正在生成以"+name+startNumber+fileType+"迭代的文件名")

count=0

filelist=os.listdir(path)

for files in filelist:

Olddir=os.path.join(path,files)

if os.path.isdir(Olddir):

continue

Newdir=os.path.join(path,name+str(count+int(startNumber))+fileType)

os.rename(Olddir,Newdir)

count+=1

print("一共修改了"+str(count)+"個文件")

if __name__ == '__main__':

rename()

重命名后的文件會覆蓋之前的文件,記得操作之前備份原始數(shù)據(jù)(如有需要的話)

2:數(shù)據(jù)標(biāo)注工具:

對于VOC數(shù)據(jù)集,使用labelimgs很方便,安裝過程也很簡單:

開源地址如下:https://github.com/tzutalin/labelImg

如上圖所示,框選完口罩后,點擊OK會生成一個跟你文件名一致的XML文件,XML中包括有文件路徑,文件名稱,以及你給的標(biāo)簽等等信息,如下圖:

3:劃分?jǐn)?shù)據(jù)集

因為要符合VOC數(shù)據(jù)集格式,這里簡單說一下VOC數(shù)據(jù)集格式類型。做深度學(xué)習(xí)目標(biāo)檢測方面的同學(xué)怎么都會接觸到PASCAL VOC這個數(shù)據(jù)集。也許很少用到整個數(shù)據(jù)集,但是一般都會按照它的格式準(zhǔn)備自己的數(shù)據(jù)集。所以這里就來記錄一下PASCAL VOC的格式,包括目錄構(gòu)成以及各個文件夾的內(nèi)容格式,方便以后自己按照VOC的標(biāo)準(zhǔn)格式制作自己的數(shù)據(jù)集。

但是我們一般情況下,自己制作數(shù)據(jù)集不需要Segment開頭的,著重關(guān)注這三個文件夾:

Annotation文件夾存放的是xml文件,該文件是對圖片的解釋,每張圖片都對于一個同名的xml文件。

ImageSets文件夾存放的是txt文件,這些txt將數(shù)據(jù)集的圖片分成了各種集合。

JPEGImages文件夾存放的是數(shù)據(jù)集的原圖片

轉(zhuǎn)換代碼:

import os

import random

xmlfilepath = r'D:/object_find/voc_title/VOCdevkit/VOC2007/Annotations'

saveBasePath = r"D:/object_find/voc_title/VOCdevkit/VOC2007/ImageSets/Main/"

#訓(xùn)練集和驗證集所占的比例

trainval_percent = 0.8

train_percent = 0.8

temp_xml = os.listdir(xmlfilepath)

total_xml = []

for xml in temp_xml:

if xml.endswith(".xml"):

total_xml.append(xml)

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)

print("train and val size", tv)

print("traub suze", tr)

#trainval,訓(xùn)練集測試集文件名,train,訓(xùn)練集,test,測試集,val驗證集的文件名

ftrainval = open(os.path.join(saveBasePath, 'trainval.txt'), 'w')

ftest = open(os.path.join(saveBasePath, 'test.txt'), 'w')

ftrain = open(os.path.join(saveBasePath, 'train.txt'), 'w')

fval = open(os.path.join(saveBasePath, 'val.txt'), 'w')

for i in list:

name = total_xml[i][:-4] + '\n'

if i in trainval:

ftrainval.write(name)

if i in train:

ftrain.write(name)

else:

fval.write(name)

else:

ftest.write(name)

ftrainval.close()

ftrain.close()

fval.close()

ftest.close()

運(yùn)行結(jié)果:

4:XML轉(zhuǎn)TXT

這里要用到XML工具包來匹配一下:

代碼:

import xml.etree.ElementTree as ET

from os import getcwd

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

classes = ["nomask","rightmask","wrongmask"]

def convert_annotation(year, image_id, list_file):

in_file = open('D:/object_find/voc_title/VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id))

tree=ET.parse(in_file)

root = tree.getroot()

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 = (int(xmlbox.find('xmin').text), int(xmlbox.find('ymin').text), int(xmlbox.find('xmax').text), int(xmlbox.find('ymax').text))

list_file.write(" " + ",".join([str(a) for a in b]) + ',' + str(cls_id))

wd = getcwd()

for year, image_set in sets:

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)

list_file.write('\n')

list_file.close()

生成結(jié)果:

生成txt文件,包括:圖片位置信息,目標(biāo)位置,類別

總結(jié)

以上是生活随笔為你收集整理的lableimg闪退_CV学习笔记(二十五):数据集标注与制作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。