SSD-tensorflow-3 重新訓練模型(vgg16)


一、修改pascalvoc_2007.py

生成自己的tfrecord文件后,修改訓練數據shape——打開datasets文件夾中的pascalvoc_2007.py文件,
根據自己訓練數據修改:NUM_CLASSES = 類別數(不包含背景);

# TRAIN_STATISTICS = {
#     'none': (0, 0),
#     'aeroplane': (238, 306),
#     'bicycle': (243, 353),
#     'bird': (330, 486),
#     'boat': (181, 290),
#     'bottle': (244, 505),
#     'bus': (186, 229),
#     'car': (713, 1250),
#     'cat': (337, 376),
#     'chair': (445, 798),
#     'cow': (141, 259),
#     'diningtable': (200, 215),
#     'dog': (421, 510),
#     'horse': (287, 362),
#     'motorbike': (245, 339),
#     'person': (2008, 4690),
#     'pottedplant': (245, 514),
#     'sheep': (96, 257),
#     'sofa': (229, 248),
#     'train': (261, 297),
#     'tvmonitor': (256, 324),
#     'total': (5011, 12608),
# }
# TEST_STATISTICS = {
#     'none': (0, 0),
#     'aeroplane': (1, 1),
#     'bicycle': (1, 1),
#     'bird': (1, 1),
#     'boat': (1, 1),
#     'bottle': (1, 1),
#     'bus': (1, 1),
#     'car': (1, 1),
#     'cat': (1, 1),
#     'chair': (1, 1),
#     'cow': (1, 1),
#     'diningtable': (1, 1),
#     'dog': (1, 1),
#     'horse': (1, 1),
#     'motorbike': (1, 1),
#     'person': (1, 1),
#     'pottedplant': (1, 1),
#     'sheep': (1, 1),
#     'sofa': (1, 1),
#     'train': (1, 1),
#     'tvmonitor': (1, 1),
#     'total': (20, 20),
# }
# SPLITS_TO_SIZES = {
#     'train': 5011,
#     'test': 4952,
# }
# SPLITS_TO_STATISTICS = {
#     'train': TRAIN_STATISTICS,
#     'test': TEST_STATISTICS,
# }
# NUM_CLASSES = 20

TRAIN_STATISTICS = {
    'none': (0, 0),
    'flower': (35,35),
    'total': (35, 35),
}
TEST_STATISTICS = {
    'none': (0, 0),
    'flower': (15,15)
}
SPLITS_TO_SIZES = {
    'train': 35,
    'test': 15
}
SPLITS_TO_STATISTICS = {
    'train': TRAIN_STATISTICS,
    'test': TEST_STATISTICS,
}
NUM_CLASSES = 1     #類別,不包含背景

二、修改ssd_vgg_300.py

根據自己訓練類別數修改96 和97行:等於類別數+1

三、修改eval_ssd_network.py

修改類別數和batchsize

四、修改train_ssd_network.py

數據格式改為 NHWC:

numclasses改為類別數加1:

batch_size該為自己設置的:

修改訓練步數(None代表無限訓練下去):

可以更改模型保存的參數:

五:加載VGG_16,重新訓練模型

將VGG_16放在checkpoint文件夾下面:

從VGG16開始訓練其中某些層的參數

 1 # 通過加載預訓練好的vgg16模型,對“voc07trainval+voc2012”進行訓練
 2 # 通過checkpoint_exclude_scopes指定哪些層的參數不需要從vgg16模型里面加載進來
 3 # 通過trainable_scopes指定哪些層的參數是需要訓練的,未指定的參數保持不變,若注釋掉此命令,所有的參數均需要訓練
 4 DATASET_DIR=/home/doctorimage/kindlehe/common/dataset/VOC0712/
 5 TRAIN_DIR=.././log_files/log_finetune/train_voc0712_20170816_1654_VGG16/
 6 CHECKPOINT_PATH=../checkpoints/vgg_16.ckpt
 7  
 8 python3 ../train_ssd_network.py \
 9     --train_dir=${TRAIN_DIR} \      #訓練生成模型的存放路徑
10     --dataset_dir=${DATASET_DIR} \  #數據存放路徑
11     --dataset_name=pascalvoc_2007 \ #數據名的前綴
12     --dataset_split_name=train \
13     --model_name=ssd_300_vgg \      #加載的模型的名字
14     --checkpoint_path=${CHECKPOINT_PATH} \  #所加載模型的路徑
15     --checkpoint_model_scope=vgg_16 \   #所加載模型里面的作用域名
16     --checkpoint_exclude_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box \
17     --trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box \
18     --save_summaries_secs=60 \  #每60s保存一下日志
19     --save_interval_secs=600 \  #每600s保存一下模型
20     --weight_decay=0.0005 \     #正則化的權值衰減的系數
21     --optimizer=adam \          #選取的最優化函數
22     --learning_rate=0.001 \     #學習率
23     --learning_rate_decay_factor=0.94 \ #學習率的衰減因子
24     --batch_size=24 \   
25     --gpu_memory_fraction=0.9   #指定占用gpu內存的百分比

接下來可以進行fine-tunning

 1 (當你的模型通過vgg訓練的模型收斂到大概o.5mAP的時候,可以進行這一步的fine-tune)
 2  
 3  
 4 # 通過加載預訓練好的vgg16模型,對“voc07trainval+voc2012”進行訓練
 5 # 通過checkpoint_exclude_scopes指定哪些層的參數不需要從vgg16模型里面加載進來
 6 # 通過trainable_scopes指定哪些層的參數是需要訓練的,未指定的參數保持不變
 7 DATASET_DIR=/home/doctorimage/kindlehe/common/dataset/VOC0712/
 8 TRAIN_DIR=.././log_files/log_finetune/train_voc0712_20170816_1654_VGG16/
 9 CHECKPOINT_PATH=./log_files/log_finetune/train_voc0712_20170712_1741_VGG16/model.ckpt-253287
10  
11 python3 ../train_ssd_network.py \
12     --train_dir=${TRAIN_DIR} \      #訓練生成模型的存放路徑
13     --dataset_dir=${DATASET_DIR} \  #數據存放路徑
14     --dataset_name=pascalvoc_2007 \ #數據名的前綴
15     --dataset_split_name=train \
16     --model_name=ssd_300_vgg \      #加載的模型的名字
17     --checkpoint_path=${CHECKPOINT_PATH} \  #所加載模型的路徑
18     --checkpoint_model_scope=vgg_16 \   #所加載模型里面的作用域名
19     --checkpoint_exclude_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box \
20     --trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box \
21     --save_summaries_secs=60 \  #每60s保存一下日志
22     --save_interval_secs=600 \  #每600s保存一下模型
23     --weight_decay=0.0005 \     #正則化的權值衰減的系數
24     --optimizer=adam \          #選取的最優化函數
25     --learning_rate=0.001 \     #學習率
26     --learning_rate_decay_factor=0.94 \ #學習率的衰減因子
27     --batch_size=24 \   
28     --gpu_memory_fraction=0.9   #指定占用gpu內存的百分比

補充:還可以拿來訓練vgg512

從自己訓練的ssd_300_vgg模型開始訓練ssd_512_vgg的模型。

因此ssd_300_vgg中沒有block12,又因為block7,block8,block9,block10,block11,中的參數張量兩個網絡模型中不匹配,因此ssd_512_vgg中這幾個模塊的參數不從ssd_300_vgg模型中繼承,因此使用checkpoint_exclude_scopes命令指出

因為所有的參數均需要訓練,因此不使用命令--trainable_scopes。

 1  1 #/bin/bash
 2   2 DATASET_DIR=/home/data/xxx/imagedata/xing_tf/train_tf/
 3   3 TRAIN_DIR=/home/data/xxx/model/xing300512_model/
 4   4 CHECKPOINT_PATH=/home/data/xxx/model/xing300_model/model.ckpt-60000   #加載的ssd_300_vgg模型
 5   5 python3 ./train_ssd_network.py \
 6   6        --train_dir=${TRAIN_DIR} \
 7   7        --dataset_dir=${DATASET_DIR} \
 8   8        --dataset_name=pascalvoc_2007 \
 9   9        --dataset_split_name=train \
10  10        --model_name=ssd_512_vgg \
11  11        --checkpoint_path=${CHECKPOINT_PATH} \
12  12        --checkpoint_model_scope=ssd_300_vgg \
13  13        --checkpoint_exclude_scopes=ssd_512_vgg/block7,ssd_512_vgg/block7_box,ssd_512_vgg/block8,ssd_512_vgg/block8_box,    ssd_512_vgg/block9,ssd_512_vgg/block9_box,ssd_512_vgg/block10,ssd_512_vgg/block10_box,ssd_512_vgg/block11,ssd_512_vgg/b    lock11_box,ssd_512_vgg/block12,ssd_512_vgg/block12_box \
14  14        #--trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block1    0,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_3    00_vgg/block10_box,ssd_300_vgg/block11_box \
15  15        --save_summaries_secs=28800 \
16  16        --save_interval_secs=28800 \
17  17        --weight_decay=0.0005 \
18  18        --optimizer=adam \
19  19        --learning_rate_decay_factor=0.94 \
20  20        --batch_size=16 \
21  21        --num_classes=4 \
22  22        -gpu_memory_fraction=0.8 \
23  23 

六、全部從頭開始訓練自己的模型

 1 # 注釋掉CHECKPOINT_PATH,不提供初始化模型,讓模型自己隨機初始化權重,從頭訓練
 2 # 刪除checkpoint_exclude_scopes和trainable_scopes,因為是從頭開始訓練
 3 # CHECKPOINT_PATH=./log_files/log_finetune/train_voc0712_20170712_1741_VGG16/model.ckpt-253287
 4  
 5 python3 ../train_ssd_network.py \
 6     --train_dir=${TRAIN_DIR} \   #訓練生成模型的存放路徑
 7     --dataset_dir=${DATASET_DIR} \  #數據存放路徑
 8     --dataset_name=pascalvoc_2007 \ #數據名的前綴
 9     --dataset_split_name=train \
10     --model_name=ssd_300_vgg \  #加載的模型的名字
11     #--checkpoint_path=${CHECKPOINT_PATH} \ #所加載模型的路徑,這里注釋掉
12     #--checkpoint_model_scope=vgg_16 \   #所加載模型里面的作用域名
13     --save_summaries_secs=60 \  #每60s保存一下日志
14     --save_interval_secs=600 \  #每600s保存一下模型
15     --weight_decay=0.0005 \     #正則化的權值衰減的系數
16     --optimizer=adam \          #選取的最優化函數
17     --learning_rate=0.00001 \   #學習率
18     --learning_rate_decay_factor=0.94 \ #學習率的衰減因子
19     --batch_size=32

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM