导师最近在合推一个项目,应该说是别人看到我们的工作后主动找上我们的,他们想进行一个预研验证项目。这个项目主要内容是利用无人机巡检某个大型国企下面的几十家厂房的桁架杆件表面腐蚀情况,并给出剩余强度,评估结构的服役状态,能够进行加载进行现代化改造,并给出加载改造加固方案。目前在谈的是先拿其中一个腐蚀情况最严重的厂房作为技术验证,如果成功的话,再报计划推广应用到整个所有厂房,给所有厂房都进行现代化改造。这个验证项目的背景应该是受到今年5月26日江苏常州的一个企业车间房顶坍塌所启示吧。这个企业下面几十家厂房都服役较长时间了,一些桁架材料表面腐蚀严重,如果突然发生坍塌事故,后果无法承担,并且企业还想对厂房进行现代化改造,桁架结构需要加载,需要知道杆件的剩余强度进行有针对性的加固。所以这个课题是想让我们通过无人机巡检,然后通过巡检图像对金属表面的腐蚀情况进行识别,并建立表面腐蚀情况与材料剩余强度之间的标定关系,最后的寿命评估及增强加固由另外的单位去做。这个课题和我的研究方向比较接近,导师今天带我开协调会的时候,让我挑大梁干这件事,我真的有点懵。第一次深度参与这种项目,特别是将平常实验室场景的技术挪到现实的应用场景上还是有些底气不足的。
通过无人机巡检图像识别精细的材料腐蚀情况,找出金属腐蚀的敏感区域,这是没问题的,我们之前发表的机器学习文章就是干的这个事,原理都清楚。倒是建立腐蚀情况与材料剩余强度之间的关联是这个项目中最大的问题,因为厂房环境下桁架杆的腐蚀情况与剩余强度之间的关系,与室外环境下金属材料腐蚀情况与剩余强度之间的关系是不是能够等效还是未知的,需要进行力学测试才能下结论,这个等待甲方提供样本杆再说吧。
另外导师让我时刻记录下来搞项目过程中查阅的文献和方法,以及研究背景等等,所谓的积累在平时,关键时刻随时可以掏出真家伙,快速高效的写出项目书及制作PPT。听老板一顿讲,感觉可以应用的领域确实很多,所有人不方便到达的地方,都可以通过无人机巡检拍照,然后利用图像技术进行识别分析,除了大型厂房的行架结构外,还有高压输电塔,输电线,风力发电机,还有悬索桥等。
今天我首先记录一下看到的基于机器视觉的金属表面表面检测方法中一些常用方法:
Mask R-CNN网络结构
Mask R-CNN结构主要分为Faster R-CNN、RoIAlign、FCN三个模块。Mask R-CNN结构是在Faster R-CNN的基础上进行改进,用RoIAlign代替RoIPooling方法。RoIAlign采用双线性插值法代替RoIPooling的取证量化从而减小误差,并完成了像素级别的对齐。在候选对象上,RoI添加了第三个分支用于预测分割掩码的分层,称为掩码层(mask branch)。Faster R-CNN算法为每个候选对象RoI的基础上增加了FCN来产生对应的MASK分支,分割效果良好,而且训练非常简单。
(1)Faster R-CNN网络结构
Faster R-CNN是由Ross Girshick提出的,由区域建议网格(RPN)和Fast R-CNN两部分组成。RPN代替了Fast R-CNN中的Selective Search(SS),节省了区域建议检测的时间,实现建议区域的确定。Fast R-CNN对RPN生成的每个建议区域分类概率进行预测判断,优化建议区域的偏移量,从而获得精确的目标位置。
(2)RoIAlign层
在Fast R-CNN、Faster R-CNN等两级检测框架中,使用RoIPooling根据预选框的坐标在特征图相应的位置池化为固定尺寸的特征图,再进行分类和包围框回归操作.而预选框的位置通常是由模型回归得到的,一般都是浮点数,而池化后的特征图要求尺寸固定.RoIPooling首先将预选框边界量化为整数点坐标值;其次将量化后的边界区域平均分割成$n×n$个单元,对每个单元的边界进行量化的两次量化过程.经过两次量化,就会出现候选框与最开始回归出来的位置存在偏差,影响检测分割精度.
RoIAlign是Mask-RCNN里提出的一种区域特征聚集方式, 很好地解决了RoIPooling操作中两次量化造成的区域不匹配(mis-alignment)的问题。RoIAlign方法取消了RoIPooling的量化操作:RoIAlign方法遍历每一个候选区域,保持不量化浮点数边界,将候选区域分为$n×n$个单元,每个单元的边界不做量化;使用双线性内插方法,最后在每个单元中计算固定四个坐标位置,使用双线性内插的方法计算出四个位置的值,然后进行最大池化操作。
在反向传播过程中,常规的RoIPooling的反向传播公式如下所示:
$$ \frac{\partial L}{\partial x_{i} } =\sum_{r}^{} \sum_{j}^{} \left [ i=i^* ( r,j \right )] \frac{\partial L}{\partial y_{rj} } $$
其中$x_{i}$代表池化前特征图上的像素点;$y_{rj}$代表池化后的第$r$个候选区域的第$j$个点;$i^{*}(r,j)$代表点$y_{rj}$像素值的来源。
RoIAlign与RoIPooling的反向传播相比较并进行修改,$i^{*}(r,j)$是一个浮点数的坐标位置(前向传播时计算出来的采样点),在池化前的特征图中,每一个与$i^{*}(r,j)$横纵坐标均小于1的点都应该接受与此对应的点$y_{rj}$回传的梯度,RoIAlign方法的反向传播式如下所示:
$$ \frac{\partial L}{\partial x_{i} } =\sum_{r}^{} \sum_{j}^{} \left [d(i,i^{*}(r,j) )<1 \right ] (1-\Delta h)(1-\Delta w)\frac{\partial L}{\partial y_{rj} } $$
其中$d()$代表两市之间的距离,$\Delta h$和$\Delta w$表示$x_{i}$与$i^{*}(r,j)$横纵坐标的插值,这里作为双线性内插的系数在原始梯度上。
(3)FCN网络结构简洁
FCN对图像进行像素级别的分类,从而实现语义级别的图像分割问题。FCN是一个端到端的网络,使用反卷积对最后一个卷积层的特征图进行上采样,不断扩大特征图,直至恢复到与输入图像尺寸相同,对每一个像素值进行分割,从而实现对输入图像的准确分割。
Faster R-CNN为每个候选对象RoI提供两个输出,一个类标签,一个边界框偏移量,Mask R-CNN并行添加了第三个分割mask的分支,mask分支是应用到每一个RoI上的一个FCN(Fully Convolutional Network),用FCN从每一个RoI中预测出一个mxm大小的mask,这使得mask分支中的每个层能够明确地保持mxm空间布局,而不将其折叠成缺少空间维度的向量表示。
参考文献:薛冰,《基于 Mask R-CNN 的电力设备锈迹检测》,2018,计算机系统应用。