Spaces:
Sleeping
Sleeping
initial app test
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- configs/cfg_test.yml +0 -28
- configs/cfg_train.yml +0 -29
- hot_analysis/.ipynb_checkpoints/hico_analysis-checkpoint.ipynb +0 -307
- hot_analysis/.ipynb_checkpoints/vcoco_analysis-checkpoint.ipynb +0 -276
- hot_analysis/agniv_pose_filter/hico.npy +0 -3
- hot_analysis/agniv_pose_filter/hot.npy +0 -3
- hot_analysis/agniv_pose_filter/hot_dict.pkl +0 -3
- hot_analysis/agniv_pose_filter/pq_wnp.npy +0 -3
- hot_analysis/agniv_pose_filter/vcoco.npy +0 -3
- hot_analysis/count_objects_per_img.py +0 -35
- hot_analysis/create_combined_objectwise_plots.ipynb +0 -291
- hot_analysis/create_part_probability_mesh.py +0 -86
- hot_analysis/damon_qc_stats/compute_accuracy_iou_damon.py +0 -59
- hot_analysis/damon_qc_stats/compute_fleiss_kappa_damon.py +0 -111
- hot_analysis/damon_qc_stats/qa_accuracy_gt_contact_combined.npz +0 -3
- hot_analysis/damon_qc_stats/quality_assurance_accuracy.csv +0 -0
- hot_analysis/damon_qc_stats/quality_assurance_fleiss.csv +0 -0
- hot_analysis/damon_qc_stats/successful_qualifications_fleiss.csv +0 -0
- hot_analysis/filtered_data/v_1/hico/hico_imglist_all_140223.txt +0 -0
- hot_analysis/filtered_data/v_1/hico/image_per_object_category.png +0 -0
- hot_analysis/filtered_data/v_1/hico/imgnames_per_object_dict.json +0 -0
- hot_analysis/filtered_data/v_1/hico/imgnames_per_object_dict.txt +0 -0
- hot_analysis/filtered_data/v_1/hico/object_per_image_dict.json +0 -0
- hot_analysis/filtered_data/v_1/hico/object_per_image_dict.txt +0 -0
- hot_analysis/filtered_data/v_1/hico_imglist_all_140223.txt +0 -0
- hot_analysis/filtered_data/v_1/image_per_object_category.png +0 -0
- hot_analysis/filtered_data/v_1/imgnames_per_object_dict.json +0 -0
- hot_analysis/filtered_data/v_1/imgnames_per_object_dict.txt +0 -0
- hot_analysis/filtered_data/v_1/object_per_image_dict.json +0 -0
- hot_analysis/filtered_data/v_1/object_per_image_dict.txt +0 -0
- hot_analysis/filtered_data/v_1/vcoco/image_per_object_category.png +0 -0
- hot_analysis/filtered_data/v_1/vcoco/imgnames_per_object_dict.json +0 -0
- hot_analysis/filtered_data/v_1/vcoco/object_per_image_dict.json +0 -0
- hot_analysis/filtered_data/v_1/vcoco/vcoco_imglist_all_170223.txt +0 -2368
- hot_analysis/hico_analysis.ipynb +0 -342
- hot_analysis/image_per_object_category.png +0 -0
- hot_analysis/jc_graphs/documents-export-2023-03-07/image_per_object_category.csv +0 -70
- hot_analysis/jc_graphs/documents-export-2023-03-07/object_nest_piechart_data.csv +0 -77
- hot_analysis/jc_graphs/documents-export-2023-03-07/partwise_contact_graph.csv +0 -18
- hot_analysis/jc_graphs/plot_image_per_object.py +0 -147
- hot_analysis/jc_graphs/plot_partwise_contacts.py +0 -42
- hot_analysis/object_nest_piechart.py +0 -136
- hot_analysis/partwise_contact_graph.py +0 -98
- hot_analysis/vcoco_analysis.ipynb +0 -276
- scripts/datascripts/add_imgname_column_to_deco_csv.py +0 -23
- scripts/datascripts/combine_cropped_npz.py +0 -63
- scripts/datascripts/combine_mturk_csvs.py +0 -33
- scripts/datascripts/combine_npzs.py +0 -41
- scripts/datascripts/convert_rich_npz_to_cropped.py +0 -75
- scripts/datascripts/get_part_seg_mask.py +0 -199
configs/cfg_test.yml
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
EXP_NAME: 'damon_hrnet_testing'
|
2 |
-
PROJECT_NAME: 'DECO_DAMON_Testing'
|
3 |
-
OUTPUT_DIR: 'deco_results'
|
4 |
-
CONDOR_DIR: ''
|
5 |
-
DATASET:
|
6 |
-
BATCH_SIZE: 16
|
7 |
-
NUM_WORKERS: 4
|
8 |
-
NORMALIZE_IMAGES: [True]
|
9 |
-
OPTIMIZER:
|
10 |
-
TYPE: 'adam'
|
11 |
-
LR: [5e-5]
|
12 |
-
NUM_UPDATE_LR: 3
|
13 |
-
TRAINING:
|
14 |
-
ENCODER: 'hrnet'
|
15 |
-
CONTEXT: [True]
|
16 |
-
NUM_EPOCHS: 1
|
17 |
-
NUM_EARLY_STOP: 10
|
18 |
-
SUMMARY_STEPS: 5
|
19 |
-
CHECKPOINT_EPOCHS: 5
|
20 |
-
DATASETS: ['damon']
|
21 |
-
DATASET_MIX_PDF: ['1.']
|
22 |
-
DATASET_ROOT_PATH: ''
|
23 |
-
BEST_MODEL_PATH: './checkpoints/Release_Checkpoint/deco_best.pth'
|
24 |
-
PAL_LOSS_WEIGHTS: 0.0
|
25 |
-
VALIDATION:
|
26 |
-
SUMMARY_STEPS: 1000
|
27 |
-
DATASETS: ['damon']
|
28 |
-
MAIN_DATASET: 'damon'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
configs/cfg_train.yml
DELETED
@@ -1,29 +0,0 @@
|
|
1 |
-
EXP_NAME: 'demo_train'
|
2 |
-
PROJECT_NAME: 'DECO_demo_training'
|
3 |
-
OUTPUT_DIR: 'deco_results'
|
4 |
-
CONDOR_DIR: ''
|
5 |
-
DATASET:
|
6 |
-
BATCH_SIZE: 4
|
7 |
-
NUM_WORKERS: 8
|
8 |
-
NORMALIZE_IMAGES: [True]
|
9 |
-
OPTIMIZER:
|
10 |
-
TYPE: 'adam'
|
11 |
-
LR: [1e-5]
|
12 |
-
NUM_UPDATE_LR: 3
|
13 |
-
TRAINING:
|
14 |
-
ENCODER: 'hrnet'
|
15 |
-
CONTEXT: [True]
|
16 |
-
NUM_EPOCHS: 100
|
17 |
-
NUM_EARLY_STOP: 10
|
18 |
-
SUMMARY_STEPS: 5
|
19 |
-
CHECKPOINT_EPOCHS: 5
|
20 |
-
DATASETS: ['damon', 'rich', 'prox']
|
21 |
-
DATASET_MIX_PDF: ['0.4', '0.3', '0.3'] # should sum to 1.0 unless you want to weight by dataset size
|
22 |
-
DATASET_ROOT_PATH: ''
|
23 |
-
BEST_MODEL_PATH: './checkpoints/Other_Checkpoints/demo_train.pth'
|
24 |
-
LOSS_WEIGHTS: 1.
|
25 |
-
PAL_LOSS_WEIGHTS: 0.01
|
26 |
-
VALIDATION:
|
27 |
-
SUMMARY_STEPS: 5
|
28 |
-
DATASETS: ['damon', 'rich', 'prox']
|
29 |
-
MAIN_DATASET: 'damon'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/.ipynb_checkpoints/hico_analysis-checkpoint.ipynb
DELETED
@@ -1,307 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"cells": [
|
3 |
-
{
|
4 |
-
"cell_type": "code",
|
5 |
-
"execution_count": 5,
|
6 |
-
"metadata": {},
|
7 |
-
"outputs": [],
|
8 |
-
"source": [
|
9 |
-
"import json\n",
|
10 |
-
"import pandas as pd \n",
|
11 |
-
"import ipdb\n",
|
12 |
-
"import os\n",
|
13 |
-
"import pickle as pkl\n",
|
14 |
-
"import os.path as osp\n",
|
15 |
-
"import numpy as np\n",
|
16 |
-
"from PIL import Image\n"
|
17 |
-
]
|
18 |
-
},
|
19 |
-
{
|
20 |
-
"cell_type": "code",
|
21 |
-
"execution_count": 6,
|
22 |
-
"metadata": {},
|
23 |
-
"outputs": [
|
24 |
-
{
|
25 |
-
"name": "stdout",
|
26 |
-
"output_type": "stream",
|
27 |
-
"text": [
|
28 |
-
"Total images found: 9642\n",
|
29 |
-
"Images after KP filtering: 3895\n",
|
30 |
-
"['hake_train2015_HICO_train2015_00005476.jpg', 'hake_train2015_HICO_train2015_00008329.jpg', 'hake_train2015_HICO_train2015_00008027.jpg', 'hake_train2015_HICO_train2015_00013408.jpg', 'hake_train2015_HICO_train2015_00010656.jpg']\n"
|
31 |
-
]
|
32 |
-
}
|
33 |
-
],
|
34 |
-
"source": [
|
35 |
-
"# Load Agniv VITpose-base hico filtering\n",
|
36 |
-
"filter_path = './agniv_pose_filter/hico.npy'\n",
|
37 |
-
"pose_md = np.load(filter_path, allow_pickle=True)\n",
|
38 |
-
"pose_md = pose_md.item()\n",
|
39 |
-
"filter_img_names = {}\n",
|
40 |
-
"\n",
|
41 |
-
"print(f'Total images found: {len(pose_md)}')\n",
|
42 |
-
"\n",
|
43 |
-
"# Filter out images with < 10 visible keypoints \n",
|
44 |
-
"kp_thresh = 10\n",
|
45 |
-
"\n",
|
46 |
-
"for imgname, pose_num in pose_md.items():\n",
|
47 |
-
" if pose_num > kp_thresh:\n",
|
48 |
-
" filter_img_names[imgname] = pose_num\n",
|
49 |
-
" \n",
|
50 |
-
"print(f'Images after KP filtering: {len(filter_img_names)}')\n",
|
51 |
-
"\n",
|
52 |
-
"print(list(filter_img_names.keys())[:5])\n"
|
53 |
-
]
|
54 |
-
},
|
55 |
-
{
|
56 |
-
"cell_type": "code",
|
57 |
-
"execution_count": 7,
|
58 |
-
"metadata": {},
|
59 |
-
"outputs": [],
|
60 |
-
"source": [
|
61 |
-
"# # Load Agniv VITpose-base hot dict\n",
|
62 |
-
"# filter_path = \"./agniv_pose_filter/hot_dict.pkl\"\n",
|
63 |
-
"# with open(filter_path, 'rb') as f:\n",
|
64 |
-
"# pose_md_dict = pkl.load(f)\n",
|
65 |
-
" \n",
|
66 |
-
"# hico_dict = {}\n",
|
67 |
-
"\n",
|
68 |
-
"# for k, v in pose_md_dict.items():\n",
|
69 |
-
"# if 'hake' in k:\n",
|
70 |
-
"# hico_dict[k] = v\n",
|
71 |
-
" \n",
|
72 |
-
"# print(f'Total images found: {len(hico_dict)}')\n",
|
73 |
-
"\n",
|
74 |
-
"# # Filter out images with < 10 visible keypoints \n",
|
75 |
-
"# kp_thresh = 10\n",
|
76 |
-
"\n",
|
77 |
-
"# filter_img_names = {}\n",
|
78 |
-
"\n",
|
79 |
-
"# for imgname, kp_md in hico_dict.items():\n",
|
80 |
-
"# if kp_md == 0:\n",
|
81 |
-
"# continue\n",
|
82 |
-
"# if kp_md[\"num_persons\"] == 1 and kp_md[\"num_kpt\"][0.5][0] > kp_thresh:\n",
|
83 |
-
"# filter_img_names[imgname] = kp_md[\"num_kpt\"][0.5][0]\n",
|
84 |
-
" \n",
|
85 |
-
"# print(f'Images after KP filtering: {len(filter_img_names)}')"
|
86 |
-
]
|
87 |
-
},
|
88 |
-
{
|
89 |
-
"cell_type": "code",
|
90 |
-
"execution_count": 8,
|
91 |
-
"metadata": {},
|
92 |
-
"outputs": [
|
93 |
-
{
|
94 |
-
"name": "stdout",
|
95 |
-
"output_type": "stream",
|
96 |
-
"text": [
|
97 |
-
" 0 1 2\n",
|
98 |
-
"0 1 airplane board\n",
|
99 |
-
"1 2 airplane direct\n",
|
100 |
-
"2 3 airplane exit\n",
|
101 |
-
"3 4 airplane fly\n",
|
102 |
-
"4 5 airplane inspect\n",
|
103 |
-
".. ... ... ...\n",
|
104 |
-
"595 596 zebra feed\n",
|
105 |
-
"596 597 zebra hold\n",
|
106 |
-
"597 598 zebra pet\n",
|
107 |
-
"598 599 zebra watch\n",
|
108 |
-
"599 600 zebra no_interaction\n",
|
109 |
-
"\n",
|
110 |
-
"[600 rows x 3 columns]\n"
|
111 |
-
]
|
112 |
-
}
|
113 |
-
],
|
114 |
-
"source": [
|
115 |
-
"\n",
|
116 |
-
"hico_annot = json.load(open('/ps/project/datasets/HICO/hico-image-level/hico-training-set-image-level.json', 'rb'))\n",
|
117 |
-
"hoi_mapping = pd.read_csv('/ps/project/datasets/HICO/hico-image-level/hico_hoi_list.txt', header=None, delim_whitespace=True)\n",
|
118 |
-
"print(hoi_mapping)"
|
119 |
-
]
|
120 |
-
},
|
121 |
-
{
|
122 |
-
"cell_type": "code",
|
123 |
-
"execution_count": 9,
|
124 |
-
"metadata": {
|
125 |
-
"scrolled": true
|
126 |
-
},
|
127 |
-
"outputs": [
|
128 |
-
{
|
129 |
-
"name": "stdout",
|
130 |
-
"output_type": "stream",
|
131 |
-
"text": [
|
132 |
-
"Final number of images 3154\n"
|
133 |
-
]
|
134 |
-
}
|
135 |
-
],
|
136 |
-
"source": [
|
137 |
-
"version = '1'\n",
|
138 |
-
"out_dir = f'./filtered_data/v_{version}'\n",
|
139 |
-
"os.makedirs(out_dir, exist_ok=True)\n",
|
140 |
-
"\n",
|
141 |
-
"objectwise_img_names = {}\n",
|
142 |
-
"imgwise_object_names = {}\n",
|
143 |
-
"img_dir = '/ps/project/datasets/HICO/hico_20150920/images/train2015'\n",
|
144 |
-
"\n",
|
145 |
-
"bad_object_names = ['bear', 'bird', 'cat', 'cow', \n",
|
146 |
-
" 'dog', 'elephant', 'giraffe', 'horse', \n",
|
147 |
-
" 'mouse', 'person', 'sheep', 'zebra' ]\n",
|
148 |
-
"bad_action_names = ['buy', 'chase', 'direct', 'greet', 'herd', 'hose',\n",
|
149 |
-
" 'hug', 'hunt', 'milk', 'no_interaction', 'pet', 'point', 'teach',\n",
|
150 |
-
" 'watch', 'wave']\n",
|
151 |
-
"\n",
|
152 |
-
"for i, (img_name, img_md) in enumerate(hico_annot.items()):\n",
|
153 |
-
" \n",
|
154 |
-
" # Apply keypoint number filtering on the images \n",
|
155 |
-
" full_img_name = 'hake_train2015_' + img_name\n",
|
156 |
-
" if full_img_name not in filter_img_names.keys():\n",
|
157 |
-
" continue\n",
|
158 |
-
" \n",
|
159 |
-
" # show the image\n",
|
160 |
-
" if i < 0:\n",
|
161 |
-
" img = Image.open(osp.join(img_dir,img_name))\n",
|
162 |
-
" display(img)\n",
|
163 |
-
" \n",
|
164 |
-
" obj_names = []\n",
|
165 |
-
" action_names = []\n",
|
166 |
-
" kp_num = filter_img_names[full_img_name]\n",
|
167 |
-
" \n",
|
168 |
-
" # travel through all hoi in the metadata, save obj_names and action_names for the hois\n",
|
169 |
-
" for hoi_id in img_md['hoi_id']:\n",
|
170 |
-
" img_md_row = hoi_mapping.loc[hoi_mapping[0] == hoi_id].iloc[0]\n",
|
171 |
-
"\n",
|
172 |
-
" obj_name = img_md_row[1]\n",
|
173 |
-
" if obj_name in bad_object_names:\n",
|
174 |
-
" continue\n",
|
175 |
-
" action_name = img_md_row[2]\n",
|
176 |
-
" if action_name in bad_action_names:\n",
|
177 |
-
" continue\n",
|
178 |
-
" \n",
|
179 |
-
" obj_names.append(obj_name)\n",
|
180 |
-
" action_names.append(action_name)\n",
|
181 |
-
" \n",
|
182 |
-
" if len(set(obj_names)) == 0 or len(action_names) == 0:\n",
|
183 |
-
" continue\n",
|
184 |
-
" \n",
|
185 |
-
" imgwise_object_names.setdefault(full_img_name,[]).extend(list(set(obj_names)))\n",
|
186 |
-
" \n",
|
187 |
-
"# # # Display images with multiple objects\n",
|
188 |
-
"# if len(set(obj_names)) > 1:\n",
|
189 |
-
"# print(img_name)\n",
|
190 |
-
"# print(obj_names)\n",
|
191 |
-
"# print(action_names)\n",
|
192 |
-
"# print(f'Number of Kps: {kp_num}')\n",
|
193 |
-
"# img = Image.open(osp.join(img_dir,img_name))\n",
|
194 |
-
"# display(img)\n",
|
195 |
-
" \n",
|
196 |
-
" for obj_name in set(obj_names):\n",
|
197 |
-
" objectwise_img_names.setdefault(obj_name,[]).append(full_img_name)\n",
|
198 |
-
" \n",
|
199 |
-
"print(f'Final number of images {len(imgwise_object_names)}')"
|
200 |
-
]
|
201 |
-
},
|
202 |
-
{
|
203 |
-
"cell_type": "code",
|
204 |
-
"execution_count": null,
|
205 |
-
"metadata": {
|
206 |
-
"scrolled": true
|
207 |
-
},
|
208 |
-
"outputs": [],
|
209 |
-
"source": [
|
210 |
-
"# Save the imagewise_object dict\n",
|
211 |
-
"out_path = osp.join(out_dir, 'object_per_image_dict.json')\n",
|
212 |
-
"with open(out_path, 'w') as fp:\n",
|
213 |
-
" json.dump(imgwise_object_names, fp)\n",
|
214 |
-
" print(f'saved at {out_path}')\n",
|
215 |
-
" \n",
|
216 |
-
"# # save image_list \n",
|
217 |
-
"# out_path = osp.join(out_dir, 'hico_imglist_all_140223.txt')\n",
|
218 |
-
"# with open(out_path, 'w') as f:\n",
|
219 |
-
"# f.write('\\n'.join(imgwise_object_names.keys()))\n",
|
220 |
-
"# print(f'saved at {out_path}')\n",
|
221 |
-
"\n",
|
222 |
-
"\n",
|
223 |
-
"# Save the object_wise dict\n",
|
224 |
-
"out_path = osp.join(out_dir, 'imgnames_per_object_dict.json')\n",
|
225 |
-
"with open(out_path, 'w') as fp:\n",
|
226 |
-
" json.dump(objectwise_img_names, fp)\n",
|
227 |
-
" print(f'saved at {out_path}')\n",
|
228 |
-
"\n",
|
229 |
-
" \n",
|
230 |
-
"\n",
|
231 |
-
" "
|
232 |
-
]
|
233 |
-
},
|
234 |
-
{
|
235 |
-
"cell_type": "code",
|
236 |
-
"execution_count": null,
|
237 |
-
"metadata": {},
|
238 |
-
"outputs": [],
|
239 |
-
"source": [
|
240 |
-
"import matplotlib.pyplot as plt\n",
|
241 |
-
"import seaborn as sns\n",
|
242 |
-
"\n",
|
243 |
-
"# sort the dictionary \n",
|
244 |
-
"objectwise_img_names = dict(sorted(objectwise_img_names.items(), key=lambda x: len(x[1]), reverse=True))\n",
|
245 |
-
"\n",
|
246 |
-
"# Extract object names and image counts\n",
|
247 |
-
"obj_names = list(objectwise_img_names.keys())\n",
|
248 |
-
"img_counts = [len(objectwise_img_names[obj]) for obj in objectwise_img_names]\n",
|
249 |
-
"print(sum(img_counts))\n",
|
250 |
-
"\n",
|
251 |
-
"# Create bar plot\n",
|
252 |
-
"sns.barplot(x=obj_names, y=img_counts)\n",
|
253 |
-
"\n",
|
254 |
-
"# Add x-axis and y-axis labels\n",
|
255 |
-
"plt.xlabel('Object')\n",
|
256 |
-
"plt.ylabel('Number of Images')\n",
|
257 |
-
"\n",
|
258 |
-
"plt.xticks(rotation=45, ha='right', fontsize=3)\n",
|
259 |
-
"\n",
|
260 |
-
"# Save the plot as a high-resolution image file\n",
|
261 |
-
"out_path = osp.join(out_dir, 'image_per_object_category.png')\n",
|
262 |
-
"plt.savefig(out_path, dpi=300)\n",
|
263 |
-
"\n",
|
264 |
-
"# Show plot\n",
|
265 |
-
"plt.show()"
|
266 |
-
]
|
267 |
-
},
|
268 |
-
{
|
269 |
-
"cell_type": "code",
|
270 |
-
"execution_count": null,
|
271 |
-
"metadata": {},
|
272 |
-
"outputs": [],
|
273 |
-
"source": [
|
274 |
-
"\n",
|
275 |
-
" "
|
276 |
-
]
|
277 |
-
},
|
278 |
-
{
|
279 |
-
"cell_type": "code",
|
280 |
-
"execution_count": null,
|
281 |
-
"metadata": {},
|
282 |
-
"outputs": [],
|
283 |
-
"source": []
|
284 |
-
}
|
285 |
-
],
|
286 |
-
"metadata": {
|
287 |
-
"kernelspec": {
|
288 |
-
"display_name": "Python 3",
|
289 |
-
"language": "python",
|
290 |
-
"name": "python3"
|
291 |
-
},
|
292 |
-
"language_info": {
|
293 |
-
"codemirror_mode": {
|
294 |
-
"name": "ipython",
|
295 |
-
"version": 3
|
296 |
-
},
|
297 |
-
"file_extension": ".py",
|
298 |
-
"mimetype": "text/x-python",
|
299 |
-
"name": "python",
|
300 |
-
"nbconvert_exporter": "python",
|
301 |
-
"pygments_lexer": "ipython3",
|
302 |
-
"version": "3.8.5"
|
303 |
-
}
|
304 |
-
},
|
305 |
-
"nbformat": 4,
|
306 |
-
"nbformat_minor": 4
|
307 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/.ipynb_checkpoints/vcoco_analysis-checkpoint.ipynb
DELETED
@@ -1,276 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"cells": [
|
3 |
-
{
|
4 |
-
"cell_type": "code",
|
5 |
-
"execution_count": 30,
|
6 |
-
"metadata": {},
|
7 |
-
"outputs": [],
|
8 |
-
"source": [
|
9 |
-
"import json\n",
|
10 |
-
"import pandas as pd \n",
|
11 |
-
"import ipdb\n",
|
12 |
-
"import os\n",
|
13 |
-
"import pickle as pkl\n",
|
14 |
-
"import os.path as osp\n",
|
15 |
-
"import numpy as np\n",
|
16 |
-
"from PIL import Image"
|
17 |
-
]
|
18 |
-
},
|
19 |
-
{
|
20 |
-
"cell_type": "code",
|
21 |
-
"execution_count": 31,
|
22 |
-
"metadata": {},
|
23 |
-
"outputs": [
|
24 |
-
{
|
25 |
-
"name": "stdout",
|
26 |
-
"output_type": "stream",
|
27 |
-
"text": [
|
28 |
-
"Total images found: 5459\n",
|
29 |
-
"Images after KP filtering: 2386\n",
|
30 |
-
"['vcoco_000000051899.jpg', 'vcoco_000000093127.jpg', 'vcoco_000000455665.jpg', 'vcoco_000000248389.jpg', 'vcoco_000000403947.jpg']\n"
|
31 |
-
]
|
32 |
-
}
|
33 |
-
],
|
34 |
-
"source": [
|
35 |
-
"# Load Agniv VITpose-base hot dict\n",
|
36 |
-
"filter_path = \"./agniv_pose_filter/hot_dict.pkl\"\n",
|
37 |
-
"with open(filter_path, 'rb') as f:\n",
|
38 |
-
" pose_md_dict = pkl.load(f)\n",
|
39 |
-
" \n",
|
40 |
-
"vcoco_dict = {}\n",
|
41 |
-
"\n",
|
42 |
-
"for k, v in pose_md_dict.items():\n",
|
43 |
-
" if 'vcoco' in k:\n",
|
44 |
-
" vcoco_dict[k] = v\n",
|
45 |
-
" \n",
|
46 |
-
"print(f'Total images found: {len(vcoco_dict)}')\n",
|
47 |
-
"\n",
|
48 |
-
"# Filter out images with < 10 visible keypoints \n",
|
49 |
-
"kp_thresh = 10\n",
|
50 |
-
"\n",
|
51 |
-
"filter_img_names = {}\n",
|
52 |
-
"\n",
|
53 |
-
"for imgname, kp_md in vcoco_dict.items():\n",
|
54 |
-
" if kp_md == 0:\n",
|
55 |
-
" continue\n",
|
56 |
-
" if kp_md[\"num_persons\"] == 1 and kp_md[\"num_kpt\"][0.5][0] > kp_thresh:\n",
|
57 |
-
" filter_img_names[imgname] = kp_md[\"num_kpt\"][0.5][0]\n",
|
58 |
-
" \n",
|
59 |
-
"print(f'Images after KP filtering: {len(filter_img_names)}')\n",
|
60 |
-
"\n",
|
61 |
-
"print(list(filter_img_names.keys())[:5])"
|
62 |
-
]
|
63 |
-
},
|
64 |
-
{
|
65 |
-
"cell_type": "code",
|
66 |
-
"execution_count": 35,
|
67 |
-
"metadata": {},
|
68 |
-
"outputs": [
|
69 |
-
{
|
70 |
-
"name": "stdout",
|
71 |
-
"output_type": "stream",
|
72 |
-
"text": [
|
73 |
-
"loading annotations into memory...\n",
|
74 |
-
"Done (t=1.30s)\n",
|
75 |
-
"creating index...\n",
|
76 |
-
"index created!\n",
|
77 |
-
"Final number of images 2368\n"
|
78 |
-
]
|
79 |
-
}
|
80 |
-
],
|
81 |
-
"source": [
|
82 |
-
"from pycocotools.coco import COCO\n",
|
83 |
-
"version = '1'\n",
|
84 |
-
"out_dir = f'./filtered_data/v_{version}/vcoco'\n",
|
85 |
-
"os.makedirs(out_dir, exist_ok=True)\n",
|
86 |
-
"\n",
|
87 |
-
"coco_dir = '/is/cluster/work/stripathi/pycharm_remote/v-coco/data'\n",
|
88 |
-
"coco = COCO(os.path.join(coco_dir, 'instances_vcoco_all_2014.json'))\n",
|
89 |
-
"\n",
|
90 |
-
"imgwise_object_names = {}\n",
|
91 |
-
"img_dir = '/ps/project/datasets/HOT/Contact_Data/images/training/'\n",
|
92 |
-
"\n",
|
93 |
-
"bad_object_names = ['bird', 'cat', 'dog', 'horse', 'sheep', 'cow', \n",
|
94 |
-
" 'elephant', 'bear', 'zebra', 'giraffe']\n",
|
95 |
-
"\n",
|
96 |
-
"# # Get all coco objects\n",
|
97 |
-
"# count = 0\n",
|
98 |
-
"# for id in range(91):\n",
|
99 |
-
"# try: \n",
|
100 |
-
"# print(coco.loadCats(id))\n",
|
101 |
-
"# count += 1\n",
|
102 |
-
"# except:\n",
|
103 |
-
"# print(f'ID:{id} does not exist')\n",
|
104 |
-
"# continue\n",
|
105 |
-
"# print(count)\n",
|
106 |
-
"\n",
|
107 |
-
"objectwise_img_names = {}\n",
|
108 |
-
"for img_name in filter_img_names.keys():\n",
|
109 |
-
" img_id = int(os.path.splitext(img_name.split('_')[-1])[0])\n",
|
110 |
-
" ann_ids = coco.getAnnIds([img_id])\n",
|
111 |
-
" anns = coco.loadAnns(ann_ids)\n",
|
112 |
-
" object_list = []\n",
|
113 |
-
" for ann in anns:\n",
|
114 |
-
" object_cat = coco.loadCats(ann[\"category_id\"])\n",
|
115 |
-
" if len(object_cat) > 1:\n",
|
116 |
-
" ipdb.set_trace()\n",
|
117 |
-
" object_name = object_cat[0]['name']\n",
|
118 |
-
" if object_name in bad_object_names:\n",
|
119 |
-
" continue\n",
|
120 |
-
" if object_name != 'person':\n",
|
121 |
-
" object_list.append(object_name)\n",
|
122 |
-
" if len(object_list) != 0:\n",
|
123 |
-
" imgwise_object_names[img_name] = list(set(object_list))\n",
|
124 |
-
" \n",
|
125 |
-
" for obj_name in set(object_list):\n",
|
126 |
-
" objectwise_img_names.setdefault(obj_name,[]).append(img_name)\n",
|
127 |
-
" \n",
|
128 |
-
"# # Visualize images \n",
|
129 |
-
"# print(img_name)\n",
|
130 |
-
"# print(list(set(object_list)))\n",
|
131 |
-
"# img = Image.open(osp.join(img_dir,img_name))\n",
|
132 |
-
"# display(img)\n",
|
133 |
-
" \n",
|
134 |
-
" \n",
|
135 |
-
"print(f'Final number of images {len(imgwise_object_names)}')\n",
|
136 |
-
" \n"
|
137 |
-
]
|
138 |
-
},
|
139 |
-
{
|
140 |
-
"cell_type": "code",
|
141 |
-
"execution_count": 36,
|
142 |
-
"metadata": {
|
143 |
-
"scrolled": true
|
144 |
-
},
|
145 |
-
"outputs": [
|
146 |
-
{
|
147 |
-
"name": "stdout",
|
148 |
-
"output_type": "stream",
|
149 |
-
"text": [
|
150 |
-
"saved at ./filtered_data/v_1/vcoco/object_per_image_dict.json\n",
|
151 |
-
"saved at ./filtered_data/v_1/vcoco/vcoco_imglist_all_170223.txt\n",
|
152 |
-
"saved at ./filtered_data/v_1/vcoco/imgnames_per_object_dict.json\n"
|
153 |
-
]
|
154 |
-
}
|
155 |
-
],
|
156 |
-
"source": [
|
157 |
-
"# Save the imagewise_object dict\n",
|
158 |
-
"out_path = osp.join(out_dir, 'object_per_image_dict.json')\n",
|
159 |
-
"with open(out_path, 'w') as fp:\n",
|
160 |
-
" json.dump(imgwise_object_names, fp)\n",
|
161 |
-
" print(f'saved at {out_path}')\n",
|
162 |
-
" \n",
|
163 |
-
"# save image_list \n",
|
164 |
-
"out_path = osp.join(out_dir, 'vcoco_imglist_all_170223.txt')\n",
|
165 |
-
"with open(out_path, 'w') as f:\n",
|
166 |
-
" f.write('\\n'.join(imgwise_object_names.keys()))\n",
|
167 |
-
" print(f'saved at {out_path}')\n",
|
168 |
-
"\n",
|
169 |
-
"\n",
|
170 |
-
"# Save the object_wise dict\n",
|
171 |
-
"out_path = osp.join(out_dir, 'imgnames_per_object_dict.json')\n",
|
172 |
-
"with open(out_path, 'w') as fp:\n",
|
173 |
-
" json.dump(objectwise_img_names, fp)\n",
|
174 |
-
" print(f'saved at {out_path}')\n",
|
175 |
-
"\n",
|
176 |
-
" \n",
|
177 |
-
"\n",
|
178 |
-
" "
|
179 |
-
]
|
180 |
-
},
|
181 |
-
{
|
182 |
-
"cell_type": "code",
|
183 |
-
"execution_count": 37,
|
184 |
-
"metadata": {
|
185 |
-
"scrolled": false
|
186 |
-
},
|
187 |
-
"outputs": [
|
188 |
-
{
|
189 |
-
"name": "stdout",
|
190 |
-
"output_type": "stream",
|
191 |
-
"text": [
|
192 |
-
"5072\n"
|
193 |
-
]
|
194 |
-
},
|
195 |
-
{
|
196 |
-
"data": {
|
197 |
-
"image/png": "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\n",
|
198 |
-
"text/plain": [
|
199 |
-
"<Figure size 432x288 with 1 Axes>"
|
200 |
-
]
|
201 |
-
},
|
202 |
-
"metadata": {
|
203 |
-
"needs_background": "light"
|
204 |
-
},
|
205 |
-
"output_type": "display_data"
|
206 |
-
}
|
207 |
-
],
|
208 |
-
"source": [
|
209 |
-
"import matplotlib.pyplot as plt\n",
|
210 |
-
"import seaborn as sns\n",
|
211 |
-
"\n",
|
212 |
-
"# sort the dictionary \n",
|
213 |
-
"objectwise_img_names = dict(sorted(objectwise_img_names.items(), key=lambda x: len(x[1]), reverse=True))\n",
|
214 |
-
"\n",
|
215 |
-
"# Extract object names and image counts\n",
|
216 |
-
"obj_names = list(objectwise_img_names.keys())\n",
|
217 |
-
"img_counts = [len(objectwise_img_names[obj]) for obj in objectwise_img_names]\n",
|
218 |
-
"print(sum(img_counts))\n",
|
219 |
-
"\n",
|
220 |
-
"# Create bar plot\n",
|
221 |
-
"sns.barplot(x=obj_names, y=img_counts)\n",
|
222 |
-
"\n",
|
223 |
-
"# Add x-axis and y-axis labels\n",
|
224 |
-
"plt.xlabel('Object')\n",
|
225 |
-
"plt.ylabel('Number of Images')\n",
|
226 |
-
"\n",
|
227 |
-
"plt.xticks(rotation=45, ha='right', fontsize=3)\n",
|
228 |
-
"\n",
|
229 |
-
"# Save the plot as a high-resolution image file\n",
|
230 |
-
"out_path = osp.join(out_dir, 'image_per_object_category.png')\n",
|
231 |
-
"plt.savefig(out_path, dpi=300)\n",
|
232 |
-
"\n",
|
233 |
-
"# Show plot\n",
|
234 |
-
"plt.show()"
|
235 |
-
]
|
236 |
-
},
|
237 |
-
{
|
238 |
-
"cell_type": "code",
|
239 |
-
"execution_count": null,
|
240 |
-
"metadata": {},
|
241 |
-
"outputs": [],
|
242 |
-
"source": [
|
243 |
-
"\n",
|
244 |
-
" "
|
245 |
-
]
|
246 |
-
},
|
247 |
-
{
|
248 |
-
"cell_type": "code",
|
249 |
-
"execution_count": null,
|
250 |
-
"metadata": {},
|
251 |
-
"outputs": [],
|
252 |
-
"source": []
|
253 |
-
}
|
254 |
-
],
|
255 |
-
"metadata": {
|
256 |
-
"kernelspec": {
|
257 |
-
"display_name": "Python 3",
|
258 |
-
"language": "python",
|
259 |
-
"name": "python3"
|
260 |
-
},
|
261 |
-
"language_info": {
|
262 |
-
"codemirror_mode": {
|
263 |
-
"name": "ipython",
|
264 |
-
"version": 3
|
265 |
-
},
|
266 |
-
"file_extension": ".py",
|
267 |
-
"mimetype": "text/x-python",
|
268 |
-
"name": "python",
|
269 |
-
"nbconvert_exporter": "python",
|
270 |
-
"pygments_lexer": "ipython3",
|
271 |
-
"version": "3.8.5"
|
272 |
-
}
|
273 |
-
},
|
274 |
-
"nbformat": 4,
|
275 |
-
"nbformat_minor": 4
|
276 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/agniv_pose_filter/hico.npy
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:b01acf6e31dad34eb1e48277e227ea0668f17905f55eae44b640cc1d14a9e41c
|
3 |
-
size 520245
|
|
|
|
|
|
|
|
hot_analysis/agniv_pose_filter/hot.npy
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:64872b84670cb2ec643f1649e1a7926aed950adcb8f6f952916924bc4ab10f37
|
3 |
-
size 731363
|
|
|
|
|
|
|
|
hot_analysis/agniv_pose_filter/hot_dict.pkl
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:f0c0a6e35bf87e98327189ef8d732aa19b0d1c85c963c1ee348e1e466864845e
|
3 |
-
size 3679000
|
|
|
|
|
|
|
|
hot_analysis/agniv_pose_filter/pq_wnp.npy
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:7cad59d5aaf077141d60a492c3784d8994d53f4dfd020f9eb4e11b3e430ef65d
|
3 |
-
size 25433
|
|
|
|
|
|
|
|
hot_analysis/agniv_pose_filter/vcoco.npy
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:14cc34940ff4a61cfc952d8c5b98e0e7b1a58392177198fa4589f8b2bcead02a
|
3 |
-
size 184801
|
|
|
|
|
|
|
|
hot_analysis/count_objects_per_img.py
DELETED
@@ -1,35 +0,0 @@
|
|
1 |
-
# get average number of objects per image
|
2 |
-
import os.path as osp
|
3 |
-
import json
|
4 |
-
import plotly.express as px
|
5 |
-
import plotly.io as pio
|
6 |
-
|
7 |
-
version = '1'
|
8 |
-
dir = '/is/cluster/work/stripathi/pycharm_remote/dca_contact/hot_analysis/'
|
9 |
-
out_dir_hico = osp.join(dir, f'filtered_data/v_{version}/hico')
|
10 |
-
out_dir_vcoco = osp.join(dir, f'filtered_data/v_{version}/vcoco')
|
11 |
-
|
12 |
-
imgwise_obj_dict_hico = osp.join(out_dir_hico, 'object_per_image_dict.json')
|
13 |
-
imgwise_obj_dict_vcoco = osp.join(out_dir_vcoco, 'object_per_image_dict.json')
|
14 |
-
|
15 |
-
with open(imgwise_obj_dict_hico, 'r') as fp:
|
16 |
-
imgwise_obj_dict_hico = json.load(fp)
|
17 |
-
with open(imgwise_obj_dict_vcoco, 'r') as fp:
|
18 |
-
imgwise_obj_dict_vcoco = json.load(fp)
|
19 |
-
|
20 |
-
# combine the dicts
|
21 |
-
imgwise_obj_dict = imgwise_obj_dict_hico.copy()
|
22 |
-
imgwise_obj_dict.update(imgwise_obj_dict_vcoco)
|
23 |
-
|
24 |
-
# get average length of object in the object per image key
|
25 |
-
avg_obj_per_img = sum([len(v) for v in imgwise_obj_dict.values()]) / len(imgwise_obj_dict)
|
26 |
-
print(f'Average number of objects per image: {avg_obj_per_img}')
|
27 |
-
|
28 |
-
# get average searately for hico and vcoco
|
29 |
-
avg_obj_per_img_hico = sum([len(v) for v in imgwise_obj_dict_hico.values()]) / len(imgwise_obj_dict_hico)
|
30 |
-
print(f'Average number of objects per image in hico: {avg_obj_per_img_hico}')
|
31 |
-
|
32 |
-
avg_obj_per_img_vcoco = sum([len(v) for v in imgwise_obj_dict_vcoco.values()]) / len(imgwise_obj_dict_vcoco)
|
33 |
-
print(f'Average number of objects per image in vcoco: {avg_obj_per_img_vcoco}')
|
34 |
-
|
35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/create_combined_objectwise_plots.ipynb
DELETED
@@ -1,291 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"cells": [
|
3 |
-
{
|
4 |
-
"cell_type": "code",
|
5 |
-
"execution_count": 22,
|
6 |
-
"id": "1738c3a5",
|
7 |
-
"metadata": {
|
8 |
-
"scrolled": true
|
9 |
-
},
|
10 |
-
"outputs": [],
|
11 |
-
"source": [
|
12 |
-
"import os.path as osp\n",
|
13 |
-
"import json\n",
|
14 |
-
"import os\n",
|
15 |
-
"\n",
|
16 |
-
"version = '1'\n",
|
17 |
-
"out_dir_hico = f'./filtered_data/v_{version}/hico'\n",
|
18 |
-
"out_dir_vcoco = f'./filtered_data/v_{version}/vcoco'\n",
|
19 |
-
"out_dir_phosa = f'./filtered_data/v_{version}/phosa_split'\n",
|
20 |
-
"out_dir_behave = f'./filtered_data/v_{version}/behave_split'\n",
|
21 |
-
"\n",
|
22 |
-
"objectwise_img_dict_hico = osp.join(out_dir_hico, 'imgnames_per_object_dict.json')\n",
|
23 |
-
"objectwise_img_dict_vcoco = osp.join(out_dir_vcoco, 'imgnames_per_object_dict.json')\n",
|
24 |
-
"\n",
|
25 |
-
"with open(objectwise_img_dict_hico, 'r') as fp:\n",
|
26 |
-
" objectwise_img_dict_hico = json.load(fp)\n",
|
27 |
-
"with open(objectwise_img_dict_vcoco, 'r') as fp:\n",
|
28 |
-
" objectwise_img_dict_vcoco = json.load(fp)\n",
|
29 |
-
"\n",
|
30 |
-
"# sort the dictionary \n",
|
31 |
-
"objectwise_img_names1 = dict(sorted(objectwise_img_dict_hico.items(), key=lambda x: len(x[1]), reverse=True))\n",
|
32 |
-
"\n",
|
33 |
-
"# # Extract object names and image counts\n",
|
34 |
-
"# obj_names1 = list(objectwise_img_names_hico.keys())\n",
|
35 |
-
"# print(sorted(obj_names1))\n",
|
36 |
-
"# image_count1 = [len(objectwise_img_names_hico[obj]) for obj in objectwise_img_names_hico]\n",
|
37 |
-
"# print(sum(image_count1))\n",
|
38 |
-
"\n",
|
39 |
-
"# sort the dictionary \n",
|
40 |
-
"objectwise_img_names2 = dict(sorted(objectwise_img_dict_vcoco.items(), key=lambda x: len(x[1]), reverse=True))\n",
|
41 |
-
"\n",
|
42 |
-
"# # Extract object names and image counts\n",
|
43 |
-
"# obj_names2 = list(objectwise_img_names_vcoco.keys())\n",
|
44 |
-
"# print(sorted(obj_names2))\n",
|
45 |
-
"# image_count2 = [len(objectwise_img_names_vcoco[obj]) for obj in objectwise_img_names_vcoco]\n",
|
46 |
-
"# print(sum(image_count2))\n",
|
47 |
-
"\n"
|
48 |
-
]
|
49 |
-
},
|
50 |
-
{
|
51 |
-
"cell_type": "code",
|
52 |
-
"execution_count": 18,
|
53 |
-
"id": "2d6ad5ed",
|
54 |
-
"metadata": {},
|
55 |
-
"outputs": [
|
56 |
-
{
|
57 |
-
"name": "stdout",
|
58 |
-
"output_type": "stream",
|
59 |
-
"text": [
|
60 |
-
"2119\n",
|
61 |
-
"saved at ./filtered_data/v_1/phosa_split/imgnames_per_object_dict.json\n"
|
62 |
-
]
|
63 |
-
}
|
64 |
-
],
|
65 |
-
"source": [
|
66 |
-
"# Extract image list for object in PHOSA\n",
|
67 |
-
"def merge_dictionaries(dict1, dict2):\n",
|
68 |
-
" merged_dict = {}\n",
|
69 |
-
"\n",
|
70 |
-
" # Merge values for common keys\n",
|
71 |
-
" for key in set(dict1.keys()) | set(dict2.keys()):\n",
|
72 |
-
" merged_dict[key] = list(set(dict1.get(key, [])) | set(dict2.get(key, [])))\n",
|
73 |
-
"\n",
|
74 |
-
" return merged_dict\n",
|
75 |
-
"\n",
|
76 |
-
"def filter_dictionary(dictionary, keys):\n",
|
77 |
-
" filtered_dict = {key: dictionary[key] for key in keys if key in dictionary}\n",
|
78 |
-
" return filtered_dict\n",
|
79 |
-
"\n",
|
80 |
-
"phosa_object_names = [\"bat\", \"bench\", \"bicycle\", \"laptop\", \"motorcycle\", \"skateboard\", \"surfboard\", \"tennis\"]\n",
|
81 |
-
"combined_objectwise_img_names = merge_dictionaries(objectwise_img_names1, objectwise_img_names2)\n",
|
82 |
-
"phosa_objectwise_img_names = filter_dictionary(combined_objectwise_img_names, phosa_object_names)\n",
|
83 |
-
"net_img_count = 0\n",
|
84 |
-
"for v in phosa_objectwise_img_names.values():\n",
|
85 |
-
" net_img_count += len(v)\n",
|
86 |
-
"print(net_img_count)\n",
|
87 |
-
"# Save the object_wise dict\n",
|
88 |
-
"os.makedirs(out_dir_phosa, exist_ok=True)\n",
|
89 |
-
"out_path_phosa = osp.join(out_dir_phosa, 'imgnames_per_object_dict.json')\n",
|
90 |
-
"with open(out_path_phosa, 'w') as fp:\n",
|
91 |
-
" json.dump(phosa_objectwise_img_names, fp)\n",
|
92 |
-
" print(f'saved at {out_path_phosa}')\n",
|
93 |
-
" \n",
|
94 |
-
" "
|
95 |
-
]
|
96 |
-
},
|
97 |
-
{
|
98 |
-
"cell_type": "code",
|
99 |
-
"execution_count": 23,
|
100 |
-
"id": "3f2a5e62",
|
101 |
-
"metadata": {},
|
102 |
-
"outputs": [
|
103 |
-
{
|
104 |
-
"name": "stdout",
|
105 |
-
"output_type": "stream",
|
106 |
-
"text": [
|
107 |
-
"saved at ./filtered_data/v_1/behave_split/imgnames_per_object_dict.json\n"
|
108 |
-
]
|
109 |
-
}
|
110 |
-
],
|
111 |
-
"source": [
|
112 |
-
"# Extract image list for object in CHORE\n",
|
113 |
-
"\n",
|
114 |
-
"behave_object_names_original = [\"backpack\", \"basketball\", \"boxlarge\", \"boxlong\", \"boxmedium\", \"boxsmall\", \"boxtiny\", \"chairblack\", \"chairwood\", \"keyboard\", \"monitor\", \"plasticcontainer\", \"stool\", \"suitcase\", \"tablesmall\", \"tablesquare\", \"toolbox\", \"trashbin\", \"yogaball\", \"yogamat\"]\n",
|
115 |
-
"behave_object_names_in_hot = [\"backpack\", \"chair\", \"keyboard\", \"suitcase\"]\n",
|
116 |
-
"\n",
|
117 |
-
"combined_objectwise_img_names = merge_dictionaries(objectwise_img_names1, objectwise_img_names2)\n",
|
118 |
-
"behave_objectwise_img_names = filter_dictionary(combined_objectwise_img_names, behave_object_names_in_hot)\n",
|
119 |
-
"net_img_count = 0\n",
|
120 |
-
"for v in behave_objectwise_img_names.values():\n",
|
121 |
-
" net_img_count += len(v)\n",
|
122 |
-
"\n",
|
123 |
-
"# Save the object_wise dict\n",
|
124 |
-
"os.makedirs(out_dir_behave, exist_ok=True)\n",
|
125 |
-
"out_path_behave = osp.join(out_dir_behave, 'imgnames_per_object_dict.json')\n",
|
126 |
-
"with open(out_path_behave, 'w') as fp:\n",
|
127 |
-
" json.dump(behave_objectwise_img_names, fp)\n",
|
128 |
-
" print(f'saved at {out_path_behave}')"
|
129 |
-
]
|
130 |
-
},
|
131 |
-
{
|
132 |
-
"cell_type": "code",
|
133 |
-
"execution_count": 3,
|
134 |
-
"id": "730e9ac2",
|
135 |
-
"metadata": {},
|
136 |
-
"outputs": [
|
137 |
-
{
|
138 |
-
"ename": "ModuleNotFoundError",
|
139 |
-
"evalue": "No module named 'seaborn'",
|
140 |
-
"output_type": "error",
|
141 |
-
"traceback": [
|
142 |
-
"\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
|
143 |
-
"\u001B[0;31mModuleNotFoundError\u001B[0m Traceback (most recent call last)",
|
144 |
-
"Cell \u001B[0;32mIn[3], line 2\u001B[0m\n\u001B[1;32m 1\u001B[0m \u001B[38;5;28;01mimport\u001B[39;00m \u001B[38;5;21;01mmatplotlib\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mpyplot\u001B[39;00m \u001B[38;5;28;01mas\u001B[39;00m \u001B[38;5;21;01mplt\u001B[39;00m\n\u001B[0;32m----> 2\u001B[0m \u001B[38;5;28;01mimport\u001B[39;00m \u001B[38;5;21;01mseaborn\u001B[39;00m \u001B[38;5;28;01mas\u001B[39;00m \u001B[38;5;21;01msns\u001B[39;00m\n\u001B[1;32m 4\u001B[0m \u001B[38;5;66;03m# sort the dictionary \u001B[39;00m\n\u001B[1;32m 5\u001B[0m objectwise_img_names1 \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mdict\u001B[39m(\u001B[38;5;28msorted\u001B[39m(objectwise_img_names1\u001B[38;5;241m.\u001B[39mitems(), key\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mlambda\u001B[39;00m x: \u001B[38;5;28mlen\u001B[39m(x[\u001B[38;5;241m1\u001B[39m]), reverse\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mTrue\u001B[39;00m))\n",
|
145 |
-
"\u001B[0;31mModuleNotFoundError\u001B[0m: No module named 'seaborn'"
|
146 |
-
]
|
147 |
-
}
|
148 |
-
],
|
149 |
-
"source": [
|
150 |
-
"import matplotlib.pyplot as plt\n",
|
151 |
-
"import seaborn as sns\n",
|
152 |
-
"\n",
|
153 |
-
"# sort the dictionary \n",
|
154 |
-
"objectwise_img_names1 = dict(sorted(objectwise_img_names1.items(), key=lambda x: len(x[1]), reverse=True))\n",
|
155 |
-
"\n",
|
156 |
-
"# Extract object names and image counts\n",
|
157 |
-
"obj_names1 = list(objectwise_img_names1.keys())\n",
|
158 |
-
"print(obj_names1)\n",
|
159 |
-
"img_counts1 = [len(objectwise_img_names1[obj]) for obj in objectwise_img_names1]\n",
|
160 |
-
"print(sum(img_counts1))\n",
|
161 |
-
"\n",
|
162 |
-
"# sort the dictionary \n",
|
163 |
-
"objectwise_img_names2 = dict(sorted(objectwise_img_names2.items(), key=lambda x: len(x[1]), reverse=True))\n",
|
164 |
-
"\n",
|
165 |
-
"# Extract object names and image counts\n",
|
166 |
-
"obj_names2 = list(objectwise_img_names2.keys())\n",
|
167 |
-
"print(obj_names2)\n",
|
168 |
-
"img_counts2 = [len(objectwise_img_names2[obj]) for obj in objectwise_img_names2]\n",
|
169 |
-
"print(sum(img_counts2))\n",
|
170 |
-
"\n",
|
171 |
-
"# Create a figure with two subplots\n",
|
172 |
-
"fig, axs = plt.subplots(nrows=2, sharex=True, figsize=(10, 8))\n",
|
173 |
-
"\n",
|
174 |
-
"# Plot the first graph in the first subplot\n",
|
175 |
-
"sns.barplot(x=obj_names1, y=img_counts1, ax=axs[0])\n",
|
176 |
-
"\n",
|
177 |
-
"# Add y-axis label to the first subplot\n",
|
178 |
-
"axs[0].set_ylabel('Number of Images')\n",
|
179 |
-
"\n",
|
180 |
-
"# Set the rotation and alignment of x-tick labels in the first subplot\n",
|
181 |
-
"axs[0].tick_params(axis='x', rotation=45)\n",
|
182 |
-
"\n",
|
183 |
-
"# Plot the second graph in the second subplot\n",
|
184 |
-
"sns.barplot(x=obj_names2, y=img_counts2, ax=axs[1])\n",
|
185 |
-
"\n",
|
186 |
-
"# Add x-axis and y-axis labels to the second subplot\n",
|
187 |
-
"axs[1].set_xlabel('Object')\n",
|
188 |
-
"axs[1].set_ylabel('Number of Images')\n",
|
189 |
-
"\n",
|
190 |
-
"# Set the rotation and alignment of x-tick labels in the second subplot\n",
|
191 |
-
"axs[1].tick_params(axis='x', rotation=45)\n",
|
192 |
-
"\n",
|
193 |
-
"# Save the plot as a high-resolution image file\n",
|
194 |
-
"out_path = osp.join(out_dir, 'image_per_object_category.png')\n",
|
195 |
-
"plt.savefig(out_path, dpi=300)\n",
|
196 |
-
"\n",
|
197 |
-
"# Show the plot\n",
|
198 |
-
"plt.show()\n",
|
199 |
-
"\n"
|
200 |
-
]
|
201 |
-
},
|
202 |
-
{
|
203 |
-
"cell_type": "code",
|
204 |
-
"execution_count": 6,
|
205 |
-
"id": "23c503dd",
|
206 |
-
"metadata": {},
|
207 |
-
"outputs": [
|
208 |
-
{
|
209 |
-
"name": "stderr",
|
210 |
-
"output_type": "stream",
|
211 |
-
"text": [
|
212 |
-
"/tmp/ipykernel_135310/1442551168.py:22: UserWarning: FixedFormatter should only be used together with FixedLocator\n",
|
213 |
-
" ax.set_xticklabels(X1)\n"
|
214 |
-
]
|
215 |
-
},
|
216 |
-
{
|
217 |
-
"data": {
|
218 |
-
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1EAAALCCAYAAAA/AFnzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUsklEQVR4nO3deVyU5f7/8fcAMiKrGioUAhJppR1PZXXcyCVtsdL6tZipaC7ZappbJ/cKMYvqmJZZaracFivrtGCZS9FipZ7UMnEBSSp32RTEuX9/9GWOyKBcOXCzvJ6Ph49Hc9/X3NfnnrkaeHPf1zUOy7IsAQAAAAAqxMfuAgAAAACgJiFEAQAAAIABQhQAAAAAGCBEAQAAAIABQhQAAAAAGCBEAQAAAIABQhQAAAAAGCBEAQAAAIABQhQAAAAAGCBEAYCkxMRExcTEVNrxL7/8cl1++eWVdnxvmzJlihwOh/bu3VtpfWRkZMjhcGjhwoUnbbdw4UI5HA59//33lVZLTZWYmKigoKAq6Wvx4sVq1aqV6tWrp7CwsCrps7pwOByaMmWK3WUAqEYIUQBsc91116lBgwbKzc0tt02/fv3k7++vffv2nXZ/2dnZmjJlitavX3/ax7JLbTgH1DybN29WYmKi4uLi9MILL2jevHll2hw9elRt2rRRXFycDh8+XGZ/RkaGGjRooJtuukmSlJeXp8mTJ+vKK69Uo0aNKhSoq6sZM2bI4XAoNTXV4/6rr75aoaGhys7O1r59+/T444+rc+fOCg8PV1hYmC677DK98cYbVVw1gNNBiAJgm379+unw4cN69913Pe4vKCjQ0qVLdeWVV6px48an3V92dramTp3qMYC88MIL+uWXX067j8p2snMAKsvKlSvlcrn09NNPKzExUTfffHOZNvXq1dO8efO0Y8cOTZ8+vcz+e+65R/7+/nrmmWckSXv37tW0adP0888/629/+1uln0NlGj16tNq0aaO77rqrTIB866239PHHHyspKUmRkZH6+uuv9c9//lONGjXSww8/rEcffVQNGjTQrbfeqsmTJ9t0BgBMEaIA2Oa6665TcHCwXnvtNY/7ly5dqvz8fPXr1++0+ikuLlZRUdFJ29SrV09Op/O0+kHNVlBQUCnHrcj4q+52794tSae8je8f//iH7rzzTs2aNUubNm1yb1+yZIk+/PBDJSUlKSIiQpIUERGh3377TZmZmXr88ccrrfaqUBIgMzIySgXI3NxcjRw5UpdddpnuvPNOSdL555+v9PR0vffee7r//vt19913a/ny5eratauSk5OVn59v12kAMECIAmCbgIAA3XDDDVq+fLn7l7TjvfbaawoODtZ1110nSTp48KBGjhypqKgoOZ1OnX322UpOTpbL5XI/p2SezaxZs/TUU08pLi5OTqdTc+bMUbt27SRJgwYNksPhKHX7kKc5USV/eW/Tpo3q16+v8PBwXXnllaXm5ixYsEBdu3ZVkyZN5HQ6dd5552nu3Ll/+TX59NNP1bFjR4WFhSkoKEgtW7bUQw89JOnPqwEnO4cvvvhCN910k5o3by6n06moqCg98MADHm+t2rx5s26++WaFh4crICBALVu21D//+c+T1paZmamzzz5brVu31h9//CGpYu9JSbvExESFhoYqLCxMAwcO1MGDB41em4KCAg0fPlyNGzdWSEiIBgwYoAMHDpRqs3TpUl1zzTWKjIyU0+lUXFycpk+frmPHjpVqd/nll6t169b64Ycf1LlzZzVo0MD9Opfnrbfe0nnnnaf69eurdevWevfdd8uMm/LG308//aSioiJNmjRJF110kUJDQxUYGKhOnTppxYoVpfo5/hgpKSmKjo5WQECAEhIStHHjRo+17dq1S71791ZQUJDCw8P14IMPljnn8syZM0fnn3++nE6nIiMjdffdd5d6b2JiYtxXSMLDw085PygpKUlnnHGG7rzzTlmWpby8PI0cOdIdsEo4nU41a9asQjV68uOPPyoxMVEtWrRQ/fr11axZMw0ePLjMrb8l8/u2bt2qxMREhYWFKTQ0VIMGDSoTnAsLC/XAAw8oPDzc/dnz66+/VqiekqA0a9Ys/fTTT5Kkhx9+WLt379a8efPk4/Pnr1yxsbGKjo4u9VyHw6HevXursLBQ27dv/6svCYAq5Gd3AQDqtn79+mnRokV68803dc8997i379+/X6mpqerbt68CAgJUUFCghIQE7dq1S8OHD1fz5s311VdfacKECfrtt9/01FNPlTruggULdOTIEQ0bNkxOp1N9+vRRbm6uJk2apGHDhqlTp06SpPbt25db2x133KGFCxfqqquu0pAhQ1RcXKwvvvhC33zzjS6++GJJ0ty5c3X++efruuuuk5+fnz744APdddddcrlcuvvuu41ei02bNqlXr1664IILNG3aNDmdTm3dulVpaWmSpHPPPVfTpk0r9xzeeustFRQUaMSIEWrcuLHWrFmjf/3rX/r111/11ltvufv58ccf1alTJ9WrV0/Dhg1TTEyMtm3bpg8++ECPPvqox9q2bdumrl27qlGjRvr00091xhlnVPg9sSxL119/vb788kvdeeedOvfcc/Xuu+9q4MCBRq/PPffco7CwME2ZMkW//PKL5s6dq8zMTK1cuVIOh0PSn4tQBAUFadSoUQoKCtLnn3+uSZMmKScnp8zVjn379umqq67Srbfeqttvv11NmzYtt+8PP/xQt9xyi9q0aaOkpCQdOHBAd9xxh84880yP7U8cf40aNVJOTo7mz5+vvn37aujQocrNzdWLL76onj17as2aNWrbtm2pY7z88svKzc3V3XffrSNHjujpp59W165dtWHDhlK1Hjt2TD179tSll16qWbNm6bPPPtMTTzyhuLg4jRgx4qSv6ZQpUzR16lR1795dI0aMcL+u3333ndLS0lSvXj099dRTevnll/Xuu+9q7ty5CgoK0gUXXFDuMUNDQ/XMM8/opptu0vz58/XTTz/pjz/+0Mcff+x+n7zh008/1fbt2zVo0CA1a9ZMmzZt0rx587Rp0yZ98803Zfq6+eabFRsbq6SkJK1du1bz589XkyZNlJyc7G4zZMgQvfLKK7rtttvUvn17ff7557rmmmsqXFNSUpLee+89DR8+XE899ZSeffZZjRkzRm3atDnlc3///XdJ0hlnnFHh/gDYyAIAGxUXF1sRERHWP/7xj1Lbn3vuOUuSlZqaalmWZU2fPt0KDAy0tmzZUqrd+PHjLV9fX2vnzp2WZVnWjh07LElWSEiItXv37lJtv/vuO0uStWDBgjJ1DBw40IqOjnY//vzzzy1J1n333Vemrcvlcv93QUFBmf09e/a0WrRoUWpbQkKClZCQUPYFOE5KSoolydqzZ0+5bU52Dp5qSUpKshwOh5WZmene1rlzZys4OLjUNssqfV6TJ0921/Lzzz9bkZGRVrt27az9+/e721T0PXnvvfcsSdbMmTPdbYqLi61OnTqVey7HW7BggSXJuuiii6yioiL39pkzZ1qSrKVLl570NRg+fLjVoEED68iRI+5tCQkJliTrueeeO2nfJdq0aWOdddZZVm5urnvbypUrLUmlxs3Jxl9xcbFVWFhYatuBAwespk2bWoMHDy5zjICAAOvXX391b//2228tSdYDDzzg3jZw4EBLkjVt2rRSx/373/9uXXTRRSc9p927d1v+/v5Wjx49rGPHjrm3z54925JkvfTSS+5tx4+HiurVq5cVGhpq+fr6WhMmTDhp25ON6/J4eq9ff/11S5K1evXqMrUf/xpblmX16dPHaty4sfvx+vXrLUnWXXfdVardbbfdZkmyJk+eXKG63n77bUuS1ahRI6tFixYe6zzRvn37rCZNmlidOnWqUB8A7MftfABs5evrq1tvvVVff/21MjIy3Ntfe+01NW3aVN26dZP051WWTp06qWHDhtq7d6/7X/fu3XXs2DGtXr261HFvvPFGhYeH/+W6lixZIofD4XGi9/F/4Q4ICHD/96FDh7R3714lJCRo+/btOnTokFGfJfNNli5dWuZ2uIo4vpb8/Hzt3btX7du3l2VZWrdunSRpz549Wr16tQYPHqzmzZuXer6nqwQbN25UQkKCYmJi9Nlnn6lhw4bufRV9Tz766CP5+fmVuiri6+ure++91+j8hg0bpnr16rkfjxgxQn5+fvroo488vga5ubnau3evOnXqpIKCAm3evLnU8ZxOpwYNGnTKfrOzs7VhwwYNGDCg1HLiCQkJ5V5h8DT+fH195e/vL+nPW0X379+v4uJiXXzxxVq7dm2ZY/Tu3bvUla5LLrlEl156aanzLXH8bXKS1KlTp1PeFvbZZ5+pqKhII0eOdN9qJklDhw5VSEiIPvzww5M+/1SeffZZFRUVKSoqShMnTjytY3ly/Ht95MgR7d27V5dddpkkeXw9Pb1G+/btU05OjiS5X9f77ruvVLuRI0ca1XXjjTfq6quv1v79+/Xss8+WqtMTl8ulfv366eDBg/rXv/5l1BcA+xCiANiuZOGIkgUmfv31V33xxRe69dZb5evrK0lKT0/XJ598ovDw8FL/unfvLkll5lTFxsaeVk3btm1TZGSkGjVqdNJ2aWlp6t69uwIDAxUWFqbw8HD33BrTEHXLLbeoQ4cOGjJkiJo2bapbb71Vb775ZoUD1c6dO5WYmKhGjRq558YkJCSUqqXkF+vWrVtX6JjXXnutgoODlZqaqpCQkFL7KvqeZGZmKiIiosz3GbVs2bJCNZSIj48v9TgoKEgRERGlwvemTZvUp08fhYaGKiQkROHh4br99tsllX0/zjzzTHeoOZnMzExJ0tlnn11mn6dtUvnjb9GiRbrgggtUv359NW7cWOHh4frwww89jpUTz1eSzjnnnFLnK8k9X+94DRs2LDNf7EQl53Xi++Dv768WLVq49/9VzZs3V5MmTXT++eefMkj8Ffv379f999+vpk2bKiAgQOHh4e7X3dPreeIfDUr+IFDyOmVmZsrHx0dxcXGl2pmOU0nuuYslt/2ezL333qtPPvlE8+fPr/GrFAJ1CXOiANjuoosuUqtWrfT666/roYce0uuvvy7LskqtyudyuXTFFVdo7NixHo9xzjnnlHpcGb+0nWjbtm3q1q2bWrVqpSeffFJRUVHy9/fXRx99pJSUFOOrSQEBAVq9erVWrFihDz/8UJ988oneeOMNde3aVcuWLXMHSk+OHTumK664Qvv379e4cePUqlUrBQYGateuXUpMTPxLV7akP/+qvmjRIr366qsaPnx4qX2m70llO3jwoBISEhQSEqJp06YpLi5O9evX19q1azVu3Lgyr0FljhFPx37llVeUmJio3r17a8yYMWrSpIl8fX2VlJSkbdu2/eW+TjYuarObb75ZX331lcaMGaO2bdsqKChILpdLV155pcfxXt7rZFlWZZdarqlTp2rOnDmaMWOG+vfvb1sdAMwRogBUC/369dPEiRP1448/6rXXXlN8fLz7r7mSFBcXp7y8PPdVjr/CZFJ7XFycUlNTtX///nKvRn3wwQcqLCzU+++/X+qv3CeutmbCx8dH3bp1U7du3fTkk0/qscce0z//+U+tWLFC3bt3L/ccNmzYoC1btmjRokUaMGCAe/unn35aql2LFi0kqdxV3k70+OOPy8/PT3fddZeCg4N12223ufdV9D2Jjo7W8uXLlZeXV+pqlOn3cqWnp6tLly7ux3l5efrtt9909dVXS/pz9cJ9+/bpnXfeUefOnd3tduzYYdSPp/olaevWrWX2edpWnrffflstWrTQO++8U+p9LO+7gdLT08ts27JlS5lVJP+qkvP65Zdf3ONCkoqKirRjx47T+n+tsh04cEDLly/X1KlTNWnSJPd2T69ZRUVHR8vlcmnbtm2lrj5V1vfHPfvss5oyZYpGjhypcePGVUofACoPt/MBqBZKrjpNmjRJ69evL/PdUDfffLO+/vprpaamlnnuwYMHVVxcfMo+AgMD3e1P5cYbb5RlWZo6dWqZfSV/uS75y/bxf8k+dOiQFixYcMrje7J///4y20pWbCssLJRU/jl4qsWyLD399NOl2oWHh6tz58566aWXtHPnzlL7PP1F3uFwaN68efp//+//aeDAgXr//ffd+yr6nlx99dUqLi4utfT7sWPHjOd/zJs3T0ePHnU/njt3roqLi3XVVVdJ8vwaFBUVac6cOUb9nCgyMlKtW7fWyy+/rLy8PPf2VatWacOGDRU+jqf6vv32W3399dce27/33nvatWuX+/GaNWv07bffus/3dHXv3t395bfH1/Tiiy/q0KFDRqvSVTVPr6WkMqt0mih5XUu+DNgbxyzPG2+8ofvuu0/9+vXTk08+6fXjA6h8XIkCUC3Exsaqffv2Wrp0qSSVCVFjxozR+++/r169eikxMVEXXXSR8vPztWHDBr399tvKyMg45dLAcXFxCgsL03PPPafg4GAFBgbq0ksv9Th/pUuXLurfv7+eeeYZpaenu28R+uKLL9SlSxfdc8896tGjh/z9/XXttddq+PDhysvL0wsvvKAmTZrot99+M34Npk2bptWrV+uaa65RdHS0du/erTlz5uiss85Sx44dT3oOrVq1UlxcnB588EHt2rVLISEhWrJkicd5Mc8884w6duyoCy+8UMOGDVNsbKwyMjL04Ycfav369WXa+/j46JVXXlHv3r11880366OPPlLXrl0r/J5ce+216tChg8aPH6+MjAydd955euedd4znjBUVFalbt266+eab9csvv2jOnDnq2LGj+3vE2rdvr4YNG2rgwIG677775HA4tHjxYq/crvXYY4/p+uuvV4cOHTRo0CAdOHBAs2fPVuvWrUsFq5Pp1auX3nnnHfXp00fXXHONduzYoeeee07nnXeex2OcffbZ6tixo0aMGKHCwkI99dRTaty4cbm3T5oKDw/XhAkTNHXqVF155ZW67rrr3K9ru3bt3HPJKtPs2bN18OBBZWdnS/rz6m7J9zLde++9Cg0N9fi8kJAQde7cWTNnztTRo0d15plnatmyZad11bFt27bq27ev5syZo0OHDql9+/Zavny50dXGilizZo0GDBigxo0bq1u3bnr11VdL7W/fvn2pK4MAqik7lgQEAE+effZZS5J1ySWXeNyfm5trTZgwwTr77LMtf39/64wzzrDat29vzZo1y730dcny0I8//rjHYyxdutQ677zzLD8/v1JLKp+4xLll/bkk9eOPP261atXK8vf3t8LDw62rrrrK+uGHH9xt3n//feuCCy6w6tevb8XExFjJycnWSy+9ZEmyduzY4W5XkSXOly9fbl1//fVWZGSk5e/vb0VGRlp9+/Yts4R4eefw008/Wd27d7eCgoKsM844wxo6dKj13//+1+PS0Rs3brT69OljhYWFWfXr17datmxpTZw40b3f05LWBQUFVkJCghUUFGR98803FX5PLOvPJZz79+9vhYSEWKGhoVb//v2tdevWGS1xvmrVKmvYsGFWw4YNraCgIKtfv37Wvn37SrVNS0uzLrvsMisgIMCKjIy0xo4da6WmplqSrBUrVpR6P84///yT9nuif//731arVq0sp9NptW7d2nr//fetG2+80WrVqpW7zcnGn8vlsh577DErOjracjqd1t///nfrP//5T5mxd/wxnnjiCSsqKspyOp1Wp06drP/+97+ljjlw4EArMDCwTF8l719FzJ4922rVqpVVr149q2nTptaIESOsAwcOeDyeyRLnlmVZ0dHR1jXXXHPS/ZI8/jv+/x9Pfv31V/cYDg0NtW666SYrOzu7zHLk5dVeMq6O7+fw4cPWfffdZzVu3NgKDAy0rr32WisrK8toifOT9Xl8v+X9M1nmHYB9HJZl44xKAABqsLZt2yo8PLzM3LPTkZGRodjYWD3++ON68MEHvXZcAID3MCcKAIBTOHr0aJl5dytXrtR///tfXX755fYUBQCwDXOiAAA4hV27dql79+66/fbbFRkZqc2bN+u5555Ts2bNynyJKwCg9iNEAQBwCg0bNtRFF12k+fPna8+ePQoMDNQ111yjGTNmqHHjxnaXBwCoYsyJAgAAAAADzIkCAAAAAAOEKAAAAAAwUKfnRLlcLmVnZys4OFgOh8PucgAAAADYxLIs5ebmKjIyUj4+J7/WVKdDVHZ2tqKiouwuAwAAAEA1kZWVpbPOOuukbep0iAoODpb05wsVEhJiczUAAAAA7JKTk6OoqCh3RjiZOh2iSm7hCwkJIUQBAAAAqNA0HxaWAAAAAAADhCgAAAAAMECIAgAAAAADdXpOVEVYlqXi4mIdO3bM7lJs4evrKz8/P5aABwAAAP4PIeokioqK9Ntvv6mgoMDuUmzVoEEDRUREyN/f3+5SAAAAANsRosrhcrm0Y8cO+fr6KjIy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urXq1aun7du367PPPtOBAwc0bdo0TZw40e5yUU15+kwqLCzU7t27tWbNGm3cuFG+vr4aO3asHn30UTkcDpsrRnXmaTydKCwsTCNHjqzawuCRn90FoO544403lJ+fr1GjRumpp57Siy++SIjCX3L22WdrypQppbYVFhbqH//4h7755hutWrVKXbt2tac41AgPP/ywUlJS1LZtW7399tuKi4srtf/w4cOaPXu29u3bZ1OFqEk8fSZJ0pdffqn+/fsrKSlJvr6+mj59etUXhxqnvPGE6oXb+VBlXnzxRfn5+Wns2LHq0qWLli9frszMTLvLQi3hdDrVpUsXSdLevXttrgbV2datWzVz5kw1btxYn3zySZkAJUkBAQEaM2aMpk6dakOFqC06duyoTz75RE6nUzNnzlRWVpbdJQHwEkIUqsRPP/2kb775Rj169FDTpk01YMAAuVwuLViwwO7SUEsUFRVp5cqVcjgcatu2rd3loBpbuHChjh07puHDh6tp06Ynbet0OquoKtRWLVu21M0336yioiK99957dpcDwEu4nQ9V4sUXX5Qk9e/fX5J0ww036K677tKCBQs0adIk+fiQ51FxW7dudd/qYFmW9u7dq9TUVO3atUszZ87UOeecY2+BqNbS0tIkiVs+UWUuv/xyLV68WN99953dpaAGOP5n3Ikuu+wyXXnllVVbEDwiRKHSHT16VIsXL1ZISIh69+4tSQoKClKfPn30yiuv6LPPPlOPHj3sLRI1yrZt2zzeZtWrVy91797dhopQk/z++++SpLPOOsvmSlBXREZGSuJWY1RMeT/jJOn+++8nRFUT/PkflW7p0qXas2ePbrrpJtWvX9+9fcCAAZL+d5UKqKiePXvKsiz3v71792rp0qXauHGjOnTooG+//dbuEgEA+EtO/Bl3/L+nnnrK7vLwfwhRqHQlIakkNJXo1q2bzjzzTC1dulT79++3ozTUEo0bN9Z1112nF154QQUFBXr44YftLgnVWLNmzSRJu3btsrkS1BXZ2dmSpPDwcJsrAeAthChUqqysLC1btkySlJCQUOoL43x9fbVr1y4VFhbqlVdesblS1AaXXnqpJDHvACfVoUMHSdLy5cttrgR1xcqVKyVJ7dq1s7cQAF7DnChUqoULF8rlcqljx45q2bJlmf3FxcVatGiRXnzxRd133302VIja5MCBA5L+/CJVoDyJiYmaMWOG5s2bp5EjR5706kBhYSEr9OG0bNmyRW+++aacTqf69OljdzkAvIQQhUpjWZYWLFggh8OhRYsWqUWLFh7bbdmyRV9//bW+//57XXzxxVVcJWqTJ598UpLUuXNnmytBdXb22Wdr7NixSkpK0lVXXaW33npLsbGxpdocOXJEc+bM0Z49e5SUlGRTpajp0tLSdPvtt6uwsFCTJ0/WmWeeaXdJALyEEIVK8/nnn2vHjh1KSEgoN0BJ0qBBg/T111/rxRdfJEShQk5c/nX//v1KS0vT2rVr1bBhQyUnJ9tXHGqERx55REeOHFFKSopatmyprl27qnXr1qpXr5527Nihzz77TPv27dMjjzxid6moAY7/TCoqKtLu3bu1Zs0abdiwQb6+vnr44Yc1efJke4tEjXGyJc4lafz48aUW6oI9HJZlWXYXgdrptttu0+uvv64FCxYoMTGx3HY5OTlq1qyZ/P399dtvvykgIKDqikSNkpGRUeaKgfTnF6KeddZZ6tGjh8aPH6/mzZvbUB1qou+//15z587V6tWrtWvXLrlcLkVERKh9+/YaNGgQS+bjpDx9JgUEBCgsLEytWrVSx44dNXDgQMXFxdlUIWqS8n7GnejAgQMKCwur/IJwUoQoAAAAADDA6nwAAAAAYIAQBQAAAAAGCFEAAAAAYIAQBQAAAAAGCFEAAAAAYIAQBQAAAAAGCFEAAAAAYIAQBQAAAAAGCFEAAAAAYIAQBQAAAAAGCFEAgFrv2LFjat++vW644YZS2w8dOqSoqCj985//lCTdd999uuiii+R0OtW2bVsbKgUA1ASEKABArefr66uFCxfqk08+0auvvurefu+996pRo0aaPHmye9vgwYN1yy232FEmAKCG8LO7AAAAqsI555yjGTNm6N5771XXrl21Zs0a/fvf/9Z3330nf39/SdIzzzwjSdqzZ49+/PFHO8sFAFRjhCgAQJ1x77336t1331X//v21YcMGTZo0SX/729/sLgsAUMMQogAAdYbD4dDcuXN17rnnqk2bNho/frzdJQEAaiDmRAEA6pSXXnpJDRo00I4dO/Trr7/aXQ4AoAYiRAEA6oyvvvpKKSkp+s9//qNLLrlEd9xxhyzLsrssAEANQ4gCANQJBQUFSkxM1IgRI9SlSxe9+OKLWrNmjZ577jm7SwMA1DCEKABAnTBhwgRZlqUZM2ZIkmJiYjRr1iyNHTtWGRkZkqStW7dq/fr1+v3333X48GGtX79e69evV1FRkY2VAwCqG4fFfQwAgFpu1apV6tatm1auXKmOHTuW2tezZ08VFxfrs88+U5cuXbRq1aoyz9+xY4diYmKqqFoAQHVHiAIAAAAAA9zOBwAAAAAGCFEAAAAAYIAQBQAAAAAGCFEAAAAAYIAQBQAAAAAGCFEAAAAAYIAQBQAAAAAGCFEAAAAAYIAQBQAAAAAGCFEAAAAAYIAQBQAAAAAG/j+Bbsc5cxhiTQAAAABJRU5ErkJggg==\n",
|
219 |
-
"text/plain": [
|
220 |
-
"<Figure size 1000x800 with 1 Axes>"
|
221 |
-
]
|
222 |
-
},
|
223 |
-
"metadata": {},
|
224 |
-
"output_type": "display_data"
|
225 |
-
}
|
226 |
-
],
|
227 |
-
"source": [
|
228 |
-
"import matplotlib\n",
|
229 |
-
"import matplotlib.pyplot as plt\n",
|
230 |
-
"import numpy as np\n",
|
231 |
-
"import seaborn as sns\n",
|
232 |
-
"\n",
|
233 |
-
"# Create data\n",
|
234 |
-
"X1 = ['A', 'B', 'C', 'D', 'E']\n",
|
235 |
-
"Y1 = [10, 15, 20, 25, 30]\n",
|
236 |
-
"Y2 = [20, 25, 30, 35, 40]\n",
|
237 |
-
"\n",
|
238 |
-
"# Set color scheme and font\n",
|
239 |
-
"colors = sns.color_palette(\"Blues\", 2)\n",
|
240 |
-
"\n",
|
241 |
-
"# Create bar plot\n",
|
242 |
-
"fig, ax = plt.subplots(figsize=(10, 8))\n",
|
243 |
-
"ax.bar(X1, Y1, color=colors[0], edgecolor='white', linewidth=1)\n",
|
244 |
-
"ax.bar(X1, Y2, bottom=Y1, color=colors[1], edgecolor='white', linewidth=1)\n",
|
245 |
-
"\n",
|
246 |
-
"# Set axis labels and ticks\n",
|
247 |
-
"ax.set_xlabel('X1')\n",
|
248 |
-
"ax.set_ylabel('Y')\n",
|
249 |
-
"ax.set_xticklabels(X1)\n",
|
250 |
-
"ax.tick_params(axis='both', which='major', labelsize=14)\n",
|
251 |
-
"ax.grid(axis='y', alpha=0.4)\n",
|
252 |
-
"\n",
|
253 |
-
"# Add legend and title\n",
|
254 |
-
"ax.legend(['Y1', 'Y2'], loc='upper left')\n",
|
255 |
-
"ax.set_title('Vertical stacked bar graph of Y1 and Y2')\n",
|
256 |
-
"\n",
|
257 |
-
"# Save the graph as PDF or PNG\n",
|
258 |
-
"plt.savefig('vertical_stacked_bar_graph.png', dpi=300, bbox_inches='tight')"
|
259 |
-
]
|
260 |
-
},
|
261 |
-
{
|
262 |
-
"cell_type": "code",
|
263 |
-
"execution_count": null,
|
264 |
-
"id": "4c055ec7",
|
265 |
-
"metadata": {},
|
266 |
-
"outputs": [],
|
267 |
-
"source": []
|
268 |
-
}
|
269 |
-
],
|
270 |
-
"metadata": {
|
271 |
-
"kernelspec": {
|
272 |
-
"display_name": "Python 3 (ipykernel)",
|
273 |
-
"language": "python",
|
274 |
-
"name": "python3"
|
275 |
-
},
|
276 |
-
"language_info": {
|
277 |
-
"codemirror_mode": {
|
278 |
-
"name": "ipython",
|
279 |
-
"version": 3
|
280 |
-
},
|
281 |
-
"file_extension": ".py",
|
282 |
-
"mimetype": "text/x-python",
|
283 |
-
"name": "python",
|
284 |
-
"nbconvert_exporter": "python",
|
285 |
-
"pygments_lexer": "ipython3",
|
286 |
-
"version": "3.8.5"
|
287 |
-
}
|
288 |
-
},
|
289 |
-
"nbformat": 4,
|
290 |
-
"nbformat_minor": 5
|
291 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/create_part_probability_mesh.py
DELETED
@@ -1,86 +0,0 @@
|
|
1 |
-
import numpy as np
|
2 |
-
import os
|
3 |
-
import json
|
4 |
-
import trimesh
|
5 |
-
import seaborn as sns
|
6 |
-
|
7 |
-
|
8 |
-
# Load the combined dca train, val and test npzs
|
9 |
-
dir = '/is/cluster/work/stripathi/pycharm_remote/dca_contact/data/dataset_extras'
|
10 |
-
trainval_npz = np.load(os.path.join(dir, 'hot_dca_trainval.npz'), allow_pickle=True)
|
11 |
-
test_npz = np.load(os.path.join(dir, 'hot_dca_test.npz'), allow_pickle=True)
|
12 |
-
|
13 |
-
# combine the two npz
|
14 |
-
combined_npz = {}
|
15 |
-
for key in trainval_npz.keys():
|
16 |
-
combined_npz[key] = np.concatenate([trainval_npz[key], test_npz[key]], axis=0)
|
17 |
-
|
18 |
-
segmentation_path = 'data/smpl_vert_segmentation.json'
|
19 |
-
with open(segmentation_path, 'rb') as f:
|
20 |
-
part_segmentation = json.load(f)
|
21 |
-
|
22 |
-
combine_keys = {'leftFoot': ['leftToeBase'],
|
23 |
-
'rightFoot': ['rightToeBase'],
|
24 |
-
'leftHand': ['leftHandIndex1'],
|
25 |
-
'rightHand': ['rightHandIndex1'],
|
26 |
-
'spine': ['spine1', 'spine2'],
|
27 |
-
'head': ['neck'],}
|
28 |
-
|
29 |
-
for key in combine_keys:
|
30 |
-
for subkey in combine_keys[key]:
|
31 |
-
part_segmentation[key] += part_segmentation[subkey]
|
32 |
-
del part_segmentation[subkey]
|
33 |
-
|
34 |
-
# reverse the part segmentation
|
35 |
-
part_segmentation_rev = {}
|
36 |
-
for part in part_segmentation:
|
37 |
-
for vert in part_segmentation[part]:
|
38 |
-
part_segmentation_rev[vert] = part
|
39 |
-
|
40 |
-
# count the number of contact instances per vertex
|
41 |
-
per_vert_contact_count = np.zeros(6890)
|
42 |
-
for cls in combined_npz['contact_label']:
|
43 |
-
per_vert_contact_count += cls
|
44 |
-
|
45 |
-
# calculate the maximum contact count per part
|
46 |
-
part_contact_max = {}
|
47 |
-
for part in part_segmentation:
|
48 |
-
part_contact_max[part] = np.max(per_vert_contact_count[part_segmentation[part]])
|
49 |
-
|
50 |
-
# calculate the contact probability globally
|
51 |
-
contact_prob = np.zeros(6890)
|
52 |
-
for vid in range(6890):
|
53 |
-
contact_prob[vid] = (per_vert_contact_count[vid] / max(per_vert_contact_count)) ** 0.3
|
54 |
-
|
55 |
-
# save the contact probability mesh
|
56 |
-
outdir = "/is/cluster/work/stripathi/pycharm_remote/dca_contact/hot_analysis"
|
57 |
-
|
58 |
-
# load template smpl mesh
|
59 |
-
mesh = trimesh.load_mesh('data/smpl/smpl_neutral_tpose.ply')
|
60 |
-
vertex_colors = trimesh.visual.interpolate(contact_prob, 'jet')
|
61 |
-
# set the vertex colors of the mesh
|
62 |
-
mesh.visual.vertex_colors = vertex_colors
|
63 |
-
# save the mesh
|
64 |
-
out_path = os.path.join(outdir, "contact_probability_mesh.obj")
|
65 |
-
mesh.export(out_path)
|
66 |
-
|
67 |
-
# # calculate the contact probability per part
|
68 |
-
# contact_prob = np.zeros(6890)
|
69 |
-
# for vid in range(6890):
|
70 |
-
# if 'Hand' in part_segmentation_rev[vid]:
|
71 |
-
# contact_prob[vid] = (per_vert_contact_count[vid] / part_contact_max[part_segmentation_rev[vid]]) ** 0.4 if 'Hand' not in part_segmentation_rev[vid] else (per_vert_contact_count[vid] / part_contact_max[part_segmentation_rev[vid]]) ** 0.8
|
72 |
-
#
|
73 |
-
# # save the contact probability mesh
|
74 |
-
# outdir = "/is/cluster/work/stripathi/pycharm_remote/dca_contact/hot_analysis"
|
75 |
-
#
|
76 |
-
# # load template smpl mesh
|
77 |
-
# mesh = trimesh.load_mesh('data/smpl/smpl_neutral_tpose.ply')
|
78 |
-
# vertex_colors = trimesh.visual.interpolate(contact_prob, 'jet')
|
79 |
-
# # set the vertex colors of the mesh
|
80 |
-
# mesh.visual.vertex_colors = vertex_colors
|
81 |
-
# # save the mesh
|
82 |
-
# out_path = os.path.join(outdir, "contact_probability_mesh_part.obj")
|
83 |
-
# mesh.export(out_path)
|
84 |
-
|
85 |
-
|
86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/damon_qc_stats/compute_accuracy_iou_damon.py
DELETED
@@ -1,59 +0,0 @@
|
|
1 |
-
# load amt csv, go through each line in vertices, combine the vertices for each object label and then compute the iou with GT from RICH and PROX
|
2 |
-
import pandas as pd
|
3 |
-
import numpy as np
|
4 |
-
|
5 |
-
# load csv
|
6 |
-
csv_path = './quality_assurance_accuracy.csv'
|
7 |
-
df = pd.read_csv(csv_path)
|
8 |
-
|
9 |
-
# load gt npz
|
10 |
-
gt_path = './qa_accuracy_gt_contact_combined.npz'
|
11 |
-
gt = np.load(gt_path)
|
12 |
-
|
13 |
-
def compute_iou(pred_verts, gt_verts):
|
14 |
-
if len(pred_verts) != 0:
|
15 |
-
intersect = list(set(pred_verts) & set(gt_verts))
|
16 |
-
iou = len(intersect) / (len(pred_verts) + len(gt_verts) - len(intersect))
|
17 |
-
else:
|
18 |
-
iou = 0
|
19 |
-
return iou
|
20 |
-
|
21 |
-
all_ious = []
|
22 |
-
# for loop each row in df
|
23 |
-
for index, row in df.iterrows():
|
24 |
-
combined_annotation_ids = []
|
25 |
-
imgname = []
|
26 |
-
# get vertices
|
27 |
-
annotation_dict = eval(row['vertices'])
|
28 |
-
worker_id = row['WorkerId']
|
29 |
-
# single for loop in the dictionary
|
30 |
-
for im, anno in annotation_dict.items():
|
31 |
-
imgname.append(im)
|
32 |
-
for ann in anno:
|
33 |
-
# single for loop in the dict
|
34 |
-
for k, v in ann.items():
|
35 |
-
combined_annotation_ids.extend(v)
|
36 |
-
# remove repeated values
|
37 |
-
combined_annotation_ids = list(set(combined_annotation_ids))
|
38 |
-
|
39 |
-
assert len(imgname) == 1
|
40 |
-
imgname = imgname[0]
|
41 |
-
|
42 |
-
# get gt for the imgname
|
43 |
-
gt_ids = gt[imgname]
|
44 |
-
if 'prox' in imgname:
|
45 |
-
continue
|
46 |
-
|
47 |
-
# compute iou
|
48 |
-
iou = compute_iou(combined_annotation_ids, gt_ids)
|
49 |
-
print('worker id: ', worker_id, 'imgname: ', imgname, 'iou: ', iou)
|
50 |
-
all_ious.append(iou)
|
51 |
-
|
52 |
-
# compute mean iou
|
53 |
-
mean_iou = np.mean(all_ious)
|
54 |
-
print('mean iou: ', mean_iou)
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/damon_qc_stats/compute_fleiss_kappa_damon.py
DELETED
@@ -1,111 +0,0 @@
|
|
1 |
-
import numpy as np
|
2 |
-
import pandas as pd
|
3 |
-
from scipy.stats import chi2
|
4 |
-
|
5 |
-
|
6 |
-
def correct_supporting(vertices):
|
7 |
-
# Copy vertices from objects to supporting since the dropdown option was missing in the QA app
|
8 |
-
def add_supporting(verts, object_name):
|
9 |
-
temp_supporting_vids = []
|
10 |
-
supporting_vid = -1
|
11 |
-
for id, v_i in enumerate(verts):
|
12 |
-
# single key dict
|
13 |
-
for k, v in v_i.items():
|
14 |
-
if k == object_name:
|
15 |
-
temp_supporting_vids = v
|
16 |
-
if k == 'SUPPORTING':
|
17 |
-
supporting_vid = id
|
18 |
-
if supporting_vid != -1:
|
19 |
-
# append to supporting
|
20 |
-
verts[supporting_vid]['SUPPORTING'] += temp_supporting_vids
|
21 |
-
return verts
|
22 |
-
|
23 |
-
# correct supporting contacts
|
24 |
-
for i, vert in enumerate(vertices):
|
25 |
-
for k, v in vert.items():
|
26 |
-
if k == 'hot/training/hake_train2015_HICO_train2015_00000019.jpg':
|
27 |
-
# copy bicycle contacts to supporting
|
28 |
-
v = add_supporting(v, 'BICYCLE')
|
29 |
-
if k == 'hot/training/hake_train2015_HICO_train2015_00000020.jpg':
|
30 |
-
# copy skateboard contacts to supporting
|
31 |
-
v = add_supporting(v, 'SKATEBOARD')
|
32 |
-
if k == 'hot/training/hake_train2015_HICO_train2015_00000942':
|
33 |
-
# copy bench contacts to supporting
|
34 |
-
v = add_supporting(v, 'BENCH')
|
35 |
-
|
36 |
-
# combine all vert_ids into a single list no matter the object
|
37 |
-
v = {ki: vi for d in v for ki, vi in d.items()}
|
38 |
-
v = [vi for k, vi in v.items()]
|
39 |
-
v = [item for sublist in v for item in sublist]
|
40 |
-
v = list(set(v))
|
41 |
-
# binarize the list to a numpy array
|
42 |
-
v_np = np.zeros(6890)
|
43 |
-
v_np[v] = 1
|
44 |
-
vert[k] = v_np
|
45 |
-
vertices[i] = vert
|
46 |
-
return vertices
|
47 |
-
|
48 |
-
def fleiss_kappa_per_img(vertices):
|
49 |
-
"""
|
50 |
-
Compute Fleiss' kappa per imagename
|
51 |
-
Parameters
|
52 |
-
----------
|
53 |
-
vertices : list of np arrays where each array is of shape (6890,) and 1 indicates a vertex is selected
|
54 |
-
"""
|
55 |
-
n = len(vertices) # number of raters
|
56 |
-
N = 6890 # number of images
|
57 |
-
k = 2 # number of categories
|
58 |
-
|
59 |
-
# compute the observed agreement
|
60 |
-
M = np.zeros((N, k))
|
61 |
-
|
62 |
-
for i in range(k):
|
63 |
-
M[:, i] = np.sum(vertices == i, axis=0)
|
64 |
-
|
65 |
-
assert np.sum(M) == N * n
|
66 |
-
|
67 |
-
# compute the expected agreement
|
68 |
-
p = np.sum(M, axis=0) / (N * n)
|
69 |
-
P = (np.sum(M * M, axis=1) - n) / (n * (n - 1))
|
70 |
-
Pbar = np.mean(P)
|
71 |
-
PbarE = np.sum(p * p)
|
72 |
-
|
73 |
-
# compute Fleiss' kappa
|
74 |
-
kappa = (Pbar - PbarE) / (1 - PbarE)
|
75 |
-
return kappa
|
76 |
-
|
77 |
-
def fleiss_kappa(data):
|
78 |
-
"""
|
79 |
-
Compute Fleiss' kappa per imagename
|
80 |
-
Parameters
|
81 |
-
----------
|
82 |
-
data : list of dicts where keys are imgnames
|
83 |
-
"""
|
84 |
-
imgnames = sorted(data[0].keys())
|
85 |
-
kappas = []
|
86 |
-
for img in imgnames:
|
87 |
-
kappa_data = []
|
88 |
-
for d in data:
|
89 |
-
kappa_data.append(d[img])
|
90 |
-
kappa_data = np.array(kappa_data)
|
91 |
-
kappa_img = fleiss_kappa_per_img(kappa_data)
|
92 |
-
print(f'Fleiss\' Kappa for {img}: {kappa_img}')
|
93 |
-
kappas.append(kappa_img)
|
94 |
-
|
95 |
-
# computer mean kappa
|
96 |
-
kappa = np.mean(kappas)
|
97 |
-
return kappa
|
98 |
-
|
99 |
-
|
100 |
-
# Load the combined qa csv file
|
101 |
-
csv_file = 'quality_assurance_fleiss.csv'
|
102 |
-
df = pd.read_csv(csv_file)
|
103 |
-
|
104 |
-
vertices = df['vertices'].values
|
105 |
-
vertices = [eval(v) for v in vertices]
|
106 |
-
|
107 |
-
vertices = correct_supporting(vertices)
|
108 |
-
|
109 |
-
kappa = fleiss_kappa(vertices)
|
110 |
-
|
111 |
-
print('Fleiss\' Kappa:', kappa)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/damon_qc_stats/qa_accuracy_gt_contact_combined.npz
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:b34393328dae058aa12245f547ee954f48508bf0c4ed7ecbe40a674245ba5717
|
3 |
-
size 456742
|
|
|
|
|
|
|
|
hot_analysis/damon_qc_stats/quality_assurance_accuracy.csv
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/damon_qc_stats/quality_assurance_fleiss.csv
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/damon_qc_stats/successful_qualifications_fleiss.csv
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/filtered_data/v_1/hico/hico_imglist_all_140223.txt
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/filtered_data/v_1/hico/image_per_object_category.png
DELETED
Binary file (86.2 kB)
|
|
hot_analysis/filtered_data/v_1/hico/imgnames_per_object_dict.json
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/filtered_data/v_1/hico/imgnames_per_object_dict.txt
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/filtered_data/v_1/hico/object_per_image_dict.json
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/filtered_data/v_1/hico/object_per_image_dict.txt
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/filtered_data/v_1/hico_imglist_all_140223.txt
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/filtered_data/v_1/image_per_object_category.png
DELETED
Binary file (120 kB)
|
|
hot_analysis/filtered_data/v_1/imgnames_per_object_dict.json
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/filtered_data/v_1/imgnames_per_object_dict.txt
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/filtered_data/v_1/object_per_image_dict.json
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/filtered_data/v_1/object_per_image_dict.txt
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/filtered_data/v_1/vcoco/image_per_object_category.png
DELETED
Binary file (84.7 kB)
|
|
hot_analysis/filtered_data/v_1/vcoco/imgnames_per_object_dict.json
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/filtered_data/v_1/vcoco/object_per_image_dict.json
DELETED
The diff for this file is too large to render.
See raw diff
|
|
hot_analysis/filtered_data/v_1/vcoco/vcoco_imglist_all_170223.txt
DELETED
@@ -1,2368 +0,0 @@
|
|
1 |
-
vcoco_000000051899.jpg
|
2 |
-
vcoco_000000093127.jpg
|
3 |
-
vcoco_000000455665.jpg
|
4 |
-
vcoco_000000248389.jpg
|
5 |
-
vcoco_000000403947.jpg
|
6 |
-
vcoco_000000418634.jpg
|
7 |
-
vcoco_000000065161.jpg
|
8 |
-
vcoco_000000504606.jpg
|
9 |
-
vcoco_000000535135.jpg
|
10 |
-
vcoco_000000284098.jpg
|
11 |
-
vcoco_000000318785.jpg
|
12 |
-
vcoco_000000003770.jpg
|
13 |
-
vcoco_000000343002.jpg
|
14 |
-
vcoco_000000491784.jpg
|
15 |
-
vcoco_000000342013.jpg
|
16 |
-
vcoco_000000335909.jpg
|
17 |
-
vcoco_000000489121.jpg
|
18 |
-
vcoco_000000552365.jpg
|
19 |
-
vcoco_000000526681.jpg
|
20 |
-
vcoco_000000477136.jpg
|
21 |
-
vcoco_000000438861.jpg
|
22 |
-
vcoco_000000033958.jpg
|
23 |
-
vcoco_000000548029.jpg
|
24 |
-
vcoco_000000520528.jpg
|
25 |
-
vcoco_000000568604.jpg
|
26 |
-
vcoco_000000160480.jpg
|
27 |
-
vcoco_000000579466.jpg
|
28 |
-
vcoco_000000459576.jpg
|
29 |
-
vcoco_000000053347.jpg
|
30 |
-
vcoco_000000548592.jpg
|
31 |
-
vcoco_000000491215.jpg
|
32 |
-
vcoco_000000335274.jpg
|
33 |
-
vcoco_000000343803.jpg
|
34 |
-
vcoco_000000343860.jpg
|
35 |
-
vcoco_000000561810.jpg
|
36 |
-
vcoco_000000313145.jpg
|
37 |
-
vcoco_000000094766.jpg
|
38 |
-
vcoco_000000386677.jpg
|
39 |
-
vcoco_000000517349.jpg
|
40 |
-
vcoco_000000430259.jpg
|
41 |
-
vcoco_000000412301.jpg
|
42 |
-
vcoco_000000306426.jpg
|
43 |
-
vcoco_000000057782.jpg
|
44 |
-
vcoco_000000068646.jpg
|
45 |
-
vcoco_000000341818.jpg
|
46 |
-
vcoco_000000024446.jpg
|
47 |
-
vcoco_000000482362.jpg
|
48 |
-
vcoco_000000087328.jpg
|
49 |
-
vcoco_000000284846.jpg
|
50 |
-
vcoco_000000098596.jpg
|
51 |
-
vcoco_000000492648.jpg
|
52 |
-
vcoco_000000343619.jpg
|
53 |
-
vcoco_000000026552.jpg
|
54 |
-
vcoco_000000578780.jpg
|
55 |
-
vcoco_000000012817.jpg
|
56 |
-
vcoco_000000298139.jpg
|
57 |
-
vcoco_000000343104.jpg
|
58 |
-
vcoco_000000262414.jpg
|
59 |
-
vcoco_000000521956.jpg
|
60 |
-
vcoco_000000506126.jpg
|
61 |
-
vcoco_000000271490.jpg
|
62 |
-
vcoco_000000233863.jpg
|
63 |
-
vcoco_000000577880.jpg
|
64 |
-
vcoco_000000146454.jpg
|
65 |
-
vcoco_000000515704.jpg
|
66 |
-
vcoco_000000280114.jpg
|
67 |
-
vcoco_000000196108.jpg
|
68 |
-
vcoco_000000368040.jpg
|
69 |
-
vcoco_000000334941.jpg
|
70 |
-
vcoco_000000194545.jpg
|
71 |
-
vcoco_000000435141.jpg
|
72 |
-
vcoco_000000547830.jpg
|
73 |
-
vcoco_000000234642.jpg
|
74 |
-
vcoco_000000122672.jpg
|
75 |
-
vcoco_000000386912.jpg
|
76 |
-
vcoco_000000132272.jpg
|
77 |
-
vcoco_000000219629.jpg
|
78 |
-
vcoco_000000445211.jpg
|
79 |
-
vcoco_000000039958.jpg
|
80 |
-
vcoco_000000270474.jpg
|
81 |
-
vcoco_000000430428.jpg
|
82 |
-
vcoco_000000269551.jpg
|
83 |
-
vcoco_000000538003.jpg
|
84 |
-
vcoco_000000096832.jpg
|
85 |
-
vcoco_000000126097.jpg
|
86 |
-
vcoco_000000411740.jpg
|
87 |
-
vcoco_000000080117.jpg
|
88 |
-
vcoco_000000106525.jpg
|
89 |
-
vcoco_000000332722.jpg
|
90 |
-
vcoco_000000036827.jpg
|
91 |
-
vcoco_000000550870.jpg
|
92 |
-
vcoco_000000305752.jpg
|
93 |
-
vcoco_000000263083.jpg
|
94 |
-
vcoco_000000476349.jpg
|
95 |
-
vcoco_000000528621.jpg
|
96 |
-
vcoco_000000125257.jpg
|
97 |
-
vcoco_000000435358.jpg
|
98 |
-
vcoco_000000449914.jpg
|
99 |
-
vcoco_000000366150.jpg
|
100 |
-
vcoco_000000326128.jpg
|
101 |
-
vcoco_000000419369.jpg
|
102 |
-
vcoco_000000526360.jpg
|
103 |
-
vcoco_000000378652.jpg
|
104 |
-
vcoco_000000093853.jpg
|
105 |
-
vcoco_000000419050.jpg
|
106 |
-
vcoco_000000487698.jpg
|
107 |
-
vcoco_000000356800.jpg
|
108 |
-
vcoco_000000025244.jpg
|
109 |
-
vcoco_000000474233.jpg
|
110 |
-
vcoco_000000570458.jpg
|
111 |
-
vcoco_000000341047.jpg
|
112 |
-
vcoco_000000422586.jpg
|
113 |
-
vcoco_000000573058.jpg
|
114 |
-
vcoco_000000405093.jpg
|
115 |
-
vcoco_000000510152.jpg
|
116 |
-
vcoco_000000043968.jpg
|
117 |
-
vcoco_000000216050.jpg
|
118 |
-
vcoco_000000499396.jpg
|
119 |
-
vcoco_000000067761.jpg
|
120 |
-
vcoco_000000227359.jpg
|
121 |
-
vcoco_000000506515.jpg
|
122 |
-
vcoco_000000502936.jpg
|
123 |
-
vcoco_000000020410.jpg
|
124 |
-
vcoco_000000282557.jpg
|
125 |
-
vcoco_000000492057.jpg
|
126 |
-
vcoco_000000241396.jpg
|
127 |
-
vcoco_000000285826.jpg
|
128 |
-
vcoco_000000580778.jpg
|
129 |
-
vcoco_000000183538.jpg
|
130 |
-
vcoco_000000359399.jpg
|
131 |
-
vcoco_000000405121.jpg
|
132 |
-
vcoco_000000176091.jpg
|
133 |
-
vcoco_000000401962.jpg
|
134 |
-
vcoco_000000291962.jpg
|
135 |
-
vcoco_000000048282.jpg
|
136 |
-
vcoco_000000525876.jpg
|
137 |
-
vcoco_000000355197.jpg
|
138 |
-
vcoco_000000489207.jpg
|
139 |
-
vcoco_000000536791.jpg
|
140 |
-
vcoco_000000290979.jpg
|
141 |
-
vcoco_000000047774.jpg
|
142 |
-
vcoco_000000191632.jpg
|
143 |
-
vcoco_000000355660.jpg
|
144 |
-
vcoco_000000541108.jpg
|
145 |
-
vcoco_000000470161.jpg
|
146 |
-
vcoco_000000455948.jpg
|
147 |
-
vcoco_000000486605.jpg
|
148 |
-
vcoco_000000509020.jpg
|
149 |
-
vcoco_000000226597.jpg
|
150 |
-
vcoco_000000038431.jpg
|
151 |
-
vcoco_000000017003.jpg
|
152 |
-
vcoco_000000264758.jpg
|
153 |
-
vcoco_000000250619.jpg
|
154 |
-
vcoco_000000540183.jpg
|
155 |
-
vcoco_000000360002.jpg
|
156 |
-
vcoco_000000192656.jpg
|
157 |
-
vcoco_000000462324.jpg
|
158 |
-
vcoco_000000559908.jpg
|
159 |
-
vcoco_000000409496.jpg
|
160 |
-
vcoco_000000193429.jpg
|
161 |
-
vcoco_000000136350.jpg
|
162 |
-
vcoco_000000089078.jpg
|
163 |
-
vcoco_000000499102.jpg
|
164 |
-
vcoco_000000497915.jpg
|
165 |
-
vcoco_000000486774.jpg
|
166 |
-
vcoco_000000276006.jpg
|
167 |
-
vcoco_000000078871.jpg
|
168 |
-
vcoco_000000458103.jpg
|
169 |
-
vcoco_000000014226.jpg
|
170 |
-
vcoco_000000332087.jpg
|
171 |
-
vcoco_000000195697.jpg
|
172 |
-
vcoco_000000280968.jpg
|
173 |
-
vcoco_000000563435.jpg
|
174 |
-
vcoco_000000491118.jpg
|
175 |
-
vcoco_000000341681.jpg
|
176 |
-
vcoco_000000465247.jpg
|
177 |
-
vcoco_000000433574.jpg
|
178 |
-
vcoco_000000082969.jpg
|
179 |
-
vcoco_000000131339.jpg
|
180 |
-
vcoco_000000330650.jpg
|
181 |
-
vcoco_000000363102.jpg
|
182 |
-
vcoco_000000573063.jpg
|
183 |
-
vcoco_000000320661.jpg
|
184 |
-
vcoco_000000053058.jpg
|
185 |
-
vcoco_000000579891.jpg
|
186 |
-
vcoco_000000327804.jpg
|
187 |
-
vcoco_000000525684.jpg
|
188 |
-
vcoco_000000157948.jpg
|
189 |
-
vcoco_000000531735.jpg
|
190 |
-
vcoco_000000549746.jpg
|
191 |
-
vcoco_000000378894.jpg
|
192 |
-
vcoco_000000096800.jpg
|
193 |
-
vcoco_000000068586.jpg
|
194 |
-
vcoco_000000564091.jpg
|
195 |
-
vcoco_000000010149.jpg
|
196 |
-
vcoco_000000357356.jpg
|
197 |
-
vcoco_000000008383.jpg
|
198 |
-
vcoco_000000562062.jpg
|
199 |
-
vcoco_000000318672.jpg
|
200 |
-
vcoco_000000285013.jpg
|
201 |
-
vcoco_000000486070.jpg
|
202 |
-
vcoco_000000420347.jpg
|
203 |
-
vcoco_000000246053.jpg
|
204 |
-
vcoco_000000510078.jpg
|
205 |
-
vcoco_000000270683.jpg
|
206 |
-
vcoco_000000412876.jpg
|
207 |
-
vcoco_000000204272.jpg
|
208 |
-
vcoco_000000441995.jpg
|
209 |
-
vcoco_000000404283.jpg
|
210 |
-
vcoco_000000467843.jpg
|
211 |
-
vcoco_000000529670.jpg
|
212 |
-
vcoco_000000575348.jpg
|
213 |
-
vcoco_000000382383.jpg
|
214 |
-
vcoco_000000308053.jpg
|
215 |
-
vcoco_000000303610.jpg
|
216 |
-
vcoco_000000035093.jpg
|
217 |
-
vcoco_000000029140.jpg
|
218 |
-
vcoco_000000575719.jpg
|
219 |
-
vcoco_000000515424.jpg
|
220 |
-
vcoco_000000110693.jpg
|
221 |
-
vcoco_000000559948.jpg
|
222 |
-
vcoco_000000345252.jpg
|
223 |
-
vcoco_000000032151.jpg
|
224 |
-
vcoco_000000157651.jpg
|
225 |
-
vcoco_000000085626.jpg
|
226 |
-
vcoco_000000314645.jpg
|
227 |
-
vcoco_000000326243.jpg
|
228 |
-
vcoco_000000259585.jpg
|
229 |
-
vcoco_000000063248.jpg
|
230 |
-
vcoco_000000353835.jpg
|
231 |
-
vcoco_000000291921.jpg
|
232 |
-
vcoco_000000079031.jpg
|
233 |
-
vcoco_000000181330.jpg
|
234 |
-
vcoco_000000546658.jpg
|
235 |
-
vcoco_000000137888.jpg
|
236 |
-
vcoco_000000333626.jpg
|
237 |
-
vcoco_000000452115.jpg
|
238 |
-
vcoco_000000315742.jpg
|
239 |
-
vcoco_000000411241.jpg
|
240 |
-
vcoco_000000246436.jpg
|
241 |
-
vcoco_000000280084.jpg
|
242 |
-
vcoco_000000404820.jpg
|
243 |
-
vcoco_000000110490.jpg
|
244 |
-
vcoco_000000422918.jpg
|
245 |
-
vcoco_000000020161.jpg
|
246 |
-
vcoco_000000163085.jpg
|
247 |
-
vcoco_000000515123.jpg
|
248 |
-
vcoco_000000519905.jpg
|
249 |
-
vcoco_000000534687.jpg
|
250 |
-
vcoco_000000508724.jpg
|
251 |
-
vcoco_000000546320.jpg
|
252 |
-
vcoco_000000475271.jpg
|
253 |
-
vcoco_000000456969.jpg
|
254 |
-
vcoco_000000334530.jpg
|
255 |
-
vcoco_000000448181.jpg
|
256 |
-
vcoco_000000258761.jpg
|
257 |
-
vcoco_000000571640.jpg
|
258 |
-
vcoco_000000238502.jpg
|
259 |
-
vcoco_000000365728.jpg
|
260 |
-
vcoco_000000421253.jpg
|
261 |
-
vcoco_000000207177.jpg
|
262 |
-
vcoco_000000450567.jpg
|
263 |
-
vcoco_000000386261.jpg
|
264 |
-
vcoco_000000261902.jpg
|
265 |
-
vcoco_000000036322.jpg
|
266 |
-
vcoco_000000230851.jpg
|
267 |
-
vcoco_000000417298.jpg
|
268 |
-
vcoco_000000400080.jpg
|
269 |
-
vcoco_000000038049.jpg
|
270 |
-
vcoco_000000288486.jpg
|
271 |
-
vcoco_000000475952.jpg
|
272 |
-
vcoco_000000258769.jpg
|
273 |
-
vcoco_000000158684.jpg
|
274 |
-
vcoco_000000120994.jpg
|
275 |
-
vcoco_000000134926.jpg
|
276 |
-
vcoco_000000522413.jpg
|
277 |
-
vcoco_000000575389.jpg
|
278 |
-
vcoco_000000317018.jpg
|
279 |
-
vcoco_000000503332.jpg
|
280 |
-
vcoco_000000343438.jpg
|
281 |
-
vcoco_000000006041.jpg
|
282 |
-
vcoco_000000440554.jpg
|
283 |
-
vcoco_000000109666.jpg
|
284 |
-
vcoco_000000514468.jpg
|
285 |
-
vcoco_000000381607.jpg
|
286 |
-
vcoco_000000357769.jpg
|
287 |
-
vcoco_000000576754.jpg
|
288 |
-
vcoco_000000519351.jpg
|
289 |
-
vcoco_000000296906.jpg
|
290 |
-
vcoco_000000508949.jpg
|
291 |
-
vcoco_000000515924.jpg
|
292 |
-
vcoco_000000516339.jpg
|
293 |
-
vcoco_000000564328.jpg
|
294 |
-
vcoco_000000169854.jpg
|
295 |
-
vcoco_000000457906.jpg
|
296 |
-
vcoco_000000045086.jpg
|
297 |
-
vcoco_000000387270.jpg
|
298 |
-
vcoco_000000095854.jpg
|
299 |
-
vcoco_000000228920.jpg
|
300 |
-
vcoco_000000324971.jpg
|
301 |
-
vcoco_000000505242.jpg
|
302 |
-
vcoco_000000006189.jpg
|
303 |
-
vcoco_000000562602.jpg
|
304 |
-
vcoco_000000449661.jpg
|
305 |
-
vcoco_000000069029.jpg
|
306 |
-
vcoco_000000511325.jpg
|
307 |
-
vcoco_000000501576.jpg
|
308 |
-
vcoco_000000560632.jpg
|
309 |
-
vcoco_000000514083.jpg
|
310 |
-
vcoco_000000022371.jpg
|
311 |
-
vcoco_000000258141.jpg
|
312 |
-
vcoco_000000489573.jpg
|
313 |
-
vcoco_000000541017.jpg
|
314 |
-
vcoco_000000565570.jpg
|
315 |
-
vcoco_000000503421.jpg
|
316 |
-
vcoco_000000556083.jpg
|
317 |
-
vcoco_000000450340.jpg
|
318 |
-
vcoco_000000462676.jpg
|
319 |
-
vcoco_000000520478.jpg
|
320 |
-
vcoco_000000226374.jpg
|
321 |
-
vcoco_000000436544.jpg
|
322 |
-
vcoco_000000227250.jpg
|
323 |
-
vcoco_000000482172.jpg
|
324 |
-
vcoco_000000502113.jpg
|
325 |
-
vcoco_000000346863.jpg
|
326 |
-
vcoco_000000305156.jpg
|
327 |
-
vcoco_000000292211.jpg
|
328 |
-
vcoco_000000368602.jpg
|
329 |
-
vcoco_000000457400.jpg
|
330 |
-
vcoco_000000013985.jpg
|
331 |
-
vcoco_000000248007.jpg
|
332 |
-
vcoco_000000475919.jpg
|
333 |
-
vcoco_000000087501.jpg
|
334 |
-
vcoco_000000056669.jpg
|
335 |
-
vcoco_000000510061.jpg
|
336 |
-
vcoco_000000417870.jpg
|
337 |
-
vcoco_000000353976.jpg
|
338 |
-
vcoco_000000036663.jpg
|
339 |
-
vcoco_000000302740.jpg
|
340 |
-
vcoco_000000321776.jpg
|
341 |
-
vcoco_000000011195.jpg
|
342 |
-
vcoco_000000489313.jpg
|
343 |
-
vcoco_000000106411.jpg
|
344 |
-
vcoco_000000445933.jpg
|
345 |
-
vcoco_000000138834.jpg
|
346 |
-
vcoco_000000567530.jpg
|
347 |
-
vcoco_000000342650.jpg
|
348 |
-
vcoco_000000109232.jpg
|
349 |
-
vcoco_000000318444.jpg
|
350 |
-
vcoco_000000414923.jpg
|
351 |
-
vcoco_000000185792.jpg
|
352 |
-
vcoco_000000259565.jpg
|
353 |
-
vcoco_000000140065.jpg
|
354 |
-
vcoco_000000305760.jpg
|
355 |
-
vcoco_000000561512.jpg
|
356 |
-
vcoco_000000491058.jpg
|
357 |
-
vcoco_000000236865.jpg
|
358 |
-
vcoco_000000233188.jpg
|
359 |
-
vcoco_000000172264.jpg
|
360 |
-
vcoco_000000531633.jpg
|
361 |
-
vcoco_000000541474.jpg
|
362 |
-
vcoco_000000558006.jpg
|
363 |
-
vcoco_000000460781.jpg
|
364 |
-
vcoco_000000299116.jpg
|
365 |
-
vcoco_000000419444.jpg
|
366 |
-
vcoco_000000563912.jpg
|
367 |
-
vcoco_000000062623.jpg
|
368 |
-
vcoco_000000416072.jpg
|
369 |
-
vcoco_000000111148.jpg
|
370 |
-
vcoco_000000371555.jpg
|
371 |
-
vcoco_000000313925.jpg
|
372 |
-
vcoco_000000084004.jpg
|
373 |
-
vcoco_000000183843.jpg
|
374 |
-
vcoco_000000579060.jpg
|
375 |
-
vcoco_000000129852.jpg
|
376 |
-
vcoco_000000509526.jpg
|
377 |
-
vcoco_000000484584.jpg
|
378 |
-
vcoco_000000190277.jpg
|
379 |
-
vcoco_000000400332.jpg
|
380 |
-
vcoco_000000133620.jpg
|
381 |
-
vcoco_000000239119.jpg
|
382 |
-
vcoco_000000516261.jpg
|
383 |
-
vcoco_000000323789.jpg
|
384 |
-
vcoco_000000310131.jpg
|
385 |
-
vcoco_000000504353.jpg
|
386 |
-
vcoco_000000217486.jpg
|
387 |
-
vcoco_000000439386.jpg
|
388 |
-
vcoco_000000558089.jpg
|
389 |
-
vcoco_000000441218.jpg
|
390 |
-
vcoco_000000050782.jpg
|
391 |
-
vcoco_000000395304.jpg
|
392 |
-
vcoco_000000276893.jpg
|
393 |
-
vcoco_000000279013.jpg
|
394 |
-
vcoco_000000565518.jpg
|
395 |
-
vcoco_000000579261.jpg
|
396 |
-
vcoco_000000364433.jpg
|
397 |
-
vcoco_000000024242.jpg
|
398 |
-
vcoco_000000332916.jpg
|
399 |
-
vcoco_000000443095.jpg
|
400 |
-
vcoco_000000497343.jpg
|
401 |
-
vcoco_000000400168.jpg
|
402 |
-
vcoco_000000073172.jpg
|
403 |
-
vcoco_000000445263.jpg
|
404 |
-
vcoco_000000090628.jpg
|
405 |
-
vcoco_000000341645.jpg
|
406 |
-
vcoco_000000308145.jpg
|
407 |
-
vcoco_000000133766.jpg
|
408 |
-
vcoco_000000549683.jpg
|
409 |
-
vcoco_000000060596.jpg
|
410 |
-
vcoco_000000059685.jpg
|
411 |
-
vcoco_000000039664.jpg
|
412 |
-
vcoco_000000076901.jpg
|
413 |
-
vcoco_000000290130.jpg
|
414 |
-
vcoco_000000354290.jpg
|
415 |
-
vcoco_000000572296.jpg
|
416 |
-
vcoco_000000197862.jpg
|
417 |
-
vcoco_000000381544.jpg
|
418 |
-
vcoco_000000400925.jpg
|
419 |
-
vcoco_000000047315.jpg
|
420 |
-
vcoco_000000069965.jpg
|
421 |
-
vcoco_000000158058.jpg
|
422 |
-
vcoco_000000238857.jpg
|
423 |
-
vcoco_000000435468.jpg
|
424 |
-
vcoco_000000074838.jpg
|
425 |
-
vcoco_000000505636.jpg
|
426 |
-
vcoco_000000494782.jpg
|
427 |
-
vcoco_000000016210.jpg
|
428 |
-
vcoco_000000357413.jpg
|
429 |
-
vcoco_000000432062.jpg
|
430 |
-
vcoco_000000390435.jpg
|
431 |
-
vcoco_000000072910.jpg
|
432 |
-
vcoco_000000325838.jpg
|
433 |
-
vcoco_000000483639.jpg
|
434 |
-
vcoco_000000331367.jpg
|
435 |
-
vcoco_000000374368.jpg
|
436 |
-
vcoco_000000025282.jpg
|
437 |
-
vcoco_000000334625.jpg
|
438 |
-
vcoco_000000413217.jpg
|
439 |
-
vcoco_000000221132.jpg
|
440 |
-
vcoco_000000333924.jpg
|
441 |
-
vcoco_000000076994.jpg
|
442 |
-
vcoco_000000074349.jpg
|
443 |
-
vcoco_000000284131.jpg
|
444 |
-
vcoco_000000389577.jpg
|
445 |
-
vcoco_000000323895.jpg
|
446 |
-
vcoco_000000028692.jpg
|
447 |
-
vcoco_000000230133.jpg
|
448 |
-
vcoco_000000130513.jpg
|
449 |
-
vcoco_000000285302.jpg
|
450 |
-
vcoco_000000293554.jpg
|
451 |
-
vcoco_000000034900.jpg
|
452 |
-
vcoco_000000485902.jpg
|
453 |
-
vcoco_000000443844.jpg
|
454 |
-
vcoco_000000115898.jpg
|
455 |
-
vcoco_000000377105.jpg
|
456 |
-
vcoco_000000282564.jpg
|
457 |
-
vcoco_000000413154.jpg
|
458 |
-
vcoco_000000264819.jpg
|
459 |
-
vcoco_000000395225.jpg
|
460 |
-
vcoco_000000456566.jpg
|
461 |
-
vcoco_000000048044.jpg
|
462 |
-
vcoco_000000420167.jpg
|
463 |
-
vcoco_000000576625.jpg
|
464 |
-
vcoco_000000579760.jpg
|
465 |
-
vcoco_000000399294.jpg
|
466 |
-
vcoco_000000034356.jpg
|
467 |
-
vcoco_000000358617.jpg
|
468 |
-
vcoco_000000492968.jpg
|
469 |
-
vcoco_000000325242.jpg
|
470 |
-
vcoco_000000109537.jpg
|
471 |
-
vcoco_000000459585.jpg
|
472 |
-
vcoco_000000281008.jpg
|
473 |
-
vcoco_000000029045.jpg
|
474 |
-
vcoco_000000068277.jpg
|
475 |
-
vcoco_000000444927.jpg
|
476 |
-
vcoco_000000050638.jpg
|
477 |
-
vcoco_000000532295.jpg
|
478 |
-
vcoco_000000427941.jpg
|
479 |
-
vcoco_000000452471.jpg
|
480 |
-
vcoco_000000483066.jpg
|
481 |
-
vcoco_000000501381.jpg
|
482 |
-
vcoco_000000280761.jpg
|
483 |
-
vcoco_000000403349.jpg
|
484 |
-
vcoco_000000314154.jpg
|
485 |
-
vcoco_000000456807.jpg
|
486 |
-
vcoco_000000174176.jpg
|
487 |
-
vcoco_000000441608.jpg
|
488 |
-
vcoco_000000071124.jpg
|
489 |
-
vcoco_000000400742.jpg
|
490 |
-
vcoco_000000282943.jpg
|
491 |
-
vcoco_000000445908.jpg
|
492 |
-
vcoco_000000412879.jpg
|
493 |
-
vcoco_000000386363.jpg
|
494 |
-
vcoco_000000474026.jpg
|
495 |
-
vcoco_000000047548.jpg
|
496 |
-
vcoco_000000468299.jpg
|
497 |
-
vcoco_000000398941.jpg
|
498 |
-
vcoco_000000503976.jpg
|
499 |
-
vcoco_000000169648.jpg
|
500 |
-
vcoco_000000369936.jpg
|
501 |
-
vcoco_000000433170.jpg
|
502 |
-
vcoco_000000329498.jpg
|
503 |
-
vcoco_000000372604.jpg
|
504 |
-
vcoco_000000278462.jpg
|
505 |
-
vcoco_000000093075.jpg
|
506 |
-
vcoco_000000312985.jpg
|
507 |
-
vcoco_000000358525.jpg
|
508 |
-
vcoco_000000064310.jpg
|
509 |
-
vcoco_000000280908.jpg
|
510 |
-
vcoco_000000536214.jpg
|
511 |
-
vcoco_000000578572.jpg
|
512 |
-
vcoco_000000380330.jpg
|
513 |
-
vcoco_000000403680.jpg
|
514 |
-
vcoco_000000450687.jpg
|
515 |
-
vcoco_000000436984.jpg
|
516 |
-
vcoco_000000220457.jpg
|
517 |
-
vcoco_000000104023.jpg
|
518 |
-
vcoco_000000334813.jpg
|
519 |
-
vcoco_000000494860.jpg
|
520 |
-
vcoco_000000418384.jpg
|
521 |
-
vcoco_000000064462.jpg
|
522 |
-
vcoco_000000314204.jpg
|
523 |
-
vcoco_000000431364.jpg
|
524 |
-
vcoco_000000108425.jpg
|
525 |
-
vcoco_000000461644.jpg
|
526 |
-
vcoco_000000012938.jpg
|
527 |
-
vcoco_000000066676.jpg
|
528 |
-
vcoco_000000560969.jpg
|
529 |
-
vcoco_000000502202.jpg
|
530 |
-
vcoco_000000282733.jpg
|
531 |
-
vcoco_000000480408.jpg
|
532 |
-
vcoco_000000345139.jpg
|
533 |
-
vcoco_000000400044.jpg
|
534 |
-
vcoco_000000228135.jpg
|
535 |
-
vcoco_000000440347.jpg
|
536 |
-
vcoco_000000404373.jpg
|
537 |
-
vcoco_000000476139.jpg
|
538 |
-
vcoco_000000443204.jpg
|
539 |
-
vcoco_000000437594.jpg
|
540 |
-
vcoco_000000415109.jpg
|
541 |
-
vcoco_000000443681.jpg
|
542 |
-
vcoco_000000564304.jpg
|
543 |
-
vcoco_000000349709.jpg
|
544 |
-
vcoco_000000323153.jpg
|
545 |
-
vcoco_000000385323.jpg
|
546 |
-
vcoco_000000203631.jpg
|
547 |
-
vcoco_000000477066.jpg
|
548 |
-
vcoco_000000264179.jpg
|
549 |
-
vcoco_000000535174.jpg
|
550 |
-
vcoco_000000542723.jpg
|
551 |
-
vcoco_000000133576.jpg
|
552 |
-
vcoco_000000203809.jpg
|
553 |
-
vcoco_000000353989.jpg
|
554 |
-
vcoco_000000121083.jpg
|
555 |
-
vcoco_000000308399.jpg
|
556 |
-
vcoco_000000034428.jpg
|
557 |
-
vcoco_000000422211.jpg
|
558 |
-
vcoco_000000487898.jpg
|
559 |
-
vcoco_000000444308.jpg
|
560 |
-
vcoco_000000566518.jpg
|
561 |
-
vcoco_000000426469.jpg
|
562 |
-
vcoco_000000272095.jpg
|
563 |
-
vcoco_000000091336.jpg
|
564 |
-
vcoco_000000179526.jpg
|
565 |
-
vcoco_000000419212.jpg
|
566 |
-
vcoco_000000318179.jpg
|
567 |
-
vcoco_000000446285.jpg
|
568 |
-
vcoco_000000467875.jpg
|
569 |
-
vcoco_000000204935.jpg
|
570 |
-
vcoco_000000456345.jpg
|
571 |
-
vcoco_000000554711.jpg
|
572 |
-
vcoco_000000565203.jpg
|
573 |
-
vcoco_000000313361.jpg
|
574 |
-
vcoco_000000128113.jpg
|
575 |
-
vcoco_000000408481.jpg
|
576 |
-
vcoco_000000398798.jpg
|
577 |
-
vcoco_000000144610.jpg
|
578 |
-
vcoco_000000532449.jpg
|
579 |
-
vcoco_000000267837.jpg
|
580 |
-
vcoco_000000103722.jpg
|
581 |
-
vcoco_000000476398.jpg
|
582 |
-
vcoco_000000412681.jpg
|
583 |
-
vcoco_000000447728.jpg
|
584 |
-
vcoco_000000299254.jpg
|
585 |
-
vcoco_000000361171.jpg
|
586 |
-
vcoco_000000187001.jpg
|
587 |
-
vcoco_000000309284.jpg
|
588 |
-
vcoco_000000528966.jpg
|
589 |
-
vcoco_000000231714.jpg
|
590 |
-
vcoco_000000580847.jpg
|
591 |
-
vcoco_000000475159.jpg
|
592 |
-
vcoco_000000492535.jpg
|
593 |
-
vcoco_000000054329.jpg
|
594 |
-
vcoco_000000034825.jpg
|
595 |
-
vcoco_000000266866.jpg
|
596 |
-
vcoco_000000266715.jpg
|
597 |
-
vcoco_000000578119.jpg
|
598 |
-
vcoco_000000176312.jpg
|
599 |
-
vcoco_000000202853.jpg
|
600 |
-
vcoco_000000115584.jpg
|
601 |
-
vcoco_000000123974.jpg
|
602 |
-
vcoco_000000278973.jpg
|
603 |
-
vcoco_000000461715.jpg
|
604 |
-
vcoco_000000073333.jpg
|
605 |
-
vcoco_000000114389.jpg
|
606 |
-
vcoco_000000160828.jpg
|
607 |
-
vcoco_000000275117.jpg
|
608 |
-
vcoco_000000228505.jpg
|
609 |
-
vcoco_000000031521.jpg
|
610 |
-
vcoco_000000420156.jpg
|
611 |
-
vcoco_000000450894.jpg
|
612 |
-
vcoco_000000107430.jpg
|
613 |
-
vcoco_000000467654.jpg
|
614 |
-
vcoco_000000095916.jpg
|
615 |
-
vcoco_000000561849.jpg
|
616 |
-
vcoco_000000385154.jpg
|
617 |
-
vcoco_000000409367.jpg
|
618 |
-
vcoco_000000434637.jpg
|
619 |
-
vcoco_000000535552.jpg
|
620 |
-
vcoco_000000512455.jpg
|
621 |
-
vcoco_000000331083.jpg
|
622 |
-
vcoco_000000516318.jpg
|
623 |
-
vcoco_000000288984.jpg
|
624 |
-
vcoco_000000451751.jpg
|
625 |
-
vcoco_000000295114.jpg
|
626 |
-
vcoco_000000180584.jpg
|
627 |
-
vcoco_000000494936.jpg
|
628 |
-
vcoco_000000551175.jpg
|
629 |
-
vcoco_000000536087.jpg
|
630 |
-
vcoco_000000460997.jpg
|
631 |
-
vcoco_000000561437.jpg
|
632 |
-
vcoco_000000329307.jpg
|
633 |
-
vcoco_000000035979.jpg
|
634 |
-
vcoco_000000442695.jpg
|
635 |
-
vcoco_000000307186.jpg
|
636 |
-
vcoco_000000468612.jpg
|
637 |
-
vcoco_000000426453.jpg
|
638 |
-
vcoco_000000403109.jpg
|
639 |
-
vcoco_000000521094.jpg
|
640 |
-
vcoco_000000378499.jpg
|
641 |
-
vcoco_000000343159.jpg
|
642 |
-
vcoco_000000053121.jpg
|
643 |
-
vcoco_000000008923.jpg
|
644 |
-
vcoco_000000558454.jpg
|
645 |
-
vcoco_000000402109.jpg
|
646 |
-
vcoco_000000262642.jpg
|
647 |
-
vcoco_000000570263.jpg
|
648 |
-
vcoco_000000577980.jpg
|
649 |
-
vcoco_000000500944.jpg
|
650 |
-
vcoco_000000329016.jpg
|
651 |
-
vcoco_000000517807.jpg
|
652 |
-
vcoco_000000467113.jpg
|
653 |
-
vcoco_000000498733.jpg
|
654 |
-
vcoco_000000007333.jpg
|
655 |
-
vcoco_000000308509.jpg
|
656 |
-
vcoco_000000471601.jpg
|
657 |
-
vcoco_000000109042.jpg
|
658 |
-
vcoco_000000018250.jpg
|
659 |
-
vcoco_000000427762.jpg
|
660 |
-
vcoco_000000354976.jpg
|
661 |
-
vcoco_000000057767.jpg
|
662 |
-
vcoco_000000410066.jpg
|
663 |
-
vcoco_000000195594.jpg
|
664 |
-
vcoco_000000580972.jpg
|
665 |
-
vcoco_000000438617.jpg
|
666 |
-
vcoco_000000326420.jpg
|
667 |
-
vcoco_000000349354.jpg
|
668 |
-
vcoco_000000557396.jpg
|
669 |
-
vcoco_000000492271.jpg
|
670 |
-
vcoco_000000510138.jpg
|
671 |
-
vcoco_000000496768.jpg
|
672 |
-
vcoco_000000442097.jpg
|
673 |
-
vcoco_000000324605.jpg
|
674 |
-
vcoco_000000551439.jpg
|
675 |
-
vcoco_000000314193.jpg
|
676 |
-
vcoco_000000548224.jpg
|
677 |
-
vcoco_000000526955.jpg
|
678 |
-
vcoco_000000442094.jpg
|
679 |
-
vcoco_000000517101.jpg
|
680 |
-
vcoco_000000563302.jpg
|
681 |
-
vcoco_000000497719.jpg
|
682 |
-
vcoco_000000418074.jpg
|
683 |
-
vcoco_000000431566.jpg
|
684 |
-
vcoco_000000417911.jpg
|
685 |
-
vcoco_000000166478.jpg
|
686 |
-
vcoco_000000397777.jpg
|
687 |
-
vcoco_000000535706.jpg
|
688 |
-
vcoco_000000309120.jpg
|
689 |
-
vcoco_000000396688.jpg
|
690 |
-
vcoco_000000536607.jpg
|
691 |
-
vcoco_000000321132.jpg
|
692 |
-
vcoco_000000095211.jpg
|
693 |
-
vcoco_000000266847.jpg
|
694 |
-
vcoco_000000155873.jpg
|
695 |
-
vcoco_000000080185.jpg
|
696 |
-
vcoco_000000242612.jpg
|
697 |
-
vcoco_000000555217.jpg
|
698 |
-
vcoco_000000459258.jpg
|
699 |
-
vcoco_000000177015.jpg
|
700 |
-
vcoco_000000109503.jpg
|
701 |
-
vcoco_000000390689.jpg
|
702 |
-
vcoco_000000132430.jpg
|
703 |
-
vcoco_000000431342.jpg
|
704 |
-
vcoco_000000572749.jpg
|
705 |
-
vcoco_000000557830.jpg
|
706 |
-
vcoco_000000450709.jpg
|
707 |
-
vcoco_000000310035.jpg
|
708 |
-
vcoco_000000531696.jpg
|
709 |
-
vcoco_000000334723.jpg
|
710 |
-
vcoco_000000517941.jpg
|
711 |
-
vcoco_000000467246.jpg
|
712 |
-
vcoco_000000286953.jpg
|
713 |
-
vcoco_000000550787.jpg
|
714 |
-
vcoco_000000211604.jpg
|
715 |
-
vcoco_000000495485.jpg
|
716 |
-
vcoco_000000227370.jpg
|
717 |
-
vcoco_000000477172.jpg
|
718 |
-
vcoco_000000159213.jpg
|
719 |
-
vcoco_000000376509.jpg
|
720 |
-
vcoco_000000401310.jpg
|
721 |
-
vcoco_000000480936.jpg
|
722 |
-
vcoco_000000428254.jpg
|
723 |
-
vcoco_000000316298.jpg
|
724 |
-
vcoco_000000361384.jpg
|
725 |
-
vcoco_000000451043.jpg
|
726 |
-
vcoco_000000476738.jpg
|
727 |
-
vcoco_000000504170.jpg
|
728 |
-
vcoco_000000392443.jpg
|
729 |
-
vcoco_000000053490.jpg
|
730 |
-
vcoco_000000329841.jpg
|
731 |
-
vcoco_000000358307.jpg
|
732 |
-
vcoco_000000418907.jpg
|
733 |
-
vcoco_000000312078.jpg
|
734 |
-
vcoco_000000043872.jpg
|
735 |
-
vcoco_000000550453.jpg
|
736 |
-
vcoco_000000549937.jpg
|
737 |
-
vcoco_000000247366.jpg
|
738 |
-
vcoco_000000469198.jpg
|
739 |
-
vcoco_000000379578.jpg
|
740 |
-
vcoco_000000415885.jpg
|
741 |
-
vcoco_000000111756.jpg
|
742 |
-
vcoco_000000421309.jpg
|
743 |
-
vcoco_000000373318.jpg
|
744 |
-
vcoco_000000342770.jpg
|
745 |
-
vcoco_000000379230.jpg
|
746 |
-
vcoco_000000103705.jpg
|
747 |
-
vcoco_000000160471.jpg
|
748 |
-
vcoco_000000106575.jpg
|
749 |
-
vcoco_000000374010.jpg
|
750 |
-
vcoco_000000198426.jpg
|
751 |
-
vcoco_000000321495.jpg
|
752 |
-
vcoco_000000422517.jpg
|
753 |
-
vcoco_000000180460.jpg
|
754 |
-
vcoco_000000337439.jpg
|
755 |
-
vcoco_000000441795.jpg
|
756 |
-
vcoco_000000321907.jpg
|
757 |
-
vcoco_000000460039.jpg
|
758 |
-
vcoco_000000437592.jpg
|
759 |
-
vcoco_000000084155.jpg
|
760 |
-
vcoco_000000528517.jpg
|
761 |
-
vcoco_000000412286.jpg
|
762 |
-
vcoco_000000472394.jpg
|
763 |
-
vcoco_000000132617.jpg
|
764 |
-
vcoco_000000293353.jpg
|
765 |
-
vcoco_000000554595.jpg
|
766 |
-
vcoco_000000315200.jpg
|
767 |
-
vcoco_000000498263.jpg
|
768 |
-
vcoco_000000236141.jpg
|
769 |
-
vcoco_000000321432.jpg
|
770 |
-
vcoco_000000388468.jpg
|
771 |
-
vcoco_000000487718.jpg
|
772 |
-
vcoco_000000530543.jpg
|
773 |
-
vcoco_000000405223.jpg
|
774 |
-
vcoco_000000154362.jpg
|
775 |
-
vcoco_000000417416.jpg
|
776 |
-
vcoco_000000239204.jpg
|
777 |
-
vcoco_000000570567.jpg
|
778 |
-
vcoco_000000322362.jpg
|
779 |
-
vcoco_000000160735.jpg
|
780 |
-
vcoco_000000248831.jpg
|
781 |
-
vcoco_000000518052.jpg
|
782 |
-
vcoco_000000356505.jpg
|
783 |
-
vcoco_000000208263.jpg
|
784 |
-
vcoco_000000560704.jpg
|
785 |
-
vcoco_000000387724.jpg
|
786 |
-
vcoco_000000533159.jpg
|
787 |
-
vcoco_000000399284.jpg
|
788 |
-
vcoco_000000082936.jpg
|
789 |
-
vcoco_000000154369.jpg
|
790 |
-
vcoco_000000559209.jpg
|
791 |
-
vcoco_000000508605.jpg
|
792 |
-
vcoco_000000299723.jpg
|
793 |
-
vcoco_000000075527.jpg
|
794 |
-
vcoco_000000431480.jpg
|
795 |
-
vcoco_000000570474.jpg
|
796 |
-
vcoco_000000491449.jpg
|
797 |
-
vcoco_000000398463.jpg
|
798 |
-
vcoco_000000280083.jpg
|
799 |
-
vcoco_000000343937.jpg
|
800 |
-
vcoco_000000569758.jpg
|
801 |
-
vcoco_000000265550.jpg
|
802 |
-
vcoco_000000554059.jpg
|
803 |
-
vcoco_000000397190.jpg
|
804 |
-
vcoco_000000533742.jpg
|
805 |
-
vcoco_000000569872.jpg
|
806 |
-
vcoco_000000428288.jpg
|
807 |
-
vcoco_000000077754.jpg
|
808 |
-
vcoco_000000552188.jpg
|
809 |
-
vcoco_000000573967.jpg
|
810 |
-
vcoco_000000447330.jpg
|
811 |
-
vcoco_000000513039.jpg
|
812 |
-
vcoco_000000342929.jpg
|
813 |
-
vcoco_000000396693.jpg
|
814 |
-
vcoco_000000499027.jpg
|
815 |
-
vcoco_000000312504.jpg
|
816 |
-
vcoco_000000515785.jpg
|
817 |
-
vcoco_000000119248.jpg
|
818 |
-
vcoco_000000111910.jpg
|
819 |
-
vcoco_000000053589.jpg
|
820 |
-
vcoco_000000352399.jpg
|
821 |
-
vcoco_000000260651.jpg
|
822 |
-
vcoco_000000524047.jpg
|
823 |
-
vcoco_000000384780.jpg
|
824 |
-
vcoco_000000184227.jpg
|
825 |
-
vcoco_000000549427.jpg
|
826 |
-
vcoco_000000522054.jpg
|
827 |
-
vcoco_000000338802.jpg
|
828 |
-
vcoco_000000409198.jpg
|
829 |
-
vcoco_000000158996.jpg
|
830 |
-
vcoco_000000313220.jpg
|
831 |
-
vcoco_000000396821.jpg
|
832 |
-
vcoco_000000551763.jpg
|
833 |
-
vcoco_000000039778.jpg
|
834 |
-
vcoco_000000471762.jpg
|
835 |
-
vcoco_000000408190.jpg
|
836 |
-
vcoco_000000461884.jpg
|
837 |
-
vcoco_000000208657.jpg
|
838 |
-
vcoco_000000412296.jpg
|
839 |
-
vcoco_000000513861.jpg
|
840 |
-
vcoco_000000353740.jpg
|
841 |
-
vcoco_000000551701.jpg
|
842 |
-
vcoco_000000296459.jpg
|
843 |
-
vcoco_000000276491.jpg
|
844 |
-
vcoco_000000301443.jpg
|
845 |
-
vcoco_000000399873.jpg
|
846 |
-
vcoco_000000269015.jpg
|
847 |
-
vcoco_000000551676.jpg
|
848 |
-
vcoco_000000109937.jpg
|
849 |
-
vcoco_000000553965.jpg
|
850 |
-
vcoco_000000390315.jpg
|
851 |
-
vcoco_000000329134.jpg
|
852 |
-
vcoco_000000565877.jpg
|
853 |
-
vcoco_000000053431.jpg
|
854 |
-
vcoco_000000256475.jpg
|
855 |
-
vcoco_000000270609.jpg
|
856 |
-
vcoco_000000419262.jpg
|
857 |
-
vcoco_000000487482.jpg
|
858 |
-
vcoco_000000211520.jpg
|
859 |
-
vcoco_000000528729.jpg
|
860 |
-
vcoco_000000305004.jpg
|
861 |
-
vcoco_000000453529.jpg
|
862 |
-
vcoco_000000461898.jpg
|
863 |
-
vcoco_000000499268.jpg
|
864 |
-
vcoco_000000556892.jpg
|
865 |
-
vcoco_000000536879.jpg
|
866 |
-
vcoco_000000284831.jpg
|
867 |
-
vcoco_000000338910.jpg
|
868 |
-
vcoco_000000153797.jpg
|
869 |
-
vcoco_000000450559.jpg
|
870 |
-
vcoco_000000078436.jpg
|
871 |
-
vcoco_000000546717.jpg
|
872 |
-
vcoco_000000342174.jpg
|
873 |
-
vcoco_000000047801.jpg
|
874 |
-
vcoco_000000360297.jpg
|
875 |
-
vcoco_000000417259.jpg
|
876 |
-
vcoco_000000186711.jpg
|
877 |
-
vcoco_000000517967.jpg
|
878 |
-
vcoco_000000452964.jpg
|
879 |
-
vcoco_000000036086.jpg
|
880 |
-
vcoco_000000449603.jpg
|
881 |
-
vcoco_000000315037.jpg
|
882 |
-
vcoco_000000289572.jpg
|
883 |
-
vcoco_000000446358.jpg
|
884 |
-
vcoco_000000331858.jpg
|
885 |
-
vcoco_000000132114.jpg
|
886 |
-
vcoco_000000561223.jpg
|
887 |
-
vcoco_000000120416.jpg
|
888 |
-
vcoco_000000353968.jpg
|
889 |
-
vcoco_000000511384.jpg
|
890 |
-
vcoco_000000546295.jpg
|
891 |
-
vcoco_000000547246.jpg
|
892 |
-
vcoco_000000054516.jpg
|
893 |
-
vcoco_000000343514.jpg
|
894 |
-
vcoco_000000485027.jpg
|
895 |
-
vcoco_000000573453.jpg
|
896 |
-
vcoco_000000046893.jpg
|
897 |
-
vcoco_000000330478.jpg
|
898 |
-
vcoco_000000527002.jpg
|
899 |
-
vcoco_000000017559.jpg
|
900 |
-
vcoco_000000407441.jpg
|
901 |
-
vcoco_000000365701.jpg
|
902 |
-
vcoco_000000274870.jpg
|
903 |
-
vcoco_000000311902.jpg
|
904 |
-
vcoco_000000101065.jpg
|
905 |
-
vcoco_000000498509.jpg
|
906 |
-
vcoco_000000185479.jpg
|
907 |
-
vcoco_000000121827.jpg
|
908 |
-
vcoco_000000082666.jpg
|
909 |
-
vcoco_000000456254.jpg
|
910 |
-
vcoco_000000522758.jpg
|
911 |
-
vcoco_000000084397.jpg
|
912 |
-
vcoco_000000480747.jpg
|
913 |
-
vcoco_000000431859.jpg
|
914 |
-
vcoco_000000371497.jpg
|
915 |
-
vcoco_000000431116.jpg
|
916 |
-
vcoco_000000249046.jpg
|
917 |
-
vcoco_000000316143.jpg
|
918 |
-
vcoco_000000416188.jpg
|
919 |
-
vcoco_000000260261.jpg
|
920 |
-
vcoco_000000199381.jpg
|
921 |
-
vcoco_000000465199.jpg
|
922 |
-
vcoco_000000261569.jpg
|
923 |
-
vcoco_000000524118.jpg
|
924 |
-
vcoco_000000104999.jpg
|
925 |
-
vcoco_000000189839.jpg
|
926 |
-
vcoco_000000523997.jpg
|
927 |
-
vcoco_000000554541.jpg
|
928 |
-
vcoco_000000535100.jpg
|
929 |
-
vcoco_000000529455.jpg
|
930 |
-
vcoco_000000581062.jpg
|
931 |
-
vcoco_000000420487.jpg
|
932 |
-
vcoco_000000476827.jpg
|
933 |
-
vcoco_000000373500.jpg
|
934 |
-
vcoco_000000255495.jpg
|
935 |
-
vcoco_000000050553.jpg
|
936 |
-
vcoco_000000413044.jpg
|
937 |
-
vcoco_000000384755.jpg
|
938 |
-
vcoco_000000500005.jpg
|
939 |
-
vcoco_000000401797.jpg
|
940 |
-
vcoco_000000406294.jpg
|
941 |
-
vcoco_000000274715.jpg
|
942 |
-
vcoco_000000160001.jpg
|
943 |
-
vcoco_000000446473.jpg
|
944 |
-
vcoco_000000545525.jpg
|
945 |
-
vcoco_000000551737.jpg
|
946 |
-
vcoco_000000004386.jpg
|
947 |
-
vcoco_000000045367.jpg
|
948 |
-
vcoco_000000114458.jpg
|
949 |
-
vcoco_000000249325.jpg
|
950 |
-
vcoco_000000467257.jpg
|
951 |
-
vcoco_000000504224.jpg
|
952 |
-
vcoco_000000295154.jpg
|
953 |
-
vcoco_000000516516.jpg
|
954 |
-
vcoco_000000223214.jpg
|
955 |
-
vcoco_000000112949.jpg
|
956 |
-
vcoco_000000226660.jpg
|
957 |
-
vcoco_000000519852.jpg
|
958 |
-
vcoco_000000051181.jpg
|
959 |
-
vcoco_000000170118.jpg
|
960 |
-
vcoco_000000468162.jpg
|
961 |
-
vcoco_000000565957.jpg
|
962 |
-
vcoco_000000518370.jpg
|
963 |
-
vcoco_000000371633.jpg
|
964 |
-
vcoco_000000382307.jpg
|
965 |
-
vcoco_000000533628.jpg
|
966 |
-
vcoco_000000265810.jpg
|
967 |
-
vcoco_000000454359.jpg
|
968 |
-
vcoco_000000288576.jpg
|
969 |
-
vcoco_000000276151.jpg
|
970 |
-
vcoco_000000572326.jpg
|
971 |
-
vcoco_000000459304.jpg
|
972 |
-
vcoco_000000357916.jpg
|
973 |
-
vcoco_000000173375.jpg
|
974 |
-
vcoco_000000026132.jpg
|
975 |
-
vcoco_000000450543.jpg
|
976 |
-
vcoco_000000261318.jpg
|
977 |
-
vcoco_000000458637.jpg
|
978 |
-
vcoco_000000266160.jpg
|
979 |
-
vcoco_000000419816.jpg
|
980 |
-
vcoco_000000531036.jpg
|
981 |
-
vcoco_000000537743.jpg
|
982 |
-
vcoco_000000226562.jpg
|
983 |
-
vcoco_000000437540.jpg
|
984 |
-
vcoco_000000129379.jpg
|
985 |
-
vcoco_000000258869.jpg
|
986 |
-
vcoco_000000409523.jpg
|
987 |
-
vcoco_000000494900.jpg
|
988 |
-
vcoco_000000335650.jpg
|
989 |
-
vcoco_000000511324.jpg
|
990 |
-
vcoco_000000083778.jpg
|
991 |
-
vcoco_000000054091.jpg
|
992 |
-
vcoco_000000171016.jpg
|
993 |
-
vcoco_000000554727.jpg
|
994 |
-
vcoco_000000422545.jpg
|
995 |
-
vcoco_000000132510.jpg
|
996 |
-
vcoco_000000054007.jpg
|
997 |
-
vcoco_000000562850.jpg
|
998 |
-
vcoco_000000505234.jpg
|
999 |
-
vcoco_000000208629.jpg
|
1000 |
-
vcoco_000000521943.jpg
|
1001 |
-
vcoco_000000278801.jpg
|
1002 |
-
vcoco_000000175642.jpg
|
1003 |
-
vcoco_000000016285.jpg
|
1004 |
-
vcoco_000000262116.jpg
|
1005 |
-
vcoco_000000332582.jpg
|
1006 |
-
vcoco_000000549462.jpg
|
1007 |
-
vcoco_000000220917.jpg
|
1008 |
-
vcoco_000000553285.jpg
|
1009 |
-
vcoco_000000240028.jpg
|
1010 |
-
vcoco_000000524623.jpg
|
1011 |
-
vcoco_000000517468.jpg
|
1012 |
-
vcoco_000000043555.jpg
|
1013 |
-
vcoco_000000107148.jpg
|
1014 |
-
vcoco_000000415243.jpg
|
1015 |
-
vcoco_000000555582.jpg
|
1016 |
-
vcoco_000000147595.jpg
|
1017 |
-
vcoco_000000497244.jpg
|
1018 |
-
vcoco_000000117691.jpg
|
1019 |
-
vcoco_000000381856.jpg
|
1020 |
-
vcoco_000000576463.jpg
|
1021 |
-
vcoco_000000250309.jpg
|
1022 |
-
vcoco_000000510864.jpg
|
1023 |
-
vcoco_000000269098.jpg
|
1024 |
-
vcoco_000000483089.jpg
|
1025 |
-
vcoco_000000490847.jpg
|
1026 |
-
vcoco_000000574829.jpg
|
1027 |
-
vcoco_000000085154.jpg
|
1028 |
-
vcoco_000000498765.jpg
|
1029 |
-
vcoco_000000431693.jpg
|
1030 |
-
vcoco_000000408288.jpg
|
1031 |
-
vcoco_000000000693.jpg
|
1032 |
-
vcoco_000000330205.jpg
|
1033 |
-
vcoco_000000097596.jpg
|
1034 |
-
vcoco_000000316189.jpg
|
1035 |
-
vcoco_000000462381.jpg
|
1036 |
-
vcoco_000000565233.jpg
|
1037 |
-
vcoco_000000536241.jpg
|
1038 |
-
vcoco_000000407987.jpg
|
1039 |
-
vcoco_000000436391.jpg
|
1040 |
-
vcoco_000000298380.jpg
|
1041 |
-
vcoco_000000534048.jpg
|
1042 |
-
vcoco_000000345751.jpg
|
1043 |
-
vcoco_000000395576.jpg
|
1044 |
-
vcoco_000000453037.jpg
|
1045 |
-
vcoco_000000575664.jpg
|
1046 |
-
vcoco_000000535685.jpg
|
1047 |
-
vcoco_000000016817.jpg
|
1048 |
-
vcoco_000000333629.jpg
|
1049 |
-
vcoco_000000397705.jpg
|
1050 |
-
vcoco_000000095201.jpg
|
1051 |
-
vcoco_000000376531.jpg
|
1052 |
-
vcoco_000000578449.jpg
|
1053 |
-
vcoco_000000097270.jpg
|
1054 |
-
vcoco_000000143107.jpg
|
1055 |
-
vcoco_000000161190.jpg
|
1056 |
-
vcoco_000000185945.jpg
|
1057 |
-
vcoco_000000491665.jpg
|
1058 |
-
vcoco_000000468966.jpg
|
1059 |
-
vcoco_000000177807.jpg
|
1060 |
-
vcoco_000000336484.jpg
|
1061 |
-
vcoco_000000515792.jpg
|
1062 |
-
vcoco_000000480883.jpg
|
1063 |
-
vcoco_000000544059.jpg
|
1064 |
-
vcoco_000000483213.jpg
|
1065 |
-
vcoco_000000232451.jpg
|
1066 |
-
vcoco_000000033643.jpg
|
1067 |
-
vcoco_000000426376.jpg
|
1068 |
-
vcoco_000000025024.jpg
|
1069 |
-
vcoco_000000399605.jpg
|
1070 |
-
vcoco_000000223740.jpg
|
1071 |
-
vcoco_000000263586.jpg
|
1072 |
-
vcoco_000000311620.jpg
|
1073 |
-
vcoco_000000140388.jpg
|
1074 |
-
vcoco_000000053990.jpg
|
1075 |
-
vcoco_000000410272.jpg
|
1076 |
-
vcoco_000000527427.jpg
|
1077 |
-
vcoco_000000063525.jpg
|
1078 |
-
vcoco_000000570471.jpg
|
1079 |
-
vcoco_000000267443.jpg
|
1080 |
-
vcoco_000000379488.jpg
|
1081 |
-
vcoco_000000008309.jpg
|
1082 |
-
vcoco_000000241373.jpg
|
1083 |
-
vcoco_000000540614.jpg
|
1084 |
-
vcoco_000000056455.jpg
|
1085 |
-
vcoco_000000158582.jpg
|
1086 |
-
vcoco_000000004498.jpg
|
1087 |
-
vcoco_000000076893.jpg
|
1088 |
-
vcoco_000000319765.jpg
|
1089 |
-
vcoco_000000563299.jpg
|
1090 |
-
vcoco_000000533770.jpg
|
1091 |
-
vcoco_000000275919.jpg
|
1092 |
-
vcoco_000000502935.jpg
|
1093 |
-
vcoco_000000276381.jpg
|
1094 |
-
vcoco_000000358884.jpg
|
1095 |
-
vcoco_000000346577.jpg
|
1096 |
-
vcoco_000000331883.jpg
|
1097 |
-
vcoco_000000549754.jpg
|
1098 |
-
vcoco_000000310606.jpg
|
1099 |
-
vcoco_000000151075.jpg
|
1100 |
-
vcoco_000000418185.jpg
|
1101 |
-
vcoco_000000328337.jpg
|
1102 |
-
vcoco_000000117197.jpg
|
1103 |
-
vcoco_000000152564.jpg
|
1104 |
-
vcoco_000000502776.jpg
|
1105 |
-
vcoco_000000517636.jpg
|
1106 |
-
vcoco_000000182840.jpg
|
1107 |
-
vcoco_000000471756.jpg
|
1108 |
-
vcoco_000000332990.jpg
|
1109 |
-
vcoco_000000076992.jpg
|
1110 |
-
vcoco_000000487843.jpg
|
1111 |
-
vcoco_000000576652.jpg
|
1112 |
-
vcoco_000000534412.jpg
|
1113 |
-
vcoco_000000366379.jpg
|
1114 |
-
vcoco_000000002758.jpg
|
1115 |
-
vcoco_000000123851.jpg
|
1116 |
-
vcoco_000000467752.jpg
|
1117 |
-
vcoco_000000074832.jpg
|
1118 |
-
vcoco_000000383454.jpg
|
1119 |
-
vcoco_000000440813.jpg
|
1120 |
-
vcoco_000000440153.jpg
|
1121 |
-
vcoco_000000025096.jpg
|
1122 |
-
vcoco_000000094046.jpg
|
1123 |
-
vcoco_000000038886.jpg
|
1124 |
-
vcoco_000000545226.jpg
|
1125 |
-
vcoco_000000537206.jpg
|
1126 |
-
vcoco_000000419249.jpg
|
1127 |
-
vcoco_000000456302.jpg
|
1128 |
-
vcoco_000000549115.jpg
|
1129 |
-
vcoco_000000563575.jpg
|
1130 |
-
vcoco_000000581040.jpg
|
1131 |
-
vcoco_000000454916.jpg
|
1132 |
-
vcoco_000000308744.jpg
|
1133 |
-
vcoco_000000488980.jpg
|
1134 |
-
vcoco_000000235479.jpg
|
1135 |
-
vcoco_000000322473.jpg
|
1136 |
-
vcoco_000000291209.jpg
|
1137 |
-
vcoco_000000262235.jpg
|
1138 |
-
vcoco_000000482002.jpg
|
1139 |
-
vcoco_000000554674.jpg
|
1140 |
-
vcoco_000000108301.jpg
|
1141 |
-
vcoco_000000281040.jpg
|
1142 |
-
vcoco_000000423113.jpg
|
1143 |
-
vcoco_000000207634.jpg
|
1144 |
-
vcoco_000000292482.jpg
|
1145 |
-
vcoco_000000141920.jpg
|
1146 |
-
vcoco_000000520204.jpg
|
1147 |
-
vcoco_000000548834.jpg
|
1148 |
-
vcoco_000000490171.jpg
|
1149 |
-
vcoco_000000271759.jpg
|
1150 |
-
vcoco_000000490280.jpg
|
1151 |
-
vcoco_000000552488.jpg
|
1152 |
-
vcoco_000000141557.jpg
|
1153 |
-
vcoco_000000407646.jpg
|
1154 |
-
vcoco_000000351595.jpg
|
1155 |
-
vcoco_000000544857.jpg
|
1156 |
-
vcoco_000000361140.jpg
|
1157 |
-
vcoco_000000282225.jpg
|
1158 |
-
vcoco_000000527868.jpg
|
1159 |
-
vcoco_000000078803.jpg
|
1160 |
-
vcoco_000000375021.jpg
|
1161 |
-
vcoco_000000340658.jpg
|
1162 |
-
vcoco_000000088576.jpg
|
1163 |
-
vcoco_000000426275.jpg
|
1164 |
-
vcoco_000000213090.jpg
|
1165 |
-
vcoco_000000110769.jpg
|
1166 |
-
vcoco_000000383289.jpg
|
1167 |
-
vcoco_000000079619.jpg
|
1168 |
-
vcoco_000000463055.jpg
|
1169 |
-
vcoco_000000578993.jpg
|
1170 |
-
vcoco_000000536028.jpg
|
1171 |
-
vcoco_000000381492.jpg
|
1172 |
-
vcoco_000000248224.jpg
|
1173 |
-
vcoco_000000393874.jpg
|
1174 |
-
vcoco_000000418929.jpg
|
1175 |
-
vcoco_000000146742.jpg
|
1176 |
-
vcoco_000000515219.jpg
|
1177 |
-
vcoco_000000083058.jpg
|
1178 |
-
vcoco_000000291752.jpg
|
1179 |
-
vcoco_000000386880.jpg
|
1180 |
-
vcoco_000000482819.jpg
|
1181 |
-
vcoco_000000051054.jpg
|
1182 |
-
vcoco_000000120061.jpg
|
1183 |
-
vcoco_000000030958.jpg
|
1184 |
-
vcoco_000000523201.jpg
|
1185 |
-
vcoco_000000030534.jpg
|
1186 |
-
vcoco_000000203416.jpg
|
1187 |
-
vcoco_000000424521.jpg
|
1188 |
-
vcoco_000000462114.jpg
|
1189 |
-
vcoco_000000527092.jpg
|
1190 |
-
vcoco_000000503808.jpg
|
1191 |
-
vcoco_000000140860.jpg
|
1192 |
-
vcoco_000000372464.jpg
|
1193 |
-
vcoco_000000335859.jpg
|
1194 |
-
vcoco_000000258399.jpg
|
1195 |
-
vcoco_000000299773.jpg
|
1196 |
-
vcoco_000000480437.jpg
|
1197 |
-
vcoco_000000547457.jpg
|
1198 |
-
vcoco_000000420298.jpg
|
1199 |
-
vcoco_000000044170.jpg
|
1200 |
-
vcoco_000000290234.jpg
|
1201 |
-
vcoco_000000490515.jpg
|
1202 |
-
vcoco_000000439756.jpg
|
1203 |
-
vcoco_000000084113.jpg
|
1204 |
-
vcoco_000000018193.jpg
|
1205 |
-
vcoco_000000381667.jpg
|
1206 |
-
vcoco_000000272064.jpg
|
1207 |
-
vcoco_000000455227.jpg
|
1208 |
-
vcoco_000000122586.jpg
|
1209 |
-
vcoco_000000360818.jpg
|
1210 |
-
vcoco_000000575601.jpg
|
1211 |
-
vcoco_000000459153.jpg
|
1212 |
-
vcoco_000000171788.jpg
|
1213 |
-
vcoco_000000447770.jpg
|
1214 |
-
vcoco_000000008803.jpg
|
1215 |
-
vcoco_000000481415.jpg
|
1216 |
-
vcoco_000000568155.jpg
|
1217 |
-
vcoco_000000402410.jpg
|
1218 |
-
vcoco_000000137140.jpg
|
1219 |
-
vcoco_000000035672.jpg
|
1220 |
-
vcoco_000000521209.jpg
|
1221 |
-
vcoco_000000050518.jpg
|
1222 |
-
vcoco_000000345665.jpg
|
1223 |
-
vcoco_000000376817.jpg
|
1224 |
-
vcoco_000000537345.jpg
|
1225 |
-
vcoco_000000450940.jpg
|
1226 |
-
vcoco_000000454478.jpg
|
1227 |
-
vcoco_000000368219.jpg
|
1228 |
-
vcoco_000000331604.jpg
|
1229 |
-
vcoco_000000295837.jpg
|
1230 |
-
vcoco_000000580315.jpg
|
1231 |
-
vcoco_000000457889.jpg
|
1232 |
-
vcoco_000000342495.jpg
|
1233 |
-
vcoco_000000451345.jpg
|
1234 |
-
vcoco_000000191226.jpg
|
1235 |
-
vcoco_000000460916.jpg
|
1236 |
-
vcoco_000000291498.jpg
|
1237 |
-
vcoco_000000388153.jpg
|
1238 |
-
vcoco_000000438186.jpg
|
1239 |
-
vcoco_000000485985.jpg
|
1240 |
-
vcoco_000000075179.jpg
|
1241 |
-
vcoco_000000576792.jpg
|
1242 |
-
vcoco_000000298331.jpg
|
1243 |
-
vcoco_000000549216.jpg
|
1244 |
-
vcoco_000000002278.jpg
|
1245 |
-
vcoco_000000560757.jpg
|
1246 |
-
vcoco_000000234031.jpg
|
1247 |
-
vcoco_000000068525.jpg
|
1248 |
-
vcoco_000000519209.jpg
|
1249 |
-
vcoco_000000184919.jpg
|
1250 |
-
vcoco_000000324969.jpg
|
1251 |
-
vcoco_000000401829.jpg
|
1252 |
-
vcoco_000000504287.jpg
|
1253 |
-
vcoco_000000478433.jpg
|
1254 |
-
vcoco_000000576305.jpg
|
1255 |
-
vcoco_000000493728.jpg
|
1256 |
-
vcoco_000000462065.jpg
|
1257 |
-
vcoco_000000388510.jpg
|
1258 |
-
vcoco_000000114404.jpg
|
1259 |
-
vcoco_000000467580.jpg
|
1260 |
-
vcoco_000000578788.jpg
|
1261 |
-
vcoco_000000465323.jpg
|
1262 |
-
vcoco_000000294410.jpg
|
1263 |
-
vcoco_000000290320.jpg
|
1264 |
-
vcoco_000000506061.jpg
|
1265 |
-
vcoco_000000168775.jpg
|
1266 |
-
vcoco_000000398858.jpg
|
1267 |
-
vcoco_000000450737.jpg
|
1268 |
-
vcoco_000000412621.jpg
|
1269 |
-
vcoco_000000413970.jpg
|
1270 |
-
vcoco_000000278359.jpg
|
1271 |
-
vcoco_000000239769.jpg
|
1272 |
-
vcoco_000000499200.jpg
|
1273 |
-
vcoco_000000258330.jpg
|
1274 |
-
vcoco_000000478723.jpg
|
1275 |
-
vcoco_000000438894.jpg
|
1276 |
-
vcoco_000000537864.jpg
|
1277 |
-
vcoco_000000075655.jpg
|
1278 |
-
vcoco_000000258061.jpg
|
1279 |
-
vcoco_000000442746.jpg
|
1280 |
-
vcoco_000000099964.jpg
|
1281 |
-
vcoco_000000367776.jpg
|
1282 |
-
vcoco_000000579056.jpg
|
1283 |
-
vcoco_000000203479.jpg
|
1284 |
-
vcoco_000000408219.jpg
|
1285 |
-
vcoco_000000353707.jpg
|
1286 |
-
vcoco_000000431715.jpg
|
1287 |
-
vcoco_000000357831.jpg
|
1288 |
-
vcoco_000000143154.jpg
|
1289 |
-
vcoco_000000309314.jpg
|
1290 |
-
vcoco_000000498807.jpg
|
1291 |
-
vcoco_000000484978.jpg
|
1292 |
-
vcoco_000000341113.jpg
|
1293 |
-
vcoco_000000118104.jpg
|
1294 |
-
vcoco_000000516856.jpg
|
1295 |
-
vcoco_000000409722.jpg
|
1296 |
-
vcoco_000000048270.jpg
|
1297 |
-
vcoco_000000175757.jpg
|
1298 |
-
vcoco_000000447124.jpg
|
1299 |
-
vcoco_000000551024.jpg
|
1300 |
-
vcoco_000000365687.jpg
|
1301 |
-
vcoco_000000310998.jpg
|
1302 |
-
vcoco_000000295716.jpg
|
1303 |
-
vcoco_000000368521.jpg
|
1304 |
-
vcoco_000000160345.jpg
|
1305 |
-
vcoco_000000570225.jpg
|
1306 |
-
vcoco_000000365851.jpg
|
1307 |
-
vcoco_000000439773.jpg
|
1308 |
-
vcoco_000000467068.jpg
|
1309 |
-
vcoco_000000548546.jpg
|
1310 |
-
vcoco_000000081379.jpg
|
1311 |
-
vcoco_000000395899.jpg
|
1312 |
-
vcoco_000000312552.jpg
|
1313 |
-
vcoco_000000476258.jpg
|
1314 |
-
vcoco_000000415889.jpg
|
1315 |
-
vcoco_000000268159.jpg
|
1316 |
-
vcoco_000000405762.jpg
|
1317 |
-
vcoco_000000313166.jpg
|
1318 |
-
vcoco_000000142620.jpg
|
1319 |
-
vcoco_000000248591.jpg
|
1320 |
-
vcoco_000000244768.jpg
|
1321 |
-
vcoco_000000322177.jpg
|
1322 |
-
vcoco_000000469896.jpg
|
1323 |
-
vcoco_000000247206.jpg
|
1324 |
-
vcoco_000000389273.jpg
|
1325 |
-
vcoco_000000505792.jpg
|
1326 |
-
vcoco_000000158747.jpg
|
1327 |
-
vcoco_000000487112.jpg
|
1328 |
-
vcoco_000000541209.jpg
|
1329 |
-
vcoco_000000278867.jpg
|
1330 |
-
vcoco_000000170779.jpg
|
1331 |
-
vcoco_000000404059.jpg
|
1332 |
-
vcoco_000000473206.jpg
|
1333 |
-
vcoco_000000509459.jpg
|
1334 |
-
vcoco_000000240147.jpg
|
1335 |
-
vcoco_000000043625.jpg
|
1336 |
-
vcoco_000000042834.jpg
|
1337 |
-
vcoco_000000404517.jpg
|
1338 |
-
vcoco_000000077003.jpg
|
1339 |
-
vcoco_000000397205.jpg
|
1340 |
-
vcoco_000000338501.jpg
|
1341 |
-
vcoco_000000031106.jpg
|
1342 |
-
vcoco_000000146190.jpg
|
1343 |
-
vcoco_000000409058.jpg
|
1344 |
-
vcoco_000000432239.jpg
|
1345 |
-
vcoco_000000520873.jpg
|
1346 |
-
vcoco_000000408735.jpg
|
1347 |
-
vcoco_000000574986.jpg
|
1348 |
-
vcoco_000000410772.jpg
|
1349 |
-
vcoco_000000464200.jpg
|
1350 |
-
vcoco_000000574356.jpg
|
1351 |
-
vcoco_000000040813.jpg
|
1352 |
-
vcoco_000000497265.jpg
|
1353 |
-
vcoco_000000247469.jpg
|
1354 |
-
vcoco_000000118612.jpg
|
1355 |
-
vcoco_000000492545.jpg
|
1356 |
-
vcoco_000000330186.jpg
|
1357 |
-
vcoco_000000568502.jpg
|
1358 |
-
vcoco_000000572544.jpg
|
1359 |
-
vcoco_000000263957.jpg
|
1360 |
-
vcoco_000000304252.jpg
|
1361 |
-
vcoco_000000008594.jpg
|
1362 |
-
vcoco_000000105079.jpg
|
1363 |
-
vcoco_000000029191.jpg
|
1364 |
-
vcoco_000000027482.jpg
|
1365 |
-
vcoco_000000445074.jpg
|
1366 |
-
vcoco_000000564240.jpg
|
1367 |
-
vcoco_000000065982.jpg
|
1368 |
-
vcoco_000000510254.jpg
|
1369 |
-
vcoco_000000290221.jpg
|
1370 |
-
vcoco_000000264222.jpg
|
1371 |
-
vcoco_000000055221.jpg
|
1372 |
-
vcoco_000000330699.jpg
|
1373 |
-
vcoco_000000406013.jpg
|
1374 |
-
vcoco_000000068166.jpg
|
1375 |
-
vcoco_000000290602.jpg
|
1376 |
-
vcoco_000000474423.jpg
|
1377 |
-
vcoco_000000525899.jpg
|
1378 |
-
vcoco_000000433454.jpg
|
1379 |
-
vcoco_000000393284.jpg
|
1380 |
-
vcoco_000000475396.jpg
|
1381 |
-
vcoco_000000571450.jpg
|
1382 |
-
vcoco_000000325991.jpg
|
1383 |
-
vcoco_000000547080.jpg
|
1384 |
-
vcoco_000000206235.jpg
|
1385 |
-
vcoco_000000350019.jpg
|
1386 |
-
vcoco_000000564915.jpg
|
1387 |
-
vcoco_000000156497.jpg
|
1388 |
-
vcoco_000000129758.jpg
|
1389 |
-
vcoco_000000413489.jpg
|
1390 |
-
vcoco_000000187244.jpg
|
1391 |
-
vcoco_000000134907.jpg
|
1392 |
-
vcoco_000000572965.jpg
|
1393 |
-
vcoco_000000501527.jpg
|
1394 |
-
vcoco_000000493483.jpg
|
1395 |
-
vcoco_000000566536.jpg
|
1396 |
-
vcoco_000000405648.jpg
|
1397 |
-
vcoco_000000484714.jpg
|
1398 |
-
vcoco_000000067269.jpg
|
1399 |
-
vcoco_000000336602.jpg
|
1400 |
-
vcoco_000000113893.jpg
|
1401 |
-
vcoco_000000325885.jpg
|
1402 |
-
vcoco_000000519320.jpg
|
1403 |
-
vcoco_000000011091.jpg
|
1404 |
-
vcoco_000000476709.jpg
|
1405 |
-
vcoco_000000333433.jpg
|
1406 |
-
vcoco_000000106666.jpg
|
1407 |
-
vcoco_000000525226.jpg
|
1408 |
-
vcoco_000000304519.jpg
|
1409 |
-
vcoco_000000152530.jpg
|
1410 |
-
vcoco_000000293577.jpg
|
1411 |
-
vcoco_000000298689.jpg
|
1412 |
-
vcoco_000000276057.jpg
|
1413 |
-
vcoco_000000410510.jpg
|
1414 |
-
vcoco_000000247421.jpg
|
1415 |
-
vcoco_000000381253.jpg
|
1416 |
-
vcoco_000000316085.jpg
|
1417 |
-
vcoco_000000508288.jpg
|
1418 |
-
vcoco_000000448837.jpg
|
1419 |
-
vcoco_000000444142.jpg
|
1420 |
-
vcoco_000000314147.jpg
|
1421 |
-
vcoco_000000369961.jpg
|
1422 |
-
vcoco_000000282209.jpg
|
1423 |
-
vcoco_000000097662.jpg
|
1424 |
-
vcoco_000000077296.jpg
|
1425 |
-
vcoco_000000260190.jpg
|
1426 |
-
vcoco_000000454282.jpg
|
1427 |
-
vcoco_000000566448.jpg
|
1428 |
-
vcoco_000000510033.jpg
|
1429 |
-
vcoco_000000566173.jpg
|
1430 |
-
vcoco_000000548361.jpg
|
1431 |
-
vcoco_000000485155.jpg
|
1432 |
-
vcoco_000000451099.jpg
|
1433 |
-
vcoco_000000222346.jpg
|
1434 |
-
vcoco_000000446705.jpg
|
1435 |
-
vcoco_000000506377.jpg
|
1436 |
-
vcoco_000000079853.jpg
|
1437 |
-
vcoco_000000513524.jpg
|
1438 |
-
vcoco_000000368041.jpg
|
1439 |
-
vcoco_000000124387.jpg
|
1440 |
-
vcoco_000000369153.jpg
|
1441 |
-
vcoco_000000041875.jpg
|
1442 |
-
vcoco_000000309744.jpg
|
1443 |
-
vcoco_000000231991.jpg
|
1444 |
-
vcoco_000000541174.jpg
|
1445 |
-
vcoco_000000470545.jpg
|
1446 |
-
vcoco_000000317049.jpg
|
1447 |
-
vcoco_000000461883.jpg
|
1448 |
-
vcoco_000000406917.jpg
|
1449 |
-
vcoco_000000552947.jpg
|
1450 |
-
vcoco_000000272058.jpg
|
1451 |
-
vcoco_000000350231.jpg
|
1452 |
-
vcoco_000000465333.jpg
|
1453 |
-
vcoco_000000505814.jpg
|
1454 |
-
vcoco_000000147375.jpg
|
1455 |
-
vcoco_000000493192.jpg
|
1456 |
-
vcoco_000000275685.jpg
|
1457 |
-
vcoco_000000248034.jpg
|
1458 |
-
vcoco_000000416549.jpg
|
1459 |
-
vcoco_000000126073.jpg
|
1460 |
-
vcoco_000000501652.jpg
|
1461 |
-
vcoco_000000323067.jpg
|
1462 |
-
vcoco_000000015597.jpg
|
1463 |
-
vcoco_000000510866.jpg
|
1464 |
-
vcoco_000000461443.jpg
|
1465 |
-
vcoco_000000567780.jpg
|
1466 |
-
vcoco_000000497674.jpg
|
1467 |
-
vcoco_000000321824.jpg
|
1468 |
-
vcoco_000000572725.jpg
|
1469 |
-
vcoco_000000298065.jpg
|
1470 |
-
vcoco_000000354145.jpg
|
1471 |
-
vcoco_000000380909.jpg
|
1472 |
-
vcoco_000000449865.jpg
|
1473 |
-
vcoco_000000136664.jpg
|
1474 |
-
vcoco_000000542163.jpg
|
1475 |
-
vcoco_000000135585.jpg
|
1476 |
-
vcoco_000000454509.jpg
|
1477 |
-
vcoco_000000535536.jpg
|
1478 |
-
vcoco_000000509867.jpg
|
1479 |
-
vcoco_000000404613.jpg
|
1480 |
-
vcoco_000000308967.jpg
|
1481 |
-
vcoco_000000331907.jpg
|
1482 |
-
vcoco_000000569322.jpg
|
1483 |
-
vcoco_000000519405.jpg
|
1484 |
-
vcoco_000000447762.jpg
|
1485 |
-
vcoco_000000092747.jpg
|
1486 |
-
vcoco_000000250249.jpg
|
1487 |
-
vcoco_000000519635.jpg
|
1488 |
-
vcoco_000000487876.jpg
|
1489 |
-
vcoco_000000570268.jpg
|
1490 |
-
vcoco_000000409468.jpg
|
1491 |
-
vcoco_000000468570.jpg
|
1492 |
-
vcoco_000000542982.jpg
|
1493 |
-
vcoco_000000295916.jpg
|
1494 |
-
vcoco_000000540209.jpg
|
1495 |
-
vcoco_000000236432.jpg
|
1496 |
-
vcoco_000000543831.jpg
|
1497 |
-
vcoco_000000464140.jpg
|
1498 |
-
vcoco_000000384346.jpg
|
1499 |
-
vcoco_000000468249.jpg
|
1500 |
-
vcoco_000000237677.jpg
|
1501 |
-
vcoco_000000061747.jpg
|
1502 |
-
vcoco_000000472659.jpg
|
1503 |
-
vcoco_000000400794.jpg
|
1504 |
-
vcoco_000000341429.jpg
|
1505 |
-
vcoco_000000079495.jpg
|
1506 |
-
vcoco_000000368586.jpg
|
1507 |
-
vcoco_000000305104.jpg
|
1508 |
-
vcoco_000000273889.jpg
|
1509 |
-
vcoco_000000163962.jpg
|
1510 |
-
vcoco_000000420711.jpg
|
1511 |
-
vcoco_000000448759.jpg
|
1512 |
-
vcoco_000000334410.jpg
|
1513 |
-
vcoco_000000427223.jpg
|
1514 |
-
vcoco_000000183214.jpg
|
1515 |
-
vcoco_000000232227.jpg
|
1516 |
-
vcoco_000000339336.jpg
|
1517 |
-
vcoco_000000145335.jpg
|
1518 |
-
vcoco_000000461063.jpg
|
1519 |
-
vcoco_000000121570.jpg
|
1520 |
-
vcoco_000000061414.jpg
|
1521 |
-
vcoco_000000011129.jpg
|
1522 |
-
vcoco_000000187765.jpg
|
1523 |
-
vcoco_000000114352.jpg
|
1524 |
-
vcoco_000000549284.jpg
|
1525 |
-
vcoco_000000553788.jpg
|
1526 |
-
vcoco_000000507171.jpg
|
1527 |
-
vcoco_000000431991.jpg
|
1528 |
-
vcoco_000000057283.jpg
|
1529 |
-
vcoco_000000023927.jpg
|
1530 |
-
vcoco_000000341921.jpg
|
1531 |
-
vcoco_000000233915.jpg
|
1532 |
-
vcoco_000000403489.jpg
|
1533 |
-
vcoco_000000033055.jpg
|
1534 |
-
vcoco_000000465878.jpg
|
1535 |
-
vcoco_000000283294.jpg
|
1536 |
-
vcoco_000000524924.jpg
|
1537 |
-
vcoco_000000245729.jpg
|
1538 |
-
vcoco_000000405574.jpg
|
1539 |
-
vcoco_000000515301.jpg
|
1540 |
-
vcoco_000000231645.jpg
|
1541 |
-
vcoco_000000533394.jpg
|
1542 |
-
vcoco_000000079070.jpg
|
1543 |
-
vcoco_000000251750.jpg
|
1544 |
-
vcoco_000000292187.jpg
|
1545 |
-
vcoco_000000407650.jpg
|
1546 |
-
vcoco_000000516474.jpg
|
1547 |
-
vcoco_000000488395.jpg
|
1548 |
-
vcoco_000000014801.jpg
|
1549 |
-
vcoco_000000046419.jpg
|
1550 |
-
vcoco_000000186899.jpg
|
1551 |
-
vcoco_000000419076.jpg
|
1552 |
-
vcoco_000000513456.jpg
|
1553 |
-
vcoco_000000484614.jpg
|
1554 |
-
vcoco_000000043829.jpg
|
1555 |
-
vcoco_000000420649.jpg
|
1556 |
-
vcoco_000000221562.jpg
|
1557 |
-
vcoco_000000322145.jpg
|
1558 |
-
vcoco_000000119494.jpg
|
1559 |
-
vcoco_000000036333.jpg
|
1560 |
-
vcoco_000000343608.jpg
|
1561 |
-
vcoco_000000233242.jpg
|
1562 |
-
vcoco_000000385753.jpg
|
1563 |
-
vcoco_000000456895.jpg
|
1564 |
-
vcoco_000000407139.jpg
|
1565 |
-
vcoco_000000441900.jpg
|
1566 |
-
vcoco_000000459645.jpg
|
1567 |
-
vcoco_000000346313.jpg
|
1568 |
-
vcoco_000000327174.jpg
|
1569 |
-
vcoco_000000441459.jpg
|
1570 |
-
vcoco_000000020599.jpg
|
1571 |
-
vcoco_000000462186.jpg
|
1572 |
-
vcoco_000000185697.jpg
|
1573 |
-
vcoco_000000554354.jpg
|
1574 |
-
vcoco_000000482735.jpg
|
1575 |
-
vcoco_000000463884.jpg
|
1576 |
-
vcoco_000000389554.jpg
|
1577 |
-
vcoco_000000068205.jpg
|
1578 |
-
vcoco_000000357383.jpg
|
1579 |
-
vcoco_000000158818.jpg
|
1580 |
-
vcoco_000000442961.jpg
|
1581 |
-
vcoco_000000512436.jpg
|
1582 |
-
vcoco_000000049893.jpg
|
1583 |
-
vcoco_000000492677.jpg
|
1584 |
-
vcoco_000000421361.jpg
|
1585 |
-
vcoco_000000180606.jpg
|
1586 |
-
vcoco_000000414385.jpg
|
1587 |
-
vcoco_000000406129.jpg
|
1588 |
-
vcoco_000000154567.jpg
|
1589 |
-
vcoco_000000445101.jpg
|
1590 |
-
vcoco_000000364102.jpg
|
1591 |
-
vcoco_000000014151.jpg
|
1592 |
-
vcoco_000000475229.jpg
|
1593 |
-
vcoco_000000016344.jpg
|
1594 |
-
vcoco_000000018728.jpg
|
1595 |
-
vcoco_000000393699.jpg
|
1596 |
-
vcoco_000000273155.jpg
|
1597 |
-
vcoco_000000135604.jpg
|
1598 |
-
vcoco_000000239130.jpg
|
1599 |
-
vcoco_000000296492.jpg
|
1600 |
-
vcoco_000000185598.jpg
|
1601 |
-
vcoco_000000290224.jpg
|
1602 |
-
vcoco_000000373078.jpg
|
1603 |
-
vcoco_000000263834.jpg
|
1604 |
-
vcoco_000000530998.jpg
|
1605 |
-
vcoco_000000488707.jpg
|
1606 |
-
vcoco_000000249561.jpg
|
1607 |
-
vcoco_000000433845.jpg
|
1608 |
-
vcoco_000000565993.jpg
|
1609 |
-
vcoco_000000408239.jpg
|
1610 |
-
vcoco_000000304336.jpg
|
1611 |
-
vcoco_000000437331.jpg
|
1612 |
-
vcoco_000000552254.jpg
|
1613 |
-
vcoco_000000231153.jpg
|
1614 |
-
vcoco_000000490437.jpg
|
1615 |
-
vcoco_000000495523.jpg
|
1616 |
-
vcoco_000000129563.jpg
|
1617 |
-
vcoco_000000463576.jpg
|
1618 |
-
vcoco_000000574506.jpg
|
1619 |
-
vcoco_000000172315.jpg
|
1620 |
-
vcoco_000000519479.jpg
|
1621 |
-
vcoco_000000526458.jpg
|
1622 |
-
vcoco_000000326284.jpg
|
1623 |
-
vcoco_000000403975.jpg
|
1624 |
-
vcoco_000000391284.jpg
|
1625 |
-
vcoco_000000329604.jpg
|
1626 |
-
vcoco_000000082622.jpg
|
1627 |
-
vcoco_000000348636.jpg
|
1628 |
-
vcoco_000000419333.jpg
|
1629 |
-
vcoco_000000579042.jpg
|
1630 |
-
vcoco_000000381789.jpg
|
1631 |
-
vcoco_000000248170.jpg
|
1632 |
-
vcoco_000000276055.jpg
|
1633 |
-
vcoco_000000245067.jpg
|
1634 |
-
vcoco_000000206747.jpg
|
1635 |
-
vcoco_000000378670.jpg
|
1636 |
-
vcoco_000000414578.jpg
|
1637 |
-
vcoco_000000000589.jpg
|
1638 |
-
vcoco_000000441598.jpg
|
1639 |
-
vcoco_000000282680.jpg
|
1640 |
-
vcoco_000000491681.jpg
|
1641 |
-
vcoco_000000522637.jpg
|
1642 |
-
vcoco_000000287402.jpg
|
1643 |
-
vcoco_000000444913.jpg
|
1644 |
-
vcoco_000000379980.jpg
|
1645 |
-
vcoco_000000563349.jpg
|
1646 |
-
vcoco_000000354144.jpg
|
1647 |
-
vcoco_000000246656.jpg
|
1648 |
-
vcoco_000000070733.jpg
|
1649 |
-
vcoco_000000345154.jpg
|
1650 |
-
vcoco_000000085974.jpg
|
1651 |
-
vcoco_000000482750.jpg
|
1652 |
-
vcoco_000000530558.jpg
|
1653 |
-
vcoco_000000389974.jpg
|
1654 |
-
vcoco_000000460837.jpg
|
1655 |
-
vcoco_000000417016.jpg
|
1656 |
-
vcoco_000000158107.jpg
|
1657 |
-
vcoco_000000004567.jpg
|
1658 |
-
vcoco_000000361623.jpg
|
1659 |
-
vcoco_000000315025.jpg
|
1660 |
-
vcoco_000000348631.jpg
|
1661 |
-
vcoco_000000558066.jpg
|
1662 |
-
vcoco_000000109992.jpg
|
1663 |
-
vcoco_000000367582.jpg
|
1664 |
-
vcoco_000000011625.jpg
|
1665 |
-
vcoco_000000437831.jpg
|
1666 |
-
vcoco_000000355762.jpg
|
1667 |
-
vcoco_000000581124.jpg
|
1668 |
-
vcoco_000000089052.jpg
|
1669 |
-
vcoco_000000562296.jpg
|
1670 |
-
vcoco_000000489339.jpg
|
1671 |
-
vcoco_000000102903.jpg
|
1672 |
-
vcoco_000000349897.jpg
|
1673 |
-
vcoco_000000501339.jpg
|
1674 |
-
vcoco_000000069440.jpg
|
1675 |
-
vcoco_000000434548.jpg
|
1676 |
-
vcoco_000000532055.jpg
|
1677 |
-
vcoco_000000279197.jpg
|
1678 |
-
vcoco_000000157102.jpg
|
1679 |
-
vcoco_000000067974.jpg
|
1680 |
-
vcoco_000000007977.jpg
|
1681 |
-
vcoco_000000254454.jpg
|
1682 |
-
vcoco_000000494309.jpg
|
1683 |
-
vcoco_000000380636.jpg
|
1684 |
-
vcoco_000000261732.jpg
|
1685 |
-
vcoco_000000378116.jpg
|
1686 |
-
vcoco_000000145385.jpg
|
1687 |
-
vcoco_000000525702.jpg
|
1688 |
-
vcoco_000000265815.jpg
|
1689 |
-
vcoco_000000512944.jpg
|
1690 |
-
vcoco_000000347482.jpg
|
1691 |
-
vcoco_000000073446.jpg
|
1692 |
-
vcoco_000000484701.jpg
|
1693 |
-
vcoco_000000556332.jpg
|
1694 |
-
vcoco_000000064189.jpg
|
1695 |
-
vcoco_000000396975.jpg
|
1696 |
-
vcoco_000000308759.jpg
|
1697 |
-
vcoco_000000283750.jpg
|
1698 |
-
vcoco_000000290282.jpg
|
1699 |
-
vcoco_000000546987.jpg
|
1700 |
-
vcoco_000000456485.jpg
|
1701 |
-
vcoco_000000093612.jpg
|
1702 |
-
vcoco_000000230315.jpg
|
1703 |
-
vcoco_000000490279.jpg
|
1704 |
-
vcoco_000000441518.jpg
|
1705 |
-
vcoco_000000048564.jpg
|
1706 |
-
vcoco_000000484599.jpg
|
1707 |
-
vcoco_000000400010.jpg
|
1708 |
-
vcoco_000000286425.jpg
|
1709 |
-
vcoco_000000434580.jpg
|
1710 |
-
vcoco_000000562045.jpg
|
1711 |
-
vcoco_000000258043.jpg
|
1712 |
-
vcoco_000000305319.jpg
|
1713 |
-
vcoco_000000499979.jpg
|
1714 |
-
vcoco_000000364994.jpg
|
1715 |
-
vcoco_000000324232.jpg
|
1716 |
-
vcoco_000000424303.jpg
|
1717 |
-
vcoco_000000550023.jpg
|
1718 |
-
vcoco_000000398076.jpg
|
1719 |
-
vcoco_000000053410.jpg
|
1720 |
-
vcoco_000000578861.jpg
|
1721 |
-
vcoco_000000153909.jpg
|
1722 |
-
vcoco_000000527493.jpg
|
1723 |
-
vcoco_000000330901.jpg
|
1724 |
-
vcoco_000000166376.jpg
|
1725 |
-
vcoco_000000188137.jpg
|
1726 |
-
vcoco_000000429158.jpg
|
1727 |
-
vcoco_000000075682.jpg
|
1728 |
-
vcoco_000000069320.jpg
|
1729 |
-
vcoco_000000424225.jpg
|
1730 |
-
vcoco_000000357743.jpg
|
1731 |
-
vcoco_000000562581.jpg
|
1732 |
-
vcoco_000000556966.jpg
|
1733 |
-
vcoco_000000469067.jpg
|
1734 |
-
vcoco_000000417700.jpg
|
1735 |
-
vcoco_000000558826.jpg
|
1736 |
-
vcoco_000000438504.jpg
|
1737 |
-
vcoco_000000171139.jpg
|
1738 |
-
vcoco_000000537316.jpg
|
1739 |
-
vcoco_000000296033.jpg
|
1740 |
-
vcoco_000000356490.jpg
|
1741 |
-
vcoco_000000067975.jpg
|
1742 |
-
vcoco_000000433637.jpg
|
1743 |
-
vcoco_000000073753.jpg
|
1744 |
-
vcoco_000000335594.jpg
|
1745 |
-
vcoco_000000539573.jpg
|
1746 |
-
vcoco_000000303342.jpg
|
1747 |
-
vcoco_000000412399.jpg
|
1748 |
-
vcoco_000000519631.jpg
|
1749 |
-
vcoco_000000046441.jpg
|
1750 |
-
vcoco_000000437452.jpg
|
1751 |
-
vcoco_000000278203.jpg
|
1752 |
-
vcoco_000000563849.jpg
|
1753 |
-
vcoco_000000469274.jpg
|
1754 |
-
vcoco_000000460240.jpg
|
1755 |
-
vcoco_000000361397.jpg
|
1756 |
-
vcoco_000000355297.jpg
|
1757 |
-
vcoco_000000418034.jpg
|
1758 |
-
vcoco_000000374702.jpg
|
1759 |
-
vcoco_000000376366.jpg
|
1760 |
-
vcoco_000000456433.jpg
|
1761 |
-
vcoco_000000564738.jpg
|
1762 |
-
vcoco_000000278853.jpg
|
1763 |
-
vcoco_000000436302.jpg
|
1764 |
-
vcoco_000000580466.jpg
|
1765 |
-
vcoco_000000297326.jpg
|
1766 |
-
vcoco_000000402396.jpg
|
1767 |
-
vcoco_000000574460.jpg
|
1768 |
-
vcoco_000000549361.jpg
|
1769 |
-
vcoco_000000527704.jpg
|
1770 |
-
vcoco_000000156192.jpg
|
1771 |
-
vcoco_000000365735.jpg
|
1772 |
-
vcoco_000000431494.jpg
|
1773 |
-
vcoco_000000117987.jpg
|
1774 |
-
vcoco_000000429170.jpg
|
1775 |
-
vcoco_000000535770.jpg
|
1776 |
-
vcoco_000000412788.jpg
|
1777 |
-
vcoco_000000233266.jpg
|
1778 |
-
vcoco_000000424548.jpg
|
1779 |
-
vcoco_000000444152.jpg
|
1780 |
-
vcoco_000000303429.jpg
|
1781 |
-
vcoco_000000493742.jpg
|
1782 |
-
vcoco_000000465911.jpg
|
1783 |
-
vcoco_000000463174.jpg
|
1784 |
-
vcoco_000000037039.jpg
|
1785 |
-
vcoco_000000347346.jpg
|
1786 |
-
vcoco_000000313914.jpg
|
1787 |
-
vcoco_000000561337.jpg
|
1788 |
-
vcoco_000000015140.jpg
|
1789 |
-
vcoco_000000398781.jpg
|
1790 |
-
vcoco_000000563951.jpg
|
1791 |
-
vcoco_000000350360.jpg
|
1792 |
-
vcoco_000000136687.jpg
|
1793 |
-
vcoco_000000449114.jpg
|
1794 |
-
vcoco_000000577928.jpg
|
1795 |
-
vcoco_000000049858.jpg
|
1796 |
-
vcoco_000000555271.jpg
|
1797 |
-
vcoco_000000228413.jpg
|
1798 |
-
vcoco_000000460346.jpg
|
1799 |
-
vcoco_000000382855.jpg
|
1800 |
-
vcoco_000000519744.jpg
|
1801 |
-
vcoco_000000456950.jpg
|
1802 |
-
vcoco_000000431062.jpg
|
1803 |
-
vcoco_000000419171.jpg
|
1804 |
-
vcoco_000000109229.jpg
|
1805 |
-
vcoco_000000056118.jpg
|
1806 |
-
vcoco_000000310981.jpg
|
1807 |
-
vcoco_000000027972.jpg
|
1808 |
-
vcoco_000000244646.jpg
|
1809 |
-
vcoco_000000294634.jpg
|
1810 |
-
vcoco_000000134496.jpg
|
1811 |
-
vcoco_000000213790.jpg
|
1812 |
-
vcoco_000000313313.jpg
|
1813 |
-
vcoco_000000070296.jpg
|
1814 |
-
vcoco_000000561809.jpg
|
1815 |
-
vcoco_000000563927.jpg
|
1816 |
-
vcoco_000000396853.jpg
|
1817 |
-
vcoco_000000147331.jpg
|
1818 |
-
vcoco_000000512211.jpg
|
1819 |
-
vcoco_000000538122.jpg
|
1820 |
-
vcoco_000000037655.jpg
|
1821 |
-
vcoco_000000414670.jpg
|
1822 |
-
vcoco_000000361046.jpg
|
1823 |
-
vcoco_000000143263.jpg
|
1824 |
-
vcoco_000000415153.jpg
|
1825 |
-
vcoco_000000475191.jpg
|
1826 |
-
vcoco_000000491130.jpg
|
1827 |
-
vcoco_000000172597.jpg
|
1828 |
-
vcoco_000000192095.jpg
|
1829 |
-
vcoco_000000571012.jpg
|
1830 |
-
vcoco_000000236068.jpg
|
1831 |
-
vcoco_000000564515.jpg
|
1832 |
-
vcoco_000000117508.jpg
|
1833 |
-
vcoco_000000435910.jpg
|
1834 |
-
vcoco_000000455334.jpg
|
1835 |
-
vcoco_000000308576.jpg
|
1836 |
-
vcoco_000000134589.jpg
|
1837 |
-
vcoco_000000055857.jpg
|
1838 |
-
vcoco_000000057062.jpg
|
1839 |
-
vcoco_000000202339.jpg
|
1840 |
-
vcoco_000000402118.jpg
|
1841 |
-
vcoco_000000580381.jpg
|
1842 |
-
vcoco_000000533315.jpg
|
1843 |
-
vcoco_000000146963.jpg
|
1844 |
-
vcoco_000000534906.jpg
|
1845 |
-
vcoco_000000110618.jpg
|
1846 |
-
vcoco_000000465556.jpg
|
1847 |
-
vcoco_000000347390.jpg
|
1848 |
-
vcoco_000000416473.jpg
|
1849 |
-
vcoco_000000358206.jpg
|
1850 |
-
vcoco_000000028547.jpg
|
1851 |
-
vcoco_000000302958.jpg
|
1852 |
-
vcoco_000000464789.jpg
|
1853 |
-
vcoco_000000438807.jpg
|
1854 |
-
vcoco_000000565612.jpg
|
1855 |
-
vcoco_000000010579.jpg
|
1856 |
-
vcoco_000000472757.jpg
|
1857 |
-
vcoco_000000433547.jpg
|
1858 |
-
vcoco_000000294863.jpg
|
1859 |
-
vcoco_000000063721.jpg
|
1860 |
-
vcoco_000000204049.jpg
|
1861 |
-
vcoco_000000574961.jpg
|
1862 |
-
vcoco_000000491090.jpg
|
1863 |
-
vcoco_000000552065.jpg
|
1864 |
-
vcoco_000000416267.jpg
|
1865 |
-
vcoco_000000525546.jpg
|
1866 |
-
vcoco_000000136672.jpg
|
1867 |
-
vcoco_000000018704.jpg
|
1868 |
-
vcoco_000000552985.jpg
|
1869 |
-
vcoco_000000412285.jpg
|
1870 |
-
vcoco_000000400907.jpg
|
1871 |
-
vcoco_000000501515.jpg
|
1872 |
-
vcoco_000000512827.jpg
|
1873 |
-
vcoco_000000293275.jpg
|
1874 |
-
vcoco_000000551849.jpg
|
1875 |
-
vcoco_000000171210.jpg
|
1876 |
-
vcoco_000000383046.jpg
|
1877 |
-
vcoco_000000284648.jpg
|
1878 |
-
vcoco_000000177069.jpg
|
1879 |
-
vcoco_000000274970.jpg
|
1880 |
-
vcoco_000000299859.jpg
|
1881 |
-
vcoco_000000447911.jpg
|
1882 |
-
vcoco_000000162530.jpg
|
1883 |
-
vcoco_000000430581.jpg
|
1884 |
-
vcoco_000000562192.jpg
|
1885 |
-
vcoco_000000345559.jpg
|
1886 |
-
vcoco_000000541374.jpg
|
1887 |
-
vcoco_000000151084.jpg
|
1888 |
-
vcoco_000000391046.jpg
|
1889 |
-
vcoco_000000002583.jpg
|
1890 |
-
vcoco_000000094593.jpg
|
1891 |
-
vcoco_000000263403.jpg
|
1892 |
-
vcoco_000000167962.jpg
|
1893 |
-
vcoco_000000577277.jpg
|
1894 |
-
vcoco_000000198198.jpg
|
1895 |
-
vcoco_000000461110.jpg
|
1896 |
-
vcoco_000000393569.jpg
|
1897 |
-
vcoco_000000497668.jpg
|
1898 |
-
vcoco_000000434193.jpg
|
1899 |
-
vcoco_000000550365.jpg
|
1900 |
-
vcoco_000000184978.jpg
|
1901 |
-
vcoco_000000549055.jpg
|
1902 |
-
vcoco_000000531739.jpg
|
1903 |
-
vcoco_000000215280.jpg
|
1904 |
-
vcoco_000000482810.jpg
|
1905 |
-
vcoco_000000261977.jpg
|
1906 |
-
vcoco_000000305195.jpg
|
1907 |
-
vcoco_000000425798.jpg
|
1908 |
-
vcoco_000000327864.jpg
|
1909 |
-
vcoco_000000380100.jpg
|
1910 |
-
vcoco_000000539529.jpg
|
1911 |
-
vcoco_000000507935.jpg
|
1912 |
-
vcoco_000000578849.jpg
|
1913 |
-
vcoco_000000414373.jpg
|
1914 |
-
vcoco_000000239930.jpg
|
1915 |
-
vcoco_000000204726.jpg
|
1916 |
-
vcoco_000000251576.jpg
|
1917 |
-
vcoco_000000507211.jpg
|
1918 |
-
vcoco_000000474601.jpg
|
1919 |
-
vcoco_000000355257.jpg
|
1920 |
-
vcoco_000000537905.jpg
|
1921 |
-
vcoco_000000580507.jpg
|
1922 |
-
vcoco_000000336015.jpg
|
1923 |
-
vcoco_000000290398.jpg
|
1924 |
-
vcoco_000000137682.jpg
|
1925 |
-
vcoco_000000534210.jpg
|
1926 |
-
vcoco_000000141887.jpg
|
1927 |
-
vcoco_000000396941.jpg
|
1928 |
-
vcoco_000000192039.jpg
|
1929 |
-
vcoco_000000442348.jpg
|
1930 |
-
vcoco_000000246001.jpg
|
1931 |
-
vcoco_000000082715.jpg
|
1932 |
-
vcoco_000000192932.jpg
|
1933 |
-
vcoco_000000328144.jpg
|
1934 |
-
vcoco_000000364126.jpg
|
1935 |
-
vcoco_000000034993.jpg
|
1936 |
-
vcoco_000000170852.jpg
|
1937 |
-
vcoco_000000373785.jpg
|
1938 |
-
vcoco_000000505265.jpg
|
1939 |
-
vcoco_000000327417.jpg
|
1940 |
-
vcoco_000000489944.jpg
|
1941 |
-
vcoco_000000298362.jpg
|
1942 |
-
vcoco_000000524638.jpg
|
1943 |
-
vcoco_000000364283.jpg
|
1944 |
-
vcoco_000000075587.jpg
|
1945 |
-
vcoco_000000459641.jpg
|
1946 |
-
vcoco_000000138861.jpg
|
1947 |
-
vcoco_000000063563.jpg
|
1948 |
-
vcoco_000000108879.jpg
|
1949 |
-
vcoco_000000388381.jpg
|
1950 |
-
vcoco_000000113041.jpg
|
1951 |
-
vcoco_000000551215.jpg
|
1952 |
-
vcoco_000000072281.jpg
|
1953 |
-
vcoco_000000286171.jpg
|
1954 |
-
vcoco_000000200058.jpg
|
1955 |
-
vcoco_000000380609.jpg
|
1956 |
-
vcoco_000000328397.jpg
|
1957 |
-
vcoco_000000564289.jpg
|
1958 |
-
vcoco_000000518273.jpg
|
1959 |
-
vcoco_000000399129.jpg
|
1960 |
-
vcoco_000000202115.jpg
|
1961 |
-
vcoco_000000399983.jpg
|
1962 |
-
vcoco_000000377159.jpg
|
1963 |
-
vcoco_000000525170.jpg
|
1964 |
-
vcoco_000000492881.jpg
|
1965 |
-
vcoco_000000071313.jpg
|
1966 |
-
vcoco_000000049891.jpg
|
1967 |
-
vcoco_000000264572.jpg
|
1968 |
-
vcoco_000000415872.jpg
|
1969 |
-
vcoco_000000163682.jpg
|
1970 |
-
vcoco_000000430036.jpg
|
1971 |
-
vcoco_000000287038.jpg
|
1972 |
-
vcoco_000000334301.jpg
|
1973 |
-
vcoco_000000137387.jpg
|
1974 |
-
vcoco_000000137315.jpg
|
1975 |
-
vcoco_000000166297.jpg
|
1976 |
-
vcoco_000000275448.jpg
|
1977 |
-
vcoco_000000558457.jpg
|
1978 |
-
vcoco_000000355918.jpg
|
1979 |
-
vcoco_000000495525.jpg
|
1980 |
-
vcoco_000000394286.jpg
|
1981 |
-
vcoco_000000013867.jpg
|
1982 |
-
vcoco_000000526082.jpg
|
1983 |
-
vcoco_000000511929.jpg
|
1984 |
-
vcoco_000000412062.jpg
|
1985 |
-
vcoco_000000494113.jpg
|
1986 |
-
vcoco_000000473133.jpg
|
1987 |
-
vcoco_000000529283.jpg
|
1988 |
-
vcoco_000000452060.jpg
|
1989 |
-
vcoco_000000528471.jpg
|
1990 |
-
vcoco_000000460857.jpg
|
1991 |
-
vcoco_000000561383.jpg
|
1992 |
-
vcoco_000000140633.jpg
|
1993 |
-
vcoco_000000461647.jpg
|
1994 |
-
vcoco_000000350668.jpg
|
1995 |
-
vcoco_000000560646.jpg
|
1996 |
-
vcoco_000000206912.jpg
|
1997 |
-
vcoco_000000381826.jpg
|
1998 |
-
vcoco_000000109679.jpg
|
1999 |
-
vcoco_000000546670.jpg
|
2000 |
-
vcoco_000000514950.jpg
|
2001 |
-
vcoco_000000046042.jpg
|
2002 |
-
vcoco_000000006380.jpg
|
2003 |
-
vcoco_000000559145.jpg
|
2004 |
-
vcoco_000000490400.jpg
|
2005 |
-
vcoco_000000350160.jpg
|
2006 |
-
vcoco_000000001108.jpg
|
2007 |
-
vcoco_000000436183.jpg
|
2008 |
-
vcoco_000000321258.jpg
|
2009 |
-
vcoco_000000572505.jpg
|
2010 |
-
vcoco_000000048489.jpg
|
2011 |
-
vcoco_000000330920.jpg
|
2012 |
-
vcoco_000000270275.jpg
|
2013 |
-
vcoco_000000547428.jpg
|
2014 |
-
vcoco_000000147488.jpg
|
2015 |
-
vcoco_000000558839.jpg
|
2016 |
-
vcoco_000000078061.jpg
|
2017 |
-
vcoco_000000485943.jpg
|
2018 |
-
vcoco_000000525762.jpg
|
2019 |
-
vcoco_000000117584.jpg
|
2020 |
-
vcoco_000000096304.jpg
|
2021 |
-
vcoco_000000147088.jpg
|
2022 |
-
vcoco_000000434510.jpg
|
2023 |
-
vcoco_000000301604.jpg
|
2024 |
-
vcoco_000000319350.jpg
|
2025 |
-
vcoco_000000292988.jpg
|
2026 |
-
vcoco_000000467612.jpg
|
2027 |
-
vcoco_000000561042.jpg
|
2028 |
-
vcoco_000000401167.jpg
|
2029 |
-
vcoco_000000563885.jpg
|
2030 |
-
vcoco_000000548318.jpg
|
2031 |
-
vcoco_000000304008.jpg
|
2032 |
-
vcoco_000000128570.jpg
|
2033 |
-
vcoco_000000529139.jpg
|
2034 |
-
vcoco_000000195568.jpg
|
2035 |
-
vcoco_000000339986.jpg
|
2036 |
-
vcoco_000000221864.jpg
|
2037 |
-
vcoco_000000536977.jpg
|
2038 |
-
vcoco_000000315603.jpg
|
2039 |
-
vcoco_000000135288.jpg
|
2040 |
-
vcoco_000000560108.jpg
|
2041 |
-
vcoco_000000556018.jpg
|
2042 |
-
vcoco_000000553609.jpg
|
2043 |
-
vcoco_000000459991.jpg
|
2044 |
-
vcoco_000000401244.jpg
|
2045 |
-
vcoco_000000304757.jpg
|
2046 |
-
vcoco_000000430369.jpg
|
2047 |
-
vcoco_000000119640.jpg
|
2048 |
-
vcoco_000000153380.jpg
|
2049 |
-
vcoco_000000480116.jpg
|
2050 |
-
vcoco_000000012991.jpg
|
2051 |
-
vcoco_000000461860.jpg
|
2052 |
-
vcoco_000000331298.jpg
|
2053 |
-
vcoco_000000349750.jpg
|
2054 |
-
vcoco_000000278204.jpg
|
2055 |
-
vcoco_000000129784.jpg
|
2056 |
-
vcoco_000000532493.jpg
|
2057 |
-
vcoco_000000313848.jpg
|
2058 |
-
vcoco_000000513077.jpg
|
2059 |
-
vcoco_000000188375.jpg
|
2060 |
-
vcoco_000000345855.jpg
|
2061 |
-
vcoco_000000295740.jpg
|
2062 |
-
vcoco_000000398423.jpg
|
2063 |
-
vcoco_000000106664.jpg
|
2064 |
-
vcoco_000000386116.jpg
|
2065 |
-
vcoco_000000500019.jpg
|
2066 |
-
vcoco_000000254368.jpg
|
2067 |
-
vcoco_000000286460.jpg
|
2068 |
-
vcoco_000000278323.jpg
|
2069 |
-
vcoco_000000459078.jpg
|
2070 |
-
vcoco_000000204075.jpg
|
2071 |
-
vcoco_000000094350.jpg
|
2072 |
-
vcoco_000000365187.jpg
|
2073 |
-
vcoco_000000312439.jpg
|
2074 |
-
vcoco_000000348263.jpg
|
2075 |
-
vcoco_000000332352.jpg
|
2076 |
-
vcoco_000000123013.jpg
|
2077 |
-
vcoco_000000499105.jpg
|
2078 |
-
vcoco_000000320396.jpg
|
2079 |
-
vcoco_000000052016.jpg
|
2080 |
-
vcoco_000000096705.jpg
|
2081 |
-
vcoco_000000143101.jpg
|
2082 |
-
vcoco_000000404766.jpg
|
2083 |
-
vcoco_000000404367.jpg
|
2084 |
-
vcoco_000000511670.jpg
|
2085 |
-
vcoco_000000363826.jpg
|
2086 |
-
vcoco_000000487957.jpg
|
2087 |
-
vcoco_000000430610.jpg
|
2088 |
-
vcoco_000000029931.jpg
|
2089 |
-
vcoco_000000189831.jpg
|
2090 |
-
vcoco_000000301247.jpg
|
2091 |
-
vcoco_000000489739.jpg
|
2092 |
-
vcoco_000000576468.jpg
|
2093 |
-
vcoco_000000324036.jpg
|
2094 |
-
vcoco_000000304834.jpg
|
2095 |
-
vcoco_000000581328.jpg
|
2096 |
-
vcoco_000000083408.jpg
|
2097 |
-
vcoco_000000440840.jpg
|
2098 |
-
vcoco_000000557685.jpg
|
2099 |
-
vcoco_000000235994.jpg
|
2100 |
-
vcoco_000000118614.jpg
|
2101 |
-
vcoco_000000465422.jpg
|
2102 |
-
vcoco_000000300408.jpg
|
2103 |
-
vcoco_000000094607.jpg
|
2104 |
-
vcoco_000000052803.jpg
|
2105 |
-
vcoco_000000281534.jpg
|
2106 |
-
vcoco_000000401897.jpg
|
2107 |
-
vcoco_000000292647.jpg
|
2108 |
-
vcoco_000000425361.jpg
|
2109 |
-
vcoco_000000312269.jpg
|
2110 |
-
vcoco_000000556883.jpg
|
2111 |
-
vcoco_000000038721.jpg
|
2112 |
-
vcoco_000000053464.jpg
|
2113 |
-
vcoco_000000016737.jpg
|
2114 |
-
vcoco_000000556108.jpg
|
2115 |
-
vcoco_000000044057.jpg
|
2116 |
-
vcoco_000000308996.jpg
|
2117 |
-
vcoco_000000187574.jpg
|
2118 |
-
vcoco_000000563945.jpg
|
2119 |
-
vcoco_000000097278.jpg
|
2120 |
-
vcoco_000000011591.jpg
|
2121 |
-
vcoco_000000497082.jpg
|
2122 |
-
vcoco_000000513292.jpg
|
2123 |
-
vcoco_000000480663.jpg
|
2124 |
-
vcoco_000000037325.jpg
|
2125 |
-
vcoco_000000342523.jpg
|
2126 |
-
vcoco_000000334671.jpg
|
2127 |
-
vcoco_000000535251.jpg
|
2128 |
-
vcoco_000000080273.jpg
|
2129 |
-
vcoco_000000422560.jpg
|
2130 |
-
vcoco_000000543644.jpg
|
2131 |
-
vcoco_000000406982.jpg
|
2132 |
-
vcoco_000000301541.jpg
|
2133 |
-
vcoco_000000434930.jpg
|
2134 |
-
vcoco_000000431893.jpg
|
2135 |
-
vcoco_000000535179.jpg
|
2136 |
-
vcoco_000000316237.jpg
|
2137 |
-
vcoco_000000577875.jpg
|
2138 |
-
vcoco_000000439443.jpg
|
2139 |
-
vcoco_000000033731.jpg
|
2140 |
-
vcoco_000000573065.jpg
|
2141 |
-
vcoco_000000029719.jpg
|
2142 |
-
vcoco_000000475765.jpg
|
2143 |
-
vcoco_000000357898.jpg
|
2144 |
-
vcoco_000000351793.jpg
|
2145 |
-
vcoco_000000574805.jpg
|
2146 |
-
vcoco_000000027221.jpg
|
2147 |
-
vcoco_000000493628.jpg
|
2148 |
-
vcoco_000000199553.jpg
|
2149 |
-
vcoco_000000056433.jpg
|
2150 |
-
vcoco_000000134193.jpg
|
2151 |
-
vcoco_000000298344.jpg
|
2152 |
-
vcoco_000000124979.jpg
|
2153 |
-
vcoco_000000378831.jpg
|
2154 |
-
vcoco_000000467887.jpg
|
2155 |
-
vcoco_000000558134.jpg
|
2156 |
-
vcoco_000000300786.jpg
|
2157 |
-
vcoco_000000505309.jpg
|
2158 |
-
vcoco_000000484575.jpg
|
2159 |
-
vcoco_000000416973.jpg
|
2160 |
-
vcoco_000000457021.jpg
|
2161 |
-
vcoco_000000159731.jpg
|
2162 |
-
vcoco_000000442225.jpg
|
2163 |
-
vcoco_000000168335.jpg
|
2164 |
-
vcoco_000000210249.jpg
|
2165 |
-
vcoco_000000343704.jpg
|
2166 |
-
vcoco_000000385861.jpg
|
2167 |
-
vcoco_000000388512.jpg
|
2168 |
-
vcoco_000000154861.jpg
|
2169 |
-
vcoco_000000257421.jpg
|
2170 |
-
vcoco_000000277418.jpg
|
2171 |
-
vcoco_000000566908.jpg
|
2172 |
-
vcoco_000000039643.jpg
|
2173 |
-
vcoco_000000378454.jpg
|
2174 |
-
vcoco_000000214127.jpg
|
2175 |
-
vcoco_000000270871.jpg
|
2176 |
-
vcoco_000000484849.jpg
|
2177 |
-
vcoco_000000346352.jpg
|
2178 |
-
vcoco_000000299869.jpg
|
2179 |
-
vcoco_000000037102.jpg
|
2180 |
-
vcoco_000000146676.jpg
|
2181 |
-
vcoco_000000154254.jpg
|
2182 |
-
vcoco_000000467477.jpg
|
2183 |
-
vcoco_000000448113.jpg
|
2184 |
-
vcoco_000000399885.jpg
|
2185 |
-
vcoco_000000575921.jpg
|
2186 |
-
vcoco_000000307426.jpg
|
2187 |
-
vcoco_000000478338.jpg
|
2188 |
-
vcoco_000000433136.jpg
|
2189 |
-
vcoco_000000359589.jpg
|
2190 |
-
vcoco_000000520150.jpg
|
2191 |
-
vcoco_000000339611.jpg
|
2192 |
-
vcoco_000000285505.jpg
|
2193 |
-
vcoco_000000472024.jpg
|
2194 |
-
vcoco_000000144582.jpg
|
2195 |
-
vcoco_000000540834.jpg
|
2196 |
-
vcoco_000000397809.jpg
|
2197 |
-
vcoco_000000102935.jpg
|
2198 |
-
vcoco_000000052433.jpg
|
2199 |
-
vcoco_000000038828.jpg
|
2200 |
-
vcoco_000000379180.jpg
|
2201 |
-
vcoco_000000152202.jpg
|
2202 |
-
vcoco_000000199555.jpg
|
2203 |
-
vcoco_000000314356.jpg
|
2204 |
-
vcoco_000000208995.jpg
|
2205 |
-
vcoco_000000314694.jpg
|
2206 |
-
vcoco_000000171384.jpg
|
2207 |
-
vcoco_000000580235.jpg
|
2208 |
-
vcoco_000000563031.jpg
|
2209 |
-
vcoco_000000499705.jpg
|
2210 |
-
vcoco_000000367622.jpg
|
2211 |
-
vcoco_000000559388.jpg
|
2212 |
-
vcoco_000000412001.jpg
|
2213 |
-
vcoco_000000247134.jpg
|
2214 |
-
vcoco_000000058869.jpg
|
2215 |
-
vcoco_000000078925.jpg
|
2216 |
-
vcoco_000000527480.jpg
|
2217 |
-
vcoco_000000221378.jpg
|
2218 |
-
vcoco_000000158428.jpg
|
2219 |
-
vcoco_000000327436.jpg
|
2220 |
-
vcoco_000000283524.jpg
|
2221 |
-
vcoco_000000209468.jpg
|
2222 |
-
vcoco_000000454143.jpg
|
2223 |
-
vcoco_000000311116.jpg
|
2224 |
-
vcoco_000000357971.jpg
|
2225 |
-
vcoco_000000401428.jpg
|
2226 |
-
vcoco_000000360434.jpg
|
2227 |
-
vcoco_000000290415.jpg
|
2228 |
-
vcoco_000000474024.jpg
|
2229 |
-
vcoco_000000416625.jpg
|
2230 |
-
vcoco_000000010534.jpg
|
2231 |
-
vcoco_000000369529.jpg
|
2232 |
-
vcoco_000000178184.jpg
|
2233 |
-
vcoco_000000502440.jpg
|
2234 |
-
vcoco_000000551608.jpg
|
2235 |
-
vcoco_000000534395.jpg
|
2236 |
-
vcoco_000000458932.jpg
|
2237 |
-
vcoco_000000444502.jpg
|
2238 |
-
vcoco_000000347571.jpg
|
2239 |
-
vcoco_000000464752.jpg
|
2240 |
-
vcoco_000000345288.jpg
|
2241 |
-
vcoco_000000337533.jpg
|
2242 |
-
vcoco_000000568790.jpg
|
2243 |
-
vcoco_000000391474.jpg
|
2244 |
-
vcoco_000000376793.jpg
|
2245 |
-
vcoco_000000063109.jpg
|
2246 |
-
vcoco_000000042089.jpg
|
2247 |
-
vcoco_000000347023.jpg
|
2248 |
-
vcoco_000000311015.jpg
|
2249 |
-
vcoco_000000523546.jpg
|
2250 |
-
vcoco_000000270744.jpg
|
2251 |
-
vcoco_000000109324.jpg
|
2252 |
-
vcoco_000000410554.jpg
|
2253 |
-
vcoco_000000456552.jpg
|
2254 |
-
vcoco_000000574343.jpg
|
2255 |
-
vcoco_000000263647.jpg
|
2256 |
-
vcoco_000000178285.jpg
|
2257 |
-
vcoco_000000561062.jpg
|
2258 |
-
vcoco_000000299768.jpg
|
2259 |
-
vcoco_000000497514.jpg
|
2260 |
-
vcoco_000000171622.jpg
|
2261 |
-
vcoco_000000485742.jpg
|
2262 |
-
vcoco_000000112029.jpg
|
2263 |
-
vcoco_000000114661.jpg
|
2264 |
-
vcoco_000000371414.jpg
|
2265 |
-
vcoco_000000191350.jpg
|
2266 |
-
vcoco_000000448958.jpg
|
2267 |
-
vcoco_000000516846.jpg
|
2268 |
-
vcoco_000000113052.jpg
|
2269 |
-
vcoco_000000336479.jpg
|
2270 |
-
vcoco_000000252468.jpg
|
2271 |
-
vcoco_000000474854.jpg
|
2272 |
-
vcoco_000000187336.jpg
|
2273 |
-
vcoco_000000075494.jpg
|
2274 |
-
vcoco_000000422274.jpg
|
2275 |
-
vcoco_000000082106.jpg
|
2276 |
-
vcoco_000000227186.jpg
|
2277 |
-
vcoco_000000438126.jpg
|
2278 |
-
vcoco_000000114917.jpg
|
2279 |
-
vcoco_000000419644.jpg
|
2280 |
-
vcoco_000000400829.jpg
|
2281 |
-
vcoco_000000209035.jpg
|
2282 |
-
vcoco_000000557408.jpg
|
2283 |
-
vcoco_000000441228.jpg
|
2284 |
-
vcoco_000000340069.jpg
|
2285 |
-
vcoco_000000131580.jpg
|
2286 |
-
vcoco_000000414522.jpg
|
2287 |
-
vcoco_000000361860.jpg
|
2288 |
-
vcoco_000000495578.jpg
|
2289 |
-
vcoco_000000468985.jpg
|
2290 |
-
vcoco_000000419159.jpg
|
2291 |
-
vcoco_000000368222.jpg
|
2292 |
-
vcoco_000000138704.jpg
|
2293 |
-
vcoco_000000079305.jpg
|
2294 |
-
vcoco_000000256875.jpg
|
2295 |
-
vcoco_000000378244.jpg
|
2296 |
-
vcoco_000000058801.jpg
|
2297 |
-
vcoco_000000447663.jpg
|
2298 |
-
vcoco_000000422689.jpg
|
2299 |
-
vcoco_000000577073.jpg
|
2300 |
-
vcoco_000000113334.jpg
|
2301 |
-
vcoco_000000107584.jpg
|
2302 |
-
vcoco_000000392055.jpg
|
2303 |
-
vcoco_000000531385.jpg
|
2304 |
-
vcoco_000000405529.jpg
|
2305 |
-
vcoco_000000168746.jpg
|
2306 |
-
vcoco_000000463242.jpg
|
2307 |
-
vcoco_000000411472.jpg
|
2308 |
-
vcoco_000000431085.jpg
|
2309 |
-
vcoco_000000365095.jpg
|
2310 |
-
vcoco_000000191093.jpg
|
2311 |
-
vcoco_000000479829.jpg
|
2312 |
-
vcoco_000000361594.jpg
|
2313 |
-
vcoco_000000286174.jpg
|
2314 |
-
vcoco_000000035705.jpg
|
2315 |
-
vcoco_000000439801.jpg
|
2316 |
-
vcoco_000000264279.jpg
|
2317 |
-
vcoco_000000061693.jpg
|
2318 |
-
vcoco_000000386474.jpg
|
2319 |
-
vcoco_000000077577.jpg
|
2320 |
-
vcoco_000000532775.jpg
|
2321 |
-
vcoco_000000288712.jpg
|
2322 |
-
vcoco_000000183872.jpg
|
2323 |
-
vcoco_000000377816.jpg
|
2324 |
-
vcoco_000000365557.jpg
|
2325 |
-
vcoco_000000048747.jpg
|
2326 |
-
vcoco_000000531960.jpg
|
2327 |
-
vcoco_000000426421.jpg
|
2328 |
-
vcoco_000000462208.jpg
|
2329 |
-
vcoco_000000444263.jpg
|
2330 |
-
vcoco_000000103267.jpg
|
2331 |
-
vcoco_000000173514.jpg
|
2332 |
-
vcoco_000000420231.jpg
|
2333 |
-
vcoco_000000410056.jpg
|
2334 |
-
vcoco_000000428718.jpg
|
2335 |
-
vcoco_000000430789.jpg
|
2336 |
-
vcoco_000000005689.jpg
|
2337 |
-
vcoco_000000410052.jpg
|
2338 |
-
vcoco_000000578427.jpg
|
2339 |
-
vcoco_000000323379.jpg
|
2340 |
-
vcoco_000000480629.jpg
|
2341 |
-
vcoco_000000408120.jpg
|
2342 |
-
vcoco_000000508328.jpg
|
2343 |
-
vcoco_000000442084.jpg
|
2344 |
-
vcoco_000000560718.jpg
|
2345 |
-
vcoco_000000519795.jpg
|
2346 |
-
vcoco_000000357690.jpg
|
2347 |
-
vcoco_000000564341.jpg
|
2348 |
-
vcoco_000000192835.jpg
|
2349 |
-
vcoco_000000044171.jpg
|
2350 |
-
vcoco_000000291009.jpg
|
2351 |
-
vcoco_000000284379.jpg
|
2352 |
-
vcoco_000000576589.jpg
|
2353 |
-
vcoco_000000570760.jpg
|
2354 |
-
vcoco_000000082551.jpg
|
2355 |
-
vcoco_000000479939.jpg
|
2356 |
-
vcoco_000000046990.jpg
|
2357 |
-
vcoco_000000476864.jpg
|
2358 |
-
vcoco_000000134053.jpg
|
2359 |
-
vcoco_000000232972.jpg
|
2360 |
-
vcoco_000000288421.jpg
|
2361 |
-
vcoco_000000013815.jpg
|
2362 |
-
vcoco_000000326666.jpg
|
2363 |
-
vcoco_000000321006.jpg
|
2364 |
-
vcoco_000000406533.jpg
|
2365 |
-
vcoco_000000486178.jpg
|
2366 |
-
vcoco_000000368949.jpg
|
2367 |
-
vcoco_000000463678.jpg
|
2368 |
-
vcoco_000000126301.jpg
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/hico_analysis.ipynb
DELETED
@@ -1,342 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"cells": [
|
3 |
-
{
|
4 |
-
"cell_type": "code",
|
5 |
-
"execution_count": 1,
|
6 |
-
"metadata": {},
|
7 |
-
"outputs": [],
|
8 |
-
"source": [
|
9 |
-
"import json\n",
|
10 |
-
"import pandas as pd \n",
|
11 |
-
"import ipdb\n",
|
12 |
-
"import os\n",
|
13 |
-
"import pickle as pkl\n",
|
14 |
-
"import os.path as osp\n",
|
15 |
-
"import numpy as np\n",
|
16 |
-
"from PIL import Image\n"
|
17 |
-
]
|
18 |
-
},
|
19 |
-
{
|
20 |
-
"cell_type": "code",
|
21 |
-
"execution_count": 2,
|
22 |
-
"metadata": {},
|
23 |
-
"outputs": [
|
24 |
-
{
|
25 |
-
"name": "stdout",
|
26 |
-
"output_type": "stream",
|
27 |
-
"text": [
|
28 |
-
"Total images found: 9642\n",
|
29 |
-
"Images after KP filtering: 3895\n",
|
30 |
-
"['hake_train2015_HICO_train2015_00005476.jpg', 'hake_train2015_HICO_train2015_00008329.jpg', 'hake_train2015_HICO_train2015_00008027.jpg', 'hake_train2015_HICO_train2015_00013408.jpg', 'hake_train2015_HICO_train2015_00010656.jpg']\n"
|
31 |
-
]
|
32 |
-
}
|
33 |
-
],
|
34 |
-
"source": [
|
35 |
-
"# Load Agniv VITpose-base hico filtering\n",
|
36 |
-
"filter_path = './agniv_pose_filter/hico.npy'\n",
|
37 |
-
"pose_md = np.load(filter_path, allow_pickle=True)\n",
|
38 |
-
"pose_md = pose_md.item()\n",
|
39 |
-
"filter_img_names = {}\n",
|
40 |
-
"\n",
|
41 |
-
"print(f'Total images found: {len(pose_md)}')\n",
|
42 |
-
"\n",
|
43 |
-
"# Filter out images with < 10 visible keypoints \n",
|
44 |
-
"kp_thresh = 10\n",
|
45 |
-
"\n",
|
46 |
-
"for imgname, pose_num in pose_md.items():\n",
|
47 |
-
" if pose_num > kp_thresh:\n",
|
48 |
-
" filter_img_names[imgname] = pose_num\n",
|
49 |
-
" \n",
|
50 |
-
"print(f'Images after KP filtering: {len(filter_img_names)}')\n",
|
51 |
-
"\n",
|
52 |
-
"print(list(filter_img_names.keys())[:5])\n"
|
53 |
-
]
|
54 |
-
},
|
55 |
-
{
|
56 |
-
"cell_type": "code",
|
57 |
-
"execution_count": 3,
|
58 |
-
"metadata": {},
|
59 |
-
"outputs": [],
|
60 |
-
"source": [
|
61 |
-
"# # Load Agniv VITpose-base hot dict\n",
|
62 |
-
"# filter_path = \"./agniv_pose_filter/hot_dict.pkl\"\n",
|
63 |
-
"# with open(filter_path, 'rb') as f:\n",
|
64 |
-
"# pose_md_dict = pkl.load(f)\n",
|
65 |
-
" \n",
|
66 |
-
"# hico_dict = {}\n",
|
67 |
-
"\n",
|
68 |
-
"# for k, v in pose_md_dict.items():\n",
|
69 |
-
"# if 'hake' in k:\n",
|
70 |
-
"# hico_dict[k] = v\n",
|
71 |
-
" \n",
|
72 |
-
"# print(f'Total images found: {len(hico_dict)}')\n",
|
73 |
-
"\n",
|
74 |
-
"# # Filter out images with < 10 visible keypoints \n",
|
75 |
-
"# kp_thresh = 10\n",
|
76 |
-
"\n",
|
77 |
-
"# filter_img_names = {}\n",
|
78 |
-
"\n",
|
79 |
-
"# for imgname, kp_md in hico_dict.items():\n",
|
80 |
-
"# if kp_md == 0:\n",
|
81 |
-
"# continue\n",
|
82 |
-
"# if kp_md[\"num_persons\"] == 1 and kp_md[\"num_kpt\"][0.5][0] > kp_thresh:\n",
|
83 |
-
"# filter_img_names[imgname] = kp_md[\"num_kpt\"][0.5][0]\n",
|
84 |
-
" \n",
|
85 |
-
"# print(f'Images after KP filtering: {len(filter_img_names)}')"
|
86 |
-
]
|
87 |
-
},
|
88 |
-
{
|
89 |
-
"cell_type": "code",
|
90 |
-
"execution_count": 4,
|
91 |
-
"metadata": {},
|
92 |
-
"outputs": [
|
93 |
-
{
|
94 |
-
"name": "stdout",
|
95 |
-
"output_type": "stream",
|
96 |
-
"text": [
|
97 |
-
" 0 1 2\n",
|
98 |
-
"0 1 airplane board\n",
|
99 |
-
"1 2 airplane direct\n",
|
100 |
-
"2 3 airplane exit\n",
|
101 |
-
"3 4 airplane fly\n",
|
102 |
-
"4 5 airplane inspect\n",
|
103 |
-
".. ... ... ...\n",
|
104 |
-
"595 596 zebra feed\n",
|
105 |
-
"596 597 zebra hold\n",
|
106 |
-
"597 598 zebra pet\n",
|
107 |
-
"598 599 zebra watch\n",
|
108 |
-
"599 600 zebra no_interaction\n",
|
109 |
-
"\n",
|
110 |
-
"[600 rows x 3 columns]\n"
|
111 |
-
]
|
112 |
-
}
|
113 |
-
],
|
114 |
-
"source": [
|
115 |
-
"\n",
|
116 |
-
"hico_annot = json.load(open('/ps/project/datasets/HICO/hico-image-level/hico-training-set-image-level.json', 'rb'))\n",
|
117 |
-
"hoi_mapping = pd.read_csv('/ps/project/datasets/HICO/hico-image-level/hico_hoi_list.txt', header=None, delim_whitespace=True)\n",
|
118 |
-
"print(hoi_mapping)"
|
119 |
-
]
|
120 |
-
},
|
121 |
-
{
|
122 |
-
"cell_type": "code",
|
123 |
-
"execution_count": 5,
|
124 |
-
"metadata": {
|
125 |
-
"scrolled": true
|
126 |
-
},
|
127 |
-
"outputs": [
|
128 |
-
{
|
129 |
-
"name": "stdout",
|
130 |
-
"output_type": "stream",
|
131 |
-
"text": [
|
132 |
-
"Final number of images 3154\n"
|
133 |
-
]
|
134 |
-
}
|
135 |
-
],
|
136 |
-
"source": [
|
137 |
-
"version = '1'\n",
|
138 |
-
"out_dir = f'./filtered_data/v_{version}'\n",
|
139 |
-
"os.makedirs(out_dir, exist_ok=True)\n",
|
140 |
-
"\n",
|
141 |
-
"objectwise_img_names = {}\n",
|
142 |
-
"imgwise_object_names = {}\n",
|
143 |
-
"img_dir = '/ps/project/datasets/HICO/hico_20150920/images/train2015'\n",
|
144 |
-
"\n",
|
145 |
-
"bad_object_names = ['bear', 'bird', 'cat', 'cow', \n",
|
146 |
-
" 'dog', 'elephant', 'giraffe', 'horse', \n",
|
147 |
-
" 'mouse', 'person', 'sheep', 'zebra' ]\n",
|
148 |
-
"bad_action_names = ['buy', 'chase', 'direct', 'greet', 'herd', 'hose',\n",
|
149 |
-
" 'hug', 'hunt', 'milk', 'no_interaction', 'pet', 'point', 'teach',\n",
|
150 |
-
" 'watch', 'wave']\n",
|
151 |
-
"\n",
|
152 |
-
"for i, (img_name, img_md) in enumerate(hico_annot.items()):\n",
|
153 |
-
" \n",
|
154 |
-
" # Apply keypoint number filtering on the images \n",
|
155 |
-
" full_img_name = 'hake_train2015_' + img_name\n",
|
156 |
-
" if full_img_name not in filter_img_names.keys():\n",
|
157 |
-
" continue\n",
|
158 |
-
" \n",
|
159 |
-
" # show the image\n",
|
160 |
-
" if i < 0:\n",
|
161 |
-
" img = Image.open(osp.join(img_dir,img_name))\n",
|
162 |
-
" display(img)\n",
|
163 |
-
" \n",
|
164 |
-
" obj_names = []\n",
|
165 |
-
" action_names = []\n",
|
166 |
-
" kp_num = filter_img_names[full_img_name]\n",
|
167 |
-
" \n",
|
168 |
-
" # travel through all hoi in the metadata, save obj_names and action_names for the hois\n",
|
169 |
-
" for hoi_id in img_md['hoi_id']:\n",
|
170 |
-
" img_md_row = hoi_mapping.loc[hoi_mapping[0] == hoi_id].iloc[0]\n",
|
171 |
-
"\n",
|
172 |
-
" obj_name = img_md_row[1]\n",
|
173 |
-
" if obj_name in bad_object_names:\n",
|
174 |
-
" continue\n",
|
175 |
-
" action_name = img_md_row[2]\n",
|
176 |
-
" if action_name in bad_action_names:\n",
|
177 |
-
" continue\n",
|
178 |
-
" \n",
|
179 |
-
" obj_names.append(obj_name)\n",
|
180 |
-
" action_names.append(action_name)\n",
|
181 |
-
" \n",
|
182 |
-
" if len(set(obj_names)) == 0 or len(action_names) == 0:\n",
|
183 |
-
" continue\n",
|
184 |
-
" \n",
|
185 |
-
" imgwise_object_names.setdefault(full_img_name,[]).extend(list(set(obj_names)))\n",
|
186 |
-
" \n",
|
187 |
-
"# # # Display images with multiple objects\n",
|
188 |
-
"# if len(set(obj_names)) > 1:\n",
|
189 |
-
"# print(img_name)\n",
|
190 |
-
"# print(obj_names)\n",
|
191 |
-
"# print(action_names)\n",
|
192 |
-
"# print(f'Number of Kps: {kp_num}')\n",
|
193 |
-
"# img = Image.open(osp.join(img_dir,img_name))\n",
|
194 |
-
"# display(img)\n",
|
195 |
-
" \n",
|
196 |
-
" for obj_name in set(obj_names):\n",
|
197 |
-
" objectwise_img_names.setdefault(obj_name,[]).append(full_img_name)\n",
|
198 |
-
" \n",
|
199 |
-
"print(f'Final number of images {len(imgwise_object_names)}')"
|
200 |
-
]
|
201 |
-
},
|
202 |
-
{
|
203 |
-
"cell_type": "code",
|
204 |
-
"execution_count": 6,
|
205 |
-
"metadata": {
|
206 |
-
"scrolled": true
|
207 |
-
},
|
208 |
-
"outputs": [
|
209 |
-
{
|
210 |
-
"name": "stdout",
|
211 |
-
"output_type": "stream",
|
212 |
-
"text": [
|
213 |
-
"saved at ./filtered_data/v_1/object_per_image_dict.json\n",
|
214 |
-
"saved at ./filtered_data/v_1/imgnames_per_object_dict.json\n"
|
215 |
-
]
|
216 |
-
}
|
217 |
-
],
|
218 |
-
"source": [
|
219 |
-
"# Save the imagewise_object dict\n",
|
220 |
-
"out_path = osp.join(out_dir, 'object_per_image_dict.json')\n",
|
221 |
-
"with open(out_path, 'w') as fp:\n",
|
222 |
-
" json.dump(imgwise_object_names, fp)\n",
|
223 |
-
" print(f'saved at {out_path}')\n",
|
224 |
-
" \n",
|
225 |
-
"# # save image_list \n",
|
226 |
-
"# out_path = osp.join(out_dir, 'hico_imglist_all_140223.txt')\n",
|
227 |
-
"# with open(out_path, 'w') as f:\n",
|
228 |
-
"# f.write('\\n'.join(imgwise_object_names.keys()))\n",
|
229 |
-
"# print(f'saved at {out_path}')\n",
|
230 |
-
"\n",
|
231 |
-
"\n",
|
232 |
-
"# Save the object_wise dict\n",
|
233 |
-
"out_path = osp.join(out_dir, 'imgnames_per_object_dict.json')\n",
|
234 |
-
"with open(out_path, 'w') as fp:\n",
|
235 |
-
" json.dump(objectwise_img_names, fp)\n",
|
236 |
-
" print(f'saved at {out_path}')\n",
|
237 |
-
"\n",
|
238 |
-
" \n",
|
239 |
-
"\n",
|
240 |
-
" "
|
241 |
-
]
|
242 |
-
},
|
243 |
-
{
|
244 |
-
"cell_type": "code",
|
245 |
-
"execution_count": 7,
|
246 |
-
"metadata": {},
|
247 |
-
"outputs": [
|
248 |
-
{
|
249 |
-
"name": "stderr",
|
250 |
-
"output_type": "stream",
|
251 |
-
"text": [
|
252 |
-
"/home/stripathi/anaconda3/envs/cliff/lib/python3.10/site-packages/scipy/__init__.py:146: UserWarning: A NumPy version >=1.16.5 and <1.23.0 is required for this version of SciPy (detected version 1.23.5\n",
|
253 |
-
" warnings.warn(f\"A NumPy version >={np_minversion} and <{np_maxversion}\"\n"
|
254 |
-
]
|
255 |
-
},
|
256 |
-
{
|
257 |
-
"name": "stdout",
|
258 |
-
"output_type": "stream",
|
259 |
-
"text": [
|
260 |
-
"3189\n"
|
261 |
-
]
|
262 |
-
},
|
263 |
-
{
|
264 |
-
"data": {
|
265 |
-
"image/png": "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Khq+Y8cO9OzZEwMGDMCGDRtQUVEhlEVFRcHDwwOWlpbCsEmTJkEulyMuLk7t51RXV0Mul4teREREJE0d2rLTWENDA9544w0MHz4cAwYMEIY/++yzcHBwgI2NDa5fv47169fjzp07CAkJAQBkZ2eLgg4A4f/s7Gy1n7Vx40Z8+OGH7fRNiIiIqDPpNGFn5cqVuHnzJs6ePSsavmLFCuFvDw8PWFtbY9y4cUhKSkLv3r1b9VkbNmzA2rVrhf/lcjns7OxaV3EiIiLq1DrFaazXXnsNoaGhOHHiBHr16tXse4cOHQoASExMBABYWVkhJydH9B7l/03189HT04OhoaHoRURERNLUoWFHoVDgtddew/79+xEZGQknJ6dHjnP16lUAgLW1NQDA398fN27cQG5urvCeiIgIGBoaws3NrV3qTURERE+PDj2NtXLlSuzcuRMHDx6EgYGB0MfGyMgI+vr6SEpKws6dOzFlyhSYmZnh+vXrWLNmDQICAjBw4EAAwMSJE+Hm5oZFixbhk08+QXZ2Nt59912sXLkSenp6Hfn1iIiIqBPo0Jadb775BiUlJRg9ejSsra2F1+7duwEAurq6OHbsGCZOnAhXV1e8+eabCAoKwuHDh4VpaGtrIzQ0FNra2vD398dzzz2HxYsXi+7LQ0RERH9eHdqyo1Aomi23s7PDqVOnHjkdBwcHHDlypK2qRURERBLSKTooExEREbUXhh0iIiKSNIYdIiIikjSGHSIiIpI0hh0iIiKStE7zuIjOLm/LVrXDzV9e9oRrQkRERJpgyw4RERFJGsMOERERSRrDDhEREUkaww4RERFJGsMOERERSRrDDhEREUkaww4RERFJGsMOERERSRrDDhEREUkaww4RERFJGsMOERERSRrDDhEREUkaww4RERFJGsMOERERSRrDDhEREUkaww4RERFJGsMOERERSRrDDhEREUkaww4RERFJGsMOERERSRrDDhEREUkaww4RERFJGsMOERERSRrDDhEREUkaww4RERFJGsMOERERSRrDDhEREUkaww4RERFJGsMOERERSRrDDhEREUlal46ugBTkbvla7XCLl197wjUhIiKih7Flh4iIiCSNYYeIiIgkjWGHiIiIJI1hh4iIiCSNHZSfgJxv/qV2uOUrbz/hmhAREf35sGWHiIiIJI1hh4iIiCSNYYeIiIgkjWGHiIiIJI1hh4iIiCSNYYeIiIgkjWGHiIiIJI1hh4iIiCStQ8POxo0b4evrCwMDA1hYWGDmzJm4c+eO6D1VVVVYuXIlzMzM0KNHDwQFBSEnJ0f0nrS0NEydOhXdunWDhYUF1q1bh7q6uif5VYiIiKiT6tCwc+rUKaxcuRLR0dGIiIhAbW0tJk6ciPLycuE9a9asweHDh7F3716cOnUKmZmZmD17tlBeX1+PqVOnoqamBufPn8f27duxbds2vPfeex3xlYiIiKiT6dDHRYSFhYn+37ZtGywsLBAbG4uAgACUlJRg69at2LlzJ8aOHQsA+Omnn9C/f39ER0fDz88PR48exa1bt3Ds2DFYWlrCy8sL//jHP7B+/Xp88MEH0NXV7YivRkRERJ2Exi0727dvx++//y78/9Zbb8HY2BjDhg1DamrqY1WmpKQEAGBqagoAiI2NRW1tLcaPHy+8x9XVFfb29oiKigIAREVFwcPDA5aWlsJ7Jk2aBLlcjri4OLWfU11dDblcLnoRERGRNGkcdv75z39CX18fwIOgsWnTJnzyySfo2bMn1qxZ0+qKNDQ04I033sDw4cMxYMAAAEB2djZ0dXVhbGwseq+lpSWys7OF9zQOOspyZZk6GzduhJGRkfCys7Nrdb2JiIioc9P4NFZ6ejpcXFwAAAcOHEBQUBBWrFiB4cOHY/To0a2uyMqVK3Hz5k2cPXu21dNoqQ0bNmDt2rXC/3K5nIGHiIhIojRu2enRowcKCgoAAEePHsWECRMAAF27dkVlZWWrKvHaa68hNDQUJ06cQK9evYThVlZWqKmpQXFxsej9OTk5sLKyEt7z8NVZyv+V73mYnp4eDA0NRS8iIiKSJo3DzoQJE/Diiy/ixRdfREJCAqZMmQIAiIuLg6Ojo0bTUigUeO2117B//35ERkbCyclJVO7j4wMdHR0cP35cGHbnzh2kpaXB398fAODv748bN24gNzdXeE9ERAQMDQ3h5uam6dcjIiIiidE47GzatAn+/v7Iy8vDvn37YGZmBuBBZ+IFCxZoNK2VK1fi119/xc6dO2FgYIDs7GxkZ2cLLURGRkZYtmwZ1q5dixMnTiA2NhZLly6Fv78//Pz8AAATJ06Em5sbFi1ahGvXriE8PBzvvvsuVq5cCT09PU2/HhEREUmMxn12jI2N8fXXX6sM//DDDzX+8G+++QYAVPr6/PTTT3j++ecBAJ9//jm0tLQQFBSE6upqTJo0CZs3bxbeq62tjdDQULzyyivw9/dH9+7dsWTJEnz00Uca14eIiIikp1X32Tlz5gy+/fZbJCcnY+/evbC1tcUvv/wCJycnjBgxosXTUSgUj3xP165dsWnTJmzatKnJ9zg4OODIkSMt/lwiIiL689D4NNa+ffswadIk6Ovr4/Lly6iurgbw4B45//znP9u8gkRERESPQ+Ow8/HHH2PLli34/vvvoaOjIwwfPnw4Ll++3KaVIyIiInpcGoedO3fuICAgQGW4kZGRyiXiRERERB1N47BjZWWFxMREleFnz56Fs7Nzm1SKiIiIqK1oHHaWL1+O1atX48KFC5DJZMjMzMSOHTvw17/+Fa+88kp71JGIiIio1TS+Guvtt99GQ0MDxo0bh4qKCgQEBEBPTw9//etfsWrVqvaoIxEREVGraRx2ZDIZ3nnnHaxbtw6JiYkoKyuDm5sbevTo0R71IyIiInosrbrPDgDo6urycQxERETU6WkcdmbNmgWZTKYyXCaToWvXrnBxccGzzz6Lfv36tUkFiYiIiB6Hxh2UjYyMEBkZicuXL0Mmk0Emk+HKlSuIjIxEXV0ddu/eDU9PT5w7d6496ktERESkEY1bdqysrPDss8/i66+/hpbWg6zU0NCA1atXw8DAAL/99htefvllrF+/HmfPnm3zChMRERFpQuOWna1bt+KNN94Qgg4AaGlpYdWqVfjuu+8gk8nw2muv4ebNm21aUSIiIqLW0Djs1NXV4fbt2yrDb9++jfr6egAPHt6prl8PERER0ZOm8WmsRYsWYdmyZfjb3/4GX19fAMClS5fwz3/+E4sXLwYAnDp1Cu7u7m1bUyIiIqJW0DjsfP7557C0tMQnn3yCnJwcAIClpSXWrFmD9evXAwAmTpyIyZMnt21NiYiIiFpB47Cjra2Nd955B++88w7kcjkAwNDQUPQee3v7tqkdERER0WNq9U0FAdWQQ0RERNTZtCrsBAcHY8+ePUhLS0NNTY2o7PLly21SMSIiIqK2oPHVWF999RWWLl0KS0tLXLlyBUOGDIGZmRmSk5MRGBjYHnUkIiIiajWNw87mzZvx3Xff4b///S90dXXx1ltvISIiAq+//jpKSkrao45EREREraZx2ElLS8OwYcMAAPr6+igtLQXw4JL0Xbt2tW3tiIiIiB6TxmHHysoKhYWFAB5cdRUdHQ0AuHfvHhQKRdvWjoiIiOgxaRx2xo4di0OHDgEAli5dijVr1mDChAmYN28eZs2a1eYVJCIiInocGl+N9d1336GhoQEAsHLlSpiZmeH8+fOYPn06XnrppTavIBEREdHj0DjsaGlpiR4COn/+fMyfP79NK0VERETUVlp1n52qqipcv34dubm5QiuP0vTp09ukYkRERERtQeOwExYWhsWLFyM/P1+lTCaTCU8+JyIiIuoMNO6gvGrVKsydOxdZWVloaGgQvRh0iIiIqLPROOzk5ORg7dq1sLS0bI/6EBEREbUpjcPOnDlzcPLkyXaoChEREVHb07jPztdff425c+fizJkz8PDwgI6Ojqj89ddfb7PKERERET0ujcPOrl27cPToUXTt2hUnT56ETCYTymQyGcMOERERdSoah5133nkHH374Id5++23R/XaIiIiIOiON00pNTQ3mzZvHoENERERPBY0Ty5IlS7B79+72qAsRERFRm9P4NFZ9fT0++eQThIeHY+DAgSodlD/77LM2qxwRERHR49I47Ny4cQPe3t4AgJs3b4rKGndWJiIiIuoMNA47J06caI96EBEREbUL9jImIiIiSWtxy87s2bNb9L6QkJBWV4aIiIiorbU47BgZGbVnPYiIiIjaRYvDzk8//dSe9SAiIiJqF+yzQ0RERJLGsENERESSxrBDREREksawQ0RERJLWorAzaNAgFBUVAQA++ugjVFRUtGuliIiIiNpKi8JOfHw8ysvLAQAffvghysrK2rVSRERERG2lRZeee3l5YenSpRgxYgQUCgU+/fRT9OjRQ+1733vvvTatIBEREdHjaFHY2bZtG95//32EhoZCJpPhjz/+QJcuqqPKZDKGHSIiIupUWhR2+vXrh99++w0AoKWlhePHj8PCwqJdK0ZERETUFjS+GquhoaHNgs7p06cxbdo02NjYQCaT4cCBA6Ly559/HjKZTPSaPHmy6D2FhYVYuHAhDA0NYWxsjGXLlrFPEREREQladel5UlISVq1ahfHjx2P8+PF4/fXXkZSUpPF0ysvL4enpiU2bNjX5nsmTJyMrK0t47dq1S1S+cOFCxMXFISIiAqGhoTh9+jRWrFihcV2IiIhImlr8bCyl8PBwTJ8+HV5eXhg+fDgA4Ny5c3B3d8fhw4cxYcKEFk8rMDAQ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q67GaitlZWVITEwU/r937x6uXr0KU1NT2Nvb44033sDHH3+MPn36CJee29jYCM/n6t+/PyZPnozly5djy5YtqK2txWuvvYb58+fzSiwiIiIC0MFhJyYmBmPGjBH+V/ajWbJkCbZt24a33noL5eXlWLFiBYqLizFixAiEhYUJ99gBgB07duC1117DuHHjoKWlhaCgIHz11VdP/LsQERFR59ShYWf06NFQKBRNlstkMnz00UfN3qzQ1NSUNxAkIiKiJvFBoERERCRpDDtEREQkaR16GoueXie/n6p2+Ojlvz/hmhARETWPLTtEREQkaQw7REREJGkMO0RERCRpDDtEREQkaQw7REREJGkMO0RERCRpDDtEREQkaQw7REREJGkMO0RERCRpDDtEREQkaQw7REREJGkMO0RERCRpDDtEREQkaQw7REREJGkMO0RERCRpDDtEREQkaQw7REREJGkMO0RERCRpDDtEREQkaQw7REREJGkMO0RERCRpDDtEREQkaV06ugIkPeFbp6gdPmnZkSdcEyIiIoYd6gChPwaqHf7MC3884ZoQEdGfAU9jERERkaQx7BAREZGkMewQERGRpDHsEBERkaQx7BAREZGkMewQERGRpDHsEBERkaTxPjvUqYT8NFnt8NlLw55wTYiISCoYduip8tu2SWqHz38+/AnXhIiInhYMOyQZ27dNVDt8yfNHAQA//Kw+KL24mEGJiEjK2GeHiIiIJI1hh4iIiCSNYYeIiIgkjWGHiIiIJI1hh4iIiCSNYYeIiIgkjWGHiIiIJI332SECsPlX9ffgefU53oOHiOhpx5YdIiIikjSGHSIiIpI0hh0iIiKSNIYdIiIikjR2UCZqgc93qu/AvOZZdmAmIurs2LJDREREktapw84HH3wAmUwmerm6ugrlVVVVWLlyJczMzNCjRw8EBQUhJyenA2tMREREnU2nDjsA4O7ujqysLOF19uxZoWzNmjU4fPgw9u7di1OnTiEzMxOzZ8/uwNoSERFRZ9Pp++x06dIFVlZWKsNLSkqwdetW7Ny5E2PHjgUA/PTTT+jfvz+io6Ph5+f3pKtKREREnVCnb9m5e/cubGxs4OzsjIULFyItLQ0AEBsbi9raWowfP154r6urK+zt7REVFdXsNKurqyGXy0UvIiIikqZOHXaGDh2Kbdu2ISwsDN988w3u3buHkSNH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\n",
|
266 |
-
"text/plain": [
|
267 |
-
"<Figure size 640x480 with 1 Axes>"
|
268 |
-
]
|
269 |
-
},
|
270 |
-
"metadata": {},
|
271 |
-
"output_type": "display_data"
|
272 |
-
}
|
273 |
-
],
|
274 |
-
"source": [
|
275 |
-
"import matplotlib.pyplot as plt\n",
|
276 |
-
"import seaborn as sns\n",
|
277 |
-
"\n",
|
278 |
-
"# sort the dictionary \n",
|
279 |
-
"objectwise_img_names = dict(sorted(objectwise_img_names.items(), key=lambda x: len(x[1]), reverse=True))\n",
|
280 |
-
"\n",
|
281 |
-
"# Extract object names and image counts\n",
|
282 |
-
"obj_names = list(objectwise_img_names.keys())\n",
|
283 |
-
"img_counts = [len(objectwise_img_names[obj]) for obj in objectwise_img_names]\n",
|
284 |
-
"print(sum(img_counts))\n",
|
285 |
-
"\n",
|
286 |
-
"# Create bar plot\n",
|
287 |
-
"sns.barplot(x=obj_names, y=img_counts)\n",
|
288 |
-
"\n",
|
289 |
-
"# Add x-axis and y-axis labels\n",
|
290 |
-
"plt.xlabel('Object')\n",
|
291 |
-
"plt.ylabel('Number of Images')\n",
|
292 |
-
"\n",
|
293 |
-
"plt.xticks(rotation=45, ha='right', fontsize=3)\n",
|
294 |
-
"\n",
|
295 |
-
"# Save the plot as a high-resolution image file\n",
|
296 |
-
"out_path = osp.join(out_dir, 'image_per_object_category.png')\n",
|
297 |
-
"plt.savefig(out_path, dpi=300)\n",
|
298 |
-
"\n",
|
299 |
-
"# Show plot\n",
|
300 |
-
"plt.show()"
|
301 |
-
]
|
302 |
-
},
|
303 |
-
{
|
304 |
-
"cell_type": "code",
|
305 |
-
"execution_count": null,
|
306 |
-
"metadata": {},
|
307 |
-
"outputs": [],
|
308 |
-
"source": [
|
309 |
-
"\n",
|
310 |
-
" "
|
311 |
-
]
|
312 |
-
},
|
313 |
-
{
|
314 |
-
"cell_type": "code",
|
315 |
-
"execution_count": null,
|
316 |
-
"metadata": {},
|
317 |
-
"outputs": [],
|
318 |
-
"source": []
|
319 |
-
}
|
320 |
-
],
|
321 |
-
"metadata": {
|
322 |
-
"kernelspec": {
|
323 |
-
"display_name": "Python 3 (ipykernel)",
|
324 |
-
"language": "python",
|
325 |
-
"name": "python3"
|
326 |
-
},
|
327 |
-
"language_info": {
|
328 |
-
"codemirror_mode": {
|
329 |
-
"name": "ipython",
|
330 |
-
"version": 3
|
331 |
-
},
|
332 |
-
"file_extension": ".py",
|
333 |
-
"mimetype": "text/x-python",
|
334 |
-
"name": "python",
|
335 |
-
"nbconvert_exporter": "python",
|
336 |
-
"pygments_lexer": "ipython3",
|
337 |
-
"version": "3.10.6"
|
338 |
-
}
|
339 |
-
},
|
340 |
-
"nbformat": 4,
|
341 |
-
"nbformat_minor": 4
|
342 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/image_per_object_category.png
DELETED
Binary file (86.6 kB)
|
|
hot_analysis/jc_graphs/documents-export-2023-03-07/image_per_object_category.csv
DELETED
@@ -1,70 +0,0 @@
|
|
1 |
-
,count
|
2 |
-
surfboard,452
|
3 |
-
chair,287
|
4 |
-
snowboard,280
|
5 |
-
laptop,237
|
6 |
-
cell phone,224
|
7 |
-
sports ball,208
|
8 |
-
dining table,184
|
9 |
-
skateboard,172
|
10 |
-
tennis racket,172
|
11 |
-
book,171
|
12 |
-
frisbee,160
|
13 |
-
cup,155
|
14 |
-
car,138
|
15 |
-
bed,129
|
16 |
-
bottle,123
|
17 |
-
bench,119
|
18 |
-
couch,113
|
19 |
-
handbag,113
|
20 |
-
backpack,106
|
21 |
-
knife,89
|
22 |
-
bowl,86
|
23 |
-
skis,85
|
24 |
-
baseball glove,75
|
25 |
-
potted plant,69
|
26 |
-
tv,67
|
27 |
-
mouse,59
|
28 |
-
pizza,57
|
29 |
-
suitcase,54
|
30 |
-
fork,52
|
31 |
-
keyboard,50
|
32 |
-
tie,47
|
33 |
-
spoon,46
|
34 |
-
remote,44
|
35 |
-
cake,43
|
36 |
-
truck,40
|
37 |
-
clock,39
|
38 |
-
sandwich,35
|
39 |
-
bicycle,34
|
40 |
-
umbrella,33
|
41 |
-
wine glass,31
|
42 |
-
boat,28
|
43 |
-
donut,28
|
44 |
-
oven,27
|
45 |
-
teddy bear,26
|
46 |
-
sink,25
|
47 |
-
refrigerator,23
|
48 |
-
scissors,22
|
49 |
-
vase,21
|
50 |
-
baseball bat,18
|
51 |
-
kite,16
|
52 |
-
banana,16
|
53 |
-
hot dog,16
|
54 |
-
traffic light,16
|
55 |
-
motorcycle,14
|
56 |
-
microwave,14
|
57 |
-
apple,12
|
58 |
-
fire hydrant,10
|
59 |
-
carrot,9
|
60 |
-
bus,8
|
61 |
-
broccoli,8
|
62 |
-
orange,8
|
63 |
-
toilet,7
|
64 |
-
stop sign,6
|
65 |
-
hair drier,6
|
66 |
-
train,4
|
67 |
-
airplane,4
|
68 |
-
parking meter,4
|
69 |
-
toothbrush,3
|
70 |
-
toaster,1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/jc_graphs/documents-export-2023-03-07/object_nest_piechart_data.csv
DELETED
@@ -1,77 +0,0 @@
|
|
1 |
-
,character,parent,value
|
2 |
-
0,transportation,objects,0
|
3 |
-
1,accessories,objects,0
|
4 |
-
2,furniture,objects,0
|
5 |
-
3,everyday objects,objects,0
|
6 |
-
4,sports equipment,objects,0
|
7 |
-
5,food items,objects,0
|
8 |
-
6,kitchen appliances,objects,0
|
9 |
-
7,motorcycle,transportation,14
|
10 |
-
8,bicycle,transportation,129
|
11 |
-
9,boat,transportation,33
|
12 |
-
10,car,transportation,106
|
13 |
-
11,truck,transportation,31
|
14 |
-
12,bus,transportation,34
|
15 |
-
13,train,transportation,172
|
16 |
-
14,airplane,transportation,85
|
17 |
-
15,backpack,accessories,280
|
18 |
-
16,tie,accessories,171
|
19 |
-
17,handbag,accessories,16
|
20 |
-
18,baseball glove,accessories,43
|
21 |
-
19,bench,furniture,113
|
22 |
-
20,chair,furniture,452
|
23 |
-
21,couch,furniture,75
|
24 |
-
22,bed,furniture,123
|
25 |
-
23,toilet,furniture,287
|
26 |
-
24,dining table,furniture,160
|
27 |
-
25,book,everyday objects,6
|
28 |
-
26,umbrella,everyday objects,28
|
29 |
-
27,cell phone,everyday objects,54
|
30 |
-
28,laptop,everyday objects,44
|
31 |
-
29,kite,everyday objects,16
|
32 |
-
30,suitcase,everyday objects,119
|
33 |
-
31,bottle,everyday objects,89
|
34 |
-
32,remote,everyday objects,46
|
35 |
-
33,toothbrush,everyday objects,67
|
36 |
-
34,teddy bear,everyday objects,237
|
37 |
-
35,scissors,everyday objects,224
|
38 |
-
36,keyboard,everyday objects,172
|
39 |
-
37,hair drier,everyday objects,138
|
40 |
-
38,traffic light,everyday objects,27
|
41 |
-
39,fire hydrant,everyday objects,208
|
42 |
-
40,stop sign,everyday objects,12
|
43 |
-
41,tv,everyday objects,18
|
44 |
-
42,vase,everyday objects,26
|
45 |
-
43,parking meter,everyday objects,113
|
46 |
-
44,clock,everyday objects,9
|
47 |
-
45,potted plant,everyday objects,155
|
48 |
-
46,mouse,everyday objects,8
|
49 |
-
47,frisbee,sports equipment,22
|
50 |
-
48,sports ball,sports equipment,28
|
51 |
-
49,tennis racket,sports equipment,50
|
52 |
-
50,baseball bat,sports equipment,47
|
53 |
-
51,skateboard,sports equipment,4
|
54 |
-
52,snowboard,sports equipment,16
|
55 |
-
53,skis,sports equipment,57
|
56 |
-
54,surfboard,sports equipment,184
|
57 |
-
55,banana,food items,6
|
58 |
-
56,cake,food items,3
|
59 |
-
57,apple,food items,4
|
60 |
-
58,carrot,food items,16
|
61 |
-
59,pizza,food items,40
|
62 |
-
60,donut,food items,21
|
63 |
-
61,hot dog,food items,35
|
64 |
-
62,sandwich,food items,8
|
65 |
-
63,broccoli,food items,7
|
66 |
-
64,orange,food items,25
|
67 |
-
65,knife,kitchen appliances,4
|
68 |
-
66,spoon,kitchen appliances,52
|
69 |
-
67,cup,kitchen appliances,86
|
70 |
-
68,wine glass,kitchen appliances,23
|
71 |
-
69,oven,kitchen appliances,10
|
72 |
-
70,fork,kitchen appliances,39
|
73 |
-
71,bowl,kitchen appliances,69
|
74 |
-
72,refrigerator,kitchen appliances,8
|
75 |
-
73,toaster,kitchen appliances,59
|
76 |
-
74,sink,kitchen appliances,14
|
77 |
-
75,microwave,kitchen appliances,1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/jc_graphs/documents-export-2023-03-07/partwise_contact_graph.csv
DELETED
@@ -1,18 +0,0 @@
|
|
1 |
-
,count
|
2 |
-
leftFoot,8109
|
3 |
-
rightFoot,7928
|
4 |
-
rightHand,5085
|
5 |
-
leftHand,3949
|
6 |
-
spine,3694
|
7 |
-
hips,2346
|
8 |
-
leftUpLeg,1870
|
9 |
-
rightUpLeg,1847
|
10 |
-
rightForeArm,736
|
11 |
-
rightLeg,700
|
12 |
-
head,692
|
13 |
-
rightShoulder,670
|
14 |
-
leftShoulder,667
|
15 |
-
leftForeArm,635
|
16 |
-
leftLeg,591
|
17 |
-
rightArm,571
|
18 |
-
leftArm,535
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/jc_graphs/plot_image_per_object.py
DELETED
@@ -1,147 +0,0 @@
|
|
1 |
-
import csv
|
2 |
-
from pathlib import Path
|
3 |
-
|
4 |
-
import matplotlib.pyplot as plt
|
5 |
-
from matplotlib import gridspec
|
6 |
-
import numpy as np
|
7 |
-
import seaborn as sns
|
8 |
-
|
9 |
-
# Input/output files
|
10 |
-
CSV_FOLDER = Path(__file__).parent / "documents-export-2023-03-07"
|
11 |
-
IMAGE_PER_OBJECT_FILE = CSV_FOLDER / "image_per_object_category.csv"
|
12 |
-
PIE_CHART_DATA_FILE = CSV_FOLDER / "object_nest_piechart_data.csv"
|
13 |
-
OUTPUT = 'output.pdf'
|
14 |
-
|
15 |
-
# Some configuration
|
16 |
-
FONTSIZE = 20
|
17 |
-
FONTSIZE_PIE = 25
|
18 |
-
COLOR_RANGE = (0.15, 0.85) # to avoid having exterme values
|
19 |
-
CUTOFF = 30 # min number of counts for an object to be considered
|
20 |
-
PIE_INNER_RADIUS = 0.3 # value used for the nested pie chart
|
21 |
-
plt.rcParams['grid.color'] = (0.5, 0.5, 0.5, 0.1) # low grid opacity
|
22 |
-
|
23 |
-
# Categories and associated objects
|
24 |
-
categorization_unordered = {
|
25 |
-
"transportation": [
|
26 |
-
'motorcycle', 'bicycle', 'boat', 'car', 'truck', 'bus', 'train', 'airplane',],
|
27 |
-
"accessories": [
|
28 |
-
'backpack', 'tie', 'handbag', 'baseball glove'],
|
29 |
-
"furniture": [
|
30 |
-
'bench', 'chair', 'couch', 'bed', 'toilet', 'dining table'],
|
31 |
-
'everyday objects': [
|
32 |
-
'book', 'umbrella', 'cell phone', 'laptop', 'kite', 'suitcase', 'bottle', 'remote',
|
33 |
-
'toothbrush', 'teddy bear', 'scissors', 'keyboard', 'hair drier', 'traffic light',
|
34 |
-
'fire hydrant', 'stop sign', 'tv', 'vase', 'parking meter', 'clock', 'potted plant',
|
35 |
-
'mouse'],
|
36 |
-
'sports equipment': [
|
37 |
-
'frisbee', 'sports ball', 'tennis racket', 'baseball bat',
|
38 |
-
'skateboard', 'snowboard', 'skis', 'surfboard'],
|
39 |
-
'food items': [
|
40 |
-
'banana', 'cake', 'apple', 'carrot', 'pizza', 'donut', 'hot dog',
|
41 |
-
'sandwich', 'broccoli', 'orange'],
|
42 |
-
'kitchen appliances': [
|
43 |
-
'knife', 'spoon', 'cup', 'wine glass', 'oven', 'fork', 'bowl',
|
44 |
-
'refrigerator', 'toaster', 'sink', 'microwave']}
|
45 |
-
|
46 |
-
# Colors for each category
|
47 |
-
cat_colors = {
|
48 |
-
"transportation": plt.cm.spring,
|
49 |
-
"accessories": plt.cm.Greys,
|
50 |
-
"furniture": plt.cm.Purples,
|
51 |
-
"everyday objects": plt.cm.Reds,
|
52 |
-
"sports equipment": plt.cm.Blues,
|
53 |
-
"food items": plt.cm.Wistia,
|
54 |
-
"kitchen appliances": plt.cm.summer}
|
55 |
-
|
56 |
-
# Read CSV files
|
57 |
-
objects = {}
|
58 |
-
with open(IMAGE_PER_OBJECT_FILE, newline='', encoding="utf-8") as csvfile:
|
59 |
-
reader = csv.DictReader(csvfile)
|
60 |
-
for row in reader:
|
61 |
-
objects[row['']] = {}
|
62 |
-
objects[row['']]['count'] = int(row['count'])
|
63 |
-
|
64 |
-
# In each caterory, order object by count in descending order
|
65 |
-
categorization = {
|
66 |
-
cat: sorted(val, key=lambda _: objects[_]["count"])
|
67 |
-
for cat, val in categorization_unordered.items()}
|
68 |
-
|
69 |
-
# Some sanity checks :)
|
70 |
-
assert list(categorization.keys()) == list(categorization_unordered.keys())
|
71 |
-
assert list(categorization.keys()) == list(cat_colors.keys())
|
72 |
-
for cat in categorization:
|
73 |
-
assert len(categorization[cat]) == len(categorization_unordered[cat])
|
74 |
-
assert set(categorization[cat]) == set(categorization_unordered[cat])
|
75 |
-
|
76 |
-
# Cutoff objects and categorization
|
77 |
-
selected_objects = [o for o, v in objects.items() if v["count"] > CUTOFF]
|
78 |
-
selected_categorization = {}
|
79 |
-
for k, v in categorization.items():
|
80 |
-
selected_categorization[k] = [o for o in v if o in selected_objects]
|
81 |
-
|
82 |
-
# Add a color for each object
|
83 |
-
# All objects in one category use the same category color
|
84 |
-
for cat, objs in selected_categorization.items():
|
85 |
-
colors = [
|
86 |
-
cat_colors[cat](x)
|
87 |
-
for x in np.linspace(COLOR_RANGE[0], COLOR_RANGE[1], len(selected_categorization[cat]))]
|
88 |
-
color_index = 0
|
89 |
-
for obj in objs:
|
90 |
-
objects[obj]['color'] = colors[color_index]
|
91 |
-
color_index += 1
|
92 |
-
|
93 |
-
# Plot: histogramm
|
94 |
-
fig = plt.figure(figsize=(25, 22))
|
95 |
-
gs = gridspec.GridSpec(1, 1)
|
96 |
-
gs.update(wspace=0.15, hspace=0.15)
|
97 |
-
axes = []
|
98 |
-
for elem in gs:
|
99 |
-
axes.append(fig.add_subplot(elem))
|
100 |
-
axes[0].grid(axis='x', zorder=0)
|
101 |
-
axes[0].set_xticks(range(0, 500, 50))
|
102 |
-
sns.barplot(
|
103 |
-
x=list(v["count"] for o, v in objects.items() if o in selected_objects),
|
104 |
-
y=list(selected_objects),
|
105 |
-
ax=axes[0],
|
106 |
-
zorder=3,
|
107 |
-
palette=list(v["color"] for o, v in objects.items() if o in selected_objects))
|
108 |
-
axes[0].set_xticklabels(axes[0].get_xticklabels(), rotation=90)
|
109 |
-
plt.xticks(rotation=0, fontsize=FONTSIZE)
|
110 |
-
plt.yticks(fontsize=FONTSIZE)
|
111 |
-
plt.xlabel('# images', labelpad=30, fontsize=FONTSIZE)
|
112 |
-
|
113 |
-
# Plot: pie chart
|
114 |
-
right_inset_ax = fig.add_axes([.3, .1, .5, .5], facecolor='k')
|
115 |
-
outer_colors = [c(0.5) for c in cat_colors.values()]
|
116 |
-
labels = [word.replace(' ', '\n') for word in list(selected_categorization)]
|
117 |
-
# Need to be orderd by category
|
118 |
-
vals = []
|
119 |
-
groups = {cat: 0 for cat in selected_categorization.keys()}
|
120 |
-
inner_colors = []
|
121 |
-
for cat, members in selected_categorization.items():
|
122 |
-
for _ in members:
|
123 |
-
vals.append(objects[_]["count"])
|
124 |
-
inner_colors.append(objects[_]["color"])
|
125 |
-
groups[cat] += objects[_]["count"]
|
126 |
-
right_inset_ax.pie(
|
127 |
-
list(groups.values()),
|
128 |
-
radius=1,
|
129 |
-
colors=outer_colors,
|
130 |
-
# labels=labels,
|
131 |
-
autopct='%.1f%%',
|
132 |
-
pctdistance=0.82,
|
133 |
-
# labeldistance=1.5,
|
134 |
-
textprops={'color': 'white', 'fontsize': FONTSIZE},
|
135 |
-
wedgeprops={'width': PIE_INNER_RADIUS, 'edgecolor': 'w'})
|
136 |
-
right_inset_ax.pie(
|
137 |
-
vals,
|
138 |
-
radius=1-PIE_INNER_RADIUS,
|
139 |
-
colors=inner_colors,
|
140 |
-
wedgeprops={'width': PIE_INNER_RADIUS, 'edgecolor': 'w'})
|
141 |
-
|
142 |
-
# Plot: add legend and save
|
143 |
-
plt.legend(
|
144 |
-
labels, bbox_to_anchor=(1.2, 1.45),
|
145 |
-
loc='upper right', prop={'size': 1.5*FONTSIZE})
|
146 |
-
plt.savefig(OUTPUT)
|
147 |
-
# plt.show()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/jc_graphs/plot_partwise_contacts.py
DELETED
@@ -1,42 +0,0 @@
|
|
1 |
-
import csv
|
2 |
-
from pathlib import Path
|
3 |
-
|
4 |
-
from matplotlib import gridspec
|
5 |
-
from matplotlib import pyplot as plt
|
6 |
-
import seaborn as sns
|
7 |
-
|
8 |
-
# Input/output files
|
9 |
-
CSV_FOLDER = Path(__file__).parent / "documents-export-2023-03-07"
|
10 |
-
CONTACT_FILE = CSV_FOLDER / "partwise_contact_graph.csv"
|
11 |
-
OUTPUT = 'output.pdf'
|
12 |
-
|
13 |
-
# Some configuration
|
14 |
-
FONTSIZE = 30
|
15 |
-
plt.rcParams['grid.color'] = (0.5, 0.5, 0.5, 0.1) # low grid opacity
|
16 |
-
|
17 |
-
# Read CSV file
|
18 |
-
body_parts = []
|
19 |
-
body_part_counts = []
|
20 |
-
with open(CONTACT_FILE, newline='', encoding="utf-8") as csvfile:
|
21 |
-
reader = csv.DictReader(csvfile)
|
22 |
-
for row in reader:
|
23 |
-
body_parts.append(row[''])
|
24 |
-
body_part_counts.append(int(row['count']))
|
25 |
-
|
26 |
-
# Plot
|
27 |
-
fig = plt.figure(figsize=(25, 22))
|
28 |
-
gs = gridspec.GridSpec(1, 1)
|
29 |
-
gs.update(wspace=0.15, hspace=0.15)
|
30 |
-
axes = []
|
31 |
-
for elem in gs:
|
32 |
-
axes.append(fig.add_subplot(elem))
|
33 |
-
axes[0].grid(axis='y', zorder=0)
|
34 |
-
sns.barplot(
|
35 |
-
x=body_parts, y=body_part_counts, ax=axes[0], zorder=3,
|
36 |
-
facecolor=(0.2, 0.4, 0.6, 0.6))
|
37 |
-
axes[0].set_xticklabels(axes[0].get_xticklabels(), rotation=90)
|
38 |
-
plt.xticks(rotation=45, ha='right', fontsize=FONTSIZE)
|
39 |
-
plt.yticks(fontsize=FONTSIZE)
|
40 |
-
plt.ylabel('# images', labelpad=30, fontsize=FONTSIZE)
|
41 |
-
plt.savefig(OUTPUT)
|
42 |
-
# plt.show()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/object_nest_piechart.py
DELETED
@@ -1,136 +0,0 @@
|
|
1 |
-
# make a nestest plotly pie chart given a list of labels and a list of values
|
2 |
-
import os.path as osp
|
3 |
-
import json
|
4 |
-
import plotly.express as px
|
5 |
-
import plotly.io as pio
|
6 |
-
|
7 |
-
version = '1'
|
8 |
-
dir = '/is/cluster/work/stripathi/pycharm_remote/dca_contact/hot_analysis/'
|
9 |
-
out_dir_hico = osp.join(dir, f'filtered_data/v_{version}/hico')
|
10 |
-
out_dir_vcoco = osp.join(dir, f'filtered_data/v_{version}/vcoco')
|
11 |
-
|
12 |
-
objectwise_img_dict_hico = osp.join(out_dir_hico, 'imgnames_per_object_dict.json')
|
13 |
-
objectwise_img_dict_vcoco = osp.join(out_dir_vcoco, 'imgnames_per_object_dict.json')
|
14 |
-
|
15 |
-
with open(objectwise_img_dict_hico, 'r') as fp:
|
16 |
-
objectwise_img_dict_hico = json.load(fp)
|
17 |
-
# replace underscore with space
|
18 |
-
objectwise_img_dict_hico = {k.replace('_', ' '): v for k, v in objectwise_img_dict_hico.items()}
|
19 |
-
# replace values with lenght of values
|
20 |
-
objectwise_img_dict_hico = {k: len(v) for k, v in objectwise_img_dict_hico.items()}
|
21 |
-
with open(objectwise_img_dict_vcoco, 'r') as fp:
|
22 |
-
objectwise_img_dict_vcoco = json.load(fp)
|
23 |
-
# replace underscore with space
|
24 |
-
objectwise_img_dict_vcoco = {k.replace('_', ' '): v for k, v in objectwise_img_dict_vcoco.items()}
|
25 |
-
# replace values with lenght of values
|
26 |
-
objectwise_img_dict_vcoco = {k: len(v) for k, v in objectwise_img_dict_vcoco.items()}
|
27 |
-
|
28 |
-
# combine the dicts
|
29 |
-
objectwise_img_dict = objectwise_img_dict_hico.copy()
|
30 |
-
objectwise_img_dict.update(objectwise_img_dict_vcoco)
|
31 |
-
|
32 |
-
|
33 |
-
categorization = {"transportation": ['motorcycle','bicycle','boat','car','truck','bus','train','airplane',],
|
34 |
-
"accessories": ['backpack', 'tie', 'handbag', 'baseball glove'],
|
35 |
-
"furniture": ['bench','chair','couch','bed','toilet','dining table'],
|
36 |
-
'everyday objects': ['book','umbrella','cell phone','laptop','kite','suitcase','bottle','remote',
|
37 |
-
'toothbrush','teddy bear','scissors','keyboard','hair drier','traffic light',
|
38 |
-
'fire hydrant','stop sign','tv','vase','parking meter','clock','potted plant','mouse',],
|
39 |
-
'sports equipment': ['frisbee','sports ball','tennis racket','baseball bat','skateboard','snowboard','skis','surfboard',],
|
40 |
-
'food items': ['banana','cake','apple','carrot','pizza','donut','hot dog','sandwich','broccoli','orange'],
|
41 |
-
'kitchen appliances': ['knife', 'spoon', 'cup', 'wine glass', 'oven', 'fork', 'bowl', 'refrigerator', 'toaster', 'sink', 'microwave',]}
|
42 |
-
|
43 |
-
# get total lengths of each category
|
44 |
-
objectwise_img_dict_categorized = {}
|
45 |
-
for k, v in categorization.items():
|
46 |
-
objectwise_img_dict_categorized[k] = sum([objectwise_img_dict[obj] for obj in v])
|
47 |
-
|
48 |
-
# reverse categorization
|
49 |
-
categorization_rev = {}
|
50 |
-
for k, v in categorization.items():
|
51 |
-
for obj in v:
|
52 |
-
categorization_rev[obj] = k
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
data = dict(
|
57 |
-
character=list(categorization.keys()) + list(categorization_rev.keys()),
|
58 |
-
parent= ["objects"] * len(categorization.keys()) + list(categorization_rev.values()),
|
59 |
-
value =[0] * len(categorization.keys()) + list(objectwise_img_dict.values()),
|
60 |
-
)
|
61 |
-
|
62 |
-
# save data as pandas
|
63 |
-
import pandas as pd
|
64 |
-
df = pd.DataFrame(data)
|
65 |
-
df.to_csv(osp.join(dir, 'object_nest_piechart_data.csv'))
|
66 |
-
|
67 |
-
|
68 |
-
fig = px.sunburst(
|
69 |
-
data,
|
70 |
-
names='character',
|
71 |
-
parents='parent',
|
72 |
-
values='value',
|
73 |
-
)
|
74 |
-
|
75 |
-
# chage font size of the innermost level
|
76 |
-
fig.update_traces(textfont_size=30)
|
77 |
-
|
78 |
-
# save the figure
|
79 |
-
out_path = osp.join(dir, "object_nest_piechart.html")
|
80 |
-
fig.write_html(out_path)
|
81 |
-
# Save plot as PNG wihtout transparent background
|
82 |
-
out_path = osp.join(dir, "object_nest_piechart.png")
|
83 |
-
fig.write_image(out_path,
|
84 |
-
format='png',
|
85 |
-
width=2000, height=1000, scale=1, engine='kaleido')
|
86 |
-
|
87 |
-
|
88 |
-
# Set layout
|
89 |
-
fig.update_layout(
|
90 |
-
margin=dict(t=0, l=0, r=0, b=0),
|
91 |
-
plot_bgcolor='rgba(0, 0, 0, 0)',
|
92 |
-
paper_bgcolor='rgba(0, 0, 0, 0)'
|
93 |
-
)
|
94 |
-
|
95 |
-
# Save plot as HTML with transparent background
|
96 |
-
out_path = osp.join(dir, "object_nest_piechart_transparent.html")
|
97 |
-
pio.write_html(fig, file=out_path, auto_open=False, include_plotlyjs='cdn', config=dict(displayModeBar=False))
|
98 |
-
|
99 |
-
# Save plot as PNG with transparent background
|
100 |
-
out_path = osp.join(dir, "object_nest_piechart_transparent.png")
|
101 |
-
pio.write_image(fig, file=out_path,
|
102 |
-
format='png',
|
103 |
-
width=2000, height=1000, scale=1, engine='kaleido')
|
104 |
-
|
105 |
-
import matplotlib.pyplot as plt
|
106 |
-
import seaborn as sns
|
107 |
-
|
108 |
-
# make a bar plot of objectwise_img_dict
|
109 |
-
|
110 |
-
# sort the dict
|
111 |
-
objectwise_img_dict = {k: v for k, v in sorted(objectwise_img_dict.items(), key=lambda item: item[1], reverse=True)}
|
112 |
-
|
113 |
-
# save as pandas
|
114 |
-
import pandas as pd
|
115 |
-
df = pd.DataFrame.from_dict(objectwise_img_dict, orient='index', columns=['count'])
|
116 |
-
df.to_csv(osp.join(dir, 'image_per_object_category.csv'))
|
117 |
-
|
118 |
-
|
119 |
-
plt.figure(figsize=(20, 10))
|
120 |
-
sns.barplot(x=list(objectwise_img_dict.keys()), y=list(objectwise_img_dict.values()))
|
121 |
-
# make horizontal grid lines
|
122 |
-
plt.grid(axis='y', alpha=0.5)
|
123 |
-
|
124 |
-
# Add x-axis and y-axis labels
|
125 |
-
plt.xticks(rotation=45, ha='right', fontsize=15)
|
126 |
-
plt.yticks(fontsize=15)
|
127 |
-
plt.show()
|
128 |
-
# avoid clipping of x-axis labels
|
129 |
-
plt.tight_layout()
|
130 |
-
|
131 |
-
# save the figure
|
132 |
-
out_path = osp.join(dir, "image_per_object_category.png")
|
133 |
-
plt.savefig(out_path, transparent=False)
|
134 |
-
out_path = osp.join(dir, "image_per_object_category_transparent.png")
|
135 |
-
plt.savefig(out_path, transparent=True)
|
136 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/partwise_contact_graph.py
DELETED
@@ -1,98 +0,0 @@
|
|
1 |
-
import numpy as np
|
2 |
-
import os
|
3 |
-
import json
|
4 |
-
import os.path as osp
|
5 |
-
|
6 |
-
|
7 |
-
# Load the combined dca train, val and test npzs
|
8 |
-
dir = '/is/cluster/work/stripathi/pycharm_remote/dca_contact/data/dataset_extras'
|
9 |
-
trainval_npz = np.load(os.path.join(dir, 'hot_dca_trainval.npz'), allow_pickle=True)
|
10 |
-
test_npz = np.load(os.path.join(dir, 'hot_dca_test.npz'), allow_pickle=True)
|
11 |
-
|
12 |
-
# combine the two npz
|
13 |
-
combined_npz = {}
|
14 |
-
for key in trainval_npz.keys():
|
15 |
-
combined_npz[key] = np.concatenate([trainval_npz[key], test_npz[key]], axis=0)
|
16 |
-
|
17 |
-
segmentation_path = 'data/smpl_vert_segmentation.json'
|
18 |
-
with open(segmentation_path, 'rb') as f:
|
19 |
-
part_segmentation = json.load(f)
|
20 |
-
|
21 |
-
# reverse the part segmentation
|
22 |
-
part_segmentation_rev = {}
|
23 |
-
for part in part_segmentation:
|
24 |
-
for vert in part_segmentation[part]:
|
25 |
-
part_segmentation_rev[vert] = part
|
26 |
-
|
27 |
-
part_names_combined = []
|
28 |
-
for cls in combined_npz['contact_label']:
|
29 |
-
cls_idx = np.where(cls == 1)[0]
|
30 |
-
part_names = [part_segmentation_rev[vert] for vert in cls_idx]
|
31 |
-
# find count for every part in part_names
|
32 |
-
part_count = {}
|
33 |
-
for part in part_names:
|
34 |
-
if part not in part_count:
|
35 |
-
part_count[part] = 0
|
36 |
-
part_count[part] += 1
|
37 |
-
# find the parts with count > 10
|
38 |
-
part_names = [part for part in part_count if part_count[part] > 10]
|
39 |
-
part_names_combined.append(part_names)
|
40 |
-
|
41 |
-
# make a histogram of the part names
|
42 |
-
part_names_combined = [item for sublist in part_names_combined for item in sublist]
|
43 |
-
part_names_combined = np.array(part_names_combined)
|
44 |
-
unique, counts = np.unique(part_names_combined, return_counts=True)
|
45 |
-
part_names_combined = dict(zip(unique, counts))
|
46 |
-
|
47 |
-
print('Total number of parts: ', len(part_names_combined))
|
48 |
-
print(part_names_combined.keys())
|
49 |
-
# set keys to combine;
|
50 |
-
combine_keys = {'leftFoot': ['leftToeBase'],
|
51 |
-
'rightFoot': ['rightToeBase'],
|
52 |
-
'leftHand': ['leftHandIndex1'],
|
53 |
-
'rightHand': ['rightHandIndex1'],
|
54 |
-
'spine': ['spine1', 'spine2'],
|
55 |
-
'head': ['neck'],}
|
56 |
-
|
57 |
-
for key in combine_keys:
|
58 |
-
for subkey in combine_keys[key]:
|
59 |
-
part_names_combined[key] += part_names_combined[subkey]
|
60 |
-
del part_names_combined[subkey]
|
61 |
-
|
62 |
-
print('Total number of parts: ', len(part_names_combined))
|
63 |
-
|
64 |
-
# sort the dictionary
|
65 |
-
part_names_combined = {k: v for k, v in sorted(part_names_combined.items(), key=lambda item: item[1], reverse=True)}
|
66 |
-
|
67 |
-
# convert to pandas
|
68 |
-
import pandas as pd
|
69 |
-
df = pd.DataFrame.from_dict(part_names_combined, orient='index', columns=['count'])
|
70 |
-
df.to_csv(osp.join(dir, 'partwise_contact_graph.csv'))
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
# make a beautiful bar plot using seabord and change the default color palette
|
75 |
-
import seaborn as sns
|
76 |
-
import matplotlib.pyplot as plt
|
77 |
-
|
78 |
-
# set the color palette
|
79 |
-
|
80 |
-
# make the plot
|
81 |
-
fig, ax = plt.subplots(figsize=(20, 10))
|
82 |
-
sns.barplot(x=list(part_names_combined.keys()), y=list(part_names_combined.values()), ax=ax,
|
83 |
-
palette=sns.color_palette("rocket", len(part_names_combined)))
|
84 |
-
ax.set_xticklabels(ax.get_xticklabels(), rotation=90)
|
85 |
-
plt.xticks(rotation=45, ha='right', fontsize=30)
|
86 |
-
plt.yticks(fontsize=30)
|
87 |
-
# avoid clipping of xtick labels
|
88 |
-
plt.tight_layout()
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
# save the plot
|
93 |
-
outdir = "/is/cluster/work/stripathi/pycharm_remote/dca_contact/hot_analysis"
|
94 |
-
out_path = os.path.join(outdir, "partwise_contact_graph.png")
|
95 |
-
plt.savefig(out_path, transparent=True, dpi=300)
|
96 |
-
|
97 |
-
|
98 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hot_analysis/vcoco_analysis.ipynb
DELETED
@@ -1,276 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"cells": [
|
3 |
-
{
|
4 |
-
"cell_type": "code",
|
5 |
-
"execution_count": 30,
|
6 |
-
"metadata": {},
|
7 |
-
"outputs": [],
|
8 |
-
"source": [
|
9 |
-
"import json\n",
|
10 |
-
"import pandas as pd \n",
|
11 |
-
"import ipdb\n",
|
12 |
-
"import os\n",
|
13 |
-
"import pickle as pkl\n",
|
14 |
-
"import os.path as osp\n",
|
15 |
-
"import numpy as np\n",
|
16 |
-
"from PIL import Image"
|
17 |
-
]
|
18 |
-
},
|
19 |
-
{
|
20 |
-
"cell_type": "code",
|
21 |
-
"execution_count": 31,
|
22 |
-
"metadata": {},
|
23 |
-
"outputs": [
|
24 |
-
{
|
25 |
-
"name": "stdout",
|
26 |
-
"output_type": "stream",
|
27 |
-
"text": [
|
28 |
-
"Total images found: 5459\n",
|
29 |
-
"Images after KP filtering: 2386\n",
|
30 |
-
"['vcoco_000000051899.jpg', 'vcoco_000000093127.jpg', 'vcoco_000000455665.jpg', 'vcoco_000000248389.jpg', 'vcoco_000000403947.jpg']\n"
|
31 |
-
]
|
32 |
-
}
|
33 |
-
],
|
34 |
-
"source": [
|
35 |
-
"# Load Agniv VITpose-base hot dict\n",
|
36 |
-
"filter_path = \"./agniv_pose_filter/hot_dict.pkl\"\n",
|
37 |
-
"with open(filter_path, 'rb') as f:\n",
|
38 |
-
" pose_md_dict = pkl.load(f)\n",
|
39 |
-
" \n",
|
40 |
-
"vcoco_dict = {}\n",
|
41 |
-
"\n",
|
42 |
-
"for k, v in pose_md_dict.items():\n",
|
43 |
-
" if 'vcoco' in k:\n",
|
44 |
-
" vcoco_dict[k] = v\n",
|
45 |
-
" \n",
|
46 |
-
"print(f'Total images found: {len(vcoco_dict)}')\n",
|
47 |
-
"\n",
|
48 |
-
"# Filter out images with < 10 visible keypoints \n",
|
49 |
-
"kp_thresh = 10\n",
|
50 |
-
"\n",
|
51 |
-
"filter_img_names = {}\n",
|
52 |
-
"\n",
|
53 |
-
"for imgname, kp_md in vcoco_dict.items():\n",
|
54 |
-
" if kp_md == 0:\n",
|
55 |
-
" continue\n",
|
56 |
-
" if kp_md[\"num_persons\"] == 1 and kp_md[\"num_kpt\"][0.5][0] > kp_thresh:\n",
|
57 |
-
" filter_img_names[imgname] = kp_md[\"num_kpt\"][0.5][0]\n",
|
58 |
-
" \n",
|
59 |
-
"print(f'Images after KP filtering: {len(filter_img_names)}')\n",
|
60 |
-
"\n",
|
61 |
-
"print(list(filter_img_names.keys())[:5])"
|
62 |
-
]
|
63 |
-
},
|
64 |
-
{
|
65 |
-
"cell_type": "code",
|
66 |
-
"execution_count": 35,
|
67 |
-
"metadata": {},
|
68 |
-
"outputs": [
|
69 |
-
{
|
70 |
-
"name": "stdout",
|
71 |
-
"output_type": "stream",
|
72 |
-
"text": [
|
73 |
-
"loading annotations into memory...\n",
|
74 |
-
"Done (t=1.30s)\n",
|
75 |
-
"creating index...\n",
|
76 |
-
"index created!\n",
|
77 |
-
"Final number of images 2368\n"
|
78 |
-
]
|
79 |
-
}
|
80 |
-
],
|
81 |
-
"source": [
|
82 |
-
"from pycocotools.coco import COCO\n",
|
83 |
-
"version = '1'\n",
|
84 |
-
"out_dir = f'./filtered_data/v_{version}/vcoco'\n",
|
85 |
-
"os.makedirs(out_dir, exist_ok=True)\n",
|
86 |
-
"\n",
|
87 |
-
"coco_dir = '/is/cluster/work/stripathi/pycharm_remote/v-coco/data'\n",
|
88 |
-
"coco = COCO(os.path.join(coco_dir, 'instances_vcoco_all_2014.json'))\n",
|
89 |
-
"\n",
|
90 |
-
"imgwise_object_names = {}\n",
|
91 |
-
"img_dir = '/ps/project/datasets/HOT/Contact_Data/images/training/'\n",
|
92 |
-
"\n",
|
93 |
-
"bad_object_names = ['bird', 'cat', 'dog', 'horse', 'sheep', 'cow', \n",
|
94 |
-
" 'elephant', 'bear', 'zebra', 'giraffe']\n",
|
95 |
-
"\n",
|
96 |
-
"# # Get all coco objects\n",
|
97 |
-
"# count = 0\n",
|
98 |
-
"# for id in range(91):\n",
|
99 |
-
"# try: \n",
|
100 |
-
"# print(coco.loadCats(id))\n",
|
101 |
-
"# count += 1\n",
|
102 |
-
"# except:\n",
|
103 |
-
"# print(f'ID:{id} does not exist')\n",
|
104 |
-
"# continue\n",
|
105 |
-
"# print(count)\n",
|
106 |
-
"\n",
|
107 |
-
"objectwise_img_names = {}\n",
|
108 |
-
"for img_name in filter_img_names.keys():\n",
|
109 |
-
" img_id = int(os.path.splitext(img_name.split('_')[-1])[0])\n",
|
110 |
-
" ann_ids = coco.getAnnIds([img_id])\n",
|
111 |
-
" anns = coco.loadAnns(ann_ids)\n",
|
112 |
-
" object_list = []\n",
|
113 |
-
" for ann in anns:\n",
|
114 |
-
" object_cat = coco.loadCats(ann[\"category_id\"])\n",
|
115 |
-
" if len(object_cat) > 1:\n",
|
116 |
-
" ipdb.set_trace()\n",
|
117 |
-
" object_name = object_cat[0]['name']\n",
|
118 |
-
" if object_name in bad_object_names:\n",
|
119 |
-
" continue\n",
|
120 |
-
" if object_name != 'person':\n",
|
121 |
-
" object_list.append(object_name)\n",
|
122 |
-
" if len(object_list) != 0:\n",
|
123 |
-
" imgwise_object_names[img_name] = list(set(object_list))\n",
|
124 |
-
" \n",
|
125 |
-
" for obj_name in set(object_list):\n",
|
126 |
-
" objectwise_img_names.setdefault(obj_name,[]).append(img_name)\n",
|
127 |
-
" \n",
|
128 |
-
"# # Visualize images \n",
|
129 |
-
"# print(img_name)\n",
|
130 |
-
"# print(list(set(object_list)))\n",
|
131 |
-
"# img = Image.open(osp.join(img_dir,img_name))\n",
|
132 |
-
"# display(img)\n",
|
133 |
-
" \n",
|
134 |
-
" \n",
|
135 |
-
"print(f'Final number of images {len(imgwise_object_names)}')\n",
|
136 |
-
" \n"
|
137 |
-
]
|
138 |
-
},
|
139 |
-
{
|
140 |
-
"cell_type": "code",
|
141 |
-
"execution_count": 36,
|
142 |
-
"metadata": {
|
143 |
-
"scrolled": true
|
144 |
-
},
|
145 |
-
"outputs": [
|
146 |
-
{
|
147 |
-
"name": "stdout",
|
148 |
-
"output_type": "stream",
|
149 |
-
"text": [
|
150 |
-
"saved at ./filtered_data/v_1/vcoco/object_per_image_dict.json\n",
|
151 |
-
"saved at ./filtered_data/v_1/vcoco/vcoco_imglist_all_170223.txt\n",
|
152 |
-
"saved at ./filtered_data/v_1/vcoco/imgnames_per_object_dict.json\n"
|
153 |
-
]
|
154 |
-
}
|
155 |
-
],
|
156 |
-
"source": [
|
157 |
-
"# Save the imagewise_object dict\n",
|
158 |
-
"out_path = osp.join(out_dir, 'object_per_image_dict.json')\n",
|
159 |
-
"with open(out_path, 'w') as fp:\n",
|
160 |
-
" json.dump(imgwise_object_names, fp)\n",
|
161 |
-
" print(f'saved at {out_path}')\n",
|
162 |
-
" \n",
|
163 |
-
"# save image_list \n",
|
164 |
-
"out_path = osp.join(out_dir, 'vcoco_imglist_all_170223.txt')\n",
|
165 |
-
"with open(out_path, 'w') as f:\n",
|
166 |
-
" f.write('\\n'.join(imgwise_object_names.keys()))\n",
|
167 |
-
" print(f'saved at {out_path}')\n",
|
168 |
-
"\n",
|
169 |
-
"\n",
|
170 |
-
"# Save the object_wise dict\n",
|
171 |
-
"out_path = osp.join(out_dir, 'imgnames_per_object_dict.json')\n",
|
172 |
-
"with open(out_path, 'w') as fp:\n",
|
173 |
-
" json.dump(objectwise_img_names, fp)\n",
|
174 |
-
" print(f'saved at {out_path}')\n",
|
175 |
-
"\n",
|
176 |
-
" \n",
|
177 |
-
"\n",
|
178 |
-
" "
|
179 |
-
]
|
180 |
-
},
|
181 |
-
{
|
182 |
-
"cell_type": "code",
|
183 |
-
"execution_count": 37,
|
184 |
-
"metadata": {
|
185 |
-
"scrolled": false
|
186 |
-
},
|
187 |
-
"outputs": [
|
188 |
-
{
|
189 |
-
"name": "stdout",
|
190 |
-
"output_type": "stream",
|
191 |
-
"text": [
|
192 |
-
"5072\n"
|
193 |
-
]
|
194 |
-
},
|
195 |
-
{
|
196 |
-
"data": {
|
197 |
-
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEPCAYAAACtCNj2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAsQklEQVR4nO3debhcVZnv8e+bBDJDRpKQBBI0TGGUEIEgIAgEAhkIoyC0oqgNtt22fRW19enbzdW+rfa1xQFUFAdATBhCCGMUFEFCGEOYEgRJEEhAwhAgQHjvH+9blV1FnXMqyalT5yS/z/Oc59TetYe19157vWutPZS5OyIiIgDdmp0AERHpPBQURESkTEFBRETKFBRERKRMQUFERMoUFEREpKxHsxOwMYYMGeJjxoxpdjJERLqUu++++3l3H1rruy4dFMaMGcPChQubnQwRkS7FzP7S0nfqPhIRkTIFBRERKVNQEBGRMgUFEREpU1AQEZEyBQURESlTUBARkTIFBRERKevSD68BrPzBLyuGh376tCalRESk61NLQUREyhQURESkTEFBRETKFBRERKRMQUFERMoUFEREpExBQUREyhQURESkTEFBRETKFBRERKRMQUFERMoUFEREpExBQUREyhQURESkTEFBRETKFBRERKRMQUFERMoUFEREpExBQUREyhoeFMysu5nda2Zzc3iQmd1kZkvy/8DCtOea2VIze9TMjmx02kREpFJHtBQ+CzxcGP4iMN/dxwHzcxgz2xU4GRgPTAa+b2bdOyB9IiKSGhoUzGwUMAX4cWH0NODi/HwxML0w/jJ3X+PuTwBLgYmNTJ+IiFRqdEvh/wH/C3inMG6Yuz8DkP+3yfEjgWWF6ZbnOBER6SANCwpmdgywwt3vrneWGuO8xnLPMrOFZrZw5cqVG5VGERGp1MiWwiRgqpk9CVwGHGpmvwSeM7MRAPl/RU6/HBhdmH8U8Nfqhbr7he4+wd0nDB06tIHJFxHZ/DQsKLj7ue4+yt3HEBeQf+vupwFzgDNysjOAq/PzHOBkM+tpZmOBccCCRqVPRETerUcT1vkN4HIzOxN4CjgBwN0Xm9nlwEPA28DZ7r62CekTEdlsdUhQcPdbgFvy8wvAYS1Mdx5wXkekSURE3k1PNIuISJmCgoiIlCkoiIhImYKCiIiUKSiIiEiZgoKIiJQpKIiISJmCgoiIlCkoiIhImYKCiIiUKSiIiEiZgoKIiJQpKIiISJmCgoiIlCkoiIhImYKCiIiUKSiIiEiZgoKIiJQpKIiISJmCgoiIlCkoiIhImYKCiIiUKSiIiEiZgoKIiJQpKIiISFmbQcHMTjCz/vn5K2Z2hZm9r/FJExGRjlZPS+Ff3f0VMzsQOBK4GPhBY5MlIiLNUE9QWJv/pwA/cPergS0blyQREWmWeoLC02Z2AXAiMM/MetY5n4iIdDH1FO4nAjcAk919FTAI+JdGJkpERJqjzaDg7q8BK4ADc9TbwJJGJkpERJqjnruPvgZ8ATg3R20B/LKRiRIRkeaop/toBjAVWA3g7n8F+jcyUSIi0hz1BIU33d0BBzCzvo1NkoiINEs9QeHyvPtogJl9ArgZ+FFjkyUiIs3Qo60J3P2bZnY48DKwE/BVd7+p4SkTEZEO12ZQAMggoEAgIrKJq+fuo1fM7OWqv2VmdqWZ7dDKfL3MbIGZ3W9mi83s33L8IDO7ycyW5P+BhXnONbOlZvaomR3ZPpsoIiL1qqel8G3gr8AlgAEnA8OBR4GLgENamG8NcKi7v2pmWwC3mdl1wHHAfHf/hpl9Efgi8AUz2zWXPR7YFrjZzHZ097UtLF9ERNpZPReaJ7v7Be7+iru/7O4XAke7+6+BgS3N5OHVHNwi/xyYRrxUj/w/PT9PAy5z9zXu/gSwFJi43lskIiIbrJ6g8I6ZnWhm3fLvxMJ33tqMZtbdzO4jnoi+yd3vBIa5+zMA+X+bnHwksKww+/IcJyIiHaSeoHAq8BGiYH8uP59mZr2Bc1qb0d3XuvtewChgopnt1srkVmsR75rI7CwzW2hmC1euXFlH8kVEpF713JL6Z+DYFr6+rZ6VuPsqM7sFmAw8Z2Yj3P0ZMxtBBBuIlsHowmyjiGsZ1cu6ELgQYMKECa22VEREZP3Uc/dRLzM728y+b2YXlf7qmG+omQ3Iz72BDwGPAHOAM3KyM4Cr8/Mc4GQz62lmY4FxwIL13iIREdlg9XQf/YK42+hI4FaiBv9KHfONAH5nZg8AdxHXFOYC3wAON7MlwOE5jLsvBi4HHgKuB87WnUciIh2rnltS3+vuJ5jZNHe/2MwuIX5foVXu/gCwd43xLwCHtTDPecB5daRJREQaoJ6Wwlv5f1VeKN4aGNOwFImISNPU01K4MJ86/lei378f8NWGpmojrfzhTyqGh37qzCalRESka6nn7qMf58dbgRZfayEiIl1fm0Eh7yA6negyKk/v7v/QsFSJiEhT1NN9NA/4E7AIeKexyWmclT88v2J46Kdafe5ORGSzVE9Q6OXun2t4SkREpOnqek7BzD5hZiPytdeDzGxQw1MmIiIdrp6WwpvAfwFfZt27iBxddBYR2eTUExQ+RzzA9nyjEyMiIs1VT/fRYuC1RidERESar56WwlrgPjP7HfFraoBuSRUR2RTVExSuyj8REdnE1fNE88VtTSMiIpuGFoOCmS2ilZ/bdPc9GpIiERFpmtZaCsd0WCpERKRTaDEouPtfOjIhIiLSfPXckioiIpsJBQURESlrMSiY2fz8/58dlxwREWmm1i40jzCzg4GpZnYZYMUv3f2ehqZMREQ6XGtB4avAF4FRwLervnPg0EYlSkREmqO1u49mAbPM7F/d/d87ME0iItIk9TzR/O9mNhU4KEfd4u5zG5ssERFphjbvPjKzrwOfBR7Kv8/mOBER2cTU80K8KcBe7v4OgJldDNwLnNvIhHWE535QeWPVsE9/oUkpERHpHOp9TmFA4fPWDUiHiIh0AvW0FL4O3Ju/p2DEtYUu30oQEZF3q+dC86VmdguwLxEUvuDuzzY6YSIi0vHqaSng7s8AcxqcFhERaTK9+0hERMrqailsTp75/pfLn0f8/XlNTImISMdrtaVgZt3M7MGOSoyIiDRXq0Ehn02438y266D0iIhIE9XTfTQCWGxmC4DVpZHuPrVhqRIRkaaoJyj8W8NTISIinUI9zyncambbA+Pc/WYz6wN0b3zSRESko9XzQrxPALOAC3LUSOCqBqZJRESapJ7uo7OBicCdAO6+xMy2aWsmMxsN/BwYDrwDXOju3zGzQcCvgTHAk8CJ7v5iznMucCawFvgHd79hfTeovS0//5MVw6POuaCFKUVEur56Hl5b4+5vlgbMrAfxy2tteRv4Z3ffBdgPONvMdiV+zW2+u48D5ucw+d3JwHhgMvB9M1M3lYhIB6onKNxqZl8CepvZ4cBvgGvamsndnyn9jrO7vwI8THQ9TQMuzskuBqbn52nAZe6+xt2fAJYSLRQREekg9QSFLwIrgUXAJ4F5wFfWZyVmNgbYm+iCGpbvUiq9U6nUFTUSWFaYbXmOExGRDlLP3Ufv5A/r3El0Gz3q7vV0HwFgZv2A2cA/uvvLZtbipLVWX2N5ZwFnAWy3nZ6pExFpT/XcfTQFeBz4H+B8YKmZHVXPws1sCyIg/Mrdr8jRz5nZiPx+BLAixy8HRhdmHwX8tXqZ7n6hu09w9wlDhw6tJxkiIlKnerqPvgV80N0PcfeDgQ8C/93WTBZNgp8AD7v7twtfzQHOyM9nAFcXxp9sZj3NbCwwDlhQ32aIiEh7qOeW1BXuvrQw/GfW1e5bMwn4CLDIzO7LcV8CvgFcbmZnAk8BJwC4+2Izuxx4iLhz6Wx3X1vXVoiISLtoMSiY2XH5cbGZzQMuJ/r4TwDuamvB7n4bta8TABzWwjznAXpftYhIk7TWUji28Pk54OD8vBIY2LAUiYhI07QYFNz9ox2ZEBERab42rynkRd/PEK+lKE+/Ob86+4nvTq8YHvuZq5qSDhGR9lbPheariLuIriHeYSQiIpuoeoLCG+7+Pw1PiYiINF09QeE7ZvY14EZgTWlk6b1GIiKy6agnKOxOPG9wKOu6jzyHRURkE1JPUJgB7FB8fbaIiGya6gkK9wMDqO8p5s3WQ9+rvBlr17PncO8Pj60Yt/enruFPFx5TMW6/s+Y2PG0iIvWqJygMAx4xs7uovKaw2d6SKiKyqaonKHyt4akQEZFOoZ7fU7i1IxIiIiLNV88Tza+w7sdutgS2AFa7+1aNTJiIiHS8eloK/YvDZjYd/XZyu/r9j6ZUDB/0iWublBIR2dzV8yM7Fdz9KvSMgojIJqme7qPjCoPdgAnU+O1kaV83/fjoiuHDPz6vSSkRkc1JPXcfFW+2fxt4EpjWkNSIiEhT1XNNQb+rICKymWjt5zi/2sp87u7/3oD0iIhIE7XWUlhdY1xf4ExgMKCgICKyiWnt5zi/VfpsZv2BzwIfBS4DvtXSfCIi0nW1ek3BzAYBnwNOBS4G3ufuL3ZEwkREpOO1dk3hv4DjgAuB3d391Q5LlYiINEVrLYV/Jt6K+hXgy2ZWGm/EhWa95qKDzftJ5bMLR5+pZxdEpH21dk1hvZ92FhGRrk0Fv4iIlCkoiIhIWT2vuZBO7KqLjqoYnv6x65qUEhHZFKilICIiZQoKIiJSpu6jTdDlP51cMXziR69vUkpEpKtRS0FERMrUUthM/PJnR1YMn/Z3NzQpJSLSmamlICIiZQoKIiJSpu6jzdhFFx9RMfyxM27kgl+s62b65EfUxSSyuVFLQUREyhoWFMzsIjNbYWYPFsYNMrObzGxJ/h9Y+O5cM1tqZo+a2ZG1lyoiIo3UyO6jnwHnAz8vjPsiMN/dv2FmX8zhL5jZrsDJwHhgW+BmM9vR3dc2MH1Sh+/+qjI+f+ZUdSmJbMoa1lJw998Df6saPY34BTfy//TC+MvcfY27PwEsBSY2Km0iIlJbR19TGObuzwDk/21y/EhgWWG65TlOREQ6UGe50Gw1xnnNCc3OMrOFZrZw5cqVDU6WiMjmpaODwnNmNgIg/6/I8cuB0YXpRgF/rbUAd7/Q3Se4+4ShQ4c2NLEiIpubjg4Kc4Az8vMZwNWF8SebWU8zGwuMAxZ0cNpERDZ7Dbv7yMwuBQ4BhpjZcuBrwDeAy83sTOAp4AQAd19sZpcDDwFvA2frziMRkY7XsKDg7qe08NVhLUx/HnBeo9IjIiJt02suZL1989LKZxc+f4qeXRDZVCgoSLv4j19XBoqvnKRAIdIVKShIw3zpN5W/APd/TtAvwIl0dp3lOQUREekEFBRERKRMQUFERMp0TUE61GeuqLzO8N3jdJ1BpDNRS0FERMoUFEREpEzdR9J0p1xV2aV06XR1KYk0i4KCdEpHXV35lpTrpl3apJSIbF7UfSQiImUKCiIiUqbuI+kyjrrqnIrh66af36SUiGy6FBSkSzv6qnMrhudN/3qTUiKyaVD3kYiIlKmlIJuco6/83xXD82Z8tUkpEel6FBRks3D0lf9ZMTxvxhealBKRzk1BQTZbU67474rha4/7pyalRKTzUFAQKZhyxffKn6897mymzL6g4vtrZ36yo5Mk0qEUFETW0zGzf1IxPHfmmU1KiUj7U1AQaQfHzL64YnjuzDOalBKRjaOgINIgx8z6VcXw3ONPbVJKROqnoCDSgY6Z9euK4bnHn9SklIjUpqAg0mTHzppdMXzN8TOblBIRBQWRTmnqrKsrhuccP42ps66tGjelI5MkmwkFBZEubNqsGyuGrz7+iCalRDYVeveRiIiUqaUgsomZMft3FcNXzvwgx83+Y8W4K2ZOYubsuyrGzZ65b8PTJp2fgoKIlJ0w+4Hy59/M3IOTZj9W8f2vZ+7Y0UmSDqagICLr5RNXPFUx/KPjtuMrVz5dMe4/ZozsyCRJO1JQEJGG+NaVz1YM//OM4U1KiawPBQUR6TAXXrGiYvis47ZpUkqkJQoKItJUl8xeWTH84ZlDuXLW8xXjZhw/hOt+XTnuqJOG8NtfVc576KlDG5PIzYiCgohsUv7488pAMen0oSy8qLKFMuFjaqG0REFBRDZLiy6oDBS7f1KBAhQURETKlpz/XPnzuHOG8dS3Ky+Wb/e5Tf9ieacLCmY2GfgO0B34sbt/o8lJEhEpe+b/Lq8YHvG/RvHsN5dWjBv++ffy7LcXV4773Hie++97K8YN+6e9G5PIjdCpgoKZdQe+BxwOLAfuMrM57v5Qc1MmItIYz33nzorhYZ99f5NSEjpVUAAmAkvd/c8AZnYZMA1QUBCRzcZz//OHiuFh//ABVnx3fsW4bT5zGCvOv75y3DmTWfG9OZXjzp66XuvubEFhJLCsMLwcaG7YFBHp4lZ8f1bd05q7NzAp68fMTgCOdPeP5/BHgInu/pnCNGcBZ+XgTsCj+XkIUHkj84aPa89ldcVxnSUdzRrXWdLRrHGdJR2daVxnSUd7jdve3Ws/1OHuneYP2B+4oTB8LnBunfMubK9x7bmsrjius6RD26/t7yzjOks6GjGu+q+z/Z7CXcA4MxtrZlsCJwNz2phHRETaSae6puDub5vZOcANxC2pF7n74jZmExGRdtKpggKAu88D5m3ArBe247j2XFZXHNdZ0tGscZ0lHc0a11nS0ZnGdZZ0NGJchU51oVlERJqrs11TEJHNjJlZs9Mg63TJoGBm/c1sWGG4ZqYysy3NbJSZtbmdZjbMzAYUhseZ2VYtrLt7G8vqVjVsrQ2vLzPrs77La4d1trSP616umfWsGt7bzIZsTLrWV97E0D0/N6Uwqne9rU3X3sfczHqbWUO6k82sm5ltYWZbVI3f1swGu7u3kr96mdlgM+vfyvLfNe96bvuW1WnrCGbWz8z61RjfavlSx3I3Kl93yaAAbAnsUSrEPfvAiid8GgTsC4wojTCzgdWBwsx6AzOAozMTDgUmABPNbOucZiczGwfMzHVbjh+VhdtYS8ChVYXdljlt96r07lw8gGY21Mz2qlF47mVmvQqj3mdme5QGCsvrX5inv5mNMbM9i9PUmK5vpn3b2ru6rFSQDsv/lifSITXS27d65pxvqpltn8MDgAOAw4rTt3CSDK0aHlBaTkty+wfWCOwjgRlm1sNb6TttYRsmmtmI/Fw8bluU/pvZIWb2ntLxqjWOdfuyVmHWszC+NN2+Vfm1HzCp6lhsXaMwGWZmB1pUcIrprT5e2wInAoNzeOvSeVI1XWmbisvaoVaBXbWO/sBkYF/LCk0elxOBz5rZkKr82TP/9yfO35nAB/I8fZdC/j+0sA+6m9lWZjawsNwBeU58oGoRuwFH5vldmnaQmY2vtb6q7exXtT/65j4fUTpmZjY691MxLSOBTwFHWJYxOX4IsEdheFT1ccjxPQqft7IIsLtW7Y/xtc6ntnSZoFB1Au0E7APsmSfEMDPbnyhkiid6L2AMkaG650l0OpFBS4X9cOJhuNXAk+7+BvA28BrQGygFkLeBHXKZawqZ+DDiIPYFSgVNL+DDZjYop9nXzKYBMwsZ/v3AacCOOdwr0z8ZKL/D18xOyW14s7BdfYnCeOfMhAeZ2enAtEJh9hbxNPgky8CQyxsAfNLMPpij3sl1zjCzvXKa0Wb2fjObbGZ9stA72Mw+AZxpZsM9vJXb+v4szAaY2SQiuO5bWOdWwH7AcKBbZvLDgRXAI+6+2qKm+vHcR4MK8+4PHJfLKBVgRwIn54lV3k9mtnshn/QBjsu0jCltFzAW2BnYq1QA50m8W2FZw4ETzezgHB5qZqcSr1zZ1syscOIdDhxuZt0L++N0oHSCvkXko/I44AAzOym3q1S52NbMjgE+TwT9AZmGScDf5XZ0y+0/hngIqVRodSMKzsPNbDDrTM7xu5I3lZjZEbnvSoGsL/CBnKZUuPcknhmaamY75XTDgI+a2bDCtk8GJgHTrTJoHQIcX8iLB2eaxwGDcr4PA68TbzA4Nretb+7ngy1uSR9HnOergbfc/fVc/lQz+3RhO8l0vg/YO+edAvwjUdj3ynEjgGFEpW5IztcLOATYncJ5B4wGdqrKxzOLgcLMtgE+C+xT2n53X53zfgjY0SIIHgjsCYw0sx657gOBVcD97v5SLm8Qcax3sahM9GZdwOqVZdgWZnZUHpti6+ag3G/jc1kfJs659S7jO93dRy0pZMSJRMF/K/BwNj2nAFsBzwBbAGssno5+C7gJeBYonUz9gGfd/cU8CLsCLxAPdTySGfkAoqC/3t0Xm9lxufzewB+AR8zsQzkf+f9Rd38rM/Uw4CVgbX6/FVFDfZGowZyS2/BT4FmL2ueOOf1d7r4st/VY4qS+BOhjZqtZV4t4Obe3P1FAvA1Y/gcYBQwAHgOW5PKGA8cDTxKtoFWZpkU5z5L8/zaRsYcSJ+1yoPRO4WW5bsxsKlF4PEY+JUkUxg8CT2em3ZoodN4Bnsr1zcjt+KG7P5rH93Uzu5nIyG/k8o8kCvHFeUy7AR8kguKt7v50TlcKIqOAJ7Og3YM4yR8DnreoMe2X6Zvn7vdY1Nw+ncfnt7n8/kSgLx1Xcl9sCTycy+th0VLrx7qn6s3MdicC3QLgiUzb7kT+WwA8kYWEE62AVbncNTnNC7nt77j7qtyOkcD5wF+Jwnrv/Puxu5eO13uIgnM18GZux2653IeBP2TePCWPx+NEcB5K5IengBvdfWkG3wNzH68BXsr9NDHT2h94LgumHYCrgBfc/Z3c3iOIc+1xYGczex+wkjhfryPy1vZEXn3E3W/JQDYSeG+mrxeRpyfmsbmulE8y4LxAPM/Uz91fNbOdieB0C5H31gKPEPn/KXd/IysEuxDn5Y3u/nwG2PGZvuvc/flcxylE3r8L+HPuzx1zPw82syWZzsOIc2FtYfv3Iypw3Yieij0zj8zPfDKaCF7DiXNhTc63F5E3lxHnY0/gzMwjz+Q29Mp5hxD5rDtRxu1DBNA7iPNkpzxOf8nv10unDwpVtbIZwNHAzcBsYAczK2WkN4iDvSaj5SQig1xHHJxS03AB0M+iqbUbMBC4HViZhf82xEG9zt0X5oHYncg4i9z9wUzLO0Rt4E9EQHnLzCYQ+3QhUZC9kge7N1EregGYSmT6N4Fl7v5mnpxHAPcAj5tZT3dfk2kdBPwul3EmceJcQpwAfXJ4DHESzs/tP43IlH/L9PXIgvO9xAn7aO6/gUSBfR8R1N7MAmBSTnc38TLCCUQme4Io/N/I7epJFFbXE7XSnYkM/SRx0u9OZP6dgMuIwuAYYClxspZeUQKAuz9pZsvcfW0WJu8lMv6jRIG/d27TwkIhcXSudwlxUvQCPkKc/H8kTuw+wAm5T/7k7vfkKlflfpgE3E+cbAfldIvc/UGLlsqemYYFWRMstfSeB57OfbwLUZguJvJnqevuAOA2Im++ZdH62J0oiG/L47U1EVyXAddm5eSwPKbbEvnmwPzcJ5dfemnkiUSB9QpRAeoFfJQIptcAV2XAHUO0fp8nAtuAPC7PA0vc/bEs/I7O7f0Ncf7slPv9LeD2DBx75L5aBfwtW9dk/h+e6Vzq7neb2T65jAsyT0BU3Ba7+y2Fw38cEWTuJgrK3YhzeiURGErHeiSR97+f23V0rm9rIt/1IPLiCuBmd3868/6k/JsPvJVlxHtKx7YQEN5HnHPP5rHsCXySOFeeJG6XH0CcE0Nyv6/KecflsVhFlDu75LY8CNxLnMOjc/sXZFpfzJbDh3L5pYrBQUSQv5Z1lZODiHJiLpGP38hKx3uIAHBPHr/XiHP6gVLran10+qBQCAgfICLrfCLzdyO6IPoRB+/erP2XmsKzc3xvoqm6jKgxPZg1iwOIKP8nd1+U67gNOJU4aRZlJu9LHJyn3f0POd0eOe4Bcsdn4XFIruc+IjOdQ5ycc4lMMhj4GFG4XuXub+Y2PmlmX3f3V6u2/Tkz+6W7r831Xkk85f0UEVT2JDLYIqJQW52ZfUV+f3fWpA7LdQ8jHghcatFVMZA4ya7OgDCI6JoZkst8DPgMcVI/TAS7nkQTt1ToXOvur5nZfKLAmpv74z3ESVia7y+5f/Yhuunm5zaVg35u89osTHcjCoR5mfYDiJPs94WAsDdRkLxAFACl7oXZRNfZPUTtdiJRe7yvEBBKeWuZmf0mj/O43NYbskIwk8hfTxGBqBQQjiFqiRcRFYqTiJbQm0QQ9Vz/c0SBcH8GhKOIc24JcEd2mw3O4zieqCQ8kgX9/sRDnHOIgDwgl/d0FraHmdkbRD6clfOW0ndVpum+PBYH5fAi4MeZtmFE0J3r7o/l/njHzO7I4/94prXU7Tfb3R/KY/PhPPb3Ffb5JCJv3k4UeCMsul5+lPuwP7AXUfD9uBRIcr0v5DGbQRSC3YjKyj25fc/m+XU0cDnwhMeDrvsQlbhXcvyWud/GEq2Xpy26vT5GtKovz2UbEUjuJ1qNb+c2nEoEyR8CVhg/j6hU3JDH9hQizy0gzocVmb6euY+X5fR9icrEn4iguiNxjqx09zty2YPzOKzMeUuV0N2JwPm8RRfuzEzbI0SZ80a2Snrk9lxBVLp2JQLrfVmxXG+d+jmF3GE7EgdiEnFyXlOombyXqBVcSNQW9yOidG+iEN4/h48gCqIfWfTVnkwcwBuJgq8vcaCvJ2o+r2TTfThx8t9Zaqpnl8ZU4JdE99WqzBBjidrp7939lZx2O6IveS5RsG1J1GhucvdS9K/e5opCssb3PYjC/GSiQLwO+D1x0n2YKNh+QRRiay26w04iuoBecvc7Lfp0pxKB844s1IcQ/bB9iBrx3bm+UTntpe7+YmG7TgJ+4u5/q0rbyFxX6frII0TtfkUei12IFs3qFrbvcLIbiAj0q7Lp/3GihnwHcWLvQBSkLxNdbquqlrNDLmcH4qS5290faGGd2xK16/uILo3HM5DuQ5zQdxVrXBZ9yUcTwfTFrIXvQQSTUnfATkS++ylRq3w198mLRC28O+u6qhYT+fxNIsh3y314P1EoTsttXeLul+fyjyWCyT1EfqroJrC4kF4q1IYTeeOW7DY7kMir/d399hr7owfRfXIg0d3zOhHY9yJqvmNz218qzDMYOIrIj3sSQWw1UavfgmghvgCscPf7a6yzd+6T3XO7uxfOo9Ny3/QlgtPLFt1Uh+T2X5/78kiiBfU6cQ3ivszXHycCx68yLTOI8/GGUiUh9+cZRIv2ilJ3UNU+GU0U4LvlPi/1GuxLBLGlucw1eY7sT1Rq+mVa7wP+XMgjI4iL7YuJQLIqp1uT05Xzq5mNzX3zOyJoH0yUed8izq8PZrpW5bF5sXof16tTBoVSwWjRfziR2Kl3EjX9l6um3SJrYbsThRrAD9z9pSxMTiOuA2xDRO3HiKbqWnefZXGNolSLft7d52YGP4c4oZcVWisfJCL+1kTXxPas62t8mKitVhR2WVM5mThB7iCa1RsUwauWux2RoS4qFcw57mSiJva3HB5P1H7vcvc/5nQjiJP0CuJkGkYUoKOBx939mqp1lQuYNsZtTwTvpcSJPZFoig8jTuhriQy/vNT6qZr/RKIr7CGiAHu18F0pfc8Qmd+IAvYed3+txrL6EwX3NkRN/fet7MsRxEXJ+4g+8plERWQJWSurMU/34jZUD+e4Ut6cAhwKXE10I6wFjiUqJsOIgmNVbt9kooC4hMhnfYmujP2Igra0D0cQheBV9RQA2TV0TG7XQHf/eeG7ioqIRRfioUQF4U6PrqWJRIG4BHioRj7vS3R77E30e0Psy1Jg2Z5old9VI23b5TxriBbXktzm14lgOyHH3ZMt39L1jAeJfPYW0f3Sh6g43g+8WWqJW1zH6ZPL35fY/w8WK2Z5nk4G5tTanxY3NfyaOGcWEMHodSKojyS7b4rlk8WdUIOJ83Qb4hrl7fldb6Ic6kX0fvQgAvdaoqL22xppKN2M8hJxbvXMNB1OVIRXEmXQy9Xzro9OGRRKsnk0kjg5rirWSqum+wBxcK4janrFGszArM1NIWoJ9xEFy35EpppCnJB3ZnfNKCKD7kHU7C/y6N7pw7prE3/M7papZFOVaMGU11uVvm2JKP+HWgXYhmqtsLZ1d2BsQ2TWu6qm654tiW2Igrw7cX2gB9EH7q21WFpIz3Bi3/UkCvY3iNrlK8DbrRXMOf8oovZzW0sFMevuHnqeaCLXmm5rIhAeQQSEa6qnqTHPYKIAXk4UOLsRXQtvtjpj7WUVr4NNJfLRWCIvvZDjRxO3JF7r7rdn10UvsoVEBL39iTx3KVGYe1uBqIX0bE8EkV2Jc6A3cc1kfo1phwPTidrn7e6+PGvqA4gupVu8Rj+1RZfqTkQF6QHiGL6cx/QwovX5cI35BhIF3VAiv9yTQWgo61q+C4FZGRA+QLTgtyRaCCOIlslLRGH6rha4xQ0PxxL78jWioJ7t7n+tmq7F/Zl56u+By9z9iUzfKURQX0i0HIqVmG5EkN+PCKZ/ISpmj2YAGkhUdtcQefmg3Mf3Az3d/dYawbofcWyGEGXOtVn5257oEryu1LraGJ02KGRzaQxx10Lpdr/Sd8WTbjKxM98iouS7CmaLOyrOIQ7Mox79xX2IbpGxwJUefbnbEk3Lp1l3PeIlomCbSNwF8iwRqEp356wiuiZqdocU0tCtuknaCFljOyrT+A5xYpe6gqozWV+iJjee7FrYiPX2I2pr44ng/BbRxB0M/MLX/ZpeW91jLe6nDOwDiRbCzdUtrtyeKUTQ+D1RsG3t7n9oa7011lVXgdvGMkrXJO4kWkevVn0/KE/q/Yla4y1EF9lWRN5cTRTeG/VSyCzAphHH4g8ZhLYsBrxC98huRCH7iLvPyu/eQ9Swry0WOjWC31hin8+pqpj1aakylMHxKKJ1tMTdlxa+247om7+IdV1LuxD76WHivJ9KXB+41Wt0hZXSSQSRycR5/RLwevXxaIuZbV21XdsT+/WiGsd2WyJAbkN0Bd2bwWkLIkhuTxTij2eQOJWowMyvlVezQjSeaNG/TrS6il2aG51fSzrlhWaLC3kDiKhuXtVfWsiIuxE76U0iI9bqRhjIugs+T2VAGEw0pZcQB+yRzJw7E7XcZ3zdNYS9iP20lGiSusUdJKOB39JC90K1jggIuZ7VZnY7kVkfLAWE/K6030qBY1ei4Lnb1/Wt1l145sk2mGjeb0t0E8wnAufOuex7SgGhmIZW0t/aflpEFE53VAeEnHe1md1JdKv0JyoUPepZb41lbWxA+DCxjy8lugzfrp6m0PJdQtQQbyNqxqU+/3u96g6tDUjHQKIW2ouorZcKzmIlaxRR6B5AXPtYAAzPQLE2C64nq/dJIT8dRhz70gXO6hsmWgoIfYkAtE9u69Kq+Z4ys+9ky/cYooB9kWjNDSVq4auJWvrCFtYxmOhGvJVozW/weVhd4XT3v5jZD6rLp1QKYgvd/d4cN564ZvAykS8Pzv36nJldWCtIFc7HA4nz9R6iolDRWmuvgACdtKWQNYR9gd95y11GJxCZ+FHgN7WajTldqe/1Go+7HIYRUfpDRA3uCaJWPZIIRIt93V1GHyIy7d1EE3FbovVQuo5w/vrWNjqKmfX2dXeG1Kp5jAQ+R1wYu3Ej1jOUqM31ILrmHiS6bZ4n7pR5uKU0bOD62mxxlWrgG7uujZEF7aFUXZBtZfrSheePEBea57r74xux/h5EV94uRGt2UTE45zSla3dHEMHoZeIW3keJBzHbvMfd4m6304lAcm09FaRM2wSiBb4EWFWsvNSY/kSiFfJHomttIHGjw2qiS+ZdLeHsHehPtCTeILqzltRYfMOUzsHs9fgb0cUznmg5P295zamNZfQhniXpTRyfud4OXUStrrMzBgVo++TPptsU4BKvuvOkxrTlZl8GnClEV9JjRBfLkUTNbEGptlLoqlhO3IHyDnHC7kzcjndPZw0I9SoWnhtSaGdA2IU4YRcR12r2J1pRd7j7gnZO8nppr0C0Eetfrya9xS3BnycKsA15fXz18kYR/fK/8xoXeHOabYk7Z94gum8eqmO5fYkujEOIStOLrOcdL1kpOZXoQindEl7zeOV27EJ0fb2RaZ5GdCG+q6DPgnQ6cS2rP9EKedf1jI5icYPKGPLOqPU9L2zdNYN5HVHmdNqgUA+rcaG1zvl6+brbWocSD4UtIE4ezz7eccSdDAtKzd8MKNOISL+qnTaj6da3yyj3UT/iVr+3Wdc3OprYl/OaHRC6qvZu5Vg+9dvK92OJu2Mudfen6lzmUOLa2zvErca3+Abc8WJm/eut9VZXElu7TpHfjyJ6AxZ63jraDBlAP0Z0S99Z6oXYgOW02zWDNtfVlYNCeyllzqxhnEB0I91JtAberJp2gwLRpsTiTozSw29L3P2GwnejgNHufkeza+pdWUfuu/UpnAvzjCXywM8a3Z2xodoKHB2w/qHE7aJ9iOeXHmtWWtaHgkJBXjgdRVyruLardw+1t6z1HAGUHux7wN1vqzFdh9VqpHnq6RPfXOW1zP2J8+RBb+N27M6ky7wltSN4WEbeE93s9HQ2Hrfd3k08oLSgFBAymBanU0DYDCggtKoHeZNKVwoIoJaCbACLH0apebeXiISu2pWqoCAbrCtldJFm6IpdqQoKIiJSpmsKIiJSpqAgIiJlCgoirbD44fSrzWyJmT1uZt8xsy3N7O/M7PwW5qn5YrY61jXd8sfXRZpFQUGkBXmr7RXEa9tLP7XYDzivtfnc/YANXOV04qVnIk2joCDSskOBN9z9p1B+/uKfiNcW9AFGm9n1ZvaomX2tNJOZFd+r/y9mdpeZPWBm/1YYf3qOu9/MfmFmBxAvb/svM7vP4nXVIh2uU746W6STGE88rFfm8cMxTxHnzkTi9wdeA+4ys2u98ArnwttHJxJPgc+x+L3kF4AvA5PybZml31WYQ7wFc1ZHbJxILQoKIi0z4hfPWhpf/q1tM7uCeOd98b3+R+Rf6X36/YggsSfx1PzzUPG7CiJNp+4jkZYtJt77X5bv6R9N/JZudcCoHjbg6+6+V/69191/QsvBRqTpFBREWjYf6GNmp0P5h3C+BfyM6DI63MwGWfwI+3TiR2CKbgA+lq8Zx8xGWvwm9nzgRItfBSv9jgKse/+/SNMoKIi0IF/hMQM4wcyWED/K9AbwpZzkNuAXxC/OzS5cT/Cc/0bgEuAOM1sEzAL6e/zm8nnArWZ2P/DtnO8y4F/M7F5daJZm0WsuRNpR1v7vcfftm50WkQ2hloJIO8mfibwD+Gaz0yKyodRSEBGRMrUURESkTEFBRETKFBRERKRMQUFERMoUFEREpExBQUREyv4/+QaYIWylDGsAAAAASUVORK5CYII=\n",
|
198 |
-
"text/plain": [
|
199 |
-
"<Figure size 432x288 with 1 Axes>"
|
200 |
-
]
|
201 |
-
},
|
202 |
-
"metadata": {
|
203 |
-
"needs_background": "light"
|
204 |
-
},
|
205 |
-
"output_type": "display_data"
|
206 |
-
}
|
207 |
-
],
|
208 |
-
"source": [
|
209 |
-
"import matplotlib.pyplot as plt\n",
|
210 |
-
"import seaborn as sns\n",
|
211 |
-
"\n",
|
212 |
-
"# sort the dictionary \n",
|
213 |
-
"objectwise_img_names = dict(sorted(objectwise_img_names.items(), key=lambda x: len(x[1]), reverse=True))\n",
|
214 |
-
"\n",
|
215 |
-
"# Extract object names and image counts\n",
|
216 |
-
"obj_names = list(objectwise_img_names.keys())\n",
|
217 |
-
"img_counts = [len(objectwise_img_names[obj]) for obj in objectwise_img_names]\n",
|
218 |
-
"print(sum(img_counts))\n",
|
219 |
-
"\n",
|
220 |
-
"# Create bar plot\n",
|
221 |
-
"sns.barplot(x=obj_names, y=img_counts)\n",
|
222 |
-
"\n",
|
223 |
-
"# Add x-axis and y-axis labels\n",
|
224 |
-
"plt.xlabel('Object')\n",
|
225 |
-
"plt.ylabel('Number of Images')\n",
|
226 |
-
"\n",
|
227 |
-
"plt.xticks(rotation=45, ha='right', fontsize=3)\n",
|
228 |
-
"\n",
|
229 |
-
"# Save the plot as a high-resolution image file\n",
|
230 |
-
"out_path = osp.join(out_dir, 'image_per_object_category.png')\n",
|
231 |
-
"plt.savefig(out_path, dpi=300)\n",
|
232 |
-
"\n",
|
233 |
-
"# Show plot\n",
|
234 |
-
"plt.show()"
|
235 |
-
]
|
236 |
-
},
|
237 |
-
{
|
238 |
-
"cell_type": "code",
|
239 |
-
"execution_count": null,
|
240 |
-
"metadata": {},
|
241 |
-
"outputs": [],
|
242 |
-
"source": [
|
243 |
-
"\n",
|
244 |
-
" "
|
245 |
-
]
|
246 |
-
},
|
247 |
-
{
|
248 |
-
"cell_type": "code",
|
249 |
-
"execution_count": null,
|
250 |
-
"metadata": {},
|
251 |
-
"outputs": [],
|
252 |
-
"source": []
|
253 |
-
}
|
254 |
-
],
|
255 |
-
"metadata": {
|
256 |
-
"kernelspec": {
|
257 |
-
"display_name": "Python 3",
|
258 |
-
"language": "python",
|
259 |
-
"name": "python3"
|
260 |
-
},
|
261 |
-
"language_info": {
|
262 |
-
"codemirror_mode": {
|
263 |
-
"name": "ipython",
|
264 |
-
"version": 3
|
265 |
-
},
|
266 |
-
"file_extension": ".py",
|
267 |
-
"mimetype": "text/x-python",
|
268 |
-
"name": "python",
|
269 |
-
"nbconvert_exporter": "python",
|
270 |
-
"pygments_lexer": "ipython3",
|
271 |
-
"version": "3.8.5"
|
272 |
-
}
|
273 |
-
},
|
274 |
-
"nbformat": 4,
|
275 |
-
"nbformat_minor": 4
|
276 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
scripts/datascripts/add_imgname_column_to_deco_csv.py
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
#python scripts/datascripts/add_imgname_column_to_deco_csv.py --csv_path /ps/scratch/ps_shared/stripathi/deco/4agniv/DCA/mturk_csvs_combined_temp.csv --out_path /ps/scratch/ps_shared/stripathi/deco/4agniv/DCA/mturk_csvs_combined_temp_with_imgnames.csv
|
2 |
-
|
3 |
-
import argparse
|
4 |
-
import pandas as pd
|
5 |
-
import os
|
6 |
-
|
7 |
-
def add_imagename_column(csv_path, out_path):
|
8 |
-
# Load csv
|
9 |
-
csv_data = pd.read_csv(csv_path)
|
10 |
-
|
11 |
-
# Add column with image name from vertices column, where every element is a dictionary with key the image names as keys and values as the vertices
|
12 |
-
csv_data['imgnames'] = csv_data['vertices'].apply(lambda x: os.path.basename(list(eval(x).keys())[0]))
|
13 |
-
|
14 |
-
# Write combined data to new CSV file
|
15 |
-
csv_data.to_csv(out_path, index=False)
|
16 |
-
|
17 |
-
if __name__ == "__main__":
|
18 |
-
parser = argparse.ArgumentParser()
|
19 |
-
parser.add_argument('--csv_path', type=str, default='/ps/scratch/ps_shared/stripathi/deco/4agniv/hot/dca.csv')
|
20 |
-
parser.add_argument('--out_path', type=str, default='/ps/scratch/ps_shared/stripathi/deco/4agniv/hot/dca_with_imgname.csv')
|
21 |
-
args = parser.parse_args()
|
22 |
-
add_imagename_column(args.csv_path, args.out_path)
|
23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
scripts/datascripts/combine_cropped_npz.py
DELETED
@@ -1,63 +0,0 @@
|
|
1 |
-
'''
|
2 |
-
Combine cropped npz given a folder of npz
|
3 |
-
'''
|
4 |
-
|
5 |
-
import argparse
|
6 |
-
import os
|
7 |
-
import numpy as np
|
8 |
-
|
9 |
-
def combine_npz(npz_dir, out_npz):
|
10 |
-
# get all npz files in the folder
|
11 |
-
|
12 |
-
npz_files = [os.path.join(npz_dir, out_dir, f) for f in os.listdir(npz_dir, out_dir) if f.endswith('.npz')]
|
13 |
-
print('Found {} npz files'.format(len(npz_files)))
|
14 |
-
|
15 |
-
# combine all the values in all keys in all npz files
|
16 |
-
c_imgname = []
|
17 |
-
c_pose = []
|
18 |
-
c_transl = []
|
19 |
-
c_shape = []
|
20 |
-
c_cam_k = []
|
21 |
-
c_contact_label = []
|
22 |
-
c_scene_seg = []
|
23 |
-
c_part_seg = []
|
24 |
-
|
25 |
-
for npz_file in npz_files:
|
26 |
-
npz= np.load(npz_file)
|
27 |
-
c_imgname.extend(npz['imgname'])
|
28 |
-
c_pose.extend(npz['pose'])
|
29 |
-
c_transl.extend(npz['transl'])
|
30 |
-
c_shape.extend(npz['shape'])
|
31 |
-
c_cam_k.extend(npz['cam_k'])
|
32 |
-
c_contact_label.extend(npz['contact_label'])
|
33 |
-
c_scene_seg.extend(npz['scene_seg'])
|
34 |
-
c_part_seg.extend(npz['part_seg'])
|
35 |
-
|
36 |
-
# convert to numpy arrays
|
37 |
-
c_imgname = np.concatenate(c_imgname, axis=0)
|
38 |
-
c_pose = np.concatenate(c_pose, axis=0)
|
39 |
-
c_transl = np.concatenate(c_transl, axis=0)
|
40 |
-
c_shape = np.concatenate(c_shape, axis=0)
|
41 |
-
c_cam_k = np.concatenate(c_cam_k, axis=0)
|
42 |
-
c_contact_label = np.concatenate(c_contact_label, axis=0)
|
43 |
-
c_scene_seg = np.concatenate(c_scene_seg, axis=0)
|
44 |
-
c_part_seg = np.concatenate(c_part_seg, axis=0)
|
45 |
-
|
46 |
-
# save the new npz
|
47 |
-
np.savez(out_npz,
|
48 |
-
imgname=c_imgname,
|
49 |
-
pose=c_pose,
|
50 |
-
transl=c_transl,
|
51 |
-
shape=c_shape,
|
52 |
-
cam_k=c_cam_k,
|
53 |
-
contact_label=c_contact_label,
|
54 |
-
scene_seg=c_scene_seg,
|
55 |
-
part_seg=c_part_seg)
|
56 |
-
print('Saved combined npz to {}'.format(out_npz))
|
57 |
-
|
58 |
-
if __name__ == "__main__":
|
59 |
-
parser = argparse.ArgumentParser()
|
60 |
-
parser.add_argument('--orig_npz_dir', type=str, default='/is/cluster/fast/achatterjee/rich/scene_npzs/train')
|
61 |
-
parser.add_argument('--out_npz', type=str, required=True,default='/is/cluster/fast/achatterjee/rich/scene_npzs/train_combined.npz')
|
62 |
-
args = parser.parse_args()
|
63 |
-
combine_npz(npz_dir = args.orig_npz_dir, out_npz = args.out_npz)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
scripts/datascripts/combine_mturk_csvs.py
DELETED
@@ -1,33 +0,0 @@
|
|
1 |
-
# write a script to find all csvs in a folder and merge them
|
2 |
-
|
3 |
-
import os
|
4 |
-
import pandas as pd
|
5 |
-
import argparse
|
6 |
-
|
7 |
-
def combine_csvs(folder_path, out_path):
|
8 |
-
# Create empty DataFrame to store combined data
|
9 |
-
combined_data = pd.DataFrame()
|
10 |
-
|
11 |
-
# Loop through all files in folder with .csv extension
|
12 |
-
for file in os.listdir(folder_path):
|
13 |
-
if file.endswith(".csv"):
|
14 |
-
file_path = os.path.join(folder_path, file)
|
15 |
-
# Read CSV file and append to combined_data
|
16 |
-
csv_data = pd.read_csv(file_path)
|
17 |
-
combined_data = combined_data.append(csv_data, ignore_index=True)
|
18 |
-
|
19 |
-
# Write combined data to new CSV file
|
20 |
-
combined_data.to_csv(out_path, index=False)
|
21 |
-
print(f"Combined CSV file saved to {out_path}")
|
22 |
-
|
23 |
-
if __name__ == "__main__":
|
24 |
-
parser = argparse.ArgumentParser()
|
25 |
-
parser.add_argument('--folder_path', type=str, default='/ps/scratch/ps_shared/stripathi/deco/4agniv/hot/')
|
26 |
-
parser.add_argument('--out_path', type=str, default='/ps/scratch/ps_shared/stripathi/deco/4agniv/hot/combined.csv')
|
27 |
-
args = parser.parse_args()
|
28 |
-
folder_path = args.folder_path
|
29 |
-
out_path = args.out_path
|
30 |
-
combine_csvs(folder_path, out_path)
|
31 |
-
|
32 |
-
|
33 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
scripts/datascripts/combine_npzs.py
DELETED
@@ -1,41 +0,0 @@
|
|
1 |
-
'''
|
2 |
-
Combine the npzs
|
3 |
-
'''
|
4 |
-
|
5 |
-
import numpy as np
|
6 |
-
|
7 |
-
d1 = np.load('/is/cluster/work/stripathi/pycharm_remote/dca_contact/data/dataset_extras/hot_noprox_supporting_False_trainval_0.npz',allow_pickle=True)
|
8 |
-
d2 = np.load('/is/cluster/work/stripathi/pycharm_remote/dca_contact/data/dataset_extras/hot_noprox_supporting_False_trainval_1.npz',allow_pickle=True)
|
9 |
-
d3 = np.load('/is/cluster/work/stripathi/pycharm_remote/dca_contact/data/dataset_extras/hot_noprox_supporting_False_trainval_2.npz',allow_pickle=True)
|
10 |
-
d4 = np.load('/is/cluster/work/stripathi/pycharm_remote/dca_contact/data/dataset_extras/hot_noprox_supporting_False_trainval_3.npz',allow_pickle=True)
|
11 |
-
|
12 |
-
|
13 |
-
print(list(d1.keys()))
|
14 |
-
print(type(d1['imgname']))
|
15 |
-
print(d1['imgname'].shape)
|
16 |
-
|
17 |
-
c_imgname = np.concatenate((d1['imgname'], d2['imgname'], d3['imgname'], d4['imgname']), axis=0)
|
18 |
-
c_pose = np.concatenate((d1['pose'], d2['pose'], d3['pose'], d4['pose']), axis=0)
|
19 |
-
c_transl = np.concatenate((d1['transl'], d2['transl'], d3['transl'], d4['transl']), axis=0)
|
20 |
-
c_shape = np.concatenate((d1['shape'], d2['shape'], d3['shape'], d4['shape']), axis=0)
|
21 |
-
c_cam_k = np.concatenate((d1['cam_k'], d2['cam_k'], d3['cam_k'], d4['cam_k']), axis=0)
|
22 |
-
c_polygon_2d_contact = np.concatenate((d1['polygon_2d_contact'], d2['polygon_2d_contact'],
|
23 |
-
d3['polygon_2d_contact'], d4['polygon_2d_contact']), axis=0)
|
24 |
-
c_contact_label = np.concatenate((d1['contact_label'], d2['contact_label'], d3['contact_label'],
|
25 |
-
d4['contact_label']), axis=0)
|
26 |
-
c_scene_seg = np.concatenate((d1['scene_seg'], d2['scene_seg'], d3['scene_seg'], d4['scene_seg']), axis=0)
|
27 |
-
c_part_seg = np.concatenate((d1['part_seg'], d2['part_seg'], d3['part_seg'], d4['part_seg']), axis=0)
|
28 |
-
|
29 |
-
outfile = '/is/cluster/work/stripathi/pycharm_remote/dca_contact/data/dataset_extras/hot_noprox_supporting_False_trainval_combined.npz'
|
30 |
-
np.savez(outfile,
|
31 |
-
imgname=c_imgname,
|
32 |
-
pose=c_pose,
|
33 |
-
transl=c_transl,
|
34 |
-
shape=c_shape,
|
35 |
-
cam_k=c_cam_k,
|
36 |
-
polygon_2d_contact=c_polygon_2d_contact,
|
37 |
-
contact_label=c_contact_label,
|
38 |
-
scene_seg=c_scene_seg,
|
39 |
-
part_seg=c_part_seg
|
40 |
-
)
|
41 |
-
print(f'Saved to {outfile}')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
scripts/datascripts/convert_rich_npz_to_cropped.py
DELETED
@@ -1,75 +0,0 @@
|
|
1 |
-
'''
|
2 |
-
Fix paths to cropped images, partmasks and segmasks
|
3 |
-
'''
|
4 |
-
|
5 |
-
import argparse
|
6 |
-
import os
|
7 |
-
import numpy as np
|
8 |
-
from tqdm import tqdm
|
9 |
-
|
10 |
-
def convert_rich_npz(orig_npz, out_dir):
|
11 |
-
# go through all keys in the npz
|
12 |
-
# if the key is imgname, partmask or segmask, replace the path with the new path
|
13 |
-
# save the new npz
|
14 |
-
|
15 |
-
# structs we use
|
16 |
-
imgnames_ = []
|
17 |
-
poses_, shapes_, transls_ = [], [], []
|
18 |
-
cams_k_ = []
|
19 |
-
contact_label_ = []
|
20 |
-
scene_seg_, part_seg_ = [], []
|
21 |
-
|
22 |
-
# load the npz
|
23 |
-
npz = np.load(orig_npz)
|
24 |
-
for i in tqdm(range(len(npz['imgname']))):
|
25 |
-
|
26 |
-
if not os.path.exists(npz['imgname'][i]):
|
27 |
-
print(npz['imgname'][i])
|
28 |
-
continue
|
29 |
-
|
30 |
-
new_scene_seg = os.path.exists(npz['scene_seg'][i].replace('seg_masks_new', 'segmentation_masks'))
|
31 |
-
|
32 |
-
if not new_scene_seg:
|
33 |
-
print(new_scene_seg)
|
34 |
-
continue
|
35 |
-
|
36 |
-
if not os.path.exists(npz['part_seg'][i]):
|
37 |
-
print(npz['part_seg'][i])
|
38 |
-
continue
|
39 |
-
|
40 |
-
imgnames_.append(npz['imgname'][i])
|
41 |
-
poses_.append(npz['pose'][i])
|
42 |
-
transls_.append(npz['transl'][i])
|
43 |
-
shapes_.append(npz['shape'][i])
|
44 |
-
cams_k_.append(npz['cam_k'][i])
|
45 |
-
contact_label_.append(npz['contact_label'][i])
|
46 |
-
scene_seg_.append(npz['scene_seg'][i].replace('seg_masks_new', 'segmentation_masks'))
|
47 |
-
part_seg_.append(npz['part_seg'][i])
|
48 |
-
|
49 |
-
# save the new npz
|
50 |
-
out_dir = out_dir+'_cropped'
|
51 |
-
os.makedirs(out_dir, exist_ok=True)
|
52 |
-
out_file = os.path.join(out_dir, os.path.basename(args.orig_npz))
|
53 |
-
np.savez(out_file,
|
54 |
-
imgname=imgnames_,
|
55 |
-
pose=poses_,
|
56 |
-
transl=transls_,
|
57 |
-
shape=shapes_,
|
58 |
-
cam_k=cams_k_,
|
59 |
-
contact_label=contact_label_,
|
60 |
-
scene_seg=scene_seg_,
|
61 |
-
part_seg=part_seg_)
|
62 |
-
|
63 |
-
print('Saved to: ', out_file)
|
64 |
-
|
65 |
-
|
66 |
-
if __name__ == "__main__":
|
67 |
-
parser = argparse.ArgumentParser()
|
68 |
-
parser.add_argument('--orig_npz_dir', type=str, default='/is/cluster/fast/achatterjee/rich/scene_npzs/train')
|
69 |
-
parser.add_argument('--cluster_idx', type=int)
|
70 |
-
args = parser.parse_args()
|
71 |
-
# get all npz files in the directory
|
72 |
-
npz_files = [os.path.join(args.orig_npz_dir, f) for f in os.listdir(args.orig_npz_dir) if f.endswith('.npz')]
|
73 |
-
# get the npz file for this cluster
|
74 |
-
orig_npz = npz_files[args.cluster_idx]
|
75 |
-
convert_rich_npz(orig_npz, out_dir=args.orig_npz_dir)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
scripts/datascripts/get_part_seg_mask.py
DELETED
@@ -1,199 +0,0 @@
|
|
1 |
-
# python scripts/datascripts/get_part_seg_mask.py --data_npz data/rich_val_smplx_small.npz --model_type 'smplx'
|
2 |
-
|
3 |
-
|
4 |
-
import os
|
5 |
-
import sys
|
6 |
-
sys.path.append('/is/cluster/work/achatterjee/dca_contact')
|
7 |
-
import cv2
|
8 |
-
import argparse
|
9 |
-
import numpy as np
|
10 |
-
import torch
|
11 |
-
from common import constants
|
12 |
-
from models.smpl import SMPL
|
13 |
-
from smplx import SMPLX
|
14 |
-
from utils.mesh_utils import save_results_mesh
|
15 |
-
import trimesh
|
16 |
-
from tqdm import tqdm
|
17 |
-
from utils.image_utils import get_body_part_texture, generate_part_labels
|
18 |
-
from utils.diff_renderer import Pytorch3D
|
19 |
-
|
20 |
-
class PART_LABELER:
|
21 |
-
def __init__(self, body_params, img_w, img_h, model_type, debug=False):
|
22 |
-
"""
|
23 |
-
Get part segmentation masks for images
|
24 |
-
|
25 |
-
Args:
|
26 |
-
body_params: SMPL parameters
|
27 |
-
img_w: image width
|
28 |
-
img_h: image height
|
29 |
-
model_type: 'smpl' or 'smplx'
|
30 |
-
"""
|
31 |
-
self.device = torch.device('cuda:{}'.format(args.gpu)) if torch.cuda.is_available() else torch.device('cpu')
|
32 |
-
|
33 |
-
self.model_type = model_type
|
34 |
-
|
35 |
-
# Setup the SMPL model
|
36 |
-
if self.model_type == 'smpl':
|
37 |
-
self.body_model = SMPL(constants.SMPL_MODEL_DIR).to(self.device)
|
38 |
-
if self.model_type == 'smplx':
|
39 |
-
self.body_model = SMPLX(constants.SMPL_MODEL_DIR,
|
40 |
-
num_betas=10,
|
41 |
-
use_pca=False).to(self.device)
|
42 |
-
|
43 |
-
self.body_part_vertex_colors, self.body_part_texture = get_body_part_texture(self.body_model.faces,
|
44 |
-
model_type=self.model_type,
|
45 |
-
non_parametric=False)
|
46 |
-
# bins are discrete part labels, add eps to avoid quantization error
|
47 |
-
eps = 1e-2
|
48 |
-
# self.part_label_bins = (torch.arange(int(constants.N_PARTS)) / float(constants.N_PARTS)) + eps
|
49 |
-
self.part_label_bins = torch.linspace(0, constants.N_PARTS-1, constants.N_PARTS) + eps
|
50 |
-
|
51 |
-
## Run SMPL forward
|
52 |
-
self.body_params = body_params
|
53 |
-
|
54 |
-
self.smpl_verts, self.smpl_joints = self.get_posed_mesh(debug)
|
55 |
-
|
56 |
-
# Assumbe same focal lenght for all frames in a seq
|
57 |
-
focal_length = self.body_params['cam_k'][0, 0, 0]
|
58 |
-
# focal_length = focal_length[0]
|
59 |
-
# Setup Pyrender renderer
|
60 |
-
# self.renderer = Renderer(focal_length=focal_length, img_w=img_w, img_h=img_h,
|
61 |
-
# faces=self.smpl_model.faces,
|
62 |
-
# same_mesh_color=False)
|
63 |
-
|
64 |
-
# Setup Pytorch3D Renderer
|
65 |
-
focal_length = torch.FloatTensor([focal_length])
|
66 |
-
smpl_faces = torch.from_numpy(self.body_model.faces.astype(np.int32)).to(self.device)
|
67 |
-
self.renderer = Pytorch3D(img_h=img_h,
|
68 |
-
img_w=img_w,
|
69 |
-
focal_length=focal_length,
|
70 |
-
smpl_faces=smpl_faces,
|
71 |
-
texture_mode='partseg',
|
72 |
-
vertex_colors=self.body_part_vertex_colors,
|
73 |
-
face_textures=self.body_part_texture,
|
74 |
-
model_type=self.model_type)
|
75 |
-
|
76 |
-
def get_posed_mesh(self, debug=False):
|
77 |
-
betas = torch.from_numpy(self.body_params['shape']).float().to(self.device)
|
78 |
-
pose = torch.from_numpy(self.body_params['pose']).float().to(self.device)
|
79 |
-
transl = torch.from_numpy(self.body_params['transl']).float().to(self.device)
|
80 |
-
|
81 |
-
# extra smplx params
|
82 |
-
extra_args = {'jaw_pose': torch.zeros((betas.shape[0], 3)).float().to(self.device),
|
83 |
-
'leye_pose': torch.zeros((betas.shape[0], 3)).float().to(self.device),
|
84 |
-
'reye_pose': torch.zeros((betas.shape[0], 3)).float().to(self.device),
|
85 |
-
'expression': torch.zeros((betas.shape[0], 10)).float().to(self.device),
|
86 |
-
'left_hand_pose': torch.zeros((betas.shape[0], 45)).float().to(self.device),
|
87 |
-
'right_hand_pose': torch.zeros((betas.shape[0], 45)).float().to(self.device)}
|
88 |
-
|
89 |
-
smpl_output = self.body_model(betas=betas,
|
90 |
-
body_pose=pose[:, 3:],
|
91 |
-
global_orient=pose[:, :3],
|
92 |
-
pose2rot=True,
|
93 |
-
transl=transl,
|
94 |
-
**extra_args)
|
95 |
-
smpl_verts = smpl_output.vertices.detach().cpu().numpy()
|
96 |
-
smpl_joints = smpl_output.joints.detach().cpu().numpy()
|
97 |
-
|
98 |
-
if debug:
|
99 |
-
for mesh_i in range(smpl_verts.shape[0]):
|
100 |
-
out_dir = 'temp_meshes'
|
101 |
-
os.makedirs(out_dir, exist_ok=True)
|
102 |
-
out_file = os.path.join(out_dir, f'temp_mesh_{mesh_i:04d}.obj')
|
103 |
-
save_results_mesh(smpl_verts[mesh_i], self.body_model.faces, out_file)
|
104 |
-
return smpl_verts, smpl_joints
|
105 |
-
|
106 |
-
def bucketize_part_image(self, color_rgb, mask):
|
107 |
-
# make single channel
|
108 |
-
body_parts = color_rgb.clone()
|
109 |
-
body_parts *= 255. # multiply it with 255 to make labels distant
|
110 |
-
body_parts = body_parts.max(-1)[0] # reduce to single channel
|
111 |
-
body_parts = torch.bucketize(body_parts, self.part_label_bins, right=True) # np.digitize(body_parts, bins, right=True)
|
112 |
-
# add 1 to make background label 0
|
113 |
-
body_parts = body_parts.long() + 1
|
114 |
-
body_parts = body_parts * mask.detach()
|
115 |
-
return body_parts.long()
|
116 |
-
|
117 |
-
def create_part_masks(self, body_parts):
|
118 |
-
# extract every pixel as a separate mask
|
119 |
-
part_masks = []
|
120 |
-
for part_id in range(1, constants.N_PARTS+1): # first one is for background
|
121 |
-
part_mask = (body_parts == part_id)
|
122 |
-
part_masks.append(part_mask)
|
123 |
-
return part_masks
|
124 |
-
|
125 |
-
def render_part_mask_p3d(self, img_paths, out_dir):
|
126 |
-
with torch.no_grad():
|
127 |
-
# os.makedirs(out_dir, exist_ok=True)
|
128 |
-
for index, img_path in tqdm(enumerate(img_paths), dynamic_ncols=True):
|
129 |
-
# Load the image
|
130 |
-
if not os.path.exists(img_path):
|
131 |
-
if 'train' in img_path:
|
132 |
-
split = 'train'
|
133 |
-
elif 'val' in img_path:
|
134 |
-
split = 'val'
|
135 |
-
else:
|
136 |
-
split = 'test'
|
137 |
-
new_img_name = img_path[img_path.index(split)+4:].replace('/', '_')
|
138 |
-
new_path = os.path.join('/is/cluster/work/achatterjee/rich/images', split, new_img_name.replace('jpeg', 'bmp'))
|
139 |
-
if not os.path.exists(new_path):
|
140 |
-
new_path = new_path.replace('bmp', 'png')
|
141 |
-
img_path = new_path
|
142 |
-
if os.path.exists(out_dir[index]):
|
143 |
-
continue
|
144 |
-
# img_bgr = cv2.imread(img_path)
|
145 |
-
chosen_vert_arr = torch.FloatTensor(self.smpl_verts[[index]]).to(self.device)
|
146 |
-
front_view = self.renderer(chosen_vert_arr)
|
147 |
-
front_view_rgb = front_view[0, :3, :, :].permute(1,2,0).detach().cpu()
|
148 |
-
front_view_mask = front_view[0, 3, :, :].detach().cpu()
|
149 |
-
# front_view_depth = front_view[0, 4, :, :].detach().cpu()
|
150 |
-
|
151 |
-
body_parts = self.bucketize_part_image(front_view_rgb, front_view_mask)
|
152 |
-
body_parts = body_parts.numpy()
|
153 |
-
front_view_rgb = front_view_rgb.numpy()
|
154 |
-
|
155 |
-
# body_part_masks = self.create_part_masks(body_parts)
|
156 |
-
# display part masks
|
157 |
-
# for part_id, part_mask in enumerate(body_part_masks):
|
158 |
-
# part_mask = part_mask * 255
|
159 |
-
# part_dir = os.path.join(out_dir, f'frame_{index:04d}_parts')
|
160 |
-
# os.makedirs(part_dir, exist_ok=True)
|
161 |
-
# out_file = os.path.join(part_dir, f'part_{part_id:02d}_{index:04d}.png')
|
162 |
-
# cv2.imwrite(out_file, part_mask)
|
163 |
-
|
164 |
-
# out_file = os.path.join(out_dir, f'front_view_{index:04d}.png')
|
165 |
-
# cv2.imwrite(out_file, front_view_rgb[: ,:, [2, 1, 0]]*255)
|
166 |
-
# print(f'wrote front view to {out_file}')
|
167 |
-
body_parts = cv2.merge((body_parts, body_parts, body_parts))
|
168 |
-
# out_file = os.path.join(out_dir, f'body_parts_{index:04d}.png')
|
169 |
-
out_file = out_dir[index]
|
170 |
-
cv2.imwrite(out_file, body_parts)
|
171 |
-
# print(f'wrote body part masks to {out_file}')
|
172 |
-
|
173 |
-
|
174 |
-
def main(args):
|
175 |
-
out_dir = args.out_dir
|
176 |
-
data_md = np.load(args.data_npz)
|
177 |
-
|
178 |
-
# get all the jpg files in the folder
|
179 |
-
img_paths = data_md['imgname']
|
180 |
-
seg_paths = data_md['part_seg']
|
181 |
-
print(f'found {len(img_paths)} images')
|
182 |
-
# load first image
|
183 |
-
img = cv2.imread(img_paths[0])
|
184 |
-
img_h, img_w, _ = img.shape
|
185 |
-
|
186 |
-
labeler = PART_LABELER(body_params=data_md, img_w=img_w, img_h=img_h,
|
187 |
-
model_type=args.model_type, debug=args.debug)
|
188 |
-
labeler.render_part_mask_p3d(img_paths=img_paths, out_dir=seg_paths)
|
189 |
-
|
190 |
-
if __name__=='__main__':
|
191 |
-
parser = argparse.ArgumentParser()
|
192 |
-
parser.add_argument('--out_dir', type=str, default='./temp_part_masks/', help='image folder')
|
193 |
-
parser.add_argument('--data_npz', type=str, default='.', help='folder with smpl/smpl-x npz')
|
194 |
-
parser.add_argument('--model_type', type=str, default='smplx', choices=['smpl', 'smplx'], help='model type')
|
195 |
-
parser.add_argument('--gpu', type=int, default=0, help='gpu id')
|
196 |
-
parser.add_argument('--debug', action='store_true', help='debug mode', default=False)
|
197 |
-
args = parser.parse_args()
|
198 |
-
|
199 |
-
main(args)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|