1. Trang chủ
  2. » Luận Văn - Báo Cáo

BÀI TẬP LỚN Sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang

48 16 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Sử Dụng Thuật Toán YOLO Để Nhận Diện Người Đeo Khẩu Trang
Tác giả Nguyễn Văn Nghĩa, Nguyễn Hữu Tường Vũ
Người hướng dẫn TS. Hoàng Hồng Hải, TS. Nguyễn Xuân Thuận
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Robot – ME5667
Thể loại bài tập lớn
Năm xuất bản 2022
Thành phố Hà Nội
Định dạng
Số trang 48
Dung lượng 2,33 MB

Cấu trúc

  • 1.2 Tổng quan về YOLO (4)
  • 1.3 Thuật toán YOLO (6)
  • CHƯƠNG 2. CÀI ĐẶT CẤU HÌNH cuDNN (0)
  • CHƯƠNG 3. KHỞI TẠO GOOGLE COLAB (0)
    • 3.1 Tổng quan về Google Colab (0)
    • 3.2 Enable CPU trên Google Colab (0)
    • 3.3 Cấp phép cho Google Colab (0)
  • CHƯƠNG 4. HUẤN LUYỆN YOLO TRÊN GOOGLE COLAB (25)
    • 4.1 Khởi tạo project darknet (32)
    • 4.2 Chuẩn bị dữ liệu (33)
    • 4.3 Cấu hình darknet (35)
    • 4.4 Các hàm phụ trợ (37)
    • 4.5 Huấn luyện mô hình (37)
    • 4.6 Dự báo và ước tính thời gian huấn luyện (41)
  • CHƯƠNG 5: KẾT QUẢ (43)
  • CHƯƠNG 6. KẾT LUẬN (0)
  • TÀI LIỆU THAM KHẢO (47)

Nội dung

Tổng quan về YOLO

Trong những năm gần đây, phát hiện đối tượng (object detection) đã trở thành một chủ đề nóng trong lĩnh vực học sâu (deep learning) nhờ vào khả năng ứng dụng cao và dễ dàng chuẩn bị dữ liệu Các thuật toán hiện đại như YOLO và SSD không chỉ có tốc độ nhanh mà còn đạt độ chính xác cao, cho phép thực hiện các tác vụ gần như theo thời gian thực, thậm chí nhanh hơn cả con người mà không làm giảm độ chính xác Hơn nữa, các mô hình ngày càng nhẹ, giúp chúng có thể hoạt động trên các thiết bị IoT, từ đó tạo ra những thiết bị thông minh.

Thuật toán phát hiện đối tượng (object detection) có khả năng tạo ra nhiều ứng dụng đa dạng, bao gồm đếm số lượng vật thể, thanh toán tại quầy hàng, chấm công tự động, và phát hiện các vật thể nguy hiểm như súng hay dao Điều này cho thấy object detection có thể được áp dụng trong hầu hết các lĩnh vực khác nhau.

Nguồn dữ liệu ảnh phong phú và dễ dàng tìm kiếm trên Google là một lợi thế lớn trong việc huấn luyện mô hình phát hiện đối tượng.

Có nhiều bạn thắc mắc câu hỏi này YOLO nghe khá giống slogan

YOLO, viết tắt của "You Only Look Once", là một phương pháp phát hiện vật thể hiệu quả, cho phép nhận diện đối tượng chỉ sau một lần quan sát Với khả năng nhanh chóng và mạnh mẽ, YOLO đã trở thành một công cụ quan trọng trong lĩnh vực xử lý hình ảnh.

YOLO, mặc dù không phải là thuật toán chính xác nhất trong các mô hình phát hiện đối tượng, nhưng lại nổi bật với tốc độ nhanh nhất Nó có khả năng hoạt động gần như thời gian thực mà vẫn duy trì độ chính xác tương đối so với các mô hình hàng đầu khác.

YOLO là một thuật toán phát hiện đối tượng (object detection) không chỉ dự đoán nhãn cho vật thể mà còn xác định vị trí của chúng Nhờ vào khả năng này, YOLO có thể phát hiện nhiều loại vật thể khác nhau trong một bức ảnh, thay vì chỉ phân loại một nhãn duy nhất.

YOLO có khả năng phát hiện nhiều vật thể trên một bức ảnh nhờ vào các cơ chế thuật toán đặc biệt mà chúng tôi đã nghiên cứu trong đề tài này.

 Nguyên lý hoạt động của mạng nơ ron tích chập (Convolutional Neural Network): Đây là mạng nơ ron áp dụng các layer

Convolutional kết hợp với Maxpooling để giúp trích xuất đặc trưng của ảnh tốt hơn Bạn đọc có thể tham khảo Lý thuyết về mạng tích chập neural.

Bounding box là khung hình bao quanh một vật thể, trong khi anchor box là những khung hình có kích thước cố định được sử dụng để dự đoán bounding box.

 Feature map: Là một khối output mà ta sẽ chia nó thành một lưới ô

Thuật toán YOLO

Kiến trúc YOLO bao gồm một mạng cơ sở (base network) với các lớp convolution để trích xuất đặc trưng và các Extra Layers để phát hiện vật thể trên feature map Mạng cơ sở của YOLO chủ yếu sử dụng các lớp convolutional và fully connected Kiến trúc YOLO rất đa dạng và có thể tùy biến thành nhiều phiên bản cho các hình dạng đầu vào khác nhau.

Hình 1.1: Sơ đồ kiến trúc mạng YOLO

Thành phần Darknet Architecture, được gọi là base network, có chức năng trích xuất đặc trưng Đầu ra của base network là một feature map với kích thước 7x7x1024, sẽ được sử dụng làm đầu vào cho các Extra layers nhằm dự đoán nhãn và tọa độ bounding box của vật thể.

In YOLO version 3, the author utilizes the darknet-53 feature extractor, which consists of 53 sequential convolutional layers Each layer is followed by batch normalization and a Leaky ReLU activation function To reduce the output size after each convolutional layer, downsampling is performed using filters of size 2, effectively minimizing the number of parameters in the model.

Hình 1.2: Các layer trong mạng darknet-53

Các bức ảnh khi được đưa vào mô hình sẽ được scale để về chung một kích

Hiện tại, YOLO hỗ trợ hai kích thước đầu vào chính là 416x416 và 608x608, mỗi kích thước có thiết kế các lớp (layers) riêng biệt phù hợp với hình dạng đầu vào Qua các lớp convolutional, kích thước giảm dần theo cấp số nhân 2, cuối cùng tạo ra một feature map có kích thước nhỏ, dùng để dự đoán vật thể trong từng ô của feature map.

Kích thước của feature map sẽ phụ thuộc vào đầu vào Đối với input 416x416 thì feature map có các kích thước là 13x13, 26x26 và 52x52.

Và khi input là 608x608 sẽ tạo ra feature map 19x19, 38x38, 72x72.

- Output của mô hình YOLO là một véc tơ sẽ bao gồm các thành phần: y T =[ p 0 , ⟨ t ⏟ x boundingbox ,t y ,t w ,t h ⟩ , ⟨ ⏟ p 1 scoresof c classes , p 2 , p 3 … p c ⟩ ]

 p 0 là xác suất dự báo vật thể xuất hiện trong bounding box.

 ⟨ t ⏟ x bounding box ,t y ,t w , t h ⟩ giúp xác định bounding box Trong đó t x , t y là tọa độ tâm và t w ,t h là kích thước rộng, dài của bounding box.

Output của mô hình được xác định bởi véc tơ phân phối xác suất cho các lớp, ký hiệu là ⟨ ⏟ p 1 scoresof c classes , p 2 , p 3 … p c ⟩ Việc hiểu rõ đầu ra này rất quan trọng để cấu hình các tham số chính xác khi huấn luyện mô hình qua các nền tảng mã nguồn mở như darknet Cụ thể, số lượng đầu ra sẽ được tính theo công thức (n_class + 5) Ví dụ, nếu bạn huấn luyện 80 lớp, đầu ra sẽ là 85 Nếu bạn sử dụng 3 anchors mỗi ô, số lượng tham số đầu ra sẽ thay đổi tương ứng.

Hình 1.3: Kiến trúc một output của model YOLO

Hình ảnh gốc có kích thước feature map 13x13, trong đó mỗi cell được chọn 3 anchor boxes với kích thước khác nhau: Box 1, Box 2 và Box 3, với tâm của các anchor boxes trùng với cell Kết quả đầu ra của YOLO là một véc tơ kết hợp của 3 bounding boxes, trong đó các thuộc tính của mỗi bounding box được mô tả như dòng cuối cùng trong hình.

1.3.3 Dự báo trên nhiều feature map

YOLOv3 dự báo trên nhiều feature map tương tự như SSD, với các feature map ban đầu có kích thước nhỏ giúp nhận diện các đối tượng lớn Các feature map sau có kích thước lớn hơn, trong khi kích thước anchor box được giữ cố định, giúp dự đoán các vật thể nhỏ hơn hiệu quả.

Hình 1.4: Các feature maps của mạng YOLOv3

Với input shape là 416x416, output là 3 feature maps có kích thước lần lượt là 13x13, 26x26 và 52x52.

Trong mô hình YOLO, mỗi cell của các feature map sẽ áp dụng 3 anchor box để dự đoán vật thể, dẫn đến tổng số anchor box khác nhau là 9 (3 feature map x 3 anchor box) Trên một feature map hình vuông có kích thước S x S, YOLOv3 sinh ra S x S x 3 anchor box Do đó, tổng số anchor box trên một bức ảnh sẽ được tính toán dựa trên kích thước của feature map.

Số lượng 10647 anchor boxes, được tính bằng công thức (13 x 13 + 26 x 26 + 52 x 52) x 3, rất lớn và gây khó khăn cho quá trình huấn luyện mô hình YOLO Điều này là do chúng ta cần dự đoán đồng thời nhãn và bounding box cho tất cả 10647 bounding boxes.

Một số lưu ý khi huấn luyện YOLO:

 Khi huấn luyện YOLO sẽ cần phải có RAM dung lượng lớn hơn để save được 10647 bounding boxes như trong kiến trúc này.

Việc thiết lập kích thước batch_size quá lớn trong các mô hình phân loại có thể dẫn đến tình trạng hết bộ nhớ Để khắc phục điều này, gói darknet của YOLO đã chia nhỏ một batch thành các subdivisions, giúp phù hợp với dung lượng RAM có sẵn.

Thời gian xử lý của một bước trên YOLO lâu hơn nhiều so với các mô hình phân loại Vì vậy, nên giới hạn số bước huấn luyện cho YOLO ở mức thấp Đối với các tác vụ nhận diện dưới 5 lớp, dưới 5000 bước có thể đạt được kết quả tạm chấp nhận Đối với các mô hình có nhiều lớp hơn, có thể tăng số bước theo cấp số nhân tùy ý.

Để xác định bounding box cho vật thể, YOLO sử dụng các anchor box làm cơ sở ước lượng Những anchor box này được xác định trước và bao quanh vật thể một cách chính xác Thuật toán regression bounding box sau đó sẽ điều chỉnh các anchor box để tạo ra bounding box dự đoán cho vật thể.

Mỗi vật thể trong hình ảnh huấn luyện được gán cho một anchor box Khi có từ hai anchor boxes trở lên bao quanh một vật thể, chúng ta sẽ xác định anchor box có chỉ số IoU cao nhất với bounding box thực tế.

Hình 1.5: Xác định anchor box cho một vật thể

Từ Cell i ta xác định được 3 anchor boxes viền xanh như trong hình

Cả ba anchor box đều giao nhau với bounding box của vật thể, nhưng chỉ anchor box có đường viền dày màu xanh được chọn làm anchor box cho vật thể vì nó có chỉ số IoU cao nhất so với ground truth bounding box.

Mỗi vật thể trong hình ảnh huấn luyện được phân bố vào một cell trên feature map, dựa trên điểm mid point của vật thể Ví dụ, hình ảnh của chú chó sẽ được gán cho cell màu đỏ nếu điểm mid point của nó nằm trong cell đó Từ cell này, chúng ta có thể xác định các anchor boxes bao quanh chú chó.

KHỞI TẠO GOOGLE COLAB

Cấp phép cho Google Colab

4.1 Huấn luyện Yolov3 (trên hệ điều hành Ubuntu) 4.1.1 Chuẩn bị dữ liệu

4.1.1.1 Tải source Darknet về máy: Đầu tiên các bạn tạo thư mục AI_Yolo trên máy tính tại đâu nào tùy bạn nhé Chúng ta sẽ chuyển vào và làm việc trong thư mục này.

Trên Terminal hãy chuyển vào thư mục AI_Yolo bằnh lệnh cd AI_Yolo, sau đó gõ lệnh: git clone https://github.com/pjreddie/darknet

Sau khi chờ vài phút, thư mục AI_Yolo sẽ xuất hiện thêm thư mục darknet cùng nhiều thư mục con bên trong, chứng tỏ việc tải xuống đã thành công Tiếp theo, chúng ta sẽ tiến hành bước biên dịch (make) Đầu tiên, hãy mở file Makefile trong thư mục darknet và chú ý đến hai dòng quan trọng.

# dòng GPU bên dưới để là 1 nếu máy bạn có GPU, ngược lại để 0 GPU=0

# dòng OPENCV để 1 nếu bạn muốn dùng thư viện OpenCV OPENCV=0

Mình thường để OpenCV=1 để hỗ trợ mở nhiều định dạng file ảnh khác nhau Nếu gặp lỗi, các bạn có thể để OpenCV=0 cũng không sao, vì thường thì không hay mở những file ảnh khó xử lý.

SUDO APT-GET INSTALL LIBOPENCV-DEV

Xong, bây giờ bạn lưu lại file Makefile

4.1.1.2 Chuẩn bị dữ liệu train

Để xây dựng một mô hình hiệu quả, bạn cần thu thập dữ liệu train từ internet hoặc các nguồn có sẵn Số lượng dữ liệu càng nhiều, càng tốt; lý tưởng là nên có hàng nghìn ảnh để đảm bảo mô hình hoạt động tốt hơn.

HUẤN LUYỆN YOLO TRÊN GOOGLE COLAB

Khởi tạo project darknet

Darknet là một framework mã nguồn mở chuyên về phát hiện đối tượng, được phát triển bằng C và CUDA Nó cho phép huấn luyện các mô hình nhanh chóng, dễ dàng cài đặt và hỗ trợ cả tính toán trên CPU và GPU Với cộng đồng người dùng đông đảo và đội ngũ hỗ trợ nhiệt tình, Darknet là lựa chọn hàng đầu của nhóm chúng tôi.

Tại bước này chúng ta cần clone project darknetGoogleColab mà tôi đã customize lại một chút cho phù hợp với google colab.

Các bạn thực hiện tuần tự như sau:

Step 1: Thay đổi đường dẫn tới folder mặc định là My Drive.

Step 2: Sử dụng command line để clone git project darknetTurtorial từ github repo của bản thân.

Sau khi chạy thành công bạn kiểm tra trên My Drive của Google drive bạn sẽ thấy folder darknetGoogleColab vừa mới được clone về.

Sau đó chúng ta cd vào folder và phân quyền execute module darknet để có thể chạy được các lệnh trên darknet.

Lúc này chúng ta đã có thể sử dụng được các lệnh của dự báo, huấn luyện của darknet trên hệ điều hành ubuntu.

Chuẩn bị dữ liệu

Hiện nay, có nhiều công cụ mã nguồn mở để gán nhãn cho mô hình YOLO Dựa trên kinh nghiệm sử dụng, nhóm chúng tôi chọn labelImg từ pypi vì những ưu điểm nổi bật của nó.

 Giao diện UI/UX khá tốt với đầy đủ chức năng: open, load, save,….

 Hỗ trợ gán nhãn trên cả 2 định dạng COCO xml format và YOLO default txt format.

Chức năng default bounding box giúp tự động gán nhãn cho các bức ảnh trong cùng một folder, tiết kiệm thời gian và công sức Ví dụ, khi tôi gán nhãn cho sản phẩm cafe, tất cả bức ảnh liên quan đến cafe sẽ được lưu trữ trong một folder duy nhất Nhờ đó, tôi không cần phải nhập lại nhãn cho từng bức ảnh mà chỉ cần tạo một default bounding box cho toàn bộ.

Và rất nhiều các chức năng khác.

Việc cài đặt và hướng dẫn sử dụng các bạn đọc tại labelImg. annotation của chúng (định dạng txt) Bên dưới là nội dung của một file annotation.txt.

Nội dung của file annotation sẽ bao gồm:

Các giá trị , , , và đại diện cho tâm và kích thước của bounding box, được chuẩn hóa bằng cách chia cho chiều rộng và chiều cao của ảnh, đảm bảo rằng các giá trị này luôn nằm trong khoảng [0, 1] Thêm vào đó, là chỉ số đánh dấu các lớp (classes) khác nhau.

Trong trường hợp một ảnh có nhiều bounding box thì file annotation sẽ gồm nhiều dòng, mỗi một bounding box là một dòng.

Cảc ảnh và annotation phải được để chung trong cùng 1 folder Bạn đọc có thể tham khảo qua dữ liệu mẫu Dữ liệu ảnh sản phẩm TMDT.

Lệnh trên sẽ sao chép dữ liệu vào thư mục traindata trong dự án của bạn Lưu ý rằng không được đặt tên thư mục traindata giống với thư mục data mặc định của darknet, vì điều này có thể dẫn đến lỗi "Cannot load image" khi thực hiện dự đoán, và nhãn dự đoán của hình ảnh sẽ không hiển thị.

Dữ liệu trong folder img sẽ bao gồm các file ảnh và file annotation (có đuôi txt) của chúng.

4.2.3 Phân chia dữ liệu train/validation Ở bước này ta sẽ tạo ra 2 file train.txt và valid.txt chứa dữ liệu đường dẫn tới các file hình ảnh nằm trong tập train và validation Chúng ta sẽ sử dụng đoạn code bên dưới để lựa chọn ra ngẫu nhiên 20 files làm dữ liệu validation và các files còn lại làm dữ liệu train.

Cấu hình darknet

4.3.1 Tạo file object name Đây là files chứa tên các classes mà chúng ta sẽ huấn luyện mô hình Trên file này, thứ tự các classes name cần phải đặt đúng với index của nó trong các file label của vật thể. Đoạn code trên sử dụng lệnh echo của bash để tạo và write nội dung vào file obj.names Sau đó, một file obj.names được tạo thành trong project foler Bạn có thể mở file này ra để kiểm tra nội dung.

File config data sẽ khai báo một số thông tin như:

 Thư mục backup mô hình huấn luyện.

Chạy lệnh bên dưới để tạo file này.

4.3.3 Tạo file config model Đây là bước quan trọng nhất khi huấn luyện model YOLO Chúng ta sẽ sử dụng file yolov3.cfg để cấu hình mô hình huấn luyện Các bạn download file trên về máy và điều chỉnh các dòng:

 Tại các dòng 610, 696, 783: Thay classes thành classes=5 là số lượng classes chúng ta huấn luyện.

Tại các dòng 603, 689, 776, cần thay đổi số lượng filters%5 thành filter0, vì đây là layer cuối cùng của base network Do đó, output shape sẽ thay đổi theo số lượng classes, theo công thức đã đề cập trước đó: (n_classes + 5)x3 = (5+5)x3 = 30.

Số lượng bước tối đa để huấn luyện các mô hình YOLO được xác định bởi tham số max_batches, nằm ở dòng 20 Đối với dữ liệu có 5 lớp, chỉ cần điều chỉnh max_batchesP00 là có thể đạt được kết quả tốt.

Trong quá trình huấn luyện, burn_in tại dòng 19 xác định số lượng bước ban đầu với learning_rate rất nhỏ, giúp tăng dần từ 0 đến learning_rate trước khi giữ ổn định Thực nghiệm cho thấy việc thiết lập learning_rate thấp trong giai đoạn đầu giúp thuật toán hội tụ nhanh hơn Với max_batches chỉ là 5000, cần điều chỉnh burn_in xuống còn 100 để tối ưu hóa quá trình học.

Tại dòng 22, điều chỉnh learning_rate tại vị trí steps@00,4500 để bắt đầu giảm dần vì thuật toán đã đạt điểm hội tụ, không cần thiết thiết lập learning_rate quá cao Sau khi thực hiện các thay đổi, hãy lưu file và đẩy lên dự án darknetGoogleColab trên Google Drive.

Đổi tên file thành yolov3-5c-5000-maxsteps.cfg để xác định đây là cấu hình cho YOLO phiên bản 3 với 5 lớp và 5000 bước huấn luyện Các file cấu hình này đã có sẵn trên kho GitHub, bạn có thể tải về và sử dụng ngay.

Các hàm phụ trợ

Để thuật lợi cho việc đọc và ghi và hiển thị hình ảnh, tôi sẽ xây dựng các hàm phụ trợ có chức năng như sau:

 imShow(): Hiển thị hình ảnh từ một path.

 upload(): Upload một file từ local lên google drive.

 download(): Download một file từ một path trên mạng.

Huấn luyện mô hình

YOLO được đào tạo trên nhiều mô hình pretrain, sử dụng các bộ dữ liệu ảnh lớn như COCO, Pascal VOC, Imagenet và CIFAR Những bộ dữ liệu này có định dạng chuẩn và được đảm bảo chất lượng bởi các tổ chức nghiên cứu hàng đầu thế giới Trong ví dụ thực hành này, chúng ta sẽ sử dụng mô hình pretrain darknet53.conv.74, được huấn luyện từ bộ dữ liệu ImageNet Đầu tiên, hãy clone file weight về Google Drive.

Tạo một thư mục sao lưu để lưu trữ kết quả huấn luyện sau mỗi 1000 bước Thư mục sao lưu này cần phải có tên trùng với liên kết thư mục sao lưu đã được thiết lập ở bước 4.3.3 khi tạo file cấu hình dữ liệu.

Để giảm thiểu thời gian chờ đợi khi backup model, tôi đã điều chỉnh dự án của mình để tự động sao lưu model sau mỗi 100 bước thay vì 1000 bước Điều này giúp tránh các lỗi phát sinh trong quá trình huấn luyện trong 1000 bước đầu tiên.

4.5.3 Huấn luyện model Để huấn luyện model ta chỉ cần thực hiện lệnh detector train.

!./darknet detector train [data config file] [model config file] [pretrain- model weights] -dont_show > [file log saved]

The [data config file] and [model config file] are essential configuration files, while the [pretrain-model weights] refers to the pretrained model file, and the [file log saved] documents the training process.

Khi lưu log vào [file log saved], mô hình của bạn sẽ không hiển thị log trên màn hình Nhiều người có thể hiểu nhầm rằng mô hình đã ngừng chạy Để tiếp tục hiển thị log trong quá trình huấn luyện, bạn cần bỏ phần > [file log saved] ở cuối câu lệnh.

Hãy quay trở lại file yolov3-5c-5000-max-steps.cfg và điều chỉnh tăng subdivisions2 Sau đó train lại model từ đầu.

Quá trình huấn luyện kéo dài khoảng 5 giờ Nếu bạn muốn thấy kết quả ngay lập tức, hãy tải xuống file pretrain nhận diện sản phẩm TMDT của tôi; nếu không, hãy kiên nhẫn chờ đợi thành quả.

Log của chương trình không hiển thị trên màn hình vì đã được lưu vào file yolov3-5c.log Mục đích chính của việc này là để lưu trữ log nhằm trực quan hóa hàm mất mát (xem mục 4.5.4) Nếu bạn muốn theo dõi log ngay trên màn hình Google Colab, hãy chạy lệnh:

!./darknet detector train obj.data yolov3-5c-5000-max-steps.cfg darknet53.conv.74 -dont_show

Bạn có thể mở một google colab khác để thực hiện mục 4.5.4 visualize loss function.

Regularly check your internet connection, as Google Colab automatically terminates offline sessions after one hour If you close Colab or experience an internet disconnection, your training process will continue for one hour before being stopped.

Google Colab cho phép thời gian tối đa cho một phiên làm việc lên đến 12 giờ Tuy nhiên, với các bộ dữ liệu lớn, việc huấn luyện mô hình phát hiện đối tượng trên Google Colab trở nên khó khăn và gần như không khả thi.

Kết quả huấn luyện của mô hình được lưu trong file yolov3-5c.log, cho phép chúng ta visualize hàm loss function Trong dự án git tùy chỉnh từ darknet, tôi đã chuẩn bị sẵn một file để visualize loss function Ý tưởng thực hiện khá đơn giản: tìm kiếm các dòng có Average Loss trong log, trích xuất giá trị loss function và tiến hành visualize Bạn đọc có thể mở file để nghiên cứu thêm.

Như vậy đồ thị loss function cho thấy thuật toán đã hội tụ sau khoảng 7000 batches đầu tiên Loss function ở giai đoạn sau có xu hướng tiệm cận gần 1.

Dự báo và ước tính thời gian huấn luyện

Sau khi huấn luyện xong mô hình, kết quả sau cùng sẽ được lưu trong folder backup Để dự báo cho một bức ảnh ta sử dụng cú pháp:

!./darknet detector test [data config file] [model config file] [last-model

Google Colab suppresses OpenCV's graphic functions, preventing direct image display Instead, results must be saved as a file, such as predictions.jpg To bypass OpenCV's graphic errors, use the argument -dont_show.

Như vậy chúng ta đã hoàn thành quá trình huấn luyện và dự báo một mô hình object detection trên google colab.

Mô hình YOLO yêu cầu thời gian huấn luyện dài do cần dự đoán tổng cộng 10,647 bounding boxes từ một ảnh kích thước 418x418 Với kích thước batch là 64 ảnh và max_batches là 5,000, tổng số bounding boxes cần dự báo lên tới 3.4 triệu Điều này giải thích tại sao quá trình huấn luyện trên Google Colab có thể mất vài giờ.

Google Colab chỉ cho phép huấn luyện trong 12 giờ liên tục, vì vậy việc ước lượng tổng thời gian huấn luyện là rất quan trọng để không vượt quá giới hạn này Trong bài viết này, tôi sẽ chia sẻ một số mẹo hữu ích để ước tính và tiết kiệm thời gian huấn luyện hiệu quả.

Để ước tính tổng thời gian huấn luyện, bạn nên dựa vào thời gian huấn luyện của một batch Ví dụ, nếu một batch mất 3.6 giây, thì 5000 batches sẽ tiêu tốn khoảng 5 giờ (tính theo công thức: (3.6x5000)/3600) Tuy nhiên, đây chỉ là ước tính tương đối, vì không phải tất cả các batch đều có thời gian huấn luyện giống nhau Trong trường hợp gặp phải những batch có hình ảnh lỗi hoặc định dạng không tương thích, thời gian gỡ lỗi có thể kéo dài đáng kể.

Trong quá trình huấn luyện, việc lưu lại log và vẽ biểu đồ loss function là rất quan trọng Biểu đồ này giúp chúng ta xác định xem quá trình huấn luyện đã đạt tới trạng thái hội tụ hay chưa Nếu nhận thấy loss function có xu hướng hội tụ, bạn có thể xem xét dừng sớm quá trình huấn luyện.

Huấn luyện mô hình trên nhiều GPU song song có thể tăng tốc độ đào tạo đáng kể, tuy nhiên, phương pháp này chỉ áp dụng cho những ai sở hữu nhiều GPU và không khả dụng trên Google Colab Để đạt hiệu quả tối ưu, bạn nên giảm learning_rate theo cấp số nhân; cụ thể, nếu bạn sử dụng 4 GPU, learning_rate mới cần được thiết lập bằng 1/4 learning_rate mặc định cho 1 GPU.

Sử dụng mô hình pretrain trên bộ dữ liệu tương tự với bộ dữ liệu đang huấn luyện giúp các trọng số của mô hình gần sát nhau Điều này cho phép chúng ta giảm số bước huấn luyện cần thiết để đạt được kết quả tốt hơn so với việc chọn mô hình pretrain được huấn luyện từ bộ dữ liệu khác biệt.

Cập nhật phiên bản cuDNN là cần thiết, đặc biệt đối với những ai huấn luyện trên máy tính cá nhân, trong khi Google Colab đã tích hợp sẵn phiên bản mới Các kiến trúc cuDNN mới được tối ưu hóa đáng kể, giúp tăng tốc quá trình huấn luyện Việc sử dụng cuDNN phiên bản 7.6 có thể tăng tốc gấp đôi so với phiên bản 6.0 Vì vậy, hãy đảm bảo cập nhật cuDNN nếu bạn đang sử dụng phiên bản cũ, nhưng cũng cần lưu ý rằng cuDNN phải tương thích với phiên bản CUDA để tránh các lỗi không mong muốn.

Cân nhắc sử dụng kiến trúc đơn giản cho mô hình YOLO, vì các kiến trúc này đa dạng tùy thuộc vào base network Nếu tác vụ có ít lớp, độ chính xác giữa mô hình phức tạp và đơn giản không chênh lệch nhiều Bạn có thể thiết lập tiêu chuẩn về mAP và thử huấn luyện với các mô hình đơn giản như tiny YOLO, có khả năng đạt tiêu chuẩn đó Hơn nữa, tốc độ dự báo nhanh và khả năng triển khai trên thiết bị IoT cấu hình thấp là những lợi thế của các mô hình này.

KẾT QUẢ

2 Bài 25 - YOLO You Only Look Once - Khanh blog

Ngày đăng: 23/12/2023, 22:31

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w