PyTorchClassification/data_loader.py [441:568]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        else:
            self.targets = self.classes


        # print out some stats
        print ('\t' + str(len(self.imgs)) + ' images')
        print ('\t' + str(len(set(self.classes))) + ' classes')

        self.root = root
        self.is_train = is_train
        self.loader = ImageLoader(image_sizes)
        self.multi_crop = multi_crop

        self.imagesInZip = (".zip" in self.root)
        if (self.imagesInZip):
            self.archive = zipfile.ZipFile(self.root, 'r')

        numToUse = int((len(self.imgs)*percentUse)/100)
        self.imgs = self.imgs[:numToUse]
        self.ids = self.ids[:numToUse]
        self.classes = self.classes[:numToUse]

        if bbox_predictions:
            img_id_to_idx = {image_id:idx for idx,image_id in enumerate(self.ids)}
            self.bboxes = [None for _ in range(len(self.ids))]
            self.bbox_labels = [None for _ in range(len(self.ids))]
            self.bbox_scores = [None for _ in range(len(self.ids))]
            loaded_dict = np.load(bbox_predictions)
            image_ids = loaded_dict['image_ids']
            for image_id, bbox, bbox_labels, bbox_scores in zip(image_ids,
                                                   loaded_dict['pred_bboxes'],
                                                   loaded_dict['pred_labels'],
                                                   loaded_dict['pred_scores']):
                if len(bbox) > 0:
                    assert image_id[0].tolist() in img_id_to_idx, 'Didn\'t find image for bounding box, ' + \
                                                                  'maybe it\'s the wrong json file?'
                    idx = img_id_to_idx[image_id[0].tolist()]
                    self.bboxes[idx] = bbox
                    self.bbox_labels[idx] = bbox_labels
                    self.bbox_scores[idx] = bbox_scores

        else:
            self.bboxes = None
            self.bbox_labels = None
            self.bbox_scores = None
        self.label_smoothing = label_smoothing


    def distanceMatrix(self):

        D = np.zeros((len(self.classes_taxonomic),len(self.classes_taxonomic)))

        norm = 1/len(self.tax_levels)

        for i in range(len(self.classes_taxonomic)):
            print("%d" % i, end=' ')
            for j in range(i, len(self.classes_taxonomic)):
                eq = np.equal(self.classes_taxonomic[i],self.classes_taxonomic[j])
                D[i,j] = np.argmax(eq)*norm
                D[j,i] = D[i,j]

        return D


    def load_taxonomy(self, ann_data, tax_levels, classes):

        # loads the taxonomy data and converts to ints
        taxonomy = {}
        classnames = {}
        if 'categories' in ann_data.keys():
            num_classes = len(ann_data['categories'])
            for tt in tax_levels:
                tax_data = [aa[tt] for aa in ann_data['categories']]
                _, tax_id = np.unique(tax_data, return_inverse=True)
                taxonomy[tt] = dict(zip(range(num_classes), list(tax_id)))

            for cat in ann_data['categories']:
                classnames[cat['id']] = cat['name']
        else:
            # set up dummy data
            for tt in tax_levels:
                taxonomy[tt] = dict(zip([0], [0]))

        # create a dictionary of lists containing taxonomic labels
        classes_taxonomic = {}
        for cc in np.unique(classes):
            tax_ids = [0]*len(tax_levels)
            for ii, tt in enumerate(tax_levels):
                tax_ids[ii] = taxonomy[tt][cc]
            classes_taxonomic[tax_ids[0]] = tax_ids
        return taxonomy, classes_taxonomic, classnames


    def __getitem__(self, index):
        im_id = self.ids[index]
        species_id = self.targets[index]

        if self.bboxes is not None and self.bboxes[index] is not None:
        #    bbox_scores = self.bbox_scores[index]
        #    most_confident_bbox = np.argmax(bbox_scores)
        #    bbox = self.bboxes[index][most_confident_bbox,:]
            bboxes = self.bboxes[index]
        else:
            bboxes = []

        if self.imagesInZip:
            path = archive.open(self.imgs[index])
        else:
            path = self.root + self.imgs[index]

        raw_image = self.loader.load_image(path)
        imgs = self.loader.process_image(raw_image, self.is_train, self.multi_crop, bboxes)
        return imgs, im_id, species_id


    def __len__(self):

        return len(self.imgs)


    def get_labels(self):

        return self.classes


    def get_num_classes(self):
        assert np.max(self.classes) < len(self.classnames)
        return len(self.classnames)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



PyTorchClassification/data_loader_cv.py [392:520]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        else:
            self.targets = self.classes

        # print out some stats
        print ('\t' + str(len(self.imgs)) + ' images')
        print ('\t' + str(len(set(self.classes))) + ' classes')

        self.root = root
        self.is_train = is_train
        self.loader = ImageLoader(image_sizes)
        self.multi_crop = multi_crop

        self.imagesInZip = (".zip" in self.root)
        if (self.imagesInZip):
            self.archive = zipfile.ZipFile(self.root, 'r')

        numToUse = int((len(self.imgs)*percentUse)/100)
        self.imgs = self.imgs[:numToUse]
        self.ids = self.ids[:numToUse]
        self.classes = self.classes[:numToUse]           

        if bbox_predictions:
            img_id_to_idx = {image_id:idx for idx,image_id in enumerate(self.ids)}
            self.bboxes = [None for _ in range(len(self.ids))]
            self.bbox_labels = [None for _ in range(len(self.ids))]
            self.bbox_scores = [None for _ in range(len(self.ids))]
            loaded_dict = np.load(bbox_predictions)
            image_ids = loaded_dict['image_ids']
            for image_id, bbox, bbox_labels, bbox_scores in zip(image_ids,
                                                   loaded_dict['pred_bboxes'],
                                                   loaded_dict['pred_labels'],
                                                   loaded_dict['pred_scores']):
                if len(bbox) > 0:
                    assert image_id[0].tolist() in img_id_to_idx, 'Didn\'t find image for bounding box, ' + \
                                                                  'maybe it\'s the wrong json file?'
                    idx = img_id_to_idx[image_id[0].tolist()]
                    self.bboxes[idx] = bbox
                    self.bbox_labels[idx] = bbox_labels
                    self.bbox_scores[idx] = bbox_scores

        else:
            self.bboxes = None
            self.bbox_labels = None
            self.bbox_scores = None
        self.label_smoothing = label_smoothing


    def distanceMatrix(self):

        D = np.zeros((len(self.classes_taxonomic),len(self.classes_taxonomic)))

        norm = 1/len(self.tax_levels)

        for i in range(len(self.classes_taxonomic)):
            print("%d" % i, end=' ')
            for j in range(i, len(self.classes_taxonomic)):
                eq = np.equal(self.classes_taxonomic[i],self.classes_taxonomic[j])
                D[i,j] = np.argmax(eq)*norm
                D[j,i] = D[i,j]

        return D


    def load_taxonomy(self, ann_data, tax_levels, classes):

        # loads the taxonomy data and converts to ints
        taxonomy = {}
        classnames = {}
        if 'categories' in ann_data.keys():
            num_classes = len(ann_data['categories'])
            for tt in tax_levels:
                tax_data = [aa[tt] for aa in ann_data['categories']]
                _, tax_id = np.unique(tax_data, return_inverse=True)
                taxonomy[tt] = dict(zip(range(num_classes), list(tax_id)))

            for cat in ann_data['categories']:
                classnames[cat['id']] = cat['name']
        else:
            # set up dummy data
            for tt in tax_levels:
                taxonomy[tt] = dict(zip([0], [0]))

        # create a dictionary of lists containing taxonomic labels
        classes_taxonomic = {}
        for cc in np.unique(classes):
            tax_ids = [0]*len(tax_levels)
            for ii, tt in enumerate(tax_levels):
                tax_ids[ii] = taxonomy[tt][cc]            
            classes_taxonomic[tax_ids[0]] = tax_ids
        return taxonomy, classes_taxonomic, classnames


    def __getitem__(self, index):

        im_id = self.ids[index]        
        species_id = self.targets[index]
        
        if self.bboxes is not None and self.bboxes[index] is not None:
        #    bbox_scores = self.bbox_scores[index]
        #    most_confident_bbox = np.argmax(bbox_scores)
        #    bbox = self.bboxes[index][most_confident_bbox,:]
            bboxes = self.bboxes[index]
        else:
            bboxes = []

        if self.imagesInZip:
            path = archive.open(self.imgs[index])
        else:
            path = self.root + self.imgs[index]

        raw_image = self.loader.load_image(path)
        imgs = self.loader.process_image(raw_image, self.is_train, self.multi_crop, bboxes)
        return imgs, im_id, species_id


    def __len__(self):

        return len(self.imgs)


    def get_labels(self):

        return self.classes


    def get_num_classes(self):

        assert np.max(self.classes) < len(self.classnames)
        return len(self.classnames)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



