Chương 1 CƠ SỞ LÝ THUYẾT Chương này sẽ giới thiệu về Pytorch, đây là một framework được sử dụng khá phổ biến trong việc nghiên cứu các mô hình học sâu; các khái niệm về máy học, học sâu; giới thiệu về mạng tích chập; một số loại tích chập có thể thay thế tích chập truyền thống để làm nhẹ mô hình tăng tốc độ; giới thiệu về cách tăng cường dữ liệu khi huấn luyện; bài toán phát hiện và nhận diện vật thể ở đây chúng tôi sử dụng mạng Nanodet cho bài toán này do đó sẽ giới thiệu về mạng nanodet và ý tưởng mà tác giả thiết kế mạng này; giới thiệu về bài toán phân đoạn làn đường và cuối cùng là hướng tiếp cận của phương pháp học đa tác vụ.1 Pytorch Pytorch được định nghĩa là một thư viện máy học mã nguồn mở cho Python. Nhờ việc sử dụng mã nguồn mở nên đã tạo ra một cộng đồng lớn về framework này. Pytorch khá gần gũi với Python do đó rất dễ sử dụng, dễ sử lý khi bị lỗi và rất dễ chạy kể cả khi người lập trình chỉ cần biết một tí kiến thức lập trình vẫn có thể sử dụng được. Cấu trúc dữ liệu cốt lỗi được sử dụng trong Pytorch là Tensor.
Tương tự như Numpy, Tensor là một mảng n-chiều với các phần tử có cùng kiểu dữ liệu, đặc biệt là Tensor có thể tính toán trên GPUs ( điều này làm việc tính toán trở nên nhanh hơn).1 mô tả một quy trình cơ bản của Pytorch gồm các module quan trọng được liên kết với mỗi bước.1 Workflow của Pytorch [3] Các module quan trọng và cơ bản chúng tôi sẽ đề cập trong bài báo cáo này là torch. Số hiệu: HD/QT-PKHCN-QHQT-NCKHSV/00 Lần soát xét: 00 Ngày hiệu lực: 01/4/2020 Trang: 7/55 Luan van Trong một bài toán học sâu, để giải quyết ta cần biết đầu vào đầu ra của mô hình do đó việc tạo và xử lý data đầu vào là bước đầu tiên của bài toán. Pytorch cung cấp mô- đun torch.data hỗ trợ việc này. Trong đó hai class quan trọng trong mô-đun này là Dataset và Dataloader.
Dataset được sử dụng trên kiểu Tensor và sử dụng chủ yếu cho các bộ dữ liệu tùy chỉnh, Dataloader được sử dụng khi có một tập dữ liệu lớn và bạn muốn tải dữ liệu từ Dataset ở chế độ nền và chờ sử dụng trong quá trình huấn luyện. Và việc làm đa dạng dữ liệu thường được sử dụng trong module này. Ngoài ra ta còn có thể sử dụng torch.DataParallel và torch.distribution trong trường hợp có thể sử dụng song song nhiều máy tính hoặc GPUs. Sau khi đã tạo và xử lý đầu vào thì việc tiếp theo là tạo ra mô hình học sâu.
Pytorch hỗ trợ mô đun torch.nn để làm việc này. Nó cung cấp các lớn Neural Network phổ biến như ‘fully connected”, “convolution”, ngoài ra còn có các hàm activation và hàm mất mát,… Và có nhiều hàm mới hay kiến trúc mới thì nó sẽ phụ thuộc vào phiên bản Pytorch đang sử dụng. Khi đã hoàn thành kiến trúc mạng và đã có dữ liệu, thì chúng ta tiến hành huấn luyện mô hình để có thể học được data. Lúc này ta sẽ cần các kỹ thuật cập nhật trọng số và độ lệch các kỹ thuật này được sử dụng trong mô đun torch.
Ngoài ra để tính gradient tự động, chúng ta sử dụng mô đun torch. Sau khi mô hình được huấn luyện, nó có thể sử dụng để dự đoán các ngõ ra khi có ngõ vào. Ngoài ra chúng ta cũng có thể chuyển đổi từ framework Pytorch sang các framework khác nếu cần thiết.2 Máy học (Machine Learning) [4] Một trong những khác biệt chính giữa con người và máy tính là con người có thể học hỏi từ những kinh nghiệm quá khứ, nhưng với máy tính hoặc máy móc cần phải được thực hiện theo một quy trình có sẵn. Điều đó có nghĩa là nếu chúng ta muốn máy làm gì đó, chúng ta phải cung cấp cho nó những quy trình và các hướng dẫn chi tiết, từng bước về chính xác các việc cần làm.
Vì vậy con người đã viết lên một kịch bản và lập trình để máy tính làm theo các hướng dẫn và có khả năng học hỏi. Đó là cách mà máy học ra đời. Học máy là một ứng dụng của trí tuệ nhân tạo cung cấp cho các hệ thống khả năng tự động học hỏi và cải thiện từ kinh nghiệm mà không cần lập trình rõ ràng. Học máy tập trung vào việc phát triển các chương trình máy tính có thể truy cập dữ liệu và sử dụng nó để tự học.
Số hiệu: HD/QT-PKHCN-QHQT-NCKHSV/00 Lần soát xét: 00 Ngày hiệu lực: 01/4/2020 Trang: 8/55 Luan van 1.3 Học sâu (Deep learning) [5] Học sâu là một nhánh của máy học, giúp cho máy tính tự huấn luyện để thực hiện các tác vụ phức tạp. Học sâu hoạt động với các mạng lưới thần kinh sâu, việc thiết kế này dựa trên cách con người suy nghĩ và học hỏi. Các phương pháp về thị giác máy tính trong nhận diện vật thể chỉ hiệu quả đối với các đặc trưng được chỉ định và biết trước, nhưng trong thực tế các đặc trưng này bị ảnh hưởng của rất nhiều yếu tốt khác nhau nhu là góc nhìn, ảnh sáng, che khuất , … Học sâu ra đời đã khắc phục những hạn chế này và nó đã được ứng dụng mạnh mẽ trong thị giác máy tính.4 Mạng nơ ron tích chập (Convolutional Neural Network) Convolution Neural Network (CNN) [6] là một trong các loại mô hình nổi tiếng của học sâu, dùng để xử lý các loại dữ liệu dạng lưới, chẳng hạn như hình ảnh. Mô hình mạng nơ ron tích chập thường có dạng: Hình ảnh đầu vào → Lớp tích chập (Convolution Layer) + Lớp gộp (Pooling Layer) → Lớp kết nối đầy đủ (Fully Connected Layer) → Đầu ra.
Hai lớp đầu tiên, convolution và lớp pooling dùng để trích xuất đặc trưng từ đầu vào, và lớp thứ ba fully connected layers sẽ liên kết các lớp đặc trưng này thành đầu ra. Lý do mạng nơ ron tích chập là do vấn đề của mạng nơ ron trước đây, trích đặc trưng dựa trên từng pixel. Ví dụ khi đầu vào là một ảnh mày có kích thước là 64x64 được biểu diễn ở dạng tensor là 64x64x3. Nên để hiển thị hết nội dung của bức ảnh thì cần truyền vào input layer tất cả pixel (64*64*3=12288).
Nghĩa là input layer sẽ có 12288 notes. Giả sử số lượng note ở trong hidden layer đầu tiên là 1000. Thì lúc này số lượng trọng số (weight W) giữa input và hidden là 12288*1000 = 12288000 và số lượng bias là 1000. Đây mới chỉ là layer đầu tiên và trong một mô hình còn nhiều layer nữa và nếu kích thước ảnh tăng thì số lượng tham số tăng cực kỳ nhanh.
Và bên cạnh đó, ta có thể thấy rằng cá pixel ở cạnh nhau thường liên kết với nhau hơn là những pixel ở xa. Vậy nên ta sử dụng cửa sổ tích chập nhằm giải quyết vấn đề về số lượng tham số lớn mà vẫn trích xuất được đặc trưng của ảnh.2 thể hiện cấu trúc cơ bản của một mạng CNN, ảnh đầu vào sẽ qua một loạt các lớp tích chập với các bộ lọc gọi là kernel, sau đó đến pooling, rồi tiếp theo được kết nối đầy đủ (fully connected layers) và cuối cùng sẽ đến các hàm softmax để phân loại đối tượng dựa vào xác suất từ 0 đến 1. Số hiệu: HD/QT-PKHCN-QHQT-NCKHSV/00 Lần soát xét: 00 Ngày hiệu lực: 01/4/2020 Trang: 9/55 Luan van Hình 1.2 Kiến trúc cơ bản của một Convolution Neural Network [7] 1.1 Lớp tích chập (Convolution Layer) Bắt đầu là tích tích chập có nhiệm vụ trích xuất các đặt tính từ hình ảnh, tham số này bao gồm một tập hợp các bộ lọc có thể học được. Các bộ lọc này thường là 3x3, 5x5, … có độ sâu bằng độ sâu của đầu vào.
Bằng cách trượt các bộ lọc theo chiều ngang và dọc trên ảnh, chúng ta thu được một feature map chứa các đặc trưng trích xuất hình ảnh đầu vào. Một convolution layer được mô tả như hình 1.3 Minh họa Convolution Layer [8] Quá trình trượt các bộ lọc có các giá trị cần lưu ý bao gồm: Padding: Thuộc tính padding khi sử dụng sẽ thêm chèn vào biên của hình ảnh chiều rộng hoặc chiều cao tùy vào hướng sử dụng padding. Và padding thường được sử dụng khi kernel không phù hợp với ảnh đầu vào và ta sẽ chỉnh sửa lại ảnh đầu vào, hoặc có thể dùng để giữ nguyên kích thước đầu vào. Ví dụ padding như ở hình 1.
Số hiệu: HD/QT-PKHCN-QHQT-NCKHSV/00 Lần soát xét: 00 Ngày hiệu lực: 01/4/2020 Trang: 10/55 Luan van Hình 1.4 Padding [9] Stride: được minh họa như ở hình 1.5, được hiểu là bước dịch chuyển của bộ lọc theo pixel. Nếu stride bằng 1 thì bộ lọc mỗi lần dịch sẽ dịch qua 1 pixel tại mội thời điểm và nếu stride là 2 thì bộ lọc sẽ di chuyển 2 pixel một lúc. Giá trị stride càng lớn thì kết quả càng nhỏ và ngược lại.5 Stride [10] Với mỗi kernel khác nhau sẽ học được các đặc trưng khác nhau, do đó ta có thể sử dụng nhiều loại kernel để có thể học được nhiều loại đặc trưng của đầu vào. Vì mỗi kernel cho ra ngõ ra là 1 ma trận nên k kernel sẽ cho ra k ma trận đầu ra.
Ta kết hợp k ma trận này lại thành 1 tensor 3 chiều có chiều sâu k. Và đầu ra này sẽ qua hàm kích hoạt trước khi vào lớp tích chập tiếp theo.2 Lớp gộp (Pooling Layer) Pooling layer thường được dùng giữa các convolutional layer, để giảm kích thước dữ liệu nhưng vẫn giữ được các thuộc tính quan trọng. Có nghĩa là, sau khi qua các lớp này đặc trưng sẽ được loại bỏ các thông tin không cần thiết. Trong quá trình này thì padding và stride được sử dụng như phép tính convolution trên ảnh.
Thông thường có Số hiệu: HD/QT-PKHCN-QHQT-NCKHSV/00 Lần soát xét: 00 Ngày hiệu lực: 01/4/2020 Trang: 11/55 Luan van hai dạng là Max Pooling và Average Pooling. Trong đó, Max Pooling chọn giá trị lớn nhất là hàm đầu ra, còn Average Pooling là lấy trung bình cộng.3 là ví dụ về 2 loại pooling với bộ lọc có kích thước 2x2 và stride = 2.6 Max pooling và Average Pooling [11] 1.3 Lớp kết nối đầy đủ ( Fully Connected Layer) Sau khi ảnh đã được truyền qua nhiều lớp tích chập và lớp gộp thì lúc này đặc trưng đã học được tương đối của ảnh đầu vào, và lúc này đầu ra sẽ được làm phẳng thành vector và đưa vào một lớp kết nối đầy đủ như mạng nơ-ron. Cuối cùng dùng softmax hay sigmoid để phân loại đầu ra.7 mô tả lớp kết nối đầy đủ cơ bản.7 Minh họa về Fully Connected Layer [12] 1.