深度学习

理解和使用深度学习网络

利用YOLO v2模型在卫星图像上探测船舶

这篇文章来自普里莫茨·波托尼克,助理教授卢布尔雅那大学机械工程学院协同学实验室.波托夫尼克教授利用YOLO深度网络开发了一款人工智能应用程序,用于在卫星图像上探测船只,旨在为该课程的学生提供服务自治的船只,这是深度学习在海事工程中的应用实例。
primomov在神经网络和机器学习方面拥有非常深厚的知识,并一直在能源市场工业状态监测和预测应用领域的许多工业项目中进行合作。此外,他还在教授这些课程神经网络自治的船只以及卢布尔雅那大学过程的实证建模和表征。他的参考书目可在COBISS而且ResearchGate

简介

海上自主水面舰艇(MASS)的发展近年来在世界范围内迅速兴起,得到了北欧国家、美国、中国等国家的大力支持,也得到了国际海事组织的支持金宝app国际海事组织.目前,各种自主和遥控船舶正在测试区域丹麦芬兰挪威以及全球许多其他地区。举个例子,雅苒Birkeland这将是世界上首批全电动和自动驾驶的集装箱船之一。除了许多导航、监管、网络安全和其他挑战外,用于提高MASS态势感知的感官网络和海量数据处理是自主海上航运的主要挑战之一。这个例子演示了如何使用一个简单的基于深度学习的舰船探测器从卫星图像中提取有用的信息,该探测器可以包含在MASS系统的广泛的态势感知传感器中。

数据和资源

来自空中客车船舶探测挑战数据库在两个文件夹中使用和排列:火车而且测验
  • 火车文件夹包括100艘船的图像。这些图像用于训练深度学习检测器。
  • 测试文件夹包括额外的50船图像。这些训练后用于评估开发的检测器在新的、不可见的数据上的性能。
本例是基于MATLAB的实例使用YOLO v2深度学习的目标检测将迁移学习作为一种解决方法。转移学习利用预先训练好的深度网络,是学习新任务的一个很好的起点。此外,使用迁移学习需要更少的数据和更少的计算能力,因为训练不需要像从头开始训练那样多的时间。

客观的

本例的任务是使用可用图像的数据集(列车文件夹),并使用深度学习和迁移学习构建船舶检测器。开发探测器的目标是在探测器以前没有见过的新图像(测试文件夹)上探测和定位船只。

解决方案方法

本文提出的解决方法包括以下步骤:
  1. 使用图片标志用于船舶分段标识。
  2. 预处理数据(创建数据存储和调整图像大小)。
  3. 应用pretrainedResNet50网络作为特征提取器。
  4. 创造和培训YOLO目标检测网络。
  5. 在测试图像上评估训练过的检测器。

解决方案的工作流程

用卫星图像标注船只

使用图片标志应用程序,所有训练卫星图像上的船只都是手动标记的,不需要写任何代码。该应用程序非常直观和不言自明(如图1所示),并使最终用户能够在很短的时间内完成标签任务。
图1:使用Image Labeler来标记船段。

数据预处理

要使用标记图像进行深度网络训练,必须完成以下两个步骤:
  • 创建一个数据存储用于加载图像和标签。数据存储作为数据的存储库,克服了处理大数据(如图像)时经常出现的内存不足问题。
  • 调整图像(和包围框)到所需的YOLO尺寸。在本例中,使用ResNet-50特征提取器模型,该模型要求图像的尺寸为224 x 224。
通过这些步骤,标记和适当调整大小的图像可以用作深度网络检测器的训练输入。图2显示了预处理完成后的几张带标记船只的训练图像。
图2:带标记船只的训练图像

应用预训练的ResNet50深度网络作为特征提取器

的预训练版本ResNet-50深度网络模型可以在MATLAB Add-Ons中找到。该模型已经在ImageNet数据库的一个子集上进行了训练,总共有177层,对应于一个50层的剩余网络,可以将图像分为1000个对象类别。
在我们的例子中,预训练的ResNet-50模型被用作特征提取器.因此,选择“activation_40_relu”层作为特征提取层,后续层替换为YOLO v2检测子网。可以通过编程方式(按行编写代码)或交互式地使用深度网络设计器App.图3显示了activation_40_reluResNet-50模型中的'层。
图3:ResNet-50模型中“activation_40_relu”层的位置,用作特征提取器

创建并训练YOLO对象检测网络

YOLO目标检测算法采用卷积神经网络(CNN)对目标进行实时检测。YOLO是“You Only Look Once”的缩写,这表明该算法只需要通过神经网络进行一次前向传播就可以检测到目标。该算法因其速度和准确性而广受欢迎。它已被用于各种应用,以检测交通信号,人,停车计时器和动物。
YOLO算法需要指定各种参数和设置:
inputSize = [224 224 3];%网络输入大小numClasses = 1;%要检测的对象类数量(我们只有一个类'Ship') numAnchors = 7;%锚盒数量
然后,用于对象检测的锚框是根据训练数据中对象的大小估计的:
[anchorBoxes, meanIoU] = estimateAnchorBoxes(preprocessedData, numAnchors);
使用ResNet50特征提取器创建YOLO v2对象检测网络:
lgraph = yolov2Layers(inputSize,numClasses,anchorBoxes, featureextracactionnetwork,featureLayer)
图4:基于ResNet-50特征提取器的YOLO v2图像检测器架构
最后,YOLO v2对象检测器使用各种训练选项进行训练(训练可能需要一到两个小时):
options = trainingOptions('sgdm', 'MiniBatchSize',12, 'InitialLearnRate',1e-3, 'MaxEpochs',120, 'ValidationData', preprocseddata);[detector,info] = trainYOLOv2ObjectDetector(preprocseddata,lgraph,options);
注意:所有这些步骤(设计、加载训练数据、设置训练选项、训练)都可以在Deep Network Designer App内完成。训练完成后,需要将优化后的模型导出到工作空间。整个过程可自动生成功能,避免再次需要手工设计。

结果

在列车图像上评价YOLO检测器

图5显示了训练后的YOLO检测器在列车图像上的出色表现(只显示了前15张图像)。
图5:在列车图像上评估YOLO检测器

在测试图像上评估YOLO检测器

在新图像(测试数据集)上对船舶的检测显示出较差的性能,尽管有几艘船舶被正确检测到(图6)。
图6:在测试图像上评估YOLO检测器
考虑到训练模型在火车数据集上的表现非常好,而在测试数据集上的表现相对不足,训练模型很可能是过拟合的。然而,它证明了小数据集可以用来检测一些对象。
为了提高对新图像的检测结果,YOLO检测器应该在相当大的图像数据集上进行训练,并且应该使用独立的验证数据集来避免过拟合。最后,可以进一步优化训练选项(超参数),以获得更高的测试数据精度。可以使用实验管理App这是一个跟踪所有超参数变化的好工具。

关键的外卖

这个例子展示了一个用于在卫星图像上探测船只的深度学习解决方案的逐步发展。该求解方法非常通用,可以适用于不同的领域,类似于本案例研究采用了早期的MATLAB应用程序使用YOLO v2深度学习的目标检测.可以总结一些结论和要点:
  • 经过训练的YOLO网络已经成功地在卫星图像中检测到几艘船只,尽管测试图像中的一些船只没有被检测到。
  • 只有100张船舶图像的训练数据集对于从头开始训练船舶检测器来说太小了,但是通过使用迁移学习方法,所需的图像数量足以快速获得第一结果。
  • 该示例展示了解决方案的潜在工作流程,在实践中,应该提供更多带注释的图像(以数百或数千张图像为单位),以训练具有良好检测精度的检测器。
  • 这些材料可以激励其他讲师在海洋工程的框架内进一步开发基于深度学习的例子。

MATLAB代码

完整的MATLAB代码与图像数据库可在MATLAB中央文件交换而且GitHub
|
  • 打印
  • 发送电子邮件

评论

要发表评论,请点击此处登录到您的MathWorks帐户或创建一个新帐户。