How to train your Object Detection classifier

1.安装Anaconda
安装步骤参考文章https://blog.csdn.net/weixin_43715458/article/details/100096496
注意:有关anaconda的环境变量都要设置好
2.从Github上下载TensorFlow Object Detection API ,我使用的是tensorflow1.13版本的
https://github.com/tensorflow/models/tree/r1.13.0
最新版本https://github.com/tensorflow/models
在C盘中创建一个文件夹命名为tensorflow1,将models下载好放进文件夹,重新命名为models
在这里插入图片描述
3.下载Object Detection API指导文件
指导文件
下载好后将所有文件复制,粘贴至C:\tensorflow1\models\research\object_detection
可以覆盖readme.md文件
如果要训练自己的分类器,就将下述文件里的内容删去
All files in \object_detection\images\train and \object_detection\images\test
The “test_labels.csv” and “train_labels.csv” files in \object_detection\images
All files in \object_detection\training
All files in \object_detection\inference_graph

4.创建 anaconda虚拟环境
打开Anaconda Prompt,以管理员身份运行

C:\> conda create -n tensorflow1 pip python=3.5

4.1激活环境,更新安装包

C:\> activate tensorflow1
(tensorflow1) C:\>python -m pip install --upgrade pip

安装tensorflow==1.13.1版本(CPU版本,训练会比较慢)

(tensorflow1) C:\> pip install tensorflow==1.13.1

4.2安装相应的依赖包

(tensorflow1) C:\> conda install -c anaconda protobuf
(tensorflow1) C:\> pip install pillow
(tensorflow1) C:\> pip install lxml
(tensorflow1) C:\> pip install Cython
(tensorflow1) C:\> pip install contextlib2
(tensorflow1) C:\> pip install jupyter
(tensorflow1) C:\> pip install matplotlib
(tensorflow1) C:\> pip install pandas
(tensorflow1) C:\> pip install opencv-python

4.3配置相应的环境变量

(tensorflow1) C:\>set PYTHONPATH=C:\tensorflow1\models 
(tensorflow1) C:\>set PYTHONPATH=C:\tensorflow1\models\research
(tensorflow1) C:\>set PYTHONPATH=C:\tensorflow1\models\research\slim

该方法每次重新打开Anaconda Prompt都要重新设置变量,因此可以直接在电脑设置中添加环境变量

4.4编译protobuf和运行设置文件
4.4.1首先进入对应文件夹内

(tensorflow1) C:\> cd C:\tensorflow1\models\research

4.4.2输入以下命令

protoc --python_out=. .\object_detection\protos\anchor_generator.proto .\object_detection\protos\argmax_matcher.proto .\object_detection\protos\bipartite_matcher.proto .\object_detection\protos\box_coder.proto .\object_detection\protos\box_predictor.proto .\object_detection\protos\eval.proto .\object_detection\protos\faster_rcnn.proto .\object_detection\protos\faster_rcnn_box_coder.proto .\object_detection\protos\grid_anchor_generator.proto .\object_detection\protos\hyperparams.proto .\object_detection\protos\image_resizer.proto .\object_detection\protos\input_reader.proto .\object_detection\protos\losses.proto .\object_detection\protos\matcher.proto .\object_detection\protos\mean_stddev_box_coder.proto .\object_detection\protos\model.proto .\object_detection\protos\optimizer.proto .\object_detection\protos\pipeline.proto .\object_detection\protos\post_processing.proto .\object_detection\protos\preprocessor.proto .\object_detection\protos\region_similarity_calculator.proto .\object_detection\protos\square_box_coder.proto .\object_detection\protos\ssd.proto .\object_detection\protos\ssd_anchor_generator.proto .\object_detection\protos\string_int_label_map.proto .\object_detection\protos\train.proto .\object_detection\protos\keypoint_box_coder.proto .\object_detection\protos\multiscale_anchor_generator.proto .\object_detection\protos\graph_rewriter.proto

打开C:\tensorflow1\models\research\object_detection\protos,检查是否每个proto文件都有对应_pb2文件生成,如果没有,
则输入protoc --python_out=. .\object_detection\protos\***.proto
生成相应文件,这在之后的版本可能会有新的proto文件生成。

4.4.3运行设置文件

(tensorflow1) C:\tensorflow1\models\research> python setup.py build
(tensorflow1) C:\tensorflow1\models\research> python setup.py install

检查是否安装成功

(tensorflow1) C:\tensorflow1\models\research\object_detection\builders>python model_builder_test.py

如果报以下错误
在这里插入图片描述
则可能是protobuf版本与tensorflow不匹配的原因,我的做法是卸载protobuf,安装protobuf==3.7.1
在这里插入图片描述
出现如图所示则为安装成功。

到目前为止训练环境配置完成。

5.收集数据和制作标签
下载labelimg,制作训练集,具体步骤这里不展开介绍,经过该步可以获得.xml文件,将其以2:8的比例分成验证集和测试集,分别放入
C:\tensorflow1\models\research\object_detection\images\test和C:\tensorflow1\models\research\object_detection\images\train
在这里插入图片描述
6.产生训练集数据

6.1将训练集数据转化为csv格式

(tensorflow1) C:\tensorflow1\models\research\object_detection> python xml_to_csv.py

在C:\tensorflow1\models\research\object_detection\images文件中就得到了train_labels.csv 和 test_labels.csv 文件

6.2生成用于训练的tfrecord数据
用text编辑器打开object_detection文件中的generate_tfrecord.py
将里面的分类标签更改为你要的分类

def class_text_to_int(row_label):
    if row_label == 'nine':
        return 1
    elif row_label == 'ten':
        return 2
    elif row_label == 'jack':
        return 3
    elif row_label == 'queen':
        return 4
    elif row_label == 'king':
        return 5
    elif row_label == 'ace':
        return 6
    else:
        None

比如替代为这3类

def class_text_to_int(row_label):
    if row_label == 'basketball':
        return 1
    elif row_label == 'shirt':
        return 2
    elif row_label == 'shoe':
        return 3
    else:
        None

然后输入以下命令生成tfrecord文件

python generate_tfrecord.py --csv_input=images\train_labels.csv --image_dir=images\train --output_path=train.record
python generate_tfrecord.py --csv_input=images\test_labels.csv --image_dir=images\test --output_path=test.record

7.制作labelmap和配置训练文件
7.1制作labelmap
打开C:\tensorflow1\models\research\object_detection\training ,新建一个文本,并保存为labelmap.pbtxt,确保该文件类型为.pbtxt

内容与刚刚修改的generate_tfrecord.py要对应

item {
  id: 1
  name: 'basketball'
}

item {
  id: 2
  name: 'shirt'
}

item {
  id: 3
  name: 'shoe'
}

7.2配置训练文件
打开C:\tensorflow1\models\research\object_detection\samples\configs
里面有各种预训练模型的配置文件
预训练模型可在此下载model zoo
将下载好的tar.gz后缀的解压后的文件复制粘贴至object_detection文件夹中
在这里插入图片描述
配置文件与预训练模型要对应,我采用的为ssd_mobilenet_v2_quantized_300x300_coco模型,那么我就将对应的配置文件复制,粘贴至C:\tensorflow1\models\research\object_detection\training
在这里插入图片描述
然后打开配置文件开始修改内容(注意符号为双引号,正斜杠/,以及不要有空格,否则训练时可能会报错)
修改内容如下:
第九行:num_classes改为你需要的分类,比如3
第106行:fine_tune_checkpoint : “C:/tensorflow1/models/research/object_detection/ssd_mobilenet_v2_quantized_300x300_coco_2019_01_03/model.ckpt”
第123和125行train_input_reader部分
input_path : “C:/tensorflow1/models/research/object_detection/train.record”
label_map_path: “C:/tensorflow1/models/research/object_detection/training/labelmap.pbtxt”
第130行eval_config部分数量改为test文件夹中图片的数量
第135和137行eval_input_reader部分
input_path : “C:/tensorflow1/models/research/object_detection/test.record”
label_map_path: “C:/tensorflow1/models/research/object_detection/training/labelmap.pbtxt”
配置完成

8开始训练
进入 \object_detection文件夹,输入以下命令

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

如果没有train文件,就去legacy中找

查看训练效果

(tensorflow1) C:\tensorflow1\models\research\object_detection>tensorboard --logdir=training

9.导出推理图

python export_inference_graph.py --input_type image_tensor --pipeline_config_path training/ssd_mobilenet_v2_quantized_300x300_coco.config --trained_checkpoint_prefix training/model.ckpt-XXXX --output_directory inference_graph

在training文件中找到model.ckpt-XXXX,将XXX替换为最大的数字,然后就能在\object_detection\inference_graph获得这些文件
在这里插入图片描述
10.为之后转为tflite文件导出冻结图
在 \object_detection内创建新文件夹TFLite_model

mkdir TFLite_model

设置一些环境变量方便于转化文件

set CONFIG_FILE=C:\\tensorflow1\models\research\object_detection\training\ssd_mobilenet_v2_quantized_300x300_coco.config
set CHECKPOINT_PATH=C:\\tensorflow1\models\research\object_detection\training\model.ckpt-XXXX
set OUTPUT_DIR=C:\\tensorflow1\models\research\object_detection\TFLite_model

XXXX还是training中model.ckpt-XXXX文件中最大的数字

输入以下命令导出冻结图

python export_tflite_ssd_graph.py --pipeline_config_path=%CONFIG_FILE% --trained_checkpoint_prefix=%CHECKPOINT_PATH% --output_directory=%OUTPUT_DIR% --add_postprocessing_op=true

在\object_detection\TFLite_model 可获得tflite_graph.pb 和 tflite_graph.pbtxt两个文件

如果出现
ModuleNotFoundError: No module named ‘deployment’ or No module named ‘nets’
那么每次打开Anaconda Prompt训练前还是要执行4.3、4.4.1、4.4.3步骤
参考内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值