当前位置:网站首页>[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.
边栏推荐
- A detailed explanation of implementation api embed
- 【iOS】面试整理
- [Study Notes] Persistence of Redis
- WebView的优化与常见问题解决方案
- LeetCode·每日一题·640.求解方程·模拟构造
- Blast!ByteDance successfully landed, only because the interview questions of LeetCode algorithm were exhausted
- 山水的高度
- M²BEV: Multi-Camera Joint 3D Detection and Segmentation with Unified Bird’s-Eye View Representation
- 娄底疾控中心实验室设计理念说明
- LeetCode中等题之颠倒字符串中的单词
猜你喜欢
Interface Automation Testing Basics
Blast!ByteDance successfully landed, only because the interview questions of LeetCode algorithm were exhausted
Matrix Keyboard & Calculator Small Project Based on 51 (UcosII)
LeetCode中等题之比较版本号
11 + chrome advanced debugging skills, learn to direct efficiency increases by 666%
Reversing words in a string in LeetCode
代码随想录笔记_动态规划_70爬楼梯
没有接班人,格力只剩“明珠精选”
鸿蒙开发从hello world开始
WebView的优化与常见问题解决方案
随机推荐
Have you guys encountered this problem?MySQL 2.2 and 2.3-SNAPSHOT are like this, it seems to be
机器学习实战(2)——端到端的机器学习项目
数字藏品,“赌”字当头
3DS MAX 批量导出文件脚本 MAXScript 带界面
kubernetes介绍
【jstack、jps命令使用】排查死锁
The recursive recursive Fighting_ silver study ah but level 4
ABAP file operations involved in the Chinese character set of problems and solutions for trying to read
DNS欺骗-教程详解
Short read or OOM loading DB. Unrecoverable error, aborting now
Efficient and Robust 2D-to-BEV Representation Learning via Geometry-guided Kernel Transformer 论文笔记
【黑马早报】雷军称低谷期曾想转行开酒吧;拜登正式签署芯片法案;软银二季度巨亏230亿美元;北京市消协约谈每日优鲜...
Ethernet channel 以太信道
系统的安全和应用(不会点安全的东西你怎么睡得着?)
[Advanced Digital IC Verification] Difference and focus analysis between SoC system verification and IP module verification
X5WebView使用
Ethernet channel Ethernet channel
MYSQL误删数据恢复
娄底妆品实验室建设规划构思
跨域的五种解决方案