数据集标注方法(数据集标注注意事项)
大家好!今天让创意岭的小编来大家介绍下关于数据集标注方法的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。
开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等
只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端
创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008
本文目录:
一、数据集-读取图片标注框和xml文件,生成txt文件
1. 读取图片和标注后的xml文件,将标注信息写到txt文件中。生成的txt文件在txt文件夹下面,可以直接用于yolo3等目标检测算法的训练。
2. txt文件包含图片的路径,标注框的位置和大小,以及标注的类别。
3. 分割标注的图片,可以用于行人属性识别。分割的图片保存在segmentation文件夹下。
1. 需要将数据集放在dataset路径下。
2. Annotations存放的是xml文件,JPEGImages存放的是图片。
修改:需要针对需要进行适当的修改。下面进行说明:
第一:
class_tab={
"human":1 ##这个是类别,如果有多个类别,可以添加多条
}
第二:
params={"xml_prefix":"./dataset/Annotations/", ##这个是xml源文件的路径前缀,注意末尾要有“/”
"img_prefix":"./dataset/JPEGImages/",##这个是图片源文件的路径前缀,注意末尾要有“/”
"seg_prefix":"./segmentation/",##这个是分割后图片存放的位置前缀,注意末尾要有“/”
}
第三:
f = open('./txt/train.txt','a')##这个是生成的txt文件的路径。
import sys
#sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
import cv2
import os
from readxml import *
class_tab={
"humanimport sys
#sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
import cv2
import os
from readxml import *
class_tab={
"human":1
}
params={"xml_prefix":"./dataset/Annotations/",
"img_prefix":"./dataset/JPEGImages/",
"seg_prefix":"./segmentation/",
}
def write_line(f, img_path, boxes):
f.write("%s "%(img_path))
for box in boxes:
f.write(str(box['cls'])+",")
f.write(str(box['xmin']+","))
f.write(str(box['ymin']+","))
f.write(str(box['xmax']+","))
f.write(str(box['ymax']))
f.write(" ")
f.write("\n")
f.flush()
def segment(img_path, imgname, boxes):
img=cv2.imread(img_path, cv2.IMREAD_COLOR)
cnt=0
for box in boxes:
seg=img[int(box['ymin']):int(box["ymax"]), int(box["xmin"]):int(box["xmax"]),:]
cv2.imwrite(params["seg_prefix"]+imgname+"_"+str(cnt)+".jpg", seg)
cnt=cnt+1
def main():
f = open('./txt/train.txt','a')
img_list=os.listdir(params["img_prefix"])
for il in img_list:
img_path=params["img_prefix"]+il
tokens=il.split(".")
xml_path=params["xml_prefix"]+tokens[0]+".xml"
if os.path.isfile(img_path)==False:
raise ValueError("%s does not exits!"%img_path)
else:
print("reading:", img_path)
boxes=xml_reader(xml_path, class_tab)
write_line(f,img_path,boxes)
segment(img_path, tokens[0], boxes)
f.close()
if __name__ == '__main__':
main()
":1
}
params={"xml_prefix":"./dataset/Annotations/",
"img_prefix":"./dataset/JPEGImages/",
"seg_prefix":"./segmentation/",
}
def write_line(f, img_path, boxes):
f.write("%s "%(img_path))
for box in boxes:
f.write(str(box['cls'])+",")
f.write(str(box['xmin']+","))
f.write(str(box['ymin']+","))
f.write(str(box['xmax']+","))
f.write(str(box['ymax']))
f.write(" ")
f.write("\n")
f.flush()
def segment(img_path, imgname, boxes):
img=cv2.imread(img_path, cv2.IMREAD_COLOR)
cnt=0
for box in boxes:
seg=img[int(box['ymin']):int(box["ymax"]), int(box["xmin"]):int(box["xmax"]),:]
cv2.imwrite(params["seg_prefix"]+imgname+"_"+str(cnt)+".jpg", seg)
cnt=cnt+1
def main():
f = open('./txt/train.txt','a')
img_list=os.listdir(params["img_prefix"])
for il in img_list:
img_path=params["img_prefix"]+il
tokens=il.split(".")
xml_path=params["xml_prefix"]+tokens[0]+".xml"
if os.path.isfile(img_path)==False:
raise ValueError("%s does not exits!"%img_path)
else:
print("reading:", img_path)
boxes=xml_reader(xml_path, class_tab)
write_line(f,img_path,boxes)
segment(img_path, tokens[0], boxes)
f.close()
if __name__ == '__main__':
main()
from xml.dom.minidom import Document
import xml.etree.ElementTree as ET
def xml_reader(fname, cls_tab):###, classes_merge_list,classes_merged_name):
in_file = open(fname)
tree=ET.parse(in_file)
root = tree.getroot()
boxes=[]
for item in root.iter('item'):
cls = item.find('name').text
if cls in cls_tab:
bndbox = item.find('bndbox')
b={
"xmin": str(int(bndbox.find('xmin').text)),
"ymin": str(int(bndbox.find('ymin').text)),
"xmax": str(int(bndbox.find('xmax').text)),
"ymax": str(int(bndbox.find('ymax').text)),
"cls": cls_tab[cls]
}
boxes.append(b)
else:
continue
return boxes
if __name__ == '__main__':
cls_tab={"human":1}
fname="/home/ta/Downloads/liqiming_label/dataset/Annotations/sa341.xml"
box=xml_reader(fname, cls_tab)
print(box)
二、没有经验可以做数据标注吗?
数据标注员没经验能做,但要逐渐学习,工作内容如下:
一、职位职责:
1、为机器模型标注数据集,并协助优化模型效果。
2、针对各类产品策略、模型输出的数据进行评估,并撰写相关评估标准及结果文档。
3、与算法工程师、各业务线产品&运营进行协作,完成需求沟通、标准制定、标注工具优化等。
二、职位要求:
1、对特定内容、图像等数据敏感,能人工判别数据内容的分类特征。
2、能依据具体的标准,完成各项产品策略&模型的效果评定。
3、有数据标注经验者、对机器学习的相关基本原理有了解者优先。
4、抗压力好、学习能力强,能快速熟练掌握各类判别标准。
三、数据标注行业的发展面临哪些挑战?
01.不同的行业、不同的业务场景对数据标注的需求存在一定的差异性,现有的标注任务还不够细化, 缺乏定制化标注能力。
数据标注的应用场景十分广泛,具体来说有自动驾驶、智慧安防、新零售、AI教育、工业机器人、智慧农业等领域。
不同的应用场景对应不同的标注需求,比如自动驾驶领域主要涉及行人识别、车辆识别、红绿灯识别、道路识别等内容,而智慧安防领域则主要涉及面部识别、人脸探测、视觉搜索、人脸关键信息点提取以及车牌识别等内容,这对数据服务供应商的定制化标注能力提出了新的挑战。
02.标注效率与数据质量均较低,且欠缺人机协作能力。
数据标注行业的特殊性决定了其对于人力的高依赖性,目前主流的标注方法是标注员根据标注需求, 借助相关工具在数据上完成诸如分类、画框、注释和标记等工作。
由于标注员能力素质的参差不齐以及标注工具功能的不完善,数据服务供应商在标注效率以及数据质量上,均有所欠缺。
此外,目前很多数据服务供应商忽视或完全不具备人机协作能力,并没有意识到AI对于数据标注行业的反哺作用。
以曼孚科技标注业务为例,通过在标注过程中引入AI预标注以及在质检过程中引入AI质检,不仅可以有效提高标注效率,同时也可以极大提升标注数据集的准确度。
03.品牌数据标注服务提供商依赖众包、转包模式,造成标注结果质量的层次不齐。
现阶段,数据标注主要依靠人力来完成,人力成本占据数据标注服务企业总成本的绝大部分。因此很多品牌数据服务供应商都放弃自建标注团队,转而通过分包、转包的模式完成标注业务。
与自建标注团队相比,众包与转包的方式,成本较低且比较灵活,但是与自建标注团队相比,这两种模式信息链过长,且质量难以把控,从长远角度来看,自建标注团队更加符合行业发展的需求。
04.基于众包、转包模式下的数据标注任务会造成用户数据缺乏安全性, 并面临隐私泄露的风险。
一些特殊行业的需求方,比如金融机构和政府部门格外注重标注数据的安全性, 但是一些数据标注企业出于成本方面的考虑,会将这些敏感的数据分发、转包给其他服务商或者个人,这就带来了巨大的潜在数据泄露风险。如何建立一套完善的数据安全防护机制就成为当下诸多数据服务供应商需要着重考量的因素。
四、ar标注实现原理
主要基于计算机视觉和机器学习技术,它的核心是利用计算机视觉技术检测出图片中的物体,然后使用机器学习技术来确定出物体的类别和位置。
首先,AR标注需要一个数据集,这个数据集通常包含一系列的图片,每张图片都有一个标签描述物体的类别,比如人、汽车等。然后,AR标注系统会使用图像检测技术,比如目标检测、卷积神经网络、支持向量机等,来检测出图片中的物体。最后,AR标注系统会使用机器学习技术,如支持向量机、朴素贝叶斯分类器、随机森林、K近邻等,来确定出物体的类别和位置。
AR标注技术可以帮助企业提升其产品的品质和可用性,比如家居空间设计公司可以利用AR标注技术来快速识别物体,从而更好的帮助客户规划家居空间。此外,AR标注技术还可以应用在安防、健康检查、视觉检测等领域中。
以上就是关于数据集标注方法相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。
推荐阅读: