基于ASF-YOLO融合空间特征和尺度特征的新型注意力尺度序列融合模型开发构建涵洞隧道场景下墙壁建筑缺陷分割检测系统

本文主要是介绍基于ASF-YOLO融合空间特征和尺度特征的新型注意力尺度序列融合模型开发构建涵洞隧道场景下墙壁建筑缺陷分割检测系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在ASF-YOLO提出之初,我们就进行了相应的实践开发,感兴趣的话可以自行移步阅读:

《基于ASF-YOLO融合空间特征和尺度特征的新型注意力尺度序列融合模型开发构建医学场景下细胞分割检测识别系统,以【BCC、DSB2018数据集为基准】》

本文的主要目的是想要基于ASF-YOLO开发构建在涵洞隧道场景下壁体类建筑的缺陷分割识别系统,首先看下实例效果:

相关涵洞隧道场景下的墙体缺陷分割实践感兴趣的话可以自行移步阅读:

《AI助力隧道等洞体类场景下水泥基建缺陷检测,基于DeeplabV3Plus开发构建洞体场景下壁体建筑缺陷分割系统》

《基于轻量级yolov5n开发构建涵洞场景下洞体墙体缺陷病害检测分割系统》

《基于轻量级YOLOv5s开发构建隧道基建裂痕、脱落等缺陷问题检测系统》

《基于yolov5全系列[n/s/m/l/x]不同参数量级模型开发构建隧道巡检场景下水泥建筑墙体缺陷病害检测分割系统》

《探索图像分辨率对于模型的影响,基于yolov5x开发构建桥洞、隧道、涵洞等水泥洞体建筑裂缝缺陷等检测识别系统》

《助力涵洞场景安全智能巡检,基于yolov7/yolov7x/yolov7e6e开发构建基体建筑缺陷问题检测识别系统》

ASF-YOLO框架结合了空间和尺度特征,实现了准确快速的细胞实例分割。基于YOLO分割框架,我们使用尺度序列特征融合(SSFF)模块来增强网络的多尺度信息提取能力,并使用三重特征编码器(TPE)模块来融合不同尺度的特征图以增加详细信息。我们进一步引入了一种通道和位置注意机制(CPAM)来集成SSFF和TPE模块,该模块专注于信息通道和空间位置相关的小对象,以提高检测和分割性能。在两个细胞数据集上的实验验证表明,所提出的ASFYOLO模型具有显著的分割精度和速度。在2018年数据科学碗数据集上,它实现了0.91的boxmAP、0.887的maskmAP和47.3 FPS的推理速度,优于最先进的方法。
官方论文在这里,如下所示:

YOLO框架一般由backbone、neck和head三个主要组件构成。backbone网络是卷积神经网络,用于从不同的粒度下提取图像特征。CSPDarknet53是基于YOLOv4进行改进的backbone网络,被用作YOLOv5的主干网络。它包含了C3模块(包括3个卷积层)和ConvBNSiLU模块。在YOLOv5和YOLOv8的backbone中,有5个级别的特征提取分支:P1、P2、P3、P4和P5,与YOLO网络的输出相关联。YOLOv5 v7和YOLOv8是基于YOLO的主流架构之一,不仅可以用于检测和分类任务,还可以处理分割任务。 

作者开发了一种新颖的特征融合网络架构,由两个主要组件网络组成,可以提供小目标分割的互补信息:
SSSF模块,它将来自多个尺度图像的全局或高级语义信息组合在一起;
TFE模块,它可以捕捉小目标目标的局部精细细节。将局部和全局特征信息相结合可以产生更准确的分割图。

为了识别密集重叠的小目标,一种方法是通过放大图像以参考和比较不同尺度下的形状或外观变化。然而,由于YOLO的backbone网络中的不同特征层具有不同的尺寸,传统的FPN融合机制只对小尺寸特征图进行上采样,并将其添加到前一层特征中,从而忽略了较大尺寸特征层中丰富的详细信息。为此,研究人员提出了TFE(Texture Feature Enhancement)模块,它将大、中、小尺寸的特征进行分离,并添加了较大尺寸的特征图,然后进行特征放大以增强详细特征信息。 

为了整合详细特征信息和多尺度特征信息,研究人员提出了CPAM(Channel and Position Attention Module)。CPAM的结构如图5所示,它由两个部分组成。第一个部分是通道注意网络,它从TFE(输入1)接收输入,用于提取不同通道中包含的代表性特征信息。第二个部分是位置注意网络,它接收来自通道注意网络和SSFF(输入2)的输出,并进行叠加,用于引入位置信息。通过这种方式,CPAM能够融合不同注意力机制,综合利用通道和位置信息,以提高目标识别的性能。

想要进一步了解论文详情,建议还是自行移步阅读原论文,这里就不再赘述了。

作者同时开源了项目,地址在这里,如下所示:

简单看下本文构筑的数据集:

实例标注内容如下所示:

2 0.6818181818181818 0.5457142857142857 0.6829545454545455 0.63 0.7 0.6328571428571429 0.9488636363636364 0.6328571428571429 0.9988636363636364 0.6342857142857142 0.9988636363636364 0.5485714285714286 0.9806818181818182 0.5471428571428572 0.9681818181818181 0.5371428571428571 0.95 0.55 0.9204545454545454 0.54 0.9011363636363636 0.5528571428571428 0.8715909090909091 0.5642857142857143 0.8443181818181819 0.56 0.8159090909090909 0.5528571428571428 0.7636363636363637 0.5371428571428571 0.7181818181818181 0.5485714285714286
0 0.10227272727272728 0.47285714285714286 0.11818181818181818 0.4785714285714286 0.13977272727272727 0.4785714285714286 0.1534090909090909 0.4785714285714286 0.17045454545454544 0.4828571428571429 0.18636363636363637 0.48142857142857143 0.20909090909090908 0.48142857142857143 0.24886363636363637 0.48142857142857143 0.2715909090909091 0.48714285714285716 0.2818181818181818 0.49142857142857144 0.31136363636363634 0.48857142857142855 0.3409090909090909 0.49 0.3704545454545455 0.49142857142857144 0.3886363636363636 0.49857142857142855 0.4193181818181818 0.5 0.43636363636363634 0.5071428571428571 0.46136363636363636 0.5085714285714286 0.49204545454545456 0.5071428571428571 0.5113636363636364 0.5128571428571429 0.5363636363636364 0.5157142857142857 0.5761363636363637 0.5128571428571429 0.6022727272727273 0.5142857142857142 0.6238636363636364 0.5171428571428571 0.634090909090909 0.5285714285714286 0.6534090909090909 0.5285714285714286 0.6806818181818182 0.5328571428571428 0.6863636363636364 0.5342857142857143 0.678409090909091 0.5371428571428571 0.6602272727272728 0.5342857142857143 0.6454545454545455 0.5342857142857143 0.634090909090909 0.5314285714285715 0.6181818181818182 0.5214285714285715 0.6056818181818182 0.5214285714285715 0.5795454545454546 0.5157142857142857 0.5659090909090909 0.5185714285714286 0.5238636363636363 0.5214285714285715 0.5136363636363637 0.5185714285714286 0.49204545454545456 0.5171428571428571 0.47045454545454546 0.5128571428571429 0.44545454545454544 0.5171428571428571 0.4238636363636364 0.5057142857142857 0.4102272727272727 0.5057142857142857 0.3886363636363636 0.5057142857142857 0.3659090909090909 0.4957142857142857 0.35 0.49714285714285716 0.31022727272727274 0.4928571428571429 0.2806818181818182 0.5 0.2556818181818182 0.48857142857142855 0.23295454545454544 0.49142857142857144 0.2 0.49 0.17386363636363636 0.48857142857142855 0.14545454545454545 0.48714285714285716 0.1215909090909091 0.48714285714285716

使用如下训练参数设置进行训练:

parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str, default='weights/yolov5l-seg.pt', help='initial weights path')
parser.add_argument('--cfg', type=str, default='models/segment/asf-yolo.yaml', help='model.yaml path')
parser.add_argument('--data', type=str, default='data/bcc.yaml', help='dataset.yaml path')
parser.add_argument('--hyp', type=str, default='data/hyps/hyp.scratch-low.yaml', help='hyperparameters path')
parser.add_argument('--epochs', type=int, default=100, help='total training epochs')
parser.add_argument('--batch-size', type=int, default=8, help='total batch size for all GPUs, -1 for autobatch')
parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')
parser.add_argument('--rect', action='store_true', help='rectangular training')
parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
parser.add_argument('--noval', action='store_true', help='only validate final epoch')
parser.add_argument('--noautoanchor', action='store_true', help='disable AutoAnchor')
parser.add_argument('--noplots', action='store_true', help='save no plot files')
parser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations')
parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
parser.add_argument('--cache', type=str, nargs='?', const='ram', help='image --cache ram/disk')
parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
parser.add_argument('--device', default='0', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
parser.add_argument('--optimizer', type=str, choices=['SGD', 'Adam', 'AdamW'], default='SGD', help='optimizer')
parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
parser.add_argument('--workers', type=int, default=8, help='max dataloader workers (per RANK in DDP mode)')
parser.add_argument('--project', default='runs/train-seg', help='save to project/name')
parser.add_argument('--name', default='improve', help='save to project/name')
parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
parser.add_argument('--quad', action='store_true', help='quad dataloader')
parser.add_argument('--cos-lr', action='store_true', help='cosine LR scheduler')
parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
parser.add_argument('--patience', type=int, default=100, help='EarlyStopping patience (epochs without improvement)')
parser.add_argument('--freeze', nargs='+', type=int, default=[0], help='Freeze layers: backbone=10, first3=0 1 2')
parser.add_argument('--save-period', type=int, default=-1, help='Save checkpoint every x epochs (disabled if < 1)')
parser.add_argument('--seed', type=int, default=0, help='Global training seed')
parser.add_argument('--local_rank', type=int, default=-1, help='Automatic DDP Multi-GPU argument, do not modify')# Instance Segmentation Args
parser.add_argument('--mask-ratio', type=int, default=4, help='Downsample the truth masks to saving memory')
parser.add_argument('--no-overlap', action='store_true', help='Overlap masks train faster at slightly less mAP')return parser.parse_known_args()[0] if known else parser.parse_args()

训练启动,日志输出如下:

训练完成如下:

等待训练完成后我们来看下具体的结果内容。

【F1】

【precision】

【recall】

【PR】

【混淆矩阵】

【Batch实例】

感兴趣的话也都可以自己动手实践一下!

这篇关于基于ASF-YOLO融合空间特征和尺度特征的新型注意力尺度序列融合模型开发构建涵洞隧道场景下墙壁建筑缺陷分割检测系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/519555

相关文章

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

Python如何将大TXT文件分割成4KB小文件

《Python如何将大TXT文件分割成4KB小文件》处理大文本文件是程序员经常遇到的挑战,特别是当我们需要把一个几百MB甚至几个GB的TXT文件分割成小块时,下面我们来聊聊如何用Python自动完成这... 目录为什么需要分割TXT文件基础版:按行分割进阶版:精确控制文件大小完美解决方案:支持UTF-8编码

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle