百度飞桨paddlepaddle图像分割七日打卡营笔记
时间:2020年10月19日-27日
QQ昵称:陈文辉
文章标题:百度飞桨paddlepaddle图像分割七日打卡营笔记
课程链接:https://aistudio.baidu.com/aistudio/course/introduce/1767
百度飞桨paddlepaddle图像分割七日打卡营笔记
作为一名DL小白,参加百度paddlepaddle推出的免费“图像分割七日打卡营”课程,果然受益菲浅:
实现了小白也能学DL;
两位老师知识渊博,实践丰富,动手能力极强,收获很大;
老师上课直接写程序,印象特别强烈。熟练、反应极快,且那么多行程序,有的还能一次通过,惊叹!
按照算法结构,使用结构化的方法写程序让我收益菲浅。
在这么短时间内能运行起一个图像分割程序,也让我信心倍增。
作为一名小白,下面罗列一些学习笔记。
图像分割7日打卡营学习笔记
图像分割7日打卡营
课节1:预习内容
项目:新手入门第一课-python快速入门
项目:新手入门第二课-notebook基础操作
项目:新手入门第三课-debug基础教学
项目:新手入门第四课-paddlepaddle快速入门
[项目]新手入门第五课-PaddleSeg快速体验
预习作业
课节2:图像分割综述
[文档]图像分割综述PPT
[视频]01 开营仪式
[视频]02 课程大纲
[视频]03 语义分割初探
[视频]04 例子1(coding实录)
[视频]05 例子2(coding实录)
[视频]06 debug及作业
课节3:FCN全卷积网络详解
[文档]FCN全卷积网络详解PPT
[视频]01 FCN概述
[视频]02 上采样方法(上)
[视频]03 上采样方法(下)
[视频]04 代码实战(上)
[视频]05 代码实战(下)
课节4: U-Net/PSPNet模型
[文档]U-Net/PSP网络PPT
[视频]01 FCN回顾
[视频]02 U-Net讲解
[视频]03 U-Net代码实战
[视频]04 PSPNet讲解
[视频]05 PSPNet代码实战
课节5: DeepLab系列
[文档]DeepLab PPT
[视频]01 上节回顾
[视频]02 DeepLab v1v2
[视频]03 DeepLab v3
[视频]04 代码实战(上)
[视频]05 代码实战(下)
课程大纲
01
Section 1 (theory)
1. 课程总体概述
2. 语义分割初探
3. 基于深度学习的语义分割算法
Section 2 (practice)
1. 环境搭建
2. PaddlePaddle动态图
3. 语义分割的数据格式和处理
作业
1. 搭建并熟悉AI Studio环境
2. 熟悉Paddle环境和动态图模式
3. 实现数据加载模块
02
Section 1 (theory)
1. FCN全卷积网络
2. FCN网络结构详解
Section 2 (practice)
1. PaddlePaddle中的上采样操作实践
2. PaddlePaddle实现FCN
作业
PaddlePaddle实现FCN网络
03
Section 1 (theory)
1. U-Net模型详解
2. PSPNet模型详解
Section 2 (practice)
1. PaddlePaddle实现UNet/PSPNet
2. PaddlePaddle实现DilatedResnet
3. 分割网络loss和metrics实现
作业
1. 实现U-Net或PSPNet
2. 进行模型训练和预测
04
Section 1 (theory)
1. Dilated Conv 原理和细节
2. ASPP模块解析
3. DeepLab系列详解
Section 2 (practice)
1. PadddlePaddle实现DeepLabV3/ ASPP/MultiGrid
2. 分割网络inference和validation实现
作业
1. DeepLab网络实现
2. 实现语义分割网络搭建和训练完整流程
05
Section 1 (theory)
1. 深入解析GCN(图卷积网络)
2. Graph-based Segmentation多个方法详解 (GloRe, GCU, GINet)
Section 2 (practice)
1. GCN代码简要解析
2. 在Pascal Context上实现GloRe
大作业
1. 图像分割全流程实现
06
Section 1 (theory)
1. 实例分割与全景分割概述
2. 实例分割:Mask R-CNN和SOLO
3. 全景分割:PanapticFPN和UPSNet
大作业
1. 图像分割全流程实现
07
Section 1 (summary)
1. 主流分割数据集介绍
2. 最近研究进展探讨
3. 课程总结与Q&A
大作业
1. 图像分割全流程实现
图像分割7日打卡营之课节1:预习内容之项目:新手入门第一课-python快速入门
01—20201019课节2:图像分割综述-8:30
Section 1 (theory)
1. 课程总体概述
2. 语义分割初探
3. 基于深度学习的语义分割算法
Section 2 (practice)
1. 环境搭建
2. PaddlePaddle动态图
3. 语义分割的数据格式和处理
作业
1. 搭建并熟悉AI Studio环境
2. 熟悉Paddle环境和动态图模式
3. 实现数据加载模块
Day1图像分割综述
Day2FCN全卷积网络
Day3U-Net/PSPNet模型
Day4DeepLab系列算法
Day5图卷积算法
Day6实例分割与全景分割概述
Day7最新研究进展、课程总结
10:00-11:00,19:00-20:00两次答疑。
本课程将会学到:自己搭建,自己动手训练语义分割网络
Python编程,OOP
图像处理,简单的矩阵处理
深度学习、语义分割的理论基础和算法前沿
paddlepaddle深度学习框架—动态图
paddlepaddle模型训练完整流程
本课程要用到的技术:
编程语言:python
深度学习框架:paddlepaddle
其他python包:numpy/opencv/pil
深度学习算法:FCN/U-Net/PSPNet/DeepLab,etc
The devil is in the details
图像分割的类型
图像分割image segmentation
图像语义分割image semantic segmentation,即给每个pixel分类
图像实例分割image instance segmentation,即给每个框里的object分mask
图像全景分割image panoptic segmentation,背景Pixel分类+框里mask
视频目标分割video object segmentation,给定目标mask,求特定目标的mask
视频实例分割video instance segmentation,根据目标的框,求目标的mask
语义分割算法的基本流程:
输入:图像RGB;
算法:深度学习模型;
输出:分类结果—与输入大小一致的单通道图
训练过程:
输入:image + label;
前向:out = model(image)
计算损失:loss = loss_func(out, label)
反向:loss.backward()
更新权重:optimizer.minimize(loss)
语义分割性能指标:mIoU和mAcc
mIoU, mean intersection-over-union
mAcc,mean Accuracy,即mAcc Pred和GT对应位置的分类准确率
Paddle API文档:
https://www.paddlepaddle.org.cn/documentation/docs/zh/api_cn/index_cn.html
prompt操作步骤:
在paddle终端界面,输入“vim basic_model.py ”,进入编辑界面;点击i,进入insert(编辑)状态;
退出编辑:按esc键,退出编辑状态,输入“:wq”,回车后回到paddle终端界面。
让行数:使用“:60”即可。
02—20201020-8:30课节3:FCN全卷积网络详解
本节内容
Why does FCN work?FCN分割网络的基本概念;FCN的计算原理;Feature map上采样操作。
What is FCN?FCN网络的结构;FCN每层的具体操作;FCN的layer fusion.
How to build FCN?如何实现一个FCN网络;如何替换backbone。
全卷积网络FCN
FCN-fully convolutional networks,全卷积,没有FC。
如何做语义分割?语义分割 ~= 像素级分类
各图像分类有什么关系?替换FC,换成Conv
2015年论文:fully convolutional networks for semantic segmentation
全卷积FCN网络vs 图像分类网络
图像分类网络的结构:输入224*224*3;输出:1*1*1000
图像分类:1图1类;
语义分割:1图1图;
全卷积网络FCN—how to do segmentation?
全卷积像素级分类
语义分割 ~= 像素级分类:输入RGB图像; 输出原图中每个像素对应的类别。
输入size == 输出size.。输入每个位置:(0~255, 0~255, 0~255);输出每个位置:(0~n_classes-1)
全卷积网络FCN – 分类分割。-- How to replace FC layer?
How to replace FC layer?如何处理FC层:通过把FC层1*1 Conv,这样原来分类的网络就变成没有全连接层的网络,变成了FCN层。
通过1*1 Conv ,可以改变channel的大小,进行升级或降维,如图。
全卷积网络FCN – 分类分割。-- How to do make feature map large?
How to do make feature map large? 需把feature map变成与原图一样大,实现每个像素一个分类。可以通过三种方法把Feature map 尺寸变大:
up-sampling上采样;
transpose Conv反卷积;
Un-pooling
全卷积网络FCN—使feature map变大方法之一:feature map 上采样up-sampling
目的:
如何实现,即如何做resize:双线性差值法,如上图。
Up-sampling例子:
实现上述算法的代码(全):
Interpolate.py
https://githut.com/paddlepaddle/paddleSeg
03—20201021-8:30课节4:U-Net/PSPNet模型
https://live.bilibili.com/21689802
Recap:全卷积FCN网络
FCN = fully convolutional network,全卷积,没有FC.。
如何做语义分割:语义分割 ~= 像素级分割;
和图像分类有什么关系:替换FC,换成Conv
FCN-实践中遇到的遇到的问题&FCN的巧妙之处—
why padding 100?
?
why cropping [5,9,31]
Recap:FCN的优缺点
优点:任意尺寸输入;效率高;结合浅层信息
缺点:分割结果不够精细;没有考虑上下文信息(~=左顾右盼~=看看旁边有啥)。
U-Net网络
采用encoder和decoder的U型结构
输入输出大小不变
Skip结合方式:concatenation
U-net论文:convolutional networks for biomedical image segmentation
U-net利用skip-connect机制:
Skip结合方式:concatenation
If尺寸发生变化:crop
Concat之后:conv
U-net输出层
U-net和FCN网络相同,通过1*1 卷积,实现卷积核数 = 分割类别数
构建U-net网络的主要operations:
Conv 3*3, (with bn, relu)
Pool 2d
Transpose conv 2*2,实现增大*2
Crop, concateltwise_add
Conv 1*1,实现分割类别
Softmax, argmax, squeeze
U-Net比较占显存,效果也不是非常好。
PSP分割网络:pyramid scene parsing network
FCN的一个缺点:没有上下文信息。
PSP解决方法:增大感受野来实现左顾右盼:利用全局信息
在PSP中如何实现增大感受野—PSP模块的结构
PSP模块的具体Operation:
1-ada[tove Pool
Conv 1*1
Upsample
Concat
10:50
PSP模块的具体操作—adaptive Pool之Pyramid Pooling
举例:输入8*8,输出5*3,如何对V(0,1)进行Pyramid Pooling呢?
计算方法是: ,h_start是起始位置,h_end是终止位置,H_in是输入H值,H_out是输出H值,i所计算位置的H值 (即step,输出第几个,i行j列),是floor是向下取整;以举例数值:H_in = 8,H_out = 3,i = 1,计算结果:h_start = 2,h_end = 5;同理可以计算出w_start和w_end。
指令:
PSP网络—完成结构
PSP分割网络—backbone,以dilated resnet为例
Dilated Conv:
增大RF(receptive field)
不降低分辨率
不引入额外参数和计算
代码实战:unet.py
看代码不要一行一行往下看。
第1块是一堆Import
Class Encoder(layer)时就要反应出那一张图:
然后class Decoder(layer)。
Encoder和Decoder继承的都是paddle layer。它是layer,必然有一个初始化的方法: ,因为继承的是layer,因此有一个forward:
有了encoder和decoder之后,就可以在class UNnet(Layer)中拿积木去搭;UNet也是继承paddle layer,也有一个初始化 ,也有一个forward: .
Def main()一样,还是老三样,
04—20201022-8:30课节5:DeepLab系列
Recap:PSP网络:pyramid scene parsing network
什么是pyramid pooling modual:简而言之:多尺度,具体操作:adaptive_average_pool
如何增加backbone感受野—dilated convolution
Dilated convolution,即空洞卷积atrous conv.。理解1:将kernel扩大填0;理解2:featuremap间隔计算conv
Recap:PSP网络—backbone
DeepLab网络v1 to v3
Deeplab系列网络
Deeplab v1网络结构—v1
Deeplab v2网络结构
Backbone:resnet
Dilated Conv:ASPP模块(atrous spatial pyramid pooling)
Dilation的增大会扩大感受野;与PSP不同点:PSP使用adaptive pool;deeplab v2用的是dilation pool。
DeepLab v2--ASPP模块
视频22:40开始实践 dilated_conv.py
DeepLab v2 – Dilated Backbone.
Backbone: resnetdilated resnet
Dilated conv : ASPP Module
DeepLab v3 –网络结构
DeepLab v3 –ASPP升级版模块
DeepLab v3 –Multi-Grid
代码实现
05—20201023-8:30课节6:
图像分割:https://github.com/PaddlePaddle/PaddleSeg
06—20201024-8:30课节7:科学养猪
听课:在google直接搜,斯坦福的cs231n
Paddle文档:
实例分割:
论文:Alexander et al. panoptic segmentation ,CVPR 2019
论文:he et al., mask r-cnn, iccv 2017
论文:ren et al., faster r-cnn: towards real-time object detection with region proposal networks , nips 2015
论文:lin et al., feature pyramid networks for object detection ,cvpr 2017