一、数据集说明
文中使用的数据集:天气以及时间分类数据集,来源: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]
本文暂时没有评论,来添加一个吧(●'◡'●)