Nguyên tắc thiết kế của các mạng VGG nĩi chung rất đơn giản: 2 hoặc 3 layers Convolution (Conv) và tiếp nối sau đĩ là 1layer Max Pooling 2D. Ngay sau Conv cuối cùng là 1 Flatten layer để chuyển ma trận 4 chiều của Conv layer về ma trận 2 chiều. Tiếp nối sau đĩ là các Fully-connected layers và 1 Softmax layer. Do VGG được training trên tập dữ liệu của ImageNet cĩ 1000 class nên ở Fully-connected layer cuối cùng sẽ cĩ 1000 units.
VGG19 tương tự như VGG16 nhưng cĩ thêm 3 lớp convolution ở 3 lớp conv cuối. VGG19 là một mơ hình mạng nơ ron tích chập với 19 lớp, được xây dựng bằng cách xếp chồng các kết hợp lại với nhau nhưng độ sâu của mơ hình bị hạn chế do một
59
vấn đề gọi là độ dốc giảm dần. Vấn đề này làm cho mạng lưới tích chập sâu khĩ đào tạo. Mơ hình được đào tạo trên ImageNet để phân loại 1000 loại đối tượng và các mơ hình cịn lại cũng được xem xét. [14]
VGG-16 và VGG 19. Cĩ 2 params chính các bạn cần lưu ý là include_top
(True / False): cĩ sử dụng các Fully-connected layer hay khơng và weights ('imagenet' / None): cĩ sử dụng pre-trained weights của ImageNet hay khơng.
# VGG 16
from keras.applications.vgg16 import VGG16
# Sử dụng pre-trained weight từ ImageNet và khơng sử dụng các Fully- connected layer ở cuối
pretrained_model = VGG16(include_top=False, weights='imagenet')
# VGG 19
from keras.applications.vgg19 import VGG19
# Khơng sử dụng pre-trained weight từ ImageNet và khơng sử dụng các Fully- connected layer ở cuối
pretrained_model = VGG19(include_top=False, weights=None)
2.3.2. Mạng Googlenet
Năm 2014, google publish một mạng neural do nhĩm research của họ phát triển cĩ tên là googleNet. Nĩ performance tốt hơn VGG, googleNet 6.7% error rate trong khi VGG là 7.3% Ý tưởng chính là họ tạo ra một module mới cĩ tên là inception giúp mạng traning sâu và nhanh hơn, chỉ cĩ 5m tham số so với alexnet là 60m nhanh hơn gấp 12 lần.
Inception module là một mạng CNN giúp training wider (thay vì thêm nhiều layer hơn vì rất dễ xảy ra overfitting + tăng parameter người ta nghĩ ra tăng deeper ở mỗi tầng layer) so với mạng CNN bình thường. Mỗi layer trong CNN truyền thống sẽ extract các thơng tin khác nhau. Output của 5x5 conv kernel sẽ khác với 3x3 kernel. Vậy để lấy những thơng tin cần thiết cho bài tốn của chúng ta thì nên dùng kernel
60
size như thế nào? Tại sao chúng sử dụng tất cả ta và sau đĩ để model tự chọn. Đĩ chính là ý tưởng của Inception module, nĩ tính tốn các kernel size khác nhau từ một input sau đĩ concatenate nĩ lại thành output. [12]