使用树莓派摄像头实现对象实时识别(2)—— Windows端模型训练

4.0 下载图像识别模型测试代码

代码在此处下载:

https://github.com/CDahmsTemp/TensorFlow_Tut_3_Object_Detection_Walk-through/blob/master/0_verify_models_and_protoc_install.py

如果需要,编辑代码,修改其中protos路径为自己电脑上的路径:

# module level variables ##############################################################################################PROTOS_DIR = "C:/TensorFlow/models/research/object_detection/protos"
MIN_NUM_PY_FILES_IN_PROTOS_DIR = 5

选择需要下载的模型名称和下载路径,选择MobileNet或Inception

# choose either MobileNet or Inception# MobileNet is a smaller download and runs faster, but is less accurateMODEL_NAME = 'ssdlite_mobilenet_v2_coco_2018_05_09'# MODEL_NAME = 'ssdlite_mobilenet_v2_coco_2018_05_09'MODEL_FILE_NAME = MODEL_NAME + '.tar.gz'MODEL_SAVE_DIR_LOC = "C:/TensorFlow/models/research/object_detection"FROZEN_INFERENCE_GRAPH_LOC = MODEL_SAVE_DIR_LOC + "/" + MODEL_NAME + "/" + "frozen_inference_graph.pb"LABEL_MAP_LOC = "C:/TensorFlow/models/research/object_detection/data/mscoco_label_map.pbtxt"TEST_IMAGES_DIR = "C:/TensorFlow/models/research/object_detection/test_images"

下图列出了所有可用的模型,速度表示推断的时间,mAP表示进精度,数值越大,结果越精确。

图片

设置完后,运行程序就会显示以下两种图片的实例结果,表面下载的预训练的模型运行成功。

图片
图片

4.2 下载图像并进行标记

如需训练自己的模型,需要使用大量的图片,可使用搜索引擎批量下载图片,并初步筛选,去掉分辨率低的图片和不包括训练目标在内的图片,保存到本地目录,并重新命名为简单的文件名如1、2、3。

下面以如何识别厨房场景中的厨房龙头为例介绍一个该过程:

4.2.1 使用搜索引擎下载厨房相关图片

图片

4.2.2 下载图片标记软件,可以在https://github.com/tzutalin/labelImg

下载最新版本

4.2.3 使用LabelImg软件对图片中所有厨房龙头进行标记

图片

4.3.3 标记完后保存图片,软件会自动生成xml格式的文件如下图

图片

打开xml文件,可以发现其中包含标签的名称和厨房龙头在图片中的位置

图片

4.3 在项目目录下新建training_images和test_images文件夹

建完后将标记后的图片移到trainning_images文件夹(至少100张图片),并在test_images文件中放置一些图片供测试用(至少10张)。

4.4 运行代码将xml文件转为csv格式

Tensorflow使用csv格式作为训练素材的索引文件,所以需要将xml文件转换为csv格式,去下面地址下载转换代码:

https://github.com/CDahmsTemp/TensorFlow_Tut_3_Object_Detection_Walk-through/blob/master/1_xml_to_csv.py

运行代码后,系统自己在项目目录生成training_data文件夹,并生成eval_labels.csv和train_label.csv两个文件。

4.5 运行代码生成tfrecords

这一步也没什么好说的,都是生成Tensorflow所需的训练数据,代码在此下载:

https://github.com/CDahmsTemp/TensorFlow_Tut_3_Object_Detection_Walk-through/blob/master/2_generate_tfrecords.py

运行代码后,系统会在training_data文件夹中生成train.tfrecord和eval.tfrecord两个文件。

4.6 运行代码训练模型

代码在此下载:

https://github.com/CDahmsTemp/TensorFlow_Tut_3_Object_Detection_Walk-through/blob/master/3_train.py

检查代码中的模型变量配置,确保项目目录中有所需要的文件或文件夹,在下面的示例中,需要有ssd_inception_v2_coc.config文件和ssd_inception_v2_coco_2018_01_28文件夹,文件夹中应有下载好的预训练过的模型。

# module-level variables ############################################################################################### this is the big (pipeline).config file that contains various directory locations and many tunable parametersPIPELINE_CONFIG_PATH = os.getcwd() + "/" + "ssd_inception_v2_coco.config"# verify this extracted directory exists,# also verify it's the directory referred to by the 'fine_tune_checkpoint' parameter in your (pipeline).config fileMODEL_DIR = os.getcwd() + "/" + "ssd_inception_v2_coco_2018_01_28"

编辑config文件,查找“PATH_TO_BE_CONFIGURED”,改成相应的目录,num_steps为训练步数,步数越多时间越长,改为500或其他数字。

训练完后,PyCharm应显示以下信息:

图片

4.7 运行代码生成推断模型

在此处下载代码:

https://github.com/CDahmsTemp/TensorFlow_Tut_3_Object_Detection_Walk-through/blob/master/4_export_inference_graph.py

或者此处:

https://github.com/tensorflow/models/blob/master/research/object_detection/export_inference_graph.py

运行代码后,系统会在下面文件夹下建立inference_graph目录并创建以下文件,其中的frozen_inference_graph.pb文件就可用于移植到树莓派上使用。

图片

4.8 测试训练完后的模型

代码在此次下载:

https://github.com/CDahmsTemp/TensorFlow_Tut_3_Object_Detection_Walk-through/blob/master/5_test.py

训练完的模型应能检测出放置在test_images中的图片

图片
图片
图片

也有误判的情况如下图将酒瓶当成了龙头:

图片