The segmented dataset is partitioned for training and testing purpose for CNNs. The same is used to train the proposed CNN. Transfer Learning is employed for the pre-trained CNNs. The architecture of used CNNs is explained as follows:
VGG-16
VGG − 16 is a widely used CNN for classification of medical images. It is pre-trained on subset of ImageNet database. It consists of 21 layers in total, starting from Convolutional layers combined with maxpooling layers and in last followed by dense layers. The number of covolutional layers, maxpooling layers and dense layers are 13,5 and 3 respectively. It has approximately 138 million parameters contained in 16 weight associated layers.
DenseNet
DenseNet is a deep Convolutional network which focuses on deeper CNN learning. It consists of dense blocks and transition layers. The dense blocks perform a combined function of batch normalization function (BN), rectified linear function (ReLU) and convolution function (conv). The transition layer performs downsampling via convolution and pooling operations. To summarize, DenseNet has 120 convolution layers and 4 average pooling layers.
Proposed CNN
A 20 layer CNN is proposed to classify normal and DME eye OCT scan. The proposed CNN model consists of 5 convolution layers, 5 maxpooling layers, 5 dropout layers, 1 flatten layer followed by 3 dense layers. The architecture of proposed CNN is given in table I. All convolutional layers have ReLU activation. The optimizer used is ADAMAX. Learning rate for CNN was chosen to be 0.001. There are 29202 total parameters and the trainable parameters are 29202. The dropout is fixed at 0.20.
Table I: Proposed CNN architecture
Sr. No.
|
Layer (type)
|
Output shape
|
Parameters
|
1
|
Input layer
|
( 128,128,3)
|
0
|
2
|
conv2d (Conv2D)
|
(128, 128, 32)
|
416
|
3
|
max_pooling2d (MaxPooling2D)
|
( 64, 64, 32)
|
0
|
4
|
dropout (Dropout)
|
( 64, 64, 32)
|
0
|
5
|
conv2d_1 (Conv2D)
|
( 64, 64, 16)
|
2064
|
6
|
max_pooling2d_1 (MaxPooling2D)
|
( 32,32, 16)
|
0
|
7
|
dropout_1 (Dropout)
|
( 32,32, 16)
|
0
|
8
|
conv2d_2 (Conv2D)
|
( 32,32, 16)
|
1040
|
9
|
max_pooling2d_2 (MaxPooling2D)
|
( 16,16, 16)
|
0
|
10
|
dropout_2 (Dropout)
|
( 16,16, 16)
|
0
|
11
|
conv2d_3 (Conv2D)
|
( 16,16, 8)
|
520
|
12
|
max_pooling2d_3 (MaxPooling2D)
|
( 8, 8, 8)
|
0
|
13
|
dropout_3(Dropout)
|
( 8, 8, 8)
|
0
|
14
|
conv2d_4 (Conv2D)
|
( 8, 8, 8)
|
264
|
15
|
max_pooling2d_4 (MaxPooling2D)
|
( 4, 4, 8)
|
0
|
16
|
dropout_4(Dropout)
|
( 4, 4, 8)
|
0
|
17
|
flatten (Flatten)
|
( 128)
|
0
|
18
|
dense (Dense)
|
( 128)
|
16512
|
19
|
dense_1 (Dense)
|
( 64)
|
8256
|
20
|
dense_2(Dense)
|
( 2)
|
130
|