在本文中,我将详细介绍如何使用深度学习算法(如Faster-RCNN)从无人机图像中检测风力涡轮机叶片的损坏。我使用Keras来实现此解决方案。
为了最大程度地减少停机时间并避免可能的灾难性结构故障,必须及时检测风力涡轮机叶片上的表面损坏。例行采集大量从无人机拍摄的风力涡轮机的高分辨率图像,然后由专家进行分析以识别即将发生的损坏。借助深度学习算法对这些检查图像进行自动分析可以降低检查成本和维护成本。
数据
我使用了2017年和2018年间公开提供的“ Nordtank”涡轮机无人机检查图像的数据。该数据集托管在Mendeley公共数据集存储库中。
注解
使用Labelimg,我手动注释每个图像,其中包含至少一个风力涡轮机。在Labelimg中为图像添加注释会创建一个与每个图像相对应的XML文件。这些XML文件必须先转换为CSV,然后转换为TFRecords。我的笔记本中提供了此步骤的完整代码。
为了简化说明,我仅使用“涡旋面板”,“涡旋面板缺失齿”和“表面损坏”作为模型要检测的缺陷类型。下面显示了一些标签图像。总共使用了320张图像(182张阳性样本)进行训练,使用了63张进行测试。
表:手动注释计数
缺陷类型
训练
测试中
表面损伤
237
40
涡旋盘缺失牙
116
40
涡旋面板
210
70
我随机地将图像进行训练和测试,以将其拆分为单独的文件夹,并从注释xml生成带有批注框坐标的带注释的文件,该边框格式采用快速RCNN模型所需的特定格式。带注释的文件包含图像名称以及每个图像的完整路径,缺陷类型和边界框坐标。一个图像可以有多行,因为单个图像可以具有多个缺陷类型。
图片名称,x1,x2,y1,y2,缺陷类型
这是带注释的涡轮机图像的一些示例
方法
更快的R-CNN模型
Faster R-CNN是R-CNN(和Fast R-CNN)的更新版本。其结构类似于Fast R-CNN,但提案部分已替换为ConvNet。
更快的R-CNN架构
卷积层将图像转换为称为特征图的高级空间特征。在这些特征图上的区域提议网络(RPN)并获得对象可能位于的位置的估计值,并使用ROI池从特征图中提取该特定区域并基于该分类器的相关特征,从而确定对象是否为该特定类是否存在于完全连接的层中。
我从keras-frcnn采用了更快的RCNN实现。我修改了参数和图像分辨率,针对此问题的预测结果。在fast-RCNN模型中,基本网络是 ResNet。RPN建立在基础层上。此外,我们还在基础层上构建了分类器
#基底层 shared_layers = nn.nn_base(img_input,可训练=真)#定义RPN,建立在基层 RPN = nn.rpn(shared_layers,num_anchors)
#定义分类器,建立在基极层分级= nn.classifier (shared_layers,roi_input,C.num_rois,
nb_classes = len(classes_count),trainable = True)#定义模型+同时包含其他两个模型的模型 model_rpn = Model(img_input,rpn [:2])model_classifier = Model([img_input ,roi_input],分类器)model_all =模型([img_input,roi_input],rpn [:2] +分类器)
平均平均精度
我使用平均平均精度(MAP)来衡量预测的质量。MAP通常在计算机视觉中用于评估推理过程中的对象检测性能。仅当对象建议书与基本事实重叠且超过特定阈值时,它才被认为是准确的。联合交集(IoU)用于衡量预测与地面实况的重叠,其中地面实况是指已识别和注释的原始损害。
IoU值对应于公共区域与建议的检测区域和地面真实区域之和的比率(如上图所示)
训练
我已经使用了182张带批注的图像进行训练,另外63张用于测试。对于所有图像和模型预处理,我使用了Jupyter笔记本(在GitHub上可用),并且为了在GPU中训练和测试更快的RCNN模型,我使用了Google Colab环境。
./train_files/DJI_0052.JPG
./train_files/DJI_0126.JPG
./train_files/DJI_0127.JPG
以上述格式制作注释文件后,请使用以下脚本进行培训
python train_frcnn.py -o简单-p train_annotate10.txt
根据机器的配置,训练模型和获取权重可能会花费大量时间。我建议使用训练模型约60个纪元后得到的权重。您可以从我的GITHUB下载这些砝码。
这是每次训练期间我的训练准确性和损失的图表。
预测
现在培训已完成,我确实看到了25个纪元左右的最佳精度和损失覆盖率。分类精度为98%,得分很高。让我们开始用未注释的图像进行预测。将测试图像移动到test_files后,调用下面的test_frcnn.py脚本
python test_frcnn.py -p test_files
最后,带有检测到的对象的图像将保存在“ results_imgs”文件夹中。以下是实施Faster R-CNN后获得的一些预测示例(我的GitHub中有完整数据):
如您在结果图像中看到的那样,将使用默认训练参数以高概率检测到验证图像集中的模型预测的VG面板,牙齿缺失和表面损坏。但是,我发现,当角度不同或缩放级别不正确时,许多实际的VG面板都无法检测到。我确信添加更多样本将解决此问题并提高模型的效率。
结论
相对于我的样本数据,更快的RCNN模型表现出色。当预测缺陷表面时,平均平均精度(MAP)对模型很有用。但是,该模型无法检测出所有缺失的镶齿情况。另外,由于缺乏针对此特定类型的训练图像,因此我没有考虑此模型。当我们添加许多不同气候条件下的训练样本和图像时,这种更快的RCNN深度学习模型将大大提高效率。另外,我们需要自定义的增强方法来制作比标准增强技术更多的训练样本。
我将在另一篇文章中更新我的进度。您可以在我的GitHub中访问具有完整代码的Jupyter笔记本以检测风力涡轮机表面缺陷
关注 CDA人工智能学院 ,回复“录播”获取更多人工智能精选直播视频!