Kiến trúc các mạng CNN nổi tiếng - Phần 1 (Alex, LeNet, Inception, VGG ...)

cnn
inception
vgg16

#1

Kiến trúc các mạng CNN hay dùng hiện nay

Trong bài viết này, chúng ta sẽ thảo luận về một vài kiến trúc mạng CNN được dùng phổ biến. Như chúng ta thường thấy, hầu hết các mạng CNN đều được thiết kế theo nguyên tắc chung:

  • Sử dụng nhiều convolution layer chồng lên nhau
  • Giảm dần kích thước output mỗi tầng
  • Tăng dần số lượng feature map

Trong khi các mạng CNN trước đây hầu hết theo dạng chỉ đơn giản thiết kế theo lối nhiều lớp Convolution xếp chồng lên nhau thì nhiều mạng mới đây đã thiết kế sáng tạo hơn và cho kết quả hiệu quả hơn. Các kiến trúc mạng này đóng vai trò rất quan trọng, nên học và áp dụng thành thạo đối những học viên ML cho những nhiệm vụ cụ thể trong Computer Vision. Các mạng này được dùng nhiều trong việc tách các feature để phục vụ cho các nhiệm vụ chuyên biệt. (mình sẽ có 1 bài về transfer learning và fine turning)

Mạng truyền thống

LeNet-5

Được tạo ra bởi Yann Lecun năm 1998, để nhận diện chữ viết tay. Mô hình này là cơ sở thiết kế cho các mạng sau này.

Cấu trúc như hình vẽ

Tham số: 60.000

AlexNet

Được phát triển bởi Alex Krizhevsky năm 2012 trong cuộc thi ImageNet 2012

Kiến trúc tương đối giống với LeNet-5. Khác biệt ở điểm mạng này được thiết kế lớn hơn, rộng hơn Lượng Tham số: 60.000.000 (gấp 1000 lần LeNet-5 ) Kiến trúc như hình dưới đây:

VGG-16

Được phát triển năm 2014, là một biến thể sâu hơn nhưng lại đơn giản hơn so với kiến trúc convolution (từ gốc: convolutional structure) thường thấy ở CNN Kiến trúc như hình dưới, có thể thấy số mặc dù các tầng cao hơn được đơn giản hóa so với LeNet, AlexNet … thu gọn về kích thước nhưng số lượng lại lớn hơn, sâu hơn
Số lượng tham số: 138.000.000

Inception (GoogleLeNet)

Vào năm 2014, các nhà nghiên cứu của google đã đưa ra mạng Inception -> tham dự cuộc thi ImageNet 2014.

Mô hình này khá đặc biệt, không hoàn toàn là các tầng layer nối tiếp gối đầu lên nhau như các mạng trên. Mạng gồm các đơn vị gọi là “inception cell” (cái này mình nghĩ không nên dịch) - thực hiện convolution 1 input với nhiều filter khác nhau rồi tổng hợp lại, theo nhiều nhánh (branch).

Để tiết kiệm tính toán, các convolution kích thước 1x1 được sử dụng để giảm chiều sâu chanel của input (reduce the input channel depth). Với mỗi 1 cell, sử dụng các 1x1, 3x3, 5x5 filter để extract các feature từ input.
Dưới đây là dạng 1 cell.

Các nhà nghiên cứu đã thử thay các filter 3x3, 5x5 bằng các filter lớn hơn như 7x7, 11x11 . Có hiệu quả hơn về việc extract các feature, tuy nhiên đánh đổi lại là thời gian tính toán lâu hơn rất nhiều. Người ta cũng nhận ra rằng 1 filter 5x5 có thể thay bằng 2 filter 3x3 nối nhau, hiệu quả tương đương nhưng tiết kiệm được tính toán rất lớn.

Dưới đây là kiến trúc mạng Inception

Mạng được xây dựng từ việc ghép các inception cell lại với nhau.

Inception có một đặc điểm khá hay là có thêm 2 output phụ. Người ta tin rằng hai output phụ này không quá ảnh hưởng tới chất lượng của mạng trong khi train những epoch đầu. Nó giúp cho việc train diễn ra nhanh hơn khi tối ưu những layer đầu dựa vào các output phụ ( trong những epoch đầu). Có thể nghĩ đơn giản rằng trong những epoch đầu, các layer càng gần cuối càng ít được tối ưu ngay => chưa cần thiết phải tối ưu ngay. Sau một thời gian tối ưu các layer đầu rồi mới tối ưu các layer tiếp theo dựa vào final input. Việc này cải thiện khả năng tính toán và tốc độ train khá nhiều.

Hiện nay, Inception liên tục được cải tiến và đã cho ra nhiều phiên bản, Inception V1 (5 triệu tham số), Inception V3 (23 triệu tham sô), Inception V4,

Do bài viết đã dài nên mình sẽ giới thiệu thêm 4 mạng nữa trong phần 2 sắp tới. thank for watching <3


#2

Cảm ơn bro nhiều. Hóng part 2 <3


#3

Thank you bạn hiền <3


#4

Anh cho em hỏi , tác dụng của VGG16 là làm gì không ạ , em có tìm hiểu về text detection có sử dụng VGG16 nhưng em chưa biết tác dụng cụ thể , em mới học nên có gì chưa biết xin được bỏ quá cho ạ


#5

5x5 có thể thay bằng 2 filters 3x3 nối nhau, sẽ hiệu quả hơn. Hơn nữa thay thay 3x3 bằng 2 filters 3x1 với 1x3 nối nhau còn hiệu quả hơn. Có rất nhiều thứ hay ho để biết inception :v


#6

Cảm ơn bạn đã bổ sung :blush:


#7

à anh ơi tiện cho em hỏi, em đang tìm hiểu về mạng CNN, thí dụ ở mang VGG-16, anh có thể giải thích cho em size của filter kiểu như 224 x 224 x 64, 112 x 112 x 128, 56 x 56 x 256 thì các thông số đó cụ thể là số thứ ba như (64,128,256) nghĩa là gì vậy ạ, em cảm ơn!


#8

Mấy số đó là các filters


#9

224 x 224 x 64 không phải size của filter nhé, đó là kích thước của output sau filter , tưởng tượng thế này, ảnh của bạn có kích thước là 224 x 224 x 3 ( 3 là 3 chanel RGB ) , sau khi dùng 64 tấm filter có kích thước là 2 x 2 x 3, stride=2 => output sẽ là 112 x 112 x 64 . Hiểu nôm na là như thế :3


#10

da em hieu roi, thank you anh nhieu :smiley:


#11

Bạn có thể cho link bài báo nói về cái này không?


#12

Thanks chủ topic vì bài viết hay, mình có một comment nhỏ: hình minh họa cho AlexNet hình như có vấn đề (layer cuối; có lẽ hình này là hình bạn trích trong một paper nào đó, và paper đó customize AlexNet cho mục đích của họ), đây cũng không phải là hình được lấy trong paper gốc. Mình nghĩ sẽ tốt hơn nếu như bạn thay nó bằng hình ở trong paper ban đầu ( Krizhevsky, A.; Sutskever, I.; and Hinton, G. E. 2012. Imagenet classification with deep convolutional neural networks. NIPS.)


#13

mãi chưa có part 2 nhỉ.