思路
- 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:先搭框架,再不断迭代、优化。
要考虑数据集存在的问题:
- 脸部不规整
- 图片大小不统一
- 数据量庞大
两大块:
- 数据预处理:解决上述问题
- 模型建模
2.2.1 数据预处理
-
截取人脸
两种方法: 传统方法(比赛基本够用)或者 深度学习 -
放缩和裁剪
直接(按最终要求大小)放缩:可能变形
解决:按照短边进行放缩和裁剪(一起进行) -
图片格式转换
灰度化:不用管图像的色彩信息,也节省计算量
一定注意,要所有数据格式统一。
注:PNG格式的图片有四个通道!采用的是 RGBA 格式(还包括一个alpha参数-透明度)
- 落入磁盘
存储处理好的图片到硬盘
2.2.2 模型构建
-
训练集划分
一定要做好训练集和验证集的划分。 -
数据加载
数据太大的话,可以利用生成器,每次随机加载一部分数据至模型进行训练。
生成器具体实施的两种思路:
① 图片 ② 图片路径(更具通用性)
- 深度学习建模
① 网络结构的设计
② 损失函数的设计——交叉熵、带权重的交叉熵等
③ 优化方法——具体而定,没有最好的 - 模型训练
模型训练,根据在验证集的效果,再去调整网络结构甚至是损失函数或者优化方法;又或者有新的 idea,也可以转向调整预处理。
这样不断循环,不断优化,最后再提交测试集
- 测试提交
注:数据增强
在图像处理任务中,一般在数据加载和深度学习建模的过程中,还有一个基本都会用到的子步骤:数据增强。
数据增强并不是扩充数据落入磁盘再加载训练,而是数据加载之后再做数据增强,增强之后再送人模型进行训练。(或者在加载的途中就进行数据增强)
(数据增强具有随机性)