FCN笔记

FCN的主要创新点在于通过微调普通的分类网络(如AlexNet,VGGNet,GoogleNet),将其后面的全连接层全部变成卷积层,以此实现端到端训练,适应任意尺寸的输入(好像并不是真正意义上的任意尺寸,输入的尺寸要求在五次下采样的过程中尺寸始终保持为偶数,因此在输入图像在输入网络前要经过裁剪),并通过反卷积进行上采样,输出相应尺寸的输出。同时使用了类似resnet的shortcut的跳跃连接将深层的,粗糙的语义信息和浅层的,精细的表征信息融合,以实现更加精细的语义分割。

FCN使用的主体特征提取网络是VGG16,并保存第三次和第四次下采样后得到的特征图,后面的全连接层使用卷积层代替,并在特征提取结束后对得到的heatmap使用五次反卷积进行上采样恢复成原图尺寸。

在这里插入图片描述

FCN8s:在第一次上采样后将得到的特征图与第四次下采样得到的特征图进行融合(add或通道融合),在第二次上采样后将得到的特征图与第三次下采样得到的特征图进行融合(add或通道融合),最后进行三次上采样恢复成原图尺寸;

FCN16s:在第一次上采样后将得到的特征图与第四次下采样得到的特征图进行融合(add或通道融合),然后进行四次上采样恢复成原图尺寸。

FCN32s:将特征提取结束后的heatmap直接反卷积恢复成原图尺寸。

分割指标计算:

        1.PA(pixel accuracy):标记正确的像素个数占所有像素的比例。

                                ​​​​​​​        

        2.mPA(mean pixel accuracy)计算每个类中标记正确的像素个数占该类的像素的比例,再求所有类的平均。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        3.IoU:真实值和预测值的交集和并集之比(对于某一类)。

        4.mIoU:真实值和预测值的交集和并集之比,并求平均。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

实际计算指标时通常先用预测标签图和真实标签图构造一个confusion matrix,具体构造方法如下:

 第一步根据预测标签和真实标签计算n*label+predict

 第二步初始化一个n^2的数组,将n*label+predict中出现的元素的个数填入数组,具体可用np.bincount(初始化一个长度为输入数据最大值的numpy数组,统计输入数据中每个元素出现的次数)来实现

最后将这个numpy数组reshape成n*n的形状,得到的矩阵即为混淆矩阵

 在混淆矩阵中,

PA=对角线之和 / 总和           

PA = np.diag(confusion).sum() / confusion.sum()

(np.diag()若输入一个一维数组,则返回一个以数组元素为对角线元素的二维矩阵,若输入为二维矩阵则返回该二维矩阵的对角线元素);

 MPA= [(第0类中标记正确的/第0类总和) + (第1类中标记正确的/第1类总和) + ... + (第k类中标记正确的/第k类总和)] / (k+1)

 class_accuracy = np.nanmean(np.diag(confusion) / np.sum(confusion, axis=1))       

(np.nanmean在计算均值时将nan取值为0,并在分母中忽略这一项,因为nan代表这一类别的物体在图中并没有出现,我们希望的是nan不参与计算,而不是将nan当成0来算平均);

IoU = pii / (第i行元素和+第i列元素和 - pii),mIoU对每一类的IoU相加后的结果求平均

iou_denominator = (confusion.sum(axis=1) + confusion.sum(axis=0) - np.diag(confusion))

iou = np.diag(confusion) / iou_denominator

MIoU = np.nanmean(iou)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FCN是Matlab中的一个模块,用于搭建方程。通过使用FCN模块,可以将输入u映射到输出f(u)。对于多个输入的情况,可以使用Mux模块将多个输入整合为一个端口。在FCN模块中,可以按列编写方程,其中u的索引和Mux上的连接线顺序相同。使用FCN模块的一个缺是连线较多,编写方程时需要注意u的索引,避免出错。 此外,Matlab中还有一个函数声明语句,可以定义一个名为myfun的函数,该函数接受输入x1,...,xM并返回输出y1,...,yN。函数名称必须以字母字符开头,并且可以包含字母、数字或下划线。 另外,在Matlab中,StartupFcn回调函数用于在打开app时执行特定的操作,例如显示图片。通过给按钮添加回调函数,可以实现在打开软件时直接显示图像。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Matlab simulink上手控制仿真学习笔记1-常用模块Fcn](https://blog.csdn.net/subtitle_/article/details/130045010)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Matlab App Designer自学笔记(八):StartupFcn回调函数的使用](https://blog.csdn.net/txr152111/article/details/121051702)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值