本文将引导快速使用 Detectron2 ,介绍用摄像头测试实时目标检测。
Detectron2:github.com/facebookres…
环境准备
基础环境
Ubuntu 18.04
系统安装,可见制作 USB 启动盘,及系统安装
Nvidia Driver
驱动安装,可见Ubuntu 初始配置 - Nvidia 驱动
Anaconda Python
从这里下载Linux 版本,并安装
Detectron2
安装,
# 创建 Python 虚拟环境conda create -n detectron2 python=3.8 -yconda activate detectron2# 安装 PyTorch with CUDAconda install pytorch==1.7.1 torchvision==0.8.2 cudatoolkit=10.2 -c pytorch -y# 安装 Detectron2gitclonehttps://github.com/facebookresearch/detectron2.gitpython -m pip install -e detectron2# 安装 OpenCV ,捕获相机图像及显示pip install opencv-python复制代码
检查,
$ python - <
import torch, torchvision
print(torch.__version__, torch.cuda.is_available())
import cv2 as cv
print(cv.__version__)
EOF1.7.1 True4.5.1复制代码
现有模型进行推断
从其model zoo选择一个感兴趣的模型进行推断。这里以COCOR50-FPN3x训练的各类模型进行演示。
下载model进如下路径,
detectron2/models/├── COCO-Detection│ └── faster_rcnn_R_50_FPN_3x│ └── 137849458│ ├── metrics.json│ └── model_final_280758.pkl├── COCO-InstanceSegmentation│ └── mask_rcnn_R_50_FPN_3x│ └── 137849600│ ├── metrics.json│ └── model_final_f10217.pkl├── COCO-Keypoints│ └── keypoint_rcnn_R_50_FPN_3x│ └── 137849621│ ├── metrics.json│ └── model_final_a6e10b.pkl└── COCO-PanopticSegmentation └── panoptic_fpn_R_50_3x └── 139514569 ├── metrics.json └── model_final_c10459.pkl复制代码
目标检测 - Faster R-CNN
执行,
cddetectron2/mkdir -p _outputpython demo/demo.py \--config-file configs/COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml \--input ../data/bicycle.jpg \--output _output/bicycle_COCO-Detection.jpg \--confidence-threshold 0.5 \--opts MODEL.WEIGHTS models/COCO-Detection/faster_rcnn_R_50_FPN_3x/137849458/model_final_280758.pkl复制代码
结果,
实例分割 - Mask R-CNN
执行,
python demo/demo.py \--config-file configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml \--input ../data/bicycle.jpg \--output _output/bicycle_COCO-InstanceSegmentation.jpg \--confidence-threshold 0.5 \--opts MODEL.WEIGHTS models/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl复制代码
结果,
姿态估计 - Keypoint R-CNN
执行,
python demo/demo.py \--config-file configs/COCO-Keypoints/keypoint_rcnn_R_50_FPN_3x.yaml \--input ../data/bicycle.jpg \--output _output/bicycle_COCO-Keypoints.jpg \--confidence-threshold 0.5 \--opts MODEL.WEIGHTS models/COCO-Keypoints/keypoint_rcnn_R_50_FPN_3x/137849621/model_final_a6e10b.pkl复制代码
结果,
全景分割 - Panoptic FPN
执行,
python demo/demo.py \--config-file configs/COCO-PanopticSegmentation/panoptic_fpn_R_50_3x.yaml \--input ../data/bicycle.jpg \--output _output/bicycle_COCO-PanopticSegmentation.jpg \--confidence-threshold 0.5 \--opts MODEL.WEIGHTS models/COCO-PanopticSegmentation/panoptic_fpn_R_50_3x/139514569/model_final_c10459.pkl复制代码
结果,
WebCam 摄像头使用
获取本机的 WebCam 列表,
$ ls /dev/video*/dev/video0 /dev/video1 /dev/video2 /dev/video3# 查看 WebCam 列表# 如下:有 0, 2 两个 videos# - 第一个是 video ,第二个是 metadata# - 从 Linux Kernel 4.16 开始,增加的 metadata node$ sudo apt install v4l-utils$ v4l2-ctl --list-devicesHD Webcam: HD Webcam (usb-0000:00:14.0-13):/dev/video0/dev/video1HD Pro Webcam C920 (usb-0000:00:14.0-4):/dev/video2/dev/video3# 查看某 WebCam 支持的格式、分辨率、fps 信息$ v4l2-ctl -d 2 --list-formats-ext复制代码
demo/demo.py可修改期望打开的摄像头及其分辨率等,
elifargs.webcam: cam = cv2.VideoCapture(2) cam.set(cv2.CAP_PROP_FRAME_WIDTH,640) cam.set(cv2.CAP_PROP_FRAME_HEIGHT,480) cam.set(cv2.CAP_PROP_FPS,30) print(f"wencam:{cam.get(cv2.CAP_PROP_FRAME_WIDTH)}x{cam.get(cv2.CAP_PROP_FRAME_HEIGHT)}{cam.get(cv2.CAP_PROP_FPS)}")复制代码
运行,
python demo/demo.py \--config-file configs/COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml \--webcam \--confidence-threshold 0.5 \--opts MODEL.WEIGHTS models/COCO-Detection/faster_rcnn_R_50_FPN_3x/137849458/model_final_280758.pkl复制代码
效果,