基于Faster R-CNN实现目标检测

这篇具有很好参考价值的文章主要介绍了基于Faster R-CNN实现目标检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 作者介绍

杨金鹏,男,西安工程大学电子信息学院,2022级研究生
研究方向:机器视觉与人工智能
电子邮件:1394026082@qq.com

路治东,男,西安工程大学电子信息学院,2022级研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:2063079527@qq.com

2. Faster RCNN基本框架

基于Faster R-CNN实现目标检测
Faster RCNN检测部分主要可以分为四个模块:
(1)conv layers。即特征提取网络,用于提取特征。通过一组conv+relu+pooling层来提取图像的feature maps,用于后续的RPN层和取proposal。
(2)RPN(Region Proposal Network)。即区域候选网络,该网络替代了之前RCNN版本的Selective Search,用于生成候选框。这里任务有两部分,一个是分类:判断所有预设anchor是属于positive还是negative(即anchor内是否有目标,二分类);还有一个bounding box regression:修正anchors得到较为准确的proposals。因此,RPN网络相当于提前做了一部分检测,即判断是否有目标(具体什么类别这里不判),以及修正anchor使框的更准一些。
(3)RoI Pooling。即兴趣域池化(SPP net中的空间金字塔池化),用于收集RPN生成的proposals(每个框的坐标),并从(1)中的feature maps中提取出来(从对应位置扣出来),生成proposals feature maps送入后续全连接层继续做分类(具体是哪一类别)和回归。
(4)Classification and Regression。利用proposals feature maps计算出具体类别,同时再做一次bounding box regression获得检测框最终的精确位置。
基于Faster R-CNN实现目标检测

3.模型训练及测试

3.1 数据集

训练前需要制作数据集,进行数据准备。采用收线送线装置实时采集图片,图像大小为1536*1280,然后进行标注,最后送进网络进行训练。为模拟检测的现场效果,划分了纱线中常见的四种常见缺陷:毛圈、毛团、分叉以及毛瑕,并通过标注软件对数据集进行了标注。标注文件放在VOC2007/ Annotations,图像文件放在VOC2007/JPEGImages目录下,生成ImageSet\Main里的四个txt文件,分别是:trainval.txt(训练和验证集总和)、train.txt(训练集)、val.txt(验证集)、test.txt(测试集),训练集/验证集/测试集比例为6:2:2。
基于Faster R-CNN实现目标检测

3.2 环境配置

基于Faster R-CNN实现目标检测
基于Faster R-CNN实现目标检测

3.3 训练参数

(1)修改lib/datasets/pascal_voc.py,将类别改成自己的类别。这里有一个注意点就是,这里的类别以及之前的类别名称最好是全部小写,假如是大写的话,则会报keyError的错误
基于Faster R-CNN实现目标检测
(2)根据实际需求及硬件情况设置代码中的相关参数,需要修改–num-classes、–data-path和–weights-path 等参数,训练过程如图所示。
基于Faster R-CNN实现目标检测
基于Faster R-CNN实现目标检测
如图所示为预测结果
基于Faster R-CNN实现目标检测
基于Faster R-CNN实现目标检测

3.4 训练参数

PicoDet测试
如图所示为训练过程及预测结果
基于Faster R-CNN实现目标检测
基于Faster R-CNN实现目标检测
YOLOv3测试
如图所示为训练过程及预测结果
基于Faster R-CNN实现目标检测
基于Faster R-CNN实现目标检测

3.5 代码展示

import os
import time
import torch
import torchvision.transforms as transforms
import torchvision
from PIL import Image
from matplotlib import pyplot as plt

# 获取当前路径
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")


# classes_coco类别信息
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'
]


if __name__ == "__main__":

    # 检测图片路径
    path_img = os.path.join(BASE_DIR, "xxxx.jpg")

    # 预处理
    preprocess = transforms.Compose([
        transforms.ToTensor(),
    ])

    input_image = Image.open(path_img).convert("RGB")
    img_chw = preprocess(input_image)

    # 加载预训练模型
    model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)
    model.eval()

    # if torch.cuda.is_available():
    #     img_chw = img_chw.to('cuda')
    #     model.to('cuda')

    # 前向传播
    input_list = [img_chw]
    with torch.no_grad():
        tic = time.time()
        print("input img tensor shape:{}".format(input_list[0].shape))
        output_list = model(input_list)
        output_dict = output_list[0]
        print("pass: {:.3f}s".format(time.time() - tic))
        # 打印输出信息
        for k, v in output_dict.items():
            print("key:{}, value:{}".format(k, v))

    # 取得相应结果
    out_boxes = output_dict["boxes"].cpu()
    out_scores = output_dict["scores"].cpu()
    out_labels = output_dict["labels"].cpu()

    # 可视化
    fig, ax = plt.subplots(figsize=(12, 12))
    ax.imshow(input_image, aspect='equal')

    num_boxes = out_boxes.shape[0]
    max_vis = 400
    thres = 0.6

    # 循环描框
    for idx in range(0, min(num_boxes, max_vis)):
        score = out_scores[idx].numpy()
        bbox = out_boxes[idx].numpy()
        class_name = COCO_INSTANCE_CATEGORY_NAMES[out_labels[idx]]

        if score < thres:
            continue

        ax.add_patch(plt.Rectangle((bbox[0], bbox[1]), bbox[2] - bbox[0], bbox[3] - bbox[1], fill=False,
                                   edgecolor='red', linewidth=3.5))
        ax.text(bbox[0], bbox[1] - 2, '{:s} {:.3f}'.format(class_name, score), bbox=dict(facecolor='blue', alpha=0.5),
                fontsize=14, color='white')
        ax.set_title("test_result", fontsize=28, color='blue')
    plt.show()
    plt.savefig("test_result.png")
    plt.close()

3.6 问题及分析

训练参数调试及环境配置
在训练前要注意将所需的环境配置好,同时所调用的库版本是否符合要求,各个库之间有时也需要版本一一对应。在训练时参数的调试非常重要,对模型的检测效果有着非常重要的影响,要多去尝试多做实验探究不同参数对模型的影响。
准备数据集
在数据集采集过程中要注意尽可能避免外界干扰,同时注意打光方式以及亮度等等,确保能够把待检测的物体和缺陷采集清晰。虽然数据集在整个项目中看起来不太重要,但是数据集采集的是否清晰,标注的是否正确等都会对检测结果造成很大的影响。

参考(可供参考的链接和引用文献)

1.链接: [http://t.csdn.cn/JrWZ1]
2.链接: [http://t.csdn.cn/TjQov]文章来源地址https://www.toymoban.com/news/detail-466733.html

到了这里,关于基于Faster R-CNN实现目标检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 目标检测经典工作发展(超详细对比):R-CNN vs SPPNet vs Fast R-CNN vs Faster R-CNN

    网上关于两阶段目标检测(two-stage object detection)的几个经典工作R-CNN,SPPNet,Fast R-CNN,Faster R-CNN的发展,各自的优缺点缺乏一个比较清楚的描述,大部分文章讲的比较细节,虽然有助于更为详细地了解文章,但是让读者在短时间内对各个文章有一个详细的理解。本文主要对

    2024年02月09日
    浏览(63)
  • 从R-CNN到Faster-RCNN再到YOLOV5,目标检测网络发展概述

     R-CNN由Ross Girshick于2014年提出,R-CNN首先通过 选择性搜索算法Selective Search 从一组对象候选框中选择可能出现的对象框,然后将这些选择出来的对象框中的图像resize到某一固定尺寸的图像,并喂入到 CNN模型 (经过在ImageNet数据集上训练过的CNN模型,如AlexNet)提取特征,最后将

    2024年02月05日
    浏览(63)
  • 计算机视觉的应用4-目标检测任务:利用Faster R-cnn+Resnet50+FPN模型对目标进行预测

    大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用4-目标检测任务,利用Faster Rcnn+Resnet50+FPN模型对目标进行预测,目标检测是计算机视觉三大任务中应用较为广泛的,Faster R-CNN 是一个著名的目标检测网络,其主要分为两个模块:Region Proposal Network (RPN) 和 Fast R-CNN。我

    2024年02月05日
    浏览(55)
  • 目标检测算法(R-CNN,fast R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3,yoloV4,yoloV5,yoloV6,yoloV7)

    深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理。 目标检测可以理解为是物体识别和物体定位的综合 ,不仅仅要识别出物体属于哪个分类,更重要的是得到物体在图片中的具体位置。 为了完成这两个任务,目标检测模型分

    2024年02月02日
    浏览(49)
  • Voxel R-CNN:基于体素的高性能 3D 目标检测

    论文地址:https://arxiv.org/abs/2012.15712 论文代码:https://github.com/djiajunustc/Voxel-R-CNN 基于点的方法具有较高的检测精度,但基于点的方法通常效率较低,因为对于点集抽象来说,使用点表示来搜索最近邻的代价更高。 相比于基于点,更高效,基于体素的结构更适合于特征提取,

    2024年02月09日
    浏览(45)
  • [论文阅读]Voxel R-CNN——迈向高性能基于体素的3D目标检测

    Voxel R-CNN: Towards High Performance Voxel-based 3D Object Detection 迈向高性能基于体素的3D目标检测 论文网址:Voxel R-CNN 论文代码:Voxel R-CNN 该论文提出了 Voxel R-CNN,这是一种基于体素的高性能 3D 对象检测框架。作者认为,原始点的精确定位对于准确的目标检测并不重要,粗体素粒度可

    2024年02月07日
    浏览(45)
  • 保姆级 Keras 实现 Faster R-CNN 十一

    上一篇 文章中我们实现了 ProposalLayer 层, 它将的功能是输出建议区域矩形. 本文要实现另一个自定义层 RoiPoolingLayer. 在 Faster R-CNN 中, RoiPooling 层的目的是将不同大小的感兴趣区域(Region of Interest, ROI) 转换为固定大小的特征图作为后续步骤的输入 还是先把论文中的图贴出来 上图

    2024年02月10日
    浏览(53)
  • 经典目标检测R-CNN系列(2)Fast R-CNN

    Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。 同样使用VGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%(Pascal VOC数据集上)。 Fast R-CNN算法流程可分为3个步骤 一张图像生成1K~2K个 候选区域 (使用Selective Search方法) 将图像输入网络得

    2024年02月16日
    浏览(39)
  • 目标检测网络系列之R-CNN

    2023年09月08日
    浏览(40)
  • 目标检测经典论文精读-R-CNN

    论文链接: https://www.cv-foundation.org/openaccess/content_cvpr_2014/papers/Girshick_Rich_Feature_Hierarchies_2014_CVPR_paper.pdf 论文技术报告链接: https://arxiv.org/pdf/1311.2524.pdf 出处: CVPR 2014 参考视频: https://www.bilibili.com/video/BV1d64y1W74E/?spm_id_from=333.999.0.0vd_source=e321967bf2cdc2338238788250d12de8 总结起来就

    2024年02月04日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包