目录
1.Json格式的数据集标签转化为有效的txt格式
# 处理同一个数据集下多个json文件时,仅运行一次class_txt即可
# 或者更改对应文件夹名称
import json
import os
"存储标签与预测框到txt文件中"
def json_txt(json_path, txt_path):
"json_path: 需要处理的json文件的路径"
"txt_path: 将json文件处理后txt文件存放的文件夹名"
if not os.path.exists(txt_path):
os.mkdir(txt_path) # 生成存放json文件的路径
with open(json_path, 'r') as f:
dict = json.load(f) # 读取json文件
# 得到images和annotations信息
images_value = dict.get("images") # 得到某个键下对应的值
annotations_value = dict.get("annotations") # 得到某个键下对应的值
# 使用images下的图像名的id创建txt文件
list=[] # 将文件名存储在list中
for i in images_value:
open(txt_path + str(i.get("id")) + '.txt', 'w')
list.append(i.get("id"))
# 将id对应图片的bbox写入txt文件中
for i in list:
for j in annotations_value:
if j.get("image_id") == i:
# bbox标签归一化处理
num = sum(j.get('bbox'))
new_list = [round(m / num, 6) for m in j.get('bbox')] # 保留六位小数
with open(txt_path + str(i) + '.txt', 'a') as file1: # 写入txt文件中
print(j.get("category_id"), new_list[0], new_list[1], new_list[2], new_list[3], file=file1)
"将id对应的标签存储在class.txt中"
def class_txt(json_path, class_txt_path):
"json_path: 需要处理的json文件的路径"
"txt_path: 将json文件处理后存放所需的txt文件名"
with open(json_path, 'r') as f:
dict = json.load(f) # 生成存放json文件的路径
categories_value = dict.get("categories") # 得到categories下对应的信息 # 得到某个键下对应的值
with open(class_txt_path, 'a') as file0:
for i in categories_value:
print(i.get("id"), i.get('name'), file=file0) # 将每个类别id与类别写入txt文件中
json_txt("train.json", "train_annotations/")
#json_txt("test.json", "test_annotations/")
# class_txt("eval.json", "id_categories.txt")
2. 数据集划分
#train:val:test=7:1:2
import os
import random
import shutil
from shutil import copy2
trainfiles = os.listdir(r"D:\pycharmproject\dataset\1") #(图片文件夹)
num_train = len(trainfiles)
print("num_train: " + str(num_train) )
index_list = list(range(num_train))
print(index_list)
random.shuffle(index_list) # 打乱顺序
num = 0
trainDir = r"D:\pycharmproject\dataset\train" #(将图片文件夹中的7份放在这个文件夹下)
validDir = r"D:\pycharmproject\dataset\val" #(将图片文件夹中的1份放在这个文件夹下)
detectDir = r"D:\pycharmproject\dataset\test" #(将图片文件夹中的2份放在这个文件夹下)
for i in index_list:
fileName = os.path.join(r"D:\pycharmproject\CODEBRIM_classification_dataset\1", trainfiles[i]) #(图片文件夹)+图片名=图片地址
if num < num_train*0.7: # 7:1:2
print(str(fileName))
copy2(fileName, trainDir)
elif num < num_train*0.8:
print(str(fileName))
copy2(fileName, validDir)
else:
print(str(fileName))
copy2(fileName, detectDir)
num += 1
3. 数据集标注
LabelImg 适用于目标识别、分类
(7条消息) 数据标注软件labelme详解_黑暗星球的博客-CSDN博客_labelmehttps://blog.csdn.net/u014061630/article/details/88756644深度学习图像标注工具汇总
扫描二维码关注公众号,回复:
14648691 查看本文章
4. 一些数据集
Object Detection Datasets (roboflow.com)https://public.roboflow.com/object-detection
深度学习常用数据集汇总_EDG viper的博客-CSDN博客_数据集https://blog.csdn.net/weixin_42010722/article/details/120199613机器学习数据集汇总(附下载地址) - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/105377128全网最全开源数据集 | 资源_数智物语的博客-CSDN博客_开源数据集https://blog.csdn.net/xinshucredit/article/details/88869888数据集汇总_zhongranxu的博客-CSDN博客_农业数据集https://blog.csdn.net/zhongranxu/article/details/90234492