【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

人工智能53

这里是国科大自然语言处理的第五次作业(终于是最后一次作业了,冲!),本篇博客是记录对论文: Attention-Based Bidirectional Long Short-Term Memory Networks for Relation Classification 的复现过程。现在我们开始吧(今天也是花里胡哨的一天呢🤩)

目录

实验要求

  1. 任选一个深度学习框架建立一个关系抽取模型,实现在英文数据集SemEval-2010 Task8上进行的关系抽取。
  2. 测评指标使用的是官方给出的scorer,其实现基于perl语言,位于SemEval2010_task8_all_data\SemEval2010_task8_scorer-v1.2路径下,为semeval2010_task8_scorer-v1.2.pl,实验报告中需给出测评得到的macro-F1 score。

程序说明

代码:https://download.csdn.net/download/qq_39328436/71920051
按照顺序分别执行:

python run.py --mode=1
python run.py --mode=0
perl semeval2010_task8_scorer-v1.2.pl proposed_answer.txt predicted_result.txt >> result.txt

程序目录如下:
【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

  • data:存储原始语料,数据预处理文件,词向量文件。原始语料需解压data/SemEval2010_task8_all_data目录下。
  • embedding:存储预训练glove数据
  • output:存储训练好的模型
  • config.py:描述参数配置
  • evaluatepy:描述精度
  • model.py:米哦啊书模型
  • result.txt:输出的精度结果
  • run.py:主函数
  • utils.py:描述数据加载
  • semeval2010_task8_scorer-v1.2.pl:用于计算精度的perl工具

  • 知识概述

2.1 信息抽取

任务描述:

  • 从自然语言文本中抽取指定类型的实体、 关系、 事件等事实信息,并形成 结构化数据输出的文本处理技术。一般情况下命名实体识别是知识抽取等其他任务的基础。

信息抽取主要包括以下子任务:

  • 实体识别和抽取(Named Entity Recognition,NER)
  • 实体消歧(entity resolution)
  • 关系抽取(Relation Extraction,RE)
  • 事件抽取(Event Extraction,EE)

在对无结构自然语言文本进行信息抽取的时候,任务包含两部分:命名实体识别和关系抽取。

2.2 关系抽取

任务描述:

  • 从文本中识别抽取实体及实体之间的关系。抽取结果一般以三元组形式呈现。

比如:

  • 比尔盖茨是微软的CEO:CEO(比尔盖茨, 微软)
  • 信工所在闵庄路:Located-in (信工所, 闵庄路)

关系抽取的方法:

  • 规则方法 :人工编制各种识别实体的规则,利用规则来识别。成本高,覆盖面底。
  • 基于统计的抽取方法:基本思想:将关系实例转换成高维空间中的特征向量或直接用离散结构来表示,在标注语料库上训练生成分类模型, 然后再识别实体间关系。
  • 基于神经网络的抽取方法:设计合理的网络结构, 从而捕捉更多的特征信息, 进而准确的进行关系分类

2.3 LSTM与BiLSTM

参考:http://colah.github.io/posts/2015-08-Understanding-LSTMs/

  • LSTM用来解决普通RNN模型存在的长距离依赖问题: 距当前节点越远的节点对当前节点处理影响越小,无法建模长时间依赖
  • RNN由很多循环的单元构成,在标准的RNN中,这个重复的单元只有一个非常简单的结构,比如一个tahn层。
  • LSTM同样也是循环的结构,只是这个重复的单元开始变得复杂起来。
    【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】
  • 在上面的图例中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表 pointwise 的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。
    【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】
  • LSTM 的关键就是细胞状态,水平线在图上方贯穿运行。 细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。
    【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】
  • LSTM 有通过精心设计的称作为"门"的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含 一个 sigmoid 神经网络层和一个 pointwise 乘法操作。下图是一个门结构:
    【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】
  • Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表"不许任何量通过",1 就指"允许任意量通过"。 LSTM 拥有三个门,来保护和控制细胞状态。
  • 遗忘门:决定从细胞状态中丢弃什么信息。
    【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】
  • 输入门:决定什么样的新信息会被存入细胞状态
    【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】
  • 输出门:决定输出什么样的值
    【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】
  • LSTM都只能依据之前时刻的时序信息来预测下一时刻的输出,但在有些问题中,当前时刻的输出不仅和之前的状态有关,还可能和未来的状态有关系。比如预测一句话中缺失的单词不仅需要根据前文来判断,还需要考虑它后面的内容,真正做到基于上下文判断。
  • 所谓的Bi-LSTM可以看成是 两层神经网络,第一层从左边作为系列的起始输入,在文本处理上可以理解成从句子的开头开始输入,而第二层则是从右边作为系列的起始输入,在文本处理上可以理解成从句子的最后一个词语作为输入,反向做与第一层一样的处理处理。最后对得到的两个结果进行处理。

; 3. 数据

数据来源

  • 本次实验所用的数据集是完全监督的关系抽取数据集SemEval-2010 Task8。这个数据集包含了10717个样本,其中,8000个为训练样例,2717个测试样例。其中,训练集数据在TRAIN_FILE.TXT,测试集数据在TEST_FILE.TXT中。
  • 这个数据集包含了9种基本关系和1种人工分类关系Other。这九种关系分别为:Cause-Effect、Component-Whole、Entity-Destination、Product-Producer、Entity-Origin、Member-Collection、Message-Topic、Content-Container、Instrument-Agency。特别需要说明的是,另一种关系Other是一种人工分类关系,其表示的是不属于这9种关系之一,而并不是一种独特的关系。
  • 在SemEval-2010 Task8的训练集以及测试集中,上述10种关系的数目和比例如下所示:

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

  • SemEval-2010 Task8的训练集和测试集的数据格式相同。每一个样例由三行内容组成,其中第一行为样例的序号以及具体的语句内容,第二行为此语句中两个实体的关系,第三行为对于此样例的注释:
 8001  " The most common audits were about waste and recycling . "
Message-Topic(e1 ,e2)
Comment: Assuming an audit = an audit document .
  • 在样例的每一个句子中,对于实体,其使用了标签将其标注出来。在说明关系的时候,考虑了这两个实体的顺序。这意味着Cause-Effect(e1,e2)和Cause-Effect(e2,e1)是两个不同的关系。因此,在实际实验中,通常认为在此数据集中包含了19种关系。

数据处理

  • preprocess.py对数据进行预处理。将原始语料中三行的形式转换为标准的json格式,并且完成英文分词以及实体分割符号<>
{"id": "8001", "relation": "Message-Topic(e1,e2)", "sentence": ["The", "most", "common", "", "audits", "", "were", "about", "", "waste", "", "and", "recycling", "."], "comment": " Assuming an audit = an audit document."}

  • 在词嵌入word_embedding过程中用到了Glove算法预先训练数据,glove.6B.100d.txt是该算法需要用的预训练数据
  • Glove的全称叫Global Vectors for Word Representation,是一个基于全局词频统计(count-based & overall statistics)的词表征(word representation)工具,它可以把一个单词表达成一个由实数组成的向量,这些向量捕捉到了单词之间一些语义特性,比如相似性(similarity)、类比性(analogy)等。通过对向量的运算,比如欧几里得距离或者cosine相似度,可以计算出两个单词之间的语义相似性。

  • 模型

模型结构

模型分为五个部分

  1. 输入层(Input layer):将句子输入模型
  2. 嵌入层(Embedding layer):将每个词映射到一个低维向量
  3. LSTM层(LSTM layer):利用BiLSTM从词向量中获得特征
  4. Attention层(Attention layer):生成权重向量,将每个时间步长的单词级特征与权重向量相乘,合并成句子级特征向量
  5. 输出层(Output layer): 使用句子级特征向量进行关系分类
    【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

; LSTM Layer

  • bidirectional=True表示双向LSTM,可以考虑到上下文的信息,相比于单向LSTM会有更好的效果。
    【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】
     self.lstm = nn.LSTM(
            input_size=self.word_dim,
            hidden_size=self.hidden_size,
            num_layers=self.layers_num,
            bias=True,
            batch_first=True,
            dropout=0,
            bidirectional=True,
        )

    def lstm_layer(self, x, mask):
        lengths = torch.sum(mask.gt(0), dim=-1)
        x = pack_padded_sequence(x, lengths, batch_first=True, enforce_sorted=False)
        h, (_, _) = self.lstm(x)
        h, _ = pad_packed_sequence(h, batch_first=True, padding_value=0.0, total_length=self.max_len)
        h = h.view(-1, self.max_len, 2, self.hidden_size)
        h = torch.sum(h, dim=2)
        return h

Attention Layer

H:LSTM层的输出
w:是需要训的一组参数向量
h*:为最终用于分类的hidden state
【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

  • att_score = torch.bmm(self.tanh(h), att_weight):实现了第一行和第二行公式
  • torch.bmm(h.transpose(1, 2), att_weight).squeeze(dim=-1):实现第三行公式
  • mask:在Attention之前需要创建mask
  • reps = self.tanh(reps):实现第四行公式
  • 根据公式和代码可以判断使用的是点积注意力机制。
    def attention_layer(self, h, mask):
        att_weight = self.att_weight.expand(mask.shape[0], -1, -1)
        att_score = torch.bmm(self.tanh(h), att_weight)

        mask = mask.unsqueeze(dim=-1)
        att_score = att_score.masked_fill(mask.eq(0), float('-inf'))
        att_weight = F.softmax(att_score, dim=1)

        reps = torch.bmm(h.transpose(1, 2), att_weight).squeeze(dim=-1)
        reps = self.tanh(reps)
        return reps
  1. 训练

训练参数

epoch = 20
batch_size = 10
lr = 1.0
max_len = 100
emb_dropout = 0.3
lstm_dropout = 0.3
linear_dropout = 0.5
hidden_size = 100
layers_num = 1
L2_decay = 1e-05
device = cpu

训练效果

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】
训练好的模型保存在目录output中,20个epoch训练时长约为4个小时。

; 6. 测试

  • 先执行:
python run.py --mode=0
  • test的预测结果将保存在 predicted_result.txt中,semeval_scorer函数将会完成F1值的计算,测试结束后控制台会直接打出F1=0.824
    【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】
  • 除了用python代码来计算精度之外官方还提供了基于perl的工具(windows电脑需要安装perl环境),执行下面这行代码,计算结果将被保存在result.txt中,F1计算结果与直接用python计算的结果一致。
perl semeval2010_task8_scorer-v1.2.pl proposed_answer.txt predicted_result.txt >> result.txt

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】
下图最后一行是论文中作者的实验结果,与我的训练结果基本相同。
【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

okok NLP的所有大作业终于是完成了😆,一共训了5个模型,虽然每一个都有不少疑问,但是到第五个的时候已经游刃有余了,表扬自己的进步,并祝大家圣诞快乐!🎅🎅⛄⛄

Original: https://blog.csdn.net/qq_39328436/article/details/122116503
Author: vector<>
Title: 【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】



相关阅读1

Title: Mac M1配置tensorflow以及切换虚拟环境导入至Spyder

M1芯片基于Arm64架构下搭载tensorflow,现阶段只能参考苹果官方给出的意见,详情链接如下

Apple Developer Metal

Mac搭载的系统应当升级至最新版才可更容易安装,现在最新的是Monterey 12版本。

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

  1. 下载安装miniforge3

首先下载Macos_arm64_miniforge3,保存文件,记住下载位置,然后在终端中依次输入下列命令:

hmod +x ~/Downloads/Miniforge3-MacOSX-arm64.sh

sh ~/Downloads/Miniforge3-MacOSX-arm64.shsource ~/miniforge3/bin/activate

安装路径请选择默认,应当安装在用户路径下如图:

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

2. 安装tensorflow

新建一个新的环境,注意,经过上述步骤的source ~/miniforge3/bin/activate命令后, 当前终端terminal工作的路径已经是在miniforge3文件下,环境不再是conda路径下的base环境,所以新建的环境也是在miniforge3文件夹内,下文还会介绍如何从annaconda的环境切换到minforge3下的环境。这样使用的时候才不会混乱, 虚拟环境在哪个文件夹里就切换到哪个文件夹

conda create -n py38 python==3.8 #新建基于python3.8的环境conda create -n py39 python==3.9 #新建基于python3.9的环境

创建后请激活环境如下:

conda activate 环境名

接下来需要安装tensorflow-dependence、tensorflow-macos、tensorflow-metal,一般当前新建的环境中是没有什么包的,没有什么冲突,所以可以直接在终端输入命令安装,tensorflow 在m1中python3.8和3.9可装2.5和2.6:

conda install -c apple tensorflow-deps==2.6.0

python -m pip install tensorflow-macospython -m pip install tensorflow-metal

一般来说,终端会开始很顺利地安装,但是在新建的环境中,conda的环境配置包少,在新环境中安装包的时候会遇到Solving environment: failed with initial frozen solve. Retrying with flexible solve的问题,这个时候请在 当前环境目录下执行如下代码,更新conda:

conda update --prefix /Users/wuyicheng/opt/anaconda3
anaconda

上述代码的路径对应于当下annaconda安装的路径,请修改并在新环境下输入运行,这个时候系统会在新环境中下载非常多的包,慢慢等候, 这一步是很有必要的!如下输入y同意一直等下载完毕。

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

注意! 更新完上述conda一定要再进行一次命令conda update --all,这样可以解决后续很多包出现环境初始化故障,用conda install命令安装不上的问题。

那么 如果没有安装报错,现在tensorflow其实已经安装成功了,如下pip list显示结果:

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

到这里tensorflow可以运行被识别

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

3. miniforge3安装虚拟环境配置到单独下载的Spyder

上述步骤完成后,就可以把环境运用到pycharm中了,pycharm环境配置样式如下,前面的地址默认部分基本是一样的,按照自己的mac系统来输入:

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

请一定要把 python.3.9这个执行文件点击选上,否则一个文件夹选上没有用。

现在把此环境导入到我们单独下载的spyder中,我们可以spyder的系统偏好设置编译器的位置,

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

同理, 这个路径最后文件夹里的python3.9的执行文件一定要点击上,否则配置不成功!

现在配置完环境后,spyder一般还是会报错,因为这个时候我们新安装的环境里是 没有spyder-kernel这个包来支持spyder的,这个时候请按照控制台的提示安装特定版本的spyder-kernel

conda install spyder-kernel==提示版本

有的时候这里会出现上述我们提到的下载环境初始化故障的问题,Solving environment: failed with initial frozen solve. Retrying with flexible solve,那就按照上面的命令步骤将conda更新就可以了。下载完毕spyder-kernel后,spyder就可以直接调用我们在miniforge3创建的新环境。如下这个图,不同路径下有不同的虚拟环境,miniforge3中就有我们创建一般被隐藏在annaconda路径下找不到的虚拟环境:

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

当我们打开终端,一般默认出现的是 conda路径下的base环境,这个时候如果用conda info --envs命令检查环境名,miniforge3路径下的虚拟环境我们是什么也看不到的, 这个时候必须要从conda的基本环境切换路径到miniforge3:

source ~/miniforge3/bin/activate

上述命令执行后,切换至miniforge3中的base路径,如上图所示,这个时候我们再使用命令:

conda info --envs

conda activate miniforge3中虚拟环境名字

发现就可以进入miniforge3的环境下,能够被conda info --envs命令搜寻到,进而也可以实现我们对所创建的虚拟环境的调用。其实mac单独使用spyder,尤其要调用miniforge3里的环境,会逐步有很多麻烦,笔者使用annconda中的程序无法打开spyder会报错,所以选择单独下载spyder,环境配置问题基本上在本文中得到解决。

上述方法可以针对annaconda打不开spyder情况下,不使用conda的base环境直接使用miniforge3中的虚拟环境,在mac m1架构不兼容大多程序下使用tensorflow, 也进而为打开annaconda报错无法使用spyder,单独下载spyder解决环境配置提高方案。

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

Original: https://blog.csdn.net/wuicer/article/details/125872711
Author: wuicer
Title: Mac M1配置tensorflow以及切换虚拟环境导入至Spyder

相关阅读2

Title: 基于视觉的烟雾/火焰检测数据集整理(检测、识别、分割)

基于传感器的火灾预警系统,比较适用于 较小空间。 随着视觉技术的发展,基于视觉的火灾预警系统,更适用于对森林等大范围场景进行 远距离监控 1

当前的烟雾火焰检测系统中,采用机器学习的视觉技术暂未广泛替代传感器,主要原因就在于其 误报与漏报较高

火灾初期通常会产生大量烟雾, 这一现象在很大程度上降低了用火焰检测进行火灾预警的有效性,所以现在很多方案通过对烟雾的监控和检测,实现早期火灾预警。

基于视觉的火灾预警任务可以分为火焰/烟雾 识别、检测、分割这3类不同的粒度。相关的数据集整理如下:

数据集整理

fire-dunnings-dataset

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

  • 数据集地址:https://collections.durham.ac.uk/files/r2d217qp536#.YG_uqsgzqkL
  • 这个数据集比较大,压缩包约10.4GB 2,分为 fire、nofire两类别,还有超像素分割后的火焰图像,可以进行定位和识别,比较适合用深度学习的方法。
  • 数据集的内容结构如下:
    ├── images-224x224 (5.4G / 70k PNG format files - the training and testing data sets for the binary full frame fire detection task with / without FURG data set)
    │ ├── furg
    │ ├── train
    │ ├── train_no_furg
    │ ├── testing
    │ └── testing_furg
    ├── superpixels (2.2G / 200k PNG format files - the training and testing data sets for the superpixel fire localization task)
    │ ├── isolated-superpixels
    │ │ ├── train
    │ │ └── testing
    │ └── original-full-images
    │ ├── train
    │ └── testing
    └── videos (4.3G / MP4 format video)
  • 我复现了数据集对应论文中的方法3,可视化效果不错,适合演示,但在实际应用中误报很高。

; VisFire - Bilkent EE Signal Processing group

  • 火焰、烟雾检测软件:http://signal.ee.bilkent.edu.tr/VisiFire/index.html
  • 视频数据:http://signal.ee.bilkent.edu.tr/VisiFire/Demo/
  • 采集自监控视频,比较早的一个数据集,包含森林中的火焰、烟雾视频。
    【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

KMU Fire & Smoke Database

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

  • https://cvpr.kmu.ac.kr/
  • 包含室内、室外烟雾与火焰、野外烟雾、类烟与类火的移动物体。
  • 这个组也发表了很多基于深度学习的火焰、烟雾检测论文,但是数据集压缩包里没有找到具体的标注文件。

; BoWFire( best of both worlds fire detection)

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

  • https://bitbucket.org/gbdi/bowfire-dataset/downloads/
  • 数据集包括发生火灾的不同紧急情况,例如建筑物着火,工业火灾,车祸和骚乱(./dataset/img)。其余图像包括没有可见火势的紧急情况,以及具有 类似火的区域(例如日落)和红色或黄色物体的图像4
  • 数据集包含训练集、测试集。训练数据集(./train)包含240个50×50像素的图像:80张图像被分类为有火,160张图像被分类为非火。测试数据集(./dataset)包含226张不同分辨率的图像:119张包含火焰的图像和107张无火的图像。
  • 数据集还包括火焰区域的分割,着火区域标记为白色,而非着火区域标记为黑色(./dataset/gt)。可以用于 火焰检测和分割任务。

Mivia Fire &Smoke Detection Dataset

  • https://mivia.unisa.it/datasets/video-analysis-datasets
  • 有火焰与烟雾视频数据集。火焰集中共有 31 段视频, 其中 14 段有火焰, 其他无火焰。烟雾集包含 149 段视频, 每一段 15 min 左右, 总时长超过 35 h, 大多是远镜头烟雾视频, 内含天空、云雾、强阳光等干扰。
    【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

; 中国科学技术大学火灾科学国家实验室的烟雾数据集

  • http://smoke.ustc.edu.cn/datasets.htm
  • http://staff.ustc.edu.cn/~yfn/vsd.html
  • 其中含有真实烟雾、非烟雾图以及大量且多样的合成烟雾图。数据集经过人工标注, 该团队已利用数据集发表多篇基于深度的烟雾检测、分割论文,说明该数据集能够胜任深度网络的训练。
    【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

ViSOR ( video surveillance online repository)

  • http://imagelab.ing.unimore.it/visor/index.asp
  • 视频种类较多,包含烟雾视频; 大部分烟雾;视频有逐帧 bounding box 级GT或逐帧全图类标

VSD Smoke Dataset

  • http://staff.ustc.edu.cn/~yfn/vsd.html
  • 10段视频,分为有烟雾和无烟雾两个类别。

Fire Calorimetry Database (FCD) - 美国国家消防研究实验室

【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】

  • https://www.nist.gov/el/fire-research-division-73300
  • 非视觉任务的一个数据集。美国消防研究部开发,用测量和预测方法来量化火灾的行为,并采取措施减少火灾对人,财产和环境的影响。
  • 数据集(FCD)包含在NFRL进行的火灾实验的结果。该数据库中包含的标本包括单个燃烧物品,设施齐全的房间,可控燃烧器,特征明确的燃料和未知成分的真实复合燃料。

; 使用小结

  • 当前很多火焰、烟雾数据集,缺少精细boundingbox和mask标注,需要巨大的人工标注工作量。
  • 火焰、烟雾边缘模糊,导致标注标准不一致,难以准确严谨地评估检测算法。且 烟雾跟天空中云朵的形态易发生混淆。
  • 数据集的多样性不足,在当前数据集上训练的火焰检测模型,在跨域应用中的泛化性不好。

资源下载

部分参考文献打包:
https://download.csdn.net/download/Bit_Coders/16591997

第一个dunnings数据集的网盘地址:
https://download.csdn.net/download/Bit_Coders/36130553

Original: https://blog.csdn.net/Bit_Coders/article/details/115356535
Author: 虾米小馄饨
Title: 基于视觉的烟雾/火焰检测数据集整理(检测、识别、分割)

相关阅读3

Title: 内网机conda环境配置流程

多次被公司的内网机搞到崩溃后,我下定决心摸一会鱼写篇文章总结一下,希望以后不需要再用到了。

诚挚感谢几位原作者的分享,我只是搬运工。

内外网电脑各一台,系统都是windows,(重点)一个有权限的老板帮我在两台机子之间拷文件。

conda create --name [environment name] python==[3.7]

python版本不一样的话下的包是不通用的,如果非要自己手动下的话也需要注意一下,比如:

tensorflow-2.3.0-cp37-cp37m-win_amd64.whl

,这里面 _cp37_的意思就是适用python3.7.

为什么还需要一台外网机,不直接从镜像网站下包:
很多包是有依赖的前置包的,有的前置包又有自己的前置,如果是全新的环境的话需要安十几个,甚至几十个前置的依赖包,顺序也有好几层。手动去弄太麻烦了,而且也会有版本匹配问题。

方法1:直接打包环境

推荐重新配环境的时候用这种方法,一次就完成了,比较快。

conda install conda-pack

可以跑一些基础的代码试一下,没有问题的话就可以开始打包了:

conda pack -n [environment name] -o [target file name].tar.gz

后半部分也可以不加。打包完成后,拷到内网,开始在内网机上操作。

conda config --set offline true
makedir [folder name]
tar -zxvf [env name].tar.gz -C [folder name]
source [folder name]/bin/activate

方法2:从外网批量下载依赖包

打包过后的环境用到一半想起有的包没安,以及由于 _tensroflow-gpu_这种我的丐版外网机装不上的高级东西,又搜罗了单个包的安装方法。

pip download [package] -d ./[target folder]
cd C:\

,以去D盘为例,直接输:

D:

。在目标文件夹里面:

pip install  -r requirement.txt

完成!
好像还有一种不会全部更新依赖包的方法,但用那个每次都出错,我也懒得找了,有需要的自己百度一下吧。
这种全部更新的方法的问题就在于依赖包的版本,比如我用的 tensorflow_是2.3.0,匹配 _numpy 1.19及以下的某几个版本,但我安另一个包的时候就直接给我更新到更高的版本去了,同一份代码就开始报错。
解决:那种方法在我的环境里不好使,我就直接重安了一遍numpy......

如果能帮看到的人节省一点百度的时间我就很高兴啦。

Original: https://blog.csdn.net/tiezhu_yuan/article/details/123548122
Author: 学术界巨饿袁铁柱
Title: 内网机conda环境配置流程