个性化阅读
专注于IT技术分析

机器学习视频分析:识别鱼

本文概述

比赛是提高机器学习技能的好方法。你不仅可以访问高质量的数据集, 而且还为你提供了明确的目标。这可以帮助你专注于重要部分:为眼前的问题设计质量解决方案。

我和我的一个朋友最近参加了N + 1鱼, N + 2鱼比赛。这项机器学习竞赛需要大量图像处理, 因此你需要处理被识别, 测量, 保藏或扔回海中的鱼类的视频剪辑。

机器学习的抽象图像,用于识别和测量鱼

在本文中, 我将向你介绍如何使用标准图像处理技术和预先训练的神经网络模型从竞争中解决问题。提交的解决方案的性能是基于特定公式进行衡量的。通过我们的解决方案, 我们成功地获得了第11位。

有关机器学习的简要介绍, 可以参考本文。

关于比赛

我们获得了每个段中一条或多条鱼的视频。这些视频是在缅因湾的不同船上捕鱼的底栖鱼上捕获的。

这些视频是从固定位置的摄像机收集下来的, 这些摄像机放置在俯视标尺的位置。将鱼放在标尺上, 渔夫将手从标尺上移开, 然后渔夫根据种类和大小丢弃或保留鱼。

该项目的样本视频片段

绩效指标

有三个任务对这个项目很重要。最终目标是创建一种算法, 该算法可自动为视频文件生成注释, 其中注释包括:

  • 出现的鱼的顺序
  • 视频中出现的每种鱼的种类
  • 视频中出现的每条鱼的长度

比赛的组织者创建了一个汇总指标, 可以使人们对所有这些任务表现出大致的了解。指标是针对每个任务的单个指标的简单加权组合。尽管有一定的权重, 但他们建议我们专注于能够为所有任务做出贡献的全面算法!

你可以从官方比赛网页上的每个任务的绩效指标中了解有关如何计算总体绩效指标的更多信息。

设计机器学习解决方案

在处理涉及图片或视频的机器学习项目时, 你很可能会使用卷积神经网络。但是, 在使用卷积神经网络之前, 我们必须对框架进行预处理, 并通过不同的策略解决其他一些子任务。

为了进行培训, 我们使用了一个nVidia 1080Ti GPU。为了优化我们的代码以保持竞争优势, 我们损失了很多时间。但是, 我们确实花了更少的时间, 而本来会更重要的是。

阶段0:找出唯一船的数量

通过轮廓分析, 找到船的数量变得相当琐碎。步骤如下, 并利用了一些非常标准的技术:

  1. 从每个视频中获取一些随机帧。
  2. 计算每个图像的统计信息并加快鲁棒性(SURF)。
  3. 使用轮廓分析进行K均值聚类, 我们可以找到船的数量。

SURF检测图像中的兴趣点并生成特征描述。即使采用各种图像转换, 这种方法也确实很健壮。

知道图像中兴趣点的特征后, 将执行K均值聚类, 然后进行轮廓分析以确定图像中船的大约数量。

阶段1:识别重复的帧

尽管数据集包含单独的视频文件, 但每个视频似乎都与数据集中的其他视频有些重叠。这可能是因为视频是从一个长视频中分离出来的, 因此最终在每个视频的开头或结尾都有一些共同的帧。

常见框架的图形表示

为了识别此类帧并根据需要将其删除, 我们在帧上使用了一些快速哈希函数。

阶段2:找到标尺

通过应用一些标准的图像处理方法, 我们找到了标尺的位置及其方向。然后, 我们旋转并裁剪图像, 以在所有帧中以一致的方式定位标尺。这也使我们可以将帧大小减小十倍。

检测到的标尺(标绘在中间帧上):

尺子检测过程的视觉描述

裁剪和旋转区域:

裁剪好的尺子的照片

阶段3:确定鱼的顺序

在这个比赛中, 我花费了大部分时间来实施这一阶段来确定鱼的顺序。训练新的卷积神经网络似乎太昂贵了, 因此我们决定使用预训练的神经网络。

为此, 我们选择了以下神经网络:

  • VGG16
  • VGG19
  • ResNet50
  • Xception
  • 盗梦空间V3

这些神经网络模型在ImageNet数据集上训练。

我们仅提取模型的卷积层, 并将其通过竞争数据集。在输出中, 我有很多紧凑的功能。

然后, 我们仅使用完全连接的密集层来训练神经网络, 并为每个预先训练的模型预测结果。之后, 我们将结果取平均值, 结果却很差。

为了更好地预测, 我们决定将其替换为长短期记忆(LSTM)神经网络, 其中输入数据是五个帧的序列, 并使用预训练的模型进行了转换。

为了合并所有模型的输出, 我们使用了几何平均值。

鱼的检测管道为:

  1. 使用预训练的模型生成特征。
  2. 在密集的神经网络上预测鱼出现的可能性。
  3. 使用预训练的模型生成LSTM功能。
  4. 在LSTM神经网络上预测鱼出现的可能性。
  5. 使用几何平均值合并模型。

一部影片的结果如下:

图中显示的样本鱼的检测结果,沿x轴具有帧索引,沿y轴具有概率

阶段4:确定鱼类种类

在花了大部分比赛时间实施前一阶段之后, 我们尝试弥补前一阶段的模型在识别鱼的种类上所浪费的时间。

我们的处理方法大致如下:

  1. 在卷积预训练模型VGG16, VGG19, ResNet50, Xception, InceptionV3层中添加密集层(卷积层的权重是固定的)。
  2. 用小图像增强训练模型。
  3. 用每种模型预测物种。
  4. 通过投票巩固模型。

阶段5:检测鱼的长度

为了确定鱼的长度, 我们使用了神经网络。其中一位受过训练以识别鱼头, 另一位受过训练以识别鱼尾。鱼的长度近似为两个神经网络确定的两点之间的距离。

显示鱼的头和尾之间的距离的照片

完整方案

以下是各阶段的总体方案:

描绘完整方案的流程图

总体设计相当简单, 因为在合并单独的结果之前, 视频帧已通过上述阶段。

赞(0)
未经允许不得转载:srcmini » 机器学习视频分析:识别鱼

评论 抢沙发

评论前必须登录!