CASME数据集入门指南:从数据预处理到微表情识别实战

1次阅读
没有评论

共计 1905 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

背景介绍

微表情识别是计算机视觉中一个极具挑战性的研究方向,它通过分析人类面部短暂且细微的表情变化(通常持续仅 1 /25 到 1 / 5 秒)来推断真实情绪。这类技术在心理学研究、安全审讯、临床诊断等领域有重要应用。

CASME 数据集入门指南:从数据预处理到微表情识别实战

CASME(Chinese Academy of Sciences Micro-expression)是由中国科学院心理研究所构建的微表情数据集,包含 35 名受试者在受控实验室环境下记录的 195 个微表情样本。其特点包括:

  • 使用 60fps 高速摄像机采集,确保捕捉到快速的表情变化
  • 提供 AUs(动作单元)标注和情绪类别标签(如高兴、厌恶等)
  • 包含原始视频序列和经过裁剪的面部 ROI 区域

数据预处理

CASME 数据集采用分层文件夹结构存储,预处理时需要特别注意以下环节:

  1. 文件结构解析:

    CASME2/rawvideo/
        ├── sub01/
        │   ├── EP02_01.avi
        │   └── EP02_01_au.txt
        └── sub02/
            ├── EP05_03.avi
            └── EP05_03_emotion.txt

  2. 关键数据加载代码(使用 OpenCV 和 Pandas):

    import cv2
    import pandas as pd
    
    def load_casme_sample(video_path, label_path):
        # 读取视频帧
        cap = cv2.VideoCapture(video_path)
        frames = []
        while cap.isOpened():
            ret, frame = cap.read()
            if not ret: break
            frames.append(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
    
        # 读取标签信息
        labels = pd.read_csv(label_path, sep='\t')
        return np.array(frames), labels

  3. 标准化处理:

  4. 帧序列归一化到 [0,1] 范围
  5. 使用 MTCNN 进行人脸对齐和裁剪
  6. 采用滑动窗口生成固定长度的时序片段

模型实现

基于 PyTorch 的简单 CNN-LSTM 混合架构:

import torch
import torch.nn as nn

class MicroExpressionCNN(nn.Module):
    def __init__(self, num_classes):
        super().__init__()
        self.features = nn.Sequential(nn.Conv2d(3, 32, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2),
            nn.Conv2d(32, 64, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2)
        )
        self.lstm = nn.LSTM(64*28*28, 128, batch_first=True)
        self.classifier = nn.Linear(128, num_classes)

    def forward(self, x):  # x: (B,T,C,H,W)
        batch_size, timesteps = x.shape[0], x.shape[1]
        x = x.view(-1, *x.shape[2:])  # 合并批次和时间维度
        x = self.features(x)
        x = x.view(batch_size, timesteps, -1)
        _, (h_n, _) = self.lstm(x)
        return self.classifier(h_n.squeeze(0))

避坑指南

  1. 帧率不一致问题:
  2. 部分视频实际帧率与标注不符,建议使用 cv2.CAP_PROP_FPS 进行验证

  3. 标签文件格式:

  4. 不同版本的数据集标签分隔符可能不同(制表符 / 逗号)
  5. AU 编码需要转换为 one-hot 向量

  6. 内存管理:

  7. 原始视频加载可能占用大量内存,建议使用生成器逐步读取
  8. 考虑先提取光流特征减少存储压力

扩展思考

  1. 时序建模改进:
  2. 使用 3D CNN 替代 2D CNN+LSTM
  3. 引入注意力机制捕捉关键帧

  4. 数据增强策略:

  5. 基于 FACS 系统的合成微表情生成
  6. 时序插值增强

  7. 多模态融合:

  8. 结合面部 landmark 点运动轨迹
  9. 融合生理信号(如 ECG、GSR)

学习资源推荐

  • 官方数据集说明文档:CASME2_Codebook.pdf
  • 经典论文推荐:《Micro-expression Recognition with Expression-State Constrained Spatio-Temporal Feature Representations》
  • 进阶工具包:Py-FEAT(面部表情分析工具箱)

通过本指南的基础实践后,建议尝试在 SAMM 或 MMEW 等更大规模数据集上验证模型效果,并关注 ICMI、ACII 等顶会的相关前沿研究。

正文完
 0
评论(没有评论)