当前位置:网站首页>[target detection] small script: extract training set images and labels and update the index
[target detection] small script: extract training set images and labels and update the index
2022-08-10 13:21:00 【zstar-_】
问题场景
在做目标检测任务时,I would like to extract images of the training set for external data augmentation alone.因此,need to be divided according totrain.txt
to extract training set images and labels.
需求实现
我使用VOC数据集进行测试,实现比较简单.
import shutil
if __name__ == '__main__':
img_src = r"D:\Dataset\VOC2007\images"
xml_src = r"D:\Dataset\VOC2007\Annotations"
img_out = "image_out/"
xml_out = "xml_out/"
txt_path = r"D:\Dataset\VOC2007\ImageSets\Segmentation\train.txt"
# 读取txt文件
with open(txt_path, 'r') as f:
line_list = f.readlines()
for line in line_list:
line_new = line.replace('\n', '') # 将换行符替换为空('')
shutil.copy(img_src + '/' + line_new + ".jpg", img_out)
shutil.copy(xml_src + '/' + line_new + ".xml", xml_out)
效果:
Update the training set index
使用数据增强之后,Throw the generated image and label thereVOC里面,混在一起.
Then write a script,Add the generated image name to train.txt
文件中.
import os
if __name__ == '__main__':
xml_src = r"C:\Users\xy\Desktop\read_train\xml_out_af"
txt_path = r"D:\Dataset\VOC2007\ImageSets\Segmentation\train.txt"
for name in os.listdir(xml_src):
with open(txt_path, 'a') as f:
f.write(name[:-4] + "\n")
效果:
最后,before running againVOCWritten in the blog postxml2txt脚本:
import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
sets = ['train', 'test', 'val']
Imgpath = r'D:\Dataset\VOC2007\images' # 图片文件夹
xmlfilepath = r'D:\Dataset\VOC2007\Annotations' # xml文件存放地址
ImageSets_path = r'D:\Dataset\VOC2007\ImageSets\Segmentation'
Label_path = r'D:\Dataset\VOC2007'
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(image_id):
in_file = open(xmlfilepath + '/%s.xml' % (image_id))
out_file = open(Label_path + '/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
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]) + '\n')
for image_set in sets:
if not os.path.exists(Label_path + 'labels/'):
os.makedirs(Label_path + 'labels/')
image_ids = open(ImageSets_path + '/%s.txt' % (image_set)).read().strip().split()
list_file = open(Label_path + '%s.txt' % (image_set), 'w')
for image_id in image_ids:
# print(image_id) # DJI_0013_00360
list_file.write(Imgpath + '/%s.jpg\n' % (image_id))
convert_annotation(image_id)
list_file.close()
运行之后,You can see that the generated data augmentation samples are perfectly added to the original dataset.
边栏推荐
- 燃炸!字节跳动成功上岸,只因刷爆LeetCode算法面试题
- BEVDet4D: Exploit Temporal Cues in Multi-camera 3D Object Detection Paper Notes
- Guidelines for Sending Overseas Mail (2)
- 3DS MAX 批量导出文件脚本 MAXScript 带界面
- Overview of Loudi Petrochemical Experiment Design and Construction Planning
- Reversing words in a string in LeetCode
- 大佬们有遇到过这个问题吗? MySQL 2.2 和 2.3-SNAPSHOT 都这样,貌似是
- 【iOS】Organization of interviews
- 【学习笔记】Redis的持久化
- 【目标检测】小脚本:提取训练集图片与标签并更新索引
猜你喜欢
Reversing words in a string in LeetCode
Comparison version number of middle questions in LeetCode
LeetCode中等题之比较版本号
R语言实战应用案例:论文篇(一)-特殊柱形图绘制
Matrix Keyboard & Calculator Small Project Based on 51 (UcosII)
Guidelines for Sending Overseas Mail (2)
交换机的基础知识
How to describe multiple paragraphs with different font settings in Open Office XML format
Interface Automation Testing Basics
Redis上云迁移实践
随机推荐
Pod生命周期
Merge similar items in LeetCode simple questions
Solution for "Certificate not valid for requested usage" after Digicert EV certificate signing
娄底石油化工实验设计、建设规划概述
【目标检测】小脚本:提取训练集图片与标签并更新索引
娄底妆品实验室建设规划构思
Nanodlp v2.2/v3.0 light curing circuit board, connection method of mechanical switch/photoelectric switch/proximity switch and system state level setting
Jenkins修改默认主目录
进程和计划任务管理
广东10个项目入选工信部2021年物联网示范项目名单
3DS MAX batch export file script MAXScript with interface
娄底干细胞制备实验室建设须知要求
鸿蒙开发从hello world开始
Proprietary cloud ABC Stack, the real strength!
sprintboot项目通过interceptor和filter实现接入授权控制
mSystems | 中农汪杰组揭示影响土壤“塑料际”微生物群落的机制
YTU 2295: KMP pattern match one (string)
【百度统计】用户行为分析
神经网络可视化有3D版本了,美到沦陷!(已开源)
shell:常用小工具(sort、uniq、tr、cut)