大连网站设计九即问仟亿科技,捡个校花做老婆是哪个网站的,建筑公司网站有哪些,网络推广平台有哪些系列文章目录
【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part2 自有数据集构建 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用 在一个人体姿态估计的任务中#xff0c;需要用深度学习模型…系列文章目录
【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part2 自有数据集构建 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用 在一个人体姿态估计的任务中需要用深度学习模型来进行序列分类。 时间花费最多的是在数据集的处理上。 这一节主要内容就是对数据集的处理。 文章目录 系列文章目录前言一、任务问题和数据采集1 任务问题2 原始数据采集 二、数据处理和生成样本1 data_merge2single.py2 data_plot.py3 data_split.py 三、制作标签文件和数据集划分文件1 target 文件2 DatasetGroup 文件 四、总结1 数据集示例2 数据集下载路径 前言
类似于part1的工作这部分对数据集进行了分析处理 一、任务问题和数据采集
1 任务问题
人体姿态估计 在人体左右腿放置加速度传感器分别采集横滚角和俯仰角。传感器生成高频数据对不同状态下采集的数据进行分类可以识别人体姿态。
2 原始数据采集
采集6类动作姿态每种动作记录10次过程量。 蹲姿到站立(右蹲) ------ 1 蹲姿到站立(左蹲----- 2 行进 ----------------------- 3 原地踏步 ----------------- 4 站立到蹲姿(右蹲) ------ 5 站立到蹲姿(左蹲) ------ 6 data_merge 文件夹下存放采集到的原始数据。 data_merge_1.xlsx data_merge_2.xlsx data_merge_3.xlsx data_merge_4.xlsx data_merge_5.xlsx data_merge_6.xlsx 每一个 xlsx 文件对应一类动作姿态保存有10组实验数据。 以 data_merge_1.xlsx 文件内容为例
二、数据处理和生成样本
1 data_merge2single.py
将每类动作姿态的data_merge_x.xlsx文件分解每一组实验单独保存在一个文件中。 file name:data_merge2single.py
desc: 得到每次实验的单独数据import os
import pandas as pd
/****************************************************/路径指定
/****************************************************/# ----------------------------------------------------#
# 数据路径
# ----------------------------------------------------#
ROOT_path DATA/RT_Position_dataset
merge_path os.path.join(ROOT_path, data_merge)
path_list os.listdir(merge_path)
# print(path_list)
# [data_merge_1.xlsx, data_merge_2.xlsx, data_merge_3.xlsx, data_merge_4.xlsx, data_merge_5.xlsx, data_merge_6.xlsx, ~$data_merge_1.xlsx]single_path os.path.join(ROOT_path, data_single_test)
if not os.path.exists(single_path):os.mkdir(single_path)# ----------------------------------------------------#
# 对每个文件进行读取
# ----------------------------------------------------#
for i in range(0, len(path_list)): # 遍历 data_merge_x.xlsx 文件file_path os.path.join(merge_path, path_list[i])save_path os.path.join(single_path, str(i 1))if not os.path.exists(save_path):os.makedirs(save_path)print(----------------------------------------------------)print(file_path)# 使用pandas读取Excel文件df pd.read_excel(file_path)# 计算总列数total_columns df.shape[1]index 0# 每四列分割并保存(在实验中分别采集左右腿的俯仰角和横滚角特征数目为4)for start_col in range(0, total_columns, 4):index 1# 确定每个文件的列范围end_col min(start_col 4, total_columns)# 提取四列数据sub_df df.iloc[:, start_col:end_col]# 保存到新的xlsx文件sub_df.to_csv(f{save_path}/{str(i 1)}_{index}.csv, indexFalse) data_singe_test 文件夹下存放每组实验的单独数据。 2 data_plot.py
分析每个类别下的每一组实验不是所有数据都有用得到有效数据区间 file name:data_plot.py
desc: 绘制每组实验的数据图分析有效数据区间import pandas as pd
import matplotlib.pyplot as plt# ----------------------------------------------------#
# 数据路径
# ----------------------------------------------------#
file_path DATA/RT_Position_dataset/data_single_test/2/2_5.csvdf pd.read_csv(file_path, header2) # 使用pandas读取Excel文件
# 跳过前两行数据
# df df.iloc[2:]# 绘制波形图
plt.figure(figsize(12, 8))for i, column in enumerate(df.columns):plt.subplot(len(df.columns), 1, i1)plt.plot(df[column])plt.title(fColumn: {column})plt.tight_layout()
plt.show()后续的工作就是从每组实验的有效数据区间中生成样本。
log {1: [[130, 300], [100, 250], [160, 310], [130, 300], [120, 280],[200, 370], [120, 270], [100, 270], [100, 290], [160, 320]],2: [[100, 250], [290, 400], [200, 360], [180, 320], [180, 310],[150, 290], [160, 300], [140, 270], [120, 270], [100, 260]],3: [[100, 400], [100, 370], [100, 450], [100, 450], [100, 450],[150, 450], [130, 450], [100, 400], [150, 420], [150, 400]],4: [[100, 420], [100, 420], [200, 420], [200, 420], [200, 420],[200, 420], [200, 420], [150, 400], [100, 400], [200, 400]],5: [[100, 300], [170, 300], [100, 300], [100, 250], [250, 400],[100, 270], [150, 300], [100, 280], [120, 270], [130, 270]],6: [[120, 300], [150, 250], [100, 300], [50, 300], [100, 240],[170, 310], [50, 250], [80, 280], [80, 280], [100, 300]],} # 记录每组实验的有效数据区间3 data_split.py
针对每一组实验的有效区间提取并生成样本 file name:data_split.py
desc: 分割并生成样本import os
import pandas as pdlog {1: [[130, 300], [100, 250], [160, 310], [130, 300], [120, 280],[200, 370], [120, 270], [100, 270], [100, 290], [160, 320]],2: [[100, 250], [290, 400], [200, 360], [180, 320], [180, 310],[150, 290], [160, 300], [140, 270], [120, 270], [100, 260]],3: [[100, 400], [100, 370], [100, 450], [100, 450], [100, 450],[150, 450], [130, 450], [100, 400], [150, 420], [150, 400]],4: [[100, 420], [100, 420], [200, 420], [200, 420], [200, 420],[200, 420], [200, 420], [150, 400], [100, 400], [200, 400]],5: [[100, 300], [170, 300], [100, 300], [100, 250], [250, 400],[100, 270], [150, 300], [100, 280], [120, 270], [130, 270]],6: [[120, 300], [150, 250], [100, 300], [50, 300], [100, 240],[170, 310], [50, 250], [80, 280], [80, 280], [100, 300]],}/****************************************************/路径指定
/****************************************************/ROOT_path DATA/RT_Position_dataset
# ----------------------------------------------------#
# 单次实验数据路径
# ----------------------------------------------------#
single_test_path os.path.join(ROOT_path, data_single_test)
# 样本保存路径
save_path os.path.join(ROOT_path, dataset)
if not os.path.exists(save_path):os.mkdir(save_path)
# ----------------------------------------------------#
# 设置数据样本长度len_seq设置每个文件的行数
# ----------------------------------------------------#
rows_per_file 16
/****************************************************/导出数据样本
/****************************************************/index 0
# 使用os.listdir()列出文件夹中的所有内容包括子文件夹和文件
contents os.listdir(single_test_path) # [1, 2, 3, 4, 5, 6]
# 使用列表推导式过滤出所有子文件夹
folders [content for content in contents if os.path.isdir(os.path.join(single_test_path, content))]
# 遍历文件夹中的所有子文件夹
for folder in folders: # [1, 2, 3, 4, 5, 6]folder_path os.path.join(single_test_path, folder)# print(folder_path)# 遍历子文件夹中的所有文件for csv_file in os.listdir(folder_path):part csv_file.split(_)[1].split(.)[0] # part 1,2,3,4,5,6,7,8,9,10file_path os.path.join(folder_path, csv_file)# ----------------------------------------------------------------# 使用pandas读取Excel文件df pd.read_csv(file_path, header2)# 读取每次实验有效数据序列索引[start, end] log[folder][int(part) - 1]# 选择每次实验中的有效数据df_selected df.iloc[start:end]# 有效数据的总行数total_rows len(df_selected)# ----------------------------------------------------## 核心的参数调整# ----------------------------------------------------#number_of_files 200 # 每次实验的有效数据中可以生成样本数的上限window_size rows_per_file # 滑动窗口的大小step_size 3 # 滑动窗口的步长for file_number in range(number_of_files):# 计算滑动窗口的起始和结束索引start_index file_number * step_sizeend_index start_index window_size# 防止结束索引超出数据范围if end_index total_rows:break# 提取数据df_subset df_selected.iloc[start_index:end_index]index 1# 保存到新的csv文件df_subset.to_csv(f{save_path}/Movement4_{index}.csv, indexFalse)print(f{folder}输出的文件索引截止到{index})从所有实验数据中生成样本并保存到 dataset 文件夹下。 这里的超参数设置 rows_per_file 16 样本数据的长度是16size是[16,4]number_of_files 200 每次实验的有效数据中可以生成样本数的上限step_size 3 滑动窗口的步长步长过长数据无法充分利用过小容易过拟合 1~500索引文件对应类别1以此类推。共生成3730个样本。 三、制作标签文件和数据集划分文件
上述步骤已生成样本仿照 part1 文章中提及的数据集制作 target 文件和 DatasetGroup 文件 本节手动制作两个csv文件。
1 target 文件
新建一个Movement4_target.csv文件两列分别记录索引和对应类别。索引为1 ~ 3730类别为1 ~ 6。
2 DatasetGroup 文件
新建一个Movement4_DatasetGroup.csv文件两列分别记录索引和对应数据集。索引为1 ~ 3730数据集组别为1 ~ 3。 将制作的 target 文件和 DatasetGroup 文件 保存到 groups 文件夹下。 四、总结
1 数据集示例
最终得到的数据集文件如下所示。 核心是 dataset 和 groups 文件夹。
2 数据集下载路径