0.写在前边

这算得上是真正意义上接触的第一个深度学习项目了。果真在既没有经验,又没有实力的情况下,项目被搞得一团糟。实践出真知,赶紧总结吸取教训!!!


1.项目流程

1.1数据流

(1)超参传递
1)通过.py传递
eg: params.py中存储超参[OPTIMIZER = ‘Adam’]的值;则在新的.py文件中导入[import params],便可通过 params.OPTIMIZER获得超参的值;
2)通过sys传递外部参数
(2)数据读取过程
1)获取图像名称列表:glob;
2)生成batches索引列表;
3)生成(图像,标签)batch:i加载数据;ii数据预处理[数据增广、归一化、标签转换等];

实用代码

数据增广

from albumentations import (PadIfNeeded,HorizontalFlip,    # VerticalFlip,   # CenterCrop,    Crop,Compose,    #Transpose,    #RandomRotate90,    #ElasticTransform,GridDistortion, OpticalDistortion,RandomSizedCrop,OneOf,CLAHE,RandomContrast,RandomGamma,RandomBrightness
)
def image_augmentation(currImg, labelMask):aug = Compose([VerticalFlip(p=0.5),              RandomRotate90(p=0.5),HorizontalFlip(p=0.5),Transpose(p=0.5)])augmented = aug(image=currImg, mask=labelMask)imageMedium = augmented['image']labelMedium = augmented['mask']return imageMedium,labelMedium

RGB图像归一化:从[0-255]到[0-1]

from keras.applications import imagenet_utils
imgBatch  = imagenet_utils.preprocess_input(imgBatch)
imgBatch = imgBatch / 255.0

1.2模型&代码

(通用定义)

from keras.layers import Input
# 定义模型所需要的 [输入的张量(占位?),张量的形状]
input_tensor = Input(shape=(imgSz[0],imgSz[1],self.params.NUM_CHANNELS))
input_shape = (imgSz[0],imgSz[1],self.params.NUM_CHANNELS)
# 模型逐层定义# backbone# 自定义# model = Model(input, x)# 损失函数# 优化算法# 编译# return model
#

后处理

语义分割

pred = np.argmax(pred, axis=2).astype('uint8')

高度预测

pred = convert_labels(pred, self.params, toLasStandard=True)

最后

pred = pred[:,:,0]
tifffile.imsave(os.path.join(self.params.OUTPUT_DIR, outName), pred, compress=6)

训练&推理

推理阶段:模型不需要损失函数和优化算法;
对数据的预处理和后处理是基本相同的;


2.模型&代码(基模差定义)

2.0 模型基础

特征交互的方式:
(1)级联:通道数变为原来的两倍
(2)级联再卷积:卷积的目的是降低通道数与原来保持一致
(3)加:逐元素相加 ----线性和、加权和
(4)乘:逐元素相乘
金字塔的表现方式:
(1)图像金字塔:图像resize到不同尺寸,基于不同尺寸的图像做预测;
(2)特征金字塔:图像–特征(不同尺寸的特征),基于不同尺寸的特征做预测;
(3)FPN:金字塔特征+顶层特征与低层特征融合;
resnet的特点: 包含残差块,即上一块的输出与下一层的输出融合

2.1 UNet

encoder-decoder结构
四个卷积块 & 四个上采样块 + skip connection

2.2 FPN

特征金字塔 预测

2.3 LinkNet

四个卷积块 & 四个上采样块 + skip connection
编码时resnet作为backbone

2.4 PSPNet

金字塔池化模块:不同尺度的池化得到不同尺度的特征,再上采样到原来的大小,进行级联;


3.小细节

  • 命名: 项目、文件夹、文件、类、函数、方法、变量等,任何需要命名的东西,做到简洁、见名知意
  • 版本控制: 不同版本间的名称做到有序有意
    – 版本控制的方法:外隔离、内隔离;(源码多是外隔离[.py],师兄多是内隔离[class])
  • 功能封装: (1)程序模块化:相似的功能模块集成(函数、类、包);(2)使用高级模块化的语句:即用尽可能少的、高效的代码完成需要的功能;

IGARSS2019-项目实战总结-keras相关推荐

  1. 【深度学习 项目实战】Keras深度学习多变量时间序列预测的LSTM模型

    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程.人工智能教程 本篇文章将介绍基于 ...

  2. keras中文文档_【DL项目实战02】图像识别分类——Keras框架+卷积神经网络CNN(使用VGGNet)

    版权声明:小博主水平有限,希望大家多多指导. 目录: [使用传统DNN] BG大龍:[DL项目实战02]图像分类--Keras框架+使用传统神经网络DNN​zhuanlan.zhihu.com [使用 ...

  3. 浙大博士导师整理:Tensorflow和Pytorch的笔记(包含经典项目实战)

    作为一名AI工程师,掌握一门深度学习框架是必备的生存技能之一. 自 TensorFlow 从 Google 中脱颖而出以来,它在研究和商业领域成为最受欢迎的开源深度学习框架,紧接着 从 Faceboo ...

  4. 清华博士导师整理:Tensorflow和Pytorch的笔记(包含经典项目实战)

    作为一名AI工程师,掌握一门深度学习框架是必备的生存技能之一. 自 TensorFlow 从 Google 中脱颖而出以来,它在研究和商业领域成为最受欢迎的开源深度学习框架,紧接着 从 Faceboo ...

  5. 【项目实战】Python基于孤立森林算法(IsolationForest)实现数据异常值检测项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+代码讲解),如需数据+代码+文档+代码讲解可以直接到文章最后获取. 1.项目背景 孤立森林是基于Ensemble的快速异常检测方法,具有线性时间复 ...

  6. 清华博士导师整理:Tensorflow 和 Pytorch 的笔记(包含经典项目实战)

    作为一名 AI 工程师,掌握一门深度学习框架是必备的生存技能之一. 自 TensorFlow 从 Google 中脱颖而出以来,它在研究和商业领域成为最受欢迎的开源深度学习框架,紧接着 从 Faceb ...

  7. python数据分析与挖掘项目实战记录

    python数据挖掘项目实战记录 取自<Python数据分析与挖掘实战>一书,整理各个项目中用到的数据处理方法: 数据预处理方法 建立模型方法 绘制图形 对于分类问题:用模型分类:混淆矩阵 ...

  8. python人工智能项目实例-python人工智能项目实战,PDF+源码

    原标题:python人工智能项目实战,PDF+源码 <python人工智能项目 Intelligent Projects Using Python> 实施机器学习和深度学习方法,使用Pyt ...

  9. 深度学习入门系列6项目实战:声纳回声识别

    大家好,我技术人Howzit,这是深度学习入门系列第六篇,欢迎大家一起交流! 深度学习入门系列1:多层感知器概述 深度学习入门系列2:用TensorFlow构建你的第一个神经网络 深度学习入门系列3: ...

  10. Kaggle深度学习与卷积神经网络项目实战-猫狗分类检测数据集

    Kaggle深度学习与卷积神经网络项目实战-猫狗分类检测数据集 一.相关介绍 二.下载数据集 三.代码示例 1.导入keras库,并显示版本号 2.构建网络 3.数据预处理 4.使用数据增强 四.使用 ...

最新文章

  1. Paper5:Curved-Voxel Clustering for Accurate Segmentation of 3D LiDAR Point Clouds with Real-Time Per
  2. spark(一) build
  3. c语言数据储存系统,编的学生成绩管理系统 从文件中读取保存数据总会多读入一组乱码数据...
  4. 巧断梯度:单个loss实现GAN模型(附开源代码)
  5. 北京Dotnet分享会 || 精英论坛第三期
  6. P4233-射命丸文的笔记【NTT,多项式求逆】
  7. SpringBoot注解@Value取值取不到问题
  8. 17.1 Replication Configuration 复制:
  9. keil ISIS AT89C51单片机
  10. 删除倾斜OSGB数据中的漂浮物
  11. PHP判断是手机端访问还是PC端访问网站
  12. 小米平板2(2015716)官方线刷包_救砖包_解账户锁
  13. 不同币种间的清账 应付账款是USD记账 预付账款账款是人民币记账 如何清账
  14. 【安卓学习之互动直播】 腾讯云直播 1 - 注册/登录/个人信息
  15. [未来成长] 分享:《麦肯锡教我的写作武器》如何写出一篇具有逻辑表现力的文案...
  16. mac版微信复制多个消息
  17. 【补充】为什么一定要用残差图检查你的回归分析?
  18. 从联想昭阳到MacBook Pro,致我的那些败家玩意—
  19. C语言标准输入输出缓冲区
  20. 初中数学结合计算机教学设计,初中数学教学设计中多媒体技术的运用

热门文章

  1. 几种常用非关系型数据库
  2. FBI针对Tor网络的恶意代码分析
  3. 珠海iBS有没有口语课程?学习效果怎么样?
  4. jinja2 简单入门
  5. 产业观察 | 区块链与农业结合迸发新火花,助推农业现代化建设
  6. 【简单DP】CF1420 C1
  7. windows下配置Tomcat为系统服务
  8. 【大数据】三、相似项发现(Jaccard、Shingling、MinHashing)
  9. hexdump命令使用
  10. 档案馆建设标准条文说明