本周主要做了三个任务:
1、准备竞赛:调试网络结构以更好的识别河道污染
2、学习深度卷积生成对抗网络并进行相应的实验
3、调试嵌入式对安全帽的目标检测任务
竞赛任务
任务进展
本次竞赛的课题任务是使用深度学习对给出的河道图片进行分类,可以检测出最常见的河道污染、水污染及垃圾污染。
竞赛给出的数据集分为有标注的训练集(有监督学习)和没有标注信息的测试集。训练集的数据只有2200张,样本过于小,所以很容易造成模型过拟合,这也是本次竞赛的隐藏的难点。还有,测试集没有标注信息,也就是在训练的时候,没法进行评估。只能单从训练数据上看出模型的损失下降和准确度情况,但这样不容易把控模型的拟合能力。
本次给出了四种类别污染图片,分为waterpollute(水污染),garbage(河流垃圾),health(健康河流),others(其他污染)。在这里有一个问题,也是最新的研究方向。对于每个类别的图片是否存在不平衡现象,由于本次竞赛数据集不公开,所以无法得知。但是,对于类别不平衡对模型训练的泛化能力是否有影响,需要进一步进行文献的阅读。
下面阐述本次实验的结果:
一、第一次提交
- 本次使用了ResNet残差神经网络来训练检测河道污染图片的模型,网络层级达到了50层。最终提交结果到竞赛平台上获得0.6955的成绩,排名为13,但是和前面六名只相差0.2的点。所以,可以进行进一步的改进。这里的评估标准是使用了F1值,即召回率和精确率的平均。
- 为了解决过拟合的问题,这里应用了迁移学习(transfer learning),即将源数据集上学习到的知识迁移到目标数据集上。正如,本次竞赛的数据集,虽然ImagNet数据集和河道图片大都无关,但在该数据集上训练的模型可以抽取较通用的图像特征,从而能够帮助识别边缘、纹理、形状及物体组成等。这些类似的特征对河道图片同样有效。
- 另外还可以对数据集进行数据增广的预处理操作来缓解样本太少引起的过拟合问题。本次只使用了随机翻转预处理操作,对所有训练样本按一定概率进行翻转,经过一定周期的迭代训练,变相的增加了数据集。
- 模型训练过程,一开始只是按照类似在其他cifar-10数据集上进行一些网络模型训练的参数设置,初始批次设置成32,学习率设置成0.01,优化算法使用AdaM算法,此算法不但使用动量作为参数更新方向,而且可以自适应调整学习率。但是在进行训练时,损失一直在震荡,一开始我认为AdaM优化算法可能不适合本次训练,换成SGD后并正常的下降了。现在细想想是自己对AdaM算法了解的不够,所以在设置参数时除了问题。损失函数使用标准的交叉熵损失。因为,使用了迁移学习,其实训练过程是个微调过程,我主要训练的应该是网络的最后一层,也就是输出层。但是,由于对迁移学习的了解太过浅层,所以只是将原先预训练的输出层进行一个简单的变换,也就是输出相应类别。这里,我又忽视了一点。网络预测的值包含了负值,也就只输出每个类的分布情况,而不是以一定的概率进行分布。所以在最后和标签进行对比时,结果很不理想。所以,后来我对输出结果使用了softmax,使输出结果分布在0-1的范围。
二、第二次提交
- 本次结合第一次实验中的问题进行了一些修改。第一次实验的最终的结果不是很高,我的想法可能是由于网络的层级过于深,再加上训练样本过于少,造成训练的时候拟合能力特别强。所以,选用了深度较浅的ResNet18进行实验测试。但是,我忽视了数据集的具体情况。在这四种类别中,那个others类别中的图片比较复杂,在每张图片中主要特征都是比较复杂的特征,但是其也包含了另外三种类别中的主要特征。例如,在others中有张图片中一位消防战士在干净的河流中进行救援。这里主要特征是消防战士,次要特征是干净河流。所以,较浅的网络获得感受野不大,很难识别出others图像。经过实验发现,最后输出的结果没有包含others结果图片。
- 经过了解迁移学习的微调操作,对最后输出层的参数进行了随机初始化操作,使得在训练过程之初,不会使训练损失幅度差距太大。由于我主要训练的是最后一层,所以最后一层的学习率一开始需要设置的较大,其它层相对较小。因为,在很大的ImageNet数据集上进行预训练,参数已经足够好。因此,一般选用较小的学习率来微调这些参数。而输出层的随机初始化参数一般需要更大的学习率从头训练。
- 本次额外增加了随机增加图片亮度,对比度,饱和度等预处理操作,但是由于网络层太浅,获得的感受野不大,无法提高最终结果成绩,最终结果是0.6344。
三、第三次提交
- 本次实验继承了第二次的输出层参数初始化操作,数据增广技术。恢复网络结构为第一次的ResNet50。但是,最终实验结果是比第一次低了0.03点。
下一步研究方向:
- 增大网络的感受野,尝试更深的网络结构,换用最新的Res2Net网络结构。
- 通过实验再详细分析出,为什么others类别的图片给模型操作带来那么大的影响,这种情况在现在有没有一定的研究。
- 再重新调试一下训练超参数,换用一下损失函数和优化算法。
学习深度卷积生成对抗网络
这里,我只是了解了生成对抗网络的原理。学习的初衷是想能否使用生成对抗网络来生成特定图片,以此解决一些小样本数据过于少的问题。
# 生成对抗网络
2014年发表的一篇论文《Generative Adversarial Networks》包括两部分:
- 1、生成网络(generative network):生成网络生成假数据,并且使假数据尽量显得真实,从而使得鉴别网络误以为生成的数据是真数据。生成网络的输入的数据是随机数,之所以是随机的,是因为生成网络需要生成不同的假数据。若没有随机输入,则生成网络只能生成相同的假数据,不满足应用需求。
- 2、鉴别网络(discriminative network):鉴别网络对生成网络生成的数据进行判别。鉴别网络可以输入真实数据和假数据,以此来识别真假。
鉴别网络只是用来帮助训练生成网络的,因此,鉴别网络只是在训练过程中使用,不在实际中使用。在训练过程中,生成网络希望鉴别网络不能正确判别出数据的真假,而鉴别网络希望判别数据的真假。
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!