![深入理解计算机视觉:在边缘端构建高效的目标检测应用](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=1739300656-aepIEMxYZDIR61ervmCWSeyGxd7IHgXo-0-57bb93fc6507b815ad19c3de78a9f261)
续表
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_43_1.jpg?sign=1739300656-8wNHelEYb2Bk3JuIVWzzYeJvVxOvpgOH-0-a65943214ac75cad9da667c6a8b27e07)
从结构上看,这些标注体组合成一个可嵌套的结构化数据,如图1-21所示。
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_43_2.jpg?sign=1739300656-pVdxCA0S5BZWi4AxpSm9VcIEQtez9Zdb-0-4e18a92faf940b208d31efa157b15bcd)
图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=1739300656-n3PYDEB1V0BDN1ooPSQBL1Srd9sHNHe4-0-720620a42cf6e3e8bfb0bf4f9480136e)
图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=1739300656-sDYBLIJqAcQT3VxWSMz1rxCNP2rLicR7-0-807dfc0b37cf14b8c9dadf7395ee5340)
以PASCAL VOC2012数据集为例,它的标注文件存储在Annotations文件夹中。我们设置标注文件夹路径anno_path,用来存储标注文件所在的目录。
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_44_3.jpg?sign=1739300656-e6KArjKBA8Sop5n8u9xUy9ObrbG5y8hU-0-72d52a2374d75f72376163095b143315)
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_45_1.jpg?sign=1739300656-rTawDiBLZTKeCZWz8pccdAUdiDDKRZhM-0-df8de8081b2a29694444428c7b9fdfc0)
设计一个函数,将其命名为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=1739300656-44sboEeUbsHTizDZTuoGvaIH29tfmskb-0-2690f1ea7c02b5459aa8e5c079a5526e)
将所有存储了标注信息的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=1739300656-Da1J986Q02cW4Mgy2XYJ9K9MkYWveBRM-0-f3bd9837b1ba7dcef832ea890660f4a8)
将全部矩形框标注信息存储为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=1739300656-bGdvClL8CMbrJoUEK2Goh02kQoLvuMvq-0-20c8a58f0324c817590c267a8ff8efd6)
这样,磁盘就有一个存储了全部矩形框的CSV文件,一个搜集了全部矩形框所属分类的txt文件,以及一个统计了各个分类有多少个矩形框实例的CSV文件,如图1-23所示。
矩形框的统计非常重要,我们可以查看各个分类的矩形框数量是否均衡。对于不均衡的数据,开发者需要进行额外处理,如数据增强或在损失函数中添加权重等。因为数据占比较高的分类将在损失函数中占据较大的比例,所以在进行损失函数优化时,会导致神经网络对数据量较大的分类给予较多的照顾,影响神经网络的泛化能力。
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_47_1.jpg?sign=1739300656-moi2GhrvjaWWFiJRysp9iI57HvXJA21Z-0-1b9077353962458c993ff7097cdc11de)
图1-23 对数据集中的所有矩形框进行分类统计的结果