AI金融攻防赛:YOLO模型的数据增强与性能优化(DataWhale组队学习)

news2024/10/23 3:00:33

head

引言

大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的AI金融攻防赛学习总结文档。在前一篇文章中,我们详细介绍了如何在金融场景凭证篡改检测中应用YOLO算法。本文将在此基础上,进一步探讨如何通过数据集增强优化训练参数调整预测行为来提升模型的性能和准确性。希望我的经验能对大家有所帮助!💕💕😊


一、数据集增强

1. 数据增强的概念

数据增强是机器学习和深度学习中常用的技术,用于通过从现有数据集中生成新的训练样本来提高模型的泛化能力。干净一致的数据对于创建性能良好的模型至关重要。常见的增强技术包括翻转、旋转、缩放和颜色调整。多个库,例如 Albumentations、Imgaug 和 TensorFlow的 ImageDataGenerator,可以生成这些增强。

2. 数据增强的效果示例

如下图所示,是一个数据集增强的效果示例,针对原有数据集进行了翻转、随机拼贴、剪切等处理:
数据增强

3. 数据增强的代码实现

import albumentations as A
import cv2

# 定义数据增强的变换
transform = A.Compose([
    A.HorizontalFlip(p=0.5),
    A.RandomRotate90(p=0.5),
    A.RandomBrightnessContrast(p=0.2),
    A.RandomCrop(width=400, height=400, p=0.5),
])

# 读取图像
image = cv2.imread('path/to/image.jpg')

# 应用数据增强
augmented = transform(image=image)
augmented_image = augmented['image']

# 显示增强后的图像
cv2.imshow('Augmented Image', augmented_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

数据增强听起来高大上,但实际上就是给数据“化妆”,让模型在“化妆”后的数据上训练,以提高其“审美”能力。不过,化妆也要适度,过度化妆可能会让模型“认不出”原始数据,反而适得其反。


二、设置 YOLO 模型训练参数

1. 训练参数的优化

YOLO 模型的训练设置包括多种超参数和配置,这些设置会影响模型的性能、速度和准确性。微调涉及采用预先训练的模型并调整其参数以提高特定任务或数据集的性能。该过程也称为模型再训练,使模型能够更好地理解和预测在实际应用中将遇到的特定数据的结果。您可以根据模型评估重新训练模型,以获得最佳结果。

2. 常用训练参数

  1. imgsz: 训练时的目标图像尺寸,所有图像在此尺寸下缩放。
  2. save_period: 保存模型检查点的频率(周期数),-1 表示禁用。
  3. device: 用于训练的计算设备,可以是单个或多个 GPU,CPU 或苹果硅的 MPS。
  4. optimizer: 训练中使用的优化器,如 SGD、Adam 等,或 ‘auto’ 以根据模型配置自动选择。
  5. momentum: SGD 的动量因子或 Adam 优化器的 beta1。
  6. weight_decay: L2 正则化项。
  7. warmup_epochs: 学习率预热的周期数。
  8. warmup_momentum: 预热阶段的初始动量。
  9. warmup_bias_lr: 预热阶段偏置参数的学习率。
  10. box: 边界框损失在损失函数中的权重。
  11. cls: 分类损失在总损失函数中的权重。
  12. dfl: 分布焦点损失的权重。

3. 代码示例

from ultralytics import YOLO

# 加载预训练模型
model = YOLO("yolov8n.pt")

# 设置训练参数
train_params = {
    'imgsz': 640,
    'save_period': 10,
    'device': 'cuda',
    'optimizer': 'Adam',
    'momentum': 0.9,
    'weight_decay': 0.0005,
    'warmup_epochs': 3,
    'warmup_momentum': 0.8,
    'warmup_bias_lr': 0.1,
    'box': 0.05,
    'cls': 0.5,
    'dfl': 0.5,
}

# 开始训练
results = model.train(data="./yolo_seg_dataset/data.yaml", epochs=50, **train_params)

训练参数的设置就像是在调音台上调音,每个参数都是一个旋钮,调得好,模型就能唱出天籁之音;调不好,模型可能就成了噪音制造机。所以,调参不仅需要技术,还需要耐心和运气,这也是炼丹师称号的由来😂


三、设置 YOLO 模型预测行为和性能

1. 预测行为的调整

video

YOLO模型的预测结果通常包括多个组成部分,每个部分提供关于检测到的对象的不同信息。同时 YOLO 能够处理包括单独图像、图像集合、视频文件或实时视频流在内的多种数据源,也能够一次性处理多个图像或视频帧,进一步提高推理速度。

2. 代码

from ultralytics import YOLO

# 加载模型
model = YOLO("yolov8n.pt")

# 批量推理
results = model(["im1.jpg", "im2.jpg"])

# 处理结果
for result in results:
    boxes = result.boxes
    masks = result.masks
    keypoints = result.keypoints
    probs = result.probs
    obb = result.obb
    result.show()
    result.save(filename="result.jpg")

3. 优化预测性能

YOLOv8模型的使用者提供了灵活性,允许根据特定应用场景的需求调整模型的行为和性能。例如,如果需要减少误报,可以提高conf阈值;如果需要提高模型的执行速度,可以在支持的硬件上使用half精度;如果需要处理视频数据并希望加快处理速度,可以调整vid_stride来跳过某些帧。这些参数的适当配置对于优化模型的预测性能至关重要。

预测行为的调整就像是在给模型“开挂”,不同的“挂”可以带来不同的效果。但是,开挂也要适度,过度开挂可能会让模型“失控”,反而得不偿失。


四、拓展:模型部署与实际应用

1. 模型部署

模型训练完成后,如何将其部署到实际应用中是一个重要的问题。常见的部署方式包括:

  • 云端部署:将模型部署到云服务器上,通过API接口提供服务。
  • 本地部署:将模型部署到本地服务器或边缘设备上,实现实时检测。
  • 移动端部署:将模型部署到移动设备上,实现移动端的实时检测。

2. 实际应用案例

在金融场景中,凭证篡改检测模型的应用可以包括:

  • 自动审核:自动检测上传的凭证是否被篡改,提高审核效率。
  • 实时监控:在交易过程中实时监控凭证,防止篡改行为。
  • 事后分析:对历史凭证进行分析,发现潜在的篡改行为。

3. 云端部署

from flask import Flask, request, jsonify
from ultralytics import YOLO
import cv2
import numpy as np

app = Flask(__name__)
model = YOLO("yolov8n.pt")

@app.route('/detect', methods=['POST'])
def detect():
    file = request.files['image']
    image = cv2.imdecode(np.frombuffer(file.read(), np.uint8), cv2.IMREAD_COLOR)
    results = model(image)
    response = []
    for result in results:
        boxes = result.boxes
        for box in boxes:
            response.append({
                'class': box.cls.item(),
                'confidence': box.conf.item(),
                'bbox': box.xyxy.tolist()
            })
    return jsonify(response)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
  • 模型部署听起来高大上,但实际上就是将模型“搬家”,从实验室搬到实际应用场景中。搬家过程中,可能会遇到各种“水土不服”的问题,需要耐心解决。
  • 这里我们使用的是Flask,自己测试是足够了,不过我更推荐使用FastAPI框架,它更快更方便;

五、总结

通过本次AI金融攻防赛的学习和实践,我们深入了解了凭证篡改检测这一关键问题,并成功构建了一个基于YOLOv8的检测模型。通过数据增强、优化训练参数和调整预测行为,我们进一步提升了模型的性能和准确性。希望这篇博客能为您的项目提供帮助!🚀


相关链接

  • 项目地址:Git地址
  • 活动地址:AI核身之金融场景凭证篡改检测
  • 相关文档:专栏地址
  • 作者主页:GISer Liu-CSDN博客

thank_watch

如果觉得我的文章对您有帮助,记得三连+关注哦!🌟

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

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

相关文章

深入了解Spring重试组件spring-retry

在我们的项目中,为了提高程序的健壮性,很多时候都需要有重试机制进行兜底,最多就场景就比如调用远程的服务,调用中间件服务等,因为网络是不稳定的,所以在进行远程调用的时候偶尔会产生超时的异常&#xff0…

渗透测试实战—教育攻防演练中突破网络隔离

免责声明:文章来源于真实渗透测试,已获得授权,且关键信息已经打码处理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本…

3.matplotlib基础及用法(全)

一.基础绘图 折线图plot散点图scatter柱状图bar饼图pie 二.图表设置 设置标题设置线条设置坐标轴添加图例添加注释设置画布大小与分辨率 三.高级功能 绘制子图保存图形 一.基础绘图 1.折线图plot import matplotlib.pyplot as plt x [1, 2, 3, 4, 5] y [2, 3, 5, 7, 11] pl…

如何选择合适的电感器来匹配感性负载?

在匹配感性负载时,选择合适的电感器是至关重要的。电感器的主要作用是抑制电流变化,从而维持电路的稳定性。为了确保电路的稳定运行,需要考虑以下因素: 1. 电流和电压:首先,需要确定电感器的额定电流和额定…

GJS-WCP

不懂的就问,但我也是二把手......哭死 web GJS-ezssti 很常规的ssti模板注入,只过滤了"/","flag"。 过滤了/,flag 可以利用bash的特性绕过,如字符串截取,环境变量等等。payload1: {{url_for.__globals__[…

【uniapp】微信小程序使用echarts图表记录

1、插件引入 在Dcloud插件市场下载echarts插件:插件地址 或去相关代码库下载js:gitee地址 将static文件夹下中的echarts.min.js和ecStat.min.js复制到自己项目的static文件夹内或到echarts官方定制自己需要的图表类型下载js文件并放入相关目录。echart…

让你的 IDEA 使用更流畅 | IDEA内存修改

随着idea使用越来越频繁,笔者最近发现使用过程中有时候会出现卡顿现象,例如,启动软件变慢,打开项目的速度变慢等: 因此如果各位朋友觉得最近也遇到了同样的困惑,不妨跟着笔者一起来设置IDEA的内存大小吧~ …

【C#】在 WinForms 中使用 MVVM(Model-View-ViewModel) 设计模式

结合当前的 DevExpress 项目,在 WinForms 中使用 MVVM(Model-View-ViewModel) 设计模式。这个例子将通过数据绑定、命令绑定来展示 MVVM 模式的运用。 1. 项目结构 假设我们要实现一个简单的应用程序,它有一个文本框和一个按钮&…

【C++指南】类和对象(四):类的默认成员函数——全面剖析 : 拷贝构造函数

引言 拷贝构造函数是C中一个重要的特性,它允许一个对象通过另一个已创建好的同类型对象来初始化。 了解拷贝构造函数的概念、作用、特点、规则、默认行为以及如何自定义实现,对于编写健壮和高效的C程序至关重要。 C类和对象系列文章,可点击下…

【计网】理解TCP全连接队列与tcpdump抓包

希望是火,失望是烟, 生活就是一边点火,一边冒烟。 理解TCP全连接队列与tcpdump抓包 1 TCP 全连接队列1.1 重谈listen函数1.2 初步理解全连接队列1.3 深入理解全连接队列 2 tcpdump抓包 1 TCP 全连接队列 1.1 重谈listen函数 这里我们使用…

【JAVA】第三张_Eclipse下载、安装、汉化

简介 Eclipse是一种流行的集成开发环境(IDE),可用于开发各种编程语言,包括Java、C、Python等。它最初由IBM公司开发,后来被Eclipse Foundation接手并成为一个开源项目。 Eclipse提供了一个功能强大的开发平台&#x…

IDEA如何查看所有的断点(Breakpoints)并关闭

前言 我们在使用IDEA开发Java应用时,基本上都需要进行打断点的操作,这方便我们排查BUG,也方便我们查看设计的是否正确。 不过有时候,我们不希望进入断点,这时候除了点击断点关闭外,有没有更快速的方便关闭…

深度解析机器学习的四大核心功能:分类、回归、聚类与降维

深度解析机器学习的四大核心功能:分类、回归、聚类与降维 前言分类(Classification):预测离散标签的艺术关键算法与代码示例逻辑回归支持向量机(SVM) 回归(Regression):预…

HarmonyOS Next应用开发——图像PixelMap变换

【高心星出品】 图像变换 图片处理指对PixelMap进行相关的操作,如获取图片信息、裁剪、缩放、偏移、旋转、翻转、设置透明度、读写像素数据等。图片处理主要包括图像变换、位图操作,本文介绍图像变换。 图形裁剪 // 裁剪图片 x,y为裁剪的起…

impdp+remap_schema导入后登录报ORA-01017: Invalid Username/password

环境说明:有个11.2.0.4的rac数据库,现需要把USR_OA克隆一份出来做测试,新用户名是TEST_OA,直接是expdp导出用户,再用impdpremap_schema生成TEST_OA, 业务人员使用PLSQL(版本12.0.1.1814) 登录TEST_OA时总…

Python程序设计 内置函数 日志模块

logging(日志) 日志记录是程序员工具箱中非常有用的工具。它可以帮助您更好地理解程序的流程,并发现您在开发过程中可能没有想到的场景。 日志为开发人员提供了额外的一组眼睛,这些眼睛不断关注应用程序正在经历的流程。它们可以存储信息,例…

ShardingProxy服务端分库分表

目录 一、为什么要有服务端分库分表? 二、ShardingProxy基础使用 1、部署ShardingProxy 2、配置常用分库分表策略 三、ShardingSphere中的分布式事务机制 1、什么是XA事务? 2、实战理解XA事务 3、如何在ShardingProxy中使用另外两种事务管理器&a…

【不要离开你的舒适圈】:猛兽才希望你落单,亲人总让你回家,4个维度全面构建舒适圈矩阵

单打独斗的英雄时代已经落幕 抱团取暖才是社会寒冬的良策 自然界中,每个物种都占据着自己的领地和生存空间。 生态位的差异决定了它们的生存方式,一旦离开领地,失去群体的庇护,就会沦为野兽的美餐。 人类社会同样存在隐形圈层…

数仓建模:金字塔原理在数仓建模分析中的应用

目录 1 金字塔原理 1.1 金子塔原理基本原理 1.2 金字塔内部结构 2 如何构建金字塔 2.1 金字塔塔尖构建 2.2 金字塔纵向层次构建 2.3 金字塔横向关系构建 2.3.1 归类分组 2.3.2 逻辑递进 2.4 小结 3 金字塔原理应用 3.1 数仓建模 3.1.1 数仓建模分析方法-自上而下…

OBOO鸥柏:液晶拼接大屏搭载节点盒分布式集中管控控制系统新技术

近年来,随着视频监控、会议系统及展示需求的快速增长,KVM分布式输入输出节点控制系统在各大行业中逐渐成为核心技术。OBOO鸥柏的液晶拼接大屏分布式输入输出节点控制系统(WControl),以其创新的技术和卓越的用户体验&am…