深度学习之基于Tensorflow2.0实现Xception网络

1.Xception网络简介

Xception网络是在2017提出的轻量型网络,兼顾了准确性和参数量,Xception----->Extreme(极致的) Inception。

2.创新点

引入类似深度可分离卷积:Depthwise Separable Convolution。
为什么说是类似深度可分离卷积呢?

1)深度可分离卷积的实现过程:

在这里插入图片描述

2)Xception深度可分离卷积的实现过程:

在这里插入图片描述
Xception的深度可分离卷积与传统的深度可分离卷积的步骤是相反的,但是原论文作者说,两者的性能差异不大,最终的结果差异也不大,因此在实现的时候还是用的传统的深度可分离卷积。

3.网络模型

在这里插入图片描述

4.网络实现

def Xcepiton(nb_class,input_shape):
    input_ten = Input(shape=input_shape)
    #block 1
    #299,299,3  ->  149,149,64
    x = Conv2D(32,(3,3),strides=(2,2),use_bias=False)(input_ten)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = Conv2D(64,(3,3),use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    
    #block2
    #149,149,64  ->  75,75,128
    residual = Conv2D(128,(1,1),strides=(2,2),padding='same',use_bias=False)(x)
    residual = BatchNormalization()(residual)
    
    x = SeparableConv2D(128,(3,3),padding='same',use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = SeparableConv2D(128,(3,3),padding='same')(x)
    x = BatchNormalization()(x)
    
    x = MaxPooling2D((3,3),strides=(2,2),padding='same')(x)
    x = layers.add([x,residual])
    
    #block3
    #75,75,128  ->  38,38,256
    residual = Conv2D(256,(1,1),strides=(2,2),padding='same',use_bias=False)(x)
    residual = BatchNormalization()(residual)
    
    x = Activation('relu')(x)
    x = SeparableConv2D(256,(3,3),padding='same',use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = SeparableConv2D(256,(3,3),padding='same',use_bias=False)(x)
    x = BatchNormalization()(x)
    
    x = MaxPooling2D((3,3),strides=(2,2),padding='same')(x)
    x = layers.add([x,residual])
    
    #block4
    #38,38,256  ->  19,19,728
    residual = Conv2D(728,(1,1),strides=(2,2),padding='same',use_bias=False)(x)
    residual = BatchNormalization()(residual)
    
    x = Activation('relu')(x)
    x = SeparableConv2D(728,(3,3),padding='same',use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = SeparableConv2D(728,(3,3),padding='same',use_bias=False)(x)
    x = BatchNormalization()(x)
    
    x = MaxPooling2D((3,3),strides=(2,2),padding='same')(x)
    x = layers.add([x,residual])
    
    #block 5  -  12
    #19,19,728  ->  19,19,728
    for i in range(8):
        residual = x
        x = Activation('relu')(x)
        x = SeparableConv2D(728,(3,3),padding='same',use_bias=False)(x)
        x = BatchNormalization()(x)
        x = Activation('relu')(x)
        x = SeparableConv2D(728,(3,3),padding='same',use_bias=False)(x)
        x = BatchNormalization()(x)
        x = Activation('relu')(x)
        x = SeparableConv2D(728,(3,3),padding='same',use_bias=False)(x)
        x = BatchNormalization()(x)
        
        x = layers.add([x,residual])
        
    #block13  
    #19,19,728  ->  10,10,1024
    residual = Conv2D(1024,(1,1),strides=(2,2),padding='same',use_bias=False)(x)
    residual = BatchNormalization()(residual)
    
    x = Activation('relu')(x)
    x = SeparableConv2D(728,(3,3),padding='same',use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = SeparableConv2D(1024,(3,3),padding='same',use_bias=False)(x)
    x = BatchNormalization()(x)
    
    x = MaxPooling2D((3,3),strides=(2,2),padding='same')(x)
    x = layers.add([x,residual])
    
    #block14
    #10,10,1024  ->10,10,2048
    x = SeparableConv2D(1536,(3,3),padding='same',use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    
    x = SeparableConv2D(2048,(3,3),padding='same',use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    
    x = GlobalAveragePooling2D()(x)
    output_ten = Dense(nb_class,activation='softmax')(x)
    model = Model(input_ten,output_ten)
    
    return model
model_xception = Xcepiton(24,(img_height,img_width,3))
model_xception.summary()

在这里插入图片描述
训练参数并不多,是一个比较经典的轻量级网络。
努力加油a啊

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

starlet_kiss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值