AI金融攻防赛:金融场景凭证篡改检测(DataWhale组队学习)
引言
大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的AI金融攻防赛学习总结文档。本文主要讲解如何解决 金融场景凭证篡改检测的核心问题,以及解决思路和代码实现过程。希望我的经验能对大家有所帮助!💕💕😊
一、比赛背景
在AI技术广泛应用的金融领域,用户在开户、商家入驻、职业认证等场景中,需要上传各类凭证来证明其身份或资质。然而,随着数字编辑和生成技术(如PS、AIGC的普及,越来越多的黑产团伙利用这些工具篡改凭证,给金融自动化审核带来了巨大的挑战。
本次全球AI攻防挑战赛旨在推动AI生成内容的防伪检测与大模型的安全性,联合学术界与产业力量,共同提升AI的可信度与安全性。
二、基本概念
凭证篡改检测是指识别并定位金融凭证(如身份证、收入证明)中被恶意篡改的区域。本次比赛的数据集包含了通过不同编辑手法(如拷贝粘贴、局部删除、图像拼接)篡改的凭证。
- 目标:找出图像中被篡改的区域,并生成精准的多边形标注。
- 评价指标:使用Micro-F1来衡量模型性能,通过检测到的篡改区域与真实标签的重合度计算精确率和召回率。
三、解题思路
为了解决这个问题,我们需要设计一个检测模型,识别图像中的篡改区域并标记其位置。本次比赛使用YOLOv8模型来进行语义分割和检测。我们的解决方案包括以下几个步骤:
- 流程图
- 数据预处理
- 下载并解析训练集、验证集数据。
- 将图像中的多边形标注转换为模型可识别的格式。
- 模型训练
- 利用YOLOv8进行语义分割训练,识别凭证篡改区域。
- 测试与预测
- 使用训练好的模型在测试集上预测篡改区域。
- 结果提交与评估
- 计算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()
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)
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博客
如果觉得我的文章对您有帮助,记得三连+关注哦!🌟
相关文章:

AI金融攻防赛:金融场景凭证篡改检测(DataWhale组队学习)
引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的AI金融攻防赛学习总结文档。本文主要讲解如何解决 金融场景凭证篡改检测的核心问题,以及解决思路和代码实现过程。希望…...
华为OD机试真题---喊7的次数重排
题目描述 喊7是一个传统的聚会游戏。N个人围成一圈,按顺时针从1到N编号。编号为1的人从1开始喊数,下一个人喊的数字为上一个人的数字加1。但是,当将要喊出来的数字是7的倍数或者数字本身含有7时,不能把这个数字直接喊出来&#x…...

使用阿里巴巴的图
参考链接1 引用彩色图标可参考以下链接 (到第三步 测试图标效果 的时候 还是可以保持之前的写法:<i/sapn class“iconfont icon-xxx”>也会出现彩色的) 参考链接2 阿里巴巴字体使用 也可以直接将官网的代码复制过来到页面的css区域...

【hot100-java】排序链表
链表题。 使用归并排序法。 一图解决。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; thi…...

腾讯云视立方TRTCCalling Web 相关
基础问题 什么是 TRTCCalling? TRTCCalling 是在 TRTC 和 TIM 的基础上诞生的一款快速集成的音视频的解决方案。支持1v1和多人视频/语音通话。 TRTCCalling 是否支持接受 roomID 为字符串? roomID 可以 string,但只限于数字字符串。 环境问题 Web …...
使用argparse库实现命令行参数解析的实用指南
使用argparse库实现命令行参数解析的实用指南 在现代软件开发中,命令行工具的使用越来越普遍。无论是自动化脚本、数据处理工具,还是系统管理工具,命令行参数解析都是一个不可或缺的功能。Python的argparse库提供了一种简单而强大的方式来处理命令行参数,使得开发者能够轻…...

kafka消息队列核心内容及常见问题
目录 1. 使用消息队列的目的(优点与缺点) 2. 常见各消息队列对比 3. kafka介绍 3.1 kafka简介 3.2 kafka特点 3.3 kafka系统架构 3.4 设置数据可靠性 3.4.1 Topic 分区副本 3.4.2 消息确认机制 4. 常见问题(面试题) 4.…...

电脑无线网wifi和有线网同时使用(内网+外网同时使用)
一、要求 我这里以无线网wifi为外网,有线网卡为内网为例: 一、基本信息 无线wifi(外网):ip是192.168.179.235,网关是192.168.179.95有线网(内网):ip是192.168.10.25&…...

Ubuntu22.04阿里云服务器 Gitlab搭建CICD
gitlab搭建cicd流水线教程 1、阿里云申请免费云盘 申请免费云盘用于创建gitlab 申请方法百度 2、安装gitlab-ce 更新系统: sudo apt update sudo apt upgrade -y 安装必要的依赖: sudo apt install -y curl openssh-server ca-certificates pos…...
2024最新全流程ChatGPT深度科研应用、论文与项目撰写、数据分析、机器学习、深度学习及AI绘图
2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5,将人工智能的发展推向了一个新的高度。 2023年4月,更强版本的ChatGPT4.0上线,文本、语音、图像等多模态交互方式使其…...
网络流C++
网络流问题及其应用 网络流问题是图论中的一个经典问题,应用于交通调度、物流配送、计算机网络等领域。它通过模型化图中的流量传递过程,解决从源点传递流量到汇点的最优流量分配问题。本文将介绍网络流的基本概念、几种经典算法,并通过一个…...

RTC -
RTC 目录 RTC 回顾 RTC 如何实现RTC制作一个时钟日历 代码编写 rtc.c完整代码 模块开发的步骤: 1、找文档 2、 在文档里面找通信方式,通信过程(协议) 3、代码> -- 前面学的是模块的开发,串口类,I…...

图像处理中常用的统计矩
目录 原点矩中心矩常用的统计矩偏度(Skewness)定义解释 峰度(Kurtosis)定义解释 统计矩的应用MATLAB相关函数 原点矩(Moment about the Origin)和中心矩(Central Moment)是概率论和数…...
Ubuntu 详解| Ubuntu ssh| Ubuntu apt命令大全| Ubuntu性能优化| Ubuntu换镜像源
Ubuntu 是Debian开源linux系统体系下的子分支之一 Debian-ubuntu 和它一样的还有 kali(一款渗透测试软件) Debian-kali 小白参考 :Centos 7.9 安装 图解版 小白必看 最新_centos7.9-CSDN博客文章浏览阅读2.5k次,点赞…...

Linux安全命令(Linux Security Commands)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…...

2024最新版安装教程!Python安装+PyCharm安装使用教程!!(非常简单)
Python下载安装 一、进入Python官网首页,下载最新版的Python 官方网址:Download Python | Python.org 鼠标悬浮在Downloads,选择最新版本 注意:由于Python官网服务器设立在国外,所以下载速度非常慢,我这…...

C++:STL:vector类常用函数介绍(附加部分重要函数模拟实现)
cplusplus.com/reference/vector/vector/https://cplusplus.com/reference/vector/vector/ vector在实际中非常的重要,在实际中我们熟悉常见的接口就可以,有了string的基础,vector其实大体使用方法上二者是类似的: 这里我们先给…...
[工程构建] 使用 pkg-config 的 cmake 模板
可执行文件 # 1) cmake basic cmake_minimum_required(VERSION 3.12) #cmake version check set(CXX_STANDARD 17) #c standard version)# 2) project info #auto generated variables as below: #PROJECT_NAME: "hello" #hello_BINARY_DIR: build root dir #hello_…...
MATLAB 注释快捷键
matlab 前言单行注释多行注释 快捷键使用菜单 前言 单行注释 % 这是一个单行注释 x 10; % 这是另一个单行注释多行注释 %{ 这是一个多行注释 它可以包含多行文本 x 10; % 这行代码也会被注释掉 %}快捷键 在 MATLAB 编辑器中,可以使用快捷键来快速注释和取消注…...

8.优化存储过程的性能(8/10)
优化存储过程的性能 1.引言 存储过程是数据库系统中预先编写好的SQL语句集合,它们被保存在数据库服务器上,可以在需要时被调用执行。存储过程的使用可以提高数据库操作的效率,减少网络通信,并且可以封装复杂的逻辑,使…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...