56def gen_image_features(model, data_manager, save_path, device):
57 """
58 하나의 어노테이션 파일을 기반으로 사람영역에 대해 이미지 특징 생성 모델을 사용하여 예측한 이미지 특징을 저장하는 기능
59 args:
60 model: pytorch 모델
61 data_manager: AnnotationDataManager 객체, 어노테이션 데이터파일로 초기화까지 진행
62 save_path (str): 이미지 특징을 저장할 경로
63 device (str): 모델이 구동될 디바이스
64 """
65
66
67 img_num = data_manager.get_number_of_image()
68 image_feats_data = {}
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()
72
73
74 bbox_in_image = []
75 for anno in anno_data:
76 bbox_tmp = copy.deepcopy(anno['bbox'])
77
78
79 margin_x = bbox_tmp[2]*0.15
80 margin_y = bbox_tmp[3]*0.15
81
82 bbox_tmp[0] -= margin_x
83 bbox_tmp[1] -= margin_y
84 bbox_tmp[2] *= 1.3
85 bbox_tmp[3] *= 1.3
86
87
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)
92
93 bbox_in_image.append(bbox_tmp)
94
95
96 if len(bbox_in_image) == 0:
97 data_manager.move_image_right()
98 continue
99
100 bboxes = np.array(bbox_in_image)
101 image = cv2.imread(img_path)
102 image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
103
104
105 image_feats = inference_one_frame(model, image, bboxes, device)
106
107
108 for anno, feat in zip(anno_data, image_feats):
109 anno_id = anno['id']
110 image_id = anno['image_id']
111 track_id = anno['track_id']
112
113 if track_id not in image_feats_data:
114 image_feats_data[track_id] = {}
115
116 image_feats_data[track_id][image_id] = feat
117
118
119 data_manager.move_image_right()
120
121
122 save_pkl_data(image_feats_data, save_path)
123