通过阅读mask rcnn气球示例(https://engineering.matterport.com/splash-of-color-instance-segmentation-with-mask-r-cnn-and-tensorflow-7c761e238b46),now:
我的目标:
将带有方向和根位置注释信息的气球数据集输入到修改后的mask_rcnn中,然后它最终可以学习如何检测val数据集中每个气球的方向(度)和根位置。
状态:
对于数据集的转换,我使用VIA绘制了一条线(从根/处理程序到每个气球的最底部),以指示图像中每个气球实例的方向,因为在VIA中,一条线包含2个点,因此第一个点json文件中的point将是每个气球实例的根坐标。
下图显示了我的想法:
example picture
我开发了一些程序可以:
从json文件获取图像中所有气球实例的根坐标(浮点值)
通过所有气球的线的2个点计算方向(角度,以2位数字表示的浮点值)
问题:
我认为要将获取的角度和根位置信息发送到气球rcnn中,在balloon.py中,我需要将其添加到
```
class BalloonDataset(utils.Dataset):
def load_balloon(self, dataset_dir, subset):
.......
self.add_image(
"balloon",
image_id=a['filename'], # use file name as a unique image id
path=image_path,
width=width, height=height,
polygons=polygons,
angles=angles,
roots=roots
)
```
那是对的吗?
我认为我还需要在model.py中定义根和方向的损失函数,但是我认为我应该使用apsame作为蒙版损失或框损失,有人可以给我一些提示吗?
可能有人给我一些想法,我应该在model.py或其他地方更改吗?
非常感谢!
最佳答案
我不能完全确定我是否正确理解了您的问题说明(对于root / handler是什么意思?),但是Mask-RCNN并非为此目的而设计。已经讨论了如何针对关键点/边界框问题修改该存储库,但是它很复杂,不建议这样做。为此有更好的方法,例如Faster-RCNN。
Matterports Mask-RCNN非常出色,也许您可以使用它而无需大量修改模型,而只需添加一些opencv和简单的球标几何即可。
如教程中所示生成蒙版。无需修改。
在蒙版上使用cv2.minAreaRect()获取边界框和旋转。
气球的端点可以近似地位于边界框的较短边的中心。
希望这对您的项目有所帮助!
回应编辑:
您的图像确实有助于理解问题陈述。我想如果您要使用Mask-RCNN,可以执行以下操作
为气球的根部创建蒙版。 (再次; Mask-RCNN非常适合创建蒙版,而不适合于关键点检测或其他任何操作。查找关键点的其他方法,以避免必须创建蒙版并减少训练/推理时间)
如果所有图像都是像这样的气球和白色背景,则可以使用opencvs cv2.moments来获取根蒙版和气球轮廓的质量中心,并在它们之间绘制一条线以(大约)旋转。