当前位置: 首页 > news >正文

2024年泰迪杯数据挖掘B题详细思路代码文章教程

目前b题已全部更新包含详细的代码模型和文章,本文也给出了结果展示和使用模型说明。

同时文章最下方包含详细的视频教学获取方式,手把手保姆级,模型高精度,结果有保障!

分析:
本题待解决问题

目标:利用提供的数据集,通过特征提取和多模态特征融合模型建立,实现图像与文本间的互检索。

具体任务:

基于图像检索的文本:利用提供的文本信息,对图像进行检索,输出相似度较高的前五张图像。

基于文本检索的图像:利用提供的图像ID,对文本进行检索,输出相似度较高的前五条文本。

数据集和任务要求

附件1:包含五万张图像和对应的文本信息。

附件2和附件3:分别提供了任务1和任务2的数据信息,包括测试集文本、图像ID和图像数据库。

附件4:提供了任务结果的模板文件。

评价标准

使用**召回率Recall at K(R@K)**作为评价指标,即查询结果中真实结果排序在前K的比率,本赛题设定K=5,即评价标准为R@5。

步骤一:构建图文检索模型

采用图文检索领域已经封装好的模型:多模态图文互检模型

基于本题附件一所给的数据进行调优

可以给大家展示以下我们模型的效果,和那种一两天做出来的效果完全不一样,我们的模型效果和两个任务的预测情况完整是准确且符合逻辑的。

在这里插入图片描述

任务一结果展示:

在这里插入图片描述

在这里插入图片描述

任务二结果展示:

在这里插入图片描述

步骤二:基于图像检索文本

1.数据预处理和特征提取

文本数据预处理:

清洗文本:去除文本中的停用词、标点符号等无关信息。

文本向量化:利用NLP技术(如Word2Vec, GloVe, BERT等)将文本转换为数值向量,以便进行计算和比较。

在这里插入图片描述

import jieba
import pandas as pd
from collections import Counter
#读取CSV文件
image_word_data = pd.read_csv('附件1/ImageWordData.csv')
#加载自定义的停用词表(如果有的话),或使用jieba内置的停用词表
#例如: stop_words = set(open('path_to_stop_words.txt').read().strip().split('\n'))
stop_words = set() # 假设暂时没有自定义的停用词表
#文本预处理函数
def preprocess_text(captions):
preprocessed_captions = []
for caption in captions:
# 使用jieba进行分词
tokens = jieba.lcut(caption)
# 去除停用词
tokens = [token for token in tokens if token not in stop_words and len(token) > 1]
# 将处理过的词加入结果列表
preprocessed_captions.append(" ".join(tokens))
return preprocessed_captions
#对caption列进行预处理
preprocessed_captions = preprocess_text(image_word_data['caption'])
#查看处理过的一些示例文本
for i in range(5):
print(preprocessed_captions[i])
#(可选)统计词频
word_counts = Counter(" ".join(preprocessed_captions).split())
print(word_counts.most_common(10))
​

图像数据预处理:

图像标准化:将所有图像调整到相同的大小和色彩空间。

特征提取:使用深度学习模型(如CNN, ResNet, VGG等)从图像中提取特征向量。

在这里插入图片描述

image_word_data = pd.read_csv('附件1/ImageWordData.csv')
#图像预处理函数
def preprocess_images(image_folder, image_ids, target_size=(224, 224)):
processed_images = {}
for image_id in image_ids:
image_path = os.path.join(image_folder, image_id)
try:
# 打开图像文件
with Image.open(image_path) as img:
# 调整图像尺寸
img = img.resize(target_size)
# 将图像转换为数组
img_array = np.array(img)# 对图像数组进行归一化
img_array = img_array / 255.0
processed_images[image_id] = img_array
except IOError as e:
print(f"无法打开或找到图像 {image_path}。错误信息: {e}")
processed_images[image_id] = None
return processed_images
#假设图像位于"附件1/ImageData"文件夹中
image_folder_path = '附件1/ImageData'
processed_images = preprocess_images(image_folder_path, image_word_data['image_id'])
#检查处理过的图像数量和某个示例图像数组的形状
print(f"处理过的图像数量: {len(processed_images)}")
if processed_images:
example_image = list(processed_images.values())[0]
if example_image is not None:
print(f"示例图像数组形状: {example_image.shape}")

2.多模态特征融合

由于文本和图像特征位于不同的特征空间,我们需要采取方法将它们映射到同一个空间,以便进行相似度比较。这可以通过以下方法之一实现:

联合嵌入空间:通过训练一个深度学习模型来同时学习文本和图像的嵌入,使得相似的图像和文本对靠近。

交叉模态匹配网络:设计一个网络,它可以接受一种模态的输入,并预测另一种模态的特征表示。

文本特征提取:

from sklearn.feature_extraction.text import TfidfVectorizer
#初始化TF-IDF向量化器
vectorizer = TfidfVectorizer(max_features=1000) # 使用最多1000个词语的词汇量
#将文本数据转换为TF-IDF特征矩阵
tfidf_matrix = vectorizer.fit_transform(preprocessed_captions)
#查看TF-IDF特征矩阵的形状
print(tfidf_matrix.shape)

图像特征提取:

import torch
from torchvision import models, transforms
from PIL import Image
import os
#图像预处理函数
def preprocess_image(img_path):
# 读取图像,转换为RGB(如果是灰度图像)
img = Image.open(img_path).convert('RGB')
# 转换图像
img_t = preprocess(img)
batch_t = torch.unsqueeze(img_t, 0)
return batch_t
#定义预处理流程,确保模型接收三通道的图像
preprocess = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
#你可以在这里选择较小的模型来减少内存使用
#比如使用 ResNet18
model = models.resnet18(pretrained=True)
model.eval() # 设置为评估模式
#修改图像特征提取部分,使用上面定义的preprocess_image函数
def extract_image_features(image_folder, image_ids):
image_features = {}
for image_id in image_ids:
image_path = os.path.join(image_folder, image_id)
try:
batch_t = preprocess_image(image_path)
#batch_t = batch_t.to(device)
with torch.no_grad():
features = model(batch_t)
image_features[image_id] = features.cpu().numpy().flatten()
except Exception as e:
print(f"无法处理图像 {image_path}: {e}")
image_features[image_id] = None
return image_features
#假设图像位于"附件1/ImageData"文件夹中
image_folder_path = '附件1/ImageData'
#调用函数提取特征
image_features = extract_image_features(image_folder_path, image_word_data['image_id'])

特征融合:

#转换图像特征字典为矩阵
image_features_matrix = np.array([features for features in image_features.values() if features is not None])
#特征融合
#这里我们简单地将归一化的图像特征和TF-IDF特征进行连接
#确保TF-IDF特征矩阵是稠密的
tfidf_features_dense = tfidf_matrix.todense()
multimodal_features = np.concatenate((image_features_matrix, tfidf_features_dense), axis=1)
#现在 multimodal_features 矩阵包含了每个样本的融合特征

3.图文检索

根据训练好的模型进行图文检索匹配

检索和排序:根据计算出的相似度,对数据库中的图像进行排序,选出相似度最高的前五张图像。

结果展示:

在这里插入图片描述

在这里插入图片描述

步骤三:基于文本检索图像

与步骤三类似,这里直接展示结果。

在这里插入图片描述

下面内容打开内含详细的视频教学,手把手保姆级,模型高精度,结果有保障!

【腾讯文档】2024泰迪杯数据挖掘助攻合集docs.qq.com/doc/DVVlhb2xmbUFEQUJL

相关文章:

2024年泰迪杯数据挖掘B题详细思路代码文章教程

目前b题已全部更新包含详细的代码模型和文章,本文也给出了结果展示和使用模型说明。 同时文章最下方包含详细的视频教学获取方式,手把手保姆级,模型高精度,结果有保障! 分析: 本题待解决问题 目标&#…...

练习 21 Web [GXYCTF2019]BabySQli

SQL联合查询,注意有源码看源码,Base64以及32的区别,MD5碰撞 打开后有登录框,先随意登录尝试 只有输入admin才是返回wrong pass! 其他返回wrong user 所以用户名字段一定要输入admin 养成好习惯,先查看源码…...

【并发编程】CountDownLatch

📝个人主页:五敷有你 🔥系列专栏:并发编程 ⛺️稳中求进,晒太阳 CountDownLatch 概念 CountDownLatch可以使一个获多个线程等待其他线程各自执行完毕后再执行。 CountDownLatch 定义了一个计数器,…...

2024-HW --->SSRF

这不是马上准备就要护网了嘛,如火如荼的报名ing!!!那么小编就来查缺补漏一下以前的web漏洞,也顺便去收录一波poc!!!! 今天讲的主人公呢就是SSRF,以前学的时候…...

该主机与 Cloudera Manager Server 失去联系的时间过长。 该主机未与 Host Monitor 建立联系

该主机与 Cloudera Manager Server 失去联系的时间过长。 该主机未与 Host Monitor 建立联系 这个去集群主机cm界面上看会出现这个错误 排查思路: 一般比较常见的原因可能是出问题的主机和集群主节点的时间对应不上了。还有就是cm agent服务出现问题了 去该主机的…...

【BUG】No module named ‘dnf‘

报错内容: 类型一 # git clone https://github.com/pytorch/vision.git Cloning into vision... /usr/libexec/git-core/git-remote-https: symbol lookup error: /usr/lib64/libldap.so.2: undefined symbol: EVP_md2, version OPENSSL_1_1_0类型二 # yum reins…...

Ubuntu pycharm配置Conda环境

参考博客:https://blog.csdn.net/qq_40726937/article/details/105323965 https://juejin.cn/post/7229543139950051388 Ubuntu20.04中搭建虚拟环境并且用pycharm调用Ubuntu中的虚拟环境。_ubuntu pycharm的虚拟环境选哪个-CSDN博客...

工作体验记录

文章目录 如何提高说话能力?如何提高行动力?如何完成一个任务产出成果?如何寻找突破点提高解决问题的效率?如何成为技术领导?参考资料 如何提高说话能力? 三思而后说,想清楚问题描述,抓住重点…...

YOLO火灾烟雾检测数据集:20000多张,yolo标注完整

YOLO火灾烟雾检测数据集:一共20859张图像,yolo标注完整,部分图像应用增强 适用于CV项目,毕设,科研,实验等 需要此数据集或其他任何数据集请私信...

基于Spring Boot的餐厅点餐系统

基于Spring Boot的餐厅点餐系统 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9 部分系统展示 管理员登录界面 用户注册登录界面 …...

tkinter控件教程使用说明(三)

这篇tkinter控件使用教程是最后一 一、TreeView 属性/事件描述代码实例columns列名,用于设置树形视图的列tree["columns"] ("姓名", "年龄", "性别")column列的属性,包括列名、宽度等tree.column("姓名…...

Electron 打包自定义NSIS脚本为安装向导增加自定义页面增加输入框

Electron 打包工具有很多,如Electron-build、 Electron Forge 等,这里使用Electron-build,而Electron-build使用了nsis组件来创建安装向导,默认情况nsis安装向导不能自定义安装向导界面,但是nsis提供了nsis脚本可以扩展…...

Idea2023创建Servlet项目

① Java EE 只是一个抽象的规范,具体实现称为应用服务器。 ② Java EE 只需要两个包 jsp-api.jar 和 servlet-api.jar,而这两个包是没有官方版本的。也就是说,Java 没有提供这两个包,只提供了一个规范。那么这两个包是谁提供的…...

Day57:WEB攻防-SSRF服务端请求Gopher伪协议无回显利用黑白盒挖掘业务功能点

目录 SSRF-原理&挖掘&利用&修复 SSRF无回显解决办法 SSRF漏洞挖掘 SSRF协议利用 http:// (常用) file:/// (常用) dict:// (常用) sftp:// ldap:// tftp:// gopher:// (…...

【Qt】使用Qt实现Web服务器(十):前端基础

1、简述 本人对HTML元素不熟悉,利用QtWebApp加载静态页面来熟悉下HTML元素。 2、测试代码 # a)main中创建 HttpListener new HttpListener(listenerSettings,new RequestMapper(&app),&app);#...

使用vuepress搭建个人的博客(一):基础构建

前言 vuepress是一个构建静态资源网站的库 地址:VuePress 一般来说,这个框架非常适合构建个人技术博客,你只需要把自己写好的markdown文档准备好,完成对应的配置就可以了 搭建 初始化和引入 创建文件夹press-blog npm初始化 npm init 引入包 npm install -D vuepress…...

ArcGIS Pro导出布局时去除在线地图水印

目录 一、背景 二、解决方法 一、背景 在ArcGIS Pro中经常会用到软件自带的在线地图,但是在导出布局时,图片右下方会自带地图的水印 二、解决方法 解决方法:添加动态文本--服务图层制作者名单,然后在布局中选定位置添加 在状…...

启动mysql

删除C:\Program Files (x86)\MySQL\MySQL Server 5.7这个路径下的data文件夹,这个很难删除,因为一开机,mysql的某些服务就启动了,每次重新启动mysql之前,都要删除这个文件夹 因为这个文件夹在后端执行一些我们看不到的…...

C++实现二叉搜索树的增删查改(非递归玩法)

文章目录 一、二叉搜索树的概念结构和时间复杂度二、二叉搜索树的插入三、二叉搜索树的查找四、二叉搜索树的删除(最麻烦,情况最多,一一分析)3.1首先我们按照一般情况下写,不考虑特殊情况下4.1.1左为空的情况&#xff…...

软件架构复用

1.软件架构复用的定义及分类 软件产品线是指一组软件密集型系统,它们共享一个公共的、可管理的特性集,满足某个特定市场或任务的具体需要,是以规定的方式用公共的核心资产集成开发出来的。即围绕核心资产库进行管理、复用、集成新的系统。核心…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

ios苹果系统,js 滑动屏幕、锚定无效

现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: ​onCreate()​​ ​调用时机​:Activity 首次创建时调用。​…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...