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-shapetexture-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(filepaste(FIGUREPATH, results/barplots/barplots_all_, as.character(angle), .pdf, sep), widthplot.width, heightplot.height) par(mfrowc(1,1), mar rep(0, 4)) dat.here list(origdat, greydat, sildat, edgedat, texturedat) plot.all.barplots(img.listimg.names[1:5], barplot.values get.accuracies.for.experiments.helper(dat.here), angle angle, exp.namesc(original, greyscale, silhouette, edges, texture)) par(marc(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.contentTRUE, categoriesget.category.order(transfer512nomaskdat, x.is.content TRUE)) print.conflict.results(transfer512nomaskdat.c, fig.path, x.is.contentFALSE, categoriesget.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(filepaste(FIGUREPATH, results/generalisation/uniform_noise_accuracy.pdf, sep), widthwidth, heightheight) par(mfrowc(1,1), marcustom.mar) plot.performance(noisedat.t, legend.position topright, cex.legend1.7, plot.observer.range plot.observer.range, main, xlabUniform noise width, x.rangec(0,0.9), ticksc(0.0, 0.2, 0.4, 0.6, 0.9)) dev.off()实验结果解读关键发现与启示通过对实验数据的系统分析项目揭示了几个关键发现CNN的纹理偏向标准ImageNet训练的CNN模型如ResNet-50在识别时严重依赖纹理线索而非形状线索。在纹理-形状冲突实验中模型往往倾向于选择纹理匹配的类别。形状偏向提升鲁棒性通过特定训练方法增加模型的形状偏向可以显著提高其对图像失真如噪声、模糊、旋转的鲁棒性同时保持甚至提高在原始图像上的识别准确率。人类与模型的差异人类被试在识别时更依赖形状线索对纹理变化相对不敏感。这种差异揭示了当前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.humanTRUE, ])$y resnet_accuracy get.accuracy(dat[dat$subjresnet50, ])$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),仅供参考