Phân tích lý thuyết mô hình (CNN – Darknet53 – YoLov3), làm cơ sở tạo ra các thông số mô hình YoLov3 để phù hợp với bài toán và khả năng xử lý của máy tính. • Thu thập dữ liệu cars_traindataset (8144 ảnh) dùng để huấn luyện, cars_testdataset (8044 ảnh) dùng để thử nghiệm, thực hiện xử lý gán nhãn theo hãng xe hơi chuyển đổi sang định dạng đầu vào của mô hình YoLov3. • Đã thực hiện cài đặt và huấn luyện trên Google Colab, dùng chỉ số mAP để xác định file weight tốt nhất của quá trình huấn luyện. • Ứng dụng mô hình đã huấn luyện cho việc xây dựng ứng dụng phân loại xe hơi, đã cài đặt giao diện tương tác. • Viết module test cho bộ dữ liệu cars_testdataset (8014 ảnh), qua đó xây dựng kịch bản thử nghiệm cho hai bộ dữ liệu cars_testdataset và bộ dữ liệu tự tạo. Đánh giá kết quả thử nghiệm và đưa ra nhận xét
GIỚI THIỆU ĐỀ TÀI
Đặt vấn đề
Ngày nay, chúng ta đang trong giai đoạn bùng nổ công nghệ thông tin, thời kỳ 4.0 Internet phát triển bùng nổ, mạng viễn thông 5G đã đang triển khai rầm rộ, thế giới ngày càng phẳng, thế giới xích lại gần nhau hơn Vì thế lượng thông tin truyền tải trên internet tăng chóng mặt, các thuật ngữ công nghệ mới ra đời như là data science, big data, SDN, IoT, … Việt Nam đang hội nhập và phát triển, rất cần ứng dụng các công nghệ tiên tiến đặc biệt về công nghệ thông tin
Cùng với sự phát triển các loại máy tính mạnh mẽ sở hữu các loại chip CPU khủng, ổ cứng SSD dung lượng lớn, màn hình phân giải cao sử dụng nhiều GPU Đặc biệt, các hãng sản xuất GPU đã cho phép lập trình viên sử dụng để tính toán Khả năng của GPU tính toán cực mạnh, nó đã được áp dụng có các bài toán deep learning, tạo ra cuộc cách mạng AI
Các phần mềm ứng dụng mọc lên như nấm, được các ông lớn của các hãng như Google, Facebook, Apple, Samsung, Microsoft đặc biệt quan tâm tạo ra các chợ phần mềm nổi tiếng Không những thế, các công ty trên thế giới đều tự thiết kế các phần mềm ứng dụng cho riêng mình, và nó là một miếng bánh lớn, nhưng nó chỉ thực sự ngọt khi đưa các công nghệ mới được đưa vào như đã nêu trên
Không chỉ riêng công nghệ thông tin phát triển mạnh mẽ, mà các ngành công nghiệp cũng rất cực thịnh, thậm chí còn ứng dụng công nghệ thông tin để có được những sản phẩm chất lượng cao Đặc là trong lĩnh vực sản xuất xe hơi, nó không chỉ là phương tiện tiện đi lại mà còn thể hiện phong cách thượng lưu Vì vậy, nó chiếm trọng số rất lớn trong lĩnh vực sản xuất xe Ngay tại Việt Nam, cũng đã tự sản xuất xe hơi, chạy đua với thị trường quốc tế
Xu hướng thị trường là như vậy, em cũng mong mỏi tìm hiểu, học tập để có thể tạo ra một phần mềm “Phân loại xe hơi” (theo hãng) dựa trên mô hình YoLov3 (cốt lõi của mô hình là mạng nơ-ron tích chập) Ứng dụng “Phân loại xe hơi” (theo hãng), dựa trên bài toán phân lớp hình ảnh, thuộc bài toán kinh điển trong thị giác máy tính và cũng thuộc bài toán nhỏ trong data science Ứng dụng có thể giúp đỡ phục vụ cho mọi người trong vấn đề tìm hiểu xe hơi Chẳng hạn như giúp những người chưa có hiểu biết về xe hơi biết nó thuộc về hãng nào, từ đó giúp họ có thể nghiên cứu thông tin chi tiết hơn qua internet
Mục tiêu và nhiệm vụ
➢ Tìm hiểu mô hình mạng Nơ-ron tích chập áp dụng cho phân lớp ảnh
➢ Xây dựng ứng dụng phân lớp xe hơi dùng mạng nơ-ron tích chập
➢ Tìm hiểu mạng nơ-ron nhân tạo (ANN) và mô hình mạng nơ-ron nhân tạo (CNN)
➢ Tìm hiểu mô hình và công nghệ mạng CNN của YoLov3, Darknet53
➢ Xậy dựng thử nghiệm ứng dụng phân lớp ảnh dùng mô hình mạng nơ- ron YoLov3 để phân loại các ảnh xe hơi theo nhãn hiệu hãng xe
➢ Cài đặt ứng dụng thử nghiệm và đánh giá kết quả.
Một số phương pháp phân lớp ảnh
Phân lớp ảnh có rất nhiều phương pháp tiếp cận trong học máy (machine learning), sâu hơn trong học máy là các phương pháp học sâu (deep learning) Một số phương pháp phân lớp ảnh bao gồm:
1 Bộ phân lớp theo láng giềng gần nhất (Nearest Neighbor Classifier), cách phân loại này không liên quan gì tới mạng nơ-ron tích chập, và nó rất hiếm khi được sử dụng trong thực tế, nhưng nó cho chúng ta ý tưởng cơ bản về bài toán phân loại hình ảnh Sau khi gán nhãn, thuật toán sẽ tạo ra bộ dữ liệu ảnh test, so sánh nó với từng ảnh đã được huấn luyện, và dự đoán nhãn của nó trùng với ảnh trong bộ huấn luyện gần nó nhất Công thức tính khoảng cách là: d1(I1, I2) = ∑p |I1 p – I2 p|
Hình 1.1 Ví dụ về tính khoảng cách giữa hai ảnh [1]
2 Bộ phân lớp theo K láng giềng gần nhất (K – Nearest Neighbor Classifier), tương tự như ý tưởng của thuật toán bộ phân lớp theo láng giềng gần nhất, nhưng thay vì chỉ dùng 1 hàng xóm gần nhất, thì ta dùng k hàng xóm gần nhất Ta lấy
Hình 1.2 Ví dụ sự khác nhau giữa hai NN với 5-NN classifier [1]
Ta thấy, vùng có 1 điểm xanh lá cây nằm giữ các điểm xanh da trời, với NN classifier, nó không thể dự đoán chính xác, trong khi với 5-NN classifer có thể xử lý vấn đề này Điều đó, cho thấy k-NN classifier có khả năng tổng quát hóa tốt hơn
3 Bộ phân lớp tuyến tính (Linear Classifier), là một phương pháp tiếp cận mạnh mẽ hơn hai phương pháp trên, và có thể mở rộng để sử dụng mạng nơ-ron và mạng nơ-ron tích chập Với cách tiếp cận này, sẽ có hai hàm chính “score function” và “loss function” Cách tiếp cận này dẫn đến bài toán cực tiểu hóa “loss function”
Hình 1.3 Ví dụ về linear classification [1]
Các dạng mở rộng của của Linear Classifier:
➢ Multi-class Support Vector Machine (Muli-class SVM) dựa trên phương pháp svm classifier, được phát triển tại phòng thí nghiệm AT&T Bell bởi Vapnick với các cộng sự
➢ Phân loại nhiều lớp với mạng nơ-ron, bài toán sẽ áp dụng mạng nơ-ron trong việc phân loại Nó là một trong những ứng dụng của mạng nơ-ron
➢ Phân loại nhiều lớp với mạng nơ-ron tích chập, bài toán áp dụng mạng nơ- ron tích chập trong bài toán phân lớp.
Định hướng giải pháp và công nghệ
Ngày nay, nhờ sự phát triển mạnh mẽ của máy tính trong việc xử lý tính toán, nên việc áp dụng các mô hình học sâu cho bài toán phân lớp ảnh trở nên dễ dàng hơn và cho độ chính xác cao hơn Mặt khác, sự bùng nổ internet, chúng ta ngày càng dễ thu thập dữ liệu phục vụ cho việc huấn luyện mô hình
Một số mô hình nổi tiếng ra đều dựa trên mạng nơ-ron tích chập như : Alexnet, VGG-16, GooLeNet, ResNet, DenseNet, Darknet, … Tùy vào đặc trưng của từng bài toán, mà ta sử dụng cho phù hợp
Trên thị trường, mạng Darknet cho mô hình YoLo được dùng rất phổ biến, vì nó dễ sử dụng, nhanh và linh hoạt Trong đấy phải kể đến mô hình YoLov3 sử dụng mạng Darknet53, nó có thể sử dụng linh hoạt nhiều bài toán như phát hiện đối tượng, phân lớp ảnh, phân vùng ảnh Đồ án sẽ tiếp cận, sử dụng mô hình YoLOv3 (bên trong là mạng Darknet53) cho bài toán phân lớp ảnh xe hơi, ta có thể mở rộng bài toán phân lớp với việc vẽ thêm các bounding box cho từng đối tượng được phân lớp
Qua đó, đồ án sẽ ứng dụng mô hình đã được huấn luyện bởi YoLov3 cho việc xây dựng ứng dụng “ phân loại xe hơi” (car image classification)
TỔNG QUAN VỀ MẠNG NƠ-RON TÍCH CHẬP
Mạng nơ-ron nhân tạo
2.1.1 Mô hình hoạt động của nơ-ron
Nơ-ron (neural) nhân tạo lấy ý tưởng từ nơ-ron của não bộ con người, với đơn vị một nơ-ron Thực tế, bộ não con người có đến khoảng 86 tỷ tế bào nơ-ron và chúng kết với nhau đến khỏng 10 ^14 – 10 ^15 synapses
Hình vẽ bên trái dưới là một tế bào nơ-ron sinh học, và một mô hình nơ- ron toán học ở bên phải Mỗi nơ-ron nhận tín hiệu đầu vào từ các dendrites của nó và tạo ra tín hiệu dọc theo sợi trục axon của nó Phần cuối của sợi trục axon phân nhánh ra bên ngoài và kết nối qua synapses với dendrites của tế bào nơ- ron khác
Hình 2.1 Cấu tạo nơ-ron thần kinh và nơ-ron nhân tạo [1]
Trong mô hình toán học của nơ-ron ở bên phải hình vẽ, các tín hiệu đi dọc các axons tương tác bằng cách nhân với dendrite của nơ-ron khác (ví dụ: w0x0) dựa vào khả năng của synapse của nơ-ron đó (ví dụ: w0) Ý tưởng nằm ở chỗ khả năng của synapse ( ứng với trọng số w) có thể học và kiểm soát mức độ ảnh hưởng( ứng với w>0) hoặc ức chế (ứng với w có 3549x3 = 10647 bounding box được sinh ra để dự đoán phân loại Nhưng trong ảnh chỉ có 1 đối tượng tức chỉ có 1 bounding box (10647->1)
Các thông số của mô hình YoLov3
3.3.1 Định dạng dữ liệu đầu vào cho quá trình huấn luyện Đối với bộ dữ liệu ảnh để thực hiện huấn luyện, nó cần phải định dạng cứ một file ảnh thì cần 1 file txt với tên giống hệt nhau
Trong file text chứa 5 thông số:
Hình 3.13 Định dạng dữ liệu file text đầu vào [15]
• Class number là tên class được mã hóa dưới dạng số (ví dụ bài toán cần phân loại xe bus, xe khách, xe con Như vậy sẽ có 3 class, và ta mã hóa tương ứng sang dạng số : 1,2,3)
• Object centre in x là tọa độ trung tâm x của bounding box theo trục hoành
• Object cnetre in y là tọa độ trung tâm y của bounding box theo trục tung
• Object width là độ rộng của bounding box (theo trục hoành)
• Object height là chiều cao của bounding box (theo trục tung)
3.3.2 Phân tích các tham số cho quá trình huấn luyện
Trước khi thực hiện huấn luyện, ta cần phải cấu hình lại các tham số của mô hình YoLov3 để cho phù hợp với bài toán đặt ra, cụ thể ta cấu hình lại ở file config gồm các thông số sau:
Batch : là kích thước lô xử lý trong quá trình training Với bộ dữ liệu hình ảnh rất lớn Quá trình training luôn luôn cập nhật lặp lại liên tục chỉ số weights của mạng nơ-ron dựa trên số lỗi sinh ra từ tập training dataset Việc sử dụng tât cả các hình ảnh trong tập huấn luyện cùng một lúc là không khả thi Chúng ta phải chia nhỏ ra để đưa vào cho mỗi lần lặp chính batch size Khi
37 batch size d, tức là có 64 hình ảnh đưa vào training cho 1 lần lặp để cập nhật lại thông số mạng nơ-ron
Subdivisions: Mặc dù có thể dụng batch size là 64 cho việc training mạng nơ-ron Nhưng có thể bị thiếu bộ nhớ GPU để dụng batch size là 64 Darknet cho phép chia batch ra thành từng phần để xử lý cùng 1 lúc trên GPU gọi là subdivisons
Có thể Subdivisons là 1 nếu chúng ta có đủ bộ nhớ GPU, nếu không chúng ta có thể tăng lên 2,4,8,16,32 nhưng không được lớn hơn batch size
Width, Height, Channels : lần lượt là chiều rộng chiều dài và số chiều của ảnh Nếu ta sử dụng ảnh màu thì channels là 3 vì ảnh màu có 3 chiều Ảnh đưa vào sẽ được định dạng lại kích thước theo chiều rộng x chiều dài ( ví dụ: 416x416)
Và có thể tăng kích thước ảnh lên 608x608 để cải thiện kết quả
Momentum và Decay : là các thông số kiểm soat việc cập nhật lại weight Như đã đề cập ở quá trình lặp ta sử dụng batch , tức số ảnh đưa vào cho một lần lặp để cải thiện lại weight, và weight có thể bị dao động rất lớn Do đó Momentum được đưa vào để ngăn chặn sự dao động lớn của việc cập nhật weight ở mỗi lần lặp
Và trường hợp điển hình của mạng nơ-ron là trong quá trình training sinh ra rất nhiều weights nên dẫn đến trường hợp overfit Overfitting được hiểu là làm rất tốt trên tập training data nhưng lại rất tồi trên tập test, giống như việc mạng nơ-ron đã nghi nhớ câu trả lời tất cả hình ảnh trong training data, nhưng lại không học được khái niệm cơ bản Một trong những cách để ngăn chặn quá trình overfit là ngăn chặn weights quá nhiều đó chính là sử dụng tham số decay
Tham số mặc định của momentum=0.9 và decay =0.0005 thường hoạt động rất tốt
Learning rate, Steps, Scales, burn-in
Tham số Learning rate kiểm soát mức tộ tích cực (hội tụ nghiệm) dựa trên lô dữ liệu hiện tại Nó thông thường dao đọng động từ 0,01 đến 0,0001
Hình 3.14 Đồ thị Learning rate Khi việc mới bắt đầu học, do chưa có thông tin lên ta Learning rate phải lớn, Nhưng khi chúng gần đạt đến kết quả thì càng ngày phải nhỏ lại Và learning rate sẽ giảm dần qua từng Steps khi đó sẽ nhân với Scales Nhưng thực tế cho thấy, tôc độ training có xu hướng tăng nếu learning rate thấp hơn trong một thời gian ngắn khi mới bắt đầu Điều này được được kiểm soát bởi burn-in
Do việc thu thập dữ liệu rất tốn thời gian Đầu tiên ta phải thu thập tập dữ liệu ảnh (chẳng hạn có thể lên đến hàng trăm nghìn ảnh) rồi sau đó tạo bounding box cho mỗi class trong ảnh ( gán nhãn) Công việc này, rất mất nhiều công sức
Vì vậy, để tối đa hóa được nhiều ảnh, giảm bớt công sức gán nhãn, chúng ta sẽ tạo ra dữ liệu mới từ dữ liệu đã thu thập, quá trình này gọi là data augmentation Ví dụ như, hình ảnh người tuyết khi xoay một góc k độ, thì nó vẫn là người tuyết Thông số angle trong file config cho phép chúng ta random xoay ảnh theo ± angle
Tương tự như vậy, chúng ta biến đổi màu theo các thông số saturation, exposure và hue
Ví du: Angle =0; Saturation = 1.5; Exposure = 1.5; Hue = 1
Max_batches là thông số chỉ số lần lặp tối đa trong quá trình huấn luyện Trong quá trình phát hiện phân loại đa lớp, chúng ta cần Max_batches là 2000*n, và nó tối thiểu không được nhỏ hơn 4000
3.3.3 Thời điểm dừng pha huấn luyện
Trước hết, ta có khái niệm Overfitting, là hiện tượng khi mô hình xây dựng thể hiện được chi tiết bộ dữ liệu huấn luyện Tức cả dữ liệu nhiễu và dữ liệu bất thường trong tập huấn luyện đều được chọn và học để đưa ra quy luật mô hình Những quy luật này không có ý nghĩa khi áp dụng với bộ dữ liệu mới có thể tồn tại dạng nhiễu khác Khi đó nó ảnh hương tiêu cực đến độ chính xác của mô hình nói chung Hiện tượng Overfitting thường xảy ra trong trong các mô hình phi tham số hoặc phi tuyến Nó được biểu diễn như hình 3.15
Hình 3.15 Sai số cho tập validation và training datasets [15]
Từ điểm bắt đầu, sai số (loss) giảm dần xuống cho cả tập dữ liệu huấn luyện và tập dữ liệu validation Nhưng tại một số điểm, sai số (loss) của tập dữ liệu validation dừng lại và bắt đầu tăng Đồng thời, sai số của tập dữ liệu huấn luyện tiếp tục giảm tiệm cận 0 Đó không phải là lỗi mà gần như 100% đều phân loại nhận dạng đúng Mục tiêu là xác định điểm cụ thể này, nơi mà sai số của dữ liệu validation nhỏ nhất
Trong đó YoLov3 sử dụng phương pháp Mean Average Precision (mAP), là phương pháp được sử dụng rất phổ biến Chỉ số mAP chứa các thông tin precision và recall
• True Positive (TP) là số bounding box đúng , IoU> threshold
• False Positive (FP) là số bounding box sai , IoU < threshold
• False Negative (FN) là số bounding box đúng nhưng thực tế ko được phát hiện
• True Negative (TN) là số bounding box không được dự đoán chính xác
XÂY DỰNG ỨNG DỤNG PHÂN LỚP ẢNH XE HƠI VÀ THỬ NGHIỆM
Xác định yêu cầu ứng dụng
Đầu vào cho ứng dụng là ảnh xe hơi đơn, là những xe có 4 đến 7 chỗ ngồi, và ảnh phải được định dạng với đuôi JPEG, PNG Ứng dụng thực hiện phân loại 49 hãng xe khác nhau bao gồm: AM General, Acura, Aston, Audi, BMW, Bentley, Bugatti, Buick, Cadillac, Chevrolet, Chrysler, Daewoo, Dodge, Eagle, FIAT, Ferrari, Fisker, Ford, GMC, Geo Metro, HUMMER, Honda, Hyundai, Infiniti, Isuzu, Jaguar, Jeep, Lamborghini, Land, Lincoln, MINI, Maybach, Mazda, McLaren, Mercedes- Benz, Mitsubishi, Nissan, Plymouth, Porsche, Ram, Rolls-Royce, Scion, Spyker, Suzuki, Tesla, Toyota, Volkswagen, Volvo, smart fortwo Convertible Đầu ra bao gồm: 1 ảnh gốc, 1 ảnh đã được phân loại, và kết quả chi tiết Đối với ảnh được phân loại có vẽ bounding box xung quanh đối tượng xe hơi đã được phân loại, ghi lại nhãn của hãng xe và phần trăm độ tin cậy lên góc trên trái bên ngoài của bounding box Đối với kết quả chi tiết được cập nhật với hai thông số chính là tên hãng xe của đối tượng và độ tin cậy của phân lớp
Hình 4.1 Một ví dụ về hình ảnh đã được phân lớp
Môi trường xây dựng ứng dụng là môi trường desktop (Windows), Google
Colab và ứng dụng được tạo ra là ứng dụng desktop
Xây dựng có hai pha bao gồm pha thứ nhất là pha huấn luyện mô hình, pha thứ hai là pha dựa trên mô hình đã huấn luyện để xây dựng ứng dụng.:
• Pha thứ nhất, em ứng dụng mô hình YoLov3 (phát triển từ CNN) để thực hiện huấn luyện có mẫu Với tập ảnh mẫu gồm 8041 ảnh gán nhãn
• Pha thứ hai, em dựa trên mô hình đã được huấn luyện ở pha huấn luyện, ngôn ngữ lập trình python, các framework như OpenCV, numpy, Tkinter, và các thư viện như os, time, scipy
Phân tích chức năng của ứng dụng
4.2.1 Phân tích qua biểu đồ use case
Hình 4.2 Biểu đồ use case của ứng dụng
Biểu đồ use case như hình 4.2 của ứng dụng phân lớp xe hơi với tác nhân là con người thông qua các thao tác với phần mềm để thực hiện phân loại xe Với 4 use case, con người có thể tác động là: Select a file, chọn thư mục, chọn một ảnh, hiển thị ảnh đã phân loại, thoát Và 4 use case là do ứng dụng tự tạo là: hiển thị file ảnh định
43 dạng JPEG, hiển thị file ảnh định dạng PNG, hiển thị ảnh gốc, hiển thị thông tin chi tiết
4.2.2 Phân tích qua biểu đồ hoạt động
Hình 4.3 Biểu đồ hoạt động của ứng dụng
Trong Biểu đồ hoạt động (Hình 4.3) này:
• Bắt đầu từ việc lựa chọn 1 file trong Window
• Kết thúc là việc hiển thị hình ảnh đã phân lớp và cập nhật lại thông tin chi tiết.
Cài đặt ứng dụng
Để xây dụng ứng dụng, ta cần xử lý hai pha là pha huấn luyện mô hình và pha xây dựng ứng dụng Các pha này, em đều thực hiện trên môi trường Laptop (window) và Google Colab Trên Google Colab, em chỉ dùng cho việc huấn luyện dữ liệu
Cài đặt trên môi trường Window của laptop:
Mục đích Công cụ Địa chỉ URL
Anaconda https://www.anaconda.com/products/individual
IDE PyCharm https://www.jetbrains.com/pycharm/download
Python (3.7) https://www.python.org/downloads/release/python- 370/
Cài tích hợp trên Anaconda Framework Darknet53 https://pjreddie.com/darknet/yolo/
GPU CUDA https://developer.nvidia.com/cuda- downloads UML StarUML https://staruml.io/download
Bảng 4.1 Cài đặt trên môi trường window Cài đặt trên Google Colab:
Vì cấu hình laptop của em chỉ có 2 GB Ram GPU, nên việc training khá chậm, để giải quyết vấn đề này, em lựa chon Google Colab Nó hỗ trợ với
13 GB RAM cho bộ nhớ chính và 12 GB RAM cho bộ nhớ GPU
Với mục đích là huấn luyện dữ liệu trên Google Colab, nên ta cài các công cụ sau:
Mục đích Công cụ Địa chỉ URL
Framework Darknet53 https://pjreddie.com/darknet/yolo/
GPU CUDA Đã được Google Colab hỗ trợ Môi trường Dos2unixx Đã được Google Colab hỗ trợ Bảng 4.2 Cài đặt trên môi trường Google Colab
❖ Thu thập dữ liệu: Trong đồ án của em, dữ liệu được thu thập ở một trang web của trường đại học Stanford : https://ai.stanford.edu/~jkrause/cars/car_dataset.html [16]
Bộ dữ liệu dành cho việc huấn luyện (cars_traindataset) gồm 8144 ảnh xe hơi đơn của các hãng đã nêu ở mục 4.1 Và 1 file thông tin cars_train_annos.mat gán nhãn thương hiệu và năm phát hành cho từng ảnh xe Tổng cộng là 196 classes (bao gồm: tên hãng + năm phát hành) Trong bài toán của em, em chỉ thực hiện phân loại theo tên hãng, nên cần phải chỉnh sửa lại toàn bộ nhãn Trong quá trình thực hiện gán nhãn lại, em đã thu gọn về 49 classes theo hãng xe Mục đích chính của em là để giảm thời gian huấn luyện ( vì thời gian gian huấn luyện rất tốn kém, chỉ với 49 classes, em đã mất gần nửa tháng huấn luyện liên tục trên Google Colab) Với 1 file cars_meta.mat, nó chứa thông tin số hóa của tên các classes
Hình 4.4 File thông tin cars_train_annos.mat
Bộ dữ liệu dành cho thử nghiệm và test (cars_testdataset)gồm 8041 ảnh xe hơi đơn của các hãng đã nêu ở mục 4.1 Và cũng có 1 file mat gán nhãn thương hiệu và năm phát hành cho từng xe Tổng cộng là 196 classes (bao gồm: tên hãng + năm phát hành) Tương tự như bộ dữ liệu dành cho huấn luyện, em thực hiện phân loại theo hãng
❖ Gán nhãn dữ liệu: Với các ảnh mới, ta có thể sử dụng LabelImage để gán nhãn rồi định dạng sang kiểu của YoLo
Hình 4.5 Phần mềm gán nhán dữ liệu labelImg
Các bước gán nhãn cho dữ liệu mới:
1 Chọn open hoặc open dir(để mở và xử lý file ảnh trong bộ dữ liệu)
2 Chọn Create RectBox để tạo bounding box, rồi gán nhãn:
3 Chọn định dạng YoLo thay cho PascalVOC
Với hai bộ dữ liệu cars_traindataset ( 1 bộ để huấn luyện, 1 bộ để thử nghiệm), do đã có mat gán nhãn theo hãng và năm phát hành Nên em sẽ thực hiện gán nhãn lại dựa trên mat đã có sẵn, bằng cách bỏ năm phát hành, gộm những class có cùng hãng thành 1 class duy nhất Và sau quá trình phân tích nó chỉ còn 49 classes theo hãng xe như đã nêu ở mục 4.1
Hình 4.6 Thuật toán gộp classes
Trong thuật toán gộp classes như hình 4.6 trên, với việc bắt đầu là nhập dữ liệu từ file cars_meta.mat, và kết thúc khi đã duyệt hết file cars_meta.mat
Với định dạng dữ liệu của YoLov3, gán nhãn là mỗi ảnh kèm theo 1 file text có tên giống hệt với file ảnh gốc Mà hai file thông tin mat đã cho là 1 file lớn chứa toàn bộ thông tin của 8144 ảnh dành cho huấn luyện (cars_train_annos.mat) và 1 file lớn chứa toàn bộ thông tin của 8041 ảnh dành cho việc thử nghiệm (cars_test_annos_withlabels.mat) Mỗi file text này, gồm
5 thông số như hình 3.13 của chương YoLo Ta có công thức chuyển đổi như sau:
• x,y lần lượt là tọa độ trung tâm của bounding box
• w,h lần lượt là chiều rộng chiều cao của bounding box
4.3.3 Thực hiện huấn luyện và đánh giá
❖ Tạo file cấu hình yolov3_car_train.config
File cấu hình là một phần rất quan trọng trong YoLov3 như đã đề cập ở mục 3.3.1, nó là các thông số đầu vào cho mô hình YoLov3, là các tham số của mạng Darknet53 (thực chất là là các lớp tích chập) Ta cần phải cấu hình cho phù hợp với yêu cầu bài toán đặt ra và khả năng xử lý máy tính
Vì laptop của em có 4GB Ram bộ nhớ chính và 2 GB Ram GPU, nên rất hạn chế trong quá trình huấn luyện Nên em đã chọn Google Colab (13 GB Ram bộ nhớ chính và 12 GB Ram GPU) để thực hiện việc huấn luyện Nên file config được cấu hình như sau:
• Batchd, subdivisions=8 ( để tận dụng 12 GB Ram GPU)
• Width A6, height = 416 là định dạng kích thước ảnh đầu vào Thông số này có thể thay đổi cao hơn (sẽ cho độ chính xác tốt hơn), thay đổi bé hơn( sẽ cho độ chính xác kém hơn) Ở đây, em chọn kích thước phù hợp với Ram và cũng theo chuẩn thường dùng
• Momentum = 0,9 ; decay= 0,0005 để ngăn chặn sự dao động lớn trong quá trình cập nhật weight.
• Learning_rate = 0.001 để kiểm soát hội tụ nghiệm
• Max_batches = 49000 , vì bài toán có 49 classes, với mỗi class, em cho lặp 1000 ( chuẩn là 2000 lần, nhưng điều kiện không cho phép) Vậy nên tổng là 1000*49 = 49000
• Data augmentation :angle =0 , saturation = 1.5, exposure = 1.5, hue = 1 ; những tham số này với mục đích sinh thêm nhiều dữ liệu từ dữ liệu huấn luyện
• Cấu hình cho [yolo] với o Mask = 0,1,2 vì chúng ta sử dụng 3 thang đo trong YoLov3 o Anchors ,13; 16,30; 33,23; 30,61; 62,45; 59,119; 116,90; 156,198; 373,326 Tổng cộng chúng ta có 9 anchors box cho mỗi cell Vì mỗi cell có 3 box cơ bản (đại diện của 3 thang đo) mỗi box cơ bản lại có 3 bounding box, vì vậy tổng cộng là 3x3=9 anchors o ClassesI , vì bài toán chúng ta có 49 classes của các hãng xe o ignore_thresh = 5 , chúng ta chọn ngưỡng IoU là 0.5 tức là nếu chỉ số IoU95%, thấp nhất là 79,5% của hãng AM General cao nhất là 95.1% với hãng Scion
Thống kê precision recall F1-score confidence
4.4.2 Kịch bản thử nghiệm trên bộ dữ liệu tự tạo
Bộ dữ do em tự tạo có 70 ảnh của một số hãng, nên nó không thể bao quát được hết, bộ dữ liệu này, 1/2 là do em tự chụp bằng điện thoại có qua chỉnh sửa kớch thước, ẵ cũn lại là do em lờn trờn cỏc trang web chớnh hóng dũng ụ tụ để lấy xuống
Kết quả thu được sau khi phân lớp là:
• 64 ảnh nhận đúng nhãn với độ tin cậy trung bình là 99%
Bảng 4.19 Biểu đồ thống kê kết quả phân loại của bộ dữ liệu tự tạo
Như vậy phần trăm nhận dạng đúng nhãn là 91,4%
4.4.3 Độ đo, độ chính xác, kết quả thử nghiệm
Các thang đo được sử dụng được sử dụng trong kịch bản thử nghiệm của mục 4.4.2 là precision, recall, F1-score, độ tin cậy, độ chính xác(accuracy)
➢ Precision (độ chính xác) đại diện cho phần trăm dự đoán chính xác của các bounding box và cho thấy độ tin cậy của mô hình đã đào tạo để phát hiện phân loại các loại đối tượng
➢ Recall (độ triệu hồi) đại diện cho phần trăm dự đoán đúng của tất cả các bounding box kết quả đúng trong tất cả các bounding box đúng
➢ F1-score là đại diện trung hòa giữa precision và recall
➢ Độ tin cậy của nhãn đúng là thể hiện xác suất của đối tượng đó theo lớp
➢ Độ chính xác là phần trăm dự đoán đúng trên toàn bộ dữ liệu
❖ Đánh giá qua bộ dữ liệu cars_testdataset
Với bộ dữ liệu cars_testdataset (8041 ảnh), cho ta nhìn khách quan, và có thể test đầy đủ cho từng hãng xe Các độ đo precision, recall, f1-score, độ tin cậy đã được thông kê theo từng lớp như mục 4.4.2 Về toàn thể bộ test, ta có độ chính xác trung bình là 95,1%, và độ tin cậy trung bình cho các ảnh phân lớp đúng là 99,2%
❖ Đánh giá qua bộ dữ liệu tự tạo
Với bộ dữ liệu do em tự tạo có 70 ảnh của một số hãng xe ( cần phải từ năm 2012 trở xuống vì bộ dữ liệu huấn luyện là các xe từ trước 2012), nó khá mang tính chủ quan, và em chỉ có thể thử nghiệm chung cho 70 ảnh
Bảng 4.20 Biểu đồ so sánh giữa 2 bộ test
➢ Qua đó, phần trăm nhãn đúng và độ tin cậy ở bộ dữ liệu cars_testdataset cao hơn so vưới bộ dữ liệu tự tạo Bởi vì:
• Bộ dữ liệu cars_testdataset đã qua tiền xử lý, nên việc phân lớp sẽ tốt hơn
• Bộ dữ liệu cars_testdataset chỉ có 49 hãng xe và cùng năm sản xuất nên nó rất tương đồng với bộ dữ liệu huấn luyện
So sánh bộ test_1 bộ test_2
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
1 Đóng góp trong đồ án
• Đưa ra một số phương pháp phân lớp ảnh, qua đó đề xuất lựa chọn mô hình công nghệ YoLov3 phục vụ cho bài toán phân loại ảnh xe hơi
• Phân tích lý thuyết mô hình (CNN – Darknet53 – YoLov3), làm cơ sở tạo ra các thông số mô hình YoLov3 để phù hợp với bài toán và khả năng xử lý của máy tính
• Thu thập dữ liệu cars_traindataset (8144 ảnh) dùng để huấn luyện, cars_testdataset (8044 ảnh) dùng để thử nghiệm, thực hiện xử lý gán nhãn theo hãng xe hơi chuyển đổi sang định dạng đầu vào của mô hình YoLov3
• Đã thực hiện cài đặt và huấn luyện trên Google Colab, dùng chỉ số mAP để xác định file weight tốt nhất của quá trình huấn luyện
• Ứng dụng mô hình đã huấn luyện cho việc xây dựng ứng dụng phân loại xe hơi, đã cài đặt giao diện tương tác
• Viết module test cho bộ dữ liệu cars_testdataset (8014 ảnh), qua đó xây dựng kịch bản thử nghiệm cho hai bộ dữ liệu cars_testdataset và bộ dữ liệu tự tạo Đánh giá kết quả thử nghiệm và đưa ra nhận xét
2 Khó khăn khi thực hiện đồ án
• Hạn chế về khả tính toán của GPU trên laptop (do chỉ có 2gb ram GPU), nên em đã chuyển sang Google Colab (hỗ trợ 13gb ram bộ nhớ chính và 12gb ram GPU), nhưng vì dùng miễn phí, nên chỉ bị chế thời gian sử dụng trong ngày, nên thời gian huấn luyện lâu
• Sử dụng mô hình YoLov3 có sẵn, nên không thể can thiệp sâu vào trong mô hình để cải thiện hơn nữa
• Bộ dữ liệu được dùng là hãng xe từ năm 2012 đổ về trước và chỉ có 49 hãng xe, nên ứng dụng xây dựng xong bị hạn chế về mặt sử dụng thực tế
• Dựa vào kiến thức về mô hình YoLov3, phát triển cải tiến mô hình YoLov3 một cách sáng tạo dựa trên framework Tensorflow
• Phát triển mở rộng mô hình ngoài 49 hãng xe hơi Thêm dữ liệu về các hãng xe cập nhật theo năm
• Tiếp tục phát triển thêm các tính năng cho ứng dụng và cập nhật giao diện
• Có thể phát triển ứng dụng để đánh giá chất lượng mẫu xe, phục vụ cho công nghiệp sản xuất xe hơi
Trên đây là toàn bộ các nội dung em đã trình bày trong đồ án tốt nghiệp về đề tài xây dựng ứng dụng “phân loại xe hơi” (car image classification) bằng cách vận dụng thuật toán học sâu mạng Darknet53 (mạng nơ-ron tích chập) của mô hình Yolov3 Với kết quả thu được, còn nhiều vấn đề hạn chế cần giải quyết trong tương lai Do kiến thức, kinh nghiệm còn hạn chế, và lại thời gian làm đồ án có hạn, em không thể tránh khỏi những sai sót khi thực hiện đồ án Vì vậy, em mong nhận được sự đóng góp ý kiến của các thầy cô, và sự phản ánh của các bạn, để đồ án ngày càng hoàn thiện hơn.