语义分割 模型 pytorch 语义分割 fcn_机器学习


语义分割 模型 pytorch 语义分割 fcn_人工智能_02


语义分割 模型 pytorch 语义分割 fcn_人工智能_03


边缘和一些其他区域忽略了。

语义分割 模型 pytorch 语义分割 fcn_机器学习_04


数据集是ms coco,这些坐标是两两一组,多边形的节点x坐标和y坐标两两一组。之后再把这个多边形区域转换成右下角的这种形式。

语义分割 模型 pytorch 语义分割 fcn_深度学习_05


语义分割 模型 pytorch 语义分割 fcn_语义分割 模型 pytorch_06


pixel acc的分子是预测正确的像素点个数,分母是这个图片总的像素点个数。

mean acc意思是把每个类别的acc计算出来求和,然后除以类别个数。

mean iou的意思是对每一个类别求iou,然后求和除以类别个数。(假设绿色是真实的标签,蓝色是预测的标签,nii就是重合的部分,即预测正确的部分,ti是绿色部分的面积,求和hji指的是蓝色的面积)

语义分割 模型 pytorch 语义分割 fcn_语义分割 模型 pytorch_07


上图举例。

语义分割 模型 pytorch 语义分割 fcn_语义分割 模型 pytorch_08


然后针对0标签,右图的第一行是针对0的,比如说第一行第四列的意思是真实标签为0但预测为3的个数。

语义分割 模型 pytorch 语义分割 fcn_卷积_09


同理,第二行第1列指的是真实标签为0,预测为1的概率。

语义分割 模型 pytorch 语义分割 fcn_深度学习_10


同理,最后得到这些。

语义分割 模型 pytorch 语义分割 fcn_深度学习_11


globe acc的计算公式。(对角线上的数字之和,是预测正确的个数)

语义分割 模型 pytorch 语义分割 fcn_语义分割 模型 pytorch_12


分母是对应类别真实的像素总个数,即一列的和。

语义分割 模型 pytorch 语义分割 fcn_机器学习_13


mean iou的计算,分子是预测正确的像素总个数,分母是真实加上预测减去预测正确。

语义分割 模型 pytorch 语义分割 fcn_卷积_14


转置卷积(基本上起到了上采样的作用),输入是2x2,输出是4x4,变大了,所以是上采样。

语义分割 模型 pytorch 语义分割 fcn_人工智能_15


黄框里的是运算之后的宽高。

语义分割 模型 pytorch 语义分割 fcn_卷积_16


语义分割 模型 pytorch 语义分割 fcn_语义分割 模型 pytorch_17

转置卷积的原理

语义分割 模型 pytorch 语义分割 fcn_深度学习_18


使用卷积等效矩阵。这样只需要对应元素相乘再相加即可。

语义分割 模型 pytorch 语义分割 fcn_语义分割 模型 pytorch_19


输入展平,卷积展平,相乘之后就是输出展平了。

语义分割 模型 pytorch 语义分割 fcn_机器学习_20


前面那个是IxC=O,这回想要利用O和C求一个和I相同形状的矩阵,只需要用O乘以C的转置矩阵就行了。这样这个P的形状和I是一样的了。

语义分割 模型 pytorch 语义分割 fcn_深度学习_21

fcn

语义分割 模型 pytorch 语义分割 fcn_人工智能_22


全卷积的意思是不包括全连接层了。

语义分割 模型 pytorch 语义分割 fcn_机器学习_23


vgg16的结构,待会会用到maxpooling4的输出和maxpooling3的输出。

语义分割 模型 pytorch 语义分割 fcn_卷积_24


上面是用了全连接层,下面用卷积层代替,而参数的数量是一样的。

语义分割 模型 pytorch 语义分割 fcn_语义分割 模型 pytorch_25


32s的意思是最后上采样了32倍。

语义分割 模型 pytorch 语义分割 fcn_机器学习_26


经过backbone后,下采样了32倍,fc6和fc7是原vgg的全连接层,这里用两个卷积层替代,倒数第二个卷积层的卷积核个数是分类类别的个数加一,即加了背景。最后一个是一个转置卷积,上采样32倍,恢复到原图的大小,最后一个卷积使用了双线性插值来初始化转置卷积的参数。最后对像素进行softmax就能得到类别分数了。

语义分割 模型 pytorch 语义分割 fcn_人工智能_27


16s的结构,右上角的那个转置卷积只上采样的2倍,之后利用maxpooling4的结果,得到原始图像下采样16倍的特征图,正好加在一起,最后再经过一个转置卷积上采样16倍。

语义分割 模型 pytorch 语义分割 fcn_人工智能_28


不同之处在于还使用了maxpooling3的输出。最后一步上采样8倍。这里的相加是对应元素相加。

损失计算

语义分割 模型 pytorch 语义分割 fcn_人工智能_29


左图是输出之后的特征图,可以看到类别个数是3。针对channel方向对像素进行softmax处理,就能得到每个位置像素的类别得分。最后和真实值进行交叉熵损失,然后求平均值即可。