图片分类在有害昆虫识别方向中的应用

2020-09-04 11:22:14 浏览数 (1)

本文介绍了图片分类在有害昆虫识别方向中的应用,来源于代码医生工作室对外输出的分析报告。

文中的内容主要体现了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:入门、原理与应用实战》一书中还介绍了更多有关鉴黄师模型的技术内幕,以及适用与新型冠状病毒医疗影响检测的模型技术。欢迎参考。

0 人点赞