python怎么使用预训练的模型_tensorflow利用预训练模型进行目标检测(二):预训练模型的使用...

importsys

reload(sys)

sys.setdefaultencoding('utf8')

问题2

报错信息:_tkinter.TclError: no display name and no $DISPLAY environment variable 详情:

ContractedBlock.gif

ExpandedBlockStart.gif

Traceback (most recent call last):

File"ODtest.py", line 103, in Detection()

File"ODtest.py", line 96, inDetection

plt.figure(figsize=IMAGE_SIZE)

File"/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 533, infigure**kwargs)

File"/usr/local/lib/python2.7/dist-packages/matplotlib/backend_bases.py", line 161, innew_figure_managerreturncls.new_figure_manager_given_figure(num, fig)

File"/usr/local/lib/python2.7/dist-packages/matplotlib/backends/_backend_tk.py", line 1046, innew_figure_manager_given_figure

window= Tk.Tk(className="matplotlib")

File"/usr/lib/python2.7/lib-tk/Tkinter.py", line 1822, in __init__self.tk=_tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)

_tkinter.TclError: no display nameand no $DISPLAY environment variable

View Code

solution:参考:https://blog.csdn.net/qq_22194315/article/details/77984423

纯代码解决方案

这也是大部分人在网上诸如stackoverflow的问答平台得到的解决方案,在引入pyplot、pylab之前,要先更改matplotlib的后端模式为”Agg”。直接贴代码吧!

ContractedBlock.gif

ExpandedBlockStart.gif

#do this before importing pylab or pyplot

Import matplotlib

matplotlib.use('Agg')import matplotlib.pyplot asplt

View Code

修改之后代码为:

ContractedBlock.gif

ExpandedBlockStart.gif

#!usr/bin/python#-*- coding: utf-8 -*-

importnumpy as npimportmatplotlib

matplotlib.use('Agg')importmatplotlib.pyplotfrom matplotlib importpyplot as pltimportosimporttensorflow as tffrom PIL importImagefrom utils importlabel_map_utilfrom utils importvisualization_utils as vis_utilimportdatetime#关闭tensorflow警告

importsys

reload(sys)

sys.setdefaultencoding('utf8')

os.environ['TF_CPP_MIN_LOG_LEVEL']='3'detection_graph=tf.Graph()#加载模型数据-------------------------------------------------------------------------------------------------------

defloading():

with detection_graph.as_default():

od_graph_def=tf.GraphDef()

PATH_TO_CKPT= 'ssd_mobilenet_v1_coco_11_06_2017' + '/frozen_inference_graph.pb'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='')returndetection_graph#Detection检测-------------------------------------------------------------------------------------------------------

defload_image_into_numpy_array(image):

(im_width, im_height)=image.sizereturnnp.array(image.getdata()).reshape(

(im_height, im_width,3)).astype(np.uint8)#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')

label_map=label_map_util.load_labelmap(PATH_TO_LABELS)

categories= label_map_util.convert_label_map_to_categories(label_map, max_num_classes=90, use_display_name=True)

category_index=label_map_util.create_category_index(categories)def Detection(image_path="images/image1.jpg"):

loading()

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)#output result输出

for i in range(3):if classes[0][i] incategory_index.keys():

class_name= category_index[classes[0][i]]['name']else:

class_name= 'N/A'

print("object:%s gailv:%s" %(class_name, scores[0][i]))#matplotlib输出图片

#Size, in inches, of the output images.

IMAGE_SIZE = (20, 12)

plt.figure(figsize=IMAGE_SIZE)

plt.imshow(image_np)

plt.show()#运行

Detection()

View Code

运行结果:

693017-20181020095000427-1441516493.png

如无意外,加上时间统计函数,调用已下载好的预训练模型即可

二、使用预训练模型

使用ssd_mobilenet_v1_coco_11_06_2017

对上边的代码进行修改,注意修改PATH_TO_LABELS的路径,models中包括mscoco_label_map.pbtxt文件,在/models/research/object_detection/data目录下,另外注意from object_detection.utils import label_map_util中,在utils前边要加上object_detection

修改后的代码路径为:/models/models/mcode/ODtest.py 代码如下

ContractedBlock.gif

ExpandedBlockStart.gif

#!usr/bin/python#-*- coding: utf-8 -*-

importnumpy as npimportmatplotlib

matplotlib.use('Agg')importmatplotlib.pyplotfrom matplotlib importpyplot as pltimportosimporttensorflow as tffrom PIL importImagefrom object_detection.utils importlabel_map_utilfrom object_detection.utils importvisualization_utils as vis_utilimportdatetime#关闭tensorflow警告

importsys

reload(sys)

sys.setdefaultencoding('utf8')

os.environ['TF_CPP_MIN_LOG_LEVEL']='3'detection_graph=tf.Graph()#加载模型数据-------------------------------------------------------------------------------------------------------

defloading():

with detection_graph.as_default():

od_graph_def=tf.GraphDef()

PATH_TO_CKPT= '/home/yanjieliu/models/models/research/object_detection/pretrained_models/ssd_mobilenet_v1_coco_11_06_2017' + '/frozen_inference_graph.pb'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='')returndetection_graph#Detection检测-------------------------------------------------------------------------------------------------------

defload_image_into_numpy_array(image):

(im_width, im_height)=image.sizereturnnp.array(image.getdata()).reshape(

(im_height, im_width,3)).astype(np.uint8)#List of the strings that is used to add correct label for each box.

PATH_TO_LABELS = os.path.join('/home/yanjieliu/models/models/research/object_detection/data', 'mscoco_label_map.pbtxt')

label_map=label_map_util.load_labelmap(PATH_TO_LABELS)

categories= label_map_util.convert_label_map_to_categories(label_map, max_num_classes=90, use_display_name=True)

category_index=label_map_util.create_category_index(categories)def Detection(image_path="/home/yanjieliu/dataset/img_test/p1.jpg"):

loading()

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)#output result输出

for i in range(3):if classes[0][i] incategory_index.keys():

class_name= category_index[classes[0][i]]['name']else:

class_name= 'N/A'

print("object:%s gailv:%s" %(class_name, scores[0][i]))#matplotlib输出图片

#Size, in inches, of the output images.

IMAGE_SIZE = (20, 12)

plt.figure(figsize=IMAGE_SIZE)

plt.imshow(image_np)

plt.show()#运行

Detection()

View Code

可正确运行

若想使用该链接中的脚本http://www.baiguangnan.com/2018/02/12/objectdetection2/,则需要进行一些修改,否则会有错误,待做

传参并将时间记录到txt文档的版本,将ODtest.py进行部分修改,修改后的内容在1to10test.py中

ContractedBlock.gif

ExpandedBlockStart.gif

#!usr/bin/python#-*- coding: utf-8 -*-

importnumpy as npimportmatplotlib

matplotlib.use('Agg')importmatplotlib.pyplotfrom matplotlib importpyplot as pltimportosimporttensorflow as tffrom PIL importImagefrom object_detection.utils importlabel_map_utilfrom object_detection.utils importvisualization_utils as vis_utilimportdatetime#关闭tensorflow警告

importtimeimportargparseimportsys

reload(sys)

sys.setdefaultencoding('utf8')

os.environ['TF_CPP_MIN_LOG_LEVEL']='3'detection_graph=tf.Graph()#加载模型数据-------------------------------------------------------------------------------------------------------

defloading(model_name):

with detection_graph.as_default():

od_graph_def=tf.GraphDef()

PATH_TO_CKPT= '/home/yanjieliu/models/models/research/object_detection/pretrained_models/'+model_name + '/frozen_inference_graph.pb'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='')returndetection_graph#Detection检测-------------------------------------------------------------------------------------------------------

defload_image_into_numpy_array(image):

(im_width, im_height)=image.sizereturnnp.array(image.getdata()).reshape(

(im_height, im_width,3)).astype(np.uint8)#List of the strings that is used to add correct label for each box.

PATH_TO_LABELS = os.path.join('/home/yanjieliu/models/models/research/object_detection/data', 'mscoco_label_map.pbtxt')

label_map=label_map_util.load_labelmap(PATH_TO_LABELS)

categories= label_map_util.convert_label_map_to_categories(label_map, max_num_classes=90, use_display_name=True)

category_index=label_map_util.create_category_index(categories)defDetection(args):

image_path=args.image_path

loading(args.model_name)#start = time.time()

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)#output result输出

for i in range(3):if classes[0][i] incategory_index.keys():

class_name= category_index[classes[0][i]]['name']else:

class_name= 'N/A'

print("object:%s gailv:%s" %(class_name, scores[0][i]))#matplotlib输出图片

#Size, in inches, of the output images.

IMAGE_SIZE = (20, 12)

plt.figure(figsize=IMAGE_SIZE)

plt.imshow(image_np)

plt.show()defparse_args():'''parse args'''parser=argparse.ArgumentParser()

parser.add_argument('--image_path', default='/home/yanjieliu/dataset/img_test/p4.jpg')

parser.add_argument('--model_name',

default='mask_rcnn_inception_resnet_v2_atrous_coco_2018_01_28')returnparser.parse_args()#运行

start =time.time()

Detection(parse_args())

end=time.time()print('time:\n')print str(end-start)

with open('./outputs/1to10test_outputs.txt', 'a') as f:

f.write('\n')

f.write(str(end-start))

View Code

使用 python 1to10test_new.py --image_path /home/yanjieliu/dataset/img_test/p5.jpg --model_name mask_rcnn_inception_resnet_v2_atrous_coco_2018_01_28 便可调用运行

或者写一个shell脚本,将此命令执行10遍,然后求平均运行时间即可

例如

ContractedBlock.gif

ExpandedBlockStart.gif

#!/bin/bash

for i in $(seq 1 10)

do

python 1to10test_new.py--image_path /home/yanjieliu/dataset/img_test/p4.jpg --model_name mask_rcnn_inception_resnet_v2_atrous_coco_2018_01_28

done

View Code

检测单张图片的模板

ContractedBlock.gif

ExpandedBlockStart.gif

#!usr/bin/python#-*- coding: utf-8 -*-

importnumpy as npimportmatplotlib

matplotlib.use('Agg')importmatplotlib.pyplotfrom matplotlib importpyplot as pltimportosimporttensorflow as tffrom PIL importImagefrom object_detection.utils importlabel_map_utilfrom object_detection.utils importvisualization_utils as vis_utilimportdatetime#关闭tensorflow警告

importtimeimportMySQLdbimportargparseimportsys

reload(sys)

sys.setdefaultencoding('utf8')

os.environ['TF_CPP_MIN_LOG_LEVEL']='3'detection_graph=tf.Graph()#加载模型数据-------------------------------------------------------------------------------------------------------

defloading(model_name):

with detection_graph.as_default():

od_graph_def=tf.GraphDef()

PATH_TO_CKPT= '/home/yanjieliu/models/models/research/object_detection/pretrained_models/'+model_name + '/frozen_inference_graph.pb'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='')returndetection_graph#Detection检测-------------------------------------------------------------------------------------------------------

defload_image_into_numpy_array(image):

(im_width, im_height)=image.sizereturnnp.array(image.getdata()).reshape(

(im_height, im_width,3)).astype(np.uint8)#List of the strings that is used to add correct label for each box.

PATH_TO_LABELS = os.path.join('/home/yanjieliu/models/models/research/object_detection/data', 'mscoco_label_map.pbtxt')

label_map=label_map_util.load_labelmap(PATH_TO_LABELS)

categories= label_map_util.convert_label_map_to_categories(label_map, max_num_classes=90, use_display_name=True)

category_index=label_map_util.create_category_index(categories)defDetection(args):

image_path=args.image_path

image_name=args.image_name

loading(args.model_name)#start = time.time()

with detection_graph.as_default():

with tf.Session(graph=detection_graph) as sess:#for image_path in TEST_IMAGE_PATHS:

image = Image.open('%s%s'%(image_path, image_name))#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)#output result输出

list =[]for i in range(5):if classes[0][i] incategory_index.keys():

class_name= category_index[classes[0][i]]['name']else:

class_name= 'N/A'

print("object:%s gailv:%s" %(class_name, scores[0][i]))#print(boxes)

if(float(scores[0][i])>0.5):

list.append(class_name.encode('utf-8'))#matplotlib输出图片

#Size, in inches, of the output images.

IMAGE_SIZE = (20, 12)

plt.figure(figsize=IMAGE_SIZE)

plt.imshow(image_np)

plt.show()defparse_args():'''parse args'''parser=argparse.ArgumentParser()

parser.add_argument('--image_path', default='/home/yanjieliu/rdshare/dataset/dog/')

parser.add_argument('--image_name', default='dog768_576.jpg')

parser.add_argument('--model_name',

default='faster_rcnn_resnet50_coco_2018_01_28')returnparser.parse_args()if __name__ == '__main__':#运行

args=parse_args()

start=time.time()

Detection(args)

end=time.time()print('time:\n')print str(end-start)

View Code

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值