当前位置:主页 > 聚焦 >

详解使用PyTorch实现目标检测与跟踪

时间:2020-12-14 08:01:21

  python教程栏目介绍使用PyTorch实现目标检测与跟踪

 

  大量免费学习,敬请访问python教程(视频)

  

引言
 

  

在昨天的文章中,我们介绍了如何在PyTorch中使用您自己的图像来训练图像分类器,然后使用它来进行图像识别。本文将展示如何使用预训练的分类器检测图像中的多个对象,并在视频中跟踪它们。

  

图像中的目标检测

  

目标检测的算法有很多,YOLO跟SSD是现下最流行的算法。在本文中,我们将使用YOLOv3。在这里我们不会详细讨论YOLO,如果想对它有更多了解,可以参考下面的链接哦~()

  

下面让我们开始吧,依然从导入模块开始:

  from models import * from utils import * import os, sys, time, datetime, random import torch from torch.utils.data import DataLoader from torchvision import datasets, transforms from torch.autograd import Variable import matplotlib.pyplot as plt import matplotlib.patches as patches from PIL import Image

然后加载预训练的配置和权重,以及一些预定义的值,包括:图像的尺寸、置信度阈值和非最大抑制阈值。

  

下面的函数将返回对指定图像的检测结果。

  

最后,让我们通过加载一个图像,获取检测结果,然后用检测到的对象周围的包围框来显示它。并为不同的类使用不同的颜色来区分。

  # load image and get detections img_path = "images/blueangels.jpg" prev_time = time.time() img = Image.open(img_path) detections = detect_image(img) inference_time = datetime.timedelta(seconds=time.time() - prev_time) print ('Inference Time: %s' % (inference_time)) # Get bounding-box colors cmap = plt.get_cmap('tab20b') colors = [cmap(i) for i in np.linspace(0, 1, 20)] img = np.array(img) plt.figure() fig, ax = plt.subplots(1, figsize=(12,9)) ax.imshow(img) pad_x = max(img.shape[0] - img.shape[1], 0) * (img_size / max(img.shape)) pad_y = max(img.shape[1] - img.shape[0], 0) * (img_size / max(img.shape)) unpad_h = img_size - pad_y unpad_w = img_size - pad_x if detections is not None: unique_labels = detections[:, -1].cpu().unique() n_cls_preds = len(unique_labels) bbox_colors = random.sample(colors, n_cls_preds) # browse detections and draw bounding boxes for x1, y1, x2, y2, conf, cls_conf, cls_pred in detections: box_h = ((y2 - y1) / unpad_h) * img.shape[0] box_w = ((x2 - x1) / unpad_w) * img.shape[1] y1 = ((y1 - pad_y // 2) / unpad_h) * img.shape[0] x1 = ((x1 - pad_x // 2) / unpad_w) * img.shape[1] color = bbox_colors[int(np.where( unique_labels == int(cls_pred))[0])] bbox = patches.Rectangle((x1, y1), box_w, box_h, linewidth=2, edgecolor=color, facecolor='none') ax.add_patch(bbox) plt.text(x1, y1, s=classes[int(cls_pred)], color='white', verticalalignment='top', bbox={'color': color, 'pad': 0}) plt.axis('off') # save image plt.savefig(img_path.replace(".jpg", "-det.jpg"), bbox_inches='tight', pad_inches=0.0) plt.show()

下面是我们的一些检测结果:

  

 

  

 

  

 

  

视频中的目标跟踪

  

现在你知道了如何在图像中检测不同的物体。当你在一个视频中一帧一帧地看时,你会看到那些跟踪框在移动。但是如果这些视频帧中有多个对象,你如何知道一个帧中的对象是否与前一个帧中的对象相同?这被称为目标跟踪,它使用多次检测来识别一个特定的对象。

  

有多种算法可以做到这一点,在本文中决定使用SORT(Simple Online and Realtime Tracking),它使用Kalman滤波器预测先前识别的目标的轨迹,并将其与新的检测结果进行匹配,非常方便且速度很快。

  

现在开始编写代码,前3个代码段将与单幅图像检测中的代码段相同,因为它们处理的是在单帧上获得 YOLO 检测。差异在最后一部分出现,对于每个检测,我们调用 Sort 对象的 Update 函数,以获得对图像中对象的引用。因此,与前面示例中的常规检测(包括边界框的坐标和类预测)不同,我们将获得跟踪的对象,除了上面的参数,还包括一个对象 ID。并且需要使用OpenCV来读取视频并显示视频帧。

  相关免费学习:php编程
 

热点推荐
1 美国至4月24日EIA原油库存减少623.4万桶

消息,美国至4月24日当周EIA原油库存减少623.4万桶,预期减少23.1万桶,前值为增加192.5万桶。...

2 laevitas:ETH隐含波动率持续下降至1月中旬

消息,吴说获悉,laevitas发推表示,ETH隐含波动率在整个期限结构上持续下降,其中1周期限已...

3 Blockworks完成1.92亿美元A轮扩展融资

Blockworks宣布完成A轮扩展融资,投后估值达1.92亿美元。本轮融资由Parafi Capital与Reciprocal Ventur...

4 Zetachain遭遇33.4万美元加密攻击,漏洞源于

消息,Zetachain最近遭遇了一起协调攻击,导致约33.4万美元的损失,攻击目标为其在以太坊、...

5 Willy Woo:比特币需保持在关键价格水平以

消息,据分析师Willy Woo表示,比特币必须在关键价格水平上保持稳定,以增加形成主要底部的...

6 KuCoin Alpha新上线代币— chudhouse MYSTERY

消息,KuCoin宣布其Alpha平台新增两个新兴项目,分别为chudhouse和MYSTERY,目前已在KuCoin Alpha上线...

7 摩根士丹利:为美股回调做好准备,恐慌

消息,摩根士丹利投资管理公司高级投资组合经理安德鲁斯利蒙表示,投资者应为美国股市回...

8 ClawHub上30个插件让你的AI助手偷偷给陌生

消息,AI安全公司Manifold研究负责人Ax Sharma发现,ClawHub上一个名为imaflytok的账号发布了30个插件...

9 欧盟出台临时措施,助力企业应对能源涨

消息,欧盟周三表示,将采取临时措施,以缓冲中东冲突导致能源价格大幅上涨对企业造成的...

10 Pumpfun:回购后销毁3.7亿美元代币,减少流

消息,Pumpfun在回应代币回购策略的质疑后,决定销毁所有之前回购的Pump代币,约合3.7亿美元,...

成都来彰科技 蜀ICP备2025134723号-1

资讯来源互联网,如有版权问题请联系管理员删除。