likyoo / Siam-NestedUNet

The pytorch implementation for "SNUNet-CD: A Densely Connected Siamese Network for Change Detection of VHR Images"
MIT License
246 stars 59 forks source link

_, cd_preds1 = torch.max(cd_preds, 1) #23

Open yiyi-today opened 2 years ago

yiyi-today commented 2 years ago

您好,我对您的论文非常感兴趣。由于我刚入门,在理解计算预测图时遇到了一些问题,如标题,cd_preds是模型处理得到的结果,cd_preds的维度是[1(B), 2(C), 256(H), 256(W)],torch.max(cd_preds, 1)是取cd_preds在维度【2(C)】上的最大值,得到了维度为[1,256,256]最大值_和索引号(非0即1)cd_preds1,并将cd_preds1作为最终的预测结果。请问上述我的解析正确吗?cd_preds1作为最终的预测结果的依据是什么?非常希望得到您的回答,谢谢!

likyoo commented 2 years ago

您好,您的描述的正确的。 因为目标任务是一个二分类任务,所以我们的输出维度是[1(B), 2(C), 256(H), 256(W)] (当然也可以是[1(B), 1(C), 256(H), 256(W)] 。其中,每一个位置上的两个值代表对两种类别的预测值。在训练过程中,后面会接一个softmax + ce_loss。在预测过程中,这个softmax可以直接省略掉。这是很常见的设置和用法。

yiyi-today commented 2 years ago

您好,您的描述的正确的。 因为目标任务是一个二分类任务,所以我们的输出维度是[1(B), 2(C), 256(H), 256(W)] (当然也可以是[1(B), 1(C), 256(H), 256(W)] 。其中,每一个位置上的两个值代表对两种类别的预测值。在训练过程中,后面会接一个softmax + ce_loss。在预测过程中,这个softmax可以直接省略掉。这是很常见的设置和用法。

您好,非常感谢您的及时回答。也就是说,在做二分类时,只要CNN网络的输出维度是[1(B), 2(C), 256(H), 256(W)] ,在通道【2(C)】中每一个位置代表对两种类别的预测值;当CNN网络的输出维度是[1(B), 1(C), 256(H), 256(W)] ,取一个阈值可以决定是否变化。请问输出通道选择2(C)或者1(C)有什么区别吗?

likyoo commented 2 years ago

就操作来说,损失函数前的非线性函数有所区别,softmax或者sigmoid。 至于优缺点的话,相关的分析也不少,您可以查找一下。

yiyi-today commented 2 years ago

就操作来说,损失函数前的非线性函数有所区别,softmax或者sigmoid。 至于优缺点的话,相关的分析也不少,您可以查找一下。

谢谢,非常感谢您的回答,祝您生活愉快!