Pytorch: 走向深度-Visual Geometry Group Network(VGGNet)
Copyright: Jingmin Wei, Pattern Recognition and Intelligent System, School of Artificial and Intelligence, Huazhong University of Science and Technology
文章目录
本教程不商用,仅供学习和参考交流使用,如需转载,请联系本人。
Reference
本章节需要有一定的爬虫基础知识,在下载数据集时使用了 requests 库。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import requests
import cv2
import torch
import torch.nn as nn
import torch.nn.functional as F
from torchvision import models
from torchvision import transforms
from PIL import Image
网络基本结构
VGGNet 探索了网络深度和性能的关系,用更小的卷积核和更深的网络结构,取得了较好的效果,是一个非常重要的网络。
主要贡献
使用具有非常小( 3 × 3 3×3 3×3 )卷积滤波器的架构对深度不断增加的网络进行了全面评估,这表明通过将深度提升到 16 – 19 16–19 16–19 个权重层,可以实现对现有技术配置的显著改进。
为什么使用 3 × 3 3\times3 3×3 卷积核?
两个 3 × 3 3\times3 3×3 的卷积层串联相当于 1 1 1 个 5 × 5 5\times5 5×5 的卷积层,即一个像素会跟周围 5 × 5 5\times5 5×5 的像素产生关联,可以说感受野大小为 5 × 5 5\times5 5×5 .
以此类推, 3 3 3 个 3 × 3 3\times3 3×3 的卷积层串联的效果则相当于 1 1 1 个 7 × 7 7\times7 7×7 的卷积层。那为什么选择使用 3 3 3 个 3 × 3 3\times3 3×3 的卷积层而不是使用 1 1 1 个 7 × 7 7\times7 7×7 的卷积层呢?
在 V G G VGG VGG 中,使用了 3 3 3 个 3 × 3 3\times3 3×3 卷积核来代替 7 × 7 7\times7 7×7 卷积核,使用了 2 2 2 个 3 × 3 3\times3 3×3 卷积核来代替 5 × 5 5\times5 5×5 卷积核。
3 3 3 个串联的 3 × 3 3\times3 3×3 的卷积层,拥有比 1 1 1 个 7 × 7 7\times7 7×7 的卷积层更少的参数,参数量是后者的 3 × 3 × 3 7 × 7 = 55 % \frac{3\times3\times3}{7\times7} = 55\% 7×73×3×3=55%
3 3 3 个 3 × 3 3\times3 3×3 的卷积层比 1 1 1 个 7 × 7 7\times7 7×7 的卷积层拥有更多的非线性变换,前者可以使用 3 3 3 次 R e L U ReLU ReLU 激活函数,而后者只能使一次,这样使得 C N N CNN