Hướng Dẫn Chuyển Đổi Mô Hình YOLOv5 Từ PyTorch Sang Paddle Lite Cho Thiết Bị Biên

Cấu hình Môi trường Làm việc

Để đảm bảo quy trình chuyển đổi mượt mà từ nền tảng huấn luyện sang môi trường triển khai nhúng, cần xác định chính xác phiên bản của các thành phần sau:

  • Bản phân giải ngôn ngữ lập trình: Python 3.9
  • Các gói phụ thuộc chính: paddlelite (phiên bản 2.13rc0), x2paddle (1.6.0), và paddlepaddle (2.6.2)
  • Mô hình nền tảng: Sử dụng kiến trúc YOLOv5 (có thể áp dụng cho các biến thể như YOLOv5u trong trường hợp tương thích).

Lưu ý về tính tương thích hệ thống

Quá trình cài đặt thường gặp một số rào cản kỹ thuật cụ thể:

  1. Vấn đề gói Wheel: Một số phiên bản cũ của Paddle-Lite không cung cấp file wheel được xây dựng sẵn cho Python 3.9. Việc sử dụng pip để cài đặt có thể thất bại nếu thiếu phiên bản phù hợp, bắt buộc phải tự compile thủ công khá phức tạp.
  2. Ảnh hưởng phiên bản PaddlePaddle: Khi chuyển đổi từ mô hình bên thứ ba (ví dụ: PyTorch sang Paddle), phiên bản của thư viện nguồn quyết định cấu trúc tệp tin đầu ra.
    • Phiên bản cao ban đầu có thể tạo ra cấu trúc mô hình khác biệt.
    • Mô hình suy luận chuẩn (mục tiêu cuối cùng) cần chứa cặp tệp .pdmodel (cấu trúc) và .pdiparams (tham số) trong thư mục inference.
    Nếu sử dụng phiên bản PaddlePaddle 3.0 beta 2 trở lên, hệ thống mặc định lưu trữ dưới dạng JSON thay vì protobuf. Điều này gây xung đột với các công cụ cũ hơn như Paddle-Lite. Cần kiểm tra kỹ hướng dẫn chuyển đổi định dạng trước khi tiến hành.

Tối ưu hóa Luồng Chuyển đổi Mô hình

Mục tiêu là đưa mô hình YOLOv5 đã huấn luyện từ thiết bị máy chủ xuống chạy trực tiếp trên phần cứng di động thông qua quy trình trung gian: PyTorch → Paddle → Paddle-Lite.

1. Giai đoạn xuất sang định dạng Paddle Model

Phương án 1: Xuất trực tiếp từ công cụ YOLOv5 chuyên nghiệp

python export.py 
--weights runs/output_model/best.pt 
--img 640 
--device cpu 
--include paddle

Ghi chú debug: Không nên sử dụng script detect.py của YOLOv5 để kiểm tra ngay lập tức kết quả sau khi export. Lý do là sự chênh lệch về hình thức dữ liệu trả về (output tensor). Ví dụ, Paddle export trả về kích thước [1, 21, 64, 64], trong khi bộ xử lý YOLO tiêu chuẩn đòi hỏi [1, 3, 7, 80, 80]. Thay vì cố gắng sửa lỗi này tại bước tiền xử lý, hãy bỏ qua việc validate bằng detect script và chuyển thẳng sang tối ưu hóa Paddle-Lite.

Phương án 2: Sử dụng công cụ X2Paddle

Tương lai có thể áp dụng hàm convert trực tiếp để đảm bảo tính đồng nhất với các mô hình gốc.

# Cú pháp mẫu
x2paddle.convert.pytorch2paddle(
    module=module_obj, 
    save_dir='./output_paddle', 
    jit_type='trace', 
    input_examples=None, 
    convert_to_lite=True, 
    lite_valid_places='arm', 
    lite_model_type='naive_buffer'
)

2. Giai đoạn tối ưu hóa sang Paddle Lite

Để chạy trên thiết bị thực tế, mô hình Paddle chuẩn cần được chuyển đổi sang định dạng nhẹ hơn.

Cách 1: Dùng API Python (Programmatic)

Công cụ này cho phép tùy chỉnh sâu hơn về luồng lệnh xử lý nội bộ.

import paddlelite.lite as lite_api
import os

def run_model_optimization():
    # Khởi tạo đối tượng tối ưu hóa
    optimizer = lite_api.Opt()
    
    # Cấu hình đường dẫn mô hình chưa tối ưu
    # Lưu ý: Chỉ định tên file chính xác dựa trên dự án
    input_model_path = './runs/yolo_v5/pd_infer/net.pdmodel'
    input_params_path = './runs/yolo_v5/pd_infer/net.pdiparams'
    
    # Chọn backend phần cứng hỗ trợ
    # Các lựa chọn: arm, opencl, x86, mlu, npu...
    hardware_target = ['arm'] 
    
    optimizer.set_valid_places(hardware_target)
    optimizer.set_model_file(input_model_path)
    optimizer.set_param_file(input_params_path)
    
    # Xác định vị trí lưu trữ kết quả
    output_directory = './runs/optimized_lite/arm_model'
    
    if not os.path.exists(output_directory):
        os.makedirs(output_directory)
        
    optimizer.set_optimize_out(output_directory + '/opt_model')
    
    # Kích hoạt quá trình chuyển đổi và nén
    optimizer.run()

if __name__ == "__main__":
    run_model_optimization()

Cách 2: Sử dụng dòng lệnh Opt Tool (Command Line)

Phương pháp này phù hợp cho các quy trình CI/CD hoặc chạy nền tảng batch.

paddle_lite_opt 
--model_dir=./model_dir_config 
--model_file=./net.pdmodel 
--param_file=./net.pdiparams 
--optimize_out_type=protobuf 
--optimize_out=./target_optimized_model 
--valid_targets=arm 
--enable_fp16=true 
--quant_model=false 
--quant_type=QUANT_INT8

Các tham số như --enable_fp16 giúp tăng tốc độ tính toán FP16, trong khi --quant_model kích hoạt lượng tử hóa để giảm dung lượng mô hình. Tham chiếu tài liệu chính thức để biết thêm chi tiết về từng cờ lệnh.

Thẻ: YOLOv5 paddle-lite PyTorch edge-deployment model-conversion

Đăng vào ngày 29 tháng 8 lúc 08:07