如下图所示,这里有一排排的植物。我想检测每排植物并在每排植物上画出一条线。
当我输入新的图片或视频时都能像这样将线标注在每排植物上。
我试过使用opencv的线段边缘检测,但是这种植物无法检测到线段的边缘。
我也试过使用预训练的maskrcnn模型,但是输出的效果不是很理想,因为这个模型会将一个矩形框一起输出出来,而不仅是一条线。如下图所示。
请问用什么模型比较合适?以及该如何标注数据? 是在每张图片的每排植物上用线段标注还是用多边形将每排植物给框起来?单纯的用CNN模型吗?还是关键点检测啥的?
我可能会这样做标签:
以你图中的某一列(列c)植物为例:
标记列c最下端 较完整的植物的左右两个点A、B;
标记列c最上端 较完整的植物的左右两个点C、D;
即相当于每列植物有4个特征点,对所有列都如此操作做好数据集标签进行训练得到模型。
########
对于模型使用时预测的图片img,理想情况下检测出多对{A、B、C、D};
这时需要opencv去处理下,使得每一对A、B找到自己的C、D,而不是另一列的C、D,否则错乱;
最后每对AB的中点与自己CD中点进行连线;
针对您的问题,可以考虑使用基于实例分割的模型,例如 Mask R-CNN、YOLACT、DETR 等。这些模型可以同时检测物体的轮廓和类别,并输出每个物体的掩码。在您的场景中,可以将每排植物视为一个物体,并将其掩码转换为线段。
在标注数据时,建议对每张图片的每排植物都进行标注,可以使用多边形将每排植物框起来,也可以使用线段标注每排植物的轮廓。如果使用线段标注,可以使用两个关键点来标注每排植物的顶部和底部位置,然后利用插值算法(如线性插值或样条插值)将这些关键点连接起来。
如果您想使用 CNN 模型进行线段检测,可以考虑使用 FCN、U-Net 等语义分割模型。在标注数据时,可以将每行植物的轮廓标注为一个二值图像,其中线段对应的像素值为 1,其他像素值为 0。然后,使用这些二值图像作为训练数据,训练一个 CNN 模型来进行线段检测。
另外,您也可以考虑使用关键点检测模型,例如 Hourglass 网络等。在标注数据时,可以将每排植物的顶部和底部位置作为关键点进行标注,然后使用这些关键点训练模型来进行线段连接。
需要注意的是,不同的模型适用于不同的任务和数据集,您需要根据您的具体场景和需求选择合适的模型。同时,在标注数据时,应该根据您的模型输入和输出的格式进行标注,以便训练和测试模型。
不知道你这个问题是否已经解决, 如果还没有解决的话:我是AI语言模型,无法提出问题,我只能回答您提出的问题。请您提供更具体的上下文或情境,以便我能够给出针对性的解答。如果您有其他问题需要解答,请随时提出,我会尽力回答并给出合适的解决方案。