![深入理解计算机视觉:在边缘端构建高效的目标检测应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/197/47549197/b_47549197.jpg)
1.4 目标检测标注的解析和统计
在日常工程中,我们一般使用PASCAL VOC的标注方法,为每张图片搭配一个与其同名的标注文件,标注文件格式选择较为简单的XML格式。
⋘ 1.4.1 XML文件的格式
XML(eXtensible Markup Language,可扩展标记语言)是一种数据表示格式,可以描述非常复杂的数据结构,常用于传输和存储数据。XML有两个特点:一是纯文本,默认使用UTF-8编码;二是可嵌套,适合表示结构化数据。
XML格式使用特殊标记包裹一个标注体。如果某个标注体名称用*表示,那么标注体的开头用<*>表示,标注体的结尾用</*>表示。XML格式标注体名称及其所存储的标记信息含义如表1-5所示。
表1-5 XML格式标注体名称及其所存储的标记信息含义
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_42_2.jpg?sign=1738885948-fXgbap3lyaR88kJPk2EuVdrfxchmW5xp-0-8e0c47373aee480441e10d8c8856e6a5)
续表
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_43_1.jpg?sign=1738885948-6W0hTAXjR3WQYSUm4w3ONNlKofzWgtbx-0-2b6ece66c509f48d4ab08f41f4d6e5f4)
从结构上看,这些标注体组合成一个可嵌套的结构化数据,如图1-21所示。
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_43_2.jpg?sign=1738885948-65RDGJMBxuRqHTJrTGYXPruG1Aj7IcqP-0-ccccc12763137dd7dc0b06a7771b9690)
图1-21 XML格式示意图
以PASCAL VOC2012数据集为例,提取数据集Annotations文件夹下名为“2008_000008.xml”的XML文件,它对应着Images文件夹下的文件名为“2008_000008.jpg”的图片文件。查看该XML文件,可见该XML文件有41行,主要由folder、filename、source、size、segmented、object(第一个)、object(第二个)7个字段组成。其中,第一个object字段位于第15~27行,存储了图片中的第一个物体——马(分类名称为horse)的分类和位置信息,第二个object字段位于第28~40行,存储了图片中的第二个物体——人(分类名称为person)的分类和位置信息。图片和标注的可视化信息如图1-22所示。
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_44_1.jpg?sign=1738885948-S6vEShRv4QQXQ0L8AMQqH7P4VnjUZgGj-0-0a4794b450b0962ef8b92466e0f173f1)
图1-22 图片和标注的可视化信息
⋘ 1.4.2 XML文件解析和数据均衡性统计
XML格式的标注文件需要使用XML工具进行读取。作者一般习惯于将XML标注信息写入CSV文件,以便后期使用Excel打开。Python环境下读写CSV文件的工具是pandas,需要通过以下命令安装pandas工具包。
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_44_2.jpg?sign=1738885948-DNKOYmLnQLfOrNTRDobReBnBwWUYfoao-0-b8f97833a05e519c18d08b5041ea5509)
以PASCAL VOC2012数据集为例,它的标注文件存储在Annotations文件夹中。我们设置标注文件夹路径anno_path,用来存储标注文件所在的目录。
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_44_3.jpg?sign=1738885948-ufTrddxz8AgrVe741pWUD7frKzoa31jC-0-d6265f9fc1cb4639642955de51a63b51)
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_45_1.jpg?sign=1738885948-AAn2XSzjvp70UvoyEuIbU2Cnkjqzj7ZN-0-008b2e10818a7af4eba849fcb38e38f1)
设计一个函数,将其命名为xmldir_to_csv,它接收存储了标注文件夹路径的列表变量(列表变量名为anno_path),xmldir_to_csv函数将遍历其列表变量的全部以xml结尾的文件,使用xml.etree.ElementTree.parse函数对每个以xml结尾的文件进行解析。对于某个XML文件(对应代码中的xml_file),依次解析xml_file内部包含的多个object标注体,寻找object标注体内部的filename、size、name、bndbox等信息。每找到一个object标注体,就在xml_list空列表中加入一个标注信息。显然,xml_list列表中元素的数量等于数据集中object标注体的总数。将xml_list标注体列表转化为pandas的DataFrame对象,将这个对象命名为xml_df,将xml_df进行返回输出。代码如下。
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_45_2.jpg?sign=1738885948-oxIOkODIzjnOibFDoqfP6stE9szFy1Nc-0-f63c5eab78e46c53dfbf3289b7d6b6b0)
将所有存储了标注信息的XML文件转为DataFrame以后,就可以将标注文件夹路径anno_path输入xmldir_to_csv函数,获取整个数据集全部标注的矩形框信息,并存储在xml_df中。使用xml_df对象的to_csv方法,就可以在磁盘中写入以逗号为分隔符的CSV格式的文件,文件名为P07_voc2012_labels.csv。该文件可以使用Excel打开,以便手工查看。代码如下。
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_46_1.jpg?sign=1738885948-cGhCfPzjattFQKZsje9QHvgEpucC0Eqn-0-54d8d40c5b5437e80d578b5ebc8efaa0)
将全部矩形框标注信息存储为pandas的DataFrame格式还有一个好处,就是可以使用DataFrame的强大功能进行统计和导出,方便检查数据的均衡性问题。我们可以提取所有的标注对象名称,将其存储在P07_voc2012_all_names.txt文件中,同时统计每个对象矩形框的出现次数,将其存储在P07_voc2012_labels_CNT.csv中。代码如下。
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_46_2.jpg?sign=1738885948-kaZXpTVsVkVO1vgOlYjFhZ9ZlmUtTm9n-0-97b0f8f165b246ff831a046e8eb19828)
这样,磁盘就有一个存储了全部矩形框的CSV文件,一个搜集了全部矩形框所属分类的txt文件,以及一个统计了各个分类有多少个矩形框实例的CSV文件,如图1-23所示。
矩形框的统计非常重要,我们可以查看各个分类的矩形框数量是否均衡。对于不均衡的数据,开发者需要进行额外处理,如数据增强或在损失函数中添加权重等。因为数据占比较高的分类将在损失函数中占据较大的比例,所以在进行损失函数优化时,会导致神经网络对数据量较大的分类给予较多的照顾,影响神经网络的泛化能力。
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_47_1.jpg?sign=1738885948-u5OfzU3Iafe8s41PfrQ4vNKpePNQ7lp0-0-35f5cd3472d73f30124d5e9419358cda)
图1-23 对数据集中的所有矩形框进行分类统计的结果