Áp dụng thuật toán lanenet lane detection

Một phần của tài liệu Ứng dụng tri tuệ nhân tạo để phát triển hệ thống nhận diện và theo dõi làn đường cho xe tự lái đồ án tốt nghiệp ngành công nghệ kỹ thuật ô tô (Trang 51)

4.3.1. Giới thiệu sơ lược về LaneNET

44

Hình 4.3 Cấu trúc của mạng LaneNET

Theo cách này, mạng không bị hạn chế về số làn mà nó có thể phát hiện và có thể đối phó với thay đổi làn. Nhiệm vụ phân đoạn thể hiện bao gồm hai phần, phân đoạn và phân cụm, được giải thích chi tiết hơn trong phần sau các phần. Để tăng hiệu suất, cả về tốc độ và độ chính xác, hai phần này được đào tạo chung trong một mạng đa tác vụ gọi là LaneNET.

Binary Segmentation: Đây là một nhánh được đào tạo nhằm mục đích cho biết điểm nào thuộc về một làn và không. Để xây dựng bản đồ phân đoạn mặt đất, chúng tôi kết nối tất cả các điểm làn đường mặt đất với nhau, tạo thành một đường kết nối trên mỗi làn. Lưu ý rằng chúng tôi vẽ các làn đường thật này ngay cả thông qua các đối tượng như xe hơi hoặc trong trường hợp không có các làn đường trực quan rõ ràng, như làn đường đứt nét hoặc mờ. Bằng cách này, mạng sẽ học cách dự đoán vị trí làn đường ngay cả khi chúng bị chặn hoặc trong trường hợp bất lợi.

Phân khúc cá thể: Để phân tách các điểm ảnh làn đường được xác định bởi nhánh phân đoạn, chúng tôi huấn luyện nhánh thứ hai của LaneNet để nhúng ví dụ làn đường. Chúng tôi sử dụng phương pháp một lần dựa trên việc học số liệu, có thể dễ dàng tích hợp với các mạng chuyển tiếp tiêu chuẩn và được thiết kế đặc biệt cho các ứng dụng thời gian thực.

45

4.3.2. Áp dụng thuật toán

Sau khi chạy thuật toán đối với ảnh của thư mục Model Weights [10] ta thu được kết quả sau:

Hình 4.4 Kết quả chạy thuật toán trên Model Weights

46

Hình 4.5 Kết quả chạy thuật toán trên ảnh chụp

Nhận xét: Việc bắt lane trên ảnh thực tế không tốt bằng trên các ảnh test mà bài

viết đưa ra. Đều này hoàn toàn hợp lí do một vài lý do sau:

- Các ảnh mẫu dùng để test đã được hệ thống đào tạo nhiều lần trước đó nên việc bắt lane khá hiệu quả và đẹp so với ảnh thực tế của chúng ta.

- Tính chất ảnh mẫu dùng để test khác so với ảnh thực tế (độ sáng, độ phân giải, màu sắc, chất lượng ảnh,…)

- Ảnh chụp còn bị bắt sai và các nhiễu trên đường ảnh hướng nhiều đến việc bắt lane.

Hướng khắc phục:

Để giải quyết vấn đề trên, nhóm có 2 hướng khắc phục:

- Thứ nhất: Đào tạo lại model, việc này rất mất thời gian, với thời gian hạn chế trong quá trình làm đồ án, phương án này khả thi không cao.

- Thứ hai: Lấy một nhánh mà LaneNET tạo ra ảnh nhị phân (Binary Segmentation) dựa trên nên tảng Convolutional Neural Network (CNN) sau đó dùng giải thuật K – means để nhận diện làn đường (Tài liệu về CNN được trình bày ở mục 2.2). Đây là hướng mà nhóm đã lựa chọn và thực hiện.

4.4. Nhận diện làn đường bằng giải thuật K – means Clustering 4.4.1. Lấy dữ liệu cho K - means từ Hough Transform 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ˆk1|k - là ước lượng dự đoán của xk1cho phép đo zk1

Trạng thái dự đoán:

1| |

ˆk k k k kˆ k k

x  F xG 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 FQ [4.5]

Đo lường dự đoán:

1| 1ˆ 1|

ˆk k k k k

z  Hx  [4.6]

Quá trình điều chỉnh

61

1 1 1ˆ 1|

k k k k k

r   z  Hx  [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  PHS [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  Kr  [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 KHP [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ộ

Một phần của tài liệu Ứng dụng tri tuệ nhân tạo để phát triển hệ thống nhận diện và theo dõi làn đường cho xe tự lái đồ án tốt nghiệp ngành công nghệ kỹ thuật ô tô (Trang 51)

Tải bản đầy đủ (PDF)

(103 trang)