Win 10安装Tensorflow目标检测API(三大步7小步)

第一步:下载源码

1、从官网(https://github.com/tensorflow/models/tree/master)下载目标检测的源码,注意版本需要一致!!!

(本人使用的 r1.13.0版本进行下载的)


选择自己的版本

2、解压到想要安装的文件夹内,并将文件夹命名为models(不是必须)

第二步:编译文件

3、安装protoc(https://github.com/protocolbuffers/protobuf/releases),选择合适的版本解压后(位置任意)。接着将bin文件夹下的protoc.exe复制到C:\Windows\System32文件夹下。cmd打开命令行界面,输入命令protoc,若无异常信息表示安装成功!

选择合适的版本

4、编译proto文件。在models/research下运行Windows PowerShell(注意,这里必须是PowerShell,运行cmd会报错,cmd中输入powershell即可进入该命令窗口),输入如下命令:

Get-ChildItem object_detection/protos/*.proto | Resolve-Path -Relative | %{ protoc $_ --python_out=. }
运行完成后,可以检查object_detection/protos/文件夹,如果每个proto文件都成了对应的以py为后缀的python源码,就说明编译成功了。


第三步:安装测试
注意:若是在Anaconda且多环境下,需要直接使用activate进入需要的环境中进行输入命令!!!


[后来发现删除了也不影响] 5、添加环境变量。在Anaconda\Lib\site-packages添加一个路径文件,如tensorflow_model.pth,必须以.pth为后缀,写上你要加入的模块文件所在的目录名称,一共两条:①models\research的绝对路径②models\research\slim的绝对路径

6、在models/research/slim下依次运行如下命令:

python setup.py build
python setup.py install
要是slim文件下已经有了BUILD,需要先删掉这个,然后再python setup.py install
还有 在models/research下同样操作

7、安装完成测试。

进入models\research输入python object_detection/builders/model_builder_test.py
出现OK信息则表示安装成功

8、(高版本需要)安装COCO API,推荐安装

git clone https://github.com/cocodataset/cocoapi.git

cd cocoapi/PythonAPI

python setup.py build

python setup.py install

9、py文件测试(Jupyter notebook测试网上很多,就不介绍了)

本人使用Pycharm打开models文件,如下图

文件结构

在models\research目录里创建一个文件夹如my_download_pretrained用来保存预训练模型,之后创建一个文件写入下述代码:
注使用方法:

  • 下载预训练模型解压后放入创建的文件夹内(当然也可以其他地方)
  • 修改变量PATH_TO_CKPT指向对应预训练模型的frozen_inference_graph.pb文件(具体查看代码示例)
  • 运行即可(本人显示图像的方式是OpenCV,不过设置了保存到当前目录下图片,也可以手动查看图像)
# -*- coding: utf-8 -*-
"""
Created on Tue Jun  5 20:34:06 2018

@author: https://www.cnblogs.com/zyly/p/9248394.html#_label4
"""

'''
调用Object Detection API进行实物检测   需要GPU运行环境,CPU下会报错

模型下载网址(下载后的模型解压后放在预先创建的文件夹内):
https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md

TensorFlow  生成的  .ckpt 和  .pb 都有什么用?
https://www.cnblogs.com/nowornever-L/p/6991295.html
如何用Tensorflow训练模型成pb文件(一)——基于原始图片的读取
https://blog.csdn.net/u011463646/article/details/77918980?fps=1&locationNum=7
'''

import matplotlib.pyplot as plt
import numpy as np
import os
import tensorflow as tf
from object_detection.utils import label_map_util
from object_detection.utils import visualization_utils as vis_util
from PIL import Image

def test():
    # 重置图
    tf.reset_default_graph()
    '''
    载入模型以及数据集样本标签,加载待测试的图片文件
    '''
    # 指定要使用的模型的路径  包含图结构,以及参数
    PATH_TO_CKPT = r'./my_download_pretrained\ssd_resnet50_v1_fpn_shared_box_predictor_640x640_coco/frozen_inference_graph.pb'

    # 测试图片所在的路径
    PATH_TO_TEST_IMAGES_DIR = './object_detection/test_images'

    TEST_IMAGE_PATHS = [os.path.join(PATH_TO_TEST_IMAGES_DIR, 'image{}.jpg'.format(i)) for i in range(1, 3)]

    # 数据集对应的label mscoco_label_map.pbtxt文件保存了index到类别名的映射
    PATH_TO_LABELS = os.path.join('./object_detection/data', 'mscoco_label_map.pbtxt')

    NUM_CLASSES = 90

    # 重新定义一个图
    output_graph_def = tf.GraphDef()

    with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid:
        # 将*.pb文件读入serialized_graph
        serialized_graph = fid.read()
        # 将serialized_graph的内容恢复到图中
        output_graph_def.ParseFromString(serialized_graph)
        # print(output_graph_def)
        # 将output_graph_def导入当前默认图中(加载模型)
        tf.import_graph_def(output_graph_def, name='')

    print('模型加载完成')

    # 载入coco数据集标签文件
    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)

    '''
    定义session
    '''

    def load_image_into_numpy_array(image):
        '''
        将图片转换为ndarray数组的形式
        '''
        im_width, im_height = image.size
        return np.array(image.getdata()).reshape((im_height, im_width, 3)).astype(np.uint0)

    # 设置输出图片的大小
    IMAGE_SIZE = (12, 8)

    # 使用默认图,此时已经加载了模型
    detection_graph = tf.get_default_graph()

    with tf.Session(graph=detection_graph) as sess:
        for image_path in TEST_IMAGE_PATHS:
            image = Image.open(image_path)
            # 将图片转换为numpy格式
            image_np = load_image_into_numpy_array(image)

            '''
            定义节点,运行并可视化
            '''
            # 将图片扩展一维,最后进入神经网络的图片格式应该是[1,?,?,3]
            image_np_expanded = np.expand_dims(image_np, axis=0)

            '''
            获取模型中的tensor
            '''
            image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')

            # boxes用来显示识别结果
            boxes = detection_graph.get_tensor_by_name('detection_boxes:0')

            # Echo score代表识别出的物体与标签匹配的相似程度,在类型标签后面
            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')

            # 开始检查
            boxes, scores, classes, num_detections = sess.run([boxes, scores, classes, num_detections],
                                                              feed_dict={image_tensor: image_np_expanded})

            # 可视化结果
            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)
            print(type(image_np))
            print(image_np.shape)
            image_np = np.array(image_np, dtype=np.uint8)

            #  显示图像,其他方式也可以
            im = Image.fromarray(image_np)
            im.save("out.jpeg")

            import cv2
            img = cv2.imread("out.jpeg")
            cv2.imshow('test', img)
            cv2.waitKey(0)
            cv2.destroyWindow('test')

if __name__ == '__main__':
    test()

效果图:

参考:
Windows10下Object Detection API实战记录(1)——windows10下成功安装TensorFlow Object Detection API(亲测以及踩坑记录)

全网最详细win10+anaconda+GPU+Tensorflow Object Detection API训练自己数据+新手教程+训练过程问题解决

Ubuntu18.04下安装TensorFlow Object Detection API

cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp”

第三十二节,使用谷歌Object Detection API进行目标检测、训练新的模型(使用VOC 2012数据集)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容