SentiBank Dector上手指南


官网链接:https://www.ee.columbia.edu/ln/dvmm/vso/download/sentibank.html

SentiBank Detector可以抽取图片中的形容词-名词对,之前一直看到,这次复现模型才第一次用到,上手的时候有点手足无措,因为官网在如何使用方面说的不是很清楚,但是用完发现也挺简单,这里记录一下。

官方下载的压缩包解压之后,主要包含以下文件:
在这里插入图片描述
其中source1.01,1.02,1.1是source的三个版本,其中1.1为最新版本,直接解压source1.1.zip即可,binary1.01,1.02,1.1是binary的三个版本,其中1.1为最新版本,直接解压binary1.1.zip即可。两者都可以生成一张图片在1200个形容词名词对上匹配分数,binary可以直接在终端运行,source需要在MATLAB中执行。生成速度上,binary处理一张普通图片需要2min,source在修改源码之后可以达到1min处理10张照片的速度。

Binary

解压Binary1.1.zip之后,先看readme_binary.txt:

Usage: Specify image path in main.bat.
Both relative path and absolute path are accepted(relative path preferred).
Run main.m to obtain the biconcept responce of the image.
Result will be saved in ./result/imagename-biconcept.mat. It will be a 1200 length vector.


Changes in version 1.02:

Fixed bugs and improved robustness.

Changes in version 1.1:

Re-trained classifiers using Non-CC images, improved performance by about 30%.

大意就是,在main.bat文件中指定图片地址(相对地址和绝对地址都可),如:

getBiconcept test.jpg

然后双击main.bat文件执行就OK,从cmd.exe打开到执行结束大概需要两分钟,执行完成后,结果会存储在result文件夹中,命名方式是图像名-biconcept.txt图像名-biconcept.mat,txt文件共1200行,分数对应class1200.txt中的类别。

Source

先看readme_source.txt:

Usage: getBiconcept('image path').
Both relative path and absolute path are accepted(relative path preferred).
Run main.m to obtain the biconcept responce of the image.
Result will be saved in ./result/imagename-biconcept.mat. It will be a 1200 length vector.


Changes in version 1.02:

Fixed bugs and improved robustness.

Changes in version 1.1:

Re-trained classifiers using Non-CC images, improved performance by about 30%.

首先,.m文件无法直接终端执行(也可能我操作不当一直报错,反正没成功),要下载MATLAB执行,我安装的是MATLAB_R2019a,找的是网上的破解版安装教程,安装还算顺利。
然后就可以在MATLAB界面执行.m文件了。

处理多个文件

由于给出的可执行代码都是处理一张图片的,但是使用中不可避免要处理大量图片,就不得不简单地学习了一下MATLAB的.m文件的语法,下面是我是用source文件夹下的main.m文件处理多张图片的步骤:

  1. 将所有要处理的图片放在一个文件夹下,并生成一个txt文件,其中包含了所有的图像连接,如images.txt:
    images/1.jpg
    images/2.jpg
    …
    images/100.jpg
    
  2. 参考博客,对源码进行修改,具体而言,就是将source1.1文件夹下getmapping.m中的所有bitshift(i,1,samples)替换为bitshift(i,1,'uint8')
  3. 修改mian.m文件:
    % 注意每条指令后要写分号
    fid = fopen('images.txt','r+'); %打开存放所有图片链接的txt文件
    data = textscan(fid,'%s'); %读取文件内的所有字符串
    sta=fclose(fid); %关闭文件
    disp(data); %显示读取的数据,可省略
    n=length(data{1}); %n为图片链接个数
    for a = 1:length(data{1}) %遍历所有图片链接
        disp(data{1}{a}); %显示图片链接
        getBiconcept(data{1}{a}); %处理图片链接
    end
    
    %getBiconcept('try.jpg')  %默认的单挑指令
    

可能因为缺失gray2rgb.m文件而报错

gray2rgb.m:

%% 灰度图转换为彩色图
function I = gray2rgb(X)
R = redTransformer(X);
G = greenTransformer(X);
B = blueTransformer(X);
I(:,:,1) = R;
I(:,:,2) = G;
I(:,:,3) = B;
I = uint8(I);
end
 
%% 红色通道映射函数
function R = redTransformer(X)
R = zeros(size(X));
R(X < 128) = 30;
R(128 <= X & X < 192) = 2*X(128 <= X & X < 192)-150;
R(192 <= X) = 234;
end
%% 绿色通道映射函数
function G = greenTransformer(X)
G = zeros(size(X));
G(X < 90) = 2*X(X < 90)+40;
G(90 <= X & X < 160) = 180;
G(160 <= X) = 0;
end
%% 蓝色通道映射函数
function B = blueTransformer(X)
B = zeros(size(X));
B(X < 64) = 115;
B(64 <= X & X < 128) = 510-4*X(64 <= X & X < 128);
B(128 <= X) = 36;
end

概率到TOP5形容词名词对的转化

import os
from collections import defaultdict
import jsonlines
classes=defaultdict(str)
with open("class1200.txt","r",encoding="utf-8") as f:
    lines = f.readlines()
    for i,line in enumerate(lines):
        classes[str(i)]=line.strip()
print(classes) #存储所有类别
 

with open("anps_data.txt","w",encoding="utf-8") as f:
    pass

id2noun_dict={}

for root, dirs, files in os.walk("result/data"):  # filename文件夹名
    count=0
    for file in files:  # 遍历文件夹下所有文件名
        if not file.endswith(".txt"):
            continue
        new_filepath = os.path.join(root, file)  # 创建路径
        id =file.split(".")[0].split("-")[0]
        classdict={}
        with open(new_filepath,"r",encoding="utf-8") as f:
            lines = f.readlines()
            for i,line in enumerate(lines):
                line = float(line.strip())
                classdict[str(i)]=line
        classdict=sorted(classdict.items(),key=lambda x:x[1],reverse=True) #类别按照从大到小排序
        # print(classdict)
        classdict = classdict[:5] #获取top5类别
        classlist = []
        five_words = [id]
        for c in classdict:
            name = classes[c[0]]
            score = c[1]
            classlist.append((name,score))
            five_words.append(name)
        id2noun_dict[id] = tuple(classlist)
        count+=1
        # print(id)
        with open("anps_clue.txt","a",encoding="utf-8") as f:
            f.write(str(five_words)+"\n")

后记

即使是使用source1.1执行,图片的处理速度也是和图片的大小成正比的,所以如果需要提升处理速度,可以降低图片的分辨率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/15225.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python入门教程+项目实战-11.4节: 元组与列表的区别

目录 11.4.1 元组与列表的区别 11.4.2 可变数据类型 11.4.3 元组与列表的区别 11.4.4 知识要点 11.4.5 系统学习python 11.4.1 不可变数据类型 不可变数据类型是指不可以对该数据类型进行修改&#xff0c;即只读的数据类型。迄今为止学过的不可变数据类型有字符串&#x…

我做了个GPT3键盘,用了两个月发现它有点傻

自 ChatGPT 出世&#xff0c;各类文本类AI产品层出不穷。甚至接连几日&#xff0c;Producthunt 上新品过半都是AI相关。 这其中部分原因是 OpenAI 公司开放的 GPT3 1API 接口十分易用。只要一个简单的文本请求&#xff0c;就能将现有产品加入AI功能。例如&#xff0c;Notion、…

提取文本的摘要snownlp模块

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 提取文本的摘要 snownlp模块 [太阳]选择题 关于以下python代码说法错误的一项是&#xff1f; from snownlp import SnowNLP myText """ChatGPT的出现标志着人类科技发…

【flask】三种路由和各自的比较配置文件所有的字母必须大写if __name__的作用核心对象循环引用的几种解决方式--难Flask的经典错误上下文管理器

三种路由 方法1&#xff1a;装饰器 python C#, java 都可以用这种方式 from flask import Flask app Flask(__name__)app.route(/hello) def hello():return Hello world!app.run(debugTrue)方法2: 注册路由 php python from flask import Flask app Flask(__name__)//app…

【JavaWeb】jQuery(上)

本章内容 1.jQuery Hello world 2.jQuery 选择器 3.jQuery 过滤器 4.jQuery 元素筛选 1、jQuery 介绍 什么是 jQuery ? jQuery&#xff0c;顾名思义&#xff0c;也就是 JavaScript 和查询&#xff08;Query&#xff09;&#xff0c;它就是辅助 JavaScript 开发的 js 类…

Linux 文件内容相关命令使用汇总

Linux操作系统有很多强大的文件内容相关命令&#xff0c;这些命令可以让您查看、分析和编辑文件。其中&#xff0c;最基本和常用的命令包括cat、more、less和head/tail等。除了这些基本命令之外&#xff0c;grep和find命令也是文件搜索和过滤方面的有力工具。 前言 我们这篇主…

根据 vue-grid-layout 动态设置Echarts尺寸大小

文章目录 前言一、vue-grid-layout 是什么&#xff1f;二、正文1.引入vue-grid-layout2.myEcharts组件3. Utils中的debounce防抖函数 总结 前言 此文背景是根据 vue-grid-layout 动态拖拽组件大小里面包含 Echarts 组件情景&#xff0c;也可以单独把监听动态设置Echarts 尺寸抽…

【神经网络】tensorflow实验7--回归问题

1. 实验目的 ①掌握一元线性回归模型的实现方法 ②掌握多元线性回归模型的实现方法 ③掌握三维数据可视化方法 2. 实验内容 ①使用TensorFlow建立一元线性回归模型&#xff0c;使用商品房销售数据训练模型&#xff0c;并使用训练好的模型预测房价 ②使用TensorFlow建立多元线…

企业级VUE前端项目各目录文件的作用

概述 本文项目是基于Vue CLI3构建工具&#xff08;基于 webpack)生成的脚手架项目。Vue CLI 现已处于维护模式&#xff0c;VUE官方推荐使用 create-vue&#xff08;基于 Vite&#xff09;构建工具。 vue-cli2.0与3.0在目录结构方面&#xff0c;有明显的不同,vue-cli3.0移除了…

什么是 MVVM?MVVM和 MVC 有什么区别?什么又是 MVP ?

目录标题 一、什么是MVVM&#xff1f;二、MVC是什么&#xff1f;三、MVVM和MVC的区别&#xff1f;四、什么是MVP&#xff1f; 一、什么是MVVM&#xff1f; MVVM是 Model-View-ViewModel的缩写&#xff0c;即模型-视图-视图模型。MVVM 是一种设计思想。 模型&#xff08;Model…

国内首款多节点/无需密钥/无需登录的ChatGPT客户端开源项目

在这个AI浪潮推动下&#xff0c;涌现了一大批“参差不齐”的GPT产品&#xff0c;有的一直在更新迭代&#xff0c;有的不断升级乃至付费订阅&#xff0c;有的中途停止运营。在这个AI产品也需要优胜劣汰的时代下&#xff0c;谁能够“谁主沉浮&#xff0c;且看今朝&#xff01;”&…

目标检测之损失函数

损失函数的作用为度量神经网络预测信息与期望信息&#xff08;标签&#xff09;的距离&#xff0c;预测信息越接近期望信息&#xff0c;损失函数值越小。 在目标检测领域&#xff0c;常见的损失分为分类损失和回归损失。 L1损失 L1 Loss也称为平均绝对值误差&#xff08;MAE&…

跨域融合风口下,又一外资巨头Tier 1+本土供应商“组团”来袭

头部企业正在加速“融合”。 汽车智能化升级对产品创新与多元化需求下&#xff0c;来自技术升级、降本、开发周期缩短等等一系列因素影响&#xff0c;中外供应商们都在积极思变和寻求破局。 随着全球智能汽车产业步入域集中和域融合的新阶段&#xff0c;过去的以硬件&#xf…

【AGC】质量服务数据分析问题

【关键字】 AGC、质量、数据分析 【问题描述】 开发者反馈在应用中集成了AGC的相关服务&#xff0c;在查看平台数据时遇到了一些问题。具体如下所述&#xff1a; 我发现平台的App卸载量每个月都非常高&#xff0c;卸载量/新下载量近80%&#xff0c;很异常&#xff0c;所以想…

Elasticsearch --- DSL、RestClient查询文档、搜索结果处理

一、DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1、DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数据&#xff0c…

后台-husky提交代码规范使用

husky是一个git hook工具&#xff0c;可以帮助我们触发git提交的各个阶段&#xff1a;pre-commit、commit-msg、pre-push 1.如何使用husky呢&#xff1f; npx husky-init && npm installWindows安装不成功试试npx husky-init && npm install 2.git commit规范…

图论 (Java) 从入门到入土 /第一部分 图的基础-图的定义/

零.前言 图&#xff0c;是一种比较复杂的数据结构。和树的一个节点只和上层一个节点相连不同&#xff0c;在图中&#xff0c;任意两个节点都可能相连&#xff0c;且可能具有方向性&#xff0c;并且节点的边具有权重&#xff0c;因此&#xff0c;图被用于描述各种复杂的数据对象…

Docker基础知识全解析

​ Docker是一个开源的容器化平台&#xff0c;可以让开发者在容器中构建、打包、运行和发布应用程序&#xff0c;从而实现应用程序的快速部署和可移植性。Docker将应用程序和依赖项打包在一个轻量级的可移植容器中&#xff0c;这个容器可以在任何平台上运行&#xff0c;不会受到…

外卖app开发流程全解析

外卖app开发是现代餐饮业的一个必备部分。在这个数字化时代&#xff0c;人们更愿意使用手机应用程序来订购食品。因此&#xff0c;为了满足客户需求&#xff0c;餐饮企业需要开发自己的外卖app。 第一步&#xff1a;确定目标受众 在开始外卖app的开发之前&#xff0c;需要确定…

华为C++研发工程师编程题 ACM模式输入输出|| 1.汽水瓶,2.明明的随机数,3.进制转换

C ACM输入输出 1.汽水瓶题目描述思路代码如下 2.明明的随机数题目描述思路&#xff1a;代码如下&#xff1a; 3.进制转换题目描述思路&#xff1a;代码如下 题目链接&#xff1a; 华为研发工程师编程题 1.汽水瓶 题目描述 某商店规定&#xff1a;三个空汽水瓶可以换一瓶汽水…