如何在某些图片上上传重复的标签以获得蔚蓝的自定义视觉?

问题描述 投票:1回答:3

我有一个关于天蓝色定制视觉的问题。我有一个用于物体检测的自定义视觉项目。我使用python SDK来创建项目(参见:https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/python-tutorial-od)。但我在上传过程中发现了一些错误。例如,在这张照片中有一张有3个人的照片。所以我在这张照片中标记了3个同一类“人物”。但上传后,我在定制视觉网站上发现了这张照片中的1个“人物”。但是其他课程很好,比如在这张照片上也可以有“人”,“汽车”和“踏板车”。看起来在图片中只能有一个相同的类。

我尝试使用python SDK(参见:https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/python-tutorial-od)上传我的图片和标签信息。

A0_tag = trainer.create_tag(project.id, "A0")
A1_tag = trainer.create_tag(project.id, "A1")
A2_tag = trainer.create_tag(project.id, "A2")

A0_image_regions={
"0001.jpg":[0.432291667,0.28125,0.080729167,0.09765625],
"0001.jpg":[0.34765625,0.385742188,0.131510417,0.135742188],
"0001.jpg":[0.479166667,0.385742188,0.130208333,0.135742188],
"0003.jpg":[0.19921875,0.158203125,0.083333333,0.099609375]
}

上面的代码可以看到我在0001.jpg中上传了三个“A0”类。但是在网站的GUI界面中,我终于看到一个“A0”类最终存在于0001.jpg之上。有什么解决方案可以解决这个问题吗?

python azure microsoft-custom-vision
3个回答
1
投票

你已经创建了A0_image_regions但是当你有任何给定图像的多个边界框时,它会覆盖密钥。所以这不会起作用。

但也许更重要的是,你需要以图像作为主要对象来调用教练,将所有相关的图像区域集中在一起。换句话说,在你的例子中,0001.jpg有三个A0实例,但它也可能有A1和/或A2的实例,这将是一个ImageFile条目。所以我将按照以下方式修改示例:

A0_tag = trainer.create_tag(project.id, "A0")
A1_tag = trainer.create_tag(project.id, "A1")
A2_tag = trainer.create_tag(project.id, "A2")

image_regions = {
    A0_tag.id : [
        ("0001.jpg", [0.432291667,0.28125,0.080729167,0.09765625]),
        ("0001.jpg", [0.34765625,0.385742188,0.131510417,0.135742188]),
        ("0001.jpg", [0.479166667,0.385742188,0.130208333,0.135742188]),
        ("0003.jpg", [0.19921875,0.158203125,0.083333333,0.099609375])
    ],
    A1_tag.id : [] # add images/bounding boxes for A1
    A2_tag.id : [] # add images/bounding boxes for A2
}

regions_map = {}
for tag_id in image_regions:
    for filename,[x,y,w,h] in image_regions[tag_id]:
        regions = regions_map.get(filename,[])
        regions.append(Region(tag_id, left=x, top=y, width=w, height=h))
        regions_map[filename] = regions

tagged_images_with_regions = []
for filename in regions_map:
    regions = regions_map[filename]
    with open(base_image_url + filename, mode="rb") as image_contents:
        tagged_images_with_regions.append(ImageFileCreateEntry(name=filename, contents=image_contents.read(), regions=regions))

upload_result = trainer.create_images_from_files(project.id, images=tagged_images_with_regions)

0
投票

听起来你只想在一张照片中为3个人标记一个标签person,但这没有意义,不是问题。实际上,标签被标记为图片,而不是图片中显示的人的像素区域。

因此,标签person只是有助于检测至少在训练模型后有一个人的事实,而不是carscooter。如果你想要检测不同的人,则需要为图片中的三个不同的人添加三个标签,如person1person2person3

请参阅维基页面Object detection及其参考链接,以了解有关机器学习和深度学习原理的更多详细信息。


0
投票

如果你没有更改示例代码中的任何其他内容,那么它会尝试使用一个边界框上传图像“0.001.jpg”三次,并且最后两次上传失败,因为它们是带有第一个上载图像的重复图像。

请使用三个边框立即上传“0.001.jpg”,或先上传图像,然后再上传三个框。

© www.soinside.com 2019 - 2024. All rights reserved.