Разработка роботизированной платформы

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 20.08.2017
Размер файла 1,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

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

По вышеописанным причинам для написания программного интерфейса одноплатного компьютера Raspberry Pi в качестве языковых средств были выбраны языки Python и Shell, а в качестве инструментальных средств разработки - свободно распространяемый редактор Vim. Редактор Vim был выбран ввиду его удобства при написании программных скриптов на упомянутых языках, большого объёма функциональных возможностей и наличия сравнительно большого опыта работы с редактором у авторов данной работы.

Серверная часть системы решает намного более сложные задачи, нежели клиентская часть. Также при обучении нейросети выполняется большое количество расчетов (самая вычислительно сложная часть - определение расстояния между N-мерными векторами в силу большой мерности пространства). Поэтому для реализации серверной части программного обеспечения целесообразно использовать один из компилируемых языков программирования, так как интерпретируемые языки, как правило, работают по менее эффективному коду. К тому же язык должен отвечать следующим требованиям:

кроссплатформенность (разработка и реализация алгоритма будет происходить на компьютере с ОС Windows, обучение нейросети - на сервере с ОС Linux);

поддержка параллельных вычислений (для более эффективного обучения на многоядерном сервере);

простота интеграции приложения в общую структурную схему устройства.

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

В качестве среды разработки серверной части была выбрана IDE Qt Creator по причинам:

поддержка кроссплатформенности (во время разработки и тестирования могут потребоваться изменения в коде программы);

встроенный отладчик с графическим интерфейсом более удобен, чем, например, gbe - отладчик с консольным интерфейсом;

поддержка отладки многопоточных приложений;

привычная для исполнителя среда разработки;

наличие встроенной документации на Qt библиотеки (у серверной машины может не быть доступа к Internet).

4.1 Выводы к разделу 4

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

5. Выбор алгоритма самообучения

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

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

обучение без учителя - способ машинного обучения, при котором испытуемая система спонтанно обучается выполнять поставленную задачу без вмешательства со стороны экспериментатора. Для каждого прецедента задаётся только "ситуация", требуется сгруппировать объекты в кластеры, используя данные о попарном сходстве объектов, и/или понизить размерность данных;

обучение с подкреплением - способ машинного обучения, в ходе которого испытуемая система (агент) обучается, взаимодействуя с некоторой средой. Для каждого прецедента имеется пара "ситуация, принятое решение".

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

описание ситуации, в которой мы сейчас находится платформа (т.е. показания имеющихся датчиков, преобразованных в N-мерный вектор);

действие, которое сделал эксперт (пользователь) в данной ситуации.

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

Так как заранее неизвестно ни количество кластеров, ни признаки, по которым будет происходить кластеризация, в разрабатываемой системе отсутствует "учитель" (здесь важно подчеркнуть разницу между "учителем" в области машинного обучения и "экспертом", который будет задавать "правильные" действия). Поэтому для кластеризации данных необходимо воспользоваться одним из методов обучения без учителя. Среди этих методов наиболее распространены:

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

нейронная сеть Кохонена - класс нейронных сетей, основным элементом которых является слой Кохонена. Слой Кохонена состоит из адаптивных линейных сумматоров ("линейных формальных нейронов"). Как правило, выходные сигналы слоя Кохонена обрабатываются по правилу "Победитель получает всё";

метод ближайших соседей (k-means) - действие алгоритма таково, что он стремится минимизировать суммарное квадратичное отклонение точек кластеров от центров этих кластеров. [11]

Несмотря на то, что метод k-средних довольно популярен при кластеризации, у него имеется ряд существенных недостатков:

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

результат зависит от выбора исходных центров кластеров, их оптимальный выбор неизвестен;

число кластеров необходимо знать заранее.

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

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

Идея транслятора "кластер-действие" состоит в том, что в ходе обучения заполняется база данных вида, представленного в Таблице 4.

Таблица 4. Вид базы данных транслятора

Кластер №1

Количество действий №1

Количество действий №m

Количество действий №1

Количество действий №m

Кластер №n

Количество действий №1

Количество действий №m

На стадии обучения при подаче примера из обучающей выборки в Карту мы получаем на выходе из неё номер кластера, в который попал данный вектор-ситуация. В соответствующей номеру кластера и номеру действия ячейке счётчик увеличивается на 1 (начальная инициализация всех ячеек - 0).

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

5.1 Выводы к разделу 5

Поставленные задачи входят в рамки алгоритмов обучения без учителя;

нейронная сеть Кохонена является наиболее подходящим алгоритмом для выполнения поставленных задач;

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

6. Методы решения поставленных задач

6.1 Проектирование алгоритма самообучения

Рассмотрим принцип действия самоорганизующейся карты Кохонена (далее - "Карта"). Карта представляет собой один слой нейронов, на каждый выходной кластер приходится один нейрон. Первой стадией использования Карты является её обучение. Оно происходит по следующему алгоритму [12]:

а) задаётся критическое расстояние Rкр - это расстояние, которое соответствует минимальному возможному Евклидову расстоянию между местонахождением нейрона-победителя в N-мерном пространстве и местонахождением текущего примера из обучающей выборки;

б) на вход Карты подаётся i-ый пример из обучающей выборки, выбранный из неё случайным образом;

в) рассчитываются Евклидовы расстояния (формула 6.1) между i-ым примером и каждым нейроном Карты. По минимальному расстоянию определяется номер нейрона-победителя;

д) если расстояние от i-ого примера до нейрона-победителя больше, чем Rкр, то образуется новый нейрон с таким же расположением в N-мерном пространстве, как и i-ый пример из выборки;

е) если расстояние от i-ого примера до нейрона-победителя меньше или равно Rкр, то считается, что i-ый пример выборки принадлежит нейрону-победителю. Производится смещение нейрона победителя в сторону i-ого примера с некоторым коэффициентом V (формула 6.2), который линейно уменьшается с возрастанием номера эпохи;

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

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

Обучение происходит выполнения одного из условий окончания:

задано и достигнуто максимальное количество эпох обучения (в нашем случае);

задано и достигнуто предельное физическое время обучения;

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

(6.1)

где i - параметр N-мерного вектора, j - номер текущего нейрона, W - имеющийся в нейросети нейрон, X - пример из обучающей выборки.

(6.2)

где q - номер состояния j-ого нейрона, i - параметр N-мерного вектора, X - вектор расположения текущего примера выборки, V - скорость обучения.

Отдельной задачей можно выделить подбор варьируемых параметров Карты - Rкр, V, DV. Касаемо выбора первоначального параметра скорости обучения V, следует исходить из соображений о том, что на начальных стадиях обучения Карты (первые эпохи обучения) центры кластеров подбираются с высокой погрешностью, по конкретному примеру из выборки. В связи с этим целесообразно перемещать центр кластера к новому примеру выборки с достаточно большим (но, очевидно, меньше 1) коэффициентом. Для данной работы первоначальной скоростью обучения было выбрано значение V = 0.7, т.е. центр кластера перемещается в сторону нового примера, попавшего в этот кластер, на 70% расстояния между ними. Это позволит на начальных стадиях обучения довольно быстро приблизиться к "идеальному" центру.

Коэффициент DV выбирается исходя из предполагаемого количества эпох обучения - нам нужно добиться минимального V на последних эпохах обучения - около 0.05. В результате пробных запусков обучения Карты было установлено, что количество эпох обучения, при котором явление переобучения не наблюдается, около 50. Исходя из этой информации, значение DV выбрано равным 0.013.

Для выбора Rкр необходимо провести исследование входных данных, как отмечалось выше. Это связано с тем, что при выборе слишком большого Rкр в ходе обучения образуется слишком малое количество кластеров, что приведёт к плохой распознаваемости (различные по требуемому действию ситуации с большой вероятностью попадут в один кластер, соответственно, в большом числе случаев действие будет выдаваться ошибочно). С другой стороны, при выборе слишком малого Rкр количество кластеров будет чрезмерно большим (крайний случай - на каждую ситуацию образуется собственный кластер), соответственно пропадает смысл кластеризации.

Как отмечено в разделе 5, для реализации алгоритма кластеризации был использован язык С++. Самоорганизующаяся карта была сформирована в класс SOM (NeuralNetwork на диаграмме классов). Также в отдельный класс "neuron" вынесен объект "нейрон". Заголовки вышеописанных классов представлены ниже.

som. h:

private:

std:: vector<neuron> map; // Вектор нейронов

std:: vector<bool> mapUsage; // вектор, обозначающий использование нейронов на данной эпохе

double v; // Скорость обучения

double dv; // Изменение скорости обучения при переходе между эпохами

unsigned int addNewCenter (neuron neu); // Добавление neu в качестве центра кластера

unsigned int correntWinnerWeight (neuron neu, int winID); // перерасчет значения центра кластера

int tAnswer [4]; // массив значений функции getMin при параллельных вычислениях (4 потока)

public:

SOM (); // конструктор по умолчанию

bool setVandDV (double _v, double _dv); // установка V и DV

unsigned int sendNeuron (neuron neu, bool isNoChange = false); // получить номер кластера для ситуации neu

std:: vector<bool> getUsage (); // вернуть вектор использования

void endOfEra (); // действия в конце каждой эры

void getMin (unsigned int id, unsigned int begin, unsigned int end, neuron neu); // функция подсчета минимального расстояния от ситуации до каждого кластера. Вызывается параллельно.

neuron. h:

neuron (); // конструктор по умолчанию

neuron (QString imageName, QString prefix); // конструктор, загружающий "ситуацию"

double getDistance (neuron other); // Евклидово расстояние до другого нейрона

void saveToFile (FILE *f); // запись нейрона в файл

void loadFromFile (FILE *f); // загрузка нейрона из файла

void normalize (unsigned int maxValue = 255, unsigned int minValue = 0); // нормализация параметров нейрона

void loadFromImage (QString imageName, QString prefix); // метод, повторяющий функционал конструктора

void clear (); // очистка значений нейрона

Для подсчёта статистики выполняемого действия на каждый кластер, а так же для обучения нейросети, был сформирован класс teacher. Помимо обучения нейронной сети этот класс выступает в качестве интерфейса между нейронной сетью и клиентом. Заголовок данного класса представлен ниже.

teacher. h

public:

teacher (); // конструктор по умолчанию

void train (std:: string trainingSetFolder, float Rcritical, float v, float dv); // провести тренировку нейронной сети

void test (std:: string testFolder, int testNumber); // протестировать нейросеть на имеющихся примерах

private:

typedef std:: vector<unsigned int> clusterAction;

SOM *map; // указатель на объект "нейросеть"

std:: vector<clusterAction> translator; // вектор, хранящий информацию о попадании действия в кластер

std:: vector<situation_act> currentTrainingSet; // вектор, хранящий текущую обучающую выборку

void loadLastState (); // загрузить последнее имеющееся состояние нейросети и транслятора

bool loadNextDataBase (std:: string trainingSetFolder); // загрузить базу данных в память

void teachCurrentTrainingSet (float Rcritical, float v, float dv); // провести тренировку нейросети на текущей выборке

unsigned int situationToAction (neuron situation); // интерфейс между нейросетью и клиентом

6.2 Предварительная обработка входных данных

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

изображения, получаемые с видеокамеры, имеют разрешение 320x240 пикселей, где каждый пиксель представлен тремя значениями, лежащими на промежутке [0; 255] (цветовая схема RGB) [13];

значение, получаемое с ультразвукового дальномера, представлено в виде числа с плавающей точкой и лежит на промежутке [20; 4000] (по техническим характеристикам дальномер способен измерять расстояние в промежутке от 20 до 4000 мм [14]);

как отмечено в введении, для передачи одного фрагмента данных (значения пикселов одного изображения вместе с соответствующим значением расстояния) от клиента серверу с использованием TCP-сокетов требуется около 0.5 секунд реального времени.

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

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

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

для значений пикселов изображений - 32 единицы;

для значений расстояний до объектов - 10 мм.

Таким образом, после проведения дискретизации количество возможных значений пикселов снижается с 256 до 8, а количество возможных значений расстояний до объектов - с 3981 до 398. При этом расширение градации допустимых значений (уменьшение шагов дискретизации значений) на практике не влечёт за собой значительного для данной работы отклонения в получаемом качестве обучения, однако сказывается на времени отклика сервера.

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

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

Так как выявление объектов на изображении - ресурсоёмкая задача, она не позволяет удерживать поставленные в задачах ограничения по времени отклика серверной части системы. Исходя из этого, следует использовать какой-либо алгоритм предварительной обработки, не меняющей структуру входного графического потока. В качестве возможных вариантов были выявлены два алгоритма преобразования:

алгоритм выделения границ объектов (например, преобразование Собеля, преобразование Робертса);

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

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

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

Для генерации поочерёдно использовались все латинские буквенные символы, каждому из которых в соответствие были поставлены несколько цветов символа, несколько цветов фона изображения, располагавшегося на слой ниже символа, а также несколько размеров символа и шрифтов. Все возможные комбинации вышеупомянутых параметров были перебраны в скрипте генерации, написанном на языке Shell, и реализованы в виде изображений формата GIF. Примеры вариантов синтезированных изображений для символа "a" приведены на Рис.10.

Рис.10 Примеры вариантов синтезированных изображений

Утилитой, проводящей генерацию изображений, является утилита "convert" свободно распространяемого пакета "ImageMagick".

Из возможных методов предварительной обработки изображений были выбраны следующие варианты:

применение оператора Собеля;

перевод изображения в градации серого.

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

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

а) нормализация значений входных данных;

б) расчёт оптимальных Rкр;

в) проведение обучения карты Кохонена с попутным распознаванием символов на синтезированных изображениях.

Рассмотрим принцип выполнения и особенности каждого из этапов.

Нормализация значений входных данных (этап а) происходит над значениями пикселов вида 0xAABBCCDD, где AA - байт, представляющий компоненту красного цвета, BB - зелёного цвета, CC - синего цвета, DD - компоненты яркости. Удобно представлять эти компоненты как координаты в 4-мерном евклидовом пространстве. Тогда не составляет труда нормализовать значения пикселов в промежутке от 0 до 1.

Для расчёта оптимальных значений Rкр (этап б) между парами разных сгенерированных ранее изображений итеративно вычисляются расстояния посредством вычитания значений пикселов этих изображений. При этом на каждой итерации количество пар изображений возрастает. Количество итераций равно 300, что соответствует промежутку от 1 до 300 пар сравниваемых одновременно изображений. После этого вычисляются три значения Rкр, равные 60, 70 и 80 процентам от среднего значения получившихся при вычитании изображений расстояний.

Для проведения обучений карты Кохонена (этап в) было выбрано одинаковое для всех методов предварительной обработки данных количество эпох, равное 100. Непосредственно распознавание изображённых буквенных символов проводилось каждые 10 эпох (промежуточные тесты нейросети). Суть этого тестирования сводилась к распознаванию символов на синтезированных изображениях и получению отношения количества верных результатов к размеру всей выборки. Определение верного результата производилось путём считывания имени файла с входным изображением - непосредственно в имя файла на фиксированную позицию при генерации заносился символ, отображённый на соответствующем изображении.

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

6.2.1 Оператор Собеля

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

Для получения изображений с применённым оператором Собеля для исходных изображений были использованы соответствующие опции утилиты "convert" пакета "ImageMagick". После получения обработанных изображений над ними были проведены этапы вычислений, описанные в основном подразделе. График полученных расстояний между изображениями представлен на Рис.11

Рис.11 График расстояний между изображениями с применением оператора Собеля

Для изображений, обработанных по алгоритму Собеля, были получены следующие значения Rкр: 5, 10, 15.

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

6.2.2 Цветовая схема градаций серого

Благодаря переводу изображений в цветовую схему градаций серого можно избавиться от 75% объёма информации за счёт устранения из символьной записи значений каждого пиксела цветовых компонент, оставляя только компоненту яркости. При этом сам процесс обработки не требует значительных затрат вычислительных ресурсов, что важно в рамках работы систем реального времени. Для получения результатов скорости и качества работы алгоритма карты Кохонена синтезированные изображения были переведены в цветовую схему градаций серого с помощью соответствующего ключа утилиты "convert" пакета "ImageMagick".

Предполагалось, что по сравнению с данными, полученными после обработки изображений оператором Собеля, изображения в градациях серого будут иметь большие различия значений пикселов, что позволит увеличить значения выбираемых Rкр и, как следствие, увеличить качество обучения карты Кохонена. График расстояний, вычисленных между изображениями по алгоритму, указанному в основном подразделе, приведён на Рис.12.

Рис.12 График расстояний между изображениями в цветовой схеме градаций серого

Полученные значения Rкр на практике оказались равны 6, 10 и 15.

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

6.2.3 Необработанные изображения

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

После работы алгоритма исследования, описанного в основном подразделе, для необработанных изображений были получены расстояния между ними, график для которых приведён на Рис.13.

Рис.13 График расстояний между необработанными изображениями

Для изображений, оцененных без предварительной обработки, были получены следующие значения Rкр: 20, 30, 35.

6.2.4 Результаты исследования зависимости

Результаты исследования зависимости результатов работы разрабатываемого алгоритма от использования вышеописанных методов предварительной обработки входных данных представлены в Таблице 5 и в Таблице 6. Таблица 5 показывает результаты исследования качества обучения карты Кохонена, Таблица 6 - усреднённое время проведения пятой эпохи обучения, после которой скорость обучения отклоняется незначительно.

Таблица 5. Результаты исследования качества обучения с использованием различных методов обработки входных данных

Наименование метода обработки данных

Rкр

Качество обучения, %

Метод Собеля

5

24

10

16

15

5

Перевод в градации серого

6

67

10

52

15

27

Результаты исследования качества обучения с использованием различных методов обработки входных данных

Наименование метода обработки данных

Rкр

Качество обучения, %

Без предварительной обработки

20

69

30

46

35

41

Таблица 6

Результаты исследования времени обучения карты Кохонена с использованием различных методов обработки входных данных

Наименование метода обработки данных

Время обучения, мс

Метод Собеля

17590

Перевод в градации серого

27989

Без предварительной обработки

80703

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

6.3 Проектирование программных интерфейсов

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

разработка программного интерфейса управления клиентом на базе платформы Arduino Uno;

разработка программного интерфейса, осуществляющего считывание данных с ультразвукового дальномера и с цифровой видеокамеры на базе одноплатного компьютера Raspberry Pi;

разработка программного скрипта, осуществляющего передачу данных от клиента серверу и получение клиентом данных от сервера на базе одноплатного компьютера Raspberry Pi с последующей передачей полученного кода действия платформе Arduino Uno.

Рассмотрим подробнее каждый из упомянутых этапов.

6.3.1 Разработка программного интерфейса управления клиентом

Для управления передвижениями клиента платформа Arduino Uno получает от Raspberry Pi номер действия в виде целого числа. Номер действия считывается по смонтированному в платформе по умолчанию Serial-порту, осуществляющему также и питание платы. Далее по полученному коду действия на выходы аналоговых пинов подаются напряжения в соответствие с Таблицей 1. После каждого нового полученного значения необходима задержка для завершения переходного процесса внутри электродвигателей и преодоления клиентом некоторого расстояния. Для лучшей синхронизации по времени отклика Raspberry Pi значение задержки было выбрано равным 0.5 секунд. Весь соответствующий программный код интерфейса Arduino Uno был написан на языке C++.

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

На сегодня имеется большое число свободных реализаций программных интерфейсов по считыванию данных с цифровых датчиков и видеокамер на базе Raspberry Pi. В рамках данной работы были использованы реализации таких интерфейсов, представленные в официальной документации к плате Raspberry Pi 3, ультразвуковому дальномеру HC-SR04 и видеокамере Raspicam. Эти программные коды были объединены в единый скрипт на языке Python в рамках выполнения цикла обмена данными между клиентом и сервером. При этом никакой предварительной обработки данных на стороне клиента не ведётся - вся полученная с датчиков информация в исходном виде отправляется серверу по беспроводному каналу данных, где в дальнейшем осуществляется более быстрая предварительная обработка полученных данных.

6.3.3 Разработка программного скрипта передачи и приёма данных

Для реализации обмена данными между сервером и клиентом были реализованы серверный и клиентский TCP-сокеты (для каждой стороны - по два сокета). Для избегания путаницы в терминах в рамках данного подраздела будем называть серверную часть системы "вычислительным центром", а клиентскую часть - "исполнителем". В начале работы системы на стороне вычислительного центра запускается серверный сокет в режиме прослушивания. Сразу после этого клиентский сокет исполнителя подключается к нему и дожидается поступления данных с датчиков. При этом с цифровой камеры изображение записывается не в файл, а в поток данных (стрим), из которого формируются структуры ограниченного размера для последующей передачи данных. Как только исполнитель сформировал данные, необходимые для передачи, и передал их вычислительному центру, на стороне исполнителя в режиме прослушивания открывается серверный сокет, ожидающий кода действия от вычислительного центра. В это время вычислительный центр, получивший данные от исполнителя, запускает дообучение карты Кохонена и, получив от неё результат (код действия), передаёт его исполнителю в строковом виде. Исполнитель, считав код действия, по каналу USB-SerialPort передаёт этот код в виде целого числа плате Arduino Uno, а также записывает значения, полученные с датчиков и код действия, полученный от вычислительного центра, соответственно друг другу, в файл локальной базы знаний. После этого описанный алгоритм повторяется.

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

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

6.4 Методы проведения тестирования системы

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

а) тестирование выбранного алгоритма самообучения;

б) формирование обучающей выборки;

в) запуск системы с записью логов работы.

Рассмотрим подробнее каждый из этапов.

Для тестирования алгоритма самообучения на стороне серверной части системы (этап а) были проведены первоначальное тестирование надёжности, тестирование работоспособности и тестирование на реальных данных. Результаты первых двух видов тестирования были обеспечены выполнением шагов, описанных в разделе 7.1 При этом были получены приемлемые показатели формирования и обучения карты Кохонена. После этого необходимо было оценить работы алгоритма на данных, соответствующим реальной работе системы. Для этого был сгенерирован и нормализован массив входных значений, по структуре идентичных формируемым клиентом в процессе его работы.

Формирование обучающей выборки (этап б) происходило с использованием отдельного скрипта на языке Python, выполняемого на стороне сервера. Скрипт в режиме ожидания считывает нажатия пользователем клавиш на клавиатуре и в соответствие каждой клавише передаёт клиенту код действия. Соответствие нажатых клавиш, их кодов в таблице ANSI, а также кодов действий клиента, показаны в Таблице 7

Таблица 7. Соответствие клавиш, их кодов и кодов действий клиента при формировании обучающей выборки

Клавиша

Код клавиши в таблице ANSI

Код действия

W

\xb [119

1

Q

\xb [113

2

E

\xb [101

3

X

\xb [120

4

Z

\xb [122

5

C

\xb [99

6

S

\xb [115

0

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

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

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

время отклика серверной части системы;

время отклика клиентской части системы,

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

Полученные в результате выполнения всех этапов тестирования данные представлены в разделе 7.

Выводы к разделу 6

Для улучшения показателей качества и скорости работы необходима предварительная обработка данных;

наиболее подходящим методом предварительной обработки изображений является перевод изображений в цветовую схему градаций серого;

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

Заключение

Пример функционирования системы

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

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

Первая площадка представляет собой многокомнатное помещение с относительно большими по площади открытыми пространствами и располагающимися на одном уровне препятствиями. Приблизительный план помещения показан на Рис.14

Рис.14 План помещения-площадки для формирования обучающей выборки

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

Рис.15 Схема искусственной трассы-площадки для формирования обучающей выборки

Важно, что при накоплении обучающей выборки, а также при дальнейшем тестировании работы системы были соблюдены приблизительно равные внешние условия - одинаковое освещение и температура окружающей среды около 21°C (соблюдение температурного режима важно для однородности показаний дальномера). В таких условиях максимальное достигнутое значение пикселей изображения камеры равно 125 (при поднесении к камере белого листа бумаги освещённой стороной).

Во время обучения управление клиентом производилось напрямую с сервера, с клавиатуры. Посредством скрипта на языке Python код нажатой клавиши транслировался в номер действия, который затем передавался клиенту и обрабатывался в рамках выполнения описанного в разделе 6.3 скрипта. При этом структуры, описывающие ситуации и действия, переданные сервером, записывались соответственно в бинарные файлы в локальную файловую систему, формируя обучающие выборки. Оценка необходимого в каждой ситуации действия производилась визуально со стороны оператора сервера. Основное направление движения клиента - движение вперёд, перед собой. Остальные действия применялись в ситуациях, когда движение вперёд невозможно без столкновения. В случае же, если клиент оказался на очень близком перед собой расстоянии от препятствия, осуществлялось движение назад. Таким образом, в обучающих выборках преобладали действия "движение вперёд" и "движение вперёд с поворотом". Движение назад и остановка встречаются в меньших количествах, но были дополнительно синтезированы ситуации, в которых клиенту необходимо отъехать назад - это повысило качество обучения и дальнейшее поведение системы в подобных ситуациях. Каждая выборка записывалась до достижения объёма выходного файла, приблизительно равного 200 МБ, что соответствует примерно 500 выполненным действиям. Таким образом для каждой площадки было получено по 10 обучающих файлов. После этого файлы использовались в качестве входных параметров для алгоритма самообучения.

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

Рис.16 Средние расстояния между кластерами и текущей ситуацией

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

После того, как был получен набор из обучающих выборок, можно обучить нейросеть. Для этого были определены параметры нейросети в пункте 6.1 В среднем на одну эпоху уходило по 400 секунд, т.е. весь поступивший набор обучающих данных (20 выборок) был обработан примерно за 220 часов. Результатом обучения нейросети является обученная нейросеть, которая способна определить, к какому кластеру принадлежит ситуация и выдать его номер.

В ходе обучения велась статистика попадания определённого действия в кластер. В итоге эта информация была преобразована в строгую привязку номера кластера в действие. Полученная таким образом база знаний была записана в отдельный файл и сохранена в файловой системе клиента. Копия файла была сохранена на сервере. Во время работы системы (клиента вместе с сервером) в случае столкновения клиента с незнакомой ситуацией нейросеть дообучалась на сервере и возвращала необходимое действие клиенту, которое заносилось в файлы базы знаний соответственно ситуации.

Для результирующего тестирования клиент с уже имеющейся базой знаний был установлен в следующие ситуации:

а) по бокам и впереди от клиента нет препятствий, улавливаемых камерой и дальномером, соответственно;

б) препятствие находится перед клиентом на расстоянии 45 сантиметров;

в) препятствие находится перед клиентом на расстоянии 10 сантиметров;

д) сплошное препятствие находится справа от клиента;

е) сплошное препятствие находится слева от клиента;

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

В соответствии с описанными ситуациями были получены следующие реакции клиента, соответственно:

а) клиент двигался вперёд;

б) клиент двигался либо вперёд, либо прямо и в сторону (без столкновений);

в) клиент двигался назад, назад и в сторону (без столкновений), реже - вперёд и в сторону (столкновение);

д) клиент двигался вперёд, либо вперёд и влево (без столкновений);

е) клиент двигался вперёд (без столкновений);

ж) клиент двигался вперёд (без столкновений), реже - осуществлял попытку повернуть, что приводило к зацикленным поворотам на одном месте.

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

По результатам тестирования нейросети на одной из обучающих выборок видно, что верное решение принимается в 93% случаев. Отсутствие полностью правильных решений объясняется тем, что обучающая выборка генерировалась путём ручного управления человеком, который в некоторых ситуациях мог допускать ошибки в управлении, соответственно, нет гарантии, что обучающая выборка верна на 100%.

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

Полученные результаты

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

В результате проведения обучения системы и её финального тестирования были получены следующие результаты:

среднее время отклика клиентской части системы - 0.45 секунд;

среднее время отклика серверной части системы - 0.47 секунд;

среднее время обучения системы для входных данных объёмом 200 МБ - 23 минуты;

процент верных действий клиента - 83%.

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

Выводы

Все реализованные структурные и технические решения позволяют системе функционировать надлежащим образом;

реализация вычислительной части системы (сервера), включающей нормализацию входных данных, позволяет осуществлять модульное подключение к ней разнообразных клиентских систем и устройств, осуществляющих обмен данными разного формата, включая параллельную работу нескольких устройств с разным набором функций;

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

перед выполнением этапа обучения системы важно выполнение этапа предварительной обработки данных, заключающейся в их дискретизации и избавлению от избыточных объёмов данных;

алгоритм самообучения не нуждается в изменениях при смене области применения - это проверено опытным путём на задаче распознавания буквенных символов на изображении и на реальных поставленных в рамках этой работы задачах.


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.