焊缝跟裂缝有着相似的形式,在我之前的文章中已经做过不少关于裂缝检测、分割识别相关的工作,这里主要就是基于DeepLabV3Plus实现焊缝的分割识别,首先看下效果:
![](https://img-blog.csdnimg.cn/img_convert/4454a2aac4b3f6d68407d96af2399167.gif)
接下来看下数据集:
![](https://img-blog.csdnimg.cn/img_convert/b900fb6bfeff6ad45ff8b050749e5058.png)
标注可视化如下所示:
![](https://img-blog.csdnimg.cn/img_convert/25ef0b118c6fe4c3eca256fb14ae7616.png)
随机划分总体数据集创建训练集-测试集,如下:
txtDir = "datasets/ImageSets/Segmentation/"
if not os.path.exists(txtDir):
os.makedirs(txtDir)
train_txt = "datasets/ImageSets/Segmentation/train.txt"
test_txt = "datasets/ImageSets/Segmentation/test.txt"
train_ratio = 0.85
ids_list = [
one.split(".")[0].strip() for one in os.listdir("datasets/SegmentationClass/")
]
print("ids_list_length: ", len(ids_list))
train_num = int(len(ids_list) * train_ratio)
print("train_num: ", train_num)
train_ids_list = random.sample(ids_list, train_num)
test_ids_list = list(set(ids_list) - set(train_ids_list))
print("test_num: ", len(test_ids_list))
with open(train_txt, "w") as f:
for one_id in train_ids_list:
f.write(one_id.strip() + "\n")
with open(test_txt, "w") as f:
for one_id in test_ids_list:
f.write(one_id.strip() + "\n")
自动创建train.txt和test.txt,如下:
![](https://img-blog.csdnimg.cn/img_convert/73539130b8b177eb1a05fc43cb0a93dd.png)
对DeepLabV3Plus进行结构可视化如下所示:
![](https://img-blog.csdnimg.cn/img_convert/ee93d49a6aedbe7a5449c2c95ec093d7.png)
我这里直接使用的就是开源的项目,可以根据自己实际需要选择即可。
默认迭代计算100个epoch,对其进行可视化如下:
![](https://img-blog.csdnimg.cn/img_convert/e539d775a07b3d84cbdd83dee232bdba.png)
实际测试计算
原图:
![](https://img-blog.csdnimg.cn/img_convert/3ffa4a285117084fde964ffdf935369a.jpeg)
结果图:
![](https://img-blog.csdnimg.cn/img_convert/6b5f71f1bcac24103faa196650534229.jpeg)