From: TensorFlow Object Detection API

This chapter help you to train your own model to identify objects required.

1. Data

1.1 Get your own data

  • 标准的范例,从ImageNet上获取数据集

Get your own data from ImageNet

Download tiny-imagenet-200.zip, which is smaller than original monster. (150G)

  • 图片格式转化

We need .png but not .jpg here, so

cd ./images
ls -1 *.jpg | xargs -n 1 bash -c 'convert "$0" "${0%.jpg}.png"'

1.2 Create your Annotation.

  • 获取标记记录

Sol 01: 

# 找数据集上现成的对应的标记框记录

Find its xml version from: http://image-net.org/download-bboxes

Sol 02:

# 自己写标记记录

Write script to create your xml for Annotation from *_box.txt. This is not a complex structure as following.

<annotation>
<folder>n02119789</folder>
<filename>n02119789_122</filename>
<source>
<database>ImageNet database</database>
</source>
<size>
<width>200</width>
<height>191</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>n02119789</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>17</xmin>
<ymin>16</ymin>
<xmax>181</xmax>
<ymax>181</ymax>
</bndbox>
</object>
</annotation>

Sol 03: 

# 通过工具辅助生成标记框记录

Label them manually. This is a crazy way to create your train data (100-500 images) if you have enough time.

sudo apt-get install pyqt5-dev-tools
sudo pip3 install lxml
git clone https://github.com/tzutalin/labelImg
unsw@unsw-UX303UB$ make qt5py3
unsw@unsw-UX303UB$ python3 labelImg.py

  • 完整的数据集

Finally, this is what we need.

  • .csv 格式的数据集

Similarly, we need .csv but not .xml here, so

Download: https://raw.githubusercontent.com/datitran/raccoon_dataset/master/xml_to_csv.py

import os
import glob
import pandas as pd
import xml.etree.ElementTree as ET def xml_to_csv(path):
xml_list = []
for xml_file in glob.glob(path + '/*.xml'):
tree = ET.parse(xml_file)
root = tree.getroot()
for member in root.findall('object'):
value = (root.find('filename').text,
int(root.find('size')[0].text),
int(root.find('size')[1].text),
member[0].text,
int(member[4][0].text),
int(member[4][1].text),
int(member[4][2].text),
int(member[4][3].text)
)
xml_list.append(value)
column_name = ['filename', 'width', 'height', 'class', 'xmin', 'ymin', 'xmax', 'ymax']
xml_df = pd.DataFrame(xml_list, columns=column_name)
return xml_df def main():
image_path = os.path.join(os.getcwd(), 'annotations')
xml_df = xml_to_csv(image_path)
xml_df.to_csv('raccoon_labels.csv', index=None)
print('Successfully converted xml to csv.') main()

xml_to_csv.py

unsw@unsw-UX303UB$ python xml_to_csv.py
Successfully converted xml to csv.
unsw@unsw-UX303UB$ ls
annotations images Others raccoon_labels.csv xml_to_csv.py

This is final bounding box info.

2. Cascade Classifier Training


一、相关方案

Ref: https://docs.opencv.org/2.4/doc/user_guide/ug_traincascade.html

  • 接口

THE OPENCV TUTORIAL FOR TRAINING CASCADE CLASSIFIERS is a pretty good place to start. It explains the 2 binary utilities used in the process (opencv_createsamples and opencv_traincascade),

and all of their command line arguments and options, but it doesn’t really give an example of a flow to follow, nor does it explain all the possible uses for the opencv_createsamplesutility.

  • 方案一

On the other hand, NAOTOSHI SEO’S TUTORIAL is actually quite thorough and explains the 4 different uses for the opencv_createsamples utility.

THORSTEN BALL WROTE A TUTORIAL using Naotoshi Seo’s scripts to train a classifier to detect bananas, but it requires running some perl scripts and compiling some C++… too much work…

  • 方案二

Jeff also has some NICE NOTES about how he prepared his data, and a SCRIPT for automatically iterating over a couple of options for the 2 utilities.

The way we did it was inspired by all of these tutorials, with some minor modifications and optimizations.

二、Process

  • 是什么

Ref: https://processing.org/download/

一种语言,处理图像,提供了更为亲和的方式。

/* implement */

[Tensorflow] Object Detection API - prepare your training data的更多相关文章

  1. [Tensorflow] Object Detection API - build your training environment

    一.前期准备 Prepare protoc Download Protocol Buffers Create folder: protoc and unzip it. unsw@unsw-UX303U ...

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

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

  3. [Tensorflow] Object Detection API - predict through your exclusive model

    开始预测 一.训练结果 From: Testing Custom Object Detector - TensorFlow Object Detection API Tutorial p.6 训练结果 ...

  4. TensorFlow object detection API应用

    前一篇讲述了TensorFlow object detection API的安装与配置,现在我们尝试用这个API搭建自己的目标检测模型. 一.准备数据集 本篇旨在人脸识别,在百度图片上下载了120张张 ...

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

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

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

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

  7. 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 ...

  8. TensorFlow object detection API

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

  9. Tensorflow object detection API 搭建物体识别模型(四)

    四.模型测试 1)下载文件 在已经阅读并且实践过前3篇文章的情况下,读者会有一些文件夹.因为每个读者的实际操作不同,则文件夹中的内容不同.为了保持本篇文章的独立性,制作了可以独立运行的文件夹目标检测. ...

随机推荐

  1. ssm中从页面到controller和数据库出现乱码问题的解决

    1.确保项目编码为utf8,点击项目右键,点击properties 2.确保数据库编码为utf8,以MySQL为例,可到mysql目录下,my.ini文件中修改后,重启mysql服务 重启mysql服 ...

  2. 如何调整eclipse中代码字体大小

    找到windows--->preferences---->General------>Appearance---->color   and fonts   ---->ba ...

  3. Zookeeper简介说明

    Zookeeper(一)简介说明 1.1 什么是Zookeeper? Zookeeper是一个高效的分布式协调服务,它暴露了一些公用服务,比如命名/配置管理/同步控制/群组服务等.我们可以使用ZK来实 ...

  4. 各种Oracle索引类型介绍

    逻辑上:Single column 单行索引Concatenated 多行索引Unique 唯一索引NonUnique 非唯一索引Function-based函数索引Domain 域索引 物理上:Pa ...

  5. 将控件画成圆角的效果(Delphi)

    最近在做一个Delphi的项目,常常要设计软件的界面,需要将控件画成圆角矩形.在Delphi中将控件画成圆角效果,可使用CreateRoundRectRgn函数.在此写了一个通用的函数,只要在用到改变 ...

  6. C# CRC16 和汉明重量

    最近在看redis之类的pdf,发现redis在做集群的时候,不同的key分到不同的主服务器,其中划分key的算法采用CRC16算法,所以特此整理一下其C#code如下: #region CRC16 ...

  7. Android典型界面设计——FragmentTabHost+Fragment实现底部tab切换

    一.问题描述 在上次博文中,我们使用RadioGroup+ViewPage+Fragmen实现了顶部滑动导航(查看文章:http://www.cnblogs.com/jerehedu/p/460759 ...

  8. CentOS7下 让Docker pull命令使用squid做http代理拉取目标镜像仓库的镜像

    场景,如下图所示: 服务器B具有两个网卡,分别和服务器A和服务器C互通,这里想要在服务器C上借助服务器B作为桥梁,拉取镜像仓库服务器A上的镜像. 思路也很简单,在服务器上搭建HTTP代理服务,服务器C ...

  9. Ext4 ReiserFS Btrfs 等7种文件系统性能比拼

    2009年02月04日     为了满足广大群众的热切需求,今天做了 Ext2.Ext3.Ext4.XFS.JFS.ReiserFS 和 Btrfs 的全面性能测试,对比结果如下:     本次测试所 ...

  10. java 对一个字符串进行加减乘除的运算

    记录一个小程序,里面涉及到的JAVA知识点有:字符串扫描,list删除元素的方法,泛型的使用,JAVA中的/要注意的事项.有兴趣的可以看看 package com.demo; import java. ...