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

texture-vs-shape实验复现:使用R脚本进行数据可视化与分析的完整指南

texture-vs-shape实验复现:使用R脚本进行数据可视化与分析的完整指南

【免费下载链接】texture-vs-shapePre-trained models, data, code & materials from the paper "ImageNet-trained CNNs are biased towards texture; increasing shape bias improves accuracy and robustness" (ICLR 2019 Oral)项目地址: https://gitcode.com/gh_mirrors/te/texture-vs-shape

texture-vs-shape项目是一个研究ImageNet训练的CNN模型偏向纹理还是形状的开源项目,通过实验数据可视化与分析,可以深入了解模型在图像识别过程中的决策偏好,从而提高模型的准确性和鲁棒性。

项目概述:探索CNN的纹理与形状偏向

在计算机视觉领域,理解卷积神经网络(CNN)的决策机制至关重要。texture-vs-shape项目基于ICLR 2019 Oral论文《ImageNet-trained CNNs are biased towards texture; increasing shape bias improves accuracy and robustness》,深入研究了预训练CNN模型在图像识别中对纹理和形状特征的依赖偏好。

通过该项目提供的R脚本,研究者可以系统分析不同实验条件下模型的表现,包括原始图像、灰度图像、轮廓图像等多种刺激类型,揭示模型在纹理和形状线索冲突时的决策模式。

图1:标准ResNet-50对纹理图像、正常图像和纹理-形状线索冲突图像的分类结果。(a)仅含纹理线索的大象皮肤图像;(b)同时含形状和纹理线索的猫图像;(c)通过风格迁移生成的纹理-形状线索冲突图像

环境准备:快速开始实验分析

项目克隆与依赖安装

首先,通过以下命令克隆项目仓库:

git clone https://gitcode.com/gh_mirrors/te/texture-vs-shape

项目数据分析主要依赖R语言环境及相关包。核心分析脚本位于data-analysis/目录,包括:

  • data-analysis.R:主分析脚本
  • data-analysis-helper.R:辅助函数库
  • autoanalyse-helper.R:自动化分析工具

安装必要的R包依赖:

install.packages(c("ggplot2", "lattice", "jpeg", "R.matlab", "graphics", "pROC", "psych", "grid", "gridExtra", "stats", "png", "scales", "pBrackets", "PET", "TeachingDemos"))

数据结构解析:理解实验数据组织

项目数据主要分为原始数据和刺激材料两大类,均位于项目根目录下:

原始数据目录结构

raw-data/目录包含各类实验的原始数据,按实验类型组织:

raw-data/ ├── contrast-png-experiment-trained-CNNs/ ├── edge-experiment/ ├── grayscale-experiment/ ├── highpass-experiment-trained-CNNs/ ├── lowpass-experiment-trained-CNNs/ ├── noise-experiment-trained-CNNs/ ├── original-experiment/ ├── phase-scrambling-experiment-trained-CNNs/ ├── rotation-experiment-trained-CNNs/ ├── silhouette-filled-experiment/ ├── style-transfer-512-nomask-experiment/ ├── texture-experiment/ └── texture-filled-rotated-experiment/

每个实验目录下包含多个CSV文件,记录了不同被试(包括人类被试和不同CNN模型)在实验中的反应数据,典型数据格式如下:

subj,imagename,category,object_response,is.correct,session,rt subject-01,cat7_original.png,cat,cat,TRUE,1,0.823 alexnet,cat7_greyscale.png,cat,dog,FALSE,1,NA

刺激材料目录结构

stimuli/目录包含实验中使用的各类刺激图像:

stimuli/ ├── edges/ # 边缘检测图像 ├── filled-silhouettes/ # 填充轮廓图像 ├── style-transfer-preprocessed-512/ # 风格迁移预处理图像 └── visualisation-stimuli/ # 可视化用刺激图像

这些刺激图像用于激发模型和人类被试的不同反应,从而研究纹理和形状线索对识别的影响。

R脚本核心功能:从数据到可视化

数据加载与预处理

data-analysis.R的核心功能从数据加载开始,通过get.expt.data()函数读取不同实验的数据:

# 加载预训练CNN数据 origdat = get.expt.data("original-experiment") greydat = get.expt.data("grayscale-experiment") texturedat = get.expt.data("texture-experiment") sildat = get.expt.data("silhouette-filled-experiment") edgedat = get.expt.data("edge-experiment") # 加载训练后CNN数据 origdat.t = get.expt.data("original-experiment-trained-CNNs", append.human.data = T) greydat.t = get.expt.data("grayscale-experiment-trained-CNNs", append.human.data = T)

数据预处理包括合并不同会话数据、添加人类数据作为对照、处理缺失值等步骤,为后续分析做好准备。

条形图可视化:不同实验条件下的准确率比较

脚本通过plot.all.barplots()函数生成不同实验条件下的准确率条形图,直观比较人类和不同CNN模型的表现:

# 生成训练前的条形图 for(angle in c(0, 90)) { pdf(file=paste(FIGUREPATH, "results/barplots/barplots_all_", as.character(angle), ".pdf", sep=""), width=plot.width, height=plot.height) par(mfrow=c(1,1), mar = rep(0, 4)) dat.here = list(origdat, greydat, sildat, edgedat, texturedat) plot.all.barplots(img.list=img.names[1:5], barplot.values = get.accuracies.for.experiments.helper(dat.here), angle = angle, exp.names=c("original", "greyscale", "silhouette", "edges", "texture")) par(mar=c(5.1, 4.1, 4.1, 2.1)) dev.off() }

这段代码生成了原始图像、灰度图像、轮廓图像等五种实验条件下的准确率对比图,支持0度和90度两种方向的展示。

冲突图分析:纹理与形状线索冲突实验

对于风格迁移等纹理-形状线索冲突实验,脚本提供了专门的冲突图分析功能:

# 风格迁移实验结果可视化 fig.path = paste(FIGUREPATH, "results/style-transfer-512-nomask-experiment/", sep="/") print.conflict.results(transfer512nomaskdat.c, fig.path, x.is.content=TRUE, categories=get.category.order(transfer512nomaskdat, x.is.content = TRUE)) print.conflict.results(transfer512nomaskdat.c, fig.path, x.is.content=FALSE, categories=get.category.order(transfer512nomaskdat, x.is.content = FALSE))

图2:不同刺激类型下的模型表现。从左到右、从上到下依次为原始图像、噪声图像、灰度图像、边缘图像、低对比度图像、低通滤波图像、高通滤波图像、相位扰乱图像和均匀噪声图像

泛化分析:模型对图像失真的鲁棒性

项目还研究了模型对各种图像失真的泛化能力,包括噪声、对比度变化、相位扰乱等:

# 噪声实验分析 noisedat.t = get.expt.data("noise-experiment-trained-CNNs", append.human.data = TRUE, generalisation.project = TRUE) # 对比度实验分析 contrastpngdat.t = get.expt.data("contrast-png-experiment-trained-CNNs", append.human.data = TRUE, generalisation.project = TRUE) # 生成泛化分析图表 pdf(file=paste(FIGUREPATH, "results/generalisation/uniform_noise_accuracy.pdf", sep=""), width=width, height=height) par(mfrow=c(1,1), mar=custom.mar) plot.performance(noisedat.t, legend.position = "topright", cex.legend=1.7, plot.observer.range = plot.observer.range, main="", xlab="Uniform noise width", x.range=c(0,0.9), ticks=c(0.0, 0.2, 0.4, 0.6, 0.9)) dev.off()

实验结果解读:关键发现与启示

通过对实验数据的系统分析,项目揭示了几个关键发现:

  1. CNN的纹理偏向:标准ImageNet训练的CNN模型(如ResNet-50)在识别时严重依赖纹理线索,而非形状线索。在纹理-形状冲突实验中,模型往往倾向于选择纹理匹配的类别。

  2. 形状偏向提升鲁棒性:通过特定训练方法增加模型的形状偏向,可以显著提高其对图像失真(如噪声、模糊、旋转)的鲁棒性,同时保持甚至提高在原始图像上的识别准确率。

  3. 人类与模型的差异:人类被试在识别时更依赖形状线索,对纹理变化相对不敏感。这种差异揭示了当前CNN模型与人类视觉系统的根本不同。

图3:风格迁移生成的纹理-形状冲突图像示例。每行展示了同一内容(猫)在不同纹理风格下的表现,揭示了模型在纹理和形状线索冲突时的决策挑战

进阶应用:自定义实验与扩展分析

添加新的实验条件

研究者可以通过扩展get.expt.data()函数添加新的实验条件,只需将新的实验数据按照项目现有格式组织到raw-data/目录下,然后调用:

new_experiment_data = get.expt.data("new-experiment-name")

修改可视化参数

data-analysis-helper.R中定义了大量可视化参数,如颜色方案、字体大小、图像尺寸等,可以根据需要调整:

# 修改颜色方案 use.blue.color.scheme = TRUE if(use.blue.color.scheme) { vgg.100 = rgb(0, 105, 170, maxColorValue = 255) alexnet.100 = rgb(65, 90, 140, maxColorValue = 255) googlenet.100 = rgb(80, 170, 200, maxColorValue = 255) } # 调整图像尺寸 plot.width = 8.0 plot.height = 8.0

统计分析扩展

项目提供的基础框架可以轻松扩展到更复杂的统计分析,如ANOVA、t检验等:

# 示例:不同模型在形状线索上的准确率差异t检验 human_accuracy = get.accuracy(dat[dat$is.human==TRUE, ])$y resnet_accuracy = get.accuracy(dat[dat$subj=="resnet50", ])$y t.test(human_accuracy, resnet_accuracy)

总结:从实验到洞见

texture-vs-shape项目通过精心设计的实验和完善的R数据分析流程,为理解CNN的视觉识别机制提供了宝贵的资源。通过复现论文中的实验,研究者不仅可以验证已有发现,还能基于此框架探索新的研究问题。

关键收获包括:

  • 理解CNN的纹理偏向及其对模型鲁棒性的影响
  • 掌握使用R进行复杂实验数据可视化的方法
  • 学会设计和分析纹理-形状冲突实验
  • 探索提高模型形状偏向的训练策略

通过这些工具和洞见,研究者可以开发出更接近人类视觉系统的计算机视觉模型,提高其在真实世界复杂环境中的识别能力。

无论是计算机视觉研究者、机器学习工程师,还是对视觉认知感兴趣的学生,都能从这个项目中获得有价值的知识和技能,推动相关领域的发展和创新。

【免费下载链接】texture-vs-shapePre-trained models, data, code & materials from the paper "ImageNet-trained CNNs are biased towards texture; increasing shape bias improves accuracy and robustness" (ICLR 2019 Oral)项目地址: https://gitcode.com/gh_mirrors/te/texture-vs-shape

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1006491/

相关文章:

  • 终极指南:如何用BERTScore轻松评估文本生成质量?完整教程与实用技巧
  • Fan Control:掌握Windows风扇控制的终极指南,打造静音高效系统
  • AI新品类品牌怎么建立行业话语权?弗塞伦3步方案把品类定义和市场地位做扎实 - 博客万
  • 单身证明双认证怎么办?单身证明双认证流程? - 指上通
  • 2026年6月最新最权威的国内工业管道加热器工厂排名实测汇总 - 奔跑123
  • Share-this完全配置教程:从基础设置到高级定制
  • 名目张胆定制服务
  • 苏州洪发水族:专业海鲜鱼缸定做与大型亚克力鱼缸定制源头厂家 - GrowthUME
  • RedisDesktopManager Windows版:告别命令行,拥抱可视化Redis数据库管理
  • 别再手动改格式了!用Python的json模块5分钟搞定JSONL转JSON(附两种输出格式代码)
  • Cursor Pro激活工具:你的AI编程伙伴的终极解放者
  • MuleSoft+LLM企业级AI编排:协议转换、安全治理与结构化集成
  • 别再只盯着P值了!用R语言实战QTL分析:从基因型数据到LOD值图谱全解析
  • Stable Diffusion 2.1模型训练原理:深入理解潜在扩散模型工作机制
  • 南京宝珀手表保养需要拆表圈吗!南京宝珀整机维保步骤拆解,亨得利说明拆装要求与部件检测标准 - 亨得利官方维修中心
  • 【ESP32-S3-CAM】HELLO WORLD
  • 模块化图片编辑架构:基于fabric.js和Vue的插件化设计器技术解析
  • 2026企业GEO服务商推荐:靠谱选型,看完少踩90%的坑 - 速递信息
  • Skinny Bones Jekyll Starter响应式设计解析:移动端适配最佳实践
  • MZFormSheetPresentationController自定义动画指南:创建独特的弹窗过渡效果
  • 2026福州香奈儿回收行业深度解读!市场走势、价值逻辑与正规渠道解析 - 薛定谔的梨花猫
  • UndertaleModTool终极指南:零基础掌握游戏修改与模组制作
  • Nova未来展望:路线图与技术发展趋势分析
  • 深入eBPF:3大实战场景与资源导航指南
  • OneDev云原生DevOps架构解密:一体化平台如何重塑企业级软件交付
  • 5分钟实战指南:ComfyUI视频自动化工具如何提升AI视频创作效率
  • MES制造执行系统规划与实施关键要点解析
  • 2026大型不锈钢雕塑厂家实力对比及选型指南 - 曲阳嘉华园林
  • 七牛云PHP-SDK源码解析:深入理解SDK架构设计
  • ComfyUI-KJNodes:5大实用功能彻底改变你的AI创作工作流