目录
前言姊妹篇:基于电力行业的智能读表系统–基于RK3399嵌入式设备部署
在变电站表计示数识读中,对表计的读取需要经过表计整体目标检测及二次对准、表盘目标检测及示数读取两个阶段。原来,主要是采用基于传统人工设计特征的图像处理方法实现表计的目标匹配和轮廓检测。由于这些方法只能实现浅层特征的提取,在应用的过程中容易受到图像背景、环境光照、拍摄角度等因素的影响,分类错误率较高。此外,样本量的增加对此类方法的作用也不大,大量深层特征无法被挖掘并用于提升算法的性能。比如说,背景特征难区分、类似区域易误检、环境光线影响检测准确率、现场干扰(如水珠)。如下图所示(如有所借用,请见谅)
针对这些问题,采用了基于深度学习的方法,对涉及目标检测与图像分割的两个关键阶段进行了改善。出于降低图像处理的传输时延和资源需求、提高前端处理效率和智能化程度的目的,上述两个阶段均是在端侧完成。因此,改进方案选择了更适用于前端推理实现的YOLOv3和U-Net模型以及YOLOv3和DeepLapv3+。
表具分割算法设计语义分割只是简单地对图像中各个像素点分类,但是实例分割更进一步,需要区分开不同物体,这更加困难,从一定意义上来说,实例分割更像是语义分割加检测。这里我们主要关注语义分割。
语义分割模型:DeepLabv3+
整体架构
DeepLabv3+模型的整体架构如图所示,它的Decoder的主体是带有空洞卷积的DCNN,可以采用常用的分类网络如ResNet,然后是带有空洞卷积的空间金字塔池化模块(Atrous Spatial Pyramid Pooling, ASPP)),主要是为了引入多尺度信息;相比DeepLabv3,v3+引入了Decoder模块,其将底层特征与高层特征进一步融合,提升分割边界准确度。从某种意义上看,DeepLabv3+在DilatedFCN基础上引入了EcoderDecoder的思路。
ASPP
upgraded ASPP
在语义分割任务中,spatial pyramid pooling module(SPP)可以捕获更多尺度信息,encoder-decoder结构可以更好恢复物体的边缘信息。
原DeepLabv3当作encoder,添加decoder得到新的模型(DeepLabv3+)。
如下图所示,作者把spatial pyramid pooling module和Encoder-Decoder融合成一体:
把Xception和Depthwise separable convolution应用到Atrous Spatial Pyramid Pooling和decoder中。
- Encoder
Encoder就是原来的DeepLabv3,注意点有2点:- 输入尺寸与输出尺寸比(output stride = 16),最后一个stage的膨胀率rate为2
- Atrous Spatial Pyramid Pooling module(ASPP)有四个不同的rate,额外一个全局平均池化
- Decoder
明显看到先把encoder的结果上采样4倍,然后与resnet中下采样前的Conv2特征concat一起,再进行3x3的卷积,最后上采样4倍得到最终结果
需注意点:
融合低层次信息前,先进行1x1的卷积,目的是降通道(例如有512个通道,而encoder结果只有256个通道)
主干网络
改进的Xception模型
DeepLabv3所采用的backbone是ResNet网络,在v3+模型尝试了改进的Xception,Xception网络主要采用depthwise separable convolution,这使得Xception计算量更小。改进的Xception主要体现在以下几点:
(1)参考MSRA的修改(Deformable Convolutional Networks),增加了更多的层;
(2)所有的最大池化层使用stride=2的depthwise separable convolutions替换,这样可以改成空洞卷积 ;
(3)与MobileNet类似,在3x3 depthwise convolution后增加BN和ReLU。
采用改进的Xception网络作为backbone,DeepLab网络分割效果上有一定的提升。作者还尝试了在ASPP中加入depthwise separable convolution,发现在基本不影响模型效果的前提下减少计算量。
DeepLab作为DilatedFCN的典范还是值得学习的,其分割效果也是极其好的。但是由于存在空洞卷积,DeepLab的计算复杂度要高一些,特别是output_stride=8,对于一些要求低延迟的场景如无人车,还是需要更加轻量级的分割模型,这也是近来的研究热点。
语义分割模型:U-Net
在面向表计示数识读的具体实现中,利用翻转、旋转、随机裁剪等方式进行图像预处理,为U-Net模型提供更多不同的训练样本;在表盘分割中,则利用U-Net实现表计指针、表盘刻度线、表盘示数等关键要素的有效提取,继而利用圆心定位、数字分类、角度估算等后处理方式实现表计示数的有效估计。
U-Net是主流分割网络之一,整个网络是标准的encoder-decoder网络,具有参数少、计算快、应用性强等特点,对场景有较高的适应度。U-Net使用跳跃连接,以拼接的方式将解码器和编码器中相同分辨率的feature map进行特征融合,帮助解码器更好地恢复目标的细节。
利用其所提供的YOLOv3、U-Net,使面向表计的深层次特征提取能力大大提高,突破了环境因素的制约,方法的准确率和鲁棒性显著提升,在表计目标检测、示数读取等方面的效果尤为显著。现在,对于用原有传统方法处理起来极为困难的表计目标,用深度学习方法已经可以获得处理效果的有效提升。
YOLOv3是一个速度和精度均衡的目标检测网络,通过增加mixup、label_smooth等处理,对YOLOv3进行了优化实现。YOLOv3也是一个单阶段的目标检测器。传统目标检测方法通过两阶段检测,第一阶段生成预选框,第二阶段对预选框进行分类得到类别,而YOLO将目标检测看作是对预测框位置的一个单阶段回归问题。因此,推理速度能够达到具有同样精度的两阶段目标检测方法的几乎2倍。此外,YOLOv3在最初版YOLO的基础上引入了多尺度预测,因而对小物体的检测精度大幅提高。
对比DeepLabv3+和U-Net分割表具
DeepLabv3+分割效果是要比U-Net好,但是会带来一些噪声;U-Net虽然指针的分割不怎么好,但是不会有太多的噪声带来。其实在实际使用中,还是推荐使用U-Net来分割指针和刻度。
后处理部分常规思路:
在表盘分割中,则利用DeepLabv3+或者U-Net实现表计指针、表盘刻度线、表盘示数等关键要素的有效提取,继而利用圆心定位、数字分类、角度估算等后处理方式实现表计示数的有效估计。
推荐思路:
其实更推荐的一种后处理方式,见基于电力行业的智能读表系统–基于RK3399嵌入式设备部署
步骤如下:
- 对语义分割的预测类别图进行图像腐蚀操作,以达到刻度细分的目的;
- 把环形的表盘展开为矩形图像,根据图像中类别信息生成一维的刻度数组和一维的指针数组
- 计算刻度数组的均值,用均值对刻度数组进行二值化操作
- 定位指针相对刻度的位置,依据刻度根数获取预知的量程,将指针相对位置与量程做乘积得到读数
代码后补上!