-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
76 lines (59 loc) · 2.8 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
"""
Objective
DistortMOT17 -> extractor -> clustering -> visualization
MOT17 -> extractor -> clustering -> visualization
"""
import torch
import numpy as np
from tqdm import tqdm
from extractor.ReID import ResNeXt50
from extract_features import extract_features
from generate_crop_bbox import read_bbox, read_image
from utils import cosine_distance, draw_heatmap
if __name__ == "__main__":
comp_ids = ["1", "2"]
# Load images and bboxes
img_folder = "assets/MOT17-04-SDP/img1"
gt_file = "assets/MOT17-04-SDP/gt/gt.txt"
model = ResNeXt50('cuda')
data = {comp_ids[0]:{"bboxes":[], "features":[]}, comp_ids[1]:{"bboxes":[], "features":[]}}
for id in comp_ids:
print(f'==== ID number : {id} ===')
bboxes = read_bbox(gt_file, id, xxyy = True)
data[id]['bboxes'] = bboxes[:100]
for i, bbox in enumerate(data[id]['bboxes']):
img_name = f"{img_folder}/{str(i+1).zfill(6)}.jpg"
img = read_image(img_name)
print(f'Processing ... {img_name}')
feature = extract_features(model, img, bbox)
data[id]['features'].append(feature)
# Calculate cosine distance between features
sizes = 200
heatmaps = np.zeros((sizes, sizes))
for i, fi in tqdm(enumerate(data[comp_ids[0]]['features'] + data[comp_ids[1]]['features'])):
for j, fj in tqdm(enumerate(data[comp_ids[0]]['features'] + data[comp_ids[1]]['features'])):
heatmaps[i, j] = cosine_distance(fi, fj)
fig = draw_heatmap(heatmaps)
fig.savefig('assets/heatmap.pdf', bbox_inches='tight')
img_folder = "assets/distorted-MOT17-04-SDP/img1"
gt_file = "assets/distorted-MOT17-04-SDP/gt/gt.txt"
model = ResNeXt50('cuda')
data = {comp_ids[0]:{"bboxes":[], "features":[]}, comp_ids[1]:{"bboxes":[], "features":[]}}
for id in comp_ids:
print(f'==== ID number : {id} ===')
bboxes = read_bbox(gt_file, id, xxyy = True)
data[id]['bboxes'] = bboxes[:100]
for i, bbox in enumerate(data[id]['bboxes']):
img_name = f"{img_folder}/{str(i+1).zfill(6)}.jpg"
img = read_image(img_name)
print(f'Processing ... {img_name}')
feature = extract_features(model, img, bbox)
data[id]['features'].append(feature)
# Calculate cosine distance between features
sizes = 200
heatmaps = np.zeros((sizes, sizes))
for i, fi in tqdm(enumerate(data[comp_ids[0]]['features'] + data[comp_ids[1]]['features'])):
for j, fj in tqdm(enumerate(data[comp_ids[0]]['features'] + data[comp_ids[1]]['features'])):
heatmaps[i, j] = cosine_distance(fi, fj)
fig = draw_heatmap(heatmaps)
fig.savefig('assets/heatmap-dist.pdf', bbox_inches='tight')