keras优化算法_目标检测算法 - CenterNet - 代码分析

0df77a933b56185144189e715471fbbc.png
代码出处

吃水不忘打井人,分析github上的基于keras的实现:

xuannianz/keras-CenterNet​github.com
923504f8ffdaf0474179b62a2ba97384.png
代码主体结构

模型训练的主函数流程如下所示,该流程也是使用keras的较为标准的流程。其中代码篇幅较大的是数据准备的部分,通常的代码也亦如此。下面按照不同的部分分别进行说明。

b58c041b08884c27d9fac8387b9673fe.png
create_generators 数据集准备

该代码支持Pascal VOC格式、COCO格式以及CSV格式。keras中有三个函数可以用来进行模型的训练:分别是fit,fit_generator和train_on_batch。

fit(train_x, train_y, batchsize, epochs)

在使用fit进行模型训练时,通常假设整个训练集都可以放入RAM,并且没有数据增强(即不需要keras生成器)。常用于简单小型的数据集训练。

fit_generator;常常使用的模型训练函数

fit_generator适用于大数据集无法直接全部放入内存中,以及标注数据较少需要使用数据增强来增加训练模型的泛化能力。fit_generator需要传入一个数据生成器,数据生成器可以每次动态的生成一个batchsize的训练数据,通常我们也将数据增强放入数据生成器中,这样便可以动态的生成增强后的数据。在使用fit_generator时,需要传入steps_per_epoch的值,而fit函数则不需要,这是因为fit函数的steps_per_epoch默认等于总的训练数据/batchsize,而对于fit_generator来说,如果采用了数据增强,则可以产生无限的batchsize训练数据,因此需要指定该参数。

By the way,数据生成器可以使用keras的API或者直接自己手码python的代码,因为其本质上也就是python的函数。

train_on_batch(batchX, batchY)

train_on_batch用于需要对训练迭代进行精细控制,给其传入一批数据即可(数据大小任意),不需要提供batchsize的大小。通常很少使用该函数进行模型训练。

  • 本算法的实现过程就是采用的fit_generator进行的模型训练。因此需要为其构建数据生成器。common.py文件:class Generator(keras.utils.Sequence)构建数据生成器的基类,咱们先说道说道keras.utils.Sequence这个类。
keras.utils.Sequence:这个基类通常应用于数据集生成一个数据序列。使用时需构建一个python类继承自该
基类,并必须实现__len__和__getitem__两个函数,如果要在每个epoch间修改数据集则需要实现on_epoch_end
方法。
NOTE:特别注意,__getitem__要返回一个完整的batchsize数据,__len__统计的也是有多少个batch

Generator类可以当成一个抽象基类,其中主要实现的是batch的划分、数据增强的处理、以及标注数据的转换(将bounding box的标注形式转换成高斯分布的标注)。而真正使用的数据集的生成器如下所示。主要按照不同的数据集生成的类,并均都继承于Generator抽象类,这里区分不同的数据集主要为了能方便区分其不同的数据标注格式,使用起来更为方便。主要是load_annotations()和load_image()函数的实现。至此数据生成器便构建完成了。

class PascalVocGenerator(Generator)
class CocoGenerator(Generator)
centernet网络构建

算法实现采用的Resnet50作为网络的backbone,采用下述引用网络。网络构建这里相对就比较简单了,取出Resnet的C5,先添加了一层dropout,然后进行了上采样,然后分别构建网络head,主要有三支:中心点预测、中心点偏移值预测以及bouding box的size预测。

from keras.applications.resnet50 import ResNet50

最后构建model,使用keras的Lambda层构建loss,作为model的output

loss_ = Lambda(loss, name='centernet_loss')([y1, y2, y3, hm_input, wh_input, reg_input, reg_mask_input, index_input])
model = Model(inputs=[image_input, hm_input, wh_input, reg_input, reg_mask_input, index_input], outputs=[loss_])
预训练模型权重加载

keras的模型加载可以使用load_weights来实现,其模型加载可以按照模型结构加载,此时by_name需设置为False。否则将按照网络层的名字来加载,此时通常将skip_mismatch也设置成True,即仅加载名字相同的层,其他名字不同的层直接跳过。因此可以利用这个特性,对已训练好的网络局部进行修改,然后再加载之前训练好的模型,方便进行模型的调优。

model.load_weights(args.snapshot, by_name=True, skip_mismatch=True)
模型配置

其中loss参数的传递有几种形式。

  • 目标函数/损失函数的字符串,比如keras内置的一些损失函数
  • 目标函数/损失函数,通常为自定义的损失函数
  • 将目标函数/损失函数定义成model的一个层,类似本代码的实现。本代码实现时,因为直接把loss作为model的输出,因此输入y_true和y_pred,实际使用y_pred即输出loss,对其进行优化。
model.compile(optimizer=Adam(lr=1e-3), loss={'centernet_loss': lambda y_true, y_pred: y_pred})def compile(self, optimizer,loss=None,metrics=None,loss_weights=None,sample_weight_mode=None,weighted_metrics=None,target_tensors=None,**kwargs):"""Configures the model for training.# Argumentsoptimizer: String (name of optimizer) or optimizer instance.See [optimizers](/optimizers).loss: String (name of objective function) or objective function.See [losses](/losses).If the model has multiple outputs, you can use a different losson each output by passing a dictionary or a list of losses.The loss value that will be minimized by the modelwill then be the sum of all individual losses.metrics: List of metrics to be evaluated by the modelduring training and testing.Typically you will use `metrics=['accuracy']`.To specify different metrics for different outputs of amulti-output model, you could also pass a dictionary,such as `metrics={'output_a': 'accuracy'}`.loss_weights: Optional list or dictionary specifying scalarcoefficients (Python floats) to weight the loss contributionsof different model outputs.The loss value that will be minimized by the modelwill then be the *weighted sum* of all individual losses,weighted by the `loss_weights` coefficients.If a list, it is expected to have a 1:1 mappingto the model's outputs. If a dict, it is expected to mapoutput names (strings) to scalar coefficients.sample_weight_mode: If you need to do timestep-wisesample weighting (2D weights), set this to `"temporal"`.`None` defaults to sample-wise weights (1D).If the model has multiple outputs, you can use a different`sample_weight_mode` on each output by passing adictionary or a list of modes.weighted_metrics: List of metrics to be evaluated and weightedby sample_weight or class_weight during training and testing.target_tensors: By default, Keras will create placeholders for themodel's target, which will be fed with the target data duringtraining. If instead you would like to use your owntarget tensors (in turn, Keras will not expect externalNumpy data for these targets at training time), youcan specify them via the `target_tensors` argument. It can bea single tensor (for a single-output model), a list of tensors,or a dict mapping output names to target tensors.**kwargs: When using the Theano/CNTK backends, these argumentsare passed into `K.function`.When using the TensorFlow backend,these arguments are passed into `tf.Session.run`.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言中创建一个整数数组_VBA中动态数组的创建及利用方法

大家好,后疫情时代一定会到来,各行各业,都将是一场战胜萧条的无声的战役。无论怎样,我们一定要坚信,疫情终将会过去,曙光一定会到来。后疫情时代将会是一个全新的世界,很多理念都将被打破&#…

用计算机求函数公式,计算机常用的函数公式有哪些?

01计算机常用的函数公式包括RANK函数、COUNTIF函数、IF函数、ABS函数、AND函数、AVERAGE函数、COLUMN 函数等。RANK函数是Excel计算序数的主要工具,它的语法为:RANK(number,ref,order),其中number为参与计算的数字或含…

golang 读取文件最后一行_python3从零学习-5.4.3、文件输入流fileinput

源代码: Lib/fileinput.py此模块实现了一个辅助类和一些函数用来快速编写访问标准输入或文件列表的循环。 如果你只想要读写一个文件请参阅 open().典型用法为:import fileinputfor line in fileinput.input(): process(line)这将遍历sys中列出的所有文件的行。argv[1:]如果…

云计算机具体应用场景,云计算的定义、类型及应用场景

云计算是20年来IT行业出现的最激动人心且最具颠覆性的技术,甚至比大型主机向客户端/服务器架构的迁移还更具颠覆性。无论是IT服务的交付方式,还是企业消费这些IT服务的方式,都因云计算而改变。用户也正在快速应对新架构带来的变革&#xff0c…

dataframe for循环 筛选_Python循环12种超强写法,又快又省内存

0 前言说到处理循环,我们习惯使用for, while等,比如依次打印每个列表中的字符:在打印内容字节数较小时,全部载入内存后,再打印,没有问题。可是,如果现在有成千上百万条车辆行驶轨迹,…

html5文字飞入插件,jquery使用CSS3实现文字动画效果插件Textillate.js

jquery使用CSS3实现文字动画效果插件Textillate.jsTextillate是一款基于CSS3动画效果的 JavaScript 库,您可非常轻轻松地把这些动画效果应该于网页中的任何文字。使用方法引入核心文件构建html标签My Title写入JS,初始化$(function () {$(.tlt).textilla…

工业机器人导轨 百度文库_工业机器人或许开创一个全新的PLC时代

自机器人诞生之日起人们就不断地尝试着说明到底什么是机器人。但随着机器人技术的飞速发展和信息时代的到来,机器人所涵盖的内容越来越丰富,机器人的定义也不断充实和创新。机器人技术作为20世纪人类最伟大的发明之一,自20世纪60年代初问世以…

银联分账与银联代付_第三方分账系统到底有哪些作用?

随着监管越来越严,业务越来越复杂,所有平台电商企业都需要通过第三方分账系统解决支付清算及二清等问题。作为第三方分账系统行业从业者,整理了部分关于系统的相关问题及解答,希望对大家有所帮助。问题一:第三方分账系…

计算机更改桌面,2010年职称计算机考试:更改桌面背景和颜色

Windows XP提供了各种桌面的颜色和背景方案,用户可以根据自己的爱好进行选择。颜 色充当桌面的最底层,背景覆盖于颜色之上。(l)桌面背景的更改在"显示属性"对话框中,选择"桌面"选项卡。在"桌面"选项卡上有一个"背景"列表框,选择列表框…

dell t40 固态系统盘_笔记本怎么安装固态硬盘 笔记本安装固态硬盘教程【详解】...

首先我不得不介绍一下我这古董级别的笔记本 硬件升级,然后给大家介绍一下笔记本安装固态硬盘的教程。dell戴尔1320,cpu t6500 主频2.1ghz 。内存运用了淘汰的ddr2 分别是两条1g,共2g 800频率。这样的古董用的着用固态么?SATA2.0接口完全成为…

如何进入zabbix的wab界面_如何不用光盘重装系统呢?

如果身边没有系统光盘如何重装系统呢?小鱼系统可以帮助你一键重装系统和U盘重装系统的方法,下面一起看下小鱼系统教你的如何不用光盘重装系统吧。一键重装系统方法1、首先请备份好电脑C盘重要资料,然后打开【小鱼系统】,进入电脑环…

全国高中计算机大赛,2019年含金量最大的中小学全国性竞赛活动——五大学科竞赛...

五大学科竞赛历史是我国含金量最高的中小学全国性竞赛活动,在各高校自主招生过程中,具有较高的参考价值。对相关方面有一定兴趣的同学,也可以积极参与。五大赛面向的对象都是高中学生。一、全国中学生数学奥林匹克竞赛此项竞赛的主办单位是中…

单片机红绿灯电路灯有几种_新农村建设的太阳能路灯如何选择?

随着我国城乡一体化发展进程,城乡道路照明已成为新农村建设必不可少的一部分。目前市面通用的道路照明有两种:即市电路灯照明(市电220V)和太阳能路灯照明。安装简便且不需要布线的太阳能路灯在新农村建设中应用广泛,下…

lr不能直接转ps编辑_摄影后期调色软件,Lr软件包

摄影后期调色除了用到PS软件还有一款与之媲美的就是LR软件了,全名是Adobe Lightroom,喜欢拍照的人;总会希望自己拍下来的照片更好看,不管是多好的器材直出的 jpg 本身总会多多少少有一些限制,而利用后期软件可以很好的…

hive中如何把13位转化为时间_重要知识点收藏 | Hive常用函数大全

关系运算1、等值比较: 语法&#xff1a;AB操作类型&#xff1a;所有基本类型描述: 如果表达式A与表达式B相等&#xff0c;则为TRUE&#xff1b;否则为FALSE举例&#xff1a;hive>select 1 from lxw_dual where 11;12、不等值比较: <>语法: A <> B操作类型: 所有…

一加6html查看程序,一加6T评测:极速屏下指纹,解锁你想要的轻快顺滑

【PConline 评测】作为年末旗舰机阵营的新成员&#xff0c;一加6T选在11月5日正式在国内市场亮相。这款充满极客味道的手机早期已经获得了许多海外用户的好评和关注&#xff0c;全新加入的光感屏幕指纹&#xff0c;历来以轻快流畅著称的系统体验&#xff0c;让一加6T再一次成为…

all方法 手写promise_promise.all的实现

今天自己来实现一下promise.all方法的实现; 先来看MDN官网对promise.all方法的介绍: 简单理解,当参数中的promise有一个失败了就直接返回失败的结果,返回第一个失败的结果,都成功返回所有的参数结果; 上代码: function promiseAll(promises){// 返回一个promise实例retu…

七代处理器装win7_为啥新电脑没法装windows7系统?解决方法总会有的

这两年购买新电脑的用户&#xff0c;常常会来问小白问什么不能安装win7系统。之前很多解释都是把矛头直接归咎于主板&#xff0c;但其实这得找Intel&#xff0c;第六代Intel处理器以后所使用的主板(100芯片组系列主板)采用了最新的XHCI主控接口&#xff0c;不再内置win7所需要的…

计算机的服务如何还原,电脑怎么样还原到出厂设置

电脑要还原出厂设置&#xff0c;我们可以重装系统或者重置BIOS设置来实现。下面由学习啦小编为大家整理了电脑怎么样还原到出厂设置的方法步骤&#xff0c;希望对大家有帮助!电脑怎么样还原到出厂设置电脑还原出厂设置的方法一、重装系统1通过百度搜索360安全卫士下载&#xff…

android 已经给权限读取照片 还是提示无法读取照片_iPhone无法访问照片,一招教你解决...

经常使用iOS系统的&#xff0c;在打开软件需要进行加载或者保存图片的时候&#xff0c;却提示无法正常访问照片。这是怎么回事呢&#xff1f;设置教程首先前往【设置】--【隐私】点击【照片】。选择需要进行访问的APP&#xff0c;再点击【读取和写入】。如果觉得不错的话&#…