AI核身-金融场景凭证篡改检测Baseline实践

金融领域交互式自证业务中涵盖信用成长、用户开户、商家入驻、职业认证、商户解限等多种应用场景,通常都需要用户提交一定的材料(即凭证)用于证明资产收入信息、身份信息、所有权信息、交易信息、资质信息等,而凭证的真实性一直是困扰金融场景自动化审核的一大难题。随着数字媒体编辑技术的发展,越来越多的AI手段和工具能够轻易对凭证材料进行篡改,大量的黑产团伙也逐渐掌握PS、AIGC等工具制作逼真的凭证样本,并对金融审核带来巨大挑战。
为此,开设AI核身-金融凭证篡改检测赛道。将会发布大规模的凭证篡改数据集,参赛队伍在给定的大规模篡改数据集上进行模型研发,同时给出对应的测试集用于评估算法模型的有效性。

  • 赛事地址: https://tianchi.aliyun.com/competition/entrance/532267/introduction

在本任务中,要求参赛者设计算法,找出凭证图像中的被篡改的区域。

数据集

本次比赛将发布超大规模自研光鉴凭证数据集,该数据集整合了大量开源的图像数据和内部的业务数据。数据的构建方式为在原始图像数据上针对文字区域采用copy move,splicing,removal,局部AIGC等方式进行数字篡改编辑。
模型的泛化性也将是此次比赛重要的衡量指标,因此本次的测试集将比训练集包含更多的凭证类型和篡改编辑手法。

数据集格式如下:

  • 训练集数据总量为100w,提供篡改后的凭证图像及其对应的篡改位置标注,标注文件以csv格式给出,csv文件中包括两列,内容示例如下:
PathPolygon
9/9082eccbddd7077bc8288bdd7773d464.jpg[[[143, 359], [432, 359], [437, 423], [141, 427]]]
  • 测试集分为A榜和B榜,分别包含10w测试数据。测试集中数据格式与训练集中一致,但不包含标注文件。

评价指标

采用Micro-F1作为评价指标,该分数越高表示排名越靠前。每个选手提交的文件中都包含了id和对应的region,我们的评分规则是基于这两个字段进行计算的。首先,我们会判断选手提交结果中的id是否和标签一致,请避免出现遗漏或者溢出,其次,会将选手的提交结果中每个id的region字段与真实标签进行比对和重叠度计算,再结合阈值统计出选手的TP(True Positive)、TN(True Negative)、FP(False Positive)和FN(False Negative)。

P micro = ∑ i = 1 n T P i ∑ i = 1 n T P i + ∑ i = 1 n F P i P_{\text{micro}} = \frac{\sum_{i=1}^{n}TP_{i}}{\sum_{i=1}^{n}TP_{i} + \sum_{i=1}^{n}FP_{i}} Pmicro=i=1nTPi+i=1nFPii=1nTPi

R micro = ∑ i = 1 n T P i ∑ i = 1 n T P i + ∑ i = 1 n F N i R_{\text{micro}} = \frac{\sum_{i=1}^{n}TP_{i}}{\sum_{i=1}^{n}TP_{i} + \sum_{i=1}^{n}FN_{i}} Rmicro=i=1nTPi+i=1nFNii=1nTPi

接着,会计算出选手的准确率P(Precision)和召回率R(Recall)。准确率是指选手正确预测出正例的比例,召回率是指选手正确预测出所有正例的能力。最后,我们将综合考虑各个类别的表现并打分,打分评价指标使用微平均Micro-F1。计算公式如下:

F 1 micro = 2 ⋅ P micro ⋅ R micro P micro + R micro F_{1_{\text{micro}}} = \frac{2 \cdot P_{\text{micro}} \cdot R_{\text{micro}}}{P_{\text{micro}} + R_{\text{micro}}} F1micro=Pmicro+Rmicro2PmicroRmicro

Baseline

赛题是一个典型的计算机视觉问题,涉及到图像处理和模式识别。赛题需要识别和定位图像中被篡改的区域。

  • 物体检测模型:可以将篡改区域视为需要检测的“物体”。使用像Faster R-CNN或YOLO这样的物体检测模型,可以定位图像中的不同区域,并判断这些区域是否被篡改。
  • 语义分割模型:语义分割模型可以将图像中的每个像素分配给一个类别,这可以用来识别图像中的篡改区域。U-Net、DeepLab或Mask R-CNN是常用的语义分割模型。

本任务也可以基于检测模型微调,同时允许使用基于大模型的方案等。方案不限于:

  • 小模型微调(例如Faster R-CNN、ConvNeXt(Base)+UPerHead、SegNeXt、VAN(B5)+UPerHead等);
  • 使用大模型(例如SAM、Grounded-SAM等);
  • 多模型协同等。

鼓励选手设计全新的思路完成本任务。注意禁止使用私有数据集进行训练。

下面给出一个基于SwinTransformer (Large) + Cascade R-CNN的实验结果:

PrecisionRecallF1 score
89.371857.048969.6426

Baseline 实践

本地或者远程服务器进行,这里采用阿里的魔塔notebook来实现。ModelScope社区与阿里云合作,Notebook功能由阿里云提供产品和资源支持。

这里可以选择cpu/gpu版本进行创建环境。

打开一个终端:

下载baseline代码:

git lfs install
git clone https://www.modelscope.cn/datasets/Datawhale/dw_AI_defense_track2.git

然后执行notebook即可,按照步骤执行:

中间代码主要完成几个步骤:

  • 按照YOLO格式制作数据集:
if os.path.exists('yolo_seg_dataset'):shutil.rmtree('yolo_seg_dataset')os.makedirs('yolo_seg_dataset/train')
os.makedirs('yolo_seg_dataset/valid')def normalize_polygon(polygon, img_width, img_height):return [(x / img_width, y / img_height) for x, y in polygon]# 采样训练集
for row in training_anno.iloc[:10000].iterrows():shutil.copy(row[1].Path, 'yolo_seg_dataset/train')img = cv2.imread(row[1].Path)img_height, img_width = img.shape[:2]txt_filename = os.path.join('yolo_seg_dataset/train/' + row[1].Path.split('/')[-1][:-4] + '.txt')with open(txt_filename, 'w') as up:for polygon in row[1].Polygons:normalized_polygon = normalize_polygon(polygon, img_width, img_height)normalized_coords = ' '.join([f'{coord[0]:.3f} {coord[1]:.3f}' for coord in normalized_polygon])up.write(f'0 {normalized_coords}\n')# 采用验证集     for row in training_anno.iloc[10000:10150].iterrows():shutil.copy(row[1].Path, 'yolo_seg_dataset/valid')img = cv2.imread(row[1].Path)img_height, img_width = img.shape[:2]txt_filename = os.path.join('yolo_seg_dataset/valid/' + row[1].Path.split('/')[-1][:-4] + '.txt')with open(txt_filename, 'w') as up:for polygon in row[1].Polygons:normalized_polygon = normalize_polygon(polygon, img_width, img_height)normalized_coords = ' '.join([f'{coord[0]:.3f} {coord[1]:.3f}' for coord in normalized_polygon])up.write(f'0 {normalized_coords}\n')
  • 训练YOLO分割模型:
from ultralytics import YOLOmodel = YOLO("./yolov8n-seg.pt")  
results = model.train(data="./yolo_seg_dataset/data.yaml", epochs=10, imgsz=640)
  • 预测测试集:
from ultralytics import YOLO
import glob
from tqdm import tqdmmodel = YOLO("./runs/segment/train6/weights/best.pt")  
test_imgs = glob.glob('./test_set_A_rename/*/*')Polygon = []
for path in tqdm(test_imgs[:]):results = model(path, verbose=False)result = results[0]if result.masks is None:Polygon.append([])else:Polygon.append([mask.astype(int).tolist() for mask in result.masks.xy])import pandas as pd
submit = pd.DataFrame({'Path': [x.split('/')[-1] for x in test_imgs[:]],'Polygon': Polygon
})
submit.to_csv('track2_submit.csv', index=None)

上述采用的是yolov8n-seg.pt基础模型,可以按照自身条件进行替换,最后将track2_submit.csv上传到比赛评测那个网页即可。

任务提交

比赛期间,参赛队伍通过天池平台下载数据,本地调试算法,在线提交结果,结果文件命名为"参赛队名称-result.csv",包含"Path"和"Polygon"列,"Polygon"列中采用轮廓点的方式存储每个篡改区域的位置,每个区域包含[左上,右上,右下,左下]4个点的坐标。

例如:

PathPolygon
0/0aeaefa50ac1e39ecf5f02e4fa58a6a2.jpg[[[139, 48], [181, 48], [181, 66], [139, 66]]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56060.shtml

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

相关文章

selenium自动化测试之Junit

1. 常用的注解 将junit的索引添加到pom文件&#xff1a; <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId&…

基于Java实现(APP)智能停车场管理系统

移动应用开发系统设计说明书&#xff08;智能停车场管理系统&#xff09; 服务集成流程详细设计 实现功能 序号功能点1新增用户2注册用户3修改场地信息4列出场地信息5新增认证车辆6列出认证车辆7删除认证车辆8车辆进入信息录入9停车记录列表展示10出停车场信息录入 参数说明…

YOLOv8实战PCB电路板缺陷检测【数据集+YOLOv8模型+源码+PyQt5界面】

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对PCB电路板缺陷数据集进行训练和优化&#xff0c;该数据集包含丰富的PCB电路板缺…

【计网】从零开始学习http协议 ---深入理解cookie和session

我的天空里没有太阳&#xff0c; 总是黑夜&#xff0c; 但并不暗&#xff0c; 因为有东西代替了太阳。 --- 东野圭吾 --- 从零开始学习http协议 1 理解cookie1.1 什么是cookie1.2 验证cookie1.3 cookie的属性 2 理解session2.1 什么是session2.2 验证session 1 理解cooki…

刷题 链表

面试经典150题 - 链表 141. 环形链表 class Solution { public:bool hasCycle(ListNode *head) {ListNode* slow head, *fast head;while (fast ! nullptr && fast->next ! nullptr) {slow slow->next;fast fast->next->next;if (slow fast) {return…

【Linux复习】指令

文章目录 1.>2. cat3.系统命令bash和shell和kernel权限只被认证一次粘滞位引入前提知识场景解释为什么普通用户&#xff08;无w权限&#xff09;可以删除文件&#xff1f;为什么普通用户通过sudo设置文件权限为000后仍能删除文件&#xff1f; 结论 粘滞位是干什么的&#xf…

苍穹外卖P19--异常处理

以上传数据库数据重复为例&#xff0c;进行异常处理。 接口文档报错&#xff1a; 重新启动&#xff1a;

单例模式和读者写者问题

文章目录 10. 线程安全的单例模式10.1 什么是设计模式10.2 什么是单例模式10.3 单例模式的特点10.4 饿汉方式和懒汉方式10.5 单例模式的线程池 11. STL和智能指针的线程安全 问题11.1 STL中的容器是否是线程安全的?11.2 智能指针是否是线程安全的? 12. 其他常见的各种锁13. 读…

009——二叉树

目录 二叉树的五种基本形态&#xff1a; 1.二叉树可以是空树 2.只有一个根节点的树 3.斜树&#xff1a;只有左子树或右子树的树 4.左右孩子都有的树 二叉树的性质&#xff1a; 1.假设根节点是第一层&#xff0c;在二叉树的第i层上最多有2^(n-1)个结点 2.深度为k的二叉树…

WebGoat JAVA反序列化漏洞源码分析

目录 InsecureDeserializationTask.java 代码分析 反序列化漏洞知识补充 VulnerableTaskHolder类分析 poc 编写 WebGoat 靶场地址&#xff1a;GitHub - WebGoat/WebGoat: WebGoat is a deliberately insecure application 这里就不介绍怎么搭建了&#xff0c;可以参考其他…

基于SSM的旅游网站【附源码】

基于SSM的旅游网站&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概要设计 4.2 系统功能结构设计 4.3 数据库设计 4.3.1 数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1 管理员功能介绍 5.1.1 用户管理 5.1.2 …

【进阶】面向对象之权限修饰符代码块

文章目录 权限修饰符权限修饰符的使用规则 代码块分类局部代码块(了解就行)构造代码块(了解就行)静态代码块(重点) 权限修饰符 权限修饰符的使用规则 成员变量私有方法公开 特例&#xff1a; 如果方法中的代码是抽取其他方法中共性代码&#xff0c;这个方法一般也私有. 代码…

如何“半路出家”转行算法工程师的?

01 关于择业考虑 算法岗是什么&#xff1f; 算法岗&#xff0c;从根本内容上来说&#xff0c;是算法&#xff0c;算力&#xff0c;数据&#xff0c;应用场景的交集。从工作要求的角度来讲&#xff0c;是你的能力能够匹配大厂需要的工作要求。从个人角度来说&#xff0c;是你…

hbuilderx+uniapp+Android健身房管理系统 微信小程序z488g

目录 项目介绍支持以下技术栈&#xff1a;具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是&#xff1a;数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 用户功能…

初级网络工程师之从入门到入狱(五)

本文是我在学习过程中记录学习的点点滴滴&#xff0c;目的是为了学完之后巩固一下顺便也和大家分享一下&#xff0c;日后忘记了也可以方便快速的复习。 网络工程师从入门到入狱 前言一、链路聚合1.1、手动进行链路聚合1.1.1、 拓扑图&#xff1a;1.1.2、 LSW11.1.3、 LSW2 1.2、…

RabbitMQ(学习前言)

目录 学习MQ之前有必要先去温故下微服务知识体系&#xff0c;以加深本章节的理解 一、微服务间的通讯方式 1. 基本介绍 2. 同步通讯 2.1. 什么是同步通讯 2.2. 同步通讯存在的问题 问题一&#xff1a;耦合度高 问题二&#xff1a;性能和吞吐能力下降 问题三&#xff1a…

SpringMVC源码-处理器适配器HandlerAdapter

因为定义controller的方式有三种&#xff0c;每种不同的方式调用的方法不同&#xff0c;尤其是注解修饰的 方法名是自定义的 因此需要通过适配器模式来调用方法执行 initStrategies进行适配器的初始化 处理器适配器一共有如下四种: org.springframework.web.servlet.Handl…

数据结构与算法——Java实现 32.堆

人的想法和感受是会随着时间的认知改变而改变&#xff0c; 原来你笃定不会变的事&#xff0c;也会在最后一刻变得释然 —— 24.10.10 堆 堆是基于二叉树实现的数据结构 大顶堆每个分支的上一个节点的权值要大于它的孩子节点 小顶堆每个分支的上一个节点的权值要小于它的孩子…

开源催生开源:Tesla 如何加速 AI 发展

特斯拉最近宣布开源其特斯拉以太网传输协议 &#xff08;TTPoE&#xff09;&#xff0c;这是一种尖端网络结构&#xff0c;专为 AI/ML 数据中心环境中的高速、低延迟数据传输而设计&#xff0c;从而掀起了波澜。此举反映了特斯拉利用开源战略加速全行业进步的更广泛历史&#x…

Spring Boot课程问答:技术难题轻松解决

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…