Я думаю, что прогноз в порядке. Вы ожидаете что-то подобное?
![prediction result](https://i.stack.imgur.com/Sn8lT.png)
Этот результат основан на опубликованном вами прогнозном изображении.
Чтобы проверить, как идут дела, попробуйте следующее:
interp = SegmentationInterpretation.from_learner(learn)
mean_cm, single_img_cm = interp._generate_confusion()
df = interp._plot_intersect_cm(mean_cm, "Mean of Ratio of Intersection given
True Label")
i = 0 #Some image index
df = interp._plot_intersect_cm(single_img_cm[i], f"Ratio of Intersection given True Label, Image:{i}")
interp.show_xyz(i)
Основано на документах fast.ai
Что касается результата прогнозирования, то это изображение основано на значениях ваших классов. Если вы возьмете значения (r, g, b) из этого изображения, у вас будет (r, g, b) == 0
для фона и (r, g, b) == 1
для краев. Если у вас есть больше классов, следующий будет как (r, g, b) == 2
и так далее.
Так что вы можете просто раскрасить свой результат прогноза. Я сделал это с помощью OpenCV, что-то вроде этого:
frame = cv2.imread("yourPredictionHere.png",1)
frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
for x in range(384): #width based on the size of your image.
for y in range(384): #height based on the size of your image.
b, g, r = frame[x, y]
if (b, g, r) == (0,0,0): #background
frame[x, y] = (0,0,0)
elif (b, g, r) == (1,1,1): #edges
frame[x, y] = (85,85,255)
cv2.imwrite("result.png",frame)
С уважением!