这篇文章所写的内容主要是基于Context-Aware_Crowd_Counting-pytorch
的代码写的
1.在深度学习领域,会训练出一个模型,在使用训练好的模型时,其中有一种保存的模型文件格式叫.npy
2.os.path.join()函数:连接两个或更多的路径名组件
1.如果各组件名首字母不包含’/’,则函数会自动加上
2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃
3.如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾
3.np.newaxis的作用是增加一个维度。
4.cv2.resize()
import cv2 as cv
# 读入原图片
img = cv.imread('test.jpg')
# 打印出图片尺寸
print(img.shape)
# 将图片高和宽分别赋值给x,y
x, y = img.shape[0:2]
# 显示原图
cv.imshow('OriginalPicture', img)
# 缩放到原来的二分之一,输出尺寸格式为(宽,高)
img_test1 = cv.resize(img, (int(y / 2), int(x / 2)))
cv.imshow('resize0', img_test1)
cv.waitKey()
# 最近邻插值法缩放
# 缩放到原来的四分之一
img_test2 = cv.resize(img, (0, 0), fx=0.25, fy=0.25, interpolation=cv.INTER_NEAREST)
cv.imshow('resize1', img_test2)
cv.waitKey()
cv.destroyAllWindows()
my_dataset.py中
if self.gt_downsample>1: # to downsample image and density-map to match deep-model.
ds_rows=int(img.shape[0]//self.gt_downsample)
ds_cols=int(img.shape[1]//self.gt_downsample)
#ds_cols*self.gt_downsample,ds_rows*self.gt_downsample为缩放系数
img = cv2.resize(img,(ds_cols*self.gt_downsample,ds_rows*self.gt_downsample))
img=img.transpose((2,0,1)) # convert to order (channel,rows,cols)
gt_dmap=cv2.resize(gt_dmap,(ds_cols,ds_rows))
gt_dmap=gt_dmap[np.newaxis,:,:]*self.gt_downsample*self.gt_downsample
img_tensor=torch.tensor(img,dtype=torch.float)
img_tensor=transforms.functional.normalize(img_tensor,mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
gt_dmap_tensor=torch.tensor(gt_dmap,dtype=torch.float)
不太理解,这个downsample
img = cv2.resize(img,(ds_colsself.gt_downsample,ds_rowsself.gt_downsample))为什么这么操作。
pytorch visdom
使用Visdom进行可视化
vis.line(…)#画折线图
vis.image(…)#可视化其中的一幅图像
函数功能: 匹配所有的符合条件的文件,并将其以list的形式返回。
glob.glob函数:
glob模块被用来查找符合特定规则的文件路径名。跟使用windows下的文件搜索差不多。glob.glob函数的参数是字符串,查找文件只用到三个匹配符:"", “?”, “[ ]”。其中,"“表示匹配任意字符串,”?" 匹配任意单个字符, “[ ]” 匹配指定范围内的字符,如:[0-9] 与 [a-z] 表示匹配 0-9 的单个数字与 a-z 的单个字符。
import glob
#获取指定目录下的所有图片
print(glob.glob(r"C:/Users/zhf/Desktop/flower/flower_photos/daisy/*.jpg"))
python replace()方法
Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
语法:str.replace(old, new[, max])
old -- 将被替换的子字符串。
new -- 新字符串,用于替换old子字符串。
max -- 可选字符串, 替换不超过 max 次
io.loadmat
mat=io.loadmat(img_path.replace('.jpg','.mat').replace('images','ground_truth').replace('IMG_','GT_IMG_'))
#下面是mat的格式内容。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lTBCCAVd-1622548469169)(C:\Users\haojie\AppData\Roaming\Typora\typora-user-images\image-20210601150952140.png)]
mat_dict:字典
以变量名作为键,并以加载的矩阵作为值的字典。
eg1:
>>> sorted(mat_contents.keys())
['__globals__', '__header__', '__version__', 'testdouble']
>>> mat_contents['testdouble']
array([[0. , 0.78539816, 1.57079633, 2.35619449, 3.14159265,
3.92699082, 4.71238898, 5.49778714, 6.28318531]])
eg2:
>>> matstruct_fname = pjoin(data_dir, 'teststruct_7.4_GLNX86.mat')
>>> matstruct_contents = sio.loadmat(matstruct_fname)
>>> teststruct = matstruct_contents['teststruct']
>>> teststruct.dtype
dtype([('stringfield', 'O'), ('doublefield', 'O'), ('complexfield', 'O')])
dirname命令去除文件名中的非目录部分,删除最后一个“\”后面的路径,显示父目录。 语法:dirname [选项] 参数
>>> from scipy import spatial
>>> x, y = np.mgrid[0:5, 2:8]
>>> tree = spatial.KDTree(list(zip(x.ravel(), y.ravel())))
>>> tree.data
array([[0, 2],
[0, 3],
[0, 4],
[0, 5],
[0, 6],
[0, 7],
[1, 2],
[1, 3],
[1, 4],
[1, 5],
[1, 6],
[1, 7],
[2, 2],
[2, 3],
[2, 4],
[2, 5],
[2, 6],
[2, 7],
[3, 2],
[3, 3],
[3, 4],
[3, 5],
[3, 6],
[3, 7],
[4, 2],
[4, 3],
[4, 4],
[4, 5],
[4, 6],
[4, 7]])
>>> pts = np.array([[0, 0], [2.1, 2.9]])
>>> tree.query(pts)
(array([ 2. , 0.14142136]), array([ 0, 13]))
返回值是:离查询点最近的两个点的距离和相应的索引。(array([ 2. , 0.14142136])是距离,array([ 0, 13]))是索引。
python报错:‘list’ object has no attribute ‘shape’
如何做呢:np.shape(list)这样就可以了。
import numpy as np
a = np.array([np.arange(12),np.arange(12,24)])
>>>print a
[[ 0 1 2 3 4 5 6 7 8 9 10 11]
[12 13 14 15 16 17 18 19 20 21 22 23]]
>>>print a[0][6]
6
>>>print a[0,6]
6
np.random.random((100, 50))
#上方代表生成100行 50列的随机浮点数,浮点数范围 : (0,1)