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
- Người dùng Linux:
- 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=80và thay đổi thànhclasses=1(số lượng lớp của bạn). Giá trịfiltersngay trên mỗiclassestính bằng công thức:filters=(classes + 5) * 3
- Tham số huấn luyện:
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,saturationtrong tệp cấu hình. - Lịch trình học: Điều chỉnh các tham số
learning_ratevàmomentum.
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.cfgphù hợp cho các thiết bị biên. - Các script xử lý dữ liệu:
scripts/voc_label.pycó 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.