一、EasyDL简介
EasyDL是百度自研的一套深度学习开发工具,旨在为没有AI基础的个人或企业赋予AI开发能力,最大的特点是操作简便、易于上手,详细介绍请参见:EasyDL官方平台。
二、全球小麦检测
2020年,Kaggle发布竞赛Global Wheat Detection,目的是通过图像检测技术对从全球各地采集的小麦图片进行麦穗检测,实现小麦产量的自动评估,减少人力成本。
训练数据包含3400张图片,其中有标注的图片是417张,测试集有10张图片(没有标注)。数据特征方面,未成熟、成熟、高度成熟的小麦图片均有,麦穗稠密、稀疏的小麦图片均有,大小、明暗等特征的小麦图片均有,可以说样本采集分布还是非常广泛的。竞赛的评估指标是mAP。
大赛的top10排名如下:
三、数据预处理
想要在EasyDL上训练小麦检测模型,需要将训练数据和打标信息以压缩包的形式上传到EasyDL平台。其中,每张图片的打标信息需要按如下格式封装。
{"labels": [{"y1": 478, "x2": 252, "x1": 192, "y2": 548, "name": "aircraft"},{"y1": 434, "x2": 381, "x1": 319, "y2": 499, "name": "aircraft"}]}
列表中的每个元素表示一个Box的标注信息,包含:左上角坐标(x1,y1)、右下角坐标(x2,y2),对象类别。同时,为每张图片生成一个以.json后缀结尾的文件,连同图像文件打包到一个压缩文件,以便后续进行平台上传。
但是,Kaggle平台提供的标注信息和EasyDL平台约定的有出入,平台提供的Box标注信息格式是:左上角坐标,宽度,高度,如[834.0, 222.0, 56.0, 36.0]。所以,需要适配脚本对格式进行转换。
import xlrd
import os
import json
import sys
book = xlrd.open_workbook("D:/train.xls")
sheet = book.sheet_by_index(0)
nrows = sheet.nrows
ncols = sheet.ncols
print("row num: %d" % nrows)
print("col num: %d" % ncols)
# 生成EasyDL订制的标记信息
labels_dict = {}
for i in range(1,nrows): # 跳过第一行
img_id = sheet.cell_value(i,0)
box = eval(sheet.cell_value(i,3))
x_left_up = int(box[0])
y_left_up = int(box[1])
w = int(box[2])
h = int(box[3])
box_new = {}
box_new["x1"] = x_left_up
box_new["y1"] = y_left_up
box_new["x2"] = x_left_up + w
box_new["y2"] = y_left_up + h
box_new["name"] = "wheat"
if img_id in labels_dict:
labels_dict[img_id].append(box_new)
else:
labels_dict[img_id] = [box_new]
# 为每个图片生成打标文件,内容格式如下:
# {"labels": [{"y1": 478, "x2": 252, "x1": 192, "y2": 548, "name": "aircraft"},{"y1": 434, "x2": 381, "x1": 319, "y2": 499, "name": "aircraft"}]}
path = "D:\easydl_wheat_detection_data"
for img_id in labels_dict.keys():
box = {}
box["labels"] = labels_dict[img_id]
content = json.dumps(box)
with open("%s\%s.json" % (path,img_id), "w") as f:
f.write(content)
四、创建模型
参见EasyDL官方平台。
五、训练模型
在EasyDL官方平台上,可以选择部署方法、部署设备、数据增强配置等。大部分选项可以默认,平台会自动根据任务进行优化。针对小麦检测任务,为便于调试,选择了本地部署。测试集只有10张图,通过平台进行了手工标注,并上传到平台作为自定义测试集。模型分为超高精度、高精度、均衡和高性能四种,训练结果以评估报告的方式进行展示。
cla confidence: 分类阈值,0.5
Match IoU:TP、FP计算所匹配阈值,0.5
NMS IoU:NMS抑制的IoU阈值,0.7
5.1、高性能模型评估报告
图 1 是训练集上给出的评估结果,包括mAP,精确率和召回率。同时给出了不同阈值下的F1-scoer。图 2 是在测试集上的评估结果。其他三种模型的评估指标类似。
5.2、均衡模型评估报告
图 3 和图 4是模型分别在训练集和测试集上的评估结果。
5.3、高精度模型评估报告
图 5 和图 6 分别是模型在训练集和测试集上的评估结果。
5.4、超高精度模型评估报告
图 7 和图 8 分别是模型在训练集和测试集上的评估报告。
六、总结分析
训练集 | 测试集 | ||||||||||
模型 | 耗时(min) | Epoch | 大小(M) | mAP | 精度 | 召回率 | 阈值 | mAP | 精度 | 召回率 | 阈值 |
高性能 | 171 | 481 | 21 | 82.5 | 89.0 | 76.0 | 0.2 | 86.1 | 85.8 | 84.6 | 0.2 |
均衡 | 144 | 376 | 92 | 87.2 | 88.8 | 84.7 | 0.2 | 84.1 | 84.4 | 83.3 | 0.2 |
高精度 | 281 | 389 | 234 | 88.9 | 89.0 | 87.2 | 0.2 | 91.2 | 91.3 | 87.7 | 0.3 |
超高精度 | 35 | 18 | 157 | 87.5 | 89.3 | 88.0 | 0.2 | 89.3 | 91.1 | 81.1 | 0.4 |
训练耗时分析: 超高精度 < 均衡 < 高性能 < 高精度。从Epoches和耗时的大小差异上可以看出,高性能模型的结构可能较高精度模型要简单。
泛化性分析(横向): 除均衡模型外,其他三种模型在测试集上的表现均优于训练时的表现。
七、模型发布
模型发布选择在小型通用设备(本机)上发布,以基础版和压缩加速版SDK的方式下载到本地,并申请对应的SDK类型的序列号进行SDK激活。
- 基础版序列号:2220-DCC0-EF22-1815,8B05-F3A6-BB7B-5979
- 加速版序列号:4CE3-B761-0318-36E9,0574-F946-6848-02C9