使用TensorFlow slim資料夾當中的inception_resnet_v2網路訓練自己的分類資料集

shiheyingzhe發表於2018-09-01

使用TensorFlow slim資料夾當中的inception_v4網路訓練自己的分類資料集 

下載slim庫 git clone https://github.com/tensorflow/models/

使用的資料集是史丹佛的狗臉分類資料集:http://vision.stanford.edu/aditya86/ImageNetDogs/

每個資料夾存放一種類別的圖片 資料夾名稱即為類別名稱

 

轉換資料集為TFRecords格式的檔案:
  進入下載以後的資料夾中/models/research/slim/,使用pycharm開啟slim資料夾,開啟轉換格式的檔案download_and_convert_data.py,只有cifar10、flowers、mnist這幾種下載和轉換的檔案,為了轉換自己的資料集,這裡在資料夾datasets中複製貼上download_and_convert_flowers.py檔案,得到副本download_and_convert_flowers - 副本.py檔案,將副本重新命名為download_and_convert_dogs.py

然後download_and_convert_data.py引入庫檔案
from datasets import download_and_convert_dogs
在main函式中新增
elif FLAGS.dataset_name =='dogs':
    download_and_convert_dogs.run(FLAGS.dataset_dir)

檔案download_and_convert_flowers.py就配置好的
接著配置download_and_convert_dogs.py檔案,由於資料集已經下載好的,不需要重複下載,這裡註釋掉run函式中下載資料集的程式碼:

    將檔案中的字元flowers全部替換為dogs
    然後將函式 _get_filenames_and_classes中的
flower_root = os.path.join(dataset_dir, 'flower_photos')改為flower_root = os.path.join(dataset_dir, 'Images')
    修改驗證集圖片的數量 _NUM_VALIDATION = 350 為 _NUM_VALIDATION = 2100
    (如果第一步已經修改,這一步可以跳過)修改函式_get_dataset_filename中的:
output_filename = 'flowers_%s_%05d-of-%05d.tfrecord' 為 output_filename = 'dogs_%s_%05d-of-%05d.tfrecord'
      如果不需要生成TFRecords檔案以後,圖片資料集被刪除,需要註釋掉:
clean_up_temporary_files(dataset_dir)

生成TFRecords檔案:
python download_and_convert_data.py --dataset_name=dogs --dataset_dir=~/zstanf/data

 

訓練:

主檔案就是train_image_classifier.py,檢視dataset_name變數,dataset_factory.py的檔案中字典datasets_map只有cifar10、flowers、imagenet、mnist這四種資料集處理方式,訓練我們自己的資料集就需要新增資料處理方式,這裡在字典中新增新的item,'dogs':dogs
                              
由於每個value都是一個py檔案,所以需要在datasets資料夾中新建dogs.py檔案,這裡的做法是複製貼上datasets資料夾中的flowers.py檔案,得到副本flowers - 副本.py然後重新命名為dogs.py

dataset_factory.py引入庫檔案
from datasets import dogs

開啟dogs.py檔案進行相應的修改:
    將檔案中的字元flowers全部替換為dogs,這樣就修改_FILE_PATTERN = 'flowers_%s_*.tfrecord'為_FILE_PATTERN = 'dogs_%s_*.tfrecord'

    修改訓練集和驗證集的圖片數量 SPLITS_TO_SIZES = {'train': 19000, 'validation': 2100}
    修改類目數量 _NUM_CLASSES = 120
    修改_ITEMS_TO_DESCRIPTIONS = { 'image': 'A color image of varying size.', 'label': 'A single integer between 0 and 122', }
  修改get_split函式中的圖片解析格式'image/format': tf.FixedLenFeature((), tf.string, default_value='png')修改為:'image/format': tf.FixedLenFeature((), tf.string, default_value='jpg')

下載預訓練權重檔案:
wget http://download.tensorflow.org/models/inception_resnet_v2_2016_08_30.tar.gz
tar zxf inception_resnet_v2_2016_08_30.tar.gz

執行命令開始訓練網路:
python train_image_classifier.py \
--train_dir=./model/inception_resnet_v2_model \   #訓練過程中用於儲存ckpt、index、meta檔案的目錄
--dataset_name=dogs
--dataset_split_name=train
--dataset_dir=~/zstanf/data \   #存放TFRecords檔案的目錄
--model_name=inception_resnet_v2  \   #網路的名稱
--checkpoint_path=./model/inception_resnet_v2_2016_08_30/inception_resnet_v2_2016_08_30.ckpt  \  #預訓練權重檔案
--checkpoint_exclude_scopes=InceptionResnetV2/Logits,InceptionResnetV2/AuxLogits   \
--trainable_scopes=InceptionResnetV2/Logits,InceptionResnetV2/AuxLogits  
--clone_on_cpu=False \
--max_number_of_steps=10000 \
--batch_size=50 \
--learning_rate=0.01 \

視覺化:
tensorboard --logdir=/home/使用者名稱/model/inception_resnet_v2_model

驗證資料集:
python eval_image_classifier.py \
--checkpoint_path=./model/inception_resnet_v2_model \ 
--eval_dir=./model/eval_result \  
--dataset_name=dogs \ 
--dataset_split_name=validation \   
--dataset_dir=~/zstanf/data \
--model_name=inception_resnet_v2  \


參考內容:
使用TensorFlow-Slim進行影象分類
【Tensorflow系列】使用Inception_resnet_v2訓練自己的資料集並用Tensorboard監控
TensorFlow學習筆記(11)--【Ubuntu】slim框架下的inception_v4模型的執行、視覺化、匯出和使用
https://github.com/tensorflow/models/tree/master/research

 

 

相關文章