本文共 6469 字,大约阅读时间需要 21 分钟。
目录
本节主要搭建的tensorflow环境是CPU版本(tensorflow-cpu)的,所有操作均在服务器192.168.6.175上运行,并使用自己的训练集进行模型训练操作。
本节采用ssd模型进行物体检测。
此时利用第三章的工具已标注了三个标签的批量数据集(car、bike、person),数据存放参照Pascal VOC2007数据目录(数据存放在VOCdevkit/VOC2007目录下)
–VOCdevkit
–VOC2007 –JPEGImages –存储批量.jpg图片 –ImageSets –Main –train.txt,训练集图片名称(不带后缀.jpg,一行一个) –val.txt,测试集图片名称(不带后缀.jpg,一行一个) –Annotations –存储批量标注.xml文件数据集存储目录情况如上所示,其中JPEGImages文件夹存放所有图片, ImageSets文件夹下有一个Main文件夹,Main下面存放train.txt和val.txt,分别为训练、测试集的图片名称(不带后缀.jpg,一行一个),txt文件需提前准备,Annotations文件夹存放图片标注xml文件。
# cd /home/users/py3_project/models/research/object_detection # 程序全部在此目录下运行,root用户# mkdir dataset
# mkdir dataset/image_tfrecord# python3 dataset/create_pascal_tf_record.py \ --data_dir=dataset/VOCdevkit \ --label_map_path=dataset/pascal_label_map.pbtxt \ --year=VOC2007 \ --set=train \ --output_path=dataset/image_tfrecord/pascal_train.record# python3 dataset/create_pascal_tf_record.py \--data_dir=dataset/VOCdevkit \--label_map_path=dataset/pascal_label_map.pbtxt \--year=VOC2007 \--set=val \--output_path=dataset/image_tfrecord/pascal_val.record
# wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_11_06_2017.tar.gz# tar -xvf ssd_mobilenet_v1_coco_11_06_2017.tar.gz
将解压好的预训练模型目录重命名为model_ssd,存入dataset目录下。
1 修改配置文件:dataset目录下的ssd_mobilenet_v1_pets.config重命名为ssd_mobilenet_v1_pascal.config
# python3 train.py \ --logtostderr \ --pipeline_config_path=dataset/ssd_mobilenet_v1_pascal.config \--train_dir=dataset/train_dir
可视化训练loss,运行
# tensorboard --logdir= path to/train_dir
# mkdir dataset/eval_result# python3 eval.py \ --logtostderr \ --pipeline_config_path=dataset/ssd_mobilenet_v1_pascal.config \ --checkpoint_dir=dataset/train_dir \--eval_dir=dataset/eval_result
可视化测试图片结果及评估指标,运行
# tensorboard --logdir= path to/ eval_result
将model.chk文件转换为graph
# python3 export_inference_graph.py \ --input_type=image_tensor \ --pipeline_config_path=dataset/ssd_mobilenet_v1_pascal.config \ --trained_checkpoint_prefix=dataset/train_dir/model.ckpt-21883 \ --output_directory=dataset/inference_graph
(1)单张图片测试
当前目录/home/users/py3_project/models/research/object_detection下test.py文件两个路径修改为自己的路径及修改NUM_CLASS: 使用 VNC-Viewer 客户端执行
# python3 test.py test_images/image3.jpg
(2)批量图片测试
修改test.py代码,将其修改为批量图片测试代码,命名为testimages.py,其中结果保存为.json文件形式。 运行下列代码:# python3 testimages.py \ datasetvoc/inference_graph/frozen_inference_graph.pb \ datasetvoc/pascal_label_map.pbtxt \ test_images/ \ datasetvoc/inference_graph/result_annos.json
打开生成的result_annos.json,部分截图如下:
此时用的是Pascal VOC2007训练的模型进行测试,因为类别较多。
方法一:采用VideoCapture对视频进行处理的方法(边播放识别,某些模型有点卡)当前目录/home/users/py3_project/models/research/object_detection下testvideo1.py文件两个路径修改为自己的路径及修改NUM_CLASS
并加入读取视频代码(视频为一帧帧图像),其中cv2.VideoCapture(0)时为摄像头实时摄像,下面是读取视频文件方式:
# python3 testvideo1.py test_images/test.mp4
方法二:基于moviepy中的VideoFileClip进行的识别(处理等待过程慢,10s的视频需处理几分钟,最后结果生成视频文件)
开头加入需要的依赖包
当前目录/home/users/py3_project/models/research/object_detection下testvideo2.py文件两个路径修改为自己的路径及修改NUM_CLASS
使用 VideoFileClip 函数从视频中抓取图片,用fl_image函数将原图片替换为标注修改后的图片,所有修改的剪辑图像被组合成为一个新的视频。物体标注过程调用函数detect_objects,与原代码相同。
还可以将mp4文件转化为gif格式
from moviepy.editor import *clip1 = VideoFileClip("test-out.mp4")clip1.write_gif("test-out.gif")
执行
# python3 testvideo2.py test_images/test.mp4
本节采用faster-rcnn模型进行物体检测,在依次执行4.1.1-4.1.9步骤时修改以下几步,其他步骤不变:
# wget http://download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_11_06_2017.tar.gz # tar -zxvf faster_rcnn_resnet101_coco_11_06_2017.tar.gz
将解压好的预训练模型目录重命名为model_fastercnn,存入dataset目录下
models/research/object_detection/utils/learning_schedules.py第167-169行:rate_index = tf.reduce_max(tf.where(tf.greater_equal(global_step, boundaries), range(num_boundaries), [0] * num_boundaries))改为:rate_index = tf.reduce_max(tf.where(tf.greater_equal(global_step, boundaries), list(range(num_boundaries)), [0] * num_boundaries))
本节采用rfcn模型进行物体检测,在依次执行4.1.1-4.1.9步骤时修改以下三步,其他步骤不变:
转载地址:http://vnxin.baihongyu.com/