faster rcnn图片测试

直接调用pytorch中的faster rcnn

会调用到下面的库

from PIL import Image
from torchvision.transforms import transforms as T
import cv2
from matplotlib import pyplot as plt
from torchvision.models.detection.faster_rcnn import fasterrcnn_resnet50_fpn

分类的类别

COCO_INSTANCE_CATEGORY_NAMES = [
    '__background__', 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus',
    'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'N/A', 'stop sign',
    'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
    'elephant', 'bear', 'zebra', 'giraffe', 'N/A', 'backpack', 'umbrella', 'N/A', 'N/A',
    'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball',
    'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket',
    'bottle', 'N/A', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl',
    'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza',
    'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'N/A', 'dining table',
    'N/A', 'N/A', 'toilet', 'N/A', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
    'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'N/A', 'book',
    'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush'
]

读入图片,让图片通过模型,得到class,boxes和score

def get_prediction(img_path, threshold):
    img = Image.open(img_path)
    transform = T.Compose([T.ToTensor()])
    img = transform(img)
    pred = model([img])
    pred_class = [COCO_INSTANCE_CATEGORY_NAMES[i] for i in list(pred[0]['labels'].numpy())]
    pred_boxes = [[(i[0],i[1]), (i[2],i[3])] for i in list(pred[0]['boxes'].detach().numpy())]
    pred_score = list(pred[0]['scores'].detach().numpy())
    pred_t = [pred_score.index(x) for x in pred_score if x > threshold][-1]
    pred_boxes = pred_boxes[:pred_t+1]
    pred_class = pred_class[:pred_t+1]
    return pred_boxes, pred_class

把结果的目标框画出来

def object_detection(img_path, threshold=0.5, rect_th=3, text_size=3, text_th=3):
    boxes, pred_cls = get_prediction(img_path, threshold)
    img = cv2.imread(img_path)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    for i in range(len(boxes)):

        cv2.rectangle(img, boxes[i][0], boxes[i][1], color=(0, 255, 0), thickness=rect_th)
        cv2.putText(img, pred_cls[i], boxes[i][0], cv2.FONT_HERSHEY_SIMPLEX, text_size, (0,255,0), thickness=text_th)
        plt.figure(figsize=(20, 30))
        #cv2.imshow('img', img)
        #cv2.waitKey(0)
        #
        plt.imshow(img)
        plt.xticks([])
        plt.yticks([])
        plt.show()

PennPed数据集中的一张图片做测试

测试图片是这样的
在这里插入图片描述

if __name__ == '__main__':
    model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)
    model.eval()
   
    object_detection('your folder/PennPed00096.png', threshold=0.8)

测试结果,整体效果不错
在这里插入图片描述

参考资料

### 测试 Faster R-CNN 1.0 模型 为了有效地测试 Faster R-CNN 1.0 模型,需遵循特定的准备和执行步骤。这些过程涉及环境配置、数据集准备以及具体的测试命令。 #### 准备工作 确保安装了必要的依赖项和支持库,如 Python 和 PyTorch 环境。对于 C++ 实现,则需要相应的编译工具链和高效的矩阵运算库[^3]。此外,还需下载预训练好的 Faster R-CNN 权重文件用于初始化网络参数。 #### 数据集设置 准备好待测图片及其对应的标注信息(如果有的话)。通常情况下,会采用 COCO 或 Pascal VOC 这样的标准数据集来进行评估。将图像路径列表整理成适合输入模型的形式,并定义好类别标签映射关系。 #### 执行测试脚本 编写或获取一段可以加载已保存权重并对新样本做出推断的代码。下面是一个简单的 Python 版本的例子: ```python import torch from torchvision import models, transforms from PIL import Image import matplotlib.pyplot as plt import numpy as np def load_model(weights_path='faster_rcnn_weights.pth'): model = models.detection.fasterrcnn_resnet50_fpn(pretrained=False) checkpoint = torch.load(weights_path,map_location=torch.device('cpu')) model.load_state_dict(checkpoint['model']) model.eval() return model transform = transforms.Compose([ transforms.ToTensor(), ]) image = Image.open("test_image.jpg").convert("RGB") # 替换成自己的测试图片路径 input_tensor = transform(image).unsqueeze(0) with torch.no_grad(): predictions = load_model()(input_tensor)[0] boxes = predictions["boxes"].numpy().astype(int) labels = predictions["labels"].numpy() for box,label in zip(boxes, labels): xmin, ymin, xmax, ymax = box rect = plt.Rectangle((xmin,ymin),xmax-xmin,ymax-ymin, fill=False,color="red",linewidth=2) ax = plt.gca() ax.add_patch(rect) plt.text(xmin, ymin, f'Label {label}', color='white', verticalalignment='top', bbox={'color': 'red', 'pad': 0}) plt.imshow(np.array(image)) plt.show() ``` 这段程序展示了如何加载一个预先训练过的 Faster R-CNN 模型并对其进行推理操作,最后可视化检测到的目标边界框及分类结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值