4.4.1. Lấy dữ liệu cho K - means từ Hough Transform
Biến đổi Hough thường dùng để xác định đường thẳng hoặc vòng tròn trong ảnh đã được nhị phân hóa. Thông thường, 1 đường thẳng được biểu diễn toán học dạng: y=ax+b
47 Như vậy, với mỗi cặp tọa độ (x, y) cho trước, luôn có 1 họ đường thẳng đi qua nó. Tuy nhiên, cách biểu diễn này rất khó để xác định 1 đường thẳng đi qua nhiều điểm trong 1 bức ảnh do không giới hạn được giá trị a và b.
Hình 4.6 Hình mình họa sử dụng trong OpenCV
Như hình trên, một đường thẳng được đặc trưng bởi góc (-90 < θ < 90) so với trục x và khoảng cách ρ tới điểm gốc (0, 0). Với mỗi điểm ảnh (x, y), đường thẳng qua nó được biểu diễn như sau:
[4.1]
Như vậy, việc biểu diễn đường thẳng bằng các cặp giá trị (a, b) được biến đổi thành biểu diễn giá trị r trong miền θ dưới dạng đường cong dạng sin. Cách này gọi là biến đổi Hough.
Áp dụng biến đổi Hough để tìm đường thẳng trong ảnh nhị phân. Với mỗi điểm ảnh trắng, ta có 1 cặp tọa độ (x, y), tương ứng là đường cong biểu diễn giá trị trong
48 miền θ.
Tìm giao của 2 đường cong cho ta ( , θ) biểu diễn đường thẳng đi qua 2 điểm. Ta có thể đặt giá trị ngưỡng N cho số đường cong đi qua điểm bất kỳ và chọn kết quả là các cặp ( , θ) có số đường cong đi qua lớn hơn N.
4.4.2. Ứng dụng Hough Transform trong OpenCV
Biến đổi Hough (Hough Transform) trong OpenCV
Hàm được sử dụng là cv2.HoughLines ().
Nó chỉ đơn giản trả về một mảng các giá trị ( ). được đo bằng pixel và được đo bằng radian. Tham số đầu tiên, Hình ảnh đầu vào phải là hình ảnh nhị phân. Tham số thứ hai và thứ ba tương ứng là và . Đối số thứ tư là ngưỡng, có nghĩa số đường cong đi qua điểm ( ) tối thiểu để có thể coi là một dòng dòng. Nó đại diện cho độ dài tối thiểu của dòng nên được phát hiện.
Biến đổi Hough có xác suất (Probabilistic Hough Transform)
Việc biến đổi Hough thông thường cần rất nhiều tính toán. Probabilistic Hough Transform nó không xem xét tất cả các điểm, thay vào đó chỉ lấy một tập hợp con ngẫu nhiên của các điểm và điều đó là đủ để phát hiện dòng. Chỉ cần chúng ta giảm ngưỡng. Hàm được sử dụng là cv2.HoughLinesP ().
Nó có hai đối số mới:
- minLineLength - Độ dài tối thiểu của đoạn thẳng. Các đoạn ngắn hơn này bị bỏ. - maxLineGap - Khoảng cách tối đa được phép giữa các đoạn để có thể coi chúng là
một đoạn riêng biệt.[11]
Ta sẽ thêm hàm HoughLinesP vào file “lanenet_postprocess.py” trong thư mục “lanenet_model”[4]:
Đầu ra của hàm biến đổi Hough Transform sẽ cho một tập dữ liệu điểm có thể ứng dụng để K – means để tìm điểm trung tâm.
49
Hình 4.8 Biến đổi Hough transform
4.4.3. Áp dụng giải thuật K – means Clustering
4.4.3.1. Giới thiệu về phân cụm dữ liệu bằng K – means.
Phân cụm là kỹ thuật rất quan trọng trong khai phá dữ liệu, nó thuộc lớp các phương pháp nsupervised Learning trong Machine Learning. Có rất nhiều định nghĩa khác nhau về kỹ thuật này, nhưng về bản chất ta có thể hiểu phân cụm là các qui trình tìm cách nhóm các đối tượng đã cho vào các cụm (clusters), sao cho các đối tượng trong cùng 1 cụm tương tự (similar) nhau và các đối tượng khác cụm thì không tương tự (Dissimilar) nhau.
Mục đích của phân cụm là tìm ra bản chất bên trong các nhóm của dữ liệu. Các thuật toán phân cụm (Clustering Algorithms) đều sinh ra các cụm (clusters). Tuy nhiên, không có tiêu chí nào là được xem là tốt nhất để đánh hiệu của của phân tích phân cụm, điều này phụ thuộc vào mục đích của phân cụm.
Kỹ thuật phân cụm có thể áp dụng trong rất nhiều lĩnh vực như:
- Marketing: Xác định các nhóm khách hàng (khách hàng tiềm năng, khách hàng giá trị, phân loại và dự đoán hành vi khách hàng,…) sử dụng sản phẩm hay dịch vụ của công ty để giúp công ty có chiến lược kinh doanh hiệu quả hơn;
- Biology: Phận nhóm động vật và thực vật dựa vào các thuộc tính của chúng; - Libraries: Theo dõi độc giả, sách, dự đoán nhu cầu của độc giả…;
50 - Insurance, Finance: Phân nhóm các đối tượng sử dụng bảo hiểm và các dịch vụ tài chính, dự đoán xu hướng (trend) của khách hàng, phát hiện gian lận tài chính (identifying frauds).
- WWW: Phân loại tài liệu (document classification); phân loại người dùng web (clustering weblog);…
4.4.3.2. Giải thuật K – means
Khái quát giải thuật
K-Means là thuật toán rất quan trọng và được sử dụng phổ biến trong kỹ thuật phân cụm. Tư tưởng chính của thuật toán K-Means là tìm cách phân nhóm các đối tượng (objects) đã cho vào K cụm (K là số các cụm được xác đinh trước, K nguyên dương) sao cho tổng bình phương khoảng cách giữa các đối tượng đến tâm nhóm (centroid ) là nhỏ.
Khoảng cách Euclidean
Hàm đo độ tương tự sử dụng khoảng cách Euclidean:
với i=1,2,…n là đối tượng thứ i cần phân loại.
51 với j=1,2,…k là điển trung tâm nhóm j.
Khoảng cách Euclidean được tính từ đến được tính theo công thức:
√∑ [4.2]
: là Euclidean được tính từ đến .
: thuộc tính thứ s của đối tượng .
: thuộc tính thứ s của điểm trung tâm .
Phần tử trung tâm
K phần thử trung tâm (k cụm) ban đầu được chọn ngẫu nhiên, sau mỗi lần nhóm đối tượng vào các nhóm, phần tử trung tâm được tính toán lại.
Clusteri = { – Nhóm thứ i. i = 1,2,….k. với k là số cluster.
j = 1,2,….m. với m là thuộc tính.
t là số phần tử hiện có của của nhóm thứ i.
: thuộc tính thứ j của phần tử s.
: tọa độ thử j của phần tử trung tâm nhóm i.
∑
[4.3]
52
Hình 4.10 Các bước của thuật toán K - means
Thuật toán K-Means thực hiện qua các bước chính sau:
Đầu vào: Dữ liệu X và số lượng cluster cần tìm K
Đâu ra: Các center .
- Bước 1: Chon K điểm bất kì làm các center ban đầu.
- Bước 2: Tính khoảng cách giữa các đối tượng (objects) đến tâm (thường dùng khoảng cách Euclidean).
- Bước 3: Nhóm các đối tượng vào nhóm gần nhất. - Bước 4: Xác định lại tâm mới cho các nhóm.
- Bước 5: Thực hiện lại bước 2 cho đến khi không có sự thay đổi của việc gán dữ liệu vào từng cluster.
4.4.3.3. Các bước để ứng dụng K-means nhận diện lane
Ý tưởng áp dụng K-means: Để áp dụng được thuật toán K-means phân cụm dữ liệu, chúng ta cần tạo ra bộ dữ liệu là các điểm từ ảnh binary mà AI nhận diện được. Sau
53 đó, đồng thời phân từng điểm đó vào từng lane cụ thể. Sau đó mới dùng K-means gôm nhiều điểm đó thành một gọi là các centers. Chúng ta sẽ thực hiện các bước sau.
Tạo các đường bao các lane (gọi là contours) bằng cách sử dụng hàm cv2.findContours() trong OpenCV.
Kết quả thu được (viền màu xanh là được gọi là các contour đã được vẽ lên):
Hình 4.11 Tìm các contours trên ảnh chụp
54 Từ contours vừa tạo ở trên, ta tạo được một hình chữ nhật bé nhất ôm lấy contour. Kết quả thu được (Hình chữ nhật màu tím là các box nhỏ nhất bao lấy contour):
Hình 4.13 Tìm box ôm lấy contour trên ảnh tự chụp
Hình 4.14 Tìm box ôm lấy contour trên ảnh download
Sau đó ta dùng Hough Tranform, đầu ra của hàm Hough sẽ cho ta một tập hợp các điểm đầu và điểm cuối của một của một đường thẳng. Để biết được điểm đó thuộc contours nào, ta cần phải xét điểm đó có thuộc box của contour đó không, sau đó lưu giá
55 trị lại đúng vào contour đó. Sau khi có pointList là tập hợp giá trị các điểm cần phân cum, bậy giờ ta có thể sử dụng K- means để phân cụm các liệu, tìm ra các center để vẽ lane. Sau khi sử dụng K-means ta có được kết quả với các center. Center là các chấm màu thể hiện trên hình.
Hình 4.15 Tìm các center trên ảnh tự chụp
56 Sau khi tìm được các center ta sẽ dùng phương pháp nội suy tìm ra được đường thẳng gần với các center nhất và vẽ đường thẳng đó.
[4.4]
Kết quả thu được các lane được hiện lên như sau:
Hình 4.17 Bắt lane trên ảnh tự chụp
57 Kết quả thu được khi nhận diện lane bằng K – means:
58
Hình 4.19 Kết quả sau khi sử dụng K-Means
Nhận xét:
- Lane nhận diện tốt hơn đối với nhiều ảnh test khác nhau - Những đoạn đường cong bắt được tốt
59 - Khắc phục được những hạn chế và những thiếu sót ở những đoạn đường AI bắt chưa
tốt
- Những hạn chế:
+ Tốc độ xử lý tăng lên đáng kể sau khi dùng thuật toán K – means ( Từ khoảng 0.1/frame ảnh lên đến khoảng 0.17s/frame.
+ Do phụ thuộc nhiều vào AI, nếu AI bắt không tốt sẽ không nhận diện được lane. + Chưa được tracking, nên lane sẽ bị mất khi có xe vượt mặt cùng làn
- Hướng phát triển tiếp theo: Tracking bằng cách sử dụng bộ lọc Kalman filter
4.5. Theo dõi làn đường (tracking) bằng cách sử dụng Kalman filter 4.5.1. Giới thiệu Kalman filter 4.5.1. Giới thiệu Kalman filter
Kalman filter là tập hợp các phương trinh toán học mô tả các phương pháp tính toán truy hồi hiệu quả cho phép ước đoán trạng thái của một quá trình (process) sao cho trung bình phương sai của độ lệch (giữa giá trị thực và giá trị ược đoán) là nhỏ nhất. Kalman filter rất hiệu quả trong việc ước đoán các trạng thái trong quá khứ, hiện tại và tương lai thậm chí ngay cả khi tính chính xác của hệ thống mô phỏng không được khẳng định.
Hình 4.20 Hoạt động của Kalman filter
Hình trên mô hình hóa hoạt động của mạch lọc Kalman. Chúng ta có tín hiệu đó được, chúng ta có mô hình của tín hiệu đo được (đòi hỏi tuyến tính) và sau đó là áp dụng
60 vào trong hệ thống phương trình của mạch lọc để ước lượng trạng thái quan tâm. Thực ra tín hiệu đó là không khó, phương trình đã có sẵn, cái chúng ra cần chính là mô hình hóa hệ thống. Để có thể ứng dụng một cách hiệu quả mạch lọc Kalman thì chúng ta phải mô hình hóa được một cách tuyến tính sự thay đổi của trạng thái cần ước lượng (estimate) hoặc dự đoán (predict).
Hình 4.21 Mô hình không gian trạng thái của Kalman filter
4.5.2. Các phương trình của Kalman filter:
Quá trình dự đoán:
Kalman filter dựa vào trạng thái ước lượng điều chỉnh xˆk k| - là ước lượng của xk
để ước lượng trạng thái xˆk1|k - là ước lượng dự đoán của xk1cho phép đo zk1
Trạng thái dự đoán:
1| |
ˆk k k k kˆ k k
x F x G u [4.4]
Hiệp phương sai ước lượng dự đoán:
1| |
T k k k k k k k
P F P F Q [4.5]
Đo lường dự đoán:
1| 1ˆ 1|
ˆk k k k k
z H x [4.6]
Quá trình điều chỉnh
61
1 1 1ˆ 1|
k k k k k
r z H x [4.7]
Hiệp phương sai độ lệch:
1 1 1| 1 1 T k Hk Pk kHk k S R [4.8] Hệ số Kalman: 1 1 1| 1 1 T k k k k k K P H S [4.9]
Trạng thái ước lượng điều chỉnh:
1| 1 1| 1 1
ˆk k ˆk k k k
x x K r [4.10]
Hiệp phương sai ước lượng điều chỉnh:
1| 1 ( 1 1) 1|
k k k k k k
P I K H P [4.11]
62
4.5.3. Ứng dụng Kalman fileter để tracking
Ý tưởng thực hiện tracking với Kalman filter
Kalman có 2 trường hợp, không ước lượng được trạng thái trong nhiều frame liên tục (fail nhiều), không ước lượng được trạng thái liên tục nhưng trong ít frame (fail ít). Số lượng frame bị fail nhiều hay ít do chúng ta quy ước.
- Nếu fail nhiều thì sẽ thuật là đường không có lane, bộ dự đoán của Kalman sẽ chờ đến khi nào bắt được lane sẽ cập nhật vào bộ dự đoán của Kalman.
- Nếu fail ít thì sẽ xảy ra 2 trường hợp:
+ Nếu điểm mới cho sai số nhỏ thì sẽ cập nhật điểm mới đó vào bộ dự đoán của Kalman.
+ Nếu điểm mới cho sai số lớn thì sẽ giữ nguyên bộ dự đoán của Kalman.
- Để biết được fram sau sai số ít hay nhiều ta dự vào khoảng cách (bằng cách lấy vị trí điểm đó của fram thứ n+1 trừ cho vị trí điểm đó của fram thư n).
Tiến trình thực hiện
Đầu tiên ta cần xác định được 2 lane chính là lane trái và lane phải. Đặc điểm của 2 lane này là nằm gần nhất với đường thẳng đứng chia đôi khung hình (y=256).
63
Hình 4.23 Ảnh thể hiện 2 lane chính màu xanh
Sau khi xác định được 2 lane chính chọn điểm VashingPoint (Trung bình cộng của 2 điểm cuối cùng nằm trên 2 lane chính).
64
Hình 4.24 Chấm anh dương đậm được gọi là VashingPoint
Tiếp theo ta tính sai số dựa vào thay đổi khoảng cách của điểm VashingPoint phía trên và độ thay đổi diện tích tạo thành giữa những điểm mới và điểm dự đoán của bộ Kalman. Nếu những sai số trên nằm trong vùng cho phép bộ dự đoán Kalman sẽ cập nhật những điểm mới đó, còn nằm ngoài vùng cho phép thì bộ dự đoán của Kalman sẽ giữ nguyên.
65
66
Chương 5. THỰC NGHIỆM VÀ KẾT QUẢ THỰC NGHIỆM 5.1. Chuẩn bị
Gắn camera GoPro Hero 5 Black vào xe như hình 5.1 để ghi video hành trình xe chạy.
Video được ghi lại từ camera GoPro Hero 5 Black sẽ được đem về máy chủ đặt tại Phòng thí nghiệm điều khiển tự động trên ô tô và tiến hành xử lý.
Hình 5.1 Cài đặt camera GoPro Hero 5 Black trên xe
5.2. Địa điểm thực nghiệm
Các đoạn đường xung quanh khu quân sự làng Đại học quốc gia thành phố Hồ Chí Minh.
67
Hình 5.2 Địa điểm thực nghiệm
5.3. Kết quả thực nghiệm
Kết quả thực nghiệm được lưu trên trang web:
https://drive.google.com/open?id=1N8cMYqmhlxAGES2g_H3vbRnSUNPRy_76 Các ảnh kết quả thực nghiệm được chụp lại từ video được lưu trong bộ hình 5.3
68
70
Hình 5.3 Kết quả thực nghiệm
Nhận xét:
- Thuật toán bắt tốt ở một số làn đường thẳng và đường cong.
- Quá trình theo dõi làn đường thực hiện ở đường thẳng thì rất tốt nhưng đường cong còn rất nhiều hạn chế.
72
Chương 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 6.1. Kết luận
Các hệ thống sử dụng giải thuật học sâu mặc dù đạt hiệu suất cao nhưng đòi hỏi dữ liệu huấn luyện khá lớn, bên cạnh đó các hệ thống này chỉ thường hoạt động tốt trên các bối cảnh và môi trường đã được huấn luyện. Do đó khi chuyển sang một môi trường mới, các hệ thống này thường phải được huấn luyện lại hoặc tinh chỉnh (fine-tuning) dựa trên dữ liệu thu thập ở môi trường mới. Tuy nhiên với giới hạn về thời gian thực hiện đề tài và phần cứng hiện có, việc thu thập dữ liệu mới và huấn luyện lại hệ thống là điều bất khả thi. Do đó trong đề tài này, chúng em đề xuất một giải pháp mới kết hợp tính ưu việt của giải thuật học sâu và tính tuỳ biến của các phương pháp xử lý ảnh và xử lý tín hiệu truyền thống cho việc phát triển hệ thống nhận diện lane đường ở Việt Nam. Tuy kết quả đạt được vẫn còn bị nhiễu ở một số trường hợp, nhưng về cơ bản hệ thống đã đạt được mục tiêu đề ra. Bên cạnh đó, vì áp dụng học sâu nhưng phần cứng bị hạn chế nên tốc độ xử lý chưa cao. Ban đầu thời gian để xử lý 1 khung hình lên đến 0.25s, nhưng sau quá trình cải tiến, tốc độ xử lý đã được tăng lên còn 0.16s/khung hình, tuy đã cãi thiện được tốc độ xử lý nhưng hệ thống vẫn chưa đủ đáp ứng xử lý theo thời gian thực. Để tăng tốc độ xử lý (lên đến 50fps), tác giả trong bài viết [3] khuyến nghị nên sử dụng card đồ họa GTX-1070.
Sau khi hoàn thành đồ án này, chúng em đã tích góp được rất nhiều kiến thức bổ