Ссылка на вторую часть этого тематического исследования

Ссылка на часть 3 этого кейса

Понимание проблемы и предыстории

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

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

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

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

Набор данных:

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

Звуки кашля:

Основные дыхательные пути — бронхи и трахеи — очищаются от выделяемых или вдыхаемых частиц с помощью сильного рефлекторного механизма, называемого кашлем. В нормальных ситуациях рефлекс следует стандартному процессу от вдоха к выдоху. Это часто вызывается физическими и химическими воздействиями. Создается грудное давление, которое высвобождается со взрывом звука и жидкости. Этот выброс под давлением вызывает движение жидкости, турбулентность воздуха и вибрацию массы, вызывая отчетливый звук. Частота и широкополосность этого звука зависят от ряда факторов, таких как диаметр дыхательных путей, плотность и сила выдыхаемого воздуха. Звук состоит из трех временных фаз — взрывной, промежуточной и звонкой. Частотный спектр лежит в диапазоне от 500 герц до 3,8 кГц. Этого достаточно для записи звука кашля с помощью микрофона — ключевое наблюдение для нашего тематического исследования. Легочные заболевания, такие как COVID и пневмония, изменяют физическую структуру дыхательных путей, что позволяет нам идентифицировать их по звуку кашля. Уже проведено много положительных исследований по точной идентификации таких заболеваний, как коклюш, ХОБЛ (хроническая обструктивная болезнь легких), туберкулез, астма и пневмония, с помощью звуков кашля.

Реальные проблемы и ограничения

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

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

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

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

Набор данных можно скачать ниже:

https://data.mendeley.com/datasets/ww5dfy53cw/1

#class label distribution
x.plot.bar()

#visualise the wave file
import librosa as lb
import librosa.display
a,b = lb.load('/gdrive/MyDrive/Kaggle/trial_covid/--U7joUcTCo_ 0.000_ 10.000.wav', mono=True)
librosa.display.waveplot(y=a, sr=b, max_points=100000.0, color='r', alpha=0.5)

EDA, извлечение признаков и понимание признаков

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

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

Спектрограмма:

Спектрограммы — это визуализация звука, метод просмотра звуковой волны в виде изображения. Частоты, встроенные в звук, образуют спектр. Спектр — это способ увидеть звук в частотной области. Спектрограмма имеет эти цвета, которые представляют спектр частот. Каждый цвет представляет силу или амплитуду частоты. Таким образом, он представляет спектр частот звуковой волны во времени в виде цветных полос. Более светлые цвета представляют собой высокие концентрации частот, а более темные цвета означают низкие концентрации или их отсутствие.

Спектрограммы создаются путем разделения звука на временные окна и преобразования Фурье в каждом из окон. Каждое окно конвертируется в децибелы для лучшего результата.

Интересно отметить, что звук хранится в памяти в виде ряда чисел, где числа — это амплитуды. Если мы возьмем 100 семплов в секунду, 1-секундный звук будет храниться как серия из 100 чисел.

#Plot wave and its spectrogram
y,sr = librosa.load('trial_covid/--U7joUcTCo_ 0.000_ 10.000.wav', mono=True)
librosa.display.waveplot(y=y, sr=sr, max_points=100000.0, color='b', alpha=0.5)
print('\n\n')
#short time fourier transform of y, taking absolute values.
y_t = np.abs(librosa.stft(y))
#conversion to decibles
y_t_d = librosa.amplitude_to_db(y_t, ref=np.max)
#plotting
figure, ax = plt.subplots(figsize=(6,5))
spectrogram = librosa.display.specshow(y_t_d, sr=sr, y_axis='linear', x_axis='time', ax=ax )
ax.set(title='spectrogram')
figure.colorbar(spectrogram)

Коэффициент пересечения нуля:

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

#Visualizing zero crossing
#pad false means, y[0] will not be considered as a zero crossing
y, sr = librosa.load('trial_covid/--U7joUcTCo_ 0.000_ 10.000.wav', mono=True)
#zooming into the wave
plt.plot(y[8000:8015])
zero_cross_count = librosa.zero_crossings(y[8000:8015], pad=False)

На этом участке волны есть 2 пересечения.

Спектральный центроид:

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

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

# Spectral centroid
# t frames of the spectrogram will give t centroids.
import sklearn #need for normalization
spec_cent = librosa.feature.spectral_centroid(y,sr=sr)[0]
#frames for visualization
l = range(len(spec_cent))
frames = librosa.frames_to_time(l)
spec_cent_nor = sklearn.preprocessing.minmax_scale(spec_cent, axis=0)
librosa.display.waveplot(y,sr=sr,alpha=0.5)
plt.plot(frames, spec_cent_nor, color='b')

Спектральный спад:

Спектральный спад — это частота, ниже которой находится определенный процент общей спектральной энергии. Это настраивается. Например, на частоте «F» 90 процентов спектральной энергии находится ниже F.

#spectral rolloff - similar to centroid in implementation.
spec_rolloff = librosa.feature.spectral_rolloff(y,sr=sr)[0]
spec_rolloff_nor = sklearn.preprocessing.minmax_scale(spec_rolloff, axis=0)

Мел-спектрограммы:

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

Для натурального логарифма, использованного выше, коэффициент равен 1127. Если используется логарифм по основанию 10, коэффициент изменится. Шкала мел сужается по шкале герц по мере увеличения частоты. Другими словами, для более высоких частот в герцах значения mel будут изменяться очень медленно, что-то вроде того, что происходит на сигмовидной кривой. Это аналогично восприятию звука людьми. Людям легче различать звуки на более низких частотах, но гораздо сложнее на более высоких частотах. Например, человеку было бы легче различить звук с частотой 150 Гц и звук с частотой 250 Гц, чем между 1100 и 1200 Гц. Несмотря на то, что оба набора звуков различаются на одинаковую величину, мы воспринимаем их по-разному. Это то, что делает шкалу мела полезной в машинном обучении, поскольку она ближе к человеческому восприятию, когда речь идет о звуке. Шкала мела — это нелинейное преобразование шкалы герц путем разделения шкалы герц на элементы и преобразования их в соответствующие элементы шкалы мела.

Как вы можете видеть на приведенном выше рисунке, расстояние между частотами уменьшается по шкале мела по мере увеличения частоты, что очень похоже на человеческое восприятие звука. Более низкие частоты имеют больший разрыв в mel, в то время как более высокие частоты имеют меньший разрыв, например, между 0 и 2000 и от 6000 до 8000.

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

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

Db = 20 * log10 (амплитуда)

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

#create mel spectrograms and conver to decibel scale.
y_spec = librosa.amplitude_to_db(librosa.feature.melspectrogram(y))
#plot mel spectrogram
figure, ax = plt.subplots(figsize=(10,5))
ax.set(title = 'mel spectrogram' )
f= librosa.display.specshow(y_spec,ax=ax)
plt.colorbar(f)

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

Мел-частотные кепстральные коэффициенты (MFCC) широко используются для обработки аудиосигналов, особенно речи. Таким образом, это делает его кандидатом на роль в нашем тематическом исследовании. Дискретное косинусное преобразование используется для значений спектрограммы мела для генерации MFCC. Количество коэффициентов является гиперпараметром и настроено на проблему. MFCC успешно применяются для решения задач распознавания голоса. Значение по умолчанию библиотеки Libros равно 20. MFCC берет наиболее важные функции из спектрограммы, которая определяет качество звука, воспринимаемого людьми.

#Visualising Mel frequecy cepstral coeffs
#create MFCC
y_mfcc = librosa.feature.mfcc(y)
#plot MFCC
figure, ax = plt.subplots(figsize=(10,5))
ax.set(title = 'MFCCS' )
f= librosa.display.specshow(y_mfcc,ax=ax,x_axis='time')
plt.colorbar(f)

Хроматограммы и частоты цветности:

Высота тона — это метрика высоты звука. Высокий звук имеет высокий тон, низкий звук имеет низкий тон. Существует семь классов высоты тона, к которым принадлежит каждый звук.

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

#chroma filter banks
# taking 'sr' and 'n_fft' as 22050 and 4096 respectively
chroma_filter_bank = librosa.filters.chroma(22050 , 4096)
librosa.display.specshow(chroma_filter_bank)

#chroma features of our sound wave
y_chroma = librosa.feature.chroma_stft(y, sr=sr)
librosa.display.specshow(y_chroma, y_axis='chroma', x_axis='time')

Вывод:

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

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

Ссылки:

  1. Высокоточная классификация кашля COVID-19 с использованием кепстральных коэффициентов Mel-частоты и сверточной нейронной сети с вариантом использования для умных домашних устройств Dunne et al. Ссылка здесь
  2. Coswara — База данных звуков дыхания, кашля и голоса для диагностики COVID-19, автор Sharma et al. Ссылка здесь
  3. Диагностика искусственного интеллекта COVID-19 с использованием только записей кашля Laguarta et al. Ссылка здесь