TF-Im2txt开发案例
本案例所使用的模型和代码基于Tensorflow 的im2txt案例开发。 详细案例可以访问 https://github.com/tensorflow/models/tree/master/im2txt
准备工作
请根据 开发指南>Tensorflow开发指南>Tensorflow 本地安装部署开发环境本地环境完成所有安装步骤,即完成了基本环境的部署。 数据集采用MSCOCO的数据集,具体获取方法可以参照https://github.com/tensorflow/models/tree/master/im2txt
编写Im2txt案例
从github下载https://github.com/tensorflow/models,在models/im2txt/im2txt/下面有im2txt案例的完整代码
$ cd ~/models/im2txt/im2txt/ $ ls BUILD configuration.py data/ evaluate.py inference_utils/ inference_wrapper.py ops/ run_inference.py show_and_tell_model.py show_and_tell_model_test.py train.py
其中和训练相关的代码包括
train.py configuration.py show_and_tell_model.py ops/
其中train.py 为训练的入口
代码、数据和inceptionv3 ckpt准备
代码准备 我们统一将训练相关的代码放入 /data/im2txt 目录下,为了训练能通过 python train.py 执行,我们需要对目录结构进行一些调整:
/data/im2txt/train.py im2txt/__init__.py configuration.py show_and_tell_model.py ops/__init__.py image_embedding.py image_processing.py inputs.py
我们根据train.py代码创建了im2txt目录,并在下面增加了__init__.py,并将ops目录移动至im2txt目录下,并同时添加__init__.py,此时train.py就可以通过
from im2txt import configuration from im2txt import show_and_tell_model
执行了。
数据准备 我们可以使用models/im2txt/im2txt/data/download_and_preprocess_mscoco.sh 下载并处理mscoco的数据集。 我们将数据集放入 /data/im2txt_data/ 目录下。
inception v3 checkpoint准备 我们通过wget "http://download.tensorflow.org/models/inception_v3_2016_08_28.tar.gz" 获取inception v3的checkpoint,并解压。 我们将checkpoint 放入 /data/im2txt/ 下 注:我们需要把checkpoint文件和代码文件放在同一个目录下,以便一起打包到Docker下
Im2txt train.py 代码修改
imort uai-train 相关SDK包(L25) 新增代码:from uaitrain.arch.tensorflow import uflag
from im2txt import configuration from im2txt import show_and_tell_model from uaitrain.arch.tensorflow import uflag
修改input、output和checkpoint路径 由于uai-train对训练任务的代码路径、输入路径和输出路径有特殊规范,因此需要对代码进行微调。 微调如下:
- 修改model_config.input_file_pattern(L49), 直接从FLAGS.input_file_pattern 改为由FLAGS.data_dir + FLAGS.input_file_pattern拼接(data_dir为/data/data)
- 修改model_config.inception_checkpoint_file (L50) 直接从FLAGS.inception_checkpoint_file 改为由FLAGS..work_dir + FLAGS.inception_checkpoint_file拼接(work_dir为/data)
- 修改train_dir(L54) 直接从FLAGS.train_dir改为FLAGS.output_dir
def main(unused_argv): assert FLAGS.input_file_pattern, "--input_file_pattern is required" #assert FLAGS.train_dir, "--train_dir is required" assert FLAGS.output_dir, "--output_dir is required" model_config = configuration.ModelConfig() #model_config.input_file_pattern = FLAGS.input_file_pattern -> FLAGS.data_dir + FLAGS.input_file_pattern #model_config.inception_checkpoint_file = FLAGS.inception_checkpoint_file -> FLAGS.work_dir + FLAGS.inception_checkpoint_file model_config.input_file_pattern = FLAGS.data_dir + FLAGS.input_file_pattern model_config.inception_checkpoint_file = FLAGS.work_dir + FLAGS.inception_checkpoint_file training_config = configuration.TrainingConfig() # Create training directory. #train_dir = FLAGS.train_dir -> FLAGS.output_dir train_dir = FLAGS.output_dir if not tf.gfile.IsDirectory(train_dir): tf.logging.info("Creating training directory: %s", train_dir) tf.gfile.MakeDirs(train_dir)
Im2txt 镜像打包
Cmdline参数 由于我们对input_file_pattern、inception_checkpoint_file的语义进行了修改,因此我们对程序的cmdline参数也需要进行修改。
train.py --input_file_pattern=/train-?????-of-00256 --inception_checkpoint_file=/inception_v3.ckpt --train_inception=false --number_of_steps=1000000 --log_every_n_steps=10
打包Docker镜像 详细的训练镜像打包说明请参见:打包镜像
sudo python tf_deploy.py pack --public_key=--private_key= --code_path=im2txt/ --mainfile_path=train.py --uhub_username= --uhub_password= --uhub_registry= --uhub_imagename=im2txt --ai_arch_v=tensorflow-1.1.0 --test_data_path=/data/im2txt_data/ --test_output_path=/data/im2txt_out/ --train_params="--input_file_pattern=/train-?????-of-00256 --inception_checkpoint_file=/inception_v3.ckpt --train_inception=false --number_of_steps=1000000"
打包完成后会生成:
- uhub.service.ucloud.cn/uai_dockers/im2txt
- im2txt-cpu
两个镜像,可以通过如下方法测试:
- GPU Docker 测试
sudo nvidia-docker run -it -v /mnt/im2txt_data/:/data/data -v /mnt/im2txt/output:/data/output uhub.service.ucloud.cn/demo/im2txt:uaitrain /bin/bash -c "cd /data && /usr/bin/python /data/train.py --input_file_pattern=/train-?????-of-00256 --inception_checkpoint_file=/inception_v3.ckpt --train_inception=false --number_of_steps=1000000 --log_every_n_steps=10 --work_dir=/data --data_dir=/data/data --output_dir=/data/output --log_dir=/data/output/log"
注:uhub.service.ucloud.cn/demo/im2txt:uaitrain 为demo使用
- CPU Docker 测试
sudo docker run -it -v /mnt/im2txt_data/:/data/data -v /mnt/im2txt/output:/data/output im2txt-cpu:uaitrain /bin/bash -c "cd /data && /usr/bin/python /data/train.py --input_file_pattern=/train-?????-of-00256 --inception_checkpoint_file=/inception_v3.ckpt --train_inception=false --number_of_steps=1000000 --log_every_n_steps=10 --work_dir=/data --data_dir=/data/data --output_dir=/data/output --log_dir=/data/output/log"
提交UAI-Train
在UAI-Train平台部署时使用的命令为:(uaitrain_cmd.txt 下"CMD Used for deploying:" 后的内容)
/data/train.py --input_file_pattern=/train-?????-of-00256 --inception_checkpoint_file=/inception_v3.ckpt --train_inception=false --number_of_steps=1000000 --log_every_n_steps=10