AI识虫数据集结构如下:
将数据解压之后,可以看到insects目录下的结构如下所示。
insects包含train、val和test三个文件夹。train/annotations/xmls目录下存放着图片的标注。每个xml文件是对一张图片的说明,包括图片尺寸、包含的昆虫名称、在图片上出现的位置等信息。
上面列出的xml文件中的主要参数说明如下:
-size:图片尺寸
-object:图片中包含的物体,一张图片可能中包含多个物体
下面我们将从数据集中读取xml文件,将每张图片的标注信息读取出来。在读取具体的标注文件之前,我们先完成一件事情,就是将昆虫的类别名字(字符串)转化成数字表示的类别。因为神经网络里面计算时需要的输入类型是数值型的,所以需要将字符串表示的类别转化成具体的数字。昆虫类别名称的列表是:[‘Boerner’, ‘Leconte’, ‘Linnaeus’, ‘acuminatus’, ‘armandi’, ‘coleoptera’, ‘linnaeus’],这里我们约定此列表中:'Boerner’对应类别0,'Leconte’对应类别1,…,'linnaeus’对应类别6。使用下面的程序可以得到表示名称字符串和数字类别之间映射关系的字典。
- {'Boerner': 0,
- 'Leconte': 1,
- 'Linnaeus': 2,
- 'acuminatus': 3,
- 'armandi': 4,
- 'coleoptera': 5,
- 'linnaeus': 6}
调用get_insect_names函数返回一个dict,其键-值对描述了昆虫名称-数字类别之间的映射关系。
下面的程序从annotations/xml目录下面读取所有文件标注信息。
- 1693
- {'im_file': '/home/aistudio/work/insects/train/images/1915.jpeg',
- 'im_id': array([0]),
- 'h': 1268.0,
- 'w': 1268.0,
- 'is_crowd': array([0, 0, 0, 0, 0, 0, 0], dtype=int32),
- 'gt_class': array([1, 0, 2, 3, 4, 5, 5], dtype=int32),
- 'gt_bbox': array([[411.5, 583. , 142. , 199. ],
- [654.5, 418.5, 128. , 132. ],
- [678.5, 736.5, 70. , 90. ],
- [758. , 647.5, 53. , 76. ],
- [843. , 538.5, 69. , 96. ],
- [559.5, 788. , 68. , 83. ],
- [831.5, 754.5, 56. , 56. ]], dtype=float32),
- 'gt_poly': [],
- 'difficult': array([0, 0, 0, 0, 0, 0, 0], dtype=int32)}
通过上面的程序,将所有训练数据集的标注数据全部读取出来了,存放在records列表下面,其中每一个元素是一张图片的标注数据,包含了图片存放地址,图片id,图片高度和宽度,图片中所包含的目标物体的种类和位置。