Как отключить перелистывание изображений на Darkflow YOLOv2? - PullRequest
0 голосов
/ 14 марта 2020

Я сейчас тренирую модель, основанную на ориентации. Я хочу быть в состоянии обучить модель, которая может сказать предполагаемую ориентацию объекта. В настоящее время я нахожусь около 1000 эпох, и точность не очень хорошая. Моя теория состоит в том, что операция переворота, кажется, приводит к неточной модели, поскольку ориентация 90 градусов может быть перевернута до -90 градусов. Следовательно, 2 отдельных класса будут перепутаны друг с другом.

def imcv2_affine_trans(im):
    # Scale and translate
    h, w, c = im.shape
    scale = np.random.uniform() / 10. + 1.
    max_offx = (scale-1.) * w
    max_offy = (scale-1.) * h
    offx = int(np.random.uniform() * max_offx)
    offy = int(np.random.uniform() * max_offy)

    im = cv2.resize(im, (0,0), fx = scale, fy = scale)
    im = im[offy : (offy + h), offx : (offx + w)]
    flip = np.random.binomial(1, .5)
    if flip: im = cv2.flip(im, 1)
    return im, [w, h, c], [scale, [offx, offy], flip]

def preprocess(self, im, allobj = None):
    """
    Takes an image, return it as a numpy tensor that is readily
    to be fed into tfnet. If there is an accompanied annotation (allobj),
    meaning this preprocessing is serving the train process, then this
    image will be transformed with random noise to augment training data,
    using scale, translation, flipping and recolor. The accompanied
    parsed annotation (allobj) will also be modified accordingly.
    """
    if type(im) is not np.ndarray:
        im = cv2.imread(im)

    if allobj is not None: # in training mode
        result = imcv2_affine_trans(im)
        im, dims, trans_param = result
        scale, offs, flip = trans_param
        for obj in allobj:
            _fix(obj, dims, scale, offs)
            if not flip: continue
            obj_1_ =  obj[1]
            obj[1] = dims[0] - obj[3]
            obj[3] = dims[0] - obj_1_
        im = imcv2_recolor(im)

    im = self.resize_input(im)
    if allobj is None: return im
    return im#, np.array(im) # for unit testing

Это коды, относящиеся к увеличению данных во время обучения. Я хотел бы проконсультироваться с вашим советом, если моя теория верна? И если так, как я могу отключить операцию переворачивания, но сохранить остальную часть увеличения данных? Спасибо!

...