在上一篇文章中,我们已经提到,疲劳预警系统(DMS)是基于驾驶员生理及其他非生理信号的基础设施进行采集、分析和处理,判断驾驶员状态是否处于疲劳、睡眠状态。 基于处理图像的疲劳驾驶系统主要由 3 个模块组成:图像采集模块、图像处理模块、警示提示模块。 同时也简单的介绍了 NXP S32V 平台的及其 AIRunner 架构。 本篇文章我们就来跟大家如何在 NXP S32V 平台上危险实现驾驶行为检测。
一、 危险行为行为
1.1、概念简介
我们经常遇到这样的场景:一盏灯变成绿色,你面前的车不走。 另外,在没有任何意外发生的情况下,前面的车辆突然减速,或者转弯变道。 等等这些现象,给道路安全带来了很大的影响。
那么造成这样现象的原因是什么,主要有因为司机疲劳驾驶,或者走神去做其他事情,想象身边的例子,开车时候犯困,开始时候打电话,发短信,喝水,拿后面东西,整理化妆的都有。 这对道路安全和行车效率形成了极大的影响。
据中国安全部门介绍,五分之一的车祸是由司机分心引起的。 我们,台湾当局在海外时间,以让时间,以一个一种消费者的驾驶员改善这一现象,并更好地保证客户的安全。 针对场景,识别驾驶员使用手机、抽烟、不系安全带、双手离开方向盘等动作姿态,分析预警危险驾驶行为,提升行车安全性。
1.2、检测原理简述
为了能够对复杂场景下的司机危险行为进行分类,使用卷积神经网络来解决问题。 卷积神经网络是神经网络的一种,把图片的部分相邻像素变成长宽更小,高度越深的单元,从而提炼局部的特征,一层一将层特征往后映射,之后提取出最终的特征。 现在世界上大部分图片处理和计算机视觉问题都是用卷积神经网络来解决的。
以下是基于使用 Inception 模型在其它的 DMS 数据进行分类,直接看相关的程序代码:
1、load libraries
2、load train data
Found 22424 images belonging to 10 classes.
subdior to train type {'c0': 0, 'c1': 1, 'c2': 2, 'c3': 3, 'c4': 4, 'c5': 5, 'c6': 6, 'c7': 7, 'c8': 8, 'c9': 9}
Found 641 images belonging to 10 classes.
subdior to valid type {'c0': 0, 'c1': 1, 'c2': 2, 'c3': 3, 'c4': 4, 'c5': 5, 'c6': 6, 'c7': 7, 'c8': 8, 'c9': 9}
3、构建模型
total layer count 312
4、训练模型
train_generator.samples = 22424
valid_generator.samples = 641
5、模型保存、测试
结果如下:
可以看到图片测试准确率能够达到要求。
二、S32V 中驾驶员危险行为检测
2.1、AIRunner 使用
为了能够将之前训练得到的模型用于 Eagle Eye 平台还需要将模型做如下处理:
Setp 1: batch normalization
bazel run --config=opt //tensorflow/contrib/lite/toco:toco -- \
--drop_control_depenency \
--input_file=$MODEL_DIR/frozen_mobilenetV1-bms.pb \
--output_file=$MODEL_DIR/frozen_mobilenetV1-bms_bn.pb \
--input_format=TENSORFLOW_GRAPHDEF --output_format=TENSORFLOW_GRAPHDEF \
--input_shape=1,224,224,3 \
--input_array=input \
--output_array=MobilenetV1/Predictions/Reshape_1
Step 2: quantization
python quantize_graph_mnet.py \
--input=$MODEL_DIR/frozen_mobilenetV1-bms_bn.pb \
--output_node_names=MobilenetV1/Predictions/Reshape_1 \
--print_nodes --output=$MODEL_DIR/frozen_mobilenetV1-bms_bn_qsym.pb \
--mode=weights_sym –logtostderr
Step 3: freeze quantization model (min/max range)
python mnet_minmax_freeze.py \
--in_graph=$MODEL_DIR/frozen_mobilenetV1-bms_bn_qsym.pb \
--out_graph=$MODEL_DIR/frozen_mobilenetV1-bms_bn_qsym_final.pb \
--out_graph_part=$MODEL_DIR/frozen_mobilenetV1-bms_bn_qsym_final_part.pb \
--output_layer=MobilenetV1/Predictions/Reshape_1 \
--output_layer_part=MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6
Step 4: extract sub-model
bazel run --config=opt //tensorflow/contrib/lite/toco:toco --\
--drop_control_depenency\
--input_file=$MODEL_DIR/ frozen_mobilenetV1-bms _bn.pb\
--output_file=$MODEL_DIR/ frozen_mobilenetV1-bms _float_outputlayers_graph.pb\
-input_format=TENSORFLOW_GRAPHDEF\
--output_format=TENSORFLOW_GRAPHDEF\
--input_shape=1,7,7,256\
--input_array=MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6\
--output_arrays=MobilenetV1/Predictions/Reshape_1
2.2、EVB2 中运行
为了能够在 ISP 工程中使用该模型,将算法移植到 ISP_SONY224 的工程中。
- 将选择模型文件以及标签文件
2、预测结果
3、最后的结果分析
Classifying: data/airunner/image_classification/dirver.jpg
Time taken to Inference times detect pictures:: 36 milliseconds
Top 5:
c1, 0.230696
c2, 0.085909
c3, 0.085474
c0, 0.085418
【参考资料】:
【1】《深入疲劳预警系统(DMS)》
http://mileview.cn/xingyezixun/23-40.html
【2】《百度AI攻略:驾驶行为检测》
https://www.jianshu.com/p/8dea6d1a5275
【3】NXP 官网参考资料
评论