Пример #1
0
    def __iter__(self):
        """
        Yields:
            Batched data by stacking each component on an extra 0th dimension.
        """

        ##### pick a scale and shape aligment

        holder = []
        for data in self.ds:

            image, boxes_, klass_ = data[0], data[1], data[2]

            ###cove the small faces
            boxes_clean = []
            for i in range(boxes_.shape[0]):
                box = boxes_[i]

                if (box[3] - box[1]) < cfg.DATA.cover_small_face or (
                        box[2] - box[0]) < cfg.DATA.cover_small_face:
                    image[int(box[1]):int(box[3]),
                          int(box[0]):int(box[2]), :] = np.array(
                              cfg.DATA.PIXEL_MEAN, dtype=image.dtype)
                    continue
                else:
                    boxes_clean.append(box)

            boxes_ = np.array(boxes_)

            data = [image, boxes_, klass_]
            holder.append(data)
            if len(holder) == self.batch_size:
                target = self.produce_target(holder)

                yield BatchData._aggregate_batch(target, self.use_list)
                del holder[:]

        if self.remainder and len(holder) > 0:
            yield BatchData._aggregate_batch(holder, self.use_list)
    def __iter__(self):
        """
        Yields:
            Batched data by stacking each component on an extra 0th dimension.
        """

        ##### pick a scale and shape aligment

        holder = []
        for data in self.ds:

            image, boxes_, klass_ = data[0], data[1], data[2]

            data = [image, boxes_, klass_]
            holder.append(data)

            ### do crazy crop

            if random.uniform(0, 1) < cfg.DATA.cracy_crop and self.traing_flag:
                if len(holder) == self.batch_size:
                    crazy_holder = []
                    for i in range(0, len(holder), 4):

                        crazy_iamge = np.zeros(shape=(2 * cfg.DATA.hin,
                                                      2 * cfg.DATA.win, 3),
                                               dtype=holder[i][0].dtype)

                        crazy_iamge[:cfg.DATA.hin, :cfg.DATA.
                                    win, :] = holder[i][0]
                        crazy_iamge[:cfg.DATA.hin,
                                    cfg.DATA.win:, :] = holder[i + 1][0]
                        crazy_iamge[cfg.DATA.hin:, :cfg.DATA.win, :] = holder[
                            i + 2][0]
                        crazy_iamge[cfg.DATA.hin:,
                                    cfg.DATA.win:, :] = holder[i + 3][0]

                        holder[i + 1][1][:, [0, 2]] = holder[
                            i + 1][1][:, [0, 2]] + cfg.DATA.win

                        holder[i + 2][1][:, [1, 3]] = holder[
                            i + 2][1][:, [1, 3]] + cfg.DATA.hin

                        holder[i + 3][1][:, [0, 2]] = holder[
                            i + 3][1][:, [0, 2]] + cfg.DATA.win
                        holder[i + 3][1][:, [1, 3]] = holder[
                            i + 3][1][:, [1, 3]] + cfg.DATA.hin

                        tmp_bbox = np.concatenate(
                            (holder[i][1], holder[i + 1][1], holder[i + 2][1],
                             holder[i + 3][1]),
                            axis=0)

                        tmp_klass = np.concatenate(
                            (holder[i][2], holder[i + 1][2], holder[i + 2][2],
                             holder[i + 3][2]),
                            axis=0)

                        ### do random crop 4 times:
                        for j in range(4):

                            curboxes = tmp_bbox.copy()
                            cur_klasses = tmp_klass.copy()
                            start_h = random.randint(0, cfg.DATA.hin)
                            start_w = random.randint(0, cfg.DATA.win)

                            cur_img_block = np.array(
                                crazy_iamge[start_h:start_h + cfg.DATA.hin,
                                            start_w:start_w + cfg.DATA.win, :])

                            for k in range(len(curboxes)):
                                curboxes[k][0] = curboxes[k][0] - start_w
                                curboxes[k][1] = curboxes[k][1] - start_h
                                curboxes[k][2] = curboxes[k][2] - start_w
                                curboxes[k][3] = curboxes[k][3] - start_h

                            curboxes[:,
                                     [0, 2]] = np.clip(curboxes[:, [0, 2]], 0,
                                                       cfg.DATA.win - 1)
                            curboxes[:,
                                     [1, 3]] = np.clip(curboxes[:, [1, 3]], 0,
                                                       cfg.DATA.hin - 1)
                            ###cove the small faces

                            boxes_clean = []
                            klsses_clean = []
                            for k in range(curboxes.shape[0]):
                                box = curboxes[k]

                                if not (
                                    (box[3] - box[1]) < cfg.DATA.cover_obj or
                                    (box[2] - box[0]) < cfg.DATA.cover_obj):

                                    boxes_clean.append(curboxes[k])
                                    klsses_clean.append(cur_klasses[k])

                            boxes_clean = np.array(boxes_clean)
                            klsses_clean = np.array(klsses_clean)

                            crazy_holder.append(
                                [cur_img_block, boxes_clean, klsses_clean])

                    del holder

                    holder = crazy_holder

            if len(holder) == self.batch_size:
                target = self.produce_target(holder)

                yield BatchData.aggregate_batch(target, self.use_list)
                del holder[:]

        if self.remainder and len(holder) > 0:
            yield BatchData._aggregate_batch(holder, self.use_list)