2020年tensorflow定制训练模型笔记(3)——开始训练

现在,我们开始训练文件。这里,我将用一些训练好的模型来做迁移训练。
这里简单介绍一下迁移训练,迁移训练就是在别人训练的模型基础上继续训练,这样我们的模型训练就不是从零开始,加快速度以及提高准确率。(我讲的比较简单)
参考网址在这:https://blog.csdn.net/hehedadaq/article/details/79845761

1.配置文件

1.1 配置pbxt文件

  1. 来到object_detection/data/ 文件夹下,随便复制一个.pbxt格式的文件到你的xx_object/data/ 文件下。
  2. 修改里面的内容如下图所示,你有几个类别就写几个。保存并且重命名(随便你命名什么,自己方便即可)
  3. 将两个csv文件和两个record文件都放到这里
    在这里插入图片描述

1.2 下载模型
我举例两个模型,大家二选一即可。理论上faster-rnn更加准确,ssd更加快,但是不知道是不是写代码时间的问题,2018年的faster我感觉速度和准确率都要好于ssd,大家可以试试。由于我暂时找不到还不错的模型地址,正常情况下去在官方渠道上搞到的。我就提供百度云好了。
ssd_mobilenet_v1_coco_2017_11_17模型:
链接:https://pan.baidu.com/s/1mqCa4MqgzFtXPSkoXvIVWA
提取码:yyge

faster_rcnn_inception_v2_coco_2018_01_28模型:
链接:https://pan.baidu.com/s/1PUBklY9FMeBVYy5jQlpMeQ
提取码:tu2d

1.3 解压
放到ogject_detection文件夹下解压
在这里插入图片描述
在这里插入图片描述
1.4 配置.config文件
在object_detection\samples\configs 文件夹下找到对应的.config文件(理论上这里面有的模型你都可以下载训练试试)
理论上这里面有的模型你都可以下载训练试试
我拿faster_rcnn_inception_v2_coco_2018_01_28模型举例 ,复制faster_rcnn_inception_v2_coco.config到 xx_object/training 文件夹下

  1. 修改第10行的num个数,我是6个所以写6
    在这里插入图片描述

  2. 86行的batch_size根据你电脑的性能填,保守起见填1。这可以算是训练的最低标准了。

  3. 修改第107行的文件路径,就是你下载的那个模型文件夹路径
    在这里插入图片描述

  4. 122行与136行是你对应文件夹下的record文件

  5. 124与138行是你对应文件夹下的pbtxt文件

  6. 128行 num_examples 这个值看情况,网上有人目前训练200个样本设置的值是 10,我100个左右所以写了3这样子。详细了解的话百度 。
    在这里插入图片描述
    然后保存,将xx_object文件夹下的data文件夹(为避免重命名所以我改名为mydata文件夹了)和training文件夹单独放入到object_detection文件夹下。现在我们文件就全配置完了,可以开始训练模型了。

2.训练模型

在object_detection文件夹下运行此代码:

python legacy/train.py --logtostderr --train_dir=./training --pipeline_config_path=./training/faster_rcnn_inception_v2_coco.config --num_train_steps=50000   --num_eval_steps=2000   --alsologtostderr
  1. –logtostderr:我也不知道是干啥的
  2. –train_dir:训练文件夹
  3. –pipeline_config_path:config文件所在的位置
  4. –num_train_steps:设置的步数值
  5. –num_eval_steps:设置的验证值
  6. –alsologtostderr:不知道什么作用
  7. 上限200000,在config文件里有说明,你可以找一找。
  8. 如果你是gpu版本的,直接输入上面修改后的代码。但如果是cpu版本的需要打开legacy/train.py,修改clone_on_cpuTrue,原本默认是False的。
    在这里插入图片描述

3.训练理论

现在没有问题的话应该是在训练中,因为我也无法顾及到所有人的情况,如果有什么报错的或者缺失库的话,百度一下基本都能解决。
在这里插入图片描述
gpu基本上0.2秒一个吧,我的cpu会是0.5一个。在训练过程中,你也可以可视化整个过程。另开一个命令窗口,在object_detection 下运行

tensorboard --logdir=my_obgect/training

之后会出现一个6006端口的网址复制粘贴到游览器上即可观看在这里插入图片描述
反正要训练好久,我简单介绍一下它是如何训练的。
我们的图片上的物体经过处理被分为两个东西,一个是这个物体的照片,另一个便是它的标签。

  • 假设这是一张图片上的正方形,正方形返回的值是4,那它对应的标签会是:
    [0, 0 ,0, 1, 0 ,0] #一共六个标签,返回是4.
  • 正方形这个图片信息经过卷积层池化层全连接层之后会返回一个值,比方说输出了这:
    [0.1, 0.05, 0.05, 0.6, 0.1, 0.1] #可以理解为卷积处理后给出的各个图片的概率
  • 将两个一维数组各个值相减的平方作相加,即为loss 损失函数,然后通过梯度下降的方法去更新前面的卷积权重,使得loss函数的值越来越小,这样我们的模型也就会越来越强大。

其实里面还有很多难搞的学问,比如如何从图片得到数组,我就很皮毛皮毛的讲解一些。
需要注意的是,一旦报错了做好把training下的(除了config)文件全部删除再重新开始。
如果你感觉训练的差不多了(一个指标就是我上面说的loss是否小到你可以接受的位置)你可以直接ctrl+c退出训练,不用担心,程序一直在帮你保存最近的模型,想要恢复训练,重新输入训练得代码就可以了。

4.生成模型

如果一切正常的话,在training文件夹下会是这个样子的在这里插入图片描述
在 “object_detection” 文件夹下新建 “xx_detection” 文件夹,用来存放最终的模型文件,这里我取名为“my_detection_v1”。我喜欢用‘v+数字’来区分我模型的版本。执行下面的代码:

python export_inference_graph.py \ --input_type image_tensor \ --pipeline_config_path my_object/training/faster_rcnn_inception_v2_coco.config \  --trained_checkpoint_prefix my_object/training/model.ckpt-70014 \  --output_directory my_detection_v1

需要注意的是:

  • –pipeline_config_path:config的路径
  • –trained_checkpoint_prefix:最后模型步数的路径,根据你实际的来,我最后保存的模型文件是训练了70014的,所以写70014。

这时候在“my_detection_v1”文件夹下就是这个样子的在这里插入图片描述
我们所需要的就是frozen_inference_graph.pb这个文件。

5.测试模型

回到我的第一篇笔记上2020年tensorflow定制训练模型笔记(1)——object detection的安装。我给出的测试代码,将这三个部分修改成自己的。
在这里插入图片描述
然后将测试图片更换成自己的照片就可以看到结果了。在这里插入图片描述
基本上可以看出效果,不完美是肯定的。比方说,训练照片的丰富程度和质量、训练时间的长短等等。

总结

我觉得三篇写下来,应该能帮助到一些人学会定制自己的模型,并且对深度学习的整个流程会有一些了解 。在这过程中,困难和沮丧会接踵而来,但每一次的突破同样也能让我兴奋到爆,可能这就是人工智能的魅力吧。
希望大家都能追随自己的梦想,一路前行…

2020年tensorflow定制训练模型笔记(1)——object detection的安装
2020年tensorflow定制训练模型笔记(2)——制作标签
2020年tensorflow定制训练模型笔记(3)——开始训练

猜你喜欢

转载自blog.csdn.net/weixin_45569617/article/details/104526277