# CV3 **Repository Path**: ai_123/cv3 ## Basic Information - **Project Name**: CV3 - **Description**: 图像分割 CV3 通用框架:FCN, SegNet, PSPNet, DeepLab, UNet - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-12-31 - **Last Updated**: 2021-12-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## §1 项目说明 #### 1.1 目的 - 实现在同一个框架中,能够方便地使用不同的网络模型做CV3图像分割任务 1. 在 ./nets/ 目录下编写添加CV3图像分类网络模型文件 2. 在 net_main.py 中选择使用的网络 3. 按预测/训练/评价的功能,运行 predict.py / train.py /evaluate.py 框架程序 #### 1.2 环境 tensorflow-cpu==2.2.0 #### 1.3 预测 / 训练 / 评价 1. 修改 net_main.py 的 `import nets.mobilenet_v1 as net`,配置选用的网络 2. 运行 predict.py / train.py / evaluate.py #### 1.4 样例任务、数据集 - 数据集 - 使用 VOC_2012 训练 - 训练效果没有达到论文给出的程度,也没有达到bubbling在帖子中给出的程度 - 为了检查训练框架是否有问题,使用bubbling给出的训练文件,从0开始训练来对比效果。 但是复现表明,用bubbling给出的训练文件,若从0学习,效果非常差,基本除了背景以外的其他什么都学不到;复现过程若想取得好的学习效果,只能通过先加载预训练权重的迁移学习得到。但预训练权重的本身效果又十分之好,似乎加载迁移学习权重之后的学习没有多少意义;也无法得知预训练权重bubbling是如何获得的。 - 训练效果 - 几种网络的训练得到的权重、mIoU,见 ./logs/ - 几个学习效果对比(原图 vs 标签 vs 学习效果) ![拼接 - 副本](.md_images/%E6%8B%BC%E6%8E%A5%20-%20%E5%89%AF%E6%9C%AC.jpg) ## §2 笔记 #### 2.1 参考 > 1. 动手深度学习 > 2. 深度学习实践:计算机视觉 (DLpCV) > 3. 复现实例参考:bubbling #### 2.2 模型结构 ##### model_list ... ##### FCN > - 其他参考 > - [FCN详细讲解](https://blog.csdn.net/qq_41760767/article/details/97521397#1FCN_1) > - notes > - 实现 > 1. 使用了转置卷积与反池化的操作,输入图片经过常规CNN后的结果还原分分辨率 > 2. 不同尺度之间使用了类似ResNet跨层连接的操作,增强信息传递 > 3. 去掉了部分损失空间信息的操作,如全局池化,并使用预训练参数加快整个训练 > - 结构 > ![img](.md_images/2019072815355086.png) > ![img](.md_images/2019072816051843.png) ##### SegNet > - 其他参考 > - [SegNet论文详解](https://blog.csdn.net/wjinjie/article/details/10673278),概要: > 摘要 > 引言 > 文献综述 > 网络结构 > 解码器的改变 > 训练 > 分析 > 基准 > 道路场景语义分割 > SUN REG-D室内场景 > 讨论和今后的工作 > 结论 > - notes > - 与FCN一样,采用了encoder-decoder结构,但SegNet上采样部分的操作更加整洁 > - 池化操作可记忆选出最大值的相对位置,在上采样过程中使用,这是与FCN最大差别 > - 结构 > ![SegNet_结构](.md_images/SegNet_%E7%BB%93%E6%9E%84.bmp) ##### PSPNet > - 其他参考 > > - [PSP论文解读](https://blog.csdn.net/u011974639/article/details/78985130?ops_request_misc=%7B%22request%5Fid%22%3A%22162989875716780269829680%22%2C%22scm%22%3A%2220140713.130102334.pc%5Fblog.%22%7D&request_id=162989875716780269829680&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-1-78985130.pc_v2_rank_blog_default&utm_term=PSP&spm=1018.2226.3001.4450), 概要: > Abstract > Introduction > Related work > Archiecture > pyramid pooling module > 整体网络结构 > 基于ResNet的深度监督网络 > Experiment > 训练细节的设置情况 > ImageNet scene parsing challenge 2016 > PASCAL VOC 2012 > Cityscapes > Conclusion > > - notes > > - PSPNet - Pyramid Scene Parsing Network 金字塔场景解析网络 > - 更多考虑了上下文信息、不同的全局信息,使用了多尺度pooling,得到不同尺度的特征图 > - 训练时加入了辅助损失函数(损失函数:交叉熵损失,类似交并比损失) > > - 结构 > ![PSPNet_结构](.md_images/PSPNet_%E7%BB%93%E6%9E%84.bmp) > > ![PSPNet_详细结构](.md_images/PSPNet_%E8%AF%A6%E7%BB%86%E7%BB%93%E6%9E%84.bmp) > > - 实现 > > 1. backbone 使用 MobileNet,截取了 MobileNet_v1 的四次下采样(16×)的部分做迁移学习。 > 原论文使用ResNet101和空洞卷积提取三次下采样的feature map i.e.feature map是原输入的1/8。 > 原论文使用的ResNet101为修改过的。 > P.S. mobilenet_v2 在keras中的模型有问题,截取其中部分层做迁移学习时会报错。 > P.S. tf2.2.0中没有收入modilenet_v3的模型。 > 2. 加强特征提取结构,将特征图平均池化为 6x6,3x3,2x2,1x1 的结果。 > 3. 最后,将特征图和四个平均池化结果上采样(原论文使用双线性插值方法)回特征图尺寸后,融合再做卷积处理。 > 4. 最后由网络处理结果做分类、将分类结果resize回输入图片的尺寸,得到图像分割结果。 > > - 数据处理 > > 因为backbone直接采用了预训练好的mobilenet,没有再按原论文使用数据增强方法(随机翻转、尺寸在0.5到2之间缩放、角度在-10到10之间旋转、随机的高斯滤波)。 > > 为了方便实现,输入数据先统一调整为(480,480,3)尺寸。 ##### DeepLab > - 结构 > ![DeepLab v3_结构](.md_images/DeepLab%20v3_%E7%BB%93%E6%9E%84.bmp) ##### UNet > - notes > - backbone - 卷积和最大池化的堆叠, 获得五个初步有效特征层。后续利用这五个有效特征层做特征融合。 > - 加强特征提取,利用五个初步有效特征层进行上采样、特征融合,获得一个最终融合了所有特征的有效特征层。 > - 预测部分,利用最终获得的最后一个有效特征层对每一个特征点进行分类,相当于对每一个像素点进行分类。 > - 结构 > ![Unet_结构](.md_images/Unet_%E7%BB%93%E6%9E%84.bmp) #### 2.3 实现思路 backbone 用的是预训练的 mobilenet_v1。 先用数据集训练网络的 decoder 部分,再联合 backbone 一起训练。 #### 2.4 数据集 略。