Safemotion Lib
Loading...
Searching...
No Matches
smrunner

  • safemotion의 모델을 빌드하고 훈련을 위한 라이브러리

구조

│ ├── smrunner
│ │ ├── losses
│ │ │ ├── classification_loss.py
│ │ │ ├── loss_builder.py
│ │ ├── model_runner_builder.py
│ │ ├── main.py
│ │ ├── metrics.py
│ │ ├── test.py
│ │ ├── train.py
│ │ ├── utils.py
│ │ ├── ...

사용 예시

  • 파이썬 코드에서 모델 빌드 기능
    import smrunner
    model = smrunner.build_model(cfg_path)
  • 학습 명령
    cd smrunner
    python main.py --mode train --cfg {cfg path} --device 0

학습시 준비사항

  • train.py에서 사용하는 파라미터를 cfg 파일에 설정 필요
  • 예시
    loss = dict(
    MutiTaskSigmoidFocalLoss = dict(
    weight = 1.0,
    ...
    )
    )
    metric_args = dict(pred_key=pred_keys,
    gt_key=gt_keys[:5],
    ...)
    collect_keys = ['pose_heatmap_for_action', 'pose_heatmap_for_pose', 'image_feature', 'gt_action_upper', 'gt_action_lower', 'gt_pose', 'gt_hand', 'gt_foot']
    data_loader = dict(
    type = 'ActionDatasetLoader_mtml',
    data_folder = '/media/safemotion/HDD5/pjm_test/action_train_dataset_2023/action_kp_imf_split',
    ...
    )
    train = dict(
    num_workers = 8,
    init_lr = 0.1,
    batch_size = 32,
    epochs = 100,
    optimizer = 'SGD',
    optimizer_args = dict(momentum=0.9, nesterov=True, weight_decay=0.0001),
    scheduler = 'CosineAnnealingLR',
    # scheduler = 'StepLR',
    scheduler_args = dict(T_max=30, eta_min=0),
    adjust_lr_epoch = [10, 50, 100, 130],
    adjust_lr_rate = [0.5, 0.1, 0.1, 0.1],
    val_interval = 1,
    pretrained = None,#'/media/safemotion/HDD5/pjm_test/action_train_test/9.pth',
    save_root = '/media/safemotion/HDD5/pjm_test/action_train_result/action_kp_img',
    ...
    )
    test = dict(
    model_path = None,
    save_root = '',
    )

TODO

  1. 구조 변경 고려
    • builder
    • trainer
    • losses
    • utils
  2. 모델 파라미터 저장 및 로드 방법 고려
    • runner에서 수행할지 아니면 각 모델쪽에서 진행할지
    • 원하는 모듈단위로 로드할 수 있도록 구현
  3. 훈련 및 테스트 코드 일반화
  4. 훈련시 정량, 정성적 결과 저장 기능
  5. 훈련을 위한 데이터로더 부분을 어디에 둘지 고려
    • 각 모델쪽 라이브러리에 위치 시킴
    • smdataset에 위치시킴
    • smrunner에 위치시킴
  6. 모델 빌드하는 부분 구조 변경
    • 모델이 추가될때마다 해당 부분을 수정해야하는 번거로움이 있음
    • 수정하지 않아도 빌드할 수 있도록 변경 필요