编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

44.人工智能——深度学习飞桨框架自定义数据集

wxchong 2024-07-11 01:24:01 开源技术 10 ℃ 0 评论

一、数据集说明

文中使用的数据集:天气以及时间分类数据集,来源:https://www.datafountain.cn/competitions/555

该数据集包含2600张人工标注的天气和时间标签。天气类别包含多云、晴天、雨天、雪天和雾天5个类别;时间包含黎明、早上、下午、黄昏、夜晚5个类别。

train_images文件夹中包含2600张行车记录仪拍摄的JPEG编码照片。图片标签以json格式序列化进行保存。


二、数据读取

图像路径和标签是以json文件格式保存,而且具包含两个分类标签:天气和时间

import pandas as pd
import os

basedir="Period-Weather"
jsonfile="train.json"

df=pd.read_json(os.path.join(basedir,jsonfile))
print(df.head())

信息包含在annotations列中,还需要提取出来

#把filename period weather 三列信息单独分别提取
df["filename"]=df["annotations"].apply(lambda x: x["filename"])
df["period"]=df["annotations"].apply(lambda x: x["period"])
df["weather"]=df["annotations"].apply(lambda x: x["weather"])
#df["period-weather"]=df["period"]+"-"+df["weather"]

df.head()

统计一下period和weather个数

df["period"].value_counts()
df["weather"].value_counts()


因为标签需要用整型来表示,所以还需要把标签做一个编号

df['period'], period_dict = pd.factorize(df['period'])
df['weather'], weather_dict = pd.factorize(df['weather'])

这是来统计period和weather分类个数,结果显示就是分类编号

#取出前5个数据
df.iloc[:5]

三、自定义数据集

import paddle
import paddle.nn.functional as F
import paddle.vision.transforms as T
from paddle.io import DataLoader, Dataset
import cv2

# 自定义数据集
class PWDataset(Dataset):
    def __init__(self, df):
        super(PWDataset, self).__init__()
        self.df = df
    
        # 定义数据增强
        self.transform = T.Compose([
            T.Resize(size=(640,360)),
            T.RandomCrop(size=(256, 256)),            
            T.RandomHorizontalFlip(),
            T.ToTensor(),
            T.Normalize(mean=0.5, std=0.5)
        ])

    def __getitem__(self, index):
        file_name = self.df['filename'].iloc[index]
        img =cv2.imread(os.path.join(basedir,file_name))
        img = self.transform(img)
        return img,paddle.to_tensor(self.df['period'].iloc[index]), paddle.to_tensor(self.df['weather'].iloc[index])

    def __len__(self):
        return len(self.df)
# 划分训练集和验证集=8:2
train_dataset =PWDataset(df.iloc[:-512])
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)

val_dataset = PWDataset(df.iloc[-512:])
val_loader = DataLoader(val_dataset, batch_size=64, shuffle=False)
#查看第一条数据
for i, (img, period, weather) in enumerate(train_loader):
    print(img.shape, period.shape, weather.shape)
    if i == 0:
        break

运行结果:[64, 3, 256, 256] [64, 1] [64, 1]

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表