1. 程式人生 > >『計算機視覺』SSD源碼學習_基於TensorFlow(待續)

『計算機視覺』SSD源碼學習_基於TensorFlow(待續)

ID 使用 結構 odi AS pap pts blank sets

原項目地址:SSD-Tensorflow

根據README的介紹,該項目收到了tf-slim項目中包含了多種經典網絡結構(分類用)的啟發,使用了模塊化的編程思想,可以替換檢查網絡的結構,其模塊組織如下:

  • datasets: 數據及接口,interface to popular datasets (Pascal VOC, COCO, ...) and scripts to convert the former to TF-Records;
  • networks: 網絡結構定義,definition of SSD networks, and common encoding and decoding methods (we refer to the paper on this precise topic);
  • pre-processing: 預處理和數據增強,pre-processing and data augmentation routines, inspired by original VGG and Inception implementations.

項目給提供了兩個已訓練的VGG網絡,輸入分別為300和512。

除此之外,還有一個迷你的SSD展示ipynb腳本,可以快讀演示預測ssd_notebook。

腳本tf_convert_data.py

將數據轉換為一組TF-Record文件,調用示意如下:

DATASET_DIR=./VOC2007/test/
OUTPUT_DIR=./tfrecords
python tf_convert_data.py     --dataset_name=pascalvoc     --dataset_dir=${DATASET_DIR}     --output_name=voc_2007_train     --output_dir=${OUTPUT_DIR}

腳本caffe_to_tensorflow.py

可以講caffe的模型轉換為checkpoints,供程序使用:

CAFFE_MODEL=./ckpts/SSD_300x300_ft_VOC0712/VGG_VOC0712_SSD_300x300_ft_iter_120000.caffemodel
python caffe_to_tensorflow.py     --model_name=ssd_300_vgg     --num_classes=21     --caffemodel_path=${CAFFE_MODEL}

腳本train_ssd_network.py

用於訓練模型,

  • 可以自定義訓練的明細(dataset, optimiser, hyper-parameters, model, ...)
  • 可以載入ckeckpoints後fine-tune

使用VGG-300模型進行微調的示意如下,

DATASET_DIR=./tfrecords
TRAIN_DIR=./logs/
CHECKPOINT_PATH=./checkpoints/ssd_300_vgg.ckpt
python train_ssd_network.py     --train_dir=${TRAIN_DIR}     --dataset_dir=${DATASET_DIR}     --dataset_name=pascalvoc_2012     --dataset_split_name=train     --model_name=ssd_300_vgg     --checkpoint_path=${CHECKPOINT_PATH}     --save_summaries_secs=60     --save_interval_secs=600     --weight_decay=0.0005     --optimizer=adam     --learning_rate=0.001     --batch_size=32

腳本eval_ssd_network.py

使用checkpoint文件來檢驗訓練效果,調用示意如下:

EVAL_DIR=./logs/
CHECKPOINT_PATH=./checkpoints/VGG_VOC0712_SSD_300x300_ft_iter_120000.ckpt
python eval_ssd_network.py     --eval_dir=${EVAL_DIR}     --dataset_dir=${DATASET_DIR}     --dataset_name=pascalvoc_2007     --dataset_split_name=test     --model_name=ssd_300_vgg     --checkpoint_path=${CHECKPOINT_PATH}     --batch_size=1

這個腳本可以在訓練腳本運行的同時運行,動態的監測當前訓練效果,此時命令如下:

EVAL_DIR=${TRAIN_DIR}/eval
python eval_ssd_network.py     --eval_dir=${EVAL_DIR}     --dataset_dir=${DATASET_DIR}     --dataset_name=pascalvoc_2007     --dataset_split_name=test     --model_name=ssd_300_vgg     --checkpoint_path=${TRAIN_DIR}     --wait_for_checkpoints=True     --batch_size=1     --max_num_batches=500

而且文檔描述的很不簡單,eval腳本可以監測到GPU空閑,

one can pass to training and validation scripts a GPU memory upper limit such that both can run in parallel on the same device. If some GPU memory is available for the evaluation script, the former can be run in parallel as follows:

腳本ssd_vgg_preprocessing.pyssd_vgg_300/512.py

one may also want to experiment with data augmentation parameters (random cropping, resolution, ...) in ssd_vgg_preprocessing.py or/and network parameters (feature layers, anchors boxes, ...) in ssd_vgg_300/512.py

『計算機視覺』SSD源碼學習_基於TensorFlow(待續)