本文主要是介绍基于DeepLabV3实践路面、桥梁、基建裂缝裂痕分割,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在我前面的文章中有基于改进的模型开发的裂缝裂痕检测模型,感兴趣的话可以看下:
《基于yolov5s+bifpn实践隧道裂缝裂痕检测》
今天主要是趁着有时间基于deeplabv3来实践裂缝裂痕分割。首先来看效果图:
为了整体直观,这里专门是开发了对应的界面,方便使用的。
完整项目截图如下所示:
下表是对整个项目中各个文件的介绍说明:
文件名称 | 文件说明 |
datasets/ | 数据集目录 |
modules/ | 模块模块 |
results/ | 结果目录 |
utils/ | 组件目录 |
weights/ | 权重目录 |
guiAPP.py | 系统模块 |
inference.py | 推理模块 |
model_structure.png | 模型结构图 |
models.py | 模型实例化模块 |
splitDataset.py | 数据集构建模块 |
train.py | 模型训练模块 |
启动系统.bat | 双击启动系统bat脚本 |
执行.bat | 双击启动训练bat脚本 |
datasets目录如下所示:
JPEGImages为原始图像数据目录。
SegmentationClass为mask图像目录。
modules为网络定义模块目录,如下所示:
results为结果目录,如下所示:
设置每个epoch都会存储一次最新的权重文件,方便自己随时使用。
utils目录主要是存储公共组件模块,如下所示:
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_picprint("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模块时开发的界面模块,能够将离线推理过程以可视化的形式展示出来,实例如下:
启动界面:
上传图像:
分割推理:
因为数据集没有很多,训练的epoch次数也只有100左右,所有有些效果就不是很好,如下所示:
后期自建数据集获取到更大数据量后可以重新迭代训练,效果也会有所提升。
这篇关于基于DeepLabV3实践路面、桥梁、基建裂缝裂痕分割的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!