![深入理解计算机视觉:在边缘端构建高效的目标检测应用](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=1738838324-VtuP32Dfip5vAjGH8IpN3QuIobFrADw9-0-1495721ae000388ed9820f95ad39ec22)
续表
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_43_1.jpg?sign=1738838324-wzewnjAYANL8V5vJnZQMDGwYqk1PtoXt-0-bcfc6333553eb5df40e6c596488449f0)
从结构上看,这些标注体组合成一个可嵌套的结构化数据,如图1-21所示。
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_43_2.jpg?sign=1738838324-k8sDTJpLC0aYZM6s4caam98TD4WO0QJJ-0-6f9617a10902dff96ef952ec7cf3ed4a)
图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=1738838324-kFAt3NWNLSxJMWl9QmCbjErie6m9Ka1P-0-38a2c7b57eb4f3d868bc77b81122249d)
图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=1738838324-7nebsaIlw30mS5qnqPJw4YY1mKhQnzTi-0-03855cbfa3e7604f62f4cd66266d19cb)
以PASCAL VOC2012数据集为例,它的标注文件存储在Annotations文件夹中。我们设置标注文件夹路径anno_path,用来存储标注文件所在的目录。
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_44_3.jpg?sign=1738838324-jGKcopbsYyXqp8CPZGHUZqZasNcpP9ot-0-9bdb5decc663d20c8ac1316bbd56c536)
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_45_1.jpg?sign=1738838324-S18DbrT77iC5H1NJd2sM01YUq0Lthsc1-0-5b68ade0bdfd19786e1f1ebb6e926e28)
设计一个函数,将其命名为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=1738838324-mDRxHl2VVys0XhphjihNqzGIOhTy8jzs-0-9650016ab85ec7cc0a316af6ff0563e1)
将所有存储了标注信息的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=1738838324-zQVoMRlgDI073dYrolAOwVIlOhVhtS0y-0-d93f538ce2839ed54516a74c91cbb9cd)
将全部矩形框标注信息存储为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=1738838324-bYOlzmDb1ru5bGZRqpIH2eTTjcp2ktlf-0-ee0f8280caa40a85985b6ae1b97ea39d)
这样,磁盘就有一个存储了全部矩形框的CSV文件,一个搜集了全部矩形框所属分类的txt文件,以及一个统计了各个分类有多少个矩形框实例的CSV文件,如图1-23所示。
矩形框的统计非常重要,我们可以查看各个分类的矩形框数量是否均衡。对于不均衡的数据,开发者需要进行额外处理,如数据增强或在损失函数中添加权重等。因为数据占比较高的分类将在损失函数中占据较大的比例,所以在进行损失函数优化时,会导致神经网络对数据量较大的分类给予较多的照顾,影响神经网络的泛化能力。
![](https://epubservercos.yuewen.com/C1F246/26947429302651006/epubprivate/OEBPS/Images/45594_47_1.jpg?sign=1738838324-xgS24QEKb8QukUfIUJ2APukLMfxZlWGE-0-d53f583cb38c033214e347781cd4106a)
图1-23 对数据集中的所有矩形框进行分类统计的结果