基于DeepLabV3实践路面、桥梁、基建裂缝裂痕分割

在我前面的文章中有基于改进的模型开发的裂缝裂痕检测模型,感兴趣的话可以看下:

《基于yolov5s+bifpn实践隧道裂缝裂痕检测》

今天主要是趁着有时间基于deeplabv3来实践裂缝裂痕分割。首先来看效果图:

 为了整体直观,这里专门是开发了对应的界面,方便使用的。

完整项目截图如下所示:

基于DeepLabV3实践路面、桥梁、基建裂缝裂痕分割_第1张图片

 下表是对整个项目中各个文件的介绍说明:

文件名称 文件说明
datasets/ 数据集目录
modules/ 模块模块
results/ 结果目录
utils/ 组件目录
weights/ 权重目录
guiAPP.py 系统模块
inference.py 推理模块
model_structure.png 模型结构图
models.py 模型实例化模块
splitDataset.py 数据集构建模块
train.py 模型训练模块
启动系统.bat 双击启动系统bat脚本
执行.bat 双击启动训练bat脚本

datasets目录如下所示:

基于DeepLabV3实践路面、桥梁、基建裂缝裂痕分割_第2张图片

 JPEGImages为原始图像数据目录。

SegmentationClass为mask图像目录。

modules为网络定义模块目录,如下所示:

基于DeepLabV3实践路面、桥梁、基建裂缝裂痕分割_第3张图片

 results为结果目录,如下所示:

基于DeepLabV3实践路面、桥梁、基建裂缝裂痕分割_第4张图片

 设置每个epoch都会存储一次最新的权重文件,方便自己随时使用。

utils目录主要是存储公共组件模块,如下所示:

基于DeepLabV3实践路面、桥梁、基建裂缝裂痕分割_第5张图片

 weights用于存储预训练的权重文件,这里的预训练模型来资源公开数据集训练得到。

model_structure.png是绘制出来的deeplabv3的网络结构图,如下所示:

inference.py是离线推理模块,核心实现如下所示

def singImgInfer(pic_path="test.jpg", save_path="result.jpg"):
    """
    单张图像推理
    """
    try:
        print("Loading Image From: ", pic_path)
        image = Image.open(img)
        resImg = deeplabv3.detect_image(image)
        resImg.save(save_path)
        print("Saving Image To: ", save_path)
    except Exception as e:
        print("Exception: ", e)

如果想要批处理也可以用下面的:

def batchImgsInfer(picDir="test/", saveDir="result/"):
    """
    批量图像推理
    """
    if not os.path.exists(saveDir):
        os.makedirs(saveDir)
    pic_list = os.listdir(picDir)
    print("pic_list_length: ", len(pic_list))
    for one_pic in tqdm(pic_list):
        one_path = picDir + one_pic
        print("Loading Image From: ", one_path)
        one_img = Image.open(one_path)
        one_resImg = deeplabv3.detect_image(one_img)
        one_resImg.save(saveDir + one_pic)
        print("Saving Image To: ", saveDir + one_pic)

我是在本地cpu模式下运行的推理计算,整体来看速度并不是很快大概在1s左右。

guiAPP.py模块时开发的界面模块,能够将离线推理过程以可视化的形式展示出来,实例如下:

启动界面:

基于DeepLabV3实践路面、桥梁、基建裂缝裂痕分割_第6张图片

 上传图像:

基于DeepLabV3实践路面、桥梁、基建裂缝裂痕分割_第7张图片

 分割推理:

基于DeepLabV3实践路面、桥梁、基建裂缝裂痕分割_第8张图片

 因为数据集没有很多,训练的epoch次数也只有100左右,所有有些效果就不是很好,如下所示:

基于DeepLabV3实践路面、桥梁、基建裂缝裂痕分割_第9张图片

 后期自建数据集获取到更大数据量后可以重新迭代训练,效果也会有所提升。

你可能感兴趣的:(python,开发语言)