探索 Python 库:使用 Detectron2 进行对象检测的入门指南
介绍
物体检测是计算机视觉的一个子领域,用于从数字图像和视频中识别语义物体的实例。通常,通过在其周围绘制一个边界框来检测和识别已识别的物体。在图像中,这是一个静态框,但在视频中,这个框处于运动状态,跟随活动物体。
物体检测技术有多种应用,例如人脸检测、人数统计、光学字符识别 (OCR) 以及故障和缺陷检测等。这是一个令人兴奋的研究和应用领域,大型科技公司正在投资和构建工具来执行物体检测。这些公司包括 Google 的TensorFlow 物体检测 API、Facebook 的Detectron、Amazon AWS 的Sagemaker以及 ImageAI 的物体检测。
在本指南中,您将了解使用Facebook 的Detectron2 的对象检测示例。
假设您是一名软件开发人员,希望为一家安保公司开发人脸/人物检测应用程序的概念验证 (PoC)。客户要求开发一个由简单程序组成的 PoC,该程序可以在给定图像的情况下在人脸/人物周围绘制边界框(如果存在)。
为了开发这个,您选择使用 Detectron2。
探测器 2
Detectron2 是基于 Caffe2 构建的基于Pytorch的模块化对象检测软件,是上一个库的后继者。与上一个库相比,Detectron2 有所改进,尤其是在训练时间方面,Detectron2 的速度要快得多。它还发现了新功能,例如级联 R-CNN、全景分割和 DensePose 等。
本指南假设您对计算机视觉、对象检测有基本的了解,并且至少具备使用 Pytorch 进行深度学习的中级知识。
设置
主要有三种设置方式。
1. 使用 Docker:按照这些说明在 Docker 容器中运行 Detectron2。此方法要求您熟悉 Docker。
2. 从源代码构建:要使用此方法,请运行下面的代码块。需要注意的是,所需的GCC和G++版本>=5。
python -m pip install 'git+https://github.com/facebookresearch/detectron2.git'
python -m pip install -e detectron2
3. 仅适用于 Linux 的预构建版本:在Detectron2 文档中了解有关此方法的更多信息。
使用预先训练的模型
预训练模型适合快速演示,可以从model zoo等在线资源下载。要运行对象检测,请使用您选择的任何图像并使用opencv读取它。请参阅下面的代码。
import detectron2
import numpy as np
import os, cv2
from detectron2 import model_zoo
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
im = cv2.imread("./input.jpg")
cv2.imshow(im)
在此之后,您将创建一个 Detectron2 配置(配置变量)和一个预测器,以对刚刚加载的图像运行推理(执行对象检测)。
cfg = get_cfg()
# load a weights file from online resources such as model zoo
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")
predictor = DefaultPredictor(cfg)
outputs = predictor(im)
此时,输出变量中已发生推理。要检查已识别对象的数量和预测对象的类别,请运行以下代码。
print(outputs["instances"].pred_classes)
print(len(outputs["instances"].pred_classes))
为了可视化您的结果,您将需要 Detectron2 的一个特殊实用程序Visualizer。
from detectron2.utils.visualizer import Visualizer
from detectron2.data import MetadataCatalog, DatasetCatalog
viualizer = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
img_output = visualizer.draw_instance_predictions(outputs["instances"].to("cpu"))
cv2.imshow(img_output.get_image()[:, :, ::-1])
结果将是之前加载的图像,但识别的对象周围有边界框,框上有预测的类名。以下是 Detectron2 团队创建的示例输出:
结论
在本指南中,您了解了 Facebook 的 Detectron2 的基本用法。凭借这项技能,主要在计算机视觉领域有几种令人兴奋的工作岗位。涉及物体检测的职位包括计算机视觉工程师、计算机视觉研究人员和图像处理工程师。
为了进一步巩固本指南中学到的技能,挑战自己开发一个可以检测任何事物的自定义对象检测模型。为了使其更具挑战性,请从头开始收集数据集。例如,您可能决定收集有关狗的图像数据并构建一个可以识别图像中的狗并在它们周围绘制边界框的对象检测器。为了帮助您入门,请考虑此 google Colab教程。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~