一、object_detection环境初步测试
参考:
Win10使用TensorFlow调用object_detection APIblog.csdn.netPart 1.配置运行环境
Windows10系统+Anaconda 3.5
在anaconda创建python3.5的环境
1.1 通过anaconda 安装tensorflow 命令为conda install tensorflow-gpu-1.10.0会自动配置CUDA和cuDNN对应版本。
1.2如果安装最新tensorflow-gpu版本则需要配置相应版本的CUDA和cuDNN,
https://www.tensorflow.org/install/source#tested_build_configurations中显示了哪个版本的TensorFlow需要哪个版本的CUDA和cuDNN。www.tensorflow.org1.3 test gpu是否工作
代码:
import tensorflow as tf
import numpy as np
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c))
成功截图:
Part 2:安装object_detection API
2.1.配置好TensorFlow
2.2.下载好TensorFlow模型源码:tensorflow/models
E盘文件夹下存放,research文件夹下为各个模块接口。之后在环境变量中增加三条变量:
E:TensorFlow models
E:TensorFlow models research
E:TensorFlow models researchslim
Part3:安装其他依赖的包
(tensorflow) C:> pip install pillow
(tensorflow) C:> pip install lxml
(tensorflow) C:> pip install Cython
(tensorflow) C:> pip install contextlib2
(tensorflow) C:> pip install jupyter
(tensorflow) C:> pip install matplotlib
(tensorflow) C:> pip install pandas
(tensorflow) C:> pip install opencv-python
Part4:下载Protobuf
4.1下载地址:Releases · protocolbuffers/protobuf
4.2选择 protoc-3.4.0-win32.zip 版本进行下载。(python3.5+ protoc-3.4.0-win32.zip测试成功)
解压后在bin文件夹中可以找到一个: protoc.exe
将这个文件夹加入到环境变量中:F:TensorFlow bin
之后在CMD(管理员)中通过cd找到这个文件夹,运行一下 protoc.exe ,但是会报错说需要输入文件。
退出这个文件夹,cd找到models中的research目录下,执行:
然后将以下命令复制并粘贴到命令行中,然后按Enter键:
protoc --python_out=. .object_detectionprotosanchor_generator.proto .object_detectionprotosargmax_matcher.proto .object_detectionprotosbipartite_matcher.proto .object_detectionprotosbox_coder.proto .object_detectionprotosbox_predictor.proto .object_detectionprotoseval.proto .object_detectionprotosfaster_rcnn.proto .object_detectionprotosfaster_rcnn_box_coder.proto .object_detectionprotosgrid_anchor_generator.proto .object_detectionprotoshyperparams.proto .object_detectionprotosimage_resizer.proto .object_detectionprotosinput_reader.proto .object_detectionprotoslosses.proto .object_detectionprotosmatcher.proto .object_detectionprotosmean_stddev_box_coder.proto .object_detectionprotosmodel.proto .object_detectionprotosoptimizer.proto .object_detectionprotospipeline.proto .object_detectionprotospost_processing.proto .object_detectionprotospreprocessor.proto .object_detectionprotosregion_similarity_calculator.proto .object_detectionprotossquare_box_coder.proto .object_detectionprotosssd.proto .object_detectionprotosssd_anchor_generator.proto .object_detectionprotosstring_int_label_map.proto .object_detectionprotostrain.proto .object_detectionprotoskeypoint_box_coder.proto .object_detectionprotosmultiscale_anchor_generator.proto .object_detectionprotosgraph_rewriter.proto .object_detectionprotoscalibration.proto .object_detectionprotosflexible_grid_anchor_generator.proto
成功截图:
这将从object_detectionprotos文件夹中的每个name.proto文件创建一个name_pb2.py文件。
4.3测试:输入python object_detection/builders/model_builder_test.py
注意:如果出现 ImportError: No module named 'object_detection' 这种问题
1)在你的Anaconda3安装路径 /Anaconda3/Lib/site-packages 下新建一个 tensorflow_model.pth 文件
(我这里的安装路径是C:ProgramDataAnaconda3Libsite
2)在新建的 tensorflow_model.pth 文件中写入以下的路径:
D:tensorflowmodelsresearch
D:tensorflowmodelsresearchslim
OK: Succeed
Part 5:例程测试API object_detection_tutorial.ipynb
在CMD中找到models-master文件夹下,路径为:E:TensorFlow models
在该文件夹下输入: jupyter-notebook
来调用jupyter-notebook环境,之后会在浏览器中出现
顺着researchobject_detection找到里边的object_detection_tutorial.ipynb,运行。就会出现另外一个界面:
按【shift】+【enter】一步一步的向下运行,运行到最低端的时候,等待20s,就会出现运行结果,如下所示:
二、tensorflow Object DetectionAPI训练识别自己的数据集
关于object_detection环境初步测试参考上一篇https://blog.csdn.net/HRFarsighted/article/details/99440904
Part1.制作样本图片
1. 选择检测对象为扑克牌(nine, ten, jack, queen, king, and ace )六个Class
2. 下载labelImg tzutalin/labelImg 进行标签的制作
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脚本。
1. 图像.xml数据将用于创建包含列车和测试图像的所有数据的.csv文件,输入命令:
(tensorflow1)E:2D+3Ddetection2Ddetectiontensorflowmodelsresearchobject_detection > python xml_to_csv.py
这将在 object_detection images文件夹中创建train_labels.csv和test_labels.csv文件。
2. 接下来,在文本编辑器中打开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=imagestrain_labels.csv --image_dir=imagestrain --output_path=train.record
python generate_tfrecord.py --csv_input=imagestest_labels.csv --image_dir=imagestest --output_path=test.record
5. 它们在 object_detection中生成train.record和test.record文件。这些将用于训练新的物体检测分类器。
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+3Ddetection2Ddetectiontensorflowmodelsresearchobject_detectionsamplesconfigs 将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
***在此阶段遇到的常见问题***
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相同文件夹下。
CUDA默认安装路径:C:Program FilesNVIDIA GPU Computing ToolkitCUDAv9.0
添加文件后如下:
以上完成之后把以下四个路径加入到环境变量中:
C:Program FilesNVIDIA GPU Computing ToolkitCUDAv9.0bin
C:Program FilesNVIDIA GPU Computing ToolkitCUDAv9.0libnvvp
C:Program FilesNVIDIA GPU Computing ToolkitCUDAv9.0lib
C:Program FilesNVIDIA GPU Computing Toolkit