2. 门源县畜牧兽医工作站, 海北 812200;
3. 玉树州畜牧兽医工作站, 玉树 815000
2. Menyuan County Animal Husbandry and Veterinary Workstation, Haibei 812200, China;
3. Yushu Animal Husbandry and Veterinary Workstation, Yushu 815000, China
牦牛主要分布在中国西部, 是当地畜牧业经济中不可缺少的重要畜种. 如何进一步提高牦牛的生产性能和繁殖性能, 是牦牛高效养殖中的重要课题[1]. 牦牛选育[2]是牦牛高效养殖的关键技术之一, 而牦牛等级评定作为牦牛选育工作中的重要环节, 是指根据种公牛的相关性状和指标将种公牛划分为不同的等级, 从而选留体况良好的个体, 有效地提高牦牛的生产效率[3]. 目前, 牦牛等级评定主要是由人工操作, 但是其效率和科技含量较低. 随着科技的发展, 人工智能技术逐渐地应用到养殖领域中, 例如, 牦牛体重预测[4]、牦牛脸识别及牛肉胴体产量等[5, 6]. 在采用人工智能技术进行牦牛等级评定过程中, 牦牛等级评定被视为一个多分类问题, 通过将牦牛的等级鉴定信息, 如: 体高、体斜长和外貌等, 输入到分类模型中, 从而将种公牛划分为普通种公牛、优质种公牛和特级种公牛3类. 人工智能技术的应用不仅降低了牦牛等级评定过程中的主观性影响和人工误差, 而且能够为之后的牦牛选育研究提供参考.
然而, 在现实的种牦牛场中, 不同等级的牦牛数量分布是不平衡的, 通常普通种公牛和优质种公牛的数量比较多, 而品质优良的特级种公牛的数量却比较少. 如果采用这种数据分布不平衡的牦牛的等级鉴定信息作为分类模型的输入, 对于数量较少的特级种公牛, 其等级鉴定信息会被视为异常数据, 而导致模型不能有效地学习其特征信息, 所以最终的分类模型不能有效地区分特级种公牛的类别, 这极大地影响牦牛等级评定效果. 针对这种数据不平衡问题, 国内外研究人员提出了诸多解决方法. 这些方法主要分为从数据层面进行优化和从算法层面进行优化两大类. 一类从数据层面进行优化是指通过不同的采样方式优化数据分布从而减少类别不平衡, 例如, 欠采样、过采样和混合采样. 经典的采样算法有SMOTE[7]、Borderline-SMOTE方法[8]和NCL方法[9]等. 然而, 基于采样方法仍然存在很多问题, 例如, 欠采样方法容易造成了信息丢失, 过采样方法容易出现过度拟合. 另一类从算法层面进行优化的研究热点是代价敏感学习[10], 其目标是最小化总期望的误分类代价, 虽然它效果明显且移植性强, 但是难以确定误分类代价和有效地评估分类器的性能.
综上所述, 为了解决因牦牛等级数据分布不平衡而导致的无法区分数量较少的特种牦牛问题. 本文提出了一种基于VAE-CGAN的牦牛等级评定算法. VAE-CGAN是一种基于生成模型的算法, 它将牦牛等级数据作为原始样本输入到生成模型得到与原始样本分布近似的生成样本, 从而解决牦牛等级数据分布不平衡问题, 实现有效的牦牛等级评定[11].
1 VAE-CGAN模型VAE-CGAN模型是由3个相互独立的模块组成: (a)变分自编码器(variational autoencoder, VAE); (b)条件生成对抗网络(conditional generative adversarial network, CGAN); (c)分类器(classifier, C). VAE-CGAN模型框架如图1所示.
VAE-CGAN将牦牛等级数据作为原始样本X进行输入. 原始样本X首先经过VAE、CGAN和伪标签处理得到与原始样本X分布近似的生成样本G(Z|y)来解决牦牛等级数据分布不平衡问题, 然后将原始样本和生成样本输入到分类器中实现牦牛等级评定. VAE-CGAN的具体训练过程主要分为3步. 首先, 将原始样本X输入变分自编码器VAE, 利用编码网络提取原始样本X的潜在特征向量Z. 其次, 将潜在特征向量Z和原始样本的类别信息y输入到CGAN, 通过生成器G得到生成样本G(Z|y). 生成样本G(Z|y)、原始样本X和其类别信息y作为判别器D的输入, 在生成器G和判别器D的对抗生成过程中获取更高质量的生成样本G(Z|y). 最后, 使用伪标签技术生成生成样本G(Z|y)的伪标签, 并将含有伪标签的生成样本G(Z|y)、原始样本X和类别信息y输入到分类器C中实现牦牛等级评定.
与传统CGAN采用随机变量作为输入来产生生成样本相比, VAE-CGAN采用由VAE训练生成的含有牦牛等级和特征信息的隐向量Z作为输入[12], 降低了使用随机向量作为输入所带来的不确定性, 可以更好地收集牦牛的全局特征信息. 此外, VAE-CGAN将牦牛类别信息作为条件y输入到CGAN模块中进行生成对抗训练, 使含有牦牛等级信息和特征信息的生成样本更接近于真实样本[13]. 除此之外, VAE-CGAN采用伪标签技术处理后的带有标签信息生成样本, 实现了生成样本由无监督学习到监督学习的转换[14]. VAE-CGAN最终采用生成样本G(Z|y)与原始样本X作为训练集一起训练分类器, 实现了有效牦牛等级评定. 下面将详细介绍VAE-CGAN模型的VAE模块、CGAN模块、分类器模块的设计与实现.
1.1 变分自编码器VAEVAE[15]是一种学习样本分布的方法, 它采用估计分布近似逼近样本的真实分布, 从而生成与样本分布类似的重构样本. 在VAE-CGAN中引入VAE, 通过最小化原始样本与重构样本之间的重构损失和原始样本与生成样本之间分布的差异, 从而训练编码网络和解码网络来获取包含原始样本抽象特征和重要信息的隐向量Z. VAE的网络结构如图2所示.
VAE的训练主要分为3个阶段.
(1) 编码阶段
首先将牦牛等级评定数据
$ \mu , \sigma = g\left( {{W_1} \cdot X + {b_1}} \right) $ | (1) |
其中,
(2) 采样阶段
通过引入重参数化技术将隐向量Z的随机采样转换为线性运算, 克服了训练过程因随机采样导致无法利用反向传播优化模型参数问题, 使得模型参数参与梯度计算. 计算式如式(2)所示:
$ Z = \mu + \sigma \cdot \varepsilon , \; \varepsilon \sim N(0, 1) $ | (2) |
其中, Z是VAE模型的隐向量,
(3) 解码阶段
其过程与编码阶段类似, 旨在将生成的隐向量通过解码过程, 获取重构后的样本.
VAE的训练目标分别是最小化样本重构的损失和最小化学习到的隐向量分布与正态分布之间的距离. 由于无法直接估计原始数据X的分布, 模型将VAE中隐向量Z的先验分布看作标准正态分布, 并且采用KL散度衡量先验分布
$ {{{L}}_{{\text{VAE}}}}{ = ^{}}||X - \hat X|{|^2} + {D_{{\rm{KL}}}}\left( {N\left( {Z;\mu , {\sigma ^2}} \right)||N\left( {Z;0, 1} \right)} \right) $ | (3) |
其中, X为原始样本,
CGAN[16]是一种在GAN[17]基础上进行改进的生成式网络, 它由生成器G和判别器D组成, 其中生成器主要被用于生成与原始样本相似的生成样本, 而判别器主要被用于分辨输入数据的真实性和数据的类别. CGAN在训练过程中分别对生成器网络和判别器网络中的参数进行更新和优化. 在VAE-CGAN中引进CGAN是为了生成充足且符合条件y的生成样本G(Z|y), 从而解决牦牛等级数据的分布不平衡问题. CGAN的网络结构如图3所示.
CGAN的训练主要分为正向传播和反向传播两个阶段.
(1) 正向传播阶段
正向传播阶段, 首先, VAE-CGAN在通过VAE模块的编码网络获取含有抽象特征的隐向量Z后, 将隐向量Z和牦牛类别信息y作为生成器模块的输入, 输入数据通过生成网络生成指定类别的生成样本G(Z|y). 然后, 判别器D将生成样本G(Z|y)、原始样本X和条件y作为输入, 通过判别网络判断生成样本是否符合条件y及生成样本的真实性, 从而输出某一类别真假概率.
(2) 反向传播阶段
反向传播阶段, 通过计算模型交叉熵损失, 最小化损失函数对模型参数进行优化. 优化过程分为两步, 首先, 优化生成器G, 其目标是使G(Z|y)越真实越好, 即
$ \;{L_G} = {E_{{\textit{Z}} \sim {P_{\textit{Z}}}}}\log \left( {1 - D\left( {G\left( {{\textit{Z}}|y} \right)} \right)} \right) $ | (4) |
$ {L_D} = - {E_{X \sim {P_r}}}\log D\left( {X|y} \right) - {E_{{\textit{Z}} \sim {P_{\textit{Z}}}}}\log \left( {1 - D\left( {G\left( {{\textit{Z}}|y} \right)} \right)} \right) $ | (5) |
CGAN最终的目标函数如式(6)所示:
$ \begin{split} \max\limits_D V\left( {D, G} \right) =& {E_{X \sim {P_r}}}\log {D} \left( {X|y} \right) + \\ & {E_{{\textit{Z}} \sim {P_{\textit{Z}}}}}\log \left( {1 - {D} \left( {{G} \left( {{\textit{Z}}|y} \right)} \right)} \right) \\ \end{split} $ | (6) |
分类器C是一个4层的全连接神经网络, 其输入层含有13个神经元, 在两个隐藏层对输入样本进行线性运算和ReLU函数非线性激活处理, 在输出层经过Softmax函数处理, 最终输出分类类别的概率. 分类器C的网络结构如图4所示.
在CGAN模块得到生成样本G(Z|y)后, 首先, 使用伪标签技术处理生成样本, 从而得到含有伪标签的生成样本G(Z|y). 然后, 将含有伪标签生成样本G(Z|y)和原始样本X共同输入到分类器C中实现牦牛等级评定. 分类器C使用交叉熵损失函数为作为目标函数[19], 其目标函数如式(7)所示:
$ {L_{{\rm{class}}}} = \frac{1}{N}\sum\limits_i {{L_i}} = - \frac{1}{N}\sum\limits_i {\sum\limits_{c = 1}^M {{y_{ic}}\log \left( {{p_{ic}}} \right)} } $ | (7) |
其中, M表示类别的数量, yic等于1时, 代表i的类别为c, 预测正确. yic等于0时, 代表i的类别不是c, 预测错误. pic表示预测样本i属于类别c的概率.
1.4 牦牛等级评定算法VAE-CGAN根据上述VAE-CGAN算法3个主要模块的训练过程, 给出VAE-CGAN算法实现的伪代码如算法1.
算法1. VAE-CGAN算法
输入: 牦牛体况数据集X, 牦牛等级类别y, 迭代次数iter;
输出: 牦牛等级预测结果Y;
1) 初始化模型VAE模块、CGAN模块及分类器C;
2) 采用1/10的训练集训练分类器C;
3) for t in 1:iter do:
4) 以X作为输入, VAE网络将其编码为向量Z;
5) 根据式(3)更新VAE网络参数;
6) 以Z和y作为G的输入, 以G(Z|y)、Z和y作为D的输入, 利用CGAN进行数据生成;
7) 根据式(5)更新G的网络参数, 根据式(6)更新D的网络参数;
8) 使用分类器C对无标签数据G(Z|y)进行预测, 得出预测概率P, 通过预测概率P筛选高置信度样本;
9) 将高置信度样本和训练集作为C的输入, 分类网络输出牦牛等级类别Y;
10) 根据式(7)更新分类网络参数;
11) end for
2 实验与结果分析本文实验的训练与测试是基于深度学习框架PyTorch实现的, 软件编程环境为Python 3.7. 计算机的操作系统为Windows 10, CPU为Intel core i5-9400, 内存为16.0 GB. 模型在VAE、CGAN及分类器模块的迭代次数分别设置为5000次、500次及4000次, 使用的优化器为Adam, 学习率均设置为0.0005.
2.1 数据集及数据预处理本文的实验数据集来自于青海省海西蒙古族藏族自治州的天峻县种牛场. 数据集中共包含4954条1–2岁种公牛的等级鉴定数据, 每条鉴定数据包含1个牦牛等级信息(total degree, TD)和13个牦牛特征信息. 数据集如表1所示, 对于牦牛等级信息, 如表1的最后1列, 分别表示: 0普通种公牛、1优质种公牛和2特级种公牛, 且3个类别之间的数量比为127:118:1. 对于牦牛特征信息, 如表1的前13列, 分别表示: 体高(height, H)[20]为鬓甲最高点与地面之间的垂直距离; 体斜长(body length, BL)为肩端至坐骨端的距离; 管围(circumference of cannon bone, CCB)为管骨最细处的周长; 胸围(chest girth, CG)为肩胛骨后角垂直体轴绕胸一周的周长; 体重(weight, W)为空腹状态下牦牛的体重; 外貌(appearance, A)的评分范围为0–30分; 体躯(body, B)的评分范围为0–30分; 生殖器(genital, G)的评分范围为0-10分; 肢蹄(food, F)的评分范围为0–20分; 被毛(hair, H)的评分范围为0–20分; 整体评分(total, T)的评分范围为0–100分; 体高等级(height degree, HD)分别由0、1、和2表示; 体重等级(weight degree, WD)分别由0、1、和2表示. 其中, 0、1和2分别表示普通、优质和特级3类.
由于在牦牛等级鉴定数据采集过程中会出现数据缺失和重复等问题, 因此, 在训练模型之前需要进行数据的预处理操作, 它主要包含3个步骤: 数据清洗、数据归一化和数据转化. 首先, 采用众数填充缺失值和删除重复行等数据清洗操作. 然后, 由于数据集中的各个特征的取值范围差距较大, 所以需要通过min-max标准化方法进行数据归一化操作, 这极大地降低数据不规范对算法准确率的影响. 最后, 由于模型将数据集中的特征信息作为输入, 总体等级信息作为输出, 所以对于包含了模型输入和输出数据集, 需要通过数据转化操作将其划分为输入数据和输出数据两个部分. 数据预处理后的数据格式见表2.
2.2 评估指标
在不平衡数据集中, 数量少的类别特征难以学习, 一般预测精度较低. 所以, 评价指标不仅要客观的评价整体的预测精准度, 还要兼顾少数类别的预测精准度. 本文算法在牦牛等级分类效果上评估指标主要有: 准确率(Accuracy)、召回率(Recall)、F1值、精确率(Precision)[21]. 根据真实标签和预测结果可得分类结果的混淆矩阵, 由此计算上述评价指标, 混淆矩阵见表3.
Accuracy表示数据集预测正确的总样本与预测总样本之间的比例, 计算公式如式(8):
$ \;Accuracy = \frac{{TP + TN}}{{TP + FP + FN + TN}} $ | (8) |
Recall表示在正例中预测正确的样本与正例总样本之间的比例, 计算公式如式(9):
$ {{Recall}} = \frac{{TP}}{{TP + FN}} $ | (9) |
$ {F{{1}}} = 2 \times \frac{{Precision \times Recall}}{{Precision + Recall}} $ | (10) |
Precision表示在预测正例中预测正确的样本与预测总样本之间的比例, 计算公式如式(11):
$ Precision = \frac{{TP}}{{TP + FP}} $ | (11) |
本节首先展示VAE-CGAN、GAN和VAE模型的训练过程, 确定模型的训练参数; 然后, 比较不同分类器在VAE-CGAN上的分类效果, 选定VAE-CGAN模型的分类器; 最后, 基于选定分类器, 对VAE-CGAN、GAN和VAE模型在牦牛等级数据集上等级分类试验结果进行对比分析. 此外, 实验采用70%数据集作为训练集, 30%数据集作为测试集.
2.3.1 模型训练VAE-CGAN、GAN和VAE模型训练过程的损失函数曲线分别如图5、图6和图7所示. 由图可知, 对于VAE-CGAN和GAN模型, 随着迭代次数的增加, 生成器的生成样本质量越接近真实样本, 所以生成器的损失值曲线呈下降趋势, 而判别器不能有效的分辨生成样本
2.3.2 分类器选取
为了选取一个分类效果好的分类器, 分别采用Logic[22]、SVM[23]和ANN三种分类器, 在VAE-CGAN模型进行分类实验对比. 首先, 获得模型参数并保存VAE和CGAN网络中的参数. 然后, 将真实样本输入到VAE和CGAN网络中获取生成样本, 利用伪标签技术对生成样本进行处理. 最后, 将生成样本与真实样本分别训练Logic、SVM和ANN分类器, 计算出模型的评价指标. 实验结果见表4.
由表4可知, Logic的评价指标最低, ANN在3个类别和4个评价指标上, 都取得了优越的效果. 尤其在特级牦牛的预测中, ANN的准确率Accuracy比Logic提高了3.5%、比SVM提高了1.9%, F1值比Logic提高了44.4%, 比SVM提高了19.4%. 这体现了ANN作为反馈式神经网络, 能够高效地利用特征信息, 和较强学习能力. 因此在实验选取ANN作为VAE-CGAN模型分类器.
2.3.3 数据生成对比实验通常, 生成模型生成的样本质量越好, 则牦牛等级评定分类效果越好. 所以, 实验选取目前主流的生成模型GAN和VAE与VAE-CGAN进行对比, 通过比较不同生成模型在测试集上等级评定分类效果, 来评估VAE-CGAN的优越性. 牦牛等级评定分类结果见表5.
由表5可知, VAE-CGAN在3个类别和4个评价都取得了优越的效果. 与VAE模型相比较, VAE-CGAN和GAN在F1和Accuracy指标上显著优于VAE模型, 即, 模型在单个类别和全部类别上均实现了优越分类性能, 说明引入生成对抗网络可以有效地提高生成样本质量. 与GAN模型相比, VAE-CGAN各个类别上的F1值都高于GAN, 尤其在特级牦牛等级预测上的F1值比GAN提高22.2%, 说明与GAN使用随机噪声作为输入相比, VAE-CGAN采用含有特征信息的隐向量
为了评估了VAE- CGAN上不同训练集占比对牦牛等级评定准确率的影响, 分别选取20%–90%的数据集作为训练集进行实验. 实验结果如图8所示.
由图8可知, 随着训练集占比的增加, 对于普通牦牛(0类)和优质牦牛(1类), F1曲线呈不断上升趋势, 当训练集为70%时趋于稳定, 达到95%左右. 对于特级牦牛(2类), 采用低于50%的训练集不能区分特级牦牛, 将训练集由50%增加到70%时, 特级牦牛F1值逐渐增加并在70%处达到最大值, 继续增大训练集, F1值开始降低. 因此, 实验采用70%的数据集作为训练集对VAE- CGAN进行训练.
3 结论与发展
为了降低牦牛等级数据分布不平衡对牦牛等级评定的影响, 本文提出基于VAE-CGAN的牦牛等级评定算法. 实验结果表明, 与现有的一些生成模型VAE和GAN相比, VAE-CGAN不仅达到97.9%等级评定分类准确率, 而且在区分特级牦牛性能上得到显著的提升. VAE-CGAN能够有效地解决数据分布不平衡问题. 在未来研究工作中, 可以从以下3个方面进一步改进: (1)在模型中加入注意力模块, 对网络参数的特征权重进行优化. (2)加入参数寻优算法, 使模型能够自主寻找最优参数. (3)优化训练时间, 在提高模型准确率的同时缩减训练时间.
[1] |
袁凯鑫, 王昕. 青海高原大通牦牛的育种进展. 中国牛业科学, 2019, 45(1): 28-32. DOI:10.3969/j.issn.1001-9111.2019.01.008 |
[2] |
张江. 牦牛高效养殖关键技术. 畜牧兽医科技信息, 2020(4): 99. DOI:10.3969/J.ISSN.1671-6027.2020.04.089 |
[3] |
骆正杰, 马进寿, 保广才, 等. 青海省牦牛种业发展现状、存在问题及应对策略. 中国畜牧杂志, 2021, 57(2): 231-234. DOI:10.19556/j.0258-7033.20200429-02 |
[4] |
Yan Q, Ding LM, Wei HY, et al. Body weight estimation of yaks using body measurements from image analysis. Measurement, 2019, 140: 76-80. DOI:10.1016/j.measurement.2019.03.021 |
[5] |
陈争涛, 黄灿, 杨波, 等. 基于迁移学习的并行卷积神经网络牦牛脸识别算法. 计算机应用, 2021, 41(5): 1332-1336. |
[6] |
Wakholi C, Kim J, Nabwire S, et al. Deep learning feature extraction for image-based beef carcass yield estimation. Biosystems Engineering, 2022, 218: 78-93. DOI:10.1016/j.biosystemseng.2022.04.008 |
[7] |
Douzas G, Bacao F, Last F. Improving imbalanced learning through a heuristic oversampling method based on K-means and SMOTE. Information Sciences, 2018, 465: 1-20. DOI:10.1016/j.ins.2018.06.056 |
[8] |
Bennin KE, Keung J, Phannachitta P, et al. MAHAKIL: Diversity based oversampling approach to alleviate the class imbalance issue in software defect prediction. IEEE Transactions on Software Engineering, 2018, 44(6): 534-550. DOI:10.1109/TSE.2017.2731766 |
[9] |
Laurikkala J. Improving identification of difficult small classes by balancing class distribution. Proceedings of the 8th Conference on Artificial Intelligence in Medicine in Europe. Cascais: Springer, 2001. 63–66.
|
[10] |
Roy NKS, Rossi B. Cost-sensitive strategies for data imbalance in bug severity classification: Experimental results. Proceedings of the 2017 43rd Euromicro Conference on Software Engineering and Advanced Applications (SEAA). Vienna: IEEE, 2017. 426–429.
|
[11] |
叶德豪, 王琼. 面向不平衡数据的生成对抗网络研究. 工业控制计算机, 2021, 34(5): 95-96. DOI:10.3969/j.issn.1001-182X.2021.05.039 |
[12] |
Gao R, Hou XS, Qin J, et al. Zero-VAE-GAN: Generating unseen features for generalized and transductive zero-shot learning. IEEE Transactions on Image Processing, 2020, 29: 3665-3680. DOI:10.1109/TIP.2020.2964429 |
[13] |
Dideriksen BU, Derosche K, Tan ZH. iVAE-GAN: Identifiable VAE-GAN models for latent representation learning. IEEE Access, 2022, 10: 48405-48418. DOI:10.1109/ACCESS.2022.3172333 |
[14] |
Haque A. EC-GAN: Low-sample classification using semi-supervised algorithms and GANs. Proceedings of the 35th AAAI Conference on Artificial Intelligence. Online: AAAI, 2021. 15797–15798.
|
[15] |
Kingma DP, Welling M. Auto-encoding variational Bayes. arXiv:1312.6114, 2013.
|
[16] |
Mirza M, Osindero S. Conditional generative adversarial nets. arXiv:1411.1784, 2014.
|
[17] |
邹秀芳, 朱定局. 生成对抗网络研究综述. 计算机系统应用, 2019, 28(11): 1-9. DOI:10.15888/j.cnki.csa.007156 |
[18] |
于龙泽, 肖白, 孙立国. 风光出力场景生成的条件深度卷积生成对抗网络方法. 东北电力大学学报, 2021, 41(6): 90-99. DOI:10.19718/j.issn.1005-2992.2021-06-0090-10 |
[19] |
李梦磊, 刘新, 赵梦凡, 等. 基于语句结构信息的方面级情感分类. 计算机系统应用, 2020, 29(11): 114-120. DOI:10.15888/j.cnki.csa.007681 |
[20] |
刘丽元, 臧长江, 周靖航, 等. 新疆昌吉地区荷斯坦奶牛生长发育规律分析. 中国畜牧兽医, 2015, 42(8): 2036-2041. DOI:10.16431/j.cnki.1671-7236.2015.08.017 |
[21] |
陈巧红, 王磊, 孙麒, 等. 卷积神经网络的短文本分类方法. 计算机系统应用, 2019, 28(5): 137-142. DOI:10.15888/j.cnki.csa.006887 |
[22] |
Shah K, Patel H, Sanghvi D, et al. A comparative analysis of logistic regression, random forest and KNN models for the text classification. Augmented Human Research, 2020, 5(1): 12. DOI:10.1007/s41133-020-00032-0 |
[23] |
尚晖. 基于改进SVM的互联网用户分类. 计算机系统应用, 2021, 30(4): 266-270. DOI:10.15888/j.cnki.csa.007914 |