paddleseg如何进行多模型融合?
收藏
若对结果进行处理,提交结果会异常。
import cv2
import numpy as np
import os
import shutil
os.chdir('/home/aistudio/work/results/')
index = 0
for f in os.listdir("result-segformerb2-65.09/added_prediction"):
if index % 10 == 0:
print("当前已读取"+str(index)+"个样本,进度为 "+str(100*index/len(os.listdir("result-segformerb2-65.09/added_prediction")))+"%")
file_name = f.split(".")[0] #获取单张图片文件名称,不包括后缀
#载入三个模型的color_map,和map with 原图
color_map1 = cv2.imread("result-segformerb2-65.09/pseudo_color_prediction/{}.png".format(file_name), cv2.IMREAD_COLOR)
color_map2 = cv2.imread("result-segformerb2-66.24/pseudo_color_prediction/{}.png".format(file_name), cv2.IMREAD_COLOR)
color_map3 = cv2.imread("result-segformerb3/pseudo_color_prediction/{}.png".format(file_name), cv2.IMREAD_COLOR)
add1 = cv2.imread("result-segformerb2-65.09/added_prediction/{}.jpg".format(file_name), cv2.IMREAD_COLOR)
add2 = cv2.imread("result-segformerb2-66.24/added_prediction/{}.jpg".format(file_name), cv2.IMREAD_COLOR)
add3 = cv2.imread("result-segformerb3/added_prediction/{}.jpg".format(file_name), cv2.IMREAD_COLOR)
#逐像素投票,若两个较差的模型结果给出同样的分类,把其赋值给最好模型结果的对应像素上。其它情况默认为最好模型结果。
for i in range(256):
for j in range(256):
if (color_map2[i][j] == color_map3[i][j]).all():
color_map1[i][j] = color_map2[i][j]
add1[i][j] = add2[i][j]
#写入新融合结果
cv2.imwrite("merge_result/pseudo_color_prediction/{}.png".format(file_name).format("RE"+str(index)), color_map1)
cv2.imwrite("merge_result/added_prediction/{}.jpg".format(file_name), add1)
index += 1
0
收藏
请登录后评论
paddleseg可以自定义backbone和分割网络,让backbone里面分别返回两个网络主干的特征(用列表储存),再在分割网络中分别处理就行
实在不行就自己写一个代码,backbone和解码器都可以从paddleseg中复制,只是不用到它这个框架而已