13.8. CNN theo Vùng (R-CNN)

Mạng nơ-ron tích chập theo vùng, hay các vùng với đặc trưng CNN (R-CNN) là một hướng tiếp cận tiên phong ứng dụng mô hình sâu cho bài toán phát hiện vật thể [Girshick et al., 2014]. Trong phần này, chúng ta sẽ thảo luận về R-CNN và một loạt các cải tiến sau đó: Fast R-CNN [Girshick, 2015], Faster R-CNN [Ren et al., 2015], và Mask R-CNN [He et al., 2017a].

13.8.1. R-CNN

Đầu tiên, các mô hình R-CNN sẽ chọn một số vùng đề xuất từ ảnh (ví dụ, các khung neo cũng là một phương pháp lựa chọn) và sau đó gán nhãn hạng mục và khung chứa (ví dụ, các giá trị độ dời) cho các vùng này. Tiếp đến, các mô hình này sử dụng CNN để thực hiện lượt truyền xuôi nhằm trích xuất đặc trưng từ từng vùng đề xuất. Sau đó, ta sử dụng các đặc trưng của từng vùng được đề xuất để dự đoán hạng mục và khung chứa. Fig. 13.8.1 mô tả một mô hình R-CNN.

../_images/r-cnn.svg

Fig. 13.8.1 Mô hình R-CNN.

Cụ thể, R-CNN có bốn phần chính sau:

  1. Tìm kiếm chọn lọc trên ảnh đầu vào để lựa chọn các vùng đề xuất tiềm năng [Uijlings et al., 2013]. Các vùng đề xuất thông thường sẽ có nhiều tỷ lệ với hình dạng và kích thước khác nhau. Hạng mục và khung chứa nhãn gốc sẽ được gán cho từng vùng đề xuất.
  2. Sử dụng một mạng CNN đã qua tiền huấn luyện, ở dạng rút gọn, đặt trước tầng đầu ra. Mạng này biến đổi từng vùng đề xuất thành các đầu vào có chiều phù hợp với mạng và thực hiện các lượt truyền xuôi để trích xuất đặc trưng từ các vùng đề xuất tương ứng.
  3. Các đặc trưng và nhãn hạng mục của từng vùng đề xuất được kết hợp thành một mẫu để huấn luyện các máy vector hỗ trợ cho phép phân loại vật thể. Ở đây, mỗi máy vector hỗ trợ được sử dụng để xác định một mẫu có thuộc về một hạng mục nào đó hay không.
  4. Các đặc trưng và khung chứa được gán nhãn của mỗi vùng đề xuất được kết hợp thành một mẫu để huấn luyện mô hình hồi quy tuyến tính, để phục vụ dự đoán khung chứa nhãn gốc.

Mặc dù các mô hình R-CNN sử dụng các mạng CNN đã được tiền huấn luyện để trích xuất các đặc trưng ảnh một cách hiệu quả, điểm hạn chế chính yếu đó là tốc độ chậm. Có thể hình dung, với hàng ngàn vùng đề xuất từ một ảnh, ta cần tới hàng ngàn phép tính truyền xuôi từ mạng CNN để phát hiện vật thể. Khối lượng tính toán nặng nề khiến các mô hình R-CNN không được sử dụng rộng rãi trong các ứng dụng thực tế.

13.8.2. Fast R-CNN

Điểm nghẽn cổ chai chính về hiệu năng của R-CNN đó là việc trích xuất đặc trưng cho từng vùng đề xuất một cách độc lập. Do các vùng đề xuất này có độ chồng lặp cao, việc trích xuất đặc trưng một cách độc lập sẽ dẫn đến một số lượng lớn các phép tính lặp lại. Fast R-CNN cải thiện R-CNN bằng cách chỉ thực hiện lượt truyền xuôi qua mạng CNN trên toàn bộ ảnh.

../_images/fast-rcnn.svg

Fig. 13.8.2 Mô hình Fast R-CNN.

Fig. 13.8.2 mô tả mạng Fast R-CNN. Các bước tính toán chính yếu được mô tả như sau:

  1. So với mạng R-CNN, mạng Fast R-CNN sử dụng toàn bộ ảnh làm đầu vào cho CNN để trích xuất đặc trưng thay vì từng vùng đề xuất. Hơn nữa, mạng này được huấn luyện như bình thường để cập nhật tham số mô hình. Do đầu vào là toàn bộ ảnh, đầu ra của mạng CNN có kích thước \(1 \times c \times h_1 \times w_1\).
  2. Giả sử thuật toán tìm kiếm chọn lọc chọn ra \(n\) vùng đề xuất, kích thước khác nhau của các vùng này chỉ ra rằng vùng quan tâm (regions of interests - RoI) tại đầu ra của CNN có kích thước khác nhau. Các đặc trưng có cùng kích thước phải được trích xuất từ các vùng quan tâm này (giả sử có chiều cao là \(h_2\) và chiều rộng là \(w_2\)). Mạng Fast R-CNN đề xuất phép gộp RoI (RoI pooling), nhận đầu ra từ CNN và các vùng quan tâm làm đầu vào rồi ghép nối các đặc trưng được trích xuất từ mỗi vùng quan tâm làm đầu ra có kích thước \(n \times c \times h_2 \times w_2\).
  3. Tầng kết nối đầy đủ được sử dụng để biến đổi kích thước đầu ra thành \(n \times d\), trong đó \(d\) được xác định khi thiết kế mô hình.
  4. Khi dự đoán hạng mục, kích thước đầu ra của tầng kết nối đầy đủ lại được biến đổi thành \(n \times q\) và áp dụng phép hồi quy softmax (\(q\) là số lượng hạng mục). Khi dự đoán khung chứa, kích thước đầu ra của tầng đầy đủ lại được biến đổi thành \(n \times 4\). Nghĩa là ta dự đoán hạng mục và khung chứa cho từng vùng đề xuất.

Tầng gộp RoI trong mạng Fast R-CNN có phần khác với các tầng gộp mà ta đã thảo luận trước đó. Trong tầng gộp thông thường, ta thiết lập cửa sổ gộp, giá trị đệm, và sải bước để quyết định kích thước đầu ra. Trong tầng gộp RoI, ta có thể trực tiếp định rõ kích thước đầu ra của từng vùng, ví dụ chiều cao và chiều rộng của từng vùng sẽ là \(h_2, w_2\). Giả sử chiều cao và chiều rộng của cửa sổ RoI là \(h\)\(w\), cửa sổ này được chia thành một lưới có \(h_2 \times w_2\) cửa sổ con. Mỗi cửa sổ con có kích thước xấp xỉ \((h/h_2) \times (w/w_2)\). Chiều cao và chiều rộng của cửa sổ con phải luôn là số nguyên và thành phần lớn nhất được sử dụng là đầu ra cho cửa sổ con đó. Điều này cho phép tầng gộp RoI trích xuất đặc trưng có cùng kích thước từ các vùng quan tâm có kích thước khác nhau.

Trong Fig. 13.8.3, ta chọn một vùng \(3\times 3\) làm RoI của một đầu vào \(4 \times 4\). Với RoI này, ta sử dụng một tầng gộp RoI \(2\times 2\) để thu được một đầu ra đơn \(2\times 2\). Khi chia vùng này thành bốn cửa sổ con, chúng lần lượt chứa các phần tử 0, 1, 4 và 5 (5 là lớn nhất); 2 và 6 (6 là lớn nhất); 8 và 9 (9 là lớn nhất); và 10.

../_images/roi.svg

Fig. 13.8.3 Tầng gộp RoI \(2\times 2\).

Ta sử dụng hàm ROIPooling để thực hiện việc tính toán tầng gộp RoI. Giả sử rằng CNN trích xuất đặc trưng X với chiều rộng và chiều cao là 4 với một kênh duy nhất.

from mxnet import np, npx

npx.set_np()

X = np.arange(16).reshape(1, 1, 4, 4)
X
array([[[[ 0.,  1.,  2.,  3.],
         [ 4.,  5.,  6.,  7.],
         [ 8.,  9., 10., 11.],
         [12., 13., 14., 15.]]]])

Giả sử chiều cao và chiều rộng của ảnh là 40 pixel và tìm kiếm chọn lọc sinh ra hai vùng đề xuất trên ảnh này. Mỗi vùng được biểu diễn bằng 5 phần tử: hạng mục của đối tượng trong vùng đó và các tọa độ \(x, y\) của góc trên bên trái và góc dưới bên phải.

rois = np.array([[0, 0, 0, 20, 20], [0, 0, 10, 30, 30]])

Vì chiều cao và chiều rộng của X bằng \(1/10\) chiều cao và chiều rộng của ảnh, các tọa độ của hai vùng được đề xuất sẽ nhân với 0.1 thông qua spatial_scale, tiếp theo các RoI được gán nhãn trên X lần lượt là X[:, :, 0:3, 0:3]X[:, :, 1:4, 0:4]. Sau cùng, ta chia hai RoI thành một lưới cửa sổ con và trích xuất đặc trưng với chiều cao và chiều rộng là 2.

npx.roi_pooling(X, rois, pooled_size=(2, 2), spatial_scale=0.1)
array([[[[ 5.,  6.],
         [ 9., 10.]]],


       [[[ 9., 11.],
         [13., 15.]]]])

13.8.3. Faster R-CNN

Để có kết quả phát hiện đối tượng chính xác, Fast R-CNN thường đòi hỏi tạo ra nhiều vùng đề xuất khi tìm kiếm chọn lọc. Faster R-CNN thay thế tìm kiếm chọn lọc bằng mạng đề xuất vùng. Mạng này làm giảm số vùng đề xuất, trong khi vẫn đảm bảo phát hiện chính xác đối tượng.

../_images/faster-rcnn.svg

Fig. 13.8.4 Mô hình Faster R-CNN.

Fig. 13.8.4 minh họa mô hình Faster R-CNN. So với Fast R-CNN, Faster R-CNN chỉ thay thế phương pháp sản sinh các vùng đề xuất từ tìm kiếm chọn lọc sang mạng đề xuất vùng. Những phần còn lại trong mô hình không đổi. Quy trình tính toán của mạng đề xuất vùng được mô tả chi tiết dưới đây:

  1. Dùng một tầng tích chập \(3\times 3\) với đệm bằng 1 để biến đổi đầu ra của CNN và đặt số kênh đầu ra bằng \(c\). Bằng cách này, mỗi phần tử trong ánh xạ đặc trưng mà CNN trích xuất ra từ bức ảnh là một đặc trưng mới có độ dài bằng \(c\).
  2. Lấy mỗi phần tử trong ánh xạ đặc trưng làm tâm để tạo ra nhiều khung neo có kích thước và tỷ lệ khác nhau, sau đó gán nhãn cho chúng.
  3. Lấy những đặc trưng của các phần tử có độ dài \(c\) ở tâm khung neo để phân loại nhị phân (là vật thể hay là nền) và dự đoán khung chứa tương ứng cho các khung neo.
  4. Sau đó, sử dụng triệt phi cực đại (non-maximum suppression) để loại bỏ các khung chứa có kết quả giống nhau của hạng mục “vật thể”. Cuối cùng, ta xuất ra các khung chứa dự đoán là các vùng đề xuất rồi đưa vào tầng gộp RoI.

Lưu ý rằng, vì là một phần của mô hình Faster R-CNN, nên mạng đề xuất vùng được huấn luyện cùng với phần còn lại trong mô hình. Ngoài ra, trong đối tượng Faster R-CNN còn chứa các hàm dự đoán hạng mục và khung chứa trong bài toán phát hiện vật thể, cũng như các hàm dự đoán hạng mục nhị phân và khung chứa cho các khung neo trong mạng đề xuất vùng. Sau cùng, mạng đề xuất vùng có thể học được cách sinh ra những vùng đề xuất có chất lượng cao, giảm đi số lượng vùng đề xuất trong khi vẫn giữ được độ chính xác khi phát hiện vật thể.

13.8.4. Mask R-CNN

Nếu dữ liệu huấn luyện được gán nhãn với các vị trí ở cấp độ từng điểm ảnh trong bức hình, thì mô hình Mask R-CNN có thể sử dụng hiệu quả các nhãn chi tiết này để cải thiện độ chính xác của việc phát hiện đối tượng.

../_images/mask-rcnn.svg

Fig. 13.8.5 Mô hình Mask R-CNN.

Trong Fig. 13.8.5, có thể thấy Mask R-CNN là một sự hiệu chỉnh của Faster R-CNN. Mask R-CNN thay thế tầng tổng hợp RoI bằng tầng căn chỉnh RoI (RoI alignment layer). Điều này cho phép sử dụng phép nội suy song tuyến tính (bilinear interpolation) để giữ lại thông tin không gian trong ánh xạ đặc trưng, làm cho Mask R-CNN trở nên phù hợp hơn với các dự đoán cấp điểm ảnh. Lớp căn chỉnh RoI xuất ra các ánh xạ đặc trưng có cùng kích thước cho mọi RoI. Điều này không những dự đoán các lớp và khung chứa của RoI, mà còn cho phép chúng ta bổ sung một mạng nơ-ron tích chập đầy đủ (fully convolutional network) để dự đoán vị trí cấp điểm ảnh của các đối tượng. Chúng tôi sẽ mô tả cách sử dụng mạng nơ-ron tích chập đầy đủ để dự đoán ngữ nghĩa cấp điểm ảnh ở phần sau của chương này.

13.8.5. Tóm tắt

  • Mô hình R-CNN chọn ra nhiều vùng đề xuất và sử dụng CNN để thực hiện tính toán truyền xuôi rồi trích xuất đặc trưng từ mỗi vùng đề xuất. Sau đó dùng các đặc trưng này để dự đoán hạng mục và khung chứa của những vùng đề xuất.
  • Fast R-CNN cải thiện R-CNN bằng cách chỉ thực hiện tính toán truyền xuôi CNN trên toàn bộ bức ảnh. Mạng này sử dụng một tầng gộp RoI để trích xuất các đặc trưng có cùng kích thước từ các vùng quan tâm có kích thước khác nhau.
  • Faster R-CNN thay thế tìm kiếm chọn lọc trong Fast R-CNN bằng mạng đề xuất vùng. Điều này làm giảm số lượng vùng đề xuất tạo ra, nhưng vẫn đảm bảo độ chính xác khi phát hiện đối tượng.
  • Mask R-CNN có cấu trúc cơ bản giống Faster R-CNN, nhưng có thêm một mạng nơ-ron tích chập đầy đủ giúp định vị đối tượng ở cấp điểm ảnh và cải thiện hơn nữa độ chính xác của việc phát hiện đối tượng.

13.8.6. Bài tập

Tìm hiểu cách thực thi từng mô hình trong bộ công cụ GluonCV liên quan đến phần này.

13.8.7. Thảo luận

13.8.8. Những người thực hiện

Bản dịch trong trang này được thực hiện bởi:

  • Đoàn Võ Duy Thanh
  • Nguyễn Văn Quang
  • Lê Khắc Hồng Phúc
  • Nguyễn Mai Hoàng Long
  • Phạm Đăng Khoa
  • Nguyễn Lê Quang Nhật
  • Phạm Hồng Vinh
  • Nguyễn Văn Cường