“Deep Multi-task Learning for Railway Track Inspection” 论文笔记

这篇博客将分享一篇论文《Deep Multi-task Learning for Railway Track Inspection》。论文提出了一种将浅层学习与深度学习相结合的方法,超过了单纯采用深度学习的效果。浅层学习与深度学习结合也是一个很多人都在谈论的事情。我曾一直觉得这种想法完全是一种想当然的没有任何依据的想法。因为深度学习追求的是一种端到端的训练方式,而不会想着将训练隔离成两个部分。在一些级别不高的期刊里面经常能看到这样一些文章,首先用深度神经网络做一些训练,再简单地利用SVM或其它模型将后面的全连接层换掉。我认为这种做法意义不大。之所以详读这篇文章,是因为它将浅层学习模型“嵌入”神经网络中,尝试着进行端到端的学习。我认为相较于那些隔离的训练方式,这种放式是一种更有希望的方法。

这篇文章的目标是对铁轨进行缺陷检测。具体来讲,有两个任务。第一,对材料(material)进行分类,并根据材料的种类判断铁轨枕木(crosstie)是否为缺陷枕木;第二,对紧固件(fasteners)进行缺陷检测,并对缺陷种类进行分类。

整个网络的结构如上图所示。“Shared network"部分是常规的卷积神经网络,是共享的。在这之后,网络出现的分支,也就是文中所说的多任务(Multi-task)。Material net采用全卷积神经网络,对材料进行语义分割。至于如何判断枕木是否是缺陷枕木,文中定义了两个式子。

\(S_b(x,y)\)是某一像素点属于缺陷像素点的分数。其中\(x\)\(y\)为像素点的坐标。 \(\phi\)代表网络的输出,也就是该像素点属于某一材料的概率。\(b\)代表的是缺陷材料。\(B\)是缺陷材料集合。可以看出,某像素点属于缺陷\(b\)的概率等于该像素点最大的非缺陷材料概率减去该像素点属于缺陷\(b\)的概率。下面的式子中,\(\widehat{F}\left( t \right)\)代表整幅图像中\(S_b(x,y)\)属于某一范围\((\alpha,\beta)\)的像素点个数。文中定义\(\alpha=0.9\)\(\beta=1\)。当\(S_b\)大于某一阈值,即认为有缺陷。

下面来看另一项任务,紧固件的缺陷检测。紧固件可以分为三种情况,无缺陷、存在缺陷和缺少紧固件。对于紧固件的检测应用到了SVM与神经网络的结合,这也是这篇文章的一个亮点。仔细看一下这一部分的网络模型,如下图所示。这一部分网络共享了conv4层。首先,由两个二分类SVM来判断紧固件是否存在(这两个SVM将ROI分为三类,紧固件类、背景类和其它物体类,通过两个SVM判断ROI中是否有紧固件),之后若存在紧固件,则采用神经网络对其进行分类。这里的SVM多分类任务由两个二分类SVM来实现。

到这里网络结构已经描述完了,接下来,最重要的是这个网络是如何训练的,重点是神经网络与SVM分类器如何衔接。为了实现端到端的训练,作者采用与训练神经网络相同的梯度下降法训练SVM。我们注意到,训练SVM得到分类超平面,其实就是优化以下损失函数使其最小。其中\(\omega\)\(b\)是SVM超平面参数。\(y_i\)是SVM分类结果(+1或-1),\(x_i\)是网络输出的512维特征向量。

那么按照梯度下降法的思路,为了使得\(E\)达到最小,我们要对参数\(\omega\)\(b\)求偏导。如下式所示。其中\(delta\)的含义为,条件为真则\(\delta=1\),否则为\(-1\)。有了这两个式子就可以将SVM当做网络中的一层进行训练了。

此外,我们还要将误差传递到前面的网络当中去,如下式所示。

到此,我们就完全可以将SVM当做一层网络,利用梯度下降法来训练了。

另外文章中还有一个比较好的内容,就是能够设置检测阈值,这一部分暂时没有详细去研究。

发表评论

电子邮件地址不会被公开。 必填项已用*标注