王文成 ,蒋 慧 ,乔 倩 ,祝捍皓 ,郑 红
(1.浙江海洋大学 船舶与机电工程学院,浙江 舟山 316022;2.浙江海洋大学 海洋科学与技术学院,浙江 舟山 316022)
海洋作为地球上最大的生态系统包含极其丰富的生物和非生物资源。虽然我国海洋面积有300多万平方千米,但是渔业资源作为海洋资源中重要的一项资源,近年来呈现逐渐衰退趋势[1]。对周围海域内海底环境进行实时监测,分析研究海域中代表性鱼类的分布概况及生活习性,对于渔业资源可持续发展、探测未知生物资源有着重要意义。
目标识别是计算机视觉领域重要的研究方向之一。随着科学技术的进步、计算硬件设备水平的提高,基于深度学习的目标识别检测方法受到了人们广泛关注。杜卫东等[2]提出一种基于支持向量机(SVM)的多方位声散射数据决策融合的鱼类识别方法,识别准确率达到 90%以上,姚润璐等[3]通过分割鱼体,获得鱼肚、鱼背图像,通过提取纹理特征和形状特征,识别率达到75%,相较于传统的目标检测算法,基于卷积神经网络(CNN)的目标检测算法通过学习自动提取颜色、轮廓等底层的特征和更高级、抽象的特征,然后利用分类模型进行分类检测,其检测结果具有更高的精度和鲁棒性。林明旺等[4]采用VGG16 模型进行鱼类分类识别,但是数据集背景干扰强度大,虽然进行微调,稳定性仍然不好。王文成等[5]用ResNet50 网络模型对十种鱼类做了分类识别,准确率达到了93.33%,但是数据集数量有限,识别精度不高;张俊龙等[6]提出在预处理过程中使用权重化卷积操作,对海洋鱼类识别准确率提升23%,在视频观测中精准识别鱼类;梁红等[7]通过对图像进行水下降噪的方法,并且对预训练的网络微调参数,在海洋鱼类数据集上识别准确率达到85.08%。
基于CNN 的目标检测算法依据是否需要提取候选区域分为:基于有候选区域的目标检测算法和基于无候选区域的目标检测算法两种。区域卷积神经网络(R-CNN)[8]、快速区域卷积神经网络(Fast R-CNN)[9]、超快速区域卷积神经网络(Faster R-CNN)[10],都属于代表性的基于候选区域的目标检测算法。该类算法从图像中事先提取一系列可能的对象候选区域,然后从这些候选区域中提取特征并进行判断分类。2019 年,袁红春等人[11]利用 Faster R-CNN 目标检测方法应用到水下鱼类种类识别中,识别准率达到98.12%。该类算法的检测准确率较高,但是处理速度较慢。无候选区域的目标检测算法的代表性算法有单级式目标检测(YOLO)[12]、单点多盒检测器(SSD)[13]及其改进的算法YOLO v2[14]和深度监督对象检测器(DSOD)。此类算法去除候选区域提取过程,使用神经网络直接将一整张图片输入神经网络,然后预测出bounding box 的坐标和物体的类别、置信度,检测物体速度较快。李庆忠等[15]对 YOLO 实时目标检测算法进行了改进,采用迁移学习法训练网络,预处理中图像增强以及视频帧数检测速率上做了改变,该算法提升了对海底小目标检测的性能,但存在检测精度低、检测小目标会有遗漏等问题。SSD 算法同时融合了proposal-free 的提取和Faster R-CNNs算法的优点,与其他检测算法相比,即使输入图像尺寸小,SSD 依然有更好的精度。DSOD 是一种改进的SSD 网络框架算法。相比于 SSD 目标检测算法,DSOD 整个网络采用密集的短连接和通道拼接技术,使得DSOD 的模型参数更小,同时能直接在目标数据集上进行训练,而无需在 ImageNet、COCO、PASCAL VOC 等公开数据集上进行预训练。
基于上述的分析,由于分类识别和检测任务在统计分布和损失函数的差异,存在学习上的偏差,为了解决这个问题,本文利用深度监督对象检测器(DSOD)方法对选定鱼类图像进行检测分类识别研究,该模型具有高效的目标检测网络,保持了处理速度,提升了对小目标的检测性能。
CNN 是当前深度学习算法实现的主要途径,每个模块主要由数据输入层、卷积层、激励层、池化层和全连接层堆叠在一起组成。一般来说网络层越深,训练得到的效果就越好,但是有时候有些网络会出现过拟合的现象,需要进行微调并不断测试。引入残差网络可以很好地抑制过拟合现象,ResNet网络模型就用到了残差结构[16],CNN 各卷积层共享权重,减少很大一部分参数,提高模型的计算效率。池化层通过对卷积的输出进行采样来降低下一层的数据速率,可以将图像用作直接输入,消除复杂的提取 FeatureMap 的过程。
ResNet50 包含 49 个卷积层和 1 个全连接层。其中,第二至第五阶段的ID BLOCK×2 表示两个大小不变的残差,CONV BLOCK 表示增加比例的残差,每个残差该块包含三个卷积层,结构如图1 所示。
图1 中的 CONV 是卷积操作的卷积层,Batch-Norm 是批量正则化处理,ReLU 是激活函数,MAX POOL 表示最大池化操作,AVG POOL 表示全局平均池化层操作,stage1 到stage5 表示残差块。输入层把不同图片的装换为224×224 的大小进行输入,激活函数使用 ReLU,即f(x)=max(0,x),最后一层是全连接层,需要将与每个类别对应的计算得分转换为与总和为1 的每个类别对应的概率值,使用Softmax函数进行分类,即。
图1 网络模型
DSOD 方法是一种类似于SSD 的多尺度proposalfree 检测框架,不需要提取候选框,也不需要预训练过程,能够从头开始训练模型,并达到很好的检测效果。DSOD 的网络结构可以分为两部分:用于特征提取的主干网络和多尺度预测网络。主干网络是深度监督DenseNets 结构的一种变体,由一个主干块、四个密集块、两个过渡层和两个w/o 组成池过渡层。如图2 所示,DSOD 的架构由一个主干(Stem)模块、四个密集(Dense Block)模块、两个过渡层(Transition Layer)模块和两个无池化层的过渡层(Transition w/o Pooling Layer)模块组成。其中主干模块由 3 个 3×3的卷积层和一个2×2 的最大池化层组成,第一个卷积层的步长为2,另外两个卷积层步长为1,池化层步长为 2;密集模块是由 1×1 的卷积层和 3×3 的卷积层组成的,卷积层数量密集排列;过渡层由1×1卷积层和 2×2 的最大池化层组成,步长为 2;无池化层的过渡层只有一个1×1 卷积层。最先进的对象检测器过分依赖在大规模数据集上预训练成的网络,分类和检测任务在统计分析与损失函数上的差别,存在学习偏差,DSOD 模型是为了解决这两个方面的问题而产生的模型。
本文实验所需的数据均来源于手动搜集的网络图片,四种鱼类,分别为大菱鲆、黄鳍鲷、金钱鱼、鲻鱼,共 1 123 张图像,每种鱼类设置验证集42张图像,并采取相同的预处理操作,以确保最终验证的准确性和测试结果将数据分成相同大小的批次,方便后续模型训练。
基于 PyTorch 框架实现的检测器。所有的模型都是在 NVidia GTX2080Ti GPU 上用 SGD 求解器从零开始训练的。由于DSOD 特征映射的每个尺度都由多个分辨率串联而成,因此采用L2 归一化技术[17]。大多数训练设置都遵循SSD,包括默认框的数据扩充、规模和高宽比,有自己的学习速率调度和小批量大小设置。细节将在实验部分给出。
课题组在前期研究中针对10 种鱼类进行分类识别,十种鱼类分别为鲻鱼、巴鲣鱼、金钱鱼、银鲳鱼、大菱鲆、鲈鱼、颌针鱼、黄鳍鲷、绿鳍鱼、黑鲷鱼,共 908 张图像,设置训练集 807,验证集 101 进行分层采样。前期研究的实验结果如表1 所示,分别从 precision、recall、f1-score 的这几个指标中反映出来,计算这些指标有四个概念:TP、FP、TN、FN,从表1 可以看出,该模型的准确率和召回率都比较高。
表1 分类识别实验结果
图2 DSOD 架构
本文实验选择其中四种鱼类,分别为大菱鲆、黄鳍鲷、金钱鱼、鲻鱼,并且增加了每种鱼类的数量,共 1 123 张图像,每种鱼类设置验证集 42 张图像,剩余的图片用作训练学习。本文是在 PyTorch 框架下,使用 ResNet50 网络模型进行实验,分类识别用的优化器是Adam,该模型的参数设置如下,学习率 1e-4,lr_decay=1e-4,weight_decay=1e-4。如 图3(a)所示,横坐标为迭代次数,纵坐标为损失。从图中可以看出随着迭代次数的增加损失值逐渐下降,迭代次数2 000 次之前下降速率较快,往后曲线逐渐平稳。图3(b)所示为随迭代次数的增加识别准确率的变化,从图中可以看出随着迭代次数的增加准确率逐渐增加,当迭代次数为2 000 次的时候,训练准确率达到90%以上,当迭代次数达到8 000 次的时候,训练准确率达到95%以上,之后持续为平稳状态。同时,数据结果显示该模型收敛速度快,识别精度高,验证集误差小。
图4 所示为利用 PyQt5 做的 GUI 可视化界面,在界面中有鱼类识别和鱼类视频检测两个功能检测窗口,在鱼类识别窗口中有选择图片、预测、实际类别、预测类别以及退出这几个功能。当从数据库中随意选择一个图片进行预测,如图4(a)所示,系统给出的实际类别是金钱鱼。通过点击预测功能按钮,图4(b)给出预测类别为金钱鱼,与图(a)给出的实际类别相同。本文经过多次实验测试,图(a)中的实际类别和图(b)中的预测类别总是一致的,预测准确率是很高的,PyQt5 可视化界面中都能准确呈现出来识别种类,GUI 可视化界面能够直观地反映识别的准确度。
本文用于实验检测的视频来源于Labeled fishesin the wild[18]。目标检测的训练配置参数如下,初始学 习 率 0.01,momentum=0.9,weight_decay=5e-4,学习率采用自适应的学习率下降策略,当学习率停滞不降一定次数之后,降低学习率。目标检测结果如图5所示,通过图(a)可以发现,该检测框架对于比较小的物体也能够检测出来,图中有一些小的目标,由于水下的恶劣环境的原因,并没有完全检测出来,在水下基础设施较好的情况下,可以达到较好的检测效果,视频中出现的鱼类都能准确地标注出来,检测效果很明显,而且DSOD 继承了 SSD 的检测速度快的优点,对于遗漏小目标的缺点得到提升。
图3 准确率与损失变化
图4 PyQt5 可视化界面
图5 水下实时跟踪检测
DSOD 方法是一种类似于SSD 的多尺度proposalfree 检测框架,引入了密集网络(Densents)的思想,即将某些层的输入进行变换并与密集网络结合,DSOD 的参数数量大大减少。DSOD 不需要预训练模型的检测算法,训练检测网络从零开始训练,能达到最先进的精度,快速的处理速度,与从大数据训练而来的复杂模型相比,更好的模型结构可以实现相似或更好的性能。
本文从深度学习的角度出发,利用卷积神经网络在计算机视觉中的优势,提出了一种基于PyTorch深度学习框架的鱼类图像识别算法,以ResNet50 为网络模型,采用Adam 优化算法对模型参数进行更新。在 PyQt5 可视化界面中,实验结果预测值和实际值正确率很高。该模型能够抑制过拟合,收敛速度较快,训练时间较短,残差网络解决了深度网络训练艰难的问题,提高了性能。提出了一种基于深度监督的DSOD 框架,该框架可以对目标检测器进行从无到有的学习。该模型检测速率快,对于目标检测遗漏较少。该算法在水产养殖、保护渔业资源方面都有广阔的应用前景。