HrSegNet 23年裂缝检测新文章基于PaddelPaddle和Paddleseg的复现

news2025/3/10 18:36:11

本文章是对2023年发表在Automation in Construction上论文

Real-time High-Resolution Neural Network with Semantic Guidance for Crack Segmentation

的复现。

我参考了作者上传至github的代码,并得到了作者的帮助。
https://github.com/CHDyshli/HrSegNet4CrackSegmentation

环境安装

安装Paddle

首先我在Linux服务器上安装了Paddle,可以参考Paddle官方的安装文档,非常的详细。
开始使用_飞桨-源于产业实践的开源深度学习平台
通过参考官方文档中的描述可以确认目前的python版本,pip版本,选择适合自己的Paddle版本即可,因为使用的3090显卡,CUDA版本是12.0,我安装的Paddle版本是2.5.0。具体安装过程参考官网,更加详细。

安装Paddleseg

Paddleseg应该是可以通过pip直接安装,不过我选择了使用原代码编译的方式,安装过程也很简单,通过git clone将github上的Paddleseg库下载到服务器上,然后按照步骤一步一步来就可以了。测试的方法官方给的也很清楚。我安装的Paddleseg版本是2.9.0。测试通过后就可以使用了。
https://github.com/PaddlePaddle/PaddleSeg

使用Paddleseg训练模型

使用Paddleseg训练模型比我想想的简单得多,我先按照官方的教程 “20分钟快速上手PaddleSeg”进行操作,发现非常的顺利,成功的实现了示例,大家可以参照官方的指引。
https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.9/docs/whole_process_cn.md

复现HrSegNet

配置文件和模型文件

我首先将HrSegNet Github上公开的代码clone了下来
GitHub - CHDyshli/HrSegNet4CrackSegmentation: Real-time High-Resolution Neural Network with Semantic Guidance for Crack Segmentation

之后将相应的文件放入相应的目录,主要是将configs文件夹中的文件copy到了./PaddleSeg/configs,将要models里面的模型文件copy到./PaddleSeg/paddleseg/models,并在./PaddleSeg/paddleseg/models/__init__.py中添加了所需模型的引用。如下示例,需要哪些就引入哪些。

from .hrsegnet_b16 import HrSegNetB16
from .hrsegnet_b48 import HrSegNetB48

准备数据集

文中用到了

  •  CrackSeg9k
  •  Asphalt3k
  •  Concrete3k

CrackSeg9k大家可以去官网下载。但我从官网先下载了CrackSeg9k version3.0 和 CrackSeg9K version 2.0数据集,发现本文是在2.0的基础上进行了一些删减,于是在Github上发起了提问,结果当天就得到了作者的解答,作者提供了本文使用的数据文件,这省去了我很多时间(本来准备自己准备这些数据)。

https://github.com/CHDyshli/HrSegNet4CrackSegmentation/issues/7

Asphalt3k 和 Concrete3k作者也将其划分出了Train Val Test,并上传到了OneDrive,我么可以直接下载。

进行训练

参考Paddleseg上的训练方法来训练HrSegNet即可,我在Paddleseg下运行了下面的代码,训练hrsegnetb48网络。

export CUDA_VISIBLE_DEVICES=0 # 设置1张可用的卡
python tools/train.py \
       --config configs/hrsegnetb48.yml \
       --save_interval 500 \
       --do_eval \
       --use_vdl \
       --save_dir output_hrsegnetb48_c9

我们也可以使用多卡训练,我进行了测试,发现多卡和单卡一个iter用的时间是一样的,因此该程序使用一张卡训练即可。

export CUDA_VISIBLE_DEVICES=0,1,2,3 # 设置4张可用的卡
python -m paddle.distributed.launch tools/train.py \
       --config configs/hrsegnetb48.yml \
       --do_eval \
       --use_vdl \
       --save_interval 500 \
       --save_dir output_hrsegnetb48_c9

进行验证

在训练过程中,我们设置了验证,因此没500个iter会进行验证,并记录最优结果。若想单独验证模型,使用以下代码即可(使用的是验证集 val set)

python tools/val.py \
       --config configs/hrsegnetb48.yml \
       --model_path output_hrsegnetb48_c9/best_model/model.pdparams

进行测试

测试和验证使用的代码是相同的,我们只需将yml配置文件中的验证集路径换为测试集路径。即将val_dataset中,val_path 从data/crackseg9k/val.txt 换为 data/crackseg9k/test.txt即可,然后重复执行上面验证的指令即可看到模型在测试集上的表现。

val_dataset:
  type: Dataset
  dataset_root: data/crackseg9k
  val_path: data/crackseg9k/val.txt

可视化

我发现paddleseg自带了可视化预测的指令,我进行了尝试,附上分割出来裂缝的效果(随便找了一张图,没有使用最优模型),官方的代码会在路径下生成两个文件夹,分别存放加在原图上的效果和只有颜色的效果。后续需要遍历测试集进行可视化的话可能还需要稍微修改下代码或者写一个批处理,如果后续我写了的话会将其放出。

python tools/predict.py \
       --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
       --model_path output/best_model/model.pdparams \
       --image_path data/optic_disc_seg/JPEGImages/H0002.jpg \
       --save_dir output/result

 

总结

这是我第一次使用PaddlePaddle和Paddleseg,比我预想到的要顺利很多,我依照官方提供的文档进行安装和使用,没有遇到什么问题,在复现HrSegNet的过程中也很顺利,在处理数据集时提了issue得到了论文作者的回复,整体使用下来很顺利。 

接下来我将对论文中的结果进行复现,并考虑在其基础上进行下一步的研究。

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

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

相关文章

4G微型RTU如何实现冬季工业管网远程监测

随着我国北方全面进入到冬季,多日以来严寒、降雪天气频发,工业基础设施也迎来冬季考验。对于一些输送化工原料、油气和给排水等用途的工业管网设施,在面临极端冰雪天气时易产生各种风险,诸如管道水/气泄漏损耗、低温冻裂、积雪压塌…

DBdoctor,MySQL 性能问题终结者

本文 5542 字,读完大约需要 8 分钟(文末有惊喜 License!) 17(一起),这是我的幸运数字,恰巧今年 8 月 17 日在 DTCC 大会上我们全网首次发布 DBdoctor 数据库性能诊断软件(简称 DBdoctor&#x…

pake协议传输文件magic-wormhole

pake协议传输文件magic-wormhole 1 magic-wormhole简介其他介绍 2 安装magic-wormhole3 使用示范发送文件指定虫洞码长度 接收文件 1 magic-wormhole简介 16.7k star 强推,丝滑、简洁、安全的开源工具——magic-wormhole 项目地址:https://github.com/…

Debug

0、Debug的步骤 Debug(调试)程序步骤如下: 1、添加断点 2、启动调试 3、单步执行 4、观察变量和执行流程,找到并解决问题 1、添加断点 在源代码文件中,在想要设置断点的代码行的前面的标记行处,单击鼠标左键就可以设置断点&…

Java文件流大家族(通俗易懂,学习推荐版,很详细)——操作文件本身和文件中的数据

1.File(操作文件本身) 1.定义 目录 2.常用方法 3.路径引用符 可以用/或者\\分隔路径 还可以用File.separator分隔路径,会根据不同系统使用啥分隔符。 4.绝对路径、相对路径及桌面路径表示 桌面路径为: 我电脑的用户名为X 5.示例…

RobotMaster学习——工序导入,参数设置,轨迹生成

目录 引出1.导入工序2.修改刀具其他刀具参数 3.进行工序分配4.设置TCP5.设置工作站6.工序整体导入配置7.进行计算 总结 引出 RobotMaster的操作流程,从导入工序到生产轨迹。 1.导入工序 2.修改刀具 要选择第七把刀具 其他刀具参数 第一把刀具 第二把刀具 第三把刀…

Certum属于企业的泛域名ssl证书

泛域名SSL证书可以保护主域名以及其下所有二级域名,所以也可以叫它通配符SSL证书。Certum旗下有两种泛域名SSL证书,一种是入门级的泛域名SSL证书,支持个人或者企事业单位申请,一种是企业泛域名SSL证书,只能企事业单位申…

Sublime Text 3配置 C# 开发环境

Sublime Text 3配置 C# 开发环境 一、引言二、主要内容1. 初识 Sublime Text 32. 初识 C#3. 接入 .NET Framework3.1 下载 .NET Framework3.2 环境变量配置 4. 配置 C# 开发环境5. 编写 C# 代码6. 运行 C# 代码 三、总结 一、引言 C# 是一种面向对象的编程语言,由微…

STL中优先队列(堆)的详解

文章目录 priority_queue的基本介绍堆(heap)堆的概念与结构 priority_queue 的介绍与使用 priority_queue的基本介绍 这个priority_queue翻译成中文就是优先级队列,但其实我们很难去一眼看出他的意思到底是什么,他的逻辑结构实际上类似于数据结构中的堆…

深度剖析:Golang中结构体方法的高级应用

深度剖析:Golang中结构体方法的高级应用 引言结构体方法的基础回顾结构体的定义和用法方法的定义和绑定基本语法和用法 高级特性与应用封装、继承和多态方法集与接口的关系结构体方法的匿名字段和嵌入结构体 性能优化与最佳实践接收器类型的选择:指针还是…

SpringIOC之LocaleContext

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

听GPT 讲Rust源代码--src/tools(23)

File: rust/src/tools/clippy/rustc_tools_util/src/lib.rs 在Rust源代码中,rust/src/tools/clippy/rustc_tools_util/src/lib.rs文件的作用是为Clippy提供了一些实用工具和辅助函数。 该文件中定义了VersionInfo结构体,它有三个字段,分别为m…

【toolschain algorithm cpp ros】cpp工厂模式实现--后续填充具体规划算法,控制器版的已填充了算法接入了仿真器

写在前面 现在局势危机,于是想复习一下之前写的设计模式,之前提到,做过一个闭环仿真器(借用ros),见https://blog.csdn.net/weixin_46479223/article/details/134864123我的控制器的建立遵循了工厂模式&…

AI绘画中VAE压缩图像

介绍 在Stable Diffusion中,所有的去噪和加噪过程并非在图像空间直接进行,而是通过VAE模块将图像编码到一个低维空间。 这个低维空间的“分辨率”低于原始图像空间,有利于快速地完成加噪和去噪过程。 最后再将编码空间中的噪声表示解码恢复为图像空间,完成去噪或加噪操作。 …

只知道短视频和直播带货?抖店好像更适合我们普通人哦!项目介绍

我是王路飞。 说道带货,大多数人还是只知道抖音短视频和抖音直播带货。 毕竟,现在众多平台都在往电商方向发展,做电商的方式就是通过短视频和直播的形式带货。 但是,很明显不是所有人都能去做的,尤其是对我们这些普…

操作系统期末知识点总结

第一章 1、操作系统:OS是一个大型的系统软件、它负责计算机的全部软件和硬件资源的管理,并为用户提供良好的应用界面,使整个计算机系统实现高效率和高度自动化 2、操作系统的形成 1)手工操作阶段 2)批处理系统&…

houdini 常用节点

雾化 撒点 减面 点连线 trace 节点 labs skelete 图片转模型 齿轮制作 polyextrude point to point connect primuv

【前缀和】【单调栈】LeetCode2281:巫师的总力量和

作者推荐 map|动态规划|单调栈|LeetCode975:奇偶跳 涉及知识点 单调栈 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 作为国王的统治者,你有一支巫师军队听你指挥。 给你一个下标从 0 开始的整数数组 strength &…

Sui 生态排名第一的头部流动性协议 NAVI Protocol 活动进行中

作为在熊市中启动的新生公链,Sui 正在稳步崛起。公链的 TVL 持续攀升,目前已经达到了 1.76亿美元,闯入了公链排名前20榜单。仅过去四个月内,TVL 增加了10倍,并且增长仍在继续,SUI 的价格在近期也有了很亮眼…

Android Studio 安装和使用

前些天,打开了几年前的一个Android Studio app项目,使用安卓虚拟机仿真app崩溃,怀疑是不是中间升级过Android Studio导致异常的,马上脑子一热卸载了,结果上次踩过的坑,一个没少又踩一次,谨以此文…