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

引言

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


一、数据集增强

1. 数据增强的概念

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

2. 数据增强的效果示例

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

3. 数据增强的代码实现

python 复制代码
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. 代码示例

python 复制代码
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. 预测行为的调整

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

2. 代码

python 复制代码
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. 云端部署

python 复制代码
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的检测模型。通过数据增强、优化训练参数和调整预测行为,我们进一步提升了模型的性能和准确性。希望这篇博客能为您的项目提供帮助!🚀


相关链接


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

相关推荐
-一杯为品-几秒前
【51单片机】程序实验5&6.独立按键-矩阵按键
c语言·笔记·学习·51单片机·硬件工程
成长之路514几秒前
中国省级金融发展水平指数(金融机构存款余额、贷款余额、GDP)2020-2023年
金融
The_Ticker11 分钟前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
Elastic 中国社区官方博客17 分钟前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
jwolf218 分钟前
摸一下elasticsearch8的AI能力:语义搜索/vector向量搜索案例
人工智能·搜索引擎
有Li26 分钟前
跨视角差异-依赖网络用于体积医学图像分割|文献速递-生成式模型与transformer在医学影像中的应用
人工智能·计算机视觉
傻啦嘿哟29 分钟前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel
B站计算机毕业设计超人35 分钟前
计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习
大数据·数据仓库·hadoop·python·kafka·课程设计·数据可视化
新加坡内哥谈技术1 小时前
Mistral推出“Le Chat”,对标ChatGPT
人工智能·chatgpt
风尚云网1 小时前
风尚云网前端学习:一个简易前端新手友好的HTML5页面布局与样式设计
前端·css·学习·html·html5·风尚云网