神经网络与深度学习3

本文详细介绍了深度学习在视觉应用中的关键内容,包括数据集与评价指标(如精确率、召回率和AP/mAP),目标检测中的YOLO算法,语义分割的FCN,以及风格迁移的方法和理论。同时探讨了生成对抗网络(GANs)的基础概念和应用潜力。
摘要由CSDN通过智能技术生成

第三次帖子



深度学习视觉应用

1. 数据集与评价指标

1.1 算法评估相关概念

TP: 被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数
FP: 被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数
FN:被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数
TN: 被正确地划分为负例的个数,即实际为负例且被分类器划分为负例的实例数

混淆矩阵
Alt
P(精确率):𝑇𝑃/(𝑇𝑃+𝐹𝑃),标识“挑剔”的程度
R(召回率): 𝑇𝑃/(𝑇𝑃+𝐹𝑁)。召回率越高,准确度越低 标识“通过”的程度
精度(Accuracy):(𝑇𝑃+𝑇𝑁)/(𝑇𝑃+𝐹𝑃+𝑇𝑁+𝐹𝑁)

P-R曲线
Alt
示例
假设一个测试集,其中图片只由大雁和飞机两种图片组成
Alt
假设使用CNN得到飞机分类结果如下
Alt
分类为飞机(正样本)的四张照片中:
True positives : 有三个,画绿色框的飞机
False positives: 有一个,画红色框的大雁
分类为大雁(负样本)的四张照片中:
True negatives : 有四个,这四个大雁的图片,系统正确地没有把它们识别成飞机
False negatives: 有两个,两个飞机没有被识别出来,系统错误地认为它们是大雁

调整阈值可改变准确率或召回值,在刚才例子中,对应某阈值,前四个样本(左侧)被分类为飞机。改变阈值会改变划分,进一步影响准确率或召回值。
Alt
可以通过改变阈值(也可以看作上下移动蓝色的虚线),来选择让系统识别能出多少个图片,当然阈值的变化会导致Precision与Recall值发生变化。比如,把蓝色虚线放到第一张图片下面,也就是说让系统只识别出最上面的那张飞机图片,那么Precision的值就是100%,而Recall的值则是20%。如果把蓝色虚线放到第二张图片下面,也就是说让系统只识别出最上面的前两张图片,那么Precision的值还是100%,而Recall的值则增长到是40%。不同阈值条件下,Precision与Recall的变化情况如下图:
Alt
据此绘制P-R曲线:
Alt

1.2 AP 与 mAP计算

mAP:均值平均准确率
Alt
其中𝑁代表测试集中所有图片的个数,𝑃(𝑘)表示在能识别出𝑘个图片的时候Precision的值,而 Δ𝑟(𝑘)则表示识别图片个数从𝑘−1变化到𝑘时(通过调整阈值)Recall值的变化情况。
在上面的一例子中,AP的值
=(1 ∗(0.2−0)) + (1 ∗ (0.4−0.2)) + (0.66 ∗ (0.4−0.4)) + (0.75 ∗ (0.6
−0.4)) + (0.6 ∗ (0.6−0.6)) + (0.66 ∗ (0.8−0.6)) + (0.57 ∗ (0.8−0.8))+
(0.5 ∗ (0.8−0.8)) + (0.44 ∗ (0.8−0.8)) + (0.5 ∗ (1−0.8)) = 0.782

=(1 ∗ 0.2) + (1 ∗ 0.2) + (0.66 ∗ 0) + (0.75 ∗ 0.2) + (0.6 ∗ 0) + (0.66
∗ 0.2) + (0.57 ∗ 0) + (0.5 ∗ 0) + (0.44 ∗ 0) + (0.5 ∗ 0.2) = 0.782
通过计算可以看到,那些Recall值没有变化的地方(红色数值),对增加
Average Precision值没有贡献。

实际图像分类任务(多类)中的AP计算:
①首先使用训练好的模型获得所有测试样本的confidence score,每个类别(如
person、car等)都会获得一组confidencescore
Alt
②按照上图中的score值从大到小对所有样本进行排序,排序后结果如图所示:
Alt
③其余步骤同之前的例子(飞机和鸟的)

mAP计算
每一个类别均可确定对应的AP; 多类的检测中,取每个类AP的平均值,即为mAP。


2. 目标检测与YOLO

2.1 问题准备

目标检测问题
目标检测是在给定的图片中精确找到物体所在位置,并标注出物体的类别。物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,并且物体还可以是多个类别。
目标检测问题发展
Alt

2.2 YOLO

详见:YOLO系列算法精讲:从yolov1至yolov8的进阶之路(2万字超全整理)


3. 语义分割

FCN是目前广泛使用的基本语义分割网
详见:语义分割系列1-FCN(全卷积网络)(pytorch实现)


4. 风格迁移

4.1 风格迁移问题

简介:
如果你是一位摄影爱好者,也许接触过滤镜。它能改变照片的颜色样式,从而使风景照更加锐利或者令人像更加美白。但一个滤镜通常只能改变照片的某个方面。如果要照片达到理想中的样式,经常需要尝试大量不同的组合,其复杂程度不亚于模型调参。我们将介绍如何使用卷积神经网络自动将某图像中的样式应用在另一图像之上,即风格迁移。
这里我们需要两张输入图像,一张是内容图像,另一张是样式图像,我们将使用神经网络修改内容图像使其在样式上接近样式图像。
在这里插入图片描述
方法:
首先,我们初始化合成图像,例如将其初始化成内容图像。该合成图像是样式迁移过程中唯一需要更新的变量,即样式迁移所需迭代的模型参数。
然后,我们选择一个预训练的卷积神经网络来抽取图像的特征,其中的模型参数在训练中无须更新。深度卷积神经网络凭借多个层逐级抽取图像的特征。我们可以选择其中某些层的输出作为内容特征或样式特征。
以之前放的图像为例,这里选取的预训练的神经网络含有3个卷积层,其中第二层输出图像的内容特征,而第一层和第三层的输出被作为图像的样式特征。接下来,我们通过正向传播(实线箭头方向)计算样式迁移的损失函数,并通过反向传播(虚线箭头方向)迭代模型参数,即不断更新合成图像。
在这里插入图片描述
风格迁移常用的损失函数
一般由三部分组成:
内容损失(content loss)使合成图像与内容图像在内容特征上接近;
样式损失(style loss)令合成图像与样式图像在样式特征上接近;
总变差损失(total variation loss)则有助于减少合成图像中的噪点;
最后,当模型训练结束时,我们输出样式迁移的模型参数,即得到最终的合成图像

4.2 定义代价函数

内容代价函数
Alt
风格代价函数

什么是风格?
论文原文中,作者将 风格(Style) 定义为不同激活通道之间的相关系数。
Alt
怎样量化风格差异?
可以参考:神经风格迁移 (Neural style transfer)

4.3 风格迁移实验

①导入的包或模块
Alt
②读取内容图像和样式图像
在这里插入图片描述
③预处理和后处理图像
预处理函数preprocess对先对更改输入图像的尺寸,然后再将PIL图片转成卷积神经网络接受的输入格式,再在RGB三个通道分别做标准化。

由于预训练模型是在均值为[0.485, 0.456, 0.406]的图片数据上预训练的,
所以我们要将图片标准化保持相同的均值和标准差。

后处理函数postprocess则将输出图像中的像素值还原回标准化之前的值
。由于图像每个像素的浮点数值在0到1之间,我们使用clamp函数对小
于0和大于1的值分别取0和1。
Alt
④抽取特征
在这里插入图片描述
实验中,我们选择第四卷积块的最后一个卷积层作为内容层,以及每个卷积块的第一个卷积层作为样式层。这些层的索引可以通过打印pretrained_net实例来获取,输出即为每一层的数据索引。
在抽取特征时,我们只需要用到VGG从输入层到最靠近输出层的内容层或样式层之间的所有层。下面构建一个新的网络net,它只保留需要用到的VGG的所有层。我们将使用net来抽取特征。
Att
给定输入X,如果简单调用前向计算net(X),只能获得最后一层的输出。由于我们还需要中间层的输出,因此这里我们逐层计算,并保留内容层和样式层的输出。
Alt
⑤定义损失函数
内容损失:与线性回归中的损失函数类似,内容损失通过平方误差函数衡量合成图像与内容图像在内容特征上的差异。平方误差函数的两个输入均为extract_features函数计算所得到的内容层的输出。
Alt
样式损失:样式损失也一样通过平方误差函数衡量合成图像与样式图像在样式上的差异。为了表达样式层输出的样式,我们先通过extract_features函数计算样式层的输出。我们用一个格拉姆矩阵表达样式层输出的样式。需要注意的是,当样本的高(h)和宽(w)的值较大时,格拉姆矩阵中的元素容易出现较大的值。此外,格拉姆矩阵的高和宽皆为通道数c。为了让样式损失不受这些值的大小影响,下面定义的gram函数将格拉姆矩阵除以了矩阵中元素的个数,即chw。
Alt
自然地,样式损失的平方误差函数的两个格拉姆矩阵输入分别基于合成图像与样式图像的样式层输出。这里假设基于样式图像的格拉姆矩阵gram_Y已经预先计算好了。
Alt
总变差损失Alt
⑥训练
在训练模型时,我们不断抽取合成图像的内容特征和样式特征,并计算损失函数。Alt


5. 视觉应用展望

生成对抗网络
生成对抗网络(GANs, generative adversarial networks)是由Ian Goodfellow等人在2014年的Generative Adversarial Networks一文中提出。

模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。

原始GAN 理论中,并不要求G 和D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为G 和D 。

一个优秀的GAN应用需要有良好的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想

  • 30
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值