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

news2024/11/24 8:31:00

金融领域交互式自证业务中涵盖信用成长、用户开户、商家入驻、职业认证、商户解限等多种应用场景,通常都需要用户提交一定的材料(即凭证)用于证明资产收入信息、身份信息、所有权信息、交易信息、资质信息等,而凭证的真实性一直是困扰金融场景自动化审核的一大难题。随着数字媒体编辑技术的发展,越来越多的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 YOLO

model = 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 tqdm

model = 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.coloradmin.cn/o/2205657.html

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

相关文章

力扣19.删除链表的倒数第N个节点

题目链接:19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2输出:[1,2,3,…

【Linux调试工具】gdb/cgdb

文章目录 gdb 简介gdb 的主要功能 gdb的用法如何进入gdb显示代码如何运行程序如何打断点和取消断点逐语句调试逐行逐行执行代码(s)调试工具 总结 gdb 简介 GDB(GNU Debugger)是GNU项目中的一款强大的调试工具,广泛应用…

数字隔离器的技术竞争

长期以来,光耦合器一直被人们信赖,因为它能够在电路的不同部分之间提供电气隔离,确保信号的安全传输,同时保护元件免受高压影响。然而,近年来,数字隔离器已成为一种强大的替代品,在速度、寿命和…

Map的实现类:TreeMap

1.存储结构:红黑树 2.实现了SortedMap接口(是Map的子接口),可以对key自动排序。 3.实例代码:Student类和Demo03 如果出现类转换异常 参考【TreeSet(红黑树)】 package com.map;import java…

苍穹外卖P19--异常处理

以上传数据库数据重复为例,进行异常处理。 接口文档报错: 重新启动:

Arduino中使用PS2手柄

目录 1、PS2手柄介绍 2、PS2库文件添加 3、Auduino代码 4、测试 5、测试程序和库文件下载连接 1、PS2手柄介绍 PS2手柄介绍见下面博客 STM32中使用PS2手柄_stm32 ps2-CSDN博客 PS2手柄按钮分布 2、PS2库文件添加 库文件和测试程序一起打包提供下载 3、Auduino代码 #in…

【数据结构】二叉堆一文详解,附demo

有时候也挺迷惑的,技术那么多,感觉学什么都来不及,又什么都得学,经常一看别人,哇,比你年轻比你厉害,然后自己emo一下又要鸡血模式,就挺无语的,但愿我们的坚持与努力都不白…

“炫我”受邀出席虚拟现实及元宇宙产业创新论坛!

当前,新一轮科技革命和产业变革向纵深演进,虚拟现实及元宇宙等相关产业加速发展,催生了新产业新业态新模式,发展潜力巨大、应用前景广阔。 9月27日,由北京市科学技术委员会、中关村科技园区管理委员会,北京…

攻防世界1

pwnstack 发现是64位文件 发现vuln双击进入 看到read知道这里是要将B1(177)的数据输入buf,这里涉及了栈溢出 发现system和binsh 后门 A8十进制是168 exp: from pwn import * context(oslinux,archamd64,log_leveldebug) io rem…

生产及质量BI应用场景方案(可编辑37页PPT)

荐言分享:随着全球化的深入发展,制造业面临的竞争日益激烈。为了在市场中脱颖而出,企业需要不断提升自身的生产效率、降低成本,同时保证产品质量。现代消费者的需求日益多样化,对产品的个性化、定制化和品质要求越来越…

【unity踩坑】打开vs2022没有文字联想/杂项文件

unity打开vs2022没有文字联想 修改外置编辑器安装unity开发插件vs编辑器显示杂项文件 修改外置编辑器安装unity开发插件 参考 在unity项目里选择Edit-> Preferences->External Tools然后更换编辑器 在vs工具界面添加unity游戏开发选项。 重新打开还是有问题&#xff…

记录搜罗到的Matlab 对散点进行椭圆拟合

需要基于一些散点拟合椭圆估计并计算出椭圆的参数和周长,搜罗到直接上代码 (1)有用的椭圆拟合及参数计算函数 function W fitellipse(x,y) % 构造矩阵 D [x.*x, x.*y, y.*y, x, y,ones(size(x))]; S D*D; G zeros(6); G(1,3) 2; G(3,1)…

深入探讨B+树索引的基本概念、工作原理以及在MySQL中的应用

文章目录 1. B树的基本概念2. B树在MySQL中的实现3. 示例代码4. 结论 在数据库管理系统中,索引是一种特殊的文件,它能够提高数据检索的速度。MySQL作为最流行的开源关系型数据库之一,提供了多种索引类型来满足不同的性能需求。其中&#xff0…

windows端口被占用但是查不到进程的问题排查

在开发环境上经常遇到端口被占用,但是 netstat -ano|findstr 3306 查不到进程号,没法强杀解决。 这种情况,很有可能端口被排除了,可用命令: netsh interface ipv4 show excludedportrange protocoltcp 可以看到mysql的…

web-前置技能(HTTP协议)-CTFHub

前言 在众多的ctf平台当中,作者认为ctfhub对于初学者来说,是入门平台的不二之选。ctfhub通过自己独特的技能树模块,可以帮助初学者来快速入门。具体请看官方介绍:CTFHub。 作者正在更新ctfhub系列,希望小伙伴们多多支…

多元线性回归:机器学习中的经典模型探讨

引言 多元线性回归是统计学和机器学习中广泛应用的一种回归分析方法。它通过分析多个自变量与因变量之间的关系,帮助我们理解和预测数据的行为。本文将深入探讨多元线性回归的理论背景、数学原理、模型构建、技术细节及其实际应用。 一、多元线性回归的背景与发展…

小米开放式耳机好不好用?小米、南卡、倍思、飞利浦热门开放式耳机一周测评!

​开放式耳机正成为潮流,它们不仅佩戴舒适,音质也出色,特别受到音乐发烧友和运动爱好者的追捧。作为一名多年的数码测评博主,我也早就对开放式耳机感兴趣了,只是最近一直没时间来好好测评下,今天一下子买了…

计算机网络实验二:FTP服务器配置

ftp服务器配置 要求: 1. 学会配置FTP服务器、能在FTP客户端进行下载和上传文件 2. 进一步熟悉ipconfig和ping命令 3. 进一步理解FTP工作原理和流程 1、FTP服务器配置(FileZilla Server) 第一步安装FileZilla Server,直接下一步…

二、安装vmtools

1、 介绍 vmtools 安装后,可以让我们在 windows 下更好的管理 vm 虚拟机。可以设置 windows 和 centos 的共享文件夹 当时当我们发现安装虚拟机工具位置是灰色的 右击打开终端 在终端输入命令 yum list installed | grep open-vm-*yum list installed 命令会列出…

TikTok代理IP哪里找?

对于那些希望通过社交媒体打造个人品牌的人来说,TikTok是现在热门的平台,他的流量与曝光不可小觑,相信很多跨境营销会选择他进行多账号营销。问题是,TikTok多账号很容易遇到封禁问题,那么如何解决? 一、什么…