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

devtools/2024/12/5 1:24:22/

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/devtools/138319.html

相关文章

【游戏引擎之路】登神长阶(十五)——DirectX12龙书:行百里者半九十(学习阶段完结)

【游戏引擎之路】登神长阶(十五)——DirectX12龙书:行百里者半九十(学习阶段完结) 2024年 5月20日-6月4日:攻克2D物理引擎。 2024年 6月4日-6月13日:攻克《3D数学基础》。 2024年 6月13日-6月20…

学习日记_20241126_聚类方法(自组织映射Self-Organizing Maps, SOM)

前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…

2023.11 Graph-Enriched Biomedical Language Models: A Research Proposal

Proceedings of the 13th International Joint Conference on Natural Language Processing and the 3rd Conference of the Asia-Pacific Chapter of the Association for Computational Linguistics: Student Research Workshop, pages 82–92 November 1–4, 2023. ©20…

如何从 Hugging Face 数据集中随机采样数据并保存为新的 Arrow 文件

如何从 Hugging Face 数据集中随机采样数据并保存为新的 Arrow 文件 在使用 Hugging Face 的数据集进行模型训练时,有时我们并不需要整个数据集,尤其是当数据集非常大时。为了节省存储空间和提高训练效率,我们可以从数据集中随机采样一部分数…

利用Python爬虫阿里巴巴中国站获得跨境属性的详细指南

在全球化贸易的背景下,跨境电商成为了连接全球买家和卖家的重要桥梁。阿里巴巴中国站作为全球知名的B2B电子商务平台,提供了海量的商品信息,其中跨境属性信息对于跨境电商尤为重要。本文将详细介绍如何使用Python编写爬虫,从阿里巴…

大数据新视界 -- 大数据大厂之 Hive 数据桶:优化聚合查询的有效手段(下)(10/ 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

SpringBoot 项目中使用 spring-boot-starter-amqp 依赖实现 RabbitMQ

文章目录 前言1、application.yml2、RabbitMqConfig3、MqMessage4、MqMessageItem5、DirectMode6、StateConsumer:消费者7、InfoConsumer:消费者 前言 本文是工作之余的随手记,记录在工作期间使用 RabbitMQ 的笔记。 1、application.yml 使…

redis机制详解

RDB 快照机制 在默认情况下,Redis 会将内存数据库的快照存储在名为 “dump.rdb” 的二进制文件中。同时,你可以通过相关设置,让 Redis 在满足特定条件时自动保存数据集。例如,设定 “save 60 1000”,意味着当在 60 秒内…