工作记录: 在自己数据库上运行TF-SSD——training Debug篇
2017-05-25 10:49
337 查看
用修改后的tf_convert_data.py处理自己的数据库,整理成多个.tfrecord文件之后,便是本篇要讲的部分。
首先,运行以下代码片1:
结果显示:
.tfrecord读取正常;
创建卷积核失败,错误如下(CPU不支持一些东西):
查找原因,详见Daniel2333的博客:
应该安装gpu版本的TensorFlow;
进入
继续运行代码片1,出现OOM错误,根据该文章提示,应该是没有采用batch或者batch太大导致的问题,设置batch为16:
开始运行:
不过看到loss并没有很快降低,而且始终在10~100之间波动,说明某些参数设置不合适。
(在已经训练好的权重基础上进行fine-tuning.)
然后被告知数据库中有一条目标框的值为1.005328,要求[0,0.1],因此需要返回检查数据库。
创建test.py,内容如下:
打开ipython,输入
(出错的值,行数,图片编码)
继续输入以下代码筛选
打算不采用这些数据,因此,直接在数据库根目录下找到train_tf.txt和valid_tf.txt,删除其中相应的序号即可,然后运行:
一定要注意,运行这条命令一定要在Python2环境下,因为Python3已经取消了decode,改用byte替代了,如果用Python3运行会报错.
然后修改optimal_z_2017中的训练集、测试集的数量(因为从数据集中删除了图片,因此数量也应修改):
重复以上代码,进行训练,仍然和以上情况相同,陷入局部最优解。
那么,继续调参。。。
没有任何效果。。。
尝试从头开始训练:
(采用vgg从头开始训练)
仍然没有效果
调节batch_size=24,这是目前我的服务器上能够接受的最大batch,再打就OOM了。然而,仍然没有效果。。。
最终,决定切换服务器,到一个更大的服务器上去跑。。。
可以参考服务器批量拷贝命令
把所有的数据和代码复制到另一个服务器上,并在该服务器上搭建Python3虚拟环境。
仍然选择采用一个在Imagenet基础上训练的权重文件,以及其他部分权重随机初始化,从头开始训练(注意修改了路径,增大了batch_size):
(吐槽一下:然而切换到另一个服务器上,把之前的工作全都搞好之后,运行以下命令发现,这个新服务器上装的是CUDA7,不支持代码,简直哭了。。。于是,又装了一波cuda8,cudnn5)
最后,终于开始运行了:
由于gpu容量大,允许batch设置的比较大,于是我设置了50的batch_size,这样产生的效果:
刚刚开始迭代
500次迭代
1000次迭代
2000次迭代
可以看到,虽然仍有波动,但是经过近千次迭代,loss值已经稳定在比较低的值了,随着时间的推移,loss应该会继续下降,最终收敛。
首先,运行以下代码片1:
DATASET_DIR=/home/user9/DATA/OPTIMAL_Z_FINAL TRAIN_DIR=/home/user9/CODE/TF_SSD/SSD-Tensorflow-master/My_chkp CHECKPOINT_PATH=/home/user9/CODE/TF_SSD/SSD-Tensorflow-master/checkpoints/ssd_300_vgg.ckpt python train_ssd_network.py \ --train_dir=${TRAIN_DIR} \ --dataset_dir=${DATASET_DIR} \ --dataset_name=optimal_z_2017 \ --dataset_split_name=train \ --model_name=ssd_300_vgg \ --checkpoint_path=${CHECKPOINT_PATH} \ --save_summaries_secs=60 \ --save_interval_secs=600 \ --weight_decay=0.0005 \ --optimizer=adam \ --learning_rate=0.001 \ --batch_size=32
结果显示:
.tfrecord读取正常;
创建卷积核失败,错误如下(CPU不支持一些东西):
Executor failed to create kernel. Invalid argument: CPU BiasOp only supports NHWC.
查找原因,详见Daniel2333的博客:
应该安装gpu版本的TensorFlow;
进入
venv3.4.3/lib/python3.4/site-packages执行以下命令:
pip uninstall tensorflow pip install tensorflow-gpu
继续运行代码片1,出现OOM错误,根据该文章提示,应该是没有采用batch或者batch太大导致的问题,设置batch为16:
DATASET_DIR=/home/user9/DATA/OPTIMAL_Z_FINAL TRAIN_DIR=/home/user9/CODE/TF_SSD/SSD-Tensorflow-master/My_chkp CHECKPOINT_PATH=/home/user9/CODE/TF_SSD/SSD-Tensorflow-master/checkpoints/ssd_300_vgg.ckpt python train_ssd_network.py \ --train_dir=${TRAIN_DIR} \ --dataset_dir=${DATASET_DIR} \ --dataset_name=optimal_z_2017 \ --dataset_split_name=train \ --model_name=ssd_300_vgg \ --checkpoint_path=${CHECKPOINT_PATH} \ --save_summaries_secs=60 \ --save_interval_secs=600 \ --weight_decay=0.0005 \ --optimizer=adam \ --learning_rate=0.001 \ --batch_size=16
开始运行:
不过看到loss并没有很快降低,而且始终在10~100之间波动,说明某些参数设置不合适。
(在已经训练好的权重基础上进行fine-tuning.)
DATASET_DIR=/home/user9/DATA/OPTIMAL_Z_FINAL TRAIN_DIR=/home/user9/CODE/TF_SSD/SSD-Tensorflow-master/My_chkp CHECKPOINT_PATH=/home/user9/CODE/TF_SSD/SSD-Tensorflow-master/checkpoints/ssd_300_vgg.ckpt python train_ssd_network.py \ --train_dir=${TRAIN_DIR} \ --dataset_dir=${DATASET_DIR} \ --dataset_name=optimal_z_2017 \ --dataset_split_name=train \ --model_name=ssd_300_vgg \ --checkpoint_path=${CHECKPOINT_PATH} \ --save_summaries_secs=60 \ --save_interval_secs=600 \ --weight_decay=0.0005 \ --optimizer=adam \ --learning_rate=0.01 \ --learning_rate_decay_factor=0.94 \ --batch_size=16
然后被告知数据库中有一条目标框的值为1.005328,要求[0,0.1],因此需要返回检查数据库。
创建test.py,内容如下:
import os err_list=[] label='' for i in range(21761): t=i+1 filepath=os.path.join('/home/user9/Desktop/OPTIMAL_Z_FINAL/positive_labels','%05d'%t + '.txt') with open(filepath) as f: lines=f.readlines() no=0 for line in lines: no=no+1 # print(line) line=line.split() line=line[1:] line=[float(k) for k in line] a=line[0]-line[2]/2. b=line[1]-line[3]/2. c=line[0]+line[2]/2. d=line[1]+line[3]/2. # print('\tin line %d\t\t in file %05d.txt\n'%(no,t)) try: label='a=%f'%a assert(a>=0.0) label='b=%f'%b assert(b>=0.0) label='c=%f'%c assert(c<=1.0) label='d=%f'%d assert(d<=1.0) except: err_list.append((label,no,t)) continue for err in err_list: print err
打开ipython,输入
run test.py:
(出错的值,行数,图片编码)
继续输入以下代码筛选
for err in err_list: tmp=err[0][2:] tmp=float(tmp) if(tmp<=0.0 or tmp>1.0): print err
打算不采用这些数据,因此,直接在数据库根目录下找到train_tf.txt和valid_tf.txt,删除其中相应的序号即可,然后运行:
python tf_convert_data.py --output_name=voc_train python tf_convert_data.py --output_name=voc_valid
一定要注意,运行这条命令一定要在Python2环境下,因为Python3已经取消了decode,改用byte替代了,如果用Python3运行会报错.
然后修改optimal_z_2017中的训练集、测试集的数量(因为从数据集中删除了图片,因此数量也应修改):
重复以上代码,进行训练,仍然和以上情况相同,陷入局部最优解。
那么,继续调参。。。
没有任何效果。。。
尝试从头开始训练:
(采用vgg从头开始训练)
DATASET_DIR=/home/user9/DATA/OPTIMAL_Z_FINAL TRAIN_DIR=/home/user9/CODE/TF_SSD/SSD-Tensorflow-master/My_chkp CHECKPOINT_PATH=/home/user9/CODE/TF_SSD/SSD-Tensorflow-master/checkpoints/vgg_16.ckpt python train_ssd_network.py \ --train_dir=${TRAIN_DIR} \ --dataset_dir=${DATASET_DIR} \ --dataset_name=optimal_z_2017 \ --dataset_split_name=train \ --model_name=ssd_300_vgg \ --checkpoint_path=${CHECKPOINT_PATH} \ --checkpoint_model_scope=vgg_16 \ --checkpoint_exclude_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box \ --trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box \ --save_summaries_secs=60 \ --save_interval_secs=600 \ --weight_decay=0.0005 \ --optimizer=adam \ --learning_rate=0.001 \ --learning_rate_decay_factor=0.94 \ --batch_size=16
仍然没有效果
调节batch_size=24,这是目前我的服务器上能够接受的最大batch,再打就OOM了。然而,仍然没有效果。。。
最终,决定切换服务器,到一个更大的服务器上去跑。。。
可以参考服务器批量拷贝命令
scp -r file user@xxx.xxx.xx.xxx:/home/user/filepath
把所有的数据和代码复制到另一个服务器上,并在该服务器上搭建Python3虚拟环境。
仍然选择采用一个在Imagenet基础上训练的权重文件,以及其他部分权重随机初始化,从头开始训练(注意修改了路径,增大了batch_size):
(吐槽一下:然而切换到另一个服务器上,把之前的工作全都搞好之后,运行以下命令发现,这个新服务器上装的是CUDA7,不支持代码,简直哭了。。。于是,又装了一波cuda8,cudnn5)
最后,终于开始运行了:
DATASET_DIR=/home/user8/DATA/OPTIMAL_Z_FINAL TRAIN_DIR=/home/user8/CODE/TF_SSD/SSD-Tensorflow-master/My_chkp CHECKPOINT_PATH=/home/user8/CODE/TF_SSD/SSD-Tensorflow-master/checkpoints/vgg_16.ckpt python train_ssd_network.py \ --train_dir=${TRAIN_DIR} \ --dataset_dir=${DATASET_DIR} \ --dataset_name=optimal_z_2017 \ --dataset_split_name=train \ --model_name=ssd_300_vgg \ --checkpoint_path=${CHECKPOINT_PATH} \ --checkpoint_model_scope=vgg_16 \ --checkpoint_exclude_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box \ --trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box \ --save_summaries_secs=60 \ --save_interval_secs=600 \ --weight_decay=0.0005 \ --optimizer=adam \ --learning_rate=0.001 \ --learning_rate_decay_factor=0.94 \ --batch_size=50
由于gpu容量大,允许batch设置的比较大,于是我设置了50的batch_size,这样产生的效果:
刚刚开始迭代
500次迭代
1000次迭代
2000次迭代
可以看到,虽然仍有波动,但是经过近千次迭代,loss值已经稳定在比较低的值了,随着时间的推移,loss应该会继续下降,最终收敛。
相关文章推荐
- 工作记录:在自己的数据库上训练RCNN
- 工作记录:训练、测 e169 试 TF-SSD
- 工作记录:RCNN在自己的数据库上finetune之后进行测试
- 今天第一次开始写博客,作为新入门的程序员记录自己的学习工作中的问题。
- Ubuntu下有关Java和数据库的一些工作记录(一)
- 给自己定一个目标——学会记录生活与工作
- 数据库备份技术学习记录一--归档(亦工作,亦学习)
- 决定记录一些工作中自己Fix一些Bug的思路
- ERP IT主管工作记录--自己记录使用
- 分享自己的工作内容及数据库相关概念
- 一次工作记录,写一遍为了更好地记忆(有用的内容都是转的,自己写的只是过程)
- sqlite工作记录-1数据库数据读取
- 删除数据库中重复记录(添加自己的理解)
- sqlite工作记录-1数据库数据写入
- sqlite工作记录-3数据库数据高效使用
- Ubuntu下有关Java和数据库的一些工作记录(一)
- C#程序将自己的每一个动作、异常、操作结果等都记录下来写入数据库
- 整理一下之前工作中记录过的一些东西——数据库连接
- 记录自己的学习工作生活
- 记录在工作中email里面用到的日常英语,聚少成多,尽快提高自己的英语读写水平