1. 程式人生 > >使用TensorFlow slim資料夾當中的inception_resnet_v2網路訓練自己的分類資料集

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

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

轉換資料集為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  \