当前位置: 代码迷 >> 综合 >> 深度学习项目——表情识别(3)数据初探与 Pipeline
  详细解决方案

深度学习项目——表情识别(3)数据初探与 Pipeline

热度:20   发布时间:2023-12-15 05:45:29.0

思路

  • 1. 分析
    • 1.1 题目解析
    • 1.2 数据探索
      • 1.2.1 数据存储方式
      • 1.2.2 数据探索工具
  • 2. Pipeline 制定
    • 2.1 工具选择
    • 2.2 Pipeline(标准流程)
      • 2.2.1 数据预处理
      • 2.2.2 模型构建

1. 分析

1.1 题目解析

(1) kaggle上比赛的题目解析:
五种表情:惊讶、愤怒、高兴、悲伤和中性(已经剔除数量较少的厌恶和恐惧)
评估指标:ACC(准确率) 和 AUC

(2)表情识别很多难点,表现在两个方面:

  • 易受到其它因素的影响,比如环境、光照和姿态等
  • 各种表情的程度不一样

1.2 数据探索

1.2.1 数据存储方式

形式一:每个文件夹放一个种类的图片
形式二:两个文件夹,一个文件夹放图片(非结构化数据),另外一个CSV文件存储标签和路径

经验:形式一只适合数量少的数据,而且只能做分类任务;形式二更加合理,方便管理和分布式存储

1.2.2 数据探索工具

探索的内容:数据的数量、是否有类别不均、文件格式等等。

方法一:Linux 的 bash脚本,直接在终端中编程进行探索

在这里插入图片描述

方法二:python脚本(更常用)
在这里插入图片描述
还可以加入更复杂的逻辑,例如查看文件后缀等。

2. Pipeline 制定

2.1 工具选择

在这里插入图片描述
其它三方包:

  • tqdm:可视化进度条
  • glob:os 模块的进阶(简化)版本——文件相关的处理
  • face-recognition:类似 opencv的一些功能

2.2 Pipeline(标准流程)

Pipeline:先搭框架,再不断迭代、优化。

要考虑数据集存在的问题:

  1. 脸部不规整
  2. 图片大小不统一
  3. 数据量庞大

在这里插入图片描述

两大块:

  • 数据预处理:解决上述问题
  • 模型建模

2.2.1 数据预处理

  • 截取人脸
    两种方法: 传统方法(比赛基本够用)或者 深度学习

  • 放缩和裁剪
    直接(按最终要求大小)放缩:可能变形
    解决:按照短边进行放缩和裁剪(一起进行)

  • 图片格式转换
    灰度化:不用管图像的色彩信息,也节省计算量
    一定注意,要所有数据格式统一

注:PNG格式的图片有四个通道!采用的是 RGBA 格式(还包括一个alpha参数-透明度)

  • 落入磁盘
    存储处理好的图片到硬盘

2.2.2 模型构建

  • 训练集划分
    一定要做好训练集和验证集的划分。

  • 数据加载
    数据太大的话,可以利用生成器,每次随机加载一部分数据至模型进行训练。

生成器具体实施的两种思路:
① 图片 ② 图片路径(更具通用性)

  • 深度学习建模
    ① 网络结构的设计
    ② 损失函数的设计——交叉熵、带权重的交叉熵等
    ③ 优化方法——具体而定,没有最好的
  • 模型训练
    模型训练,根据在验证集的效果,再去调整网络结构甚至是损失函数或者优化方法;又或者有新的 idea,也可以转向调整预处理。

这样不断循环,不断优化,最后再提交测试集

  • 测试提交

注:数据增强
在图像处理任务中,一般在数据加载和深度学习建模的过程中,还有一个基本都会用到的子步骤:数据增强。

数据增强并不是扩充数据落入磁盘再加载训练,而是数据加载之后再做数据增强,增强之后再送人模型进行训练。(或者在加载的途中就进行数据增强)

(数据增强具有随机性)

  相关解决方案