Step1: 预准备的东西
Win10
Anaconda3
tensorflow-GPU版本要1.12不然出错
CUDA Tool kit(版本是9.2)【https://developer.nvidia.com/compute/cuda/9.2/Prod2/local_installers2/cuda_9.2.148_win10】
这里是引用
CuDNN(是版本是anaconda自动安装的)
为了能够使该API正常运行,必须配置好相应的文件路径,具体的操作指令为:
(tensorflow1) C:\Users\SC> set PYTHONPATH=D:\tensorflow1\models;D:\tensorflow1\models\research;D:\tensorflow1\models\research\slim (后面的不知道用不用:每当该tensorflow1虚拟环境被激活后,都要重新执行一次上述指令。也可以通过右击我的电脑–>属性–>高级系统设置–>环境变量–>新建系统变量的方式进行设置,这样就可以避免重复执行上述指令。)
下载3.4的Protobuf放在research目录下
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
在上述操作执行完成后,继续在当前窗口执行如下指令以完成对该API的安装:
python setup.py build
python setup.py install
判断该API是否安装成功以及测试官方demo
在上一步执行完以后,我们cd到builders目录下,执行python model_builder_test.py 如果出现下面的结果,则表示安装成功。
存放在object_detection文件夹下。通过运行上述代码,将在images文件夹下产生两个.csv文件,分别为train_labels.csv和test_labels.csv
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
以产生最终的TFRecord格式的文件。其中generate_tfrecord.py是上述代码的命名,输入的.csv文件的路径为csv_input=images/train_labels.csv,图片的存储路径为:image_dir=images/train or test,输出的文件在object_detection文件夹下名称为:train.record 以及 test.record.
python model_main.py --logtostderr --model_dir=training/ --pipeline_config_path=training/ssd_mobilenet_v2_coco.config
#二选一
python legacy/train.py --train_dir=training/ --pipeline_config_path=training/faster_rcnn_resnet50_coco.config --alsologtostderr
遇到的问题:
Q1:Windows fatal exception: access violation
A1:tensorflow-gpu降级至1.12
https://github.com/fo40225/tensorflow-windows-wheel/tree/master/1.12.0/py37/GPU这里下载,解压成whl文件,然后cd到这个路径,执行pip install 文件名.whl即可 也有py3.6版本的,可以自己找一下。自己的cpu支持avx2的话就选avx2(用cpuz可看指令集)不然就选另一个
引自https://ask.csdn.net/questions/766817
Q2:“error:No modul named pycocotools”
A2:安装git并pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
引自https://blog.csdn.net/csdn_6105/article/details/82933628
Q3:tensorflow.python.framework.errors_impl.NotFoundError: NewRandomAccessFile
A3:代码中路径错误,更正即可
Q4:
WARNING:tensorflow:Forced number of epochs for all eval validations to be 1.
WARNING:tensorflow:Expected number of evaluation epochs is 1, but instead encountered eval_on_train_input_config.num_epochs
= 0. Overwriting num_epochs
to 1.
WARNING:tensorflow:Estimator’s model_fn (
A4:
解决办法:不使用ssd_mobilenet_v2_coco
相关issue:
https://stackoverflow.com/questions/54094981/how-to-solve-variable-is-available-in-checkpoint-but-has-an-incompatible-shape
https://github.com/tensorflow/models/issues/5315
https://github.com/tensorflow/models/issues/5315
Q5:OOM内存不足
A5:https://blog.csdn.net/carolynlmk/article/details/86630865
试了重装anaconda,cuda降级,tensorflow-gpu降级,添加cuda环境变量。
最后发现是因为有几张图片分辨率为2560*1080,降低图片分辨率重新生成tfrecord后可正常训练
导出训练好的数据
模型的训练的就已经finished,接下来就是导出frozen_inference_graph.pb文件,该文件中包含了我们训练好的检测器以及网络架构信息和参数信息等,我们要的就是它。
ImportError: cannot import name ‘mobilenet_v3’
在https://github.com/hokamheio/models/blob/v1.13.0/research/object_detection/,找到exporter.py和/builders/model_builder.py的历史版本,替换2.0版本的这两个文件即可
python export_inference_graph.py --input_type=image_tensor --pipeline_config_path=training/faster_rcnn_resnet50_coco.config --trained_checkpoint_prefix=training/model.ckpt-XXXXXX --output_directory=inference_graph
其中trained_checkpoint_prefix代表checkpoint文件的存放位置,XXXX改成最后一次保存的数据,output_directory表示生成的.pb文件的路径,本实验是存放在inference_graph文件夹下。
问题:卡在label_map,解决:label_map = label_map_util.load_labelmap(“training\label_map.pbtxt”)
##tensorboard
tensorboard --logdir=./ --host=127.0.0.1
在浏览器打http://127.0.0.1:6006/