2024年认证杯SPSSPRO杯数学建模D题(第二阶段)AI绘画带来的挑战解题全过程文档及程序
2024年认证杯SPSSPRO杯数学建模
D题 AI绘画带来的挑战
原题再现:
2023 年开年,ChatGPT 作为一款聊天型AI工具,成为了超越疫情的热门词条;而在AI的另一个分支——绘图领域,一款名为Midjourney(MJ)的软件,热度完全不亚于ChatGPT。AI绘画技术可以模仿设计师的风格和技巧,自动生成类似于人类设计师的设计作品。AI绘画技术可以应用于各种领域,包括绘画、插画、平面设计等,具有较高的效率和精度,能够大大提高创作效率和创作质量。然而,AI绘画技术也带来了一些挑战和风险。比如对于一些传统的美术设计类赛事组织方来说,AI绘画技术就带来了评奖公平性的挑战,由于一些设计作品很难快速判断出究竟是由AI设计的,还是由人类设计师设计的,所以赛事评奖工作变得异常复杂,当参赛作品较多的时候,很难保证最终的结果公平性,附图就是几幅由MJ软件设计的建筑图片,即使业内人士也不能保证做出准确的判断。请你和你的团队建立合理的数学模型以解答如下问题。
第二阶段问题:
1. 我们可以利用MJ软件来生成大量的AI设计图来作为识别AI设计的样本数据集,如果这种思路可行,你认为需要构建一个多大的数据集才能保证识别率超过80%?
2. 如果在今后的设计比赛中,使用AI进行设计辅助已经是不可避免,那么人的参与频次、参与深度、人与AI的信息交互内容等指标将成为打分的关键依据,请你结合第一阶段的模型,构建一个打分系统,通过一定的问卷调研数据来对设计作品进行评价。
整体求解过程概述(摘要)
本文详细分析了AI绘画带来的挑战。这一挑战主要涉及如何准确地从数学和技术角度区分AI和人类设计的作品,以及如何建立一个公正的评分系统来评估由AI辅助的设计作品。
随着AI工具如ChatGPT和Midjourney在设计领域的广泛应用,其高效、精准的模仿能力虽然提高了创作效率,但同时也给设计赛事的公平性评判带来了挑战。尤其是在判断作品的真实创作来源——是AI还是人类设计师——这一问题上,确保评奖的公正性显得尤为重要。
针对问题一,文章详细描述了如何确定构建一个足够大的样本数据集以确保超过80%的AI 与人类作品识别准确率。通过深入研究现有文献,采用图像特征提取技术(包括颜色分布、纹理分析、几何形状识别)和深度学习方法,开发了一个基于CNN的多输入判别模型。该模型通过多次交叉验证和使用不同的正则化技术来避免过拟合,并通过数据集大小的学习曲线来拟合所需的样本量,最终确定需要14745个样本来达到所需的识别准确率。
针对问题二:为了评估AI辅助设计作品的质量,我们构建了一个综合评分系统,涵盖设计质量评分(Qd)、人工与AI的交互频次(Fa)、人工参与的深度(Da)、交互内容质量(Cq)和综合技术指标(Tq)五个维度,使用加权平均法确定各指标的权重。通过设计问卷,专业评委对Qd和Tq进行评分,设计者对Fa、Da和Cq进行自评,然后我们自行设计了三幅建筑设计作品,控制不同的AI交互频次和人工参与深度,并结合所有评分数据,计算每幅作品的综合评分。结果表明,合理平衡AI与人工的作用,确保适当的交互频次和参与深度,可以有效提升设计作品的整体质量。
总体而言,文章为解决AI在设计领域带来的挑战提供了一个结构化和科学的方法,不仅增强了识别AI与人类设计作品的能力,还建立了一个公正的评分系统来评估AI 辅助的设计作品。这些方法不仅提高了评估的准确性,也确保了设计比赛的公平性和透明度。
问题分析:
问题一分析
在解决问题一,即确定构建多大的数据集以确保识别准确率超过80%的情况下,我们采取了多方面的分析和实验步骤。首先,通过研究相关文献并参考现有的资料,我们设计并实现了一系列用于判断AI绘图的模块。这些模块基于图像特征的提取,例如颜色分布、纹理分析和几何形状,是构建有效判别模型的基础。此外,我们还引入了基于深度学习的特征提取,如预训练神经网络的中间层输出,以捕获更复杂的图像特征。
接下来,我们在不同规模的数据集上训练了基于CNN的多输入判别模型。模型的训练和验证过程中,我们使用了交叉验证方法来确保评估结果的可靠性和模型的泛化能力。为了防止过拟合,我们还引入了dropout和L2正则化技术。通过这些模型,我们绘制了学习曲线,观察模型性能随数据集大小的变化。通过这些数据集的准确率绘制了模型的学习曲线图,然后通过三种方法(线性外推,三次多项式拟合,集成学习)预估了数据集的大小。
最终,通过综合考虑三种预估方法得优缺点以及多个机器学习模型的学习曲线,构建了数据集预估算法,得到当准确率达到80%时,所需要的数据集大小为14745
问题二的分析
随着人工智能(AI)技术在设计领域的广泛应用,设计比赛中使用AI进行设计辅助已成为不可避免的趋势。然而,如何公平地评估这些AI辅助设计作品,成为新的挑战。为了全面、公正地评价这些设计作品,本文结合5个维度的指标:
1. 设计质量评分(Qd):由专业评委对作品的美学质量、创新性、实用性和细节处理进行评分。
2. 人工与AI的交互频次(𝐹a):衡量设计者在设计过程中与AI交互的次数。
3. 人工参与的深度(𝐷a):量化设计者在设计过程中的参与深度。
4. 交互内容质量(𝐶q):评估设计者在与AI交互过程中内容的有效性和创造性。
5. 综合技术指标(Tq):包括纹理一致性、光影处理、透视准确性和色彩一致性。 然后通过加权平均法确定各指标的权重,最终建立一个综合评分公式:
该综合评分系统能够科学、公正地评估 AI 辅助设计的作品,确保评分过程的公平性和准确性。然后再针对设计质量评分(Qd),综合技术指标(Tq)这2个部分设计一份问卷给专业评委打分,其中综合技术的部分指标结合第一阶段确定的特征提取的方法进行打分,人工与AI的交互频次(𝐹a),人工参与的深度(𝐷a),交互内容质量(𝐶q)则设计问卷给设计者自评。
模型假设:
特征差异性假设:
假设AI和人类设计师生成的作品在几何一致性、纹理细节、色彩搭配、透视准确性以及风格特征上存在可识别的差异。这些差异可以通过适当的图像处理技术和特征提取算法捕捉到。
独立同分布假设:
假设训练数据和将要预测的数据是独立同分布的。这意味着训练集中的数据分布与实际应用中遇到的数据分布相同,保证模型在实际应用中的有效性。
评价系统公正性假设:
在对AI辅助设计作品进行评分时,假设评价标准公正、客观,能够真实反映作品的设计质量和技术水平。此外,假设评分过程中人的主观判断与AI分析结果的结合是合理的,可以准确评估作品的质量。
完整论文缩略图
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
部分程序代码:
import cv2
import numpy as np
def extract_geometric_features(image_path):
image = cv2.imread(image_path, cv2.IMREAD_COLOR)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
# 使用霍夫变换检测线条
lines = cv2.HoughLinesP(edges, 1, np.pi/180, threshold=50,
minLineLength=100, maxLineGap=10)
if lines is not None:
for line in lines:
x1, y1, x2, y2 = line[0]
cv2.line(image, (x1, y1), (x2, y2), (255, 0, 0), 2)
return image
# 使用函数
result_image = extract_geometric_features('path_to_your_image.jpg')
cv2.imshow('Geometric Features', result_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
def analyze_light_shadow_features(image_path):
image = cv2.imread(image_path)
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lightness = hsv[:, :, 2].mean() # 获取亮度通道的平均值
contrast = image.std() # 计算标准差以评估对比度
return lightness, contrast
def color_histogram_features(image_path):
image = cv2.imread(image_path)
hist = cv2.calcHist([image], [0, 1, 2], None, [256, 256, 256], [0, 256,
0, 256, 0, 256])
cv2.normalize(hist, hist)
return hist.flatten()
from tensorflow.keras.applications.vgg19 import VGG19, preprocess_input
from tensorflow.keras.preprocessing import image
from tensorflow.keras.models import Model
def extract_texture_features(image_path):
model = VGG19(weights='imagenet', include_top=False)
model = Model(inputs=model.inputs,
outputs=model.get_layer('block5_conv4').output)
img = image.load_img(image_path, target_size=(224, 224))
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
img_array = preprocess_input(img_array)
features = model.predict(img_array)
return features.mean(axis=(0, 1, 2))
# 继续使用 VGG19 模型进行风格特征的提取
def extract_style_features(image_path):
# 同上使用 VGG19 的某层输出进行风格特征分析
return extract_texture_features(image_path) # 使用相同的方法,目标层可能有所不同
import cv2
import numpy as np
from tensorflow.keras.models import load_model
def extract_structure_and_proportion_features(image_path):
# 加载预训练的模型(此处假设模型已加载)
model = load_model('path_to_your_pretrained_model.h5')
image = cv2.imread(image_path)
image_resized = cv2.resize(image, (224, 224))
# 对图像进行预处理并进行预测
img_array = np.expand_dims(image_resized, axis=0)
detections = model.predict(img_array)
# 解析检测结果,提取结构和比例特征
features = []
for detection in detections:
# 假设detection 包括边界框和类别标签
x, y, width, height, label = detection
features.append((label, x, y, width, height))
return features
from tensorflow.keras.applications.vgg19 import VGG19, preprocess_input
from tensorflow.keras.preprocessing import image
from tensorflow.keras.models import Model
def extract_layout_features(image_path):
model = VGG19(weights='imagenet', include_top=False)
model = Model(inputs=model.inputs,
outputs=model.get_layer('block5_pool').output)
img = image.load_img(image_path, target_size=(224, 224))
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
img_array = preprocess_input(img_array)
# 这将给出图像的高级特征,可以用于理解图像布局
features = model.predict(img_array)
layout_features = features.mean(axis=(0, 1, 2))
return layout_features
from tensorflow.keras.applications import VGG16
from tensorflow.keras.layers import Dense, Flatten, Dropout
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
# 加载预训练的VGG16模型,不包括顶层
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224,
224, 3))
# 冻结基模型的所有层,这些层不会在训练中更新
for layer in base_model.layers:
layer.trainable = False
# 添加新的顶层
x = Flatten()(base_model.output)
x = Dense(1024, activation='relu')(x)
x = Dropout(0.5)(x)
predictions = Dense(1, activation='sigmoid')(x)
# 构建整个模型
model = Model(inputs=base_model.input, outputs=predictions)
# 编译模型
model.compile(optimizer=Adam(lr=0.0001), loss='binary_crossentropy',
metrics=['accuracy'])
history = model.fit(
train_generator,
epochs=10,
validation_data=validation_generator
)
model.save('path_to_save_model.h5')
from tensorflow.keras.layers import Input, Dense, concatenate
from tensorflow.keras.models import Model
# 假设特征维度
input_geom = Input(shape=(geom_feature_size,))
input_color = Input(shape=(color_feature_size,))
input_texture = Input(shape=(texture_feature_size,))
# 可以为每种特征单独添加处理层
x_geom = Dense(64, activation='relu')(input_geom)
x_color = Dense(64, activation='relu')(input_color)
x_texture = Dense(64, activation='relu')(input_texture)
# 合并特征
combined_features = concatenate([x_geom, x_color, x_texture])
# 添加更多层
x = Dense(128, activation='relu')(combined_features)
output = Dense(1, activation='sigmoid')(x)
# 创建模型
model = Model(inputs=[input_geom, input_color, input_texture],
outputs=output)
model.fit(
[train_geom_features, train_color_features, train_texture_features],
train_labels,
validation_data=([val_geom_features, val_color_features,
val_texture_features], val_labels),
epochs=10,
batch_size=32
)
from tensorflow.keras.layers import Input, Dense, concatenate, Dropout
from tensorflow.keras.models import Model
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
相关文章:

2024年认证杯SPSSPRO杯数学建模D题(第二阶段)AI绘画带来的挑战解题全过程文档及程序
2024年认证杯SPSSPRO杯数学建模 D题 AI绘画带来的挑战 原题再现: 2023 年开年,ChatGPT 作为一款聊天型AI工具,成为了超越疫情的热门词条;而在AI的另一个分支——绘图领域,一款名为Midjourney(MJÿ…...
深入理解CSS常规流布局
引言 在网页设计中,理解元素如何排列和相互作用至关重要。CSS提供了三种主要的布局方式:常规流、浮动和定位。本文将重点探讨最基础也是最常用的常规流布局(Normal Flow),帮助开发者掌握页面布局的核心机制。 什么是…...

DOCKER使用记录
1、拉取镜像 直接使用docker pull <image>,大概率会出现下面的报错信息: (base) jetsonyahboom:~$ docker pull ubuntu:18.04 Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while …...
MYSQL中常见的函数和使用
字符串函数 CONCAT(str1,str2,...,strN) :用于将多个字符串连接成一个字符串。例如,SELECT CONCAT(SQL, , 函数) ,结果为 “SQL 函数”。 LOWER(str) :将字符串中的所有字母转换为小写。例如,SELECT LOWER(MySQL Fun…...

【深度学习相关安装及配环境】Anaconda搭建虚拟环境并安装CUDA、cuDVV和对应版本的Pytorch,并在jupyter notebook上部署
目录 1. 查看自己电脑的cuda版本2.安装cuda关于环境变量的配置测试一下,安装完成 3.安装cuDVV环境变量的配置测试一下,安装完成 4.创建虚拟环境先安装镜像源下载3.11版本py 5.在虚拟环境下,下载pytorch6.验证是否安装成功7.在jupyter noteboo…...

web3-区块链基础:从区块添加机制到哈希加密与默克尔树结构
区块链基础:从区块添加机制到哈希加密与默克尔树结构 什么是区块链 抽象的回答: 区块链提供了一种让多个参与方在没有一个唯一可信方的情况下达成合作 若有可信第三方 > 不需要区块链 [金融系统中常常没有可信的参与方] 像股票市场,或者一个国家的…...

TCP小结
1. 核心特性 面向连接:通过三次握手建立连接,四次挥手终止连接,确保通信双方状态同步。 TCP连接建立的3次握手 抓包: client发出连接请求; server回应client请求,并且同步发送syn连接; clien…...
django ssh登录 并执行命令
在Django开发环境中,通常不推荐直接通过SSH登录到服务器并执行命令,因为这违背了Django的架构设计原则,即前端与后端分离。Django主要负责处理Web请求、逻辑处理和数据库交互,而不直接执行系统级命令。然而,在某些情况…...
unix/linux,sudo,其高级使用
掌握了sudo的基石,现在是时候向更高阶的技巧和应用进发了!sudo的强大远不止于简单的sudo <command>。它的高级用法能让你在复杂的系统管理和安全场景中游刃有余,如同经验丰富的物理学家巧妙运用各种定律解决棘手问题。 sudo 的高级使用技巧与场景 精细化命令控制与参…...

Python 打包指南:setup.py 与 pyproject.toml 的全面对比与实战
在 Python 开发中,创建可安装的包是分享代码的重要方式。本文将深入解析两种主流打包方法——setup.py 和 pyproject.toml,并通过一个实际项目示例,展示如何使用现代的 pyproject.toml 方法构建、测试和发布 Python 包。 一、setup.py 与 pyp…...
计算机视觉与深度学习 | 基于OpenCV的实时睡意检测系统
基于OpenCV的实时睡意检测系统 下面是一个完整的基于OpenCV的睡意检测系统实现,该系统使用眼睛纵横比(EAR)算法检测用户是否疲劳或瞌睡。 import cv2 import numpy as np import dlib from scipy.spatial import distance as dist import pygame import time# 初始化pygame用…...
python打卡day44@浙大疏锦行
知识点回顾: 预训练的概念常见的分类预训练模型图像预训练模型的发展史预训练的策略预训练代码实战:resnet18 作业: 尝试在cifar10对比如下其他的预训练模型,观察差异,尽可能和他人选择的不同尝试通过ctrl进入resnet的…...

性能优化 - 案例篇:缓存_Guava#LoadingCache设计
文章目录 Pre引言1. 缓存基本概念2. Guava 的 LoadingCache2.1 引入依赖与初始化2.2 手动 put 与自动加载(CacheLoader)2.2.1 示例代码 2.3 缓存移除与监听(invalidate removalListener) 3. 缓存回收策略3.1 基于容量的回收&…...
NiceGUI 是一个基于 Python 的现代 Web 应用框架
NiceGUI 是一个基于 Python 的现代 Web 应用框架,它允许开发者直接使用 Python 构建交互式 Web 界面,而无需编写前端代码。以下是 NiceGUI 的主要功能和特点: 核心功能 1.简单易用的 UI 组件 提供按钮、文本框、下拉菜单、滑块、图表等常见…...
生动形象理解CNN
好的!我们把卷积神经网络(CNN)想象成一个专门识别图像的“侦探小队”,用破案过程来生动解释它的工作原理: 🕵️♂️ 案件:识别一张“猫片” 侦探小队(CNN)的破案流程&am…...

python入门(1)
第一章 第一个python程序 1.1 print函数 print方法的作用 : 把想要输出的内容打印在屏幕上 print("Hello World") 1.2 输出中文 在Python 2.x版本中,默认的编码方式是ASCII编码方式,如果程序中用到了中文,直接输出结果很可能会…...

【PDF提取表格】如何提取发票内容文字并导出到Excel表格,并将发票用发票号改名,基于pdf电子发票的应用实现
应用场景 该应用主要用于企业财务部门或个人处理大量电子发票,实现以下功能: 自动从 PDF 电子发票中提取关键信息(如发票号码、日期、金额、销售方等)将提取的信息整理并导出到 Excel 表格,方便进行财务统计和报销使…...

Hugging Face 最新开源 SmolVLA 小模型入门教程(一)
系列文章目录 目录 系列文章目录 前言 一、引言 二、认识 SmolVLA! 三、如何使用SmolVLA? 3.1 安装 3.2 微调预训练模型 3.3 从头开始训练 四、方法 五、主要架构 5.1 视觉语言模型(VLM) 5.2 动作专家:流匹…...

封闭内网安装配置VSCode Anconda3 并配置 PyQt5开发
封闭内网安装配置VSCode Anconda3 并配置 PyQt5开发 零一 vscode1.1 下载 vscode1.2 下载插件1.3 安装 二 anaconda 32.1 下载2.2 新建虚拟环境1 新建快捷方式,启动base2 新建虚拟环境 3 配置Qt designer3.1 designer.exe和uic.exe3.2 设置插件,3.4 ui文件转为py文件 4使用4.1 …...

大话软工笔记—组合要素2之逻辑
1. 逻辑的概念 逻辑,指的是思维的规律和规则,是对思维过程的抽象。 结合逻辑的一般定义以及信息系统的设计方法,对逻辑的概念进行抽提、定义为三个核心内涵,即:规律、顺序、规则。 (1)规律&a…...
浅谈边缘计算
(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮࿰…...
宝塔专属清理区域,宝塔清理MySQL日志(高效释放空间)
1. 删除超过 365 天的积分变更记录 宝塔面板 → 数据库 → 选择数据库 → 点击 管理 进入 phpMyAdmin 后: 选择在用的数据库名 看到顶部的 SQL 点击 输入命令 然后点击执行 DELETE FROM pre_common_credit_log WHERE dateline < UNIX_TIMESTAMP(DATE_SUB(NO…...

7.Demo Js执行同步任务,微任务,宏任务的顺序(3)
一个包含 同步任务、微任务(Promise)、宏任务(setTimeout) 的例子,JS 是怎么调度这些任务的。 🎯 例子代码(建议复制到浏览器控制台运行) console.log(‘同步任务 1’); setTimeo…...

边缘计算网关赋能沸石转轮运行故障智能诊断的配置实例
一、项目背景 在环保行业,随着国家对大气污染治理要求的不断提高,VOCs废气处理成为了众多企业的重要任务。沸石转轮作为一种高效的VOCs治理设备,被广泛应用于石油化工、汽车制造、印刷包装等主流行业。这些行业生产规模大、废气排放量多&…...
机器学习之深入理解机器学习常见算法:原理、公式与应用
机器学习之深入理解机器学习常见算法:原理、公式与应用 机器学习是一门让计算机自动从数据中学习规律的技术体系。常见的机器学习算法可以分为监督学习、无监督学习和深度学习三大类。本文将系统介绍每类中具有代表性的算法,并深入剖析其核心原理与数学基础。 一、监督学习(…...
Python实例题: Python 的简单电影信息
目录 Python实例题 题目 代码实现 实现原理 网页请求: 内容解析: 数据存储: 反爬策略: 关键代码解析 1. 网页请求处理 2. 电影列表解析 3. 电影详情解析 4. 爬虫主逻辑 使用说明 安装依赖: 修改配置&a…...
MyBatis 的动态 SQL
1. 动态 SQL 的定义 动态 SQL 是 MyBatis 的核心特性之一,它允许开发者根据运行时条件动态生成 SQL 语句。通过特殊的 XML 标签或注解语法,实现 SQL 的灵活拼接,避免在 Java 代码中手动拼接 SQL 字符串的复杂性和安全风险。 2. 核心作用 条…...
Redis中的setIfAbsent方法和execute
Redis中的setIfAbsent方法 Redis中的setIfAbsent方法是一种原子操作,它的作用是只有在指定的键不存在时才会设置值。这个方法在并发环境下非常有用,因为它可以避免多个客户端同时尝试设置相同键而导致的冲突。 代码示例 在Java中使用setIfAbsent方法通…...
高考数学易错考点02 | 临阵磨枪
文章目录 前言解析几何立体几何排列组合概率导数及应用前言 本篇内容下载于网络,网络上的都是以 WORD 版本呈现,缺字缺图很不完整,没法使用,我只是做了补充和完善。有空准备进行第二次完善,添加问题解释的链接。 ##平面向量 40.向量 0 ⃗ \vec{0} 0 与数 0 0 0 有区别…...
国产高性能pSRAM选型指南:CSS6404LS-LI 64Mb QSPI伪静态存储器
一、芯片基础特性 核心参数 容量 :64Mb(8M 8bit)电压 :单电源供电 2.7-3.6V (兼容3.3V系统)接口 :Quad-SPI(QPI/SPI)同步模式封装 : SOP-8L (150mil) &#…...