背景介绍

由于巨大的利益,论文造假屡见不鲜,在部分国家或地区甚至形成了论文造假的产业链。目前大部分论文查重系统只能检查论文文字,不能检查图片。因此,论文图片查重已然成为了学术论文原创性检测的重要部分。

本项目主要针对论文图像进行查重。算法是整个查重系统中的核心。本项目基于深度学习的方法,通过 ResNet 模型推理得到图像的特征向量,并利用 Milvus 构建图像特征向量库。同时,Milvus 会自动为向量构建索引。进行查重任务时,需要先将图像转化为特征向量,接着再使用 Milvus 进行向量检索,得到疑似图片。将查重图片和疑似图片根据图像配准算法进行对比,最终得到对比结果。

  系统概要

本系统由两大模块组成——构建向量库及查找图片生成查重报告。

构建向量库:每个用户都可以创建一个属于自己的向量库。用户可以将自己的图像或论文数据上传到服务端,由服务端解析出图像数据,并通过模型推理得到图像的特征向量,最终将向量导入 Milvus 库中。

查找图片生成查重报告:用户上传图像数据,服务端得到特征向量后会在 Milvus 中进行搜索并返回 top-k 个疑似图像。查重系统对得到的图像进行图像配准,最终生成查重报告。

  基本步骤

1. 图像提取 

根据用户上传数据的类型,系统将自动判断是通过直接解压得到图片还是从论文 PDF 文档中提取图片。本项目中使用的是 PDF 解析库—— PyMuPDF。PDF 文档作为一种结构化的文件格式,由一些称为“对象”的模块组成。每个对象都有数字标号,从而可以被其他对象引用。解析图像的大致流程为:

  • 打开 PDF 文件

  • 创建解析对象

  • 存储文档结构,并处理文档中每一页图片,

  • 提取文档中每一页的图像进行存储。

2. 特征向量提取

卷积神经网络对图像处理有出色的表现,因此本项目采用基于卷积神经网络的 ResNet 模型进行图像特征提取。ResNet 模型结构如下图所示:

特征提取主要依靠网络的卷积层和池化层来完成。卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核,组成卷积核的每个元素都对应一个权重系数和一个偏差量,类似于一个前馈神经网络的神经元。卷积核在工作时,会有规律地扫过输入特征,在感受野内对输入特征做矩阵元素乘法求和并叠加偏差量,也就是说使用一个过滤器(卷积核)来过滤图像的各个小区域,从而得到这些小区域的特征值。

在卷积层进行特征提取后,输出的特征图会被传递至池化层进行特征选择和信息过滤。池化层包含预设定的池化函数,其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。池化层选取池化区域的步骤与卷积核扫描特征图的步骤相同,由池化大小、步长和填充控制。为了防止图像数据过大,池化层会对图像进行采样降维,但依然保持图像最基本的特征。

但是,经过全连接层后,此前得到的特征会失去空间拓扑结构,被展开为向量。为保留图像特征,需要去除此模型的全连接层。

3. 向量库构建与检索 

Milvus 是一款开源的分布式向量相似度搜索引擎。Milvus 不仅集成了业界成熟的向量相似度搜索技术,而且还对高性能计算框架进行了大幅度优化,支持针对 TB 级向量的增删改操作和近实时查询,具有高度灵活、稳定可靠以及高速查询等特点。Milvus 集成了 Faiss、NMSLIB、Annoy 等广泛应用的向量索引库,提供了一整套简单直观的 API,用户可以针对不同场景选择不同的索引类型。

Milvus 适用于多种场景,与深度学习相融合的架构如下图所示:

本项目使用 docker 启动 GPU 版本的 Milvus 服务。用户上传的图像数据将被转化为特征向量并导入 Milvus 库。Milvus 根据具体参数(如索引类型、向量维数等)对特征向量进行存储并建立索引。具体而言,在用户查重任务中,用户上传查重图像,图像被转化为特征向量。用户在 Milvus 中对向量进行检索,检索时 Milvus 使用余弦距离进行计算并返回 top-k 个结果。值得一提的是,Milvus 支持多种计算向量相似性的方法,包括欧氏距离、余弦距离、Tanimoto 系数等。

4. 图像配准 

Milvus 会返回 top-K 个与搜索向量相似的结果。之后,根据这些结果我们会采用 SIFT 算法进行图像配准。SIFT 特征算法配准是基于物体上一些局部外观的兴趣点,而非影像的大小、旋转与否。SIFT 算法对于光线、噪声等微视角改变的容忍度也相当高。SIFT 特征检测包括以下四步:

  1. 尺度空间极值检测

  2. 关键点定位

  3. 方向确定

  4. 关键点描述

使用 opencv 进行 SIFT 特征提取,提取的 SIFT 特征最终为其关键点描述符,即一个128维的向量。在得到查重图像和疑似图像的 SIFT 关键点描述符后,利用最近邻算法对两张图像进行匹配并获得两张图像的匹配关系。然后再使用 RANSAC 算法进行匹配关系的过滤,得到最终的匹配关系。使用 opencv 的绘图函数,利用匹配关系绘制两张图像的关键点和其特征匹配的连线,得到相似点图像。

  结果展示

左上角图像为上传的待查重图像,右下角图像为疑似重用图像。

  总结

本项目通过结合深度学习与 Milvus 搭建图像查重系统。Milvus 向量检索引擎,根据用户上传图像的特征向量构建向量库,并通过近实时搜索功能精确而迅速地返还搜索结果。Milvus 提供丰富的文档资料,便于用户上手。此外,Milvus 的用户交流群帮助用户在遇到问题时获得及时的反馈,保证了卓越的用户体验。

参考资料 

https://zhuanlan.zhihu.com/p/90677337

https://github.com/milvus-io/milvus

https://github.com/milvus-io/bootcamp

https://docs.opencv.org/master/db/d27/tutorial_py_table_of_contents_feature2d.html

   欢迎加入 Milvus 社区

github.com/milvus-io/milvus | 源码

milvus.io | 官网

milvusio.slack.com | Slack 社区

zhihu.com/org/zilliz-11| 知乎

zilliz.blog.csdn.net | CSDN 博客

space.bilibili.com/478166626 | Bilibili

Milvus 实战 | 基于 Milvus 的图像查重系统相关推荐

  1. opencv图像配准_Milvus 实战 | 基于 Milvus 的图像查重系统

    背景介绍 由于巨大的利益,论文造假屡见不鲜,在部分国家或地区甚至形成了论文造假的产业链.目前大部分论文查重系统只能检查论文文字,不能检查图片.因此,论文图片查重已然成为了学术论文原创性检测的重要部分. ...

  2. 基于Python的作业查重系统的设计和实现

    <基于Python的作业查重系统的设计和实现>该项目采用技术Python的django框架.mysql数据库,项目含有源码.论文.PPT.配套开发软件.软件安装教程.项目发布教程.核心代码 ...

  3. 毕业设计基于Springboot框架作业查重系统2.0版本

    作业查重系统2.0版本 文章目录 作业查重系统2.0版本 前言 一.摘要 二.相关技术 1.系统框架 2.查重功能简介 3.相似度检测算法简介 4.系统功能架构图 三.系统功能运行图 1.登录 2.学 ...

  4. 基于Python实现的作业查重系统

    <基于Python的作业查重系统的设计和实现>该项目采用技术Python的django框架.mysql数据库 ,项目含有源码.论文.PPT.配套开发软件.软件安装教程.项目发布教程.核心代 ...

  5. Nature:学术造假者瑟瑟发抖,论文图像查重AI技术重拳出击!

    2020-09-18 14:27 导语:人在做,AI在看 作者 | 青  暮 编辑 | 丛 末 来自纽约雪城大学的机器学习研究人员Daniel Acuna开发了一款论文图像查重软件,他用这款软件检查了 ...

  6. Nature:学术造假者瑟瑟发抖,论文图像查重AI技术重拳出击

    2020-07-23 20:11:26 作者 | 青 暮 编辑 | 丛 末 来自纽约雪城大学的机器学习研究人员Daniel Acuna开发了一款论文图像查重软件,他用这款软件检查了3500篇论文的21 ...

  7. 基于python的查重系统_答案在这!如何快速的通过论文查重检测?

    想必同学们都知道,所谓的论文查重是使用论文查重系统软件来进行论文检测的.大部分的高校基本上是采用知网查重系统,在进行论文查重之前,我们有必要先了解一下论文查重的相关知识点.了解清楚之后,我们再进行论文 ...

  8. [附源码]计算机毕业设计基于Springboot作业查重系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  9. 【基于文本相似度的论文查重系统-哔哩哔哩】 https://b23.tv/6JJBMur

    [基于文本相似度的论文查重系统-哔哩哔哩] https://b23.tv/6JJBMur https://b23.tv/6JJBMur

最新文章

  1. 微信小程序地图的实现
  2. confluencejira集成_集成confluence与jira
  3. C语言 函数的封装示例(允许存在同名但形参不同函数)
  4. 管道、通道、管程的区别
  5. 推荐算法炼丹笔记:标签工程
  6. DAVINCI DM365-368中 linux-2.6.32的移植
  7. 软件工程心理学之1----开篇
  8. qiaoye.php,全自动无限生成关键词页面(黑帽SEO优化终极方法)
  9. 600. 不含连续1的非负整数
  10. matlab 三维核密度图_Matlab精彩画图示例:三维网状图和三维曲面图
  11. UVA11988 Broken Keyboard (a.k.a. Beiju Text)【输入输出+水题】
  12. 进程和应用程序生命周期
  13. Linux 安装 VMware Player
  14. 人工智能/数据科学比赛汇总 2019.9
  15. 历史不忍细看之--孔老二罪恶的一生
  16. 基于Redis实现秒杀系统
  17. 目睹太多读博惨案之后,清华姚班助理教授写了个读博决策树
  18. 2020年河南科技大学892西方经济学考研真题题库等资料汇总
  19. 常见的 ChatGPT 相关错误提示及解决办法
  20. 再谈如何学习Linux,一线Linux专家学习经验谈

热门文章

  1. MAZDA CX-50没现车怎么办?赶紧去VR看车啊!
  2. Node.js后端开发 - 基础篇 #18 nodemon工具
  3. XRF操作问题解答十问第八则
  4. java publisher_Java中的反应流详解
  5. linux命令英文全名及含义
  6. 免疫检查点 “新星“:HLA-E-MedChemExpress
  7. lammps模拟技巧:高熵合金势函数设置三种方法
  8. 七、DevOps学习笔记
  9. 基于SSMS的Sqlserver美化插件SQL Pretty Printer
  10. 数据分析面试、笔试题汇总+解析(一)