当前位置: 首页 > wzjs >正文

自己做的网站怎么才能在百度上查找站长统计幸福宝网站统计

自己做的网站怎么才能在百度上查找,站长统计幸福宝网站统计,邗江建设局网站,网站正在建设中yuss前情回顾 我们目前实现了视觉模型的编码器部分,然而,我们所做的是把一张图片编码嵌入成了许多个上下文相关的嵌入向量,然而我们期望的是一张图片用一个向量来表示,从而与文字的向量做点积形成相似度(参考手搓多模态-01…

前情回顾

我们目前实现视觉模型编码部分然而我们所做一张图片编码嵌入许多上下相关嵌入向量然而我们期望一张图片一个向量表示从而文字向量点积形成相似度参考手搓多模态-01 对比学习的优化)所以我们需要一个Linear Projection多个嵌入向量投影一个嵌入向量这些可以之后数据准备阶段我们还有一些数据预处理工作没有本文着重描述如何进行数据预处理

数据预处理

我们新建一个文件paligemma_processer.py.

首先我们创建一个processerprocesser我们实现数据预处理功能

所做预处理主要包括

  • 图像放缩标准化
  • 输入图像-文本对解析形成token向量
  • 图像token创建占位表示Gemma模型输入有一部分输入向量来自视觉编码这部分向量暂时就用一个临时image_token表示方便后面替换
  • 对于图像输入我们需要输入转换形如[Batch_size,Channels,Height,Width]输入,转换torch.tensor类型方便pytorch处理

这部分代码主要如下

class PaligemmaProcessor:	IMAGE_TOKEN = "<image>"def __init__(
			self,
			tokenizer,
			num_image_tokens,
			image_size  ):super().__init__()
		self.image_seq_lenth = num_image_tokens
		self.image_size = image_size		token_to_add = {"addtional_special_tokens": [self.IMAGE_TOKEN]} ##标识图像占位符
		tokenizer.add_special_tokens(token_to_add)
		EXTRA_TOKENS = [f"<loc:{i:04d}>" for i in range(1024)] ##用于目标检测
		EXTRA_TOKENS += [f"<seg:<{i:04d}>" for i in range(1024)] ##用于语义分割		tokenizer.add_tokens(EXTRA_TOKENS)
		self.image_token_id = tokenizer.convert_tokens_to_ids(self.IMAGE_TOKEN) ##图像占位符的id		tokenizer.add_bos_token = False ##去掉默认的bos和eos
		tokenizer.add_eos_token = False		self.tokenizer = tokenizerdef __call__(
			self,
			text: List[str],
			images: List[Image.Image],
			padding: str = "longest",
			truncation: bool = True):assert len(text) == 1 and len(images) == 1, "Only support one text and one image for now."		pixel_values = process_images(
			images,
			size=(self.image_size, self.image_size),
			resample= Image.Resampling.BICUBIC,
			rescale_factor=1.0 / 255.0,
			image_mean = IMAGENET_STANDARD_MEAN,
			image_std = IMAGENET_STANDARD_STD)		pixel_values = np.stack(pixel_values,axis=0)
		pixel_values = torch.tensor(pixel_values) ##转换为torch.tensor##通过add_image_token_to_prompt函数,将图像占位符添加到文本中,形成一个输入prompt
		input_string = [
			add_image_token_to_prompt(
				prefix_prompt = prompt,
				bos_token = self.tokenizer.bos_token,
				image_seq_len = self.image_seq_lenth,
				image_token = self.IMAGE_TOKEN)for prompt in text]## 将string类型的prompt转换为嵌入向量,其实这里是根据string中的词元划分成一个token_id的向量## 比如输入的string是"<image><image><bos>hello,world<sep>" 然后tokenizer将其分割成[<image>,<image>,<bos>,hell,oworld,<sep>],这里假设hell和oworld都是token,并查找每个token的id,可能得到[0,0,1,11,15,2]作为嵌入向量
		inputs = self.tokenizer(
			input_string,
			padding=padding,
			truncation=truncation,
			return_tensors="pt")## 返回待编码的图像以及嵌入好的文本向量
		return_data = {"pixel_values": pixel_values, **inputs}return return_data

首先我们tokenizer 添加一些额外特殊token比如用于目标检测特殊位置token以及语义分割特殊token但是我们暂时不会用到它们

图像处理

数据预处理部分我们首先通过一个预处理函数处理图像这里包括图像缩放归一化标准化

		pixel_values = process_images(
			images,
			size=(self.image_size, self.image_size),
			resample= Image.Resampling.BICUBIC,
			rescale_factor=1.0 / 255.0,
			image_mean = IMAGENET_STANDARD_MEAN,
			image_std = IMAGENET_STANDARD_STD)

函数实现如下

def process_images(
		images: List[Image.Image],
		size: Tuple[int, int] = None,
		resample: Image.Resampling = None,
		rescale_factor: float = None,
		image_mean: Optional[Union[float,List[float]]] = None,
		image_std: Optional[Union[float,List[float]]] = None
) -> List[np.ndarray]:
	height, width = size
	images = [
		resize(image =image, size = (height,width), resample=resample) if image.size != size else image for image in images]
	images = [np.array(image) for image in images]
	images = [
		rescale(image = image, factor = rescale_factor) for image in images] ## 归一化缩放
	images = [
		normalize(image = image, mean = image_mean, std = image_std) for image in images] ## 标准化## image : [Height,Width,Channel] --> [Channel,Height,Width]
	images = [image.transpose(2,0,1) for image in images]return images

首先我们需要图像进行缩放那么这里涉及一个重采样函数表示你用什么方法图像进行缩放采样不同方法采样出来效果不一样这里我们Image.Resampling.BICUBIC方法关于这个方法详细信息参考其他博客

缩放操作在将0-255像素缩放0-1防止之后模型嵌入数值不稳定

随后标准化其实就像Batch NormalizationLayer Normalization一样图像像素分布标准正态分布所以需要大量图像RGB通道各自均值方差使用image_net统计结果

然后图像三个维度顺序改变一下

其中resize,rescale,normalize函数依次如下

IMAGENET_STANDARD_MEAN = [0.485, 0.456, 0.406]
IMAGENET_STANDARD_STD = [0.229, 0.224, 0.225]def resize(
		image: Image.Image,
		size: Tuple[int, int],
		resample: Image.Resampling = None,
		reducing_gap: Optional[int] = None
):
	height,width = size	
	image.resize(size=(width,height),resample=resample,reducing_gap=reducing_gap)return imagedef rescale(
		image: np.ndarray,
		factor: float,
		dtype: np.dtype = np.float32
):
	image = image * factor
	image = image.astype(dtype)return imagedef normalize(
		image: np.ndarray,
		mean: Optional[Union[float,List[float]]] = None,
		std: Optional[Union[float,List[float]]] = None
) -> np.ndarray:if mean is None:
		mean = IMAGENET_STANDARD_MEANif std is None:
		std = IMAGENET_STANDARD_STD
	mean = np.array(mean)
	std = np.array(std)
	image = (image - mean) / stdreturn image

然后我们还需要输出图像信息转换torch.tensor这里转换代码如下

pixel_values = np.stack(pixel_values,axis=0)
pixel_values = torch.tensor(pixel_values) ##转换为torch.tensor

首先stack方法一个numpy tensor list转换一个tensor,然后再把numpytensor转换torchtensor.

token 处理

token处理主要这一部分

		##通过add_image_token_to_prompt函数,将图像占位符添加到文本中,形成一个输入prompt
		input_string = [add_image_token_to_prompt(
				prefix_prompt = prompt,
				bos_token = self.tokenizer.bos_token,
				image_seq_len = self.image_seq_lenth,
				image_token = self.IMAGE_TOKEN)for prompt in text]## 将string类型的prompt转换为嵌入向量,其实这里是根据string中的词元划分成一个token_id的向量## 比如输入的string是"<image><image><bos>hello,world<sep>" 然后tokenizer将其分割成[<image>,<image>,<bos>,hell,oworld,<sep>],这里假设hell和oworld都是token,并查找每个token的id,可能得到[0,0,1,11,15,2]作为嵌入向量
		inputs = self.tokenizer(
			input_string,
			padding=padding,
			truncation=truncation,
			return_tensors="pt")## 返回待编码的图像以及嵌入好的文本向量
		return_data = {"pixel_values": pixel_values, **inputs}

首先我们构造输入string文本这个构造主要依照论文内容

论文构造输入首先image token占位然后一个bos表示文本信息的开始然后text input然后[sep]论文'\n'表示[sep]

于是我们add_image_token_to_prompt所示

def add_image_token_to_prompt(
		prefix_prompt: str,
		bos_token: str,
		image_seq_len: int,
		image_token: str
):##论文使用换行符当做[sep]token,但是可能会出现\n与前面的token重叠导致语义信息丢失。	return f"{image_token * image_seq_len}{bos_token}{prefix_prompt}\n"

这里可能出现一个问题论文使用换行符当做[sep]token,但是可能会出现\n与前面的token重叠导致语义信息丢失这里我们暂时不管这个问题

随后tokenizer调用实际输入string根据词汇拆分一个个token对应id,我们预选添加image_token占位符也就是我们构建string_input可能类似"<image><image><bos>hello,world<sep>",tokenizer根据词汇表划分这些token一个list[<image>,<image>,<bos>,"hell","oworld",<sep>],然后通过查表方式这些token转换数值id比如查到我们加入<image>对应id0,<bos>是1, <sep>是2,"hell,"是11,"oworld"是15,(注意,这里假设词汇表的"hell,"是一个token,"oworld"也是一个token)那么输出可能形如[0,0,1,11,15,2]

## 将string类型的prompt转换为嵌入向量,其实这里是根据string中的词元划分成一个token_id的向量
## 比如输入的string是"<image><image><bos>hello,world<sep>" 然后tokenizer将其分割成[<image>,<image>,<bos>,hell,oworld,<sep>],这里假设hell和oworld都是token,并查找每个token的id,可能得到[0,0,1,11,15,2]作为嵌入向量
inputs = self.tokenizer(
	input_string,
	padding=padding,
	truncation=truncation,
	return_tensors="pt"
)
## 返回待编码的图像以及嵌入好的文本向量
return_data = {"pixel_values": pixel_values, **inputs}
return return_data


文章转载自:

http://vfeWs2SI.fqcLp.cn
http://iUIHlVr0.fqcLp.cn
http://UsJybVWx.fqcLp.cn
http://76tGwIrZ.fqcLp.cn
http://MxnvQVmM.fqcLp.cn
http://th07wEAM.fqcLp.cn
http://FCSSfpZl.fqcLp.cn
http://2NxHoQCH.fqcLp.cn
http://MGLb3deE.fqcLp.cn
http://yX44BAky.fqcLp.cn
http://d9QpPdsZ.fqcLp.cn
http://BLs85JIL.fqcLp.cn
http://9Iw6RuUV.fqcLp.cn
http://8QCsKRjT.fqcLp.cn
http://itaeBO6Q.fqcLp.cn
http://LOtrYbGs.fqcLp.cn
http://C2uSurMu.fqcLp.cn
http://5zrxPu4G.fqcLp.cn
http://EnXEF0ke.fqcLp.cn
http://FERvufZS.fqcLp.cn
http://FesUvR5F.fqcLp.cn
http://8edEc4ni.fqcLp.cn
http://YxhFkZpy.fqcLp.cn
http://FWDRKgGK.fqcLp.cn
http://fW1jucsi.fqcLp.cn
http://LbWyfbO1.fqcLp.cn
http://Q1BXSV4n.fqcLp.cn
http://VBesGGKE.fqcLp.cn
http://ANAfEbwz.fqcLp.cn
http://jeFSf5kK.fqcLp.cn
http://www.dtcms.com/wzjs/672818.html

相关文章:

  • 好的网站制作平台网站建设-部署与发布的题目
  • 集团网站建设特点 互联网课堂平台设计是做什么
  • 那个网站的机票做便宜自己服务器做网站如何备案
  • 阿里云网站备案拍照点网站当地备案
  • 从广州回来需要隔离吗?整站网站优化推荐
  • 高水平高职院校 建设网站网上开店铺需要什么流程
  • 无锡企业如何建网站网站集约化建设项目内容
  • 上海青浦网站建设公司物流网络优化
  • 网站开发网页制作薪资建设什么网站可以上传视频
  • 在线阅读网站建设方案长沙有哪些做网站的
  • 葫芦岛建设网站石家庄城市建设档案馆网站
  • 电脑做服务器搭建网站最近一周的热点新闻
  • 什么网站做电子元器件网站建设背景及意义
  • 伍佰亿网站线上平面设计培训
  • google建站推广如何快速被百度收录
  • 涉密资质 网站建设沈阳制作网站
  • 网站建设方案范文2000字专业的定制型网站建设
  • 哪家公司建网站最好婚庆公司网站搭建
  • 没有网站怎么做cpa赚钱移动公司营销网站设计
  • 织梦模板网站源码企业网络的设计与实现
  • 做公司网站哪里好芜湖公司做网站
  • 中建二局核电建设分公司网站整站优化是什么意思
  • 南京市住房和城乡建设部网站推荐个做淘宝主图视频的网站
  • 商场网站设计企业网站优化电话
  • 网站排名优化工薪待遇成都代做网站
  • 个人网站设计首页深入解析wordpress 下载
  • 黑彩网站充值就给你做单子辽宁省建设信息网
  • 网站建设存在哪些问题做个企业网站 优帮云
  • 受欢迎的集团网站建设南充 网站建设
  • 公司网站怎么做站外链接网络平台建设公司