一、准备工作错误记录
1.安装库报错
安装mmdet库的时候,出现了以下报错:
在构建pycocotools的wheel时出现了问题。错误提示中指出缺少Microsoft Visual C++ 14.0或更高版本。这是因为pycocotools库中的一部分代码需要编译为C扩展,而编译C扩展需要使用适当的编译工具。
解决方法:安装Microsoft Visual C++
2.mmcv版本问题
解决方法:安装mmcv==2.0.0rc4再安装mmdet
3.torch与mmcv版本不兼容
解决方法:不使用faster_rcnn,先用yolov4进行复现
二、复现途中问题
1.传入参数为tensor,却出现’list’ object has no attribute 'shape’报错
yolov4_helper中loss_in_box函数写法
后续发现可能因为pdb断点问题导致,报错位置错误,实际上是output.shape[-2:]出现错误,因为output是一个列表,且形状为[[1,255,76,76],[1,255,38,38],[1,255,38,38]],所以还有以下这个问题
不能直接转为tensor
解决方案:后续发现yolov4中的loss_in_box函数不完整,漏洞很多,而这是ig_attack中学习所需重要函数,因此放弃ig_attack.py
mask_ = mask_ * (mask_== maximum_filter(mask_,footprint=np.ones((filter,filter))))这行代码出现
File “D:\Anaconda\envs\deep_learning2\lib\site-packages\scipy\ndimage_filters.py”, line 1271, in maximum_filter
return _min_or_max_filter(input, size, footprint, None, output, mode,
File “D:\Anaconda\envs\deep_learning2\lib\site-packages\scipy\ndimage_filters.py”, line 1149, in _min_or_max_filter
sizes = _ni_support._normalize_sequence(size, input.ndim)
File “D:\Anaconda\envs\deep_learning2\lib\site-packages\scipy\ndimage_ni_support.py”, line 67, in normalize_sequence
raise RuntimeError(err)
RuntimeError: sequence argument must have length equal to input rank
该问题说明,maximum_filter()函数中缺少size参数,后续发现原因是
mask = IG.get_mask(adv_img.detach(), baseline=(None if baseline is None else baseline.detach().to(adv_img.device)), attack_type=attack_type)
其获得的mask_为Nonetype,这又不得不联系前面的代码
因为attack_type里没有检测到‘integrated_grad’导致baseline=None,导致mask_为Nonetype
解决方案,因为该项目是传参运行,直接运行使attack_type=None,所以自定义attack_type