一种微型昆虫图像智能识别方法
2020-07-02罗桂兰郝鸿俊潘小雄
罗桂兰,王 熙,郝鸿俊,张 梅,潘小雄
(大理大学数学与计算机学院,云南大理 671003)
在洱海湿地昆虫群落普适生境网络生态行为研究中,发现洱海湿地昆虫大多都是鞘翅目、双翅目、半翅目、鳞翅目、革翅目、直翅目、膜翅目、缨翅目、脉翅目、蜚蠊目等〔1〕,这些昆虫种类都具有形态微小、难以肉眼识别的特点〔2〕,本文为解决昆虫种类的快速高效分类识别,设计了一种微型昆虫图像智能识别方法。
近年来,计算机研究者更倾向于设计昆虫图像识别相关的算法〔3-5〕,但对其实际应用的关注较少,这使得昆虫图像识别技术仍停留在实验室中,不能真正被昆虫研究者所使用〔6〕。为此,本文试图借助当今智能移动终端,利用其方便性和智能信息处理的优势,使研究人员能够更方便、更高效地对采集到的昆虫进行实时分类识别。
目前国内外在移动终端平台上进行昆虫图像识别的案例较多〔7-8〕。Loarie 和他的研究团队开发了“INaturalist”,其图像样本来自于社区,可辨认蝴蝶种类的准确率为78%〔9〕;越南的“Happimoji”开发者开发了名为“Insect Identifier”的系统,可以在没有互联网的状态下实时识别图像和相机中的昆虫〔10〕。
从目前的市场份额来看,移动终端上主要有两种操作系统:谷歌开发的Android 系统和苹果开发的IOS 系统。安卓的硬件设备种类繁多,系统版本分散度高,不同厂家对设备做了很多改动,开发和维护成本都很大。然而,IOS 设备由于其封闭源代码特性和苹果对系统版本一致性的控制,易于开发和维护〔11〕。因此,本文选择IOS 平台进行昆虫图像识别。
研究发现,当前机器学习算法对图像的智能识别更有效。其中,支持向量机(support vector machine,SVM)是一种广义线性分类器,通过监督学习对数据进行分类,在线学习速度快,泛化能力强〔12〕。在引入核函数后,SVM 有效地解决了高阶非线性问题,广泛应用于人类图像识别、文本分类、手写识别、生物信息学识别等领域〔13〕。AdaBoost(adaptive boosting)是一种迭代算法,其核心思想是针对同一个训练集训练不同的弱分类器,然后把这些弱分类器集合起来,构成一个更强的分类器。AdaBoost 在使用权值分类器后,有效地提高了算法的组合性能和搜索效率,在区域图像检索、手写数字识别等领域得到了广泛的应用〔14〕。因此,本文基于SVMAdaBoost 机器学习模型和IOS 的模型视图控制器(model view controller,MVC)设计模式,提出了一种微型昆虫图像智能识别(intelligent recognition of micro-insect image,IR-MII)方法,并选择苹果的核心机器学习(machine learning,ML)框架〔15〕对昆虫图像进行学习训练,实现湿地微型昆虫图像分类识别。
1 微型昆虫图像智能识别原理
1.1 设计思想首先,选择SVM 弱分类器作为AdaBoost的基分类器,对昆虫图像进行识别和分类。
其次,采用AdaBoost 迭代算法进行分类学习和训练〔16〕。在每次迭代中,需要确保生成的子SVM 分类器的差异是相同的,并且每个子分类器的输入大小是相同的。同时,所用的数据也包含在先前分类器给出的错误分类样本的训练集中。
最后,将所有子SVM 分类器按照加权投票法进行组合,生成最终的强分类器,用于昆虫种类识别。
1.2 基分类器设计基分类器的设计是在多维空间中找到一个分类超平面,对空间中的点进行分类〔17〕。其设计内容包括分类超平面的结构和判别函数的设计。
分类超平面由空间中的多个离散点表示,这些离散点映射到高维,以便尽可能扩大属性之间的间隔,以便新的测试集可以映射到相同的空间,通过判断它在空间中的位置,可以预测它属于哪个类别。
假设有训练样本集为{( )xi,yi,i=1,2,…,s},可被某超平面
正确地分开。其中,i 为样本数;s为样本容量;xi是第i 个昆虫种类样本,在空间中表示坐标原点到超平面任意点的向量;yi是xi的归一化昆虫种类标识,且yi∈{ }
-1,1,yi≥0表示正样本,yi<0 表 示 负 样本;b是标量,代表空间中平面与原点的距离;ω是权重向量,代表昆虫种类的比例,空间上的超平面法向量。法向量的大小是从坐标原点到分离超平面的距离。最优分类超平面是指两种昆虫种类离最近采样点距离最大的位置。如图1 所示,Z对应昆虫种类最优分类超平面。
图1 昆虫种类最优分类超平面图
图1 中的圆圈和方框代表不同的昆虫种类。直线Z1和Z2分别与分类直线Z 平行,Z1与Z2之间的距离称为昆虫种类的分类间隔。Z分离出两种不同的昆虫种类,并最大化分类间隔。若满足
则该平面就是最优分类超平面〔18〕。
基于最优分类超平面就可通过判别函数进行昆虫种类分类。为了构造一个判别函数来确定昆虫样本的类别,引入了核函数的概念。核函数定义为空间中的点与中心点之间的欧氏距离,是一个单调函数。距离越大,对应的函数值越小。适当的核可以在不增加计算复杂度的情况下完成非线性变换的线性分类。由于本文的数据是离散点,且变化不大,因此采用了高斯径向基核函数〔19〕
其中,x为所有昆虫种类,δ表示函数的宽度,用来控制函数径向的作用范围。由核函数构造的判别函数为
其中,βi为拉格朗日乘子,且βi=1,2,…,s,即为求解最优值对应的约束系数。
1.3 强分类器设计SVM-AdaBoost 的融合使得在每次迭代过程中都会选取一个基分类器,同时,通过基分类器,根据每次迭代中数据分类的正确性或误差对样本中的值进行加权〔20〕。SVM-AdaBoost 组合而成的强分类器实现步骤如下。
第一步:确定昆虫种类样本的初始训练集
第二步:定义基分类器初始权重
第三步:循环迭代,进行分类学习与训练。
2)在训练集Gt上利用SVM 分类算法训练生成一个基分类器ht( xi),与 标签yi对比,当取得本次分类的加权错误率
3)如果ηt(i )>0.5,则令T=t-1退出循环。
4)如果ηt(i )≤0.5,则令基分类器权重为
5)更新分配样本权值为
其中Δt是归一化因子,它基于每次迭代后的当前样本分布ωt(i )来改变样本集中错误分类的样本的权重,以形成新的样本分布ωt+1(i),便于下次迭代使用。
6)经过t次迭代后,最终的强分类器输出为
2 昆虫智能识别程序的设计
2.1 昆虫图像样本库创建将大理市洱海湿地昆虫标本6 000 张图像分为训练和测试两类。两个分类集都包含相同的10 个目和对应的27 个科。表1列出了洱海湿地的昆虫种类。
表1 洱海湿地昆虫种类
2.2 系统功能接口设计本文采用MVC 设计模式和Swift 语言编写了拍摄和选择照片、显示识别结果、显示昆虫图像和控制图像方向的功能。系统用户界面包含3个主要功能模块:第一,昆虫图像显示区用于显示当前选定的昆虫图像;第二,拍照并选择图片按钮,选择要识别的昆虫图片或要拍摄的昆虫图片;第三,图像识别和相关信息显示区域用于显示被识别昆虫的科,并给出两个最有可能的结果。系统功能界面如图2所示。
图2 系统功能界面
2.3 图片获取方法昆虫图像的采集首先看相机是否可用。如果相机不可用,则在选择图像时将直接从相册中显示;如果相机可用,则可选择拍照或从相册获取图像。该图像将作为识别功能函数的输入。
2.4 模型学习训练本文核心机器学习模型训练时的硬件环境为MacBook系列Air(2017),软件环境为MacOS 10.14.2 Beta(18C31g),Xcode 10.1(10B61)。
创建核心机器学习模型的主要操作流程为:首先,安装Xcode 测试版,登录到在苹果开发者网站上的个人账户,下载后安装。其次,需要在Xcode软件中创建一个新的空白“playground”文件。然后,需要点击MacOS 选项并选择Blank 项,接下来,输入“playground”的名称并单击“create”完成“playground”文件的创建。最后,删除“playground”文件中已有的代码,将自定义编写的SVM-AdaBoost 机器学习模型代码输入到新建的“playground”文件中。之后,可以导入昆虫图像训练样本开始模型训练。模型训练完成后,将测试样本导入到“Drop images to begin testing”中,对测试样本进行测试。测试完成后,模型将以mlmodel格式保存为文件。
如果模型训练的准确性不理想,可以进一步筛选训练样本,以去除不合适的样本。或者通过逐渐增加最大迭代次数,例如将默认值10 更改为20,可以找到精度更高的参数。或者通过减少最大迭代次数,以抑制训练过程中的过度拟合。
2.5 图像分类与识别昆虫图像分类识别的过程如下:首先,将采集到的昆虫图像作为输入;其次,利用训练后的模型对图像进行分类和识别处理。此时,图像转换为IOS 系统独有的“KCV Pixel Format Type_32bgra”格式,图像像素转换为299*299。如果图像处理失败,昆虫识别软件将显示识别失败的提示;如果图像处理成功,则识别图像。如果在识别过程中出现错误,将显示识别错误;如果识别成功,将显示识别昆虫图像。识别结果中仅仅显示识别可信度为第一和第二的昆虫科类别。昆虫图像分类识别流程如图3所示。
图3 昆虫图像分类识别流程
3 性能测试与识别效果分析
3.1 性能测试该软件系统的真实测试环境基于iPhone6 的IOS 12.1,需要MacOS 10.14、Xcode 和开发人员账户。
3.1.1 性能定义 可靠性指系统在一定时间和一定条件下,无故障完成昆虫图像识别功能的能力或可能性。
本文在给定的图像识别测试时间内,对系统的闪退、无响应和崩溃现象进行了评估。闪退指进入识别系统后迅速回到桌面,各项功能无法使用。无响应指可以进入系统,但是在测试各种功能时,系统不会给出任何反馈。崩溃是指可以进入系统,但在测试各种功能时,有错误或系统突然关机〔21〕。
实时性定义为在规定时间内系统能够进行昆虫图像识别的能力。
3.1.2 可靠性测试 首先,使用数据线将iPhone6与搭载MacOS 10.14 的计算机连接。其次,需打开Xcode,在调试设备下选择iPhone。然后,需单击开始按钮,在iPhone6中打开设置,在Generic中选择描述文件,然后在Developer APP 中选择账户。再次,需点击信任,退出设置,然后点击Xcode中的开始按钮,识别系统就可以安装在iPhone6 中了。最后,需打开应用,依次测试拍照、选择图片、识别结果显示、图像显示等功能,看是否可以正常运行。
通过100 次试验,结果表明,系统没有闪退、无响应、崩溃等现象,保证了系统的可靠性。
3.1.3 实时性测试 本文通过软件调试计算了系统的启动时间和图像识别时间。“系统初始化”和“图像选择函数”之间的时间间隔被定义为启动时间;“图像选择函数”和“识别结果”之间的时间间隔定义为图像识别时间。
通过100 次的测试,结果显示系统平均启动时间为0.59 s,平均识别时间1.23 s,满足了系统秒级实时性。
3.2 昆虫图像识别效果评价设昆虫图像测试样本的目标分为正类和负类。定义以下参数:预测为负类的负样本数为TN(true negative),预测为正类的负样本数为FN(false negative),预测为正类的正样本数为TP(true positive),预测为负类的正样本数为FP(false positive)。评价指标分别是准确率(accuracy)、精确度(precision)和回调率(recall)〔22〕。准确率考察总体27个科的识别效果,而精确度和回调率考察各个科的识别效果。
准确率定义为正确预测的样本数量与昆虫图像总数的比例。公式为
精确度定义为所有预测为某类昆虫的样本中真正属于该类昆虫的样本数所占的比例。公式为
回调率定义为某类昆虫样本中被正确预测的样本数所占的比例。公式为
目前,27 个昆虫科的识别准确率已达90.81%。表2 列出了平均精确度和平均回调率两个评价指标,图4显示了识别结果的示例。
图4 识别结果示例
表2 不同昆虫科的精确度和回调率
4 结论
针对洱海湿地昆虫分类识别难问题,本文提出了一种微型昆虫图像智能识别方法,该方法通过在IOS 移动平台的软件实现,用核心机器学习模型对昆虫样本图像做了学习与训练,目前软件系统能识别27 个昆虫科。在真机应用测试中发现识别准确率达到了91%左右,精确度和回调率达到了92%左右。性能测试结果满足了微型昆虫图像识别的可靠性和实时性要求。该研究结果为洱海湿地昆虫研究提供了智能化信息处理技术支持。但是目前所能识别的昆虫种类仍然不足,还需要大量图片学习和训练,识别准确率还有待进一步提高。
随着5G 时代的到来,移动智能终端设备在全球的应用范围日益广泛,伴随机器学习技术的飞速发展,移动终端的昆虫智能分类与识别将成为一种趋势。