1. Trang chủ
  2. » Giáo Dục - Đào Tạo

(TIỂU LUẬN) 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 26 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 Trí tuệ nhân tạo Robot
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,94 MB

Cấu trúc

  • CHƯƠNG 1. TỔNG QUAN VỀ ĐỀ TÀI (4)
    • 1.1 Giới thiệu chung (0)
    • 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Ề ĐỀ TÀI

Tổng quan về YOLO

Có lẽ trong vài năm trở lại đây, object detection là một trong những đề tài rất hot của deep learning bởi khả năng ứng dụng cao, dữ liệu dễ chuẩn bị và kết quả ứng dụng thì cực kì nhiều Các thuật toán mới của object detection như YOLO, SSD có tốc độ khá nhanh và độ chính xác cao nên giúp cho Object Detection có thể thực hiện được các tác vụ dường như là real time, thậm chí là nhanh hơn so với con người mà độ chính xác không giảm Các mô hình cũng trở nên nhẹ hơn nên có thể hoạt động trên các thiết bị IoT để tạo nên các thiết bị thông minh.

Ngoài ra, một thuật toán object detection có thể tạo ra những ứng dụng rất đa dạng như: Đếm số lượng vật thể, thanh toán tiền tại quầy hàng, chấm công tự động, phát hiện vật thể nguy hiểm như súng, dao,… và rất nhiều các ứng dụng khác Có thể nói dường bất kì lĩnh vực nào cũng đều có thể ứng dụng được object detection.

Bên cạnh đó nguồn dữ liệu ảnh lại vô cùng đa dạng và sẵn có vì chỉ cần google là tìm được tất cả những gì chúng ta cần Đó cũng là một ưu điểm để huấn luyện model object detection.

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

“You only live once” phải không? Nhưng YOLO trong object detection có nghĩa là “You only look once” Tức là chúng ta chỉ cần nhìn 1 lần là có thể phát hiện ra vật thể Rất nhanh và mạnh phải không nào?

Thật vậy, về độ chính xác thì YOLO có thể không phải là thuật toán tốt nhất nhưng nó là thuật toán nhanh nhất trong các lớp mô hình object detection Nó có thể đạt được tốc độ gần như real time mà độ chính xác không quá giảm so với các model thuộc top đầu.

YOLO là thuật toán object detection nên mục tiêu của mô hình không chỉ là dự báo nhãn cho vật thể như các bài toán classification mà nó còn xác định location của vật thể Do đó YOLO có thể phát hiện được nhiều vật thể có nhãn khác nhau trong một bức ảnh thay vì chỉ phân loại duy nhất một nhãn cho một bức ảnh.

Sở dĩ YOLO có thể phát hiện được nhiều vật thể trên một bức ảnh như vậy là vì thuật toán có những cơ chế rất đặc biệt mà chúng em đã tìm hiểu ở đề tài lần 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.

Khái niệm về bounding box, anchor box: Bounding box là khung hình bao quanh vật thể Anchor box là những khung hình có kích thước xác định trước, có tác 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: base network là các mạng convolution làm nhiệm vụ trích xuất đặc trưng Phần phía sau là những Extra Layers được áp dụng để phát hiện vật thể trên feature map của base network Base network của YOLO sử dụng chủ yếu là các convolutional layer và các fully conntected layer. Các kiến trúc YOLO cũng khá đa dạng và có thể tùy biến thành các version cho nhiều input shape khác nhau.

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

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

Trong YOLO version 3 tác giả áp dụng một mạng feature extractor là darknet-53 Mạng này gồm 53 convolutional layers kết nối liên tiếp, mỗi layer được theo sau bởi một batch normalization và một activation LeakyRelu Để giảm kích thước của output sau mỗi convolution layer, tác giả down sample bằng các filter với kích thước là 2 Mẹo này có tác dụng giảm thiểu số lượng tham số cho mô hình.

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

Hiện tại YOLO đang hỗ trợ 2 đầu vào chính là 416x416 và 608x608 Mỗi một đầu vào sẽ có một thiết kế các layers riêng phù hợp với shape của input Sau khi đi qua các layer convolutional thì shape giảm dần theo cấp số nhân là 2 Cuối cùng ta thu được một feature map có kích thước tương đối nhỏ để dự báo vật thể trên 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 , t y , t w , t h , p 1 , p 2 , p 3 … p c ] boundingbox scoresof c classes

Trong đó p 0 là xác suất dự báo vật thể xuất hiện trong bounding box. t x ,t y ,t w , t h giúp xác định bounding box Trong đó t x , t y là tọa độ tâm bounding box và t w ,t h là kích thước rộng, dài của bounding box. p 1 , p 2 , p 3 … p c là véc tơ phân phối xác suất dự báo của các classes. scoresof c classes

Việc hiểu output khá là quan trọng để chúng ta cấu hình tham số chuẩn xác khi huấn luyện model qua các open source như darknet Như vậy output sẽ được xác định theo số lượng classes theo công thức (n_class+5) Nếu huấn luyện 80 classes thì bạn sẽ có output là 85 Trường hợp bạn áp dụng 3 anchors/cell thì số lượng tham số output sẽ là:

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

Hình ảnh gốc là một feature map kích thước 13x13 Trên mỗi một cell của feature map chúng ta lựa chọn ra 3 anchor boxes với kích thước khác nhau lần lượt là Box 1, Box 2 , Box 3 sao cho tâm của các anchor boxes trùng với cell Khi đó output của YOLO là một véc tơ concatenate của 3 bounding boxes Các attributes của một 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

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

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.

Trên mỗi một cell của các feature map chúng ta sẽ áp dụng 3 anchor box để dự đoán vật thể Như vậy số lượng các anchor box khác nhau trong một mô hình YOLO sẽ là 9 (3 featue map x 3 anchor box). Đồng thời trên một feature map hình vuông S x S, mô hình YOLOv3 sinh ra một số lượng anchor box là: S x S x 3 Như vậy số lượng anchor boxes trên một bức ảnh sẽ là:

(13 x 13 + 26 x 26 + 52 x 52) x 3 = 10647 (anchor boxes) Đây là một số lượng rất lớn và là nguyên nhân khiến quá trình huấn luyện mô hình YOLO vô cùng chậm bởi chúng ta cần dự báo đồng thời nhãn và bounding box trên đồng thời 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.

Không thể thiết lập các batch_size quá lớn như trong các mô hình classification vì rất dễ Out of memory Package darknet của YOLO đã chia nhỏ một batch thành các subdivisions cho vừa với RAM. Thời gian xử lý của một step trên YOLO lâu hơn rất rất nhiều lần so với các mô hình classification Do đó nên thiết lập steps giới hạn huấn luyện cho YOLO nhỏ Đối với các tác vụ nhận diện dưới 5 classes, dưới 5000 steps là có thể thu được nghiệm tạm chấp nhận được Các mô hình có nhiều classes hơn có thể tăng số lượng steps theo cấp số nhân tùy bạn.

- Để tìm được bounding box cho vật thể, YOLO sẽ cần các anchor box làm cơ sở ước lượng Những anchor box này sẽ được xác định trước và sẽ bao quanh vật thể một cách tương đối chính xác Sau này thuật toán regression bounding box sẽ tinh chỉnh lại anchor box để tạo ra bounding box dự đoán cho vật thể Trong một mô hình YOLO:

Mỗi một vật thể trong hình ảnh huấn luyện được phân bố về một anchor box Trong trường hợp có từ 2 anchor boxes trở lên cùng bao quanh vật thể thì ta sẽ xác định anchor box mà có IoU với ground truth bounding box là cao nhấ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ả 3 anchor boxes này đều giao nhau với bounding box của vật thể Tuy nhiên chỉ anchor box có đường viền dày nhất màu xanh được lựa chọn làm anchor box cho vật thể bởi nó có IoU so với ground truth bounding box là cao nhất.

Mỗi một vật thể trong hình ảnh huấn luyện được phân bố về một cell trên feature map mà chứa điểm mid point của vật thể Chẳng hạn như hình chú chó trong hình 3 sẽ được phân về cho cell màu đỏ vì điểm mid point của ảnh chú chó rơi vào đúng cell này Từ cell ta sẽ xác định các anchor boxes bao quanh hình ảnh 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.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 đợi vài phút, trong thư mục AI_Yolo sẽ có thêm thư mục darknet với 1 mớ folder bên trong, như vậy là tải thành công rồi Bây giờ chúng ta sẽ chuyển sang bước biên dịch (make) Ở bước này, đầu tiên bạn mở file

Makefile trong thư mục darknet và lưu ý 2 dòng sau:

# 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ì hay để OpenCV=1 để mở nhiều kiểu file ảnh hơn (nếu bị lỗi thì các bạn cứ để OPENCV=0 cũng okie vì mấy khi mở các file ảnh khù khoằm đâu).

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

Dữ liệu train thì các bạn collect trên internet hoặc từ bất cứ nguồn nào bạn có sẵn Càng nhiều càng tốt và ảnh nên tính bằng đơn vị nghìn cho model ngon lành hơn

Sau khi có dữ liệu, bạn hãy vào thư mục darknet/data và tạo folder images.Copy tât cả các ảnh bạn dùng để train vào thư mục images.

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

Khởi tạo project darknet

Darknet là một framework open source chuyên biệt về object detection được viết bằng ngôn ngữ C và CUDA Các mô hình được huấn luyện trên darknet nhanh, đồng thời darknet dễ cài đặt và hỗ trợ tính toán CPU và GPU Cộng đồng sử dụng darknet đông đảo, đội ngũ support nhiệt tình Đó là lý do nhóm em lựa chọn darknet.

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 tại có rất nhiều các open source bounding box tool khác nhau được sử dụng để gán nhãn cho mô hình YOLO Với kinh nghiệm trải nghiệm các tool này, nhóm em sử dụnglabelImg của pypi vì những lý do sau:

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 cho phép tự động gán nhãn cho các bức ảnh nằm chung trong một folder Ví dụ: Khi gán nhãn cho sản phẩm cafe thì các bức ảnh của tôi về cafe đều được xếp về chung 1 folder Tôi không cần phải gõ lại nhãn mà chỉ cần tạo một default bounding box cho toàn bộ ảnh.

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:

Trong đó: các giá trị là tâm và kích thước width, height của bounding box đã được chuẩn hóa bằng cách chia cho width và height của ảnh, do đó các giá trị ngày luôn nằm trong khoảng [0, 1] là giá trị index đánh dấu các classes.

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ẽ clone dữ liệu về folder traindata trong project của chúng ta.

Lưu ý: Không được đặt tên folder traindata trùng với folder data mặc định của darknet Nếu không sẽ xảy ra lỗi Cannot load image khi dự báo và nhãn dự báo của hình ảnh 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: Thay số lượng filters%5 về filter0 Đây chính là layer cuối cùng của base network Do đó chúng có output shape thay đổi theo số lượng classes theo đúng công thức của bài trước đó là: (n_classes + 5)x3 = (5+5)x3 = 30. max_batches: tại dòng 20 là số lượng steps tối đa để huấn luyện models YOLO Đối với dữ liệu 5 classes chỉ cần điều chỉnh max_batchesP00 là có thể có nghiệm tốt. burn_in: Tại dòng 19 là số lượng steps ban đầu được giữ sao cho learning_rate rất bé Giá trị này sẽ tăng dần từ 0 đến learning_rate Sau đó learning_rate sẽ được giữ ổn định Thực nghiệm cho thấy thiết lập learning_rate bé ở những steps đầu sẽ giúp cho thuật toán hội tụ nhanh hơn Do số lượng max_batches chỉ là 5000 nên cần điều chỉnh giảm burn_in = 100. steps: Tại dòng 22 Điều chỉnh về steps@00,4500 Đây là các vị trí step mà chúng ta sẽ bắt đầu giảm dần learning_rate vì thuật toán đã đạt tới điểm hội tụ nên không cần thiết lập learning_rate quá cao. Sau khi thực hiện các thay đổi xong, các bạn save file lại và push lên project darknetGoogleColab của google driver.

Trước đó, hãy đổi tên lại thành yolov3-5c-5000-maxsteps.cfg để đánh dấu đây là cấu hình cho yolo version 3 với 5 classes và 5000 bước huấn luyện. Các file config này đã có sẵn trong github repo nên có thể download 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 huấn luyện trên rất nhiều các model pretrain Những mô hình này được xây dựng trên các bộ dữ liệu ảnh mẫu lớn như: COCO, Pascal VOC , Imagenet, CIFAR. Đây là những bộ dữ liệu có định dạng và format chuẩn, được đảm bảo bởi các tổ chức và viện nghiên cứu lớn trên thế giới nên chúng ta hoàn toàn có thể yên tâm về chất lượng dữ liệu.

List các danh sách model pretrain các bạn có thể theo dõi tại Darknet Ở ví dụ thực hành này, chúng ta sẽ sử dụng pretrain model darknet53.conv.74 dược huấn luyện từ bộ dữ liệu ImageNet Trước tiên hãy clone file weight về google drive.

Tạo một folder backup để lưu kết quả huấn luyện sau mỗi 1000 steps. Folder backup này phải trùng với tên với link folder backup đã được khai báo ở step 4.3.3 tạo file config data.

Nếu để 1000 steps mới backup model có thể khá lâu Để tránh các lỗi phát sinh khi huấn luyện tại 1000 steps đầu tiên, trong project của mình tôi đã điều chỉnh sẵn last model backup sau mỗi 100 steps.

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]

Trong đó các [data config file], [model config file] là những file config [pretrain- model weights] là file model pretrain và [file log saved] là file log quá trình training.

Note: Khi save log vào [file log saved] thì mặc định mô hình của bạn sẽ không hiển thị log ra ngoài màn hình nữa Nhiều bạn đã hiểu lầm rằng mô hình ngừng chạy Để hiển thị log quá trình huấn luyện thì bạn bỏ > [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.

Tổng cộng quá trình train hết khoảng 5h đồng hồ Nếu bạn muốn ngồi đợi thành quả, hãy kiên nhẫn chờ đợi Hoặc nếu muốn có ngay thành quả, hãy download file pretrain nhận diện sản phẩm TMDT của tôi.

Log của chương trình sẽ không hiện ra tại màn hình do chúng ta đã save vào file yolov3-5c.log Mục đích chính là để lưu lại log nhằm visualize loss function (xem mục 4.5.4) Nếu bạn muốn monitor ngay tại màn hình google colab thì 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. Đừng quên kiểm tra đường truyền internet thường xuyên Google Colab sẽ tự động kill các session offline trong vòng 1h Tức nếu bạn tắt colab hoặc bị disconnect internet thì mọi thứ vẫn tiếp diễn trong 1h và sau đó luồng training sẽ bị kill.

Google colab đồng thời cho phép độ dài tối đa của một session là 12h Vì vậy với các bộ dữ liệu lớn thì huấn luyện mô hình object detection trên google colab là một việc bất khả thi.

Kết quả huấn luyện của mô hình qua từng step sẽ được lưu vào file yolov3- 5c.log Chúng ta có thể sử dụng file này để visualize hàm loss function.

Trong git project được customize từ darknet tôi đã code sẵn một file có tác dụng visualize loss function Ý tưởng xử lý không có gì khó, chúng ta sẽ tìm trong log các dòng có Average Loss và trích xuất giá trị loss function và visualize Bạn đọc có thể mở file ra nghiên cứu.

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 weights] [image path] -dont_show

Do google colab suppress các hàm graphic của opencv nên ta không thể show image trực tiếp mà phải save kết quả vào file predictions.jpg. argument -dont_show để by pass các lỗi graphic của opencv.

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.

- Khi hiểu kỹ về lý thuyết của mô hình YOLO các bạn sẽ hiểu lý do tại sao model YOLO lại huấn luyện lâu như vậy Từ một ảnh đầu vào kích thước

418x418, YOLO sẽ cần dự đoán nhãn và tọa độ của tổng cộng (13x13+26x26+52x52)x3 = 10647 bounding boxes Giả sử mỗi một batch của chúng ta có kích thước 64 ảnh và số lượng max_batches = 5000. Như vậy chúng ta cần dự báo cho tổng cộng: 10647x5000x64 = 3.4 triệu bounding boxes Đây là một con số không hề nhỏ nên quá trình huấn luyện trên google colab sẽ mất tới vài h.

Google colab sẽ chỉ cho phép bạn huấn luyện trong 12h liên tục Do đó, trước khi huấn luyện chúng ta cần ước lượng tổng thời gian huấn luyện để không vượt quá giới hạn time Tôi sẽ giới thiệu các bạn một số mẹo ước tính và tiết kiệm thời gian huấn luyện.

Nên ước tính tổng thời gian huấn luyện dựa trên thời gian huấn luyện của 1 batch Nếu bạn huấn luyện một batch hết 3.6s Như vậy 5000 batches sẽ tiêu tốn của bạn khoảng: (3.6x5000)/3600 = 5 h huấn luyện Tất nhiên đây chỉ là ước tính tương đối vì không phải mọi batch đều được huấn luyện với thời gian bằng nhau Nếu gặp những batch có hình ảnh lỗi, format không tương thích thì có thể tốn rất nhiều thời gian để chương trình gỡ lỗi.

Hãy save log trong quá trình huấn luyện và vẽ biểu đồ loss function. Biểu đồ loss function cho ta biết quá trình huấn luyện đã đi tới trạng thái hội tụ hay chưa? Có thể dừng sớm quá trình huấn luyện nếu bạn quan sát thấy loss function dường như đã hội tụ.

Huấn luyện trên nhiều GPU song song (cách này chỉ áp dụng với các bạn sở hữu nhiều GPU, không áp dụng trên google colab) Khi huấn luyện trên nhiều GPU thì nên giảm learning_rate xuống theo cấp số nhân Chẳng hạn bạn huấn luyện trên 4 GPU thì cần thiết lập learning_rate mới bằng 1/4 learning_rate mặc định trên 1 GPU Quá trình huấn luyện sẽ nhanh hơn rất nhiều.

Sử dụng pretrain model trên bộ dữ liệu gần giống với bộ dữ liệu đang huấn luyện Khi đó các trọng số của mô hình pretrain và mô hình tối ưu cho bộ dữ liệu sẽ gần sát nhau Chúng ta sẽ chỉ cần ít steps huấn luyện hơn để đạt kết quả tốt so với lựa chọn pretrain model được huấn luyện từ một bộ dữ liệu khác biệt lớn.

Update cuDNN version (đối với các bạn huấn luyện trên máy tính cá nhân, môi trường xịn sò của google colab đã update sẵn cuDNN) Như đã giới thiệu ở mục 1 cấu hình cuDNN Những kiến trúc cuDNN mới đã được tối ưu hơn rất nhiều giúp tăng tốc quá trình huấn luyện Sử dụng cuDNN version 7.6 có thể tăng tốc gấp 2 lần so với version 6.0 Do đó hãy cập nhật cuDNN nếu bạn đang sử dụng version cũ Nhưng lưu ý là cuDNN cần tương thích version với CUDA để tránh các lỗi phát sinh nhé.

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

KẾT QUẢ

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

Ngày đăng: 30/11/2022, 14:12

HÌNH ẢNH LIÊN QUAN

Hình 1.1: Sơ đồ kiến trúc mạng YOLO. - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
Hình 1.1 Sơ đồ kiến trúc mạng YOLO (Trang 6)
Hình 1.2: Các layer trong mạng darknet-53. - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
Hình 1.2 Các layer trong mạng darknet-53 (Trang 7)
Hình 1.3: Kiến trúc một output của model YOLO. - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
Hình 1.3 Kiến trúc một output của model YOLO (Trang 9)
Hình 1.4: Các feature maps của mạng YOLOv3 - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
Hình 1.4 Các feature maps của mạng YOLOv3 (Trang 10)
Mỗi một vật thể trong hình ảnh huấn luyện được phân bố về một anchor box. Trong trường hợp có từ 2 anchor boxes trở lên cùng bao quanh vật thể thì ta sẽ xác định anchor box mà có IoU với ground  truth bounding box là cao nhất. - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
i một vật thể trong hình ảnh huấn luyện được phân bố về một anchor box. Trong trường hợp có từ 2 anchor boxes trở lên cùng bao quanh vật thể thì ta sẽ xác định anchor box mà có IoU với ground truth bounding box là cao nhất (Trang 11)
Hình 1.6: Khi 2 vật thể người và xe trùng mid point và cùng thuộc một - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
Hình 1.6 Khi 2 vật thể người và xe trùng mid point và cùng thuộc một (Trang 12)
Hình 1.7 Cơng thức ước lượng bounding box từ anchor box. - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
Hình 1.7 Cơng thức ước lượng bounding box từ anchor box (Trang 14)
Hình chữ nhật nét đứt bên ngồi là anchor box có kích thước là (pw,ph). Tọa - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
Hình ch ữ nhật nét đứt bên ngồi là anchor box có kích thước là (pw,ph). Tọa (Trang 14)
Hình 2.1 Cấu trúc Darknet53. - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
Hình 2.1 Cấu trúc Darknet53 (Trang 16)
Hình 2.2 Cấu trúc YOLOv3. - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
Hình 2.2 Cấu trúc YOLOv3 (Trang 17)
Hình 2.3 Quá trình tìm kiếm vật thể. - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
Hình 2.3 Quá trình tìm kiếm vật thể (Trang 18)
Hình 2.4 Kích thước của tensor. - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
Hình 2.4 Kích thước của tensor (Trang 19)
Một màn hình google colab hiện ra, có chức năng gần giống như jupyter notebook: - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
t màn hình google colab hiện ra, có chức năng gần giống như jupyter notebook: (Trang 21)
Hình 4.1 Hướng dẫn tạo google colab - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
Hình 4.1 Hướng dẫn tạo google colab (Trang 21)
Commandline kiểm tra cấu hình GPU - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
ommandline kiểm tra cấu hình GPU (Trang 23)
được viết bằng ngơn ngữ C và CUDA. Các mơ hình được huấn luyện trên darknet nhanh, đồng thời darknet dễ cài đặt và hỗ trợ tính tốn CPU và  GPU - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
c viết bằng ngơn ngữ C và CUDA. Các mơ hình được huấn luyện trên darknet nhanh, đồng thời darknet dễ cài đặt và hỗ trợ tính tốn CPU và GPU (Trang 32)
4.3 Cấu hình darknet - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
4.3 Cấu hình darknet (Trang 35)
Để 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: - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
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: (Trang 37)
Note: Khi save log vào [file log saved] thì mặc định mơ hình của bạn sẽ không hiển thị log ra ngồi màn hình nữa - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
ote Khi save log vào [file log saved] thì mặc định mơ hình của bạn sẽ không hiển thị log ra ngồi màn hình nữa (Trang 39)
Sau khi huấn luyện xong mơ hình, kết quả sau cùng sẽ được lưu trong folder backup - (TIỂU LUẬN) bài tập lớn sử dụng thuật toán YOLO để nhận diện người đeo khẩu trang
au khi huấn luyện xong mơ hình, kết quả sau cùng sẽ được lưu trong folder backup (Trang 41)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w