一种基于服务器-嵌入式协同的深度学习目标检测系统
技术领域
本申请设计服务器端训练与嵌入式端部署技术领域,尤其涉及一种基于服务器-嵌入式协同的深度学习目标检测系统。
背景技术
深度学习是基于数据驱动的机器学习算法,具备超强的特征自提取能力,在图像目标检测方面取得的效果,尤其在面向多种类、多尺度、多角度目标检测方面,远远超过传统机器学习方法。随着物联网时代的来临和边缘计算的兴起,深度学习目标检测网络逐渐从服务器端向嵌入式端发展,实现万物互联和万物感知。
深度学习的本质是大数据支撑下,由多层人工神经网络堆叠形成的信号处理系统,具有参数数目多,计算复杂度高等特点。深度学习的训练和运行都需要大量的运行空间与并行计算设备。2012年AlexNet开启这一轮深度学习热潮的时候,网络只有8层,但就算只有8层也需要大量的计算。2016年153层的ResNet以及最近甚至出现了上千层的网络结构,需要更强大的计算资源来支撑网络训练。同时深度学习训练的一个特点是具有很强的迭代性,即网络结构确定后,可以周期性地通过增加训练数据而提高模型的泛化能力。这个迭代周期越短,模型更新的速度越快,就能获得更好的效果和更快的产品更新。因此,深度学习网络模型的快速获取需要服务器端强大计算资源的支持。
服务器端由于其强大的计算能力适合深度学习网络模型的训练和学习,但是由于其体积庞大,功耗高,难以快速的部署和应用到目标检测识别场景当中。边缘计算的发展使得深度学习模型快速部署成为可能。嵌入式设备由于体积小,功耗低可以应用到机载、星载目标识别场景中,但是由于其计算资源受限,难以达到实时检测,因此需要服务器-嵌入式协同以达到实时目标检测识别,在服务器端训练深度模型,并加入模型压缩算法,在保证模型精度不损失的前提下,实现模型参数和计算量的大幅度压缩,同时结合嵌入式平台特性,实现深度学习网络推理加速。
目前服务器端深度学习网络模型训练、模型压缩以及嵌入式平台加速相互独立,缺少一个可以打通三者数据通路的目标检测系统,并且各个模块并未封装成易于操作的软件界面,增加了快速应用的难度,为了降低深度学习模型训练、压缩以及嵌入式部署的门槛,需要一套“服务器-嵌入式”协同的深度学习目标检测系统,其采用界面可视化方式降低深度学习目标识别网络学习门槛,帮助非深度学习人员可快速上手应用,以便达到深度学习目标检测应用快速落地的目的。
发明内容
本发明提供一种基于服务器-嵌入式协同的深度学习目标检测系统,解决现深度学习网络模型由服务器端的训练到嵌入式端的快速部署问题,可在服务器端实现深度模型的训练以及模型,使深度模型满足嵌入式计算资源要求,同时在根据嵌入式特性实现深度模型的快速部署,从而缩短深度目标检测应用落地时间和降低应用门槛。
本发明通过以下技术方案实现:
一种基于服务器-嵌入式协同的深度学习目标检测系统,所述系统包括服务器端和嵌入端,所述服务器端包括知识库、训练模型、测试结果统计分析和计算资源监控模块,所述知识库包括数据管理模块,所述数据管理模块为深度学习网络训练提供数据支撑;
所述训练模型包括深度学习网络训练模块和模型压缩模块,所述深度学习网络训练模块实现服务器端模型训练,所述模型压缩模块实现对网络模型的压缩从而满足算力要求;
所述测试结果统计分析包括模型测试模块,所述模型测试模块用于对训练和压缩后的模型进行测试;
所述计算资源监控模块用于对系统的CPU、GPU资源进行实时监控,便于用户根据实际情况合理利用计算资源,达到快速训练模型的目的;
所述嵌入端包括主控制器ARM和协处理器FPGA,所述主控制器ARM负责外部图像输入、图像预处理、NMS算法、叠加检测信息和图像输出任务;所述协处理器FPGA负责深度网络推理中的卷积层、捷径层和上采样层加速。
进一步的,所述数据管理模块将收集的数据通过服务器端深度学习训练软件上传至服务器中,在数据上传时需要添加数据的目标类型、数据集创建人、数据集属性以及数据创建时间属性,从而实现数据集间的区分;对上传的图像数据进行目标标记,支持矩形框目标标记,可调整其大小以及修改操作,生成深度学习网络训练所需的标记文件;数据集管理,支持生成的图像数据集的增加、删除、修改以及查询的常规操作,可通过关键字进行目标数据集查询。
进一步的,所述深度学习网络训练模块通过以下步骤实现,
步骤S101:创建训练任务,根据应用需要创建训练任务,填写任务创建人、创建日期及任务简述;
步骤S102:深度学习算法选择及参设设置,根据应用需要,选择合适的深度学习算法以及训练数据集,并设置训练参数,系统给定默认值,如不进行参数设定,以默认值进行深度学习网络训练;
步骤S103:可视化训练过程,显示坐标epoch和纵坐标loss之间的关系,可以实时观察纵坐标loss曲线下降情况,当纵坐标loss曲线震荡不在下降或显示异常时,可及时关闭训练进程,重新调整算法参数重新开始训练;
步骤S104:增量训练模块,支持在原有模型基础上进行微调训练,提升模型泛化能力和性能;
步骤S105:模型管理,将训练完成的模型进行统一管理,模型与训练任务想关联,可根据应用场景不同选取不同的训练模型,同时为模型压缩和嵌入式模型部署提供支撑。
进一步的,所述模型压缩模块通过以下步骤实现压缩,
步骤S201:稀疏化训练模型及模型剪枝,在训练过程中对需要稀疏化的卷积层后的BN层参数施加L1范数惩罚,从而使参数具有结构化稀疏的特点,为下一步裁剪通道做准备;剪枝过程根据模型中卷积层与BN层的对应关系,剪去对应BN层中参数小的卷积层的通道,由浅及深地对每一层剪枝,从而形成通道剪枝后的新模型;
步骤S202:采用动态量化训练,实现对模型参数量化,大大降低模型参数计算量,从而满足嵌入式平台的算力要求。
进一步的,所述步骤S201具体为,
步骤S201.1:稀疏化训练,首先将原始网络中的BN层提取,放入BN层列表;然后,置训练超参数进行稀疏化训练;
步骤S201.2:模型剪枝,首先,从前到后遍历模型,找出每一层卷积层之后对应的BN层;然后对BN层中的γ参数进行全局排序,根据剪枝比率计算γ参数的剪枝阈值,超过阈值将改该层剪枝掉;最后从前到后遍历剪枝信息表,对每一块进行剪枝,根据各层剪枝后的剩余通道数重新定义网络模型,将剪枝后的新模型参数保存;
步骤S201.3:模型微调,在数据集上对剪枝后的模型继续训练,直到模型精度不在提升为止。
进一步的,所述步骤S202具体为,
步骤S202.1:构建常规浮点计算图,在计算图中卷积计算的相应位置插入伪量化模块,将权重和激活值量化为8位整型;
步骤S202.2:动态量化训练,同普通训练一样训练模型直至收敛,在量化训练中,需要对卷积层权重和激活值进行量化;量化训练中,输入仍采用未量化的浮点数,卷积层参数经伪量化模块量化后参与浮点数运算;中间卷积过程均为浮点数运算,经过激活函数后的激活值再经伪量化模块量化;
步骤S202.3:量化推理,保存卷积层权重量化参数和激活值的量化参数,缩放系数和零点,将融合后的偏置参数量化为32位整型,取缩放系数为卷积层权重和输入的缩放系数之积,零点=0。
进一步的,所述模型测试模块采用指标量化分析模型的精度是否能满足要求,选择已标记的图像数据上传到系统,作为模型的测试数据;选择测试数据集,选择待测试的深度学习模型,并选择评价指标;模型测试结果实时显示,最后输出模型测试报告。
进一步的,所述主控制器ARM和协处理器FPGA的架构数据流,包括以下步骤,
步骤S301:采用ARM读取输入图像,对图像数据进行预处理,处理后的图像存储在DDR4中,从片外Flash中读取模型结构文件,对网络模型进行解析,解析后的网络结构存储在DDR4中;
步骤S302:从片外Flash中读取量化模型权重文件到DDR4中,完成模型加载过程,ARM对输入特征图进行量化操作,ARM通过AXI_S接口实现DDR4与FPGA片上BRAM存储区之间的数据传输;
步骤S303:ARM读取每层的网络结构,通过AXI_S接口总线传输特征图和权重数据,计算结果经AXI_S接口写回DDR4内,经传输计算后,得出最后的结果特征图,在ARM端对结果进行解析、NMS算法和图像后处理操作,完成一次深度学习网络的目标检测。
进一步的,所述协处理器FPGA的加速网络层,包括以下步骤,
步骤S401:对卷积层进行加速计算,计算模块的输入特征图存储在寄存器阵列中,权重数据存储在权重缓存区,对各个维度的乘法运算进行全并行展开,沿一个维度累加运算结果,运算结果通过加法树机制实现快速相加,单块特征图的计算结果累加到输出缓存端;
步骤S402:对捷径层进行加速计算,捷径层为两张特征图的对位相加运算,沿一个维度对运算进行并行展开,将第一次输入的数据加载到输出缓存端,读取第二张需要与之相加的特征图到输出缓存端,与输出缓存端存储的特征图对位相加,沿一个维度并行展开,输出结果保存在输出缓存端;
步骤S403:对上采样层进行加速计算,在深度学习网络中,计算模块的输入特征图存储在输入缓存端,计算模块沿输入通道维度重复读取数据,数据共重复读取两次,将数据按顺序存储至输出缓存端,计算过程实现维度的展开,重复读取两次后读取下一区域的数据。
步骤S404:通过乒乓操作的方式实现流水,交替将输出缓存端的数据写回DDR4中,对计算卷积的结果进行写回时,对输出缓存端的值进行Leaky_RELU操作;最大化利用带宽,采用多通道写回的方法,FPGA端通过4个AXI口写回计算后的特征图数据,写回单块特征图数据时,沿通道维度对特征图进行4等分。
本发明的有益效果是:
1、本发明提出了基于“服务器-嵌入式”协同的深度学习目标检测方案,打通了服务器训练到嵌入式平台部署的数据通路,可以降低深度学习网络的训练难度、加快模型在嵌入式平台的速度、加快目标检测在应用场景的快速部署。
2、形成了服务器端的深度学习训练软件平台,集数据管理、数据上传、数据在线标注、网络训练以及模型测试等功能于一体,实现了深度学习网络训练的全流程流水化,便于非深度学习研究人员的快速上手。
3、本发明在服务器端软件平台加入了模型压缩功能,由于嵌入式平台计算资源受限,现有的模型参数量庞大,无法直接部署,本发明提出了基于通道剪枝和参数量化的模型压缩方法,可以实现模型参数量和计算量的大幅度降低,从而满足嵌入式平台的算力要求。
4、本发明在嵌入式端采用ARM+FPGA架构,可以实现深度学习网络数据流打通以及FPGA网络层加速,其输入缓存端和输出缓存端采用多通道并行读取写回的方式代替传统的单通道读写方式,最大化利用了Zynq芯片的带宽,其输入缓存端设计双缓存区和寄存器阵列,实现高效的数据复用,成倍提高带宽,实现功能相比传统加速器更适合当今主流的网络结构且更为多样化。
附图说明
图1本发明的总体技术方案结构示意图。
图2本发明的服务器端流程示意图。
图3本发明的服务器端图像数据上传示意图。
图4本发明的服务器端图像数据上传数据在线标记示意图。
图5本发明的服务器端可视化训练示意图。
图6本发明的服务器端模型测试示意图。
图7本发明的服务器端资源监控示意图。
图8本发明的ARM+FPGA嵌入式深度学习目标检测示意图。
具体实施方式
下面将结合本发明实施例中的附图对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
一种基于服务器-嵌入式协同的深度学习目标检测系统,所述系统包括服务器端和嵌入端,所述服务器端包括知识库、训练模型、测试结果统计分析和计算资源监控模块,所述知识库包括数据管理模块,所述数据管理模块为深度学习网络训练提供数据支撑,因为深度目标检测网络训练需要大量已标记目标图像数据;
所述训练模型包括深度学习网络训练模块和模型压缩模块,所述深度学习网络训练模块实现服务器端模型训练,所述模型压缩模块实现对网络模型的压缩从而满足算力要求,因为深度学习网络优异的性能,得益于其强大的特征自提取能力,网络越宽越深,其特征表达能力越强,目标检测识别效果越好。但是网络越深,模型参数与计算量越大,在嵌入式计算资源受限的情况下,难以满足一些对实时性要求高的应用场景;
所述测试结果统计分析包括模型测试模块,所述模型测试模块用于对训练和压缩后的模型进行测试;
所述计算资源监控模块用于对系统的CPU、GPU资源进行实时监控,便于用户根据实际情况合理利用计算资源,达到快速训练模型的目的;
所述嵌入端包括主控制器ARM和协处理器FPGA,根据深度学习网络结构,分配ARM和FPGA的计算任务,所述主控制器ARM负责外部图像输入、图像预处理、NMS算法、叠加检测信息和图像输出任务;所述协处理器FPGA负责深度网络推理中的卷积层、捷径层和上采样层加速。
进一步的,所述数据管理模块将收集的数据通过服务器端深度学习训练软件上传至服务器中,在数据上传时需要添加数据的目标类型、数据集创建人、数据集属性以及数据创建时间属性,从而实现数据集间的区分;对上传的图像数据进行人工挑选,将图像质量不符合的进行人工删除,从而保证数据质量;对上传的图像数据进行目标标记,支持矩形框目标标记,可调整其大小以及修改操作,生成深度学习网络训练所需的标记文件;通过数据增广方法选择,由于深度学习训练需要大量的数据支撑,而由于应用场景不同,包含目标数据数量可能不足。因此,可以采用数据增广方法,如旋转、裁剪、光照变换等实现数据量的倍增,从而提升深度学习网络模型性能;数据集管理,支持生成的图像数据集的增加、删除、修改以及查询的常规操作,可通过关键字进行目标数据集查询。
进一步的,所述深度学习网络训练模块通过以下步骤实现,
步骤S101:创建训练任务,根据应用需要创建训练任务,填写任务创建人、创建日期及任务简述,以便于对任务进行查询与追溯;
步骤S102:深度学习算法选择及参设设置,根据应用需要,选择合适的深度学习算法以及训练数据集,并设置训练参数,如学习率、迭代次数、衰减率、损失函数等,系统给定默认值,如不进行参数设定,以默认值进行深度学习网络训练;
步骤S103:可视化训练过程,显示横坐标epoch和纵坐标loss之间的关系,可以实时观察纵坐标loss曲线下降情况,当纵坐标loss曲线震荡不在下降或显示异常时,可及时关闭训练进程,重新调整算法参数重新开始训练,节省训练时间;
步骤S104:增量训练模块,支持在原有模型基础上进行微调训练fune-training,提升模型泛化能力和性能,节省模型的训练时间;
步骤S105:模型管理,将训练完成的模型进行统一管理,模型与训练任务想关联,可根据应用场景不同选取不同的训练模型,同时为模型压缩和嵌入式模型部署提供支撑。
进一步的,所述模型压缩模块通过以下步骤实现压缩,
步骤S201:稀疏化训练模型及模型剪枝,在训练过程中对需要稀疏化的卷积层后的BN层参数施加L1范数惩罚,从而使参数具有结构化稀疏的特点,为下一步裁剪通道做准备;剪枝过程根据模型中卷积层与BN层的对应关系,剪去对应BN层中参数小的卷积层的通道,由浅及深地对每一层剪枝,从而形成通道剪枝后的新模型;
步骤S202:采用动态量化训练,实现对模型参数量化,大大降低模型参数计算量,从而满足嵌入式平台的算力要求。
进一步的,所述步骤S201具体为,
步骤S201.1:稀疏化训练,首先将原始网络中的BN层提取,放入BN层列表;然后,置训练超参数进行稀疏化训练;
步骤S201.2:模型剪枝,首先,从前到后遍历模型,找出每一层卷积层之后对应的BN层;然后对BN层中的γ参数进行全局排序,根据剪枝比率计算γ参数的剪枝阈值,超过阈值将改该层剪枝掉;最后从前到后遍历剪枝信息表,对每一块进行剪枝,根据各层剪枝后的剩余通道数重新定义网络模型,将剪枝后的新模型参数保存;
步骤S201.3:模型微调,在数据集上对剪枝后的模型继续训练,直到模型精度不在提升为止。
进一步的,所述步骤S202具体为,
步骤S202.1:构建常规浮点计算图,在计算图中卷积计算的相应位置插入伪量化模块,将权重和激活值量化为8位整型;
步骤S202.2:动态量化训练,同普通训练一样训练模型直至收敛,在量化训练中,需要对卷积层权重和激活值进行量化;量化训练中,输入仍采用未量化的浮点数,卷积层参数经伪量化模块量化后参与浮点数运算;中间卷积过程均为浮点数运算,经过激活函数后的激活值再经伪量化模块量化;
步骤S202.3:量化推理,保存卷积层权重量化参数和激活值的量化参数,缩放系数和零点,将融合后的偏置参数量化为32位整型,取缩放系数为卷积层权重和输入的缩放系数之积,零点=0。
进一步的,所述模型测试模块采用指标量化分析模型的精度是否能满足要求,选择已标记的图像数据上传到系统,作为模型的测试数据;选择测试数据集,选择待测试的深度学习模型,并选择评价指标,如IOU、MAP等;模型测试结果实时显示,最后输出模型测试报告。
进一步的,所述主控制器ARM和协处理器FPGA的架构数据流,包括以下步骤,
步骤S301:采用ARM读取输入图像,对图像数据进行预处理,处理后的图像存储在DDR4中,从片外Flash中读取模型结构文件,对网络模型进行解析,解析后的网络结构存储在DDR4中;
步骤S302:从片外Flash中读取量化模型权重文件到DDR4中,完成模型加载过程,ARM对输入特征图进行量化操作,ARM通过AXI_S接口实现DDR4与FPGA片上BRAM存储区之间的数据传输;
步骤S303:ARM读取每层的网络结构,通过AXI_S接口总线传输特征图和权重数据,计算结果经AXI_S接口写回DDR4内,经传输计算后,得出最后的结果特征图,在ARM端对结果进行解析、NMS算法和图像后处理操作,完成一次深度学习网络的目标检测。
进一步的,所述协处理器FPGA的加速网络层,包括以下步骤,
步骤S401:对卷积层进行加速计算,计算模块的输入特征图存储在寄存器阵列中,权重数据存储在权重缓存区,对各个维度的乘法运算进行全并行展开,沿一个维度累加运算结果,运算结果通过加法树机制实现快速相加,单块特征图的计算结果累加到输出缓存端;
步骤S402:对捷径层进行加速计算,捷径层为两张特征图的对位相加运算,沿一个维度对运算进行并行展开,将第一次输入的数据加载到输出缓存端,读取第二张需要与之相加的特征图到输出缓存端,与输出缓存端存储的特征图对位相加,沿一个维度并行展开,输出结果保存在输出缓存端;
步骤S403:对上采样层进行加速计算,在深度学习网络中,计算模块的输入特征图存储在输入缓存端,计算模块沿输入通道维度重复读取数据,数据共重复读取两次,将数据按顺序存储至输出缓存端,计算过程实现维度的展开,重复读取两次后读取下一区域的数据。
步骤S404:通过乒乓操作的方式实现流水,交替将输出缓存端的数据写回DDR4中,对计算卷积的结果进行写回时,对输出缓存端的值进行Leaky_RELU操作;最大化利用带宽,采用多通道写回的方法,FPGA端通过4个AXI口写回计算后的特征图数据,写回单块特征图数据时,沿通道维度对特征图进行4等分。
实施例2
本发明应用于机载下视目标检测场景中,可以实现机载下视目标的模型的服务器端快速训练与压缩,压缩后的模型快速部署到Xilinx ZCU102平台,实现了嵌入式端的机载下视目标实时检测,具体包括以下步骤:
步骤1:收集机载下视目标数据,包含6类目标,分别是飞机、港口、油罐、舰船、机场以及桥梁。<飞机>这一类别的目标,共收集源图像760幅。分辨力为0.5m。港口源数据共收集包含<港口>这一类目标的图像1121幅,分辨力为0.5m。收集的<油罐>目标图像为高分辨力图像,共900幅,分辨力为0.5m。收集的<舰船>目标图像为高分辨力图像,共533幅,分辨力为0.5m。对于<机场>这一目标类型的数据,收集了分辨力为6m以上的机场数据共500张。对于<桥梁>这一目标,共收集源数据558张,分辨力都在6m及以上;
表1机载下视数据集
步骤2:将收集的数据上传至服务器深度学习训练平台,并对图像数据进行在线标记,生成用于深度学习模型训练的标准数据集;
步骤3:根据应用需要,本发明选择基于Mobilenet V2的YOLO V3网络,选择ImageNet作为与训练模型,采用标准的数据增强方法,包括随机剪裁、透视变换和水平翻转,额外采用了mixup数据增强方法对标记的机载下视目标数据进行增广;
步骤4:采用Adam优化算法,余弦退火的学习率策略,初始学习率为4e-3,batchsize大小为16。稀疏化训练中,设置稀疏化系数为0.01。对训练的模型进行通道剪枝,压缩模型参数量;
步骤5:对剪枝后模型继续使用量化训练算法进行量化。采用int8量化,使用剪枝后模型在机载下视数据集上量化训练,超参数采用同样的设置。在10轮后冻结BN层参数,在15轮后冻结量化参数。
步骤6:服务器端深度学习训练平台输出权重参数文件和网络结构文件,以便于部署到嵌入式平台中;
步骤7::根据YOLOv3网络结构,分配ZCU102中ARM和FPGA的计算任务,采用ARM作为主控制器,采用FPGA作为协处理器,ARM负责外部图像输入、图像预处理、NMS算法、叠加检测信息、图像输出任务,YOLOv3网络推理中的路由层和YOLO层;FPGA负责YOLOv3网络推理中的卷积层、捷径层和上采样层。
步骤8:YOLOv3算法流程在嵌入式端的实现以ARM为主处理器,FPGA为协处理器,DDR4作为主存储器,BRAM作为数据缓冲器。程序启动,在ARM部分中,读取输入图像,对图像数据进行预处理,处理后的图像存储在DDR4中。从片外Flash中读取模型结构文件,对网络模型进行解析,解析后的网络结构存储在DDR4中。从片外Flash中读取量化模型权重文件到DDR4中,完成模型加载过程。ARM端对输入特征图进行量化操作,通过AXI4接口实现DDR4与FPGA片上BRAM存储区之间的数据传输。ARM端读取每层的网络结构,通过AXI4总线传输特征图和权重数据,计算结果经AXI4写回DDR4内。YOLOv3网络共有106层,经106次传输计算后,得出最后的结果特征图,在ARM端对结果进行解析、NMS算法和图像后处理等操作。经上述过程,完成一次YOLOv3网络的目标检测功能。
步骤9:嵌入式平台实时输出机载下视目标检测结果,包括目标类别、目标位置以及目标置信度信息。