def _generateRandomBatches(self): 'Generates random batches of samples' while 1: # Generate batches X = [] y = np.zeros([self.batch_size, self.nb_classes]) imageIdxs = r.sample(range(0, self.nb_images), self.images_per_batch) for idx, imageIdx in enumerate(imageIdxs): imageX, imageY = self._generateBatchFromIDs([imageIdx]) # Variables s_idx = 0 f_idx = min(2, len(imageY)) nb_bgs = self.nb_samples_per_image - f_idx idx = idx * self.nb_samples_per_image # Data imageMeta = self.imagesMeta[self.dataID[imageIdx]] imageXCut = utils.spliceXData(imageX, s_idx, f_idx) imageYCut = imageY[s_idx:f_idx, :] if nb_bgs > 0: bbs = utils.createBackgroundBBs(imageMeta, nb_bgs, self.images_path) imageXBG, imageYBG = self._generateBatchFromBGs( imageMeta, bbs) imageXCmb = utils.concatXData(imageXCut, imageXBG) # print(y.shape, idx, self.nb_samples_per_image, len(imageIdxs)) imageYCmb = np.append(imageYCut, imageYBG, 0) else: imageXCmb = imageXCut imageYCmb = imageYCut X = utils.concatXData(X, imageXCmb) y[idx:idx + self.nb_samples_per_image, :] = imageYCmb yield X, y
def _generateIterativeBatches(self): 'Generates iterative batches of samples' while 1: imageIdx = 1 hoiinimageidx = 0 # Generate batches for i in range(self.nb_batches): X = [] y = [] imgs = [] imageIdxs = [] for imageIdx in range(imageIdx - 1, self.nb_images): imageIdxs.append(imageIdx) if self.do_meta: imageX, imageY, imageMeta, img = self._generateBatchFromIDs( [imageIdx]) else: imageX, imageY = self._generateBatchFromIDs([imageIdx]) img = None s_idx = 0 f_idx = len(imageY) if hoiinimageidx > 0: s_idx = hoiinimageidx if hoiinimageidx == len(imageY): hoiinimageidx = 0 continue # hoiinimageidx = 0 if (len(imageY) - hoiinimageidx) + len(y) >= self.batch_size: hoiinimageidx = hoiinimageidx + len(imageY) - ( (len(imageY) + len(y)) - self.batch_size) f_idx = hoiinimageidx else: hoiinimageidx = 0 imageXCut = utils.spliceXData(imageX, s_idx, f_idx) X = utils.concatXData(X, imageXCut) y.extend(imageY[s_idx:f_idx, :]) imgs.append(img) # y.extend([self.dataID[imageIdx] for i in range(s_idx, f_idx)]) if len(y) == self.batch_size: break imageIdx += 1 y = np.array(y) if self.do_meta: yield X, y, imageMeta, imgs[0] else: yield X, y
def _generateIterativeImageCentricBatches(self): 'Generates iterative batches of samples' while 1: imageIdx = 1 # Generate batches for i in range(self.nb_batches): X = [] y = [] batchIdx = 0 for imageIdx in range(imageIdx - 1, self.nb_images): imageX, imageY = self._generateBatchFromIDs([imageIdx], batchIdx) X = utils.concatXData(X, imageX) y.extend(imageY) batchIdx += 1 if len(y) == self.images_per_batch or True: break y = np.array(y) yield X, y