8 Tổng kết
2.19 Kết quả nhận diện của Mask R-CNN [10]
RoIAlign
Lớp RoIAlign được thiết kế để khắc phục sự sai lệch vị trí gây ra bởi lượng tử hóa (quantization) trong RoI pooling. RoIAlign loại bỏ hash quantization, ví dụ, sử dụng x
16 thay vì[x
16], để các features được trích xuất có thể được căn chỉnh chính xác với các điểm ảnh đầu vào. Bilinear Interpolation8được sử dụng để tính toán các giá trị sau dấu chấm (floating-point) trong đầu vào.
Hàm lỗi
Hàm lỗi của Mask R-CNN là kết hơp của hàm phân lớp, nhận diện vùng và phân đoạn:L =Lcls+Lbox+Lmask, trong đó Lcls và Lbox giống ở Faster R-CNN.
Nhánh mask tạo ra một miền maskm×m với mỗi RoI và mỗi lớp; Khi đó, kích thước đầu ra bằng K ×m2. Bời vì mô hình đang cố gắng học mask cho mỗi lớp, không có sự ảnh hưởng giữa các lớp để tạo masks.
8
https://en.wikipedia.org/wiki/Bilinear_interpolation
9
https://blog.athelas.com/a-brief-history-of-cnns-in-image-segmentation-from-r-cnn- to-mask-r-cnn-34ea83205de4
Hình 2.20: Khu vực quan tâm được ánh xạchính xáctừ hình ảnh gốc lên feature map mà không làm tròn đến số nguyên9
Lmask được định nghĩa là trung bình của hàm lỗi nhị phân cross-entropy, chỉ bao gồm mask thứ k nếu vùng được liên kết với lớp ground truth k.
Lmask =− 1 m2 X 1≤i,j≤m yijlog ˆyijk + (1−yij) log(1−yˆijk) (2.15) Với yij là nhãn của điểm (i,j) trong mask của vùng kích thước m×m; yˆijk là giá trị dự đoán cùng điểm trong mask được học đối với ground truth lớp k.
2.3.6 Tổng kết các mô hình thuộc R-CNN family
2.4 Nhận diện vật thể với YOLO
Thị giác máy tính là một lĩnh vực quan trọng của Trí tuệ nhân tạo, trong đó một trong những bài toán cơ bản được sử dụng nhiều nhất là nhận diện vật thể trong ảnh. Các bài toán nhận diện vật thể (object detection) trước đây sử dụng cửa sổ trượt để phát hiện các vật thể. Nó sẽ thực hiện trượt một cửa sổ với kích thước tuỳ ý trên ảnh đầu vào để phát hiện xem có vật thể cần phát hiện trong đó không. Để phát hiện các vật thể với kích thước khác nhau, nó phải sử dụng nhiều cửa sổ có kích thước khác nhau, đồng thời phải quét nhiều lần trên cùng một khu vực. Hoặc cách tiếp cận của R-CNN là sử dụng phương pháp đề xuất khu vực (region proposal). Nó sẽ sinh ra các khung bao phủ (bounding box) có khả năng chứa vật thể, sau đó tiến hành phân loại trên các bounding box đó, rồi điều chỉnh bounding box, loại bỏ các nhận diện bị trùng, đánh giá lại các object,. . . Điều này dẫn đến việc nhận diện vật thể theo thời gian thực trở nên không thực tế, thiếu linh hoạt và phức tạp.
YOLO (You Only Look Once) [13] được Joseph Redmon, Santosh Divvala, Ross Gir- shick, Ali Farhadi (nhóm sinh viên của Đại học Washingtion) giới thiệu vào năm 2016, là một cách tiếp cận mới về nhận diện vật thể. Ý tưởng chung của YOLO là chia ảnh đầu vào thành những ô nhỏ hơn, sau đó thực hiện phân loại trên từng ô đó, cuối cùng gộp các ô đó lại để tạo thành khung bao phủ (bounding box) tương ứng với từng vật thể được nhận diện. Điểm khác biệt của YOLO so với các phương thức trên là nó kết hợp các thành phần của quá trình nhận diện vật thể thành một mạng nơ-ron đơn, nó sử dụng các đặc trưng (feature) trên toàn ảnh để dự đoán cho từng bounding box một cách đồng thời. Nhờ đó mà tốc độ nhận diện là rất nhanh.
YOLO chia ảnh đầu vào thành S ×S ô, nếu tâm của vật thể nằm ở ô nào, ô đó sẽ chịu trách nhiệm nhận diện vật thể đó. Mỗi ô dự đoánB bounding box và điểm tin cậy (confident score, phản ánh khả năng bounding box có chứa vật thể và độ chính xác mà nó nghĩ rằng nó dự đoán cho bounding box đó) ứng với mỗi bounding box. Điểm tin cậy được tính bằng công thức:
P r(Object)∗IOUpredtruth (2.16) Trong đó, IOU (Intersection Over Union) là một chỉ số đánh giá khả năng nhận diện dựa trên bounding box dự đoán và thực tế. Nếu dự đoán không có vật thể nào trong ô, điểm tin cậy bằng không.
Mỗi bounding box dự đoán được có 5 thành phần: x, y, w, h và độ tin cậy. Toạ độ
(x, y) là tâm của box,w, h tương ứng chiều dài, chiều rộng, độ tin cậy đại diện IOU giữa box được dự đoán với box chính xác. Mỗi ô cũng dự đoánC (số lớp) xác suất có điều kiện
P r(Classi|Object). Những xác suất này có điều kiện trên ô chứa vật thể. Các xác suất này được dự đoán cho từng ô thay vì từng bound box, kể cả khi ô có nhiều bounding box thì mỗi ô cũng chỉ có một tập xác suất được dự đoán. Lúc kiểm tra, ta nhân xác xuất lớp có điều kiện với độ tin cậy dự đoán:
sẽ được độ tin cậy theo class tương ứng với mỗi bounding box. Độ tin cậy này biểu diễn xác suất class đó xuất hiện trong bounding box, và mức độ mà bounding box vừa với vật thể.
2.4.1 Kiến trúc mạng
Hình 2.22: Cấu trúc mô hình YOLO [13]
Được lấy cảm hứng từ mô hình GoogLeNet [5] dành cho phân loại ảnh (image classi- fication), YOLO gồm 24 lớp tích chập, theo sau là 2 lớp kết nối đầy đủ. YOLO sử dụng các lớp tích chập 1×1 theo sau bởi các lớp tích chập 3×3. Lớp1×1 có tác dụng làm giảm không gian đặc trưng (feature space) từ lớp trước đó.
2.4.2 Hàm lỗi
YOLO sử dụng hàm lỗi tổng bình phương giữa dự đoán và nhãn trên tập huấn luyện để tính độ lỗi của mô hình. Cụ thể, hàm lỗi là tổng của 3 thành phần:
• Độ lỗi của việc dự đoán loại nhãn của vật thể - Classification loss.
• Độ lỗi của việc dự đoán bounding box cho vật thể - Localization loss.
• Độ lỗi của việc box có chứa object nào hay không – Confident loss.
Classification loss
Lỗi phân loại chỉ được tính tại những ô được đánh nhãn là có vật thể, nó được tính bằng độ lỗi bình phương giữa nhãn đúng và nhãn được dự đoán:
Lclassification = ΣSi=02 1obji Σc∈class(pi(c)−pˆi(c))2 (2.19) Trong đó1obj
i cho biết tại i có vật thể hay không, pi(c) là xác suất có điều kiện của lớpc
mà mô hình dự đoán (hay khả năng vật thể được dự đoán là lớp c). Tại những ô không có vật thể, độ lỗi được bỏ qua.
Localization loss
Localization loss được dùng để tính giá trị lỗi cho bounding box được dự đoán, bao gồm toạ độx, y chiều dài, chiều rộng của box. Trong đó, chiều dài, chiều rộng được chuẩn hoá theo kích thước của ảnh, toạ độx, y cũng được biểu diễn theo vị trí so với ô chứa nó, nên tất cả đều có giá trị trong khoảng[0,1].
Llocalization = ΣSi=02 ΣBj=01objij [(xi−xˆi)2 + (yi−yˆi)2 + (wi−wˆi)2 + (hi−ˆhi)2 ] (2.20) Trong đó,1obj
ij cho biết bounding box j tại ô i chịu trách nhiệm cho việc dự đoán, nó sẽ bằng 1nếu bounding box tại ô đó có giá trị IOU lớn nhất. Localization loss được tính bằng tổng bình phương lỗi của x, y, chiều rộng, chiều dài của box. Mỗi ô chỉ có tối đa một box được tính độ lỗi này. Localization là độ lỗi quan trọng nhất trong 3 độ lỗi, nên cần được đánh trọng số cao hơn 2 loại kia.
Confident loss
Confident loss thể hiện độ lỗi việc dự đoán tại một ô có chứa vật thể hay không so với thực tế tại ô đó. Độ lỗi này được tính tại những ô có vật thể lẫn không có vật thể.
Lconfidence = ΣSi=02 ΣBj=01objij (Ci −Cˆi) +λnoobjΣSi=02 ΣBj=01noobjij (Ci−Cˆi) (2.21) Việc tính tại cả những ô không có vật thể vì nếu không tính tại những ô không có, những ô này có thể đẩy giá trị lỗi tiến về 0, dẫn đến những ô này sẽ gây ảnh hưởng lớn hơn đến những ô có chứa vật thể, khiến mô hình không ổn định, có thể không hội tụ. Cần lưu ý rằng, độ lỗi tại những ô chứa vật thể là quan trọng hơn, nên cần dùng hệ số lambda để cân bằng.
2.5 Phân đoạn ngữ nghĩa với UNET
Trước đây, công việc xử lý tài liệu số hoá thường được giải quyết bằng cách thiết kế riêng từng chiến lược áp dụng cho từng bài toán cụ thể, chẳng hạn trích xuất trang, trích xuất đường căn bản (baseline), phân tích bố cục văn bản, trích xuất văn bản, hình ảnh,. . . Nhóm tác giả Sofia Ares Oliveira, Benoit Seguin, Frederic Kaplan [15] đã đề xuất hướng giải quyết bài toán xử lý tài liệu bằng cách tiếp cận khác thông qua việc phân mảng (segmentation) tài liệu thay vì phải giải quyết từng bài toán riêng bằng các hướng giải quyết riêng - Unet [12]. Cách tiếp cận này gồm hai bước liên tiếp nhau:
• Bước đầu tiên nhận vào input là ảnh của tài liệu cần được xử lý, sử dụng một mạng CNN đặc biệt để trả về xác suất của các thuộc tính được dự đoán cho từng pixel ban đầu.
• Bước thứ hai là chuyển kết quả dự đoán từ bước một thành kết quả mong muốn bằng những kỹ thuật xử lý cơ bản, các kỹ thuật độc lập với nhau để đảm bảo giải quyết được đa dạng các bài toán.
2.5.1 Kiến trúc mạng
Kiến trúc Unet gồm 2 phần đối xứng nhau là bộ phiên mã (encoder) và bộ dịch mã (decoder), với bộ phiên mã là một mạng CNN bình thường với các lớp tích chập, max- pooling, và bộ dịch mã là phần được bổ sung thêm có tác dụng chuyển các bản đồ đặc trưng với độ phân giải thấp từ encoder sang các bản đồ đặc trưng với độ phân giải như ảnh ban đầu.
Bộ phiên mã
Bộ phiên mã hoàn toàn là một CNN bình thường, với các lớp tích chập và pooling xen kẽ nhau. Qua mỗi lớp, ta thu được ma trận đặc trưng có kích thước không gian ngày càng giảm, và độ sâu ngày càng tăng (channel tăng). Bộ phiên mã giúp chắt lọc các đặc trưng của ảnh để hỗ trợ cho việc phân loại từng điểm ảnh của ảnh ở bộ dịch mã.
Bộ dịch mã
Bộ dịch mã trong Unet là phần thực hiện quá trình khôi phục lại kích thước ban đầu sau khi qua bộ phiên mã, nó sẽ thực hiện phân loại cho từng điểm ảnh. Như ta đã biết, kết quả của quá trình phân mảng không chỉ là lớp của ảnh hay các tham số về bounding box, mà là các điểm ảnh được phân loại với kích thước đầy đủ như ảnh ban đầu. Nếu như chúng ta chỉ sử dụng các lớp convolution, pooling như encoder, chúng ta sẽ chỉ giữ được các thông tin về phân loại như ảnh chứa đối tượng gì, mà không có thông tin về việc chúng ở đâu. Bộ dịch mã giúp khôi phục lại những thông tin về vị trí để phân loại đến từng điểm ảnh. Mỗi bước dịch mã gồm 3 bước cơ bản:
• Phóng lớn (upscale) bản đồ đặc trưng trước đó, được thực hiện bằng phép tích chập chuyển vị từ ma trận đặc trưng ở bước trước đó, thu được một ma trận đặc trưng với kích thước không gian lớn hơn.
• Nối ma trận phóng lớn vừa nhận được với ma trận đối xứng tương ứng với nó ở bộ phiên mã để có được những thông tin về vị trí chính xác hơn.
• Nhân tích chập ma trận vừa nối ở bước trên để kết hợp hai ma trận vừa nối, nhằm giúp mô hình vừa nắm được các đặc trưng ảnh, vừa khởi tạo lại được vị trí của đặc trưng đó trên ma trận với kích thước ban đầu.
Hai quá trình phiên mã - dịch mã đối xứng nhau, tạo thành chữ U nên mô hình mạng này được gọi là Unet.
2.5.2 Biến thể Unet
Để tăng hiệu năng của mô hình, thông thường người ta sẽ thay đổi bộ phiên mã CNN bình thường với một số kiến trúc CNN khác để tận dụng những ưu điểm riêng. Những mô hình thường được dùng như VGG - VGG16, VGG19,...; ResNet - ResNet18, ResNet34, ResNet50, ResNet101,...
2.5.2.1 VGG16
VGG16 là một mạng tích chập CNN đã chiến thắng cuộc thi ILSVR(Imagenet) năm 2014. Hiện tại nó vẫn được cho là một mô hình xuất sắc. Điểm khác biệt của VGG16 là thay vì sử dụng thông số hyper-parameter lớn thì nó tập trung sử dụng những lớp tích
chập3×3với stride 1 và luôn luôn dùng lớp padding,maxpool 2×2vớistride 2.Mô hình tuân theo sự sắp xếp này của các lớp tích hợp và các lớp maxpool một cách nhất quán trong toàn bộ kiến trúc. Ở cuối kiến trúc có 2 lớp kết nối đầy đủ FCN và kết quả được đi qua hàm softmax. Số 16 trong VGG16 cho ta biết kiến trúc có 16 lớp.
Hình 2.24: Kiến trúc VGG1610
2.5.2.2 ResNet
ResNet (Residual Network) [11] được giới thiệu vào năm 2015 và đã giành được vị trí thứ 1 trong cuộc thi ILSVRC 2015 với tỉ lệ lỗi top 5 chỉ 3.57%. Không những thế nó còn đứng vị trí đầu tiên trong cuộc thi ILSVRC and COCO 2015 với ImageNet Detection, ImageNet localization, Coco detection và Coco segmentation. Hiện tại thì có rất nhiều biến thể của kiến trúc ResNet với số lớp khác nhau như ResNet-18, ResNet-34, ResNet-50, ResNet-101, ResNet-152,...Với tên là ResNet theo sau là một số chỉ kiến trúc ResNet với số lớp nhất định.
Một mạng chuyển tiếp với một lớp duy nhất là đủ để hiện thực cho bất kỳ chức năng nào.Tuy nhiên, khi đó lớp mạng sẽ rất to và mạng sẽ dễ bị overfit dữ liệu. Vì thế, xu hướng là thay vì làm một lớp to thì sẽ xây nhiều lớp. Tuy nhiên tăng độ sâu của mạng không đơn giản là chỉ chồng nhiều lớp với nhau. Một mạng nhiều lớp thường khó để huấn luyện vì sẽ gặp phải vấn đề vanishing gradient - vì gradient được truyền ngược lại các lớp trước đó, việc nhân lặp lại có thể làm cho gradient nhỏ vô hạn. Kết quả là, khi mạng đi sâu hơn, hiệu suất của nó trở nên bão hòa hoặc thậm chí bắt đầu suy giảm nhanh chóng.
10
Hình 2.25: Tăng độ sâu của mạng dẫn đến hiệu suất kém hơn11
Kiến trúc
Ý tưởng chính của ResNet tạo một kết nối "tắt"(identity shortcut connection) bỏ qua một hoặc nhiều lớp được gọi là Residual block.
Hình 2.26: Một khối residual12
Xuất hiện một mũi tên cong xuất phát từ đầu và kết thúc tại cuối khối residual. Hay nói cách khác là sẽ bổ sung input x vào đầu ra của layer, hay chính là phép cộng mà ta thấy trong hình 2.26, việc này sẽ chống lại việc đạo hàm bằng 0, do vẫn còn cộng thêmx. Với H(x) là giá trị dự đoán, F(x)là giá trị thật (nhãn), chúng ta muốn H(x) bằng hoặc xấp xỉF(x). Việc F(x) có được từ x như sau:
x→weight1 →ReLU →weight2 (2.22) Giá trịH(x) có được bằng cách:
F(x) +x→ReLU (2.23)
12
2.6 Ngôn ngữ, thư viện và nền tảng
2.6.1 Python
Python hiện tại là ngôn ngữ có nhiều thư viện cũng như nhiều nền tảng hỗ trợ cho việc nghiên cứu mô hình học máy cũng như học sâu. Python được thiết kế với ưu điểm mạnh là dễ đọc, dễ học và dễ nhớ. Python là ngôn ngữ có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình và là ngôn ngữ lập trình dễ học, được dùng rộng rãi trong phát triển trí tuệ nhân tạo hoặc AI. Cấu trúc của Python còn cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu.
2.6.2 Nền tảng Tensorflow
Tensorflow là một nền tảng học máy mã nguồn mở với khả năng tính toán có hiệu suất cao. Thư viện được phát triển bởi một nhóm các nhà nghiên cứu và kỹ sư từ nhóm Google Brain trong tổ chức AI của Google. Mục địch tạo ra Tensorflow là cung cấp sự hỗ trợ mạnh mẽ cho học máy và học sâu, khả năng tính toán số học vượt trội ở nhiều lĩnh vực khoa học khác nhau.
Các hàm được dựng sẵn trong thư viện cho từng bài toán cho phép TensorFlow xây dựng được nhiều neural network. Nó còn cho phép tính toán song song trên nhiều máy tính khác nhau, thậm chí trên nhiều CPU, GPU trong cùng 1 máy hay tạo ra các dataflow graph – đồ thị luồng dữ liệu để dựng nên các model. Được viết bằng C++ và thao tác interface bằng Python nên phần hiệu năng của TensorFlow cực kỳ tốt.