如何对使用ssd检测出来的目标进行计数 5C

图片说明
图片说明

我使用了ssd对图像进行检测,检测结果如图所示,请问如何对每检测结果中的每一个对象计数。如果对视频进行物体检测的计数,需要往哪个方向进行。有好的博客可以推荐一下。谢谢。
源代码如下


# coding: utf-8

# # Object Detection Demo
# Welcome to the object detection inference walkthrough!  This notebook will walk you step by step through the process of using a pre-trained model to detect objects in an image. Make sure to follow the [installation instructions](https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md) before you start.

# # Imports

# In[1]:


import numpy as np
import os
import six.moves.urllib as urllib
import sys
import tarfile
import tensorflow as tf
import zipfile

from distutils.version import StrictVersion
from collections import defaultdict
from io import StringIO
from matplotlib import pyplot as plt
from PIL import Image

# This is needed since the notebook is stored in the object_detection folder.
sys.path.append("..")
from object_detection.utils import ops as utils_ops

if StrictVersion(tf.__version__) < StrictVersion('1.9.0'):
  raise ImportError('Please upgrade your TensorFlow installation to v1.9.* or later!')


# ## Env setup

# In[2]:


# This is needed to display the images.
get_ipython().magic('matplotlib inline')


# ## Object detection imports
# Here are the imports from the object detection module.

# In[3]:


from utils import label_map_util

from utils import visualization_utils as vis_util


# # Model preparation 

# ## Variables
# 
# Any model exported using the `export_inference_graph.py` tool can be loaded here simply by changing `PATH_TO_FROZEN_GRAPH` to point to a new .pb file.  
# 
# By default we use an "SSD with Mobilenet" model here. See the [detection model zoo](https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md) for a list of other models that can be run out-of-the-box with varying speeds and accuracies.

# In[4]:


# What model to download.
MODEL_NAME = 'ssd_mobilenet_v1_coco_2017_11_17'
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_FROZEN_GRAPH = 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')


# ## Download Model

# In[5]:


opener = 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.

# In[6]:


detection_graph = tf.Graph()
with detection_graph.as_default():
  od_graph_def = tf.GraphDef()
  with tf.gfile.GFile(PATH_TO_FROZEN_GRAPH, '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 maps map indices to category names, so that when our convolution network predicts `5`, we know that this corresponds to `airplane`.  Here we use internal utility functions, but anything that returns a dictionary mapping integers to appropriate string labels would be fine

# In[7]:


category_index = label_map_util.create_category_index_from_labelmap(PATH_TO_LABELS, use_display_name=True)


# ## Helper code

# In[8]:


def 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)


# # Detection

# In[9]:


# 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)


# In[ ]:


def run_inference_for_single_image(image, graph):
  with graph.as_default():
    with tf.Session() as sess:
      # Get handles to input and output tensors
      ops = tf.get_default_graph().get_operations()
      all_tensor_names = {output.name for op in ops for output in op.outputs}
      tensor_dict = {}
      for key in [
          'num_detections', 'detection_boxes', 'detection_scores',
          'detection_classes', 'detection_masks'
      ]:
        tensor_name = key + ':0'
        if tensor_name in all_tensor_names:
          tensor_dict[key] = tf.get_default_graph().get_tensor_by_name(
              tensor_name)
      if 'detection_masks' in tensor_dict:
        # The following processing is only for single image
        detection_boxes = tf.squeeze(tensor_dict['detection_boxes'], [0])
        detection_masks = tf.squeeze(tensor_dict['detection_masks'], [0])
        # Reframe is required to translate mask from box coordinates to image coordinates and fit the image size.
        real_num_detection = tf.cast(tensor_dict['num_detections'][0], tf.int32)
        detection_boxes = tf.slice(detection_boxes, [0, 0], [real_num_detection, -1])
        detection_masks = tf.slice(detection_masks, [0, 0, 0], [real_num_detection, -1, -1])
        detection_masks_reframed = utils_ops.reframe_box_masks_to_image_masks(
            detection_masks, detection_boxes, image.shape[0], image.shape[1])
        detection_masks_reframed = tf.cast(
            tf.greater(detection_masks_reframed, 0.5), tf.uint8)
        # Follow the convention by adding back the batch dimension
        tensor_dict['detection_masks'] = tf.expand_dims(
            detection_masks_reframed, 0)
      image_tensor = tf.get_default_graph().get_tensor_by_name('image_tensor:0')

      # Run inference
      output_dict = sess.run(tensor_dict,
                             feed_dict={image_tensor: np.expand_dims(image, 0)})

      # all outputs are float32 numpy arrays, so convert types as appropriate
      output_dict['num_detections'] = int(output_dict['num_detections'][0])
      output_dict['detection_classes'] = output_dict[
          'detection_classes'][0].astype(np.uint8)
      output_dict['detection_boxes'] = output_dict['detection_boxes'][0]
      output_dict['detection_scores'] = output_dict['detection_scores'][0]
      if 'detection_masks' in output_dict:
        output_dict['detection_masks'] = output_dict['detection_masks'][0]
  return output_dict


# In[ ]:


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)
  # Actual detection.
  output_dict = run_inference_for_single_image(image_np, detection_graph)
  # Visualization of the results of a detection.
  vis_util.visualize_boxes_and_labels_on_image_array(
      image_np,
      output_dict['detection_boxes'],
      output_dict['detection_classes'],
      output_dict['detection_scores'],
      category_index,
      instance_masks=output_dict.get('detection_masks'),
      use_normalized_coordinates=True,
      line_thickness=8)
  plt.figure(figsize=IMAGE_SIZE)
  plt.imshow(image_np)


0
de4652
禹先生 同问
大约 2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
目标检测SSD中参数计算
端到端的目标检测算法SSD,论文中涉及的目标框个数,长宽比等计算
融合特征的SSD:对小目标的快速检测
小目标因为其分辨率和信息的限制,对其进行检测是比较有挑战性的任务。当下很多对小目标的检测方法都是以牺牲精度作为代价的。作者在SSD中进行了多层特征的融合以引入context信息,特征融合的细节上,作者设计了两种模型,分别是:concatenation module 和 element-sum module,这两种模型的不同点在于引入context信息方式的差异。实验结果显示这两种模型的检测精度都超...
为什么SSD目标检测算法对小目标检测的效果不好
在SSD算法中,每个feature map的像素点都会生成prior box,SSD通过prior box进而对feature map进行训练。 文章中提到,SSD在训练过程中,prior box与GroundTruth的之间ROI 达到0.5才会放到网络里面进行训练。大的目标有可能ROI的值会大很多,因此包含的prior box就多,就可以得到充分的训练。相反小目标用于训练的的prior bo...
SSD-tensorflow 单类目标的检测
最近一段时间主要是做目标检测的任务,在没接触DL之前,受到目标图像尺度、特征不明显等影响传统方法效果并不是很好。 一、跑通SSD-tensorflow Demo 这一步基本都可以复现,主要参考了参照github上 balancap 的过程: https://github.com/balancap/SSD-Tensorflow 中文翻译 https:/...
TX2实现yolov2(目标检测,计数,训练自己的数据集)
TX2如何刷机,安装caffe,cuda,cudnn,请参考我的上一篇博客http://blog.csdn.net/xiao__run/article/details/78776834 YOLOv2安装 1.获取源码git clone https://github.com/pjreddie/darknet cd darknet2.修改Makefile  我们打开MakeFile文件:   na
对于ssd对小目标检测效果的思考
对于ssd模型对于小目标检测效果不好的问题,我认为可以结合.prototxt文件进行分析,以conv4_3_norm_mbox_priorbox为例: prior_box_param { min_size: 30.0 max_size: 60.0 aspect_ratio: 2 flip: true clip: false variance:...
固态硬盘ssd的寿命如何计算,固态硬盘质量怎么检测?
固态硬盘ssd的寿命如何计算,固态硬盘质量怎么检测? ① 机械硬盘的寿命一般是用使用(通电)时间来计算的,比如500GB机械硬盘通电20000个小时。 ② 固态硬盘ssd 不能用通常的通电时间来计算。   固态硬盘并不能用通电时间来衡量,固态硬盘用多少个PE 来计算的, 请问SSD中的3000PE和1000PE是什么意思 闪存完全擦写一次叫做1次P/E,因
yoloV3,比V2更能获得好的小目标检测的理由,使用了上采样52,和26 yolo——SSD——yolov2——FPN、Focal loss、DSSD……——yolov3
每当听到有人问“如何入门计算机视觉”这个问题时,其实我内心是拒绝的,为什么呢?因为我们说的计算机视觉的发展史可谓很长了,它的分支很多,而且理论那是错综复杂交相辉映,就好像数学一样,如何学习数学?这问题似乎有点笼统、有点宽泛。所以我都会具体问问你想入门计算机视觉的哪个话题,只有顺着一个话题理论联合实际,才有可能扩展到几个话题。 yolo类算法,从开始到现在已经有了3代,我们称之为v1、v2、v3,一...
使用SSD模型检测自定目标
SSD简介 SSD(Single Shot MultiBox Detector)是深度学习领域一种新型的目标检测算法。在过去的几次国际比赛中,SSD在速度和准确性方面均取得优异成绩,与其他检测算法一度拉开很大差距。 SSD的算法流程大体可以概括为产生候选区域、框选、判断、过滤几个步骤。其中,产生候选区域、框选和过滤的算法是固定的,而针对给定的候选区域,判断区域中的图像是否是待检测目标,需要使用...
目标检测(十)--SSD
转自:http://blog.csdn.net/u010167269/article/details/52563573 论文:SSD single shot multibox detector 论文链接:https://arxiv.org/abs/1512.02325 Abstract 这篇文章在既保证速度,又要保证精度的情况下,提出了 SSD 物体检测模型,与现在流行的检测模型一样,将...
基于数字图像处理的小目标计数(一)
波点壁纸中圆点的计数 去年年末我学习了天津科技大学杨淑莹老师的《数字图像处理》课程,虽然课程有点老,但是内容还是比较经典的。课程最后有好几个数字图像处理的案例,都是基于Visual C++的,我使用Python实现其中的“细胞个数统计”,并进行了一定的探索。杨老师的视频在哔哩哔哩和MOOC都能获取。 解决思路: 转换色彩空间至HSV 根据H通道进行阈值分割 中值滤波去噪 腐蚀操作去除孤...
利用SSD和自己训练好的模型进行目标检测
本文翻译自:/caffe-ssd/examples/ssd_detect.ipynb 首先怎么安装jupyter以及使用jupyter 安装:sudo pip install jupyter 使用:到/caffe-ssd/examples目录下:输入:jupyter notebook 点击ssd_detect.ipynb,如下图: 利用SSD进行目标检测: 1:加载必要的
SSD目标检测训练自己的数据集:计算数据集当中每一个类别的框的数量
我在看有个同行的博客,发现他把SSD的训练总结的非常好,我用他的训练方法,使用VOC2007数据集进行训练跑通了代码。环境是WINDOWS10+tensorflow-gpu1.9版本。但是这个大兄弟的最终的类别框的计算代码有问题。这里把我写的代码与诸位分享一下。针对的是VOC2007的20分类数据集,最初发现我的输出结果与那个仁兄的训练数据对不上,我仔细检查了areoplane类别的计算结果,发现...
基于数字图像处理的小目标计数(二)
存在接壤现象的细胞计数 因为前面(一)的中的图片每个波点之间间隔较小,这边的细胞图中存在多个目标接壤问题,所以怎样在存在接壤现象的细胞中准确数出个数是这里较前面不同的地方。 解决思路: 进行锐化和平滑滤波操作 根据灰度图进行阈值分割 形态学处理 分水岭算法 修正 如果使用Python,可以选择的图像处理库有 1、工业级的图像处理库:Opencv 2、PIL ...
小目标检测:Feature-Fused SSD
版权声明:转载必须经过本人同意,获得留言同意即可。 原文:https://arxiv.org/ftp/arxiv/papers/1709/1709.05054.pdf Feature-Fused SSD: Fast Detection for Small Objects (ICGIP2017)   Guimei Cao, Xuemei Xie, Wenzhe Yang, Quan Liao...
多目标物体检测ssd源代码
多目标物体检测 ssd 源码,初学目标检测的同学,非常有用
ssd_detect用训练好的模型识别图片中的类
  用shell script语言完成大批量图片检测,并将结果(图片中所包含类别及其坐标)打印在txt文本内保存 用python语言完成单张图片检测,并将结果(图片中所包含类别及其坐标)以图片形式展示 用python语言完成多张图片检测,并将结果(图片中所包含类别及其坐标)以图片形式展示 用python语言完成大批量图片检测,并将结果(图片中所包含类别及其坐标)打印在txt文本内保存 ...
SSD目标检测 原理详解
一 SSD具有如下主要特点: 从YOLO中继承了将detection转化为regression的思路,一次完成目标定位与分类 基于Faster RCNN中的Anchor,提出了相似的Prior box; 加入基于特征金字塔(Pyramidal Feature Hierarchy)的检测方式,即在不同感受野的feature map上预测目标 二 SSD/YOLO区别: YOLO在卷积...
SSD目标检测
目录 作者 文章的选择原因 方法概括 方法细节 相关背景补充 实验结果 与相关文章的对比 总结     作者 文章的选择原因 性能好,single stage 方法概括 文章的方法介绍 SSD主要用来解决目标检测的问题(定位+分类),即输入一张待测图像,输出多个box的位置信息和类别信息 测试时,输入一张
SSD目标检测算法改进:DSOD(不需要预训练的目标检测算法)
论文的题目:DSOD: Learning Deeply Supervised Object Detectors from Scratch 论文下载链接:http://openaccess.thecvf.com/content_ICCV_2017/papers/Shen_DSOD_Learning_Deeply_ICCV_2017_paper.pdf 代码地址:https://github.co
目标检测:SSD
要点: 1. SSD的核心是使用应用于feature map的小卷积滤波器来预测固定的一组默认边界框的类别和框偏移。   将边界框的输出空间离散化为不同宽高比和每个要素图位置的一组默认框。 生成固定大小的边界框集合以及在这些框中存在对象类实例的分数,随后是非最大抑制步骤以产生最终检测 (超过阈值即检测出:允许网络预测多个重叠默认框的高分,而不是要求它只选择具有最大重叠的一个)。   2...
SSD目标检测框架教程--2017.3
SSD目标检测框架教程–2017.3参考文献: 官网: https://github.com/weiliu89/caffe/tree/ssd 博客: http://blog.csdn.net/wizardna521/article/details/53463348 SSD简介SSD是weiliu博士基于caffe,用于实时目标检测的深度学习框架。相比于Faster rcnn, 其在目标检测速度有了
目标检测:SSD的数据增强算法
SSD的数据增强算法 代码地址 https://github.com/weiliu89/caffe/tree/ssd 论文地址 数据增强: SSD数据增强有两种新方法:(1)expand ,左图(2)batch_sampler,右图 expand_param { prob: 0.5 //expand发生的概率 max_expand_ratio: ...
SSD模型--目标检测
配置SSD模型,用于目标检测实验。第一部分:源码下载,编译git clone https://github.com/weiliu89/caffe.git cd caffe git checkout ssd # 或者是 git clone -b ssd https://github.com/weiliu89/caffe.git cd caffe下载的项目文件夹为caffe, 表示为$CAFFE_ROO
搞定目标检测(SSD篇)(下)
搞定目标检测(SSD篇)(上)主要分析了目标检测的基本原理和技术局限,本文将继续上集的未尽事宜,详解如何使用SSD搞定目标检测。先打个预防针,本文的内容会比较烧脑,最好结合代码和论文来理解,而且本文的阅读前提是默认你已经掌握了上集的内容,当然我也会尽量用通俗易懂的语言给你讲清楚。Github: https://github.com/alexshuang/pascal-voc-pytorch。 S...
目标数目识别
首先选择据用苹果的一副图像,对图片中苹果的数目进行统计
目标检测之SSD原理与实现
一、设计理念论文下载:点击打开链接SSD和Yolo一样都是采用一个CNN网络来进行检测,但是却采用了多尺度的特征图,其基本架构下图所示。下面将SSD核心设计理念总结为以下三点:1.采用多尺度特征图用于检测所谓多尺度采用大小不同的特征图,CNN网络一般前面的特征图比较大,后面会逐渐采用stride=2的卷积或者pool来降低特征图大小,这正如图3所示,一个比较大的特征图和一个比较小的特征图,它们都用...
目标检测算法之SSD
码字不易,欢迎给个赞! 欢迎交流与转载,文章会同步发布在公众号:机器学习算法全栈工程师(Jeemy110) 目录 目录 前言 设计理念 网络结构 训练过程 预测过程 性能评估 TensorFlow上的实现 小结 参考文献 前言 目标检测近年来已经取得了很重要的进展,主流的算法主要分为两个类型:(1)two-stage方法,如R-CNN系算法,其主要思路是先通过启...
制作SSD目标检测模型需要的训练数据并训练SSD目标检测模型
1构建 数据集 先来看一下我们构建数据集合应该是什么样的,假设总数据为1000张。  为了方便,我们将数据放在/home/bingolwang/data 文件夹下。/home/bingolwang/data/VOCdevkit 这个目录下是VOC2007 VOC2007/ |-- Annotations #1000个xml文件。 |-- ImageSets | `-- Main ...
opencv3.3中基于ssd算法的目标检测示例教程
环境:Ubuntu16.04 / opencv3.3 #以下命令在终端运行 环境准备: 1:安装依赖项: sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
使用keras实现目标检测之SSD
最近参加了百度某大数据比赛,其中需要用到检测模型。 使用keras实现ssd目标检测,keras实现ssd源码:https://github.com/rykov8/ssd_keras 等忙完了决赛,有时间了回来再写。
Opencv3.3版本以上使用SSD模型实现实时摄像头对象检测
环境: 1、安装opencv3.3以上,因为3.3以上才有dnn模块。目前opencv已经更新到opencv4.0.0-alpha,下面网站对更新日志一目了然: https://github.com/opencv/opencv/wiki/ChangeLog#version400 2、如果是window系统最好安装vs2015或者vs2017,因为vs2013已经不支持vc14,具体怎么搭建环...
基于tensorflow下的多目标检测
【Google开源TensorFlow目标检测API框架】 《Supercharge your Computer Vision models with the TensorFlow Object Detection API | Google Research Blog》by Jonathan Huang https://research.googleblog.com/2017
行人计数,计次系统
前两周左右一个公司让我们写一下demo实现行人计数和某个人计次的功能,到现在为止效果不太好,但是还是有必要记一下我们的思路。 说到行人计数的话,肯定是要有行人检测和行人跟踪两部分的,网上搜了一下,opencv里面有两种检测的方法,一种叫做hog变换,另一种是haar人形检测的方法。后一种方法我没有测试,但是从之前haar方法的人脸检测的效果来看,行人检测的误检率肯定也蛮高的。行人跟踪方面没有找到
TensorFlow+SSD+OpenCV+python完成自训练数据的实时目标检测
介绍:利用tensorflow进行ssd实时目标检测,并实现自己的数据集训练,利用object_detection api具体步骤,并且将模型实现opencv调用,可以实现无tensorflow环境下的模型调用实时检测。本案例只采用了一类目标,可以自行增加! 1 准备图片训练集 图片命名最好是classname+num(图片格式为jpg,如果为png后面会报错) 2利用labelimg...
【深度学习实战04】——SSD tensorflow图像和视频的目标检测
关于SSD的源代码详细讲解,请参考文章:https://blog.csdn.net/c20081052/article/details/80391627  代码详解 本文是实战系列的第四篇,逼自己抽空写篇博客,把之前运行的程序po出来,供需要的人参考。 下载 SSD-Tensorflow-master 解压找到里面notebooks文件夹,本文主要针对这个文件夹下提供的事例做讲解; 主要...
目标检测 yolov3 自定义目标检测 win10+vs2017+gpu加速
yolov3在github上的教程自定义yolov3的主要步骤可以概括为:1、下载darknet-master2、选取正确的cuda9.1和cudnn7.0并下载(nivda官网开发者社区有,不过cudnn7.0的下载界面在维护,百度一下,资源就有)这里我选取的版本为3、安装cuda9.1,除非高手,请务必按照默认路径安装4、将cudnn7.0压缩包解压后的文件复制到cuda9.1安装目录的对应位...
opencv运行SSD目标检测
VS2015+OPENCV3.4.0+SSD进行目标完整检测的工程,包括图片目标检测和相应的加载视频进行目标检测。直接下载编译即可以运行。
目标检测SSD之kitti数据集使用
参考数据格式转换代码
使用深度学习进行目标检测
      在上一篇单目视觉测距中我测试了行人测距算法,其中最主要的一个问题就是传统的HOG+SVM行人检测算法的检测效果不好,存在的问题就是:1. 对人的检测框不够精准,在人站立状态下,头顶和脚底都有很大的空余部分,因为对行人测距我们要得到目标在画面中的像素身高,所以检测框不准确对我们进行单目行人测距有很大的影响,在程序运行过程我们更不可能采用手工标定的方法,所以一种精准的目标检测程序十分重要。...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java 对学生进行组班 区块链计数培训

相似问题