VQA-object_counting代码项目分析

VQA:VQA项目 VQA VQA项目 立即下载

0. 写在前面

本文主要介绍《LEARNING TO COUNT OBJECTS IN NATURAL IMAGES FOR VISUAL QUESTION ANSWERING》的代码项目,也就是别人的代码加上自己的注释。。。
博客地址:https://blog.youkuaiyun.com/snow_maple521/article/details/109190431
论文地址:https://github.com/Cyanogenoid/vqa-counting
项目地址:https://openreview.net/pdf?id=B12Js_yRb

1. 加载数据

由于仅仅介绍vqa2的部分,所以toy的实验,就不介绍了。

1.1 下载数据集

本节是项目数据集的下载,这些数据集需要提前下好,当然有Linux的环境可以直接命令行下载。

  • 图像特征_trainval + 图像特征_test2015:采用的是自底向上的注意力提取的特征,它的论文在这,论文主要是用Visual Genome中对象和属性标注(关于Visual Genome介绍:知乎,优快云)。这些预训练特征可直接在项目中下载,,不需要自己再重新训练。它分为每张图有10-100个自适应特征,还有一种是一张图中有36个固定特征,论文直接采用的是第二种(论文直接想利用注意力信息进行计数) 采用preprocess-features.py生成genome-trainval.h5文件存放图像特征相关数据。
  • 问题特征:问题特征的提取,主要采用的是self.embedding = nn.Embedding(embedding_tokens, embedding_features, padding_idx=0)

2. 加载数据集

加载数据集主要在train.py中,调用data.get_loader()
函数如下:

def get_loader(train=False, val=False, test=False):
    """ Returns a data loader for the desired split """
    #先是调用VQA类处理VQA数据集,图像特征调用的是preprocessed_trainval_path中的genome-trainval.h5文件
    split = VQA(
        utils.path_for(train=train, val=val, test=test, question=True),
        utils.path_for(train=train, val=val, test=test, answer=True),
        config.preprocessed_trainval_path if not test else config.preprocessed_test_path,
        answerable_only=train,
        dummy_answers=test,
    )
    #采用loader加载数据
    loader = torch.utils.data.DataLoader(
        split,
        batch_size=config.batch_size,
        shuffle=train,  # only shuffle the data in training
        pin_memory=True,
        num_workers=config.data_workers,
        collate_fn=collate_fn,
    )
    return loader

图如下:数据集中已将答案表示和问题表示变成向量表示行式,红色注释部分,其中coco_id_to_index是将id变成索引方便再h5文件中获取相应特征。
在这里插入图片描述
具体变成向量表示的代码如下:

    def _encode_question(self, question):
        """ Turn a question into a vector of indices and a question length """
        vec = torch.zeros(self.max_question_length).long()
        for i, token in enumerate(question):
            index = self.token_to_index.get(token, 0)
            vec[i] = index
        return vec, len(question)

    def _encode_answers(self, answers):
        """ Turn an answer into a vector """
        # answer vec will be a vector of answer counts to determine which answers will contribute to the loss.
        # this should be multiplied with 0.1 * negative log-likelihoods that a model produces and then summed up
        # to get the loss that is weighted by how many humans gave that answer
        answer_vec = torch.zeros(len(self.answer_to_index))
        for answer in answers:
            index = self.answer_to_index.get(answer)
            if index is not None:
                answer_vec[index] += 1
        return answer_vec
  • VQA类中的__getitem__(self,item)方法
    在项目调用run(net, train_loader, optimizer, scheduler, tracker, train=True, prefix='train', epoch=i)函数时,模型就开始调用此__getitem__来获取单个条目的数据,
    def __getitem__(self, item):
        if self.answerable_only:
            item = self.answerable[item]
        q, q_length = self.questions[item]
        if not self.dummy_answers:
            a = self.answers[item]
        else:
            # just return a dummy answer, it's not going to be used anyway
            a = 0
        image_id = self.coco_ids[item]
        v, b= self._load_image(image_id) #根据索引获取h5文件中相应的图像特征和边框
        # since batches are re-ordered for PackedSequence's, the original question order is lost
        # we return `item` so that the order of (v, q, a) triples can be restored if desired
        # without shuffling in the dataloader, these will be in the order that they appear in the q and a json's.
        return v, q, a, b, item, q_length

其中数据包括:v, b= self._load_image(image_id)注意此image_id真正图片id,

以下以item=28791为例
当item=28791,经过索引id获得图image_id=111864,问题对应三个:
{ “image_id”: 111864,
“question”: “What are the colors of the leaves?”, “question_id”: 111864000},
{“image_id”: 111864,
“question”: “Is anyone wearing a tie?”,
“question_id”: 111864001},
{“image_id”: 111864,
“question”: “Does the man on the right need to shave?”,
“question_id”: 111864002}
不懂:为啥同一个id多个问题时,只取了第一个问题后面的问题后来有没有被取到过???

例如此次传来的item是28791,image_id=111864,再将次传给load_image获取相应索引的h5文件中的图像和边框特征,传给v,b

 def _load_image(self, image_id):
        """ Load an image """
        if not hasattr(self, 'features_file'):
            # Loading the h5 file has to be done here and not in __init__ because when the DataLoader
            # forks for multiple works, every child would use the same file object and fail
            # Having multiple readers using different file objects is fine though, so we just init in here.
            self.features_file = h5py.File(self.image_features_path, 'r')
        # if image_id not in self.coco_id_to_index:
        #     return torch.from_numpy(np.zeros((1024,3,3))), torch.from_numpy(np.zeros((8))), torch.from_numpy(np.zeros((8)))
        index = self.coco_id_to_index[image_id]
        img = self.features_file['features'][index]
        boxes = self.features_file['boxes'][index]
        return torch.from_numpy(img).unsqueeze(1), torch.from_numpy(boxes)

函数中得到的boxes[4,100]的值如下,boxes的值36上就0了:
在这里插入图片描述

得到的img[1024,100]的值部分如下(72上就0了)
在这里插入图片描述
由于函数中返回值经过torch.from_numpy(img).unsqueeze(1)所有v的维度为【1024,1,100】b【4,100】,

至此,getitem返回值如下:
如下b:
在这里插入图片描述
v
在这里插入图片描述
q 返回的item=28791的问题向量= tensor([ 3, 4, 1, 128, 8, 1, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
a 返回item= 28791的答案向量 = tensor([0., 0., 0., …, 0., 0., 0.])
q_length = 7
item = 28791

3.文本特征嵌入

此类主要是对问题向量进行词向量嵌入embedding,注意,此处只拿一个举,其实batch_size=5,传入的q维度应该为[5,23],embed应该是[5,23,300] 返回的应该是[5,1024]
传入的是q [23] = tensor([ 3, 4, 1, 128, 8, 1, 339, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0])
输出的是embed [23,300]= [
[ 0.0218, 0.0205, -0.0109, …, 0.0073, -0.0034, -0.0200],
[-0.0223, 0.0041, -0.0100, …, -0.0057, -0.0031, -0.0197],
[-0.0002, -0.0067, -0.0175, …, -0.0083, 0.0122, -0.0127],
…,
[-0.0102, -0.0095, 0.0112, …, -0.0233, -0.0214, 0.0092],
[-0.0102, -0.0095, 0.0112, …, -0.0233, -0.0214, 0.0092],
[-0.0102, -0.0095, 0.0112, …, -0.0233, -0.0214, 0.0092]]
经过 tanh和pack,squeeze之后,该模型返回【1,1024】:
[ 2.3714e-03, 9.1479e-03, 9.7701e-04, …, -1.2479e-02,
-2.6736e-03, -1.1262e-02],

class TextProcessor(nn.Module):
    def __init__(self, embedding_tokens, embedding_features, lstm_features, drop=0.0):
        """
        embedding_tokens:问题中所有词,10571
        embedding_features:嵌入特征维度,300
        lstm_features:问题特征维度:1024
        """
        super(TextProcessor, self).__init__()
        self.embedding = nn.Embedding(embedding_tokens, embedding_features, padding_idx=0)
        self.drop = nn.Dropout(drop)
        self.tanh = nn.Tanh()
        self.lstm = nn.GRU(input_size=embedding_features,
                           hidden_size=lstm_features,
                           num_layers=1)
        self.features = lstm_features

        self._init_lstm(self.lstm.weight_ih_l0)
        self._init_lstm(self.lstm.weight_hh_l0)
        self.lstm.bias_ih_l0.data.zero_()
        self.lstm.bias_hh_l0.data.zero_()

        init.xavier_uniform_(self.embedding.weight)

    def _init_lstm(self, weight):
        for w in weight.chunk(3, 0):
            init.xavier_uniform_(w)

    def forward(self, q, q_len):
        embedded = self.embedding(q)
        tanhed = self.tanh(self.drop(embedded)) 
        packed = pack_padded_sequence(tanhed, q_len, batch_first=True)
        _, h = self.lstm(packed)
        return h.squeeze(0)

4.net网络中图像特征计算

v = v / (v.norm(p=2, dim=1, keepdim=True) + 1e-12).expand_as(v)由于实现提取好图像特征了,因此不需要再进行提取,【5,1024,1,100]
在这里插入图片描述

5.计算问题词向量和图像特征之间的软注意力特征

由3,4获得的词向量嵌入q[5,1024]和图像嵌入v[5,1024,1,100]之后传入到a = self.attention(v, q)获得融合了两个模态的注意力特征图 返回给a[5,2,1,100]。代码如下:

class Attention(nn.Module):
    def __init__(self, v_features, q_features, mid_features, glimpses, drop=0.0):
        #1024,1024,512,1
        super(Attention, self).__init__()
        self.v_conv = nn.Conv2d(v_features, mid_features, 1, bias=False)  # let self.lin take care of bias
        self.q_lin = nn.Linear(q_features, mid_features)
        self.x_conv = nn.Conv2d(mid_features, glimpses, 1)

        self.drop = nn.Dropout(drop)
        self.relu = nn.ReLU(inplace=True)
        self.fusion = Fusion()

    def forward(self, v, q):
        '''
        v:[5,1024,1,100]
        q:[5,1024]
        '''
        q_in = q 
        v = self.v_conv(self.drop(v))
        q = self.q_lin(self.drop(q))
        q = tile_2d_over_nd(q, v)
        x = self.fusion(v, q) 
        x = self.x_conv(self.drop(x)) #5,2,1,100
        return x

a = self.attention(v, q)[5,2,1,100]后的a的值部分如下
在这里插入图片描述
由于论文的创新之处在于不用原来的图像和问题特征进行对象计数,而是利用注意力特征信息来进行计数,所以接下来就是利用。
经过v=apply_attention(v,a)获取图像特征v[5,2048]如下:
在这里插入图片描述

def apply_attention(input, attention):
    """ 
    在输入上应用任意数量的注意图。除了dim=1之外,注意图必须在所有维度上都有相同的大小
    """
    n, c = input.size()[:2]
    glimpses = attention.size(1)

    '''因为我们不需要关心它们是如何排列的,所以将空间调平到第三层'''
    input = input.view(n, c, -1)
    attention = attention.view(n, glimpses, -1)
    s = input.size(2)

'''对每个注意力图分别应用一个softmax
因为softmax只接受2d输入,所以我们必须将前两个维度折叠在一起
以便分别规范化每个瞥见'''
    attention = attention.view(n * glimpses, -1)
    attention = F.softmax(attention, dim=1)

    '''通过创建一个新的dim来平铺两个张量来应用加权'''
    target_size = [n, glimpses, c, s]
    input = input.view(n, 1, c, s).expand(*target_size)
    attention = attention.view(n, glimpses, 1, s).expand(*target_size)
    weighted = input * attention
   '''只对空间维度求和'''
    weighted_mean = weighted.sum(dim=3, keepdim=True)
    '''此时的形状为(n,瞥见,c, 1)'''
    return weighted_mean.view(n, -1) #n,c*瞥见数*1 = 2*1024=2048 返回[5,2048]

接着找出第一张注意力图(有2个瞥见)选第一个,这里是计数组件的地方,a1 =a[:, 0, :, :].contiguous().view(a.size(0), -1)这里的a[5,2,1,100]所以
a1=[5,100]
在这里插入图片描述

6. 计数组件

将5中获得的a1注意力图与边界框b,传个组件模型,就可以获得组件计数。具体如下:
将上面获得的a1=[5,100]与 b[5,4,100]传给count = self.counter(b, a1)
b[5,4,100]的值如下:
在这里插入图片描述

代码如下


class Counter(nn.Module):
    """ 
    计数组件
    从每个边界框的一组边界框和一组分数中计算对象的数量
    """

    def __init__(self, objects, already_sigmoided=False):
        """
        objects:对象数 5
        already_sigmoided:是否已经归一化,false 没有
        """
        super().__init__()
        self.objects = objects  # 10
        self.already_sigmoided = already_sigmoided
        self.f = nn.ModuleList([PiecewiseLin(16) for _ in range(16)]) #f赋值模型列表,PiecewiseLin 16个这个模型 16个分段函数

    def forward(self, boxes, attention):
        """
        注意权重和边界盒的前向传播产生计数特征
        “boxes”必须是一个形状张量(n, 4, m), 4个通道按照这个顺序包含左上角的x和y坐标以及右下角的x和y坐标。
        “attention”必须是一个形状张量(n, m)。如果already_sigmoided设置为真,则每个值应该在[0,1],但是如果already_sigmoided设置为假,则没有任何限制。
        如果对应的boundign框是相关的,这个值应该接近1,如果不相关,这个值应该接近0。
        n为批大小,m为每幅图像的边框数量
        """
        # 只关心得分最高的对象建议
        # 分数低的人对计数的影响很小
        # attention [5,100] torch.float32 cuda
        # boxes [5,4,100] torch.float64 cuda [batchsize,4,m] m:每幅图像的边界框数,也就是圈出来的对像数,论文中的虚线框出  选出了10个对象
        boxes, attention = self.filter_most_important(self.objects, boxes, attention) #过滤掉之后,剩下的是[5,4,5] ,[5,5]
        # 将权重归一化再 [0, 1]之间
        if not self.already_sigmoided:
            attention = torch.sigmoid(attention) #[5,5]

        relevancy = self.outer_product(attention)  
        distance = 1 - self.iou(boxes, boxes)  #D距离矩阵,采用边界框的相交-合并 Dij = 1-IOU(bi,bj)

        # intra-object dedup 消除对象内边缘:A_hat = f(A)*f(D) D是一个距离矩阵 得到一个分数score 此时score就是论文中的A_hat
        score = self.f[0](relevancy) * self.f[1](distance)  

        # inter-object dedup 采用f3和f4,与score(A_hat)相同,只不过具有不同的激活函数
        dedup_score = self.f[3](relevancy) * self.f[4](distance)  # [6,10,10] torch.float64 cuda #论文中的X #f调用的是piecewiseLin模块

        #dedup_per_entry:每个条目的相似性,dedup_per_row:每行的相似性
        dedup_per_entry, dedup_per_row = self.deduplicate(dedup_score, attention) 
        score = score / dedup_per_entry  

        # aggregate the score 总比分
        # can skip putting this on the diagonal since we're just summing over it anyway
        # 可以不把它放在对角线上吗,因为我们只是对它求和
        correction = self.f[0](attention * attention) / dedup_per_row  
        score = score.sum(dim=2).sum(dim=1, keepdim=True) + correction.sum(dim=1, keepdim=True) 
        score = (score + 1e-20).sqrt()
        one_hot = self.to_one_hot(score)  
        att_conf = (self.f[5](attention) - 0.5).abs()  #论文中的pa公式9
        dist_conf = (self.f[6](distance) - 0.5).abs() #论文中的pD公式10
        conf = self.f[7](att_conf.mean(dim=1, keepdim=True) + dist_conf.mean(dim=2).mean(dim=1, keepdim=True)) #公式11
        return one_hot * conf

经过上面模型获得的count如下:

count[5,6]
在这里插入图片描述

7.模型答案预测

第6节获取的对象count张量,与加入注意力信息的图像特征v和词向量嵌入q,一起放入分类函数中,进行答案的预测。

answer[5,3000] = self.classifier(v, q, count)

在这里插入图片描述

8. 计算损失值与精度

8.1 计算损失值

通过调用out = net(v, b, q, q_len)获得了模型预测的答案向量大小为out[5,3000]batch_size=5.
然后将此结果与真实值a[5,3000]进行比较求损失值,
在求之前需要将预测的输出值out进行一次nll = -F.log_softmax(out, dim=1)
将得到的nll值与a进行损失值计算 loss = (nll * a / 10).sum(dim=1).mean()

log_softmax:能够解决函数overflow和underflow,加快运算速度,提高数据稳定性。就是softmax之后再做一次log运算,softmax值在[0,1]之间,log_softmax在【-∞,0]之间,本文中前加了负号,所以是[0,+∞]
所有nll[5,3000] = -F.log_softmax(out, dim=1)的值为:
在这里插入图片描述
loss = (nll * a / 10).sum(dim=1).mean()的意思就是:
因为a为答案的向量表示,代表10个答案单词出现的位置标记其索引位置(vocab.json文件),没有值就标记为0,因此如果直接将nll与a相乘只有真实值出现的位置才有值,其余为0。
因为一组batchsize中的一个问题的答案的一个3000维的向量中最多有10个位置有值,其余为0,将其除10之后,再求每一行的和,接着求一个batch_size的平均值loss。

8.2 计算精度

acc = utls.batch_accuracy(out.data, a.data).cuda()
将每行答案向量中出现的最大值取出来,赋值给_,将这个最值对应的下标赋值给predicted_index,结果如下:
_=tensor([[1.3185],[1.8692],[1.9207], [1.6898],[2.3621]])
predicted_index=tensor([[ 93],[1724], [1550], [ 891],[1594]])
将得到的predicted_index下标传个真实值agreeing = true.gather(dim=1, index=predicted_index)(按行索引)
得到此时的agreeing=tensor([[0.], [0.],[0.],[0.],[0.]])
此结果说明,本次的模型预测的一个batch_size的答案predicted的最大值的索引对应在真实答案向量中的值为0,说明我们预测的答案不准确。

def batch_accuracy(predicted, true):
    """ 计算一个batch_size的预测和答案的准确性 """
    
    _, predicted_index = predicted.max(dim=1, keepdim=True) #选出一行中最大的值赋值给_,将最大值出现的下标赋值给predicted_index。
    agreeing = true.gather(dim=1, index=predicted_index) #
    return (agreeing * 0.3).clamp(max=1)

此时求的是整个所有问题的精度,没有区分类别,后面将预测的答案和相关问题id保存在result.json文件中,将其传入vqa评估平台即可获取每个问题类型的相关答案,当然我们也可以自己调用VQAEval类进行结果输出。

       这个是计算每条问题估计答案的准确率的结果

在这里插入图片描述

9.写在最后

写到这,项目大致流程也已了解,由于篇幅有限,项目链接已给,所以没有将完整代码贴出。见谅!写的很乱,愿你能读懂吧!

常遇到的问题:

在运行项目中,常遇到以下问题:
①数据类型不匹配如下:expected type torch.cuda.DoubleTensor but got torch.cuda.FloatTensor
解决方法:
w = w.type(torch.DoubleTensor)相应位置类型转换一下即可

②CUDA数据非法访问RuntimeError: CUDA error: an illegal memory access was encountered
解决方法: 这个错误,是我的粗心造成的,在上面数据类型报错,更改时,导致w=f.type(tensor.Float),这个错误找了好久,最后逐个调试,才发现w的维度不对。导致x = x + f * w.gather(0, (idx+1).clamp(max=self.n))越界非法访问数据。所以遇到这个错你要调试看维度对不对,有没有访问越界。这里多说一句gather的用法
③很多时候出现CUDAmemoryError这个就要改batch_size了
④如果出现啥[5,6]和[7,8]维度不匹配时就要注意你的特征维度设置了

Python-基于Tensorflow的视觉问答系统VQA 基于Tensorflow的视觉问答系统VQA 立即下载

相关推荐

基于EKF的UWB-IMU融合定位系统在农业机器人中的抗干扰优化与Matlab仿真

本文探讨了基于扩展卡尔曼滤波(EKF)的UWB-IMU传感器融合定位系统在农业机器人中的应用。通过Matlab仿真验证,该系统有效解决了农业环境中UWB信号遮挡和IMU累积误差问题,实现了厘米级高精度定位,显著提升了机器人在复杂场景下的抗干扰能力和导航可靠性。

numpy6sculptor的博客 624

深度学习中的VQA(视觉问答)技术

视觉问答(Visual Question Answering,VQA)是一个需要理解文本和视觉的新领域。由于深度学习技术显著地改善了自然语言处理和计算机视觉结果,我们可以合理地预期VQA将在未来几年变得越来越准确。视觉问答主要涉及图像文本俩种模态信息。 详细内容如下: VQA视觉问答 ...

iflyBird@zhang的博客 4931

深入解析Matlab phantom函数:从基础模体到自定义头部仿真

本文深入解析了Matlab中的phantom函数,它是医学图像处理算法测试的核心工具。文章详细介绍了如何使用内置的Shepp-Logan及其改良版头部仿真模体,并重点讲解了通过自定义参数矩阵来构建专属模体的方法。通过从生成模体到模拟投影(正弦图)再到图像重建的完整实战流程,展示了phantom函数在CT等算法开发与验证中的关键作用。

m3n5b7v8c9x的博客 951

机器学习项目实战 - VQA视觉聊天机器人

第一章 使用神经网络算法实现 - 流程梳理 这里我们用Keras来实现这么一个VQA的模型 你可以自由选择keras的backend,或者是theano或者是tensorflow 这个project涉及到大量图片,建议使用GPU。 本教程使用的是python2 导入库 import sys from random import shuffle import argparse imp...

kk的博客 4341

【WILEY】从Revision到Online:逐层拆解投稿状态更新与关键文件提交实战

本文详细解析了学术论文从返修到在线发表的全过程,重点拆解了投稿系统状态更新背后的含义与应对策略。文章提供了返修稿与回复信的准备技巧、关键补充文件(如图文摘要)的提交要点,并分享了校对校样与处理出版协议的实战经验,帮助作者高效、专业地完成发表流程。

weixin_29209805的博客 713

详述字符集与汉字编码

字符集与字符编码是文本处理的基础概念。字符集定义字符集合(如ASCII、GB2312、Unicode),字符编码则规定字符如何存储为二进制数据。汉字编码经历了从区域化(GB2312、GBK、BIG5)到全球化(Unicode)的演进,Unicode通过UTF-8、UTF-16等编码方案实现跨语言兼容。UTF-8因兼容ASCII、节省空间且无乱码风险,成为中文互联网的主流编码。正确处理编码问题需统一标准、明确声明格式,并注意生僻字的特殊处理。

零零发不爱ai的博客 806

如何预处理数据集 Visual Genome

如何预处理数据集 COCO 和 Visual GenomeVisual Genome构建 download_vg.sh 下载数据库(可选)image_data.json创建 vg_splits.json 将数据集分为 train, val 和 test去除 train, val 和 test 中尺寸较小的图片处理物体和关系的别名 (object_alias.txt 和 relationship_alias.txt) Visual Genome 构建 download_vg.sh 下载数据库(可选) bash

blauschneiden的博客 3907

FPGA网络调试实战:基于88E1111和DP83867两款PHY芯片的SGMII-UDP数据回环对比与避坑指南

本文深入对比了88E1111与DP83867两款PHY芯片在SGMII-UDP数据回环中的性能差异,涵盖硬件设计、Vivado工程配置及调试技巧。通过实测数据揭示DP83867在吞吐量、延迟和功耗方面的优势,并提供FPGA网络调试中的常见问题解决方案,助力工程师高效完成项目开发。

weixin_31682031的博客 385

开源项目推荐:Attention-on-Attention-for-VQA

开源项目推荐:Attention-on-Attention-for-VQA 1. 项目基础介绍 本项目是针对视觉问答(Visual Question Answering, VQA)的深度学习模型,项目基于斯坦福大学的CS 224N和CS 230课程项目。项目的核心是一种创新的“注意力-注意力”(Attention-on-Attention)架构,旨在提高VQA任务的性能。该模型使用了PyTorch...

gitblog_00980的博客 541

HTML粉色爱心(完整代码)

HTML语言实现粉色爱心的完整代码。

AIGC 1117

WiFi基本概念(六)(L-STF,L-LTF)

L-STF它由10个OFDM symbol(1,0,1,0,1,0,1,0,1,0)构成,每个symbol是0.8us,GI是0.2us,总计10us。Symbol的长度是正常长度的1/4,因此称为Short training field,主要用于快速进行信号检测,信号同步,自动增益控制,接收天线选择(Diversity Selection)。 由于symbol长度是正常的1/4,子载波的宽度是正常的4倍,能进行初略的信道估计,其使用了-24, -20, -16, -12, -8, -4, 4, 8, 1

reekyli的专栏 6864

【免费下载】 【视觉问答(Visual Question Answering)项目实战指南】——基于GT-Vision-Lab/VQA

本指南将带您深入了解位于[GitHub](https://github.com/GT-Vision-Lab/VQA)上的视觉问答(VQA)项目。该仓库提供了处理VQA数据集所需的Python API和评价代码,支持VQA v2.0和v1.0版本。让我们一探究竟,从项目的核心构成部分开始。 ## 1. **项目目录结构及介绍** 该项目遵循清晰的组织结构,便于开发者快速上手: - **/Que

gitblog_00386的博客 1529

PyCharm配置SSH和SFTP远程连接服务器

关于这篇博文,主要因为公司企业都是通过本地测试,同步到服务器进行跑动,舍友看着同事丝滑的操作,让我做个教程。本着钻研的精神,写下了这篇博客记录 关于pycharm这个软件,只有专业版才有远程连接的这个配置,社区版没有(同事一再强调要专业版,学生认证还可申请免费) 关于SSH和SFTP都是一种协议 具体知识点补充可看我这篇文章: 【计算机网络】常见面试题集锦(全) SSH:提供安全通道进行远程登录 SFTP协议可以远程文件传输获取等,数据的安全传输主要由SSH连接提供

码农研究僧的博客 5534

VQA-Counting 项目使用指南

VQA-Counting 项目使用指南 项目介绍 VQA-Counting 是一个用于视觉问答(VQA)任务的开源项目,专注于自然图像中物体计数的神经网络组件。该项目由 Cyanogenoid 开发,并在 ICLR 2018 会议上发表了相关论文《Learning to Count Objects in Natural Images for Visual Question Answering》。该...

gitblog_00077的博客 602

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VQA-Counting项目指南

VQA-Counting项目指南 本指南旨在提供关于Cyanogenoid/vqa-counting这一开源项目的快速入门,主要涵盖项目的目录结构、启动文件以及配置文件的解析,帮助开发者快速理解和使用该项目。 1. 目录结构及介绍 VQA-Counting项目遵循清晰的组织结构,便于开发者迅速定位关键代码和资源。以下是核心的目录结构概述: . ├── README.md - 项目说...

gitblog_00045的博客 762

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

推荐项目:针对VQA的计数组件

推荐项目:针对VQA的计数组件 随着人工智能技术的飞速发展,视觉问答(Visual Question Answering, VQA)成为了连接图像理解和自然语言处理的重要桥梁。今天,我们向您隆重推荐一个源于ICLR 2018的研究成果——一个专为VQA设计的对象计数组件,其源代码基于流行的深度学习框架PyTorch实现。 项目介绍 该项目实现了论文《Learning to Count Objec...

gitblog_00674的博客 806

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【亲测免费】 推荐开源项目:深入探索VQA v2的若干最新方法(2018)

推荐开源项目:深入探索VQA v2的若干最新方法(2018) 在视觉问答(Visual Question Answering,简称VQA)领域,不断有新的研究推动着技术的边界。今天,我们聚焦于一个特别的开源项目——基于[Cyanogenoid/vqa-counting][0]的“Several Recent Approaches (2018) on VQA v2”,这是一个致力于实现和探索2018...

gitblog_00409的博客 381

Learning Reasoning Mechanisms for Unbiased Question-based Counting论文笔记

Learning Reasoning Mechanisms for Unbiased Question-based Counting论文笔记一、引言二、Novel out-of-distribution datasets1、TallyQA-CP2、TallyQA-Odd-Even三、Spatial Counting Network四、Result1、State-of-the-art models are biased2、Spatial Counting Network总结 写在前面 照例,本篇论文出自CVP

乄洛尘 436

MCAN论文进阶——MoVie: Revisting Modulated Convolutions for Visual Counting and Beyond 论文笔记

本文是 VQA 2021 Challenge 的冠军,方法上没有太复杂,主要是结合 Defense grid 的思路和 MCAN 的方法,再根据自己的 idea 做出一些创新,最终夺冠的模型采用了 32 个models 的 ensemble。

乄洛尘 5797

目标检测(crowd counting)

目录1、SJTU-VideoAnalysis-master1.1 说明1.1.1 Project11.1.2 Project21.2 Project21.2.1 说明1.2.2 YOLO v31.2.3 Coding示例:1.2.4 效果 1、SJTU-VideoAnalysis-master 上海交通大学智能视频分析2020春:视频目标检测,视频人群计数 GitHub 地址 1.1 说明 上海交通大学2020春智能视频分析课程作业 1.1.1 Project1 使用了帧差法、中值滤波法、高斯混合模

HelloWorld的博客 1456

开源项目推荐:自然图像视觉问答中的对象计数模块

开源项目推荐:自然图像视觉问答中的对象计数模块 该项目是ICLR 2018论文《Learning to Count Objects in Natural Images for Visual Question Answering》的官方实现,主要使用Python语言开发。 项目基础介绍 本项目旨在为视觉问答(VQA)模型引入一个计数组件,使得模型能够从注意力图中计数对象,从而在VQA v2的数字类别...

gitblog_00609的博客 361

Counting Everyday Objects in Everyday Scenes论文翻译

统计日常场景中目标的数量 摘要: 我们对日常生活中的不同类别的目标数量很感兴趣。先前的计数方法针对特定的领域比如统计监控视频中行人的数量。可以通过对类似目标检测等视觉任务来估计目标的数量。在本文中,我们设计了一个精致的计数模型,用来解决自然场景中的目标数量,外形和尺度存在很大变化的情况。我们的方法是受“感数”现象的影...

wenwen9876543210的博客 573

Comp AI CRM 技能评测核心:Grader Agent 如何基于证据对执行转录与输出产物进行断言评分

Grader Agent 是 Comp AI CRM 仓库内 skill-creator 技能([`.agents/skills/skill-creator/`](https://link.gitcode.com/i/258b4472278bdc9e6b73b5a56a9b20fb))中负责"验收"的子代理:它读取一次技能测试运行留下的执行转录(transcript)与输出文件,逐条判定每条期望断

gitblog_01086的博客 73

视觉问答简述

作为需要视觉理解与推理能力的,介于Vision与NLP间的视觉问答VQA,是一个有趣而又充满挑战的问题。它的进步不仅依赖于计算机视觉的发展和自然语言处理的能力,还需要对图像的理解——视觉基础能力,如识别,检测等,同时学习到知识与推理的能力。自然语言处理主要是对自然语言, 文本形式的内容进行处理以及理解,包括机器翻译,信息检索,生成文 本摘要等任务。视觉问答是需要对给定图像和问题进行处理,经过一定 的视觉问答技术处理过后生成自然语言答案,是对二者的结合。(2)基于注意力的方法:DFAF和MLIN;

qwerty1234567888的博客 391

突破传统标注瓶颈:X-AnyLabeling如何用AI重塑计算机视觉数据流水线

在计算机视觉项目开发中,数据标注往往成为效率瓶颈——人工标注耗时耗力,传统工具缺乏智能辅助,多任务需求难以统一解决。X-AnyLabeling通过集成30+先进AI模型,将标注效率提升300%,支持目标检测、实例分割、姿态估计等全场景需求,为开发者提供了一站式智能标注解决方案。 ## 核心关键词 **智能标注工具**、**AI辅助标注**、**多模态视觉标注**、**深度学习模型集成**、**数

gitblog_00569的博客 390

视觉问答中的物体计数:从多模态融合到端到端模型实现

视觉问答是计算机视觉与自然语言处理交叉领域的重要任务,旨在让机器理解图像内容并回答相关问题。其核心原理在于通过深度学习模型分别提取视觉与语言特征,再通过多模态融合技术实现跨模态语义对齐。在工程实践中,视觉问答技术为安防监控、智能辅助、内容审核等场景提供了自动化解决方案。其中,物体计数作为视觉问答的一个关键子任务,要求模型不仅能识别物体类别,还需精确统计数量,这对模型的细粒度理解和回归能力提出了更高要求。本文以VQA-object_counting项目为例,深入剖析了基于视觉-语言特征的端到端计数模型实现,涵

weixin_30765577的博客 300
上一篇: 视觉问答项目
下一篇: 论文解读之VQA视觉问答
snow5618
博客等级 码龄9年 141粉丝 51原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值