本文介绍了图片分类在有害昆虫识别方向中的应用,来源于代码医生工作室对外输出的分析报告。
文中的内容主要体现了AI任务在图片分类领域的工作过程,以及分析方式。该报告所使用的相关技术及源码都已经在以下书籍中公开。(文章所对应的技术点,见第5部分)
昆虫种类可以按照不同的粒度(按科、属、类)进行划分。例如,天牛科中包含了刺虎天牛属,刺虎天牛属中又包含了赤红刺虎天牛、福贡刺虎天牛等类别。本文的报告实现使用AI技术对昆虫的属分类进行识别。具体如下。
1 样本预处理
在训练之前,需要对样本进行预处理,具体过程如下:
1.1 删去格式不匹配文件
只支持jpg和png格式的图片。其它图片不支持。经过数据清洗,将不支持的文件统一检出,见wrongfile文件包。检出的示例图片如下:
最终得到有效图片4045张
1.2 去重处理
对于数据集中的重复图片也需要去掉。被移除的图片统一放在same文件包中。
最终得到有效图片3183张。这些图片按照科、属、类的分布如下:
1 按科分布
{'小蠹科': 1938, '实蝇科': 717, '天牛科': 519}
2 按属分布
{'小蠹科_属12': 1117, '实蝇科_属1': 717, '小蠹科_属24': 260, '小蠹科_属13': 195, '小蠹科_属2': 91, '天牛科_属134': 80, '天牛科_属123': 74, '天牛科_属30': 73, '天牛科_属129': 69, '小蠹科_属22': 68, '天牛科_属142': 58, '小蠹科_属16': 54, '小蠹科_属17': 54, '小蠹科_属9': 51, '小蠹科_属20': 48, '天牛科_属84': 41, '天牛科_属3': 33, '天牛科_属39': 32, '天牛科_属136': 30, '天牛科_属35': 29}
3 按种分布
('小蠹科_属12_64', 345),
('实蝇科_属1_3', 290),
('小蠹科_属12_67', 226),
('小蠹科_属12_66', 170),
('实蝇科_属1_4', 166),
('小蠹科_属12_144', 150),
('实蝇科_属1_13', 116),
('小蠹科_属12_52', 116),
('小蠹科_属24_173', 93),
('小蠹科_属2_4', 91),
……
('小蠹科_属20_93', 48),
('天牛科_属84_14', 41),
('实蝇科_属1_8', 39),
('天牛科_属3_6', 33),
('天牛科_属39_41', 32),
('实蝇科_属1_12', 32),
('天牛科_属136_36', 30),
('天牛科_属35_20', 29)
1.3 拆分数据集
将剩下的数据集分为测试集和训练集。所占比例分别为10%,和90%。Demo阶段,选取了以属分类为依据进行训练。具体分布如下
1 测试集
共329条
({'小蠹科_属12': 113, '实蝇科_属1': 74, '小蠹科_属24': 28, '小蠹科_属13': 21, '小蠹科_属2': 9, '天牛科_属123': 8, '天牛科_属134': 8,……'小蠹科_属9': 5, '天牛科_属3': 4, '天牛科_属39': 4, '天牛科_属84': 4, '天牛科_属136': 3, '天牛科_属35': 3})
2 训练集
共2845条
({'小蠹科_属12': 1004, '实蝇科_属1': 643, '小蠹科_属24': 232, '小蠹科_属13': 174, '小蠹科_属2': 82, '天牛科_属134': 72, …… '小蠹科_属16': 48, '小蠹科_属17': 48, '小蠹科_属9': 46, '小蠹科_属20': 43, '天牛科_属84': 37, '天牛科_属3': 29, '天牛科_属39': 28, '天牛科_属136': 27, '天牛科_属35': 26})
2 训练结果
将训练集输入模型进行训练。令模型根据训练样本来调整权重,达到识别分类的效果。
经过训练之后,模型达到的准确率95%。如图所示:
该结果是模型在训练数据集上的准确率
3 测试结果
该模型在测试集上的准确率是89%(共: 329个样本,识别正确: 296个)。照比训练集有所下降。因为模型未见过测试集的数据,所以准确率下降属于正常情况。
再扩充训练集样本之后,这个精度还会上升。
3.1 模型的测试结果
将测试数据集种的数据按照依次输入模型,每批次24张图片。具体的测试结果如下:
accuracy 0.875
原始标签 [0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 4 4 4 4 4]
预测结果 [0 0 0 0 0 0 0 0 1 1 6 1 1 1 1 5 2 2 2 2 7 2 2 3 7 3 4 4 4 4 4 4]
i 2
accuracy 0.875
原始标签 [ 5 5 5 5 6 6 6 6 6 6 6 6 7 7 7 8 8 8 8 9 9 9 9 10
10 10 10 10 10 10 10 10]
预测结果 [ 5 5 5 5 6 6 6 6 6 6 6 6 2 6 7 16 8 8 8 9 9 5 9 10
10 10 10 10 10 10 10 10]
i 3
accuracy 1.0
原始标签 [10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10]
预测结果 [10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10]
i 4
accuracy 1.0
原始标签 [10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10]
预测结果 [10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10]
i 5
accuracy 1.0
原始标签 [10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
11 11 11 11 11 11 11 11]
预测结果 [10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
11 11 11 11 11 11 11 11]
i 6
accuracy 0.96875
原始标签 [11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
11 11 11 11 11 11 11 11]
预测结果 [13 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
11 11 11 11 11 11 11 11]
i 7
accuracy 0.96875
原始标签 [11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
11 11 11 11 11 11 11 11]
预测结果 [11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
11 11 11 14 11 11 11 11]
i 8
accuracy 0.71875
原始标签 [11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 12 12 12 12 12 12
12 12 12 12 12 12 12 12]
预测结果 [11 11 11 11 11 11 19 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 12
12 11 12 12 13 12 12 11]
i 9
accuracy 0.75
原始标签 [12 12 12 12 12 12 12 13 13 13 13 13 13 14 14 14 14 14 14 15 15 15 15 15
15 15 15 15 16 16 16 16]
预测结果 [12 12 11 12 11 15 12 11 19 13 13 13 13 14 14 14 14 14 14 15 17 15 15 15
15 19 15 15 14 16 16 16]
i 10
accuracy 0.875
原始标签 [16 17 17 17 17 17 17 17 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
18 18 18 18 18 18 18 18]
预测结果 [16 17 11 17 17 17 17 17 18 18 13 15 18 18 13 18 18 18 18 18 18 18 18 18
18 18 18 18 18 18 18 18]
i 11
accuracy 0.7777778
原始标签 [18 18 18 18 19 19 19 19 19]
预测结果 [18 18 18 18 19 18 19 19 14]
i 12
over
共: 329个样本,识别正确: 296个
Val accuracy: 0.899696
输出结果中的原始标签,代表该样本的分类索引,预测结果模型对该样本所预测出来的结果。最后一行是模型测试的准确率达到89%
3.2标签代表的分类
每个标签索引多代表的分类如下:
self.num_classes 20 [
'天牛科_属123',
'天牛科_属129',
'天牛科_属134',
'天牛科_属136',
'天牛科_属142',
'天牛科_属3',
'天牛科_属30',
'天牛科_属35',
'天牛科_属39',
'天牛科_属84',
'实蝇科_属1',
'小蠹科_属12',
'小蠹科_属13',
'小蠹科_属16',
'小蠹科_属17',
'小蠹科_属2',
'小蠹科_属20',
'小蠹科_属22',
'小蠹科_属24',
'小蠹科_属9']
3.3识别错误的清单
见文件: ipython.html
该文件可以直接用浏览器打开:
4 模型可视化
从大体来看模型对科的分类达到了100%。随便以实蝇科为例,其可视化结果如下:
该结果表明模型主要是根据翅膀来判断实蝇的。从中可以看出,实蝇相关的样本或种类(只有属1)不多,模型不需要太费劲。
4.1 同样的科,有多个判别特征
而对于没有翅膀的实蝇,模型还会根据腿和头的形状进行区分。例如下面的实蝇可视化
4.2 模型识别错误的原因
以出错结果第一条的图片举例,其可视化图如下:
可以看到。模型判断意域是将整体形状(带长须),尤其是后背的形状和花纹作为依据,错误的把天牛属123认为成天牛属142.
那么天牛属123和天牛属142分别是什么样的呢?
1 天牛属123
天牛属123的模型可视化如下
2 天牛属142
天牛属142的模型可视化如下
天牛属142与天牛属123,二者看起来真的好像!如果真正做得时候,这个问题有可能会触发模型识别能力的上限,即,模型有可能会无法对这两类天牛进行区分。
当然,也不是绝对不可能区分的。目前只是一个初步的猜想。这类问题建议用级联模型来解决,期间还需要请专家来给出专业领域中的区分规则。
3 二者大小也没有可比性
看下面这图。左侧是属142,右侧是属123. 二者都比前面的图个大。相当于它们的身材都1—30cm之间。所以这种问题靠比例尺也解决不了。
4.3 样本的要求
(1)从上面的可视化结果能看出来,模型对图片中的水印无影响。
(2)在实际情况中。同样种类的图片会纯在多种差异较大的形态,如下图
这些是来自天牛同一个种的样本。会发现里面大致有3种形态。建议把他们分开。不要放在一起,放在一起会使模型对同一物种学习到多种不同的识别规则,而且彼此之间还得不到互补,会使样本均衡的处理失效,会对模型最终的整体效果带来影响。
5 相关技术来源
本报告所使用的技术及代码均已经在书中公开。具体对应如下:
样本处理部分:来自《深度学习之TensorFlow工程化项目实战》一书
模型训练部分:来自《深度学习之TensorFlow工程化项目实战》一书
样本均衡及数据增强部分:来自《机器视觉之TensorFlow2:入门、原理与应用实战》一书
模型可视化分析部分:来自《机器视觉之TensorFlow2:入门、原理与应用实战》一书
模型调优部分:来自《机器视觉之TensorFlow2:入门、原理与应用实战》一书
另外,在《机器视觉之TensorFlow2:入门、原理与应用实战》一书中还介绍了更多有关鉴黄师模型的技术内幕,以及适用与新型冠状病毒医疗影响检测的模型技术。欢迎参考。