表面瑕疵检测——分割模型和分类模型融合模型决策实现少样本高精度(Segmentation-based deep-learning)

这是一篇根据自己的理解,复写论文《Segmentation-Based Deep-Learning Approach for Surface-Defect Detection》代码,也不知道写的对不对,但至少运行结果是自己满意的,达到了较高的准确率。

首先,《基于分割的表面缺陷检测深度学习方法》这篇论文主要是利用分割模型和分类模型进行表面瑕疵的检测,主要优势为:只需要25-30个有缺陷的样本就可完成分类,所用样本极少,具体的论文翻译,直接用google翻译,不太精准但也大致意思了解过,如果需要可留言,这篇博文主要介绍搭建网络的思路。

论文的网络模型:

表面瑕疵检测——分割模型和分类模型融合模型决策实现少样本高精度(Segmentation-based deep-learning)_第1张图片

可以明显得看到主要分为两个网络,Segmentation(分割网络)和Decision(决策网络),这两个网络相互融合。而且论文中也写到了训练的时候先是训练分割网络,而后将其参数freeze(冻结),训练决策网络,完成最终的瑕疵检测。

来看看我的网络思路,用的是keras。

首先是分割网络:

 

表面瑕疵检测——分割模型和分类模型融合模型决策实现少样本高精度(Segmentation-based deep-learning)_第2张图片

搭建就是这样子啦~~

然后是决策网络,最主要的是两者的融合,我首先将分割网络单独训练,保存了模型参数,在融合时进行调用。

先看看决策网络是如何搭建的吧!

表面瑕疵检测——分割模型和分类模型融合模型决策实现少样本高精度(Segmentation-based deep-learning)_第3张图片

这里面最难的是将几个层融合为一个层,用的是concatenate()函数,keras下搭建层还是很简单的。注意后面的axis要设置。

好了,重点来了。如何将两个模型进行融合到一起,作为初学者的我,提供的方法仅供参考,如果有大佬觉有有问题,欢迎指教。 

表面瑕疵检测——分割模型和分类模型融合模型决策实现少样本高精度(Segmentation-based deep-learning)_第4张图片

这就是我的方法了。

不管怎么样,真的一共用了70个数据,其中包括35个有缺陷(瑕疵)的样本,另外35个无瑕疵的样本,完全达到检测效果。

当然,数据采用的就是论文中所提到的KolektorSDD数据库,处理数据也有用腐蚀操作。

一切要以效果见证。

附上效果图:

表面瑕疵检测——分割模型和分类模型融合模型决策实现少样本高精度(Segmentation-based deep-learning)_第5张图片

也用了其他的数据集训练,效果也还不错

 表面瑕疵检测——分割模型和分类模型融合模型决策实现少样本高精度(Segmentation-based deep-learning)_第6张图片

这也算是第一篇自己一点点敲出来代码进行论文的复写,很开心啦~~ 喵!

 

你可能感兴趣的:(计算机视觉与深度学习)