Faster R-CNN神经网络模型代码实现

本文档详细介绍了Faster R-CNN神经网络模型的实现过程,包括环境配置、预训练权重下载、数据集准备(PASCAL VOC2012)、训练方法以及实验结果。Faster R-CNN结合了RPN与Fast R-CNN,提供更高的推理速度和准确性。使用PyTorch1.6,ResNet50+FPN作为backbone,并提供了训练脚本和多GPU训练指令。
摘要由CSDN通过智能技术生成

Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。同样使用VGG16作 为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率 也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。

Fast R-CNN算法流程可分为3个步骤

  • 将图像输入网络得到相应的特征图
  • 使用RPN结构生成候选框,将RPN生成的候选框投影到 特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图, 接着将特征图展平通过一系列全连接层得到预测结果在这里插入图片描述
  • Faster RCNN的结构组成RPN+Fast RCNN
    在这里插入图片描述
  • 1 数据集,image input
  • 2 卷积层CNN等基础网络,提取特征得到feature map
  • 3-1 RPN层,再在经过卷积层提取到的feature map上用一个3x3的slide window,去遍历整个feature map,在遍历过程中每个window中心按rate,scale(1:2,1:1,2:1)生成9个anchors,然后再利用全连接对每个anchors做二分类(是前景还是背景)和初步bbox regression,最后输出比较精确的300个ROIs。
  • 3-2 把经过卷积层feature map用ROI pooling固定全连接层的输入维度。
  • 4 然后把经过RPN输出的rois映射到ROIpooling的feature map上进行bbox回归和分类。
    在这里插入图片描述

Faster R-CNN

1.环境配置:

  • Python3.6或者3.7
  • Pytorch1.6(注意:必须是1.6.0或以上,因为使用官方提供的混合精度训练1.6.0后才支持)
  • pycocotools(Linux: pip install pycocotools;
    Windows:pip install pycocotools-windows(不需要额外安装vs))
  • Ubuntu或Centos(不建议Windows)
  • 最好使用GPU训练

2.预训练权重下载地址(下载后放入backbone文件夹中):

  • ResNet50+FPN backbone: https://download.pytorch.org/models/fasterrcnn_resnet50_fpn_coco-258fb6c6.pth

3.数据集,本例程使用的是PASCAL VOC2012数据集(下载后放入项目当前文件夹中)

  • Pascal VOC2012 train/val数据集下载地址:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
    数据标签:总共20个种类
    “aeroplane”: 1,
    “bicycle”: 2,
    “bird”: 3,
    “boat”: 4,
    “bottle”: 5,
    “bus”: 6,
    “car”: 7,
    “cat”: 8,
    “chair”: 9,
    “cow”: 10,
    “diningtable”: 11,
    “dog”: 12,
    “horse”: 13,
    “motorbike”: 14,
    “person”: 15,
    “pottedplant”: 16,
    “sheep”: 17,
    “sofa”: 18,
    “train”: 19,
    “tvmonitor”: 20
    }

4.训练方法

  • 确保提前准备好数据集
  • 确保提前下载好对应预训练模型权重
  • 若要训练resnet50+fpn+fasterrcnn,直接使用train_resnet50_fpn.py训练脚本
  • 若要使用多GPU训练,使用 “python -m torch.distributed.launch --nproc_per_node=8 --use_env train_multi_GPU.py” 指令,nproc_per_node参数为使用GPU数

5.实验结果记录

5.1train_resnet50_fpn.py训练脚本代码

import torch
import transforms
from network_files.faster_rcnn_framework import FasterRCNN, FastRCNNPredictor
from backbone.resnet50_fpn_model import resnet50_fpn_backbone
from my_dataset import VOC2012DataSet
from train_utils import train_eval_utils as utils
import os
# import torchvision.models.detecion.faster_rcnn

def create_model(num_classes):
    backbone = resnet50_fpn_backbone()
    model = FasterRCNN(backbone=backbone, num_classes=91)
    # 载入预训练模型权重
    # https://download.pytorch.org/models/fasterrcnn_resnet50_fpn_coco-258fb6c6.pth
    weights_dict = torch.load("./backbone/fasterrcnn_resnet50_fpn_coco.pth")
    missing_keys, unexpected_keys = model.load_state_dict(weights_dict, strict=False)
    if len(missing_keys) != 0 or len(unexpected_keys) != 0:
        print("missing_keys: ", missing_keys)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值