Tìm Hiểu Mạng MobileNetV1

Trong bài viết này, chúng ta sẽ tìm hiểu mô hình MobileNetV1 từ nhóm tác giả đến từ Google. Điểm cải tiến (chắc là cải tiến :) của mô hình là sử dụng một cách tính tích chập có tên là Depthwise Separable Convolution để giảm kích thước mô hình và giảm độ phức tạp tính toán. Do đó, mô hình sẽ hữu ích khi chạy các ứng dụng trên di động và các thiết bị nhúng.

Lý do:

  • Mô hình có ít tham số hơn -> kích thước model sẽ nhỏ hơn.

  • Mô hình có ít phép tính cộng trừ nhân chia hơn -> độ phức tạp sẽ nhỏ hơn.

Hiện tại (2019-05-26), tại thời điểm viết bài, bài viết gốc của tác giả đã được 1594 lượt trích dẫn. Các bạn có thể tìm đọc bài báo gốc của tác giả tại trang https://arxiv.org/abs/1704.04861

Hình ảnh Số lượt trích dẫn bài báo MobileNets Efficient Convolutional Neural Networks for Mobile Vision Applications

Chi tiết về mạng MobileNet

Mô hình kiến trúc

Kiến trúc mạng MobileNet được trình bày bên dưới. Hình bên dưới được trích từ bài báo gốc của tác giả

Hình ảnh Mô hình kiến trúc mạng MobileNet

Diễn dịch ra ngôn ngữ tự nhiên, chúng ta thấy rằng mô hình có 30 lớp với các đặc điểm sau:

  • Lớp 1: Convolution layer với stride bằng 2

  • Lớp 2: Depthwise layer

  • Lớp 3: Pointwise layer

  • Lớp 4: Depthwise layer với stride bằng 2 (khác với bước 2, dw lớp 2 có stride size bằng 1)

  • Lớp 5: Pointwise layer

  • Lớp 30: Softmax, dùng để phân lớp.

Depthwise Separable Convolution

Depthwise separable convolution là một depthwise convolution theo sau bởi một pointwise convolution như hình bên dưới:

Hình ảnh Cấu trúc của một Depthwise Separable Convolution

  • Depthwise convolution: là một channel-wise DK×DK spatial convolution. Ví dụ ở hình trên, ta có 5 channels (các bạn để ý cục đầu tiên có 5 khối hộp, cục thứ 2 là phân tách 5 khối hộp ra thành ma trận mxn, cục thứ 3 là spatial convolution có kích thước kxk, cục thứ 4 là kết quả sau khi convolution, cục thứ 5 là ráp 5 cái kết quả của convolution lại ), do đó chúng ta sẽ có 5 DK×DK spatial convolution tương ứng với 5 channel trên.

  • Pointwise convolution: đơn giản là một convolution có kích thước 1x1 (như hình ở trên).

Với M là số lượng input channel, N là số lượng output channel, Dk là kernel size, Df là feature map size (với dataset ImageNet thì input có kích thước là 224, do đó feature map ban đầu có Df = 224), chúng ta có thể tính được:

Chi phí tính toán của Depthwise convolution là :

$$D_k \cdot D_k \cdot M \cdot D_f \cdot D_f$$

Chi phí tính toán của Pointwise convolution là :

$$M \cdot N \cdot D_f \cdot D_f$$

Tổng chi phí tính toán của Depthwise Separable Convolution là:

$$D_k \cdot D_k \cdot M \cdot D_f \cdot D_f + M \cdot N \cdot D_f \cdot D_f$$

Nếu chúng ta không sử dụng Depthwise Separable Convolution mà sử dụng phép convolution như bình thường, chi phí tính toán là

$$ D_k \cdot D_k \cdot M \cdot N \cdot D_f \cdot D_f$$

Do đó, chi phí tính toán sẽ giảm:

$$\frac{D_k \cdot D_k \cdot M \cdot D_f \cdot D_f + M \cdot N \dot D_f \cdot D_f}{D_k \cdot D_k \cdot M \cdot N \cdot D_f \cdot D_f} = \frac{1}{N} + \frac{1}{D^2_k}$$

Giả sử, chúng ta chọn kernel size Dk = 3, chúng ta sẽ giảm từ 8 đến 9 lần phép tính nhân => giảm chi phí tính toán đi rất nhiều.

Một chú ý nhỏ về kiến trúc ở đây, là sau mỗi convolution MobileNet sẽ sử dụng Batch Normalization (BN) và ReLU như hình bên dưới:

Hình ảnh Standard Convolution bên trái, Depthwise separable convolution với BN và ReLU bên phải

So sánh kết quả của việc sử dụng mạng 30 layer sử dụng thuần Convolution và mạng 30 layer sử dụng Depthwise Separable Convolution (MobileNet) trên tập dữ liệu ImageNet, chúng ta có bảng kết quả bên dưới

Hình ảnh Standard Convolution bên trái, Depthwise separable convolution với BN và ReLU bên phải

MobileNet giảm 1% độ chính xác, nhưng số lượng tham số của mô hình và số lượng phép tính toán giảm đi rất rất nhiều, gần xấp xỉ 90%. Một con số đáng kinh ngạc.

Làm mô hình gọn nhẹ hơn nữa

Với mong muốn làm mô hình gọn nhẹ hơn nữa, nhóm tác giả đã thêm vào hai tham số alpha và rho.

Tham số alpha: Điều khiển số lượng channel (M và N).

Chi phí tính toán của depthwise separable convolution khi sử dụng thêm tham số alpha.

$$D_k \cdot D_k \cdot \alpha M \cdot D_f \cdot D_f + \alpha M \cdot \alpha N \cdot D_f \cdot D_f$$

Giá trị alpha nằm trong đoạn [0,1], nhóm tác giả set giá trị alpha có bước nhảy là 0.25, các giá trị cần xét là 0.25, 0.5, 0.75, 1. Trường hợp alpha = 1 chính là mạng MobileNet baseline của mình. Trong trường hợp thay đổi alpha, số phép tính toán, số tham số, cũng giảm đi rất nhiều, và tất nhiên, độ chính xác cũng giảm đi tương ứng.

Hình ảnh Mạng MobileNet với alpha thay đổi

Phân tích kỹ hình ở trên, ta thấy rằng với alpha bằng 0.75 và 0.5 giá trị độ chính xác còn nằm ở mức miễn cưỡng có thể chấp nhận được. Nhưng với alpha bằng 0.25 thì khó mà có thể chấp nhận được kết quả đó. Việc giảm phép tính toán và số lượng tham số dẫn đến kết quả tệ như trên quả là một điều không nên. Mình nghĩ ở đây nhóm tác giả để con số để có ý nghĩa so sánh.

Tham số rho: Tham số này được sử dụng để điều khiển độ phân giải của ảnh input.

Chi phí tính toán của depthwise separable convolution khi sử dụng thêm tham số rho.

$$D_k \cdot D_k \cdot \alpha M \cdot \rho D_f \cdot \rho D_f + \alpha M \cdot \alpha N \cdot \rho D_f \cdot \rho D_f$$

Giá trị rho cũng nằm trong đoạn [0,1]. Nhóm tác giả sử dụng các giá trị độ phân giải là 224 (độ phân giải gốc, tương ứng với rho =1), 192, 160, 128.

Hình ảnh Mạng MobileNet với rho thay đổi

Giá trị độ chính xác thay đổi theo hướng giảm khá mượt. Việc thay đổi rho chỉ làm giảm số lượng phép tính toán, không làm giảm số lượng tham số. Việc giảm độ chính xác có thể lý giải lý do là có một số hình có kích thước nhỏ nên khi giảm kích thước sẽ làm mất những đặc trưng cần thiết của đối tượng cần xét.

So sánh MobileNet với các State-of-the-art đương thời

Khi so sánh 1.0 MobileNet-224 với GoogleNet và VGG 16 (hình bên dưới), chúng ta thấy rằng độ chính xác của cả 3 thuật toán là hầu như tương đương nhau. Nhưng 1.0 MobileNet-224 có số lượng tham số ít (75% so với GoogleNet) và số lượng phép toán nhỏ hơn rất nhiều => chạy nhanh hơn.

Hình ảnh So sánh 1.0 MobileNet-224 với GoogleNet và VGG 16 trên tập ImageNet

Với mô hình 0.50 MobileNet-160, chúng ta có thể so sánh với mô hình Squeezenet và AlexNet (mô hình thắng giải nhất cuộc thi ILSVRC 2012). Một lần nữa, mô hình 0.50 MobileNet-160 cho kết quả tốt hơn, nhưng có số lượng phép tính toán ít hơn rất nhiều (hơi đáng buồn là số lượng tham số của mô hình 0.50 MobileNet-160 khá cao, số lượng tham số gấp đôi so với AlexNet và gần bằng Squeezenet) => 0.50 MobileNet-160 train nhanh hơn, predict cũng nhanh hơn so với Squeezenet và AlexNet, nhưng tốn bộ nhớ RAM hơn.

Hình ảnh So sánh 0.50 MobileNet-160 với Squeezenet và AlexNet trên tập ImageNet

So với mô hình Inception-v3 (mô hình thắng giải nhất cuộc thi ILSVRC 2015), MobileNet cho kết quả khá tốt, nhưng số tham số và số lượng phép tính toán nhỏ hơn rất nhiều

Hình ảnh So sánh Mobile net và Inception-v3 trên tập Stanford Dog

Các thí nghiệm ở dưới trên các tập dataset khác nhau chứng minh mức độ hiệu quả của MobileNet Hình ảnh GPS Localization Via Photos

Hình ảnh Face Attribute Classification

Hình ảnh MMicrosoft COCO Object Detection Dataset

Hình ảnh Face Recognition

Kết luận

MobileNet cho kết quả tốt ngang ngữa các state-of-the-art thắng giải nhất ở quá khứ, nhưng với mô hình có số lượng tham số nhỏ hơn và số phép tính toán ít hơn. Điều này đạt được là nhờ vào việc sử dụng Depthwise Separable Convolution.

Cảm ơn các bạn đã theo dõi bài viết, có chỗ nào bạn chưa rõ hoặc mình viết bị sai, các bạn vui lòng để lại comment để mình sửa lại cho đúng.

Comments