ssd訓練自己的數據(物體檢測),並測試模型

寫在前面:首先,你安裝了ssd,並測試了VOC數據

    *********************************************************

第一部分:數據準備(任務繁重)
1.標數據(生成的bounding box是txt格式),標數據的工具:鏈接:https://pan.baidu.com/s/1dvOXkW3xJtm9g4jR-3ZDhQ 密碼:7eqr

2.將txt格式轉化爲VOC格式,代碼鏈接:https://download.csdn.net/download/yu734390853/10274930

3.在/home/$你的服務器命/data/VOCdevkit下建立自己的數據集名稱(以我的爲例,我建立的是MyDataSet),在MyDataSet目錄下需包含Annotations、ImageSets、JPEGImages三個文件夾:
Annotations目錄下存放第二步生成的xml格式數據文件。
ImageSet目錄下包含Main文件下,在ImageSets\Main裏有四個txt文件:test.txt train.txt trainval.txt val.txt;

生成這四個txt文件的代碼如下(Python)(根據自己的路徑修改):

import os  
import random  

trainval_percent = 0.66  
train_percent = 0.5  
xmlfilepath = 'Annotations'  
txtsavepath = 'ImageSets\Main'  
total_xml = os.listdir(xmlfilepath)  

num=len(total_xml)  
list=range(num)  
tv=int(num*trainval_percent)  
tr=int(tv*train_percent)  
trainval= random.sample(list,tv)  
train=random.sample(trainval,tr)  

ftrainval = open('ImageSets/Main/trainval.txt', 'w')  
ftest = open('ImageSets/Main/test.txt', 'w')  
ftrain = open('ImageSets/Main/train.txt', 'w')  
fval = open('ImageSets/Main/val.txt', 'w')  

for i  in list:  
    name=total_xml[i][:-4]+'\n'  
    if i in trainval:  
        ftrainval.write(name)  
        if i in train:  
            ftrain.write(name)  
        else:  
            fval.write(name)  
    else:  
        ftest.write(name)  

ftrainval.close()  
ftrain.close()  
fval.close()  
ftest .close()  

txt文件中的內容爲圖片名字(無後綴)。

JPEGImages目錄下存放所有的數據圖片

4.在caffe-ssd/data目錄下創建一個自己的文件夾MyDataSet(以我的爲例):

cd data
mkdir MyDataSet

把data/VOC0712目錄下的create_list.sh 、create_data.sh、labelmap_voc.prototxt 這三個文件拷貝到MyDataSet下(以我的爲例):

cp VOC0712/create_list.sh MyDataSet/
cp VOC0712/create_data.sh MyDataSet/
cp VOC0712/labelmap_voc.prototxt MyDataSet/

5.在caffe-ssd/examples下創建MyDataSet文件夾:

mkdir MyDateSet

用於存放後續生成的lmdb文件;
6.修改labelmap_voc.prototxt文件(改成自己的類別),以及create_list.sh和create_data.sh文件中的相關路徑;

#labelmap_voc.prototxt需修改:
item {
  name: "none_of_the_above"
  label: 0
  display_name: "background"
}
item {
  name: "aeroplane"
  label: 1
  display_name: "person"
}

#create_list.sh需修改:
root_dir=/home/yi_miao/data/Mydataset/
...
for name in yourownset
...
#if [[ $dataset == "test" && $name == "VOC2012" ]]
# then
#  continue
# fi

#create_data.sh需修改:
root_dir=/home/yi_miao/caffe-ssd
data_root_dir="/home/yi_miao/data/Mydataset"
dataset_name="Mydataset"

7.在caffe(ssd)根目錄下運行命令:

./data/mydataset/create_list.sh
./data/mydataset/create_data.sh

此時,在examples/mydataset/文件夾下可以看到兩個子文件夾, mydataset_trainval_lmdb, mydataset_test_lmdb;裏面均包含data.dmb和lock.dmb;

        ******到此爲止,我們的數據集就做好了。******

接下來
第二部分:開始訓練

1.訓練時使用ssd demo中提供的預訓練好的VGGnet model :鏈接:https://pan.baidu.com/s/18ZuLkByyEUNRfd90L21Nkw 密碼:ylnx
將該模型保存到 : caffe/models/VGGNet下(沒有VGGNet,就新建一個)。

2.訓練程序爲/examples/ssd/ssd_pascal.py,運行之前,我們需要修改相關路徑代碼,ssd_pascal.py作如下修改:

82行:train_data路徑;
84行:test_data路徑;
237-246行:model_name、save_dir、snapshot_dir、job_dir、output_result_dir路徑;
259-263行:name_size_file、label_map_file路徑;
266行:num_classes修改爲1 + 類別數;
360行:num_test_image:測試集圖片數目

另外, 如果你只有一個GPU, 需要修改285行: gpus=”0,1,2,3” ===> 改爲”0” ,如果出現 out of memory,則將batch size 相應改小一些。

3.上述修改完成後,在caffe(ssd)根目錄下運行:

python ./examples/ssd/ssd_pascal.py 
 開始訓練...............................

第三部分:測試

1.測試單張圖片
測試程序爲/examples/ssd/ssd_detect.py,運行之前,我們需要修改相關路徑代碼,ssd_detect.py作如下修改(#部分爲修改內容):

 parser.add_argument('--labelmap_file',
                        default='data/VOC0712/labelmap_voc.prototxt')#**修改爲你的路徑**
    parser.add_argument('--model_def',
                        default='models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt')#**修改爲你的路徑**
    parser.add_argument('--image_resize', default=300, type=int)
    parser.add_argument('--model_weights',
                        default='models/VGGNet/VOC0712/SSD_300x300/'#**修改爲你的路徑**
                        'VGG_VOC0712_SSD_300x300_iter_120000.caffemodel')
    parser.add_argument('--image_file', default='examples/images/fish-bike.jpg')#**修改爲你的路徑**

上述修改完成後,在caffe(ssd)根目錄下運行:

Python ./example/ssd/ssd_detect.py

在caffe根目錄下會生成檢測結果圖像。

2.批量檢測多張圖片
修改ssd_detect.py的代碼(加個for循環),代碼鏈接:https://download.csdn.net/download/yu734390853/10275197

       *********************************************

有任何問題歡迎交流,QQ:734390853

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章