[0022] 以下结合附图对本发明作进一步说明。
[0023] 如图1‑3所示,本发明包括以下步骤:
[0024] 步骤1:获取基础数据,其中包括水面物体的类别,数量,物体的位置描述,物体状态描述。
[0025] 步骤2:数据清洗以及样本预处理。
[0026] 当数据确定以后,为了后续处理的方便,首先对数据进行预处理。采用的数据是开源的Singapore Maritime Dataset,从中选取了100000张图片,其中60000张图片用来做训练集,30000张图片用来做验证集,剩下的1000张图片用于做测试集。所有的图片统一调整到300*300的大小,并且按照VOC数据的格式生成标注文件。
[0027] 步骤3:设计训练SSD网络。
[0028] ①考虑到原有的SSD网络采用的是VGG主干网络,计算量庞大,训练速度慢。在这里对VGG主干网络进行一部分删减。主干网络每一层的输出过于庞大,统一修改为原来的二分之一。主干网络中去掉卷积3,4,5层的中间层。去掉最后一层的全连接层。经过删减的SSD网络与原有的SSD网络相比,计算量大幅度降低,算法的输出保持不变,其精度相比原有的SSD稍有降低,但是不影响,后续会经过融合提高检测精度。该算法计算目标的位置,类别和置信度,目标的位置指的是目标物体框在图片中的位置,主要有四个参数x,y,w,h。分别表示目标物体框的左上角坐标,以及物体框的高度和宽度。
[0029] ②根据标注信息设置不同提取框的特征层的aspect_ratio(长宽比)。
[0030] ③根据实际需要,把步骤2生成的样本,生成用于训练的lmdb格式。为了保证训练的精度,这里采用正负样本的比例为1:3
[0031] ④总体的损失函数设置如下
[0032]
[0033] 其中,c,l,g,x分别表示属于某个类别的概率,预测框,真实框,以及预测框与真实框匹配的标记(匹配为1,否则为0);N表示的是与标注框匹配的数量;Lloc(x,k,g)为定位损失函数;Lconf(x,c)表示分类损失函数;α表示两者之间的权重。
[0034] ⑤送入样本进行训练,使用Caffe‑SSD进行训练,得到训练模型。
[0035] ⑥将测试图片送入训练好的模型,并通过NMS(非极大值抑制算法)得到物体的位置,类别和置信度。
[0036] 步骤4:设计训练Faster‑RCNN网络。
[0037] Faster—RCNN网络主要用于补偿SSD网络所造成的精度缺失的问题。这里采用原始的Faster—RCNN网络得到目标物体框的位置,类别和置信度。Faster‑RCNN算法用特定的网络来提取特征提取候选区域。算法的具体流程如下:
[0038] 生成region proposals(特征候选区域):
[0039] ①该算法通过主干网络生成特征图。然后特征图传进RPN层(Region Proposal Network)该层网络生成特征候选区域。定义RPN层的总体Loss函数定义如下:
[0040]
[0041] 其中:
[0042] pi为anchor预测为目标的概率。
[0043] ti={tx,ty,tw,th}是一个向量,表示预测目标框的4个参数化坐标。
[0044] 是与正样本对应的真实目标框的4个参数化坐标。
[0045] 是两个类别(目标vs非目标)的对数损失。
[0046] 为回归损失。
[0047] ②计算目标位置,类别和置信度。
[0048] ROI pooling(特征提取)层用来收集输入特征图和候选区域,执行分类算法得到物体的类别和置信度,执行回归算法得到目标物体框的坐标以及高和宽。
[0049] 步骤5:算法融合得到目标准确位置。
[0050] 采用基于轮廓的卡尔曼滤波算法,对两种算法输出的结果进行融合,得到更为准确的目标位置。具体算法中采用SSD算法输出的结果作为预测值,Faster‑RCNN输出的结果作为观测值。系统的状态表示为
[0051] X=[lx,ly,rx,ry,Δlx,Δly,Δrx,Δry]
[0052] 其中元素lx,ly,rx,ry分别表示预测框的左上角和右下角坐标。Δlx,Δly,Δrx,Δry为两帧图像之间像素点的移动值。
[0053] 假设噪声为高斯白噪声,服从标准正态分布,则系统状态方程表示为:
[0054] X′(k)=AX(k‑1)+W(k‑1)
[0055]
[0056] 其中A为状态转移矩阵,W(k‑1)为输入噪声;
[0057] 先验协方差可表示为:
[0058] P′(k)=AP(k‑1)A′+Q
[0059] 当k=1时,P(0)设置为:
[0060]
[0061] Q是系统过程的协方差,设置为:
[0062]
[0063] 接下来可以计算卡尔曼增益:
[0064]
[0065] 其中
[0066]
[0067] H为状态到观测的转换矩阵
[0068] 得到卡尔曼增益后,那么最优系统状态应为:
[0069] X(k)=X′(k)+Kg(k)(Z(k)‑HX′(k))
[0070] 其中z(k)是观测值
[0071] 接下来更新X(k)的协方差,更新公式为:
[0072] P(k)=(I‑Kg(k)H)P′(k)
[0073] 通过卡尔曼滤波算法融合了两种模型的结果,不断更新得到当前目标位置的准确信息。即目标检测框的x,y,w,h。本发明在NVIDIA TX1测试可达到26FPS。很好的满足了实时性的要求,并且准确度较之前的传统算法提升了80%。