1.1.Mô tả bài toán
Trong bối cảnh đô thị hóa nhanh chóng, việc xử lý khối lượng lớn rác thải sinh hoạt hàng ngày là một thách thức đáng kể. Một phần quan trọng của vấn đề này là phân loại rác thải thành các loại có thể nhựa, rác hữu cơ, và thủy tinh. Đây là một bài toán nhận diện đối tượng và phân loại, trong đó trí tuệ nhân tạo và học máy được áp dụng để tự động hóa quy trình phân loại rác.
1.2.Mục tiêu
Mục tiêu của bài tập lớn này là xây dựng một hệ thống học máy hiệu quả để phân loại rác thải với độ chính xác cao. Hệ thống sẽ giúp giảm thiểu sự phụ thuộc vào sức lao động của con người trong việc phân loại và đồng thời tăng cường hiệu suất phân loại.
1.3.Ý nghĩa
Bài toán này có ý nghĩa thiết thực trong việc bảo vệ môi trường, giảm thiểu ô nhiễm và tối ưu hóa quy trình xử lý rác. Phân loại chính xác giúp tiết kiệm tài nguyên, giảm lãng phí năng lượng trong khai thác và tái chế, đồng thời góp phần xây dựng một hệ sinh thái bền vững. Việc ứng dụng học máy trong lĩnh vực này còn mở ra nhiều cơ hội nghiên cứu và phát triển các giải pháp công nghệ tiên tiến khác.
PHẦN II. Cơ sở lý thuyết
2.1. Khái niệm và phương pháp liên quan
Deep learning:
Deep Learning là một thuật toán ra đời được lấy ý tưởng từ hoạt động của não bộ tới việc tiếp thu nhiều tầng biểu đạt, cả cụ thể lẫn trừu tượng, qua đó giúp làm rõ nghĩa của các loại dữ liệu. Deep Learning tập trung vào giải quyết các vấn đề liên quan đến mạng thần kinh nhân tạo nhằm nâng cấp các công nghệ như nhận diện giọng nói, tầm nhìn máy tính và xử lý ngôn ngữ tự nhiên. Một số ứng dụng của Deep learning trong thực tế như: điểu khiển xe tự lái hay robot, nhận diện hình ảnh, phát hiện các loại bệnh hiếm gặp, hệ thống gợi ý trên các nền tảng như Facebook, Amazon, Netflix, ……
Deep learning là tập hợp con của Machine Learning, có khả năng khác biệt ở một số khía cạnh quan trọng so với ML truyền thống. Deep Learning dựa trên một tập hợp các thuật toán để cố gắng mô hình dữ liệu trừu tượng hóa ở mức cao bằng cách sử dụng nhiều lớp xử lý với cấu trúc phức tạp, hoặc bằng cách khác bao gồm nhiều biến đổi phi tuyến.
Hình 1.1 Deep learning(DL) là tập con của Machine learning(ML)
Cách hoạt động của Deep learning:
Deep Learning (DL) liên quan đến việc cung cấp cho hệ thống máy tính rất nhiều dữ liệu
à Dữ liệu này được cung cấp thông qua các mạng nơ-ron nhân tạo (neural network)
à Các mạng này là các cấu trúc logic yêu cầu một loạt các câu hỏi đúng/sai hoặc trích xuất một giá trị dạng số của mỗi bit dữ liệu đi qua chúng và phân loại nó theo các câu trả lời nhận được.
à Công việc của Deep Learning tập trung vào việc phát triển các mạng này nên chúng được gọi là Deep Neural Networks – các mạng logic có độ phức tạp cần thiết để xử lý các bộ dữ liệu phân loại lớn.
2.2. Các mô hình thuật toán được sử dụng
2.2.1. Convolutional Neural Network (CNN)
-
Khái niệm
Convolutional Neural Network (CNN) hay mạng nơ-ron tích chập là một trong những mô hình Deep Learning phổ biến nhất và có ảnh hưởng nhiều nhất trong lĩnh vực thị giác máy tính (Computer Vision).
Ứng dụng : nhận dạng ảnh, phân tích video hoặc cho các bài toán của lĩnh vực xử lý ngôn ngữ tự nhiên.
-
Tại sao cần CNN ?
Mạng Neural thông thường sẽ gặp vấn đề về số lượng weight khi xử lý ảnh
-
Mạng neurol thông thường có 3 thành phần : input layer, output layer, hidden layer. Mỗi node trong layer được kết nối với tất cả các node ở layer trước đó (fully connected layer)
-
Weight W: giữa input layer và hidde layer
Với CNN, một Neural trong một lớp chỉ kết nối với vài Neural của lớp trước đón, nên có thể giải quyết được vấn đề lượng lớn parameter mà vẫn lấy được đặc trưng của ảnh.
Hình 2.1. Trong ảnh các pixel ở cạnh nhau thường có liên kết với nhau hơn là những pixel ở xa
-
Convolution
Phép tích chập là một phép toán rất quan trọng trong mạng neural tích chập CNN. Nó được hình dung như việc lấy một cửa sổ trượt (sliding window) áp đặt lên một ma trận. Sliding window còn có tên gọi là kernel, filter hay feature detector.
-
Convolutional Neural Network – CNN là một dạng của mạng NN truyền thống nhưng nó mang thêm một số cải tiến, đó là Convolution và Pooling.
-
Mục đích của phép tính tích chập Convolution thực hiện trên ảnh là làm mờ, làm nét ảnh, xác định các đường, … Với mỗi kernel khác nhau thì phép Convolution sẽ có ý nghĩa khác nhau.
Hình 2.2 Minh họa phép tích chập
Với mỗi phần tử 𝑥𝑖𝑗 trong ma trận X lấy ra một ma trận có kích thước bằng kích thước của kernel W có phần tử 𝑥𝑖𝑗 làm trung tâm gọi là ma trận A. Sau đó tính tổng các phần tử của phép tính element-wise của ma trận A và ma trận W, rồi viết vào ma trận kết quả Y.
-
Convolutional layer
Convolutional layer là một lớp cực kỳ quan trọng trong CNN, nó đảm nhận hầu hết chức năng tính toán của mạng. Mục tiêu là trích chọn các đặc trưng của ảnh đầu vào.
Với mỗi kernel khác nhau ta sẽ học được những đặc trưng khác nhau của ảnh, nên trong mỗi convolutional layer ta sẽ dùng nhiều kernel để học được nhiều thuộc tính của ảnh. Vì mỗi kernel cho ra output là 1 matrix nên k kernel sẽ cho ra k output matrix. Ta kết hợp k output matrix này lại thành 1 tensor 3 chiều có chiều sâu k.
Hình 2.3 Convolutional layer
Ở các layer đầu tiên, phép tích chập đơn giản là phép tìm biên ảnh, tức là sau khi cho qua bộ lọc nó sẽ làm hiện lên các đặc trưng của đối tượng
trong ảnh như đường vẽ xung quanh đối tượng, các góc cạnh, … và các layer tiếp theo sẽ trích xuất tiếp các đặc trưng của đối tượng.
Việc có nhiều layer nhằm chia nhỏ đặc trưng của ảnh tới mức nhỏ nhất có thể.
-
Pooling Layer
Pooling layer thường được dùng giữa các convolutional layer, để giảm kích thước dữ liệu nhưng vẫn giữ được các thuộc tính quan trọng. Việc giảm kích thước dữ liệu giúp giảm các phép tính toán trong model.
Có hai loại pooling layer phổ biến là: max pooling và average pooling.
Hình 2.4. Hai loại Pooling layer
Pooling hoạt động gần giống với Convolution, nó cũng có một cửa sổ trượt gọi là pooling window.
Cửa sổ trượt này trượt qua từng giá trị của ma trận dữ liệu đầu vào (thường là các feature map trong Convolutional layer), chọn ra một giá trị lớn nhất từ các giá trị nằm trong cửa sổ trượt đối với max pooling và thực hiện lấy giá trị trung bình của các giá trị trong cửa sổ trượt nếu nó là average pooling.
-
Fully Connected Layer
Sau khi ảnh được truyền qua nhiều convolutional layer và pooling layer thì model đã học được tương đối các đặc điểm của ảnh (ví dụ mắt, mũi, khung mặt,...) thì tensor của output của layer cuối cùng, kích thước H*W*D, sẽ được chuyển về 1 vector kích thước (H*W*D, 1).
Hình 2.5 Cách hoạt động của fully connected layer
-
Để đưa ảnh từ các layer trước vào mạng này, buộc phải dàn phẳng bức ảnh ra thành 1 vector thay vì là mảng nhiều chiều như trước.
-
Tại layer cuối cùng sẽ sử dụng 1 hàm softmax để phân loại đối tượng dựa vào vector đặc trưng đã được tính toán của các lớp trước đó.
-
Kiến trúc của Convolutional Neural Network
CNN gồm hai thành phần:
-
Phần rút trích đặc trưng: convolution, relu, pooling.
-
Phần phân lớp: fully connected, softmax.
Hình 2.6 Kiến trúc của convolutional neural network
2.2.2. YOLO (you only look once)
Khác với các thuật toán phát hiện hai giai đoạn chia quá trình phát hiện đối tượng thành hai phần: sinh đề xuất và phân loại đề xuất; Các mô hình phát hiện đối tượng một giai đoạn không có giai đoạn sinh đề xuất (hoặc học cách sinh đề xuất), mà chúng thường coi tất cả các vị trí trên ảnh là các đối tượng tiềm năng và cố gắng phân loại từng vùng quan tâm là vùng nền hoặc đối tượng mục tiêu.
Việc phát hiện đối tượng một giai đoạn trực tiếp sinh ra xác suất lớp và tọa độ vị trí của đối tượng trong một giai đoạn. Nó không yêu cầu quy trình đề xuất vùng có đối tượng, nên nó đơn giản hơn việc phát hiện đối tượng hai giai đoạn. Ưu điểm là tốc độ phát hiện cao, nhưng độ chính xác phát hiện thường thấp hơn kiến trúc phát hiện đối tượng hai giai đoạn. Trong đó có mô hình YOLO
-
YOLO (2015)
Mô hình YOLO đầu tiên được đề xuất bởi Joseph Redmon và các cộng sự [18], dựa trên một mạng nơ-ron tích chập sâu được huấn luyện dạng end-to-end model. Mô hình lấy input là một bức ảnh và dự đoán các bounding box và nhãn lớp cho mỗi bounding box. Mô hình này không sử dụng region proposal nên nó có độ chính xác thấp hơn R-CNN (nhiều lỗi định vị vật thể hơn), nhưng nó có tốc độ xử lý khung hình cao, khoảng 45 fps và tối đa 155 fps cho phiên bản tối ưu hóa tốc độ.
Hình 2.7 Mô hình YOLO
Cách thức hoạt động của mô hình YOLO:
-
YOLO chia một bức ảnh đầu vào thành một ô lưới có kích thướcS x S. Giá trị S được chọn bằng 7 trong paper. Nếu tâm của một vật thể rơi vào một ô nào thì ô đó sẽ chịu trách nhiệm cho việc tìm kiếm vật thể đó. Mỗi grid cell sẽ dự đoán B
bounding boxes và confidence score cho mỗi box đó. Confidence score sẽ phản ánh hai thông số: Mức độ tự tin của mô hình trong việc dự đoán box đó chứa vật thể; Độ chính xác của predicted box là bao nhiêu (tức box đó khớp với ground-truth box đến mức nào).
-
Mỗi bounding box sẽ bao gồm 5 dự đoán: x, y, w, h, confidence. (x, y) là tọa độ tâm (offset) của bounding box so với với vị trí của của grid cell, vì thế nên giá trị của x, y trong đoạn [0, 1]; (w, h) là width, height của bounding boxes, được chuẩn hóa theo width và height của bức ảnh gốc, vì thế giá trị của chúng sẽ rơi vào đoạn [0, 1]; confidence biểu diễn giá trị IOU giữa predicted box và ground truth box.
-
Mỗi grid cell cũng sẽ dự đoán C xác suất có điều kiện của các class Pr(Classi
| Object), các xác suất này được lấy điều kiện trên grid cell chứa đối tượng. YOLO chỉ dự đoán một tập class probabilities trên mỗi grid cell, bất kể số lượng bounding boxes B là bao nhiêu.
-
Tại thời điểm test, ta nhân xác suất có điều kiện của mỗi class với dự đoán confidence của từng box như sau:
Pr ( Class
i | Object )
× Pr( Object )
× IOU truth
= Pr ( Class i) × IOU truth
(2.1)
Công thức trên cho ta confidence scores của từng class cho mỗi box. Công thức này cho ta biết: Xác suất của
classi xuất hiện trong box đó; Độ khớp của của predicted box so với vật thể.
Nhược điểm của YOLO:
-
YOLO đặt ra ràng buộc lớn về không gian lên việc dự đoán các bounding box: mỗi grid cell chỉ được dự đoán 2 boxes và một class (object) duy nhất. Vì thế, ràng buộc này sẽ bộc lộ nhược điểm khi gặp grid cell có nhiều hơn một object, đặc biệt là các object nhỏ chứa trọn trong một grid cell. YOLO sẽ gặp khó khăn trong việc dự đoán các object nhỏ và xuất hiện gần nhau hoặc theo nhóm.
-
Vì YOLO học cách dự đoán bounding boxes từ dữ liệu nên nó sẽ gặp khó khăn trong việc tổng quát hóa đến các đối tượng có tỷ lệ mới hoặc bất thường.
-
Hàm loss function coi sai số là như nhau đối với bounding boxes nhỏ và bounding boxes lớn, nên hầu hết sai số đến từ việc định vị vật thể không chính xác.
-
YOLOv2 (2016)
Mô hình YOLOv2 được Joseph Redmon và Ali Farhadi cập nhật nhằm cải thiện hơn nữa hiệu suất trong bài báo năm 2016 [19]. YOLOv2 sử dụng một xương sống CNN khác có tên là Darknet-19, một biến thể của kiến trúc VGGNet với các lớp
progressive convolution và pooling layers đơn giản. YOLOv2 nhanh hơn và chính xác hơn YOLO và có thể phát hiện nhiều loại đối tượng hơn, nó có khả năng dự đoán lên tới 9000 loại đối tượng khác nhau, do đó được đặt tên là YOLO9000. Những cải tiến chính trong YOLOv2:
-
Sử dụng các anchor boxes là một tập hợp các hộp giới hạn được xác định trước với các tỷ lệ và tỷ lệ khung hình khác nhau. Khi dự đoán các hộp giới hạn, YOLOv2 sử dụng kết hợp các anchor boxes và độ lệch được dự đoán để xác định hộp giới hạn cuối cùng. Điều này cho phép thuật toán xử lý phạm vi kích thước và tỷ lệ khung hình rộng hơn của đối tượng.
-
Sử dụng chuẩn hóa hàng loạt, giúp cải thiện độ chính xác và ổn định của mô hình. YOLOv2 sử dụng chiến lược đào tạo đa quy mô, bao gồm đào tạo mô hình trên hình ảnh ở nhiều tỷ lệ và sau đó lấy trung bình các dự đoán. Điều này giúp cải thiện hiệu suất phát hiện các đối tượng nhỏ.
-
YOLOv3 (2018)
Những cải tiến xa hơn của mô hình đã được đề xuất bởi Joseph Redmon và Ali Farhadi trong bài báo năm 2018 [20]. Những cải tiến chính trong YOLOv3:
-
Sử dụng kiến trúc CNN mới có tên là Darknet-53. Darknet-53 là một biến thể của kiến trúc ResNet và được thiết kế dành riêng cho các nhiệm vụ phát hiện đối tượng, nó có 53 lớp tích chập.
-
Sử dụng các anchor box với các tỷ lệ và tỷ lệ khung hình khác nhau. Trong YOLOv2, các anchor box đều có cùng kích thước, điều này đã hạn chế khả năng phát hiện các đối tượng có kích thước và hình dạng khác nhau của thuật toán. Trong YOLOv3, các anchor box được chia tỷ lệ và tỷ lệ khung hình thay đổi để phù hợp hơn với kích thước và hình dạng của các đối tượng được phát hiện.
-
Sử dụng FPN, là một kiến trúc CNN được sử dụng để phát hiện các đối tượng ở nhiều tỷ lệ. Nó xây dựng một kim tự tháp gồm các bản đồ đặc trưng, với mỗi cấp độ của kim tự tháp được sử dụng để phát hiện các đối tượng ở một tỷ lệ khác nhau. Điều này giúp cải thiện hiệu suất phát hiện trên các đối tượng nhỏ, vì mô hình có thể nhìn thấy các đối tượng ở nhiều tỷ lệ.
-
YOLOv4 (2020)
YOLO v4 là phiên bản thứ tư của thuật toán phát hiện đối tượng YOLO được giới thiệu vào năm 2020 bởi Bochkovskiy và cộng sự [25]. Những cải tiến chính trong YOLOv4:
-
Sử dụng kiến trúc CNN mới có tên là CSPNet (Cross Stage Partial Network), là một biến thể của kiến trúc ResNet được thiết kế đặc biệt cho các nhiệm vụ phát
hiện đối tượng, chỉ có 54 lớp chập, nhưng nó có thể đạt được kết quả tiên tiến trên các tiêu chuẩn phát hiện đối tượng khác nhau.
-
YOLOv4 giới thiệu một phương pháp mới để tạo các anchor box, được gọi là “k-means clustering”, sử dụng thuật toán phân cụm để nhóm các hộp giới hạn thực tế thành các cụm và sau đó sử dụng trọng tâm của các cụm làm anchor box. Điều này cho phép các anchor box được căn chỉnh chặt chẽ hơn với kích thước và hình dạng của các đối tượng.
-
YOLOv5 (2020)
YOLOv5 được giới thiệu vào năm 2020 bởi cùng một nhóm đã phát triển thuật toán YOLO ban đầu dưới dạng một dự án mã nguồn mở và được duy trì bởi Ultralytics. Những cải tiến chính trong YOLOv5:
-
Sử dụng một kiến trúc phức tạp hơn gọi là EfficientDet, dựa trên kiến trúc mạng EfficientNet, cho phép nó đạt được độ chính xác cao hơn và khả năng khái quát hóa tốt hơn cho nhiều loại đối tượng hơn. YOLO v5 được huấn luyện trên tập dữ liệu lớn hơn và đa dạng hơn có tên là D5, bao gồm tổng cộng 600 danh mục đối tượng.
-
Sử dụng một phương pháp mới để tạo các anchor box, được gọi là “dynamic anchor boxes”, sử dụng thuật toán phân cụm để nhóm các hộp giới hạn thực tế thành các cụm và sau đó sử dụng trọng tâm của các cụm làm anchor box. Điều này cho phép các anchor box được căn chỉnh chặt chẽ hơn với kích thước và hình dạng của các đối tượng.
-
Sử dụng “spatial pyramid pooling” (SPP), một loại lớp tổng hợp được sử dụng để giảm độ phân giải không gian của bản đồ đối tượng địa lý, và cải thiện hiệu suất phát hiện trên các đối tượng nhỏ, vì nó cho phép mô hình nhìn thấy các đối tượng ở nhiều tỷ lệ.
-
YOLOv6 (2022)
YOLOv6 được công bố và phát hành bởi Ultralytics, một tổ chức nghiên cứu và phát triển trong lĩnh vực thị giác máy tính và trí tuệ nhân tạo vào năm 2022. Những cải tiến trong YOLOv6:
-
Sử dụng một biến thể của kiến trúc EfficientNet có tên là EfficientNet-L2, là một kiến trúc hiệu quả hơn so với EfficientDet được sử dụng trong YOLOv5, với ít tham số hơn và hiệu quả tính toán cao hơn.
-
Giới thiệu một phương pháp mới để tạo các anchor box, được gọi là “dense anchor boxes”.
-
YOLOv7 (2022)
Mô hình YOLOv7 mô hìn YOLOv7 được đề xuất khi nào và trong bài báo nàođã được đề xuất và công bố thông qua dự án mã nguồn mở trên GitHub bởi TAO là một tổ chức nghiên cứu và phát triển trong lĩnh vực thị giác máy tính và trí tuệ nhân tạo. Những cải tiến trong YOLOv7:
-
Sử dụng các anchor box là một tập hợp các hộp được xác định trước với các tỷ lệ khung hình khác nhau được sử dụng để phát hiện các đối tượng có hình dạng khác nhau. YOLO v7 sử dụng chín anchor box, cho phép YOLO phát hiện phạm vi hình dạng và kích thước đối tượng rộng hơn so với các phiên bản trước, do đó giúp giảm số lượng xác định sai.
-
Sử dụng một loss function mới gọi là “focal loss”. Các phiên bản trước của YOLO đã sử dụng cross-entropy loss function tiêu chuẩn, được biết là kém hiệu quả hơn trong việc phát hiện các đối tượng nhỏ. Focal loss giải quyết vấn đề này bằng cách giảm trọng số mất mát cho các ví dụ được phân loại tốt và tập trung vào các ví dụ khó—các đối tượng khó phát hiện.
-
Xử lý hình ảnh ở độ phân giải 608 x 608 pixel, cao hơn độ phân giải 416 x 416 được sử dụng trong YOLO v3. Độ phân giải cao hơn này cho phép YOLOv7 phát hiện các đối tượng nhỏ hơn và có độ chính xác tổng thể cao hơn.
-
Có thể xử lý hình ảnh với tốc độ 155 khung hình mỗi giây, nhanh hơn nhiều so với các thuật toán phát hiện đối tượng khác.
-
YOLOv8 (2023)
YOLOv8 được ra mắt vào ngày 10 tháng 1 năm 2023, là mô hình SOTA mã nguồn mở được xây dựng và duy trì bởi nhóm Ultralytics. Nó được phân phối dưới Giấy phép Công cộng GNU, cho phép người dùng chia sẻ, sửa đổi và phân phối phần mềm một cách tự do. Những cải tiến trong YOLOv8:
-
Nhiều tham số hơn so với các phiên bản tiền nhiệm như YOLOv5, nhưng ít tham số hơn so với YOLOv6.
-
Thời gian suy luận nhanh hơn so với tất cả các phiên bản YOLO khác.
Các phần sau sẽ có trong file báo cáo
XEM THÊM ==> Hướng dẫn cài đặt chi tiết
Nguồn: Sharecode.vn
Để huấn luyện lại mô hình yolo có thể sử dụng file train.py để huấn luyện và khai báo lại dữ liệu mới trong data.yaml
Sau đó thay model mới vào phần weight để cập nhật hoặc có thể sử dụng model có sẵn của tôi đang được huấn luyện dựa trên 3 class nhựa, thủy tinh, hữu cơ. Bộ dữ liệu tôi đang sử dụng được lưu là dataset_split
Model hiện tại của tôi đang đạt map50 là 80% với việc detect đối tượng còn 99% đối với bài toán phân loại 2 model được huấn luyện sẵn này đều đã được đặt trong file training