目录

0 前言

1 为图片数据集打上标签并保存为txt文件

2 将txt文件中的图片标签数据集随机划分为训练集和测试集

3 加载txt文件中的图片标签数据集


0 前言

目前是被封控的第四天了,只能呆在宿舍不能出去,记得上次这样子还是一年前大四快毕业那时候了……

这几天在宿舍没有什么事干,实验也暂时做不了了,将部分数据处理完后,就把之前的这个内容做一下笔记吧,这也不是什么新的知识了,简单记录一下,方便以后可以查看。

1 为图片数据集打上标签并保存为txt文件

由于这里我做的是用深度学习回归预测,所以我的标签保存在(.csv)文件中,这时候需要将图片和标签一一对应起来,并且要分好文件夹,下面是我分好的文件夹(images保存的是图片,label.csv保存的是对应的标签,这里可以根据个人的数据集更改文件名称):

下面是为图片数据集打上标签并保存为txt文件的代码(文件的路劲需要根据自己文件所在位置进行更改):

import os
import numpy as np
import pandas as pdlabel = pd.read_csv('../dataset_1/label_1.csv')
label = np.array(label)
label = label.tolist()
target = ''
# for i in range(len(label)):
#     for j in range(len(label[i])):
#         target += str(label[i][j]) + ' '
#     print(target)
#     target = ''
def generate(dir):files = os.listdir(dir) #os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。# files.sort()  #对文件或文件夹进行排序files.sort(key=lambda x: int(x.replace("frame", "").split('.')[0]))print('****************')print('input :', dir)print('start...')target = ''i = 0listText = open('H:/代码练习/Deeplearning/data_txt_path/all_data_list_1.txt', 'a+')  #创建并打开一个txt文件,a+表示打开一个文件并追加内容listText.truncate(0)#清空txt文件里的内容for file in files:  #遍历文件夹中的文件fileType = os.path.split(file) #os.path.split()返回文件的路径和文件名,【0】为路径,【1】为文件名if fileType[1] == '.txt':  #若文件名的后缀为txt,则继续遍历循环,否则退出循环continuename = outer_path + folder + '/' +file  #name 为文件路径和文件名+空格+label+换行for j in range(len(label[i])):target += str(label[i][j]) + ' 'name = name + ' ' + target + '\n'# print(name)# listText.write(name)  # 在创建的txt文件中写入nametarget = ''i += 1listText.write(name)  #在创建的txt文件中写入namelistText.close() #关闭txt文件print('down!')print('****************')outer_path = 'H:/代码练习/Deeplearning/dataset_1/'  # 这里是你的图片路径if __name__ == '__main__':  #主函数folderlist = os.listdir(outer_path)# 列举文件夹for folder in folderlist:  #遍历文件夹中的文件夹(若engagement文件夹中存在txt或py文件,则后面会报错)generate(os.path.join(outer_path, folder))#调用generate函数,函数中的参数为:(图片路径+文件夹名,标签号)

代码运行后结果如下图:序号1为图片的路径,序号2为对应的标签,因为我一张图片对应3个标签,所以有后面3个值。

2 将txt文件中的图片标签数据集随机划分为训练集和测试集

完成第一个步骤后,需要将txt文件中的图片标签数据集随机划分为训练集和测试集,划分后生成训练集和测试集两个txt文件,可以根据自己的需求,更改训练集和测试集的比例。下面为划分数据集的代码(文件的路劲需要根据自己文件所在位置进行更改):

import os
import random
# 划分比例,训练集 : 验证集 = 8 : 2
split_rate = 0.2class SplitFiles():"""按行分割文件"""def __init__(self, file_name):"""初始化要分割的源文件名和分割后的文件行数"""self.file_name = file_name# def get_random(self):#     """生成随机数组,随机划分 (0,190001)txt标签行数, 7600测试集标签行数"""#     random_num = random.sample(range(0, 19001), 108)##     return random_numdef split_file(self):if self.file_name and os.path.exists(self.file_name):try:with open(self.file_name) as f:  # 使用with读文件# temp_count = 1file = f.readlines()count = len(file)eval_index = random.sample(file, k=int(count * split_rate))  # 从images列表中随机抽取 k 个图像名称for index,image_path in enumerate(file):if image_path in eval_index:self.write_file('test', image_path)else:self.write_file('train', image_path)# temp_count += 1except IOError as err:print(err)else:print("%s is not a validate file" % self.file_name)def get_part_file_name(self, part_name):""""获取分割后的文件名称:在源文件相同目录下建立临时文件夹temp_part_file,然后将分割后的文件放到该路径下"""temp_path = os.path.dirname(self.file_name)  # 获取文件的路径(不含文件名)file_folder = temp_pathif not os.path.exists(file_folder):  # 如果临时目录不存在则创建os.makedirs(file_folder)part_file_name = file_folder + "/" + str(part_name) + "_list_1.txt"return part_file_namedef write_file(self, part_num, line):"""将按行分割后的内容写入相应的分割文件中"""part_file_name = self.get_part_file_name(part_num)try:with open(part_file_name, "a") as part_file:part_file.writelines(line)except IOError as err:print(err)if __name__ == "__main__":file = SplitFiles(r'H:/代码练习/Deeplearning/data_txt_path/all_data_list_1.txt')file.split_file()

我这里将总的数据文件和划分好的数据集存在一个文件夹里,方便后面管理(本来是只有3个txt文件的,我弄了两个数据集,所以就有了6个文件)。

3 加载txt文件中的图片标签数据集

在完成步骤1和2后,最后是对数据进行加载,下面为加载数据的代码,后面读取数据调用这个类函数就可以:

import os
import numpy as np
import torch
from torchvision import transforms
from PIL import Image
from torch.utils.data import DataLoader
from torch.utils.data import Dataset
# 我们读取图片的根目录, 在根目录下有所有图片的txt文件, 拿到txt文件后, 先读取txt文件, 之后遍历txt文件中的每一行, 首先去除掉尾部的换行符, 在以空格切分,前半部分是图片名称, 后半部分是图片标签, 当图片名称和根目录结合,就得到了我们的图片路径
class MyDataset(Dataset):def __init__(self, img_path, transform=None):super(MyDataset, self).__init__()self.root = img_path# self.txt_root = self.root + 'all_list.txt'f = open(self.root, 'r')data = f.readlines()imgs = []labels = []# label_1,label_2,label_3 = [],[],[]for line in data:line = line.rstrip()word = line.split()imgs.append(os.path.join(self.root, word[1],word[2],word[3],word[0]))# labels.append([float(word[1]),float(word[2]),float(word[3])])labels.append([word[1],word[2],word[3]])# label_1,label_2,label_3 = word[1],word[2],word[3]# labels.append([[label_1],[label_2],[label_3]])self.img = imgsself.label = labelsself.transform = transform# print(self.img)# print(self.label)def __len__(self):return len(self.label)return len(self.img)def __getitem__(self, item):img = self.img[item]label = self.label[item]# print(img)img = Image.open(img).convert('RGB')# 此时img是PIL.Image类型   label是str类型if transforms is not None:img = self.transform(img)# print(img.max())label = np.array(label).astype(np.float32)label = torch.from_numpy(label)return img, label

注意:上面/下图代码是我同时加载了三个标签,因为一张图片我是同时对应了三个标签,假如是一个图片对应一个标签,可在以下图片的函数中进行更改:

因为我的标签是浮点数,所以我在这里将其变为浮点数类型,假如是整形,可以在上面代码下图位置更改。

在执行完步骤1的代码文件后,将图片数据集打上标签并保存为txt文件;在执行步骤2的代码文件将txt文件中的图片标签数据集随机划分为训练集和测试集;最后编写步骤3加载txt文件中的图片标签数据集代码,就可加载自己的数据集  。下面是深度学习训练时,调用上面加载数据的类实现对数据的加载,也可根据自己的代码进行编写,可以参考一下下面的例子:

root_train = r'H:/代码练习/Deeplearning/data_txt_path/train_list_1.txt'
root_test = r'H:/代码练习/Deeplearning/data_txt_path/test_list_1.txt'#将图像的像素值归一化到[-1,1]之间
normalize = transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])train_transform = transforms.Compose([transforms.Resize((224,224)),# transforms.RandomVerticalFlip(),transforms.ToTensor(),normalize])
val_transform = transforms.Compose([transforms.Resize((224,224)),# transforms.RandomVerticalFlip(),transforms.ToTensor(),normalize])train_dataset = MyDataset(root_train,transform=train_transform)
val_dataset = MyDataset(root_test,transform=val_transform)train_dataloader = DataLoader(dataset=train_dataset,batch_size=16,shuffle=True)
val_dataloader = DataLoader(dataset=val_dataset,batch_size=16,shuffle=True)device = 'cuda' if torch.cuda.is_available() else 'cpu'
for batch, (x, y) in enumerate(data_loader):image, y= x.to(device), y.to(device)

参考来源:制作数据集(二)--为图片数据集打上标签并保存为txt文件_困坤的小菜鼠的博客-CSDN博客

python 划分数据集文件(txt标签文件按比例随机切分)_努力学习DePeng的博客-CSDN博客_python按比例随机切分数据

pytorch加载自己的图片数据集的两种方法__-周-_的博客-CSDN博客_pytorch读取图片数据集

深度学习制作自己的数据集—为数据集打上标签保存为txt文件,并进行划分和加载数据集相关推荐

  1. python学习(二)爬虫——爬取网站小说并保存为txt文件(二)

    前面我们已经完成了单章小说的爬取,现在我们来爬取整本小说 一:获取小说章节列表 在小说网站里没不 小说都有自己的章节目录,里面记录了所有的小说章节地址. 我们要想获取整本小说就要先得到小说的章节列表 ...

  2. 2023年的深度学习入门指南(6) - 在你的电脑上运行大模型

    2023年的深度学习入门指南(6) - 在你的电脑上运行大模型 上一篇我们介绍了大模型的基础,自注意力机制以及其实现Transformer模块.因为Transformer被PyTorch和Tensor ...

  3. [TensorFlow深度学习入门]实战七·简便方法实现TensorFlow模型参数保存与加载(ckpt方式)

    [TensorFlow深度学习入门]实战七·简便方法实现TensorFlow模型参数保存与加载(ckpt方式) 个人网站–> http://www.yansongsong.cn TensorFl ...

  4. Python学习-批量提取图片名称保存至txt文件

    个人微信公众号:AI研习图书馆,欢迎关注~ 深度学习知识及资源分享,学习交流,共同进步~ Python提取图片名称保存到txt文件 1. 环境 Windows7+Anaconda3+python 3. ...

  5. 深度学习制作自己的样本

    交流QQ:3239516597 目前,深度学习在遥感领域的应用逐渐开展,然而遥感数据往往幅宽比较大,在具体的应用时,往往需要自己的数据制作训练样本.很多人对这样大的数据如何制作样本感到犯愁,今天就介绍 ...

  6. 制作数据集(二)--为图片数据集打上标签并保存为txt文件

    概要 由于我自己的项目缺少合适的数据集,所以我需要自己制作数据集,即我需要自己完成从用摄像头录制视频到制作图片数据集的整个过程.上一篇博客记录了我将视频数据剪辑为图片数据的过程.这一片博客旨在记录我为 ...

  7. 深度学习文本分类在支付宝投诉文本模型上的应用

    摘要: 小蚂蚁说: 随着深度学习的快速发展,以及在图像.语音领域取得的不错成果,基于深度学习的自然语言处理技术也日益受到人们的关注.计算机是怎么理解人类的语言的呢? 传统机器学习的应用,常常是利用上述 ...

  8. 这些深度学习术语,你了解多少?(上)

    对于一个新手来说,深度学习术语可能非常难以理解.本表试图解释深度学习常用术语并链接到原始参考,以帮助读者深入了解特定主题. 深度学习与"一般"的机器学习术语之间的界限非常模糊.例如 ...

  9. 【2017年第2期】深度学习在化学信息学中的应用(上)

    徐优俊, 裴剑锋 北京大学前沿交叉学科研究院定量生物学中心,北京 100871 摘要:深度学习在计算机视觉.语音识别和自然语言处理三大领域中取得了巨大的成功,带动了人工智能的快速发展.将深度学习的关键 ...

最新文章

  1. 毫米波雷达基本技术与应用
  2. 推荐一款神级 API 接口管理神器
  3. 华菱重卡仪表指示说明_重卡档位多,换挡不利索,选个自动档的车它不香吗?...
  4. 黑马程序员C语言基础(第七天)内存管理
  5. android object比较大小
  6. iOS.Dev.Support.MultiVersions
  7. Qt creator5.7 OpenCV249之pyrUp函数(含源码下载)
  8. transformer 解码_碎碎念:Transformer的解码加速
  9. Python基础(7) - 函数
  10. ubuntu下鼠标右键新建文档
  11. 高考前最后一天,AI 监考老师已就位
  12. 3.33 利用快速蒙版制作选区 [原创Ps教程]
  13. 听吐的微信提示音终于能改了
  14. BUUCTF中的“新年快乐”
  15. 人为什么要好好努力学习工作
  16. 打造自己的游戏修改器和内存补丁
  17. C语言的access函数的用法
  18. GRP-U8如何修改账套主管
  19. 自考本科计算机安全,计算机网络系统安全搭建与防护-自考本科毕业论文.doc
  20. OpenStack基金会项目Airship的新成员要做什么?

热门文章

  1. Redis 持久化 RDB/AOF 详解与实践
  2. 关于adb shell screencap 1.png
  3. 你我只是匆匆过客(原创)
  4. Linux下安装Mosquitto以及开启Websockets
  5. C语言学习--while()循环
  6. c语言——do……while循环
  7. freebsd安装xfce桌面
  8. NPC问题的证明(可满足性问题、3-CNF可满足性问题、团问题、顶点覆盖问题)
  9. 众链网络-慧景区项目建设方案1(票务系统)
  10. 【沧海拾昧】C# .Net SplitContainer(分割器)控件的使用笔记