Gần đây với sự phát triển về lĩnh vực điều khiển bay, sức mạnh tính toán thị giác máy tính và đặc biệt là lĩnh vực học máy, nên các drone giờ đây có thể thực hiện được nhiều nhiệm vụ
CƠ SỞ LÝ THUYẾT
Cơ sở lý thuyết về Drone
2.1.1 Lý thuyết điều khiển bay
Trong đồ án này đề cập đến drone thường gặp gồm bốn động cơ Bốn cánh quạt gắn trên bốn động cơ giúp tạo ra lực nâng cho phép drone bay lên khi cánh quạt quay Nguyên lý hoạt động chính của mô hình này dựa trên sự chuyển động của các dòng khí do cánh máy bay tạo ra làm drone bay lên và sự điều chỉnh tốc độ động cơ sẽ làm thay đổi hướng bay của drone Hình 2.1 dưới đây mô tả cấu trúc cơ bản của drone
Các cánh quạt số 1 và 3(CCW) quay ngược chiều kim đồng hồ, trong khi cánh quạt số 3 và 4(CW) quay cùng chiều kim đồng hồ để cân bằng momen xoắn tạo bởi bốn cánh quạt Tất cả bốn cánh quạt phải tạo ra lực đẩy bằng nhau khi drone cất cánh và hạ cánh (Throttle Up hoặc Throttle Down) Góc Roll được điều khiển bằng cách thay đổi tốc độ giữa cặp cánh bên phải (số 1 và số 4) với cặp cánh bên trái (số 3 và số 2), sao cho tổng lực đẩy tạo ra bởi bốn cánh quạt không thay đổi Tương tự, góc Pitch được điều khiển bằng cách thay đổi tốc độ giữa cặp cánh phía trước (số 3 và số 1) với cặp cánh phía sau (số 2 và số 4), trong khi vẫn giữ được ĐỒ ÁN TỐT NGHIỆP
Hình 2.2 Cách hoạt động các góc Roll, Pitch, Yaw [4]
Mô hình TELLO Drone được sử dụng trong đồ án này
Hình 2.3 Mô hình Tello drone
Bộ điều khiển PID (Proporttional-Intergral-Derivative) [2] là một bộ khiển hồi tiếp được sử dụng trong các cơ chế điều khiển Bộ điều khiển PID liên tục tính toán giá trị “sai số” là hiệu số giữa giá trị biến đổi và giá trị đặt Bộ điều khiển sẽ giảm tối đa sai số bằng cách điều chỉnh giá trị điều khiển đầu vào
Công thức bộ điều khiển PID:
K p là độ lợi tỷ lệ, giá trị càng lớn thì thời gian đáp ứng càng nhanh tuy nhiên sai số càng lớn
K i là độ lợi tích phân, giá trị càng lớn kéo theo sai số ổn định bị triệt tiêu càng nhanh, nhưng đổi lại độ vọt lố càng lớn
K d là độ lợi vi phân, giá trị càng lớn càng giảm độ vọt lố, nhưng sẽ làm chậm đáp ứng quá độ và có thể dẫn đến mất ổn định e(t) = SP - PV(t) là giá trị sai số (SP là giá trị đặt, PV là biến quá trình) t là thời gian tức thời hiện tại
là biến tích hợp, xác định từ thời điểm 0 đến t
Hình 2.4 Bộ điều khiển PID [2]
Khâu tỉ lệ làm thay đổi giá trị đầu ra, tỉ lệ với giá trị sai số hiện tại Đáp ứng tỉ lệ có thể được thay đổi bằng cách nhân sai số đó với một hằng số K p , gọi là hằng số tỉ lệ ĐỒ ÁN TỐT NGHIỆP
Khâu tỉ lệ được xác định bởi: out p ( )
Hệ số của khâu tỉ lệ lớn là do thay đổi ở đầu ra lớn mà sai số thay đổi nhỏ Nếu hệ số của khâu tỉ lệ quá cao, hệ thống sẽ không ổn định Ngược lại, hệ số nhỏ là do đáp ứng đầu ra nhỏ trong khi sai số đầu vào lớn, và làm cho bộ điều khiển kém nhạy, hoặc đáp ứng chậm Nếu hệ số của khâu tỉ lệ quá thấp, tác động điều khiển có thể sẽ quá bé khi đáp ứng với các nhiễu của hệ thống
Khâu tích phân tỉ lệ thuận với cả biên độ sai số và quãng thời gian xảy ra sai số Tổng sai số tức thời theo thời gian (tích phân sai số) cho ta tích lũy bù đã được hiệu chỉnh trước đó Tích lũy sai số này được nhân với độ lợi tích phân và cộng với tín hiệu đầu ra của bộ điều khiển Biên độ phân phối của khâu tích phân của các tác động điều chỉnh được xác định bởi độ lợi tích phân K i
Thừa số tích phân được xác định bởi:
Khâu tích phân (khi cộng thêm khâu tỉ lệ) sẽ tăng tốc bám theo điểm đặt và khử số dư sai số ổn định với một tỉ lệ chỉ phụ thuộc vào bộ điều khiển Tuy nhiên, vì khâu tích phân là đáp ứng của sai số tích lũy trong quá khứ nên nó có thể khiến giá trị hiện tại vọt lố vượt qua giá trị đặt
Tốc độ thay đổi của sai số được tính toán bằng cách xác định độ dốc của sai số theo thời gian (gọi là đạo hàm bậc một theo thời gian) và nhân tốc độ này với độ lợi vi phân K d Biên độ của phân phối khâu vi phân (đôi khi được gọi là tốc độ) được giới hạn bởi độ lợi vi phân K d ĐỒ ÁN TỐT NGHIỆP
Thừa số vi phân được xác định bởi:
Khâu vi phân làm chậm tốc độ thay đổi đầu ra bộ điều khiển và đạt tới điểm đặt của bộ điều khiển Từ đó, khâu vi phân được sử dụng để làm giảm độ vọt lố được tạo ra bởi thành phần tích phân và cải thiện độ ổn định của bộ điều khiển Tuy nhiên, phép vi phân sẽ khuếch đại nhiễu và do đó khâu này sẽ nhạy cảm hơn đối với nhiễu trong sai số, và có thể khiến quá trình không ổn định nếu nhiễu và độ lợi vi phân đủ lớn.
Tổng quan về xử lý ảnh
2.2.1 Giới thiệu về xử lý ảnh
Xử lý ảnh là lĩnh vực nghiên cứu lớn và là nền tảng của lĩnh vực thị giác máy tính, là quá trình biến đổi từ một ảnh ban đầu sang ảnh khác tùy theo mong muốn của người sử dụng Xử lý ảnh bao gồm các quá trình phân tích, thay đổi chất lượng, phân đoạn và phát hiện biên, gán nhãn cho đối tượng để trích xuất và thể hiện các thông tin của bức ảnh Xử lý ảnh nhằm các mục đích:
- Biến đổi ảnh để làm tăng chất lượng ảnh
2.2.2 Các quá trình xử lý ảnh
Về cơ bản, quá trình xử lý ảnh bao gồm các công đoạn sau:
Thu nhận ảnh: Đầu tiên, ảnh từ thế giới bên ngoài được thu lại qua các thiết bị quay chụp Với sự phát triển của công nghệ, chúng ta có thể chụp được ảnh đen trắng hoặc ảnh màu bằng camera kỹ thuật số Đây là loại ảnh có thể tiến hành các thao tác hậu kỳ, xử lý ảnh Các thông số của ảnh như độ phân giải, chất lượng, dung lượng lưu trữ phụ thuộc vào thiết bị quay chụp, điều này cũng ảnh hưởng đến các thao tác xử lý ảnh về sau
Hình 2.8 Quá trình xử lý ảnh
Tiền xử lý ảnh: Ở bước này, ảnh sẽ được khôi phục để tăng cường chất lượng, độ tương phản, làm nét ảnh, chuyển về ảnh xám hoặc nhị phân hóa ảnh, khử nhiễu bằng các bộ lọc, co giãn ảnh, Điều này giúp thể hiện rõ các đặc trưng và thông tin của ảnh để thuận tiện cho các bước xử lý về sau
Phân đoạn ảnh: Đây là bước then chốt trong việc xử lý ảnh, giúp chúng ta phân biệt các đối tượng cần quan tâm với phần còn lại của ảnh Bước này sẽ phân tích ảnh để làm nổi bật những thành phần có tính chất hay đặc trưng nào đó dựa theo đường biên hoặc các vùng liên thông Mỗi đối tượng trong ảnh được gọi là vùng hay miền, đường bao quanh đối tượng gọi là đường biên Mỗi một vùng ảnh phải có một đặc tính đồng nhất
Biểu diễn và mô tả: kết quả của việc phân đoạn ảnh được cho dưới dạng điểm ảnh thô, trong đó có hàm chứa biên của một vùng ảnh, và tập hợp tất cả các điểm ảnh thuộc về vùng ảnh đó Ta có thể biểu diễn một vùng ảnh trong giới hạn đặc điểm bên ngoài nó (đường biên của nó), hoặc trong giới hạn bên trong (những ĐỒ ÁN TỐT NGHIỆP tượng Trong khi biểu diễn dạng vùng lại thích hợp cho các ứng dụng khai thác các tính chất bên trong của đối tượng
2.2.3 Phạm vi ứng dụng của xử lý ảnh
Kỹ thuật xử lý ảnh trước đây chủ yếu được dùng để nâng cao chất lượng hình ảnh Gần đây, xử lý ảnh ngày càng ứng dụng ở nhiều lĩnh vực, có thể nói không có lĩnh vực khoa học nào mà không sử dụng các thành tựu của công nghệ xử lý ảnh số
Trong y học, các kỹ thuật xử lý ảnh cho phép biến đổi hình ảnh tạo ra từ tia bức xạ thành hình ảnh quang học được ghi lại bề mặt phim X-quang hay trực tiếp trên bề mặt của màn hình hiển thị Hình ảnh các cơ quan chức năng của con người được xử lý để nâng cao độ tương phản, lọc tách các thành phần cần thiết để bác sĩ chẩn đoán Bên cạnh đó ảnh này còn được sử dụng để làm nguồn dữ liệu cho các thuật toán học sâu để tiến hành phân tích, chẩn đoán bệnh tật bằng máy tính
Trong lĩnh vực địa chất, hình ảnh được chụp lại từ vệ tinh có thể được phân tích để xác định cấu trúc bề mặt trái đất Thuật toán phát hiện đường biên, nội suy, liên kết và khôi phục hình ảnh cho phép nâng cao chất lượng ảnh vệ tinh và tạo ra các bản đồ địa hình 3D với độ chính xác cao
Xử lý ảnh được ứng dụng nhiều trong hệ thống quản lý giám sát về chất lượng và số lượng hàng hóa trong các dây chuyền sản xuất tự động, ví dụ phân tích ảnh để phát hiện lỗi sản phẩm, các thành phần không đạt tiêu chuẩn hoặc đếm số lượng sản phẩm
Xử lý ảnh còn được sử dụng rộng rãi trong lĩnh vực an ninh và các hệ thống bảo mật: giúp nhận dạng vân tay hay khuôn mặt cho phép kiểm soát và phát hiện các đối tượng nghi vấn cũng như nâng cao hiệu quả hệ thống bảo mật cá nhân cũng như kiểm soát ra vào hay điểm danh Ngoài ra có thể kể đến các ứng dụng trong lĩnh vực trong đời sống như nhận dạng mục tiêu, hệ thống vision công nghiệp, các ứng dụng chỉnh sửa nâng cao chất lượng ảnh hay video
Hình 2.9 Các ứng dụng của xử lý ảnh [3]
2.2.4 Giới thiệu thư viện OpenCV
OpenCV là một thư viện mã nguồn mở về thị giác máy với hơn 500 hàm và hơn 2500 thuật toán đã được xây dựng tối ưu về xử lý ảnh và các vấn đề liên quan đến thị giác máy tính Với việc được viết bằng ngôn ngữ C/C++ nên OpenCV có khả năng tính toán với tốc độ rất nhanh Do vậy OpenCV được sử dụng nhiều trong các ứng dụng thời gian thực, cùng với đó là việc hỗ trợ bởi trình tăng tốc GPU sẽ giúp các hoạt động xử lý video thời gian thực càng nhanh hơn Opencv hỗ trợ nhiều ngôn ngữ khác nhau như C/C++, Python và Java ĐỒ ÁN TỐT NGHIỆP
Dựa theo tính năng và ứng dụng của OpenCV, có thể chia thư viện này thành các nhóm tính năng và module tương ứng như sau:
- Xử lý và hiển thị hình ảnh/Video/I/O (core functionality, image processing, high-level GUI): tạo và đọc dữ liệu từ ảnh và video sau đó hiển thị; xử lý ảnh bằng cách lọc hình ảnh tuyến tính và phi tuyến, phép biến đổi hình học, chuyển đổi không gian màu, biểu đồ, phân đoạn biên; tạo giao diện hiển thị và giao tiếp UI dễ sử dụng
- Phát hiện vật thể (features 2D, object detection): phát hiện các đặc trưng của bộ nhận diện, bộ truy xuất thông số và thông số đối chọi; phát hiện các đối tượng và mô phỏng các hàm được định nghĩa sẵn
- Geometry-based monocular hoặc Stereo computer vision (camera calibration 3D): thuật toán hình học đa chiều, hiệu chuẩn máy ảnh single và stereo, dự đoán hình dáng đối tượng và các yếu tố tái tạo 3D
- Computational photography (photo, video): phân tích ảnh video bao gồm các tính năng ước tính chuyển động, tách nền và các thuật toán theo dõi vật thể
- Machine learning & clustering: nhiều ứng dụng thị giác máy tính yêu cầu học máy, nhằm tăng tính trực quan và chính xác; thuật toán phân cụm là một thuật toán học máy không giám sát được sử dụng phổ biến trong phân vùng ảnh, thông dụng nhất là K-means Clustering
Tổng quan về trí tuệ nhân tạo
2.3.1 Trí tuệ nhân tạo ( Artificial Intelligence)
Hiện nay, trí tuệ nhân tạo AI [4] có ảnh hưởng gần như toàn bộ các ngành công nghiệp, và không có gì ngạc nhiên khi nó là một trong những chủ đề nóng nhất hiện nay “Trí tuệ nhân tạo” có nghĩa là máy tính hay robot sử dụng các quy trình ra quyết định hoặc tính toán bắt chước theo tư duy của con người AI sẽ bắt chước suy nghĩ và hoạt động của con người thông qua việc nghiên cứu, sau đó sẽ học hỏi và
Hình 2.11 Mô tả sự phát triển của AI, ML, DL [3]
Trí tuệ nhân tạo là một lĩnh vực rộng lớn bao gồm vô số lĩnh vực con, kỹ thuật và thuật toán Để giải thích thêm các mục tiêu của Trí tuệ nhân tạo, các nhà nghiên cứu đã mở rộng 6 thuật toán và kỹ thuật chính chính sau:
- Học máy: Là một khái niệm cơ bản của AI, là sự nghiên cứu các thuật toán để máy tính có khả năng tự học hỏi mà không cần được lập trình
- Tìm kiếm và tối ưu hóa: Các thuật toán chẳng hạn như Gradient Descent để lặp đi lặp lại các điểm tối đa cục bộ hoặc mức tối thiểu
- Ràng buộc: Sự thỏa mãn là quá trình tìm kiếm giải pháp cho một tập hợp các rang buộc áp đặt các điều kiện mà các biến phải thỏa mãn
- Lập luận logic: Một ví dụ về suy luận logic trong trí tuệ nhân tạo là một hệ thống máy tính chuyên nghiệp mô phỏng khả năng ra quyết định của con người
- Lý luận xác xuất: Là kết hợp năng lực của lý thuyết xác xuất để xử lý sự không chắc chắn với năng lực của logic suy diễn để khai thác cấu trúc của lập luận hình thức
- Lý thuyết điều khiển: Là một cách tiếp cận chính thức để tìm các bộ điều khiển có các đặc tính có thể chứng minh được Điều này thường liên quan đến ĐỒ ÁN TỐT NGHIỆP
Machine Learning (ML) là một tập hợp con của trí tuệ nhân tạo Nếu trí tuệ nhân tạo mục tiêu là làm cho máy tính trở nên thông minh thì ML là nghiên cứu khoa học về các thuật toán mà các hệ thống máy tính sử dụng để thực hiện một nhiệm vụ cụ thể mà không cần sự hướng dẫn rõ ràng từng bước từ con người mà thay vào đó là sự suy luận Các thuật toán học máy xây dựng trên một mô hình toán học dựa trên các bộ dữ liệu mẫu, được gọi là dữ liệu huấn luyện Các thuật toán học máy được sử dụng trong rất nhiều lĩnh vực như xử lý ngôn ngữ tự nhiên và thị giác máy tính Học máy liên quan chặt chẽ đến xác xuất thống kê, nghiên cứu về tối ưu toán học cung cấp phương pháp và lý thuyết ứng dụng cho học máy
Hình 2.12 Cấu trúc của tế bào thần kinh nhân tạo [4]
Chi tiết về một số thành phần này:
- Tế bào thần kinh: Một thần kinh mạng là một đồ thị của tế bào thần kinh Một thần kinh mạng có đầu vào và đầu ra Các đầu vào và đầu ra của mạng nơ-ron được biểu diễn bằng các nơ-ron đầu vào và nơ-ron đầu ra Các tế bào thần kinh đầu vào không có tế bào thần kinh tiền nhiệm nhưng có một đầu ra Tương tự, một nơ-ron đầu ra không có nơ-ron kế thừa nhưng có các yếu tố đầu vào
- Kết nối và trọng số: Một mạng nơ-ron bao gồm các kết nối, mỗi kết nối chuyển đầu ra của một nơ-ron đến đầu vào của một nơ-ron khác Mỗi kết nối được chỉ định với một trọng số
- Chức năng lan truyền: Chức năng lan truyền tính toán đầu vào của một nơ-ron từ các đầu ra của tế bào thần kinh tiền nhiệm
- Học tập quy tắc: Các loại học tập qui định là một hàm số cái đó sửa đổi các trọng số của các kết nối
Các loại học tập: Có nhiều thuật toán khác nhau với những ưu điểm và nhược điểm riêng biệt của chúng có thể được sử dụng khi đào tạo mạng nơ-ron nhân tạo như:
Học có giám sát: Thuật toán học tập sẽ phụ thuộc loại này nếu đầu ra mong muốn cho mạng cũng được cung cấp đầu vào trong khi huấn luyện mạng Bằng cách cung cấp cho mạng nơ-ron cả đầu vào và đầu ra, có thể tính toán lỗi dựa trên đầu ra mục tiêu và đầu ra thực tế của nó Sau đó, nó có thể sử dụng lỗi đó để sữa chữa mạng bằng cách cập nhật trọng số
Học không giám sát: Trong mô hình này, mạng nơ-ron chỉ được cung cấp một tập hợp các đầu vào và mạng nơ-ron có trách nhiệm tìm ra một số mẫu trong các đầu vào được cung cấp mà không cần bất kỳ sự trợ giúp nào từ bên ngoài Loại mô hình học tập này thường được sử dụng trong khai thác dữ liệu và nhiều thuật toán đề xuất do khả năng dự đoán sở thích của người dùng dựa trên các thuật toán tương tự khác
Học bán giám sát: Dữ liệu đào tạo bao gồm một vài đầu ra mong muốn
Học tăng cường: Còn được gọi là học củng cố, cách học này tương tự như học tập có giám sát ở chỗ một số phản hồi được đưa ra, tuy nhiên thay vì được cung cấp đầu ra mục tiêu, phần thưởng được trao dựa trên mức độ hoạt động của hệ thống Học tập củng cố nhằm mục đích tối đa hóa phần thưởng mà hệ thống nhận được thông qua quá trình thử và sai
Trong đó học tập có giám sát là kiểu học được nghiên cứu nhiều nhất và được sử dụng bởi hầu hết các thuật toán học máy
Mỗi thuật toán học máy có ba thành phần:
- Representation: Cách trình bày kiến thức, bao gồm cây quyết định, bộ quy tắc, mô hình đồ họa, mạng nơ-ron, máy vecto hỗ trợ, quần thể mô hình và một số loại khác
Phát hiện đối tượng bằng cách sử dụng học sâu
Các mô hình phát hiện đối tượng được đào tạo để phát hiện các đối tượng trong hình ảnh, video hoặc hoạt động thời gian thực (realtime) Ngay cả trước khi có phương pháp học sâu và các công nghệ xử lý ảnh hiện đại, bài toán phát hiện đối tượng vẫn được quan tâm rất nhiều Khi đó người ta thường sử dụng một số phương pháp xử lý ảnh truyền thống như SIFT và HOG với các thuật toán trích xuất cạnh và phân đoạn của đối tượng
Với sự ra đời của mạng nơ-ron tích chập (CNN) và những tiến bộ của công nghệ thị giác máy tính đã giúp chúng ta có nhiều hướng tiếp cận đối với các bài toán phát hiện đối tượng với độ chính xác cao hơn Trong phần này chúng ta sẽ tìm hiểu về một trong những thuật toán phát hiện đối tượng được sử dụng nhiều nhất
2.4.1 Cơ sở CNN phát hiện đối tượng
Darknet53 [10][11] được gọi là base network có tác dụng trích xuất đặc trưng rất tốt Mạng này được sử dụng kể từ YOLOv3 Darknet53 gồm 53 lớp convolution kết nối liên tiếp, mỗi lớp theo sau bởi một batch normalization và một activation Leaky Relu Để giảm kích thước của output sau mỗi lớp convolution, tác giả giảm mẫu bằng các bộ lọc với kích thước là 2 Mẹo này có tác dụng giảm thiểu tham số cho mô hình Hình 2.28 dưới đây thể hiện cấu trúc mạng Darknet53 ĐỒ ÁN TỐT NGHIỆP
2.4.2 Mạng YOLO (You Only Look Once)
Mô hình YOLO [11][12][17] được giới thiệu bởi Redmon vào năm 2016 dự đoán trực tiếp các bounding box và xác suất lớp với một mạng duy nhất trong một đánh giá duy nhất Các bản YOLO liên tục được cập nhật và mới nhất là YOLOv7 mới ra mắt gần đây với nhiều ưu điểm vượt trội Về độ chính xác thì YOLO có thể không phải là thuật toán chính xác nhất nhưng là thuật toán nhanh nhất trong các mô hình phát hiện đối tượng Vì vậy đây là một trong những mô hình được ưu tiên khi làm việc với các bài toán yêu cầu tốc độ xử lý realtime YOLO không chỉ là thuật toán phát hiện và dán nhãn cho bài toán phân loại mà còn xác định được vị trí của vật thể
Giống như mô hình SSD, YOLO cũng bao gồm các base network là các mạng tích chập giúp trích xuất đặc trưng Phần sau là những Extras Layers dùng để phát hiện đối tượng trên các đặc trưng đã được trích xuất ra
Hình 2.29 Cấu trúc mạng YOLO [11]
Trong YOLOv3, tác giả sử dụng một mạng để trích xuất đặc trưng là DarkNet53 Mạng này gồm 53 lớp tích chập kết nối liên tiếp, mỗi lớp được theo sau bởi một batch normalization và một Leaky ReLu Để giảm kích thước output sau mỗi lớp tích chập, tác giả đã giảm số mẫu bằng các bộ lọc có kích thước là 2, điều này giúp giảm số lượng tham số mô hình để tăng tốc độ đào tạo và suy luận
Hình 2.30 Các layer trong mạng Darknet53 [11]
YOLO hiện tại hỗ trợ các đầu vào là 416x416 và 608x608 Khi ảnh được đưa vào mạng, sẽ đi qua các lớp tích chập và giảm shape theo cấp số nhân là 2 Sau đó ta thu được feature map với kích thước nhỏ để dự đoán vật thể trên từng ô Với đầu vào 416x416 thì feature map có kích thước là 13x13, 26x26 và 52x52, còn với đầu vào 608x608 thì feature map có kích thước là 19x19, 38x38 và 72x72
Output của YOLO là một vecto:
p o là xác xuất dự báo vật thể trong bounding box
( , , , )t t t t x y w h lần lượt là vị trí tọa độ tâm, chiều rộng và chiều cao của ĐỒ ÁN TỐT NGHIỆP
Output được xác định theo theo số lượng class theo công thức (n_class+5) Nếu số lượng class huấn luyện là 10 thì sẽ có 15 output Trường hợp áp dụng 3 anchor trong một cell thì số output sẽ là: (n_class+5) * 3 = 255
Hình 2.31 Kiến trúc một output của YOLO [11] Ảnh gốc là một feature map có kích thước 13x13, trên mỗi cell ta sẽ chọn 3 anchor box sao cho các tâm của các anchor box trùng với cell Khi đó output của YOLO là một vecto concatenate của 3 bounding boxes
2.4.2.1.3 Dự báo trên nhiều feature map
Tương tự như SSD, YOLO cũng dự đoán vật thể trên nhiều feature map Những feature map có kích thước nhỏ sẽ dự báo vật thể có kích thước lớn, ngược lại những feature có kích thước lớn sẽ dự báo được những vật thể có kích thước nhỏ Trên mỗi cell của feature map sẽ có 3 anchor box để dự đoán vật thể, như vậy ta tính được số lượng các anchor box trong mô hình YOLO là (3 feature map x 3 anchor box) = 9 Từ đó ta có thể tính được số lượng anchor box trên một bức ảnh là:
YOLO sẽ cần các anchor box để ước lượng và tìm bounding box cho vật thể Ban đầu các anchor box này sẽ xác định và bao quanh vật thể, sau đó thuật toán regression bounding box sẽ tìm ra bounding box dự đoán cho vật thể Mỗi vật thể sẽ được phân bổ về một anchor box Trong trường hợp có nhiều anchor box cùng bao quanh vật thể thì thuật toán sẽ chọn ra anchor box có IOU với ground truth cao nhất
Hình 2.32 Cách xác định anchor box cho vật thể [11]
Mô tả: Từ cell i ta xác định được 3 anchor box viền xanh Tuy nhiên chỉ anchor box viền xanh đậm là được chọn vì có IOU với ground truth bounding box là cao nhất Bên cạnh đó, mỗi vật thể còn được phân bố về một cell trên feature map chứa điểm mid point của vật thể Từ cell đó ta có thể xác định các anchor box của đối tượng Tóm lại, để xác định vật thể ta cần quan tâm đến anchor box và cell ĐỒ ÁN TỐT NGHIỆP
Hàm Loss funtion của YOLO chia thành 2 thành phần: L loc (localization loss) đo sai số của bounding box và L con (confidence loss) đo sai số của phân phối xác suất
S B S obj obj obj con ij noobj ij ij ij i i i i j i c C loc con
l i obj : Hàm indicator có giá trị 0,1 nhằm xác định xem cell i có chứa vật thể không, bằng 1 nếu chứa và bằng 0 nếu không chứa
l ij obj : Cho biết bounding box thứ j của cell i có phải là bounding box của vật thể được dự đoán không
C ij : Điểm tin cậy của ô i
C ij : Điểm tự tin dự đoán
C: Tập hợp tất cả các lớp
p c i ( ): Xác suất có hay không ô i chứa đối tượng của lớp c C
p c i ( ): Xác xuất có điều kiện dự đoán
Như đã trình bày ở trên, để tìm bounding box ta cần quan tâm đến anchor box và cell Giả sử một anchor box có kích thước (p w ,p h ) tại cell trên feature map góc trên bên trái ( ,c c x y ), mô hình dự đoán 4 tham số ( , , , , )t t t t x y w h Trong đó 2 tham số đầu là độ lệch so với góc trên bên trái của cell và 2 tham số sau là tỉ lệ với anchor box Các tham số này giúp xác định được tọa độ bounding box có tâm ( ,b b x y ) và kích thước ( , )b b w h
Hình 2.34 Công thức ước lượng bounding box từ anchor box [11]
Đánh giá mô hình phát hiện đối tượng
Hình 2.35 Confusion Matrix với bài toán 2 class [23]
Confusion Matrix [13] cho bài toán phát hiện đối tượng với 2 class là Positive và Negative có 4 thành phần: True Positive (TP), False Positive (FP), False Negative (FN) và True Negative (TN) Một số khái niệm cơ bản cần nắm:
- True Positive (TP): các điểm positive được nhận đúng là positive
- False Positive (FP): các điểm negative thực được nhận sai là positive
- False Negative (FN): các điểm positive được phát hiện sai là negative
- True Negative (TN): các điểm negative được nhận đúng là negative ĐỒ ÁN TỐT NGHIỆP
- Màu đỏ là Ground Truth: là nhãn thực, với bài toán Object detection thì đây là bounding box thực bao quanh vật thể, đã được gán nhãn
- Màu xanh green là predict bounding box; là khung chữ nhật được model dự đoán ra
- Vùng màu xanh blue bên trên là vùng giao giữa Ground Truth và predict bounding box
- Vùng màu xanh blue bên dưới là vùng hợp giữa Ground Truth và predict bounding box
- IoU là tỷ lệ giữa giao và hợp
Như vậy đánh giá qua thì IoU càng lớn thì càng tốt, đồng nghĩa với việc phần giao lớn hơn và phần hợp nhỏ hơn (nhãn dự đoán ra giống với nhãn thực)
Hình 2.37 Ví dụ về IOU [23]
Precision được định nghĩa là tỉ lệ số điểm true positive trong số những điểm được phân loại là positive (TP+FP), hiểu đơn giản là model dự đoán thì có bao
Recall được định nghĩa là tỉ lệ số điểm true positive trong số những điểm thực sự là positive (TP+FN)
Re TP call TP FN
F1-score có giá trị nằm trong (0,1], F1 càng cao thì mô hình càng tốt, lý tưởng nhất là F1=1 (khi Precision=1 và Recall=1)
Một mô hình tốt là mô hình có cả Precision và Recall đều cao, tức là càng gần một càng tốt, từ đó F1-score cũng gần tiến tới 1 Có hai cách đo chất lượng mô hình dựa vào Precision và Recall: Precision-Recall curve và F1-score
2.5.4 Precision-Recall curve và Average precision
Precision-Recall curve [13] là một cách tốt để đánh giá hiệu suất của một mô hình phát hiện đối tượng cũng như độ tin cậy đã được biểu đồ hóa bởi một đường cong cho mỗi lớp Khái niệm Area Under the Curve (AUC) cũng được định nghĩa tương tự Với Precision-Recall curve, AUC còn có một tên khác là Average precision (AP)
Giả sử có N ngưỡng để tính precision và recall, mỗi ngưỡng cho một cặp giá trị precision, recall là Pn , Rn , n=1,2,…,N Precision-Recall curve được vẽ bằng cách vẽ từng điểm có tọa độ (Pn , Rn ) trên trục tọa độ và nối chúng với nhau AP được tính bằng:
Và mAP là trung bình của AP được tính cho tất cả các lớp ĐỒ ÁN TỐT NGHIỆP
Hình 2.38 Biểu đồ Precision và Recall
Lập trình Python
Python là một ngôn ngữ lập trình cấp cao, được thiết kế rất dễ học và sử dụng Ngôn ngữ lập trình Python được tạo ra bởi Guido van Rossum và lần đầu được ra mắt năm 1991 Python là ngôn ngữ sáng sủa, cấu trúc rõ ràng, đơn giản, ngắn gọn và thuận tiện cho người mới học
Các tính năng chính của ngôn ngữ Python:
- Ngôn ngữ lập trình đơn giản, dễ học
- Miễn phí, mã nguồn mở, phổ biến nhất
- Khả năng hoạt động nhiều nền tảng
- Khả năng mở rộng và có thể nhúng
- Ngôn ngữ thông dịch cấp cao
- Thư viện đa dạng để giải quyết nhiều tác vụ phổ biến
- Có thể hướng đối tượng
Hình 2.39 Một số thư viện Python phổ biến [4]
IDE: Có nhiều IDE hỗ trợ tốt cho Python bao gồm PyCharm, Visual Studio Code, Sublime Text, Jupyter, …
Hình 2.40 Các IDE hỗ trợ Python [4]
Environment: Để thuận tiện cho quá trình xây dựng dự án, cài đặt thư viện tránh bị xung đột và dễ debug code thì việc sử dụng môi trường ảo Anaconda là rất cần thiết
Hình 2.41 Các môi trường Conda [3] ĐỒ ÁN TỐT NGHIỆP
YÊU CẦU PHẦN CỨNG
Thành phần phần cứng
1.7 Nội dung đề tài Đề tài “Điều khiển mô hình drone bay bám theo đối tượng” bao gồm các chương sau:
Chương này cung cấp cái nhìn tổng quát về đề tài bao gồm giới thiệu, tình hình nghiên cứu trong nước, ngoài nước, mục tiêu, giới hạn và nội dung đề tài
Chương 2: Cơ sở lý thuyết
Chương này cung cấp những kiến thức cơ bản về nguyên lý của drone, bộ điều khiển PID, học sâu, mạng nơ-ron tích chập, các mô hình phát hiện đối tượng
Chương 3: Phần cứng sử dụng
Chương này trình bày chi tiết về phần cứng được sử dụng.
THUẬT TOÁN ĐIỀU KHIỂN
Mô hình mạng phát hiện người
Bài toán phát hiện đối tượng là bài toán được ứng dụng khá rộng rãi và có vai trò rất quan trọng trong lĩnh vực thị giác máy tính Ngày càng có nhiều phương pháp giải quyết bài toán này nhưng trong đó nổi trội nhất vẫn là các mô hình mạng học sâu dựa trên CNN Hình 4.1 dưới đây so sánh hiệu suất của một số mạng phát hiện đối tượng khác nhau được thử nghiệm trên GPU NVIDIA GTX 1080Ti
Hình 4.1 So sánh hiệu suất phát hiện đối tượng của các mạng khác nhau [9]
Trong nhiệm vụ phát hiện con người, tôi đã chọn YOLOv4-tiny để trích xuất đặc trưng Từ hình trên có thể thấy mô hình này vượt trội hơn các mô hình CNN khác về tốc độ xử lý Trong dự án này, tốc độ tính toán được ưu tiên vì hạn chế phần cứng là Jetson Nano Về kiến trúc thì YOLOv4-tiny là bản rút gọn của YOLOv4 khi giảm số lớp tích chập từ 137 xuống còn 29 lớp và giảm số head từ 3 xuống 2 nhằm giảm số lượng tham số mô hình từ đó tăng tốc độ tính toán để phù hợp với các thiết bị di động và nhúng Tuy nhiên độ chính xác vẫn ở mức tốt và đáp ứng được yêu cầu đặt ra
Bảng đánh giá hiệu suất các phiên bản YOLOv3/YOLOv4 với tập dữ liệu COCO “val2017” và được suy luận trên Jetson Nano với JetPack 4.4 (TensorRT 7)
Về kiến trúc YOLOv4-tiny sử dụng:
- Head: giống YOLOv3 [11] ĐỒ ÁN TỐT NGHIỆP
Hình 4.2 Cấu trúc YOLOv4-tiny [18]
CSPDarkNet53-tiny về cơ bản cấu tạo giống CSPDarkNet53 được cấu tạo từ CSP và DarkNet53
CSP (Cross-Stage-Partial connections) có nguồn gốc từ kiến trúc DenseNet sử dụng đầu vào trước đó và nối nó với phần đầu vào hiện tại trước khi chuyển vào Dense Layer
Hình 4.3 Mô tả cấu trúc CSPBlock [12]
Thay vì chỉ có một đường đi từ đầu tới cuối, CSPBlock chia thành 2 đường đi Một phần qua các khối chập, và phần còn lại thì đi thẳng tới cuối khối, sau đó hai phần sẽ được cộng lại và đưa vào khối tiếp theo Ý tưởng ở đây là loại bỏ các nút thắt trong tính toán trong DenseNet để cải thiện việc học
CSPDarkNet53-tiny về cơ bản giống CSPDarkNet53 YOLOv4 sử dụng CSPDarkNet53 làm backbone vì theo tác giả CSPDarkNet53 có độ chính xác trong việc phát hiện đối tượng cao hơn ResNet., mặc dù ResNet có độ chính xác trong việc phân loại cao hơn Hạn chế này có thể được cải thiện bằng cách sử dụng hàm activation Mish và một số kỹ thuật khác
Neck có nhiệm vụ trộn các đặc trưng và kết hợp các bản đồ đặc trưng đã học được thông qua quá trình trích xuất đặc trưng (backbone) và quá trình nhận dạng (Dense Prediction) Mỗi lần thực hiện phát hiện với các kích thước ảnh rescale khác nhau, tác giả đã thêm các luồng đi từ dưới lên và các luồng đi từ trên xuống vào cùng nhau hoặc được nối với nhau trước khi đưa vào head (phần đầu), từ đó lớp nhận dạng sẽ chứa thông tin phong phú hơn Một số cấu trúc tiêu biểu được sử dụng cho Neck là SPP, FPN, PAN, …
Từ YOLOv3 tác giả giới thiệu cách thức áp dụng SPP Mạng SPP này được thay đổi, không còn chia các bản đồ đặc trưng thành các bins rồi ghép các bins này với nhau để được một vecto có dimension cố định Yolo-SPP áp dụng một max pool với các kernel có kích thước khác nhau Kích thước của đầu vào bản đồ đặc trưng được giữ nguyên, các bản đồ đặc trưng thu được từ việc áp dụng max pool (với kernal size khác nhau) sẽ được concatinate YOLOv4 cũng áp dụng kỹ thuật này ĐỒ ÁN TỐT NGHIỆP
Hình 4.5 Cách áp dụng YOLO-SPP
Mạng học sâu càng sâu thì càng làm mất mát thông tin, do đó để phát hiện được các đối tượng có kích thước nhỏ thì các nhà nghiên cứu đã đề xuất nhiều phương pháp như DenseBlock, FPN Trong đó PAN là một cải tiến của FPN nhằm cải thiện thông tin xác định vị trí trên các top layers
Hình 4.6 Kiến trúc của PAN [12]
PAN thêm bottom-up pathway (b), trong đó, mỗi layer lấy input là bản đồ đặc trưng của cấp trước đó, đi qua một conv 3x3 Output được add với bản đồ đặc trưng của top-down pathways với cấp tương ứng Thiết kế của Neck có thể được mô tả như hình 4.7 dưới
Hình 4.7 Thiết kế của Neck
Theo bài báo gốc của tác giả, YOLOv4 đã chỉnh sửa hàm add thành hàm concat
Hình 4.8 Sự thay đổi của hàm PAN trong YOLOv4
‘Tại các cấp của augmented bottom-up pathway, đối tượng được phát hiện một cách độc lập với các kích thước khác nhau Điều này có thể dẫn đến sự dư thừa về dữ liệu hoặc tại mỗi cấp sẽ không sử dụng thông tin từ các cấp khác Do đó, tại mỗi cấp, các bản đồ đặc trưng sẽ được đẩy qua một mạng SPP (=ROIAlign), rồi sau đó đưa qua lớp Fully connected layer, kết quả thu được sẽ được element-wise operation để thu được dự đoán
4.1.3 Head (phần đầu) – nhận dạng
Deep Leaning platform
Phần cứng sử dụng trong đồ án này là Jetson Nano không mạnh để xử lý các tác vụ AI nên tôi cần phải tối ưu thuật toán xử lý thì mới có thể đạt hiệu suất tốt nhất Tôi sử dụng thư viện tăng tốc TensorRT để tăng tốc quá trình xử lý Để sử dụng thư viện TensorRT thì cần phải chuyển mô hình về dạng ONNX Quá trình chuyển đổi được thể hiện như hình 4.9
Hình 4.9 Quy trình chuyển đổi để tăng tốc xử lý
ONNX là viết tắt của Open Neural Network Exchange, là một công cụ trung gian nhằm chuyển đổi mô hình học máy từ các framework khác về dạng ONNX nhờ đó giúp chúng ta chuyển đổi dễ dàng giữa các framework khác nhau ONNX hỗ trợ chuyển đổi nhiều framework phổ biến hiện nay như Pytorch, Tensorflow, Keras, Scikit-learn, XGBoost, v.v
ONNX cung cấp các tính năng:
- Cung cấp đồ thị biểu diễn chuẩn: Mỗi framework khác nhau sẽ có đồ thị biểu diễn tính toán khác nhau ONNX cung cấp một đồ thị có thể biểu diễn đồ thị của tất cả các framework
- Cung cấp dữ liệu chuẩn: ONNX cung cấp nhiều kiểu dữ liệu chuẩn như int8, int16, float16, v.v
- Cung cấp các hàm chuẩn: ONNX cung cấp các hàm có thể chuyển đổi các hàm tương ứng trong framework mong muốn
TensorRT [25][26] là một thư viện được phát triển bởi NVIDIA nhằm cải thiện tốc độ inference trên các thiết bị GPU NVIDIA Nó có thể cải thiện tốc độ suy luận đến 2.4 lần với các tác vụ xử lý realtime và nhanh hơn 30 lần so với dùng CPU Điều này là do cơ chế tính toán song song với hàng nghìn nhân CUDA GPU
Hình 4.10 Ứng dụng của TensorRT trong các framework với phần cứng
TensorRT sẽ thực hiện 5 loại tối ưu giúp tăng hiệu năng suy luận
- Precision Calibration: Trong quá trình training, các tham số và hàm kích hoạt trong độ chính xác FP32 (Float Point 32) sẽ được convert về độ chính xác FP16 hoặc INT8 Việc tối ưu này sẽ giúp giảm khối lượng tính toán, tăng tốc độ suy luận nhưng phải đánh đổi bằng việc giảm độ chính xác của mô hình mặc dù không đáng kể Nhưng điều này rất cần thiết trong xử lý realtime
- Layer và Tensor Fusion: TensorRT sẽ gộp các layer và tensor để tối ưu hóa sử dụng bộ nhớ GPU và băng thông bởi việc gộp các node theo chiều dọc, chiều ngang hoặc cả hai
- Kernel auto-turning: Một vài kernel sẽ thực thi trong suốt tiến trình để tối ưu mô hình, chẳng hạn như tối ưu batch_size, filter_size, input data
- Dynamic Tensor Memory: Phân bố bộ nhớ sử dụng một cách khoa học, giảm bộ nhớ và cải thiện khả năng tái sử dụng bộ nhớ
- Multiple Stream Execution: Cho phép xử lý song song nhiều luồng đầu vào ĐỒ ÁN TỐT NGHIỆP
Hình 4.11 5 loại tối ưu để tăng hiệu suất suy luận [26]
Vì chương trình có nhiều tác vụ được xử lý nên sẽ làm chậm quá trình xử lý tổng thể nếu không tối ưu tài nguyên Nếu chỉ có một luồng (thread) làm tất cả mọi việc thì nó sẽ quá tải và gặp giới hạn về tốc độ xử lý Mỗi công việc được phụ trách bởi một luồng và chúng phối hợp với nhau giúp ứng dụng mượt hơn Để thực hiện điều này thì tôi sử dụng một kỹ thuật gọi là đa phân luồng (Multi threading) Một chương trình đa luồng chứa hai hoặc nhiều luồng có thể chạy đồng thời và mỗi luồng có thể xử lý từng tác vụ khác nhau tại cùng một thời điểm Ở chương trình này tôi phân chia các luồng xử lý như hình 4.12
Hình 4.12 Sử dụng thuật toán đa luồng để xử lý
SDK 2.0 User Guide
Tello SDK [15] kết nối với máy bay thông qua cổng WiFi UDP, cho phép người dùng điều khiển máy bay bằng các lệnh văn bản
4.3.2 Kiến trúc và cách sử dụng tập lệnh
Bước 1: Thiết lập ứng dụng khách UDP trên PC, Mac hoặc Mobile để gửi và nhận tin nhắn từ Tello thông qua cùng một cổng
Bước 2: Trước khi gửi bất kỳ lệnh nào, hãy gửi lệnh đến Tello qua UDP PORT 8889 để khởi tạo chế độ SDK
Nhận luồng video Tello: Gửi “streamon” tới Tello qua UDP PORT 8889 để bắt đầu phát trực tuyến
Các loại lệnh và kết quả Tello
Tello SDK gồm ba loại lệnh cơ bản
Trả về “ok” nếu lệnh thành công
Trả về “error” hoặc mã kết quả thông tin nếu lệnh không thành công Đặt Command (xxx a) để đặt các giá trị tham số phụ mới
Trả về “ok” nếu lệnh thành công
Trả về “error” hoặc mã kết quả thông tin nếu lệnh không thành công Đọc lệnh (xxx?)
Trả về giá trị hiện tại của các tham số phụ
Bảng 4.1 Các lệnh điều khiển đã sử dụng [15]
Lệnh điều khiển Mô tả
Command Vào chế độ SDK take off Tự động cất cánh landing Tự động hạ cánh streamon Bật luồng video streamoff Tắt luồng video emergency Dừng mô-tô ngay lập tức ĐỒ ÁN TỐT NGHIỆP x = 20-500 left x Bay sang trái x cm x = 20-500 right x Bay sang phải x cm x = 20-500 forward x Bay về phía trước x cm x = 20-500 back x Bay về phía sau x cm x = 20-500 cw x Xoay theo chiều kim đồng hồ x độ x = 1-360 ccw x Xoay ngược chiều kim đồng hồ x độ x = 1-360 flip x Lật theo hướng x l=left; r=right; f=forward; bck go x y z speed Di chuyển đến x y z với tốc độ (cm/s) x=-500-500; y=-500-500; z=-500-500; speed-100 stop Bay lơ lửng trên không
Bảng 4.2 Cài đặt các lệnh [15]
Lệnh điều khiển Mô tả speed x Cài đặt tốc độ x cm/s
X-100 rc a b c d Đặt bộ điều khiển từ xa thông qua bốn kênh a=trái/phải (-100-100) b=tiến/lùi (-100-100) c=lên/xuống (-100-100) d=yaw (-100-100) wifi ssid pass Cài đặt mật khẩu wifi
Ssid=tên wifi được cập nhật
Trên đây là một số lệnh cơ bản được sử dụng trong đề tài này, Tello SDK còn hỗ trợ khá nhiều lệnh nâng cao khác và nhiều tính năng dành cho nhà phát triển để có thể đa dạng hóa các mục đích sử dụng cho học tập và nghiên cứu
Bên cạnh đó tôi còn phát triển thêm một giao diện Python được viết bằng Tkinter để điều khiển Tello drone thủ công Tôi dự định sẽ tích hợp chương trình phát hiện và bám theo người như một chế độ “Follow me” trong giao diện nhưng có khá nhiều lỗi phát sinh và tôi không kịp thời gian hoàn thành Dưới đây là giao diện điều khiển đơn giản được viết bằng Tkinter
Hình 4.13 Giao diện điều khiển cơ bản
Thuật toán bay bám theo đối tượng
Đầu tiên, khi nhận được video từ camera trên Tello drone gửi về Jetson Nano qua WiFi, máy tính nhúng sẽ tiến hành tách từng khung hình để xử lý Ảnh sẽ được đưa vào mạng YOLOv4-tiny để phát hiện người, khi phát hiện được người thì đầu ra sẽ là ảnh kèm với kết quả dự đoán gồm bounding box, tên lớp và độ chính xác ĐỒ ÁN TỐT NGHIỆP
Hình 4.14 Quy trình xử lý phát hiện người của mạng YOLOv4-tiny [17]
Sau khi phát hiện người và xuất ra bounding box, Tello drone sẽ bám theo người khi người lệch khỏi vị trí giữa khung hình Mục tiêu là điều khiển góc Yaw để đưa vị trí tâm bounding trùng với vị trí giữa khung hình sau đó điều khiển drone bay tiến lùi dựa theo diện tích bounding box
Hình 4.15 Cách hoạt động bám theo người của Tello drone
Từ ý tưởng trên ta xây dựng được lưu đồ thuật toán như hình 4.16
Hình 4.16 Lưu đồ thuật toán bám theo người của Tello drone
Mô tả lưu đồ thuật toán điều khiển: Khi mạng YOLOv4-tiny phát hiện được người và vẽ được bounding box=>Tính sai số giữa tâm bounding box và vị trí giữa khung hình=>Điều khiển góc Yaw sao cho tâm bounding box trùng với vị trí giữa khung hình (speed_PID) =>Kiểm tra 3 điều kiện:
- Nếu fbRange[0] < area < fbRange[1] thì fb = 0
Nếu area > fbRange[1] thì fb = -20
Tính Error, speed_PID Điều khiển góc Yaw fbRange = [6200,6800] area = w*h fbRange[0] < area
Area>fbRange[1] Area