| 200 | np.save(logits_file, logits) |
| 201 | |
| 202 | def load_inat_location_data(ip_dir, loc_file_name, ann_file_name, remove_empty=True): |
| 203 | print('Loading ' + os.path.basename(loc_file_name)) |
| 204 | |
| 205 | # load location info |
| 206 | with open(ip_dir + loc_file_name) as da: |
| 207 | loc_data = json.load(da) |
| 208 | loc_data_dict = dict(zip([ll['id'] for ll in loc_data], loc_data)) |
| 209 | |
| 210 | if '_large' in loc_file_name: |
| 211 | # special case where the loc data also includes meta data such as class |
| 212 | locs = [[ll['lon'], ll['lat']] for ll in loc_data] |
| 213 | dates = [ll['date_c'] for ll in loc_data] |
| 214 | classes = [ll['class'] for ll in loc_data] |
| 215 | users = [ll['user_id'] for ll in loc_data] |
| 216 | keep_inds = np.arange(len(locs)) |
| 217 | print('\t {} valid entries'.format(len(locs))) |
| 218 | |
| 219 | else: |
| 220 | # otherwise load regualar iNat data |
| 221 | |
| 222 | # load annotation info |
| 223 | with open(ip_dir + ann_file_name) as da: |
| 224 | data = json.load(da) |
| 225 | |
| 226 | ids = [tt['id'] for tt in data['images']] |
| 227 | ids_all = [ii['image_id'] for ii in data['annotations']] |
| 228 | classes_all = [ii['category_id'] for ii in data['annotations']] |
| 229 | classes_mapping = dict(zip(ids_all, classes_all)) |
| 230 | |
| 231 | # store locations and associated classes |
| 232 | locs = [] |
| 233 | classes = [] |
| 234 | users = [] |
| 235 | dates = [] |
| 236 | miss_cnt = 0 |
| 237 | keep_inds = [] |
| 238 | dataids = [] |
| 239 | for ii, tt in enumerate(ids): |
| 240 | |
| 241 | if remove_empty and ((loc_data_dict[tt]['lon'] is None) or (loc_data_dict[tt]['user_id'] is None)): |
| 242 | miss_cnt += 1 |
| 243 | else: |
| 244 | if (loc_data_dict[tt]['lon'] is None): |
| 245 | loc = [np.nan, np.nan] |
| 246 | else: |
| 247 | loc = [loc_data_dict[tt]['lon'], loc_data_dict[tt]['lat']] |
| 248 | |
| 249 | if (loc_data_dict[tt]['user_id'] is None): |
| 250 | u_id = -1 |
| 251 | else: |
| 252 | u_id = loc_data_dict[tt]['user_id'] |
| 253 | |
| 254 | locs.append(loc) |
| 255 | classes.append(classes_mapping[int(tt)]) |
| 256 | users.append(u_id) |
| 257 | dates.append(loc_data_dict[tt]['date_c']) |
| 258 | keep_inds.append(ii) |
| 259 | dataids.append(tt) |