1. 程式人生 > >Tensorflow+SSD初步接觸,測試+訓練

Tensorflow+SSD初步接觸,測試+訓練

環境:

Ubuntu16.04+CUDA8.0+Cudnn8.0v6.0+python3.5+tensorflow1.4

測試官方的模型:

1.  下載SSD-Tensorflow原始碼,下載模型ssd_300_vgg,(其實原始碼裡有帶的)存放在SSD-Tensorflow-master/checkpoints/目錄下,並解壓。

2.   在目錄 ../SSD-Tensorflow-master/notebooks/ 開啟終端,執行jupyter notebook   , 然後會進入伺服器,開啟ssd_notebook.ipynb,修改第6個cell的ckpt_filename = '../checkpoints/ssd_300_vgg.ckpt'

--此處寫自己想測試的模型路徑及名字;修改第8個cell,path = '../demo/'--此處改成自己測試圖片的資料夾路徑,下面的[  ]中寫測試的那張圖片在資料夾中下標。點上面的  run  執行每一個小cell,到第8個就能看到結果了。如下圖(1 2 3)

 

圖(1)

   

                     圖(2)

                       圖(3)

   有可能的錯誤:有可能報錯缺少 matplotlib 等依賴包,sudo pip install matplotlib安裝即可。執行到第四個cell有可能報錯,把from notebooks import       visualization 
改成 importnotebooks  就好。
3.    資料集格式轉換:        自己做成 voc 資料集格式。
       轉換tfrecords格式資料集時好像只用到標註資訊 Annotations 和圖片 imageSets,並不需要其它的東西,test中同樣也只有這兩個檔案,生成測試資料集時用。voc 格式的資料集做好以後,需要把資料集轉換成tfrecords格式的能被 tensorflow 識別的型別,然後就需要修改一下原始碼,datasets \ pascalvoc_common.py,把它原有的20類修改成自己資料集裡的類別就好啦。如下圖所示:然後還需要修改  datasets \ 
pascalvoc_to_tfrecords.py 中的
image_data = tf.gfile.FastGFile(filename, 'r').read()      ‘r’  改成  ‘rb’   不然會報錯:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
然後在../SSD-Tensorflow-master目錄下執行
DATASET_DIR=./VOC2007/
OUTPUT_DIR=./tfrecords/
python tf_convert_data.py \
    --dataset_name=pascalvoc \
    --dataset_dir=${DATASET_DIR} \
    --output_name=voc_2007_train \
    --output_dir=${OUTPUT_DIR}
提前建資料夾 /tfrecords ,轉換成的訓練資料就生成在裡面了。
DATASET_DIR=./VOC2007/test/
OUTPUT_DIR=./tfrecords/
python tf_convert_data.py \
    --dataset_name=pascalvoc \
    --dataset_dir=${DATASET_DIR} \
    --output_name=voc_2007_test \
    --output_dir=${OUTPUT_DIR}
生成測試資料,注意這兩個命令的兩處不同哦。。。(第一行和倒數第二行)4.    訓練自己的資料集:        訓練中不收斂,等有好的結果再過來寫吧。。抓狂