如何使用深度学习对两个非常相似的图像进行分类?

人工智能 计算机视觉 图像识别 opencv
2021-11-14 09:31:35

我是计算机视觉的新手。

我有一个场景,我在工厂里有一个固定的相机。我想检测技术人员是否在机器上工作。

图像如下:

技术员工作: 在此处输入图像描述

技术员缺席: 在此处输入图像描述

技术员不工作: 在此处输入图像描述

我很困惑是图像分类问题还是对象检测/姿势检测问题。

据我所知,这应该是一个分类问题,我应该对机器无人看管的情况和技术人员在机器上工作的情况拍摄多张图像。

如果不同的技术人员在不同的日子穿着不同的衣服,我会训练模型。

现在,如果我的方向正确,我需要多少图像才能获得良好的准确性?

我看到 Tensorflow Hub 上有不同的图像分类模型,如 EfficientNet 等。哪种模型/架构适合我?

如果我听起来很笨拙,我很抱歉。

我可以使用简单的分类器代码(例如 Cat vs Dog)来训练模型,但我希望我的架构能够理解图像中有一个区域,只有在它被占用或没有正确分类时才应该检查它。

或者

我是否应该简单地使用 opencv 剪掉中间区域(技术人员站立的地方)。然后将该剪切图像输入某个分类器以检测是否有人站在那里?

提前致谢!

2个回答

这是一个有点老的问题,但无论如何我都会回答。自然,您拥有的数据越多越好,但与其每秒捕获一张图像(例如),我宁愿每 5 分钟捕获一张图像,持续至少 30 天。这将在每个工作日为您提供 8 * 60 / 5 = 96 张图片。但很自然,您可以从第一天开始开发算法。

在“时间序列”数据上生成测试和验证集可能很棘手,我会将完整的工作日分配给验证集,而不是随机抽样。这样,即使人们穿着不同的衣服,您也可以测试代码是否有效,而且天气也可能不同。

对于监督学习,您必须对所有图像进行多次分类,因为没有那么多图像,我会使用这个路由器而不是使用更困难的半监督学习。作为一个人类,你对图像内容有一定的专业知识,我会在感兴趣的区域周围非常紧密地裁剪图像,这样网络就不需要学会自己忽略某些区域。

您可以对一些边缘情况进行分类,例如,如果技术人员只是站在机器前面,他是否被认为是在工作?如果是面向另一个方向呢?根据您处理这些问题的方式,您的网络可以非常简单,也可以更高级一些。

也许你根本不需要神经网络,你可以通过LDA / Fisher Linear Analysis传递一个低分辨率的图像或者分别为工作和非工作图像类创建颜色的像素直方图,并基于此创建启发式方法。

获得不同日期的图像后,请注意颜色、亮度、相机噪声等方面的差异。然后创建一个模拟观察到的偏差的数据增强管道,这样您就可以使模型更加健壮,并且您无需等待几个月即可开始获得良好的效果。

实际上,您所问的问题可以被视为分类问题。但我宁愿把它当作一个detection问题。

给定图像,目标是在感兴趣的对象周围绘制边界框或任何其他几何形状。换句话说,您想定位和识别对象。

在此处输入图像描述

我建议阅读此链接https://machinelearningmastery.com/object-recognition-with-deep-learning/

良好的检测存储库 - https://github.com/ultralytics/yolov5