再进行精度评估时使用了这个包的
from utils.utils_metrics import compute_mIoU
尝试:
安装utils包
去anaconda的powershell中输入安装指令
pip install
但貌似不是该头文件
还是报错找不到该文件
因此只能同级引用
引用方法见此博文
python引入其他文件夹里的py文件的方法
因为我有该util文件夹
直接放在运行程序里
也是多新建了一个_init_文件就成功运行了
不能文件夹套文件夹
不然会报错找不到该文件的
No such file or directory: ‘C:/Users/Administrator/Desktop/DeepGlobe-Road-Extraction-link34-py3/submits/log01_link34/235133_mask.png’
这个问题我分析了一下是因为下划线的问题,导致无法对应起来图片
预测之后新生成的图片名字是这样的
而real里面真实图片是这样的
这两者看似名字一样
实际上下划线长度不同
哭了
生成了半天
都没法比较。。。
源代码中test.py
最后一句:
cv2.imwrite(target+name[:-7]+'_mask.png',mask.astype(np.uint8))
改成
cv2.imwrite(target+name[:-7]+'mask.png',mask.astype(np.uint8))
就没有两个下划线了
这下终于正常了
return np.bincount(n * a[k].astype(int) + b[k], minlength=n ** 2).reshape(n, n) ValueError: cannot reshape array of size 256 into shape (2,2)
现在又出现了问题
通过我的小同伴的帮助,这个问题主要是函数没了解清楚
np.bincount()用法介绍
因为我生成的像素是0,255
所以是256大小的数字
因此会报错
为了计算需要将图片都化成0,1的图像
可以使用下面的代码
##除以255
import os
from PIL import Image
import cv2
import numpy as np
path = 'xxxxx'
savedpath = 'xxxxx'
filelist = os.listdir(path)
for item in filelist:
im = Image.open(path + item) #打开图片
im = cv2.imread(path + item)
im2=im/255
cv2.imwrite(savedpath + item, im2)
print('item of %s is saved '%(item))
在这里,我想直接在读取图像数组时除以255即可
但是类型转换出现了问题
a=label.flatten()/255
print(a)
a.astype(np.int64)
b=pred.flatten()/255
b.astype(np.int64)
hist += fast_hist(a, b,num_classes)
这段代码报错
TypeError: Cannot cast array data from dtype(‘float64’) to dtype(‘int64’) according to the rule ‘safe’
这里生成的a数组[0. 0. 0. … 0. 0. 0.]
但需要的是[0 0 0 … 0 0 0]
这两者是不同的
于是使用循环来处理更保险:
a=label.flatten()
for i in range(len(a)):
a[i]=a[i]/255
print(a)
b=pred.flatten()
for i in range(len(b)):
b[i]=b[i]/255
printa可以发现数组是[0 0 0 … 0 0 0]
程序正常运行啦!
我修改后的代码如下
这样就不用生成文件夹来储存0,1的图像啦
到现在,全部流程已经跑通
开始进行测试:
试跑了160个测试样本(都是训练的样本)
算出结果为
现在试试3221张另一个数据集的测试数据,对其进行预测
开始时间:
2022年1月17日19:48
20:13跑了大概1000张样本
25min一千张
目测3000张需要75min
21:03能跑完
22:57开始跑精度评估miou程序
2022年1月18日11:03已经跑完
结果如图:
具体类别的比例因为比较小
所以算下来的miou就不是很高
但这里可以看总的miou来判断精度
两个程序之前是单独运行的
现在程序跑通
把两个程序合并
进行完predict之后自动进行miou计算
这里继续进行尝试
试试用train做训练样本
还使用train来predict看看效果怎么样
不知道这样做是不是合理的
但是想满足一下我的好奇心
看看他的学习效果
3005个需要预测的样本
记录一下预测以及精度计算时间:
2022年1月18日11:54开始
2022年1月18日21:21预测+精度计算结束