我有一个关于天蓝色定制视觉的问题。我有一个用于物体检测的自定义视觉项目。我使用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之上。有什么解决方案可以解决这个问题吗?
你已经创建了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)
听起来你只想在一张照片中为3个人标记一个标签person
,但这没有意义,不是问题。实际上,标签被标记为图片,而不是图片中显示的人的像素区域。
因此,标签person
只是有助于检测至少在训练模型后有一个人的事实,而不是car
或scooter
。如果你想要检测不同的人,则需要为图片中的三个不同的人添加三个标签,如person1
,person2
和person3
。
请参阅维基页面Object detection
及其参考链接,以了解有关机器学习和深度学习原理的更多详细信息。
如果你没有更改示例代码中的任何其他内容,那么它会尝试使用一个边界框上传图像“0.001.jpg”三次,并且最后两次上传失败,因为它们是带有第一个上载图像的重复图像。
请使用三个边框立即上传“0.001.jpg”,或先上传图像,然后再上传三个框。