第二十五天 项目实践:图像分类

项目实践:图像分类

一、数据集准备

在图像分类任务中,数据集的选择和准备是至关重要的。一个高质量的数据集可以显著提高模型的训练效果和泛化能力。

  1. 数据集选择

    • ImageNet:这是一个广泛应用于训练卷积神经网络(CNN)模型的重要数据集,由斯坦福大学创建。它包含超过1500万张图像,涵盖了来自超过2万个不同类别的真实世界物体。ImageNet数据集具有较高的多样性和复杂性,非常适合用于训练图像分类模型。

    • 自建数据集:如果找不到适合项目需求的数据集,可以自建数据集。自建数据集时,需要确保数据集包含目标物体的各类场景,并且各种场景下的图像数量尽可能相近。此外,图像的尺寸、比例、拍摄环境(如光照、设备、拍摄角度等)以及形态、部位、时期和背景等也需要尽可能丰富。

  2. 数据预处理

    • 数据清洗:删除重复、模糊、无关或质量差的图像,确保数据集的纯净性。

    • 数据标注:对图像进行标注,为每张图像分配一个或多个标签,表示其所属的类别。

    • 数据增强:通过旋转、缩放、裁剪、翻转、调整亮度和对比度等方法,增加数据集的多样性,提高模型的泛化能力。

    • 数据划分:将数据集划分为训练集、验证集和测试集。通常,训练集用于训练模型,验证集用于调整模型参数,测试集用于评估模型性能。

二、模型训练
  1. 选择模型

    • 根据项目需求和数据集规模,选择合适的图像分类模型。常用的模型包括卷积神经网络(CNN)、残差网络(ResNet)、VGG等。
  2. 配置训练环境

    • 安装必要的软件和库,如TensorFlow、PyTorch等深度学习框架,以及CUDA、cuDNN等加速库。

    • 配置GPU环境,以提高模型训练速度。

  3. 设置训练参数

    • 设置学习率、批量大小、训练轮数等超参数。

    • 选择合适的优化器,如Adam、SGD等。

  4. 开始训练

    • 加载数据集,并输入到模型中。

    • 通过前向传播计算损失值,并通过反向传播更新模型参数。

    • 在训练过程中,监控损失值和准确率等指标的变化情况,以便及时调整训练策略。

  5. 保存模型

    • 在训练结束后,保存训练好的模型,以便后续进行模型评估和部署。
三、模型评估
  1. 选择评估指标

    • 常用的评估指标包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1-score、ROC曲线和AUC等。这些指标可以从不同角度反映模型的性能。
  2. 加载测试集

    • 加载测试集,并输入到训练好的模型中,进行预测。
  3. 计算评估指标

    • 根据预测结果和真实标签,计算各个评估指标的值。
  4. 分析评估结果

    • 分析评估结果,了解模型的优点和不足。如果模型的性能不理想,可以尝试调整模型结构、训练参数或数据集等,以提高模型的性能。
  5. 生成评估报告

    • 将评估结果整理成报告,包括评估指标的值、模型的优缺点分析以及改进建议等。

通过以上步骤,可以完成一个图像分类项目的实践。在实践中,需要根据项目需求和实际情况进行调整和优化,以获得更好的结果。

当然,以下是图像分类项目实践中的代码部分,涵盖了数据集准备、模型训练与评估的基本流程。这里以TensorFlow和Keras为例,并假设我们使用一个预训练的CNN模型(如ResNet50)进行迁移学习。

数据集准备

首先,我们需要准备和预处理数据集。这里假设我们有一个名为data的文件夹,其中包含trainvalidation两个子文件夹,每个子文件夹内按类别存放图像。

import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator

# 数据集路径
train_dir = 'data/train'
validation_dir = 'data/validation'

# 数据增强和预处理
train_datagen = ImageDataGenerator(
    rescale=1./255,
    rotation_range=40,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    fill_mode='nearest'
)

validation_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
    train_dir,
    target_size=(224, 224),  # 根据模型输入大小调整
    batch_size=32,
    class_mode='categorical'  # 多分类任务
)

validation_generator = validation_datagen.flow_from_directory(
    validation_dir,
    target_size=(224, 224),
    batch_size=32,
    class_mode='categorical'
)

模型训练

接下来,我们加载预训练的ResNet50模型,并在其基础上添加自定义的分类层。

from tensorflow.keras.applications import ResNet50
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D

# 加载预训练的ResNet50模型,不包括顶部的全连接层
base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))

# 冻结预训练模型的卷积层
for layer in base_model.layers:
    layer.trainable = False

# 添加全局平均池化层
x = base_model.output
x = GlobalAveragePooling2D()(x)

# 添加自定义的全连接层
x = Dense(1024, activation='relu')(x)
predictions = Dense(train_generator.num_classes, activation='softmax')(x)

# 构建最终的模型
model = Model(inputs=base_model.input, outputs=predictions)

# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# 训练模型
history = model.fit(
    train_generator,
    steps_per_epoch=train_generator.samples // train_generator.batch_size,
    validation_data=validation_generator,
    validation_steps=validation_generator.samples // validation_generator.batch_size,
    epochs=10  # 根据需要调整训练轮数
)

模型评估

最后,我们评估模型在测试集上的性能。这里假设我们有一个名为test的文件夹,结构与validation相同。

# 测试集数据生成器
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory(
    'data/test',
    target_size=(224, 224),
    batch_size=32,
    class_mode='categorical'
)

# 评估模型
test_loss, test_acc = model.evaluate(test_generator, steps=test_generator.samples // test_generator.batch_size)
print(f'Test accuracy: {test_acc}')

# 如果需要,可以进一步分析预测结果,如生成混淆矩阵等。

请注意,以上代码是一个简化的示例,实际应用中可能需要根据具体的数据集和任务需求进行调整。例如,可能需要解冻部分预训练模型的层以进行微调,或者可能需要使用更复杂的数据增强技术。此外,评估部分也可以根据需要添加更多的评估指标和可视化方法。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

职场常用Excel基础01-数据验证

大家好,excel在职场中使用非常频繁,今天和大家一起分享一下excel中数据验证相关的内容~ 在Excel中,数据验证(Data Validation)是一项非常有用的功能,它可以帮助用户限制输入到单元格中的数据类型和范围&am…

建造者设计模式学习

1.介绍 建造者模式是一种创建型设计模式,它将一个复杂对象的构建过程与它的表示分离,使得相同的构建过程可以创建不同的表示。通过分步骤地构建对象,建造者模式提供了更细粒度的控制和灵活性,特别适合需要灵活创建复杂对象的场景…

ROS2+OpenCV综合应用--10. AprilTag标签码追踪

1. 简介 apriltag标签码追踪是在apriltag标签码识别的基础上,增加了小车摄像头云台运动的功能,摄像头会保持标签码在视觉中间而运动,根据这一特性,从而实现标签码追踪功能。 2. 启动 2.1 程序启动前的准备 本次apriltag标签码使…

mysql乱码、mysql数据中文问号

网上排出此错误方法的很多,但是 都不简洁,找不到根本原因 主要排查两点: 1.代码中jdbc链接的编码规则 urljdbc:mysql://localhost:3306/title?useUnicodetrue&characterEncodingutf8 将characterEncoding设置为utf8 2.设置mysq…

Presto-简单了解-230403

presto是什么了解一下: 秒级查询引擎(不做存储),GB-PB级不依赖于yarn,有自己的资源管理和执行计划支持多种数据源:hive、redis、kafka presto架构 presto优缺点 presto优点 内存到内存的传输&#xff0…

openGauss连接是报org.opengauss.util.PSQLException: 尝试连线已失败

安装好高斯数据库后然后用java连接时报如下错误: 解决方法: 在openGauss数据库的安装路径下/opt/opengauss/data/single_node(这个路径根据自己实际情况变化)有个pg_hba.conf文件,修改里面host内容如下,我这里设置的是所有ip都能…

mybatis-plus自动填充时间的配置类实现

mybatis-plus自动填充时间的配置类实现 在实际操作过程中,我们并不希望创建时间、修改时间这些来手动进行,而是希望通过自动化来完成,而mybatis-plus则也提供了自动填充功能来实现这一操作,接下来,就来了解一下mybatis…

【Java项目】基于SpringBoot的【人职匹配推荐系统】

【Java项目】基于SpringBoot的【人职匹配推荐系统】 技术简介:本系统使用采用B/S架构、Spring Boot框架、MYSQL数据库进行开发设计。 系统简介:人职匹配推荐系统分为管理员和用户、企业三个权限子模块。 管理员所能使用的功能主要有:首页、个…

Flutter 调试环境下浏览器网络请求跨域问题解决方案

本篇文章主要讲解,Flutter调试环境情况下,浏览器调试报错跨域问题的解决方法,通过本篇文章你可以快速掌握Flutter调试环境情况下的跨域问题。 日期:2024年12月28日 作者:任聪聪 报错现象: 报文信息&#xf…

【每日学点鸿蒙知识】导入cardEmulation、自定义装饰器、CallState状态码顺序、kv配置、签名文件配置

1、HarmonyOS 无法导入cardEmulation? 在工程entry mudule里的index.ets文件里导入cardEmulation失败 可以按照下面方式添加SystemCapability;在src/main/syscap.json(此文件需要手动创建)中添加如下内容 {"devices": {"gen…

ArcGIS JSAPI 高级教程 - 通过RenderNode实现视频融合效果(不借助三方工具)

ArcGIS JSAPI 高级教程 - 通过RenderNode实现视频融合效果(不借助三方工具) 核心代码完整代码在线示例 地球中展示视频可以通过替换纹理的方式实现,但是随着摄像头和无人机的流行,需要视频和场景深度融合,简单的实现方…

【大模型实战篇】LLaMA Factory微调ChatGLM-4-9B模型

1. 背景介绍 虽然现在大模型微调的文章很多,但纸上得来终觉浅,大模型微调的体感还是需要自己亲自上手实操过,才能有一些自己的感悟和直觉。这次我们选择使用llama_factory来微调chatglm-4-9B大模型。 之前微调我们是用两块3090GPU显卡&…

微信流量主挑战:三天25用户!功能未完善?(新纪元4)

🎉【小程序上线第三天!突破25用户大关!】🎉 嘿,大家好!今天是我们小程序上线的第三天,我们的用户量已经突破了25个!昨天还是16个,今天一觉醒来竟然有25个!这涨…

【工具变量】国际消费中心城市DID数据(2007年-2023年)

数据简介 国际消费中心城市的定位是一个国家乃至全球消费市场消费资源的集中地和关键枢纽,该城市特质不单顺应我国对外交流与开放的不断扩大的趋势,其培育和建设国际消费中心城市的一大意义在于,以地区地域资源中心定位,来推动周围…

如何修复 WordPress 中的“Error establishing a database connection”问题

如何修复 WordPress 中的“Error establishing a database connection”问题 在使用 WordPress 建站时,如果你看到“Error establishing a database connection”的提示,不要慌张。这通常意味着网站无法连接到数据库,因此无法显示内容。下面…

streamlit、shiny、gradio、fastapi四个web APP平台体验

streamlit、shiny、gradio、fastapi四个web APP平台体验 经常被问的问题就是:web APP平台哪个好?该用哪个?刚开始只有用streamlit和shiny,最近体验了一下gradio和fastapi,今天根据自己的体会尝试着回答一下。 使用R语…

http报头解析

http报文 http报文主要有两类是常见的,第一类是请求报文,第二类是响应报文,每个报头除了第一行,都是采用键值对进行传输数据,请求报文的第一行主要包括http方法(GET,PUT, POST&#…

Qwen-Agent

文章目录 一、关于 Qwen-Agent更新准备:模型服务免责声明 二、安装三、快速开发步骤 1:添加自定义工具步骤 2:配置 LLM步骤 3:创建智能体步骤 4:运行智能体 四、FAQ1、支持函数调用(也称为工具调用&#xf…

flux文生图模型实践

flux文生图模型实践 flyfish https://github.com/black-forest-labs/flux Black Forest Labs发布FLUX.1 Tools,这是一套模型全家桶,旨在为FLUX.1基础文本转图像模型添加控制和可操纵性,从而实现对真实图像和生成图像的修改和重新创建。FLU…

【ETCD】【实操篇(十九)】ETCD基准测试实战

目录 1. 设定性能基准要求2. 使用基准测试工具基准测试命令 3. 测试不同的负载和场景4. 监控集群性能5. 评估硬件和网络的影响6. 对比性能基准7. 负载均衡和容错能力测试8. 优化与调优9. 测试在高负载下的表现总结 1. 设定性能基准要求 首先,明确集群性能的目标&am…