【pytorch-ssd目标检测】可视化检测结果

制作类似pascal voc格式的目标检测数据集:https://www.cnblogs.com/xiximayou/p/12546061.html

训练自己创建的数据集:https://www.cnblogs.com/xiximayou/p/12546556.html

验证自己创建的数据集:https://www.cnblogs.com/xiximayou/p/12550471.html

测试自己创建的数据集:https://www.cnblogs.com/xiximayou/p/12550566.html

还是以在谷歌colab上为例:

cd /content/drive/My Drive/pytorch_ssd

导入相应的包:

import os
import sys
module_path = os.path.abspath(os.path.join(‘..‘))
if module_path not in sys.path:
    sys.path.append(module_path)

import torch
import torch.nn as nn
import torch.backends.cudnn as cudnn
from torch.autograd import Variable
import numpy as np
import cv2
if torch.cuda.is_available():
    torch.set_default_tensor_type(‘torch.cuda.FloatTensor‘)

from ssd import build_ssd

加载谷歌网盘:

from google.colab import drive
drive.mount(‘/content/drive‘)

加载模型:

net = build_ssd(‘test‘, 300, 3)    # initialize SSD
net.load_weights(‘weights/ssd300_MASK_5000.pth‘)

可视化要检测的图像:

# image = cv2.imread(‘./data/example.jpg‘, cv2.IMREAD_COLOR)  # uncomment if dataset not downloaded
%matplotlib inline
from matplotlib import pyplot as plt
from data import MASKDetection, MASK_ROOT, MASKAnnotationTransform
# here we specify year (07 or 12) and dataset (‘test‘, ‘val‘, ‘train‘)
mask_root="/content/drive/My Drive/pytorch_ssd"
testset = MASKDetection(mask_root, "val", None, MASKAnnotationTransform())
img_id = 2
image = testset.pull_image(img_id)
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# View the sampled input image before transform
plt.figure(figsize=(10,10))
plt.imshow(rgb_image)
plt.show()

调整图片的格式:

x = cv2.resize(image, (300, 300)).astype(np.float32)
x -= (104.0, 117.0, 123.0)
x = x.astype(np.float32)
x = x[:, :, ::-1].copy()
plt.imshow(x)
x = torch.from_numpy(x).permute(2, 0, 1)

使用模型进行预测:

xx = Variable(x.unsqueeze(0))     # wrap tensor in Variable
if torch.cuda.is_available():
    xx = xx.cuda()
y = net(xx)

输出结果:

from data import MASK_CLASSES as labels
top_k=3

plt.figure(figsize=(10,10))
colors = plt.cm.hsv(np.linspace(0, 1, 3)).tolist()
plt.imshow(rgb_image)  # plot the image for matplotlib
currentAxis = plt.gca()

detections = y.data
# scale each detection back up to the image
scale = torch.Tensor(rgb_image.shape[1::-1]).repeat(2)
for i in range(detections.size(1)):
    j = 0
    while detections[0,i,j,0] >= 0.6:
        score = detections[0,i,j,0]
        label_name = labels[i-1]
        display_txt = ‘%s: %.2f‘%(label_name, score)
        pt = (detections[0,i,j,1:]*scale).cpu().numpy()
        coords = (pt[0], pt[1]), pt[2]-pt[0]+1, pt[3]-pt[1]+1
        color = colors[i]
        currentAxis.add_patch(plt.Rectangle(*coords, fill=False, edgecolor=color, linewidth=2))
        currentAxis.text(pt[0], pt[1], display_txt, bbox={‘facecolor‘:color, ‘alpha‘:0.5})
        j+=1

由于我的数据集中很少没有戴口罩的样本,因此没有戴口罩的AP较低。

至此,使用pytorch-ssd训练测试自己数据集就全部完成啦。

原文地址:https://www.cnblogs.com/xiximayou/p/12552854.html

时间: 2024-11-05 18:49:55

【pytorch-ssd目标检测】可视化检测结果的相关文章

从零开始实现SSD目标检测(pytorch)(一)

目录 从零开始实现SSD目标检测(pytorch) 第一章 相关概念概述 1.1 检测框表示 1.2 交并比 第二章 基础网络 第三章 先验框设计 第四章 LOSS设计 从零开始实现SSD目标检测(pytorch) 特别说明: 本系列文章是Pytorch目标检测手册的翻译+总结 知其然知其所以然,光看论文不够,得亲自实现 第一章 相关概念概述 1.1 检测框表示 边界宽(bounding box)是包围一个物体(objective)的框,用来表示这个物体的位置.形状.大小等信息.不是最小外接矩形

pytorch COCO2017 目标检测 (一)DataLoader

pytorch coco 目标检测 DataLoader实现 pytorch实现目标检测目标检测算法首先要实现数据的读入,即实现Dataset和DataLoader两个类. 借助pycocotools实现了CoCo2017用于目标检测数据的读取,并使用cv2显示. 分析 使用cv2显示读入数据,或者要送入到网络的数据应该有三个部分 图像,Nx3xHeight x Width BBs,NxMx4 类型,NxMx1 因此,可以将BBs和类型组成一个.Pytorch默认的数据类型是batchsize

R-CNN,SPP-NET, Fast-R-CNN,Faster-R-CNN, YOLO, SSD系列深度学习检测方法梳理

1. R-CNN:Rich feature hierarchies for accurate object detection and semantic segmentation 技术路线:selective search + CNN + SVMs Step1:候选框提取(selective search) 训练:给定一张图片,利用seletive search方法从中提取出2000个候选框.由于候选框大小不一,考虑到后续CNN要求输入的图片大小统一,将2000个候选框全部resize到227*

目标跟踪与检测技术介绍

基于有限集统计学理论的目标跟踪技术研究综述杨威,付耀文,龙建乾,... - <电子学报> - 2012 - 被引量: 31有限集统计学理论为杂波背景下的目标跟踪问题提供了一种工程友好的理论工具.对近年来基于有限集统计学理论的目标跟踪技术研究现状进行了综述,包括最优多目标贝叶斯滤波器及其近似技术.参数未知与机动多目标跟踪技术.航迹生成方法.单目标联合检测与跟踪滤波器及基于有限集观测的单目标滤波器等,对相关应用亦有所介绍.最后在已有研究发展的基础上,着眼于提高目标跟踪精度和增强目标跟踪鲁棒性的发展

堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出

 报错:0x000CC3C9 处有未经处理的异常(在 image_opencv2.exe 中):  堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出. 主要检查代码中有没有对数组的越界操作,就解决了这个bug. 其它的相关知识查后再补充.

金笛检测工具检测到at标识是ok,未读卡,无信号

金笛检测工具检测到at标识是ok,SIM卡显示未读卡,信号强度显示无信号,可能原因及解决办法如下: 现象如下图: 可能原因: 1.放置错误SIM卡. 比如CDMA的短信猫,放置的sim卡是否是电信SIM卡:GSM的短信猫,放置的是否是移动或者联通的SIM卡. 单口短信猫GSM网(支持移动.联通卡)的有三款:M100.MG35.M1206B,MG301:单口短信猫CDMA网(支持电信卡)的有:MC323:2.未放SIM卡 解决方法:放入正确的SIM卡确保SIM卡放置正确后,如果还存在上述问题,请把

使用SSD目标检测c++接口编译问题解决记录

本来SSD做测试的Python接口用起来也是比较方便的,但是如果部署集成的话,肯定要用c++环境,于是动手鼓捣了一下. 编译用的cmake,写的CMakeList.txt,期间碰到一些小问题,简单记录一下问题以及解决方法. 当然前提是你本地的caffe环境没啥问题.各种依赖都安好了.. 1.error: 'AnnotatedDatum' has not been declared    AnnotatedDatum* anno_datum); /home/jiawenhao/ssd/caffe/

TF项目实战(基于SSD目标检测)——人脸检测2

数据转化为VOC格式: 一.我们先看 VOC格式的数据是什么??? Annotations:存放xml 包括 文件夹信息   图片名称. 图片尺寸信息. 图片中object的信息. JPEGImages: 存放图片 二.分析Wider FACE数据集: 数据集中的txt中信息为:第一行: 图片路径第二行:多少个人脸第三行:bbox信息 存储的左上角 坐标 和 高度宽度 三.代码转换: 1 import os,cv2,sys,shutil 2 3 from xml.dom.minidom impo

目标检测 — one-stage检测之YOLO

目前主流的目标检测算法主要是基于深度学习模型,其可以分成两大类:two-stage检测算法:one-stage检测算法.本文主要介绍第二类检测算法. 目标检测模型的主要性能指标是检测准确度和速度,对于准确度,目标检测要考虑物体的定位准确性,而不单单是分类准确度.一般情况下,two-stage算法在准确度上有优势,而one-stage算法在速度上有优势.不过,随着研究的发展,两类算法都在两个方面做改进. one-stage检测算法,其不需要region proposal阶段,直接产生物体的类别概率