YOLO

Cách đây 10 năm khái niệm về object detection được mặc nhiên coi như image processing với độ chính xác thấp, kém linh động và dễ tổn thương (kết quả thay đổi dễ dàng bởi các yếu tố ngoại cảnh).
Cách đây vài năm người ta đọc những bài báo về deep learning, machine learning như một thứ rất xa vời và phi thực tế.
Nhưng tất cả đã thay đổi, đăc biệt mạnh mẽ từ năm 2015, khi nhưng người tiên phong trong lĩnh vực này bắt đầu gặt hái những thành quả đầu tiên, những Framework như Keras, TensorFlow, Caffe,… biến ML trở thành 1 thứ tiếp cận hơn trước rất nhiều.
YOLO (You Only Look Once) là một nhánh trong darknet
được phát triển bởi nhớm nghiên cứu từ đại học Washington. Bạn nên xem qua bài giới thiệu của họ trên Ted Talks

Bạn cũng rất rất nên ngó qua CV của Joseph Redmon- trưởng nhóm nghiên cứu và là người trình bày ở video phía trên.
Nếu bạn thực sự không có thời gian để làm những điều trên, mình xin tóm tắt cách mà YOLO hoạt động 1 cách ngắn gọn nhất có thể
Đúng như tên gọi của nó YOLO – You Only Look Once, ý tưởng chủ đạo của YOLO rất đơn giản mà cực kỳ hiệu quả.
Bước 1: YOLO chia bức ảnh thành 13×13 = 169 cells nhỏ, mỗi 1 cell sẽ gồm 5 giá trị: (x, y, width, height, confidence)
Bước 2: Tiến hành classify cho từng cell (tham khảo bài viết này part 1 part 2 để hiểu rõ hơn)
Bước 3: Gộp cells để tạo thành bounding box ứng với từng chủ thể

Đây là bài viết đầu tiên được công bố trên thế giới giúp bạn customize dataset để training và  implement  YOLO v1, v2 trên cả android và ios  

YOLO: The model

Architecture

Kiến trúc của YOLO gồm 9 convolutional layers (CL) + 3 fully connected layers

Mỗi CL được kèm với a Leaky RELU activation function, with alpha of 0.1

6 convolutional layers đầu tiên có chứa 2×2 max pooling layers

Normalization

Các điểm dữ liệu đôi khi được đo đạc với những đơn vị khác nhau, m và feet chẳng hạn. Hoặc có hai thành phần (của vector dữ liệu) chênh lệch nhau quá lớn, một thành phần có khoảng giá trị từ 0 đến 1000, thành phần kia chỉ có khoảng giá trị từ 0 đến 1 chẳng hạn. Lúc này, chúng ta cần chuẩn hóa dữ liệu trước khi thực hiện các bước tiếp theo.
Chú ý: việc chuẩn hóa này chỉ được thực hiện khi vector dữ liệu đã có cùng chiều.
YOLO dùng phương pháp chuẩn hoá Rescaling đưa tất cả các thành phần về cùng một khoảng [−1,1] (V2) và [0,1] (V1).
Như vậy mỗi pixel sẽ được chuẩn hoá để có giá trị trong khoảng [-1,1]

Training: YOLO

Với những ai đã quen với TensorFlow và muốn chuyển đổi model của YOLO sang Graph file (.pb) thì đã có darkflow làm việc đó giúp bạn.
Tác giả của lib này là Trịnh Hoàng Triều, mới tốt nghiệp ĐHQG TP.HCM hiện đang là resident tại Google Brain, bộ não trí tuệ nhân tạo của Google tại Silicon Valley

Preparing data set

Đối với ML 2 thứ quan trọng nhất là algorithm và data. Đa phần trong chúng ta chỉ cần hiểu thuật toán và biết cách áp dụng trong những bài toán cụ thể, việc tạo ra những thuật toán mới sẽ không được đề cập trong bài viết này.

Bản chất của YOLO chính là Classification, đặc điểm chung khi bạn chuẩn bị data cho các bài toán kiểu này là:
+ Cần có positive data (bức ảnh có chứa chủ thể cần học) và cả negative data (ảnh có chứa chủ thể không cần học nhưng dễ nhầm lẫn với chủ thể cần học). Ví dụ bạn muốn detect lon cola thì trong data nên có những bức ảnh chứa các lon không phải cola như bia, nước cam,…

+ Dữ liệu nên đa dạng từ kích thước ảnh, độ sáng, bố cục,… thường nếu lấy ảnh từ internet sẽ đáp ứng được điều kiện này. Tuy nhiên nếu bạn muốn tự tạo dataset thì nên chú ý, chụp ảnh vật thể ở nhiều góc với ánh sáng, độ xa gần,..khác nhau tóm lại cần làm cho dataset đa dạng tuy nhiên nên tập trung hơn vào những context thường gặp

+ Dù size ảnh của bạn có thế nào thì khi training YOLO sẽ resize về 416×416

Sau khi đã chuẩn bị xong dataset, bước tiếp theo là label. Có một số phần mềm cho label objects mà bạn có thể dùng
MacOS: RectLabel
Windown, Linux: labelme, yolo mark

Config

Để đạt được model với độ chính xác tốt nhất có thể bạn cần hiểu rõ các parameters trong file .cfg

  • iteration = number of passes, số lần mà dữ liệu được pass qua network
  • batch = 64, mỗi 1 lần chạy thuật toán sẽ lấy 64 ảnh làm input. batch càng lớn, training càng nhanh nhưng cũng yêu cầu tài nguyên nhiều hơn.
  • one pass = one forward pass + one backward pass (we do not count the forward pass and backward pass as two different passes).
  • one epoch = one forward pass and one backward pass của toàn bộ input

Ví dụ nếu bạn có 1000 bức ảnh, với batch = 500 thì bạn cần 2 iteration để hoàn thành 1 epoch

  • subdivision = 8, mỗi batch được chia làm 8 groups. Như vậy GPU sẽ process 8 ảnh cho 1 pass
  • learning_rate càng nhỏ thì càng mất nhiều thời gian bù lại model đạt được có thể chính xác hơn. Nói đơn giản learning_rate thể hiện bước nhảy trong thuật toán gradient descent.

Traning

Sau khi training với thư viện darkflow, bạn sẽ có được .pb file. Tuy nhiên với phần cứng hiện tại bạn không thể chạy .pb file real-time on phone.
Việc bạn cần làm là optimize nó
sudo pip install backports.weakref==1.0rc1
bazel-bin/tensorflow/python/tools/optimize_for_inference \
--input=/.../yolo-voc-6c.pb \
--output=/.../tf_yolo_graph.pb \
--input_names=input \
--output_names=output \
--frozen_graph=True

YOLO output

yolo chia input image thành SxS grid cells (S=7 với YOLO v1 và S=13 với V2)
với mỗi object trong image sẽ có 1 cell được chọn để chịu trách nhiệm cho việc predict (chỉ 1 object), cell này được chọn sao cho nó thuộc trung tâm của object

Ví dụ object person có center rơi vào grid cell màu vàng, do đó grid cell này sẽ được chọn để chịu trách nhiệm predict object person

Mỗi cell sẽ dự đoán B bounding boxes (mặc định là 2) và C class probabilities.
Trong đó mỗi boundary box lại gôm 5 giá trị : x, y, w, h, confidence

confidence = box confidence score x conditional class probability

(x, y) là toạ độ the center of the box, relative to the grid cell location (chú ý rằng nếu the center of the box does not fall inside the grid cell, than this cell is not responsible for it)

(w, h) relative to the image size.

Let’s look at an example:

Như vậy ở output ta sẽ có
output tensor length = S x S x (B x 5 + C) giá trị
S x S x C giá trị đầu tiên tương ứng với probabilities cho mỗi class trong mỗi cell
S x S x B giá trị tiếp theo confidence score
S x S x 4 x B giá trị cuối cùng là (x,y,w,h) cho mỗi cell thuộc B bounding boxes

Intersection Over Union(IoU)


IoU càng gần 1 thì khả năng dự đoán đúng càng lớn

Implement model on mobile device (updating…)

A nature, universe, science, music, love lover

Leave a Reply

Your email address will not be published. Required fields are marked *

Bitnami