机器学习工程师纳米学位毕业项目
基于深度学习的走神司机探测
陈亮
2018 年 7 月 7 日
1
目录
1. 定义 ...................................................................................................... 2
1.1. 项目概述 ............................................................................................... 2
1.2. 问题描述 ............................................................................................... 2
1.3. 输入数据集 ........................................................................................... 2
1.4. 评估指标 ............................................................................................... 3
1.5. 项目目标 ............................................................................................... 3
2. 分析 ...................................................................................................... 3
2.1. 数据分析及可视化................................................................................. 3
2.1.1. 数据抽样并列出 .................................................................................... 4
2.1.2. 数据总结 ............................................................................................... 5
2.2. 算法与技术 ........................................................................................... 5
2.2.1. 神经网络 ............................................................................................... 6
2.2.2. 卷积神经网络 CNN ............................................................................... 7
2.2.3. 技术 ...................................................................................................... 8
2.3. 基准指标 ............................................................................................... 8
3. 具体方法 ............................................................................................... 9
3.1. 数据预备处理 ........................................................................................ 9
3.2. 实现 ...................................................................................................... 9
3.2.1. 模型构建 ............................................................................................... 9
3.2.2. 模型训练 ............................................................................................... 9
3.3. 结果分析 ............................................................................................. 10
3.3.1. 模型在训练数据集上的表现 ................................................................ 10
3.3.2. 模型在测试数据集上的表现 ................................................................ 12
4. 改进 .................................................................................................... 13
4.1. 改进方向 ............................................................................................. 13
4.2. 改进结果 ............................................................................................. 13
5. 结论 .................................................................................................... 14
5.1. 结果 .................................................................................................... 14
5.2. 总结 .................................................................................................... 15
5.3. 后续改进 ............................................................................................. 15
2
1. 定义
1.1. 项目概述
随着生活水平的提高,车辆日益剧增,交通事故数量逐年增加,造成了巨大人员伤
亡和财产损失。根据中华网汽车安全部门的数据,五分之一的车祸是由一名分心的司机
引起的,这意味着每年有 425,000 人受伤,3000 人因分心驾驶而死亡。
那么造成这样现象的原因是什么,主要有因为司机疲劳驾驶,或者走神去做其他事情,
想象身边的例子,开车时候犯困,开始时候打电话,发短信,喝水,拿后面东西,整理化妆
的都有。这对道路安全和行车效率形成了极大的影响。
为了改善这一令人吃惊的数据, State Farm 希望通过仪表板摄像头能够自动检测驾驶
员分散注意力的行为,并更好地为客户提供保险。给定 2D 仪表板相机图像的数据集,State
Farm 正在挑战 Kagglers 对每个驾驶员的行为进行分类。 他们是否专心驾驶,系好安全带,
还是在后座与朋友一起拍照?
1.2. 问题描述
我们要做的事情,就是根据车内摄像机的画面自动检测驾驶员走神的行为。如果是安全
驾驶则一切正常,如果有走神行为,给予警报提醒。
根据驾驶员常见驾驶动作,将将驾驶员的状态归纳为以下十种:
c0: 安全驾驶
c1: 右手打字
c2: 右手打电话
c3: 左手打字
c4: 左手打电话
c5: 调收音机
c6: 喝饮料
c7: 拿后面的东西
c8: 整理头发和化妆
c9: 和其他乘客说话
这是一个有明确分类的监督学习多分类问题,可以采用卷积神经网络模型来求解。
1.3. 输入数据集
数据集来自 kaggle。数据集包含以下几部分:
https://www.kaggle.com/c/state-farm-distracted-driver-detection/data
训练数据:训练数据根据驾驶员的不同状态,将数据从 c0 到 c9 分为 10 组,每组 2000
个左右,总共 22424 个图片数据,图片大小:640x480
测试数据:测试数据为 79726 张图片数据,同一个驾驶员只出现在训练数据或者测试数
3
据里。
driver_imgs_list.csv: 一个 CSV 文件,里面为所有训练图片编号,以及其对应的驾驶
员、动作编号。
1.4. 评估指标
评估指标采用 Logloss 的评估方式:
N:样本数
M:类别数,比如本项目里的类别,M 就为 10
yij:第 i 个样本属于分类 j 时为为 1,否则为 0
pij:第 i 个样本被预测为第 j 类的概率
采用 logloss 的评估方式更能反映模型和算法的能力。如果模型预测结果正确了,
=>
,
=> log(Pij)=-0.001,最后增加的 log 差不多。但如果判断错
误,如
=> log(Pij)= -无穷,
=> log(Pij)=-6.9 也就是判断错误一个,对得分
的影响会非常大。log loss 旨在惩罚错误分类,对于完全正确的分类(预测概率为 1)显然其对
loss 的贡献为 0。
1.5. 项目目标
我的目标是: logloss < 0.26 ,并且世界排名在前 1/10。
2. 分析
2.1. 数据分析及可视化
训练数据根据驾驶员的不同状态,将数据从 c0 到 c9 分为 10 组,每组 2000 个左右,总
共 22424 个图片数据,图片大小都是 640x480。
图 1:训练数据中不同状态下的数据分布
从统计结果上来看,从 c0 到 c9 这 10 种状态,每组数量分布还算比较均匀,所以并不
需要更改数据分布。
分析训练数据中的司机分布,发现训练数据集一共有 26 个司机,测试数据集有司机若
干,且和训练集中的司机并不相同。每个司机所对应的数据大小如图 2.
0
1000
2000
3000
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9
Data distribution in different states
4
从统计结果上来看,这 26 个司机数量分布略有差异,但整体还算比较均匀,所以当采
用司机进行训练集合验证集的时候,并不需要对数据进行特殊预处理。
图 2:训练数据中不同司机下的数据分布
测试数据总共有共有图片 79726 张,查看图中图片,司机和训练数据中的并不同,司机
更多,场景更多。
2.1.1. 数据抽样并列出
随机抽取数据集中的某种状态展示,这里分别抽取了训练数和测试数据。训练数据中抽
取了 26 位司机喝饮料的状态,展示如图 3 所示。测试数据中,随意抽取了一些图片,展示
如图 4 所示。
图 3:26 位司机喝饮料状态抽样展示
0
500
1000
1500
1
Data distribution in different driver
P002 P012 P014 P015 P016 P021 P022 P024 P026
P035 P039 P041 P042 P045 P047 P049 P050 P051
P052 P056 P061 P064 P066 P072 P075 P081