【经典卷积神经网络】之ResNet分析及实现物体识别

【经典卷积神经网络】之ResNet分析及实现物体识别

一、内容

深度卷积网络一开始面临的最主要的问题是梯度消失和梯度爆炸。那什么是梯度消失和梯度爆炸呢?所谓梯度消失,就是在深层神经网络的训练过程中,计算得到的梯度越来越小,使得权值得不到更新的情形,这样算法也就失效了。而梯度爆炸则是相反的情况,是指在神经网络训练过程中梯度变得越来越大,权值得到疯狂更新的情形,这样算法得不到收敛,模型也就失效了。当然,其间通过设置 relu 和归一化激活函数层等手段使得我们很好的解决这些问题。但当我们将网络层数加到更深时却发现训练的准确率在逐渐降低。这种并不是由过拟合造成的神经网络训练数据识别准确率降低的现象我们称之为退化(degradation)。

论文地址:
https://arxiv.org/pdf/1512.03385.pdf

残差块与残差网络
要理解残差网络,就必须理解残差块(residual block)这个结构,因为残差块是残差网络的基本组成部分。之前的各种卷积网络结构(LeNet-5/AlexNet/VGG),通常结构就是卷积池化再卷积池化,中间的卷积池化操作可以很多层。类似这样的网络结构何凯明在论文中将其称为普通网络(Plain Network),何凯明认为普通网络解决不了退化问题,我们需要在网络结构上作出创新。何凯明给出的创新在于给网络之间添加一个捷径(shortcuts)或者也叫跳跃连接(skip connection),这使得捷径之间之间的网络能够学习一个恒等函数,使得在加深网络的情形下训练效果至少不会变差。

残差块的基本结构如下:
在这里插入图片描述
以上残差块是一个两层的网络结构,输入 X 经过两层的加权和激活得到 F(X) 的输出,这是典型的普通卷积网络结构。但残差块的区别在于添加了一个从输入 X 到两层网络输出单元的 shortcut,这使得输入节点的信息单元直接获得了与输出节点的信息单元通信的能力 ,这时候在进行 relu 激活之前的输出就不再是 F(X) 了,而是 F(X)+X。

二、代码

1.残差快结构实现

import keras
from keras.layers import Conv2D,Input

x = Input(shape=(224,224,3))
y = Conv2D(3,(3,3),padding="same")(x)

z = keras.layers.add([x,y])

2.ResNet50调用

from tensorflow import keras
import tensorflow as tf
import cv2 as cv
import numpy as np
import sys

def image_classification_demo():
    device_name = "/gpu:0"
    with tf.device(device_name):
        model = keras.applications.ResNet50(weights='imagenet')
        # load the image
        src = cv.imread("D:/vsprojects/images/apple.png")
        img = cv.resize(src, (224, 224))
        img = np.expand_dims(img, 0)
        proba = model.predict(img)
        result = tf.keras.applications.resnet50.decode_predictions(proba)
    print(result)
    cv.putText(src, result[0][0][1],(50, 50), cv.FONT_HERSHEY_PLAIN, 2.0, (0, 0, 255), 2, 8)
    cv.imshow("input", src)
    cv.waitKey(0)
    cv.destroyAllWindows()

# 主函数入口
if __name__ == "__main__":
    image_classification_demo()

三、结果

[[('n07742313', 'Granny_Smith', 0.9962174), ('n07753592', 'banana', 0.001495058), ('n03461385', 'grocery_store', 0.0010093094), ('n03127925', 'crate', 0.0003557565), ('n07753275', 'pineapple', 0.0003273584)]]

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值