Grad-CAM.pytorch
                                
                                 Grad-CAM.pytorch copied to clipboard
                                
                                    Grad-CAM.pytorch copied to clipboard
                            
                            
                            
                        feature = self.feature[0].cpu().data.numpy()
您好,非常感谢您提供的目标检测CAM思路!代码中有两处疑问向您请教。
grad_cam.py:
- weight = np.mean(gradient, axis=(1, 2)) # [C] 这里为什么要取平均? 2.feature = self.feature[0].cpu().data.numpy() # [C,H,W] 为什么选用feature[0]而不是feature[proposal_idx]
谢谢!!!
@wangzyon 感谢您的反馈
- 每个通道一个权重,所以取均值,求和都可以的,结果一样 2.第二个问题,是bug,应该是feature[proposal_idx],感谢反馈!
@wangzyon 感谢您的反馈
- 每个通道一个权重,所以取均值,求和都可以的,结果一样 2.第二个问题,是bug,应该是feature[proposal_idx],感谢反馈!
第二个问题不存在bug,proposal_idx对应的是预测的类别,与feature没有关系。 self.feature可以打印尺寸,是[1,C,H,W]的, 所以feature = self.feature[0].cpu().data.numpy() # [C,H,W]相当于去掉了第一个batchsize维度。
@milliema 您好,proposal_idx是proposal的序号,表示该预测边框来自第几个proposal,不是类别;self.feature的尺寸是[num_proposals,C,H,W],一个例子如下:
feature shape:torch.Size([343, 2048, 7, 7])