深度学习实战 3 数据集处理

目录

1.Json格式的数据集标签转化为有效的txt格式

2. 数据集划分

3.  数据集标注

4. 一些数据集 


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 适用于目标识别、分类 

目标检测---利用labelimg制作自己的深度学习目标检测数据集_炮哥带你学的博客-CSDN博客_labelimg制作数据集看了网上的xml转txt的博客很多上来就给代码,关于怎么用都不说,有的也用不了,所以这里自己写了一份代码https://blog.csdn.net/didiaopao/article/details/119808973Labelme 适用于场景、实例分割

(7条消息) 数据标注软件labelme详解_黑暗星球的博客-CSDN博客_labelmehttps://blog.csdn.net/u014061630/article/details/88756644深度学习图像标注工具汇总 

深度学习图像标注工具汇总_zxucver的博客-CSDN博客_rectlabel对于监督学习算法而言,数据决定了任务的上限,而算法只是在不断逼近这个上限。世界上最遥远的距离就是我们用同一个模型,但是却有不同的任务。https://zhangxu.blog.csdn.net/article/details/79036312

4. 一些数据集 

Object Detection Datasets (roboflow.com)https://public.roboflow.com/object-detection

深度学习实战 3 数据集处理_第1张图片

深度学习常用数据集汇总_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

你可能感兴趣的:(深度学习笔记(实践),深度学习,python,人工智能)