21 한프레임에서 검출된 박스에대해 이미지 특징 생성 모델을 inference하는 기능
24 image (np.array): 원본 이미지
25 bboxes (np.array): 검출 박스(x,y,x,y), shape (num_person, 4 or 5 or 6)
26 device (str): 모델이 구동될 디바이스
27 return (Tensor): 이미지 특징, shape (num_person, C)
31 preprocess = transforms.Compose([
32 transforms.ToPILImage(),
33 transforms.Resize((224, 224)),
34 transforms.ToTensor(),
35 transforms.Normalize(mean=[0.4815, 0.4578, 0.4082], std=[0.2686, 0.2613, 0.2758]),
38 crop_images = crop_image(image, bboxes)
41 transformed_images = []
42 for img
in crop_images:
43 transformed_images.append(preprocess(img))
45 image_batch = torch.stack(transformed_images)
46 image_batch = image_batch.to(device)
50 results = model(image_batch)
51 results = results.cpu()
58 하나의 어노테이션 파일을 기반으로 사람영역에 대해 이미지 특징 생성 모델을 사용하여 예측한 이미지 특징을 저장하는 기능
61 data_manager: AnnotationDataManager 객체, 어노테이션 데이터파일로 초기화까지 진행
62 save_path (str): 이미지 특징을 저장할 경로
63 device (str): 모델이 구동될 디바이스
67 img_num = data_manager.get_number_of_image()
69 for i
in tqdm(range(img_num)):
70 anno_data = data_manager.get_anno_data_in_image()
71 img_path = data_manager.get_image_path()
75 for anno
in anno_data:
76 bbox_tmp = copy.deepcopy(anno[
'bbox'])
79 margin_x = bbox_tmp[2]*0.15
80 margin_y = bbox_tmp[3]*0.15
82 bbox_tmp[0] -= margin_x
83 bbox_tmp[1] -= margin_y
88 bbox_tmp[2] += bbox_tmp[0]
89 bbox_tmp[3] += bbox_tmp[1]
90 bbox_tmp[0] = max(bbox_tmp[0], 0)
91 bbox_tmp[1] = max(bbox_tmp[1], 0)
93 bbox_in_image.append(bbox_tmp)
96 if len(bbox_in_image) == 0:
97 data_manager.move_image_right()
100 bboxes = np.array(bbox_in_image)
101 image = cv2.imread(img_path)
102 image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
108 for anno, feat
in zip(anno_data, image_feats):
110 image_id = anno[
'image_id']
111 track_id = anno[
'track_id']
113 if track_id
not in image_feats_data:
114 image_feats_data[track_id] = {}
116 image_feats_data[track_id][image_id] = feat
119 data_manager.move_image_right()
122 save_pkl_data(image_feats_data, save_path)
124def run_gen_image_features(args):
126 어노테이션 파일들을 기반으로 사람영역에 대해 이미지 특징 생성 모델을 사용하여 예측한 이미지 특징을 저장하는 기능
127 이미지 특징 생성 모델은 timm 패키지에서 제공하고 있는 eva02_base_patch16_clip_224 모델(사전학습 파라미터 이용)을 사용함.
129 save_root (str): 이미지 특징을 저장할 폴더
130 device (str): 모델이 구동될 디바이스
131 dataset_folder_list (list[str]): 어노테이션 파일이 저장된 폴더 리스트
133 print(
'gen image features start')
137 create_directory(args.save_root)
143 model = timm.create_model(
'eva02_base_patch16_clip_224', pretrained=
True)
144 model.head = nn.Identity()
149 data_manager = AnnotationDataManager()
154 for dataset_folder
in args.dataset_folder_list:
155 name_list, path_list = search_file(dataset_folder,
'.json')
156 json_name_list.extend(name_list)
157 json_path_list.extend(path_list)
159 file_num = len(json_path_list)
160 for i, (json_name, json_path)
in enumerate(zip(json_name_list, json_path_list)):
163 save_path = os.path.join(args.save_root, json_name)
164 save_path = save_path.replace(
'.json',
'.pkl')
167 data_manager.load_annotation(json_path)
168 data_manager.init_annotation()
171 print(f
"[ {i+1} / {file_num}] : load path : {json_path}")
172 print(f
"[ {i+1} / {file_num}] : save path : {save_path}")