YOLO-You only look once

YOLO hẳn đã rất quen thuộc với các bạn trẻ, chúng ta đã nghe từ này biết bao nhiêu lần, khi mà thằng bạn của bạn muốn đua xe đập đá mà bạn ngăn cản, nó sẽ lôi từ này để bật lại bạn, rằng mày chỉ sống có 1 lần thôi, yolo đi.

Câu đó thật ra cũng đúng trong hoàn cảnh bạn biết mình làm gì:)), và trong bài viết này mình cũng nói về YOLO, nhưng không phải về cụm từ kia, mà là một thành tựu lớn của neural network và Image Processing- YOLO( You Only Look One). Nghĩa là chỉ nhìn một lần thôi, lần đầu nghe câu này mình thấy buồn cười, thì hiển nhiên là nhìn một lần chứ mấy lần, còn thấy người đẹp muốn nhìn lại mấy lần thì nhìn chứ, ai cấm:)). Nhưng thật ra câu nói này không phải cho con người, mà là cho computer. Nếu bạn nào đã có kiến thức về Image Processing thì mời lướt qua, còn chưa thì mình diễn tả nôm na như sau: Máy tính nhìn một bức ảnh dưới dạng một ma trận số, và để thực hiện một số tính năng chỉnh sửa ảnh, đầu tiên ta phải xét đến một filter matrix hoặc còn gọi là convolution, convolution matrix này sẽ được nhân với một ô nhỏ trên cùng bên trái của tấm ảnh, sau đó ô này sẽ trượt theo chiều ngang và sau đó xuống dòng đến khi đi hết tấm ảnh. Do đó có thể nói máy tính nó không nhìn tấm ảnh một lần như chúng ta mà nó nhìn từ trái qua phải từ trên xuống dưới. Tất nhiên nhìn kĩ là tốt nhưng làm vậy rất tốn thời gian, trong khi chúng ta chỉ cần nhỉn tổng thể bức hình là có thể chỉ ra trong đó có gì, thì computer cần phải rà hàng trăm hàng ngàn tấm ảnh nhỏ mới làm được điều tương tự. YOLO ra đời để cho phép máy tính làm điều tương tự nhưng tốc độ được cải thiện đáng kể, chỉ quét một lần và nhận diện objects, cho đó nâng cao tốc độ xử lý ảnh lên đến 60 frames/s nhờ đó có thể đáp ứng nhu cầu real-time.

Dưới đây là một số chia sẻ của chính tác giả YOLO:

You only look once (YOLO) is a state-of-the-art, real-time object detection system. On a Pascal Titan X it processes images at 30 FPS and has a mAP of 57.9% on COCO test-dev.

Prior detection systems repurpose classifiers or localizers to perform detection. They apply the model to an image at multiple locations and scales. High scoring regions of the image are considered detections.

We use a totally different approach. We apply a single neural network to the full image. This network divides the image into regions and predicts bounding boxes and probabilities for each region. These bounding boxes are weighted by the predicted probabilities.

12
Comparison other detector

Về cách hoạt động của YOLO mình đã nói ở trên, còn hình bên dưới chính là kết quả hoành tráng mà nó tạo ra. Trong hình bạn có thể thất từng chiếc xe được theo dấu với những hộp bao quanh, và xác định nó là xe lên tới 99%. Không những vậy, đoạn code còn kết hợp với segmentation để nhận dạng đường biên của mỗi chiếc xe, giúp nhận diện chính xác hơn.

13

Nếu các bạn có hứng thú với đoạn code trong video bên trên, bạn có thể lấy code qua Github của mình, đoạn code được viết bằng Python và sử dụng tensorflow model.

Advertisements

How a self-driving car work!

Most of self-driving car on the world work as follow:

Howcarselfdriving.png

I/ Generally

Computer vision is how we use images to figure out what the world around us look like. Sensor fusion is how we in-cooperate data from other sensor like laser, Lidars, radar, to get richer understanding out of environment. Once we’ve build this deep understanding of what the world looks like we use path planning to chart a course through the world to get us to where we would like to go. The final step is how we actually turn the sterring wheel and hit the throttle, and the brake in oder to execute the trajectory that we build during path planning.

Now I will explain in detail:

I/ Computer Vision

Computer Vision using the camera mounted in front of the car, to detect lane and other vehicle. It looking for color and edges and gradient to find the lane on the road and then train a deep neural network to draw the bounding box around the other vehicle on the road.

Deep neural network and deep learning is exciting new part of machine leaning and artificial intelligent. And this is the way that computer can learn what cars and other object look like by simply sending them lots and lots of data they see lots of cars and this is pretty similar to what advance driving assistance system do on the road today.

II/ Sensor Fusion

Once we know what world look like by images, the next steps is augment that understanding of the world using other sensor so radar and laser to get measurement that are difficult for the camera alone to understand so things like distance between our car and other car and how fast other object in the environment moving.

A  Lidar which has an array of laser doing a 360 degrees scan to to world and seeing the different object in that environment looks like and how they move.

So once we understand both what the world look like and how to measure it and we cooperate those understanding together to get rich picture of our surrounding environment, the next step is to localize ourself in that environment.

III/ Localization

Maybe people think GPS today can localize ourself in cellphone. we absolute now where we are but it not really like that, because GPS uncertainty is about 1 to 2 meter. And in self-driving we need the absolute accuracy, because if a small mistake happen, it very dangerous for your car if you running on the hight way with 150 to 200km/h. So we have to use much sophisticated mathematical algorithm as well as hight definition map to localize our vehicle precisely in it environment to single digits centimeter level accuracy.

Using particle filter is very good way to localize a vehicle in an know environment. Measuring distance from various landmarks ans it’s figuring how far is it from these landmark and where it see the landmark and comparing that to the map and using that to figure out precisely where it is in the world , those landmark might be things like streetlight, or traffic sign, mail boxes or even manhole covers.

IV/ Path Planning

When we know how the world look like and where were are in this world, the next step is to actually chart a path plan through that world to figure out how to get where we want to go, and this is path planning. This program cerate a path planner which predict where the other vehicles on the road are going to and then figures out the maneuver our vehicle should take in response and finally build and series of way points those are the green points in the video for the car driver through that’s the trajectory the car should follow and you see if the vehicle comes up on other traffic it has to figure out should it slow down and stay in it lane or should it shift right or should shift left. And this is the type of decision that real self-driving car had to make all the time subject to constraints like speed limit and acceleration limit.

V/ Control

Final step in the pipeline is control. Control is how we actually turn the steering wheel and hit the throttle and hit the brake in oder to execute that trajectory that we build during path planning.

If you want to go in detail, you can apply to Udacity self-driving car program, there you will be learn theories, programming skill with the best professors and the best engineers form over the world

Sơ lược về Vision-Based Navigation

Vision-based Navigation là một trong những lý thuyết về công nghệ tự hành (autonomous driving). Bên cạnh Laser-Base, IMU-base, thì vision base là một công nghệ có thể nói là khá rẻ, chỉ cần một 3D-camera(stereo-camera hoặc Kinect), ta có thể chụp được hình ảnh 3D của môi Trường xung quanh dùng vision odometry để xác định vị trí và hướng đi của robot trong map và có thể nói là chúng ta đã thực hiện xong SLAM(Simultaneous Localization and Mapping).

Để nói về vision-base trước tiên cần nói về cách để chúng ta match hai tấm ảnh lại. Khi ta sử dụng camera để chụp ảnh thì chỉ chụp được một tấm vào một thời điểm thôi. Nhưng khi bạn dung panorama chẳng hạn, thì có thể chụp được tấm hình với góc rộng hơn nhiều chi tiết hơn sẽ được thể hiện. Chế độ panorama có thể làm được điều này nhờ ghép các tấm ảnh đơn lẻ lại với nhau. Nhưng ghép như thế nào, hôm nay chúng ta sẽ tìm hiểu về điều đó.

CS.PNG

Nhìn vào hai tấm ảnh trên ta thấy chúng được chụp ở 2 góc gần nhau, tấm thứ hai dịch qua phải một tí. Và nếu mình muốn thấy hết dãy núi thì phải ghép hai tấm lại. Và các bước ghép như sau:

1/ Đầu tiên ta sẽ nhìn ra những điểm quan trọng trong một bức hình, gọi là features detection, bởi vì bức hình là một tập hợp những điểm ảnh, và chỉ cần một số điểm ảnh là có thể miêu tả gần như đầy đủ tấm hình. Có nhiều cách để tách các features từ tấm ảnh, ví dụ như ta dùng Canny edges detection. Hoặc là dùng convolution high pass filter quét qua tấm ảnh để thu được những khu vực có độ tương phản cao (high contrast). Sau khi làm các bước trên ta có tấm hình như sau.

2/ Sau khi xác định được các điểm quan trọng, việc tiếp theo là nối tụi nó lại, vấn đề là nối thế nào?

Trước tiên ta phải nhận dạng các features mà ta detect được, bởi muốn ghép hai tấm hình ngọn núi lại, vậy thì khu vực nào phải ghép với khu vực đó, như chân núi ghép với chân núi, đỉnh núi ghép với đỉnh núi. Không thể lấy râu ông nọ cắm cằm bà kia được. Các features được chọn phải đặc biệt, và vẫn giữ đặc tính khi bị xoay hoặc di chuyển.

Một trong những Phương pháp áp dụng là SIFT(Scale invariance features transformation):

CS2.PNG

Ý tưởng của SIFT:

Nội dung của một bức ảnh sẽ được lấy ra để vào một khu vực, ở đây  ta gọi là “túi ảnh”. Túi này chứa những features nói lên đặc tính của tấm ảnh thứ nhất.  Khi so sánh với tấm ảnh thứ hai được chụp từ một góc khác , những features được so sánh để xác nhận xem hai tấm có giống nhau hay không.

CS3.PNG

Hướng dẫn sử dụng phần mềm DOORS

Xin chào các bạn, trong block này mình sẽ hướng dẫn các bạn cách sử dụng phần mềm DOORS của IBM.

IBM Rational Doors: Getting Started

Đầu tiên phải đăng nhập vào chương trình

1

Ở trang làm việc, những thứ cần chú ý  gồm có hình trụ ở góc trái của màn hình làm việc(work space), ở đó là Database Root, tiếp đến là Folder, và rồi bên trong folder là Project, thanh bar phía trên hiển thị location of current selection. Hình phía dưới hiển thị Default Workbench của DOORS.

 

2

Click chuột phải vào icon project để tạo ra một formal module mới, bạn cũng có thể chọn template ở đây bằng cách click chuột trái vào browse icon.

3

Sau khi các bạn tạo ra formal module cho riêng mình, chuột phải vào module đó để tạo ra một object mới. Các bạn cũng có thể dùng phím tắt để làm điều tương tự.

4

Hình phía dưới giải thích những vị trí của objects, gồm có level1 object, level2 objects là con của level1 object. Ở bên trái là ID của objects.

5

Click chuột phải vào level2 object sau đó click vào properties để thêm text vào object.

6

Đây là access của một object, bạn có thể chọn bằng cách bấm qua chọn access bên cạnh general.

7

Bạn cũng có thể thêm table từ table menu dưới mỗi object, khi add table bạn có thể set hàng và cột. Sau khi add table xong thì sẽ như hình sau.

9

Chúng ta có thể thêm filter bằng cách click chuột vào biểu tượng filter properties.

10.PNG

Thêm một object mới bằng cách click chuột phải vào một object chọn Link, start Link. Sau đó click một cái object Link mới, chọn link from start để hoàn thành quá trình link.

Để tạo ra một document, chọn File -> Export -> Document Generation như hình bên dưới.

11

 

Occupancy-Grid Maps

Occupancy-grid maps (H.P. Moravec, 1988; H.P. Moravec et al, 1989; A. Elfes, 1987, A. Elfes, 1989; S. Thrun et al, 2005) :

Occupanny-grid map (bản đồ lưới) thể hiện môi trường được chia nhỏ thành các mắt lưới, các ô này có thể tự do( free) hoặc bị chiếm giữ( occupied), mỗi ô đại diện cho một diện tích thực tế trong môi trường thực và mỗi ô sẽ có một giá trị biểu diễn xác xuất nó có đang bị chiếm giữ hoặc tự do (chiếm giữ ở đây nghĩa là ở đó có vật cản, hoặc tường .., tự do(free) nghĩa là tại vị trí đó không có gì cả, và chúng ta có thể đi qua khu vực đó.

Giá trị occupancy của ô thứ nhất trong occupancy grid-map tại thời điểm t được biểu diễn bởi xác xuất p, .. P tại thời điểm t phải nằm trong khoảng từ 0 tới 1. Ta có thể hiểu rằng P= 1 nghĩa là ô đó bị chiếm giữ(occupied), P=0 nghĩa là ô đó trống(free), P=0.5 nghĩa là không biết(unknown) hoặc khu vực chưa khám phá (unexplored area).

Các bạn có đồng ý rằng, Robot không có bất kì nhận định nào về thế giới mà lần đầu nó bị đặt vào trong đó. Cũng như bạn bị bắt cóc đến một nơi xa lạ vậy, bạn hoàn toàn mất phương hướng. Do đó P sẽ có giá trị P=0.5 co tất cả i tại thời điểm t=0. Map sẽ được cập nhật thông qua log odds của occupancy. Sự vượt trội của log odd là nó có thể tránh được sự nhập nhằng giữa 0 và 1, vì đôi khi giá trị của nó sẽ là 0,3 hoặc 0,7. Do đó, ta có cách tính tình trạng bị chiếm giữ của ô thứ n trong grid-map theo công thức sau:

 { l }_{ t,f\quad }=\quad { l }_{ t-1,f }\quad +\quad { l }_{ sensor }

với lt-1 là log odds được tính từ giá trị occupancy của ô tại thời điểm t-1. Hình 1(a) miêu tả quá trình cập nhật của map. Ô màu đen thể hiện tia laser gặp phải vật cản ở đó ngược lại  các ô màu trắng thể hiện là những vị trí có tia laser đi qua nhưng không bị cản trở, ô màu xám là nơi tia laser không đi qua. Hình 1(b) thể hiện trường hợp tia laser không gặp vật cản nào nhưng đạt mức maximum của nó.

12

Hình ảnh dưới đây là Occupancy Grid map trong thực tế được tạo bởi một máy quét laser, khu vực rìa màu đen thể hiện vật cản, khu vực trắng là trống và khu vực màu xám là tia laser chưa đi qua.

13

Topological  Maps,

Không giống như occupancy grid map, topological maps (D. Kortenkamp et al, 1994; H. Choset, 1996; H. Choset et al, 1996) không thể hiện môi trường xung quanh một cách trực quan bằng cách chia nhỏ bản đồ ra như trên. Thay vào đó, topological map thể hiện môi trường quanh nó như một đồ thị (graph).

Giống như trong hình 3. Một danh sách những khu vực quan trọng như tường, góc, cửa hoặc hành lang, những khu vực này được thể hiện dưới dạng các điểm(node) m. Sự liên kết giữa các điểm m được thể hiện dưới các liên kết Uk. Trong rất nhiều topological map, khoảng cách giữa các khu vực cũng được thể hiện trong các sợi dây liên kết các nodes này. Sự ưu việt của topological map là nó thể hiện các khu vực trong map rất chi tiết, ta có thể zoom vào để xem đặc tính từng khu vực, điều này lý giải tại sao topological map được dùng để phát triển 3D-map.

14

Topological maps là sự lựa chọn tối ưu hơn nếu người dùng quan tâm dung lượng bộ nhớ. Trong trường hợp chúng ta sử dụng laptop hay raspberry pi có dung lượng bộ nhớ thấp. Đó là bởi vì ít memory cần để lưu giữ nodes so với một số lượng lớn các ô được sử dụng trong grid-map. Tuy nhiên điều này cũng đồng nghĩa với, graph-map sẽ ít chính xác hơn grid-map. Lý do là một số thông tin quan trọng ví dụ như vị trí của các ô màu xám mà tia laser không đến được sẽ không được hiển  thị trong bản đồ. Do đó khi robot sử dụng graph-map sẽ không thể di chuyển nhanh mà vẫn giữ an toàn như sử dụng grid-map, lời khuyên là khi sử dụng topological map thì nên cho robot di chuyển chậm thôi.

 

 

Autonomous Navigation

Trong bài viết này mình sẽ nói về một đề tài rất thú vị, đó là “Xe tự lái “, hẳn các bạn cũng nghe về chủ đề này nhiều rồi. Đây là một hướng đi mới cho ngành công nghiệp xe hơi vốn ít có những thay đổi đột phá từ khi những chiếc xe bốn bánh lần đầu tiên lăn bánh trên đường vào đầu thế kỉ 19, đến nay đã gần 200 năm trôi qua và chúng vẫn là … xe bốn bánh:)).

Mặc dù có rất nhiều nâng cấp về tốc độ, mẫu mã, nhiên liệu sử dụng, nhưng khi nói về auto quan niệm của chúng ta vẫn là một cỗ máy 4 bánh được mấy bác tài xế lái đưa chúng ta đi mọi miền tổ quốc. Vâng, người lái ở  đây chính là điểm mấu chốt, chứ không có ai lái thì xe xịn mấy cũng đắp chiếu!

Vào năm 2004 đã có 1 cuộc thi về những chiếc xe có thể tự vận hành mà không cần người điểu khiển đã được tổ chức tại Mỹ, từ đây đã tạo ra một cuộc chạy đua giữa các công ty ô tô, để sản xuất chiếc xe tự lái cho riêng mình. Hẳn các bạn thắc mắc là tại sao từ năm 2004 đến nay đã là 2018, nhưng vẫn chưa thấy xe tự lái xuất hiện. Thực ra là nó đã xuất hiện và đang được các công ty chạy thử nghiệm rồi, chỉ là đang hoàn thiện nên bản thương mại hóa chưa được bán.

OK, mình nghĩ nói về lịch sử như vậy là đủ, bây giờ mình sẽ nói về cách thức hoạt động của một chiếc xe tự lái:

Capture9

Hình trên mô tả các bộ phận của một chiếc xe tự lái, bao gồm:

  • LIDAR, máy quét laser dùng để quét môi trường xung quanh và tạo ra một bản đồ khu vực(local map) xung quanh xe.
  • Camera, được gắn trước mũi xe để tính toán xem xe có chạy đúng làn hay không, nó cũng được tích hợp một số thuật toán xử lý ảnh kết hợp với machine learning để phân biệt được những biển báo giao thông và các phương tiện giao thông khác.
  • Một Radar được gắn trước mũi xe, để xác định khoảng cách tới xe phía trước, từ đó đưa ra vận tốc chạy xe hợp lý.
  • Ultrasonic sensor được gắn ở cửa bên hông xe, để tính khoảng cách với lề đường hoặc các xe chạy bên cạnh.
  • On-board unit chính là bộ xử lý chính của xe tự lái, thường sẽ là một bộ vi xử lý mạnh như là Intel Xenon và GPU để tổng hợp dữ liệu từ các cảm biến nói trên. E-map chính là bản đồ khu vực được máy chủ của xe kết hợp với GPS để biết chính xác vị trí của xe.
  • Wheel encoder, chính là cái bánh, nói đúng hơn thì là bộ phận trực tiếp điều khiển bánh xe, nó sẽ nhận lệnh từ on-board unit như là rẽ phải, quẹo trái, đi thẳng.., và điều khiển bánh xe theo những lệnh này.

Như các bạn đã biết, GPS là dùng để định vị chúng ta trên thế giới này với sự giúp đỡ của vệ tinh, và chúng ta cũng biết là nó không chính xác lắm, tầm 99% thôi. GPS được dùng để xác định Kinh độ và Vĩ độ của chiếc xe. Sự chính xác của GPS được cải thiện bởi các loại cảm biến được gắn trên xe, một số cảm biến có độ chính xác được tính bằng m, một số chính xác nhỏ hơn 1 mét.  Bng cách kết hợp GPS, IMU (Inertial measurement units) và wheel odometry data, bằng thuật toán sensor fusion, vịtrí của xe được xác định một cách chính xác hơn.

Dưới đây là block diagram (sơ đồ hoạt động) của một chiếc xe tự lái được sử dụng trong DARPA Challenge:

xxx

Sensor interface modules: Bao gồm tất cả tương tác giữa các cảm biến và chiếc xe ,những cảm biến chính của xe bao gồm LIDAR, Radar, camera, IMU, GPS và wheel encoders.

Perception modules: Đây là nơi tiếp nhận và xử lý tín hiệu từ tất cả các cảm biến như LIDAR, camera… để định vị những vật thể tĩnh hoặc động ở môi trường xung quanh xe và tạo ra một bản đồ cục bộ, đồng thời cũng giúp xác định vị trí của chính chiếc xe dựa trên vị trí của các vật trong bản đồ cục bộ nói trên.

Navigation modules: Xác định hành vi của chiếc xe tự lái, bao gồm tính toán quãng đường đi chính xác nhất cho xe cũng như điều khiển các module khác như là thắng khẩn cấp hoặc gạt nước tự động.

Vehicle interface: Sau khi tính toán được quãng đường ngắn nhất, các lệnh điều khiển, bao gồm điều khiển vô-lăng, bánh xe, thắng, sẽ được gửi từ bộ vi xử lý tới chiếc xe thông qua Drive-By-Wire(DBW) interface. DBW về cơ bản được xây dựng giống như CAN Bus system.

User interface: Đây là nơi chúng ta có thể thấy và tương tác được với hệ thống xe tự lái, bao gồm màn hình touch screen để chúng ta có thể nhập điểm đến, hoặc có thể điều khiển bằng giọng nói. Tất nhiên cũng có nút bấm để ngắt toàn bộ hệ thống trong trường hợp nguy hiểm.