Anaconad+Ubuntu16.4下tensorflow+SSD人脸检测 SSD模型训练

一、创建网络配置文件

1.打开configs文件夹

具体路径:anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/models-master/research/object_detection/samples/configs

2.创建configs文件

选择ssd+resnet+fpn作为主干网络,所以复制ssd_resnet50_v1_fpn_shared_box_predictor_640x640_coco14_sync.config配置文件,给复制后的文件命名为ssd_resnet50_v1_fpn_shared_box_predictor_640x640_coco14_sync_face.config在这里插入图片描述

3.修改配置文件

1.修改第15行,num_classes的值修改为1

在这里插入图片描述
num_classes为检测的类别数且不包含背景,这里我们只做人脸检测

2.修改第178-198行tf_record_input_reader ,eval_input_reader参数的值,对应自己的路径

在这里插入图片描述3.注释139行fine_tune_checkpoint: "PATH_TO_BE_CONFIGURED/model.ckpt"

在这里插入图片描述不使用预训练模型

二、训练网络模型

打开终端在tensorflow环境,进入到research目录下,运行research/object_detection/model_main.py

python3 research/object_detection/model_main.py  --pipeline_config_path=/home/gqw/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/models-master/research/object_detection/samples/configs/ssd_resnet50_v1_fpn_shared_box_predictor_640x640_coco14_sync_face.config  --model_dir=/media/gqw/Sduty/Linux_tensorflow/widerface/resnet50v1-fpn --num_train_steps=100000 --alsologtostder

pipeline_config_path=网络结构配置文件对应的路径
model_dirmodel=对应的路径
num_train_steps=训练总的迭代次数
alsologtostder生成的logo日志

报错1

Traceback (most recent call last):
  File "/home/gqw/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/models-master/research/object_detection/model_main.py", line 109, in <module>
    tf.app.run()
  File "/home/gqw/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/platform/app.py", line 125, in run
    _sys.exit(main(argv))
  File "/home/gqw/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/models-master/research/object_detection/model_main.py", line 71, in main
    FLAGS.sample_1_of_n_eval_on_train_examples))
  File "/home/gqw/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/models-master/research/object_detection/model_lib.py", line 566, in create_estimator_and_inputs
    config_override=config_override)
  File "/home/gqw/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/models-master/research/object_detection/utils/config_util.py", line 95, in get_configs_from_pipeline_file
    proto_str = f.read()
  File "/home/gqw/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/lib/io/file_io.py", line 125, in read
    self._preread_check()
  File "/home/gqw/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/lib/io/file_io.py", line 85, in _preread_check
    compat.as_bytes(self.__name), 1024 * 512, status)
  File "/home/gqw/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/util/compat.py", line 61, in as_bytes
    (bytes_or_text,))
TypeError: Expected binary or unicode string, got None

解决

国内对这个错误可参考的博客数不是很多,只有这一个小哥遇到了相同的错误。于是去google了一下,此篇参考价值比较好。总结后主要是三个方案
1.命令是否输入正确
在这里插入图片描述在这里插入图片描述
2.检查路径是否正确,保括斜线的方向,完整的路径必须在一行不能回车,完整的路径必须在一行不能空格
在这里插入图片描述

3.更改为决定路径
在这里插入图片描述
外国小哥看完了drecryptost大哥的回答后重启了一下,竟然好了

在这里插入图片描述中国小哥大概也是这个意思
在这里插入图片描述

我核对我的路径没有错误,决定更改决定路径试试

在这里插入图片描述依然报错
一阵沮丧之后,决定仔细看看报错信息,发现可能与配置文件有关。

create_estimator_and_inputs
    config_override=config_override)
  File "/home/gqw/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/models-master/research/object_detection/utils/config_util.py", line 95, in get_configs_from_pipeline_file
  proto_str = f.read()  

尝试检查配置文件,但打开后发现配置文件全报红了。状况惨烈如下图所示:

在这里插入图片描述一度以为是运行时不通过引起的配置文件报红。
这个错误持续许久,当我再次打开PyCharm时,发现弹出了一个对话框

在这里插入图片描述
想起来第一次打开配置文件时,提示我是否安装插件,让我安装三个,其中就要Illuminated Cloud

在这里插入图片描述

点击Retry失败,然后让我激活注册,但是无论怎么激活,再次打开还是提示这个框。在我核对完时间正确之后,开始研究这是个啥?
在这里插入图片描述
看不懂,选择卸载,卸载方法参考了此博客

然后,配置文件就变正常了在这里插入图片描述心里很是欢喜,继续运行model_main.py

报错2

2020-12-06 14:27:09.418454: I tensorflow/core/kernels/data/shuffle_dataset_op.cc:95] Filling up shuffle buffer (this may take a while): 1535 of 2048
2020-12-06 14:27:12.260443: I tensorflow/core/kernels/data/shuffle_dataset_op.cc:131] Shuffle buffer filled.
Segmentation fault (core dumped)

具体如下

提示缓存区满了,同时电脑变的异常卡顿

解决

重启电脑,再次尝试执行!

报错3

依然出错
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述查看报错信息

Caused by op 'PyFunc_3', defined at:
  File "/home/gqw/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/models-master/research/object_detection/model_main.py", line 109, in <module>
    tf.app.run()

最后提示

Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info.

解决

1)解决第一个报错信息
打开research/object_detection/model_lib.py脚本
修改第438行 eval_metric_ops,参数修改为(eval_config, list(category_index.values()), eval_dict)

在这里插入图片描述
参考博客

1)解决第二个报错信息
查找资料,原因为显存不够,于是查看显存,具体方法详见这篇博客
我们采取的方法是降低训练轮数,直到电脑不报错为止。
打开ssd_resnet50_v1_fpn_shared_box_predictor_640x640_coco14_sync_face配置文件,减小训练轮数

修改第140行,batch_size值为1

在这里插入图片描述
再次训练

报错4

提示找不到train.record文件,这里没有保存报错信息。

解决

可能因为我是record文件和项目不在一个盘,我的电脑的解决办法就是在运行执行前先打开train.record所在的文件夹,提前让电脑知道它在这,然后报错解决。

再次运行

运行成功!!!

训练一段时间后打印出日志信息,

在这里插入图片描述

我们查看此时的显存使用情况
在这里插入图片描述
这里查看显存的占用率,这个轮数是可以的。

报错5

在这里插入图片描述发现训练时被killed,无奈。

解决

再次运行。

经过大约10个小时,终止了训练(再次运行可以恢复到原处继续训练),我们查看训练好的模型。在这里插入图片描述
我们看到,此时已经训练了49258次。
打开checkpoint文件在这里插入图片描述
看到最后一次训练确实定位在了49258次。

三、查看训练参数

利用TensorBoard查看精确值,召回率,IOU值,loos值,学习率等
具体含义,推荐:
博客1
博客2
准备工作,点击此篇博文
我们查看训练到所呈现出来的效果。

1.精确率
在这里插入图片描述

2.召回率在这里插入图片描述

3.IOU
在这里插入图片描述

4.loos

在这里插入图片描述

5.学习率

在这里插入图片描述

效果不是很理想,这里暂且不做优化,继续进行!

上篇:利用TensorBoard观察训练曲线
下篇:Anaconad+Ubuntu16.4下tensorflow+SSD人脸检测 将模型转为pb文件

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值