Tensorflow Slim Imagenet培训

时间:2017-03-15 17:13:36

标签: tensorflow

我正在尝试从头开始训练ImageNet模型的日期,我对培训的运作方式感到有些困惑。

在准备TF记录时,我注意到Inception模型数据目录中的这个文件:" imagenet_metadata.txt"。该文件包含21842个类的标签,但是训练脚本和" imagenet_lsvrc_2015_synsets.txt"文件仅适用于1000个类。

我想知道我需要做些什么修改才能在21K级别而不是1K级别上训练模型?

1 个答案:

答案 0 :(得分:1)

它非常简单,苗条。要训练imgnet 21k,我建议做以下步骤:

1.在tf_models / slim / datasets文件夹中创建一个imagenet.py文件的副本(例如imgnet.py)。在新文件中更改所需的     变量到您想要的值:

    _FILE_PATTERN = ####your tfrecord_file_pattern. for me('imgnet_%s_*.tfrecord')
    _SPLITS_TO_SIZES = {
        'train': ####Training Samples,
        'validation': ####Validation Samples,}
    _NUM_CLASSES = 21841  

* wordnet synset包含21482个条目,但是21481中的imagenet21k中的类总数(错过了n04399382)。所以请确保可用类的总数。

*此外,您需要对代码进行一些修改才能从本地地址加载synset文件。

    base_url = '/home/snf/libraries/tf_models/slim'
    synset_url = '{}/listOfTags.txt'.format(base_url)
    synset_to_human_url = '{}/imagenet21k_metadata.txt'.format(base_url)
  1. 将新数据集添加到tf_models / slim / datasets中的datasetfactory.py:

    from datasets import imgnet
    datasets_map = {
    'cifar10': cifar10,
    'flowers': flowers,
    'imagenet': imagenet,
    'mnist': mnist,
    'imgnet': imgnet, #add this line to dataset_map
    
    }
    
  2. 在tf_models / slim / create中包含以下行的Train_Imgnet.sh文件:

    TRAIN_DIR=trained/imgnet-inception-v4
    DATASET_DIR=/media/where/tfrecords/saved/tfRecords-fall11_21k
    CUDA_VISIBLE_DEVICES="0,1,2,3" python train_image_classifier.py 
    
      --train_dir=${TRAIN_DIR} \
      --dataset_name=imgnet \
      --dataset_split_name=train \
      --dataset_dir=${DATASET_DIR} \
      --model_name=inception_v4 \
      --max_number_of_steps=10000000 \
      --batch_size=32 \
      --learning_rate=0.01 \
      --learning_rate_decay_type=fixed \
      --save_interval_secs=60 \
      --save_summaries_secs=60 \
      --log_every_n_steps=100 \
      --optimizer=rmsprop \
      --weight_decay=0.00004\
      --num_readers=12 \
      --num_clones=4
    
  3. 将文件设置为可执行文件(Chmod + x Train_Imgnet.sh)并运行它(./Train_Imgnet.sh)