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.mzph.cn/diannao/56038.shtml

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

相关文章

48 Redis

48 Redis 前言 Redis(Remote Dictionary Server ),即远程字典服务。是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 redis会周期性的把更新的数据写入磁盘或者把修改操…

[C++][第三方库][RabbitMq]详细讲解

目录 1.介绍2.安装1.RabbitMq2.客户端库 3.AMQP-CPP 简单使用1.介绍2.使用 4.类与接口1.Channel2.ev 5.使用1.publish.cc2.consume.cc3.makefile 1.介绍 RabbitMQ:消息队列组件,实现两个客户端主机之间消息传输的功能(发布&订阅)核心概念&#xff1…

网络受限情况下安装openpyxl模块提示缺少Jdcal,et_xmlfile

1.工作需要处理关于Excel文件内容的东西 2.用公司提供的openpyxl模块总是提示缺少jdcal文件,因为网络管控,又没办法直接使用命令下载,所以网上找了资源,下载好后上传到个人资源里了 资源路径 openpyxl jdcal et_xmlfile 以上模块来源于:Py…

Python读取pdf中的文字与表格

一、PyPDF2包安装 在Python中安装PyPDF2库,您可以使用pip包管理器。打开您的命令行工具(例如CMD、Terminal或Anaconda Prompt),然后输入以下命令: pip install PyPDF2 如果您使用的是Python 3,并且系统中…

计算机网络基本架构知识点

1. 网络体系结构模型: - OSI 七层模型: - 物理层:是网络通信的基础层,负责在物理介质上传输比特流。该层定义了物理连接的标准,如电缆的类型、接口的形状、插头的规格等,以及信号的传输方式,包括…

Elasticsearch-数据索引与查询

目录 创建索引 文档的CRUD操作 执行基本查询 使用过滤器 结果排序与分页 多条件组合查询 创建索引 在Elasticsearch中,索引是存储相关数据的地方。它类似于关系型数据库中的表,但具有更强的灵活性和可扩展性。创建一个索引时,可以定义索…

JavaScript进行数据可视化:D3.js入门

在数据驱动的世界中,数据可视化是理解和传达数据信息的重要手段。D3.js是一个强大的JavaScript库,它允许开发者将数据转换为可交互的图形和图表。本文将为您介绍D3.js的基本概念、特点以及如何入门使用它进行数据可视化。 D3.js简介 什么是D3.js&#…

C#_带参数的委托进入队列执行

我们经常会遇到一些函数多个地方调用,但是只能单独执行的就需要把它放到队列中执行。 1.创建对应该方法的委托(传参和回参类型需要一致)。 //委托: public delegate void CameraTaskDelegate(byte cs, ref byte[] buffer);//对应函数: public void CameraSettingRead(by…

宠物健康监测仪健康守护者

在宠物护理领域,一款名为宠物健康监测仪的智能设备正逐渐成为宠物主人的新宠。这款设备不仅仅是一个简单的听诊器,它更像是宠物健康的智能管家,能够实时监测宠物的生理指标,并根据这些数据提供个性化的健康建议。 宠物健康监测仪…

微信小程序后台搭建—node+mysql

想必大家都有一个困扰,想要用微信小程序作为前端,但是后端不知道如何用node连接微信小程序,我最近也一直困扰许久,所以我就想用node写后端接口在连接微信小程序,记录一下学习笔记 前言 前端:微信小程序 后端:nodeexpr…

VirtualBOX虚拟机提高速度,鼠标卡顿解决——未来之窗数据恢复

一、刚安装完操作系统,鼠标操作不灵敏 需要安装系统增强 二、系统增强作用 1.鼠标丝滑 2.文件共享 3.可以共享剪贴板 三、安装步骤-设备-安装增强 四、安装步骤-设备-选择光驱 五、安装增强软件然后重启 六、阿雪技术观 拥抱开源与共享,见证科技进…

P8635 [蓝桥杯 2016 省 AB] 四平方和

对于一个给定的正整数&#xff0c;可能存在多种平方和的表示法。 要求你对 44个数排序使得 0≤a≤b≤c≤d。 输入 #1复制 5 输出 #1 0 0 1 2 输入 #2 12 输出 #2 0 2 2 2 输入 #3 773535 输出 #3 1 1 267 838 代码 #include<bits/stdc.h> using namespace …

NVM 切换Node.js版本工具

大家好我是苏麟&#xff0c;今天聊聊NVM切换版本工具。 切换 node 版本工具 &#xff1a; GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions 查看node版本 node -v 查看 nvm 版本 nvm -v 查看可安装的Nod…

使用 nrm 管理 npm 镜像源

使用 nrm&#xff08;npm registry manager&#xff09;管理 npm 镜像源可以极大地简化在不同 npm 源之间切换的过程。以下是如何使用 nrm 来管理 npm 镜像源的详细步骤&#xff1a; 一、安装 nrm 首先&#xff0c;你需要全局安装 nrm。打开命令行界面&#xff0c;然后运行以…

动态规划lc

先找到规律&#xff0c;然后找边界情况&#xff1b;部分特殊情况分类讨论 *递归 70.爬楼梯 简单 提示 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a…

React 前端框架操作指南

在现代前端开发中&#xff0c;React 由于其灵活性和高效性&#xff0c;成为了最受欢迎的 JavaScript 库之一。它使开发者能够创建复杂的用户界面&#xff0c;利用组件复用的特性&#xff0c;把 UI 切分成可管理和可重用的小部分。这篇指南旨在深入浅出地介绍 React 的基本概念、…

手撕数据结构 —— 栈(C语言讲解)

目录 1.认识栈 什么是栈 栈的示意图 2.如何实现栈 3.栈的实现 Stack.h中接口总览 具体实现 结构的定义 初始化栈 销毁栈 入栈 出栈 取栈顶元素 获取有效元素的个数 判断栈是否为空 4.完整代码附录 Stack.h Stack.c 1.认识栈 什么是栈 栈是一种特殊的线性表…

创建XGBoost模型(回归任务)MATLAB

代码如下&#xff1a; % 导入数据 data readtable(data.xlsx);% 假设最后一列是目标值&#xff0c;前面列为特征 X data{:, 1:end-1}; % 特征 y data{:, end}; % 目标值% 划分训练集和测试集 cv cvpartition(height(data), HoldOut, 0.2); XTrain X(training(cv)…

最懂生活的年轻人,都在喝十元奶茶

文 | 螳螂观察 作者 | 如意 以前的打工人&#xff0c;总把二三十的高价奶茶当成身份的象征&#xff0c;喝上了高价奶茶才能叫做在生活中富养自己。 只是&#xff0c;到盘开支的时候&#xff0c;打工人才猛然发觉&#xff0c;动辄二三十一杯的奶茶&#xff0c;不知不觉刮走了…

美团测试面试真题学习

美团真题1–测试基础-业务场景说下你的测试用例设计 功能角度 方法论 边界值、等价类划分、错误推测法示例 输入已注册的用户名和正确的密码&#xff0c;验证是否登录成功;输入已注册的用户名和不正确的密码&#xff0c;验证是否登录失败输入未注册的用户名和任意密码&#xff…