当前位置: 首页 > 编程日记 > 正文

赠书 | 联邦学习如何在视觉领域应用?

前言:

联邦学习是如何应用在视觉领域的?本文将通过一个获得了2020年AAAI人工智能创新应用奖的案例来向大家介绍。

本案例是联邦学习在视觉、物联网、安防领域的实际应用,对分散在各地的摄像头数据,通过联邦学习,构建一个联邦分布式的训练网络,使摄像头数据不需要上传,就可以协同训练目标检测模型,这样一方面确保用户的隐私数据不会泄露,另一方面充分利用各参与方的训练数据,提升机器视觉模型的识别效果。

在2012 年的ImageNet LSVRC 比赛中,AlexNet 凭借15.3% 的top-5 错误率夺得冠军后,以深度学习为代表的算法模型开始在视觉领域占据绝对的主导地位,并且在很多场景任务中达到、甚至超过人类的水平。

比如,2015 年,微软宣布在图像识别领域,以4.94% 的top-5 错误率超过人类的5.1% 水平;Google 最近发表在Nature Medicine上的一项新研究表明,通过AI 视觉算法能够根据患者的胸部CT 图像诊断出早期肺癌,与六位放射科医生相比,AI 的准确度更高,检测到的病例增加了5%,假阳性减少了11%,AUC(Area Under Curve,曲线下方的面积大小)达到94.4%。

除了算法上的不断提升,大数据和硬件算力的发展也促使人工智能在视觉领域出现爆发性的增长,传统的视觉算法处理流程如图1 所示。

图1 中心化训练流程图

我们以目标检测任务为例,它由下面几个主要步骤构成:

首先,将收集来的数据集都集中存放在中心数据库中,并进行集中的图片数据预处理,包括图片数据清理、标注等。

然后,利用这些预处理的数据进行中心化的模型训练。

最后,将训练的模型部署到客户。

但当前的中心化训练模式使得视觉的落地和部署面临许多困难和挑战,具体来说,主要是受下面因素的影响:

数据隐私:在安防、医疗等领域,每一个客户采集的数据都具有高度的隐私性,这些敏感数据在用户没有授权的前提下,通常是被禁止上传的,因此,每一个客户端的数据都无法有效进行共享。另外,机器学习模型的效果非常依赖数据的数量和质量,数据的割裂导致我们只能利用本地的数据进行单点建模,也就是每一个设备单独利用本地数据进行训练,这种单点训练的模型效果也将明显下降。

模型更新:传统的处理方式需要将数据集中上传到中心数据库,进行统一的数据处理和模型训练,然后进行模型的评估和部署。在这个过程中,各个数据源之间,由于网络性能和设备性能的差异,导致数据的同步不一致,整个流程会持续较长的时间,因此对于具有实时响应的场景,这种中心化的训练模式无法满足当前的需求。

数据的不均匀:这种数据的不均匀性体现在每一个数据源得到的数据,它们的数据分布、数据质量和数据大小各不相同。

基于联邦学习的目标检测网络

动机

上面说到了在传统的集中式目标检测训练中的几处不足,对模型提供方和数据提供方来说,安全(数据隐私)威胁是当前最为头疼和亟待解决的问题。

安全的威胁主要来自数据层面,包括:

• 数据提供方的数据源离开本地后,数据提供方就没办法跟踪这部分数据的用途了,也无法保证数据离开本地后不被其他人窃取。

• 一般来说,数据从离开数据提供方,到上传至中心数据库,会经过多个中转地,这就进一步增加了数据泄露的风险和问题排查的难度。

受此影响,当前的模型服务供应商和数据提供方,都急需一种新的模型训练方法:

一方面,保证数据不离开本地,这样能够使数据提供方确信数据的安全;另一方面,模型的训练和性能不会受到影响。

这两点都非常适合用联邦学习来解决,联邦学习的定义和提出的初衷,就是保证数据在不出本地的前提下,联合各参与方数据进行协同训练。

Fedision-联邦视觉产品

前面介绍了利用联邦学习进行目标检测模型训练的动机,一个完整的联邦视觉(目标检测)产品的流程图如图2 所示。本节将对该产品进行概括的描述。

图2 横向联邦视觉产品流程图

图中描述了基于横向联邦学习实现的目标检测模型的工作流程,我们对本案例的基本设置进行如下综述:

• 不失一般性,本案例的联邦网络中的客户参与方共有三个:分别是公司A、B、C。服务端由微众的云服务器提供。

• 为了简化问题,本案例中的三个客户参与方提供的数据分布都比较均衡。

• 每一个客户方部署联邦学习框架后,其主要工作包括:对本地数据进行预处理;发起联邦学习训练任务;参与联邦学习任务;部署联邦学习模型在本地进行预测和推断。

• 服务端由微众的云服务器提供,其主要工作包括:实时监控客户端参与方的连接情况;对上传的客户端模型进行聚合;挑选客户端参与客户端本地训练;上传全局模型。

• 经过联邦学习更新后的全局模型,有两个用途:

第一, 可以分发到当前联邦网络的客户端参与方(即图中的公司A、B、C),进行本地部署预测,使得联邦学习的参与方受益;

第二, 如果新的全局模型效果能达到SOTA 水平,在经过参与方的协商同意后,还可以将新的联邦全局模型以开源或者商业售卖的形式,提供给其他厂商进行部署。

基于联邦学习构建的目标检测视觉模型,相比于集中式的目标检测模型,有下面的优势和好处:

隐私性:从隐私角度,联邦学习确保数据的产生、数据的处理都在本地进行。相比集中式训练,数据的隐私安全大为提高。

效率:从效率上来说,传统的集中式训练,需要等待所有数据提供方的数据上传后,才进行统一的数据处理,再进行集中式的模型训练和模型评估,最后部署新模型,这个流程的等待时间比较长。而联邦学习的训练,由于每一个客户参与方从数据收集到数据处理都独立完成,且都有发起联邦学习的权力,只要发起联邦学习请求,就能进行模型训练,因此每一个客户方部署新模型的速度都加快了许多。

费用:在集中式训练中,将原始数据(图像、视频)上传到服务端会消耗非常多的网络带宽资源。而联邦视觉模型上传的是模型参数,模型参数的传输量要比数据传输量小得多,从而能有效节省网络带宽,节约费用。

方法实现

基于联邦学习实现目标检测产品是横向联邦的一个经典应用。本节我们将给出其详细的实现过程。本案例有基于Flask-SocketIO的Python 实现,也有基于FATE 的实现。最后,我们讨论基于Flask-SocketIO 的Python 实现。读者可以自行查阅基于FATE 的实现。

Flask-SocketIO 基础

在本案例的实现中,我们将使用Python 语言和PyTorch 机器学习模型库,与书中第3章的实现不同,第3章使用普通函数调用的方式模拟服务端与客户端之间的通信,这里使用Flask-SocketIO 作为服务端和客户端之间的通信框架。此外,书中第16 章会具体介绍联邦学习中的通信机制和常用的Python 网络通信包。

通过Flask-SocketIO,我们可以轻松实现服务端与客户端的双向通信,Flask-SocketIO 库的安装非常方便,只需要在命令行中输入下面的命令即可:

服务端创建:先来初始化服务端,下面是初始化服务端的一段简短代码。

socketio.run() 是服务器的启动接口,它通过封装app.run() 标准实现。这段代码是创建socket 服务端最简短的代码,服务器启动后没有实现任何功能,为了能响应连接的客户端请求,我们在服务端中定义必要的处理函数。socketIO 的通信基于事件,不同名称的事件对应不同的处理函数,在处理函数的定义前,用on 装饰器指定接收事件的名称,这样事件就与处理函数一一对应,如下我们创建了一个“my event”事件,该事件对应的处理函数是“test_message”。

事件创建后,服务器处在监听状态,等待客户端发送“my event”的请求。由于socketIO 实现的是双向通信,除了能添加事件等待客户端响应,服务端也可以向客户端发送请求,服务端向客户端发送消息使用send 函数或是emit 函数(对于未命名的事件使用send,已经命名的事件用emit),如上面的代码中,当服务端接收到客户端的“my event”事件请求后,向客户端反向发送“my response”的请求。

客户端:客户端的应用程序设计相对服务端要灵活很多,我们可以使用JavaScript、C++、Java 和Swift 中的任意socketIO 官方客户端库或与之兼容的客户端,来与上面的服务端建立连接。这里,我们使用socketIO-client 库来创建一个client。

先利用socketIO 函数构造一个客户端,构造函数需要提供连接的服务端的IP 和端口信息。然后利用on 连接事件“my response”和处理函数“test_response”,发送“my event”事件,等待服务端的事件响应。

鉴于本书的篇幅限制,我们不在此对Flask-SocketIO 做更多的讲述,读者如果想深入了解Flask-SocketIO 的实现和使用,可以参见Flask-SocketIO 的官方文档。联邦学习的过程是联邦服务端与联邦客户端之间不断进行参数通信的过程,图3 展示了联邦客户端与联邦服务端的详细通信过程。

图3 联邦客户端与联邦服务端的通信过程

接下来,书中分别从服务端角度和客户端角度简要分析其构建和实现过程。


以上内容来自《联邦学习实战(全彩)》一书

本书以应用案例的深入讲解和代码分析为主,兼顾对理论知识的系统总结。全书由五部分共19 章构成。第一部分简要介绍了联邦学习的理论知识;第二部分介绍如何使用Python 和FATE 进行简单的联邦学习建模;第三部分是联邦学习的案例分析,筛选了经典案例进行讲解,部分案例用Python 代码实现,部分案例采用FATE 实现;第四部分主要介绍和联邦学习相关的高级知识点,包括联邦学习的架构和训练的加速方法等;第五部分是回顾与展望。本书适合对联邦学习和隐私保护感兴趣的高校研究者、企业研发人员阅读。


对于联邦学习,你有哪些见解呢?

#欢迎来评论区讨论#

AI科技大本营 将选出三名优质留言

携手【博文视点】送出

《联邦学习实战》一本

截至5月28日14:00点

更多精彩推荐  张一鸣卸任CEO,立下10年之约,期望突破线性延伸从程序媛到启明星辰集团云安全总经理,郭春梅博士揭秘云时代安全攻防之道
王炸不断,半导体巨头们到底在打什么牌?
Python 爬影评,《悬崖之上》好看在哪里?热文 | 卷积神经网络入门案例,轻松实现花朵分类点分享点收藏点点赞点在看

相关文章:

AME_Oracle自带AME审批链详解AME Standard Handler(概念)

2014-05-30 Created By BaoXinJian Oracle 自带了3大类,13个子类的审批链Action Type, 对应了13个标准的AME Standard Handler 1. 按主管层次审批 absolute job level / chains of authority based on absolute job levelfinal approver only / chains of authorit…

c# 中如何定义和接收消息

在C#中目前我还没有找到发送消息的类成员函数,所以只能采用通过调用WIN 32 API 的 SendMessage() 函数实现。由于 SendMessage的参数中需要得到窗体的句柄(handler) ,所以又要调用另一个API FindWindow(), 两者配合使用,达到在不同窗体之间的…

java如何读写json文件

java如何读写json文件 在实际项目开发中,有时会遇到一些全局的配置缓存,最好的做法是配置redis数据库作为数据缓存,而当未有配置redis服务器时,读取静态资源文件(如xml、json等)也是一种实现方式&#xff0…

C#数组篇讲解

数组是我们经常用到的,我来介绍一下:数组是具有相同类型的一组数据。当访问数组中的数据时,可以通过下标来指明。c#中数组元素可以为任何数据类型,数组下标从0开始,即第一个元素对应的下标为0,以后逐个递增…

Spring AOP详解(转载)所需要的包

上一篇文章中,《Spring Aop详解(转载)》里的代码都可以运行,只是包比较多,中间缺少了几个相应的包,根据报错,几经百度搜索,终于补全了所有包。 截图如下: 在主测试类里面…

Mendix 披露低代码方法论,解读真实技术趋势

作者 | 宋慧头图 | 下载于视觉中国出品 | AI 科技大本营(ID:rgznai100)在 2021年初正式宣布进入中国市场之后,Mendix 在近日向媒体重点披露了关于低代码的技术方法论,以及近四个月在中国市场的进展。Mendix 的低代码技术方法论对于…

PHP中foreach详细解读

oreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。有两种语法: foreach (array_expression as $value) statement foreach (array_expression…

Android ViewPager使用具体解释

这是谷歌官方给我们提供的一个兼容低版本号安卓设备的软件包,里面包囊了仅仅有在安卓3.0以上能够使用的api。而viewpager就是当中之中的一个利用它,我们能够做非常多事情,从最简单的导航,到页面菜单等等。那怎样使用它呢&#xff…

实时音视频的超级风口,开发者的机会在哪里?

2021年初因为Elon Musk“带货”而走红的音频社交App Clubhouse,又以肉眼可见的速度跌落神坛,下载量从2月的960 万/月跌至4月的92万/月。不过在5月,Clubhouse终于推出了安卓版,并表示接下来也会对所有用户开放。 另一边&#xff0c…

高可用集群之分布式文件系统

一、分布式文件系统和单机文件系统的区别:单机文件系统的分区只能被一台主机所挂载,不能同时被多台主机挂载使用,因为单机文件系统是通过系统内核层的锁机制来完成的,所以一个系统上可以有多个进程访问,但只能在一个时…

C#中基本知识

当数据转换到asp.net页面时,大部分都是以文本的形式存在的。有时候为了输出,单单使用显示或者隐式转换都是不行的,就需要本节说到的数据转换。 字符串输出: int intAge21; string strAgeintAge.ToString(); 转换DateTime值时&…

索引系列八--索引特性之有序难优化union

----UNION 是需要排序的drop table t1 purge;create table t1 as select * from dba_objects where object_id is not null;alter table t1 modify OBJECT_ID not null;drop table t2 purge;create table t2 as select * from dba_objects where object_id is not null;alter t…

OpenCV 实战:3 步实现图像降噪

来源 | 小白视觉志 头图 | 下载于视觉中国本文将展示如何通过三个简单的步骤来实现降噪。我们将使用机器学习训练的降噪模型,最好的降噪模型之一。程序可以判断图像是否有噪点吗?这应该是一个很有创意的想法,因为我们的降噪模型不够智能&…

一条数字链路连接的端口无法UP及后续相应故障的排除

故障现象1: 运营商检测线路正常,但是端口无法up。 解决办法: 1、翻转端口 2、将端口速率强制为1000M,全双工#speed 1000 #dup full 端口正常UP。 故障现象2: 线路丢包5%。 解决办法: 1、检查端口光功率&…

华为:HarmonyOS 即将开源!

整理 | 晋兆雨出品 | CSDN(ID:CSDNnews)5 月 24 日,在鸿蒙开发者创新大赛颁奖典礼上,华为消费者业务软件部总裁王成录宣布:HarmonyOS 将会开源开放,并在武汉大学等15个学校开展 HarmonyOS 课程。…

C#实现网段扫描

摘要 想必大家对小榕时光等扫描器都非常熟悉了,有没有自己写一个的冲动。最近微软推实施了.NET战略方案,C#是主推语言,你们是否有兴趣用C#来实现对局域网IP地址的扫描,尝试一下自己写的快乐,那么请跟我来。 正文 1.先介…

sbt配置nexus仓库

2019独角兽企业重金招聘Python工程师标准>>> 最近学习Scala,不可避免的要用到sbt。爱折腾的我把原本比较简单的事情搞的复杂了,来来回回搞了好久,记录下来,有同样爱折腾的盆友可以参考下。 sbt在windows下如果是默认安…

C#编程(十二)----------函数

类和结构 类和结构实际上都是创建对象的模板 ,每 个对象都包含数据 ,并 提供了处理和访问数据的方法。 类定义了类的每个对象 (称 为实例 )可 以包含什么数据和功能 。 例如 ,如 果 一 个类表示 一 个顾客 ,就可以定义字段 CustomerID、 FirstName、 LastNane和 Address,以 包含…

Linux很实用的命令查找软件安装目录

#whereis php #which php #php -v 查看版本号 差异自己去体会

Python 库突发 PyPI 危机!

‍‍整理 | 梦依丹出品 | CSDN(ID:CSDNnews)据 BleepingComputer 报道,Python 官方软件包存储库 PyPI 遭受了黑客攻击,攻击者通过注入垃圾邮件包的形式发起了洪水攻击。这些垃圾邮件及软件包用电影、电视节目名称命名&…

scala入门之代码补全

为什么80%的码农都做不了架构师?>>> 在scala的shell命令行中,我们可以使用像Linux那样的代码补全功能。Linux中是使用Tab键补全,scala的shell命令行也是使用这个键。例如,我们在“ssss”这个字符串上调用toUpperCase方…

pycharm第一个Python程序

print ("Hello word!"); 这是Python3.xx的语法!

C#枚举系统安装的所有打印机

在下面的程序中我们将把系统中所安装的打印机用列表框列出来,同时为默认打印机设置缺省值。 在下面的程序中我们用到了两个主要的类,把所有的打印机列表出来用到了PrinterSettings 类,获取系统默认打印机用到了PrintDocument 类,下面我们就动…

编译安装linux内核步骤

编译安装linux内核步骤: 一.获取内核源码 源码网址:www.kernel.org 二.解压内核源码 首先以root帐号登录,然后进入/usr/src子目录。如果用户在安装Linux时,安装了内核的源代码,则会发现一个linux-x.y.z的子目录。该目录…

遏制企业数据泄露之殇,大咖切磋云安全的攻防之道

整理 | 寇雪芹出品 | AI 科技大本营(ID:rgznai100)5 月 7 日,美国最大燃油管道、东部地区油气输送主动脉 Colonial Pipeline 计算机系统被黑客入侵和勒索,导致美国17个州和华盛顿特区进入紧急状态。这次黑客入侵无异于一记重拳&am…

【NOIP2016】愤怒的小鸟

Description Kiana最近沉迷于一款神奇的游戏无法自拔。 简单来说,这款游戏是在一个平面上进行的。 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如y ax^2 bx的曲线,其中a, b是…

“智能”基石:人工智能数据标注与训练,是决定智能时代的第一步

记者 | 邓晓娟 2021年5月20日~23日,由深圳市科学技术协会、深圳市商务局、深圳市福田区人民政府共同指导,深圳市科技开发交流中心、深圳市人工智能行业协会联合主办的2021第二届深圳国际人工智能展开幕式暨智能制造创新高峰论坛在深圳会展中心&#xff0…

C#中对POP3邮件解码

Base64和下面将要介绍的Quoted-Printable都属于MIME (多部分( multi-part)、多媒体电子邮件和 WWW 超文本的 一种编码标准,用于传送诸如图形、声音和传真等非文本数 据)。MIME定义在RFC1341中。 Base64是现今在互联网上应用最多的一种编码…

php 命中算法

function hitted($rate,&$num){if (is_string($rate))$rate ( float ) $rate;if ($rate > 1)throw new ArgumentException(传入的概率值 $rate 必须是 0~1 之间的浮点数或整数(0|1)。, -1);$r 100 * $rate;$v mt_rand(1, 100);$num $v;if ($v < $r)return true;r…

iframe 数据传递

1.使用iframe是父页面与子页面的数据传递2.使用iframe 跳转部分研究处理ios兼容性 2.1 safai 会阻止iframe里的window.open()函数 采用了讲需要跳转的页面传向父页面&#xff0c;让父页面进行处理跳转 //子页面向父页面传递信息 parent.postMessage({变量名: 数据}, *);//子页面…