• 发文
  • 评论
  • 微博
  • 空间
  • 微信

如何使用卷积神经网络从梅尔谱图检测 COVID-19 咳嗽

磐创AI 2021-09-22 08:57 发文

新冠肺炎COVID-19(2019 年冠状病毒病)是一种会导致人类呼吸系统问题、体温超过 38°C 的发烧、呼吸急促和咳嗽的疾病。即使是这种疾病也会导致肺炎死亡。在 COVID-19 之前被认为是正常的症状之一是咳嗽。现在听到周围的人咳嗽,不禁让人怀疑咳嗽是正常的还是感染了 COVID-19 的人的咳嗽。什么是梅尔谱图?梅尔谱图是转换为梅尔标度的谱图。那么,什么是频谱图和梅尔音阶?频谱图是信号频谱的可视化,其中信号的频谱是信号包含的频率范围。梅尔音阶模仿人耳的工作方式,研究表明人类不会在线性音阶上感知频率。与较高频率相比,人类更擅长检测较低频率的差异。

深度学习深度学习是人工智能的一部分,它使计算机从数据中学习。深度学习中使用的方法之一是人工神经网络,它是一种模拟人类神经网络工作的计算模型。卷积神经网络卷积神经网络是深度学习中的一种技术,用于解决图像处理和识别问题。有关卷积神经网络理论的更多详细信息,请参阅博客https://www.analyticsvidhya.com/blog/category/deep-learning/数据集条件使用的语音数据可以在https://github.com/virufy/virufy-data下载。使用的声音数据是 COVID-19 阳性和 COVID-19 阴性的咳嗽声音记录。此数据为 mp3 格式,具有采样率为 48000 Hz 的单声道,并已进行分段以使其具有相同的时间。但是,系统可以使用这些数据来识别感染 COVID-19 的人的咳嗽声吗?mp3音频格式需要转换成wav格式。为什么?因为语音识别中处理的是频率波和幅度波,而wav是波(waveform)形式的音频格式。因此,需要对音频进行预处理以将格式从mp3 更改为wav 格式。完成这一步后,就可以得到光谱图mel。从音频中获取图像梅尔频谱图软件 Audacity 可用于将 mp3 音频格式转换为 wav 格式。然后使用python编程语言中的librosa包读取wav格式的音频。通过使用python自带的librosa包来分析音频,下采样得到的音频数据48000Hz的采样率遵循librosa包的默认采样率,这样音频的采样率就变成了22050Hz。可以在librosa 文档中查看有关如何获取 Mel 频谱图的文档获取文档:http://librosa.org/doc/main/generated/librosa.feature.melspectrogram.html#librosa.feature.melspectrogram构建模型让我们使用 Python 和 Google Colab 制作一个系统,该系统可以使用卷积神经网络从 Mel Spectrogram 中识别来自 COVID-19 的感染者和非感染者的咳嗽声。第 1 步   导入库Python 提供了使编码更容易的包。使用的包:用于数值分析的 Numpy用于可视化的 Matplotlib 和 Seaborn用于深度学习的 Tensorflow 和 Kerasimport numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import tensorflow as tf
from sklearn.metrics import confusion_matrix
import seaborn as sns
from keras.preprocessing import image
from tensorflow.keras.models import load_model
第 2 步  从谷歌驱动器加载梅尔谱图图像数据集path_dir = './drive/My Drive/Audiodata/Cough_Covid19/mel_spectrogram/'
注意:必须安装谷歌驱动器才能从谷歌驱动器加载数据第 3 步 使用图像数据生成器图像数据生成器用于对图像数据进行预处理。Rescale根据给定的缩放因子调整图像大小,并将数据拆分为训练和验证数据,其中验证数据取自总频谱图图像数据的 20%。梅尔谱图图像的总数据集为 121,即验证数据为 23 个数据。datagen = ImageDataGenerator(
                   rescale=1./255,
                   validation_split = 0.2)
train_generator = datagen.flow_from_directory(
   path_dir,
   target_size=(150,150),
   shuffle=True,
   subset='training'

validation_generator = datagen.flow_from_directory(
   path_dir,
   target_size=(150,150),
   subset='validation'

第 4 步 构建 CNN 模型这个CNN模型的架构:Conv2D层——添加4个卷积(16个过滤器,32个过滤器,64个过滤器,大小为3*3,ReLU作为激活函数)最大池化 – MaxPool2D 具有 2*2 层扁平层以将层挤压成一维dropout(0.5)密集的前馈神经网络(256 个节点,以 ReLU 作为激活函数)2 个输出层,以 Softmax 作为激活函数model = tf.keras.models.Sequential([
   #first_convolution
   tf.keras.layers.Conv2D(16, (3,3), activation='relu', input_shape=(150, 150, 3)),
   tf.keras.layers.MaxPooling2D(2, 2),
   #second_convolution
   tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
   tf.keras.layers.MaxPooling2D(2,2),
   #third_convolution
   tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
   tf.keras.layers.MaxPooling2D(2,2),
   #fourth_convolution
   tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
   tf.keras.layers.MaxPooling2D(2,2),
   tf.keras.layers.Flatten(),
   tf.keras.layers.Dropout(0.5),
   tf.keras.layers.Dense(256, activation='relu'),
   tf.keras.layers.Dense(2, activation='softmax')
])
第 5 步 编译和拟合模型损失函数 = categorical_crossentropyAdam作为优化器批量大小为 32,有 100 个 epochmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(train_generator, batch_size=32,epochs=100)
Epoch 1/100
4/4 [==============================] - 3s 481ms/step - loss: 0.6802 - accuracy: 0.5408
Epoch 2/100
4/4 [==============================] - 2s 472ms/step - loss: 0.6630 - accuracy: 0.6633
Epoch 3/100
4/4 [==============================] - 2s 720ms/step - loss: 0.6271 - accuracy: 0.6429
Epoch 4/100
4/4 [==============================] - 2s 715ms/step - loss: 0.6519 - accuracy: 0.6327
Epoch 5/100
4/4 [==============================] - 2s 504ms/step - loss: 0.5814 - accuracy: 0.6837
Epoch 6/100
4/4 [==============================] - 2s 719ms/step - loss: 0.6061 - accuracy: 0.7347
Epoch 7/100
4/4 [==============================] - 2s 506ms/step - loss: 0.5697 - accuracy: 0.7653
Epoch 8/100
4/4 [==============================] - 2s 502ms/step - loss: 0.5439 - accuracy: 0.7449
Epoch 9/100
4/4 [==============================] - 2s 500ms/step - loss: 0.5553 - accuracy: 0.7347
Epoch 10/100
4/4 [==============================] - 2s 468ms/step - loss: 0.5314 - accuracy: 0.7653
Epoch 11/100
4/4 [==============================] - 2s 723ms/step - loss: 0.5606 - accuracy: 0.7041
Epoch 12/100
4/4 [==============================] - 2s 502ms/step - loss: 0.5162 - accuracy: 0.7449
Epoch 13/100
4/4 [==============================] - 2s 498ms/step - loss: 0.5189 - accuracy: 0.7653
Epoch 14/100
4/4 [==============================] - 2s 470ms/step - loss: 0.5027 - accuracy: 0.7959
Epoch 15/100
4/4 [==============================] - 2s 713ms/step - loss: 0.5479 - accuracy: 0.7347
Epoch 16/100
4/4 [==============================] - 2s 714ms/step - loss: 0.4999 - accuracy: 0.7449
Epoch 17/100
4/4 [==============================] - 2s 469ms/step - loss: 0.5199 - accuracy: 0.7347
Epoch 18/100
4/4 [==============================] - 2s 716ms/step - loss: 0.4570 - accuracy: 0.7551
Epoch 19/100
4/4 [==============================] - 2s 474ms/step - loss: 0.4549 - accuracy: 0.7653
Epoch 20/100
4/4 [==============================] - 2s 468ms/step - loss: 0.4152 - accuracy: 0.7959
Epoch 21/100
4/4 [==============================] - 2s 509ms/step - loss: 0.4383 - accuracy: 0.7959
Epoch 22/100
4/4 [==============================] - 2s 472ms/step - loss: 0.4258 - accuracy: 0.8571
Epoch 23/100
4/4 [==============================] - 2s 465ms/step - loss: 0.3988 - accuracy: 0.8469
Epoch 24/100
4/4 [==============================] - 2s 705ms/step - loss: 0.4435 - accuracy: 0.8163
Epoch 25/100
4/4 [==============================] - 2s 478ms/step - loss: 0.3931 - accuracy: 0.7959
Epoch 26/100
4/4 [==============================] - 2s 473ms/step - loss: 0.3964 - accuracy: 0.8469
Epoch 27/100
4/4 [==============================] - 2s 721ms/step - loss: 0.4285 - accuracy: 0.7551
Epoch 28/100
4/4 [==============================] - 2s 504ms/step - loss: 0.3571 - accuracy: 0.8163
Epoch 29/100
4/4 [==============================] - 2s 476ms/step - loss: 0.3053 - accuracy: 0.8878
Epoch 30/100
4/4 [==============================] - 2s 505ms/step - loss: 0.4531 - accuracy: 0.7245
Epoch 31/100
4/4 [==============================] - 2s 461ms/step - loss: 0.4956 - accuracy: 0.7653
Epoch 32/100
4/4 [==============================] - 2s 712ms/step - loss: 0.3593 - accuracy: 0.8367
Epoch 33/100
4/4 [==============================] - 2s 499ms/step - loss: 0.3291 - accuracy: 0.8673
Epoch 34/100
4/4 [==============================] - 2s 471ms/step - loss: 0.2828 - accuracy: 0.8571
Epoch 35/100
4/4 [==============================] - 2s 719ms/step - loss: 0.2740 - accuracy: 0.8776
Epoch 36/100
4/4 [==============================] - 2s 511ms/step - loss: 0.3409 - accuracy: 0.8776
Epoch 37/100
4/4 [==============================] - 2s 463ms/step - loss: 0.2144 - accuracy: 0.9082
Epoch 38/100
4/4 [==============================] - 2s 474ms/step - loss: 0.1550 - accuracy: 0.9490
Epoch 39/100
4/4 [==============================] - 2s 708ms/step - loss: 0.2104 - accuracy: 0.9184
Epoch 40/100
4/4 [==============================] - 2s 483ms/step - loss: 0.2203 - accuracy: 0.9184
Epoch 41/100
4/4 [==============================] - 2s 715ms/step - loss: 0.2048 - accuracy: 0.9184
Epoch 42/100
4/4 [==============================] - 2s 472ms/step - loss: 0.1701 - accuracy: 0.8980
Epoch 43/100
4/4 [==============================] - 2s 473ms/step - loss: 0.1755 - accuracy: 0.9490
Epoch 44/100
4/4 [==============================] - 2s 468ms/step - loss: 0.1723 - accuracy: 0.9388
Epoch 45/100
4/4 [==============================] - 2s 710ms/step - loss: 0.1240 - accuracy: 0.9796
Epoch 46/100
4/4 [==============================] - 2s 710ms/step - loss: 0.1356 - accuracy: 0.9388
Epoch 47/100
4/4 [==============================] - 2s 461ms/step - loss: 0.1046 - accuracy: 0.9592
Epoch 48/100
4/4 [==============================] - 2s 708ms/step - loss: 0.2454 - accuracy: 0.8878
Epoch 49/100
4/4 [==============================] - 2s 473ms/step - loss: 0.1540 - accuracy: 0.9286
Epoch 50/100
4/4 [==============================] - 2s 705ms/step - loss: 0.1769 - accuracy: 0.9592
Epoch 51/100
4/4 [==============================] - 2s 510ms/step - loss: 0.1795 - accuracy: 0.9184
Epoch 52/100
4/4 [==============================] - 2s 497ms/step - loss: 0.1267 - accuracy: 0.9592
Epoch 53/100
4/4 [==============================] - 2s 472ms/step - loss: 0.0952 - accuracy: 0.9694
Epoch 54/100
4/4 [==============================] - 2s 467ms/step - loss: 0.0974 - accuracy: 0.9592
Epoch 55/100
4/4 [==============================] - 2s 473ms/step - loss: 0.0629 - accuracy: 0.9898
Epoch 56/100
4/4 [==============================] - 2s 468ms/step - loss: 0.0995 - accuracy: 0.9592
Epoch 57/100
4/4 [==============================] - 2s 472ms/step - loss: 0.0487 - accuracy: 0.9694
Epoch 58/100
4/4 [==============================] - 2s 718ms/step - loss: 0.0348 - accuracy: 0.9898
Epoch 59/100
4/4 [==============================] - 2s 504ms/step - loss: 0.0419 - accuracy: 0.9898
Epoch 60/100
4/4 [==============================] - 2s 507ms/step - loss: 0.0490 - accuracy: 0.9796
Epoch 61/100
4/4 [==============================] - 2s 506ms/step - loss: 0.0608 - accuracy: 0.9796
Epoch 62/100
4/4 [==============================] - 2s 507ms/step - loss: 0.0877 - accuracy: 0.9490
Epoch 63/100
4/4 [==============================] - 2s 476ms/step - loss: 0.1254 - accuracy: 0.9490
Epoch 64/100
4/4 [==============================] - 2s 705ms/step - loss: 0.0537 - accuracy: 0.9898
Epoch 65/100
4/4 [==============================] - 2s 711ms/step - loss: 0.1157 - accuracy: 0.9592
Epoch 66/100
4/4 [==============================] - 2s 512ms/step - loss: 0.0403 - accuracy: 0.9898
Epoch 67/100
4/4 [==============================] - 2s 506ms/step - loss: 0.0734 - accuracy: 0.9796
Epoch 68/100
4/4 [==============================] - 2s 727ms/step - loss: 0.1231 - accuracy: 0.9592
Epoch 69/100
4/4 [==============================] - 2s 502ms/step - loss: 0.0822 - accuracy: 0.9694
Epoch 70/100
4/4 [==============================] - 2s 470ms/step - loss: 0.0897 - accuracy: 0.9694
Epoch 71/100
4/4 [==============================] - 2s 498ms/step - loss: 0.0543 - accuracy: 0.9592
Epoch 72/100
4/4 [==============================] - 2s 711ms/step - loss: 0.0235 - accuracy: 0.9898
Epoch 73/100
4/4 [==============================] - 2s 474ms/step - loss: 0.0425 - accuracy: 0.9898
Epoch 74/100
4/4 [==============================] - 2s 498ms/step - loss: 0.0373 - accuracy: 0.9898
Epoch 75/100
4/4 [==============================] - 2s 471ms/step - loss: 0.0220 - accuracy: 0.9898
Epoch 76/100
4/4 [==============================] - 2s 710ms/step - loss: 0.0274 - accuracy: 0.9898
Epoch 77/100
4/4 [==============================] - 2s 708ms/step - loss: 0.0256 - accuracy: 1.0000
Epoch 78/100
4/4 [==============================] - 2s 707ms/step - loss: 0.0137 - accuracy: 1.0000
Epoch 79/100
4/4 [==============================] - 2s 470ms/step - loss: 0.0123 - accuracy: 1.0000
Epoch 80/100
4/4 [==============================] - 2s 516ms/step - loss: 0.0278 - accuracy: 0.9796
Epoch 81/100
4/4 [==============================] - 2s 478ms/step - loss: 0.0311 - accuracy: 0.9796
Epoch 82/100
4/4 [==============================] - 2s 477ms/step - loss: 0.0318 - accuracy: 0.9796
Epoch 83/100
4/4 [==============================] - 2s 472ms/step - loss: 0.0184 - accuracy: 0.9898
Epoch 84/100
4/4 [==============================] - 2s 477ms/step - loss: 0.0191 - accuracy: 1.0000
Epoch 85/100
4/4 [==============================] - 2s 480ms/step - loss: 0.0146 - accuracy: 1.0000
Epoch 86/100
4/4 [==============================] - 2s 726ms/step - loss: 0.0047 - accuracy: 1.0000
Epoch 87/100
4/4 [==============================] - 2s 508ms/step - loss: 0.0072 - accuracy: 1.0000
Epoch 88/100
4/4 [==============================] - 2s 475ms/step - loss: 0.0049 - accuracy: 1.0000
Epoch 89/100
4/4 [==============================] - 2s 470ms/step - loss: 0.0169 - accuracy: 0.9898
Epoch 90/100
4/4 [==============================] - 2s 730ms/step - loss: 0.0048 - accuracy: 1.0000
Epoch 91/100
4/4 [==============================] - 2s 479ms/step - loss: 0.0117 - accuracy: 0.9898
Epoch 92/100
4/4 [==============================] - 2s 521ms/step - loss: 0.0018 - accuracy: 1.0000
Epoch 93/100
4/4 [==============================] - 2s 714ms/step - loss: 0.0066 - accuracy: 1.0000
Epoch 94/100
4/4 [==============================] - 2s 509ms/step - loss: 0.0198 - accuracy: 0.9898
Epoch 95/100
4/4 [==============================] - 2s 513ms/step - loss: 0.0193 - accuracy: 0.9898
Epoch 96/100
4/4 [==============================] - 2s 479ms/step - loss: 0.0048 - accuracy: 1.0000
Epoch 97/100
4/4 [==============================] - 2s 711ms/step - loss: 0.0064 - accuracy: 1.0000
Epoch 98/100
4/4 [==============================] - 2s 467ms/step - loss: 0.0283 - accuracy: 0.9796
Epoch 99/100
4/4 [==============================] - 2s 470ms/step - loss: 0.0043 - accuracy: 1.0000
Epoch 100/100
4/4 [==============================] - 2s 470ms/step - loss: 0.0113 - accuracy: 0.9898
模型训练准确率为 0.9898 (98.98%),损失为 0.0113。第 6 步 评估模型并预测最后一部分是使用数据验证数据(验证生成器)评估数据。accuracy = model.evaluate(validation_generator)
print('n', 'Test_Accuracy:-', accuracy[1])
pred = model.predict(validation_generator)
y_pred = np.argmax(pred, axis=1)
y_true = np.argmax(pred, axis=1)
print('confusion matrix')
print(confusion_matrix(y_true, y_pred))
   #confusion matrix
f, ax = plt.subplots(figsize=(8,5))
sns.heatmap(confusion_matrix(y_true, y_pred), annot=True, fmt=".0f", ax=ax)
plt.xlabel("y_pred")
plt.ylabel("y_true")
plt.show()
结果模型的准确度评估为 0.9565 (95.65%)23个测试数据0 表示阴性感染 COVID-191 表示阳性感染的 COVID-19

测试数据混淆矩阵基于混淆矩阵,系统在预测数据时没有错误,这意味着该模型在通过梅尔谱图图像识别感染 COVID-19 和未感染 COVID-19 的咳嗽方面具有相当好的系统性能。但是,这个模型还需要大量的开发。

声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    磐创AI

    人工智能前沿技术分享。...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码