IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 基于CBAM-CNN的故障汽车检测 -> 正文阅读

[人工智能]基于CBAM-CNN的故障汽车检测

1.摘要

随着汽车行业的迅速发展,交通事故处理逐渐成为交管部门的一项挑战性工作。为进一步提高交通事故处置效率,在静态图像中对事故车辆完成识别和检测任务是本文研究的主要内容。传统的车辆图像识别算法将特征提取与目标分类常分为两个阶段,特征选取需要人工构建,主要依靠人为经验,整个过程效率低下,特别在现实复杂的交通场景中,由于天气、光照、环境以及光学抖动等因素的影响,不能够有效检测出目标。针对传统车辆检测算法的不足,卷积神经网络的兴起逐渐成为主流的目标检测算法,其主要优势在于目标检测中候选区域生成、特征提取、分类、位置精修四个步骤被统一到一个深度网络框架之内,有效提升了检测效率,并且针对目标旋转、位移具有一定的不变性,可适用于复杂场景。本文研究参考前沿的卷积神经网络知识,并将其应用于静态图像中的事故车辆检测,主要完成以下工作:1.由于车辆检测可以近似看成一个二分类问题,所以在特征提取网络结构上通过加入卷积神经注意力模块(CBAM),减少网络的层数,剔除在特征提取中产生的冗余特征信息,提高算法运行速度,为了使模型更加适应事故图像中车辆识别和检测问题,本文建立了两类数据集,第一类是事故车辆数据集,第二类是完整(非事故)车辆数据集,由于在公开数据集中事故车辆的数据集相对较少,为了扩展数据集,本文采取数据增强的方式进一步提高模型的泛化能力。2.为了验证CBAM-CNN模型在事故车辆分类上的准确率,我们将此模型的实验结果与具有相似结构的LeNet模型进行对比,其返回的实验结果可得:CBAM-CNN模型取得了较高的准确率3.使用 django 部署?Web 应用程序,实现事故汽车的在线检测与预测分类。

2. 数据集描述

事故车辆和非事故车辆图像共计3800张。其数据样本如下:

?数据样本统计:

数据样本? ? ? ? 事故车? ? ? ?非事故车
训练集1516? ??1517
测试集384384

?3.模型设计与代码实现

CBAM原理:

注意力机制模仿人看物体时的方法:通过简单一瞥,分析图像的重要部分,然后聚焦于该位置,而不是对画面中所有区域给予同等重视。CBAM通过之前提取到图像的feature map,在通道channel和空间spatial分别学习了What(注意什么)和Where(注意哪儿)的Attention map。基本原理如下所示:

??CBAM-CNN模型代码:

def CBAM_CNN(width, height, depth):
    inputShape = Input(shape=(height, width, depth))
    outputs = cbam_module(inputShape )
    outputs1 = MaxPooling2D((2, 2), strides=(2, 2))(outputs)  # Average Pooling layer
    layer = Conv2D(32, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(inputShape)
    layer1 = MaxPooling2D((2, 2), strides=(2, 2))(layer)  # Average Pooling layer
    x = Concatenate()([outputs1, layer1])
    layer2 = Conv2D(32, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(x )
    layer3 = MaxPooling2D((2, 2), strides=(2, 2))(layer2)  # Average Pooling layer
    layer4 = Flatten()( layer3)
    layer5 = Dense(128, activation='relu')(layer4 )  # FC layer with 200
    layer6 = Dense(1, activation='sigmoid', name='OUTPUT')(layer5)  # FC layer with 8 classes
    model = Model(inputShape, layer6)
    model.summary()
    return model

?LeNet模型代码:

class LeNet:
	@staticmethod
	def build(width, height, depth, classes):
		model = Sequential()
		inputShape = (height, width, depth)
		if K.image_data_format() == "channels_first":
			inputShape = (depth, height, width)
		model.add(Conv2D(32, (3, 3), padding="same", input_shape=inputShape,name='Conv_1'))
		model.add(Activation("relu"))
		model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
		model.add(Conv2D(50, (3, 3), padding="same",name='Conv_2'))
		model.add(Activation("relu"))
		model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
		model.add(Flatten())
		model.add(Dense(128,name='Dense_1'))
		model.add(Activation("relu"))
		model.add(Dense(1,name='Dense_2'))
		model.add(Activation("sigmoid"))
		return model

数据读取与数据增强处理:

train_datagen = ImageDataGenerator(rescale = 1./255,shear_range = 0.2,zoom_range = 0.2,horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)
training_set = train_datagen.flow_from_directory('dataset/training_set',target_size = (64, 64),batch_size = 32,class_mode = 'binary')
test_set = test_datagen.flow_from_directory('dataset/test_set',target_size = (64, 64), batch_size = 32,class_mode = 'binary')

模型训练:

model = CBAM_CNN(width=64, height=64, depth=3)
opt = Adam(lr=INIT_LR, decay=INIT_LR / EPOCHS)
model.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
H=model.fit_generator(training_set,samples_per_epoch = 3033,nb_epoch = EPOCHS,validation_data = test_set, nb_val_samples = 768)

4.实验结果分析

实验环境:python3.6.5、tensorflow==1.12、keras==2.2.4等,

在网络的最后一个阶段,网络层数与前面保持同步,依然分为两层,中间的卷积神经网络函数依然使用ReLU激活函数。对于最后一层,选择Sigmoid函数用于分类任务。在训练次数为15次时,未达到训练完成的情况下,其准确率如下:

模型准确率
CBAM-CNN83.6%
?LeNet80.2%

5.应用

上传图片:

输出结果:

?6.结论

? ? 针对数据集的建立,虽然本文中通过数据增强的方法增加了训练数据集,但是由于道路交通事故车辆形态各异,且在大型交通事故中,很多车辆发生严重形变,因此想要获得理想的检测模型,还需要搜集不同天气状况、不同交通环境、不同光照下的事故形态数据集。

? ??为了提高传统车辆故障诊断方法的准确率,应尝试基于多重注意力-卷积神经网络-双向门控循环单元的端到端的故障诊断方法,通过在CNN和BiGRU中分别加入卷积注意力模块(convolutional block attention module,CBAM)和序列注意力模块(sequence attention module,SAM),进一步加强了模型对于关键信息的提取能力。大家可以尝试。

项目完整代码连接:https://download.csdn.net/download/weixin_40651515/21029096

下载配置环境可直接运行。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:36:04  更:2021-08-12 16:36:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 20:28:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码