Faster-RCNN的vgg16文件详解

目录

pytorch编写Faster-RCNN的下载地址

目录下的Faster-Rcnn网络文件地址

代码解读:

导入库部分:

VGG16初始化:

-->下面这些是模型参数初始。 

-->接下来是是否有预训练,有的话导入参数。

 -->这个是定义特征提取层和分类层,写法参考。

-->固定前面3层的网络参数,不进行训练。

-->最后回归层定义,回归出两个种类数据,一个是物体分类,一个是物体坐标

-->这个是定义进入全连接前,把特征图拉直的函数。


pytorch编写Faster-RCNN的下载地址

目录下的Faster-Rcnn网络文件地址

这里resnet.py和vgg16.py功能类似,都是用于前端特征提取。

代码解读:

导入库部分:

#统一python3的执行代码(使用python2运行也是python3的结果)
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

#pytorch必备的数据库
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable
import math
import torchvision.models as models
#这个是唯一依赖的外部库,本文件只是一个特征提取模型,要嵌入到_fasterRCNN这个大模型中
from model.faster_rcnn.faster_rcnn import _fasterRCNN
#调试库
import pdb

这个文件程序是Faster-RCNN中前端的特征提取部分。所以只要依赖一个_fasterRCNN总的模型库就可以。

VGG16初始化:

-->下面这些是模型参数初始。 

class vgg16(_fasterRCNN):
  def __init__(self, classes, pretrained=False, class_agnostic=False):
    self.model_path = 'data/pretrained_model/vgg16_caffe.pth'
    self.dout_base_model = 512
    self.pretrained = pretrained
    self.class_agnostic = class_agnostic

    _fasterRCNN.__init__(self, classes, class_agnostic)

-->接下来是是否有预训练,有的话导入参数。

  def _init_modules(self):
    vgg = models.vgg16()
    if self.pretrained:
        print("Loading pretrained weights from %s" %(self.model_path))
        state_dict = torch.load(self.model_path)
        vgg.load_state_dict({k:v for k,v in state_dict.items() if k in vgg.state_dict()})

 -->这个是定义特征提取层和分类层,写法参考

    vgg.classifier = nn.Sequential(*list(vgg.classifier._modules.values())[:-1])

    # not using the last maxpool layer
    self.RCNN_base = nn.Sequential(*list(vgg.features._modules.values())[:-1])

-->固定前面3层的网络参数,不进行训练。

    # Fix the layers before conv3:
    for layer in range(10):
      for p in self.RCNN_base[layer].parameters(): p.requires_grad = False

-->最后回归层定义,回归出两个种类数据,一个是物体分类,一个是物体坐标

    self.RCNN_top = vgg.classifier

    # not using the last maxpool layer
    self.RCNN_cls_score = nn.Linear(4096, self.n_classes)

    if self.class_agnostic:
      self.RCNN_bbox_pred = nn.Linear(4096, 4)
    else:
      self.RCNN_bbox_pred = nn.Linear(4096, 4 * self.n_classes)      

-->这个是定义进入全连接前,把特征图拉直的函数。

  def _head_to_tail(self, pool5):
    
    pool5_flat = pool5.view(pool5.size(0), -1)
    fc7 = self.RCNN_top(pool5_flat)

    return fc7

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值