初学:Windows下Visual Studio Code基于Pascal2012开始训练(CPU)
简单的将SSD跑起来,总结在Anaconda + Visual Studio Code下遇到的一些问题。因为在CPU中进行训练,只是将功能跑起来,确认流程。
0. 参考
https://blog.csdn.net/yexiaogu1104/article/details/77415990/
I. 数据训练集准备和SSD算法准备
Tensorflow SSD算法链接:
https://github.com/balancap/SSD-Tensorflow
Pascal2012 训练集:
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/
II. 数据集准备
-
在Pascal2012下载数据集,数据集的内容如下:
-
Pascal2012训练数据主要在Annotations文件内和JPEGImages文件夹内。Pascal2012训练数据主要在Annotations文件内和JPEGImages文件夹内。
-
在linux可以使用bash的方式运行
tf_convert_data.py
(查看参考的链接),因为在windows VSC,也可以在terminal
窗口中使用python
命令。第三种方法是直接在tf_convert_data.py
内的tf.app.flags.DEFINE_string
输入数据集路径和输出TFRecords
的路径,每次把文件放在固定路径里面运行。
tf.app.flags.DEFINE_string(
'dataset_dir', 'C:/Users/Name/Documents/GitHub/SSD_Tensorflow/datasets/VOCtrainval_11-May-2012/VOCdevkit/VOC2012/','Directory where the original dataset is stored.')
tf.app.flags.DEFINE_string(
'output_name', 'voc_2012_train','Basename used for TFRecords output files.')
tf.app.flags.DEFINE_string(
'output_dir', 'C:/Users/Name/Documents/GitHub/SSD_Tensorflow/pascal_record/','Output directory where to store TFRecords files.')
数据集转换完成之后,数据集文件.TFRecoard
存在文件夹:
>Converting image 17125/17125
Finished converting the Pascal VOC dataset!
运行出现错误的注意事项:
- 当出现以下提示时,有可能是应为训练集文件路径出现错误,请检查数据集:
tensorflow.python.framework.errors_impl.NotFoundError: NewRandomAccessFile failed to Create/Open: C:/Users/***/Documents/GitHub/***_SSD_Tensorflow/datasets/VOCtrainvaet
- 当出现以下提示时,有可能是硬盘空间不够导致:
tensorflow.python.framework.errors_impl.UnknownError: Failed to WriteFile:C:/Users/***/Documents/GitHub/***_SSD_Tensorflow//pascalvoc_070.tfrecord
- 出现No module named ‘python’的情况,如果使用Visual Studio Code Pylink,那么可以切换到pep8解决该问题。
https://stackoverflow.com/questions/49601292/python-not-finding-tensorflow-module-under-anaconda outputname
一定要设置对,如果不对,在训练导入数据事,会出现无法检测到数据的情况。
II. 算法训练 - 不使用Fine-tune
- 设定
dataset_dir
,训练集的文件夹地址:
tf.app.flags.DEFINE_string('dataset_dir', 'C:/Users/Name/Documents/GitHub/SSD_Tensorflow/pascal_record/', 'The directory where the dataset files are stored.')
- 设定训练输出文件路径
checkpoint
,data
,meta
,index
的文件夹地址:
tf.app.flags.DEFINE_string('train_dir', 'C:/Users/Name/Documents/GitHub/SSD_Tensorflow/tmp/tfmodel/', 'Directory where checkpoints and event logs are written to.')
- 如果不使用
fine-tune
将checkpoint_path
设定为None
:
tf.app.flags.DEFINE_string('checkpoint_path', None,'The path to a checkpoint from which to fine-tune.')
在CPU中进行训练需要:
- 需要将数据格式调整为
DATA_FORMAT = 'NHWC'
- 需要屏蔽
session_config=config
,该配置设置了GPU的资源分配,不适用可以屏蔽掉。
slim.learning.train(
train_tensor,
logdir=FLAGS.train_dir,
master='',
is_chief=True,
init_fn=tf_utils.get_init_fn(FLAGS),
summary_op=summary_op,
number_of_steps=FLAGS.max_number_of_steps,
log_every_n_steps=FLAGS.log_every_n_steps,
save_summaries_secs=FLAGS.save_summaries_secs,
saver=saver,
save_interval_secs=FLAGS.save_interval_secs,
#session_config=config,
sync_optimizer=None
)
如果路径在代码中设置好了默认路径,那么直接在VSC的终端运行
python train_ssd_network.py
就可以开始一个新的训练过程了,不过在CPU里面需要花费的时间很长。使用与训练模型也可以加快训练过程。目前只是把流程跑通。