【ReID】【скимминг】Увеличение случайного стирания данных

искусственный интеллект

Знаменитый метод случайного стирания arvix, зависший в 2017 году, кажется, выиграл AAAI в 2020 году. В статье предлагается метод улучшения данных Random Erasing, который выбирает прямоугольную область случайного размера из случайной позиции на изображении, и присваивает значение бессмысленной константе (или случайному числу, или 0). Такой метод активно удаляет некоторую информацию в изображении, тем самым предотвращая переоснащение модели, повышая надежность модели и улучшая работу модели для задачи обнаружения задачи распознавания.

Список бумаг:

Болевые точки

Многие сети слишком сложны, имеют слишком много параметров, часто имеют плохую способность к обобщению и склонны к переоснащению. То, что узнает сеть, может быть неважным шумом, а не распределением функций, которые нас интересуют. Это проявляется в том, что некоторые сети хорошо работают на обучающей выборке, но удивительно плохо работают на тестовой выборке. Для улучшения обобщающей способности сети очень важным направлением является аугментация данных. Такие методы, как случайное кадрирование, переворачивание и т. д., стали очень распространенными методами.

Для возможности обобщения сети. Окклюзия является важным влияющим фактором. Точно так же, как набор данных окклюзии при повторной идентификации пешеходов, тест заключается в том, может ли сеть обращать внимание на общие и локальные детали, а также на способность сети обобщать закрытые объекты. Окклюзия также является очень распространенной сценой в сценариях ReID, а также одной из основных трудностей, ограничивающих реализацию технологии ReID.

Случайное стирание, предложенное в этой статье, улучшает способность модели к обобщению и надежность модели за счет активного введения окклюзии в качестве метода улучшения данных.Он прост и удобен в использовании и может быть совместим с большинством моделей и сценариев приложений.

Модель

Пример случайного стирания показан на рисунке:

Не говоря уже о модели, это в основном метод улучшения данных, псевдокод показан на рисунке:

Конкретные рекомендации по развертыванию см. в исходном коде:

GitHub.com/Zunzhong07…

Мои комментарии к коду следующие:

class RandomErasing(object):
    """ Randomly selects a rectangle region in an image and erases its pixels.
        'Random Erasing Data Augmentation' by Zhong et al.
        See https://arxiv.org/pdf/1708.04896.pdf
    Args:
         probability: The probability that the Random Erasing operation will be performed.
         sl: Minimum proportion of erased area against input image.
         sh: Maximum proportion of erased area against input image.
         r1: Minimum aspect ratio of erased area.
         mean: Erasing value.
    """

    def __init__(self, probability=0.5, sl=0.02, sh=0.4, r1=0.3, mean=(0.4914, 0.4822, 0.4465)):
        self.probability = probability
        self.mean = mean
        self.sl = sl  # 初始化可选择的擦除区域面积设置的最小比例
        self.sh = sh  # 初始化可选择的擦除区域面积设置的最大比例
        self.r1 = r1  # 初始化最小长宽比

    def __call__(self, img):

        if random.uniform(0, 1) >= self.probability:
            return img

        for attempt in range(100):
            area = img.size()[1] * img.size()[2]

            target_area = random.uniform(self.sl, self.sh) * area  # 面积范围[sl, sh]*area=[0.02*area, 0.4*area]
            aspect_ratio = random.uniform(self.r1, 1 / self.r1)  # 长宽比范围[r1, 1/r1]=[0.3. 3.333...]

            h = int(round(math.sqrt(target_area * aspect_ratio)))  # 擦除区域高度(height)
            w = int(round(math.sqrt(target_area / aspect_ratio)))  # 擦除区域宽度(width)

            if w < img.size()[2] and h < img.size()[1]:
                x1 = random.randint(0, img.size()[1] - h)  # 随机起始点纵坐标(height方向)
                y1 = random.randint(0, img.size()[2] - w)  # 随机起始点横坐标(width方向)
                if img.size()[0] == 3:  # RGB图
                    img[0, x1:x1 + h, y1:y1 + w] = self.mean[0]  # 将擦除区域全部赋予预设小数
                    img[1, x1:x1 + h, y1:y1 + w] = self.mean[1]
                    img[2, x1:x1 + h, y1:y1 + w] = self.mean[2]
                else:  # 灰度图
                    img[0, x1:x1 + h, y1:y1 + w] = self.mean[0]
                return img
        return img

эксперимент

Пример случайного стирания для обнаружения объекта:

Пример комбинации произвольного стирания и произвольного кадрирования:

SOTA измеряется в классификации категорий:

Вероятность реализации гиперпараметра случайного стирания, тест разделения соотношения площадей и соотношения сторон следующие:

Тест разделения назначения стертой области выглядит следующим образом:

Сравнение со случайным шумом отсева:

По сравнению с комбинацией случайного флипа и случайного кадрирования:

Зависимость между степенью окклюзии и ошибкой теста:

SOTA для обнаружения целей:

Сравнение улучшений теста ReID выглядит следующим образом.

SOTA, измеренная набором данных market1501, выглядит следующим образом:

SOTA, измеренная DukeMTMC-reID, выглядит следующим образом:

SOTA, измеренная CUHK03, выглядит следующим образом:

использованная литература

[1] Zhong Z, Zheng L, Kang G, et al. Random erasing data augmentation[J]. arXiv preprint arXiv:1708.04896, 2017.