Jump to content

Консенсус случайной выборки

(Перенаправлено с РАНСАК )

Консенсус случайной выборки ( RANSAC ) — это итерационный метод оценки параметров математической модели на основе набора наблюдаемых данных, содержащих выбросы , при этом выбросы не должны оказывать никакого влияния на значения оценок. Следовательно, его также можно интерпретировать как метод обнаружения выбросов. [1] Это недетерминированный алгоритм в том смысле, что он дает разумный результат только с определенной вероятностью, причем эта вероятность увеличивается по мере увеличения количества итераций. Алгоритм был впервые опубликован Фишлером и Боллесом в SRI International в 1981 году. Они использовали RANSAC для решения проблемы определения местоположения (LDP), цель которой состоит в том, чтобы определить точки в пространстве, которые проецируются на изображение в набор ориентиров с известные места.

RANSAC использует повторяющуюся случайную подвыборку . [2] Основное предположение состоит в том, что данные состоят из «внутренних значений», т. е. данных, распределение которых можно объяснить некоторым набором параметров модели, хотя и может быть подвержено шуму, и «выбросов», то есть данных, которые не соответствуют модели. Выбросы могут возникать, например, из-за экстремальных значений шума, ошибочных измерений или неверных гипотез об интерпретации данных. RANSAC также предполагает, что при наличии (обычно небольшого) набора исходных данных существует процедура, которая может оценить параметры модели, которая оптимально объясняет или соответствует этим данным.

Пример [ править ]

Простой пример — подгонка линии в двух измерениях к набору наблюдений. Предполагая, что этот набор содержит как inliers , т. е. точки, которые приблизительно можно подогнать к линии, так и outliers , точки, которые не могут быть подогнаны к этой линии, простой метод наименьших квадратов для подгонки линии обычно дает линию с плохой подгонкой к линии. данные, включая выбросы и выбросы. Причина в том, что он оптимально подходит ко всем точкам, включая выбросы. С другой стороны, RANSAC пытается исключить выбросы и найти линейную модель, которая использует в своих расчетах только выбросы. Это делается путем подгонки линейных моделей к нескольким случайным выборкам данных и возврата модели, которая лучше всего соответствует подмножеству данных. Поскольку вставки, как правило, связаны более линейно, чем случайная смесь вставок и выбросов, случайное подмножество, полностью состоящее из вставок, будет иметь наилучшее соответствие модели. На практике нет никакой гарантии, что подмножество вкладок будет выбрано случайным образом, и вероятность успеха алгоритма зависит от доли вкладок в данных, а также от выбора нескольких параметров алгоритма.

Обзор [ править ]

Алгоритм RANSAC — это метод обучения для оценки параметров модели путем случайной выборки наблюдаемых данных. Учитывая набор данных, элементы данных которого содержат как выбросы, так и выбросы, RANSAC использует схему голосования, чтобы найти оптимальный результат подбора. Элементы данных в наборе данных используются для голосования за одну или несколько моделей. Реализация этой схемы голосования основана на двух предположениях: зашумленные функции не будут последовательно голосовать за какую-либо одну модель (несколько выбросов) и что имеется достаточно функций, чтобы согласовать хорошую модель (немного недостающих данных). Алгоритм RANSAC по существу состоит из двух шагов, которые итеративно повторяются:

  1. На первом этапе из входного набора данных случайным образом выбирается выборочное подмножество, содержащее минимальное количество элементов данных. Подходящая модель с параметрами модели рассчитывается с использованием только элементов этого подмножества выборки. Мощность подмножества выборки (например, количество данных в этом подмножестве) достаточна для определения параметров модели.
  2. На втором этапе алгоритм проверяет, какие элементы всего набора данных соответствуют модели, созданной с помощью оцененных параметров модели, полученных на первом этапе. Элемент данных будет рассматриваться как выброс, если он не соответствует модели в пределах некоторого порога ошибки, определяющего максимальное отклонение данных для выбросов. (Элементы данных, выходящие за пределы этого отклонения, являются выбросами.)

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

Входными данными для алгоритма RANSAC является набор значений наблюдаемых данных, модель, соответствующая наблюдениям, и некоторые доверительные параметры, определяющие выбросы. Если говорить более подробно, чем вышеупомянутый обзор алгоритма RANSAC, RANSAC достигает своей цели, повторяя следующие шаги:

  1. Выберите случайное подмножество исходных данных. Назовите это подмножество гипотетическими вкладышами .
  2. Модель подгоняется к набору гипотетических вкладышей.
  3. Затем все данные проверяются на соответствие подобранной модели. Все точки данных (исходных данных), которые хорошо соответствуют оцененной модели, в соответствии с некоторой функцией потерь , специфичной для модели , называются консенсусным набором (т. е. набором вкладок для модели).
  4. Предполагаемая модель является достаточно хорошей, если достаточно много точек данных были классифицированы как часть консенсусного набора.
  5. Модель можно улучшить, переоценив ее с использованием всех членов консенсусного набора. Качество подгонки как мера того, насколько хорошо модель соответствует согласованному набору, будет использоваться для уточнения подгонки модели по мере продолжения итераций (например, путем установки этого показателя в качестве критерия качества подгонки на следующей итерации).

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

Псевдокод [ править ]

Общий алгоритм RANSAC работает как следующий псевдокод :

Given:
    data – A set of observations.
    model – A model to explain the observed data points.
    n – The minimum number of data points required to estimate the model parameters.
    k – The maximum number of iterations allowed in the algorithm.
    t – A threshold value to determine data points that are fit well by the model (inlier).
    d – The number of close data points (inliers) required to assert that the model fits well to the data.

Return:
    bestFit – The model parameters which may best fit the data (or null if no good model is found).


iterations = 0
bestFit = null
bestErr = something really large // This parameter is used to sharpen the model parameters to the best data fitting as iterations go on.

while iterations < k do
    maybeInliers := n randomly selected values from data
    maybeModel := model parameters fitted to maybeInliers
    confirmedInliers := empty set
    for every point in data do
        if point fits maybeModel with an error smaller than t then
             add point to confirmedInliers
        end if
    end for
    if the number of elements in confirmedInliers is > d then
        // This implies that we may have found a good model.
        // Now test how good it is.
        betterModel := model parameters fitted to all the points in confirmedInliers
        thisErr := a measure of how well betterModel fits these points
        if thisErr < bestErr then
            bestFit := betterModel
            bestErr := thisErr
        end if
    end if
    increment iterations
end while

return bestFit

Пример кода [ править ]

Реализация Python, отражающая псевдокод. Это также определяет LinearRegressor на основе наименьших квадратов, применяется RANSAC к задаче 2D-регрессии и визуализирует результат:

from copy import copy
import numpy as np
from numpy.random import default_rng
rng = default_rng()


class RANSAC:
    def __init__(self, n=10, k=100, t=0.05, d=10, model=None, loss=None, metric=None):
        self.n = n              # `n`: Minimum number of data points to estimate parameters
        self.k = k              # `k`: Maximum iterations allowed
        self.t = t              # `t`: Threshold value to determine if points are fit well
        self.d = d              # `d`: Number of close data points required to assert model fits well
        self.model = model      # `model`: class implementing `fit` and `predict`
        self.loss = loss        # `loss`: function of `y_true` and `y_pred` that returns a vector
        self.metric = metric    # `metric`: function of `y_true` and `y_pred` and returns a float
        self.best_fit = None
        self.best_error = np.inf

    def fit(self, X, y):
        for _ in range(self.k):
            ids = rng.permutation(X.shape[0])

            maybe_inliers = ids[: self.n]
            maybe_model = copy(self.model).fit(X[maybe_inliers], y[maybe_inliers])

            thresholded = (
                self.loss(y[ids][self.n :], maybe_model.predict(X[ids][self.n :]))
                < self.t
            )

            inlier_ids = ids[self.n :][np.flatnonzero(thresholded).flatten()]

            if inlier_ids.size > self.d:
                inlier_points = np.hstack([maybe_inliers, inlier_ids])
                better_model = copy(self.model).fit(X[inlier_points], y[inlier_points])

                this_error = self.metric(
                    y[inlier_points], better_model.predict(X[inlier_points])
                )

                if this_error < self.best_error:
                    self.best_error = this_error
                    self.best_fit = better_model

        return self

    def predict(self, X):
        return self.best_fit.predict(X)

def square_error_loss(y_true, y_pred):
    return (y_true - y_pred) ** 2


def mean_square_error(y_true, y_pred):
    return np.sum(square_error_loss(y_true, y_pred)) / y_true.shape[0]


class LinearRegressor:
    def __init__(self):
        self.params = None

    def fit(self, X: np.ndarray, y: np.ndarray):
        r, _ = X.shape
        X = np.hstack([np.ones((r, 1)), X])
        self.params = np.linalg.inv(X.T @ X) @ X.T @ y
        return self

    def predict(self, X: np.ndarray):
        r, _ = X.shape
        X = np.hstack([np.ones((r, 1)), X])
        return X @ self.params


if __name__ == "__main__":

    regressor = RANSAC(model=LinearRegressor(), loss=square_error_loss, metric=mean_square_error)

    X = np.array([-0.848,-0.800,-0.704,-0.632,-0.488,-0.472,-0.368,-0.336,-0.280,-0.200,-0.00800,-0.0840,0.0240,0.100,0.124,0.148,0.232,0.236,0.324,0.356,0.368,0.440,0.512,0.548,0.660,0.640,0.712,0.752,0.776,0.880,0.920,0.944,-0.108,-0.168,-0.720,-0.784,-0.224,-0.604,-0.740,-0.0440,0.388,-0.0200,0.752,0.416,-0.0800,-0.348,0.988,0.776,0.680,0.880,-0.816,-0.424,-0.932,0.272,-0.556,-0.568,-0.600,-0.716,-0.796,-0.880,-0.972,-0.916,0.816,0.892,0.956,0.980,0.988,0.992,0.00400]).reshape(-1,1)
    y = np.array([-0.917,-0.833,-0.801,-0.665,-0.605,-0.545,-0.509,-0.433,-0.397,-0.281,-0.205,-0.169,-0.0531,-0.0651,0.0349,0.0829,0.0589,0.175,0.179,0.191,0.259,0.287,0.359,0.395,0.483,0.539,0.543,0.603,0.667,0.679,0.751,0.803,-0.265,-0.341,0.111,-0.113,0.547,0.791,0.551,0.347,0.975,0.943,-0.249,-0.769,-0.625,-0.861,-0.749,-0.945,-0.493,0.163,-0.469,0.0669,0.891,0.623,-0.609,-0.677,-0.721,-0.745,-0.885,-0.897,-0.969,-0.949,0.707,0.783,0.859,0.979,0.811,0.891,-0.137]).reshape(-1,1)

    regressor.fit(X, y)

    import matplotlib.pyplot as plt
    plt.style.use("seaborn-darkgrid")
    fig, ax = plt.subplots(1, 1)
    ax.set_box_aspect(1)

    plt.scatter(X, y)

    line = np.linspace(-1, 1, num=100).reshape(-1, 1)
    plt.plot(line, regressor.predict(line), c="peru")
    plt.show()
Диаграмма рассеяния, показывающая диагональную линию, идущую из нижнего левого угла в правый верхний угол рисунка. Линия тренда плотно прилегает к диагонали, не отбрасываясь выбросами, разбросанными в других местах фигуры.
Результат запуска RANSAC выполнение. Оранжевая линия показывает параметры метода наименьших квадратов, найденные с помощью итеративного подхода, который успешно игнорирует точки-выбросы.

Параметры [ править ]

Пороговое значение для определения того, когда точка данных соответствует модели ( t ), и количество вкладок (точек данных, подогнанных к модели в пределах t ), необходимых для подтверждения того, что модель хорошо соответствует данным ( d ), определяются на основе конкретных требований. приложения и набора данных и, возможно, на основе экспериментальной оценки. Однако количество итераций ( k ) можно грубо определить как функцию желаемой вероятности успеха ( p ), как показано ниже.

Пусть p — желаемая вероятность того, что алгоритм RANSAC предоставит хотя бы один полезный результат после запуска. В крайнем случае (для упрощения вывода) RANSAC возвращает успешный результат, если на какой-то итерации он выбирает только входящие значения из набора входных данных, когда он выбирает n точек из набора данных, из которых оцениваются параметры модели. (Другими словами, все выбранные n точек данных являются внутренними элементами модели, оцененной по этим точкам). Позволять быть вероятностью выбора входного значения каждый раз, когда выбирается одна точка данных, то есть примерно

= количество вставок в данных / количество точек в данных

Распространенный случай заключается в том, что заранее неизвестно из-за неизвестного количества вставок в данных перед запуском алгоритма RANSAC, но можно дать некоторое приблизительное значение. При заданном грубом значении и грубо предполагая, что n точек, необходимых для оценки модели, выбираются независимо (это грубое предположение, поскольку в реальности каждый выбор точки данных уменьшает количество кандидатов на точки данных, которые нужно выбрать при следующем выборе), - вероятность того, что все n точек являются вкраплениями и — это вероятность того, что хотя бы одна из n точек является выбросом, случай, который подразумевает, что плохая модель будет оценена по этому набору точек. Эта вероятность в степени k (количество итераций при запуске алгоритма) представляет собой вероятность того, что алгоритм никогда не выберет набор из n точек, все из которых являются входными, и это то же самое, что (вероятность того, что алгоритм не приведет к успешной оценке модели) в крайнем случае. Следовательно,

что после логарифмирования обеих частей приводит к

Этот результат предполагает, что n точек данных выбираются независимо, то есть точка, которая была выбрана один раз, заменяется и может быть выбрана снова в той же итерации. Зачастую это неразумный подход, и полученное значение k следует принимать в качестве верхнего предела в случае, если точки выбираются без замены. Например, в случае поиска линии, соответствующей набору данных, показанному на рисунке выше, алгоритм RANSAC обычно выбирает две точки на каждой итерации и вычисляет maybe_model как линия между точками, и тогда очень важно, чтобы эти две точки были различны.

Чтобы получить дополнительную уверенность, стандартное отклонение можно добавить к k или его кратные значения . Стандартное отклонение k определяется как

Преимущества и недостатки [ править ]

Преимуществом RANSAC является его способность выполнять надежную оценку. [3] параметров модели, т.е. он может оценивать параметры с высокой степенью точности, даже если значительное количество выбросов в наборе данных присутствует . Недостатком RANSAC является отсутствие верхней границы времени, необходимого для вычисления этих параметров (кроме исчерпания ресурсов). Когда количество вычисляемых итераций ограничено, полученное решение может быть неоптимальным и даже не таким, которое хорошо соответствует данным. Таким образом, RANSAC предлагает компромисс; за счет вычисления большего количества итераций вероятность создания разумной модели увеличивается. Более того, RANSAC не всегда может найти оптимальный набор даже для умеренно загрязненных наборов и обычно плохо работает, когда количество вкладок меньше 50%. Оптимальный РАНСАК [4] было предложено решить обе эти проблемы и способно найти оптимальный набор для сильно загрязненных наборов, даже для входного соотношения менее 5%. Еще одним недостатком RANSAC является то, что он требует установки пороговых значений для конкретной проблемы.

RANSAC может оценить только одну модель для определенного набора данных. Что касается любого подхода с одной моделью, когда существуют два (или более) экземпляра модели, RANSAC может не найти ни один из них. Преобразование Хафа — это один из альтернативных методов надежной оценки, который может быть полезен, когда присутствует более одного экземпляра модели. Другой подход к подбору нескольких моделей известен как PEARL. [5] который сочетает в себе выборку модели из точек данных, как в RANSAC, с итеративной переоценкой вложенных значений и подгонкой нескольких моделей, формулируемой как задача оптимизации с глобальной энергетической функцией, описывающей качество общего решения.

Приложения [ править ]

Алгоритм RANSAC часто используется в компьютерном зрении , например, для одновременного решения задачи соответствия и оценки фундаментальной матрицы , связанной с парой стереокамер; см. также: Структура из движения , преобразование масштабно-инвариантных признаков , сшивание изображений , жесткая сегментация движения .

Развитие и улучшения [ править ]

С 1981 года RANSAC стал фундаментальным инструментом в области компьютерного зрения и обработки изображений. В 2006 году, к 25-летию алгоритма, на Международной конференции по компьютерному зрению и распознаванию образов (CVPR) был организован семинар, на котором были подведены итоги последних достижений и изменений в исходном алгоритме, в основном предназначенных для повышения скорости алгоритма. , надежность и точность предполагаемого решения, а также уменьшить зависимость от определяемых пользователем констант.

RANSAC может быть чувствителен к выбору правильного порога шума, который определяет, какие точки данных соответствуют модели, созданной с определенным набором параметров. Если такой порог слишком велик, то все гипотезы имеют тенденцию оцениваться одинаково (хорошо). С другой стороны, когда шумовой порог слишком мал, оцениваемые параметры имеют тенденцию быть нестабильными (т.е. при простом добавлении или удалении данных из набора вкраплений оценка параметров может колебаться). Чтобы частично компенсировать этот нежелательный эффект, Torr et al. предложил две модификации RANSAC, названные MSAC (M-оценка SAmple и консенсус) и MLESAC (SAmple и консенсус оценки максимального правдоподобия). [6] Основная идея состоит в том, чтобы оценить качество консенсусного набора (т.е. данных, которые соответствуют модели и определенному набору параметров), вычислив его вероятность (тогда как в исходной формулировке Фишлера и Боллеса ранг представлял собой мощность такого набора). Расширение MLESAC, которое учитывает априорные вероятности, связанные с входным набором данных, предложено Тордоффом. [7] Полученный алгоритм получил название Guided-MLESAC. Аналогичным образом, Чам предложил проводить процедуру выборки в том случае, если известна некоторая априорная информация о входных данных, т.е. может ли исходное значение быть выбросом или выбросом. Предлагаемый подход называется PROSAC, PROgressive SAmple Consensus. [8]

Чам и др. также предложил рандомизированную версию RANSAC под названием R-RANSAC. [9] чтобы уменьшить вычислительную нагрузку для определения хорошего консенсусного набора. Основная идея состоит в том, чтобы первоначально оценить качество модели, созданной в данный момент, используя только сокращенный набор точек вместо всего набора данных. Разумная стратегия с высокой степенью уверенности подскажет, когда необходимо оценить соответствие всего набора данных или когда от модели можно легко отказаться. Разумно предположить, что влияние этого подхода более актуально в тех случаях, когда процент ошибочных результатов велик. Тип стратегии, предложенный Chum et al. называется схемой упреждения. Нистер предложил парадигму под названием Preemptive RANSAC. [10] это позволяет в режиме реального времени надежно оценить структуру сцены и движение камеры. Основная идея подхода состоит в генерации фиксированного количества гипотез, чтобы сравнение происходило по качеству сгенерированной гипотезы, а не по какому-то абсолютному показателю качества.

Другие исследователи пытались справиться со сложными ситуациями, когда масштаб шума неизвестен и/или присутствует несколько экземпляров модели. Первая проблема была решена в работе Ванга и Сутера. [11] Тольдо и др. представлять каждую датум с помощью характеристической функции набора случайных моделей, соответствующих этой точке. Затем несколько моделей раскрываются как кластеры, которые группируют точки, поддерживающие одну и ту же модель. Алгоритм кластеризации, называемый J-linkage, не требует предварительного указания количества моделей и ручной настройки параметров. [12]

RANSAC также был адаптирован для приложений рекурсивной оценки состояния, где входные измерения искажаются выбросами, а подходы с фильтром Калмана , основанные на гауссовом распределении ошибки измерения, обречены на провал. Такой подход получил название КАЛЬМАНСАК. [13]

Связанные методы [ править ]

См. также [ править ]

Примечания [ править ]

  1. ^ Подгонка данных и неопределенность, Т. Струц, Springer Vieweg (2-е издание, 2016 г.)
  2. ^ Канцлер, Х. «Консенсус случайной выборки (RANSAC)» . Институт восприятия, действия и поведения, отделение информатики, Эдинбургский университет. Архивировано из оригинала 04 февраля 2023 г.
  3. ^ Надежная статистика, Питер. Дж. Хубер, Wiley, 1981 (переиздано в мягкой обложке, 2004 г.), стр. 1.
  4. ^ Андерс Хаст, Йохан Нисьё, Андреа Маркетти (2013). «Оптимальный RANSAC - к повторяемому алгоритму поиска оптимального набора». Журнал WSCG 21 (1): 21–30.
  5. ^ Хоссам Исак, Юрий Бойков (2012). «Энергетическая геометрическая многомодельная подгонка». Международный журнал компьютерного зрения 97 (2: 1): 23–147. два : 10.1007/s11263-011-0474-7 .
  6. ^ PHS Торр и А. Зиссерман, MLESAC: новый надежный оценщик, применимый для оценки геометрии изображения. [ мертвая ссылка ] , Журнал компьютерного зрения и понимания изображений 78 (2000), вып. 1, 138–156.
  7. ^ Б. Дж. Тордофф и Д. В. Мюррей, Guided-MLESAC: Более быстрая оценка преобразования изображения с использованием сопоставления априорных значений , Транзакции IEEE по анализу шаблонов и машинному интеллекту 27 (2005), вып. 10, 1523–1535 гг.
  8. ^ Сопоставление с PROSAC - консенсус прогрессивной выборки , Материалы конференции по компьютерному зрению и распознаванию образов (Сан-Диего), том. 1 июня 2005 г., стр. 220–226.
  9. ^ О. Чам и Дж. Мэйтас, Рандомизированный RANSAC с тестом Td,d, 13-я Британская конференция по машинному зрению, сентябрь 2002 г. http://www.bmva.org/bmvc/2002/papers/50/
  10. ^ Д. Нистер, Упреждающий RANSAC для оценки живой структуры и движения , Международная конференция IEEE по компьютерному зрению (Ницца, Франция), октябрь 2003 г., стр. 199–206.
  11. ^ Х. Ван и Д. Сутер, Надежная параметрическая оценка модели адаптивного масштаба для компьютерного зрения ., Транзакции IEEE по анализу шаблонов и машинному интеллекту 26 (2004), вып. 11, 1459–1474 гг.
  12. ^ Р. Тольдо и А. Фузиелло, Надежная оценка множественных структур с помощью J-связи , Европейская конференция по компьютерному зрению (Марсель, Франция), октябрь 2008 г., стр. 537–547.
  13. ^ А. Ведальди, Х. Джин, П. Фаваро и С. Соатто, КАЛМАНСАК: Надежная фильтрация на основе консенсуса , Материалы Международной конференции по компьютерному зрению (ICCV), том. 1, 2005, стр. 633–640.
  14. ^ Брахмачари, Авик С.; Саркар, Судип (март 2013 г.). «Монте-Карло хмель-диффузии для оценки эпиполярной геометрии между изображениями с очень широкой базовой линией». Транзакции IEEE по анализу шаблонов и машинному интеллекту . 35 (3): 755–762. дои : 10.1109/TPAMI.2012.227 . ПМИД   26353140 . S2CID   2524656 .

Ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ab0bacc9316620c338a6e2e82650854e__1708709400
URL1:https://arc.ask3.ru/arc/aa/ab/4e/ab0bacc9316620c338a6e2e82650854e.html
Заголовок, (Title) документа по адресу, URL1:
Random sample consensus - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)