前言:很多做目标检测的新手,拿到数据集就迫不及待想找一个算法来跑它,内心先爽一把,包括我在内也是这样,其实样的做法不合理,我们应该先对数据集进行一些分析,找出数据集的特点,有针对性的进行检测,首先要关注的是图片大小,这个相当重要,假设测试文件来源于医疗遥感类检测任务图像,这些文件可能是50005000甚至1000010000,这时就需要对图片进行resize,缩小图片,然后还要根据模型复杂程度与显存大小来确定图片大小,以免显存不足。通过绘制图片散点图,可以直观看出图片大小分布,整体上把握数据大小,如果散点图集中在左下角,说明图片比较小,无须做太多处理。
获取图片大小,并绘制成散点图:
import time
import matplotlib.image as mping
import os
import matplotlib.pyplot as plt
#获取单个图片的大小
def get_Image_Size(image_Path):
#print("获取图片尺寸大小:"+ image_Path)
try:
lena = mping.imread(image_Path)
except:
time.sleep(0.5)
print("读图出错,重读")
getPngSize(image_Path)
size = tuple(lena.shape)
#print(size)
return size[1],size[0]
#遍历目标文件夹下图片的大小,保存到list中
def get_dir_list(image_path):
w_list = []
h_list = []
files = os.listdir(image_path)
for i in files:
if i.endswith('.jpg'):
w,h = get_Image_Size(image_path + i)
#print(w,h)
w_list.append(w)
h_list.append(h)
return w_list,h_list
#画散点图
def plot_pic(w_list,h_list):
fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)
ax1.set_title('DataSets\' Size Analysis')
ax1.scatter(w_list, h_list, s=5, c='k', marker='.')
plt.show()
if __name__ == '__main__':
image_path = "./13/" #目标文件夹,也就是图片存放的目录
w_list,h_list = get_dir_list(image_path)
plot_pic(w_list,h_list)
运行结果:
上图横轴表示图片的宽度,纵轴表示图片的高度,可以看出大部分数据处于中部偏左下角,少部分数据比较大,我们可以对少部分大小“超标”的图片进行resize,缩小图片。