神经网络交通标志攻防实验成功,利用卷积神经网络预测交通事故位置
神经网络交通标志攻防实验成功,利用卷积神经网络预测交通事故位置该项目的完整代码可以在我的GitHub仓库中找到。数据来源包括英国运输部(DfT)道路安全数据、DfT的道路交通计数(是的,我们确实雇用了人员站在街角数汽车)、来自英国2011年人口普查的数据,以及由谷歌静态地图API提供的卫星图像。我们选择伦敦作为我们的试验场,部分原因是英国国家统计局有一些关于交通事故、人口和交通的非常全面的高质量数据;部分原因是一个集市中心、郊区和主次道路于一体的大型建筑城市,为训练提供了各种各样的图像;部分原因是因为我住在这里并且没有受到汽车撞击而产生既得利益。使用卫星图像是否可以提高模型预测交通事故的能力? 我们总共构建了三种模型来预测交通事故的各个方面:这篇文章是关于模型2的,以及我们如何构建卷积神经网络(CNN)来预测特定区域在交通事故方面的危险程度。数据
点击上方关注,All in AI中国问题
每年全球约有125万人死于道路交通事故,另有2000至5000万人受伤或致残。如果可以预测交通事故的位置,这可能在减少每年的事故数量方面产生巨大的有益影响。例如,路由软件可以避开最危险的区域 - 特别是在无人驾驶汽车即将到来的背景下。它也可在保险方面发挥作用,以便预测风险,也可用于政府和当地道路管理部门,以期创建更有效的道路维护并改善系统。
解决方案
考虑到这一点,我最近与Sabatino Chen完成了一个项目,尝试解决这个问题,使用各种形式的深度学习来预测可能发生交通事故的地方。我们对回答这个问题特别感兴趣:
使用卫星图像是否可以提高模型预测交通事故的能力?
我们总共构建了三种模型来预测交通事故的各个方面:
- 使用交通事故、人口密度和交通量的结构化数据来尝试和预测事故的严重程度
- 使用卫星图像来尝试和预测某个区域是“安全”(无交通事故)还是“危险”(交通事故)
- 一种奇特的混合数据模型,它将结构化数据训练的多层感知器的输出和卫星图像训练的卷积神经网络组合成最终的神经网络层头
这篇文章是关于模型2的,以及我们如何构建卷积神经网络(CNN)来预测特定区域在交通事故方面的危险程度。
数据
我们选择伦敦作为我们的试验场,部分原因是英国国家统计局有一些关于交通事故、人口和交通的非常全面的高质量数据;部分原因是一个集市中心、郊区和主次道路于一体的大型建筑城市,为训练提供了各种各样的图像;部分原因是因为我住在这里并且没有受到汽车撞击而产生既得利益。
该项目的完整代码可以在我的GitHub仓库中找到。数据来源包括英国运输部(DfT)道路安全数据、DfT的道路交通计数(是的,我们确实雇用了人员站在街角数汽车)、来自英国2011年人口普查的数据,以及由谷歌静态地图API提供的卫星图像。
方法
我们选择的区域是一个广场,我在M25公路的外面画了一个广场,这是围绕伦敦的高速公路,主要是为了包括各种各样的道路类型:
为了获得一组不重叠的“危险”和“安全”区域,我们创建了一个网络系统,将伦敦划分为0.0005纬度x 0.0005经度的正方形。这将导致56米高(纬度)和35米宽(经度)的网格方格(技术矩形),类似于通常用作交通事故分析的30mx 30m的尺寸。
下图显示了这个网格方形系统叠加在伦敦市中心的交通事故地点的地图上,给人一种规模感(事故位置可以非常有效地跟踪道路系统):
如果你能发现斯特兰德和泰晤士河,可以加分
一旦我们得到了一组网格正方形的列表,我们就使用事故数据集来确定哪些方格在过去五年中曾经或没有发生过交通事故。这些成为我们的“危险”和“安全”类。然后,我们使用Google Static Maps API在5 000个“危险”区域和5 000个“安全”区域的随机样本中为每个正方形下载图像。
下图显示了从每个类的随机样本中下载的前五个图像。他们表明,危险区域包括郊区道路、较大的道路和交叉口(例如环形交叉口,这在英国很常见),但并非所有图像都只是道路 - 例如,第四张图像也包含绿色区域发生事故的道路旁边。
安全区域包括没有道路的绿色区域(不出所料),但也包含郊区、道路与发生事故的道路有相似之处。对于CNN来说,这些图像可能更难以分类,但对于它来说也很重要,因为它们意味着CNN不仅仅是在学习道路和领域之间的差异,而且还在学习不同类型之间的差异。
模型
我们尝试了三次CNN迭代来生成最准确的模型。我们尝试的第一个版本是使用Keras的相当简单的CNN模型架构,在最终的sigmoid激活层之前有三对Conv2D和MaxPooling2D层以及一个密集层。它表现相当不错,测试准确度(平均F1得分)为72%,且没有过度拟合。
这是我们的基线模型的代码:
对于我们模型的第二次迭代,我们在具有ImageNet权重的VGG19预训练模型之上构建,并通过在输出之上训练新分类器之前首先运行我们的图像来提取特征。我们达到了74%的测试精度,但是具有显著的过度拟合(即训练集获得了更高的准确度)。
对于我们的最后一次迭代,我们使用L1正则化来尝试克服过度拟合。为了尝试提高准确度,我们增加了图像输入大小,并为分类器头部添加了一个额外的密集层,以便进行良好的测量。
结果
最后一次迭代是我们最好的模型,达到了77%的准确度和最小的过度拟合。构建模型的代码有点复杂(没有双关语),但它可以在我的笔记本6中的GitHub repo中找到。结果如下:
分类报告(顶部是训练集、底部是测试集)和最终模型的混淆矩阵
我想要改进的主要方法是增加召回率并减少误报的比例,当面积实际为0=危险时,预测1 =安全。在这种情况下,与预测实际安全的危险区域的模型相比,这些类型的错误可被视为代价更昂贵。
未来
为了尝试提高模型的准确性,并完全去除过度拟合,可以在进一步的模型迭代中尝试以下一些方法:
- 下载更多用于训练的图像
- 使用不同的预训练模型,例如ResNet50,已在其他CNN中用于卫星图像
- 冻结预训练模型的特定层并微调其他层
- 在预先训练的模型之上更改密集连接的分类器的体系结构(例如,添加更多层或节点)
然而,仅凭卫星图像就能准确预测77%的地区是否可能发生交通事故,这仍然令人印象深刻。