官术网_书友最值得收藏!

1.4 目標檢測標注的解析和統(tǒng)計

在日常工程中,我們一般使用PASCAL VOC的標注方法,為每張圖片搭配一個與其同名的標注文件,標注文件格式選擇較為簡單的XML格式。

? 1.4.1 XML文件的格式

XML(eXtensible Markup Language,可擴展標記語言)是一種數(shù)據(jù)表示格式,可以描述非常復雜的數(shù)據(jù)結(jié)構,常用于傳輸和存儲數(shù)據(jù)。XML有兩個特點:一是純文本,默認使用UTF-8編碼;二是可嵌套,適合表示結(jié)構化數(shù)據(jù)。

XML格式使用特殊標記包裹一個標注體。如果某個標注體名稱用*表示,那么標注體的開頭用<*>表示,標注體的結(jié)尾用</*>表示。XML格式標注體名稱及其所存儲的標記信息含義如表1-5所示。

表1-5 XML格式標注體名稱及其所存儲的標記信息含義

續(xù)表

從結(jié)構上看,這些標注體組合成一個可嵌套的結(jié)構化數(shù)據(jù),如圖1-21所示。

圖1-21 XML格式示意圖

以PASCAL VOC2012數(shù)據(jù)集為例,提取數(shù)據(jù)集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所示。

圖1-22 圖片和標注的可視化信息

? 1.4.2 XML文件解析和數(shù)據(jù)均衡性統(tǒng)計

XML格式的標注文件需要使用XML工具進行讀取。作者一般習慣于將XML標注信息寫入CSV文件,以便后期使用Excel打開。Python環(huán)境下讀寫CSV文件的工具是pandas,需要通過以下命令安裝pandas工具包。

以PASCAL VOC2012數(shù)據(jù)集為例,它的標注文件存儲在Annotations文件夾中。我們設置標注文件夾路徑anno_path,用來存儲標注文件所在的目錄。

設計一個函數(shù),將其命名為xmldir_to_csv,它接收存儲了標注文件夾路徑的列表變量(列表變量名為anno_path),xmldir_to_csv函數(shù)將遍歷其列表變量的全部以xml結(jié)尾的文件,使用xml.etree.ElementTree.parse函數(shù)對每個以xml結(jié)尾的文件進行解析。對于某個XML文件(對應代碼中的xml_file),依次解析xml_file內(nèi)部包含的多個object標注體,尋找object標注體內(nèi)部的filename、size、name、bndbox等信息。每找到一個object標注體,就在xml_list空列表中加入一個標注信息。顯然,xml_list列表中元素的數(shù)量等于數(shù)據(jù)集中object標注體的總數(shù)。將xml_list標注體列表轉(zhuǎn)化為pandas的DataFrame對象,將這個對象命名為xml_df,將xml_df進行返回輸出。代碼如下。

將所有存儲了標注信息的XML文件轉(zhuǎn)為DataFrame以后,就可以將標注文件夾路徑anno_path輸入xmldir_to_csv函數(shù),獲取整個數(shù)據(jù)集全部標注的矩形框信息,并存儲在xml_df中。使用xml_df對象的to_csv方法,就可以在磁盤中寫入以逗號為分隔符的CSV格式的文件,文件名為P07_voc2012_labels.csv。該文件可以使用Excel打開,以便手工查看。代碼如下。

將全部矩形框標注信息存儲為pandas的DataFrame格式還有一個好處,就是可以使用DataFrame的強大功能進行統(tǒng)計和導出,方便檢查數(shù)據(jù)的均衡性問題。我們可以提取所有的標注對象名稱,將其存儲在P07_voc2012_all_names.txt文件中,同時統(tǒng)計每個對象矩形框的出現(xiàn)次數(shù),將其存儲在P07_voc2012_labels_CNT.csv中。代碼如下。

這樣,磁盤就有一個存儲了全部矩形框的CSV文件,一個搜集了全部矩形框所屬分類的txt文件,以及一個統(tǒng)計了各個分類有多少個矩形框?qū)嵗腃SV文件,如圖1-23所示。

矩形框的統(tǒng)計非常重要,我們可以查看各個分類的矩形框數(shù)量是否均衡。對于不均衡的數(shù)據(jù),開發(fā)者需要進行額外處理,如數(shù)據(jù)增強或在損失函數(shù)中添加權重等。因為數(shù)據(jù)占比較高的分類將在損失函數(shù)中占據(jù)較大的比例,所以在進行損失函數(shù)優(yōu)化時,會導致神經(jīng)網(wǎng)絡對數(shù)據(jù)量較大的分類給予較多的照顧,影響神經(jīng)網(wǎng)絡的泛化能力。

圖1-23 對數(shù)據(jù)集中的所有矩形框進行分類統(tǒng)計的結(jié)果

主站蜘蛛池模板: 长寿区| 吉木萨尔县| 镇坪县| 定日县| 辽阳市| 洞口县| 盈江县| 昔阳县| 定州市| 寿阳县| 洛浦县| 洛扎县| 古浪县| 和平县| 瑞丽市| 龙海市| 新宁县| 常熟市| 砀山县| 永泰县| 育儿| 昌都县| 宁陵县| 健康| 乐都县| 乡城县| 南乐县| 宝坻区| 南雄市| 家居| 波密县| 云霄县| 阳东县| 甘谷县| 玛纳斯县| 常山县| 新乡市| 榕江县| 宁城县| 滁州市| 迁安市|