Densenet la gì

A Dense Block is a module used in convolutional neural networks that connects all layers (with matching feature-map sizes) directly with each other. It was originally proposed as part of the DenseNet architecture. To preserve the feed-forward nature, each layer obtains additional inputs from all preceding layers and passes on its own feature-maps to all subsequent layers. In contrast to ResNets, we never combine features through summation before they are passed into a layer; instead, we combine features by concatenating them. Hence, the $\ell^{th}$ layer has $\ell$ inputs, consisting of the feature-maps of all preceding convolutional blocks. Its own feature-maps are passed on to all $L-\ell$ subsequent layers. This introduces $\frac{L(L+1)}{2}$ connections in an $L$-layer network, instead of just $L$, as in traditional architectures: "dense connectivity".

Source: Densely Connected Convolutional Networks

Densenet la gì

Papers


PaperCodeResultsDateStars

Tasks


Usage Over Time


This feature is experimental; we are continuously improving our matching algorithm.

Categories

Image classification có lẽ là bài toán đầu tiên được giải quyết bằng deeplearning. Các mô hình nổi tiếng như: ResNet, Alexnet, LeNet, VGG, Inception, R-CNN, Fast/Faster RCNN, … Tôi sẽ không trình bày về các thành phần cơ bản như CNN, MaxPooling, ReLU… mà sẽ phân tích các kiến trúc mạng và các kĩ thuật đã được sử dụng.

1. LeNet (1998)

LeNet được Yann LeCun phát triển vào năm 1998. Cấu trúc gồm 2 layer (Convolution + MaxPooling và 2 layer fully connected cùng output layer là softmax.

Input: 28x28x3
Layer 1:
Convolution layer: kernel 5x5x3, stride=1, no padding, num_filters=6, output=28x28x6
MaxPooling layer: size 2×2, stride=2, padding=”same”, output=14x14x6
Layer 2:
Convolution layer: kernel 5x5x6, stride=1, no padding, filters=16, output=10x10x16
MaxPooling layer: size 2×2, stride=2, padding=’same’, output=5x5x16
Flatten: 5x5x16=400
Fully connected 1: output = 120
Fully connected 2: output = 84
Softmax: output = 10

Nhược điểm của LeNet là mạng còn đơn giản và sử dụng activation function là sigmoid nên tính toán chậm.

2. AlexNet (2012)

AlexNet là mạng CNN giành chiến thắng trong cuộc thi ImageNet LSVRC-2012 với kết quả 15.3% VS 26.2% error rates. Mạng AlexNet khá lớn với 60 triệu tham số và có một số đặc điểm.

  • Sử dụng ReLU thay cho Sigmoid để tăng tính phi tuyến và tính nhanh hơn 6 lần.
  • Sử dụng dropout như một phương pháp chống overfitting và giảm thời gian huấn luyện mô hình.
  • Sử dụng Overlap Pooling để giảm size của network
  • Sử dụng Localresponse normalization để chuẩn hóa sau mỗi layer
  • Sử dụng Data augmentation để tăng cường dữ liệu bằng các phép biến đổi
  • Sử dụng SGD với learning rate = 0.01, momentum = 0.9, weight decay=0.0005.

Architect của Alexnet gồm 5 convolutional layer và 3 fully connection layer. Activation Relu được sử dụng sau mỗi convolution và fully connection layer. Detail architecter với dataset là imagenet size là 227x227x3 với 1000 class ( khác với trong hình trên size là 224×224):

Input shape 227x227x3.

Layer 1 :
Conv 1 : kernel : 11x11x3,stride = 4,no padding, number = 96,activation = relu,output = 55x55x96.
Maxpooling layer : pooling size = 3×3,stride = 2,padding =”same” ,output = 27x27x96.
Normalize layer.
Layer 2 :
Conv 2 : kernel :3x3x96,stride = 1, padding = “same”, number filter = 256,activation = relu,output = 27x27x256.
Maxpooling layer : pooling size = 3×3,stride=2, padding =”same”,output = 13x13x256.
Normalize layer.
Layer 3:
Conv 3 : kernel :3x3x256, stride = 1,padding=”same”, number filter = 384, activation = relu, output = 13x13x384.
Layer 4:
Conv 4 : kernel : 3x3x384 , stride = 1, padding = “same”, number filter = 384, activation= relu, output = 13x13x384
Layer 5 :
Conv 5 : kernel 3x3x384, stride = 1, padding = “same”, number filter = 256, activation = relu, output = 13x13x256.
Pooling layer : pooling size = 3×3,stride =2,padding =”same”,output = 6x6x256.
Flatten 256x6x6 = 9216
Fully connected layer 1 : activation = relu , output = 4096 + dropout(0.5).
Fully connected layer 2 : activation = relu , output = 4096 + dropout(0.5).
Fully connected layer 3 : activation = softmax , output = 1000 (number class)

3. VGGNet (2014)

VGGNet ra đời với một vài cải tiến tốt hơn như

  • Model deep hơn
  • Thay đổi thứ tự Conv, các mô hình trước đều dùng Conv-Pooling nhưng VGG sử dụng một chuỗi Conv-Conv-Conv liên tiếp ở giữa và cuối của model. Việc này làm tính toán lớn hơn nhưng thông tin giữ được nhiều hơn.
  • Sử dụng kernel 3×3 so với 11×11 ở AlexNet. Kết hợp 2 conv 3×3 cho hiệu quả hơn 1 Conv 5×5 về inception field giúp mạng sâu hơn mà còn giảm số tham số
  • 3 Conv 3×3 có inception field như 1 conv 7×7

VGG có 2 phiên bản VGG16 và VGG19 với chi tiết như bảng bên dưới:

4. GoogleNet(2014)

Đây là mạng của Google phát triển cho kết quả tốt hơn so với VGG (6.7% vs 7.3 % error rate). Ý tưởng mới là sử dụng một module mới là inception giúp mạng train nhanh hơn và sâu hơn chỉ với 5 triệu tham số.

Trong GoogleNet người ta dùng Conv 1×1 với 2 mục đích là giảm tham số và giảm số chiều. Giảm số chiều tức là với đầu vào 28x28x100 khi đi qua Conv 1×1 với filters=10 sẽ cho đầu ra 28x28x10. Giảm tham số tính toán ví dụ:

  • Input 28x28x192 qua kernel 5×5, filters=32, padding=’same’ thì cho output là 28x28x32 và số tham số (5x5x192)x(28x28x32) ~ 120M.
  • Input 28x28x192 qua kernel 1×1, filters=16, padding=’same’ thì cho output là 28x28x16, tiếp tục qua Conv 5x5x32 cho đầu ra 28x28x32 và số tham số (5x5x192)x16 + (28x28x32)*(5x5x16) ~ 12.4M.

Inception hiện tại có tới 4 phiên bản. Ta sẽ đi tìm hiểu từng phiên bản:

Inception v1: có 2 dạng là naive và dimension reduction. Điểm khác biệt là có hay không có sử dụng thêm Conv 1×1.

Inception v2: cải thiện so với v1 bằng cách thêm Batch nomalization layer và giảm internal covariance shift. Đầu ra ở mỗi layer sẽ được chuẩn hóa về phân phối Gaussian chuẩn. Conv 5×5 được thay thế bằng 2 Conv 3×3 giúp giảm chi phí tính toán

Inception v3: thay thế các Conv 7×7 thành Conv 1×7 và 7×1, Conv 3×3 thành Conv 1×3 và 3×1. Điều này giúp tăng tốc độ tính toán và model sâu hơn

Inception v4: là sự kết hợp của Inception và ý tưởng trong Resnet.

5. ResNet(2015)

ResNet được phát triển bởi Microsoft và chiến thắng cuộc thi ImageNet ILSVRC 2015 với error rate 3.57%. Resnet có kiến trúc mạng rất sâu như 34, 55, 101, 151. Với module Residual giúp cho dễ dàng tạo các mạng với hàng trăm layer.

Đối với DL model đều bị 2 vấn đề: mạng quá sâu sẽ làm gradien vanishing ( có thể giải quyết bằng thêm Batch normalization layer) và model saturated. Model saturated là do việc thêm nhiều layer vào mà vẫn không học được thông tin mới để nâng cao độ chính xác.

Residual block cho phép skip layer bằng cách thêm connection với layer trước nó. Thay vì tính như thông thường thì với việc thêm input vào sẽ giúp cho sinh ra một thay đổi nhỏ trong model đồng thời phép tích đạo hàm trong bước backward cũng dễ dàng vì chỉ là phép cộng.

Kiến trúc mạng của ResNet như hình dưới

6. DenseNet (2016)
Mạng DenseNet là một bước phát triển tiếp theo của DL trong Computer vision. Kiến trúc DenseNet gần giống ResNet nhưng có một vài điểm khác biệt. DenseNet gồm các khối Dense-block và transition layer như hình vẽ.

Một khối Dense-block là một nhóm các layers kết nối tới tất cả các layer trước nó. Một layer bao gồm:

  • Batch normalization
  • ReLU activation
  • 3×3 Conv

Các tác giả thấy rằng việc sử dụng pre-activation (BN và ReLU trước Conv) hiệu quả hơn so với post-activation. Không giống như ResNet, DenseNet ghép tất cả các feature map lại với nhau. Mặt khác không thể ghép khi feature map khác kích thước. Do đó trong các Dense block, feature map ở mỗi layer có cùng kích thước.

Tuy nhiên việc downsampling vốn do CNN thực hiện. Trong DenseNet sẽ do các transition layer đảm nhiệm. Kiến trúc gồm

  • Batch normalization
  • 1×1 Conv
  • 2×2 Average pooling

Cần chú ý một điểm đó là do phép ghép feature map làm cho đầu ra có rất nhiều chiều. Ví dụ nếu layer H_1 cho k feature maps thì tổng quát tới layer thứ l sẽ có k_0 + k * (l — 1). Tham số k được gọi là growth rate.
DenseNet có một số dạng như sau

DenseNet standard:

DenseNets-B: là dạng chuẩn, sử dụng 1×1 Conv để giảm kích thước feature map trước khi đưa vào 3×3 Conv. Chữ B chính là Bottleneck trong mạng ResNet.

  • Batch Normalization
  • ReLU activation
  • 1×1 Convolution bottleneck producing: grow rate∗4grow rate∗4 feature maps.
  • Batch Normalization
  • ReLU activation
  • 3×3 Convolution

DenseNets-BC: là một sự cải tiến của DenseNets-B trong đó giảm bớt số lượng feature maps. Hệ số theta được sử dụng để khống chế số lượng feature maps = theta * m.

Kiến trúc của mạng DenseNet như trong hình.

Tổng kết
Các model deep learning cho bài toán Image Classification đã phát triển trong nhiều năm và vượt qua khả năng của con người. Hiện tại các nghiên cứu sẽ tấn công các bài toán khác của Computer vision hoặc tìm cách giảm số lượng tham số Model Compression để giảm chi phí và thời gian tính toán.

Độ chính xác các model tới năm 2017