(pycharm+ssh)TF-Slim实现图像分类和迁移学习(亲测可用)

 

老规矩,先向排坑路上学习到的博主致谢

https://blog.csdn.net/chaipp0607/article/details/78406880

https://blog.csdn.net/qq_36253746/article/details/84028588

https://blog.csdn.net/jiguquan3839/article/details/85093196

https://blog.csdn.net/h363659487/article/details/79813178

本文主要就使用PyCharm通过SSH连接远程GPU服务器 环境下,利用TF-Slim 轻量级api进行图像分类和迁移学习时一些细节进行盘点。实验难度不大,一些原理性的东西就不写了,我致谢中的第一篇博文写的很好了,大家可以看看。

实验环境:Win10+Python3.5+PyCharm++ssh+TensorFlow1.12,ssh连接的GPU服务器系统为Centos

实验环境搭建教程建议参考https://blog.csdn.net/jiguquan3839/article/details/85093196,灰常给力。搭建完成后,建议在PyCharm中使用一个remote host,可以在右边很方便地看到ssh 远程gpu服务器上的文件

@夏花ln

为了使用TF-Slim api,我们要下载两个文件。一个是github上的tensorflow slim api,https://github.com/tensorflow/models/tree/master/research/slim只需要slim部分即可。

另一个是pre-train预训练模型,需要哪个就下载哪个,在slim文件夹下新建个pre_train文件夹,放下载好的ckpt预训练模型https://github.com/tensorflow/models/tree/master/research/slim

那么就以flowers数据集5分类为例子,开始吧:


1.PyCharm中新建工程,将下载好的slim文件夹拖进去

并在PyCharm中将slim文件夹与工程设置关联,如下图所示,右边蓝色部分flowertrain\slim即为已关联部分

2.制作TFRecord文件

该部分参考第一篇博文,https://blog.csdn.net/chaipp0607/article/details/78406880 

TensorFlow-models内提供了一个download_and_convert_data.py文件,我们可以利用这个代码完成数据准备工作,但是在此之前,建议把download_and_convert_flowers.py文件中的210行代码注释掉,这样一来解压缩之后的原始数据就可以留下来了,这样方便我们查看。 注意一下我们要运行的是download_and_convert_data.py文件,要修改的是download_and_convert_flowers.py文件。这里我们下载并解压flowers数据集,Windows下可以直接在cmd中使用命令行,

python download_and_convert_data.py --dataset_name=flowers --dataset_dir=F:/PyWS/flowertrain/slim/flowers_5

使用Linux的同学可以直接运行.sh文件。

下载并解压成功后路径下应为这样,代码会随机的抽取350张图片组成验证集,剩下的3320张组成训练集,并分别打成5个TFRecord文件。 
再回到floewers_5文件夹中,我们就可以看到下面这些东西,一个压缩文件,一个解压缩之后的文件夹,10个TFRecord文件和一个labels文件。 


3.利用预训练模型Inception-V3训练新任务 

pre_trian文件夹中存放着ckpt预训练模型,

接下来可以来训练模型了。

说下利用shell脚本的方式,在slim文件夹下新建my_train文件夹用来存放等会训练的模型。继续,在slim文件夹下新建train.sh文件,COMMENT内为参数说明

<<COMMENT
shell脚本训练模型参数说明:
    --train_dir:训练完成后生成的模型所在路径
    --dataset_name:参与训练的数据集的名字
    --dataset_split_name:数据集中的validation或train
    --dataset_dir : 数据集路径
    --model_name : 模型名字
    --checkpoint_path : 下载的已经训练好的模型路径
    --checkpoint_exclude_scopes : 指定载入预训练模型时哪一层的权重不被载入
    --trainable_scope : 指定对哪一层参数进行训练;
    --max_number_of_steps : 最大运行步数
    --save_interval_secs=300 : 每300s保存一次模型到指定路径
    --save_summaries_secs=2  : 每2s将日志写入
    --log_every_n_steps=10 : 每10s打印一次
COMMENT
    python3 train_image_classifier.py \
    --train_dir=my_train \
    --dataset_name=flowers \
    --dataset_split_name=train \
    --dataset_dir=flowers_5 \
    --model_name=inception_v3 \
    --checkpoint_path=pretrain/inception_v3.ckpt \
    --checkpoint_exclude_scopes=InceptionV3/Logits,InceptionV3/AuxLogits \
    --trainable_scope=InceptionV3/Logits,InceptionV3/AuxLogits \
    --max_number_of_steps=1000 \
    --batch_size=32 \
    --learning_rate=0.001 \
    --learning_rate_decay_type=fixed \
    --save_interval_secs=300 \
    --save_summaries_secs=2 \
    --log_every_n_steps=10 \
    --optimizer=rmsprop \
    --weight_decay=0.00004

接下来需要排个坑,当你将本地的文件利用ssh同步到GPU服务器上,然后利用xshell在gpu上运行trian.sh文件时,就提示

ValueError: You must supply the dataset directory with --dataset_dir
还有一堆not found,路径找不到之类的。

这个就是Linux在执行shell脚本,shell脚本在编写时的系统跟你的执行脚本的系统不一致造成的。如果你是直接在Linux中编写文件自然不会出现这个,但在Windows+Pycharm中,在windows下编辑的.sh文件的格式为dos格式,而linux只能执行格式为unix格式的脚本。因为在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,而Linux/unix下按一次回车键只输入“换行(LF)”,所以修改的sh文件在每行都会多了一个CR,所以Linux下运行时就会报错找不到命令。另外就是当你在github上使用windows系统下载源文件中包含shell脚本文件 时,当你解压并拷贝到Linux系统执行时,也可能发生此问题。

解决办法是:通过vi编辑器来查看文件的format格式。步骤如下:
1.首先在sh文件下用vi命令打开
vi train.sh   
2.在vi命令模式中使用 :set ff 命令
可以看到文件的格式为
fileformat=dos
3.修改文件format为unix
使用vi/vim修改文件format
命令::set ff=unix
或者::set fileformat=unix
然后:wq保存退出,重新执行脚本就正常了

下图为修改后查询到的format格式,如图改为了unix格式

接下来就正常运行脚本训练模型吧,训练完后在my_train文件夹下生成了一堆文件,你可以利用ssh同步到Windows本机上,如图:

接下来进行模型的验证,slim文件夹下新建my_eval文件夹用来存放验证模型生成的文件。同样的,需要更改dos格式为unix格式 。其实,每次运行shell脚本最好都利用命令::set ff检查一下格式就行了。

python3 eval_image_classifier.py \
    --eval_dir=my_eval  \
    --dataset_name=flowers \
    --dataset_split_name=validation \
    --dataset_dir=flowers_5  \
    --model_name=inception_v3 \
    --checkpoint_path=my_train

验证结果为:

INFO:tensorflow:Restoring parameters from ./my_train/model.ckpt-10000
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [1/4]
INFO:tensorflow:Evaluation [2/4]
INFO:tensorflow:Evaluation [3/4]
INFO:tensorflow:Evaluation [4/4]
eval/Accuracy[0.9075]
eval/Recall_5[1]

可以看到,目前验证准确率是90.75%,调整参数进行优化可以进一步提高准确率。

好了,到这里就完成了利用TF-Slim对flower数据集的分类和验证了,如果你不想利用shell脚本,你也可以直接在PyCharm上修改train_image_classifier.py和eval_image_classifier.py文件中对应的参数,运行py文件同样没有问题。

相关推荐
<p style="text-align:left;"> <br /> </p> <p style="text-align:left;"> <span style="color:#E53333;"><strong>【课程介绍】</strong></span>  </p> <p style="text-align:left;">      Pytorch项目实战 垃圾分类 课程从实战的角度出发,基于真实数据集与实际业务需求,结合当下最新话题-垃圾分类问题为实际业务出发点,介绍最前沿的深度学习解决方案。 </p> <p style="text-align:left;">     从0到1讲解如何场景业务分析、进行数据处理,模型训练与调优,最后进行试与结果展示分析。全程实战操作,以最接地气的方式详解每一步流程与解决方案。 </p> <p style="text-align:left;">     课程结合当下深度学习热门领域,尤其是基于facebook 开源分类神器ResNext101网络架构,对网络架构进行调整,以计算机视觉为核心讲解各大网络的应用于实战方法,适合快速入门与进阶提升。 </p> <p style="text-align:left;"> <strong><span style="color:#E53333;">【课程要求】</span></strong> </p> <p style="text-align:left;"> (1)开发环境:python版本:Python3.7+;<span style="color:#E53333;"> torch 版本:1.2.0+; torchvision版本:0.4.0+</span> </p> <p style="text-align:left;"> (2)开发工具:Pycharm; </p> <p style="text-align:left;"> (3)学员基础:需要一定的Python基础,及深度学习基础; </p> <p style="text-align:left;"> (4)学员收货:掌握最新科技图像分类关键技术; </p> <p style="text-align:left;"> (5)学员资料:内含完整程序源码和数据集; </p> <p style="text-align:left;"> (6)课程亮点:专题技术,完整案例,全程实战操作,徒手撸代码 </p> <p style="text-align:left;"> <br /> </p> <p style="text-align:left;"> <span style="color:#E53333;"><strong>【课程特色】</strong></span> </p> 阵容强大 <p style="text-align:left;"> <br /> </p> <p style="text-align:left;"> 讲师一直从事与一线项目开发,高级算法专家,一直从事于图像、NLP、个性化推荐系统热门技术领域。 </p> <p style="text-align:left;"> 仅跟前沿 </p> <p style="text-align:left;"> 基于当前热门讨论话题:垃圾分类,课程采用学术届和工业届最新前沿技术知识要点。 </p> <p style="text-align:left;"> 实战为先 </p> <p style="text-align:left;"> 根据实际深度学习工业场景-垃圾分类,从产品需求、产品设计和方案设计、产品技术功能实现、模型上线部署。精心设计工业实战项目 </p> <p style="text-align:left;"> 保障效果 </p> <p style="text-align:left;"> 项目实战方向包含了学术届和工业届最前沿技术要点 </p> <p style="text-align:left;"> 项目包装简历优化 </p> <p style="text-align:left;"> 课程内垃圾分类图像实战项目完成后可以直接优化到简历中 </p> <p style="text-align:left;"> <strong><span style="color:#E53333;">【课程思维导图】</span></strong> </p> <p style="text-align:left;"> <img src="https://img-bss.csdn.net/201912081323318969.png" alt="" /> </p> <p style="text-align:left;"> <br /> </p> <p style="text-align:left;"> <br /> </p> <p style="text-align:left;"> <strong><span style="color:#E53333;">【课程实战案例】</span></strong> </p> <p style="text-align:left;"> <br /> </p> <p style="text-align:left;"> <img src="https://img-bss.csdn.net/201912081326184463.png" alt="" /> </p> <p style="text-align:left;"> <br /> </p> <p style="text-align:left;"> <br /> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页