你可能会用完全不同的标注发方法来处理一批同样的原始数据或者为了另外的算法完全重新标注原始数据来得到更高的模型准确率。
在SPARKAPI,我们针对人工智能的企业采用更人性化的服务。
在和客户交谈的过程中,我们经常会被问到针对某个特定的项目,我们推荐什么样的标注工具。我们已经帮助通过庞大的标注任务帮助客户解决了多种多样的应用案例。
当在大规模的构建自己的标注好的训练数据集时,有必要熟悉一下正确的标注工具和它们的用处,例如其他的AI企业是怎么收集训练数据的,他们如何选择标注工具类型应用在特定的项目中。
But which annotation type is right for your project? Everything depends on the kind of use case you have.
图像标注工具对比图表
Hope you find them useful.
2D框标注 Bounding Box:
正像它的名字一样,标注员工需要在指定的物体周围画一个框。一般训练用于物体分类和定位的模型。
应用场景:
- 运动分析-框选出足球运动员然后为他们归类到特点的组
- 框选出施工现场的工具用来分析施工现场是否符合安全标注
- 框选损坏的车部位,为保险理赔提供依据。
//rectangles (To be corrected) "rectangles": [{ "coordinates": { "xmin": 0.38, "ymin": 0.19, "xmax": 0.57, "ymax": 0.44 }, "label": "car" }]
多边形分割标注:
多边形工具一般用来标注不规则的物体。和框标注不同,多边形标注不会在目标物体周围有很多无关的空白或者其他的物体(多余的空白或者物体可能会让机器模型困惑)。多边形标注在训练定位模型时,会更加准确。
//polygons - We can share both JSON metadata & masked images "polygons": [{ "points": { "p1": { "x": 0.17, "y": 0.58 }, "p2": { "x": 0.26, "y": 0.63 }, "p3": { "x": 0.27, "y": 0.63 }, "p4": { "x": 0.29, "y": 0.59 }, "p5": { "x": 0.25, "y": 0.46 }, "p6": { "x": 0.22, "y": 0.42 } }, "edges": { "e1": ["p1", "p2"], "e2": ["p2", "p3"], "e3": ["p3", "p4"], "e4": ["p4", "p5"], "e5": ["p5", "p6"] }, "label": "parking_lot" }]
线标注:
线标注(也被称作道路标注),即画出车道或者其他的线,经常被用来训练自动驾驶对道路的感知模型。不像框标注,线标注也没有那么多的无意义的空白或者多余的噪音。
{ "request_id": "", "image_url": "", "lines": [{ "line_id" : "5eb732a5-7e66-4212-9782-372908eda25e", "points": { //the order of the points is the "p1": { "x": 17, "y": 58 }, "p2": { "x": 26, "y": 63 }, "p3": { "x": 27, "y": 63 }, "p4": { "x": 29, "y": 59 }, "p5": { "x": 25, "y": 46 }, "p6": { "x": 22, "y": 42 } }, "label": "single_solid", "meta_data" : { //Refer the meta_data section below "lane_diverging": "false", "lane_direction": "ongoing", "line_visibility": "inferred", "line_occlusion" : "true", "lane_to_the_left" : "left_1", "lane_to_the_right" : "ego_lane" } },{}] }
点标注:
点标注经常用于发现形状变化和对微笑的物体计数。
应用场景:
- 发现和识别面部特征
- 标注运动中的人体部分
- 用来表情和手势识别
//Dot Annotation [{ "id": "001", "image_url": ["https:///001.jpg"], "landmarks": [{ "points": { "p1": { "x": 0.17, "y": 0.58, "label": 1 }, "p2": { "x": 0.26, "y": 0.63, "label": 2 }, "p3": { "x": 0.27, "y": 0.63, "label": 3 }, "p4": { "x": 0.29, "y": 0.59, "label": 4 }, "p5": { "x": 0.25, "y": 0.46, "label": 5 }, "p6": { "x": 0.22, "y": 0.42, "label": 6 } }, "label": "nose" }, { "points": { "p1": { "x": 0.17, "y": 0.58, "label": 1 }, "p2": { "x": 0.26, "y": 0.63, "label": 2 }, "p3": { "x": 0.27, "y": 0.63, "label": 3 }, "p4": { "x": 0.29, "y": 0.59, "label": 4 }, "p5": { "x": 0.25, "y": 0.46, "label": 5 }, "p6": { "x": 0.22, "y": 0.42, "label": 6 } }, "label": "left-ear" }...] }, { "id": "002", "image_url": ["https:///002.jpg"], "landmarks": [{ "points": { "p1": { "x": 0.17, "y": 0.58, "label": 1 }, "p2": { "x": 0.26, "y": 0.63, "label": 2 }, "p3": { "x": 0.27, "y": 0.63, "label": 3 }, "p4": { "x": 0.29, "y": 0.59, "label": 4 }, "p5": { "x": 0.25, "y": 0.46, "label": 5 }, "p6": { "x": 0.22, "y": 0.42, "label": 6 } }, "label": "nose" }, { "points": { "p1": { "x": 0.17, "y": 0.58, "label": 1 }, "p2": { "x": 0.26, "y": 0.63, "label": 2 }, "p3": { "x": 0.27, "y": 0.63, "label": 3 }, "p4": { "x": 0.29, "y": 0.59, "label": 4 }, "p5": { "x": 0.25, "y": 0.46, "label": 5 }, "p6": { "x": 0.22, "y": 0.42, "label": 6 } }, "label": "left-ear" }...] } ]
3D立方体标注:
3D立方体经常用于计算车辆的深度和距离
//cuboids "cuboids": [{ "label": "Pedestrian", "points": { "p1": { "x": 0.4164711477938035, "y": 0.3934434942010466 }, "p2": { "x": 0.4238544518253917, "y": 0.3934434942010466 }, "p3": { "x": 0.4238544518253917, "y": 0.4236330040190965 }, "p4": { "x": 0.4164711477938035, "y": 0.4236330040190965 }, "p5": { "x": 0.4164711477938035, "y": 0.4236330040190965 }, "p6": { "x": 0.4164711477938035, "y": 0.4236330040190965 }, "p7": { "x": 0.4164711477938035, "y": 0.4236330040190965 }, "p8": { "x": 0.4164711477938035, "y": 0.4236330040190965 } }, "front": { "coordinates": ["p1", "p2", "p3", "p4"] }, "side": { "coordinates": ["p2", "p3", "p5", "p6"] }, "back": { "coordinates": ["p5", "p6", "p7", "p8"] } } ]
语义分割标注:
像素级的语义分割经常用于需要标注图片中的所有像素的实例中。多边形分割一般是把特定的某个物体标注出来,全语义分割用于对场景中的每个像素提供理解
应用场景:
-
- 像素级的物体识别和定位.
{ "result" : [ { "image_id" : 1 "points" : { "p1" : {'x':x1, 'y':y1}, "p2" : {'x':x2, 'y':y2}, "p3" : {'x':x3, 'y':y3} } "polygons" : [ { "class_id" : 4, "instance_id" : 1, "class_label" : "person", "exterior" : [p1, p2, p3], "interior" : [] } ] } ] }
一些建议
- 尽量用你自己的数据.开源数据集可能能使你的算法达到80%准确度,但是如果你想得到更高的准确率,你需要有自己的数据。
- 多边形应该尽量贴合被标注的物体,这样可以提供你的模型的速度和精确度
- 要规定框的最小高度和宽度
- 选择容易理解的标注标签类别(比如用轿车,然不用车辆)
- 对于运动的物体例如(自动驾驶汽车)用框选或者3D立方体标注
- 对于静态的物体,用多边形或者线标注.