torch

基于 ONNX 在 ML.NET 中使用 Pytorch 训练的垃圾分类模型

对着背影说爱祢 提交于 2020-08-19 04:26:08
ML.NET 在经典机器学习范畴内,对分类、回归、异常检测等问题开发模型已经有非常棒的表现了,我之前的 文章 都有过介绍。当然我们希望在更高层次的领域加以使用,例如计算机视觉、自然语言处理和信号处理等等领域。 图像识别是计算机视觉的一类分支,AI研发者们较为熟悉的是使用TensorFlow、Pytorch、Keras、MXNET等框架来训练深度神经网络模型,其中会涉及到CNN(卷积神经网络)、DNN(深度神经网络)的相关算法。 ML.NET 在较早期的版本是无法支持这类研究的,可喜的是最新的版本不但能很好地集成 TensorFlow 的模型做 迁移学习 ,还可以直接导入 DNN 常见 预编译模型 :AlexNet、ResNet18、ResNet50、ResNet101 实现对图像的分类、识别等。 我特别想推荐的是,ML.NET 最新版本对 ONNX 的支持也是非常强劲,通过 ONNX 可以把众多其他优秀深度学习框架的模型引入到 .NET Core 运行时中,极大地扩充了 .NET 应用在智能认知服务的丰富程度。在 Microsoft Docs 中已经提供了一个基于 ONNX 使用 Tiny YOLOv2 做对象检测的例子。为了展现 ML.NET 在其他框架上的通用性,本文将介绍使用 Pytorch 训练的垃圾分类的模型,基于 ONNX 导入到 ML.NET 中完成预测。

使用Google colab 路径问题报错记录

烂漫一生 提交于 2020-08-19 01:06:34
使用Google colab 路径问题报错记录 遇到问题 当使用colab训练yolov4代码时遇到了一个错误(其实以前也遇到过一样的错误,不过忘记怎么解决了) FileNotFoundError: [Errno 2] No such file or directory: '/content/drive/My' 错误尝试 最初我是觉得可能是由于哪些库的版本有问题,导致导入和发现对应的路径。因为我出现了如下错误: 由于显示了torch、PIL等库的错误,我以为是这些库版本存在问题,或者是环境不匹配。花了大半天去调试环境,试了很多torch、torchvison、pillow的版本,可报错依然发生。后来看见了一个博主的博客,解决了这个问题 解决经验 问题总结 其实原因很简单,就是因为Google的网盘叫My Drive,中间存在空格,在程序的读取和执行的过程中无法识别为整个整体,所以报了找不到路径的错误。我这里的代码是这个样子: def convert_annotation ( year , image_id , list_file ) : in_file = open ( 'VOCdevkit/VOC%s/Annotations/%s.xml' % ( year , image_id ) ) tree = ET . parse ( in_file ) root = tree .

【pytorch-ssd目标检测】训练自己创建的数据集

陌路散爱 提交于 2020-08-17 18:11:39
制作类似pascal voc格式的目标检测数据集: https://www.cnblogs.com/xiximayou/p/12546061.html 代码来源:https://github.com/amdegroot/ssd.pytorch 拷贝下来的代码好多坑要踩。。。 我将其上传到谷歌colab上,当前目录结构如下: 需要说明的是,虽然我们只有2类,但是,要加上背景一类,所以总共我们有3类。 首先我们要读取自己的数据集 在config.py中 # config.py import os.path # gets home dir cross platform # HOME = os.path.expanduser("~") HOME = os.path.expanduser("/content/drive/My Drive/pytorch_ssd/") # for making bounding boxes pretty COLORS = ((255, 0, 0, 128), (0, 255, 0, 128), (0, 0, 255, 128 ), (0, 255, 255, 128), (255, 0, 255, 128), (255, 255, 0, 128 )) MEANS = (104, 117, 123 ) mask = { 'num_classes': 3, 'lr

【pytorch-ssd目标检测】训练自己创建的数据集

拟墨画扇 提交于 2020-08-17 16:11:34
制作类似pascal voc格式的目标检测数据集: https://www.cnblogs.com/xiximayou/p/12546061.html 代码来源:https://github.com/amdegroot/ssd.pytorch 拷贝下来的代码好多坑要踩。。。 我将其上传到谷歌colab上,当前目录结构如下: 需要说明的是,虽然我们只有2类,但是,要加上背景一类,所以总共我们有3类。 首先我们要读取自己的数据集 在config.py中 # config.py import os.path # gets home dir cross platform # HOME = os.path.expanduser("~") HOME = os.path.expanduser("/content/drive/My Drive/pytorch_ssd/") # for making bounding boxes pretty COLORS = ((255, 0, 0, 128), (0, 255, 0, 128), (0, 0, 255, 128 ), (0, 255, 255, 128), (255, 0, 255, 128), (255, 255, 0, 128 )) MEANS = (104, 117, 123 ) mask = { 'num_classes': 3, 'lr

【pytorch-ssd目标检测】训练自己创建的数据集

断了今生、忘了曾经 提交于 2020-08-17 16:10:39
制作类似pascal voc格式的目标检测数据集: https://www.cnblogs.com/xiximayou/p/12546061.html 代码来源:https://github.com/amdegroot/ssd.pytorch 拷贝下来的代码好多坑要踩。。。 我将其上传到谷歌colab上,当前目录结构如下: 需要说明的是,虽然我们只有2类,但是,要加上背景一类,所以总共我们有3类。 首先我们要读取自己的数据集 在config.py中 # config.py import os.path # gets home dir cross platform # HOME = os.path.expanduser("~") HOME = os.path.expanduser("/content/drive/My Drive/pytorch_ssd/") # for making bounding boxes pretty COLORS = ((255, 0, 0, 128), (0, 255, 0, 128), (0, 0, 255, 128 ), (0, 255, 255, 128), (255, 0, 255, 128), (255, 255, 0, 128 )) MEANS = (104, 117, 123 ) mask = { 'num_classes': 3, 'lr

从CNN卷积参数计算到模型加速方法

ぃ、小莉子 提交于 2020-08-16 19:21:15
一:CNN卷积参数计算 要对CNN卷积过程进行参数计算,首先得知道卷积操作过程中的权值是共享的,即卷积核的权重参数以及偏置参数在一次卷积过程中不改变,CNN卷积操作的过程如下图所示。 CNN卷积操作示意图 上述卷积过程的输入特征图尺寸为: (7*7*3);卷积核大小为: (3*3*3);输出的特征图尺寸为: (3*3*2),可以看出,神经网络网络学习参数即卷积核的权重参数以及偏置参数在卷积过程中不改变,所以CNN卷积参数量与输入输出特征图的尺寸无关,只与卷积核的大小数量以及输入与输出通道数相关。 卷积过程实际上是卷积核与特征图尺寸进行线性计算的过程公式如下: ,其中 代表权重, 代表偏置,因为计算过程都是线性的,所以需要引入激活函数,增加网络的表达能力,而不是一味的线性叠加。 参数量即为权值 、 以及偏置 和 中参数个数总和。计算过程如下:卷积核的参数为: ,其中 为卷积核尺寸, 输入通道个数, 为输出通道个数。加上两个偏置参数,总的参数量为 : 。 当然每一次搭建模型后,不需要我们来手动计算参数量的大小,各种框架下已经备好了相应命令,比如:在keras框架下,模型参数量可以直接通过model.summary()来进行模型架构和参数量的输出;在pytorch框架下,需要先安装第三方包torchsummary,然后通过如下命令进行输出网络结构参数量。 import torch

Ubuntu18.04 下配置lua版本的CycleGAN

不想你离开。 提交于 2020-08-16 18:44:30
本地环境 linux版本:18.04.1-Ubuntu gcc/g++环境:gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 CUDA 版本: 10.1 显卡驱动版本:440.100 CycleGAN配置 安装torch环境 因为原版本的torch安装的时候在CUDA10以上的版本会出现错误,所以直接安装修改过的适合CUDA10的版本: https://github.com/nagadomi/distro.git #cuda10,默认是 按照torch官网的步骤安装lua环境和torch,应该是没有大问题 安装CycleGAN依赖 luarocks install nngraph luarocks install class luarocks install https://raw.githubusercontent.com/szym/display/master/display-scm-0.rockspec nngraph 和 class的安装基本没有什么问题,若因为 The Great Wall的话,在控制台可以试试 proxychains, 安装指令为: sudo apt-get install proxychains 在安装display依赖包的时候,因为依赖 async,但是async好久没有更新,在gcc/g++-7会出现 -Werror

张量的维度

|▌冷眼眸甩不掉的悲伤 提交于 2020-08-16 10:51:28
常见的张量,无论tf还是torch,都是第一维是行,第二维是列,第三维是通道。 但是在numpy里,第一维是通道,第二维是行,第三维是列。如下图,为numpy的张量: 来源: oschina 链接: https://my.oschina.net/u/4135288/blog/4497413

2.基于梯度的攻击——FGSM

半世苍凉 提交于 2020-08-16 06:19:03
  FGSM原论文地址: https://arxiv.org/abs/1412.6572    1.FGSM的原理      FGSM的全称是Fast Gradient Sign Method(快速梯度下降法),在白盒环境下,通过求出模型对输入的导数,然后用符号函数得到其具体的梯度方向,接着乘以一个步长,得到的“扰动”加在原来的输入 上就得到了在FGSM攻击下的样本。     FGSM的攻击表达如下:       那么为什么这样做有攻击效果呢? 就结果而言,攻击成功就是模型分类错误,就模型而言,就是加了扰动的样本使得模型的loss增大。而 所有基于梯度的攻击方法都是基于让loss增大这一点来做的。 可以仔细回忆一下,在神经网络的反向传播当中,我们在训练过程时就是沿着梯度方向来更新更新w,b的值。这样做可以使得网络往loss减小的方向收敛。 那么现在我们既然是要使得loss增大,而模型的网络系数又固定不变,唯一可以改变的就是输入,因此我们就利用loss对输入求导从而“更新”这个输入。(当然,肯定有人问,神经网络在训练的时候是多次更新参数,这个为什么仅仅更新一次呢?主要因为我们希望产生对抗样本的速度更快,毕竟名字里就有“fast”,当然了,多次迭代的攻击也有,后来的PGD(又叫I-FGSM)以及MIM都是更新很多次,虽然攻击的效果很好,但是速度就慢很多了)