LabelStudio 中使用智能标注(预标注)的大致流程如下:
ps:这里说的预标注/自动标签/智能标注都是指:让 ML/AI 模型自主预测标签,然后人工进行审查。
智能标注流程:
2)Label Studio 将请求发送到 ML 后端
4)预测被加载到 LabelStudio UI 中展示
1. 准备模型服务 要是有模型进行智能标注,自然得先部署一个模型服务才行。
需要注意的是:对接到 Label Studio 的模型服务需要满足一定规范才行。
可以通过Label Studio ML backend SDK[1] 将我们自己的模型服务转换为一个 Web 服务,然后将该 Web 服务连接到 LabelStudio 以实现智能标注。
本次演示,直接使用内置的 yolo 服务做为 Backend。
1.1 自定义模型服务 官方文档:Write your own ML backend[2]
安装 repo gitclonehttps://github.com/HumanSignal/label-studio-ml-backend.git cdlabel-studio-ml-backend/ pip install -e .初始化项目 label-studio-ml create my_ml_backend项目结构如下:
my_ml_backend/ ├── Dockerfile ├── .dockerignore ├── docker-compose.yml ├── model.py ├── _wsgi.py ├── README.md ├── requirements-base.txt ├── requirements-test.txt ├── requirements.txt └── test_api.py只需要关注以下几个文件:
实现自定义预测逻辑 model.py中有一个继承自LabelStudioMLBase的 class,该 class 实现了 Label Studio 通信所需的方法。我们可以重新其中的predict方法实现自己的预测逻辑。
def predict(self, tasks, context, **kwargs): """Make predictions for the tasks.""" returnpredictions这样我们就实现了自己的 ML Backend.
1.2 使用内置服务 这里我们使用 LabelStudio 提供的 Yolo 服务作为 Backend,直接使用即可。 构建镜像 先 clone 该项目
git clone https://github.com/HumanSignal/label-studio-ml-backend然后使用 yolo example 构建镜像
cdlabel-studio-ml-backend cdlabel_studio_ml/examples/yolo/ # 构建镜像 DOCKER_BUILDKIT=1 docker build -t humansignal/yolo:v0 -f Dockerfile .启动服务 使用上一步构建镜像启动服务,完整 yaml 如下:
apiVersion:apps/v1 kind eployment metadata: name:yolo labels: app:yolo spec: replicas:1 selector: matchLabels: app:yolo template: metadata: labels: app:yolo spec: containers: -name:yolo image:humansignal/yolo:v0 ports: -containerPort:9090 env: -name:BASIC_AUTH_USER value:"" -name:BASIC_AUTH_PASS value:"" -name OG_LEVEL value:"DEBUG" -name:ANY value:" ARAMETER" -name:WORKERS value:"1" -name:THREADS value:"8" -name:MODEL_DIR value:"/data/models" -name YTHONPATH value:"/app" -name ABEL_STUDIO_URL value:"http://host.docker.internal:8080" -name ABEL_STUDIO_API_KEY value:"" -name:ALLOW_CUSTOM_MODEL_PATH value:"true" -name EBUG_PLOT value:"false" -name:MODEL_SCORE_THRESHOLD value:"0.5" -name:MODEL_ROOT value:"/app/models" volumeMounts: -name:data-volume mountPath:/data -name:models-volume mountPath:/app/models -name:cache-volume mountPath:/app/cache_dir volumes: -name:data-volume emptyDir:{} -name:models-volume emptyDir:{} -name:cache-volume emptyDir:{} --- apiVersion:v1 kind:Service metadata: name:yolo-service spec: type:NodePort# 根据需求可改为 LoadBalancer selector: app:yolo ports: -protocol:TCP port:9090 targetPort:9090 nodePort:30090# NodePort 范围建议 30000-32767修改配置 启动前,需要修改部分配置,主要为环境变量,包括 LabelStudio 的信息 URL 和 API Key 需要修改为真实值,其他可以保持原状。
-name ABEL_STUDIO_URL value:"http://172.20.150.246:30808" -name ABEL_STUDIO_API_KEY value:"887037f586e2021f345ed062c9d119d07afb8c89"其中 API Key 获取方式如下:
启动 然后 apply 即可
kubectl apply -f yolo-ml.yaml验证 查看运行情况
[root@label-studio-k8s ~]# kubectl get po NAME READY STATUS RESTARTS AGE yolo-9b48946d4-pz75v 1/1 Running 0 9m30s [root@label-studio-k8s ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE yolo-service NodePort 10.100.45.164 <none> 9090:30090/TCP 9m33s验证
[root@label-studio-k8s ~]# curl http://10.100.45.164:9090/health {"model_class":"YOLO","status":"UP"}至此,模型服务启动成功。
2. 体验智能标注 2.1 创建项目 创建 PreLabel 项目用于测试智能标注。
2.2 ML Backend 接入到 Label Studio 在 Project Setting 中 Model 栏目中添加上一步中启动的模型
ps:LabelStudio 和模型服务在同一个集群,这里直接使用 ClusterIP 对接。
2.4 配置标注模版(重要) 使用不同的 ML Backend、不同的数据类型等等对于的标签都不相同,具体参考官方文档:Configure labeling interface[3]
这里使用图片问题识别 + yolo 模型,配置标注模板为以下格式
<View> <Imagename="image"value="$image"/> <RectangleLabelsname="label"toName="image"model_score_threshold="0.25"> <Labelvalue="Car"background="blue"predicted_values="jeep,cab,limousine,truck"/> </RectangleLabels> </View>其中的 values 选项可以调整,但是标签一定要使用 RectangleLabels 。
比如这里将 value 修改为 Cat、Dog 和 Other 三个
<View> <Imagename="image"value="$image"/> <RectangleLabelsname="animal_label"toName="image"model_score_threshold="0.25"> <Labelvalue="Cat"background="green"predicted_values="kitten,tabby,persian"/> <Labelvalue="Dog"background="orange"predicted_values="puppy,retriever,husky"/> <Labelvalue="Other"background="gray"predicted_values="bird,rabbit,unknown"/> </RectangleLabels> </View>效果如下
2.5 开始智能标注 选中 Task 点击 Retrieve Predictions 触发任务
过一会就会生成预测结果,查看
模型预测结果为 0.95 概率是 Cat,然后选择结果也是 Cat,并且框出了范围。
我们需要做的就是检查作业了:
从而极大的减少工作量。
3. 小结 LabelStudio 接入 ML Backend 即可实现智能标注,由模型服务先完成标注,然后人工检查,从而减少工作量。
大致流程如下:
可以基于Label Studio ML backend SDK[4] 实现自己的 ML Backend,从而实现自己的模型服务完成智能标注。
智能标注详细流程:
2)Label Studio 将请求发送到 ML 后端
4)预测被加载到 LabelStudio UI 中展示