CHƯƠNG 1: TỔNG QUAN VỀ SỰ KẾT HỢP GIỮA MẠNG CNN VÀ LSTM 1. Tổng quan về mạng CNN (Convolutional Neural Network) 1. Tổng quan về mạng CNN Convolutional Neural Network (CNN) được hiểu là Mạng neural tích chập được sử dụng nhiều trong các mô hình computer vision và các bài toán deep learning hay mạng neural. Một số ứng dụng của CNN liên quan đến computer vision bao gồm phân loại ảnh (image classification), phân vùng hình ảnh (image semantic segmentation), nhận dạng vật thể (object detection) trong hình ảnh hoặc video, phân tích hình ảnh … 1.
Định nghĩa về Convolution Convolution hay tích chập chính là phép Element-wise multiplication giữa ma trận con của tập dữ liệu X với các sliding window (cửa sổ trượt) còn được gọi là kernel, filter hoặc feature detect (W). Operator là thực hiện hành động trên các Sliding Window lần lượt trên các ma trận con của X có cùng kích thước với W. Kết quả của phép tính này thu được một layer Y có các đặc trưng của X. Dữ liệu X đầu vào thường là dạng ảnh hoặc tập hợp ảnh (video) là dạng tensor hai chiều có 3 ma trận channel màu red, green, blue chồng lên nhau.
14 Hình 1: Hình ảnh là một tensor có 3 chiều Về mặt ký hiệu của phép convolution: Y= X * W Trong đó: Y là tensor (hoặc matrix) kết quả sau khi thực hiện convolution X là tensor (matrix) đầu vào W là filter (hoặc kernel) của biểu thức Công thức tổng quát của phép toán convolution là: Với layer là một convolution layer, thì hình dạng (shape) của layer mà một tensor tuân theo quy luật sau, trích từ: 2 �−1 �−1 �−1 - Input: �ℎ × �� × �� � � � - Output: �ℎ × �� × �� �−1 �−1 � �� +2� � −� � � �� +2� � −� � - Trong đó: �� = +1; �� = + 1 (*) �� �� - Với: �� = ����ℎ, �ℎ = ℎ���ℎ�, �� = ����� �� �ℎ������ - � � = ������ ���� �� ������ - � � = ������� - � � = ������ 2 Theo https://cs231n.io/convolutional-networks/#overview 15 1. Kernel Kernel (hay còn được gọi là filter) là một ma trận vuông có kích thước trong đó là một số lẻ3 Còn filter là một tensor ba chiều gồm n kernel với số chiều dữ liệu đầu vào. Ví dụ: trong xử lý hình ảnh màu, với hệ màu RGB được biểu diễn thành ba giá trị (red, green, blue) thì được quy đổi tương ứng thành ba channel ứng với 3D của filter. Trong mạng neural tích chập (Convolutional neural network), kernel được sử dụng để trích xuất các đặc điểm (features) hữu ích từ dữ liệu (hình ảnh, âm thanh,.
Kernel di chuyển trên dữ liệu đầu vào, thực hiện phép convolution với vùng của dữ liệu có cùng kích thước với kernel. Một số loại kernel thường được sử dụng với một số mục đích khác nhau như: làm mờ ảnh, làm nét ảnh, xác định các vân sáng trên hình ảnh, … 1. Padding và stride Trong công thức convolution, nếu không có padding (p), thì kết quả output Y thu được sẽ có số chiều giảm đi với kích thước của input X. Vì vậy, padding được thêm vào nhằm mục đích giữ nguyên số chiều của output để phù hợp cho các mục đích phân tích.
Cách giải quyết thường là thêm các phần tử ở viền ngoài của dữ liệu input X. Hình 2: Ví dụ minh họa việc sử dụng padding trong phép toán convolution4 3 Khi kernel là một ma trận kích thước lẻ, đơn vị chính giữa sẽ là đơn vị mục tiêu để triết xuất đặc trưng. Việc sử dụng kernel chẵn sẽ dẫn đến tình trạng output không thể kiếm soát kích thức và về mặt logic gây ra nhiễu cho output. 4 Nguồn: https://ayeshmanthaperera.com/what-is-padding-in-cnns-71b21fb0dd7 16 Việc lựa chọn kích cỡ của padding còn dựa vào kích thước của giá trị W và giá trị đầu vào.
Nếu không sử dụng stride, thì padding sẽ được tính: 5 với f = kích thước của kernel. Ngược lại với padding, stride là tham số được điều chỉnh để nén hình ảnh và dữ liệu video. Stride là một tham số của kernel (filter) chuyển động với một số lượng bước nhảy nhất định trên hình ảnh hoặc video theo cả chiều ngang và dọc. Hình 3: Mô tả kết quả với stride = 2 Ví dụ: nếu đặt stride của mạng thần kinh được đặt thành 2, kernel sẽ di chuyển hai pixel hoặc đơn vị, tại một thời điểm.
Khi áp dụng stride=2, convolution sẽ được tính như hình 4, cứ các 2 hai điểm dữ liệu theo cả chiều ngang và dọc thì chúng mới bắt đầu được tính convolution. Nếu giá trị stride = 1 thì tương đương với việc tính convolution trên từng giá trị của ma trận dữ liệu. Kích thước của kernel ảnh hưởng đến khối lượng đầu ra, do đó stride thường được đặt thành toàn bộ số nguyên, thay vì một phần hoặc thập phân. Kiến trúc của một mạng convolution Một ConvNet (Convolutional Network) là một chuỗi các layer có nhiệm vụ biến đổi dữ liệu thông qua các hàm biến đổi riêng biệt.
Có ba loại layer chính để xây dựng nên ConvNet: convolutional layer, pooling layer, và fully connected layer. 5 Theo https://cs231n.io/convolutional-networks/#layers có đề cập 17 Hình 4: Structure of the CNN with two convolutional layers (TensorFlow, 2018)6 Như tên gọi, trong convolutional layer đóng vai trò quan trọng trong cách thức CNN vận hành. Layer đảm nhiệm việc tính toán convolution nhằm chiết xuất ra những feature (tính chất) từ tập dữ liệu. Việc tính toán dựa vào các kernel được tập hợp thành filter, các kernel thường được tập hợp theo một độ sâu nhất định nhằm tối ưu hóa số lượng tham số truyền vào layer tiếp theo.
Pooling layer thường được sử dụng giữa các convolutional layer nhằm để giảm kích thước mà vẫn giữ nguyên các thuộc tính quan trọng. Pooling size là ma trận có kích thước. Với mỗi vùng trên dữ liệu đầu vào, chúng sẽ được tính toán maximum hoặc average của dữ liệu rồi tập hợp lại thành một ma trận kết quả. Các thực thi này sẽ áp dụng lên từng channel của dữ liệu.
Sau khi data được xử lý qua nhiều convolutional layer và pooling layer, model đã có được nhiều đặc điểm của hình ảnh. Để chuyển hóa những thông tin này để dự đoán output, cần đưa chúng qua một mạng ANN (mạng neural truyền thống) thông qua fully connected layer. Một số mô hình mạng CNN đề xuất 1. MobileNet MobileNet được phát triển bởi độ ngũ Google, mô hình được sử dụng cách tính tích chập DSC (Depthwise Separable Convolution) để giảm kích thước và giảm độ phức tạp của thuật toán.
[2] 6 Nguồn: https://www.com/tf-tutorials/convolutional-neural-nets-cnns 18 Ý tưởng của MobileNet là chia thuật toán CNN làm 2 phần: Depthwise convolution & Pointwise convolution. Depthwise Separable Convolution (tích chập chiều sâu) Mô hình Mobile Net dựa trên các tích chập có thể phân tách theo chiều sâu (Depthwise separable convolution). Các tích chập có thể phân tách sâu, một dạng của tích chập nhân tố (Factorized Convolutional Kernels) [3] , yếu tố tạo ra một tích chập tiêu chuẩn (standard convolution) [4] thành một tích chập theo chiều sâu. Tích chập có thể tách sâu được tạo thành từ hai thành phần: tích chập theo chiều sâu (depthwise convolutions) và tích chập 1x1, còn được gọi là tích chập theo điểm (pointwise convolutions).
Đối với Mobile Nets, tích chập theo chiều sâu áp dụng một bộ lọc duy nhất cho mỗi kênh đầu vào. Hình 5: Kiến trúc Depthwise convolution8 Nghĩa là, với mỗi channel sẽ áp dụng một bộ lọc (kernel) khác nhau và hoàn toàn không chia sẻ tham số, việc thực hiện như thế có các tác dụng: Nhận diện đặc trưng: Quá trình học và nhận diện đặc trưng sẽ được tách biệt theo từng bộ lọc. Nếu đặc trưng trên các channels là khác xa nhau thì sử dụng các bộ lọc riêng cho channel sẽ chuyên biệt hơn trong việc phát hiện các đặc trưng. Giảm thiểu khối lượng tính toán (thông thường sẽ là � × � × � phép tính, trong khi đó phép toán tích chập chiều sâu chỉ � × �).
7 Theo phần 3: MobileNet Architecture [2] A. Howard et al., "Mobilenets: Efficient convolutional neural networks for mobile vision applications," arXiv preprint arXiv:1704. 8 Nguồn: https://phamdinhkhanh.html 19 Giảm thiểu số lượng tham số (thông thường sẽ là �' × � × � × �, còn phép toán tích chập chiều sâu chỉ có � × � × �). Trong điều kiện � × � × 1 là kích thước của kernel và �, �' là độ sâu của input, output.
Kết quả của các tích chập sẽ là khối tensor ba chiều ℎ' × �' × �. - Đối với tích chập điểm (Pointwise Convolution): Thay đổi độ sâu của output sau bước tích chập theo chiều sâu từ c thành c’. Với phương pháp này, đầu vào (input) với độ sâu c được tích chập với c’ bộ lọc có kích thước 1 × 1 × �. Vì vậy mà kích thước được giữ nguyên mà chỉ thay đổi độ sâu.
Hình 6: Pointwise Convolution9 Chỉ đơn giản là 2 convolution với kernel kích thước 1x1 để thu lại được tensor chứa các đặc trưng có cùng kích thước h, w ban đầu và chỉ khác ở độ sâu c’. Giả sử muốn độ sâu c’ = 64 thì sử dụng 64 bộ kernel 1x1. Kiến trúc MobileNet Kiến trúc mạng MobileNet bao gồm 30 lớp [2]: 9 Nguồn: https://phamdinhkhanh.html 20 10 Hình 7: Kiến trúc MobileNet đầy đủ11 Theo hình 7, ta thấy: - Lớp thứ nhất gồm convolution layer với strike = 2 - Lớp thứ hai là lớp depthwise với strike = 1 - Lớp thứ ba là lớp pointwise - Lớp thứ tư là lớp depthwise với strike =2… - Lớp cuối cùng là hàm softmax để phân lớp Trong đó, số lượng tài nguyên mỗi lớp được phân bố theo bảng: 10 Nguồn: https://blog.dev/2020/10/tam-ly-ai-01-net-of-cnn-mobilenets-la.html 11 Nguồn: https://www.net/figure/layers-of-MobileNet-architecture-4_fig2_331675538 21 Hình 8: Tỷ lệ tài nguyên mỗi loại trên tổng số lớp12 MobileNet sử dụng nhiều lớp Depthwise Separable để làm giảm số lượng parameter đi nhiều lần. So sánh MobileNet và CNN thông thường Lấy ví dụ với tensor 3D có kích thước 5 × 10 × 10 và bộ kernel 5 × 3 × 3 và sử dụng 64 bộ lọc có tổng số tính toán là: 5* (3*3*10*10) * 64 = 288000.
Trong khi áp dụng MobileNet, trong bước DS, khối lượng tính toán là: 5*10*10*3*3 = 4500. Trong bước pointwise là: 64*5*10*10 = 32000. Vậy tổng số tính toán khi sử dụng MobileNet là 36500. Vì vậy model đã giảm thiếu rất nhiều lần so với sử dụng CNN thông thường.
Hình 9: Trái: Mô hình CNN truyền thống với Batch Norm (BN) ReLU. Phải: DW Separable Convolution được sử dụng trên MobileNet13 Hình số 9 cho thấy tương quan giữa mô hình CNN truyền thống, mô hình MobileNet có nhiều phân lớp hơn, đặc biệt có lớp pointwise kích thước 1x1 nối tiếp với lớp Batch Norm (BN) và kết thúc tới activation function là ReLU. Hình bên dưới so sánh hai kiến trúc.