联邦学习|PyTorch实现联邦学习目标检测

torchvision 包含众多流行数据集和图像处理方法
联邦学习|PyTorch实现联邦学习目标检测
文章图片

目标检测算法 常见的计算机视觉任务可以归纳为图像分类、目标检测、语义分割等。
在图片数据中找到指定的物体,并能够正确定位位置,这就是典型的目标检测任务。
边界框与锚框
边界框用来描述目标位置,是一个矩形框,由左上角坐标和右下角坐标来共同确定。
在运行目标检测算法时,通常会在图像中采样多个候选区域,不同的目标检测算法所使用的采样算法也不一样,而YOLO系列算法则通过定义锚框来提取,锚框是指以每一个像素为中心,生成多个大小和宽高比不同的边界框集合
交并比(Intersection of Union)
当有多个边界框覆盖了图像中的物体时,如果该物体的真实的边界框已知,那么需要有一个衡量预测边界框好坏的指标。在目标检测领域,我们使用交并比来衡量。
基于候选区域的目标检测算法(二阶段)
第一阶段:先产生所有可能的目标候选区
第二阶段:再对候选区做分类和回归

  • R-CNN
  • Fast R-CNN
  • Faster R-CNN
单阶段目标检测
【联邦学习|PyTorch实现联邦学习目标检测】与二阶段不同,它仅仅使用一个卷积神经网络直接预测不同目标的类别与位置,不需要预先选取候选区域,因此,在效果上,基于区域的算法要比单阶段算法准确度高,但速度较慢;相反,单阶段算法比基于区域的算法速度快,但准确率要低。
方法实现 使用Flask-SocketIO作为服务端和客户端之间的通信框架,可以轻松实现服务端和客户端的双向通信。
Flask-SocketIO基础
服务端创建 初始化服务端:
from flask import Flask,render_template from flask_socketio import SocketIOapp=Flask(__name__) app.config['SECRET_KEY']='secret' socketio=SocketIO(app) if __name__ == '__main__': socketio.run(app)

为了能响应连接的客户端请求,在服务端定义处理函数
@socketio.on('my event') def test_message(message): emit('my response',{'data':message['data']})

FedAvg
def updata_weights(self,client_weights,client_sizes): #clients_weight存储每一个客户端上传的模型参数列表 #clients_sizes存储每一个客户端的本地样本数量 total_size=np.sum(client_sizes) new_weights=[np.zeros(param.shape) for param in client_weights[0]] #FedAvg集合 for c in range(len(client_weights)): for i in range(len(new_weights)): new_weights[i]+=(client_weights[c][i]*client_sizes[c]/total_size) self.current_weights=new_weights

客户端创建 使用socketIO-client创建client
from socketIO_client import SocketIOdef test_response(data): print(data) sio=SocketIO(host,port,None) sio.on('my_response',test_response) sio.emit('my event') sio.wait()

PyTorch基础 Tensor是PyTorch的基础数据结构,是一个高维的数组,其作用类似于Numpy中的ndarray。
pip list 查看python包和版本

联邦学习|PyTorch实现联邦学习目标检测
文章图片

#查询文件默认存储路径 import os print(os.path.abspath('.'))

Bibliography

    推荐阅读