Safemotion Lib
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
action_dataset_loader.ActionDatasetLoader_mtml Class Reference
Inheritance diagram for action_dataset_loader.ActionDatasetLoader_mtml:

Public Member Functions

 __init__ (self, mode, data_folder, category_info, clip_len_action=20, clip_len_pose=8)
 
 load_data (self)
 
 preprocessing (self, sample)
 
 __len__ (self)
 
 __getitem__ (self, index)
 

Public Attributes

 mode
 
 data_folder
 
 category_info
 
 clip_len_action
 
 clip_len_pose
 
 dataset
 

Detailed Description

세이프모션의 데이터셋을 기반으로 2-스트림 경로 모델을 학습하기 위한 데이터로더
args:
    mode (str): 데이터로더의 셋팅 모드, 학습용일 경우 'train', 평가일 경우 'val'
    data_folder (str): 학습용 데이터셋이 저장된 폴더, 해당 폴더 안에는 mode 폴더가 포함되어 있어야함
    category_info (dict): 학습 데이터의 카테고리별 클래스 수
        TODO: category_info는 제거해도 동작가능할 것으로 보여짐, 코드 수정 필요
    clip_len_action (int): 행동 경로에 사용되는 프레임 수
    clip_len_pose (int): 포즈 경로에 사용되는 프레임 수

Definition at line 166 of file action_dataset_loader.py.

Constructor & Destructor Documentation

◆ __init__()

action_dataset_loader.ActionDatasetLoader_mtml.__init__ ( self,
mode,
data_folder,
category_info,
clip_len_action = 20,
clip_len_pose = 8 )

Definition at line 177 of file action_dataset_loader.py.

177 def __init__(self, mode, data_folder, category_info, clip_len_action=20, clip_len_pose=8):
178 self.mode = mode
179 self.data_folder = data_folder
180 self.category_info = category_info
181 self.clip_len_action = clip_len_action
182 self.clip_len_pose = clip_len_pose
183
184 self.load_data()
185

Member Function Documentation

◆ __getitem__()

action_dataset_loader.ActionDatasetLoader_mtml.__getitem__ ( self,
index )

Definition at line 244 of file action_dataset_loader.py.

244 def __getitem__(self, index):
245 sample = self.dataset[index]
246 if isinstance(sample, list): #샘플이 리스트일 경우 한개 선택함
247 size_data = len(sample)
248
249 #인덱스 설정
250 if self.mode == 'train': #학습 모드일 경우 랜덤으로 선택
251 rand_idx = random.randint(0, size_data-1)
252 else: #평가모드일 경우 중심에서 한개 선택
253 rand_idx = size_data//2
254
255 sample = sample[rand_idx]
256
257 return self.preprocessing(sample)

◆ __len__()

action_dataset_loader.ActionDatasetLoader_mtml.__len__ ( self)

Definition at line 241 of file action_dataset_loader.py.

241 def __len__(self):
242 return len(self.dataset)
243

◆ load_data()

action_dataset_loader.ActionDatasetLoader_mtml.load_data ( self)
데이터를 로드하는 기능

Definition at line 186 of file action_dataset_loader.py.

186 def load_data(self):
187 """
188 데이터를 로드하는 기능
189 """
190 self.dataset = []
191 for category, num in self.category_info.items(): #카테고리, 클래스 수
192 folder = os.path.join(self.data_folder, self.mode, category) #카테고리-클래스의 데이터 폴더
193 name_list, path_list = search_file(folder, '.pkl') #해당 폴더의 모든 pkl파일 검색
194
195 #데이터 로드
196 data_num = len(path_list)
197 for i, (name, path) in enumerate(zip(name_list, path_list)):
198 print(f'{self.mode}/{category}/{num:02d} [{i+1}/{data_num}] -> {name}', end='\r')
199 pkl = load_pkl_data(path)
200 self.dataset.append(pkl)
201

◆ preprocessing()

action_dataset_loader.ActionDatasetLoader_mtml.preprocessing ( self,
sample )
모델의 입력을 위한 데이터 전처리 기능
스켈레톤의 히트맵을 생성하는게 메인 기능임, 데이터 증강(data augmentation) 포함됨
TODO: 데이터 증강은 학습 모드일 경우만 진행되도록 코드 변경 필요
args:
    sample (dict): 모델의 입력을 생성하기 위한 데이터
return (dict): 모델의 입력이 포함된 데이터

Definition at line 202 of file action_dataset_loader.py.

202 def preprocessing(self, sample):
203 """
204 모델의 입력을 위한 데이터 전처리 기능
205 스켈레톤의 히트맵을 생성하는게 메인 기능임, 데이터 증강(data augmentation) 포함됨
206 TODO: 데이터 증강은 학습 모드일 경우만 진행되도록 코드 변경 필요
207 args:
208 sample (dict): 모델의 입력을 생성하기 위한 데이터
209 return (dict): 모델의 입력이 포함된 데이터
210 """
211
212 sample = pose_sampling(sample, clip_len=self.clip_len_action) #샘플링
213 sample = pose_shift(sample, shift_ratio=0.01) #스켈레톤 이동, 데이터 증강
214 sample = pose_compact(sample) #스켈레톤 범위 셋팅
215 sample = pose_resize(sample, scale=(64, 64)) #리사이즈
216 sample = pose_random_crop(sample, area_range=(0.56, 1.0), aspect_ratio_range=(3 / 4, 4 / 3)) #랜덤 크롭, 데이터 증강
217 sample = pose_resize(sample, scale=(56, 56)) #리사이즈, 크롭을 진행했기 때문에 다시 리사이즈 해줌
218 sample = pose_flip(sample, flip_ratio=0.5) #좌우 반전, 데이터 증강
219
220 sample_pose = copy.deepcopy(sample) #포즈 경로의 입력 데이터 생성을 위해 복사
221
222 #포즈 경로의 입력 범위 샘플링
223 frames = sample_pose['keypoint'].shape[1]
224 start = (frames - self.clip_len_pose)//2
225 end = start+self.clip_len_pose
226 sample_pose['keypoint'] = sample_pose['keypoint'][:,start:end, :, : ]
227 sample_pose['keypoint_score'] = sample_pose['keypoint_score'][:,start:end, : ]
228
229 #포즈 경로의 입력 데이터 생성을위한 스켈레톤 좌표 조정
230 sample_pose = pose_compact(sample_pose) #스켈레톤 범위 셋팅
231 sample_pose = pose_resize(sample_pose, scale=(56, 56)) #리사이즈
232
233 #히트맵 생성
234 sample = make_pose_heatmap(sample)
235 sample_pose = make_pose_heatmap(sample_pose)
236 sample['pose_heatmap_for_action'] = sample['pose_heatmap']
237 sample['pose_heatmap_for_pose'] = sample_pose['pose_heatmap']
238
239 return sample
240

Member Data Documentation

◆ category_info

action_dataset_loader.ActionDatasetLoader_mtml.category_info

Definition at line 180 of file action_dataset_loader.py.

◆ clip_len_action

action_dataset_loader.ActionDatasetLoader_mtml.clip_len_action

Definition at line 181 of file action_dataset_loader.py.

◆ clip_len_pose

action_dataset_loader.ActionDatasetLoader_mtml.clip_len_pose

Definition at line 182 of file action_dataset_loader.py.

◆ data_folder

action_dataset_loader.ActionDatasetLoader_mtml.data_folder

Definition at line 179 of file action_dataset_loader.py.

◆ dataset

action_dataset_loader.ActionDatasetLoader_mtml.dataset

Definition at line 190 of file action_dataset_loader.py.

◆ mode

action_dataset_loader.ActionDatasetLoader_mtml.mode

Definition at line 178 of file action_dataset_loader.py.


The documentation for this class was generated from the following file: