tensorflow+Object DetectionAPI训练识别自己的数据集

二、tensorflow Object DetectionAPI训练识别自己的数据集

参考GitHub:https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10?tdsourcetag=s_pcqq_aiomsg
参考博客:https://blog.csdn.net/qq_30611601/article/details/79067982

关于object_detection环境初步测试参考上一篇https://blog.csdn.net/HRFarsighted/article/details/99440904

Part1.制作样本图片

  1. 选择检测对象为扑克牌(nine, ten, jack, queen, king, and ace )六个Class

  2. 下载labelImg https://github.com/tzutalin/labelImg 进行标签的制作
    tensorflow+Object DetectionAPI训练识别自己的数据集_第1张图片

  3. 把样本分别放入\ object_detection \ images \ test 和 \ object_detection \ images \ test目录,将其中80%移动到\ object_detection \ images \ train目录。确保\ test和\ train目录中有各种图片。
    Part2. 生成训练数据
    标记图像后,就可以生成TFRecords作为TensorFlow训练模型的输入数据。本教程使用Dat Tran的Raccoon Detector数据集中的xml_to_csv.py和generate_tfrecord.py脚本。

  4. 图像.xml数据将用于创建包含列车和测试图像的所有数据的.csv文件,输入命令:

(tensorflow1)E:\2D+3Ddetection\2Ddetection\tensorflow\models\research\object_detection > python xml_to_csv.py
这将在\ object_detection \ images文件夹中创建train_labels.csv和test_labels.csv文件。

  1. 接下来,在文本编辑器中打开generate_tfrecord.py文件。使用您自己的标签贴图替换从第31行开始的标签贴图,配置labelmap.pbtxt文件时,将使用相同的编号分配:如下

4 def class_text_to_int(row_label):
5. if row_label == ‘nine’:
6. return 1
7. elif row_label == ‘ten’:
8. return 2
9. elif row_label == ‘jack’:
10. return 3
11. elif row_label == ‘queen’:
12. return 4
13. elif row_label == ‘king’:
14. return 5
15. elif row_label == ‘ace’:
16. return 6
17. else:
18. None
4. 通过从\ object_detection文件夹发出以下命令来生成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
5. 它们在\ object_detection中生成train.record和test.record文件。这些将用于训练新的物体检测分类器。
tensorflow+Object DetectionAPI训练识别自己的数据集_第2张图片
Part3. .创建标签映射并配置训练

  1. 创建标签映射
    标签贴图通过定义类名到类ID号的映射来告诉培训师每个对象是什么。使用文本编辑器创建新文件,并将其保存为C:\ tensorflow1 \ models \ research \ object_detection \ training文件夹中的labelmap.pbtxt。
    item {
    id: 1
    name: ‘nine’
    }
    item {
    id: 2
    name: ‘ten’
    }
    item {
    id: 3
    name: ‘jack’
    }
    item {
    id: 4
    name: ‘queen’
    }
    item {
    id: 5
    name: ‘king’
    }
    item {
    id: 6
    name: ‘ace’
    }
  2. 配置训练
    必须配置对象检测训练管道。它定义了哪个模型以及将用于培训的参数,在文件夹下E:\2D+3Ddetection\2Ddetection\tensorflow\models\research\object_detection\samples\configs 将faster_rcnn_inception_v2_pets.config文件复制到\ object_detection \ training目录中。
    对faster_rcnn_inception_v2_pets.config文件进行以下更改。注意:必须使用单个正斜杠(非反斜杠)输入路径,否则TensorFlow会在尝试训练模型时出现文件路径错误!此外,路径必须是双引号(“),而不是单引号(’)。
    • 第9行。将num_classes更改为您希望分类器检测的不同对象的数量。对于上面的篮球,衬衫和鞋子探测器,它将是num_classes:3。
    • 第106行。将fine_tune_checkpoint更改为:
    o fine_tune_checkpoint“E:/2D+3Ddetection/2Ddetection/tensorflow1/models/research/object_detection /faster_rcnn_inception_v2_coco_2018_01_28/model.ckpt”
    • 第123和125行。在train_input_reader部分中,将input_path和label_map_path更改为:
    o input_path“E:/2D+3Ddetection/2Ddetection/tensorflow1/models/research/object_detection /train.record”
    o label_map_path“E:/2D+3Ddetection/2Ddetection/tensorflow1/models/research/object_detection /training/labelmap.pbtxt”
    • 第130行。将num_examples更改为\ images \ test目录中的图像数。
    • 第135行和第137行。在eval_input_reader部分中,将input_path和label_map_path更改为:
    o input_path“E:/2D+3Ddetection/2Ddetection/tensorflow1/models/research/object_detection /test.record”
    o label_map_path“E:/2D+3Ddetection/2Ddetection/tensorflow1/models/research/object_detection /training/labelmap.pbtxt”
    完成更改后保存文件。完成配置训练环境!!!
    Part4.进行训练
    将train.py从/ object_detection / legacy移动到/ object_detection文件夹,然后继续执行以下步骤。输入以下命令以开始培训:
    python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config

tensorflow+Object DetectionAPI训练识别自己的数据集_第3张图片

在此阶段遇到的常见问题
1.输入训练命令出现 AttributeError: module ‘tensorflow’ has no attribute ‘init_scope’报错
原因:由于tensorflow-gpu版本不匹配,进行升级,注意升级后CUDA版本需要对应,否则不能使用GPU训练。
2. ImportError:无法导入名称’preprocessor_pb2’
mportError:无法导入名称’string_int_label_map_pb2’(或与其他pb2文件类似的错误)
当尚未编译protobuf文件(在本例中为preprocessor.proto)时会发生这种情况。重新运行步骤2f中给出的protoc命令。检查\ object_detection \ protos文件夹以确保每个name.proto文件都有一个name_pb2.py文件。
3. tensorflow-gpu1.14.0配置相应的CUDA
下载如下两个安装包
在这里插入图片描述
安装成功cuda后将cuDNN解压。将解压出来的三个文件夹下面的文件放到对应的CUDA相同文件夹下。
tensorflow+Object DetectionAPI训练识别自己的数据集_第4张图片
CUDA默认安装路径:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0
添加文件后如下:
tensorflow+Object DetectionAPI训练识别自己的数据集_第5张图片
以上完成之后把以下四个路径加入到环境变量中:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\libnvvp
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib
C:\Program Files\NVIDIA GPU Computing Toolkit\

你可能感兴趣的:(目标检测)