Task2-基于MobileaNet的预训练模型优化

article/2025/8/24 23:11:38

##项目背景

  • mobilenet_v2_0.75_224 预训练模型是基于224224的训练集图片训练而来,需要通过imagenet 100M数据集把模型训练成适用于448448的预训练模型

##思考的问题
1、预训练模型怎么使用和导入
2、如何在服务器上训练
3、如何把训练集弄出来
4、如何评价训练效果,先用448448的图像去224224的预训练模型中查看效果指标,定一个baseline。

##思路
slim库封装好了所有数据下载和train model的接口,直接使用即可。

  • https://blog.csdn.net/angelbeats11/article/details/79009858
  • 1、按照slim文档下载并制作tfrecord的数据集,这里是flower
  • 2、按照slim文档下载pretrain的model,这里是 Inceptionv3 和 mobilenetv2。选取inceptionv3是因为slim的finetune case就是基于inceptionv3实现的,所以先跑一遍。
  • 3、完成inceptionv3在flower上的finetune
  • 4、完成mobilenetv2在flower上的finetune(遇到下列问题1、2、3)
  • 5、下载imagenet数据集,并转换成tfrecord,在服务器上finetune

##遇到的问题

  • 1 在 train_image_classifer.py 中 mobilenet网络未设置 default_image_size,所以需要制定 train_image_size。这个可以通过对比slim->nets下其他网络的代码获知。因此需要制定 train_image_size。
  • 2 pretrain的model是 mobilenet_v2_0.5,需要在nets_factory中增加 v2_0.5的映射,这样才能找到对应的网络文件。
  • 在这里插入图片描述
  • 3 在slim中提供的 pretrain model都是基于 imagenet 2012 实现的,默认输出的logit layer 是 2048*1001,如果需要在其他训练集上 finetune(如这里使用的是flower数据集,只有5类),需要通过 labels_offset 参数进行调整,labels_offset = dataset.num_classes - network.num_clasess = 5-1001 = -996
  • 4 imagenet官网(http://image-net.org)打不开,因此无法用slim脚本直接执行,需要基于已经下载好的imagenet jpeg文件,制作tfrecord文件,然后调用slim 的脚本finetune。参考
  • https://blog.csdn.net/gavin__zhou/article/details/80242998
  • imagenet_lsvrc_2015_synsets.txt 和 imagenet_metadata.txt
  • https://blog.csdn.net/s_sunnyy/article/details/78909427
  • 5 编码问题,服务器上是python3.6,其对str 和 byte 的差异化管理造成以前的代码频繁报错
  • https://www.cnblogs.com/chownjy/p/6625299.html
  • tfrecord文件是二进制文件,_bytes_feature 写入时需要将str转为bytes,bytes(s,‘utf-8’)

##Doing

  • imagenet数据集:
    https://pan.baidu.com/s/17gQSrqD2j921HEMYVGVZ7Q#list/path=%2Fdatasets%2FILSVRC2012&parentPath=%2Fdatasets

  • 加载TF预训练模型

    • https://blog.csdn.net/huachao1001/article/details/78501928
    • https://blog.csdn.net/lujiandong1/article/details/53301994
    • https://blog.csdn.net/laolu1573/article/details/66971800
  • fine-tune a pretrained model

    • https://github.com/tensorflow/models/tree/master/research/slim#Data
    • 基于不同数据集pretrain的model的logit layer层不同(因为要分类的对象种类不同,因此需要调整logit layer。–checkpoint_exclude_scopes 在这里插入图片描述
  • 图像尺寸预处理

    • 一张RGB三通道的彩色图像可以看成一个三维矩阵,矩阵中的不位置上的数字代表图像的像素值。然后图像在存储时并不是直接记录这些矩阵中的数字,而是经过了压缩编码。所以将一张图像还原成一个三维矩阵的过程就是解码的过程,反之就是编码。
    • tf.image.resize_images
    • tf.image.resize_image_with_crop_or_pad
    • https://blog.csdn.net/chaipp0607/article/details/73029923
    • 图像裁剪:bounding box crop
      • https://blog.csdn.net/tz_zs/article/details/77920116
  • finetune的调参

  • 权重L2正则衰减(weight decay)和学习率衰减(learning rate decay):https://blog.csdn.net/program_developer/article/details/80867468

  • label_smoothing( label-smoothing regularization, or LSR):

  • https://blog.csdn.net/edogawachia/article/details/78552257

##参考

  • 官网
    • https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet_example.ipynb
    • tensorflow中slim模块api介绍https://blog.csdn.net/guvcolie/article/details/77686555

##实践
###模型的存储和导入

  • https://cv-tricks.com/tensorflow-tutorial/save-restore-tensorflow-models-quick-complete-tutorial/
  • Save model:
    • 定义saver类
      • saver = tf.train.Saver()
      • 如果只需要保存其中的几个变量,则 saver = tf.train.Saver([w1,w2])
    • 定义saver存储路径
      • saver.save(sess, checkpoint_dir + ‘modelname.ckpt’)
    • model存储包含3个部分:
      • 这里写图片描述

Slim库

  • 官网介绍:
    • https://github.com/tensorflow/models/tree/master/research/slim#Pretrained
  • https://www.2cto.com/kf/201706/649266.html
  • https://blog.csdn.net/wuguangbin1230/article/details/79222564
  • https://blog.csdn.net/c20081052/article/details/81295942
  • 使用教程:
    • https://blog.csdn.net/u014061630/article/details/80632736
  • Import mdel:
    • Create the network
      • 模型结构信息保存在meta文件中,通过读取meta文件获取模型结构
        • saver = tf.train.import_meta_graph(‘my_test_model-1000.meta’)
    • Load the parameters
      • 模型参数信息存储在ckpt文件中,通过读取ckpt文件获取参数数据
        • saver.restore(sess,tf.train.latest_checkpoint(’./’))
      • 获取制定op 或 variable 用
        • graph = tf.get_default_graph()
        • graph.get_tensor_by_name(“op_to_restore:0”)
          • name需要在定义时统一
          • :0 表示第一个?
  • tfrecord读取数据
    • https://blog.csdn.net/happyhorizion/article/details/77894055

图像分类的CNN网络原理

  • https://cv-tricks.com/tensorflow-tutorial/training-convolutional-neural-network-for-image-classification/

    • 这里写图片描述
  • OpenCV

    • https://blog.csdn.net/qq_41185868/article/details/79675875
    • 这里写图片描述
    • cv2.resize()
      • https://blog.csdn.net/william_hehe/article/details/79604082
      • 这里写图片描述
  • Tensorflow

    • 多用with block
      • 这里写图片描述
    • graph.get_operations()
      • 这里写图片描述
  • Padding

    • https://blog.csdn.net/weicao1990/article/details/80282341

http://chatgpt.dhexx.cn/article/1J7alU5D.shtml

相关文章

波束形成 基于对角加载的稳健自适应波束形成

前言 本人刚刚入门阵列信号处理的波束形成方向,因此仿真过程中可能会出现错误,如果诸位大佬发现仿真过程中有错误,请不吝指出谢谢。 对角加载(Diagonal Loading, DL)是一种比较常用的提高Capon波束形成器鲁棒性的方法,通过在样本协…

Unity大场景数据加载及优化方案

前段时间,有几个虚拟仿真公司跟我请教关于大地形的加载优化问题,它们使用的引擎都是自己研发的,引擎对于开发者来说,大同小异,它们的基本构造是一样的,关键是在于解决问题的方法,正是基于这个前…

预训练模型

目录 一、BERT1、贡献1.1 MLM任务1.2 NSP任务 2、实验细节 二、ALBERT1、贡献1.1 词向量分解1.2 层参数共享1.3 SOP任务 三、 ERNIE1、贡献2、实验细节2.1 语料2.2 MLM任务2.3 DLM任务 四、DistilBERT1、贡献2、实验细节 五、RoBERTa1、贡献2、实验细节2.1 动态mask2.2 去掉NSP…

改动模型后,加载部分预训练权重文件

加载部分预训练权重文件 最近在做姿态估计相关内容,需要将Hrnet模型修改,Hrnet是基于coco数据集训练的,coco数据集是17个关节点,而我需要的是15个关节点,在将数据集标好训练之后,发现由于数据量比较小&…

Pointer 0x0, not in getPreloadedDrawables android 系统资源预加载

Android系统在启动的时候,会对一些系统资源进行预加载。这样不仅使得应用程序在需要时可以快速地访问这些资源,还使得这些资源能够在不同应用程序之间进行共享。在硬件加速渲染环境中,这些预加载资源还有进一步优化的空间。Android系统提供了…

OpenCV | 基本矩阵操作

起因 在2013年1月份发行的OpenCV 2.4.4中,对Java的支持也正式发布。同时也有支持Python。 环境配置 这里的环境配置十分简单,在这里,操作系统64位,所以选这个,将里面的opencv_java342.dll负责到你本地下载的JDK的bin目录下,和JDK下的JRE目录下的bin目录下。 我使用的…

Android应用程序UI硬件加速渲染的预加载资源地图集服务(Asset Atlas Service)分析

我们知道,Android系统在启动的时候,会对一些系统资源进行预加载。这样不仅使得应用程序在需要时可以快速地访问这些资源,还使得这些资源能够在不同应用程序之间进行共享。在硬件加速渲染环境中,这些预加载资源还有进一步优化的空间…

预训练词嵌入

作者|ARAVIND PAI 编译|VK 来源|Analytics Vidhya 概述 理解预训练词嵌入的重要性 了解两种流行的预训练词嵌入类型:Word2Vec和GloVe 预训练词嵌入与从头学习嵌入的性能比较 介绍 我们如何让机器理解文本数据?我们知道机器非常擅长处理和处理数字数据,但如果我们向它们提供…

【论文整理】风格迁移中格拉姆矩阵(Gram Matrix)的使用

Gram矩阵在风格迁移中的使用 1、格拉姆矩阵的定义2、风格迁移的任务描述3、格拉姆矩阵的使用方法3、实现过程4、总结5、参考文献 1、格拉姆矩阵的定义 1) 什么是格拉姆矩阵: 在内积空间中,一组向量[v1, v2, … , vn]的格拉姆矩阵&#xff0…

Tensorflow加载Vgg预训练模型

很多深度神经网络模型需要加载预训练过的Vgg参数,比如说:风格迁移、目标检测、图像标注等计算机视觉中常见的任务。那么到底如何加载Vgg模型呢?Vgg文件的参数到底有何意义呢?加载后的模型该如何使用呢?本文将以Vgg19为…

混淆矩阵、准确率、F1和召回率的具体实现及混淆矩阵的可视化

utils专栏不会细讲概念性的内容,偏向实际使用,如有问题,欢迎留言。如果对你有帮助就点个赞哈,也不搞什么粉丝可见有的没的,有帮助点个赞就ok 1、混淆矩阵、准确率、F1和召回率的计算 混淆矩阵 对于混淆矩阵的计算…

预编码技术

预编码的基本原理 TD-LTE下行传输采用了MIMO-OFDM的物理层构架,通过最多4个发射天线并行传输多个(最多4个)数据流,能够有效地提高峰值传输速率。LTE的物理层处理过程中,预编码是其核心功能模块,物理下行共…

pytorch 计算混淆矩阵

混淆矩阵是评估模型结果的一种指标 用来判断分类模型的好坏 预测对了 为对角线 还可以通过矩阵的上下角发现哪些容易出错 从这个 矩阵出发 可以得到 acc ! precision recall 特异度? 目标检测01笔记AP mAP recall precision是什么 查全率是什么 查准率…

Code::Blocks 相关

文库上的使用教程 http://blog.csdn.net/JGood/article/details/5252119 使用手册 http://blog.csdn.net/liquanhai/article/details/6618300 一.Code::blocks Code::blocks集成开发环境是一个支持编译、链接、调试许多种语言的IDE,支持VS6.0到VS200…

mysql8 sql_mode去掉only_full_group_by

1.查询版本与sqlmode: select version(), sql_mode; 2.修改sqlmode,执行下面两句代码: set global sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION;set session sql_modeSTRICT_TRANS_TABLES,NO_…

- MySQL - 存储过程 Stored Procedure

文章目录 存储过程是什么存储过程的优点存储过程的缺点存储过程分类存储过程的查询语句存储过程的创建和调用语法实例 - IN、OUT、INOUT条件语句循环语句迭代 存储过程是什么 存储过程是一组为了完成特定功能的SQL语句集,存储在数据库中,一次编译多次使…

mysql的delete语句_mysql删除语句

展开全部 mysql删除语句如下: 1、delete删除一行:delete from student where id1。 2、delete删除多行:delete from student where in (1,2,3)3。 3、删62616964757a686964616fe78988e69d8331333433623162除表的所有数据:delete f…

mysql any all some

假设现在有两张表 a , b 如下 SELECT * FROM a WHERE id > ANY(SELECT id FROM b )# any 等价于 some 这里有两个id sql的意思大概是查询a表的所有,在where中a的id > 子表 b的id 这里用到了any(some) 他们的意思是一样的,就是说a表…

mysql 的 sql_mode.only_full_group_by属性解析

文章目录 1. 初始条件2. 现象3. 解决①:关闭sql_mode 的 only_full_group_by模式②:使用 ANY_VALUE() 抑制 ONLY_FULL_GROUP_BY 的影响 mysql8.0官网:处理 group by 1. 初始条件 现在有这样一张表,其中有两条 name 裤子 的数据…

MYSQL 删除语句

删除数据(DELETE) 如果你失忆了,希望你能想起曾经为了追求梦想的你。 数据库存储数据,总会有一些垃圾数据,也会有一些不需要用的数据了,这些情况下,我们就可以删除这些数据,释放出一定的空间,给…