Tải bản đầy đủ (.docx) (25 trang)

NhanDienBienBaoGiaoThongYOLOv5.docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.26 MB, 25 trang )

1 | Page


CHƯƠNG 1. GIỚI THIỆU
1.1 Giới thiệu
Trong thời đại công nghệ 4.0, thời đại của internet of things, tất cả mọi thứ
đều đc điều khiển thông qua công nghệ tự hành ( tức là tiếp nhận thông tin, xử
lý và đưa ra quyết định nhờ vào trí tuệ nhân tạo được đào tạo chính xác với tỉ lệ
sai sót thấp nhất có thể. Chúng ta đã từng nghe về xe ơ tơ tự hành và có thể
hồn tồn tin tưởng vào chiếc xe có thể di chuyển. Nhưng để đạt được mức độ
chính xác và an tồn các phương tiện cần phải hiểu và tuân thủ quy tắc giao
thông.
Trong thời điểm phát triển của AI và công nghệ, nhiều nhà nghiên cứu của
các công ty lớn như Tesla, Uber, Toyota, ... đang nghiên cứu về xe tự hành, tự
lái. Để đạt được độ chính xác trong cơng nghệ này thì các phương tiện phải giải
thích được các biển báo giao thơng và đưa ra quyết định sao cho phù hợp. Vậy
biết được làm thế nào xe có thể nhận diện được biển báo giao thơng và ứng
dụng trí tuệ nhân tạo như thế nào thì thơng q project này chúng ta sẽ tìm hiểu
một mơ hình có tên YOLOv5 cho bài toán phân loại vật thể,
cụ thể là được ứng dụng vào đề tài “Phân loại biển báo giao
thông”.
1.2 Mục tiêu của đề tài
- Tìm hiểu về Deep Learning và các ứng dụng.
- Hiểu rõ được cơ sở lý thuyết, kiến trúc của mơ hình YOLO cho bài tốn
nhận diện vật thể.
- Sử dụng các thư viện hỗ trợ, môi trường ảo để thực thi mơ hình
1.3 Giới hạn đề tài
Trong đề tài chỉ nhận biết được 6 loại biển báo khác nhau. Hệ thống chỉ
dừng lại ở việc nghiên cứu, chưa thể áp dụng ra thị trường.

2 | Page




1.4 Phương pháp nghiên cứu
- Thu thập tài liệu, tham khảo những ứng dụng liên quan đã có
trước đó.
- Dựa trên các kiến thức đã học về cách huấn luyên mô ̣ t m ̣ ạng
nơ-ron.
- Đọc thêm tài liêu v ̣ à tra cứu trên mạng.
- Tham khảo ý kiến và thực hiện theo hướng dẫn của giảng viên.
1.5 Bố cục đề tài
- Chương 1: Tổng quan. Ở chương này, trình bày mục tiêu, giới
hạn đề tài,
phương pháp nghiên cứu, bố cục và đặt vấn đề.
- Chương 2: Mơ hình Yolov5 cho bài tốn nhận diện biển
báo. Ở chương này, trình bày về sự hình thành và phát triển Yolo
và thuật toán của Yolov5.
- Chương 3: Thiết kế hệ thống. Ở chương này, trình bày về
sơ đồ hoạt động,
thiết kế phần mềm, chức năng hoạt động của phần mềm.
- Chương 4: Kết quả thực hiện. Ở chương này, trình bày kết
quả đạt được
sau khi thiết kế và thi công.
- Chương 5: Kết luận và hướng phát triển. Ở chương này
tổng kết lại, trình
bày những ưu điểm, khuyết điểm trong quá trình nghiên cứu và
hướng phát triển của
đề tài.

3 | Page



- Tài liệu tham khảo

4 | Page


CHƯƠNG 2: MƠ HÌNH YOLOV5 CHO BÀI TỐN NHẬN DIỆN BIỂN
BÁO
2.1 Thuật toán Yolov5
YOLOv5 là một phần mở rộng tự nhiên của YOLOv3 PyTorch
bởi Glenn
Jocher . Kho lưu trữ YOLOv3 PyTorch là điểm đến phổ biến cho các
nhà phát triển để chuyển các trọng số YOLOv3 Darknet sang
PyTorch và sau đó chuyển sang sản xuất. Những cải tiến này ban
đầu được gọi là YOLOv4 nhưng do việc phát hành gần đây của
YOLOv4 trong khuôn khổ Darknet, để tránh xung đột phiên bản,
nó đã được đổi tên thành YOLOv5.
Thuật tốn YOLOv5 về cơ bản cũng thừa kế các phương pháp
cơ bản của các YOLO, tuy nhiên YOLOv5 áp dụng một số thuật
tốn phát hiện vật thể nhanh, tối ưu hóa các phép toán thực hiện
song song giúp tăng tốc độ nhận diện và giảm thời gian huấn
luyện một cách tối ưu.
2.2 Cấu trúc nhận diện vật thể của YOLOv5
Cấu trúc nhận diện vật thể của YOLOv5 thường có 3 phần
được thể hiện ở
hình 2-1.

5 | Page



Hình 2-1 Cấu trúc nhận diện vật thể của YOLOv5.

- Backbone: Backbone là 1 mơ hình pre-train của 1 mơ hình
học chuyển
(transfer learning) khác để học các đặc trưng và vị trí của vật
thể. Các mơ hình học chuyển thường là VGG16, ResNet50,.... Ở YOLOv5 sử dụng C3 module được cải tiến từ
CSPResBlock của YOLOv4 với chi tiết ở hình 2-2. C3 module ít
hơn 1 lớp Convolution so với CSPResBlock.

Hình 2-1. Sự khác biệt giữa CSPResBlock trong YOLOv4
(trên) và C3 Module (dưới)

6 | Page


- Head: Phần head được sử dụng để tăng khả năng phân biệt
đặc trưng để dự
đoán class và bounding-box. Ở phần head có thể áp dụng 1
tầng hoặc 2 tầng:
o Tầng 1: Dense Prediction, dự đốn trên tồn bộ hình với
các mơ hình RPN, YOLO, SSD,...
o Tầng 2: Sparse Prediction dự đốn với từng mảng được
dự đốn có vật thể với các mơ hình R-CNN series,..
- Neck: Ở phần giữa Backbone và Head, thường có thêm một
phần Neck.
Neck thường được dùng để làm giàu thông tin bằng cách kết
hợp thông tin giữa quá trình bottom-up và quá trình topdown (do có một số thơng tin q nhỏ khi đi qua q trình
bottom-up bị mất mát nên q trình top-down khơng tái tạo
lại được). YOLOv5 áp dụng một module giống với SPP của
YOLOv4, nhưng nhanh hơn gấp đơi đó là SPP – Fast (SPPF).

Kiến trúc của SPPF được thể hiện ở hình 2-3. Thay vì sử dụng
MaxPooling song song như trong SPP, SPPF của YOLOv5 sử
dụng MaxPooling tuần tự. Hơn nữa, kernel size trong
MaxPooling của SPPF toàn bộ là 5 thay vì là [5, 9, 13][5,9,13]
như SPP của YOLOv4.

7 | Page


Hình 2-3. Kiến trúc của module SPPF
2.3 Đặc điểm của YOLOv5 với các phiên bản trước của YOLO
2.3.1 Loại bỏ Grid Sensitivity

Trong YOLOv3, Bounding Box được tính theo cơng thức ở
Hình 2-4

8 | Page


Hình 2-4. Cơng thức tính Bounding Box của YOLOv3
Với trường hợp b x =c x và b x =c x +1 thì giá trị của t x , do tính chất
của sigmoid, phải có giá trị âm hoặc giá trị dương cực kì lớn. Để
giải quyết vấn đề này, ở YOLOv4, chúng sẽ nhân σ ( t x ) với một hệ
số > 1.0. Cụ thể, công thức của Bounding Box sẽ trở thành:

Tuy nhiên sang đến YOLOv5 lại sử dụng một công thức khác để
giải quyết Grid Sensitivity như sau:

9 | Page



2.3.2. Xử lý data

Các kỹ thuật Data Augmentation được áp dụng trong YOLOv5
bao gồm:

- Mosaic Augmentation: Là kỹ thuật ghép các hình ảnh lại
với nhau, thường sẽ là 4 ảnh. Với các ảnh sẽ chứa các
bounding box. Từ đó, model sẽ học được nhiều loại
background khác nhau do việc ghép các ảnh lại.

- Copy-paste Augmentation: là kỹ thuật sao chép các thể
hiện của đối tượng từ một hình ảnh và dán chúng vào một
hình ảnh khác. Nó gần giống với Mixup và CutMix nhưng chỉ
sao chép chính xác các pixel tương ứng với mổ đối tượng trái
ngược với tất cả các các pixel trong giới hạn đối tượng của
bounding box.

10 | P a g e


- Random Affine transform: là một phương pháp ánh xạ tuyến tính bảo tồn
điểm, đường thẳng và mặt phẳng. Tập hợp các đường thẳng song song vẫn
song song sau một phép biến đổi affine. Kỹ thuật biến đổi affine thường
được sử dụng để sửa các biến dạng hoặc biến dạng hình học xảy ra với các
góc máy ảnh khơng lý tưởng. Ở đây thì ta dùng nó để tăng cường dữ liệu và
chúng sửa một cách ngẫu nhiên.

- MixUp Augmentation: là một kĩ thuật Augmentation cực kì thành cơng
trong Classification. Ý tưởng chính của MixUp trong bài tốn Classification

sẽ là trộn lẫn pixel thông qua nội suy giữa 2 ảnh. Cùng lúc đó, one-hot label
của ảnh sẽ được biến đổi tương đương theo tỉ lệ trộn lẫn.

11 | P a g e


2.3.3. EMA Weight

Thông thường, khi training, ta sẽ ngay lập tức cập nhất weight của model
trong quá trình backward pass. Tuy nhiên, trong EMA, ta tạo ra một model y hệt
với model chúng ta sử dụng trong training, nhưng cách cập nhật weight sẽ tuân
theo công thức Exponential Moving Average (EMA): θ’←βθ’+(1−β)θ.
2.3.4. Loss scaling

YOLOv5 có sử dụng 3 đầu ra từ PAN Neck, để phát hiện objects tại 3 scale
khác nhau. Tuy nhiên, Glenn Jocher nhận thấy rằng sự ảnh hưởng của các object
tại mỗi scale đến Objectness Loss là khác nhau, do đó, cơng thức của Objectness
Loss được thay đổi như sau:

2.3.5. Anchor Box

Anchor Box trong YOLOv5 nhận được 2 sự thay đổi lớn. Đầu tiên là sử
dụng Auto Anchor, một kĩ thuật áp dụng giải thuật di truyền (GA) vào Anchor Box

12 | P a g e


ở sau bước k-means để Anchor Box hoạt động tốt hơn với những custom dataset
của người dùng, chứ khơng cịn hoạt động tốt ở mỗi COCO nữa.
Thứ hai đó chính là offset tâm của object để lựa chọn nhiều Anchor Box cho

một object. Ý tưởng được thể hiện trong hình dưới:

2.3.6. Tổng kết

Kiến trúc của YOLOv4 nâng cấp lên YOLOv5 được tóm tắt như sau:

- Backbone: CSPResidualBlock --> C3 module.
- Neck: SPP + PAN --> SPPF + PAN.
- Head: Giữ nguyên từ YOLOv3.
Các thay đổi khác trong YOLOv5 bao gồm:

- Data Augmentation: Mosaic Augmentation, Copy-paste Augmentation,
-

MixUp Augmentation.
Loss function: Thêm hệ số scale cho Objectness Loss.
Anchor Box: Auto Anchor sử dụng GA.
Loại bỏ Grid Sensitivity nhưng công thức khác.
EMA Weight.

13 | P a g e


CHƯƠNG 3: THIẾT KẾ HỆ THỐNG NHẬN DIỆN
Các bước chuẩn bị để có thể huấn luyện YOLOv5 trên Custom Dataset:
- Chuẩn bị bộ Dataset.
- Cài đặt các phần phụ thuộc cần thiết của YOLOv5.
- Tải xuống dữ liệu Custom YOLOv5 Object Detection.
- Xác định cấu hình và kiến trúc mơ hình YOLOv5.
- Huấn luyện a custom YOLOv5 Detector.

- Đánh giá hiệu suất YOLOv5.
- Trực quan hóa dữ liệu huấn luyện YOLOv5.
- Chạy YOLOv5 Inference trên hình ảnh thử nghiệm.
- Xuất các trọng số YOLOv5 đã lưu để suy luận được kết quả
3.1 Chuẩn bị folder training data
Ta tải dataset xuống theo link sau: />Đây là một bộ dataset đã gán nhãn vì vậy chúng ta khơng cần gán nhãn thủ
cơng cho từng ảnh.

14 | P a g e


Hình 3-3 Biển báo trong tập images

Hình 3-4 Các tệp Text Document trong folder labels

15 | P a g e


File .txt sẽ có format như sau :
- Mỗi hàng sẽ là một đối tượng.
- Mỗi hàng sẽ có format: class x_center y_center width
height.
- Toạ độ của các box sẽ được normalized (từ 0-1) theo format
xywh.
- Class sẽ bắt đầu từ 0.
3.2 Thiết lập môi trường để huấn luyện và nhận dạng biển báo giao thông
Ở đề tài này ta sử dụng Google Colab. Đây là môi trường làm
việc của chúng ta.
Giới thiệu sơ qua về Colaboratory hay còn gọi là Google
Colab, là một sản phẩm từ Google Research, nó cho phép thực thi

Python trên nền tảng đám mây, đặc biệt phù hợp với Data
analysis, machine learning và giáo dục.
Colab khơng cần u cầu cài đặt hay cấu hình máy tính, mọi
thứ có thể chạy thơng qua trình duyệt, bạn có thể sử dụng tài
ngun máy tính từ CPU tốc độ cao và cả GPUs và cả TPUs đều
được cung cấp cho bạn.
Sử dụng Google Colab có những lợi ích ưu việt như: sẵn sàng
chạy Python ở bất kỳ thiết bị nào có kết nối Internet mà khơng
cần cài đặt, chia sẻ và làm việc nhóm dễ dàng, sử dụng miễn phí
GPU cho các dự án về AI.
Sau khi đã chuẩn bị dataset xong, ta sẽ vào Google Colab,
kết nối và chạy dòng lệnh sau

16 | P a g e


Dòng lệnh này sẽ giúp ta kết nối dữ liệu ở Google Drive hoặc bạn
có thể kết nối bằng cách nhấn vào biểu tượng được khoanh tròn
trong ảnh

Bước tiếp theo ta chạy dòng lệnh sau

Dòng lệnh này giúp ta clone YOLOv5 về Google Drive của chúng
ta.
Ở dòng code tiếp theo ta chạy dòng code để cài đặt các thư
viện cần thiết cho mơ hình

Bước kế tiếp ta tải bộ dataset đã được ta chuẩn bị trước đó
lên Google Drive và sau đó ta vào theo đường dẫn
yolov5/data/coco128.yaml. Ở file này ta chỉnh sửa tên nhãn, lớp

và địa chỉ train, val của chúng ta rồi lưu lại.
train: /content/drive/MyDrive/BTLDL/coco128
val: /content/drive/MyDrive/BTLDL/coco128

17 | P a g e


# number of classes
nc: 6
# class names
names: [ 'stop', 'left', 'right', 'straight',
'no_left', 'no_right' ]
3.3 Training
Tiếp theo để xác định được cấu hình và kiến trúc mơ hình
YOLOv5 ta viết
một tệp cấu hình mơ hình cho custom object detector. Chọn base
model (mơ hình cơ sở) nhỏ nhất, nhanh nhất của YOLOv5. YOLOv5
đề xuất 11 versions theo hình 3-5.

Hình 3-5 Các version của YOLOv5

18 | P a g e


Với data và coco128.yaml file, thì ta sẵn sàng để huấn luyện,
để bắt đầu
huấn luyện, ta chạy the training command theo tùy chọn sau:
- img: xác định kích thước hình ảnh đầu vào
- batch: số ảnh để load vào (16-32) một lần
- epochs: số lần học

- data: đặt đường dẫn đến tệp yaml
- cfg: chỉ định cấu hình mơ hình
- weights: chỉ định một đường dẫn tùy chỉnh đến weights.
- name: tên kết quả
- nosave: chỉ lưu điểm kiểm tra cuối cùng
- cache: hình ảnh trong bộ nhớ cache để train nhanh hơn
Tiến hành huấn luyện nhận dạng các biển báo giao thông
bằng YOLOv5.
python /content/drive/MyDrive/BTLDL/yolov5/train.py -img 416 --batch 16 --epochs 30 --data /content/drive/My
Drive/BTLDL/yolov5/data/coco128.yaml --weights yolov5s.
pt

Hình 3-6 Quá trình huấn luyện trên YOLOv5

CHƯƠNG 4: KẾT QUẢ
Nhận diện biển báo giao thông qua 10 files ảnh trong folder test_image

19 | P a g e


Sau khi đã upload các ảnh test lên Google Drive thì ta vào Google Colab để bắt
quá trình nhận diện và lưu kết quả dự đoán được bằng YOLOv5.
! python /content/drive/MyDrive/BTLDL/yolov5/detect.py
--weight /content/drive/MyDrive/BTLDL/yolov5/runs/train
/exp10/weights/best.pt --source test_image \
--img 416 --conf 0.25 --iou 0.5
Hình 4-1 thể hiện YOLOv5 đang nhận dạng các labels của
biển báo trên
video.


Hình 4-1 Nhận dạng các label của biển báo ở 10 file ảnh
Sau khi các kết quả đã được lưu lại ta vào đường dẫn
yolov5→runs→dectect
như hình 4-2 để xem kết quả nhận diện được.

20 | P a g e



×