在實際過程中走了彎路,特地進行說明記錄,以備今後參考。
思路是先構建VOC2007格式的豬臉數據集,在轉換成tf格式,然後利用tf的objectdetectionapi進行訓練。原因是把2種構建方式都熟悉一遍,並把所有流程過一遍。
1、構架VOC2007格式的豬臉數據集
前提:在某個目錄下建立如下關係的子目錄。
------ Annotations
------ ImageSets
------ Main
------ JPEGImages
第一步:準備自己需要的圖片,最好是jpg格式。如若不是則需要轉換成jpg格式。
因爲很多圖片都是從網上找的,格式、大小都不一樣,爲了後續訓練需要最好統一下大小,並把格式統一轉換成jpg格式。
圖片的數量,一般來說最好一千張以上。爲了後續訓練出好的效果,最好一萬張以上。
第二步:圖片的重命名,因爲VOC2007格式必須爲JPG格式,並且圖片是統一的六位數字,從000001開始。那我們也需要將所有訓練圖片重命名爲此。
重命名後所有圖片就可以拷貝到JPEGImages目錄下。
第三步:進行目標物體的標註。推薦用labelImg,因爲它可直接生成符合VOC2007格式的xml文件。
主要是體力活。
生成的所有xml文件就可以拷貝到Annotations目錄下。
第四步:數據集的分割。
在實際訓練過程中,需要四個文件,分別爲test.txt是測試集,train.txt是訓練集,val.txt是驗證集,trainval.txt是訓練和驗證集。每個文件爲對於圖片的名字。在VOC2007中,trainval大概是整個數據集的50%,test也大概是整個數據集的50%;train大概是trainval的50%,val大概是trainval的50%。
參照python源碼:split-datasets.py
生成的四個txt文件就可以拷貝到Main目錄下。
第五步:如果上述各步驟中沒有做拷貝的動作則在本步驟把相應的文件拷貝到對應的目錄下。以符合VOC2007格式的要求。
------ Annotations 將xml文件全部放到該文件夾裏
------ ImageSets
------ Main 其有四個txt文件,test.txt是測試集,train.txt是訓練集,val.txt是驗證集,trainval.txt是訓練和驗證集。Txt裏的內容是即圖片名字(無後綴)。
------ JPEGImages 所有的訓練圖片放到該文件夾裏
第六步:把上述目錄及其文件都拷貝到pigfaces/VOC2007/下。
第七步:轉換成tf的record格式的數據集文件。
運行如下命令:cd 到xxx\object_detection目錄下。python create_pascal_tf_record.py --data_dir=xxxx\object_detection\pigfaces --year=VOC2007 --set=train --output_path=data\pig_train.record
第八步:進行訓練。
運行如下命令:cd 到xxx\objectdetection\object_detection目錄下。python train.py --train_dir=data --pipeline_config_path=models\faster_rcnn_resnet101_voc07.config
上述的6,7,8可參考我的github代碼,網址是https://github.com/renwoxing2016/Objectdetectionapi/。