1.訓練
ssd_vgg_300
中修改:(num_classes可以在運行訓練文件時指定,因此這裏可以不修改)
'num_classes': 14,
'no_annotation_label': 14,
'normalizations': [13, -1, -1, -1, -1, -1],
設置訓練參數,運行訓練文件:
DATASET_DIR=./OPTIMAL_Z_FINAL
TRAIN_DIR=./My_chkp
CHECKPOINT_PATH=./checkpoints/vgg_16.ckpt
python train_ssd_network.py \
--train_dir=${TRAIN_DIR} \
--dataset_dir=${DATASET_DIR} \
--dataset_name=optimal_z_2017 \
--dataset_split_name=train \
--model_name=ssd_300_vgg \
--checkpoint_path=${CHECKPOINT_PATH} \
--checkpoint_model_scope=vgg_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 \
--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 \
--save_summaries_secs=60 \
--save_interval_secs=600 \
--weight_decay=0.0005 \
--optimizer=adam \
--learning_rate=0.001 \
--learning_rate_decay_factor=0.94 \
--batch_size=50 \
--num_classes=14 \
--labels_offset=1 \
--max_number_of_steps=1000000
2.測試
測試之前,保證datasets/optimal_z_2017
中:(注意這裏的valid不要寫成test)
SPLITS_TO_SIZES={'train': 12520, 'valid': 9233,}
NUM_CLASSES=13
測試參數:
DATASET_DIR=./OPTIMAL_Z_FINAL
TRAIN_DIR=./My_chkp
EVAL_DIR=${TRAIN_DIR}/eval
python eval_ssd_network.py \
--eval_dir=${EVAL_DIR} \
--dataset_dir=${DATASET_DIR} \
--dataset_name=optimal_z_2017 \
--dataset_split_name=valid \
--model_name=ssd_300_vgg \
--checkpoint_path=${TRAIN_DIR} \
--wait_for_checkpoints=True \
--batch_size=1 \
--max_num_batches=500 \
--num_classes=14
修改ssd_vgg_300
,
權重所使用的訓練參數:
--weight_decay=0.0005 \
--optimizer=adam \
--learning_rate=0.001 \
--learning_rate_decay_factor=0.94 \
--batch_size=50 \
--num_classes=14 \
--labels_offset=0 \
迭代次數 | 2000樣本mAP/% |
---|---|
94747 | 22.7811 |
此時網絡已經不能更收斂了,觀察tensorboard的可視化結果,發現只有個別類別準確率達到50%,其餘的大多數20%,還有很多0%,因此可以確定代碼哪裏參數設置有問題,總之,此次訓練失敗。
期待後續工作,深入調試這份代碼,爭取在自己的數據庫上達到50%的準確率。
修改ssd_vgg_300
,
權重所使用的訓練參數:
--weight_decay=0.0005 \
--optimizer=adam \
--learning_rate=0.001 \
--learning_rate_decay_factor=0.94 \
--batch_size=50 \
--num_classes=13 \
--labels_offset=0 \
迭代次數 | 2000樣本mAP/% |
---|---|
5878 | 16.59 |
10090 | 18.61 |
20271 | 24.26 |
30472 | 25.53 |
40662 | 25.71 |
50906 | 25.65 |
61154 | 25.82 |
71407 | 25.81 |
81549 | 25.80 |
91586 | 25.80 |
100766 | 25.80 |
權重所使用的訓練參數:
--weight_decay=0.0005 \
--optimizer=adam \
--learning_rate=0.001 \
--learning_rate_decay_factor=0.94 \
--batch_size=50 \
--num_classes=14 \
--labels_offset=1 \
測試結果:(VOC07mAP)
500樣本 | 2000樣本 | |
---|---|---|
第0次迭代 | mAP=0%; | |
第840次迭代 | mAP=2.34% | |
第3386次迭代 | mAP=4.77% | |
第5082次迭代 | mAP=7.46% | |
第7629次迭代 | mAP=10.24% | |
第9331次迭代 | mAP=10.82% | |
第10183次迭代 | mAP=11.15% | mAP=19.47% |
第15289次迭代 | mAP=11.78% | |
第20386次迭代 | mAP=12.13% | mAP=20.38% |
第25484次迭代 | mAP=13.22% | |
第30582次迭代 | mAP=12.70% | mAP=21.98% |
第35683次迭代 | mAP=12.38% | |
第40784次迭代 | mAP=12.24% | mAP=22.28% |
第45889次迭代 | mAP=12.46% | |
第50995次迭代 | mAP=12.51% | mAP=22.56% |
第55253次迭代 | mAP=12.40% | |
第60362次迭代 | mAP=12.43% | mAP=22.40% |
第65448次迭代 | mAP=12.40% | |
第71389次迭代 | mAP=12.39% | mAP=22.38% |
第76516次迭代 | mAP=12.41% | |
第81557次迭代 | mAP=12.42% | mAP=22.42% |
第91792次迭代 | mAP=22.40% | |
第101054次迭代 | mAP=22.40% | |
第110355次迭代 | mAP=22.40% | |
第次迭代 | mAP=% | |
第次迭代 | mAP=% | |
第次迭代 | mAP=% | |
第次迭代 | mAP=% | |
第次迭代 | mAP=% |
3.結果對比
之前只修改了類別數、沒修改標籤數的測試結果:(雖然收斂了,但是還是有點慢)
第0次迭代,mAP=0%;
第822次迭代,mAP=1.31%;
第1655次迭代,mAP=2.57%;
第3322次迭代,mAP=6.15%;
第6659次迭代,mAP=9.05%;
第8329次迭代,mAP=9.02%;
第10001次迭代,mAP=10.42%;
第12517次迭代,mAP=10.97%;
第15877次迭代,mAP=12.13%;
第20086次迭代,mAP=11.79%;
之前沒有修改類別數、沒修改標籤數的測試結果:(顯然失敗)
第441571次迭代,mAP=8.34%;
3.可視化
tensorard --logdir=./eval --port=7000