沥青路面裂缝的目标检测与图像分类任务

文章题目是《A grid‐based classification and box‐based detection fusion model for asphalt pavement crack》

于2023年发表在《Computer‐Aided Civil and Infrastructure Engineering》

论文采用了一种基于网格分类和基于框的检测(GCBD),其中基于网格分类的部分主要用于对裂缝区域进行细粒度划分,是同时进行分类和检测的。

📌文章针对目前存在的问题:

  • 网格的局部感受野无法提取裂缝的整体特征难以对横向裂缝、纵向裂缝的宏观特征进行判断
  • 目标检测容易产生大量冗余预测框,并且裂缝独特的拓扑结构会干扰通用的非极大值抑制算法的筛选过滤,造成裂缝检测性能的劣化

✨论文的主要贡献:

  1. 构建了大规模高质量标注沥青路面病害图像双标记数据集
  2. 模型同时实现分类与检测
  3. 提出了基于网格的图像分类策略,一次性识别整张图像所有的网格
  4. 基于改进YOLOv5框的检测
  5. 构建了一个集成GCBD的融合模型
  6. 达到工业级的应用性能水平,符合工程标准(《公路技术状况评定标准JTG5210-2018》)(基于grid和box都可以计算路面病害的面积)
  7. 输出结果可直接用于计算路面状况指数(PCI)

🧠整体的网络结构非常清晰明了,一共就是四步,其中NMS-ARS和MaM是文章提出的后处理方法,分类头和检测头共享骨干网络的参数。

 🔢关于数据集

  • 图像大小为2048×204820000张,按6:2:2划分
  • 在自上而下的相机视图中,地面采样距离约为1毫米
  • 图像来自北京、湖南、广东、新疆
  • 包含多个复杂的场景(如树叶、沙子、水、阴影)
  • 所有图像都使用所提出的融合模型的双重方法进行注释
  • 基于网格的方法将图像分为20 × 20个单元格,那么对于2048*2048大小的图像来说的话每个单元格就是102.4*102.4像素的,resize到640*640每个单元格就是32*32像素的

🔔grid和box标注的规范

🔁左图中橙色是修补Repair,LC是纵向裂缝,TC是横向裂缝,AC是龟裂,SR是条状修补,TM就是交通标线了,就是道路上的那两条白色线条

💡Preprocessing-Data Augmentation 

  • 将图像调整为640×640,像素值在01之间进行归一化
  • 图像增强仅在水平和垂直翻转,概率为50%
  • 色调、饱和度和值 (HSV) 颜色空间中的 HS V 通道中添加扰动来执行颜色抖动
  • 路面裂缝图像的色调相对单一,而饱和度和值随环境因素(如光照)显著变化。因此,色调H的干扰系数较小(0.015, 但饱和度S和值V较大(分别为 0.7 0.4
  • Mosaic增强用于通过四个图像来丰富上下文
  • 不能使用翻转,这样的话会混淆TC和LC的

 💡Preprocessing-Dimension Cluster

  • 采用K-Means聚类和遗传算法生成自适应锚点
  • anchor box影响预测框的规模和质量
  • p1000 代进化锚点后,锚点的大小为 (53, 65)(206, 48)(49, 228)(52, 621)(496, 73)(80, 576)(55, 141)(201, 543) (405, 577),最好的可能召回率为 99.3%,也就是说可以使用上述锚点检测到最多 99.3% 的对象

 💡Preprocessing-Coordinate Transformation

       🥇这一步就是将网格标签和检测标签建立在同一坐标系上,换句话说就是,网格标签也采用目标检测的标签形式,只不过网格的类别用负数标记,从-1开始。 

3 0.797297 0.350000 0.405405 0.100000
-4 0.851351 0.325000 0.027027 0.050000
-4 0.878378 0.325000 0.027027 0.050000
-4 0.905405 0.325000 0.027027 0.050000
-4 0.932432 0.325000 0.027027 0.050000
-4 0.959459 0.325000 0.027027 0.050000
-4 0.986486 0.325000 0.027027 0.050000
-4 0.608108 0.375000 0.027027 0.050000
-4 0.635135 0.375000 0.027027 0.050000
-4 0.662162 0.375000 0.027027 0.050000
-4 0.689189 0.375000 0.027027 0.050000
-4 0.716216 0.375000 0.027027 0.050000
-4 0.743243 0.375000 0.027027 0.050000
-4 0.770270 0.375000 0.027027 0.050000
-4 0.797297 0.375000 0.027027 0.050000
-4 0.824324 0.375000 0.027027 0.050000
-4 0.851351 0.375000 0.027027 0.050000 

🧶Training

  • 共享骨干网络联合训练的多视觉任务模型
  • 骨干网络提取高维深度特征
  • 网络分类分支和标框检测分支分别整合微观和宏观特征

CBS: Conv、BNsigmoid linear unit(SiLU)对图像进行五次下采用,最终的特征图大小是20×20

C3T块由三个卷积块和一个瓶颈T_N块组成,集成了特征映射,消耗的计算资源更少

🎨loss function 

🧱网格和框损失函数的分配系数是0.2,也就是α是0.2,这可以设置为一个超参数。

       在进行计算损失的时候,box就按照BBR的损失正常计算就行,grid是先将真实标签的box转换为grid网格的形式,用一个常数标记,比如1。基于grid的分类方法可以一次性对一幅图像上的所有网格单元进行分类。

       📝grid的预测值是一个思维张量,形状为[B,C,H,W],B就是batch size,C是grid的类别数,H和W是特征图的高宽。预测张量中的每个值表示对应位置的grid单元属于特定类别的概率(经过sigmoid激活后)。

🎨超参数

  • 模型采用迁移学习和多任务学习。检测网络在COCO数据集中的常见对象上进行了预训练
  • 分类网络和检测网络联合训练小批量大小为 64
  • 100 epoch
  • SGD优化器,学习率是0.01,动量为0.9
  • Weight decay0.0005,学习率采用warm-upcosine decay

Postprocessing-ARS

       NMS 以高置信度提出了三个预测框 AB C。任意两个框之间的空隙低于通常的阈值,因此预测的裂纹被计数两次。如果IoU值过低,其他裂纹将被错误地过滤掉。

  • 针对裂缝自相似性等分形几何拓扑结构,模型改进了标框目标检测后处理的NMS算法
  • 提出一种面积减少抑制(ARS)增强NMS保留高置信度的预测框,抑制具有高重叠区域的预测框的置信度
  • 先要进行NMS,后再进行ARS

# prediction是经过NMS处理以后预测框的Tensor
def ras(self, prediction):ars_threshold = 0.5 # ars的阈值imgs = 640 # 输入图像resize大小output = [torch.zeros((0, 6), device=prediction[0].device)] * len(prediction)for xi, x in enumerate(prediction):n = x.shape[0]_, order = torch.sort(x[:, 4])x = x[order]classes = x[:, 5:6].clone()classes[(classes == torch.tensor(self.crack_classes, device=x.device)).any(1)] = self.crack_classes[0]bias = classes * imgs boxes = x[:, :4] + biasioa = box_ioa(boxes, boxes)mask = torch.arange(n).repeat(n, 1) <= torch.arange(n).view(-1, 1)  # mask low conf boxesioa[mask] = 0x = x[ioa.sum(1) < ars_threshold ]output[xi] = xreturn outputdef box_ioa(box1, box2):area = (box1[:, 2] - box1[:, 0]) * (box1[:, 3] - box1[:, 1])return inter(box1, box2) / area.view(-1, 1) 

Postprocessing-MaM

  • 提出了MaM过滤噪声并确定每个网格单元中捕获的裂纹类型
  • 将检测盒外的单元格作为噪声滤除,将检测盒内的单元格分类为相应的类

  • 第一步计算单元格和所有框之间的IoA,如果最大值为零,则该单元格是噪声过滤。否则,为单元格分配与网格最大值对应的box
  • 当网格和多个方框的IoA变量同时达到最大值时,按照AC优先级最高、LC优先级最低的原则确定单元格的类别

# ratio 列表用于存储原始图像与预处理后(调整大小和填充后的)图像之间的宽高比
# class_grid2box 这个就是grid类别要匹配的box类别
class_grid2box = {0: (0,), 1: (1,), 2: (2,), 3: (3,)}
for i, (d, g, r) in enumerate(zip(box_pred, grid_pred, ratio)):d[:, :4:2] *= r[0]d[:, 1:4:2] *= r[1]g[:, :4:2] *= r[0]g[:, 1:4:2] *= r[1]g_class = g[:, 5]# change crack classesnew_g = []for gc, v in class_grid2box.items():for bc in v:g_tmp = g[g_class == gc].clone()g_tmp[:, 5:] = bcnew_g.append(g_tmp)g = torch.cat(new_g)if g.numel() > 0 and self.match:d_class = d[:, 5:]d_boxes = d[:, :4] + d_class * 4096g_boxes = g[:, :4] + g[:, 5:] * 4096iou = box_ioa(g_boxes, d_boxes)index = iou.max(1)[0] > 0 if d.numel() > 0 else torch.zeros(g.shape[0], device=self.device).bool()g = g[index]box_pred[i] = dgrid_pred[i] = g

🥯Results

  • 使用两张内存为80GNVIDIA A100显卡
  • 在测试集上验证了GCBD模型的有效性

mAP_{grid-box}中的mAP是grid分类的指标,mAP_{50}是box检测的指标,考虑到分类和检测任务的学习难度,mAP与mAP50的比例为1:9。这里的\beta取值为0.1。

  • 对于分类来说,最大F1分数的置信度超过0.8,并且相对接近
  • 过拟合阶段的网络主要关注了学习置信度
  • 分类混淆矩阵中分别有28%9%4%的裂纹、修复和标记与背景没有区别

  • 对于检测来说,所有类别的最高F1分数表明置信度较低
  • 从背景中分别错误地检测到0.31LC0.28TC,这表明线性裂纹的特征与背景相似。需要一个强大的特征提取网络来解决这个问题

分析联合损失函数下图像分类和目标检测的分配系数,结果表明多视觉任务学习具有较强的鲁棒性,在保证精度不损失甚至略微增长的前提下有效提高裂缝识别的效率 

改进的NMS能够有效过滤目标检测的冗余预测框,改进模型性能,并且缓解不同非极大值抑制算法之间的差距 

  • 基于网格的分类网络的性能高于基于补丁的分类
  • 基于网格的分类方法具有较大的感受野,可以使用带有注释裂纹的数据集来训练直接识别不同类型裂纹的分类网络
  • 检测网络有效地对裂纹进行分类和定位。在裂缝中,AC最容易识别,而LC最难识别
  • 多任务学习和联合训练提高了路面裂缝识别的准确性
  • NMS-ARS考虑了裂缝拓扑结构,有效地过滤了冗余的预测框

🔦但是对于一个非常细小的裂缝进行检测和分类依旧有些困难,再者就是横向裂缝和纵向裂缝的判断也应该还有另外一个标准!!! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Flask】ORM模型以及数据库迁移的两种方法(flask-migrate、Alembic)

ORM模型 在Flask中&#xff0c;ORM&#xff08;Object-Relational Mapping&#xff0c;对象关系映射&#xff09;模型是指使用面向对象的方式来操作数据库的编程技术。它允许开发者使用Python类和对象来操作数据库&#xff0c;而不需要直接编写SQL语句。 核心概念 1. ORM模型…

C/C++滑动窗口算法深度解析与实战指南

C/C滑动窗口算法深度解析与实战指南 引言 滑动窗口算法是解决数组/字符串连续子序列问题的利器&#xff0c;通过动态调整窗口边界&#xff0c;将暴力解法的O(n)时间复杂度优化至O(n)。本文将系统讲解滑动窗口的核心原理、C/C实现技巧及经典应用场景&#xff0c;助您掌握这一高…

Vuex使用指南:状态管理

一、什么是状态管理&#xff1f;为什么需要 Vuex&#xff1f; 1. 状态管理的基本概念 在 Vue 应用中&#xff0c;状态指的是应用中的数据。例如&#xff1a; 用户登录状态购物车中的商品文章列表的分页信息 状态管理就是对这些数据的创建、读取、更新和删除进行有效管理。 …

【信息系统项目管理师-论文真题】2007下半年论文详解(包括解题思路和写作要点)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题1:大型项目的计划与监控1、写作要点2、解题思路大型信息系统项目的组织制订大型信息系统项目进度计划的方法试题2:组织级项目管理的绩效考核1、写作要点2、解题思路在项目考核过程中会遇到哪些问题项目的…

项目管理学习-CSPM(1)

01引言 最近在学习CSPM的课程&#xff0c;有部分的内容自己还是受益匪浅的&#xff0c;建议有需要提升项目管理能力的同学可以以考促学的方式进行学习&#xff0c;下面整理了一部分内容和大家分享和学习。CSPM全称 China Standards Project Management&#xff0c;中文名项目管…

介绍分治、动态规划、回溯分别是什么?有什么联系和区别?给出对象的场景和java代码?

一、分治算法&#xff08;Divide and Conquer&#xff09; 概念&#xff1a; 分治算法是将一个复杂问题分成若干个子问题&#xff0c;每个子问题结构与原问题类似&#xff0c;然后递归地解决这些子问题&#xff0c;最后将子问题的结果合并得到原问题的解。 特点&#xff1a;…

解锁DeepSeek模型微调:从小白到高手的进阶之路

目录 一、DeepSeek 模型初相识二、探秘微调原理2.1 迁移学习基础2.2 微调的参数更新机制 三、数据准备3.1 数据收集3.2 数据标注3.3 数据预处理 四、模型选择与加载4.1 选择合适的预训练模型4.2 加载模型 五、微调训练实战5.1 确定微调策略5.2 设置训练参数5.3 训练过程 六、模…

端到端观测分析:从前端负载均衡到后端服务

前言 我们在做系统运维保障的时候&#xff0c;关注从前端负载均衡到后端服务的流量情况是很有必要的&#xff0c;可以了解每个后端服务实例接收的流量大小&#xff0c;这有助于确定资源分配是否合理&#xff0c;能够帮助找出后端服务中的性能瓶颈。同时&#xff0c;当系统出现…

Ubuntu下OCC7.9+Qt5 快速搭建3D可视化框架

Ubuntu下OCC7.9+Qt5搭建简易的项目框架 近两年国产CAD替代如日中天,而几何内核作为CAD软件的核心组件之一,当前有且仅有唯一开源的几何内核库即OCCT;这里为各位自立于投入CAD开发或正在学习OCC库的小伙伴们奉献上一个快速搭建QT+OCC的项目框架; 本文介绍了Qt5+Occ 显示几何…

C++类与对象—下:夯实面向对象编程的阶梯

9. 赋值运算符重载 9.1 运算符重载 在 C 里&#xff0c;运算符重载能够让自定义类型的对象像内置类型那样使用运算符&#xff0c;这极大地提升了代码的可读性与可维护性。运算符重载本质上是一种特殊的函数&#xff0c;其函数名是 operator 加上要重载的运算符。 下面是运算…

【深度学习-Day 6】掌握 NumPy:ndarray 创建、索引、运算与性能优化指南

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

工程师 - 汽车分类

欧洲和中国按字母对汽车分类&#xff1a; **轴距**&#xff1a;简单来说&#xff0c;就是前轮中心点到后轮中心点之间的距离&#xff0c;也就是前轮轴和后轮轴之间的长度。根据轴距的大小&#xff0c;国际上通常把轿车分为以下几类&#xff08;德国大众汽车习惯用A\B\C\D分类&a…

[低代码 + AI] 明道云与 Dify 的三种融合实践方式详解

随着低代码平台和大语言模型工具的不断发展,将企业数据与智能交互能力融合,成为提高办公效率与自动化水平的关键一步。明道云作为一款成熟的低代码平台,Dify 则是一个支持自定义工作流的开源 LLM 应用框架。两者结合,可以实现灵活、高效的智能化业务处理。 本文将详解明道…

鼠标悬浮特效:常见6种背景类悬浮特效

鼠标悬浮特效&#xff1a;常见6种背景类悬浮特效 前言背景闪现效果预览代码展示 元素阴影效果预览代码展示 元素悬浮阴影效果预览代码展示 元素上浮阴影效果预览代码展示 元素边框阴影效果预览代码展示 元素卷角效果预览代码展示 结语 前言 在之前的文章中&#xff0c;我们介绍…

[人机交互]理解与概念化交互

零.本章重点&#xff08;理解和分析用户问题&#xff09; – 解释“问题空间”的概念和含义 – 解释如何概念化交互 – 描述什么是概念模型 – 讨论将界面隐喻作为概念模型的利弊 – 讨论界面具体化和抽象化各自的优缺点 – 概述概念设计和实际设计的关系 一.理解问题空间 简单…

9.城市基础设施更新工程

9.1 道路改造施工 9.1.1 道路改造施工内容 沥青、水泥混凝土、砌块路面、人行步道、绿化照明、附属设施、交通标志、沥青路面材料的再生利用 9.1.2 道路改造施工技术 1.沥青路面病害及微表处理 1.病害处理 裂缝处理 10mm以内专业灌缝材料或热沥青灌缝、潮湿时乳化沥青灌封…

Milvus(11):动态字段、可归零和默认值

1 动态字段 Collections 的 Schema 中定义的所有字段都必须包含在要插入的实体中。如果希望某些字段是可选的&#xff0c;可以考虑启用动态字段。 1.1 概述 在 Milvus 中&#xff0c;可以通过设置 Collections 中每个字段的名称和数据类型来创建 Collections Schema。向 Schem…

LeetCode41☞缺失的第一个正数

关联LeetCode题号41 本题特点 数组&#xff0c;哈希表 本题思路 找缺失的最小正数&#xff0c;看举例说明缺失的正数&#xff0c;一种情况是连续的最小的正数&#xff0c;一种是缺失连续但不是最小的正数验证数组内数组是否连续&#xff0c;可以通过 nums[i]1 是否存nums组…

补题( Convolution, 二维卷积求输出矩阵元素和最大值)

来源&#xff1a;https://codeforces.com/gym/105231/problem/H 题目描述&#xff1a; 一、题目分析 本题涉及深度学习中的二维卷积操作。给定一个nm的二维输入矩阵I和一个kl的核矩阵K &#xff0c;通过特定公式计算得到(n - k 1)(m - l 1)的输出矩阵O &#xff0c;要求在…

【Java ee初阶】多线程(7)

一、线程池 线程池的一些参数&#xff1a; corePoolSize&#xff1a;核心线程数量 maximumPoolSize:核心线程数量临时线程数量 上述是“java 的线程池策略”&#xff08;其他语言&#xff0c;其他库的线程池可能不同&#xff09; keepAliveTime :临时线程的存活时间.临时线程…