Slim微调-fine-tuning

第一步,下载自己的数据集,数据集的格式要符合,否则对后面转化为TFRecords格式的文件有影响,导致不成功。
第二步,转换数据集为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 = 350NUM_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)

谨记
slim/datasets/datasets/dataset_utils.py
LABELS_FILENAME时设置生成的lable.txt标签的位置
download_and_convert_dogs.py
_NUM_SHARDS是设置生成的tfrecord的每一类的个数
生成TFRecords文件:

python download_and_convert_data.py --dataset_name=dogs –dataset_dir=~/桌面/data2

训练:
主文件就是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')
运行命令开始训练网络:

python train_image_classifier.py \
--train_dir=./model/inception_v4_model \   #训练过程中用于保存ckpt、index、meta文件的目录
--dataset_name=dogs
--dataset_split_name=train
--dataset_dir=~/桌面/data \   #存放TFRecords文件的目录
--model_name=inception_v4  \   #网络的名称
--checkpoint_path=/home/lf/桌面/inception_v4.ckpt  \  #预训练权重文件
--checkpoint_exclude_scopes=InceptionV4/Logits,InceptionV4/AuxLogits/Aux_logits   \
--trainable_scopes=InceptionV4/Logits,InceptionV4/AuxLogits/Aux_logits  \
--clone_on_cpu=False \
--max_number_of_steps=10000 \
--batch_size=50 \
--learning_rate=0.01 \

谨记:

resnet_v1_50是
		--checkpoint_exclude_scopes=resnet_v1_50/logits \
  		--trainable_scopes=resnet_v1_50/logits \

tensorboard可视化
关于tensorboard的作用可查看tensorflow官网。
https://blog.csdn.net/jinlong_xu/article/details/71124589这篇文章中详细介绍了tensorboard的启动方法。
但是在微调过程中可能需要查看原模型和新生成模的网络结构,详见这篇文章:https://blog.csdn.net/czq7511/article/details/72480149
测试训练集:

python -u eval_image_classifier.py \
  --dataset_name=birds \
  --dataset_dir=/home/wh/桌面/data2 \
  --dataset_split_name=train \
  --model_name=inception_v4 \
  --checkpoint_path=/home/wh/桌面/data \
  --eval_dir=/home/wh/桌面/my_eval \
  --batch_size=32 \
  --num_examples=1328

测试验证集:

python -u eval_image_classifier.py \
  --dataset_name=birds \
  --dataset_dir=/home/wh/桌面/data2 \
  --dataset_split_name=validation \
  --model_name=inception_v4 \
  --checkpoint_path=/home/wh/桌面/data \
  --eval_dir=/home/wh/桌面/my_validation \
  --batch_size=32 \
  --num_examples=1328

将文件转换成pb文件:

resnet_v1_50:
python -u export_inference_graph.py \
  --model_name=resnet_v1_50 \
  --output_file=/home/lf/桌面/data/resnet_v1_50.pb \
  --dataset_name=birds \
  --dataset_dir=/home/lf/桌面/data2/

freeze权重:

resnet_v1_50:
python -u /home/lf/anaconda3/lib/python3.6/site-packages/tensorflow/python/tools/freeze_graph.py \
  --input_graph=/home/lf/桌面/data/resnet_v1_50.pb \
  --input_checkpoint=/home/lf/桌面/data/model.ckpt-100000 \
  --output_graph=/home/lf/桌面/data/model.ckpt-100000.pb \
  --input_binary=True \
  --output_node_name=resnet_v1_50/predictions/Softmax

inceprion_v4:
python -u /usr/local/lib/python2.7/dist-packages/tensorflow/python/tools/freeze_graph.py \
  --input_graph=my_inception_v4.pb \
  --input_checkpoint=/media/han/code/my_train/model.ckpt-1835 \
  --output_graph=./my_inception_v4_freeze.pb \
  --input_binary=True \
  --output_node_name=InceptionV4/Logits/Predictions

参考文章:https://blog.csdn.net/shiheyingzhe/article/details/82291199
https://blog.csdn.net/shiheyingzhe/article/details/82284853

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值