Hướng dẫn Sử dụng Darknet với Học Chuyển Giao: Xây Dựng Bộ Phân Loại Đối Tượng Tùy Chỉnh Nhanh chóng

Darknet là một khung mạng nơ-ron mã nguồn mở mạnh mẽ, đặc biệt phù hợp cho các nhiệm vụ phát hiện đối tượng. Sử dụng kỹ thuật học chuyển giao, cả người mới bắt đầu trong lĩnh vực học sâu cũng có thể tận dụng các mô hình được huấn luyện trước như YOLOv4 để xây dựng bộ phân loại đối tượng tùy chỉnh với độ chính xác cao. Bài viết này sẽ hướng dẫn bạn qua các bước từ việc cài đặt môi trường đến huấn luyện mô hình để phát triển bộ phân loại đối tượng riêng của mình.

Bước 1: Chuẩn bị Môi Trường và Tài Nguyên

Trước khi bắt đầu quá trình học chuyển giao, hãy chuẩn bị môi trường phát triển và tài nguyên cần thiết:

  • Clone dự án:
    git clone https://gitcode.com/gh_mirrors/dar/darknet
    cd darknet
    
  • Cài đặt phụ thuộc:
    • Người dùng Linux: ./scripts/setup.sh
    • Người dùng Windows: scripts/windows/setup.ps1
  • Tải trọng số được huấn luyện trước:
    ./scripts/download_weights.ps1  # Windows
    # hoặc
    bash ./scripts/download_weights.sh  # Linux
    

Bước 2: Chuẩn Bị Dữ Liệu

Một tập dữ liệu chất lượng là nền móng quan trọng để tạo ra mô hình tốt. Thực hiện các bước sau để chuẩn bị dữ liệu:

Thu Thập và Đánh Dấu Dữ Liệu

  • Thu thập ít nhất 200 ảnh chứa đối tượng mục tiêu (khuyến nghị các góc độ và điều kiện ánh sáng khác nhau).
  • Sử dụng công cụ đánh dấu như LabelImg để tạo tệp chú thích ở định dạng YOLO (.txt).
  • Tệp chú thích phải cùng tên với ảnh và được lưu trong cùng thư mục.

Organize Tập Dữ Liệu

Sắp xếp dữ liệu theo cấu trúc sau:

darknet/
└── data/
    ├── custom/
    │   ├── images/      # Lưu trữ tất cả ảnh
    │   └── labels/      # Lưu trữ tất cả tệp chú thích
    ├── custom.data      # Tệp cấu hình tập dữ liệu
    └── custom.names     # Tệp tên lớp

Tạo Các Tệp Cấu Hình

Tạo tệp data/custom.data:

classes=1  # Số lượng lớp mục tiêu
train=data/custom/train.txt  # Đường dẫn tập huấn luyện
valid=data/custom/valid.txt  # Đường dẫn tập kiểm tra
names=data/custom.names      # Tệp tên lớp
backup=backup/               # Đường dẫn lưu trữ mô hình

Tạo tệp data/custom.names (mỗi dòng một lớp):

ten_doituong_cua_ban

Bước 3: Điều Chỉnh Cấu Trúc Mô Hình

Darknet sử dụng tệp .cfg để định nghĩa cấu trúc mạng, bạn cần điều chỉnh dựa trên mô hình đã huấn luyện trước:

  • Sao chép tệp cấu hình cơ bản:
    cp cfg/yolov4.cfg cfg/custom_yolov4.cfg
    
  • Chỉnh sửa các tham số chính: Sử dụng trình soạn thảo văn bản mở cfg/custom_yolov4.cfg, các phần cần chỉnh sửa bao gồm:
    • Tham số huấn luyện:
      batch=64
      subdivisions=16  # Điều chỉnh dựa vào bộ nhớ GPU
      max_batches=6000  # Thường là số lớp * 2000
      steps=4800,5400  # 80% và 90% của max_batches
      
    • Lớp liên quan: Tìm kiếm tất cả classes=80 và thay đổi thành classes=1 (số lượng lớp của bạn). Giá trị filters ngay trên mỗi classes tính bằng công thức: filters=(classes + 5) * 3

Bước 4: Thực Hiện Huấn Luyện

Khi mọi thứ đã sẵn sàng, thực thi lệnh huấn luyện:

./darknet detector train data/custom.data cfg/custom_yolov4.cfg yolov4.weights -map

Trong quá trình huấn luyện, các chỉ số sau sẽ được hiển thị:

  • Avg Loss: Trung bình mất mát, nên giảm dần.
  • mAP: Độ chính xác trung bình, càng cao càng tốt.
  • IOU: Chỉ số giao hội giữa các khung, phản ánh độ chính xác của khung phát hiện.

Kỹ thuật huấn luyện: Nếu mất mát không giảm, hãy thử giảm tốc độ học. Nếu xảy ra hiện tượng quá khớp, hãy tăng cường dữ liệu hoặc áp dụng chiến lược dừng sớm.

Bước 5: Đánh Giá và Tối Ưu Hóa Mô Hình

Sau khi huấn luyện xong, đánh giá hiệu suất mô hình bằng tập kiểm tra:

./darknet detector map data/custom.data cfg/custom_yolov4.cfg backup/custom_yolov4_final.weights

Các hướng tối ưu hóa phổ biến:

  • Điều chỉnh khung: Sử dụng scripts/gen_anchors.py để tính toán lại các khung phù hợp với tập dữ liệu của bạn.
  • Tăng cường dữ liệu: Thay đổi các tham số như angle, saturation trong tệp cấu hình.
  • Lịch trình học: Điều chỉnh các tham số learning_ratemomentum.

Bước 6: Kiểm Tra Mô Hình

Sử dụng mô hình đã huấn luyện để kiểm tra các bức ảnh mới:

./darknet detector test data/custom.data cfg/custom_yolov4.cfg backup/custom_yolov4_final.weights data/test.jpg

Dưới đây là ví dụ về kết quả phát hiện của mô hình mặc định của Darknet (trong ứng dụng thực tế sẽ được thay thế bằng đối tượng tùy chỉnh của bạn):

Hình 1: Kết quả phát hiện của mô hình mặc định Darknet, nhận diện thành công chó và xe đạp

Hình 2: Phát hiện chim bởi Darknet

Hình 3: Cảnh phát hiện nhiều đối tượng

Bước 7: Triển Khai Mô Hình

Mô hình đã huấn luyện có thể được triển khai thông qua nhiều cách:

  • Kiểm tra dòng lệnh: Sử dụng trực tiếp tệp thực thi darknet.
  • Giao diện Python: Gọi mô hình thông qua darknet.py.
  • Giao diện C++: Sử dụng src/yolo_v2_class.hpp để bao đóng bộ phát hiện.

Ví dụ gọi bằng Python:

import darknet
net = darknet.load_net("cfg/custom_yolov4.cfg", "backup/custom_yolov4_final.weights", 0)
meta = darknet.load_meta("data/custom.data")
ket_qua = darknet.detect_image(net, meta, "test.jpg")
print(ket_qua)

Kỹ Thuật Nâng Cao và Tài Nguyên

  • Tệp cấu hình chính thức: Tham khảo các tệp được định nghĩa trước trong thư mục cfg/, chẳng hạn như yolov4-tiny.cfg phù hợp cho các thiết bị biên.
  • Các script xử lý dữ liệu: scripts/voc_label.py có thể chuyển đổi từ định dạng VOC sang YOLO.
  • Phân tích nhật ký: Sử dụng scripts/log_parser/log_parser.py để phân tích nhật ký huấn luyện.

Bằng cách đi qua các bước trên, bạn đã nắm vững quy trình sử dụng Darknet với học chuyển giao. Phương pháp này giúp bạn xây dựng bộ phân loại đối tượng tùy chỉnh hiệu suất cao cho nhiều lĩnh vực như kiểm tra chất lượng công nghiệp, giám sát thông minh hay nhận diện đối tượng chuyên ngành.

Thẻ: Darknet YOLOv4 Điều Chỉnh Mạng Tập Dữ Liệu Đánh Dấu Phát Triển Mô Hình

Đăng vào ngày 15 tháng 7 lúc 13:33