引言
大家好,我是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. 常用训练参数
- imgsz: 训练时的目标图像尺寸,所有图像在此尺寸下缩放。
- save_period: 保存模型检查点的频率(周期数),-1 表示禁用。
- device: 用于训练的计算设备,可以是单个或多个 GPU,CPU 或苹果硅的 MPS。
- optimizer: 训练中使用的优化器,如 SGD、Adam 等,或 ‘auto’ 以根据模型配置自动选择。
- momentum: SGD 的动量因子或 Adam 优化器的 beta1。
- weight_decay: L2 正则化项。
- warmup_epochs: 学习率预热的周期数。
- warmup_momentum: 预热阶段的初始动量。
- warmup_bias_lr: 预热阶段偏置参数的学习率。
- box: 边界框损失在损失函数中的权重。
- cls: 分类损失在总损失函数中的权重。
- 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. 预测行为的调整
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博客
如果觉得我的文章对您有帮助,记得三连+关注哦!🌟