PyTorch实现联邦学习目标检测

torchvision

包含众多流行数据集和图像处理方法
PyTorch实现联邦学习目标检测_第1张图片

目标检测算法

常见的计算机视觉任务可以归纳为图像分类、目标检测、语义分割等。
在图片数据中找到指定的物体,并能够正确定位位置,这就是典型的目标检测任务。

边界框与锚框

边界框用来描述目标位置,是一个矩形框,由左上角坐标和右下角坐标来共同确定。
在运行目标检测算法时,通常会在图像中采样多个候选区域,不同的目标检测算法所使用的采样算法也不一样,而YOLO系列算法则通过定义锚框来提取,锚框是指以每一个像素为中心,生成多个大小和宽高比不同的边界框集合

交并比(Intersection of Union)

当有多个边界框覆盖了图像中的物体时,如果该物体的真实的边界框已知,那么需要有一个衡量预测边界框好坏的指标。在目标检测领域,我们使用交并比来衡量。

基于候选区域的目标检测算法(二阶段)

第一阶段:先产生所有可能的目标候选区
第二阶段:再对候选区做分类和回归

  • R-CNN
  • Fast R-CNN
  • Faster R-CNN

单阶段目标检测

与二阶段不同,它仅仅使用一个卷积神经网络直接预测不同目标的类别与位置,不需要预先选取候选区域,因此,在效果上,基于区域的算法要比单阶段算法准确度高,但速度较慢;相反,单阶段算法比基于区域的算法速度快,但准确率要低。

方法实现

使用Flask-SocketIO作为服务端和客户端之间的通信框架,可以轻松实现服务端和客户端的双向通信。

Flask-SocketIO基础

服务端创建

初始化服务端:

from flask import Flask,render_template
from flask_socketio import SocketIO

app=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 SocketIO

def 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实现联邦学习目标检测_第2张图片

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

Bibliography

你可能感兴趣的:(联邦学习,pytorch,目标检测,联邦学习,隐私保护)