迁移学习的模型训练

article/2025/10/29 18:24:55

 用深度学习解决目标检测有两个重要工作:

1、设计、实现、训练和验证模型

  •  模型如果设计
  • 模型如何编程实现
  • 如何收集足够的数据来训练并验证模型是否符合预期

从头开始设计、实现、训练和验证模型是需要有众多深度学习算法人才做支撑,并且极其耗时耗力

2、深度学习模型应用

根据实际项目的要求,基于预训练模型做迁移学习,这个对刚入门的工程师来说可以快速的掌握

使用tensorflow预训练模型

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

  预训练模型    

已训练好的模型即预训练模型的命名规则

预训练模型的文件组成

迁移学习需要先从checkpoint文件读取现有模型的变量、权重等重要数据,然后基于新的训练数据集继续训练模型

由于checkpoint文件个数太多,不方便推理计算调用,所以当模型训练完毕后,执行模型frozen(冻结)操作,即把所有变量的值提取出来变成变量,与模型权重一起合并为一个*.pb文件

最后一个文件时文本格式,用于是哪个城tensorflow graph(计算图)的配置文件,迁移学习时,需要修改里面的一部分参数

开始

准备图片:下载猫狗数据集

第一种:直接从百度搜猫狗图片

第二种:从Kaggle直接下载猫狗数据集

下面演示kaggle数据集下载

kaggle数据集下载

第一步:注册账号https://www.kaggle.com/

第二步:可以直接下载https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/data

 如果不能,激活tf_gpu虚拟环境 输入代码pip install kaggle

 下载kaggle.json 需要登录kaggle账户页面,把username换成自己的账户号,也就是需要登录kaggle,然后再账户页面单击Create New API Token按钮,会开始下载kaggle.json文件

在cmd里输入命令 echo %HOMEPATH%

那么将上面下载的文件放入到c:\users\admin\.kaggle文件夹里面

注意前面确实有个点

进入数据集下载页面,单击下载命令复制按钮

激活虚拟空间,输入指令 

 

概念验证 

一个新项目开始之前,先用100张/类的数量做技术评估,是一个常用的PoC(概念验证)方案,如果按100/类的数量训练出来的模型的识别准确率超过85%,那么这个新项目用深度学习技术来完成物体识别工作是基本没有问题的

训练图片的样本不平衡问题

如果一个训练数据集的A样本是99个,B样本只有1个,训练算法很有可能让AI模型放弃识别B,直接把所有样本都识别为A,为了实现训练样本数量平衡,通常使用数据增强处理

使用Labellmg标注图片

建立猫狗项目文件夹结构

新建cats_dogs的文件夹,意思是用来识别猫和狗的 

在cats_dogs文件夹下,依次新建上述文件夹

  • annotations(标注)用于存放.csv文件、标签映射文件*.pbtxt和对应的TensorFlow *.tfrecord文件,这些文件存放图像的标注信息
  • images(图像)存放着训练图片和测试图片,以及对应的*.xml  LabelImg标注文件

  将train数据集里面的100张狗,100张猫图片放入到train,将test数据集里面的二十张图片复制到test,将train文件夹中的图片标注完毕后,复制十分之一的图片连通标注文件到images\eval文件夹,供训练的评估evaluation操作使用

  •  pre_trained_model文件夹存放预训练模型,将先前下载的预训练模型全部复制到此文件夹中,包括文件夹
  • trained_frozen_models文件夹保存训练完毕的冻结图模型文件(*.pb)
  • training文件夹用于存放训练配置文件*.config,以及训练过程中产生的文件

标注图片

一、修改打标里面的predefined_classes.txt文件,将里面的标签改为cat和dog

二、打标

打开打标程序,单击open dir按钮,选到训练图片所在的文件夹train

单击change save dir按钮,选择存放标注文件*.xml的文件夹,同样是放在 train

然后点击create rectbox启动标注功能,或者按w键

菜单中有自动保存选项,然后按w选框,也有默认标签可以进行设置,然后按d下一张

打开文件夹后可以发现里面每个文件旁边都有一个与之名字相对应的.xml文件

复制10%的数据到eval文件

深度学习的数据集分为训练(train)、评估(eval)、测试(test),训练数据和评估数据都在训练过程中使用,建议比例为train:eval=8:2。注意xml文件也要复制

依据标注类型创建标签映射文件

新建label_map.pbtxt文件。

如果有两个类型,那么id的编号从1到2,如果有四个类型,那么id就到4

item {id:1name: 'cat'
}
item{id:2name:'dog'
}

放到这里

创建TensorFlow TFRecord文件

使用脚本将xml_to_csv.py将多个xml文件转换成一个.csv文件

使用脚本generate_tfrecord.py将.csv文件转换为.tfrecord文件

 

 由于这两个工具都使用了pandas库,所以conda install pandas安装pandas库

将.xml文件转换为.csv文件

运行那个python文件,首先到py所在的目录,地址栏输入cmd,然后调出虚拟环境,输入命令

这个命令要运行两次,一次是train文件夹里面进行转化,第二次是将eval文件夹里面的进行转化 

python xml_to_csv.py -i [path_to_images_folder]\train -o \ [path_to_annotations_folder] \xxx_labels.csv

第一个[] 用images文件夹的绝对路径替代

第二个[]用annotations文件夹的绝对路径替代

xxx_labels.csv替换为对应的train_labels.csv或者eval_labels.csv

所以

train标注数据转换完整命令

python xml_to_csv.py -i D:\program\tf_train\workspaces\cats_dogs\images\train -o D:\program\tf_train\workspaces\cats_dogs\annotations\train_labels.csv

eval标注数据转换完整命令

python xml_to_csv.py -i D:\program\tf_train\workspaces\cats_dogs\images\eval -o D:\program\tf_train\workspaces\cats_dogs\annotations\eval_labels.csv

将csv文件转换为tfrecord文件

修改generate_tfrecord.py文件

 然后转化,到这个py所在位置,打开cmd,打开虚拟环境,输入代码

python generate_tfrecord.py -label0={label_name0} -label={label_name1} --csv_input=[path_to_annotatinos_folader]\xxx_labels.csv --output_path=[path_to_annotainos_folder]\xxx.tfrecord --img_path=[path_to_images_folder]\train

将{label_name0}、{label_name1}换成cat与dog

最后一个[]换成images绝对路径

[path_to_annotainos_folder]换成annotations文件夹的绝对路径

train_labels.csv文件转换为train.tfrecord文件的完整命令

前两个参数是名字,第三个参数是train_labels.csv文件所在的绝对路径

第四个参数是生成的.tfrecord文件放置的位置,放置到annotation里面

最后一个文件时train图片的绝对路径

python generate_tfrecord.py --label0=cat --label1=dog --csv_input=D:\program\tf_train\workspaces\cats_dogs\annotations\train_labels.csv --output_path=D:\program\tf_train\workspaces\cats_dogs\annotations\train.tfrecord --img_path=D:\program\tf_train\workspaces\cats_dogs\images\train

eval_labels.csv文件转换成eval.tfrecord文件的完整命令

前两个参数是名字,第三个参数是eval_labels.csv文件所在的绝对路径

第四个参数是生成的.tfrecord文件放置的位置,放置到annotation里面

最后一个文件时eval图片的绝对路径

python generate_tfrecord.py --label0=cat --label1=dog --csv_input=D:\program\tf_train\workspaces\cats_dogs\annotations\eval_labels.csv --output_path=D:\program\tf_train\workspaces\cats_dogs\annotations\eval.tfrecord --img_path=D:\program\tf_train\workspaces\cats_dogs\images\eval

 修改预训练模型的配置文件

API框架使用扩展名为.config的training pipeline配置文件来获得训练和评估过程的输入参数

预训练模型的配置文件

配置文件在下载的models里面,路径为models\research\object_detection\samples\configs

将其复制到 

配置文件的结构

 

训练模型

 将这个py文件复制到cats_dogs文件夹中

在cats_dogs文件夹里面激活虚拟环境

输入命令

python train.py --logtostderr --train_dir=training\ --pipeline_config_path=training\ssd_inception_v2_coco.config

 --logtostderr:把log信息记录到stderr

--train_dir:存放训练过程中生成文件的文件夹

--pipeline_config_path:预训练模型的配置文件

一键创建文件夹结构

搭建好模型环境后,以及将提供的srcipts文件复制到tf_train文件夹下面,

将提供的create_directories.py 文件复制到workspaces

在workspace启动激活环境,输入命令

python create_directories.py -n my_training_demo

将标注好的图片按要求复制到images里面的三个文件夹里面 

将one_command_train.py 文件复制到my_training_demo文件夹中

在这个文件夹里面 启动环境 输入

python one_command_train.py --steps 500 --batch_size 12

 


http://chatgpt.dhexx.cn/article/QrsHFsrj.shtml

相关文章

TF2.0模型训练

TF2.0模型训练 概述数据集介绍1、通过fit方法训练模型准备数据创建模型编译模型训练模型 2、通过fit_generator方法训练模型构建生成器创建模型编译模型训练模型 3、自定义训练准备数据创建模型定义损失函数及优化器训练模型 下一篇TF2.0模型保存 概述 这是TF2.0入门笔记【TF2…

TensorFlow 2.0 —— 模型训练

目录 1、Keras版本模型训练1.1 构造模型(顺序模型、函数式模型、子类模型)1.2 模型训练:model.fit()1.3 模型验证:model.evaluate()1.4 模型预测:model.predict()1.5 使用样本加权和类别加权1.6 回调函数1.6.1 EarlySt…

如何在jupyter上运行Java代码(适用LINUX)

如何在jupyter上运行Java代码 1.下载必须软件 下载JDK且JDK版本必须 ≥ 9 ≥9 ≥9从github上下载ijava 附 : ijava下载链接.装有jupyter,我在LINUX上是直接装的anaconda 安装过程 将下载的ijava压缩包解压出来,并在此路径用该命令 : sudo…

Java单元测试介绍

文章目录 单元测试单元测试基本介绍单元测试快速入门单元测试常用注解 单元测试 单元测试基本介绍 单元测试: 单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,…

Jupyter 配置 Java环境,写Java代码,测试成功

本次简单诉说下怎么通过jupyter安装iJava,写Java代码。 安装Java的不说了 我使用的是Java15 然后去:https://github.com/SpencerPark/IJava/releases 下载zip,不要下载其他的 得到就是一个py文件 下面就是一个 python install.py 我这里就…

java调用python执行脚本,附代码

最近有个功能需要java调用python脚本实现一些功能,前期需要做好的准备:配置好python环境,如下: 以下展示的为两种,一种为生成图片,另一种为生成字符串。 package com.msdw.tms.common.utils.py;import ja…

Selenium Java自动化测试环境搭建

IDE用的是Eclipse。 步骤1:因为是基于Java,所以首先要下载与安装JDK(Java Development Kit) 下载: 点击这里下载JDK 安装:按照默认安装一路点next就可以了。 验证:安装完成后,在命…

java单元测试(Junit)

相关代码下载链接: http://download.csdn.net/detail/stevenhu_223/4884357 在有些时候,我们需要对我们自己编写的代码进行单元测试(好处是,减少后期维护的精力和费用),这是一些最基本的模块测试。当然&…

Java单元测试工具:JUnit4(一)——概述及简单例子

(一)JUnit概述及一个简单例子 看了慕课网的JUnit视频教程: http://www.imooc.com/learn/356,总结笔记。 这篇笔记记录JUnit的概述,以及一个快速入门的例子。 1.概述 1.1 什么是JUnit ①JUnit是用于编写可复用测试集的…

Linux下执行Python脚本

1.Linux Python环境 Linux系统一般集成Python,如果没有安装,可以手动安装,联网状态下可直接安装。Fedora下使用yum install,Ubuntu下使用apt-get install,前提都是root权限。安装完毕,可将Python加入环境变…

python pytest脚本执行工具

pytest脚本执行工具 支持获取当前路径下所有.py脚本 添加多个脚本,一起执行 import tkinter as tk from tkinter import filedialog import subprocess import os from datetime import datetimedef select_script():script_path filedialog.askopenfilename(fil…

linux上运行python(简单版)

linux上运行python(简单版) 一、前提准备1.centOS72.挂载yum源[http://t.csdn.cn/Isf0i](http://t.csdn.cn/Isf0i) 二、安装python3三、运行程序 一、前提准备 1.centOS7 2.挂载yum源http://t.csdn.cn/Isf0i 在终端进行安装python3 二、安装python3 …

linux怎么运行python脚本?

linux运行python脚本的方法: 1、命令行执行: 建立一个test.py文档,在其中书写python代码。之后,在命令行执行:python test.py 说明:其中python可以写成python的绝对路径。使用which python进行查询。 注…

java实现远程执行Linux下的shell脚本

java实现远程执行Linux下的shell脚本 背景导入Jar包第一步:远程连接第二步:开启Session第三步:新建测试脚本文件结果报错 背景 最近有个项目,需要在Linux下的服务器内写了一部分Python脚本,业务处理却是在Java内&…

Java运行Python脚本

前段时间遇到了在JavaWeb项目中嵌入运行Python脚本的功能的需求。想到的方案有两种,一种是使用Java技术(Jython或Runtime.exec)运行Python脚本,另一种是搭建一个Python工程对外提供相应http或webservice接口。两种方案我都有实现&…

Java项目分层

MVC模式 在实际的开发中有一种项目的程序组织架构方案叫做MVC模式,按照程序 的功能将他们分成三个层,如下图:Modle层(模型层)、View层(显示层)、Controller层(控制层)。…

java项目收获总结_java开发项目收获心得

1 java开发项目收获心得 it行业现在的发展如日中天,很多人都纷纷走进这个行业,而java作为跨平台的编程语言更是受欢迎。java其实相对其他语言来说的确很有优势,但是也有点缺陷,但是以后发展到什么程度,谁都不知道。那么下面小编给大家说说java开发项目收获心得,希望能对你…

java查看jar包依赖_java项目开发中如何查找到项目依赖的jar包?

不管是java普通工程,还是java web项目,甚至是android项目,依赖包的管理有2种: 1.直接依赖jar包 这种方式简单直白,项目下载后在正确的ide或者稍微做转换就可以运行起来。比如java web工程的WEB-INF/lib下 只要按这个步骤Java Build Path=>Add Libraty=>Web App Libr…

Java小白必看:开发一个编程项目的完整流程(附100套Java编程项目源码+视频)

我相信很多Java新手都会遇到这样一个问题:跟着教材敲代码,很容易;但是让他完整的实现一个应用项目,却不会;不知道从哪里开始,不知道实现一个项目的完整流程是怎样的,看似很简单的一个问题&#…

分享67套基于Java开发的Java毕业设计实战项目(含源码+毕业论文)【新星计划】

【新星计划】分享67套基于Java开发的Java毕业设计实战项目(含源码毕业论文) 基于Java开发的Java毕业设计实战项目 本文中的所有主题都来自互联网。如果您侵犯您的权利,请及时联系Blogger,博主将及时处理。 投诉邮箱:1919101926qq.com (没事…