TF学习之DeepLabv3+代码阅读6(train_utils)

DeeplabV3 制作自己数据集,遇到的问题 1、deeplabv3+训练自己数据时,转换tfrecord格式出现问题。一直没有train.txt的转换结果。 结果出现./pascal_voc_seg/VOCdevkit/mydata/JPEGImages/.jpg; No such file or directory 错误。 后来发现是train.txt文件下最后有两行空格。删掉后重新执行程序即可转换完成。 2、... 阅读详情

DeepLabv3+代码阅读之train_utils.py

一、get_model_learning_rate()

def get_model_learning_rate(learning_policy,# Learning rate policy for training.
                            base_learning_rate,# The base learning rate for model training.
                            learning_rate_decay_step, # Decay the base learning rate at a fixed step.
                            learning_rate_decay_factor,# The rate to decay the base learning rate.
                            training_number_of_steps,# Number of steps for training.
                            learning_power,# Power used for 'poly' learning policy.
                            slow_start_step,# Training model with small learning rate for the 
                            				# first few steps.
                            slow_start_learning_rate,# The learning rate employed during slow start.
                            slow_start_burnin_type='none'):# The burnin type for the slow start stage. Can be
      													   #`none` which means no burnin or `linear` which 
      													   # means the learning rate increases linearly from 
      													   # slow_start_learning_rate and reaches
      													   # base_learning_rate after slow_start_steps.
  """Gets model's learning rate.

  Computes the model's learning rate for different learning policy.
  Right now, only "step" and "poly" are supported.
  (1) The learning policy for "step" is computed as follows:
    current_learning_rate = base_learning_rate *
      learning_rate_decay_factor ^ (global_step / learning_rate_decay_step)
  See tf.train.exponential_decay for details.
  (2) The learning policy for "poly" is computed as follows:
    current_learning_rate = base_learning_rate *
      (1 - global_step / training_number_of_steps) ^ learning_power

  """
  global_step = tf.train.get_or_create_global_step()
  adjusted_global_step = global_step

  if slow_start_burnin_type != 'none':
    adjusted_global_step -= slow_start_step

  if learning_policy == 'step':
    learning_rate = tf.train.exponential_decay(
        base_learning_rate,
        adjusted_global_step,
        learning_rate_decay_step,
        learning_rate_decay_factor,
        staircase=True)
  elif learning_policy == 'poly':
    learning_rate = tf.train.polynomial_decay(
        base_learning_rate,
        adjusted_global_step,
        training_number_of_steps,
        end_learning_rate=0,
        power=learning_power)
  else:
    raise ValueError('Unknown learning policy.')

  adjusted_slow_start_learning_rate = slow_start_learning_rate
  if slow_start_burnin_type == 'linear':
    # Do linear burnin. Increase linearly from slow_start_learning_rate and
    # reach base_learning_rate after (global_step >= slow_start_steps).
    adjusted_slow_start_learning_rate = (
        slow_start_learning_rate +
        (base_learning_rate - slow_start_learning_rate) *
        tf.to_float(global_step) / slow_start_step)
  elif slow_start_burnin_type != 'none':
    raise ValueError('Unknown burnin type.')

  # Employ small learning rate at the first few steps for warm start.
  return tf.where(global_step < slow_start_step,
                  adjusted_slow_start_learning_rate, learning_rate)

二、add_softmax_cross_entropy_loss_for_each_scale

对每一个尺度的输出结果计算cross entropy loss
参数:
	scales_to_logits: logits名字到不同尺度的输出的对应,shape: [batch, logits_height, logits_width, num_classes].
	labels: Groundtruth labels, shape: [batch, image_height, image_width, 1].
	num_classes: 类别数
	ignore_label: 忽略的标签编号
	loss_weight: loss的权重(=1.0)
	upsample_logits: 是否对logits上采样
	hard_example_mining_step: default is 0
	top_k_percent_pixels: default is 0
	scope: the scope for the loss.
def add_softmax_cross_entropy_loss_for_each_scale(scales_to_logits,
                                                  labels,
                                                  num_classes,
                                                  ignore_label,
                                                  loss_weight=1.0,
                                                  upsample_logits=True,
                                                  hard_example_mining_step=0,
                                                  top_k_percent_pixels=1.0,
                                                  scope=None):

  if labels is None:
    raise ValueError('No label for softmax cross entropy loss.')
  # outputs_to_scales_to_logits = {k: {} for k in model_options.outputs_to_num_classes}
  # model_options.outputs_to_num_classes = {'semantic':21}
  # outputs_to_scales_to_logits = {'semantic': {'merged_logits': {}}}
  # scales_to_logits = outputs_to_scales_to_logits['semantic'] = {'merged_logits': {}}
  for scale, logits in six.iteritems(scales_to_logits):
    loss_scope = None
    if scope:
      loss_scope = '%s_%s' % (scope, scale)# 'semantic_merged_logits'

    if upsample_logits:
      # Label is not downsampled, and instead we upsample logits.上采样logits,而不是下采样label
      logits = tf.image.resize_bilinear(# 上采样logits用bilinear插值
          logits,
          preprocess_utils.resolve_shape(labels, 4)[1:3],
          align_corners=True)
      scaled_labels = labels
    else:
      # Label is downsampled to the same size as logits.下采样label
      scaled_labels = tf.image.resize_nearest_neighbor(# 下采样label则使用nearest插值
          labels,
          preprocess_utils.resolve_shape(logits, 4)[1:3],
          align_corners=True)
	# 插值算法不包含batch维度,resize之后再加上batch维度
    scaled_labels = tf.reshape(scaled_labels, shape=[-1])
    not_ignore_mask = tf.to_float(tf.not_equal(scaled_labels,			   # not_equal(x,y)返回x!=y元素的真值
                                               ignore_label)) * loss_weight# 提取出label中不被忽略的像素位置
                                               							   # mask并乘权重
    one_hot_labels = tf.one_hot(
        scaled_labels, num_classes, on_value=1.0, off_value=0.0)# 变成one hot label

    if top_k_percent_pixels == 1.0:
      # Compute the loss for all pixels.
      tf.losses.softmax_cross_entropy(
          one_hot_labels,
          tf.reshape(logits, shape=[-1, num_classes]),
          weights=not_ignore_mask,
          scope=loss_scope)# loss_scope
    else:
      logits = tf.reshape(logits, shape=[-1, num_classes])
      weights = not_ignore_mask
      with tf.name_scope(loss_scope, 'softmax_hard_example_mining',
                         [logits, one_hot_labels, weights]):
        one_hot_labels = tf.stop_gradient(
            one_hot_labels, name='labels_stop_gradient')
        pixel_losses = tf.nn.softmax_cross_entropy_with_logits_v2(
            labels=one_hot_labels,
            logits=logits,
            name='pixel_losses')
        weighted_pixel_losses = tf.multiply(pixel_losses, weights)
        num_pixels = tf.to_float(tf.shape(logits)[0])
        # Compute the top_k_percent pixels based on current training step.
        if hard_example_mining_step == 0:
          # Directly focus on the top_k pixels.
          top_k_pixels = tf.to_int32(top_k_percent_pixels * num_pixels)
        else:
          # Gradually reduce the mining percent to top_k_percent_pixels.
          global_step = tf.to_float(tf.train.get_or_create_global_step())
          ratio = tf.minimum(1.0, global_step / hard_example_mining_step)
          top_k_pixels = tf.to_int32(
              (ratio * top_k_percent_pixels + (1.0 - ratio)) * num_pixels)
        top_k_losses, _ = tf.nn.top_k(weighted_pixel_losses,
                                      k=top_k_pixels,
                                      sorted=True,
                                      name='top_k_percent_pixels')
        total_loss = tf.reduce_sum(top_k_losses)
        num_present = tf.reduce_sum(
            tf.to_float(tf.not_equal(top_k_losses, 0.0)))
        loss = _div_maybe_zero(total_loss, num_present)
        tf.losses.add_loss(loss)

三、get_model_gradient_multipliers

梯度乘法器为模型的变量调整学习率。对于分割任务,模型通常会从由训练图像分类任务得到的模型中进行微调。
我们通常会对最后一层选取大一些(例如10倍)的学习率。
参数:
	last_layers: 最后一层的域
	last_layer_gradient_multiplier:最后一层的梯度乘法器
返回:
	梯度乘法器的一个映射,{变量:乘法器的值}
def get_model_gradient_multipliers(last_layers, last_layer_gradient_multiplier):

  gradient_multipliers = {}

  for var in tf.model_variables():
    # Double the learning rate for biases.
    if 'biases' in var.op.name:
      gradient_multipliers[var.op.name] = 2.

    # Use larger learning rate for last layer variables.
    for layer in last_layers:
      if layer in var.op.name and 'biases' in var.op.name:
        gradient_multipliers[var.op.name] = 2 * last_layer_gradient_multiplier
        break
      elif layer in var.op.name:
        gradient_multipliers[var.op.name] = last_layer_gradient_multiplier
        break

  return gradient_multipliers

四、get_model_init_fn

从checkpoint中初始化模型。
参数:
	train_logdir: 储存训练过程的log和checkpoint文件目录
	tf_initial_checkpoint: 用来初始化的checkpoint
	initialize_last_layer: 是否初始化最后一层
	last_layers: 模型的最后一层
	ignore_missing_vars: 忽略checkpoint中没有的变量
返回:
	初始化后的模型
def get_model_init_fn(train_logdir,
                      tf_initial_checkpoint,
                      initialize_last_layer,
                      last_layers,
                      ignore_missing_vars=False):

  if tf_initial_checkpoint is None:
    tf.logging.info('Not initializing the model from a checkpoint.')
    return None

  if tf.train.latest_checkpoint(train_logdir):# 找到latest保存的checkpoint文件
    tf.logging.info('Ignoring initialization; other checkpoint exists')
    return None

  tf.logging.info('Initializing model from path: %s', tf_initial_checkpoint)

  # Variables that will not be restored.
  exclude_list = ['global_step']
  if not initialize_last_layer:
    exclude_list.extend(last_layers)

  variables_to_restore = tf.contrib.framework.get_variables_to_restore(
      exclude=exclude_list)

  if variables_to_restore:
    init_op, init_feed_dict = tf.contrib.framework.assign_from_checkpoint(
        tf_initial_checkpoint,
        variables_to_restore,
        ignore_missing_vars=ignore_missing_vars)
    global_step = tf.train.get_or_create_global_step()

    def restore_fn(unused_scaffold, sess):
      sess.run(init_op, init_feed_dict)
      sess.run([global_step])

    return restore_fn

  return None
使用deeplabv3+训练自己数据集(迁移学习) 概述 在前边一篇文章,我们讲了如何复现论文代码,使用pascal voc 2012数据集进行训练和验证,具体内容可以参考《deeplab v3+在pascal_voc 2012数据集上进行训练》,在本篇文章,我们主要讲述,如何对deeplab v3+进行迁移学习,也即如何使用deeplab v3+算法来训练个人的数据集。 1. 数据集准备 首先在开始之前我们先对数据集做一个简单的说明,由于dee... 阅读详情

相关推荐

Semantic Segmentation DeepLab v3 读取数据集(TFRecord)代码详解

本文主要介绍谷歌官方在Github TensorFlow中开源的官方代码DeepLab在读取TFRecord格式数据集所使用的方法。 配置DeepLab v3 首先,需要将整个工程拉取到本地的workspace。 1. 源码地址:https://github.com/tensorflow/models/tree/master/research/deeplab 2. Cloneyuan da...

koma_csdn的博客 5388

Deeplab训练自己的数据集

1.制作自己的数据集 1.1 用labelme生成json文件 lebelme安装: # Ubuntu 14.04 / Ubuntu 16.04 # Python2 # sudo apt-get install python-qt4 # PyQt4 sudo apt-get install python-pyqt5 # PyQt5 sudo pip install labelme # Pyth...

lucifer_24的博客 2607

train_utils

train_utils

[学习笔记] Faster R-CNN源码解析

1. 如何使用PyTorch官方代码;2. 自定义Dataset;3. Faster R-CNN框架图; 4. Faster R-CNN核心代码

Le0v1n 的博客 4727

云课堂吴恩达深度学习01第二周lr_utils.py和test_catvnoncat.h5和train_catvnoncat.h5文件

云课堂吴恩达深度学习01第二周作业中所需要的lr_utils.py和test_catvnoncat.h5和train_catvnoncat.h5文件。

使用Xpath语法爬取豆瓣读书Top250

使用Xpath语法爬取豆瓣读书Top250 使用的软件是Spyder 网页地址:https://book.douban.com/top250?start=0 直接上代码: # -*- coding: utf-8 -*- """ Created on Thu Apr 30 18:35:17 2020 @author: ASUS """ import requests import csv fr...

weixin_43987253的博客 2081

图像语义分割:TensorFlow Deeplabv3+ 训练自己数据集

本文主要介绍如何使用自己的数据集训练DeepLabv3+分割算法,代码使用的是官方源码。 1、代码简介 当前使用TensorFlow版本的官方源码,选择它的原因是因为代码中的内容比较全面,除了代码实现以外,还提供了许多文档帮助理解与使用,同时还提供了模型转换的代码实现。 代码地址: 【github】models/research/deeplab at master · tensorflow...

ling620的专栏 4874

基于大模型的急性重症胰腺炎全流程预测与诊疗方案研究

本研究构建了基于大模型的急性重症胰腺炎(SAP)全流程预测与诊疗系统,实现了从术前风险评估到术后康复管理的精准诊疗闭环。通过整合临床信息、实验室检查和影像学等多源数据,模型在测试集上预测准确率达X%,AUC为X,显著优于传统评分系统。研究创新性地将预测结果应用于手术方案制定、麻醉决策、并发症防控及个性化护理,形成智能化诊疗方案。验证结果显示模型具有良好的稳定性和临床适用性,同时配套的健康教育体系提升了患者自我管理能力。尽管存在样本局限性和模型可解释性等不足,该研究为SAP的精准诊疗提供了新范式,未来可通过扩

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1114

ckpt下载 deeplabv3_Ubantu下 用deeplabV3+训练自己的数据集 你可能遇到的所有坑都在这了...

1.安装环境 一定要注意版本问题因为版本对不上,花了好多时间猜正确的版本。系统:Ubantu16.04nvidia驱动版本 410.78python 版本 3.5.2tensorflow-gpu版本 1.14.0CUDA : 10.0cudnn: 7.6.5labelme 3.92.安装deeplabV3+项目下载后解压 下载解压的文件夹名字叫 /models-master,为了方便,我改了名字为...

weixin_29777019的博客 696

智能预测性维护AI系统实战效率提升:AI应用架构师的技巧分享

在工业领域,预测性维护(Predictive Maintenance, PdM)是降低停机损失、优化维护成本的关键手段。然而,现有系统往往面临三大效率瓶颈数据处理延迟:工业设备产生的海量实时数据(如传感器、PLC)需传输至云端处理,导致预警滞后;模型推理效率:复杂深度学习模型(如ResNet、Transformer)在边缘设备上推理时间长,无法满足实时要求;落地集成困难:与企业现有ERP、MES、SCADA系统对接繁琐,导致“模型好用但业务不用”的尴尬。本文从架构、数据、模型、落地架构设计。

AI天才研究院 743

DDPM代码详细解读(2):Unet结构、正向和逆向过程、IS和FID测试、EMA优化

Diffusion Models专栏文章汇总:入门与实战 前言:大部分DDPM相关的论文代码都是基于《Denoising Diffusion Probabilistic Models》和《Diffusion Models Beat GANs on Image Synthesis》贡献代码基础上小改动的。官方的DDPM是tensorflow TPU版本,暂时没有GPU的版本。上一篇文章介绍了数据集加载,超参数的含义、关键参数的计算方法等,这一篇重点解读一下网络结构。 目录 EMA优化 训练目标.

沉迷单车的追风少年 1万+

deeplabv3+训练自己的数据集

环境:ubuntu 16.04 + TensorFlow 1.9.1 + cuda 9.0 + cudnn 7.0 +python3.6 tensorflow 项目链接 https://github.com/tensorflow/models.git (deeplabv3+) 1、添加依赖库到PYTHONPATH 首先添加slim路径,每次打开terminal都要加载路径 # From ...

棉花糖的博客 1万+

【温室气体数据集】全球总碳柱观测网络 TCCON

【温室气体数据集】全球总碳柱观测网络 TCCON

WW、forever的博客 436

【实验记录】DeepLabv3+ 训练&测试

Code:TensorFlow Models DeepLab:models/research/deeplab/ Tutorial:Installation Model Zoo:Model Zoo训练参考: DeepLab on PASCAL VOC 2012 DeepLab on Cityscapes 官方FAQGPU:2080Ti CUDA 9.0 CUDNN 7.0.5 Python 3.6 Tensorflow-gpu 1.12.0======================= 安装过程 ======

学习 & 分享 ~ 1万+

三维点云转深度图

点云投影过程是将三维点云数据转化为二维图像坐标的关键步骤,它的实现涉及到相机内外参数的计算,包括相机的内部参数(如焦距和主点)和外部参数(如相机位置和方向)。具体来说,可以通过将每个点的三维坐标转换为相机坐标系下的坐标,然后使用相机内部参数和外部参数来计算在二维图像中的坐标。接着计算每个点的深度值,将深度值映射到像素值上,最后创建深度图像并将深度值赋给对应的像素值。这里需要注意的是,在将深度值映射到像素值上时,需要将像素值转换为 uchar 类型,否则在将深度值赋给像素值时会出现类型不匹配的错误。

点云兔子的博客 3171

Autosar NvM配置-手动配置Nvblock及使用-基于ETAS软件

NVM作为存储协议栈中最顶层的模块,是必须要掌握的。目前项目基本使用MCU带的Dflash模块,使用Fee模拟eeprom。在项目前期阶段,应该充分讨论需要存储的内容,包括应用数据,诊断数据等,用以评估Dflash空间是否够用。本文基于ETAS软件介绍NVBlock配置生成NVM参数及使用。使用NVBlock配置生成,基本不用手写代码,还是比较方便的。对于Nv block的划分,建议将同时写的一类数据放到一个block中,因为block除了data以外,Fee还会增加一些header数据,占用不少内存。

赞的博客 1884

UNet - 训练数据train

训练的代码只是在之前图像分类的基础上做了一些更改,具体的可以看下面的文章pytorch 搭建 LeNet 网络对 CIFAR-10 图片分类首先,导入之前定义的UNet 网络然后,加载训练集和测试集这里训练的时候可以将数据打乱,测试的时候没有必要,batch_size 因为电脑硬件的问题设置成2,再大的话这里内存就会不够了然后定义优化器和损失函数,这里用的是BCE加上sigmoid的损失函数训练的时候,要将模式改为train模式,然后训练的步骤很常规。

Henry的博客 3337

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

图像语义分割实战:TensorFlow Deeplabv3+ 训练自己数据集

本文是为了记录deeplabv3+训练过程。以上就是今天要讲的内容,本文记录了tensorflow下利用deeplabv3+对自己的数据集进行训练和测试。训练过程中可能还有其他问题,日后会继续补充。

爱唱歌的卡卡西的博客 5942

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【深度学习】用Transformer实现OCR字符识别!

作者:安晟、袁明坤,Datawhale成员在CV领域中,transformer除了分类还能做什么?本文将采用一个单词识别任务数据集,讲解如何使用transformer实现一个简单的OCR文字识别任务,并从中体会transformer是如何应用到除分类以外更复杂的CV任务中的。全文分为四部分:一、数据集简介与获取二、数据分析与关系构建三、如何将transformer引入OCR四、训练框架代码讲解注:...

fengdu78的博客 1283

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Tensoflow-代码实战篇--Deeplab-V3+--代码复现(一)

一、参考资料: 1、大神博客: https://blog.youkuaiyun.com/u011974639/article/details/80574306 2、官方代码: githup 二、准备工作: 环境: 环境: anaconda3 + python3 + tensorflow-gpu1.8 机器:1 块 GTX1070(8G) git代码: git clone https://github.com/...

杰瑞的博客 1万+

学习率Learning Rate

《TensorFlow实战Google深度学习框架(第2版)》4.3 节介绍了在训练神经网络时, 需要设置学习率( learning rate )控制参数更新的速度。 本节将进一步介绍如何设置学习率。学习率决定了参数每次更新的幅度。 如果幅度过大, 那么可能导致参数在极优值的两侧来回移动。 4.3 节介绍过优化 J(x) = x2 函数的样例。 如果 在优化中使用的学习率为 l ,那么整个优化过程...

qq_35649072的博客 2511

Tensorflow之deeplab训练cityscapes数据集

在《TensorFlow之deeplab语义分割API接口调试》文章中,介绍了如何安装tensorflow model以及训练自己的语义分割模型,本文介绍对cityscapes数据集的训练方法 ...

ZONGXP的博客 4442

DeepLabV3+模型训练—学习笔记

数据准备 数据目录结构 + portrait # 自己的数据集名称 + JPEGImages #RGB original image(.jpg) + SegmentationClass #label image(.png) + ImageSets + Segmentation - train.txt # filename with...

studyeboy的专栏 4584

使用TensorFlow编写识别数字的CNN训练程序详解

文本代码基于TensorFlow 0.12.0版本,使用tf.contrib.learn封装的方法来实现CNN。 CNN的结构从网上借用一张图片来表示一下,是一个有2层hidden layer的CNN。MNIST数据的获取以往我们获取MINIST的方式是: from tensorflow.examples.tutorials.mnist import input_data mnist = i

ligang_csdn的博客 2万+

一些Utils包的用法

[b]org.apache.commons.lang.StringUtils [/b] 将String数组每个元素以某个符号分隔成一个String [code="java"] //org.apache.commons.lang.StringUtils包的使用连接API Cookie[] cookies=httpClient.getState().getCookies(); Strin...

码农一个 978
上一篇: TF学习之DeepLabv3+代码阅读5(model)
下一篇: DeepLabv3+训练细节总结
lscelory
博客等级 码龄9年 36粉丝 27原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值