为了实现标注平台智能辅助标注的能力,即上传一个标注任务,开始不提供辅助任务,随着用户标注的进行,后台可以收集一部分的标记数据,然后开启模型训练,并接着提供模型服务功能。然后再收集数据,再不断的训练,然后更新服务端的模型。随着标记的进行,模型的准确度也会越来越高。从而达到随着时间的进行,人工标注会从最开始的从0标注转换成只是对模型预先标注的结果进行校对的目的。

即实现下述目的



其中对应的时序图如下



智能辅助标注时序图

这里要考虑的问题是任务之间独立性,即任务之间的模型不能干扰。

0 申请3(train)+4(inference)个docker(每个docker关联一块gpu),一个分布式存储,并fuse挂载

1 - 运行start.sh,其中开启manager_rpc.py

1.1– 内置运行init函数:

  • i)收集本机ip,可用端口(用于manager_rpc的开启)
  • ii)hostname (后续用于rabbitmq)
  • iii)开启本机rabbitmq-server
  • iv) erlang.cookie(用于后续rabbitmq集群构建)

1.2 基于注册地址,提交本机上述信息,并开启本机manager_rpc

2 基于1.1收集的信息,需要指定哪几台用于train,哪几台用于inference

'''
machines_info:[{'hostname':'...', 'ip':'...', 'port':'...', 'erlang_hash':'...' ,'type':'train'},
{'hostname':'...', 'ip':'...', 'port':'...', 'erlang_hash':'...' ,'type':'train'}
...
{'hostname':'...', 'ip':'...', 'port':'...', 'erlang_hash':'...' ,'type':'inference'}
]
task_category: # 当前任务类别如 “图像分类”
task_extra_info: #当前任务的额外信息如: "多分类”
task_datastore_path当前任务所需要在共享存储上的位置:
映射到每个docker内部位置为:
/home/datastore: (生成下述三个子文件夹,分别为存储服务模型;数据预处理;训练节点恢复模型)
Inference/model-time0
model-time1
Proprecess/
Snapshot/***.ckpt
'''

将上述信息分别发送给这7个manager_rpc的initial

2.1 每个initial接口执行以下行为:

  • i)通过接收的参数检测且ping是否能够ping通,划分好机器和坏机器;将好机器列表的[ip,hostname]写入到各自的/etc/hosts
  • ii)基于好机器,选取当前对应的train_master,inference_master。选取规则为ip最小的那台
  • iii)基于本机检测是否是inference,且非inference_master,则构建rabbitmq集群
  • 停止rabbitmq-server;
  • 修改erlang.cookie
  • 开启rabbitmq-server
  • 向inference_master注册构建集群
  • iv)开启celery,其中celery按照本机的角色,开启对应的脚本,如果是train,则多开一个数据处理celery
if type == 'train':
sp.run(f'( {binpath}/start_data & )', shell=True)
sp.run(f'( {binpath}/start_{type} & )', shell=True)
  • v)返回好机器和坏机器列表,自己节点当前的erlang.cookies,从而保证后台的全局同步,有利于新增节点的erlang.cookies
  initial的返回数据
ans = {'rpc':rpc,
'bad_machines_info':badMachinesInfo,
'good_machines_info':goodMachinesInfo,
'master_train':master_train.get('ip',''),
'master_inference':master_inference.get('ip',''),
'erlang_hash':open('/var/lib/rabbitmq/.erlang.cookie').read(),
}

其中每个celery的配置broker和backend为

BROKER_URL = 'amqp://guest:guest@127.0.0.1:5672'
CELERY_RESULT_BACKEND = 'amqp:// '

Vi)开启对应角色rpc

  • i)传递共享存储路径
  • ii)返回服务角色的rpc

如果是inference_rpc,则自动按照好机器个数,开启fork形式的服务模式,此时集群由rabbitmq-server负责建立

如果是train,则只开启processes=1的主进程服务模式,此时train集群由train_node自己建立,如tensorflow的分布式版本。

master_train节点的Train_rpc接收有标签图片的数据链接,将其通过celery传递给后台worker的train_node,train_node负责下载,预处理等

master_inference节点的Inference_rpc接收无标签图片的数据连接,将其通过celery传递给后台worker的inference_node,inference_node负责下载,预处理,然后将结果通过celery返回,此时每个节点都可以作为master通过整个rabbitmq-server集群将任务分散给其他inference角色的docker.这里的master_inference仅仅是为了rabbitmq的erlang.cookies的同步。

Crowdsourcing[智能辅助标注]的更多相关文章

  1. 【HMS Core 6.0全球上线】Toolkit,您的智能辅助编程好帮手

    HMS Core 6.0已于7月15日全球上线.本次版本中,华为HMS Toolkit向广大开发者推出了智能辅助编程助手SmartCoder,帮助开发者轻松高效地集成HMS Core,开发新功能,创建 ...

  2. Visual Studio 2022有趣又强大的智能辅助编码

    工欲善其事,必先利其器 作为一名.Net开发人员,开发利器当然是首选微软自家的:宇宙第一IDE - Visual Studio了. 这不 VS 2022 正式版已经发布近两个月了,我也体验了近两个月, ...

  3. MTK Android SwitchPreference(设置-智能辅助-导航栏-导航栏可隐藏)

    1.界面布局文件 packages/apps/PrizeSettings/res/xml/navigation_bar_prize.xml ------------------------------ ...

  4. 百度大脑UNIT3.0智能对话技术全面解析

    智能客服.智能家居.智能助手.智能车机.智能政务……赋予产品智能对话能力是提升产品智能化体验.高效服务的重要手段,已经开始被越来越多的企业关注并布局.然而,智能对话系统搭建涉及NLP.知识图谱.语音等 ...

  5. Python交互图表可视化Bokeh:2. 辅助参数

    图表辅助参数设置 辅助标注.注释.矢量箭头 参考官方文档:https://bokeh.pydata.org/en/latest/docs/user_guide/annotations.html#col ...

  6. 设计师别浪费时间啦,快来试试这款Sketch标注插件吧

    随着移动互联网的快速发展,用户的需求也在不断地增大,这对产品经理还有设计师的考验是越来越大.市场环境的变化让我们深信为快不破,但是一个产品的产出需要各个环节的紧密配合,但往往在产品输出过程中,由于分工 ...

  7. 设计师都爱用的UI标注软件有哪些?

    UI标注软件现在是设计师(UI.PM.前端等)必备的一款软件.设计稿是UI设计师日常工作中的产出物之一,当然,做出了高保真设计稿并不意味着你的工作结束了,因为你还得与下游的开发工程师进行对接. 我们经 ...

  8. 曼孚科技:数据标注,AI背后的百亿市场

    ​ 1. 两年前,来自山东农村的王磊成为了一位数据标注员.彼时的他,工作内容非常简单且枯燥:识别图片中人的性别. 然而,一段时间之后,他注意到分配给他的任务开始变得越来越复杂:从识别性别到年龄,从框选 ...

  9. 基于脑波眼电-语音-APP控制的多功能智能轮椅

    前言:这个项目是在2016-2017完成的,做的很浅显,贴出来与大家分享,希望能有帮助. 摘要 本项目主要是针对脑电信号控制的智能轮椅的设计,脑电控制是智能医疗领域的重要研究方向,旨在帮助行动不便但智 ...

随机推荐

  1. 卷积神经网络CNNs的理解与体会

    https://blog.csdn.net/shijing_0214/article/details/53143393 孔子说过,温故而知新,时隔俩月再重看CNNs,当时不太了解的地方,又有了新的理解 ...

  2. Android系统启动流程(一)解析init进程启动过程

    整体流程大致如下:     1.init简介 init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等.in ...

  3. loadrunner录制的时候如何应对验证码的问题解决办法?

    对这个问题,我个人的看法是,基本上可以考虑从三个途径来解决该问题: 1.第一种方法,也是最容易想到的,在被测系统中暂时屏蔽验证功能,也就是说,临时修改应用,无论用户输入的是什么验证码,都认为是正确的. ...

  4. VS发布web应用程序报:无法识别的特性“xmlns:xdt”。请注意特性名称区分大小写 或 未能将文件obj\...复制到obj\...未能找到路径

    问题1:无法识别的特性“xmlns:xdt”.请注意特性名称区分大小写 问题2:未能将文件obj\...复制到obj\...未能找到路径 解决办法:将web项目文件下的obj文件夹从项目中排除,然后再 ...

  5. Linux-lvm逻辑卷管理和提示丢失pv物理卷

    问题描述: 有次在使用lvm扩容的时候,整错了,导致显示如下情况 提示缺少一个pv导致无法继续,pvdisplay的时候查看到unknown 使用pvs查看找到pvname的unknown对应群组ce ...

  6. idea 修改单个文件的 编码格式

  7. 深度学习word embedding猜测性别初探

    根据用户的一些特征数据,如果能推测出用户的性别借此提高产品的服务质量.广告的精准性等都是极好的. 机器学习方法有很多,而且一般都可以达到不错的效果,比如svm或神经网络等. 本文使用的代码参考——&l ...

  8. Linux 小知识翻译 - 「版本号」的命名方式

    包括OS,所有的软件都有版本号信息.一般来说,版本号的增大表示软件的功能增强了或者修正了一些Bug,也就是表示软件更新了. 版本号的命名方式没有统一的标准.每种软件都不一样. 大部分情况下,版本号以「 ...

  9. 三叔学FPGA系列之一:Cyclone V中的时钟资源

    之前的项目中更多的是有师兄提供经验和帮助,追求的是快速上手,所以不管对于硬件电路设计,还是verilog电路编程,甚至是FPGA内部的资源,都没来得及系统地学习,最近在做算法到电路的实现,正好系统学习 ...

  10. MySQL InnoDB Update和Crash Recovery流程

    MySQL InnoDB Update和Crash Recovery流程 概要信息 首先介绍了Redo,Undo,Log Sequence Number (LSN),Checkpoint,Rollba ...