Научная статья на тему 'ДИАГНОСТИКА ПНЕВМОНИИ ПО РЕНТГЕНОВСКИМ СНИМКАМ С ПОМОЩЬЮ СВЕРТОЧНЫХ НЕЙРОННЫХ СЕТЕЙ'

ДИАГНОСТИКА ПНЕВМОНИИ ПО РЕНТГЕНОВСКИМ СНИМКАМ С ПОМОЩЬЮ СВЕРТОЧНЫХ НЕЙРОННЫХ СЕТЕЙ Текст научной статьи по специальности «Компьютерные и информационные науки»

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

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

Актуальность и цели. Поднимается проблема диагностики заболеваний, для решения которой предлагается использовать методы машинного обучения, а именно разработать нейронную сеть для диагностики пневмонии по рентгеновским снимкам. Материалы и методы. Для распознавания пневмонии на рентгеновских снимках применялась сверточная нейронная сеть. Разработка программы диагностики пневмонии проводилась на языке Рythоn. В программе использовались функции из трех библиотек: mаtрlоtlib, kеrаs_mеtriсs и Kеrаs. В данной работе была применена аугментация данных и метод регуляризации drороut для преодоления эффекта переобучения нейронной сети. Результаты. Обучение нейронной сети проводилось в течение 20 эпох и время ее обучения составило 35 мин. В результате тестирования модели сверточной нейронной сети, в выходном слое которой для активации нейронов использовалась сигмоидальная функция активации, а в качестве метода оптимизации - алгоритм RМSРrор, были получены наилучшие значения показателей точности и полноты: рrесisiоn - 89 %, ассurасy - 82 % и rесаll - 93 %. Выводы. При тестировании нейронная сеть показала точность распознавания пневмонии, равную 89 %. И этот результат превышает значения показателя рrесisiоn, которые были получены в известных работах.

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

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

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

DIAGNOSIS OF PNEUMONIA BY X-RAY IMAGES USING CONVOLUTIONAL NEURAL NETWORKS

Background. This paper raises the problem of diseases diagnostics. In order to solve the problem it is proposed to use machine learning methods, namely, to develop a neural network for diagnosing pneumonia from X-rays. Materials and methods. Methods. A convolutional neural network was used to recognize pneumonia in X-ray images. The development of a program for diagnosing pneumonia was carried out in Python. The program uses functions from three libraries: matplotlib, keras_metrics, and Keras. In this paper, we used data augmentation and the dropout regularization method to overcome the effect of neural network overfitting. Results . The neural network was trained for 20 epochs and its training time was 35 minutes. As a result of testing the convolutional neural network model in the output layer of which the sigmoidal activation function was used to activate neurons, the best values of accuracy and completeness indicators were obtained as an optimization method: precision - 89 %, accuracy - 82 % and recall - 93 %. Conclusions. When tested, the neural network showed 89 % accuracy in recognizing pneumonia. And this result exceeds the values of the precision index which were obtained in well-known works.

Текст научной работы на тему «ДИАГНОСТИКА ПНЕВМОНИИ ПО РЕНТГЕНОВСКИМ СНИМКАМ С ПОМОЩЬЮ СВЕРТОЧНЫХ НЕЙРОННЫХ СЕТЕЙ»

УДК 004.032.26

doi:10.21685/2227-8486-2021-2-7

ДИАГНОСТИКА ПНЕВМОНИИ ПО РЕНТГЕНОВСКИМ СНИМКАМ С ПОМОЩЬЮ СВЕРТОЧНЫХ НЕЙРОННЫХ СЕТЕЙ

А. А. Арбузова

Пензенский государственный университет, Пенза, Россия [email protected]

Аннотация. Актуальность и цели. Поднимается проблема диагностики заболеваний, для решения которой предлагается использовать методы машинного обучения, а именно разработать нейронную сеть для диагностики пневмонии по рентгеновским снимкам. Материалы и методы. Для распознавания пневмонии на рентгеновских снимках применялась сверточная нейронная сеть. Разработка программы диагностики пневмонии проводилась на языке Python. В программе использовались функции из трех библиотек: matplotlib, keras_metrics и Keras. В данной работе была применена аугментация данных и метод регуляризации dropout для преодоления эффекта переобучения нейронной сети. Результаты. Обучение нейронной сети проводилось в течение 20 эпох и время ее обучения составило 35 мин. В результате тестирования модели сверточной нейронной сети, в выходном слое которой для активации нейронов использовалась сигмоидальная функция активации, а в качестве метода оптимизации - алгоритм RMSProp, были получены наилучшие значения показателей точности и полноты: precision - 89 %, accuracy - 82 % и recall - 93 %. Выводы. При тестировании нейронная сеть показала точность распознавания пневмонии, равную 89 %. И этот результат превышает значения показателя precision, которые были получены в известных работах.

Ключевые слова: нейронные сети, сверточные нейронные сети, глубокое обучение, машинное обучение, диагностика пневмонии, распознавание изображений

Для цитирования: Арбузова А. А. Диагностика пневмонии по рентгеновским снимкам с помощью сверточных нейронных сетей // Модели, системы, сети в экономике, технике, природе и обществе. 2021. № 2. С. 107-114. doi:10.21685/2227-8486-2021-2-7

DIAGNOSIS OF PNEUMONIA BY X-RAY IMAGES USING CONVOLUTIONAL NEURAL NETWORKS

A.A. Arbuzova

Penza State University, Penza, Russia [email protected]

Abstract. Background. This paper raises the problem of diseases diagnostics. In order to solve the problem it is proposed to use machine learning methods, namely, to develop a neural network for diagnosing pneumonia from X-rays. Materials and methods. Methods. A convolutional neural network was used to recognize pneumonia in X-ray images. The development of a program for diagnosing pneumonia was carried out in Python. The program uses functions from three libraries: matplotlib, keras_metrics, and Keras. In this paper, we used data augmentation and the dropout regularization method to overcome the ef-

© Арбузова А. А., 2021. Контент доступен по лицензии Creative Commons Attribution 4.0 License / This work is licensed under a Creative Commons Attribution 4.0 License.

fect of neural network overfitting. Results. The neural network was trained for 20 epochs and its training time was 35 minutes. As a result of testing the convolutional neural network model in the output layer of which the sigmoidal activation function was used to activate neurons, the best values of accuracy and completeness indicators were obtained as an optimization method: precision - 89 %, accuracy - 82 % and recall - 93 %. Conclusions. When tested, the neural network showed 89 % accuracy in recognizing pneumonia. And this result exceeds the values of the precision index which were obtained in well-known works.

Keywords: neural networks, convolutional neural networks, deep learning, machine learning, diagnosis of pneumonia, image recognition

For citation: Arbuzova A.A. Diagnosis of pneumonia by X-ray images using convolutional neural networks. Modeli, sistemy, seti v ekonomike, tekhnike, prirode i obshchestve = Models, systems, networks in economics, technology, nature and society. 2021;2:107-114. (In Russ.). doi:10.21685/2227-8486-2021-2-7

Введение

В связи с информатизацией общества в современном мире очень активно развивается сфера информационных технологий. IT-технологии применяются во всех областях жизнедеятельности человека. Особенно сейчас популярны искусственный интеллект и машинное обучение. Они являются инструментом для решения огромного количества задач. Например, методы искусственного интеллекта и машинного обучения можно применять для диагностики заболеваний [1-2]. В настоящее время создается очень много медицинских систем на основе машинного обучения, в том числе и в России, которые позволят облегчить работу врачей. Например, в России разработана система Celsus [3], которая позволяет производить поиск патологий по рентгеновским снимкам или по снимкам - результатам компьютерной томографии. На данный момент в России создано около 30 систем [3], где используются методы искусственного интеллекта, с помощью которых можно диагностировать заболевания. Применение этих систем в медицине может существенно ускорить диагностику заболеваний у пациентов. Из-за распространения COVID-19 возросла загруженность врачей. Сейчас каждая минута на счету, поэтому очень важно быстро проводить диагностику пациентов, в чем может помочь использование методов искусственного интеллекта и машинного обучения. Важнейшим современным инструментом машинного обучения, применяемого в медицинской диагностике, являются нейронные сети.

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

чтобы быстро поставить правильный диагноз заболевшему. Это требует больших временных затрат и может привести к ошибкам, поэтому с целью решения этих проблем можно использовать для диагностики пациентов нейронные сети. Для диагностики заболеваний по медицинским изображениям лучшим инструментом являются сверточные нейронные сети [1-2].

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

В основном архитектура сверточных нейронных сетей включает в себя слои трех основных видов [4-6]: сверточные слои, слои субдискретизации (пуллинга) и полносвязные слои. Но иногда сверточные нейронные сети могут состоять из слоев четырех видов, к уже перечисленным видам добавляются слои прореживания. Сверточные сети работают с тензорами. Тензоры в сверточных сетях - это трехмерные массивы матриц чисел. Рентгеновское изображение на входе сети (входная карта) имеет размеры 150x150 пикселей. Пиксель описывается целым числом от 0 до 255. Входные значения пикселей нормализуются в диапазон от 0 до 1. Сверточный слой представляет собой набор ядер (фильтров). Ядра являются небольшими матрицами весовых коэффициентов, настраиваемых в процессе обучения сети. Ядро с заданным шагом обходит соответствующую карту предыдущего сверточного слоя, поэлементно умножая и суммируя элементы карты и ядра. Результат записывается в карту текущего слоя. Количество карт признаков слоя называется глубиной слоя. За сверточным слоем располагается слой субдискретизации (пуллинга). Чаще всего применяется MaxPooling. Для этого карта признаков разделяется на ячейки размером ядра субдискретизирующего слоя (обычно, 2x2), из каждой ячейки выбирается максимальное значение. К полученным картам применяется функция активации нейронной сети, как правило ReLU. В процессе преобразования количество карт признаков увеличивается, а их размер уменьшается. В результате формируется вектор признаков, который обрабатывается полносвязными слоями, решающими задачу классификации.

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

Материал и методика

В данной работе для обучения, тестирования и проверки сверточной нейронной сети использовалась база рентгеновских снимков Сhest Х-Ray Images (Pneumonia). Данная база данных размещена на сайте Kaggle [7]. Рентгеновские снимки в базе Œest Х-Ray Images (Pneumonia) представлены в виде изображений разного размера в формате JPEG, поэтому, чтобы привести

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

Таблица 1

Структура базы рентгеновских снимков

Название набора Количество снимков NORMAL Количество снимков PNEUMONIA Всего

Обучающий 1340 3875 5215

Тестовый 234 390 624

Контрольный 8 8 16

Всего 1582 4273 5855

Пример рентгеновских снимков из базы Сhest Х-Ray Images (Pneumonia) приведен на рис. 1.

Рис. 1. Пример изображений из обучающего набора

С целью разработки программы для выявления пневмонии на рентгеновских снимках использовался язык программирования Python, нейросете-вая библиотека Keras версии 2.3.1 [8], а также библиотеки matplotlib и keras_metrics. Функции из библиотеки Keras применялись для создания свер-точной нейронной сети. Из библиотеки keras_metrics использовались такие метрики, как binary_precision и binary_recall. Функция binary_recall служит для вычисления процента положительных примеров, правильно определенных классификатором, а метрика binary_precision - для вычисления точности предсказания положительного исхода. Библиотека matplotlib использовалась для вывода графиков точности и потерь.

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

Таблица 2

Структура сверточной нейронной сети

Номер слоя Тип слоя нейронной сети Параметры слоя нейронной сети

1 Сверточный слой 1. Функция активации - ReLU. 2. Глубина выходных карт признаков - 32. 3. Размер ядра - 3*3

2 Субдискретизирующий слой 1. Операция - MaxPooling. 2. Размер ядра - 2*2

3 Сверточный слой 1. Функция активации - ReLU. 2. Глубина выходных карт признаков - 64. 3. Размер ядра свертки - 3*3

4 Субдискретизирующий слой 1. Операция - MaxPooling. 2. Размер ядра - 2*2

5 Сверточный слой 1. Функция активации - ReLU. 2. Глубина выходных карт признаков - 128. 3. Размер ядра свертки - 3*3

6 Субдискретизирующий слой 1. Операция - MaxPooling. 2. Размер ядра - 2*2

7 Сверточный слой 1. Функция активации - ReLU. 2. Глубина выходных карт признаков - 128. 3. Размер ядра свертки - 3*3

8 Субдискретизирующий слой 1. Операция - MaxPooling. 2. Размер ядра - 2*2

9 Слой dropout Вероятность отключения нейрона предыдущего слоя - 0,5

10 Полносвязный слой 1. Функция активации - ReLU. 2. Количество нейронов в слое - 512

11 Полносвязный слой 1. Функция активации - sigmoid. 2. Количество нейронов в слое - 1

В одиннадцатом (выходном) слое в качестве функции активации нейрона применяется сигмоидальная функция активации (антисимметричная логистическая функция):

f (s ) =

1 - e-s 1 + e~s

Функция активации для выходного слоя была подобрана экспериментально.

В качестве функции потерь применяется функция бинарной перекрестной энтропии (binary_crossentropy) [8]:

1 N

HP (q ) = -N I у, !og (p (yI )) + (1 -У, ))og (1 -p ()).

1 * i=1

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

Для настройки сверточной нейронной сети был выбран алгоритм оптимизации первого порядка, основанный на применении коэффициента ослабления Root Mean Square Propagation (RMSProp) [8]:

, (*+0 = p, (k )+(l - p )g ()) g ()),

м,(к+1) = м(кпя (к >)./>/.(к+1)+ 8,

где в - коэффициент ослабления; ® - поэлементное умножение; мМ-к) - вектор градиента; п - подбираемый коэффициент; 8 используется для того, чтобы избежать деления на ноль, обычно 8 ~ 10-10; ./ - поэлементное деление.

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

Эпохи Эпохи

Рис. 2. Графики точности и потерь

Для того, чтобы преодолеть эффект переобучения нейронной сети, было увеличено количество входных данных и применен метод регуляризации dropout [8]. Увеличение количества исходных изображений было проведено благодаря применению аугментации данных [9]. Аугментация данных - это метод, который использует различные преобразования для увеличения размера выборки. В случае с изображениями в качестве таких преобразований применяются поворот, сдвиг, сжатие и растяжение вдоль осей, масштабирование и другие преобразования. В данной работе использовались эти четыре преобразования. А для проведения этих преобразований применялась функция ImageDataGenerator.

Результаты

Тестирование разработанной программы проводилось на компьютере с характеристиками: объем оперативной памяти - 8 Гб, процессор - Quad-Core Processor А10-5757М APU with Radeon HD, частота процессора - 2,5 ГГц.

При тестировании сверточной нейронной сети были рассчитаны три показателя: precision, accuracy и recall. Показатель precision (точность) позволяет увидеть, сколько процентов рентгеновских снимков из тестовой выборки, которые были отнесены к классу PNEUMONIA, действительно ему принадлежат. Показатель accuracy (точность) определяется как число правильно классифицированных снимков, отнесенное к их общему числу. С помощью третьего показателя (полноты) можно определить процент людей, которые больны пневмонией и которые были распознаны правильно.

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

Таблица 3

Результаты экспериментов

Параметры Результаты эксперимента

Функция активации Метод оптимизации Время обучения нейронной сети, мин Accuracy Precision Recall

1. Softmax Adam (adaptive moment estimation) 40 62,35 62,4 69,4

2. Sigmoid Adam 42 82,12 89,7 82,35

3. Sigmoid RMSProp 35 82,03 89,9 93,6

4. Softmax RMSProp 40 62,6 62,7 62,5

Исходя из результатов этих экспериментов был сделан вывод, что в качестве функции активации выходного слоя сверточной нейронной сети лучше использовать функцию sigmoid, а в качестве метода оптимизации -алгоритм RMSProp. Лучшие значения показателей точности, полученные в результате обучения нейронной сети с выбранными параметрами, равны: precision - 89 %, accuracy - 82 % и recall - 93 %, т.е. диагнозы 89 % людей из тестовой выборки были определены правильно и данный результат превышает показатели, которые были получены в работах [7, 10].

Заключение

В результате проведенного исследования была разработана программа диагностики пневмонии при помощи рентгеновских снимков. Был проведен ряд экспериментов по подбору параметров (количество слоев, функция активации выходного слоя сети и алгоритм оптимизации) для обучения нейронной сети. Обучение сверточной нейронной сети проводилось на расширенном, с помощью аугментации данных, обучающем наборе рентгеновских снимков. Время обучения этой сети составило 35 мин. А количество эпох, в течение которых нейронная сеть обучалась, равно 20. Наилучшие результаты распознавания нейронная сеть показала при проведении третьего эксперимента. В результате тестирования третьей модели была получена точность распознавания пневмонии - 89 %. И этот результат превышает показатели, полученные в известных работах.

Список литературы

1. Cleophas T. J., Zwinderman A. H. Machine learning in medicine: a complete overview. Springer, 2015. 516 p.

2. Artificial intelligence and machine learning for COVID-19 / ed. by F. Al-Turjman. Springer International Publishing, 2021. 266 p.

3. Гусев А. Обзор Российских систем искусственного интеллекта для здравоохранения. URL: https://webiomed.ai/blog/obzor-rossiiskikh-sistem-iskusstvennogo-intellekta-dlia-zdravookhraneniia/?utm_source = direct&utm_medium = email&utm_ campaign = webiomed (дата обращения: 16.04.2021).

4. Аггарвал Ч. Нейронные сети и глубокое обучение. СПб. : Диалектика, 2020. 752 с.

5. Жерон О. Прикладное машинное обучение с помощью Scikit-Learn, Keras и Ten-sorFlow: концепции, инструменты и техники для создания интеллектуальных систем. СПб. : Диалектика, 2020. 1040 с.

6. Гудфеллоу Я., Бенджио И., Курвиль А. Глубокое обучение. М. : ДМК Пресс, 2018. 652 с.

7. Chest X-Ray Images (Pneumonia). URL: https://www.kaggle.com/paultimothy-mooney/chest-xray-pneumonia (дата обращения: 13.02.2021).

8. Шолле Ф. Глубокое обучение на Python. СПб. : Питер, 2018. 400 с.

9. Это нужно знать: Ключевые рекомендации по глубокому обучению (Часть 1). URL: datareveiw.info/article/eto-nuzno-znat-klyuchevyie-rekomendatsii-po-glubokomu-obucheniyu-chast-1/ (дата обращения: 07.02.2021).

10. Varshni D., Thakral K., Agarwal L. [et al.]. Pneumonia detection using CNN based feature extraction // 2019 IEEE International Conference on Electrical, Computer and Communication Technologies (ICECCT). URL: https://ieeexplore.ieee.org/document/ 8869364 (дата обращения: 30.05.2020).

References

1. Cleophas T.J., Zwinderman A.H. Machine learning in medicine: a complete overview. Springer, 2015:516.

2. Al-Tuijman F. (ed.). Artificial intelligence and machine learning for COVID-19. Springer International Publishing, 2021:266.

3. Gusev A. Obzor Rossiyskikh sistem iskusstvennogo intellekta dlya zdravookhraneniya = Review of Russian artificial intelligence systems for health care. (In Russ.). Available at: https://webiomed.ai/blog/obzor-rossiiskikh-sistem-iskusstvennogo-intellekta-dlia-zdravookhraneniia/?utm_source = direct&utm_medium = email&utm_ campaign = webiomed (accessed 16.04.2021).

4. Aggarval Ch. Neyronnye seti i glubokoe obuchenie = Neural networks and deep learning. Saint-Petersburg: Dialektika, 2020:752. (In Russ.)

5. Zheron O. Prikladnoe mashinnoe obuchenie spomoshch'yu Scikit-Learn, Keras i Ten-sorFlow: kontseptsii, instrumenty i tekhniki dlya sozdaniya intellektual'nykh system = Applied Machine Learning with Scikit-Learn, Keras and Ten-sorFlow: Concepts, Tools, and Techniques for Building Intelligent Systems. Saint-Petersburg: Dialektika, 2020:1040. (In Russ.)

6. Gudfellou Ya., Bendzhio I., Kurvil' A. Glubokoe obuchenie = Deep learning. Moscow: DMK Press, 2018:652. (In Russ.)

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

7. Chest X-Ray Images (Pneumonia). Available at: https://www.kaggle.com/paultimo-thymooney/chest-xray-pneumonia (accessed 13.02.2021).

8. Sholle F. Glubokoe obuchenie na Python = Deep Learning in Python. Saint-Petersburg: Piter, 2018:400. (In Russ.)

9. Eto nuzhno znat': Klyuchevye rekomendatsii po glubokomu obucheniyu (Chast' 1) = You Need to Know: Key Recommendations for Deep Learning (Part 1). (In Russ.). Available at: datareveiw.info/article/eto-nuzno-znat-klyuchevyie-rekomendatsii-po-glubokomu- obucheniyu-chast-1/ (accessed 07.02.2021).

10. Varshni D., Thakral K., Agarwal L. [et al.]. Pneumonia detection using CNN based feature extraction. 2019 IEEE International Conference on Electrical, Computer and Communication Technologies (ICECCT). Available at: https://ieeexplore.ieee.org/ document/8869364 (accessed 30.05.2020).

Информация об авторах /Information about the authors

Анастасия Андреевна Арбузова

магистрант,

Пензенский государственный университет (Россия, г. Пенза, ул. Красная, 40) E-mail: [email protected]

Anastasia A. Arbuzova

Master degree student, Penza State University (40 Krasnaya street, Penza, Russia)

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