日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Xception

發(fā)布時間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Xception 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 論文信息
    • Xception 設(shè)計進(jìn)化
    • 深度可分離卷積 Depthwise Separable Convolution
    • Xception 網(wǎng)絡(luò)架構(gòu)
    • Xception 微調(diào)

論文信息

原文地址: Xception:Deep Learning with Depthwise Separable Convolutions

作者:Fran?ois Chollet

Xception 設(shè)計進(jìn)化

  • Xception 是 Google 繼 Inception 后提出的對 Inception-v3 的另一種改進(jìn)。
  • 作者認(rèn)為,通道之間的相關(guān)性 與 空間相關(guān)性 最好要分開處理。采用 Separable Convolution(極致的 Inception 模塊)來替換原來 Inception-v3中的卷積操作。

結(jié)構(gòu)的變形過程如下:

  • 在 Inception 中,特征可以通過 1×11×11×1 卷積,3×33×33×3 卷積,5×55×55×5 卷積,pooling 等進(jìn)行提取,Inception 結(jié)構(gòu)將特征類型的選擇留給網(wǎng)絡(luò)自己訓(xùn)練,也就是將一個輸入同時輸給幾種提取特征方式,然后做 concat 。Inception-v3的結(jié)構(gòu)圖如下:
  • 對 Inception-v3 進(jìn)行簡化,去除 Inception-v3 中的 avg pool 后,輸入的下一步操作就都是 1×11×11×1 卷積:
  • 提取 1×11×11×1 卷積的公共部分:
  • Xception(極致的 Inception):先進(jìn)行普通卷積操作,再對 1×11×11×1 卷積后的每個channel分別進(jìn)行 3×33×33×3 卷積操作,最后將結(jié)果 concat:

深度可分離卷積 Depthwise Separable Convolution

傳統(tǒng)卷積的實(shí)現(xiàn)過程:

Depthwise Separable Convolution 的實(shí)現(xiàn)過程:

Depthwise Separable Convolution極致的 Inception 區(qū)別:

  • 極致的 Inception

    • 第一步:普通 1×11×11×1 卷積。

    • 第二步:對 1×11×11×1 卷積結(jié)果的每個 channel,分別進(jìn)行 3×33×33×3 卷積操作,并將結(jié)果 concat。

  • Depthwise Separable Convolution

    • 第一步:Depthwise 卷積,對輸入的每個channel,分別進(jìn)行 3×33×33×3 卷積操作,并將結(jié)果 concat。

    • 第二步:Pointwise 卷積,對 Depthwise 卷積中的 concat 結(jié)果,進(jìn)行 1×11×11×1 卷積操作。

兩種操作的循序不一致:Inception 先進(jìn)行 1×11×11×1 卷積,再進(jìn)行 3×33×33×3 卷積;Depthwise Separable Convolution 先進(jìn)行 3×33×33×3 卷積,再進(jìn)行 1×11×11×1 卷積。(作者認(rèn)為這個差異并沒有大的影響)

作者發(fā)現(xiàn),在“極致的 Inception”模塊中,用于學(xué)習(xí)空間相關(guān)性的 3×33×33×3 的卷積,和用于學(xué)習(xí)通道間相關(guān)性的 1×11×11×1 卷積之間,不使用非線性激活函數(shù)時,收斂過程更快、準(zhǔn)確率更高:

Xception 網(wǎng)絡(luò)架構(gòu)

Xception 的結(jié)構(gòu)基于 ResNet,但是將其中的卷積層換成了Separable Convolution(極致的 Inception模塊)。如下圖所示。整個網(wǎng)絡(luò)被分為了三個部分:Entry,Middle和Exit。

  • Xception 在 ImageNet 上,比 Inception-v3 的準(zhǔn)確率稍高, 同時參數(shù)量有所下降,在 Xception 中加入的類似 ResNet 的殘差連接機(jī)制也顯著加快了Xception的收斂過程并獲得了顯著更高的準(zhǔn)確率。

  • 潛在的問題是,雖然 Depthwise Separable Convolution 可以帶來準(zhǔn)確率的提升或是理論計算量的大幅下降,但由于其計算過程較為零散,現(xiàn)有的卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)中它的效率都不夠高,例如本文中 Xception 的理論計算量是遠(yuǎn)小于Inception-v3的,但其訓(xùn)練時的迭代速度反而更慢一些。

Xception 微調(diào)

Xception 權(quán)重文件下載:地址

from keras.models import Model from keras import layers from keras.layers import Dense, Input, BatchNormalization, Activation from keras.layers import Conv2D, SeparableConv2D, MaxPooling2D, GlobalAveragePooling2D from keras.optimizers import SGD from sklearn.metrics import log_loss from get_traffic_dataset import TrafficImageDataGeneratortrain_file = './citySpace/outData/train/' val_file = './citySpace/outData/val/'def Xception(img_rows, img_cols, color_type,num_classes,weights_path = 'xception_weights_tf_dim_ordering_tf_kernels.h5'):img_input = Input(shape=(img_rows, img_cols, color_type))# Block 1x = Conv2D(32, (3, 3), strides=(2, 2), use_bias=False)(img_input)x = BatchNormalization()(x)x = Activation('relu')(x)x = Conv2D(64, (3, 3), use_bias=False)(x)x = BatchNormalization()(x)x = Activation('relu')(x)residual = Conv2D(128, (1, 1), strides=(2, 2), padding='same', use_bias=False)(x)residual = BatchNormalization()(residual)# Block 2x = SeparableConv2D(128, (3, 3), padding='same', use_bias=False)(x)x = BatchNormalization()(x)x = Activation('relu')(x)x = SeparableConv2D(128, (3, 3), padding='same', use_bias=False)(x)x = BatchNormalization()(x)# Block 2 Poolx = MaxPooling2D((3, 3), strides=(2, 2), padding='same')(x)x = layers.add([x, residual])residual = Conv2D(256, (1, 1), strides=(2, 2), padding='same', use_bias=False)(x)residual = BatchNormalization()(residual)# Block 3x = 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)# Block 3 Poolx = MaxPooling2D((3, 3), strides=(2, 2), padding='same')(x)x = layers.add([x, residual])residual = Conv2D(728, (1, 1), strides=(2, 2), padding='same', use_bias=False)(x)residual = BatchNormalization()(residual)# Block 4x = 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 - 12for i in range(8):residual = xx = 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])residual = Conv2D(1024, (1, 1), strides=(2, 2), padding='same', use_bias=False)(x)residual = BatchNormalization()(residual)# Block 13x = 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)# Block 13 Poolx = MaxPooling2D((3, 3), strides=(2, 2), padding='same')(x)x = layers.add([x, residual])# Block 14x = SeparableConv2D(1536, (3, 3), padding='same', use_bias=False)(x)x = BatchNormalization()(x)x = Activation('relu')(x)# Block 14 part 2x = SeparableConv2D(2048, (3, 3), padding='same', use_bias=False)(x)x = BatchNormalization()(x)x = Activation('relu')(x)# Fully Connected Layerx_fc = GlobalAveragePooling2D()(x)x_fc = Dense(1000, activation='softmax')(x_fc)inputs = img_input# Create modelmodel = Model(inputs, x_fc, name='xception')# load weightsmodel.load_weights(weights_path)# Truncate and replace softmax layer for transfer learning# Cannot use model.layers.pop() since model is not of Sequential() type# The method below works since pre-trained weights are stored in layers but not in the modelx_newfc = GlobalAveragePooling2D()(x)x_newfc = Dense(num_classes, activation='softmax', name='fc_out')(x_newfc)# Create another model with our customized softmaxmodel = Model(img_input, x_newfc)# Learning rate is changed to 0.001sgd = SGD(lr=1e-3, decay=1e-6, momentum=0.9, nesterov=True)model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy'])return modelif __name__ == '__main__': img_rows, img_cols = 299, 299 # Resolution of inputschannel = 3num_classes = 3batch_size = 16nb_epoch = 5# Initalize the data generator seperately for the training and validation settrain_generator = TrafficImageDataGenerator(train_file, scale_size=(img_rows, img_cols), horizontal_flip=True, shuffle=True)val_generator = TrafficImageDataGenerator(val_file, scale_size=(img_rows, img_cols), horizontal_flip=True, shuffle=True)X_valid, Y_valid,val_labels = val_generator.all(1000) X_train, Y_train, train_labels = train_generator.all(5000) # Load our modelmodel = Xception(img_rows, img_cols,channel,num_classes)# Start Fine-tuningmodel.fit(X_train, Y_train,batch_size=batch_size,nb_epoch=nb_epoch,shuffle=True,verbose=1,validation_data=(X_valid, Y_valid),)# Make predictionspredictions_valid = model.predict(X_valid, batch_size=batch_size, verbose=1)# Cross-entropy loss scorescore = log_loss(Y_valid, predictions_valid)

總結(jié)

以上是生活随笔為你收集整理的Xception的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 都市激情亚洲色图 | 国产无码久久精品 | 久久日韩精品 | 一区二区三区福利视频 | 一区三区在线 | 免费观看日韩 | 严厉高冷老师动漫播放 | 懂色av粉嫩av蜜乳av | 黄色大片网址 | 一级片黄色片 | a级欧美| 青青在线免费观看 | 国产精品久久久久91 | 男女日批| 97人妻人人澡人人爽人人精品 | 欧美一区二区三区在线观看 | 教练含着她的乳奶揉搓揉捏动态图 | 人人看人人做 | 成人自拍视频在线 | 亚洲欧美日韩不卡 | 日韩精品人妻一区二区中文字幕 | 国产精品8888 | 亚洲天堂va | 91碰碰| 天天色天天搞 | 天天操天天摸天天干 | 黄色片女人| 午夜在线免费观看视频 | 国产欧美日韩三区 | 日韩一级在线观看视频 | 九九亚洲视频 | 亚洲中午字幕 | 成年人的免费视频 | 深夜视频一区二区 | 国产www精品| 无码av免费毛片一区二区 | 一区二区三区免费看 | 婷婷色激情 | 黄色精品一区二区 | 丰满人妻在公车被猛烈进入电影 | av自拍一区 | 国产卡一卡二卡三 | 一级做a爰 | 国产女人叫床高潮大片免费 | 精品日本一区二区 | 九九精品九九 | 啦啦啦av | 国产精品一区二区无码对白 | 清纯唯美亚洲激情 | 国产av不卡一区 | 亚洲一区二区自偷自拍 | 欧洲亚洲激情 | 欧美亚洲精品在线 | 婷婷综合另类小说色区 | 极品粉嫩小仙女高潮喷水久久 | 天天精品综合 | 婷婷综合五月 | 久草日韩 | 欧美在线观看www | 五月天精品| 欧美三级日本三级 | 69xxx少妇按摩视频 | 欧美精品乱码久久久久久 | 日本欧美久久久久免费播放网 | 久草视频福利在线 | 一区二区三区视频在线播放 | 嫩草视频国产 | 亚洲www | 97久久久 | jizzjizz视频 | 欧美成年人视频在线观看 | 亚洲特级毛片 | 中文字幕欧美一区 | 梦梦电影免费高清在线观看 | 91tv国产成人福利 | 国外av在线| 国产后入清纯学生妹 | 丰满少妇一区二区三区 | 成人中文在线 | 日本一区二区三区四区视频 | 无码国精品一区二区免费蜜桃 | 日韩aa视频 | 亚洲国产日韩一区无码精品久久久 | 精品自拍偷拍视频 | 精品视频亚洲 | 亚洲视频一区在线播放 | 91色视频在线观看 | 国产在线精品观看 | 在线观看的黄色网址 | 色呦呦中文字幕 | 成人在线观看网址 | 欧美精品一区二区不卡 | 亚洲精品h | 大陆av片| 天天夜碰日日摸日日澡性色av | 诱惑の诱惑筱田优在线播放 | 黄色免费国产 | 国产女教师bbwbbwbbw | 91在线观看视频 |