基于PaddlePaddle平台训练物体分类——猫狗分类

学习目标:

在百度的PaddlePaddle平台训练自己需要的模型,以训练一个猫狗分类模型为例

PaddlePaddle平台:

  • 飞桨(PaddlePaddle)是百度开发的深度学习平台,具有动静统一框架、端到端开发套件等特性,支持大规模分布式训练和高性能推理
  • 作为中国首个自主研发的产业级平台,飞桨在市场份额和应用规模上均居中国第一,服务了800万开发者和22万家企事业单位,广泛应用于金融、能源、制造、交通等领域

学习概述:

  • 基于百度的PaddlePaddle平台训练猫狗分类模型

  • 学习使用PaddlePaddle平台的使用方法,其中包括寻找数据集、运行环境配置、数据预处理、训练、计算预估准确率、使用ncc工具将模型转换为kmodel模型文件等


训练方法:

1、寻找数据集:我们可以在搜索框搜索猫和狗,选择一个合适大小的猫与狗的数据集,便于后面训练模型,数据集样本的数量直接影响训练模型的正确率、迭代次数、训练时间等(点击跳转)

在这里插入图片描述
在这里插入图片描述


2、运行环境配置:首先创建一个Notebook项目,然后填写项目名称、数据集配置,此处使用AI Studio经典版、PaddlePaddle 2.4.0框架,接下来选择运行环境,我们选择免费的两核CPU就可以,然后运行创建配置好的项目

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


3、数据预处理:可以看到项目中有两个文件夹work和data,work目录下的变更会持久保存,但data目录下的变更重启环境后会自动还原。在右侧Notebook编译区可以新建代码脚本等

  1. 将data目录下的猫狗.zip重命名为catanddog.zip,新建Code并运行解压数据集
# 解压猫狗数据集
!cd data/data17036 && unzip -q catanddog.zip
  1. 上传预训练参数文件下载链接,新建Code并运行解预训练参数
# 解压预训练参数 
!cd data && unzip -q Pts.zip
# 解压预训练参数 pretrained
!cd data/Pts && unzip -q pretrained.zip
  1. 预处理数据,同时将数据拆分成两份以便训练和计算预估准确率,将其转化为标准格式。
# 预处理数据,将其转化为标准格式。同时将数据拆分成两份,以便训练和计算预估准确率
import codecs
import os
import random
import shutil
from PIL import Imagetrain_ratio = 4 / 5all_file_dir = 'data/data17036/catanddog'
class_list = [c for c in os.listdir(all_file_dir) if os.path.isdir(os.path.join(all_file_dir, c)) and not c.endswith('Set') and not c.startswith('.')]
class_list.sort()
print(class_list)
train_image_dir = os.path.join(all_file_dir, "trainImageSet")
if not os.path.exists(train_image_dir):os.makedirs(train_image_dir)eval_image_dir = os.path.join(all_file_dir, "evalImageSet")
if not os.path.exists(eval_image_dir):os.makedirs(eval_image_dir)train_file = codecs.open(os.path.join(all_file_dir, "train.txt"), 'w')
eval_file = codecs.open(os.path.join(all_file_dir, "eval.txt"), 'w')with codecs.open(os.path.join(all_file_dir, "label_list.txt"), "w") as label_list:label_id = 0for class_dir in class_list:label_list.write("{0}\t{1}\n".format(label_id, class_dir))image_path_pre = os.path.join(all_file_dir, class_dir)for file in os.listdir(image_path_pre):try:img = Image.open(os.path.join(image_path_pre, file))if random.uniform(0, 1) <= train_ratio:shutil.copyfile(os.path.join(image_path_pre, file), os.path.join(train_image_dir, file))train_file.write("{0}\t{1}\n".format(os.path.join(train_image_dir, file), label_id))else:shutil.copyfile(os.path.join(image_path_pre, file), os.path.join(eval_image_dir, file))eval_file.write("{0}\t{1}\n".format(os.path.join(eval_image_dir, file), label_id))except Exception as e:pass# 存在一些文件打不开,此处需要稍作清洗label_id += 1train_file.close()
eval_file.close()

4、训练模型:训练常用视觉基础网络进行猫狗分类

# -*- coding: UTF-8 -*-
"""
训练常用视觉基础网络,用于分类任务
需要将训练图片,类别文件 label_list.txt 放置在同一个文件夹下
程序会先读取 train.txt 文件获取类别数和图片数量
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import os
import numpy as np
import time
import math
import paddle
import paddle.fluid as fluid
import codecs
import loggingfrom paddle.fluid.initializer import MSRA
from paddle.fluid.initializer import Uniform
from paddle.fluid.param_attr import ParamAttr
from PIL import Image
from PIL import ImageEnhance......#代码较长其余可fork项目,参考本文结尾

5、计算预估准确率:测试集模型评估,测试模型的正确率

from __future__ import absolute_import    
from __future__ import division    
from __future__ import print_function    import os    
import numpy as np    
import random    
import time    
import codecs    
import sys    
import functools    
import math    
import paddle    
import paddle.fluid as fluid    
from paddle.fluid import core    
from paddle.fluid.param_attr import ParamAttr    
from PIL import Image, ImageEnhance    target_size = [3, 224, 224]    
mean_rgb = [127.5, 127.5, 127.5]    
data_dir = "data/data17036/catanddog"    
eval_file = "eval.txt"    
use_gpu = train_parameters["use_gpu"]    
place = fluid.CUDAPlace(0) if use_gpu else fluid.CPUPlace()    
exe = fluid.Executor(place)    
save_freeze_dir = "./freeze-model"    
[inference_program, feed_target_names, fetch_targets] = fluid.io.load_inference_model(dirname=save_freeze_dir, executor=exe)    
# print(fetch_targets)    def crop_image(img, target_size):    width, height = img.size    w_start = (width - target_size[2]) / 2    h_start = (height - target_size[1]) / 2    w_end = w_start + target_size[2]    h_end = h_start + target_size[1]    img = img.crop((w_start, h_start, w_end, h_end))    return img    def resize_img(img, target_size):    ret = img.resize((target_size[1], target_size[2]), Image.BILINEAR)    return ret    def read_image(img_path):    img = Image.open(img_path)    if img.mode != 'RGB':    img = img.convert('RGB')    img = crop_image(img, target_size)    img = np.array(img).astype('float32')    img -= mean_rgb    img = img.transpose((2, 0, 1))  # HWC to CHW    img *= 0.007843    img = img[np.newaxis,:]    return img    def infer(image_path):    tensor_img = read_image(image_path)    label = exe.run(inference_program, feed={feed_target_names[0]: tensor_img}, fetch_list=fetch_targets)    return np.argmax(label)    def eval_all():    eval_file_path = os.path.join(data_dir, eval_file)    total_count = 0    right_count = 0    with codecs.open(eval_file_path, encoding='utf-8') as flist:     lines = [line.strip() for line in flist]    t1 = time.time()    for line in lines:    total_count += 1    parts = line.strip().split()    result = infer(parts[0])    # print("infer result:{0} answer:{1}".format(result, parts[1]))    if str(result) == parts[1]:    right_count += 1    period = time.time() - t1    print("total eval count:{0} cost time:{1} predict accuracy:{2}".format(total_count, "%2.2f sec" % period, right_count / total_count))    if __name__ == '__main__':    eval_all()  
#print:total eval count:17 cost time:1.00 sec predict accuracy:0.8235294117647058

6、模型转换:

  1. 下载ncc工具,准备转换模型。关于ncc工具可参考K210学习记录(3)——kmodel生成与使用
!mkdir /home/aistudio/work/ncc
!wget "https://platform.bj.bcebos.com/sdk%2Fncc-linux-x86_64.tar.gz" -O ncc-linux-x86_64.tar.gz 
!tar -zxvf ncc-linux-x86_64.tar.gz -C /home/aistudio/work/ncc 
  1. 在模型转换前,需要进行模型压缩,进行量化。为了保证量化后的精度, 需要使用训练图片调整模型。拷贝评估图片到/home/aistudio/work/images
import os
import shutil
!mkdir /home/aistudio/work/images
filenames = os.listdir("/home/aistudio/data/data17036/catanddog/evalImageSet/")#下面方法是图片太多的时候随机选择图片  
# index = 0
# for i in range(1, len(filenames), 7):
#     srcFile = os.path.join("/home/aistudio/data/data17036/catanddog/evalImageSet/", filenames[index])
#     targetFile = os.path.join("/home/aistudio/work/images",filenames[index])
#     shutil.copyfile(srcFile,targetFile)
#     index += 7index = 0
for i in range(0, len(filenames), 1):srcFile = os.path.join("/home/aistudio/data/data17036/catanddog/evalImageSet/", filenames[index])targetFile = os.path.join("/home/aistudio/work/images",filenames[index])shutil.copyfile(srcFile,targetFile)index += 1
  1. 转换为.kmodel模型
!chmod 777 /home/aistudio/work/ncc
!/home/aistudio/work/ncc/ncc -i paddle -o k210model --postprocess n1to1 --dataset work/images/ freeze-model catanddog.kmodel

小结:

  • PaddlePaddle平台的学习有六个关键步骤:配置运行环境以安装PaddlePaddle、选择并获取适合的数据集、对数据进行预处理,如清洗和标准化、利用PaddlePaddle框架进行深度学习模型的训练、训练完成后,使用验证集对模型性能进行评估、最后通过ncc工具将模型转换成kmodel文件,为模型部署做准备。这一系列步骤构成了机器学习从数据准备到模型部署的完整流程
  • 为提升PaddlePaddle实验效率和模型性能,可自动化实验流程,进行超参数调优,使用可视化监控训练,并通过交叉验证等方法增强模型泛化能力。
  • 本实验的项目地址,为大家学习使用带来方便,大家可以fork学习,点击进入项目地址

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

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

相关文章

node.js 解析post请求 方法一

前提&#xff1a;依旧以前面发的node.js服务器动态资源处理代码 具体见 http://t.csdnimg.cn/TSNW9为模板&#xff0c;在这基础上进行修改。与动态资源处理代码不同的是&#xff0c;这次的用户信息我们借用表单来实现。post请求解析来获取和展示用户表单填写信息 1》代码难点&…

【项目实战】基于高并发服务器的搜索引擎

【项目实战】基于高并发服务器的搜索引擎 目录 【项目实战】基于高并发服务器的搜索引擎搜索引擎部分代码index.htmlindex.hpplog.hppparser.cc&#xff08;用于对网页的html文件切分且存储索引关系&#xff09;searcher.hpputil.hpphttp_server.cc&#xff08;用于启动服务器和…

WPForms Pro插件下载:简化您的在线表单构建,提升用户互动

在当今的数字化世界中&#xff0c;表单是网站与用户互动的关键。无论是收集信息、处理订单还是进行调查&#xff0c;一个好的表单可以极大地提升用户体验和转化率。WPForms Pro插件&#xff0c;作为一款专业的WordPress表单构建工具&#xff0c;旨在帮助您轻松创建美观、功能强…

深度学习基础:循环神经网络中的Dropout

深度学习基础&#xff1a;循环神经网络中的Dropout 在深度学习中&#xff0c;过拟合是一个常见的问题&#xff0c;特别是在循环神经网络&#xff08;RNN&#xff09;等复杂模型中。为了应对过拟合问题&#xff0c;研究者们提出了许多方法&#xff0c;其中一种被广泛应用的方法…

TensorFlow进阶一(张量的范数、最值、均值、和函数、张量的比较)

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

短视频评论ID批量爬虫提取获客软件|视频评论下载采集工具

短视频评论批量抓取软件&#xff1a;智能拓客&#xff0c;精准抓取用户反馈 主要功能一览 1. 智能抓取任务创建&#xff1a; 软件提供了任务创建功能&#xff0c;用户只需输入任务名称、搜索关键词以及评论监控词&#xff0c;即可开始智能抓取。不仅能够搜索关键词匹配的视频…

Gradio 最快创建Web 界面部署到服务器并演示机器学习模型,本文提供教学案例以及部署方法,避免使用繁琐的django

最近学习hugging face里面的物体检测模型&#xff0c;发现一个方便快捷的工具&#xff01; Gradio 是通过友好的 Web 界面演示机器学习模型的最快方式&#xff0c;以便任何人都可以在任何地方使用它&#xff01; 一、核心优势&#xff1a; 使用这个开发这种演示机器学习模型的…

就业班 第三阶段(负载均衡) 2401--4.19 day3

二、企业 keepalived 高可用项目实战 1、Keepalived VRRP 介绍 keepalived是什么keepalived是集群管理中保证集群高可用的一个服务软件&#xff0c;用来防止单点故障。 ​ keepalived工作原理keepalived是以VRRP协议为实现基础的&#xff0c;VRRP全称Virtual Router Redundan…

前端开发攻略---封装calendar日历组件,实现日期多选。可根据您的需求任意调整,可玩性强。

1、演示 2、简介 1、该日历组件是纯手搓出来的&#xff0c;没依赖任何组件库&#xff0c;因此您可以随意又轻松的改变代码&#xff0c;以实现您的需求。 2、代码清爽干净&#xff0c;逻辑精妙&#xff0c;您可以好好品尝。 3、好戏开场。 3、代码&#xff08;Vue3写法&#xff…

探索Web3:去中心化的互联网新时代

引言 在过去的几十年里&#xff0c;互联网已经改变了我们的生活方式、商业模式以及社交互动方式。然而&#xff0c;一个新的技术浪潮——Web3正在崭露头角&#xff0c;预示着一个去中心化的互联网新时代的来临。本文将深入探讨Web3技术的定义、特点以及其对未来互联网发展的影…

【数据结构-图】

目录 1 图2 图的定义和基本概念&#xff08;在简单图范围内&#xff09;3 图的类型定义4 图的存储结构4.1 邻接矩阵 表示法4.2 邻接表 表示法4.3 十字链表 表示法4.4 邻接多重表 表示法 5 图的遍历5.1 深度优先搜索-DFS 及 广度优先遍历-BFS 6 图的应用6.1 最小生成树6.1.1 克鲁…

vue cli3开发自己的插件发布到npm

具体流程如下&#xff1a; 1、创建一个vue项目 vue create project 2、编写组件 &#xff08;1&#xff09;新建一个plugins文件夹&#xff08;可自行创建&#xff09; &#xff08;2&#xff09;新建Button组件 &#xff08;3&#xff09;组件挂载&#xff0c;为组件提供 in…

Python绘制3D曲面图

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 探索Python中绘制3D曲面图的艺术 在数据可视化的世界中&#xff0c;3D曲面图是一种强大的工…

数据链路层(计算机网络,待完善)

0、前言 本文大多数图片都来自于 B站UP主&#xff1a;湖科大教书匠 的教学视频&#xff0c;对高军老师及其团队制作出这么优质的课程表示感谢。文章增加了部分个人理解&#xff0c;内容并不是对视频的静态化翻译。 1、概述 1.1、数据链路层在计算机网络体系中的位置 1.2、对…

Jenkins集成Terraform实现阿里云CDN自动刷新

在互联网业务中&#xff0c;CDN的应用已经成了普遍&#xff0c;SRE的日常需求中&#xff0c;CDN的刷新在前端需求逐渐中占了很大比例&#xff0c;并且比较琐碎。做为合格的SRE&#xff0c;把一切自动化是终极使命&#xff0c;而今天就分享通过JenkinsTerraform实现阿里云的CDN自…

CISSP通关学习笔记:共计 9 个章节(已完结)

1. 笔记说明 第 0 章节为开篇介绍&#xff0c;不包括知识点。第 1 - 8 章节为知识点梳理汇总&#xff0c;8 个章节的知识框架关系如下图所示&#xff1a; 2. 笔记目录 「 CISSP学习笔记 」0.开篇「 CISSP学习笔记 」1.安全与风险管理「 CISSP学习笔记 」2.资产安全「 CISSP…

机器学习/算法工程师面试题目与答案-深度学习部分1

机器学习/算法工程师面试题目与答案-深度学习部分 BatchNormalization的作用梯度消失循环神经网络&#xff0c;为什么好?什么是GroupConvolution什么是RNN神经网络中权重共享的是&#xff1f;神经网络激活函数&#xff1f;为什么在深度学习中常进行finetuning画GRU结构图什么是…

Flink CDC详解

文章目录 Flink CDC一 CDC简介1.1 CDC定义1.2 CDC应用场景1.3 CDC实现机制1.4 开源CDC工具对比 二 Flink CDC简介2.1 Flink CDC介绍2.2 Flink CDC Connector(连接器)2.3 Flink CDC && Flink版本2.4 Flink CDC特点 三 Flink CDC发展3.1 发展历程3.2 背景Dynamic Table &…

51单片机入门_江协科技_35~36_OB记录的自学笔记_AD与DA转换(XPT2046)

35. AD_DA 35.1. AD/DA介绍 •AD&#xff08;Analog to Digital&#xff09;&#xff1a;模拟-数字转换&#xff0c;将模拟信号转换为计算机可操作的数字信号 •DA&#xff08;Digital to Analog&#xff09;&#xff1a;数字-模拟转换&#xff0c;将计算机输出的数字信号转换…

系统设计 --- E2E Test System

系统设计 --- E2E Test System 什么是E2EE2E Architecture Example 什么是E2E E2E&#xff08;端到端&#xff09;测试是一种软件测试方法&#xff0c;旨在模拟真实的用户场景&#xff0c;测试整个应用程序或系统的端到端功能和交互流程。E2E 测试涵盖了从用户界面到后端系统的…