信用 网站 建设方案wordpress评论代码
- 作者: 五速梦信息网
- 时间: 2026年04月20日 07:07
当前位置: 首页 > news >正文
信用 网站 建设方案,wordpress评论代码,网站建设流程书籍,微信开放平台在哪里进入首先祝贺百度团队百度斩获NeurIPS2020挑战赛冠军#xff0c;https://www.jiqizhixin.com/articles/2020-12-09-2。 在此次比赛中使用的是基于飞桨深度学习框架开发的图像分割套件PaddleSeg。从这篇文章开始#xff0c;我将持续更新《图像分割套件PaddleSeg全面解析》系列文章…首先祝贺百度团队百度斩获NeurIPS2020挑战赛冠军https://www.jiqizhixin.com/articles/2020-12-09-2。 在此次比赛中使用的是基于飞桨深度学习框架开发的图像分割套件PaddleSeg。从这篇文章开始我将持续更新《图像分割套件PaddleSeg全面解析》系列文章由于个人水平有限如有错误之处请见谅谢谢。 PaddleSeg是百度基于自家的PaddlePaddle开发的端到端图像分割开发套件。包含多种主流的分割网络。PaddleSeg采用模块化的方式设计可以通过配置文件方式进行模型组合帮助开发者在不需要深入了解图像分割原理的情况实现方便快捷的完成模型的训练与部署。 但是在对需要对模型进行修改优化的时候还是需要对图像分割原理以及PaddleSeg套件有进一步了解本文的主要内容就是对PaddleSeg进行代码解读帮助开发者进一步了解图像分割原理以及PaddleSeg的实现方法。本文只要介绍PaddleSeg的动态图的实现方法。 本代码解读基于PaddleSeg动态图版本V2.0.0-rc。 PaddleSeg套件的源代码可以从GitHub上进行下载命令如下 PaddleSeg套件的源代码可以从GitHub上进行下载命令如下 !git clone https://github.com/PaddlePaddle/PaddleSeg.gitPaddleSeg目录包含下几个目录: configs:保存不同神经网络的配置文件。contrib:真实案例相关配置与数据legacy:静态图版本代码只维护不更新新功能docs:文档paddleseg:PaddleSeg核心代码包含训练、评估、推理等文件。tools:工具脚本train.py:训练入口文件val.py:评估模型文件predict.py:预测文件 本文大概分为以下7个部分 1.train.py代码解读这里主要讲解paddleseg训练入口文件的代码。该文件里描述了参数的解析训练的启动方法以及为训练准备的资源等。 图像分割套件PaddleSeg全面解析一train.py代码解读 2.Config代码解读这里主要讲解了Config类的代码config类由train.py实例化通过运行train.py时指定的配置文件生成config对象。 图像分割套件PaddleSeg全面解析二 3.DataSet代码解读这里主要讲解了Dataset类对每一种数据集都抽象为一个类通过继承Dataset类实现匿名协议构建文件列表供训练使用。 图像分割套件PaddleSeg全面解析三 4.数据增强代码解读这里主要讲解了数据预处理与增强的一些常用算法。 图像分割套件PaddleSeg全面解析四 5.模型与Backbone代码解读这里主要讲解常用的模型以及backbone的网络与算法。 图像分割套件PaddleSeg全面解析五 图像分割套件PaddleSeg全面解析六 6.损失函数代码解读这里主要讲解常用的损失函数的代码与算法。 图像分割套件PaddleSeg全面解析七 7.评估模型代码解读这里讲解评估模型性能的代码与评估方法。 1.train.py代码解读 神经网络模型训练需要使用train.py来完成。是PaddleSeg中核心代码。 我们先结合下图来了解一下训练之前的准备工作。 可以通过以下命令快速开始一个训练任务。 python train.py –config configs/quick_start/bisenet_optic_disc_512x512_1k.yml命令中的–config参数指定本次训练的配置文件配置文件的详细介绍可以参见后面的第二节。 在执行train.py脚本的最开始会导入一些包如下 from paddleseg.cvlibs import manager, Config from paddleseg.utils import get_sys_env, logger from paddleseg.core import train在导入manager模块时会创建图中左侧manage方框中的5个ComponentManager对象他们分别是MODELS、BACKBONES、DATASETS、TRANSFORMS和LOSSES。这5个ComponentManager类似字典用来维护套件中所有对应的类比如FCN类、ResNet类等通过类的名称就可以找到对应的类。在train.py运行时会创建config对象。 cfg Config(args.cfg,learning_rateargs.learning_rate,itersargs.iters,batch_sizeargs.batch_size)在创建config对象时会通过manager获取到配置文件中指定的类并实例化对象比如model和loss等。 train.py调用train函数将config作为实参传入。train函数获取config中的成员来完成训练工作。 下面我们来详细解读一下train.py首先我们从train.py的入口代码开始 if name main:# 处理运行train.py传入的参数args parse_args()#调用主函数。main(args)首先看一下第一行代码 args parse_args() parse_args()的实现如下 #配置文件路径parser.add_argument(–config, destcfg, helpThe config file., defaultNone, typestr)#总训练迭代次数parser.add_argument(–iters,destiters,helpiters for training,typeint,defaultNone)#batchsize大小parser.add_argument(–batch_size,destbatch_size,helpMini batch size of one gpu or cpu,typeint,defaultNone)#学习率parser.add_argument(–learning_rate,destlearning_rate,helpLearning rate,typefloat,defaultNone)#保存模型间隔parser.add_argument(–save_interval,destsave_interval,helpHow many iters to save a model snapshot once during training.,typeint,default1000)#如果需要恢复训练指定恢复训练模型路径parser.add_argument(–resume_model,destresume_model,helpThe path of resume model,typestr,defaultNone)#模型保存路径parser.add_argument(–save_dir,destsave_dir,helpThe directory for saving the model snapshot,typestr,default./output)#数据读取器线程数量目前在AI Studio建议设置为0.parser.add_argument(–num_workers,destnum_workers,helpNum workers for data loader,typeint,default0)#在训练过程中进行模型评估parser.add_argument(–do_eval,destdo_eval,helpEval while training,actionstore_true)#日志打印间隔parser.add_argument(–log_iters,destlog_iters,helpDisplay logging information at every log_iters,default10,typeint)#开启可视化训练parser.add_argument(–use_vdl,destuse_vdl,helpWhether to record the data to VisualDL during training,actionstore_true)然后看下一行代码 main(args) main 的代码如下 def main(args):#获取环境信息比如操作系统类型、python版本号、Paddle版本、GPU数量、Opencv版本、gcc版本等内容env_info get_environ_info()#打印环境信息info [{}: {}.format(k, v) for k, v in env_info.items()]info \n.join([\n, format(Environment Information, -^48s)] info [- * 48])logger.info(info)#确定是否使用GPUplace gpu if env_info[Paddle compiled with cuda] and env_info[GPUs used] else cpu#设置使用GPU或者CPUpaddle.set_device(place)#如果没有指定配置文件这抛出异常。if not args.cfg:raise RuntimeError(No configuration file specified.)#构建cfg对象该对象包含数据集、图像增强、模型结构、损失函数等设置#该对象基于命令行传入参数以及yaml配置文件构建cfg Config(args.cfg,learning_rateargs.learning_rate,itersargs.iters,batch_sizeargs.batch_size)#从Config对象中获取train_data对象。train_data为迭代器train_dataset cfg.train_dataset#如果没有设置训练集抛出异常if not train_dataset:raise RuntimeError(The training dataset is not specified in the configuration file.)#如果需要在训练中进行模型评估则需要获取到验证集val_dataset cfg.val_dataset if args.do_eval else None#获取损失函数losses cfg.lossmsg \n—————Config Information—————\nmsg str(cfg)msg ————————————————#打印出详细设置。logger.info(msg)#调用core/train.py中train函数进行训练train(cfg.model,train_dataset,val_datasetval_dataset,optimizercfg.optimizer,save_dirargs.save_dir,iterscfg.iters,batch_sizecfg.batch_size,resume_modelargs.resume_model,save_intervalargs.save_interval,log_itersargs.log_iters,num_workersargs.num_workers,use_vdlargs.use_vdl,losseslosses)在train.py脚本中除了调用config对配置文件进行解析就是调用core/train.py中的train函数完成训练工作。下面我先看一下train函数的工作流程。 从图中看出整个训练过程由两个循环组成最外层循环由总迭代次数控制需要在yaml文件中配置如下代码 iters: 80000内层循环由数据读取器控制循环会遍历数据读取器中所有的数据直至全部读取完毕跳出循环这个过程通常也被叫做一个epoch。 下面我们详细解析一下core/train.py中train函数的代码。 首先看一下train函数的代码概要。 然后我们再看一下详细的代码解读 def train(model, #模型对象train_dataset, #训练集对象val_datasetNone, #验证集对象如果训练过程不需要验证可以为NoneoptimizerNone, #优化器对象save_diroutput, #模型输出路径iters10000, #训练最大迭代次数batch_size2, #batch size大学resume_modelNone, # 是否需要恢复训练如果需要指定恢复训练模型权重路径save_interval1000, # 模型保存间隔log_iters10, # 设置日志输出间隔num_workers0, #设置数据读取器线程数0为不开启多进程use_vdlFalse, #是否使用vdllossesNone): # 损失函数系数当使用多个损失函数时需要指定各个损失函数的系数。#为了兼容多卡训练这里需要获取显卡数量。nranks paddle.distributed.ParallelEnv().nranks#在分布式训练中每个显卡都会执行本程序所以需要在程序里获取本显卡的序列号。local_rank paddle.distributed.ParallelEnv().local_rank#循环起始的迭代数。如果是恢复训练的话从恢复训练中获得起始的迭代数。#比如在2000次迭代的时候保存了中间训练过程通过resume恢复训练那么start_iter则为2000。start_iter 0if resume_model is not None:start_iter resume(model, optimizer, resume_model)#创建保存输出模型文件的目录。if not os.path.isdir(save_dir):if os.path.exists(save_dir):os.remove(save_dir)os.makedirs(save_dir)#如果是多卡训练则需要初始化多卡训练环境。if nranks 1:# Initialize parallel training environment.paddle.distributed.init_parallel_env()strategy paddle.distributed.prepare_context()ddp_model paddle.DataParallel(model, strategy)#创建一个批量采样器这里指定数据集通过批量采样器组成一个batch。这里需要指定batch size是否随机打乱是否丢弃末尾不能组成一个batch的数据等参数。batch_sampler paddle.io.DistributedBatchSampler(train_dataset, batch_sizebatch_size, shuffleTrue, drop_lastTrue)#通过数据集参数和批量采样器等参数构建一个数据读取器。可以通过num_works设置多进程这里的多进程通过共享内存通信#如果共享内存过小可能会报错如果报错可以尝将num_workers设置为0则不开启多进程。loader paddle.io.DataLoader(train_dataset,batch_samplerbatch_sampler,num_workersnum_workers,return_listTrue,)if use_vdl:from visualdl import LogWriterlog_writer LogWriter(save_dir)#开启定时器timer Timer()avg_loss 0.0iters_per_epoch len(batch_sampler)best_mean_iou -1.0best_model_iter -1train_reader_cost 0.0train_batch_cost 0.0timer.start()iter start_iter#开始循环通过迭代次数控制最外层循环。while iter iters:#内部循环遍历数据迭代器中的数据。for data in loader:iter 1if iter iters:break#记录读取器时间train_reader_cost timer.elapsed_time()#保存样本images data[0]#保存样本标签labels data[1].astype(int64)#供BCELoss使用edges Noneif len(data) 3:edges data[2].astype(int64)#如果有多张显卡则开启分布式训练如果只有一张显卡则直接调用模型对象进行训练。if nranks 1:#通过模型前向运算获得预测结果logits_list ddp_model(images)else:#通过模型前向运算获得预测结果logits_list model(images)#通过标签计算损失loss loss_computation(logits_listlogits_list,labelslabels,losseslosses,edgesedges)#计算模型参数的梯度loss.backward()#执行一次优化器并进行参数更新optimizer.step()#获取当前优化器的学习率。lr optimizer.get_lr()if isinstance(optimizer._learning_rate,paddle.optimizer.lr.LRScheduler):optimizer._learning_rate.step()#清除模型中的梯度model.clear_gradients()#计算平均损失值avg_loss loss.numpy()[0]train_batch_cost timer.elapsed_time()#根据配置中的log_iters打印训练日志if (iter) % log_iters 0 and local_rank 0:avg_loss / log_itersavg_train_reader_cost train_reader_cost / log_itersavg_train_batch_cost train_batch_cost / log_iterstrain_reader_cost 0.0train_batch_cost 0.0remain_iters iters - itereta calculate_eta(remain_iters, avg_train_batch_cost)logger.info([TRAIN] epoch{}, iter{}/{}, loss{:.4f}, lr{:.6f}, batch_cost{:.4f}, reader_cost{:.4f} | ETA {}.format((iter - 1) // iters_per_epoch 1, iter, iters,avg_loss, lr, avg_train_batch_cost,avg_train_reader_cost, eta))if use_vdl:log_writer.add_scalar(Train/loss, avg_loss, iter)log_writer.add_scalar(Train/lr, lr, iter)log_writer.add_scalar(Train/batch_cost,avg_train_batch_cost, iter)log_writer.add_scalar(Train/reader_cost,avg_train_reader_cost, iter)avg_loss 0.0#根据配置中的save_interval判断是否需要对当前模型进行评估。if (iter % save_interval 0or iter iters) and (val_dataset is not None):num_workers 1 if num_workers 0 else 0mean_iou, acc evaluate(model, val_dataset, num_workersnum_workers)#评估后需要将模型训练模式该模式影响dropout和batchnorm层model.train()#根据配置中的save_interval判断是否需要保存当前模型。if (iter % save_interval 0 or iter iters) and local_rank 0:current_save_dir os.path.join(savedir,iter{}.format(iter))#如果输出路径不存在需要创建目录。if not os.path.isdir(current_save_dir):os.makedirs(current_save_dir)#保存模型权重paddle.save(model.state_dict(),os.path.join(current_save_dir, model.pdparams))#保存优化器权重恢复训练会用到。paddle.save(optimizer.state_dict(),os.path.join(current_save_dir, model.pdopt))#保存最佳模型。if val_dataset is not None:if mean_iou best_mean_iou:best_mean_iou mean_ioubest_model_iter iterbest_model_dir os.path.join(save_dir, best_model)paddle.save(model.state_dict(),os.path.join(best_model_dir, model.pdparams))logger.info([EVAL] The model with the best validation mIoU ({:.4f}) was saved at iter {}..format(best_mean_iou, best_model_iter))if use_vdl:log_writer.add_scalar(Evaluate/mIoU, mean_iou, iter)log_writer.add_scalar(Evaluate/Acc, acc, iter)#重置定时器timer.restart()# Sleep for half a second to let dataloader release resources.time.sleep(0.5)if use_vdl:log_writer.close()PaddleSeg套件训练入口train.py文件解读到此结束。 PaddleSeg仓库地址https://github.com/PaddlePaddle/PaddleSeg
- 上一篇: 信阳做网站西安o2o网站设计公司
- 下一篇: 信用 网站 建设方案怎么做vip视频网站
相关文章
-
信阳做网站西安o2o网站设计公司
信阳做网站西安o2o网站设计公司
- 技术栈
- 2026年04月20日
-
信阳做网站公司部门解散赔偿标准
信阳做网站公司部门解散赔偿标准
- 技术栈
- 2026年04月20日
-
信阳做网站的建设游戏运营网站开展工作内容
信阳做网站的建设游戏运营网站开展工作内容
- 技术栈
- 2026年04月20日
-
信用 网站 建设方案怎么做vip视频网站
信用 网站 建设方案怎么做vip视频网站
- 技术栈
- 2026年04月20日
-
信用网站建设内容珠海网站建设公司有哪些
信用网站建设内容珠海网站建设公司有哪些
- 技术栈
- 2026年04月20日
-
信用徐州网站建设情况谁做的四虎网站是多少
信用徐州网站建设情况谁做的四虎网站是多少
- 技术栈
- 2026年04月20日
