如何将CK+数据集转为图像-情感列DataFrame及实现文件夹标签标注
CK+ 数据集转换为DataFrame的解决方案
是否有必要转换为DataFrame?
- 做数据探索时(比如统计各情感标签的样本数量、查看样本路径分布),DataFrame是高效的结构化格式,能快速用pandas的统计函数、可视化工具分析数据。
- 对接scikit-learn、XGBoost等传统机器学习框架时,DataFrame可直接作为数据载体,配合
train_test_split等函数划分数据集。 - 若用PyTorch/TensorFlow的原生Dataset类加载数据,也可以不转DataFrame,但DataFrame能帮你提前梳理清楚所有样本的标签对应关系,避免加载时出现标签错误。
简单总结:数据探索和传统ML流程建议转;纯深度学习流水线可直接用文件夹结构加载,但转DataFrame能降低出错概率。
如何将文件夹名作为标签生成DataFrame?
可以用Python的pathlib(更简洁)或os模块遍历数据集目录,收集每个图像的路径和对应的文件夹名(即情感标签),再转换为DataFrame。
代码示例(用pathlib)
import pandas as pd from pathlib import Path # 替换为你的CK+数据集根目录路径 dataset_root = Path("/path/to/CK+_dataset") # 存储图像路径和标签的列表 data = [] # 遍历所有情感文件夹 for emotion_dir in dataset_root.iterdir(): if emotion_dir.is_dir(): # 获取情感标签(文件夹名) label = emotion_dir.name # 遍历文件夹下的所有图像文件(假设图像是jpg/png格式) for img_path in emotion_dir.glob("*.jpg"): # 若为png则改成*.png data.append({"image_path": str(img_path), "emotion_label": label}) # 转换为DataFrame df = pd.DataFrame(data) # 查看前5行验证 print(df.head())
代码说明
Path.iterdir()遍历根目录下的所有子目录,筛选出文件夹(即情感类别)。emotion_dir.name直接获取文件夹名作为情感标签,完美匹配需求。glob("*.jpg")匹配文件夹下的所有jpg图像,根据实际图像格式调整后缀即可。- 最终生成的DataFrame包含
image_path(图像的绝对/相对路径)和emotion_label(情感标签)两列。
额外提示
- 如果需要将标签转换为数值(比如Anger=0, Contempt=1),可以用
pd.factorize():df["emotion_label_num"], unique_labels = pd.factorize(df["emotion_label"]) - 用
df["emotion_label"].value_counts()可快速统计各情感类别的样本数量,检查数据分布是否均衡。
内容的提问来源于stack exchange,提问作者Nocry
相关产品推荐
相关产品推荐

