gradio组件
输入组件-输出组件
输入输出组件
多输入和多输出组件
gr.State是一个不可见的组件,目的是在后台存储一些变量方便访问和交互
Block components
Textbox : interactive interactive=True
Event listener
change() event listener play() event listener
method input output
multiple input components pass data to the function
Function-method
single data flow
many data flows multi-step ( pipeline
.select() can be type hinted by a gradio.SelectData argument.
函数:
生成器函数,常规函数
全局变量
Gradio支持的另一种数据持久性是会话状态,数据在一个页面会话中的多次提交中持久存在
在添加输入和输出时添加state组件
gr.update(visible = state), state
网络设置
通过设置server_name=‘0.0.0.0’(表示使用本机ip),server_port(可不改,默认值是7860)。那么可以通过本机ip:端口号在局域网内分享应用。
# show_error为True表示在控制台显示错误信息。
demo.launch(server_name='0.0.0.0', server_port=8080, show_error=True)
算法
box = box * torch.Tensor([W, H, W, H])
### 中心宽高(xywh)格式的坐标数据,所以把它转换成xyxy格式(左上角点和右下角点)的坐标数据
# from xywh to xyxy
box[:2] -= box[2:] / 2
box[2:] += box[:2]
(0,0)
|------ x->
|
|
|
y
cv2.rectangle() 函数来给图像进行框选 这个函数中的pt1和pt2参数指的就是要框选的图像的左上角点和右下角点
def xywh2xyxy(x):
# Convert nx4 boxes from [x, y, w, h] to [x1, y1, x2, y2] where xy1=top-left, xy2=bottom-right
y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x)
y[:, 0] = x[:, 0] - x[:, 2] / 2 # top left x
y[:, 1] = x[:, 1] - x[:, 3] / 2 # top left y
y[:, 2] = x[:, 0] + x[:, 2] / 2 # bottom right x
y[:, 3] = x[:, 1] + x[:, 3] / 2 # bottom right y
return y
# from xywh to xyxy
box[:2] -= box[2:] / 2
box[2:] += box[:2]
Intersection over Minimum (IoM ) is better suited than Intersection over Union (IoU )
IoU(Intersection over Union,交并比)和
IoM(Intersection over Minimum,交最小比)
IoM是交集面积除以目标边界框和真实边界框中面积较小的那个
命令功能
np.multiply(a,b)
维度一致 :a和b矩阵或数组对应位置相乘
实现对应元素相乘,有2种方式,一个是np.multiply(),另外一个是*
向量元素对应位置相乘:np.multiply(a,b)等价于a*b
向量的内积,即点乘:np.dot(a,b)等价于a@b
向量的外积,即叉乘:np.cross(a,b)
矩阵点乘,即对应元素相乘:np.multiply(a,b)等价于a*b 矩阵点乘要求两矩阵为同型矩阵,即两个矩阵的行数与列数都相同
矩阵叉乘,即矩阵乘法规则运算:np.dot(a,b)等价于a@b 矩阵叉乘中, 前者的列数必须和后者的行数相等
einsum 专门用于张量的计算,比如对数组进行乘法、取和、矩阵乘法、计算内积和外积等。
和其他张量工具相比,einsum的优势在于支持对不同字母进行灵活的指定和重组,同时还可以在计算之前对数组进行各种操作,以适应各种计算需求。
import numpy as np
out = np.clip(a, a_min, a_max, out=None)
inter = np.clip(xy_max-xy_min, a_min=0, a_max=np.inf)
Numpy 的 prod(~) 计算输入数组中值的乘积
numpy是没有属性clamp的。能替代pytorch的clamp的 == numpy的clip
torch.clamp()
这个函数其实就是对张量进行上下限的限制,超过了指定的上限或是下限之后,该值赋值为确定的界限的值
torch.prod()函数对这个张量进行操作,计算所有元素的乘积
dot可以用于numpy中的多维矩阵间的矩阵相乘,torch中的多维使用mm
维度修改函数
numpy
中增加维度用np.expand_dims(x, axis)函数
numpy中的squeeze 函数 从数组的形状中删除单维度条目,即把shape中为1的维度去掉,相当于减少维度
arr_1 = numpy.squeeze(arr, axis = None)
arr表示输入的数组;
axis的取值可为None或0,默认为None,表示删除所有shape为1的维度。axis为0表示删除 一层 shape为1的维度
unsqueeze或view:为数据某一维的形状补1
expand或expand_as:重复数组,实现当输入的数组的某个维度的长度为1时,计算时沿此维度复制扩充成一样的形状
注:repeat与expand功能相似,
但是repeat会把相同数据复制多份,而expand不会占用额外空间,只会在需要的时候才扩充,可以极大地节省内存
np.broadcast_to函数将数组广播到新形状。
numpy.broadcast_to(array, shape, subok=False)[source]
torch:
开辟或删除维度
tensor.unsqueeze(dim=)从第dim维上开拓一个新的维度
tensor.squeeze()将所有长度为1的维度删除
torch.prod(input, dim, keepdim=False, *, dtype=None) → Tensor
将 dim 压缩(请参见 torch.squeeze() ),从而使输出张量减少1个维度。
input(Tensor)–输入张量。
dim(int)–缩小的尺寸。
keepdim(bool)–输出张量是否保持 dim
将两个不同形状的tensor广播成相同形状 torch.broadcast_tensor(a,b)
# [N,2] -> [N,1,2] -> [N,M,2] # [M,2] -> [1,M,2] -> [N,M,2]
A = boxes0.shape[0]
B = boxes1.shape[0]
xy_max = np.minimum(boxes0[:, np.newaxis, 2:].repeat(B, axis=1), np.broadcast_to(boxes1[:, 2:], (A, B, 2)))
numpy.repeat(a, repeats, axis=None);
np.newaxis的作用是:在当前位置,插入一个新维度。np.newaxis 在使用和功能上等价于 None,其实就是 None 的一个别名
Pillow库
Pillow库最常用的两个模块是Image和ImageDraw
PIL.ImageDraw.Draw.rectangle(xy, fill=None, outline=None)
plt.scatter(x, y, s=area, c=colors, alpha=0.5, marker=",")
alpha=0.5 表示不透明度为 0.5
s=size :设置气泡的大小,也就是将"sepal length (cm)"列的数值大小,当作气泡的面积大小,或者说半径大小
其中:x,y,s,c维度一样就能成
参考
numpy和torch函数使用 https://blog.csdn.net/yangjinyi1314/article/details/127119717
https://github.com/pytorch/vision/blob/main/torchvision/ops/boxes.py
标签:box,None,Python,torch,np,维度,numpy
From: https://www.cnblogs.com/ytwang/p/17989802