技术文章

不止是图像分类:深度学习的更多应用方式

作者 Johanna Pingel, MathWorks


深度学习网络被证明是一个功能多样的工具。虽然最初仅用于图像分析,但它已逐渐被应用到各种其他任务中。它们可提供高准确性和处理速度,使得用户无需成为域专家即可对大型数据集执行复杂分析。以下是一些你可能会考虑使用深度学习网络的示例。

文本分析

在本例中,我们将分析推特数据,了解针对特定词或短语的情感 是积极的还是消极的。情感分析有很多实际的应用,如品牌推广、竞选活动和广告营销。

过去(目前仍然)进行情感分析通常使用机器学习。机器学习模型可分析单个词,但深度学习网络可应用于完整的句子,大大地提高了准确性。

训练组由数以千计正面或负面的推特样本组成。这里是训练推特的示例:

推特
情感
“我爱@Health4UandPets你们是最棒的!!”
正面
“@nicolerichie:你的照片看起来很甜美”
正面
“回去工作!”
负面
“有史以来最糟糕的演讲!”
负面

我们通过去除“the”和“and”等“停滞词”对数据进行了清理,这些词对于算法的学习毫无用处。然后,我们上传了长短期记忆(long short-term memory, LSTM)网络,它是一种递归神经网络(recurrent neural network, RNN),可学习时间上的依赖关系。

LSTM擅长对序列和时序数据进行分类。当分析文本时,LSTM不仅会考虑单个词,还会考虑句子结构和词的组合。

网络本身的MATLAB®代码非常简单:

layers = [ sequenceInputLayer(inputSize)
    lstmLayer(outputSize,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer ] 

在GPU上运行时,它训练的非常快速,30次迭代(完 整遍历一次所有数据)只需6分钟。

完成对模型的训练后,我们就可对新数据使用该模型。例如,我们可用它确定情感分数与股票价格之间是否相关。

语音识别

在本例中,我们需要将语音音频文件分类到其对应的词类。初看上去,此问题与图像分类完全不同,但实则非常相似。频谱是1D音频文件中信号的二维显示(图1)。我们可以将其用作对卷积神经网络(CNN)的输入,如同使用“真实”图像一样。

图1:上部:原始音频信号。底部:对应频谱。

图1:上部:原始音频信号。底部:对应频谱。

spectrogram()函数是一种将音频文件转换为其对应的简单方式。但是,语音是音频处理的一种特定形式,其中重要特征会包含在特定的频率处。由于我们希望CNN专注于这些特定的频率处,我们将使用美尔倒谱系数,该系数会锁定跟语音最相关的频率区域。

我们在希望分类的词类之间均匀地分配训练数据。

为减少伪正面情感,我们纳入了容易与目标类别混淆的词类。例如,如果目标词是“on”,则“mom”、“dawn”和“won”等词会放到“未知”类别中。网络不需要知道这些词是什么,只需要知道它们不是目标词。

我们随后定义了一个CNN。由于我们使用频谱作为输入值,因此CNN的结构可以是类似于用于图像的结构。

模型训练完毕后,它会将输入图像(频谱图)分类到相应的类别(图2)。验证集的准确性约为96%。

时频 可能更易懂一些

图2. 词“yes”的分类结果。

图2. 词“yes”的分类结果。

图像降噪

小波和滤波器是(仍然是)降噪的常见方法。在本例中,我们将了解到经过预训练的图像降噪CNN(DnCNN)将如何应用于包含高斯噪声的一组图像中(图3)。

图3. 添加了高斯噪声的原始图像。

图3. 添加了高斯噪声的原始图像。

我们首先下载一个包含高斯噪声的图像。

imshow(noisyRGB);

由于这是彩色图像,但网络是在灰阶图像上受训的,因此该过程的唯一难点是需要将图像分为三个不同通道:红(R)、绿(G)、蓝(B)。

noisyR = noisyRGB(:,:,1);
noisyG = noisyRGB(:,:,2);
noisyB = noisyRGB(:,:,3);

我们加载预先训练的DnCNN网络。

net = denoisingNetwork('dncnn');

现在我们可以使用它去除每个颜色通道中的噪声。

denoisedR = denoiseImage(noisyR,net);
denoisedG = denoiseImage(noisyG,net);
denoisedB = denoiseImage(noisyB,net);

我们重新组合经过降噪处理的颜色通道,形成降噪后的RGB图像。

denoisedRGB = cat(3,denoisedR,denoisedG,denoisedB);
imshow(denoisedRGB)
title('Denoised Image')

原始(非噪声)图像与降噪图像的快速视觉对比图说明结果是合理的(图4)。

图4. 左:原始(非噪音)图像。右:已降噪图像。

图4. 左:原始(非噪音)图像。右:已降噪图像。

让我们放大几个细节:

rect = [120 440  130  130];
cropped_orig = imcrop(RGB,rect);
cropped_denoise = imcrop(denoisedRGB,rect);
imshowpair(cropped_orig,cropped_denoise,'montage');

图5中的放大视图显示降噪结果造成了一些负面影响。显而易见,原始(非噪声)图像具有更高的清晰度,尤其是屋顶和草地。这一结果可能是可接受的,或者图像需要进一步处理,这取决于它将用于哪些应用。

图5. 放大视图。

图5. 放大视图。

如果考虑使用DnCNN进行图像降噪,请记住,它只能识别其接受过训练的噪声类型,在本例中是高斯噪声。为提高灵活性,您可以使用MATLAB和Deep Learning Toolbox™通过预定义层训练自己的网络,也可以训练完全自定义的降噪神经网络。

2018 年发布

查看文章,了解相关功能