VGG网络原理与搭建

news2024/11/26 18:49:46

VGG网络原理与搭建

VGG在2014年由牛津大学著名研究组VGG(Visual Geometry Group)提出,斩获该年ImageNet竞赛中Localization Task(定位任务)第一名和Classification Task(分类任务)第二名。

论文中提及的结构

在这里插入图片描述

在卷积神经网络中,决定某一层输出结果中一个元素所对应的输入层的区域大小,被称作感受野(receptive field)。通俗的解释是,输出feature map上的一个单元对应输入层上的区域大小。

在这里插入图片描述
感受野计算公式:
F(i=(F(i+1)-1)× Stride + Ksize

  • F(i)为第i层感受野

  • Stride为第i层的步距

  • Ksize为卷积核或池化核尺寸

Vgg中最常用的是模型D

conv的stride为1,padding为1maxpool的size为2,stride为2

使用pytorch搭建VGG网络

搭建VGG网络分为两个步骤

  1. 提取网络结构

  2. 分类网络结构

定义一个字典文件

cfgs = {
    'vgg11': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],
    'vgg13': [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],
    'vgg16': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512, 'M'],
    'vgg19': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512, 'M'],
}

通过函数提取特征网络结构

def make_features(cfg: list):
    layers = []
    in_channels = 3
    for v in cfg:
        if v == "M":
            layers += [nn.MaxPool2d(kernel_size=2, stride=2)]
        else:
            conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1)
            layers += [conv2d, nn.ReLU(True)]
            in_channels = v
    return nn.Sequential(*layers)

定义Vgg类模型

class VGG(nn.Module):
    def __init__(self, features, num_classes=1000, init_weights=False):
        super(VGG, self).__init__()
        self.features = features
        self.classifier = nn.Sequential(
            nn.Linear(512*7*7, 4096),
            nn.ReLU(True),
            nn.Dropout(p=0.5),
            nn.Linear(4096, 4096),
            nn.ReLU(True),
            nn.Dropout(p=0.5),
            nn.Linear(4096, num_classes)
        )
        if init_weights:
            self._initialize_weights()

设置权重的过程

class VGG(nn.Module):
    def __init__(self, features, num_classes=1000, init_weights=False):
        super(VGG, self).__init__()
        self.features = features
        self.classifier = nn.Sequential(
            nn.Linear(512*7*7, 4096),
            nn.ReLU(True),
            nn.Dropout(p=0.5),
            nn.Linear(4096, 4096),
            nn.ReLU(True),
            nn.Dropout(p=0.5),
            nn.Linear(4096, num_classes)
        )
        if init_weights:
            self._initialize_weights()

VGG网络正向传播的过程

 def forward(self, x):
        # N x 3 x 224 x 224
        x = self.features(x)
        # N x 512 x 7 x 7
        x = torch.flatten(x, start_dim=1)
        # N x 512*7*7
        x = self.classifier(x)
        return x

使用函数构造Vgg模型

def vgg(model_name="vgg16", **kwargs):
    assert model_name in cfgs, "Warning: model number {} not in cfgs dict!".format(model_name)
    cfg = cfgs[model_name]

    model = VGG(make_features(cfg), **kwargs)
    return model

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/525213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTTP第10讲——响应状态码

背景 HTTP 报文里请求行的组成部分,包括请求方法和 URI。有了请求行,加上后面的头字段就形成了请求头,可以通过 TCP/IP 协议发送给服务器。 服务器收到请求报文,解析后需要进行处理,具体的业务逻辑多种多样&#xff0…

四、c++学习(类的简介)

上一篇我们做了一个简单的界面优化,并且我们可以选择进入游戏界面,所以这一篇我们来实现贪吃蛇和食物。 C学习,b站直播视频 文章目录 4.0 课程目标4.1 结构体4.1.1 c语言面向对象4.1.2 c的结构体4.1.3 内存对齐 4.2 union4.2.1 union应用&am…

Chapter8:线性系统的状态空间分析与综合(上)

第八章:线性系统的状态空间分析与综合 Exercise8.1 已知控制系统结构图如下所示: 其中: u u u为输入, y y y

Gradle版本、Gradle插件版本和AndroidStudio版本之间的对应关系

问题描述 有时候碰到gradle版本死活下载不下来,还会报Gralde Sync Issues,有可能是你的Gradle Wrapper版本和Gradle插件版本、AndroidStudio版本不匹配。 解决方案 Gradle版本和Gradle插件版本之间存在一定的对应关系。Gradle Wrapper是用来指定项目使用的Gradl…

javaweb系列-js引入、输出、变量、数据类型、运算符

1.1 js介绍 js可以让我们的页面更加的智能,让页面和用户进行交互。 1.2 引入方式 同样,js代码也是书写在html中的,那么html中如何引入js代码呢?主要通过下面的2种引入方式: 第一种方式:内部脚本&#x…

深度学习第J9周:Inception v3算法实战与解析

目录 一、理论基础 二、pytorch代码复现1.前期准备 2.代码复现 3.训练运行 3.2指定图片进行预测 三、总结 🍨 本文为[🔗365天深度学习训练营]内部限免文章(版权归 *K同学啊* 所有) 🍖 作者:[K同学啊] &…

K_A39_001 基于STM32驱动TF卡模块读写数据 串口打印

K_A39_001 基于STM32驱动TF卡模块读写数据 串口打印 所有资源导航一、资源说明二、基本参数参数引脚说明 三、驱动说明时序对应程序: 四、部分代码说明1、接线引脚定义1.2、STM32F103C8T6TF卡模块 五、基础知识学习与相关资料下载六、视频效果展示与程序资料获取七、注意事项八…

【英语】大学英语CET考试,口语部分2(课程笔记)

文章目录 1、口语考试介绍与备考攻略1.1 口语考试介绍1.2 考试备考攻略 上课老师:金格妃 上课时间:4h 1、口语考试介绍与备考攻略 方法是通用的:CET4/6,雅思托福,BEC等 近年四六级考试的长度是接近雅思托福的&#x…

【大数据】Presto(Trino)配置参数以及 SQL语法

文章目录 一、概述二、Trino coordinator 和 worker 节点作用1)Trino coordinator 节点作用2)Trino worker 节点作用 三、Trino 参数详细讲解1)coordinator 节点配置1、config.properties 配置文件2、jvm.config 配置文件3、log.properties 配…

libevent高并发网络编程 - 04_libevent实现http服务器

文章目录 1 evhttp简介2 相关的APIevhttp_new()evhttp_free()evhttp_bind_socket()evhttp_set_gencb()evhttp_set_cb()evhttp_request_get_uri()evhttp_request_get_command()evhttp_request_get_input_headers()evhttp_request_get_input_buffer()evhttp_request_get_output_h…

MagicalCoder系列教程(二):如何下载本地安装启动项目?

目录 下载启动 1 windows下载 2 linux下载 3 安装启动方式: 3.1 Windows免安装 3.2 其他操作系统(Mac等其他操作系统) 3.3 启动安装失败 MagicalCoder可视化开发平台:轻松搭建业务系统,为企业创造更多价值&…

【故障排查】【杂项】ingress + Jenkins 上传hpi文件(8MB)报错413

1、ingress Jenkins 上传hpi文件(8MB)报错 413 Request Entity Too Large 处理方法:ingress文件加上annotations ingress-nginx 实际上为nginx,所以在此调整。apiVersion: extensions/v1beta1 kind: Ingress metadata:name: jen…

Dreaming of Freedom

题目: 题意解析: n 个程序员要在 m 个算法里选出最受欢迎的算法,每轮投票每个程序员都会在剩下的算法中选择一个。 在第一轮投票前,m 种算法都可以选择;每轮投票后,只保留有最多票数的算法;只…

蓝桥杯提单day2【题解】

题单链接 蓝桥杯题单day2【题目】_奔跑的星黛露的博客-CSDN博客 题解 蓝肽子序列 链接 https://www.lanqiao.cn/problems/1030/learning/?page1&first_category_id1&sortstudents_count&second_category_id3&tags%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92,%E…

VRRP高级特性——管理VRRP

目录 管理VRRP备份组与业务VRRP备份组 管理VRRP备份组的两种实现方式 配置管理备份组 当在设备上配置了多个VRRP备份组时,为了减少设备间交互大量的VRRP协议报文,可以将其中一个VRRP备份组配置为管理VRRP备份组(mVRRP)&#xf…

WordPress PHP版本:2023年用于WordPress的最佳PHP版本

不同的 WordPress 版本可以与多个 PHP 版本一起使用。然而,WordPress社区官方为每个 WP 版本推荐了特定的 PHP 要求。选择最好的 WordPress PHP 版本对于确保网站安全且没有错误至关重要。 本文从 WordPress 的推荐、最低和最新 PHP 版本的角度讨论了 PHP 和 WordP…

SpringBoot——如何获取配置文件中的配置信息

SpringBoot——如何获取配置文件中的配置信息 简单介绍: 之前我们看到了我们是如何对SpringBoot以及SpringBoot中不同技术进行配置的,我们舍弃了之前在Spring中的对不同的技术使用不同的配置信息的方式,使用将所有技术的配置写在了一个配置…

Mac(苹果)安装nvm进行node版本控制

Mac(苹果)安装nvm进行node版本控制 错误演示nvm安装下载命令更改网络环境配置环境 相信我一般的初学者问题看这一片就够了 错误演示 如上图所示,node的版本,与当前项目中的一些框架或者组件不支持时一般就会报这个错,…

一天吃透SpringCloud面试八股文

1、什么是Spring Cloud ? Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。 Sprin…

Portraiture4.1.0最新版PS/LR磨皮美白滤镜插件

Portraiture这款插件磨皮效率超高 是99%摄影师的必备插件 一秒磨皮,无卡顿,效果好 最新版Portraiture 2023磨皮效果提升很大 之前发布了Portraitrue4.0.3版 现已更新!本期带来最新版: 磨皮插件Portraiture 4.1.0版!portraiture最新版本…