Paddle图像分割7日打卡心得
非常感谢百度Paddle这次的课程,让我对于图像分割有了初步的了解。刚开始报名的时候,以为是一个实践式的课程,开始上课才发现是一个理论为主加代码实践的课程(朱老师的直播代码水平确实很强_)。本来以为可以轻松的状态学习下来,没想到学起来是很懵很充实的,找到了久违的学习感觉。
基础概念
- 卷积层(convolution layer): 执行卷积操作提取底层到高层的特征,发掘出图片局部关联性质和空间不变性质。
- 池化层(pooling layer):执行降采样操作。通过取卷积输出特征图中局部区块的最大值(max-pooling)或者均值(avg-pooling)。降采样也是图像处理中常见的一种操作,可以过滤掉一些不重要的高频信息。
- 全连接层(fully-connected layer,或者fc layer): 输入层到隐藏层的神经元是全部连接的。
- 非线性变化:卷积层、全连接层后面一般都会接非线性变化函数,例如Sigmoid、Tanh、ReLu等来增强网络的表达能力,在CNN里最常使用的为ReLu**函数。
- Dropout: 在模型训练阶段随机让一些隐层节点权重不工作,提高网络的泛化能力,一定程度上防止过拟合。
Class1 图像分割
图像分割类型:
- 语义分割(课程主要实现):给每个像素点分类
- 实例分割:给每个框里的object分mask
- 全景分割:背景像素点分类+框mask
应用场景:
- 人像分割
- 自动驾驶(行人、车道线、车辆分割)
- 医学影像(CT、病理)
- 工业质检、分练机器人
实践部分
- 简单网络搭建:basic_model.py
- 熟悉dataloader原理:basic_dataloader.py
- 分割数据处理:basic_transform.py
Class2 全卷积FCN网络
实践部分
- Loss函数:basic_seg_loss.py
- FCN网络的实现:fcn8s.py
- 训练程序:basic_train.py
Class3 U-Net/PSPNet模型
VGG
牛津大学VGG(Visual Geometry Group)组在2014年ILSVRC提出的模型被称作VGG模型。该模型相比以往模型进一步加宽和加深了网络结构,它的核心是五组卷积操作,每两组之间做Max-Pooling空间降维。同一组内采用多次连续的3X3卷积,卷积核的数目由较浅组的64增多到最深组的512,同一组内的卷积核数目是一样的。卷积之后接两层全连接层,之后是分类层。由于每组内卷积层的不同,有11、13、16、19层这几种模型,下图展示一个16层的网络结构。VGG模型结构相对简洁,提出之后也有很多文章基于此模型进行研究,如在ImageNet上首次公开超过人眼识别的模型就是借鉴VGG模型的结构。
实践部分
- 动态图搭建PSPNet:pspnet.py
- 模型预测代码:infer.py
- UNet实现:UNet.py
Class4 DeepLab系列网络
实践部分
- 动态图搭建DeepLab V3:deeplab.py
- 对resnet.py进行修改,实现Multi_grid机制:resnet.py
总结
1.如果你不会python,可以参考你熟悉的编程语言,基本思路是一致的,差别的地方查文档;
2.多看Paddle API 文档:https://www.paddlepaddle.org.cn/documentation/docs/zh/api_cn/index_cn.html;
3.多看百度Paddle官网,各种资料可以学习;
4.学会查看调试过程中的报错信息,方便查找编码问题;