我应该使用哪种类型的神经网络来检测图像中的流星?

数据挖掘 机器学习 神经网络 卷积神经网络
2021-10-09 02:20:31

我目前正在构建一个项目,该项目从相机获取鱼眼图像并检测图片是否包含流星,如果存在,它会尝试识别流星的位置。

图像如下所示:

我目前正在构建一个从相机获取鱼眼图像并检测图片是否包含流星的项目。

图像如下所示: 在此处输入图像描述

中间的“圆圈”是实际的天空,外面的一切都只是黑色像素

流星是中间长长的闪光,“侧面”的小闪光是来自附近城市的光。

使用 opencv 的 HoughLines,我能够创建一个检测流星的程序,但它也检测到“侧面”的灯光,所以我的想法是训练一个神经网络只检测流星。

我该怎么做呢?我正在考虑使用U-Net神经网络,使用仅“检测到”流星的图像和图像掩码进行训练,有点像这个例子

4个回答

这不是 NN 解决方案,但您可以将参数调整为 opencv 的 HoughLine 吗?应该有一种方法可以找到直线。应该有一种方法可以调整被视为流星的最小线长度值。流星总是笔直的。那么只有当点具有相似的斜率并且彼此靠近时才保留结果?

看这个例子:

import cv2
import numpy as np

img = cv2.imread('dave.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
minLineLength = 100
maxLineGap = 10
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)
for x1,y1,x2,y2 in lines[0]:
    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)

cv2.imwrite('houghlines5.jpg',img)

来源

卷积神经网络几乎肯定会很好地解决这个问题。AU Net 太过分了。如果您需要确定陨石在图像中的位置,您可以使用它。

只需确保通过旋转示例图像来扩充数据集。

由于您希望神经网络具有一定的旋转不变性,因此传统的卷积层是不够的。当然,您可以尝试查看仅使用传统 CNN 层需要多少数据。

我建议将RIFD-CNN视为一个起点(尽管最近“相当”被引用了很多次)。

要获得该位置,您可以在 NN 中回溯到池层以查看激活的部分。一旦你有被激活的部分,你就可以知道你的对象的位置。

"检测图片中是否包含流星,如果包含则尝试识别流星的位置。 "

这听起来像是一个经典的对象检测问题。

因此,您可以找到一些现有的对象检测模型,并在您自己的数据集上对其进行训练。

关于在数据集上训练现有对象检测模型的教程:https ://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/training.html

另一个可以在自定义数据集上训练的对象检测模型:RetinaNet