Vào thẳng nội dung

Ước lượng tư thế đầu

Trong ứng dụng này, chúng tôi sử dụng cả hai thuật toán (6dRepNet và DirectMHP) để ước lượng tư thế đầu.

Head pose

Tư thế đầu

Đi tới /projects/head_pose_estimation

1. Chuẩn bị bộ dữ liệu của bạn

Đối với 6DRepNet

Dữ liệu có thể tải từ: https://drive.google.com/file/d/0B7OEHD3T4eCkVGs0TkhUWFN6N1k/view?resourcekey=0-WT5tO4TOCbNZY6r6z6WmOA
# cấu trúc bộ dữ liệu của bạn nên như sau (300W_LP là tên bộ dữ liệu của bạn)
datasets/300W_LP/
    -AFW/
        -*jpg
        -*.mat
    -HELEN/
        -*jpg
        -*.mat
    ...
    -files.txt

files.txt là một tệp chứa tên tệp từ thư mục datasets/300W_LP. Ví dụ:

./AFW/AFW_134212_1_0
./HELEN/HELEN_232194_1_0

Đối với DirectMHP

# cấu trúc bộ dữ liệu của bạn nên như sau
datasets/
    -images/
        -train/
            -*.jpg
        -validation/
            -*.jpg
    -yolov5_labels/
        -img_txt/
            -train.txt
            -validation.txt
        -train/
            -*.txt
        -validation/
            -*.txt
    ...
    -data.yaml

data.yaml như sau:

path: ./headpose/DirectMHP/data/
labels: yolov5_labels
train: yolov5_labels/img_txt/train.txt
val: yolov5_labels/img_txt/validation.txt

nc: 1 # số lớp (chỉ một lớp: đầu người)
num_angles: 3 # số góc Euler là 3 (pitch, yaw, roll)
names: [ 'person' ] # tên lớp. Chúng tôi vẫn sử dụng 'person' trong tệp json

Ghi

  • train.txtvalidation.txt chứa đường dẫn tới hình ảnh đào tạo hoặc kiểm định
  • nhãn *.txt định dạng class_index x y w h pitch yaw roll

2. Cách sử dụng

  1. Để huấn luyện, chạy:
python train.py --opt "<ĐƯỜNG_DẪN_TỚI_TẬP_TIN_OPT>" --weight-path <ĐƯỜNG_DẪN_TỚI_TRỌNG_SỐ_TÙY_CHỈNH>

Ví dụ:

python train.py --opt opt.json
  • Ghi chú:
  • ĐƯỜNG_DẪN_TỚI_TẬP_TIN_OPT là đường dẫn đến tệp opt.json
  • ĐƯỜNG_DẪN_TỚI_TRỌNG_SỐ_TÙY_CHỈNH là đường dẫn đến tệp .pt

  • Để kiểm tra, chạy:

python predict.py --opt "<ĐƯỜNG_DẪN_TỚI_TẬP_TIN_OPT>" --output "<ĐƯỜNG_DẪN_TỚI_THƯ_MỤC_KẾT_QUẢ>" --input-path "<ĐƯỜNG_DẪN_TỚI_HÌNH_ẢNH_KIỂM_TRA>" --weight-path "<ĐƯỜNG_DẪN_TỚI_TRỌNG_SỐ_TÙY_CHỈNH>"

Ví dụ:

python predict.py --input-path .\datasets\300W_LP\AFW\AFW_134212_1_0.jpg --opt opt.json --output 123.png --weight-path .\results\SixDRepNet_1686737564_bs4\epoch_10.pth
  • Ghi chú:
  • ĐƯỜNG_DẪN_TỚI_HÌNH_ẢNH_KIỂM_TRA nên là nơi có tệp hình ảnh
  • ĐƯỜNG_DẪN_TỚI_THƯ_MỤC_KẾT_QUẢ là nơi sẽ lưu kết quả
  • ĐƯỜNG_DẪN_TỚI_TẬP_TIN_OPT là đường dẫn đến tệp opt.json
  • ĐƯỜNG_DẪN_TỚI_TRỌNG_SỐ_TÙY_CHỈNH là đường dẫn đến trọng số tùy chỉnh
  • Nếu dự đoán không tốt, xin cân nhắc thêm dữ liệu

Ví dụ opt.json như sau:

{
"model_type": "sixd_repnet",
"sixd_repnet":{
"num_epochs": 10,
"batch_size": 4,
"scheduler": false,
"lr": 0.0001,
"num_workers": 1,
"output_path": "results/",
"dataset": "Pose_300W_LP",
"data_dir": "datasets/300W_LP",
"filename_list": "datasets/300W_LP/files.txt"
},
"directmhp":{
"imgsz": 1280,
"conf_thres": 0.7,
"iou_thres": 0.45,
"epochs": 2,
"batch_size": 1,
"save_dir": "./train_directmhp",
"data": "./headpose/DirectMHP/data/300w_lp_aflw2000.yaml",
"workers": 1
}
}

Bạn có thể chỉnh sửa data_dir, output_path, batch_size, num_epochs, lr, filename_listnum_workers. model_type có thể là "sixd_repnet" hoặc "directmhp"