• [调试调优] 使用Mindspore创建神经网络,construct函数的调用,以及无法调试的问题?
    【功能模块】MindsopreCell是MindSpore核心编程结构,是构建所有网络的基类,construct函数定义执行的过程,有一些语法限制。【操作步骤&问题现象】1、参照https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXA030+Self-paced/courseware/72548e98ce8649d793a5f3f5e225b948/c7dffdd1d89b4fc9912748d67c33e1bd/的例子2、class LENET5中函数construct用于创建神经网络,但在代码中看不到调用位置,这样我们无法从逻辑上理解程序的运行过程,该函数有一个参数x,我们如何给它提供实参,即使调试也看不到数据x的维度变化,很难看懂程序,这样无法结合程序理解数据流的变化。【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [执行问题] 【MindSpore产品】【数据处理功能】加入数据增强之后,报出卷积输入类型不同的问题
    【功能模块】# 图像增强trans = [ transforms.RandomCrop((32, 32), (4, 4, 4, 4), fill_value=(255,255,255)), # 对图像进行自动裁剪 transforms.RandomHorizontalFlip(prob=0.5), # 对图像进行随机水平翻转 transforms.RandomRotation(degrees=20, fill_value=(255,255,255)), # transforms.HWC2CHW(), # (h, w, c)转换为(c, h, w)]# 下载解压并加载CIFAR-10训练数据集dataset_train = Cifar10(path=data_dir, split='train', batch_size=6, shuffle=True, resize=32, download=True, transform=trans)ds_train = dataset_train.run()model.train(num_epochs, ds_train, callbacks=[ValAccMonitor(model, ds_val, num_epochs)])【操作步骤&问题现象】Traceback (most recent call last):  File "F:/8.Learning Task/MindSpore/ResNet/train.py", line 49, in <module>    model.train(num_epochs, ds_train, callbacks=[ValAccMonitor(model, ds_val, num_epochs)])  File "D:\Anaconda1\lib\site-packages\mindspore\train\model.py", line 906, in train    sink_size=sink_size)  File "D:\Anaconda1\lib\site-packages\mindspore\train\model.py", line 87, in wrapper    func(self, *args, **kwargs)  File "D:\Anaconda1\lib\site-packages\mindspore\train\model.py", line 546, in _train    self._train_process(epoch, train_dataset, list_callback, cb_params)  File "D:\Anaconda1\lib\site-packages\mindspore\train\model.py", line 794, in _train_process    outputs = self._train_network(*next_element)  File "D:\Anaconda1\lib\site-packages\mindspore\nn\cell.py", line 586, in __call__    out = self.compile_and_run(*args)  File "D:\Anaconda1\lib\site-packages\mindspore\nn\cell.py", line 964, in compile_and_run    self.compile(*inputs)  File "D:\Anaconda1\lib\site-packages\mindspore\nn\cell.py", line 937, in compile    _cell_graph_executor.compile(self, *inputs, phase=self.phase, auto_parallel_mode=self._auto_parallel_mode)  File "D:\Anaconda1\lib\site-packages\mindspore\common\api.py", line 1006, in compile    result = self._graph_executor.compile(obj, args_list, phase, self._use_vm_mode())TypeError: mindspore\core\utils\check_convert_utils.cc:701 _CheckTypeSame] For primitive[Conv2D], the input type must be same.name:[w]:Ref[Tensor(F32)].name:[x]:Tensor[UInt8].WARNING: Logging before InitGoogleLogging() is written to STDERR[CRITICAL] CORE(22848,1,?):2022-6-6 12:59:53 [mindspore\core\utils\check_convert_utils.cc:701] _CheckTypeSame] For primitive[Conv2D], the input type must be same.name:[w]:Ref[Tensor(F32)].name:[x]:Tensor[UInt8].【日志信息】(可选,上传日志内容或者附件)不知该如何让input的类型相同,求大佬们能看看,给个办法,谢谢!!!总体代码如下:# train.pyfrom mindvision.dataset import Cifar10import mindspore.dataset.vision.c_transforms as transforms# 数据集根目录data_dir = "./datasets"# 图像增强# 图像增强trans = [ transforms.RandomCrop((32, 32), (4, 4, 4, 4), fill_value=(255,255,255)), # 对图像进行自动裁剪 transforms.RandomHorizontalFlip(prob=0.5), # 对图像进行随机水平翻转 transforms.RandomRotation(degrees=20, fill_value=(255,255,255)), # transforms.HWC2CHW(), # (h, w, c)转换为(c, h, w)]# 下载解压并加载CIFAR-10训练数据集dataset_train = Cifar10(path=data_dir, split='train', batch_size=6, shuffle=True, resize=32, download=True, transform=trans)ds_train = dataset_train.run()step_size = ds_train.get_dataset_size()# 下载解压并加载CIFAR-10测试数据集dataset_val = Cifar10(path=data_dir, split='test', batch_size=6, resize=32, download=True)ds_val = dataset_val.run()from mindspore.train import Modelfrom mindvision.engine.callback import ValAccMonitorfrom mindvision.classification.models.head import DenseHeadfrom mindspore import nnfrom ResNet.resnet import resnet50# 定义ResNet50网络network = resnet50(pretrained=True)# 全连接层输入层的大小in_channel = network.head.dense.in_channelshead = DenseHead(input_channel=in_channel, num_classes=10)# 重置全连接层network.head = head# 设置学习率num_epochs = 40lr = nn.cosine_decay_lr(min_lr=0.00001, max_lr=0.001, total_step=step_size * num_epochs, step_per_epoch=step_size, decay_epoch=num_epochs)# 定义优化器和损失函数opt = nn.Momentum(params=network.trainable_params(), learning_rate=lr, momentum=0.9)loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')# 实例化模型model = Model(network, loss, opt, metrics={"Accuracy": nn.Accuracy()})# 模型训练model.train(num_epochs, ds_train, callbacks=[ValAccMonitor(model, ds_val, num_epochs)])
  • [技术干货] 【论文分享】基于多特征时空图卷积网络的水运通航密度预测
    基于多特征时空图卷积网络的水运通航密度预测董伟, 张磊磊, 金子恒, 孙伟, 高俊波上海海事大学信息工程学院,上海 201306摘要面对港航信息化发展的需求,物联网技术助力我国水运交通感知网络的建设。水运交通大数据分析已成为交通领域研究者和实践者关注的热点。在水运交通中,各港口的通航密度具有非线性、时空相关性和异质性,对其进行精准预测将面临巨大的挑战。提出一种基于多特征时空图卷积网络(MFSTGCN,multi-feature spatio-temporal graph convolution network)的预测方法,解决了水运交通中通航密度的预测问题。MFSTGCN方法从通航量、船舶平均航速和船舶密度3个特征出发,利用空间维图卷积和时间维卷积操作有效捕获通航密度的时空相关性。在某航运平台采集的长江港口船舶自动识别系统(AIS,automatic identification system)数据集上进行实验,结果表明,MFSTGCN 方法的预测效果优于时空图卷积网络(STGCN,spatio-temporal graph convolution network)方法的预测效果。关键词: 水运交通 ; 通航密度 ; 时空相关性 ; 图卷积网络 ; 多特征1 引言随着港航管理信息化的快速发展,物联网技术被应用于我国内河通航管理。在“十二五”规划期间,交通运输部组织开展了长三角航道网及京杭大运河水系智能航运信息服务(船联网)应用示范工程[1]。在江苏、浙江和上海地区开展了物联网关键技术研究及攻关,建设内河水运交通感知网络,满足海量数据管理与区域化应用需求。在“十三五”规划期间,我国的智慧交通建设不断发展,水运领域交通大数据的服务水平和决策能力得到大幅度提高。此外,宝船网、船讯网、船队在线(HiFleet)等航运智慧平台的出现是水运交通基础数据和数据交换平台的建设成果,同时表明面向管理服务、决策与智能化应用的智慧水运研究正在不断发展。我国的内河水运交通以内河货运船舶为主,通航密度是指在单位时间内通过某一航道断面的船舶或船队数量,它是水运交通中评价港口和航道通航情况的重要交通量,是一种典型的时空数据,同时在时间维度和空间维度上呈现相关性和异质性。通航密度的预测将为内河码头和航道的规划与建设、船舶航行安全预警和内河码头选址等提供可靠的数据支撑,对智慧水运建设具有重要的现实意义。因此,通航密度预测问题是智慧水运交通的研究热点之一。2 交通量预测的相关研究针对水运通航密度的预测问题,本文提出一种基于深度学习的通航密度预测方法——MFSTGCN模型。从与水运通航密度相关的多个交通量出发,使用基于STGCN的深度学习模型处理水运路网中的空间结构特征和时空相关性,既可以有效融合数据的多特征,又可以有效捕获数据的时空特性。交通量预测是一类典型的时空数据预测问题,不同类别的交通数据内嵌于连续空间,并且随时间发生动态变化。特别地,学者们将深度学习方法用于解决时空数据预测问题,利用卷积神经网络(CNN,convolutional neural network)可以有效提取网格数据的空间特征和交通量的空间特征。从发展历程来看,交通量预测方法可分为基于统计的方法、传统机器学习方法和基于深度学习的方法3类。其中,基于统计的方法包括历史均值(HA,history average)法、自回归积分滑动平均(ARIMA,auto-regressive integrated moving average)法[2]、卡尔曼滤波等;传统机器学习方法包括K近邻算法[3]、支持向量机[4]和随机森林算法等。近年来,深度学习方法被用于解决交通量预测问题,成为水运交通领域研究的热点之一。如何对复杂的时空依赖关系建模将是交通量预测的重点,对于此类时空预测问题,研究工作主要从两个方面展开:1) 将问题视作时序预测类问题,将空间依赖看作是静态的,进而采用图卷积定义空间依赖关系;2) 将时间依赖看作是严格周期性的,以图卷积方法建模动态的空间依赖关系。长短期记忆(LSTM,long short-term memory)网络以其端到端建模、易于映入外生变量和自动特征抽取的特点,成为一种流行的时间序列建模框架。Ma 等[5]最先将 LSTM 网络应用于交通领域,借助道路交通的传感器数据预测未来的道路交通速度。之后,Ma等[6]提出了一种基于CNN的交通速度预测方法,将交通网络作为图像进行学习,并对大规模、全网范围内的交通速度进行预测。Liu等[7]考虑交通流数据的时间特征、空间特征和周期性特征,结合 CNN 和 LSTM 网络生成一个Conv-LSTM模块,用于提取交通流的时空特征,然后使用 Bi-LSTM(Bi-directional long short-term memory)技术提取交通流的周期特征。Yao等[8]提出了一种时空动态网络(STDN,spatial-temporal dynamic network),基于局部CNN门控机制对空间位置之间的动态相似性进行建模,并使用周期性注意力转移机制处理长期的周期性时间转移。Li等[9]借鉴循环神经网络(RNN,recurrent neural network)提出扩散卷积递归神经网络(DCRNN,diffusion convolutional recurrent neural network),在有向图上对交通流以扩散形式进行建模,同时集成了交通流中的空间与时间依赖。其他基于 RNN 的研究工作包括时空多图卷积神经网络(STMGCN,spatiotemporal multi-graph convolution network)[10]、时间图卷积神经网络(T-GCN,temporal graph convolution network)[11]、图注意力长短期记忆(GATLSTM,graph attention long short-term memory)网络[12]、基于特征的长短期记忆(FBLSTM,feature based long short-term memory)网络[13]、时空循环卷积网络(SRCN,spatiotemporal recurrent convolutional network)[14]。Yu等[15]提出了STGCN解决交通领域的时间序列预测问题,没有使用常规的CNN和RNN单元,而是将问题用图表示出来,并建立具有完整卷积结构的模型,使得模型训练速度更快、参数更少。STGCN 模型通过对多尺度交通网络的建模,有效地捕获了时空相关性。冯宁等[16]在STGCN模型的基础上,结合交通流量的周期特征,提出了多组件STGCN,通过3个组件分别建模流量数据的近期、日周期、周周期特性,并相继提出时空注意力机制图卷积网络(ASTGCN,attention spatial-temporal graph convolutional network)[17]和时空同步图卷积网络(STSGCN,spatial-temporal synchronous graph convolutional network)[18]。ASTGCN利用空间注意力机制捕捉不同位置之间的动态空间相关性;STSGCN以路网结构为基础,将多个近邻时间步的空间图连接起来,使用图卷积方法捕获复杂的局部时空相关性,同时针对时空网络序列的不同部分使用相互独立的组件对时空异质性进行建模。Diao等[19]针对空间依赖关系会随时间变化的问题提出图卷积神经网络(GCNN,graph convolution neural network),其核心是对拉普拉斯矩阵进行动态分析,将张量分解融入深度学习框架,将实时交通数据分解为一个稳定的、依赖于长期时空关系的全局分量和一个捕捉短期波动的局部分量。目前,交通量预测问题在道路交通领域已取得丰硕的研究成果,但是在目标主体、数据采集方式和领域特征方面,水运交通与道路交通有一定区别。1) 道路交通的主体是车辆,水运交通的主体是运输船舶,而不同类型的船舶在船舶长度和航速上存在较大差异,单个主体之间的差异将影响交通量预测的准确性。2) 在道路交通中,采集的交通量通常比较密集,交通量具有平稳性,并有明显的周期性和趋势性;水运交通受采集手段(如AIS发送频率与船速相关)、气象水文和通航状态(如停航、施工)等因素的影响大,交通量的误差大、时间间隔长、波动性大,表现出非平稳性和周期性不显著等特征。因此,水运交通的交通量预测更具挑战性。本文考虑水运交通的通航密度受船舶自身属性影响较大,不能准确反映交通规律。将通航密度、船舶的平均航速与船舶密度相关特征结合起来,建立多特征的通航密度预测模型,克服单个主体之间差异的难点,并可以在一定程度上解决水运交通中交通量预测的非平稳性和周期性不显著的问题。3 结束语本文从水运交通中交通量的特点出发,提出了一种基于MFSTGCN的水运通航密度预测方法。该方法结合图卷积和标准卷积构造时空卷积块来同时捕获交通数据的时空特性,并将通航密度、船舶密度和平均船速等多个特征应用于预测模型,解决了水运交通量非平稳、随机性强和周期性不显著等特征造成的预测准确率低的问题。通过内河水运船舶AIS数据集上的实验,验证了本文所提模型在预测准确率上优于其他对比模型,表明该模型在捕获时空特征及时空相关性方面具有一定优势。本文探索了图卷积网络在水运交通领域中的应用,对智能水运交通的发展具有重要的现实意义。The authors have declared that no competing interests exist.作者已声明无竞争性利益关系。4 原文链接http://www.infocomm-journal.com/wlw/article/2020/2096-3750/2096-3750-4-3-00078.shtml
  • [调试调优] mindspore情感分析时RNN网络搭建出错
    【功能模块】在参考https://gitee.com/mindspore/docs/blob/r1.1/tutorials/training/source_zh_cn/advanced_use/nlp_sentimentnet.md#%E4%BD%BF%E7%94%A8sentimentnet%E5%AE%9E%E7%8E%B0%E6%83%85%E6%84%9F%E5%88%86%E7%B1%BB进行情感分类实战训练时,想要把lstm网络改为rnn网络【操作步骤&问题现象】在查看mindsprore文档后发现nn.RNN和nn.LSTM的区别在于LSTM比RNN多一个参数c,把代码中的所有c删除后训练时出现函数参数个数不匹配的原因,但本人水平有限,没有找到具体哪里导致的这个原因。【截图信息】修改后代码如下:# 定义需要单层LSTM小算子堆叠的设备类型。 STACK_LSTM_DEVICE = ["CPU"] # 短期内存(h)和长期内存(c)初始化为0 # 定义lstm_default_state函数来初始化网络参数及网络状态。 def lstm_default_state(batch_size, hidden_size, num_layers, bidirectional): """初始化默认输入.""" num_directions = 2 if bidirectional else 1 h = Tensor(np.zeros((num_layers * num_directions, batch_size, hidden_size)).astype(np.float32)) #c = Tensor(np.zeros((num_layers * num_directions, batch_size, hidden_size)).astype(np.float32)) return h def stack_lstm_default_state(batch_size, hidden_size, num_layers, bidirectional): """init default input.""" num_directions = 2 if bidirectional else 1 h_list = [] for _ in range(num_layers): h_list.append(Tensor(np.zeros((num_directions, batch_size, hidden_size)).astype(np.float32))) #c_list.append(Tensor(np.zeros((num_directions, batch_size, hidden_size)).astype(np.float32))) h= tuple(h_list) return h# 针对不同的场景,自定义单层LSTM小算子堆叠,来实现多层LSTM大算子功能。 class StackRNN(nn.Cell): """ Stack multi-layers LSTM together. """ def __init__(self, input_size, hidden_size, num_layers=3, has_bias=True, batch_first=False, dropout=0.0, bidirectional=True): super(StackRNN, self).__init__() self.num_layers = num_layers self.batch_first = batch_first self.transpose = ops.Transpose() # direction number num_directions = 2 if bidirectional else 1 # input_size list input_size_list = [input_size] for i in range(num_layers - 1): input_size_list.append(hidden_size * num_directions) # layers layers = [] for i in range(num_layers): layers.append(nn.RNNCell(input_size=input_size_list[i], hidden_size=hidden_size, has_bias=has_bias, )) # weights weights = [] for i in range(num_layers): # weight size weight_size = (input_size_list[i] + hidden_size) * num_directions * hidden_size * 4 if has_bias: bias_size = num_directions * hidden_size * 4 weight_size = weight_size + bias_size # numpy weight stdv = 1 / math.sqrt(hidden_size) w_np = np.random.uniform(-stdv, stdv, (weight_size, 1, 1)).astype(np.float32) # lstm weight weights.append(Parameter(initializer(Tensor(w_np), w_np.shape), name="weight" + str(i))) # self.lstms = layers self.weight = ParameterTuple(tuple(weights)) print(1) def construct(self, x, hx): """construct""" print(2) if self.batch_first: x = self.transpose(x, (1, 0, 2)) # stack lstm h= hx hn= None for i in range(self.num_layers): x, hn, _, _ = self.lstms[i](x, h[i], self.weight[i]) if self.batch_first: x = self.transpose(x, (1, 0,2)) return x, (hn)其他部分未作修改【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 卷积基本知识总结
    高斯核中方差越大则中间自己的权重就变小。高斯核尺寸越大参与计算的面积就越大则就越受到周围像素的影响更多请参考:https://www.bilibili.com/video/BV1V54y1B7K3?p=7
  • [执行问题] mindspore情感分析时RNN网络搭建出错
    【功能模块】在参考https://gitee.com/mindspore/docs/blob/r1.1/tutorials/training/source_zh_cn/advanced_use/nlp_sentimentnet.md#%E4%BD%BF%E7%94%A8sentimentnet%E5%AE%9E%E7%8E%B0%E6%83%85%E6%84%9F%E5%88%86%E7%B1%BB进行情感分类实战训练时,想要把lstm网络改为rnn网络【操作步骤&问题现象】在查看mindsprore文档后发现nn.RNN和nn.LSTM的区别在于LSTM比RNN多一个参数c,把代码中的所有c删除后训练时出现函数参数个数不匹配的原因,但本人水平有限,没有找到具体哪里导致的这个原因。【截图信息】修改后代码如下:# 定义需要单层LSTM小算子堆叠的设备类型。 STACK_LSTM_DEVICE = ["CPU"] # 短期内存(h)和长期内存(c)初始化为0 # 定义lstm_default_state函数来初始化网络参数及网络状态。 def lstm_default_state(batch_size, hidden_size, num_layers, bidirectional): """初始化默认输入.""" num_directions = 2 if bidirectional else 1 h = Tensor(np.zeros((num_layers * num_directions, batch_size, hidden_size)).astype(np.float32)) #c = Tensor(np.zeros((num_layers * num_directions, batch_size, hidden_size)).astype(np.float32)) return h def stack_lstm_default_state(batch_size, hidden_size, num_layers, bidirectional): """init default input.""" num_directions = 2 if bidirectional else 1 h_list = [] for _ in range(num_layers): h_list.append(Tensor(np.zeros((num_directions, batch_size, hidden_size)).astype(np.float32))) #c_list.append(Tensor(np.zeros((num_directions, batch_size, hidden_size)).astype(np.float32))) h= tuple(h_list) return h# 针对不同的场景,自定义单层LSTM小算子堆叠,来实现多层LSTM大算子功能。 class StackRNN(nn.Cell): """ Stack multi-layers LSTM together. """ def __init__(self, input_size, hidden_size, num_layers=3, has_bias=True, batch_first=False, dropout=0.0, bidirectional=True): super(StackRNN, self).__init__() self.num_layers = num_layers self.batch_first = batch_first self.transpose = ops.Transpose() # direction number num_directions = 2 if bidirectional else 1 # input_size list input_size_list = [input_size] for i in range(num_layers - 1): input_size_list.append(hidden_size * num_directions) # layers layers = [] for i in range(num_layers): layers.append(nn.RNNCell(input_size=input_size_list[i], hidden_size=hidden_size, has_bias=has_bias, )) # weights weights = [] for i in range(num_layers): # weight size weight_size = (input_size_list[i] + hidden_size) * num_directions * hidden_size * 4 if has_bias: bias_size = num_directions * hidden_size * 4 weight_size = weight_size + bias_size # numpy weight stdv = 1 / math.sqrt(hidden_size) w_np = np.random.uniform(-stdv, stdv, (weight_size, 1, 1)).astype(np.float32) # lstm weight weights.append(Parameter(initializer(Tensor(w_np), w_np.shape), name="weight" + str(i))) # self.lstms = layers self.weight = ParameterTuple(tuple(weights)) print(1) def construct(self, x, hx): """construct""" print(2) if self.batch_first: x = self.transpose(x, (1, 0, 2)) # stack lstm h= hx hn= None for i in range(self.num_layers): x, hn, _, _ = self.lstms[i](x, h[i], self.weight[i]) if self.batch_first: x = self.transpose(x, (1, 0,2)) return x, (hn)其他部分未作修改【日志信息】(可选,上传日志内容或者附件)
  • [其他] Fire-YOLO:一种用于火灾检测的小目标检测方法
    文章来源于当交通遇上机器学习 ,作者CY1.文章信息论文链接:https://www.mdpi.com/2071-1050/14/9/4930/htm2.摘要针对森林火灾图像中小目标、类火目标和类烟目标的检测,以及不同自然光下的火灾检测,提出了一种改进的Fire-YOLO深度学习算法。Fire-YOLO检测模型从三维扩展了特征提取网络,增强了火灾小目标识别的特征传播,提高了网络性能,减少了模型参数。进一步,通过特征金字塔的提升,得到了性能最好的预测框。与最先进的目标检测网络相比,Fire-YOLO取得了优异的结果,尤其是在火灾和烟雾的小目标检测方面。总体而言,Fire-YOLO检测模型可以有效地处理小火源目标、类火和类烟目标的检测。当输入图像尺寸为416 × 416分辨率时,平均检测时间为0.04 s /帧,可以提供实时的森林火灾检测。此外,文章提出的算法也可以应用于其他复杂情况下的小目标检测。3.简介火灾探测对于保护森林资源、保护人民生命财产至关重要。近年来,随着火灾图像探测成为研究热点,图像探测具有探测时间早、精度高、系统安装灵活、能有效探测大空间复杂建筑结构火灾等优点。一类方法基于火灾发生时的颜色识别,但基于颜色的方法对亮度和阴影非常敏感。因此,这些方法产生的假警报数量很高。随着机器学习的发展,深度学习技术已广泛应用于检测。有学者提出了一种使用微调卷积神经网络(CNN)的早期火灾探测框架,但该模型具有较高的计算成本。有的学者使用深度融合CNN进行烟雾探测,它结合了注意机制、特征级和决策级融合模块。然而,仍有一些小目标未能实现。有的学者使用了一种基于区域的快速卷积神经网络(R-CNN),根据空间特征检测可疑火灾区域(SRoF)和非火灾区域。这可以通过减少错误探测成功地提高火灾探测精度,但探测速度相对较慢。有的学者提出了一种基于YOLO-V3和YOLO-V4的森林烟雾检测算法。与YOLO-V4相比,YOLO-V3的模型更小,更易于部署。在此基础上,文章选择了YOLO-V3模型作为整体算法,并对其进行了改进。提出了对YOLO-V3算法的改进。网络中加入了空心卷积和DenseNet,提高了火灾早期小规模火焰的探测效果。然而,方法存在火焰定位不准确和屏蔽性能差的问题。I-YOLOv3-tiny模型通过网络结构优化、多尺度融合和K-均值聚类来提高检测精度,但检测速度有待提高。通过提高特征图的分辨率,它减少了火灾探测中的误差,但由于计算量的增加,相应的处理时间也增加了。将分类模型和目标检测模型结合用于火灾探测的方法降低了计算成本,提高了探测精度。尽管如此,它不适用于火灾早期小目标的探测场景。有的学者通过将原始网络结构中的两步降采样卷积网络替换为图像双分割和双线性上采样网络,扩大了小目标的特征,提高了小目标的检测精度。虽然这会增加参数的数量,但计算成本也会增加。对于具有实时性要求的火灾探测,仍需进一步改进。这些问题给火灾场景中小目标的检测带来了巨大的挑战。4.模型A. YOLO-V3YOLO- v3是由YOLO和YOLOV2网络演化而来的对象检测模型。与Faster R-CNN相比,YOLO- v3是单级检测算法,这意味着YOLO网络不需要Regional Proposal network (RPN),而是直接检测图像中的目标。这样既考虑了检测速度和检测精度,又减小了模型参数的尺寸。YOLO-V3对每个类别独立使用逻辑回归,取代了DarkENT-19到DarkENT-53的特征提取网络。YOLO-V3几乎与其他目标检测算法一样精确,但速度至少是后者的两倍。YOLO-V3的特征提取网络为Darknet-53。Darknet-53通过不断地使用卷积、标准化、池化等操作,提取输入到YOLO-V3网络的火灾图像的特征,并通过卷积不断地对火灾图像进行特征提取。这种方法广泛应用于其他各种网络模型中,ResNet也通过增加网络的深度来提高网络的精度。虽然可以同时缩放两个或三个维度,但由于深度和宽度之间有一定的关系,需要进行复杂的手动调整,也就是说只能调整深度和宽度才能达到更好的精度。目前,YOLO-V3模型在火灾探测中并未得到广泛应用。B.Fire-YOLOFire-YOLO是一种单阶段检测模型。FireYOLO用于火灾探测的步骤如下所示。首先,网络输入火灾图像分为S×S网格,和检测在每个探测单元格:是否有火焰或者烟雾的中心目标是发现落在S2的网格,网格负责检测目标被检测出来。然后,每个网格预测3个边界框,并给出这些边界框的置信度。置信计算的定义如下。当目标落在网格中时Pγ = 1,否则Pγ = 0。IoU表示预测边界框与真实边界框的重合。置信度反映了网格中是否存在对象以及包含对象时预测边界框的准确性。当多个包围盒同时检测到同一目标时,YOLO网络将使用非最大抑制(Non-Maximum Suppression, NMS)方法选择最佳包围盒。利用卷积神经网络对视频中的火情和烟雾进行分类来检测火情,具有良好的准确率。文章提出的Fire-YOLO模型从深度、宽度和分辨率三个维度考虑,实现了更加均衡的网络架构。Fire-YOLO火灾探测步骤如下图所示。将输入图像划分为S×S网格,每个网格预测三个边界框和置信度分数。然后,使用非最大值抑制方法选择最佳边界框。Effentnet的提出为设计一种标准化的卷积神经网络尺度方法提供了可能。通过平衡网络深度、宽度和分辨率这三个维度,可以在深度、宽度和分辨率这三个维度上实现更均衡的网络架构,而无需复杂的人工调整。由于火灾数据集中大量的检测对象为小火焰和烟雾,这种简单高效的复合尺度变换方法相对于其他的一维尺度变换方法可以进一步提高火灾的检测精度,并能充分节约计算资源。最终,文章使用的改进后的Effentnet比精度相同的卷积神经网络速度更快,参数更少,模型更小,具有明显的优势。提出的Fire-YOLO火灾探测模型网络结构如下图所示。与YOLO-V3中特征提取网络Darknet53中使用的残块不同,Fire-YOLO的特征提取网络使用了一个移动倒瓶颈卷积(MBConv),该卷积由深度卷积和挤压-激活网络(SENet)组成。MBConv块的结构,最重要的是,一个1×1卷积内核用于增加图像的维数,接下来通过切除卷积和SENet反过来,最后用1×1卷积内核来减少图像的维数输出。输入图像经过特征提取网络并上采样后,得到对应的特征图,即图像对应的向量特征矩阵。为了获得小目标的高层特征信息,特征图将经过卷积集处理,卷积集由5个卷积层组成,卷积核交替为1 × 1和3 × 3。然后利用池化层将高维向量扁平化为一维向量,由激活函数进行处理。将这些向量输入到激活函数中,得到相应的分类结果,并选择最有可能的结果作为特征提取网络输出。针对Darknet-53特征提取网络在深度、宽度和分辨率三个维度平衡方面的性能缺陷,文章在文章提出的fire数据集上使用改进的Effecentnet特征提取网络,弥补了Darknet-53在小目标检测方面的性能不足,提高了小目标检测的特征提取能力。对于输入的小目标图像,增强了小目标特征的学习能力,提高了小目标特征提取网络的性能。为了更好地处理小目标图像,Fire-YOLO模型首先将输入图像缩放到416 × 416像素,然后使用Effecentnet从图像中提取特征。经过多层的深度可分卷积、全局平均池化、特征压缩和特征扩展,对深度可分卷积学习到的特征映射进行上采样。通过特征金字塔处理得到不同尺度的预测框。文章提出的Fire-YOLO模型预测了13 × 13、26 × 26、52 × 52三种不同尺度的边界盒。用于小目标检测的深度可分离卷积结合了逐条通道卷积和逐级点卷积两种级别,提取不同粒度的小目标特征。深度可分卷积的结构如下图所示。通过比较YOLO-V3中使用的Darknet-53特征提取网络、快速R-CNN中使用的RPN目标建议网络和Fire YOLO中使用的深度可分离卷积,发现深度可分离卷积在计算复杂度方面具有优异的性能。这种卷积结构加快了模型的训练速度,提高了模型的检测精度。在火灾探测模型的实际应用中,可以加快网络的处理速度,如果计算量较小,可以达到实时图像处理的目的,从而实现火灾危险的实时探测。同时,该模型的硬件要求也降低了,以便于部署。SENet主要由两个阶段组成。第一个阶段是挤压阶段。第二个阶段是激发阶段。在获得挤压的矢量后,使用完全连接的层,并预测每个通道的重要性。随后,将其应用于与初始特征映射相对应的信道,以便小目标的特征信息将被赋予更高的优先级。SENet的结构如下图所示。在深度学习网络模型中,激活函数是一个连续可导的非线性函数,可以拟合非线性关系。激活函数及其导数的形式比较简单,可以加快网络的学习速度。正确使用激活函数对模型的训练和模型对目标预测的准确性都具有重要意义。活化函数的导数不宜过大或过小,最好稳定在1左右。文章提出的模型使用了Swish激活函数,其表达式为:其中β是常数或可训练参数。Swish具有无上界、无下界、光滑、非单调的特点。Swish在深度模式上比ReLU要好。乙状结肠的饱和函数很容易导致梯度的消失,借鉴ReLU的影响,当它是非常大的,它将方法,但当x→∞,函数的一般趋势比ReLU ReLU相似但更复杂。Swish函数可以看作是一个介于线性函数和ReLU函数之间的平滑函数。C. 性能指标文章利用训练后的Fire-YOLO模型对测试图像进行一系列实验,验证算法的性能。评价神经网络模型有效性的相关指标有:precision, recall, F1, AP值。在二元分类问题中,根据真类别和预测类别的组合,样本可分为四种类型:真阳性(TP)、假阳性(FP)、真阴性(TN)和假阴性(FN)。分类结果的混淆矩阵如下表所示。其余指标的公式根据混淆矩阵计算如下:5.实验分析本节介绍训练网络的实验环境、数据集、模型效果评价指标以及实验结果分析。通过一系列不同模型的对比实验,分析了文章提出的新模型的优越性。实验过程中使用了火数据集和小目标数据集。通过fire数据集对目标检测网络的准确性进行了验证和评估,在不同光照条件、类火烟雾目标等复杂环境下具有良好的检测效果;在小目标火力数据集上验证了该检测方法。结果证实,Fire-YOLO更容易检测到较小的目标。Fire-YOLO检测模型接收416 × 416像素图像作为输入,由于GPU性能限制,批处理大小设为8,每个模型训练100 epoch,初始学习速率为10−3,50 epoch后除以10。A. 数据采集实验中使用的数据集是通过采集消防公益平台上的消防图片来构建的。将fire数据集和小目标数据集分别划分为训练集、验证集和测试集,以便在相同的实验设置下对不同的模型进行训练。第一个数据集为火焰数据集,文章使用的图像数据是公共网站上收集的火灾和烟雾图像。这19819张原始图像包括不同天气和光线线下的火焰和烟雾。在对以上数据集图像进行编号后,使用LabelImg工具进行手动标记,包括绘制边框和分类类别。考虑到标签与数据的对应关系,为保证数据集分布均匀,将数据集按70%、20%、10%的比例随机分为训练集、验证集和测试集。为了保证实验环境相同,最终数据集以PASCAL VOC数据集格式存储。为了防止神经网络中过拟合,对于像素区域不清晰的阳性样本不进行标记。完成的数据集如下表所示。第二个数据集为小目标检测数据集,文章自制了370张图像的数据集。数据集的内容都是包含小目标的火焰和烟雾。通过将250 × 250像素的火焰图像嵌入到1850 × 1850像素的图像中,可以使被探测目标在图像中的面积非常小。最后使用LabelImg工具手工标注小目标。B. 算法的比较分析为了验证模型的性能,文章使用火焰和烟雾图像作为训练集。将所提出的模型与YOLO-V3和Faster R-CNN检测方法进行了比较。三种模型在试验过程中的P-R曲线如图5所示。准确率、召回率、F1评分和mAP值如下表所示。基于以上结果,文章提出的Fire-YOLO在检测性能上优于YOLO-V3和Faster R-CNN。Fire-YOLO模型的精度为0.915,F1的值为0.73,mAP的值为0.802,高于其他两个模型,体现了该模型的优越性。同时Fire-YOLO降低了计算成本,节约了资源,更有利于社会的可持续发展。C. 小目标的检测性能在火灾探测过程中,由于摄像机离火源太远,实际的火源位置在捕获的图像中只占很小的区域,这将导致网络模型对火焰和烟雾的探测非常差。通过比较三种不同的目标检测模型在小目标火灾数据集上的准确率、召回率和mAP,可以得出文章提出的Fire-YOLO模型对非常小的目标对象的检测效率优于Faster R-CNN和未改进的YOLO-V3网络。训练于射击小目标数据集的Fire-YOLO对待检测小目标图像在深度、宽度和分辨率三个维度上进行自适应调整,增强了信息之间的交互作用。从而增强了Fire-YOLO提取小目标特征的能力,提高了小目标物体的检测精度。下表给出了三种模型方法对小目标射击数据集评价指标的具体结果。三种不同模型对小目标火力数据集的检测效率差异较大。文章提出的Fire-YOLO模型的准确率和召回率比其他模型更显著。准确率可达75.48%,可实现对小目标的检测。森林火灾的早期及时发现可以大大减少对生态环境的破坏,减少火灾造成的经济损失,促进生态环境的可持续发展。训练后Fire-YOLO网络模型具有良好的火力目标探测效率。文章使用Fire-YOLO模型来检测非常小的火力目标,并将检测结果图形化显示。较小的射击目标是小目标射击数据集中验证数据集中的所有图像。对Fire-YOLO进行了30多个验证插图的验证,最终的图像检测结果如下图所示。Fire-YOLO可以检测到图片中所有的火和烟,而YOLO-V3和Faster R-CNN在检测结果中只能检测到图像中的部分目标。D. 类火和类烟目标的探测性能通过对比模型对丰富的类火和类烟图像的检测性能,可以发现Fire-YOLO对类火和类烟目标具有更好的检测效率。除了Fire-YOLO,其他模型分别将图像中的光和云误判为火和烟。显然,Fire-YOLO对图像纹理特征更加敏感,这是由于在特征提取网络中结合了1 × 1卷积核和SE模块。最后,提高了该模型在探测混淆目标时的鲁棒性。三种模型的类火和类烟检测结果如下图所示。在上述情况下,Fire-YOLO模型大大减少了误检的发生,减少了劳动力消耗,节约了社会资源。E. 模型在不同自然光下的检测性能本节通过对比不同自然光照条件下的多幅火灾图像,测试Fire-YOLO在真实环境中的性能。在实际火灾探测现场,会出现光线不足或光线很强的情况。在这种场景下,会对火灾探测产生一定的影响。使用大尺度feature map对模型进行改进,识别小目标对象,但在弱光条件下存在误判。检测结果如下图所示。通过比较FasterR-CNN、YOLO-V3和Fire-YOLO模型的检测性能,结果表明该模型在不同光照条件下具有良好的性能,对光照变化具有较强的鲁棒性。Fire-YOLO模式的这些优势可以减少火灾对森林的危害,减少温室效应对人类的影响,促进可持续发展文章提出的Fire- YOLO模型在小目标、类火、类烟探测以及不同明度下的火灾探测等方面都取得了令人满意的效果。在实际应用中,该方法不仅具有实时性,而且具有良好的鲁棒性。然而文章检测算法仍然存在检测精度低、检测半遮挡目标具有挑战性的问题。这可能是由于在实际环境中探测火焰时,火灾的可变性和火灾蔓延的复杂性,造成了火灾检查的困境,如下图所示。.
  • [其他] 网络结构创新在医学图像分割中的应用
    2.1 基于模型压缩的分割方法 为了实现实时处理高分辨率的2D/3D医学图像(例如CT、MRI和组织病理学图像等),研究人员提出了多种压缩模型的方法。weng等人利用NAS技术应用于U-Net网络,得到了在CT,MRI和超声图像上具有更好的器官/肿瘤分割性能的小型网络。Brugger通过利用组归一化(group normalization )和Leaky-ReLU(leaky ReLU function),重新设计了U-Net架构,以使网络对3D医学图像分割的存储效率更高。也有人设计了参数量更少的扩张卷积module。其他一些模型压缩的方法还有权重量化(十六位、八位、二值量化)、蒸馏、剪枝等等。 2.2 编码-解码结构的分割方法 Drozdal提出了一种在将图像送入分割网络之前应用简单的CNN来对原始输入图像进行归一化的方法,提高了单子显微镜图像分割、肝脏CT、前列腺MRI的分割精度。Gu提出了在主干网络利用扩张卷积来保留上下文信息的方法。Vorontsov提出了一种图到图的网络框架,将具有ROI的图像转换为没有ROI的图像(例如存在肿瘤的图像转换为没有肿瘤的健康图像),然后将模型去除的肿瘤添加到新的健康图像中,从而获得对象的详细结构。Zhou等人提出了一种对U-Net网络的跳跃连接重新布线的方法,并在胸部低剂量CT扫描中的结节分割,显微镜图像中的核分割,腹部CT扫描中的肝脏分割以及结肠镜检查视频中的息肉分割任务中测试了性能。Goyal将DeepLabV3应用到皮肤镜彩色图像分割中,以提取皮肤病变区域。 2.3 基于注意力机制的分割方法 Nie提出了一种注意力模型,相比于baseline模型(V-Net和FCN),可以更准确地分割前列腺。SinHa提出了一种基于多层注意力机制的网络,用于MRI图像腹部器官分割。Qin等人提出了一个扩张卷积模块,以保留3D医学图像的更多细节。其他基于注意力机制的啼血图像分割论文还有很多。 2.4 基于对抗学习的分割网络 Khosravan提出了从CT扫描中进行胰腺分割的对抗训练网络。Son用生成对抗网络进行视网膜图像分割。Xue使用全卷积网络作为生成对抗框架中的分割网络,实现了从MRI图像分割脑肿瘤。还有其他一些成功应用GANs到医学图像分割问题的论文,不再一一列举。 2.5 基于RNN的分割模型 递归神经网络(RNN)主要用于处理序列数据,长短期记忆网络(LSTM)是RNN的一个改进版本,LSTM通过引入自环(self-loops)使得梯度流能长期保持。在医学图像分析领域,RNN用于对图像序列中的时间依赖性进行建模。Bin等人提出了一种将全卷积神经网络与RNN融合的图像序列分割算法,将时间维度上的信息纳入了分割任务。Gao等人利用CNN和LSTM拉对脑MRI切片序列中的时间关系进行建模,以提高4D图像中的分割性能。Li等人先用U-Net获得初始分割概率图,后用LSTM从3D CT图像中进行胰腺分割,改善了分割性能。其他利用RNN进行医学图像分割的论文还有很多,不再一一介绍。 2.6 小结 这部分内容主要是分割算法在医学图像分割中的应用,所以创新点并不多,主要还是对不同格式(CT还是RGB,像素范围,图像分辨率等等)的数据和不同部位数据的特点(噪声、对象形态等等),经典网络需要针对不同数据进行改进,以适应输入数据格式和特征,这样能更好的完成分割任务。虽然说深度学习是个黑盒,但整体上模型的设计还是有章可循的,什么策略解决什么问题、造成什么问题,可以根据具体分割问题进行取舍,以达到最优的分割性能。
  • [其他] 适合新手的深度学习综述(5)--深度神经网络
    在本节中,我们将简要地讨论深度神经网络 (DNN),以及它们最近的改进和突破。神经网络的功能与人脑相似。它们主要由神经元和连接组成。当我们说深度神经网络时,我们可以假设有相当多的隐藏层,可以用来从输入中提取特征和计算复杂的函数。Bengio(2009) 解释了深度结构的神经网络,如卷积神经网络 (CNN)、自编码器 (AE) 等及其变体。Deng 和 Yu(2014) 详细介绍了一些神经网络架构,如 AE 及其变体。Goodfellow 等 (2016) 对深度前馈网络、卷积网络、递归网络及其改进进行了介绍和技巧性讲解。Schmidhuber(2014) 提到了神经网络从早期神经网络到最近成功技术的完整历史。5.1 深度自编码器自编码器 (AE) 是神经网络 (NN),其中输出即输入。AE 采用原始输入,编码为压缩表示,然后解码以重建输入。在深度 AE 中,低隐藏层用于编码,高隐藏层用于解码,误差反向传播用于训练.。5.1.1 变分自编码器变分自动编码器 (VAE) 可以算作解码器。VAE 建立在标准神经网络上,可以通过随机梯度下降训练 (Doersch,2016)。5.1.2 多层降噪自编码器在早期的自编码器 (AE) 中,编码层的维度比输入层小(窄)。在多层降噪自编码器 (SDAE) 中,编码层比输入层宽 (Deng and Yu, 2014)。5.1.3 变换自编码器深度自动编码器 (DAE) 可以是转换可变的,也就是从多层非线性处理中提取的特征可以根据学习者的需要而改变。变换自编码器 (TAE) 既可以使用输入向量,也可以使用目标输出向量来应用转换不变性属性,将代码引导到期望的方向 (Deng and Yu,2014)。5.2 深度卷积神经网络四种基本思想构成了卷积神经网络 (CNN),即:局部连接、共享权重、池化和多层使用。CNN 的第一部分由卷积层和池化层组成,后一部分主要是全连接层。卷积层检测特征的局部连接,池层将相似的特征合并为一个。CNN 在卷积层中使用卷积而不是矩阵乘法。Krizhevsky 等人 (2012) 提出了一种深度卷积神经网络 (CNN) 架构,也称为 AlexNet,这是深度学习 (Deep Learning, DL) 的一个重大突破。网络由 5 个卷积层和 3 个全连接层组成。该架构采用图形处理单元 (GPU) 进行卷积运算,采用线性整流函数 (ReLU) 作为激活函数,用 Dropout 来减少过拟合。Iandola 等人 (2016) 提出了一个小型的 CNN 架构,叫做「SqueezeNet」。Szegedy 等人 (2014) 提出了一种深度 CNN 架构,名为 Inception。Dai 等人 (2017) 提出了对 Inception-ResNet 的改进。Redmon 等人 (2015) 提出了一个名为 YOLO (You Only Look Once) 的 CNN 架构,用于均匀和实时的目标检测。Zeiler 和 Fergus (2013) 提出了一种将 CNN 内部激活可视化的方法。Gehring 等人 (2017) 提出了一种用于序列到序列学习的 CNN 架构。Bansal 等人 (2017) 提出了 PixelNet,使用像素来表示。Goodfellow 等人 (2016) 解释了 CNN 的基本架构和思想。Gu 等人 (2015) 对 CNN 的最新进展、CNN 的多种变体、CNN 的架构、正则化方法和功能以及在各个领域的应用进行了很好的概述。5.2.1 深度最大池化卷积神经网络最大池化卷积神经网络 (MPCNN) 主要对卷积和最大池化进行操作,特别是在数字图像处理中。MPCNN 通常由输入层以外的三种层组成。卷积层获取输入图像并生成特征图,然后应用非线性激活函数。最大池层向下采样图像,并保持子区域的最大值。全连接层进行线性乘法。在深度 MPCNN 中,在输入层之后周期性地使用卷积和混合池化,然后是全连接层。5.2.2 极深的卷积神经网络Simonyan 和 Zisserman(2014) 提出了非常深层的卷积神经网络 (VDCNN) 架构,也称为 VGG Net。VGG Net 使用非常小的卷积滤波器,深度达到 16-19 层。Conneau 等人 (2016) 提出了另一种文本分类的 VDCNN 架构,使用小卷积和池化。他们声称这个 VDCNN 架构是第一个在文本处理中使用的,它在字符级别上起作用。该架构由 29 个卷积层组成。5.3 网络中的网络Lin 等人 (2013) 提出了网络中的网络 (Network In Network,NIN)。NIN 以具有复杂结构的微神经网络代替传统卷积神经网络 (CNN) 的卷积层。它使用多层感知器 (MLPConv) 处理微神经网络和全局平均池化层,而不是全连接层。深度 NIN 架构可以由 NIN 结构的多重叠加组成。5.4 基于区域的卷积神经网络Girshick 等人 (2014) 提出了基于区域的卷积神经网络 (R-CNN),使用区域进行识别。R-CNN 使用区域来定位和分割目标。该架构由三个模块组成:定义了候选区域的集合的类别独立区域建议,从区域中提取特征的大型卷积神经网络 (CNN),以及一组类特定的线性支持向量机 (SVM)。5.4.1 Fast R-CNNGirshick(2015) 提出了快速的基于区域的卷积网络 (Fast R-CNN)。这种方法利用 R-CNN 架构能快速地生成结果。Fast R-CNN 由卷积层和池化层、区域建议层和一系列全连接层组成。5.4.2 Faster R-CNNRen 等人 (2015) 提出了更快的基于区域的卷积神经网络 (Faster R-CNN),它使用区域建议网络 (Region Proposal Network, RPN) 进行实时目标检测。RPN 是一个全卷积网络,能够准确、高效地生成区域建议 (Ren et al.,2015)。5.4.3 Mask R-CNN何恺明等人 (2017) 提出了基于区域的掩模卷积网络 (Mask R-CNN) 实例目标分割。Mask R-CNN 扩展了 R-CNN 的架构,并使用一个额外的分支用于预测目标掩模。5.4.4 Multi-Expert R-CNNLee 等人 (2017) 提出了基于区域的多专家卷积神经网络 (ME R-CNN),利用了 Fast R-CNN 架构。ME R-CNN 从选择性和详尽的搜索中生成兴趣区域 (RoI)。它也使用 per-RoI 多专家网络而不是单一的 per-RoI 网络。每个专家都是来自 Fast R-CNN 的全连接层的相同架构。5.5 深度残差网络He 等人 (2015) 提出的残差网络 (ResNet) 由 152 层组成。ResNet 具有较低的误差,并且容易通过残差学习进行训练。更深层次的 ResNet 可以获得更好的性能。在深度学习领域,人们认为 ResNet 是一个重要的进步。5.5.1 Resnet in ResnetTarg 等人 (2016) 在 Resnet in Resnet (RiR) 中提出将 ResNets 和标准卷积神经网络 (CNN) 结合到深层双流架构中。5.5.2 ResNeXtXie 等人 (2016) 提出了 ResNeXt 架构。ResNext 利用 ResNets 来重复使用分割-转换-合并策略。5.6 胶囊网络Sabour 等人 (2017) 提出了胶囊网络 (CapsNet),即一个包含两个卷积层和一个全连接层的架构。CapsNet 通常包含多个卷积层,胶囊层位于末端。CapsNet 被认为是深度学习的最新突破之一,因为据说这是基于卷积神经网络的局限性而提出的。它使用的是一层又一层的胶囊,而不是神经元。激活的较低级胶囊做出预测,在同意多个预测后,更高级的胶囊变得活跃。在这些胶囊层中使用了一种协议路由机制。Hinton 之后提出 EM 路由,利用期望最大化 (EM) 算法对 CapsNet 进行了改进。5.7 循环神经网络循环神经网络 (RNN) 更适合于序列输入,如语音、文本和生成序列。一个重复的隐藏单元在时间展开时可以被认为是具有相同权重的非常深的前馈网络。由于梯度消失和维度爆炸问题,RNN 曾经很难训练。为了解决这个问题,后来许多人提出了改进意见。Goodfellow 等人 (2016) 详细分析了循环和递归神经网络和架构的细节,以及相关的门控和记忆网络。Karpathy 等人 (2015) 使用字符级语言模型来分析和可视化预测、表征训练动态、RNN 及其变体 (如 LSTM) 的错误类型等。J´ozefowicz 等人 (2016) 探讨了 RNN 模型和语言模型的局限性。5.7.1 RNN-EMPeng 和 Yao(2015) 提出了利用外部记忆 (RNN-EM) 来改善 RNN 的记忆能力。他们声称在语言理解方面达到了最先进的水平,比其他 RNN 更好。5.7.2 GF-RNNChung 等 (2015) 提出了门控反馈递归神经网络 (GF-RNN),它通过将多个递归层与全局门控单元叠加来扩展标准的 RNN。5.7.3 CRF-RNNZheng 等人 (2015) 提出条件随机场作为循环神经网络 (CRF-RNN),其将卷积神经网络 (CNN) 和条件随机场 (CRF) 结合起来进行概率图形建模。5.7.4 Quasi-RNNBradbury 等人 (2016) 提出了用于神经序列建模和沿时间步的并行应用的准循环神经网络 (QRNN)。5.8 记忆网络Weston 等人 (2014) 提出了问答记忆网络 (QA)。记忆网络由记忆、输入特征映射、泛化、输出特征映射和响应组成。5.8.1 动态记忆网络Kumar 等人 (2015) 提出了用于 QA 任务的动态记忆网络 (DMN)。DMN 有四个模块:输入、问题、情景记忆、输出。5.9 增强神经网络Olah 和 Carter(2016) 很好地展示了注意力和增强循环神经网络,即神经图灵机 (NTM)、注意力接口、神经编码器和自适应计算时间。增强神经网络通常是使用额外的属性,如逻辑函数以及标准的神经网络架构。5.9.1 神经图灵机Graves 等人 (2014) 提出了神经图灵机 (NTM) 架构,由神经网络控制器和记忆库组成。NTM 通常将 RNN 与外部记忆库结合。5.9.2 神经 GPUKaiser 和 Sutskever(2015) 提出了神经 GPU,解决了 NTM 的并行问题。5.9.3 神经随机存取机Kurach 等人 (2015) 提出了神经随机存取机,它使用外部的可变大小的随机存取存储器。5.9.4 神经编程器Neelakantan 等人 (2015) 提出了神经编程器,一种具有算术和逻辑功能的增强神经网络。5.9.5 神经编程器-解释器Reed 和 de Freitas(2015) 提出了可以学习的神经编程器-解释器 (NPI)。NPI 包括周期性内核、程序内存和特定于领域的编码器。5.10 长短期记忆网络Hochreiter 和 Schmidhuber(1997) 提出了长短期记忆 (Long short - Short-Term Memory, LSTM),克服了循环神经网络 (RNN) 的误差回流问题。LSTM 是基于循环网络和基于梯度的学习算法,LSTM 引入自循环产生路径,使得梯度能够流动。Greff 等人 (2017) 对标准 LSTM 和 8 个 LSTM 变体进行了大规模分析,分别用于语音识别、手写识别和复调音乐建模。他们声称 LSTM 的 8 个变种没有显著改善,而只有标准 LSTM 表现良好。Shi 等人 (2016b) 提出了深度长短期记忆网络 (DLSTM),它是一个 LSTM 单元的堆栈,用于特征映射学习表示。5.10.1 批-归一化 LSTMCooijmans 等人 (2016) 提出了批-归一化 LSTM (BN-LSTM),它对递归神经网络的隐藏状态使用批-归一化。5.10.2 Pixel RNNvan den Oord 等人 (2016b) 提出像素递归神经网络 (Pixel-RNN),由 12 个二维 LSTM 层组成。5.10.3 双向 LSTMW¨ollmer 等人 (2010) 提出了双向 LSTM(BLSTM) 的循环网络与动态贝叶斯网络 (DBN) 一起用于上下文敏感关键字检测。5.10.4 Variational Bi-LSTMShabanian 等人 (2017) 提出了变分双向 LSTM(Variational Bi-LSTM),它是双向 LSTM 体系结构的变体。Variational Bi-LSTM 使用变分自编码器 (VAE) 在 LSTM 之间创建一个信息交换通道,以学习更好的表征。5.11 谷歌神经机器翻译Wu 等人 (2016) 提出了名为谷歌神经机器翻译 (GNMT) 的自动翻译系统,该系统结合了编码器网络、解码器网络和注意力网络,遵循共同的序列对序列 (sequence-to-sequence) 的学习框架。5.12 Fader NetworkLample 等人 (2017) 提出了 Fader 网络,这是一种新型的编码器-解码器架构,通过改变属性值来生成真实的输入图像变化。5.13 超网络Ha 等人 (2016) 提出的超网络(Hyper Networks)为其他神经网络生成权值,如静态超网络卷积网络、用于循环网络的动态超网络。Deutsch(2018) 使用超网络生成神经网络。5.14 Highway NetworksSrivastava 等人 (2015) 提出了高速路网络(Highway Networks),通过使用门控单元来学习管理信息。跨多个层次的信息流称为信息高速路。5.14.1 Recurrent Highway NetworksZilly 等人 (2017) 提出了循环高速路网络 (Recurrent Highway Networks,RHN),它扩展了长短期记忆 (LSTM) 架构。RHN 在周期性过渡中使用了 Highway 层。5.15 Highway LSTM RNNZhang 等人 (2016) 提出了高速路长短期记忆 (high - Long short Memory, HLSTM) RNN,它在相邻层的内存单元之间扩展了具有封闭方向连接 (即 Highway) 的深度 LSTM 网络。5.16 长期循环 CNNDonahue 等人 (2014) 提出了长期循环卷积网络 (LRCN),它使用 CNN 进行输入,然后使用 LSTM 进行递归序列建模并生成预测。5.17 深度神经 SVMZhang 等人 (2015) 提出了深度神经 SVM(DNSVM),它以支持向量机 (Support Vector Machine, SVM) 作为深度神经网络 (Deep Neural Network, DNN) 分类的顶层。5.18 卷积残差记忆网络Moniz 和 Pal(2016) 提出了卷积残差记忆网络,将记忆机制并入卷积神经网络 (CNN)。它用一个长短期记忆机制来增强卷积残差网络。5.19 分形网络Larsson 等人 (2016) 提出分形网络即 FractalNet 作为残差网络的替代方案。他们声称可以训练超深度的神经网络而不需要残差学习。分形是简单扩展规则生成的重复架构。5.20 WaveNetvan den Oord 等人 (2016) 提出了用于产生原始音频的深度神经网络 WaveNet。WaveNet 由一堆卷积层和 softmax 分布层组成,用于输出。Rethage 等人 (2017) 提出了一个 WaveNet 模型用于语音去噪。5.21 指针网络Vinyals 等人 (2017) 提出了指针网络 (Ptr-Nets),通过使用一种称为「指针」的 softmax 概率分布来解决表征变量字典的问题。
  • [其他] 适合新手的深度学习综述(4)--深度学习方法
    本文转载自机器之心。深度神经网络在监督学习中取得了巨大的成功。此外,深度学习模型在无监督、混合和强化学习方面也非常成功。4.1 深度监督学习监督学习应用在当数据标记、分类器分类或数值预测的情况。LeCun 等人 (2015) 对监督学习方法以及深层结构的形成给出了一个精简的解释。Deng 和 Yu(2014) 提到了许多用于监督和混合学习的深度网络,并做出解释,例如深度堆栈网络 (DSN) 及其变体。Schmidthuber(2014) 的研究涵盖了所有神经网络,从早期神经网络到最近成功的卷积神经网络 (CNN)、循环神经网络 (RNN)、长短期记忆 (LSTM) 及其改进。4.2 深度无监督学习当输入数据没有标记时,可应用无监督学习方法从数据中提取特征并对其进行分类或标记。LeCun 等人 (2015) 预测了无监督学习在深度学习中的未来。Schmidthuber(2014) 也描述了无监督学习的神经网络。Deng 和 Yu(2014) 简要介绍了无监督学习的深度架构,并详细解释了深度自编码器。4.3 深度强化学习强化学习使用奖惩系统预测学习模型的下一步。这主要用于游戏和机器人,解决平常的决策问题。Schmidthuber(2014) 描述了强化学习 (RL) 中深度学习的进展,以及深度前馈神经网络 (FNN) 和循环神经网络 (RNN) 在 RL 中的应用。Li(2017) 讨论了深度强化学习 (Deep Reinforcement Learning, DRL)、它的架构 (例如 Deep Q-Network, DQN) 以及在各个领域的应用。Mnih 等人 (2016) 提出了一种利用异步梯度下降进行 DNN 优化的 DRL 框架。van Hasselt 等人 (2015) 提出了一种使用深度神经网络 (deep neural network, DNN) 的 DRL 架构。
  • [其他] 适合新手的深度学习综述(3)--最新进展
    深度架构的演变人工神经网络 (ANN) 已经取得了长足的进步,同时也带来了其他的深度模型。第一代人工神经网络由简单的感知器神经层组成,只能进行有限的简单计算。第二代使用反向传播,根据错误率更新神经元的权重。然后支持向量机 (SVM) 浮出水面,在一段时间内超越 ANN。为了克服反向传播的局限性,人们提出了受限玻尔兹曼机(RBM),使学习更容易。此时其他技术和神经网络也出现了,如前馈神经网络 (FNN)、卷积神经网络 (CNN)、循环神经网络 (RNN) 等,以及深层信念网络、自编码器等。从那时起,为实现各种用途,ANN 在不同方面得到了改进和设计。Schmidhuber (2014)、Bengio (2009)、Deng 和 Yu (2014)、Goodfellow 等人 (2016)、Wang 等人 (2017) 对深度神经网络 (DNN) 的进化和历史以及深度学习 (DL) 进行了详细的概述。在大多数情况下,深层架构是简单架构的多层非线性重复,这样可从输入中获得高度复杂的函数。
  • [其他] 适合新手的深度学习综述(2)--相关研究
    本文转载自机器之心。相关研究   在过去的几年中,有许多关于深度学习的综述论文。他们以很好的方式描述了 DL 方法、方法论以及它们的应用和未来研究方向。这里,我们简要介绍一些关于深度学习的优秀综述论文。Young 等人(2017)讨论了 DL 模型和架构,主要用于自然语言处理(NLP)。他们在不同的 NLP 领域中展示了 DL 应用,比较了 DL 模型,并讨论了可能的未来趋势。Zhang 等人(2017)讨论了用于前端和后端语音识别系统的当前最佳深度学习技术。Zhu 等人(2017)综述了 DL 遥感技术的最新进展。他们还讨论了开源的 DL 框架和其他深度学习的技术细节。Wang 等人(2017)以时间顺序的方式描述了深度学习模型的演变。该短文简要介绍了模型,以及在 DL 研究中的突破。该文以进化的方式来了解深度学习的起源,并对神经网络的优化和未来的研究做了解读。Goodfellow 等人(2016)详细讨论了深度网络和生成模型,从机器学习(ML)基础知识、深度架构的优缺点出发,对近年来的 DL 研究和应用进行了总结。LeCun 等人(2015)从卷积神经网络(CNN)和递归神经网络(RNN)概述了深度学习(DL)模型。他们从表征学习的角度描述了 DL,展示了 DL 技术如何工作、如何在各种应用中成功使用、以及如何对预测未来进行基于无监督学习(UL)的学习。同时他们还指出了 DL 在文献目录中的主要进展。Schmidhuber(2015)从 CNN、RNN 和深度强化学习 (RL) 对深度学习做了一个概述。他强调了序列处理的 RNN,同时指出基本 DL 和 NN 的局限性,以及改进它们的技巧。Nielsen (2015) 用代码和例子描述了神经网络的细节。他还在一定程度上讨论了深度神经网络和深度学习。Schmidhuber (2014) 讨论了基于时间序列的神经网络、采用机器学习方法进行分类,以及在神经网络中使用深度学习的历史和进展。Deng 和 Yu (2014) 描述了深度学习类别和技术,以及 DL 在几个领域的应用。Bengio (2013) 从表征学习的角度简要概述了 DL 算法,即监督和无监督网络、优化和训练模型。他聚焦于深度学习的许多挑战,例如:为更大的模型和数据扩展算法,减少优化困难,设计有效的缩放方法等。Bengio 等人 (2013) 讨论了表征和特征学习即深度学习。他们从应用、技术和挑战的角度探讨了各种方法和模型。Deng (2011) 从信息处理及相关领域的角度对深度结构化学习及其架构进行了概述。Arel 等人 (2010) 简要概述了近年来的 DL 技术。Bengio (2009) 讨论了深度架构,即人工智能的神经网络和生成模型。最近所有关于深度学习(DL)的论文都从多个角度讨论了深度学习重点。这对 DL 的研究人员来说是非常有必要的。然而,DL 目前是一个蓬勃发展的领域。在最近的 DL 概述论文发表之后,仍有许多新的技术和架构被提出。此外,以往的论文从不同的角度进行研究。我们的论文主要是针对刚进入这一领域的学习者和新手。为此,我们将努力为新研究人员和任何对这一领域感兴趣的人提供一个深度学习的基础和清晰的概念。
  • [其他] 目标检测 | Anchor free之CenterNet深度解析(3)
    文章来源于AI算法修炼营 ,作者周威Encode 前面提到过Encode的过程是将ground-truth bounding box信息映射为类似网络输出的格式。这样可以加速求解损失函数的计算。我们知道在CornerNet中将检测框的左上角点和右下角点映射到heatmap上的过程,并不是简单的一一对应关系的(也就是将原图中的某关键点映射到heatmap中的某一关键点中),而是将原图中的某关键点(在CenterNet中为检测框的中点)映射到heatmap中的某一高斯核区域内。如下图4所示,为每个检测框中心点的高斯核区域显示。又或者借用https://zhuanlan.zhihu.com/p/66048276中的图,为某一中心点在heatmap的映射可视化。可以直观地感受其呈现二维高斯分布。那么根据获得的heatmap,我们可以将ground-truth bbox的偏移信息和宽高信息按照该映射关系,等同地映射到前面提到的Offset特征图和Height&Width特征图中,实现整个encode的过程 4.损失函数的设置 实现了encode过程后,设定损失函数就变得非常简单了。4.1 focal loss原论文中令为网络输出的heatmap,为ground_truth信息,即heatmap的标签/监督信息。类似CornerNet使用focal loss进行损失函数设定,实现过程如下这里的和为focal loss的超参数,N是图片中关键点的个数。4.2 offset loss为了弥补由于stride的原因造成的偏移误差,论文中设定了一个关于偏移的损失函数,使得训练后的网络能够有效计算offset值,从而修正检测框的位置。不妨这里引用一下论文中的offset loss公式。这里的p是检测框中心点(原图中)的真实坐标,p/R是理论上该中心点映射到特征图的准确位置区域(很可能是浮点型)。但是我们知道在特征图中,所有的点的位置都是整型的(即不存在某一个点的位置为(1.1,2.9)的),所以实际上,原图中坐标为p的点映射到特征图后的位置应该是是p向下取整的结果,所以这里就造成了误差了,那么这个误差就是公式中的是网络的offset输出特征图。那么这个指的是关键点实际落入的区域。说明该offset loss只关注在关键点区域的offset输出。
  • [其他] 目标检测 | Anchor free之CenterNet深度解析
    文章来源于AI算法修炼营 ,作者周威网络结构 顾名思义,CornerNet以检测框的两个角点为基础进行物体的检测,而CenterNet以检测框的中心为基础进行物体位置的检测.CenterNet和CornerNet的网络结构类似,如下为CornerNet的网络结构。由于CornerNet需要进行两个关键点检测(左上角点和右下角点)来判断物体的位置,所以共有两个大分支(每个大分支中又包含了三个小分支)。而 CenterNet只需要进行一个关键点的检测(中心点的检测)来判断物体的位置,所以只有一个大的分支,该分支包含了三个小分支(虽然这三个小分支和CornerNet的还是有区别的)。基于Hourglass backbone的CenterNet结构如下图所示该网络要比CornerNet更简单,而且细心的小伙伴们应该也发现了和CornerNet分支输出存在一定的异同之处,该网络输出分支分别为(1)HeatMap,大小为(W/4,H/4,80),输出不同类别(80个类别)物体中心点的位置(2) Offset,大小为(W/4,H/4,2),对HeatMap的输出进行精炼,提高定位准确度(3) Height&Width,大小为(W/4,H/4,2),预测以关键点为中心的检测框的宽高显然,(1)(2)在CornerNet中也出现过,但是Corner的另一个分支是输出每个被检测角点的embedding,即左上点的embedding和右上点的embedding距离足够近,则被认定为同一检测框的角点对。另外在CornerNet中还有一个创新点,为Corner Pooling的提出,在CenterNet中被剔除了。那么结合CenterNet的结构图可以将其分为以下几个部分(1)pre,通过一个步长为2的7x7卷积和步长为2的残差单元,将图片宽高压缩为原来的1/4(2)Hourglass Module 1,第一个沙漏型的卷积神经网络模块(3)joint,连接Hourglass Module 2和Hourglass Module 2(4)Hourglass Module 2,第二个沙漏型的卷积神经网络模块(5)Head,输出三个分支输出
  • [其他] 刻画与克服多模态深度神经网络中的学习贪心特性
    我们假设,由于多模态深度神经网络学习的贪婪性质,这些模型往往只依赖于一种模态,而不拟合其他模态。根据我们的经验观察,这种行为是反直觉的,并且损害了模型的泛化。为了估计模型对每种模态的依赖性,我们计算当模型除了另一种模态外还可以访问它时,对精度的增益。我们把这个增益称为条件利用率。在实验中,我们始终观察到不同模态之间的条件利用率不平衡,跨多个任务和架构。由于在训练过程中不能有效地计算条件利用率,我们引入了一个基于模型从每个模态学习的速度的代理,我们称之为条件学习速度。我们提出了一种算法来平衡训练过程中模态之间的条件学习速度,并证明它确实解决了贪婪学习的问题该算法提高了模型在三个数据集上的泛化能力:Colored MNIST、ModelNet40和NVIDIA Dynamic Hand Gesture。https://www.zhuanzhi.ai/paper/a175b09bb7bfe5bc36d68b6fdf98fe86
总条数:945 到第
上滑加载中