前言:很多做目标检测的新手,拿到数据集就迫不及待想找一个算法来跑它,内心先爽一把,包括我在内也是这样,其实样的做法不合理,我们应该先对数据集进行一些分析,找出数据集的特点,有针对性的进行检测,首先要关注的是图片大小,这个相当重要,假设测试文件来源于医疗遥感类检测任务图像,这些文件可能是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,缩小图片。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐