本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃

  最近事情比较多,前面坑挖的有点久,今天终于有时间总结一下,顺便把Windows下训练跑通。Linux训练建议仔细阅读https://zhuanlan.zhihu.com/p/27469690,我借鉴颇多,此外还可以参考GitHub上的官方文档https://github.com/tensorflow/models/tree/master/research/object_detection。

  总体而言Windows下训练还是比较坑的,centos服务器上自己的模型已经训练完了,我也是为了测试而尝试。。。基本把坑趟了一遍。我是在办公电脑上测试的,没有GPU,还好内存是32G,训练期间CPU使用率基本保持在99%。

第一部分  PASCAL VOC数据集的介绍

The PASCAL VOC project(熟悉的小伙伴可以直接看第二部分)
首先了解一下本次训练用的数据集和它的来历
  注   册http://host.robots.ox.ac.uk/需要公司或机构邮箱,个人邮箱(gmail等等)不可注册,不注册应该也不影响下载。
  PascalVOC的官方简介:Provides standardised image data sets for object class recognition;Provides a common set of tools for accessing the data sets and annotations;Enables evaluation and comparison of different methods;Ran challenges evaluating performance on object class recognition (from 2005-2012, now finished)
  总而言之,它是一个视觉挑战赛,举办到2012年就停止了,最后一次2012年挑战赛的网址:http://host.robots.ox.ac.uk/eval/challenges/voc2012/
 
一、 PVOC2007&2012数据集一共20 object classes:
person
bird, cat, cow, dog, horse, sheep
aeroplane, bicycle, boat, bus, car, motorbike, train
bottle, chair, dining table, potted plant, sofa, tv/monitor

二、2012年的挑战赛一共有5 个main tasks 和 2个 ``taster'' tasks:

  1. Classification: 对每个类判断测试图片中是否存在该类的至少1个对象.

  2. Detection: 对每个类判断测试图片中属于该类对象的外包边框.

  3. Segmentation: 对测试图中的每个像素,判断该像素属于20个类对象还是属于背景,即图像的语义分割.

  4. Action Classification: 对每个动作类别,判断测试图片中是否有人(已通过外包边框标明)正在做出相应的动作,动作共有10个分类:jumping; phoning; playing a musical instrument; reading; riding a bicycle or motorcycle; riding a horse; running; taking a photograph; using a computer; walking。此外,数据集中有一些人在做其他动作(不在10个分类中),作为干扰测试.

  5. Large Scale Recognition: 这个比赛项目由ImageNet组织,他们的网站: http://www.image-net.org/challenges/LSVRC/2012/index

  6.  2``taster'' tasks:Boxless Action Classification: 判断测试图中人是否在做相应动作,这些人仅通过身体某处的单个点标明,没有外包边框.Person Layout: 对测试图中的每个人(已通过外包边框标明),判断这些人的头、手、脚部位,并通过外包框标明。

三、目录结构:如图所示:

  1.JPEGImages存放图片;

  2. Annotation存放对图片的标注信息(XML文件),即外包边框bounding box的位置信息;

  3. SegmentationClass和SegmentationObject存放了图片的分割前景。

  4. ImageSets是对图片集合的描述,分别对应了不同的竞赛任务,例如Layout表示图片中人体部位的数据,Main表示每个图片包含的分类信息(20个类别),Segmentation表示用于分割的数据,2007没有action,2012有了action数据,表示图片中人的动作。

  红框中的4个压缩包分别是2012和2007的test、trainval文件,把2007的test和trainval解压缩,2007的test和train目录结构是一致的,只是图片和标注内容互补。2012也是如此,在ImageSets的main中通过txt把数据集划分成train、train_test、train_val等几个部分。

  以上文件下载并解压缩到D:\dataset\VOCdevkit目录下。

第二部分TensorFlowObjectDetectionAPI的训练详细步骤

这个API的主要任务是进行ObjectDetection,所以只会用到数据集中的前三个目录,这里使用VOC2012进行训练。

一、数据格式转换

  在第一部分介绍中,我已经把PascalVOC数据集下载到D:\dataset\VOCdevkit目录下,如果要制造自己的数据集,可以仿照VOC的目录结构,通过lableImg工具进行标注,具体就不演示了,可以参考的博客很多。

  因为tf训练需要使用tfrecord格式,所以首先需要把PascalVOC数据集转换成TensorFlow record格式,ObjectDetectionAPI下提供了格式转换的方法:create_pascal_tf_record.py,参考知乎的博客,需要把164行examples_path修改为:    
data_dir, year, 'ImageSets', 'Main',FLAGS.set + '.txt'

  VOC数据集和转换后tfrecord数据集都存放在D:\dataset目录下,这里需要为tfrecord新建一个文件夹D:\dataset\TFrecord,并在TFrecord下新建文件夹data。完成后可以运行命令:

python create_pascal_tf_record.py --data_dir=D:\dataset\VOCdevkit --year=VOC2012 --set=train --output_path=D:\dataset\TFrecord\data\pascal_train.record

  上面的命令中,data_dir为存放的VOC数据集目录,year参数只接受VOC2012和VOC2007两个数据集,这里选用了VOC2012,如果自己标注了数据,请按照VOC目录结构存放,set表示使用VOC2012的train部分进行训练,大概5700多张图片,output_path为record数据集的输出目录,就是刚才新建的data文件夹。

二、下载预训练模型

  通常模型的训练都不是从0开始的,利用fine-tuning的思想在已有模型基础上训练可以有一个好的performance,https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md官网上提供了5个模型,大家可以自行下载,这里我下载了mAP比较高的faster_rcnn_inception_resnet_v2_atrous_coco,这是一个coco数据集训练的模型,解压缩后把其中的model.ckpt.*三个文件复制到D:\dataset\TFrecord\models下,没有models目录需要新建一个。

三、修改配置文件

  刚才下载的数据集是faster_rcnn_inception_resnet_v2_atrous_coco,在object_detection\samples\configs目录下找到对应的.config文件,如果没有,可以到https://github.com/tensorflow/models/tree/master/research/object_detection/samples/configs复制对应的config文件, 把faster_rcnn_inception_resnet_v2_atrous_coco.config放到预训练模型目录下:D:\dataset\TFrecord\models

  打开faster_rcnn_inception_resnet_v2_atrous_coco.config,修改num_classes为你自己的num_classes,这里VOC2012有20个分类,所以修改为20。然后修改其中5个路径:

112行 fine_tune_checkpoint: "D:\\dataset\\TFrecord\\models\\model.ckpt"
127行 input_path: "D:\\dataset\\TFrecord\\data\\pascal_train.record"
129行 label_map_path: "D:\\dataset\\TFrecord\\data\\pascal_label_map.pbtxt"
141行 input_path: "D:\\dataset\\TFrecord\\models\\pascal_val.record"
143行 label_map_path: "D:\\dataset\\TFrecord\\models\\pascal_label_map.pbtxt"

  其他训练的配置信息可以自己研究一下,可以针对自己的数据集进行调整。

四、开始训练

  因为python环境变量配置问题,这里Windows下和Linux也有不同,在object_detection中训练的文件为train.py,我们打开可以看到里面的model都是通过object_detection来加载的。

  因为路径问题,直接运行python train.py会产生model not found,两个解决办法,一是把object_detection加入python环境变量中,另一个办法,把train.py复制到object_detection目录外执行。这里我选用了后者。在object_detection外执行:

python train.py --train_dir=D:\dataset\TFrecord\train --pipeline_config_path=D:\dataset\TFrecord\models\faster_rcnn_inception_resnet_v2_atrous_coco.config

第三部分 可能产生的错误

一、执行python train.py报错:trainer.py“ModuleNotFoundError: No module named 'deployment'”,或者报错No module named 'nets'

  • 错误原因,这两个model都是在TensorFlow/models/slim中,如果你阅读了我的上一篇文章http://www.cnblogs.com/mar-q/p/7459845.html,就可以知道,需要把models/slim加入到PYTHONPATH环境变量中。

二、运行训练后报错:“WARNING:root:Variable ……not available in checkpoint”

  • 错误路径train.py->trainer.py->train()->init_saver = tf.train.Saver(available_var_map),产生原因,第2步和第3步中预训练模型和config文件没有对应起来,请在官网下载相匹配的预训练模型和config文件。

三、其他错误

  • 如果还报一些ModuleNotFoundError错误建议把object_detection目录下的.pyc文件清空一下再执行train。

训练情况:

综上,如果有可能。。。Windows下的配置还是很糟心,奇葩问题比较多,建议还是在Linux下训练,明天周末,我先丢在机器上跑吧。。。

TensorFlow Object Detection API(Windows下训练)的更多相关文章

  1. 基于TensorFlow Object Detection API进行迁移学习训练自己的人脸检测模型(二)

    前言 已完成数据预处理工作,具体参照: 基于TensorFlow Object Detection API进行迁移学习训练自己的人脸检测模型(一) 设置配置文件 新建目录face_faster_rcn ...

  2. 使用Tensorflow object detection API——环境搭建与测试

    [软件环境搭建] 操作系统:windows 10 64位 内存:8G CPU:I7-6700 Tensorflow: 1.4 Python:3.5 Anaconda3 (64-bit) 以上环境搭建请 ...

  3. 使用TensorFlow Object Detection API+Google ML Engine训练自己的手掌识别器

    上次使用Google ML Engine跑了一下TensorFlow Object Detection API中的Quick Start(http://www.cnblogs.com/take-fet ...

  4. Install Tensorflow object detection API in Anaconda (Windows)

    This blog is to explain how to install Tensorflow object detection API in Anaconda in Windows 10 as ...

  5. Tensorflow object detection API 搭建物体识别模型(三)

    三.模型训练 1)错误一: 在桌面的目标检测文件夹中打开cmd,即在路径中输入cmd后按Enter键运行.在cmd中运行命令: python /your_path/models-master/rese ...

  6. Tensorflow object detection API(1)---环境搭建与测试

    参考: https://blog.csdn.net/dy_guox/article/details/79081499 https://blog.csdn.net/u010103202/article/ ...

  7. 谷歌开源的TensorFlow Object Detection API视频物体识别系统实现教程

    视频中的物体识别 摘要 物体识别(Object Recognition)在计算机视觉领域里指的是在一张图像或一组视频序列中找到给定的物体.本文主要是利用谷歌开源TensorFlow Object De ...

  8. TensorFlow object detection API

    cloud执行:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_pet ...

  9. Tensorflow object detection API 搭建属于自己的物体识别模型

    一.下载Tensorflow object detection API工程源码 网址:https://github.com/tensorflow/models,可通过Git下载,打开Git Bash, ...

  10. Tensorflow object detection API ——环境搭建与测试

    1.开发环境搭建 ①.安装Anaconda 建议选择 Anaconda3-5.0.1 版本,已经集成大多数库,并将其作为默认python版本(3.6.3),配置好环境变量(Anaconda安装则已经配 ...

随机推荐

  1. virtualbox修改主机名

    virtualbox修改主机名 /etc/hostname /etc/hosts

  2. String.getBytes(),源码之下,了无秘密

    @Deprecated public void getBytes(int srcBegin, int srcEnd, byte dst[], int dstBegin) { if (srcBegin ...

  3. hive参数配置

    CLI参数 两种修改方式: 1)启动时 hive --hiveconf  hive.cli.print.current.db=true 2)修改当前用户home目录下 .hiverc文件,hive c ...

  4. Linux入门(7) 脚本

    1.宣告使用的shell为何 2.注明创建者 编写作用等 3.注释每一个功能函数 执行脚本 1.修改可执行权限 chmod 755 file.sh 2.sh file.sh 可以直接运行脚本 #!/b ...

  5. Select的option事件问题

    一开始看你们会觉得没问题,我也就是觉得没问题所以才找不到错误所在. 问题出在option本身是没有事件的说法的,只能在select里添加事件,再获取option的属性值 这是我的写法 select设置 ...

  6. ThinkPHP中使用PHPMailer邮件类

    第一步.添加PHPMailer类库将下载后的文件解压,将PHPMail目录移动至ThinkPHP目录中的Vendor内.(请确保class.phpmailer.php文件就在ThinkPHP\Vend ...

  7. python中如何不区分大小写的判断一个元素是否在一个列表中

    python中判断某一个元素是否在一个列表中,可以使用关键字in 和 not in. 示例如下: 如果需要输出相应的信息,可以搭配使用if语句,这里不赘述. --------------------- ...

  8. CentOS7.3下部署Rsyslog+LogAnalyzer+MySQL中央日志服务器

    一.简介 1.LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端.它提供了对日志的简单浏览.搜索.基本分析和一些图表报告的功能.数据可以从数据库或一般的syslog文本文件中 ...

  9. ASP.NET没有魔法——开篇-用VS创建一个ASP.NET Web程序

    为什么写这一系列文章? 本系列文章基于ASP.NET MVC,在ASP.NET Core已经发布2.0版本,微服务漫天的今天为什么还写ASP.NET?. 答:虽然现在已经有ASP.NET Core并且 ...

  10. Python二维数据分析

    一.numpy二维数组 1.声明 import numpy as np #每一个[]代表一行 ridership = np.array([ [ 0, 0, 2, 5, 0], [1478, 3877, ...