AI金融攻防赛:金融场景凭证篡改检测(DataWhale组队学习)

引言

大家好,我是GISer Liu 😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛 的AI金融攻防赛学习总结文档。本文主要讲解如何解决 金融场景凭证篡改检测的核心问题,以及解决思路和代码实现过程。希望我的经验能对大家有所帮助!💕💕😊


一、比赛背景

在AI技术广泛应用的金融领域,用户在开户、商家入驻、职业认证等场景中,需要上传各类凭证来证明其身份或资质。然而,随着数字编辑和生成技术(如PS、AIGC的普及,越来越多的黑产团伙利用这些工具篡改凭证,给金融自动化审核带来了巨大的挑战。

本次全球AI攻防挑战赛旨在推动AI生成内容的防伪检测大模型的安全性,联合学术界与产业力量,共同提升AI的可信度与安全性。


二、基本概念

凭证篡改检测 是指识别并定位金融凭证(如身份证、收入证明)中被恶意篡改的区域。本次比赛的数据集包含了通过不同编辑手法(如拷贝粘贴局部删除图像拼接)篡改的凭证。

  • 目标 :找出图像中被篡改的区域,并生成精准的多边形标注
  • 评价指标 :使用Micro-F1来衡量模型性能,通过检测到的篡改区域与真实标签的重合度计算精确率和召回率。

三、解题思路

为了解决这个问题,我们需要设计一个检测模型,识别图像中的篡改区域并标记其位置。本次比赛使用YOLOv8模型来进行语义分割和检测。我们的解决方案包括以下几个步骤:

  • 流程图
  1. 数据预处理
    • 下载并解析训练集、验证集数据。
    • 将图像中的多边形标注转换为模型可识别的格式。
  2. 模型训练
    • 利用YOLOv8进行语义分割训练,识别凭证篡改区域。
  3. 测试与预测
    • 使用训练好的模型在测试集上预测篡改区域。
  4. 结果提交与评估
    • 计算Micro-F1得分,根据提交的结果与真实标签对比评估模型表现。

具体代码我们在下面看:


四、代码分析

下载数据模型

这里我们下载数据集和Yolo模型:

python 复制代码
!apt update > /dev/null; apt install aria2 git-lfs axel -y > /dev/null
!pip install ultralytics==8.2.0 numpy pandas opencv-python Pillow matplotlib > /dev/null
!axel -n 12 -a http://mirror.coggle.club/seg_risky_testing_data.zip; unzip -q seg_risky_testing_data.zip
!axel -n 12 -a  http://mirror.coggle.club/seg_risky_training_data_00.zip; unzip -q seg_risky_training_data_00.zip
!mkdir -p /root/.config/Ultralytics/
!wget http://mirror.coggle.club/yolo/Arial.ttf -O /root/.config/Ultralytics/Arial.ttf
!wget http://mirror.coggle.club/yolo/yolov8n-v8.2.0.pt -O yolov8n.pt
!wget http://mirror.coggle.club/yolo/yolov8n-seg-v8.2.0.pt -O yolov8n-seg.pt

1.数据预处理

我们首先加载数据进行解析,将图像与对应的多边形标注整合。

python 复制代码
import pandas as pd
import json
import glob
import cv2
import numpy as np

# 加载训练数据并解析多边形标注
training_anno = pd.read_csv('http://mirror.coggle.club/seg_risky_training_anno.csv')
training_anno['Polygons'] = training_anno['Polygons'].apply(json.loads)

# 查看部分数据示例
training_anno.head()

2. 构建YOLO训练数据集

我们需要将数据转换为YOLO可识别的格式,保存为.txt文件,并将数据集划分为训练集和验证集。

python 复制代码
import os, shutil

# 创建训练和验证集文件夹
os.makedirs('yolo_seg_dataset/train', exist_ok=True)
os.makedirs('yolo_seg_dataset/valid', exist_ok=True)

def normalize_polygon(polygon, img_width, img_height):
    """将多边形坐标归一化为[0,1]区间"""
    return [(x / img_width, y / img_height) for x, y in polygon]

# 遍历数据并转换为YOLO格式
for idx, row in training_anno.iterrows():
    img = cv2.imread(row['Path'])
    img_height, img_width = img.shape[:2]
    
    # 保存标注为txt文件
    txt_path = f'yolo_seg_dataset/train/{os.path.basename(row["Path"][:-4])}.txt'
    with open(txt_path, 'w') as f:
        for polygon in row['Polygons']:
            normalized = normalize_polygon(polygon, img_width, img_height)
            coords = ' '.join([f'{x:.3f} {y:.3f}' for x, y in normalized])
            f.write(f'0 {coords}\n')

3.训练模型

我们使用YOLOv8的预训练模型,并在大规模数据集上微调。

python 复制代码
from ultralytics import YOLO

# 加载预训练模型并进行训练
model = YOLO('./yolov8n-seg.pt')
model.train(data='yolo_seg_dataset/data.yaml', epochs=15, imgsz=640)

4.测试集预测

在训练完成后,我们使用测试集来验证模型的性能,并生成提交文件。

python 复制代码
from ultralytics import YOLO
import glob
from tqdm import tqdm

model = YOLO("./runs/segment/train/weights/best.pt") # 调用我们选择的模型
# 遍历测试集并预测篡改区域
test_imgs = glob.glob('./test_set_A_rename/*/*')
predictions = []

for path in tqdm(test_imgs):
    results = model(path, verbose=False)
    result = results[0]
    polygons = [mask.xy.tolist() for mask in result.masks] if result.masks else []
    predictions.append((os.path.basename(path), polygons))

# 保存结果为CSV文件
import pandas as pd
submit = pd.DataFrame(predictions, columns=['Path', 'Polygon'])
submit.to_csv('track2_submit.csv', index=False)

五、总结

通过本次AI金融攻防赛的学习和实践,我们深入了解了凭证篡改检测这一关键问题,并成功构建了一个基于YOLOv8的检测模型。并且成功生成了数据;OK,初步解析到此结束!更多内容看后续;


相关链接


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

相关推荐
孔汤姆4 分钟前
ESP32 掌机改造全记录:WiFi 遥测、一键启动 AI 终端
人工智能
HyperAI超神经5 分钟前
【vLLM 学习】Disaggregated Prefill
人工智能·深度学习·学习·vllm
天吾cc12 分钟前
RTT-IO设备模型
单片机·嵌入式硬件·学习
美味蛋炒饭.24 分钟前
Git 版本控制(下)
开发语言·git·学习·总结·后端开发
呼噜想睡觉1 小时前
Bootstrap 组件之响应式导航条实现
学习
我星期八休息1 小时前
网络编程—网络层
开发语言·前端·网络·人工智能·智能路由器
逻辑君1 小时前
ANNA 7.2 方块机器人实验技术报告
人工智能·深度学习·机器学习·机器人
SomeB1oody1 小时前
【RustyML入门】2.9. MeanShift
开发语言·后端·机器学习·rust·教程
菜鸟‍1 小时前
【论文学习】Medical Image Analysis 2024 || 医学图像分割中失败检测方法的比较基准研究:揭示置信度聚合的作用
人工智能·学习
AI导出鸭1 小时前
怎么让千问做表格?AI导出鸭苹果版将千问输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭