特征融合代码理解
特种融合代码理解
集成学习的方法在这类比赛中经常使用,要想获得好成绩集成学习必须做得好。在这里简单谈谈思路,我们使用了两个模型,我们模型也会采取不同参数去训练和预测,那么我们就会得到很多预测MASK图,此时 我们可以采取模型融合的思路,对每张结果图的每个像素点采取投票表决的思路,对每张图相应位置的像素点的类别进行预测,票数最多的类别即为该像素点的类别。正所谓“三个臭皮匠,胜过诸葛亮”,我们这种ensemble的思路,可以很好地去掉一些明显分类错误的像素点,很大程度上改善模型的预测能力。
少数服从多数的投票表决策略代码
// An highlighted block
import numpy as np
import cv2
import argparse
RESULT_PREFIXX = ['./result1/','./result2/','./result3/']
# each mask has 5 classes: 0~4
def vote_per_image(image_id):
result_list = []
for j in range(len(RESULT_PREFIXX)):
im = cv2.imread(RESULT_PREFIXX[j]+str(image_id)+'.png',0)
result_list.append(im)
# each pixel
height,width = result_list[0].shape
vote_mask = np.zeros((height,width))
for h in range(height):
for w in range(width):
record = np.zeros((1,5))
for n in range(len(result_list)):
mask = result_list[n]
pixel = mask[h,w]
#print('pix:',pixel)
record[0,pixel]+=1
label = record.argmax()
#print(label)
vote_mask[h,w] = label
cv2.imwrite('vote_mask'+str(image_id)+'.png',vote_mask)
vote_per_image(3)