Ướ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.
Đ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.txt
vàvalidation.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
- Để 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_list
và num_workers
. model_type
có thể là "sixd_repnet" hoặc "directmhp"