有多少人工就有多少智能,数据标注是大部分人工智能算法得以有效运行的关键环节。简单来说,数据标注是对未经处理过的语音、图片、文本、视频等数据进行加工处理,从而转变成机器可识别信息的过程。
工欲善其事必先利其器
用了不少数据标注工具,有labelimg ,labelme 只是框的标注,而且数据管理和协同工作不大支持,ppocrlabel也只是ocr相关的,cvat 在图像上很强大,且协同和数据管理较好,易用性最好,但是windows上安装较麻烦,而且开源的数据量有限制,且web端不大稳定只能是cv类的。
label-studio 是个非常方便安装和使用的标注工具,而且最近openmmlab加入了sam的半自动标注辅助,同时更为重要的是就不用切换各种标注工具,标注文本,ocr,检测分割之类的任务就很方便了。
这里参考的是
1,Playground官方GitHub地址:
https://github.com/open-mmlab/playground
2,SAM官方GitHub地址:https://github.com/facebookresearch/segment-anything
环境部署
创建anaconda虚拟环境,并激活
conda create -n labelsam python=3.9 -y
conda activate labelsam
克隆项目到本地
git clone https://github.com/open-mmlab/playground
安装 PyTorch
# Linux and Windows CUDA 11.3
pip install torch==1.10.1+cu113 torchvision==0.11.2+cu113 torchaudio==0.10.1 -f https://download.pytorch.org/whl/cu113/torch_stable.html
# Linux and Windows CPU only
pip install torch==1.10.1+cpu torchvision==0.11.2+cpu torchaudio==0.10.1 -f https://download.pytorch.org/whl/cpu/torch_stable.html
# OSX
pip install torch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1
安装 SAM 并下载预训练模型
进入plagrounnd\label_anything
下载相关包
pip install opencv-python pycocotools matplotlib onnxruntime onnx
下载安装sam项目
pip install git+https://github.com/facebookresearch/segment-anything.git
下载模型
wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth
安装 Label-Studio 和 label-studio-ml-backend
pip install label-studio==1.7.3
pip install label-studio-ml==1.0.9
启动后端服务
label-studio-ml start sam --port 8003 --with
sam_config=vit_b
sam_checkpoint_file=./sam_vit_b_01ec64.pth
out_mask=True
out_bbox=True
device=cuda:0
# device=cuda:0 为使用 GPU 推理,如果使用 cpu 推理,将 cuda:0 替换为 cpu
# out_poly=True 返回外接多边形的标注
启动 Label-Studio 网页服务
设置环境变量以免模型加载过长时间导致异常
Windows要使用以下指令
set ML_TIMEOUT_SETUP=40
在另一个终端启动
label-studio start --port 8008
打开浏览器访问 http://localhost:8008/ 即可看到 Label-Studio 的界面
建立新的项目
导入图片
在 Settings/Labeling Interface 中配置 Label-Studio 关键点和 Mask 标注
<View>
<Image name="image" value="$image" zoom="true"/>
<KeyPointLabels name="KeyPointLabels" toName="image">
<Label value="cat" smart="true" background="#e51515" showInline="true"/>
<Label value="person" smart="true" background="#412cdd" showInline="true"/>
</KeyPointLabels>
<RectangleLabels name="RectangleLabels" toName="image">
<Label value="cat" background="#FF0000"/>
<Label value="person" background="#0d14d3"/>
</RectangleLabels>
<PolygonLabels name="PolygonLabels" toName="image">
<Label value="cat" background="#FF0000"/>
<Label value="person" background="#0d14d3"/>
</PolygonLabels>
<BrushLabels name="BrushLabels" toName="image">
<Label value="cat" background="#FF0000"/>
<Label value="person" background="#0d14d3"/>
</BrushLabels>
</View>
其中 KeyPointLabels 为关键点标注,BrushLabels 为 Mask 标注,PolygonLabels 为外接多边形标注,RectangleLabels 为矩形标注
选择模型推理
点击 Add Model 添加 test后端推理服务,设置好 SAM 后端推理服务的 URL 就是刚刚的后端地址
并打开 Use for interactive preannotations 并点击 Validate and Save
开始半自动化标注
打开 Auto-Annotation 的开关,并建议勾选 Auto accept annotation suggestions,并点击右侧 Smart 工具,切换到 Point 后,选择下方需要标注的物体标签,这里选择 cat。如果是 BBox 作为提示词请将 Smart 工具切换到 Rectangle。
在猫上点一点就开始自动识别 并出现bbox
标注完点击submit
点击 exprot 导出 COCO 格式的数据集,就能把标注好的数据集的压缩包导出来了。注意:此处导出的只有边界框的标注,如果想要导出实例分割的标注,需要在启动 SAM 后端服务时设置 out_poly=True。
文本标注
这里直接创建项目,然后导入数据
这里需要选择是 List of tasks 还是Time Series,这里我选择的是List of tasks
可以选择自己的任务
这里用Natural Language Processing,选择Named Entity Recognition
原始数据来自
https://github.com/JackHCC/Chinese-Keyphrase-Extraction
本数据集基于采用新浪新闻8个领域(体育,娱乐,彩票,房产,教育,游戏,科技,股票)的新闻数据
第一列:content存放新闻标题和新闻的正文内容
第二列:type是该新闻的话题类型。
在模型训练过程只需要利用csv文件中的content列,第二列是根据提取的关键词来衡量提取的准确性。
可以做标注,将关键词作为识别的实体词
可以看到对应文本的标注管理是非常方便的
文档信息抽取标注
文档信息抽取涉及到图像识别文本检测,文本识别和信息抽取等过程,是图像和文本多个模态的数据标注
创建一个新的项目,填写项目名称、描述,然后选择
optical character recognition
删掉原来的标签
add自己的标签
添加Relation关系类型标签
通过添加两个标签的关系来实现信息抽取的标注
例如
<View>
<Relations>
<Relation value="similar" />
<Relation value="dissimilar" />
</Relations>
<Text name="txt-1" value="$text" />
<Labels name="lbl-1" toName="txt-1">
<Label value="Relevant" />
<Label value="Not Relevant" />
</Labels>
</View>
当然还有更多的模态标注了
比如视频 ,音频,序列的等等数据标注
多模态+智能标注让我们不再为标注烦扰了。