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

本文章是对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中添加了所需模型的引用。如下示例,需要哪些就引入哪些。

python 复制代码
from .hrsegnet_b16 import HrSegNetB16
from .hrsegnet_b48 import HrSegNetB48

准备数据集

文中用到了

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网络。

bash 复制代码
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用的时间是一样的,因此该程序使用一张卡训练即可。

bash 复制代码
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)

bash 复制代码
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即可,然后重复执行上面验证的指令即可看到模型在测试集上的表现。

bash 复制代码
val_dataset:
  type: Dataset
  dataset_root: data/crackseg9k
  val_path: data/crackseg9k/val.txt

可视化

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

bash 复制代码
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得到了论文作者的回复,整体使用下来很顺利。

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

相关推荐
线上放牧人14 分钟前
Windows删除图标缓存
windows·python·pyqt
qq_54702617941 分钟前
Python 变量和简单数据类型
python
智搜广告2 小时前
智搜广告:科技行业AI回答优化公司如何破局
大数据·python·elasticsearch·geo
EasyGBS2 小时前
终结训推割裂!EasyGBS×EasyAIS×DLTM,实现AI算法训推一体闭环落地!
服务器·深度学习·安全
湘美书院--湘美谈教育2 小时前
湘美书院AI时代的禅悟集:人机智能,反照诸我
大数据·人工智能·深度学习·机器学习·生活
IpdataCloud2 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
2601_966949653 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
蒸鱼Yuzheng3 小时前
Python 游戏测试开发怎么准备:日志解析、接口校验、并发与可维护性
自动化测试·python·测试开发·面试题·游戏测试
Ivanqhz3 小时前
BM1688 双核架构
python·深度学习·神经网络·cnn·mlir
Java后端的Ai之路3 小时前
Python进阶探索17 - Python中的深拷贝与浅拷贝
人工智能·python·ai·浅拷贝·深拷贝