Научная статья на тему 'Исследование производительности методов вычисления оптического потока'

Исследование производительности методов вычисления оптического потока Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
544
68
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ОБРАБОТКА ИЗОБРАЖЕНИЙ / ОПТИЧЕСКИЙ ПОТОК / АЛГОРИТМЫ / МЕТОДЫ / ТЕХНИКИ / СРАВНЕНИЕ / АНАЛИЗ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Шебалов Алексей Андреевич, Баженов Александр Николаевич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Paper is devoted to methods of optical flow calculation and evaluation of their performance. Experimental comparison of classical and modern algorithms performed, results analyzed in terms of precision and speed.

Текст научной работы на тему «Исследование производительности методов вычисления оптического потока»

В результате уже для небольших n минимизация (26) происходит в условиях сильно выраженной жесткости.

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

СПИСОК Л

1. Ракитский, Ю.В. Численные методы решения жестких систем [Текст] / Ю.В. Ракитский, С.М. Устинов, И.Г. Черноруцкий. -М.: Наука, 1979.

2. Моисеев, Н.Н. Элементы теории оптимальных систем [Текст] / Н.Н. Моисеев. -М.: Наука, 1975.

3. Растригин, Л.А. Системы экстремального управления [Текст] / Л.А. Растригин. -М.: Наука, 1974.

4. Норенков, И.П Введение в автоматизированное проектирование технических устройств и систем [Текст] / И.П. Норенков. -М.: Высш. школа, 1986.

5. Норенков, И.П. Экстремальные задачи при схемотехническом проектировании в электронике [Текст] / И.П. Норенков, С.Г. Мулярчик, С.Р. Иванов. -Минск: Изд-во БГУ, 1976.

6. Геминтерн, В.И. Методы оптимального проектирования [Текст] / В.И. Геминтерн, Б.М. Каган. -М.: Энергия, 1980.

7. Черноруцкий, И.Г. Оптимальный параметрический синтез: электротехнические устройства и системы [Текст] / И.Г. Черноруцкий. -Л.: Энергоатомиздат, 1987.

8. Черноруцкий, И.Г. Методы оптимизации в тео-

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

ГЕРАТУРЫ

рии управления [Текст] / И.Г Черноруцкий. -СПб.: Питер, 2004.

9. Черноруцкий, И.Г. Параметрические методы синтеза систем управления [Текст] / И.Г Черноруцкий //Научно-технические ведомости СПбГПУ -2009. -№ 2. -С. 111-115.

10. Черноруцкий, И.Г. Методы параметрической оптимизации в задачах идентификации [Текст] / И.Г Черноруцкий //Научно-технические ведомости СПбГПУ -2009. -№ 2. -С. 150-155.

11. Растригин, Л.А. Введение в идентификацию объектов управления [Текст] / Л.А. Растригин, Н.Е. Маджаров. -М.: Энергия, 1977.

12. Тихонов, А.Н. Методы решения некорректных задач [Текст] / А.Н. Тихонов, В.Я. Арсенин. -М.: Наука, 1979.

13. Дейч, А.М. Методы идентификации динамических объектов [Текст] / А.М. Дейч. -М.: Энергия, 1979.

14. Поляк, Б.Т. Введение в оптимизацию [Текст] / Б.Т. Поляк. -М.: Наука, 1983.

15. Гилл, Ф. Практическая оптимизация [Текст] / Ф. Гилл, У Мюррей, М. Райт. -М.: Мир, 1985.

УДК 004.932.2

А.А. Шебалов, А.Н. Баженов

ИССЛЕДОВАНИЕ ПРОИЗВОДИТЕЛЬНОСТИ МЕТОДОВ ВЫЧИСЛЕНИЯ ОПТИЧЕСКОГО ПОТОКА

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

В свете приведенных примеров актуальность задачи нахождения оптического потока, а значит, в свою очередь, сравнения и анализа производительности различных методов, не оставляет сомнений. К сожалению, среди огромного числа публикаций, появившихся за 30 лет развития дисциплины, крайне мал объем обзорно-аналитических работ.

В данной статье представлена методика для оценки и сравнения производительности методов на примере работы с набором тестовых последовательностей изображений и проводится анализ полученных результатов. В математическом пакете МаЙаЬ разработан код для сравнения восьми методов и проведены вычислительные эксперименты. Получены статистически состоятельные результаты, произведен их статистический анализ.

1. Проблема вычисления оптического потока

Рассмотрим последовательность изображений (или кадров видео), описывающих динамику некоторой сцены. Согласно определению, предложенному Б.К.П. Хорном [1], полем движения назовем двумерную проекцию трехмерно го поля физического движения точек поверхностей объектов сцены, а под оптическим потоком будем понимать видимое движение яркостной структуры изображения.

Активные исследования проблемы вычисления оптического потока начались в конце 70-х гг., а первыми важными результатами их были, ставшие впоследствии классическими, работы Б.К.П. Хорна и Б.Г. Шунка [2], Б.Д. Лукаса и Т. Канаде [3]. В них изложены два базовых дифференциальных подхода к решению задачи и представлены результаты работы соответствующих алгоритмов. В публикации [4] был впервые предложен структурированный подход к тестированию и сравнению различных алгоритмов нахождения оптического потока. Эта наиболее цитируемая в данной области статья придала значительный импульс дальнейшему ее развитию. Следующими работами, объединяющими сведения о новых методах, были статьи [5, 6]. Многие из рассматриваемых авторами методов оказались неудачными, а само сравнение их проводилось на примере работы с очень простыми изображениями.

Точкой отсчета для современного этапа в развитии области стала работа С. Бэйкера [7]. Основываясь на идеях [4], исследователи разработали оригинальный комплексный набор тестовых последовательностей изображений, позволяющий провести объективное сравнение современных методов. Именно эти последовательности используются в данной работе.

2. Методы нахождения оптического потока

Каждый метод вычисления оптического по-

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

Модели оптического потока. За исключением метода Лукаса-Канаде (далее - LK-модель), все рассматриваемые в статье алгоритмы [8-11] базируются на классической модели Хорна-Шунка [2] (далее - HS-модель). В общем виде их энергетические функционалы можно записать следующим образом:

SData = & (I(Х + w(Х)) - 1 (Х)) +

x y

+ y • W 2 (VI (x + w( x)) - VI (x))

S Prior =&(Vw) x, y

SGeneral (u,v) := SData + a • SPrior ,

где I - функция изображения; Wi, W2, W3 - нормирующие функции; a, y - весовые коэффициенты. Выбрав, например, w1 (x) = W3 (x) = Х и Y = 0, получим HS-модель.

Оптимизационные техники и детали реализации. Одним из основных препятствий на пути непосредственного применения существующих методов является нестабильность вычислительного процесса оптимизации функционала модели при обработке больших смещений, т. к. в этом случае существует риск того, что итерационный процесс оптимизации сойдется в точке локального минимума [3, 4]. Для борьбы с этой проблемой Лукас и Канаде [3] предложили использовать т. н. грубо-точный подход (coarse-to-fine approach), идея которого состоит в построении пирамиды изображений, каждое следующее из которых является субдискретизированной (downsampled) копией предыдущего. Оптимизационная схема на каждом шаге представляет собой составление, линеаризацию и решение системы уравнений Эйлера-Лагранжа [9]. Серьезный недостаток соответствующего алгоритма - низкая степень параллелизма.

Для уменьшения влияния затенения и вариаций освещенности на работу алгоритма, в [11] предложено в процессе предобработки практически полностью удалять структурную компоненту (image structure) входных изображений:

IProcessed = "^Original — 0,95 • ^Structure.

Другим важным элементом современных ал-

Рис. 1. Тестовая последовательность «Groove 3»

Цветовое кодирование векторов поля потока выполнено согласно представленной на рисунке схеме. Цветовой тон кодирует

направление, а насыщенность цвета - длину вектора

горитмов является применение к полю потока различных фильтров после каждого шага грубо-точного метода [8, 11]. Это уменьшает эффект от погрешностей в решениях, полученных итерационными оптимизационными методами. Так, в алгоритме Classic+NL авторы использовали анизотропную фильтрацию, идея которой заключается в том, чтобы суммировать с большим весом значения яркости в тех точках, которые принадлежат тому же структурному элементу изображения, что и фильтруемая точка. Поскольку простой возможности точно определить, одному ли объекту принадлежат две точки, не существует, эту подзадачу решают приближенно. Можно использовать метод Собеля выделения границ, применяя к результату дилатацию с небольшим, например, 5^5 пикселей ядром. Полученную маску можно использовать для определения весов ядра анизотропного фильтра [8].

3. Экспериментальное сравнение методов

Методика сравнения. Для объективного сравнения алгоритмов требуются две компоненты: набор тестовых последовательностей с известными эталонными полями и эффективная метрика для непосредственного количественного сравнения.

Последовательности для сравнения. Сравнение алгоритмов производилось на изображениях, предложенных в [7]. В пользу репрезентативности этого набора говорит наличие в нем как реальных, так и синтетических изображений, за-

шумленных и «чистых» изображений, различных типов движения: и с малым неоднородным смещением и, напротив, со значительным и близким к линейному. Например, синтетическая последовательность «Groove 3» (рис. 1) представляет быстрое смещение камеры относительно статичной сцены, структура центрального объекта которой очень неоднородна и содержит множество мелких деталей.

Полный перечень изображений приведен в табл. 1 и 2.1

Метрика для сравнения. На основании рекомендаций [4] и [7], выбор был сделан в пользу следующих двух естественных метрик:

средняя угловая ошибка (average angular error - AAE);

средняя оконечная ошибка (average endpoint error - AEE).

Пусть

vref - вектор эталонного поля скоро-

стей и Уей- расчетного. Тогда можно записать формулы для вычисления значений ошибки по введенным метрикам:

AAE = г1- Vacos

М «

(

\

'ref

1

AEE =

v„f - v„,

Алгоритмы для сравнения. Все использованные реализации методов разработаны в математи-

1 Все они доступны на нашем сайте: http://vision. middlebury.edu/flow/data/

м

Таблица 1

Средняя угловая точность

AAE, ° LK HS BA Brox CLG TV-L1 Cl++ Cl+NL

Dimetrodon 7,13 5,20 4,00 2,70 3,59 3,75 2,48 2,24

Hydrangea 7,95 2,43 2,11 2,17 2,28 3,02 1,84 1,87

Rubber Whale 14,17 4,13 3,15 4,19 5,67 5,07 2,63 2,38

Grove2 6,53 ,09 2,39 2,30 2,55 3,14 2,00 1,30

Grove3 13,29 6,69 6,47 6,12 6,78 7,02 6,02 4,89

Urban2 19,96 5,12 2,97 2,89 3,13 2,93 2,55 2,03

Urban3 22,86 6,65 4,44 7,12 6,69 5,36 4,27 2,79

Таблица 2

Средняя оконечная точность

AEE, пикс LK HS BA Brox CLG TV-L1 Cl++ Cl+NL

Dimetrodon 0,36 0,25 0,19 0,13 0,20 0,19 0,12 0,11

Hydrangea 0,77 0,20 0,18 0,17 0,19 0,24 0,15 0,15

Rubber Whale 0,47 0,13 0,09 0,12 0,16 0,16 0,08 0,07

Grove2 0,50 0,22 0,16 0,15 0,17 0,23 0,13 0,09

Grove3 1,42 0,64 0,64 0,66 0,79 0,65 0,60 0,43

Urban2 4,32 0,51 0,38 0,31 0,42 0,39 0,36 0,20

Urban3 3,97 0,87 0,57 0,82 0,84 0,58 0,53 0,37

Таблица 3

Среднее время работы

LK HS BA Brox CLG TV-L1 Cl++ Cl+NL

T, с 23 33 103 3,9 64 7,9 116 45

ческом пакете Matlab®. Авторы и источники этих алгоритмов указан в списке литературы [16-20]. Все вычисления проводились в математическом пакете Matlab® 2011a на системе с процессором Intel® Core™ i7-2600K 4.5 GHz под управлением 64-битной ОС Linux.

Сводные результаты тестирования приведены в табл. 1-3.

Анализ результатов. При анализе результатов необходимо учитывать как точность расчетных полей, так и скорость работы соответствующих алгоритмов.

Точность расчетных полей и скорость работы. Наилучшую точность по обеим метрикам (см. п. Метрика для сравнения) на всех последовательностях показал последний в хронологическом порядке алгоритм Classic+NL. Относительно базовой вариационной модели HS ошибка

уменьшилась в среднем на 47 % (2,26°), а для более робастной модели ВА - на 33 % (1,15°).

Значительный прирост в точности объясняется тем, что в вычислительную схему включены многие модификации, введенные в других методах. Однако серьезным ограничением данного метода является тот факт, что для функционала используемой модели на данный момент неизвестны способы быстрой минимизации. В частности, предложенная оптимизационная схема является плохо распараллеливаемой. Таким образом, сфера применения алгоритма Qassic+NL ограничивается перечнем задач, не имеющих строгих требований по времени (например, сжатие и пост-обработка видео).

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Второй алгоритм, предложенный в [8], Qassic++ представляет собой модель Ж, использующую обобщенную норму [12]:

Vc (E) = £(£, y2 + 6 2)а,

где а, е - положительные константы. Оптимизация соответствующего энергетического функционала с использованием современных техник позволяет добиться ошибки метода Classic++ в среднем на 18 % (0,61°) большей, чем у оптимизированной версии Classic+NL, но на 15 % (0,81°) меньшей, чем у схожей модели Brox и др. Анализируя этот результат, можно прийти к выводу, что не все используемые в алгоритме Classic++ оптимизационные приемы одинаково полезны. Так, время работы метода Brox в 30 раз меньше (116 против четырех секунд), и, на этом фоне, разница в точности выглядит совсем незначительной. Более того, для модели Brox существует т. н. мультисеточная схема решения [13], позволяющая дальнейшее ускорение вычислений.

Алгоритмы CLG и TV-L1 показали точность того же уровня, что и современная реализация классической робастной модели Black и Anandan, что нельзя признать успешным результатом. Тем не менее эти модели уже сыграли важную роль в развитии дисциплины вычисления оптического потока. Так, авторы алгоритма Classic+NL использовали при интегрировании медианной фильтрации в функционал модели тот же принцип, который привел А. Брун к CLG-модели. В свою очередь TV-L1 модель является базовой в одноименном классе моделей, для которых получена очень хорошо распараллеливаемая вычислительная схема.

Классический алгоритм LK показал в тестировании наихудший (и с большим отставанием) результат, но здесь следует сделать важное замечание. Локальный метод в силу своей чрезвычайной простоты применим лишь к очень простым движениям, но при этом реализуем в виде параллельного алгоритма, что позволяет проводить обработку более 100 кадров размера 512^512 в секунду [14]. Отсюда следует, что если вместе с этим методом использовать высокоскоростные камеры, дающие последовательность кадров с совсем небольшими смещениями, то в совокупности получится достаточно точный и, главное, работающий в реальном времени алгоритм.

Скорость работы современных алгоритмов, с учетом того, что во многих приложениях требуется производительность реального времени порядка T = 0,04 с, следует признать неудовлетво-

рительной. Действительно, как следует из табл. 3, для обработки одной пары кадров самому быстрому из рассмотренных методу Brox требуется TBrox = 3,9 ± 0,6 с, а самому точному - Classic+NL -

не°бх°димо Tclassic+NL = 45 ± 8 с.

Ошибки в результатах и их причины. Для того чтобы определить, в каких случаях у современных алгоритмов возникают проблемы, обратимся к рис. 2, на котором выделены основные ошибки в расчетном поле наиболее точного из исследованных метода Classic+NL на наиболее сложной для обработки (как следует из табл. 1, 2) последовательности «Groove 3».

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

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

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

Оценки точности, полученные на различных последовательностях, коррелируют не очень хорошо. Так, например, для пары последовательностей «Hydrangea» и «Urban 2» ранговый коэффициент корреляции оказался равным 0,57.

m

Рис. 2. Ошибки в обработке последовательности «Groove 3» Сверху - эталонное поле последовательности «Groove 3». Снизу - рассчитанное методом Classic+NL поле.

Меры ошибки: AAE = 4,9°, AEE = 0,43 пикс.

Принимая во внимание также большой разброс во времени работы среди современных алгоритмов, можно утверждать, что ни один из них не является универсальным.

Дальнейшее расширение тестового набора, вероятно, позволит выявить новые зависимости и недочеты методов.

ААЕ и ЛЕЕ метрики. Результаты, полученные с использованием метрик ААЕ и АЕЕ, хорошо коррелируют с ранговым коэффициентом Я = 0,91. На этом основании можно сделать вывод о взаимозаменяемости двух этих метрик. Тем не менее Бэйкер и др. [15] в своей работе склоняются к использованию АЕЕ-метрики, т. к. она дает более правдоподобные, по мнению авторов, результаты для полей больших смещений. Отметим, од-

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

При дальнейшем развитии методологии сравнения исследователям стоит концентрировать внимание не на поиске более эффективных метрик, а на развитии техник применения существующих. Так, например, в [15] предложено усреднять ошибку лишь на границах объектов сцены, а не по всей плоскости изображения, маскируя соответствующие «простые» участки.

В данной статье представлена методика объективного количественного сравнения ал-

горитмов вычисления оптического потока. Для тестирования был разработан набор процедур в математическом пакете Ма^аЬ® 2011а.

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

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

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

СПИСОК ЛИТЕРАТУРЫ

1. Хорн, Б.К.П. Зрение роботов [Текст] / Б.К.П. Хорн; Пер. с англ. под ред. Е.И. Кугушева, Ю.А. Садова. -М.: Мир, 1989. -С. 281-282.

2. Horn, B.K.P. Determining optical flow [Электронный ресурс] / B.K.P. Horn, B.G. Schunck // AI Memo 572, MIT. -1981.

3. Lucas, B.D. An iterative image registration technique with an application to stereovision [Электронный ресурс] / B.D. Lucas, T. Kanade // In Proc. of the DARPA Image Understanding Workshop. -1981.

4. Barron, J.L. Performance of optical flow techniques [Text] / J.L. Barron, D.J. Fleet, S. Beauchemin // IJCV. - 1994. -№ 12 (1).

5. Stiller, C. Estimating motion in image sequences: A tutorial on modelling and computation of 2D motion [Text] / C. Stiller, J. Konrad // IEEE Signal Proc. Mag. -1999. -Vol. 16.

6. Galvin, B. Recovering motion fields: An evaluation of eight optical flow algorithms [Электронный ресурс] / B. Galvin, B. McCane, K. Novins [et al.] // In Proc. BMVC. -1998.

7. Baker, S. A database and evaluation methodology for optical flow [Электронный ресурс] / S. Baker, D. Scharstein, J. Lewis [et al.] // In Proc. ICCV. -2007.

8. Sun, D. Secrets of optical flow estimation and their principles [Электронный ресурс] / D. Sun, S. Roth, M.J. Black // In Proc. IEEE CVPR. -2010.

9. Brox, T. High accuracy optical flow estimation based on a theory for warping [Электронный ресурс] / T. Brox, A. Bruhn, N. Papenberg [et al.] // In Proc. ECCV(4). -2004.

10. Bruhn, A. Lucas/Kanade meets Horn/Schunck: combining local and global optic flow methods [Text] / A. Bruhn, J. Weickert, C. Schnorr // IJCV. -2005. -№ 61(3).

11. Wedel, A. An improved algorithm for TV-L1 optical flow [Text] / A. Wedel, T. Pock, C. Zach, H. Bischof [et al.] // In Dagstuhl Motion Workshop. -2008.

12. Charbonnier, P. Two deterministic half-quadratic regularization algorithms for computed imaging [Text] / P. Charbonnier, L. Blanc-Feraud, G. Aubert [et al.] // In Proc. IEEE ICIP. -1994. -Vol. 2.

13. Bruhn, A. A Multigrid Platform for Real-time Motion Computation with Discontinuity-Preserving Variational Methods [Text] / A. Bruhn, J. Weickert, T. Kohlberger [et al.] // IJCV. -2006. -№ 70 (3).

14. Le Besnerais, G. Dense optical flow by iterative local window registration [Электронный ресурс] / G. Le Besnerais, F. Champagnat // In Proc. IEEE ICIP. -2005. -Vol. 1.

15. Rannacher, J. Realtime 3D motion estimation on graphics hardware [Электронный ресурс] / J. Rannacher // Undergraduate thesis, Heidelberg University. -2009.

16. Метод LK [Электронный ресурс] / Berkin Bilgic. -Режим доступа: http://www.mathworks.com/ matlabcentral/fileexchange/23142

17. Метод TV-L1 [Электронный ресурс] / Thomas Pock. -Режим доступа: http://gpu4vision.icg.tugraz.at/ index.php?content=downloads.php

18. Метод CLG [Электронный ресурс] / Ce Liu. -Режим доступа: http://people.csail.mit.edu/celiu/ OpticalFlow/

19. Метод Brox [Электронный ресурс] / Thomas Brox. -Режим доступа: http://lmb.informatik.uni-freiburg. de/people/brox/index.en.html/code.html

20. Методы HS, BA, Classic++ и Classic+NL [Электронный ресурс] / Deqing Sun. -Режим доступа: http:// www.cs.brown.edu/~dqsun/research/software.html

i Надоели баннеры? Вы всегда можете отключить рекламу.