[Tensorflow] Object Detection API - build your training environment

  • Prepare protoc

Download Protocol Buffers

Create folder: protoc and unzip it.

[email protected]UX303UB$ ls
models  Others  protoc  train_data

[email protected]-UX303UB$ ls protoc/
bin  include  readme.txt

[email protected]-UX303UB$ ls protoc/bin/
protoc
  • Prepare model

Download model folder from tensorflow github.

[email protected]$ git clone https://github.com/tensorflow/models.git
Cloning into ‘models‘...
remote: Counting objects: 7518, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 7518 (delta 0), reused 1 (delta 0), pack-reused 7513
Receiving objects: 100% (7518/7518), 157.87 MiB | 1.17 MiB/s, done.
Resolving deltas: 100% (4053/4053), done.
Checking connectivity... done.

[email protected]-UX303UB$ ls
annotations  images  models  Others  raccoon_labels.csv  xml_to_csv.py

[email protected]-UX303UB$ ls models/
AUTHORS     CONTRIBUTING.md    LICENSE   README.md  tutorials
CODEOWNERS  ISSUE_TEMPLATE.md  official  research   WORKSPACE

Enter: models/research/

# Set python env.$ export PYTHONPATH=/home/unsw/Dropbox/Programmer/1-python/Tensorflow/ssd_proj/models/research/slim:$PYTHONPATH

$ python object_detection/builders/model_builder_test.py
.......
----------------------------------------------------------------------
Ran 7 tests in 0.022s

OK
  • Prepare train.record

Download: https://github.com/datitran/raccoon_dataset/blob/master/generate_tfrecord.py

"""
Usage:
  # From tensorflow/models/
  # Create train data:
  python generate_tfrecord.py --csv_input=data/train_labels.csv  --output_path=train.record

  # Create test data:
  python generate_tfrecord.py --csv_input=data/test_labels.csv  --output_path=test.record
"""
from __future__ import division
from __future__ import print_function
from __future__ import absolute_import

import os
import io
import pandas as pd
import tensorflow as tf

from PIL import Image
from object_detection.utils import dataset_util
from collections import namedtuple, OrderedDict

flags = tf.app.flags
flags.DEFINE_string(‘csv_input‘, ‘‘, ‘Path to the CSV input‘)
flags.DEFINE_string(‘output_path‘, ‘‘, ‘Path to output TFRecord‘)
FLAGS = flags.FLAGS

# TO-DO replace this with label map
def class_text_to_int(row_label):
    if row_label == ‘raccoon‘:
        return 1
    else:
        None

def split(df, group):
    data = namedtuple(‘data‘, [‘filename‘, ‘object‘])
    gb = df.groupby(group)
    return [data(filename, gb.get_group(x)) for filename, x in zip(gb.groups.keys(), gb.groups)]

def create_tf_example(group, path):
    with tf.gfile.GFile(os.path.join(path, ‘{}‘.format(group.filename)), ‘rb‘) as fid:
        encoded_jpg = fid.read()
    encoded_jpg_io = io.BytesIO(encoded_jpg)
    image = Image.open(encoded_jpg_io)
    width, height = image.size

    filename = group.filename.encode(‘utf8‘)
    image_format = b‘jpg‘
    xmins = []
    xmaxs = []
    ymins = []
    ymaxs = []
    classes_text = []
    classes = []

    for index, row in group.object.iterrows():
        xmins.append(row[‘xmin‘] / width)
        xmaxs.append(row[‘xmax‘] / width)
        ymins.append(row[‘ymin‘] / height)
        ymaxs.append(row[‘ymax‘] / height)
        classes_text.append(row[‘class‘].encode(‘utf8‘))
        classes.append(class_text_to_int(row[‘class‘]))

    tf_example = tf.train.Example(features=tf.train.Features(feature={
        ‘image/height‘: dataset_util.int64_feature(height),
        ‘image/width‘: dataset_util.int64_feature(width),
        ‘image/filename‘: dataset_util.bytes_feature(filename),
        ‘image/source_id‘: dataset_util.bytes_feature(filename),
        ‘image/encoded‘: dataset_util.bytes_feature(encoded_jpg),
        ‘image/format‘: dataset_util.bytes_feature(image_format),
        ‘image/object/bbox/xmin‘: dataset_util.float_list_feature(xmins),
        ‘image/object/bbox/xmax‘: dataset_util.float_list_feature(xmaxs),
        ‘image/object/bbox/ymin‘: dataset_util.float_list_feature(ymins),
        ‘image/object/bbox/ymax‘: dataset_util.float_list_feature(ymaxs),
        ‘image/object/class/text‘: dataset_util.bytes_list_feature(classes_text),
        ‘image/object/class/label‘: dataset_util.int64_list_feature(classes),
    }))
    return tf_example

def main(_):
    writer = tf.python_io.TFRecordWriter(FLAGS.output_path)
    path = os.path.join(os.getcwd(), ‘images‘)
    examples = pd.read_csv(FLAGS.csv_input)
    grouped = split(examples, ‘filename‘)
    for group in grouped:
        tf_example = create_tf_example(group, path)
        writer.write(tf_example.SerializeToString())

    writer.close()
    output_path = os.path.join(os.getcwd(), FLAGS.output_path)
    print(‘Successfully created the TFRecords: {}‘.format(output_path))

if __name__ == ‘__main__‘:
    tf.app.run()

generate_tfrecord.py

NB: we will do everything in models/research/ where the env has been set well.

So, move data/images here for generate_tfrecord.py

[email protected]UX303UB$ pwd
/home/unsw/Dropbox/Programmer/1-python/Tensorflow/ssd_proj/models/research

[email protected]-UX303UB$ python ../../generate_tfrecord.py --csv_input=../../data/raccoon_labels.csv  --output_path=../../data/train.record
Successfully created the TFRecords: /home/unsw/Programmer/1-python/Tensorflow/ssd_proj/models/research/../../data/train.record

Now, we have got train_labels.csv (name changed from raccoon_labels.csv) train.record.

  • Prepare pre-train model

Download pre-trained model: https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

Download configure file for pre-trained model: https://github.com/tensorflow/models/tree/master/research/object_detection/samples/configs

This configure is already in our model folder:

[email protected]UX303UB$ pwd
/home/unsw/Programmer/1-python/Tensorflow/ssd_proj/models/research/object_detection/samples/configs

[email protected]-UX303UB$ ls
faster_rcnn_inception_resnet_v2_atrous_coco.config  faster_rcnn_resnet101_voc07.config  faster_rcnn_resnet50_pets.config  ssd_inception_v2_pets.config
faster_rcnn_inception_resnet_v2_atrous_pets.config  faster_rcnn_resnet152_coco.config   rfcn_resnet101_coco.config        ssd_mobilenet_v1_coco.config
faster_rcnn_resnet101_coco.config                   faster_rcnn_resnet152_pets.config   rfcn_resnet101_pets.config        ssd_mobilenet_v1_pets.config
faster_rcnn_resnet101_pets.config                   faster_rcnn_resnet50_coco.config    ssd_inception_v2_coco.config

Configure based on your own data.

  1 # SSD with Mobilenet v1, configured for Oxford-IIIT Pets Dataset.
  2 # Users should configure the fine_tune_checkpoint field in the train config as
  3 # well as the label_map_path and input_path fields in the train_input_reader and
  4 # eval_input_reader. Search for "PATH_TO_BE_CONFIGURED" to find the fields that
  5 # should be configured.
  6
  7 model {
  8   ssd {
  9     num_classes: 1

158   fine_tune_checkpoint: "ssd_mobilenet_v1_coco_11_06_2017/model.ckpt"
159   from_detection_checkpoint: true
160   # Note: The below line limits the training process to 200K steps, which we
161   # empirically found to be sufficient enough to train the pets dataset. This
162   # effectively bypasses the learning rate schedule (the learning rate will
163   # never decay). Remove the below line to train indefinitely.
164   num_steps: 200000
165   data_augmentation_options {
166     random_horizontal_flip {
167     }
168   }
169   data_augmentation_options {
170     ssd_random_crop {
171     }
172   }
173 }
174
175 train_input_reader: {
176   tf_record_input_reader {
177     input_path: "data/train.record"
178   }
179   label_map_path: "data/object-detection.pbtxt"
180 }
181
182 eval_config: {
183   num_examples: 2000
184   # Note: The below line limits the evaluation process to 10 evaluations.
185   # Remove the below line to evaluate indefinitely.
186   max_evals: 10
187 }
188
189 eval_input_reader: {
190   tf_record_input_reader {
191     input_path: "data/test.record"
192   }
193   label_map_path: "data/object-detection.pbtxt"
194   shuffle: false
195   num_readers: 1
196 }

As above, we need to create object-detection.pbtxt as following:

item {
    id: 1
    name: ‘raccoon‘
}
  • Prepare training

Move all configure files based on ssd_mobilenet_v1_pets.config as following:

training folder: object-detection.pbtxt and ssd_mobilenet_v1_pets.config.

data folder: train.record and train_labels.csv.

Start training.

python object_detection/train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/ssd_mobilenet_v1_pets.config

INFO:tensorflow:Starting Session.
INFO:tensorflow:Saving checkpoint to path training/model.ckpt
INFO:tensorflow:Starting Queues.
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:Recording summary at step 0.
INFO:tensorflow:global step 1: loss = 14.5804 (33.780 sec/step)
INFO:tensorflow:global step 2: loss = 12.6232 (19.210 sec/step)
INFO:tensorflow:global step 3: loss = 12.0996 (17.102 sec/step)
时间: 2024-11-05 05:46:24

[Tensorflow] Object Detection API - build your training environment的相关文章

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 well as how to train train a convolution neural network to do object detection on your own data set. Steps: 1. Installation and Configuration Install

TensorFlow object detection API应用二

前一篇讲述了TensorFlow object detection API的安装与配置,现在我们尝试用这个API搭建自己的目标检测模型. 一.准备数据集 本篇旨在人脸识别,在百度图片上下载了120张张钧甯的图片,存放在/models/research/object_detection下新建的images文件夹内,images文件夹下新建train和test两个文件夹,然后将120分为100和20张分别存放在train和test中. 接下来使用 LabelImg 这款小软件,对train和test

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

一.下载Tensorflow object detection API工程源码 网址:https://github.com/tensorflow/models,可通过Git下载,打开Git Bash,输入git clone https://github.com/tensorflow/models.git进行下载. 二.标记需要训练的图片 ①.在第一步下载的工程文件models\research\object_detection目录下,建立一个my_test_images用来放测试test和训练t

谷歌开源的TensorFlow Object Detection API视频物体识别系统实现(二)[超详细教程] ubuntu16.04版本

本节对应谷歌开源Tensorflow Object Detection API物体识别系统 Quick Start步骤(一): Quick Start: Jupyter notebook for off-the-shelf inference 本节步骤较为简单,具体操作如下: 1.在第一节安装好jupyter之后,在ternimal终端进入到models文件夹目录下,执行命令: jupyter-notebook 2.会在网页打开Jupyter访问object_detection文件夹,进入obj

TensorFlow object detection API

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_pets.md 1. 获取数据Oxford-IIIT Pets Dataset # From tensorflow/models/research/ wget http://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz wget http://www.robo

#tensorflow object detection api 源码分析

前言 Tensorflow 推出的 Object Detection API是一套抽象程度极高的目标检测框架,可以快速用于生产部署.但网络上大多数相关的中英文文章均只局限于应用层面的分析,对于该套框架的算法实现源码没有针对性的分析文章.对于选择tensorflow作为入门框架的深度学习新手,不仅应注重于算法本身的理解,更应注重算法的编码实现.本人也是刚入门深度学习的新手,深深困扰于tensorflow 目标检测框架的抽象代码,因此花费了大量时间分析源码,希望能对博友有益,同时受限于眼界,文章中必

ubuntu Tensorflow object detection API 开发环境搭建

https://blog.csdn.net/dy_guox/article/details/79111949 [email protected]:~$ [email protected]:~$ source activate t20190518(t20190518) [email protected]:~$ (t20190518) [email protected]:~$ (t20190518) [email protected]:~$ (t20190518) [email protected]

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

教程:http://blog.csdn.net/xiaoxiao123jun/article/details/76605928 全部代码:https://github.com/lyj8330328/Object-Detection 原文地址:https://www.cnblogs.com/lyj-gyq/p/8488485.html

TensorFlow models - object detection API 安装

tensorflow 的 models 模块非常有用,不仅实现了各种模型,也包括了 原作者 训练好的模型及其使用方法,本文 以 object detection 为例 来说明如何使用 训练好 的模型: 首先呢,还是建议 去 官网 看看使用方法,因为 tensorflow 的版本混乱,网上教程针对的版本各不相同,所以各种坑: 下面是正题,本文针对 windows 操作系统: 第一步:下载 models 模块,解压 https://github.com/tensorflow/models 第二步:安