2023年MathorCup高校数学建模挑战赛—大数据竞赛A题基于计算机视觉的坑洼道路检测和识别求解全过程文档及程序

news/2024/11/30 8:48:14/

2023年MathorCup高校数学建模挑战赛—大数据竞赛

A题 基于计算机视觉的坑洼道路检测和识别

原题再现:

  坑洼道路检测和识别是一种计算机视觉任务,旨在通过数字图像(通常是地表坑洼图像)识别出存在坑洼的道路。这对于地质勘探、航天科学和自然灾害等领域的研究和应用具有重要意义。例如,它可以帮助在地球轨道上识别坑洼,以及分析和模拟地球表面的形态
  在坑洼道路检测任务中,传统的分类算法往往不能取得很好的效果,因为坑洼图像的特征往往是非常复杂和多变的。然而,近年来深度学习技术的发展,为坑洼道路检测提供了新的解决方案。
  深度学习具有很强的特征提取和表示能力,可以从图像中自动提取出最重要的特征。在坑洼图像分类任务中,利用深度学习可以提取到坑洼的轮廓、纹理和形态等特征,并将其转换为更容易分类的表示形式。同时,还可以通过迁移学习和知识蒸馏等技术进一步提升分类性能。例如,一些研究者使用基于深度学习的方法对道路图像进行分类,将其分为正常、坑洼两类;另外,一些研究者还使用基于迁移学习的方法,从通用的预训练模型中学习坑洼图像的特征,并利用这些特征来分类坑洼图像。
  本赛题希望通过对已标记的道路图像进行分析、特征提取与建模,从而对于一张新的道路图像能够自动识别坑洼状态。具体任务如下:

  初赛问题
  问题1:结合给出的图像文件,提取图像特征,建立一个识别率高、速度快、分类准确的模型,用于识别图像中的道路是正常或者坑洼。
  问题2:对问题1中构建的模型进行训练,并从不同维度进行模型评估,
  问题3:利用已训练的模型识别测试集中的坑洼图像,并将识别结果放在“test result.csv”中。
  附件说明:
  附件1:data.zip;
  训练数据集,文件中共包含301张图片。
  文件名中包含“normal”字符表示正常道路,否则为坑洼道路。
在这里插入图片描述
在这里插入图片描述
  附件 3:test data.zip;
  测试数据集,文件中包含几千张图片。

整体求解过程概述(摘要)

  本文主要建立了一个预训练的计算机视觉模型,对坑洼道路进行有效的检测。首先对题目给出的数据集进行数据清洗和分析图像特征,再从CNN中选取四个较为典型的预训练模型进行分别训练,检测,并选出最优、最适合本题的DenseNet-121模型进行训练和多维度评估,并最终对题目给出的数据集进行检测。
  针对问题一,对训练数据集进行数据清洗,重新分类错误图片,像素统一处理为224×224 大小,之后进行7:3的训练集和验证集的划分,并提取图像的特征信息。由于题目给出的数据集过少,传统网络模型易出现过拟合现象,会消耗大量计算资源和时间,故本文选用经典的VGG16、DenseNet-121、GoogLeNet和ResNet-50 模型分别训练,对四种模型从多角度分析评估,得到DenseNet-121模型的准确率达到99.34%,平均迭代时间为16.02s,综合评价为四种模型中最佳,故选用 DenseNet-121 模型进行后续的训练与预测。在建立DenseNet-121模型时,首先引入随机种子,加载训练好的参数,对图像进行数据增强处理,以提高模型的泛化能力;冻结模型的权重,以防止预训练的权重被破坏,并添加一个具有128个神经元和ReLU激活函数的全连接层进行二分任务,完成DenseNet-121 模型的建立。
  针对问题二,对问题一建立的DenseNet-121模型进行训练和评估。本文从准确率、损失函数、训练速度和鲁棒性等维度进行训练评估。首先测试模型的准确性,将训练好的模型对训练集进行预测,得到了99.34%的准确率,绘制并观察ROC曲线,得到AUC面积为0.98,模型性能良好;之后为测试模型的泛化能力,我们下载了新的681张图片进行预测,发现对于新的数据集模型仍可达到 96.34%的准确率;记录模型的训练耗时信息,得到平均迭代时间16.02s;最后,对图像数据加入扰动,对比其扰动前和扰动后模型的损失率和准确率,发现在50 次的迭代次数下仍可快速的趋于稳定,模型鲁棒性较高,具有识别率高、速度快、分类准确的特点。
  针对问题三,将新的数据集同样统一处理为224×224的像素大小,在处理中,发现名为guy7iodk.jpg 的图像无法识别,将其剔除。之后进行特征提取并利用问题二中训练好的模型进行检测,检测过程中生成随机16张图像与检测结果作为可视化示例,将结果存储到test-result.csv 文件中,通过统计发现共有 1256 张图像检测为正常道路,其余3685 张图像为坑洼道路。

模型假设:

  为确保构建更为精确的模型,本文依据实际情况对模型做出如下合理的假设:
  (1)假设训练数据集中提供的图像数据均是真实有效的。
  (2)假设图像中轮廓、纹理、形态等坑洼特征可以通过合适的特征提取方法进行有效捕获。
  (3)假设模型在训练过程中,运行环境始终保持稳定。
  (4)假设模型的训练结果不受主机显卡等硬件因素的影响。

问题分析:

  问题一的分析
  针对问题一,首先对题目给出的301 张图像数据集进行了数据清洗和标签化处理,采用CNN卷积神经网络中的预训练模型进行训练和测试。针对数据量小的情况,为确保模型具有高学习效率,且避免过拟合,本文选择预训练模型对测试集进行训练,选取了四个代表性的预训练模型,并按照7:3的比例划分数据集为训练集和验证集,并对比各个模型的不同指标,最终选择最优的模型进行建立并用于图像识别任务。

  问题二的分析
  针对问题二,本文基于问题一中确定的模型,从不同维度对其进行训练和评估。本文分别从准确率、损失函数、训练速度和鲁棒性评估等方面,通过生成训练集的准确率和损失函数的图像以及对ROC曲线和AUC面积进行分析和评价,判断模型是否有过拟合现象;引入新数据集,评估模型准确率和泛化能力,计算训练耗时与其他模型对比;对训练数据加入扰动,评估其鲁棒性。

  问题三的分析
  针对问题三,本文首先对题目给出的新的数据集观察分析并进行数据预处理,统一像素大小,保证输入的图像符合模型的需求,之后进行图像数据的特征提取并同问题一,问题二的步骤,对新的数据集进行检测,将检测结果保存在test-result.csv文件中,对检测结果进行可视化展示,展示不同道路类型的数量和占比。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

程序如下:
import numpy as np 
import tensorflow as tf 
from tensorflow import keras 
from tensorflow.keras.preprocessing.image import ImageDataGenerator 
import matplotlib.pyplot as plt 
import h5py np.random.seed(42) 
tf.random.set_seed(42) data_dir = 'E:\Acode\AAAA\\test_v2.0' image_height = 224 
image_width = 224 
batch_size = 16 # 创建DenseNet121模型 
base_model = keras.applications.DenseNet121( weights='imagenet', include_top=False, input_shape=(image_height, image_width, 3) 
) # 冻结DenseNet121模型的权重 
base_model.trainable = False # 创建新的模型架构 
model = keras.Sequential([ base_model, keras.layers.GlobalAveragePooling2D(), keras.layers.Dense(128, activation='relu'), keras.layers.Dense(1, activation='sigmoid') 
]) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) model.summary() 
# 数据集划分为训练集和验证集 
train_data = ImageDataGenerator( rescale=1. / 255, rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, validation_split=0.3 
) train_generator = train_data.flow_from_directory( data_dir, target_size=(image_height, image_width), batch_size=batch_size, class_mode='binary', shuffle=True, subset='training', classes=['normal', 'potholes'] 
) validation_generator = train_data.flow_from_directory( data_dir, target_size=(image_height, image_width), batch_size=batch_size, class_mode='binary', shuffle=True, subset='validation', classes=['normal', 'potholes'] 
) epochs = 50 history = model.fit( train_generator, steps_per_epoch=len(train_generator), epochs=epochs, validation_data=validation_generator, validation_steps=len(validation_generator) 
) h5_file = 'E:\Acode\AAAA\Lineh5\DenseNet121.h5' with h5py.File(h5_file, 'w') as f: for key, value in history.history.items(): f.create_dataset(key, data=value) def plot_model_performance(history): plt.figure(figsize=(12, 4)) plt.subplot(1, 2, 1) plt.plot(history.history['accuracy'], label='Train Accuracy') plt.plot(history.history['val_accuracy'], label='Validation Accuracy') plt.xlabel('Epochs') plt.ylabel('Accuracy') plt.legend() plt.subplot(1, 2, 2) plt.plot(history.history['loss'], label='Train Loss') plt.plot(history.history['val_loss'], label='Validation Loss') plt.xlabel('Epochs') plt.ylabel('Loss') plt.legend() plt.show() plot_model_performance(history) # 保存训练好的模型 
model.save('E:\Acode\AAAA\\trained_model_DenseNet121.h5') print("训练好的模型保存完毕。")
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

http://www.ppmy.cn/news/1551148.html

相关文章

芯盾时代的身份安全产品体系

芯盾时代具备全栈零信任身份安全产品和服务能力: 芯盾时代IAM能够适配大企业用户复杂的应用访问需求,提供云端、互联网端、企业内网全场景的身份访问安全接入能力; 芯盾时代IAM能够理解大企业用户的身份差异,为内部用户、合作方和…

免费实用在线AI工具集合 - 加菲工具

免费在线工具-加菲工具 https://orcc.online/ sql格式化 https://orcc.online/tools/sql 时间戳转换 https://orcc.online/tools/timestamp Base64 编码解码 https://orcc.online/tools/base64 URL 编码解码 https://orcc.online/tools/url Hash(MD5/SHA1/SHA256…) 计算 h…

dns 服务器简单介绍

dns 服务器分类: 根域名服务器顶级域名服务器权威域名服务器本地域名服务器 dns 的查询过程 国内优秀公共域名 腾讯:DNSPod-免费智能DNS解析服务商-电信_网通_教育网,智能DNS-烟台帝思普网络科技有限公司 119.29.29.29 和 182.254.118.118 阿里&#xf…

blender 视频背景

准备视频文件 首先,确保你有想要用作背景的视频文件。视频格式最好是 Blender 能够很好兼容的,如 MP4 等常见格式。 创建一个新的 Blender 场景或打开现有场景 打开 Blender 软件后,你可以新建一个场景(通过点击 “文件” - “新建…

【Unity-碰撞基于的物理定律和原理】

动量守恒定律和弹性碰撞公式 恢复系数(Coefficient of Restitution) 碰撞角度与速度分量的计算 物理引擎在计算碰撞后的速度和方向时,会根据上述物理原理进行模拟。不过,物理引擎通常会考虑更多的实际因素,如摩擦力、…

AI数据分析工具(一)

Looker Studio(谷歌)-免费 优点 免费使用:对于中小型企业和个人用户来说,没有任何费用压力,可以免费享受到数据可视化和报表创建的功能。与Google服务集成:特别适合使用Google产品生态的企业,…

Linux:systemd进程管理【1】

整体理解 要快速掌握Linux的systemd并覆盖80%的使用场景,以下是最重要的20%知识点: Systemd简介与核心功能: Systemd是一个系统和服务管理器,作为Linux系统的PID 1进程,负责启动和管理其他系统组件。它提供并行启动服…

vue 实现关键字高亮效果

vue 实现关键字高亮效果 这是啥子意思呢,就是类似于百度搜索,根据关键词搜索结果,搜索结果中,与关键词相同的字显示红色,仅此而已,没有什么大的功能。简单写一下demo。 环境 我使用的是 vue3 ts 的语法来…