基於AlexNet和Inception模型思想的TFCNet模型設計與實現

就是求關注發表於2020-12-19

摘要

為了提高卷積神經網路解決圖片分類問題的準確率及深度模型的訓練速度,受AlexNet和Inception模組的啟發,我們基於AlexNet模型的深度結構及Inception模型的寬度結構(特徵的連結)設計實現了具有特徵連結操作的深度神經網路模型,我們稱之為Tensor Feature Concatenate base on Convolutional Neural Networks(簡稱為TFCNet)。我們在ImageNet dataset資料集自構建資料上進行了測試,實驗結果顯示,相比於VGG-16、AlexNet、ResNet、Inception模型的60.50 % 、68.50 %、 58.85 %、 67.55 %。TFCNet模型取得了 69.55 %的實驗結果。

資料集描述

ImageNet 是美國史丹佛的電腦科學家,模擬人類的識別系統建立的一個計算機視覺系統識別專案, 是目前世界上影像識別最大的影像識別應用資料庫。我們抽取其中:“考拉”,“瓢蟲”,“地衣”,“貓鼬”,“羅得西亞脊背龍”,“ 食蟻獸”,“ 維希拉獵犬”,“約克夏犬”等8個動物類別進行構建資料集,每個動物類別1500張圖片。

由於所有影像的大小都不同,因此我們採用如下程式碼對資料進行壓縮處理將圖片生成大小為n x n的正方形影像。

實現程式碼:

n=128
img = cv2.imread('imagenet/koala/218758752_650f6b9b5a.jpg')
if(img.shape[0]>img.shape[1]):
    width = n
    height = int(img.shape[0] * (n/img.shape[1]))
    img = cv2.resize(img,(width,height))
else:
    width = int(img.shape[1] * (n/img.shape[0]))
    height = n
    img = cv2.resize(img,(width,height))
if(img.shape[0]==n):
    x = int((img.shape[1]-n)/2)
    img = img[0:,x:x+n]
else:
    x = int((img.shape[0]-n)/2)
    img = img[x:x+n,0:]
 

 資料集描述:

     標籤     訓練集個數    測試集個數
    考拉        1200        300
    瓢蟲        1200        300
    地衣        1200        300
     貓鼬        1200        300
   脊背龍        1200        300
  食蟻獸        1200        300
  維希拉獵犬        1200        300
 約克夏犬        1200        300
    總計         9600        2400

模型設計思路

 思想來源一:AlexNet模型

AlexNet:卷積卷積池化結構

 打破卷積必池化的思維定式,使用層疊的卷積層,即卷積層+卷積層+池化層來提取影像的特徵。

思想來源二:Inception模組

Inception:多特徵連結操作

 

新的模型設計:

TFCNet模型

模型不同之處:

1.第二層卷積之後緊跟第三層最大池化操作。

2.第五層最大池化之後,緊跟類似於Inception模組的設計。該處的設計不同於原始Inception V1、V2等操作。

3. 在第八層特徵連結之後,在第九層上直接採用dorpout防止模型的過擬合,該層之後的輸出在進行卷積操作,卷積操作之後引入Batch Normalization方法。

實現程式碼:

input_layer = Input(shape=(n, n, 3))
m = Conv2D(96,kernel_size=(11,11),strides=(4,4),kernel_initializer=kernel_init, bias_initializer=bias_init,padding="valid", activation="relu")(input_layer)
m = MaxPooling2D(pool_size=(3,3),strides=(2,2))(m)
m = Conv2D(256, kernel_size=(5,5), padding="same",strides=(1,1), activation="relu")(m)
m = MaxPooling2D(pool_size=(3,3),strides=(2,2))(m)
m = inception_module(m, 160, 112, 224, 24, 64, 64)
m = Dropout(0.3)(m)
m = Conv2D(384, kernel_size=(3,3), padding="same", strides=(1,1), activation="relu")(m)
m = BatchNormalization()(m)
m = Conv2D(256, kernel_size=(3,3), padding="same", strides=(1,1), activation="relu")(m)
m = inception_module(m, 128, 128, 256, 24, 64, 64) 
m = Dropout(0.5)(m)
m = inception_module(m, 128, 128, 256, 24, 64, 64) 
m = Conv2D(256, kernel_size=(3,3), padding="same", strides=(1,1), activation="relu")(m)
m = MaxPooling2D(pool_size=(3,3),strides=(2,2))(m)
m = Flatten()(m)
m = Dense(4096,activation="relu")(m)
m = Dense(4096,activation="relu")(m)
m = Dense(units=len(classes), activation="softmax", name = "OUTPUT")(m)

實驗結果分析

對比模型結構

因為為了縮短訓練時間,對相關模型進行了簡化(但是儘量保持複雜的、深度相似)。下面給出具體簡化方式:

類似VGG-16模型:inputlayer->conv->conv->maxpooling->conv->conv->maxpooling->conv->conv->conv->maxpooling->conv->conv->conv->maxpooling->flatten->Dense->Dense->softmax

類似AlexNet模型:https://haosen.blog.csdn.net/article/details/111397142(可以在此部落格查閱)

類似ResNet模型:採用四個殘差塊。如下結構:

layer = Conv2D(32, (3,3), padding='same', activation='relu', kernel_initializer='he_normal')(visible) #reduced the filtersize from 32 to 8
layer = residual_module(visible, 64) #First stack
layer = residual_module(layer, 128) #Second stack
layer = residual_module(layer, 256) #Third stack
layer = residual_module(layer, 512) #Fourth stack
layer = AveragePooling2D((5,5),strides=5)(layer) #Average Pooling layer
layer = Flatten()(layer)
layer = Dense(200, activation='relu')(layer) #FC layer with 200
layer = Dense(len(classes), activation='softmax', name='OUTPUT')(layer)

類似Inception V1模型結構:https://haosen.blog.csdn.net/article/details/111396283(可以在此部落格查閱)

TFCNet模型:如模型設計思路所描述。

實驗結果對比

                      模型                      準確率
            簡化VGG-16模型                      60.50 %
            簡化AlexNet模型                      68.50 % 
            簡化ResNet模型                      58.85 %
            簡化Inception VI模型                      67.78 %
                TFCNet模型                       69.55 %

TFCNet模型訓練結果圖:

總結

我們可以看到,雖然TFCNet模型模型取得了較好的實驗結果,但是優勢並不明顯。其越淺的AlexNet模型在資料集上的表現就越好,這有很多原因,可能是資料集不夠多和豐富,所以不需要那麼複雜的模型結構。也可能是裁剪影像對資料的降維處理導致資料影像明顯變小,其中某些有價值的特徵資訊丟失,造成資料集不完整。儘管從裁剪的影像上仍舊可以捕獲很多的特徵,但在某些情況下,被丟棄的影像部分可能包含比預期更多的特徵資訊。因此,下一步可以提高準確率的方法為兩個:1是增大資料集,同時加強資料集的質量。2是對TFCNet進行更進一步的優化。

參考文獻

1. ImageNet: A Large-Scale Hierarchical Image Database

2. Smirnov E A , Timoshenko D M , Andrianov S N . Comparison of Regularization Methods for ImageNet Classification with Deep Convolutional Neural Networks[J]. AASRI Procedia.

3. Russakovsky O , Deng J , Su H , et al. ImageNet Large Scale Visual Recognition Challenge[J]. International Journal of Computer Vision, 2015, 115(3):211-252.

4. https://haosen.blog.csdn.net/article/details/105822437

5.https://haosen.blog.csdn.net/article/details/109522179

相關文章