TensorFlow:Object_Detection_API在Windows10上的配置
来源:互联网 发布:网络arp攻击怎么办 编辑:程序博客网 时间:2024/05/17 15:41
安装
假设已配置完tensorflow,并安装好Anaconda3-4.2.0(此版本为python3.5)
从github下载models
tensorflow/models
Protobuf 编译
protobuf下载
我下载的版本是protoc-3.3.0-win32.zip,解压后将bin文件夹中的【protoc.exe】放到C:\Windows
在models目录下shift+右键打开Powershell窗口,输入:
# From tensorflow/models/protoc object_detection/protos/*.proto --python_out=.
不报错即可
测试
由于电脑中同时有Anaconda2与Anaconda3,在models目录下输入
jupyter-notebook
进入object_detetion中打开【object_detection_tutorial.ipynb】,无法运行,此时的kernel是python2,而windows只有python3.5的tensorflow。如果你的电脑只有python3.5,那么直接run all就可以看到结果。或者将Anaconda3的jupyter-notebook的工作空间变换到models目录下。
这里我用了另一种方法:
新建一个【object_detection_tutorial.py】,将.ipynb中的代码复制到.py中,然后在spyder中运行。以下是代码。功能是取object_detection\test_images中的图片:image1和image2,做目标检测。
import numpy as npimport osimport six.moves.urllib as urllibimport sysimport tarfileimport tensorflow as tfimport zipfilefrom collections import defaultdictfrom io import StringIOfrom matplotlib import pyplot as pltfrom PIL import Image## This is needed to display the images.#%matplotlib inline# This is needed since the notebook is stored in the object_detection folder.sys.path.append("..")from utils import label_map_utilfrom utils import visualization_utils as vis_util# What model to download.MODEL_NAME = 'ssd_mobilenet_v1_coco_11_06_2017'MODEL_FILE = MODEL_NAME + '.tar.gz'DOWNLOAD_BASE = 'http://download.tensorflow.org/models/object_detection/'# Path to frozen detection graph. This is the actual model that is used for the object detection.PATH_TO_CKPT = MODEL_NAME + '/frozen_inference_graph.pb'# List of the strings that is used to add correct label for each box.PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt')NUM_CLASSES = 90#download modelopener = urllib.request.URLopener()#下载模型,如果已经下载好了下面这句代码可以注释掉opener.retrieve(DOWNLOAD_BASE + MODEL_FILE, MODEL_FILE)tar_file = tarfile.open(MODEL_FILE)for file in tar_file.getmembers(): file_name = os.path.basename(file.name) if 'frozen_inference_graph.pb' in file_name: tar_file.extract(file, os.getcwd())#Load a (frozen) Tensorflow model into memory. detection_graph = tf.Graph()with detection_graph.as_default(): od_graph_def = tf.GraphDef() with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid: serialized_graph = fid.read() od_graph_def.ParseFromString(serialized_graph) tf.import_graph_def(od_graph_def, name='')#Loading label map label_map = label_map_util.load_labelmap(PATH_TO_LABELS)categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=NUM_CLASSES, use_display_name=True)category_index = label_map_util.create_category_index(categories)#Helper codedef load_image_into_numpy_array(image): (im_width, im_height) = image.size return np.array(image.getdata()).reshape( (im_height, im_width, 3)).astype(np.uint8)# For the sake of simplicity we will use only 2 images:# image1.jpg# image2.jpg# If you want to test the code with your images, just add path to the images to the TEST_IMAGE_PATHS.PATH_TO_TEST_IMAGES_DIR = 'test_images'TEST_IMAGE_PATHS = [ os.path.join(PATH_TO_TEST_IMAGES_DIR, 'image{}.jpg'.format(i)) for i in range(1, 3) ]# Size, in inches, of the output images.IMAGE_SIZE = (12, 8)with detection_graph.as_default(): with tf.Session(graph=detection_graph) as sess: for image_path in TEST_IMAGE_PATHS: image = Image.open(image_path) # the array based representation of the image will be used later in order to prepare the # result image with boxes and labels on it. image_np = load_image_into_numpy_array(image) # Expand dimensions since the model expects images to have shape: [1, None, None, 3] image_np_expanded = np.expand_dims(image_np, axis=0) image_tensor = detection_graph.get_tensor_by_name('image_tensor:0') # Each box represents a part of the image where a particular object was detected. boxes = detection_graph.get_tensor_by_name('detection_boxes:0') # Each score represent how level of confidence for each of the objects. # Score is shown on the result image, together with the class label. scores = detection_graph.get_tensor_by_name('detection_scores:0') classes = detection_graph.get_tensor_by_name('detection_classes:0') num_detections = detection_graph.get_tensor_by_name('num_detections:0') # Actual detection. (boxes, scores, classes, num_detections) = sess.run( [boxes, scores, classes, num_detections], feed_dict={image_tensor: image_np_expanded}) # Visualization of the results of a detection. vis_util.visualize_boxes_and_labels_on_image_array( image_np, np.squeeze(boxes), np.squeeze(classes).astype(np.int32), np.squeeze(scores), category_index, use_normalized_coordinates=True, line_thickness=8) plt.figure(figsize=IMAGE_SIZE) plt.imshow(image_np)
结果
主要时间用于下载模型,目标识别还是蛮快的。
一些细节
1.模型的选择
Tensorflow detection model zoo
Speed表示速度,COCO mAP表示在COCO数据集上的平均准确率,第一个ssd_mobilenet就是我们默认使用的pre-train模型
# What model to download.MODEL_NAME = 'ssd_mobilenet_v1_coco_11_06_2017'#MODEL_NAME = 'faster_rcnn_resnet101_coco_11_06_2017'#MODEL_NAME = 'ssd_inception_v2_coco_11_06_2017'MODEL_FILE = MODEL_NAME + '.tar.gz'DOWNLOAD_BASE = 'http://download.tensorflow.org/models/object_detection/'
2.测试自己的图片
改变【PATH_TO_TEST_IMAGES_DIR】 的路径,要在models-master\object_detection目录下。相应的数量for i in range(1, 3)也要进行改变。
# For the sake of simplicity we will use only 2 images:# image1.jpg# image2.jpg# If you want to test the code with your images, just add path to the images to the TEST_IMAGE_PATHS.PATH_TO_TEST_IMAGES_DIR = 'test_images'TEST_IMAGE_PATHS = [ os.path.join(PATH_TO_TEST_IMAGES_DIR, 'image{}.jpg'.format(i)) for i in range(1, 3) ]
测试一张图片快7秒,不知道是什么原因。
3.测试视频
安装Opencv3,这里碰到了问题,直接输入
pip install opencv-python
安装好后import cv2报错
ImportError: DLL load failed: 找不到指定的模块
根据网上的解决方法去安装vc++ for visual2015之后并没有解决,下载重装 【opencv_python-3.2.0.8-cp35-cp35m-win_amd64.whl】也无效。把Anaconda2删除只留Anaconda3也不行。无奈之下重新安装Anaconda3,下载最新版的python-opencv,在目录下
pip install opencv_python-3.3.0-cp35-cp35m-win_amd64.whl
import cv2报错:
ImportError: numpy.core.multiarray failed to import
于是更新numpy到1.13.1:
pip install -U numpy
接下来import cv2就没问题了
- TensorFlow:Object_Detection_API在Windows10上的配置
- TensorFlow:Object_Detection_API在Windows10上的配置
- 在Windows10上安装TensorFlow
- Win7配置和运行TensorFlow:Object_Detection_API步骤
- 在windows10上安装tensorflow(GPU)
- Mysql5.7.11解压版在windows10上的安装配置
- 最新HoloLens在windows10上的开发配置(1)
- TensorFlow在windows10下的安装
- windows10+Tensorflow配置
- tensorflow windows10 gpu 配置
- TensorFlow在Windows10中的安装
- Tensorflow+SSD+Windows10+GPU的配置及运行
- jitamin在windows10上的搭建
- MySQL5.7在windows10上的安装
- 【TensorFlow】Windows10下配置TensorFlow环境
- tflearn在tensorflow上的安装配置(基于ubuntu)
- 在Ubuntu上配置TensorFlow,Eclipse+PyDev遇到的问题
- windows10上搭建tensorflow简易教程
- zoj3609----Modular Inverse (扩展欧几里德)
- JavaScript离线应用与客户端存储
- Unity3D shader(9)——vertex shader(phong光照和BlinnPhong光照)
- git学习
- 决策树分类的一个入门示例
- TensorFlow:Object_Detection_API在Windows10上的配置
- Mac系统隐藏和显示文件
- 用最简单快捷的方法用js写一个计算器
- HashMap的实现原理
- brctl网桥配置命令、网卡的链路聚合
- Log4j类详解(org.apache.log4j.Logger)
- hibernate学习笔记
- Spring的四种依赖注入方式实例
- Unity+Behavior Tree行为树 Behavior Designer 行为树介绍(二)