Safemotion Lib
Loading...
Searching...
No Matches
smdataset

  • safemotion의 데이터 생성 및 관리를 위한 라이브러리

구조

│ ├── smdataset
│ │ ├── gen_data
│ │ │ ├── run_files
| │ │ │ ├── run_gen_action_pkl.py
| │ │ │ ├── run_gen_clip_v22_mtml.py
| │ │ │ ├── run_gen_clip.py
| │ │ │ ├── run_gen_image_features.py
| │ │ │ ├── run_gen_pkl_v22_mtml.py
| │ │ │ ├── run_gen_pkl_v22.py
| │ │ │ ├── run_update_pose.py
│ │ │ ├── cvt_labelmap.py
│ │ │ ├── generate_clip_mtml.py
│ │ │ ├── generate_clip.py
│ │ │ ├── generate_image_features.py
│ │ │ ├── generate_pkl_data_mtml.py
│ │ │ ├── generate_pkl_data.py
│ │ │ ├── update_anno_pose.py
│ │ ├── AnnotationDataManager.py
│ │ ├── utils_data.py
│ │ ├── version_info.py
  • gen_data : safemotion에서 자체 제작한 데이터를 기반으로 학습을 위한 데이터를 생성하는 기능
    • run_files/run_gen_action_pkl.py : v21 데이터를 기반으로 학습용 데이터를 생성하는 기능 -> 변경된 점들이 많아 수정 필요 또는 삭제
    • run_files/run_gen_clip_v22_mtml.py : v22 데이터를 기반으로 학습 또는 평가를 위한 클립으로 변환하는 기능
      • 하나의 클립에는 한명(개별행동일 경우) 또는 하나의 그룹(상호행동일 경우)에 대한 정보만을 담고 있음
      • 하나의 클립에는 주요 행동 하나가 포함되어 있음, 해당행동은 클립의 중심부에 표기됨
      • 클립의 시작과 끝 프레임 어노테이션 파일에 기록해둠
    • run_files/run_gen_image_features.py : 사람의 영역부분에 해당하는 이미지 특징을 생성하고 저장하는 기능
    • run_files/run_gen_pkl_v22_mtml.py : v22 데이터를 기반으로 모든 카테고리 라벨 정보 포함하는 학습 데이터를 생성 -> 최근에 사용
    • run_files/run_gen_pkl_v22.py : v22 데이터를 기반으로 여러 카테고리 중 하나의 라벨 정보만 포함하는 학습 데이터를 생성
    • run_files/run_update_pose.py : 행동 라벨링까지 완료된파일에 스켈레톤 데이터를 업데이트하는 기능
    • cvt_labelmap.py : 라벨링된 클래스를 변환하는 기능 및 레이블 맵 관련 기능
  • AnnotationDataManager.py
    • safemotion에서 자체 제작한 데이터를 순차적(프레임 기준) 읽는 기능
    • safemotion에서 자체 제작한 데이터를 추적 아이디별로 읽는 기능
    • safemotion에서 자체 제작한 데이터를 업데이트, 저장 등의 기능을 수행함

사용예시

  • 프레임 순서대로 읽기
    from smdataset.AnnotationDataManager import AnnotationDataManager
    data_manager = AnnotationDataManager()
    #데이터 매니저 초기화
    data_manager.load_annotation(json_path, image_base=image_base)
    data_manager.init_annotation()
    while True:
    #해당 프레임에 존재하는 어노테이션 데이터 읽기
    anno_data = data_manager.get_anno_data_in_image(filter=True)
    #이미지 로드
    image = data_manager.read_image()
    ...
    #마지막 프레임일경우 종료
    if data_manager.get_number_of_image() <= (data_manager.image_idx+1):
    break
    #다음프레임으로 이동
    data_manager.move_image_right()
    #프레임 아이디 증가
    frame_id+=1
  • 전체 데이터를 추적아이디 별로 읽기
    from smdataset.AnnotationDataManager import AnnotationDataManager
    data_manager = AnnotationDataManager()
    #데이터 매니저 초기화
    data_manager.load_annotation(json_path)
    data_manager.init_annotation()
    #추적 아이디를 기준으로 데이터 읽기
    track_data = data_manager.get_track_anno_data(filter=True, start_frame=start_frame, end_frame=end_frame+1)
    #데이터 순회
    for track_id, anno_list in track_data.items():
    ...
    ...

TODO

  1. 상호행동인식을 위한 학습데이터 생성 기능 구현(클립, 피클)
  2. 레이블 맵 관리하는 방법 제시 필요