1.回归任务
example:人脸关键点检测
编号:1-17:人脸的下轮廓;18-27:眉毛;28-36: 鼻子;37-48:眼睛;49-68:嘴巴。
input:image BxCxHxW
output:人脸关键点的数量x2(每个人脸关键点的横坐标与纵坐标)
Inception Block
Inception结构,首先通过1x1卷积来降低通道数把信息聚集一下,再进行不同尺度的特征提取以及池化,得到多个尺度的信息,最后将特征进行叠加输出(官方说法:可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能)。
shufflenet中指出Inception类似的结构将增加MAC(memory access cost),降低推理速度。
空间注意力模块
空间注意力聚焦在“哪里”是最具信息量的部分。计算空间注意力的方法是沿着通道轴应用平均池化和最大池操作,然后将它们连接起来生成一个有效的特征描述符。
2.分类任务
example:图像分类
常见数据集:cifar-10/100、MNIST、MNIST Fashion、ImageNet....
例子是目前最新的mixerMLP系列的gMLP网络,最核心的部分就是空间选通单元(Spatial Gating Unit,SGU):https://arxiv.org/abs/2105.08050
3.场景任务
这里说的场景任务是针对某一个特定的场景开发的深度学习任务,相比于回归和分类任务来说,场景任务的难度更高。这里说的场景任务包括但不限于目标检测、图像分割、文本生成、语音合成、强化学习等。
example:目标检测
常见数据集:VOC2012、COCO2017....
常用网络:YOLO(1阶段)、RCNN(2阶段)、FCOS(anchor-free)....
example:图像分割
常见数据集:VOC2012、Cityscapes、ADE20K....
常用网络:HRNet-OCR 、DeepLabv3+ 、Unet....
example:光学字符识别(OCR)
OCR库:paddleOCR
example:实例分割
常见数据集:COCO2017....
常用网络:Mask-RCNN
3、模型训练
1.基于高层API训练模型(paddle2.0)
import paddle
# 使用paddle.Model完成模型的封装
model = paddle.Model(Net)
# 为模型训练做准备,设置优化器,损失函数和精度计算方式
model.prepare(optimizer=paddle.optimizer.Adam(parameters=model.parameters()),
loss=paddle.nn.CrossEntropyLoss(),
metrics=paddle.metric.Accuracy())
# 调用fit()接口来启动训练过程
model.fit(train_dataset,
epochs=1,
batch_size=64,
verbose=1)
2.使用PaddleX训练模型
model.train(
num_epochs=270,
train_dataset=train_dataset,
train_batch_size=8,
eval_dataset=eval_dataset,
learning_rate=0.000125,
lr_decay_epochs=[210, 240],
save_dir='output/yolov3_darknet53',
use_vdl=True)
经验总结:
1、每个输入数据的维度要保持一致,且一定要和模型输入保持一致。
2、配置学习率衰减策略时,训练的上限轮数一定要计算正确。
3、BatchSize不宜过大,太大容易内存溢出,且一般为2次幂。
4.超参优化
模型的超参数指的是模型外部的配置变量,是不能通过训练的进行来估计其取值不同的,且不同的训练任务往往需要不同的超参数。超参数不同,最终得到的模型也是不同的。一般来说,超参数有:学习率,迭代次数,网络的层数,每层神经元的个数等等。
常见的超参数有以下三类:
1、网络结构,包括神经元之间的连接关系、层数、每层的神经元数量、激活函数的类型等 .
2、优化参数,包括优化方法、学习率、小批量的样本数量等 .
3、正则化系数
实践中,当你使⽤神经⽹络解决问题时,寻找好的超参数其实是一件非常困难的事情,对于刚刚接触的同学来说,都是"佛系调优",这也是一开始就"入土"的原因,没有依据的盲目瞎调肯定是不行的。可是如果识别的领域不同,比如同样是LeNet网络,在解决手写数字识别时使用的超参数能得到很好的效果,但是在做眼疾识别时,因为数据集的不同,虽然使用同样的超参数,但是效果可能并不理想,目前不存在⼀种通用的关于正确策略的共同认知。
常用方法:
1、早停
2、学习率衰减
3、网络结构调整
4、小批量数据(mini-batch)大小不必最优...
4.效果展示
可视化输入与输出
1、plt、opencv直接输出
2、visualDL展示
模型可解释性
InterpretDL源码:https://github.com/PaddlePaddle/InterpretDL
5.总结与升华
1、最重要的地方在于神经网络工作的基本原理,只有搞懂了原理,才能更好地进行超参优化,得到的模型效果才会更好。
对于模型组网,最重要的是学会使用SubClass形式组网,使用套件虽然简单,但是可定制化程度较低,如果是科研需要,建议一定要学会用SubClass形式组网。
2、模型训练是最简单的部分,只需要按照文档在操作即可,但是超参数的选择有很多讲究,超参的好坏往往会影响模型的最终结果
3、效果展示是一个项目的加分项,如果是科研需要,那么你也需要可视化地展示你的工作成果,这也是十分重要的。