专栏首页人人都是极客5.训练模型之利用训练的模型识别物体

5.训练模型之利用训练的模型识别物体

接下来我们开始训练,这里要做三件事:

  • 将训练数据上传到训练服务器,开始训练。
  • 将训练过程可视化。
  • 导出训练结果导出为可用作推导的模型文件。

配置 Pipeline.config

在训练之前,我们需要按照前面章节中的相关内容配置一个 pipeline.config 文件,可以使用上一章节中的配置文件作为起始模板,然后再额外调整一些参数:

    ssd {
        ....
        num_classes: 1
        ...
    }

训练数据中的物体只有一种类别,所以把num_classes设为1.

    eval_config: {
      ...
      num_examples: 60
      ...
    }

这里将num_examples设为测试集的数据个数,200 X 0.3 = 60,我们在后面可视化学习过程中会用到的。

num_steps: 20000

最后将训练迭代的次数调整到 20000 次。最终的训练目录是这样的:

然后将训练目录打包上传到训练服务器,按照第三课时的内容运行训练脚本。

可视化训练过程

将训练过程可视化是一个很重要的步骤,这样可以随时检查学习的效果,对后期的模型调优有很大的指导意义。

做法是每隔一段时间,加载当前的的训练结果,选取一些测试数据,进行推理,根据推理结果生成日志,然后用 TensorBoard 将这些日志进行可视化(称做一次评估)。下面我们来看怎么做,在训练服务器上运行:

    #进入 models/research
    python object_detection/eval.py \
        --logtostderr \
        --pipeline_config_path=${TRAIN_DIR}/model/pipeline.config \
        --checkpoint_dir=${TRAIN_DIR}/model/train \
        --eval_dir=${TRAIN_DIR}/model/val

需要将TRAIN_DIR替换为训练目录的绝对路径,然后运行 TensorBoard:

 tensorboard --logdir=${TRAIN_DIR}/model

之后打开 http:// <服务器 IP>:6006 就可以看到可视化的结果:

我们比较关心的是 Total Loss 和 Precision(准确率):

其中 x 轴为训练的步数,可以看到随着训练的进行,Loss 在下降,Precision 在提高。

单击 IMAGES tab,还可以看到可视化的推理结果:

可以看出其实在 15000 步左右的时候,这个识别模型已经有了不错的效果。拖动图片上方的小圆点,还可以查看每一次评估时的推理结果:

整个训练的时间大概在 6 个小时左右,如果我们从 SSH 登录训练主机的终端直接运行训练代码,那么假设网络出现问题导致 SSH 断开连接的话,训练也会终止,这可不是我们希望看到的。

可以用 Screen 命令来避开这个问题:

这样的话如果当前终端的 session 中止,也不会影响训练运行了。如果想重新登入某个 session 的话,可以运行:screen -ls

输出结果是这样:

假设我们需要重新登入之前训练脚本 session 的话,可以运行: screen -r 11728.train,就可以看到训练脚本仍然在终端上不停的输出信息。

OK,现在是时候喝点咖啡,6 个小时以后来收获训练结果了。

导出模型文件

大约 6 个小时以后,模型就训练好了。这个时候可以把训练文件夹打包下载到我们的笔记本上面,然后关闭和终止训练主机,这样就不再计费了。

在训练目录的 model/train 目录下会有一些 checkpoint 文件,比如:

我们需要选择一个 checkpoint,将其导出为可用于推理的模型文件,这里选择第 20000 步的 checkpoint,运行导出脚本:

    # 进入tensorflow/models/research/
    python object_detection/export_inference_graph.py \
        --input_type image_tensor \
        --pipeline_config_path ${TRAIN_PATH}/model/pipeline.config \
        --trained_checkpoint_prefix ${TRAIN_PATH}/model/train/model.ckpt-20000 \
        --output_directory ${TRAIN_PATH}/output

之后就可以在训练目录的 output 目录下找到一个frozen_inference_graph.pb文件,这就是我们导出的模型文件。

把这个模型导入到《物体识别》系列课程中的 Android App中,检验一下识别效果:

效果还不错, 可以在后台回复“熊猫模型”发送给你模型文件。

你可能会发现有一些图片中的熊猫不能被识别,那是因为为了演示方便,选取的熊猫样本图片和训练时间都不足够,这是正常的。

我们终于训练出了一个属于我们自己的、独一无二的模型。现在可以根据业务需求自行的进行训练并应用训练结果了,鼓掌!

可能有人会问,我们用一个可以识别很多其他物体的模型做转移学习,训练出来了一个可以识别熊猫的模型,那么训练出来模型是不是也可以识别其他物体呢。答案是否定的,你不能通过转移学习向一个已经训练好的识别模型里面增加可识别的物体,只能通过转移学习来加速你自己模型的训练速度。

本文分享自微信公众号 - 人人都是极客(rrgeek)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 1.训练模型之准备工作

    经常关注我公众号的读者应该还记得之前写了5课关于嵌入式人工智能的文章,可以点击这里查看(文章末尾有前4节课时的推荐),前5节课时都在讲一个主题,即如何识别物体。...

    刘盼
  • 2.运行一个demo

    在 Object Detection API 的示例代码中包含了一个训练识别宠物的 Demo,包括数据集和相应的一些代码。虽然本课程中我们会自己准备数据和脚本来...

    刘盼
  • 一文看尽2018全年AI技术大突破

    这一年成为NLP研究的分水岭,各种突破接连不断;CV领域同样精彩纷呈,与四年前相比GAN生成的假脸逼真到让人不敢相信;新工具、新框架的出现,也让这个领域的明天特...

    刘盼
  • tensorflow使用object detection实现目标检测超详细全流程(视频+图像集检测)

    https://github.com/tensorflow/models/tree/master/research 本文以mobilenet-ssd-v2为例进...

    朱晓霞
  • 预、自训练之争:谷歌说预训练虽火,但在标注数据上自训练更有效

    早在 2018 年,何恺明等人在论文《Rethinking ImageNet Pre-training》中重新思考了 ImageNet 预训练模型。他们发现这种...

    机器之心
  • tensorflow使用object detection实现目标检测超详细全流程(视频+图像集检测)

    参考原始代码:https://github.com/tensorflow/models/tree/master/research 本文以mobilenet-ss...

    机器学习AI算法工程
  • 预训练后性能反而变差,自训练要取代预训练了吗?

    早在2018年底,FAIR的研究人员就发布了一篇名为《Rethinking ImageNet Pre-training》的论文 ,这篇论文随后发表在ICCV20...

    AI科技评论
  • 0690-TensorFlow之车牌识别案例

    参考文档:https://blog.csdn.net/shadown1ght/article/details/78571187

    Fayson
  • 新一届最强预训练模型上榜,出于BERT而胜于BERT

    【导读】预训练方法设计有不同的训练目标,包括语言建模、机器翻译以及遮蔽语言建模等。最近发表的许多论文都使用了微调模型,并预先训练了一些遮蔽语言模型的变体。然而,...

    AI科技大本营
  • 吴恩达《ML Yearning》| 关于学习曲线的分析&与人类级别的表现对比

    MachineLearning YearningSharing 是北京科技大学“机器学习研讨小组”旗下的文献翻译项目,其原文由Deep Learning.ai ...

    马上科普尚尚

扫码关注云+社区

领取腾讯云代金券