百度飞桨paddlepaddle图像分割七日打卡营笔记

weixin_44305638 2020-10-24 10:49:55
时间: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, concateltwise_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: resnetdilated 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
...全文
835 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,076

社区成员

发帖
与我相关
我的任务
社区描述
华为认证、思科认证、项目管理、计算机等级考试、Linux认证、微软认证、H3C认证等IT认证相关的技术交流空间。
社区管理员
  • IT培训
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧