CHƯƠNG 1: KỸ THUẬT HỌC SÂU VÀ BÀI TOÁN PHÁT HIỆN PHƯƠNG TIỆN GIAO THÔNG Trong chương này luận văn sẽ giới thiệu về học sâu, các khái niệm, đặc trưng và các kỹ thuật liên quan đến xử lý ảnh và phát hiện đối tượng. Các kỹ thuật hiện tại áp dụng cho bài toán phát hiện đối tượng và những hạn chế của các kỹ thuật này.1 Giới thiệu về học sâu.1 Học sâu Học sâu (deep learning) là một nhánh của ngành máy học, dựa trên một tập hợp các thuật toán để cố gắng mô hình dữ liệu để trừu tượng hóa ở mức cao bằng cách sử dụng nhiều lớp xử lý với cấu trúc phức tạp, hoặc bằng cách khác bao gồm nhiều lớp biến đổi phi tuyến để trích tách đặc trưng và chuyển đổi[23]. Mỗi lớp kế tiếp dùng đâu ra của lớp trước làm đầu vào. Các thuật toán này có thể được giám sát hoặc không cần giám sát và các ứng dụng bao gồm các mô hình phân tích (không giám sát) và phân loại (giám sát).
Các thuật toán học sâu dựa trên các đại diện phân phối. Giả định tiềm ẩn đằng sau các đại diện phân phối là các dữ liệu được quan sát là được tạo ra bởi sự tương tác của các yếu tố được tổ chức theo lớp. Học sâu thêm giả định rằng các lớp của các yếu tố này tương ứng với các mức độ trừu tượng hay theo thành phần. Các con số khác nhau của các lớp và kích thước của lớp có thể được sử dụng để quy định các lớp trừu tượng khác.
Học sâu khai thác ý tưởng thứ bậc các yếu tố giải thích này ở cấp cao hơn, những khái niệm trừu tượng hơn được học từ các cấp độ thấp hơn. Một trong những phương pháp học sâu thành công nhất là mô hình mạng nơ-ron nhân tạo (Arificial Neural Network)[23]. Mạng nơ-ron nhân tạo được lấy cảm hứng từ các mô hình sinh học năm 1959 được đề xuất bởi người đoạt giải Nobel David H. Hubel & Torsten Wiesel, 2 người đã tìm thấy hai loại tế bào trong vỏ não thị giác chính: các tế bào đơn giản và các tế bào phức tạp.
Nhiều mạng nơ-ron nhân tạo có thể được xem như là các mô hình ghép tầng của các tế bào loại lấy cảm hứng từ những quan sát sinh học. Nhưng không giống như bộ não sinh học mà bất kỳ nơ-ron nào có thể kết nối với bất kỳ nơ-ron nào khác trong một cách nhất định, các mạng nơ-ron nhân tạo Luan van 4 này có các lớp, kết nối và hướng riêng biệt để truyền dữ liệu. Mỗi tế bào thần kinh được gán một trọng số cho đầu vào của nó, kết quả cuối cùng sau đó được xác định bằng tổng số trọng số đó.1: Nơ-ron sinh học Như hình trên, ta có thể thấy một nơ-ron có thể nhận nhiều đầu nào và cho ra một kết quả duy nhất. Một nơ-ron đơn lẻ như vậy được gọi là perceptron Hình 1.2: Perceptron Ví dụ: Một perceptron sẽ nhận một hoặc nhiều đầu vào x dạng nhị phân và cho kết quả đầu ra o dạng nhị phân duy nhất.
Các đầu vào được điều phối tầm ảnh hưởng bởi các tham số lượng tương ứng w của nó, kết quả đầu ra được quyết định vào một ngưỡng quyết định b nào đó: 0, ∑ 𝑤𝑖 𝑥𝑖 ≤ 𝑡ℎ𝑟𝑒𝑠ℎ𝑜𝑙𝑑 𝑖 𝑜 = 1, ∑ 𝑤𝑖 𝑥𝑖 > 𝑡ℎ𝑟𝑒𝑠ℎ𝑜𝑙𝑑 { 𝑖 Đặt b = - threshold, ta có thể viết lại thành: Luan van 5 0, ∑ 𝑤𝑖 𝑥𝑖 + 𝑏 ≤ 0 𝑖 𝑜 = 1, ∑ 𝑤𝑖 𝑥𝑖 + 𝑏 > 0 { 𝑖 Với đầu vào và đầu ra dạng nhị phân, ta rất khó có thể điều chỉnh một lượng nhỏ đầu vào để đầu ra thay đổi chút ít, nên để linh động ta có thể mở rộng ra cả khoảng [0, 1]. Lúc này đầu ra được quyết định bởi một hàm sigmoid[17] σ(w⊺x) có công thức 1 𝜎(𝑧) = 1 + 𝑒 −𝑧 Đồ thị của hàm này cũng cân xứng thể hiện được mức độ công bằng của các tham số: Hình 1.3: Hàm sigmoid Đặt z = WTX thì công thức của perceptron lúc này sẽ có dạng: 1 o = 𝜎(𝑧) = 𝑇 1 + 𝑒 −𝑊 𝑋 Tới đây thì ta có thể thấy rằng mỗi hàm sigmoid cũng tương tự như một bộ phân loại tuyến tính(logistic regression) bởi xác suất P(yi=1|xi;w)= σ(w⊺x). Ngoài hàm sigmoid ra ta còn có một số hàm khác như tanh, ReLU[1] để thay thế hàm sigmoid bởi dạng đồ thị của nó cũng tượng tự như sigmoid[17]. Một cách tổng quát, hàm perceptron được biểu diễn qua một hàm kích hoạt (activation function) f(z) như sau: 𝑜 = 𝑓(𝑧) = 𝑓(𝑊 𝑇 𝑋) Mạng nơ-ron nhân tạo là sự kết hợp của các tầng perceptron hay còn gọi là perceptron đa tầng (multilayer perceptron) như hình bên dưới: Luan van 6 Hình 1.4: Mạng nơ-ron nhân tạo Kiến trúc chung của mạng nơ-ron nhân tạo bao gồm thành phần: Lớp đầu vào, Lớp ẩn và Lớp đầu ra.
Lớp đầu vào (Input layer): Là nơi để nạp dữ liệu vào. Mỗi nơ-ron tương ứng với một thuộc tính (attribute) hoặc đặc trưng (feature) của dữ liệu đầu vào. Lớp ẩn (Hidden layer): Là nơi xử lý dữ liệu trước khi đưa ra output. Thường là hàm tổng (Summation function) để đưa ra giá trị của một nơ-ron tại hidden layer.
Có thể có nhiều hơn một hidden layer. Khi đó đầu ra của một hidden layer sẽ là đầu vào cho hidden layer tiếp theo. Lớp đầu ra (Output layer): Là giá trị đầu ra của mạng nơ-ron. Sau khi đi qua hidden layer cuối cùng, dữ liệu sẽ được chuyển hóa bằng một hàm số được gọi là hàm kích hoạt (Activation function) và đưa ra output cuối cùng.
Hàm chuyển đổi thường là hàm tanh(x), sigmoid(x) hoặc softmax(x)[17]. Trong mạng nơ-ron nhân tạo, mỗi nơ-ron đóng vai trò như một đơn vị xử lý thông tin. Giữa các nơ-ron được đánh trọng số, gọi là các trọng số liên kết (Connection Weight), thể hiện độ quan trọng của thông tin của mỗi nơ-ron trước với nơ-ron sau. Quá trình học của mạng nơ-ron cũng chính là việc điều chỉnh những tham số này sao cho phù hợp nhất.
Thông tin của mỗi nơ-ron đi qua mỗi layer sẽ được áp dụng hàm tổng và hàm kích hoạt trước khi trở thành thông tin đầu vào của nơ-ron tiếp theo. Luan van 7 Hàm tổng: 𝑓(𝑥 ) = ∑𝑛𝑗=1 𝑥𝑗 × 𝑤𝑖𝑗 Trong đó: - 𝑥𝑗 : Giá trị đầu ra của nơ-ron thứ j - 𝑤𝑖𝑗 : Trọng số liên kết giữa nơ-ron thứ j ở layer trước và nơ-ron thứ i ở layer sau Thông tin ở hidden layer cuối cùng trước khi tới output sẽ phải qua một hàm kích hoạt (Activation function). Việc sử dụng hàm kích hoạt có hai mục đích: Một là những thông tin qua hàm tổng có thể sẽ lớn, vì vậy hàm chuyển đổi sẽ khiến giá trị đầu ra bị chặn. Ví dụ đầu ra của hàm sigmoid sẽ nằm trong khoảng [0, 1] còn tanh thì là [-1, 1].
Hai là hàm tổng là một hàm tuyến tính, giá trị đầu ra sẽ không “mượt”, hàm kích hoạt sẽ “mượt hóa” kết quả của hàm tổng để kết quả đầu ra có thể chính xác hơn. Hàm kích hoạt thường sử dụng là hàm softmax, tanh, sigmoid[17] hay chỉ đơn thuần là một ngưỡng để quyết định giá trị cho output.2 Mạng nơ-ron tích chập – Convolutional neural network (CNN) Convolutional Neural Network (CNN – Mạng nơ-ron tích chập) là một trong những mô hình Deep Learning tiên tiến giúp cho chúng ta xây dựng được những hệ thống thông minh với độ chính xác cao như hiện nay như hệ thống xử lý ảnh lớn như Facebook, Google hay Amazon đã đưa vào sản phẩm của mình những chức năng thông minh như nhận diện khuôn mặt người dùng, phát triển xe hơi tự lái hay drone giao hàng tự động. CNN được sử dụng nhiều trong các bài toán phát hiện các object trong ảnh. Để tìm hiểu tại sao thuật toán này được sử dụng rộng rãi cho việc phát hiện (detection), chúng ta hãy cùng tìm hiểu về thuật toán này.
Convolutional là một cửa sổ trượt (sliding windows) trên một ma trận. Luan van 8 Hình 1.5: Quá trình tích chập (Convolutional) Các convolutional layer có các parameter(kernel) đã được học để tự điều chỉnh lấy ra những thông tin chính xác nhất mà không cần chọn các feature. Trong hình ảnh ví dụ trên, ma trận bên trái là một hình ảnh trắng đen được số hóa. Ma trận có kích thước 5x5 và mỗi điểm ảnh có giá trị 1 hoặc 0 là giao điểm của dòng và cột.
Convolution hay tích chập là nhân từng phần tử trong ma trận 3x3. Sliding Window hay còn gọi là kernel, filter hoặc feature detect là một ma trận có kích thước nhỏ như trong ví dụ trên là 3x3. Convolution hay tích chập là nhân từng phần tử bên trong ma trận 3x3 với ma trận bên trái. Kết quả được một ma trận gọi là Convoled feature được sinh ra từ việc nhận ma trận Filter với ma trận ảnh 5x5 bên trái.
Cấu trúc của mạng CNN - Mạng CNN là một tập hợp các lớp Convolution chồng lên nhau và sử dụng các hàm nonlinear activation như ReLU và tanh để kích hoạt các trọng số trong các node. Mỗi một lớp sau khi thông qua các hàm kích hoạt sẽ tạo ra các thông tin trừu tượng hơn cho các lớp tiếp theo. Mỗi một lớp sau khi thông qua các hàm kích hoạt sẽ tạo ra các thông tin trừu tượng hơn cho các lớp tiếp theo. Trong mô hình mạng lan truyền tiến(feedforward neural network) thì mỗi nơ-ron đầu vào (input node) cho mỗi nơ-ron đầu ra trong các lớp tiếp theo.
Mô hình này gọi là mạng kết nối đầy đủ (fully connected layer) hay mạng toàn vẹn (affine layer). Còn trong mô hình CNN thì ngược lại. Các layer liên kết được với nhau thông Luan van 9 qua cơ chế convolution. Layer tiếp theo là kết quả convolution từ layer trước đó, nhờ vậy mà ta có được các kết nối cục bộ.
Như vậy mỗi nơ-ron ở lớp kế tiếp sinh ra từ kết quả của filter áp đặt lên một vùng ảnh cục bộ của nơ-ron trước đó. - Mỗi một lớp được sử dụng các filter khác nhau thông thường có hàng trăm hàng nghìn filter như vậy và kết hợp kết quả của chúng lại. Ngoài ra có một số layer khác như pooling/subsampling layer dùng để chắt lọc lại các thông tin hữu ích hơn (loại bỏ các thông tin nhiễu). Trong quá trình huấn luyện mạng (training) CNN tự động học các giá trị qua các lớp filter dựa vào cách thức mà bạn thực hiện.
Ví dụ trong tác vụ phân lớp ảnh, CNN sẽ cố gắng tìm ra thông số tối ưu cho các filter tương ứng theo thứ tự raw pixel > edges > shapes > facial > high-level features. Layer cuối cùng được dùng để phân lớp ảnh.