当前位置: 首页 > news >正文

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

head

引言

大家好,我是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模型:

!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.数据预处理

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

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()

head


2. 构建YOLO训练数据集

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

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的预训练模型,并在大规模数据集上微调。

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

train


4.测试集预测

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

from ultralytics import YOLO
import glob
from tqdm import tqdmmodel = 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,初步解析到此结束!更多内容看后续;


相关链接

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

thank_watch

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

http://www.lryc.cn/news/459125.html

相关文章:

  • 华为OD机试真题---喊7的次数重排
  • 使用阿里巴巴的图
  • 【hot100-java】排序链表
  • 腾讯云视立方TRTCCalling Web 相关
  • 使用argparse库实现命令行参数解析的实用指南
  • kafka消息队列核心内容及常见问题
  • 电脑无线网wifi和有线网同时使用(内网+外网同时使用)
  • Ubuntu22.04阿里云服务器 Gitlab搭建CICD
  • 2024最新全流程ChatGPT深度科研应用、论文与项目撰写、数据分析、机器学习、深度学习及AI绘图
  • 网络流C++
  • RTC -
  • 图像处理中常用的统计矩
  • Ubuntu 详解| Ubuntu ssh| Ubuntu apt命令大全| Ubuntu性能优化| Ubuntu换镜像源
  • Linux安全命令(Linux Security Commands)
  • 2024最新版安装教程!Python安装+PyCharm安装使用教程!!(非常简单)
  • C++:STL:vector类常用函数介绍(附加部分重要函数模拟实现)
  • [工程构建] 使用 pkg-config 的 cmake 模板
  • MATLAB 注释快捷键
  • 8.优化存储过程的性能(8/10)
  • Django发送邮件代理服务器配置
  • uniapp__微信小程序使用秋云ucharts折线图双轴
  • 云原生运维 - 旅程(简约版)
  • 2014年国赛高教杯数学建模B题创意平板折叠桌解题全过程文档及程序
  • PyCharm打开及配置现有工程(详细图解)
  • CSP-J
  • Linux系统:Linux中ln命令用法
  • 在SpringBoot+VUE中 实现登录-RSA的加密解密
  • 基于Android11简单分析audio_policy_configuration.xml
  • kafka-manager修改zookeeper端口号后启动仍然连接2181端口
  • RabbitMQ 入门(三)SpringAMQP