
计算机视觉
haohulala
进击的蛋糕(dangao123coding)
展开
-
视觉transformer图片处理思路
我们知道,transformer要求将图片分为patch,然后输入网络进行计算,那么我们就需要将二维的图片处理成一维的embeding形式,今天我来给大家介绍一下图片处理的思路。我们演示一下处理下面这张图片我们将图片按照16*16的大小进行分片,得到的结果如下图所示接下来我们需要将patch变成tensor。在此之前先介绍一下传统CNN图片处理和transformer图片处理之间的区别我们可以看到,传统CNN图片处理得到的向量是三维的,而transformer图片处理得到的向量是原创 2021-04-19 11:44:32 · 9982 阅读 · 4 评论 -
VIT vision transformer pytorch代码复现
这篇论文将transformer机制运用到计算机视觉领域(主要是进行了图片分类),并且取得了不错的效果其实整体思路挺简单的,就是将是图片拆分成很多小块,然后将小块排列成矩阵送入transformer encoder模块中计算,具体的计算过程如下图所示我主要分享一下代码import torchimport torch.nn as nnimport mathclass MLP(nn.Module): def __init__(self, dim, hidden_dim, d原创 2021-04-16 09:04:33 · 5538 阅读 · 0 评论 -
使用pytorch进行语义分割模型训练
这篇文章我主要介绍一下我搭建的语义分割任务框架,这个框架可以训练很多语义分割模型。我主要是在PASCAL VOC上训练了FCN网络,希望对大家能有所帮助。项目架构上图就是项目架构了,我介绍几个主要的东西checkpoint:用来存放中间的结果文件dataset:用来存放加载数据集的文件model:用来存放网络模型pic:存放混淆矩阵可视化图片util:用来保存工具脚本eval.py:计算测试集性能指标的代码train.py:训练代码下面上代码dataset原创 2021-01-21 10:44:48 · 8879 阅读 · 21 评论 -
图像峰值信噪比PSNR计算模板
参考博客https://blog.youkuaiyun.com/u010886794/article/details/84784453import numpy as npimport mathfrom PIL import Imagedef psnr1(img1, img2): mse = np.mean((img1 - img2) ** 2) if mse < 1.0e-10: return 100 return 10 * math.log10(255..原创 2021-01-08 19:15:01 · 416 阅读 · 0 评论 -
语义分割中求miou代码模板
参考文章https://www.jianshu.com/p/42939bf83b8aimport torchimport numpy as npimport matplotlib.pyplot as pltdef fast_hist(a, b, n): """ 生成混淆矩阵 a 是形状为(HxW,)的预测值 b 是形状为(HxW,)的真实值 n 是类别数 """ # 确保a和b在0~n-1的范围内,k是(HxW,)的True和False.原创 2021-01-08 14:49:00 · 848 阅读 · 3 评论 -
使用coco数据集建立赋值黏贴篡改数据集
为了能够训练赋值黏贴篡改检测网络,我们需要建立一个复制黏贴篡改数据集,为了简单起见,我们使用coco数据集来进行构建。第一步,建立json文件文件这里我为了能够按照自己的思路写程序,将coco的json文件格式做了点修改,代码如下import jsonimport time"""file = open("instances_val2017.json", "r")img_info = json.load(file)print(img_info.keys())tmp_dict = {}原创 2021-01-08 13:51:29 · 893 阅读 · 5 评论 -
【自己制作数据集】制作标注并生成mask
在深度学习的时候,我们可能需要自己对图片进行标注,这篇博客记录自己对图片进行标注并且生成mask的过程首先使用pip安装标注工具labelmepip install labelme安装完成后直接在cmd中输入labelme就会打开软件使用软件读取图片,添加标注,添加完成后直接保存json文件就行了。下面介绍如何根据标注生成mask,我们主要使用opencv进行多边形填充来生成mask,详细代码如下import jsonimport cv2import matplotli.原创 2020-12-18 18:01:15 · 9317 阅读 · 6 评论 -
pytorch复现RRU-Net
论文地址https://ieeexplore.ieee.org/document/9025485开源代码https://github.com/yelusaleng/RRU-Net下面就是复现的代码使用的数据集是NIST项目结构详细代码./dataload/NIST_data.pyimport torchimport torchvision.transforms as tfsimport osfrom PIL import Imageimport time原创 2020-11-22 12:20:05 · 3608 阅读 · 25 评论 -
在特征图上按照高斯公式计算置信度
centerNet中计算分类target的方法就是使用高斯公式对于每一个gt_box,我们首先得到中心点,然后就可以根据这个中心点和特征图的长宽计算置信度图了最后算出来的置信度是以中心点为圆心,整个特征图外接圆的半径为半径的高斯分布置信度import torchimport numpy as npimport matplotlib.pyplot as pltimport mathimport time# 计算矩形外接圆的半径# R = sqrt(h^2 + w^2)/2def原创 2020-11-18 12:09:14 · 2136 阅读 · 0 评论 -
使用pytorch计算图像的Affinity Matrix
什么是Affinity Matrixaffinity matrix翻译过来是相关性矩阵,实际上就是计算图像中每个点与其他所有点的相关性假设我们有一个三通道的图像,长为H,宽为W,那么每个像素点都是由3个分量构成的向量,我们可以计算任意两个点之间的向量的余弦值cos<a⃗,b⃗>=a⃗∗b⃗∣a⃗∣∗∣b⃗∣ cos<\vec{a}, \vec{b}>=\frac {\vec{a}*\vec{b}} {\mid \vec{a} \mid * \mid \vec{b} \mid}原创 2020-11-10 17:09:28 · 3171 阅读 · 2 评论 -
pytorch计算grad_cam模板
CAM的全称是 class attenton map,即类别注意力图,他可以告诉我们网络通过图片的那些地方得到了相应分类的得分。下面就是详细的代码import torchfrom torchvision import modelsimport torch.nn as nnimport torchvision.transforms as tfsimport numpy as npimport matplotlib.pyplot as pltfrom PIL import Imageimpo原创 2020-11-08 13:54:03 · 1326 阅读 · 12 评论 -
centerNet pytorch复现
论文题目:Objects as Points论文地址:https://arxiv.org/pdf/1904.07850.pdf官方代码:https://github.com/xingyizhou/CenterNet下面是我写的代码centerNet.pyimport torchfrom torch import nnimport torch.nn.functional as fimport torchvision.models as modelsimport numpy .原创 2020-10-30 10:39:30 · 2813 阅读 · 6 评论 -
torch.broadcast_tensors()函数
torch.broadcast_tensors()是一个将tensor扩充的函数我们先来看一个例子可以看到,torch.broadcast_tensors()可以传两个参数,并且最后得到的结果会变成第二个参数的形状,值是填充的第一个参数的值。函数一共有两个返回结果,第二个结果的形状和第一个结果相同,但是填充的值都是0...原创 2020-10-28 19:10:39 · 4061 阅读 · 4 评论 -
voc目标检测数据加载器模板
voc目标检测数据加载器模板import jsonfrom bs4 import BeautifulSoupimport osimport matplotlib.pyplot as pltfrom PIL import Imageimport timeimport numpy as npimport torchfrom torch import nnimport torch.nn.functional as fimport torchvision.transforms as tfsf原创 2020-10-27 17:59:15 · 562 阅读 · 3 评论 -
给定一组向量,求与这组向量相关度最小的向量
我给大家介绍一个算法,计算一个和给定向量相关度最小的向量,使用的是迭代的方法。先来看一下算法的描述这个描述很长,主要看算法部分就行了。这里面βββ记录的是路径,说白了就是迭代的过程,其实对于我们这段程序来说没什么用,y就是我们要求的向量。x1x_1x1~xpx_pxp代表的是输入向量,我们的优化目标就是让y和{x1x_1x1…xpx_pxp}中相关度最大的向量的相关度最小,说起来有点绕。我们计算两个向量的相关度的时候,一般都是计算向量夹角的余弦值,因为余弦值如果为1那么就表示两个向量同向,原创 2020-10-19 21:55:52 · 447 阅读 · 0 评论 -
pytorch实现Sep conv卷积操作
Sep Conv这个卷积名字起得花里胡哨的,其实总结起来就是输入通道每个通道一个卷积得到和输入通道数相同的特征图,然后再使用若干个1*1的卷积聚合每个特征图的值得到输出特征图。假设我们输入通道是16,输出特征图是32,并且使用3*3的卷积提取特征,那么第一步一共需要1633个参数,第二步需要32161*1个参数,一共需要1633+32161*1=656个参数。使用传统的方法进行卷积一共需要32163*3=4608个参数。可见Sep Conv在计算量上有明显的优势,下面就是pytorch实现的Sep原创 2020-10-17 10:06:49 · 3852 阅读 · 3 评论 -
coco目标检测数据集加载模板
这个模板拿来就可以直接用,我已经测试过了。你需要先安装pycocotools库,直接用pip安装就可以了然后还有一些依赖你就看头文件,缺哪个安装哪个就行import torchfrom torch import nnimport torch.nn.functional as fimport torchvisionimport torchvision.transforms as tfsimport torchvision.models as modelsfrom torch.autograd原创 2020-10-11 16:15:06 · 988 阅读 · 1 评论 -
python运行脚本的时候使用外部参数的方法
有的时候我们在运行python脚本的时候需要自己指定一些外部参数,比如我们想要输入两个整型数,然后求他们的和,可以用下面的代码import argparseparser = argparse.ArgumentParser()parser.add_argument("--a", type=int, default=1, help="第一个参数")parser.add_argument("--b", type=int, default=2, help="第二个参数")pr = parser.pars原创 2020-10-09 09:01:48 · 784 阅读 · 0 评论 -
使用matplotlib在图片上画框框
在物体检测任务中需要把检测出的物体用框框出来,下面就是用一个简单的例子展示如何使用matplotlib画框框import matplotlib.pyplot as pltfrom PIL import Imageimport osroot = "./data/coco/train2017"annFile = "./data/coco/annotations/instances_train2017.json"plt.imshow(Image.open(root + "/" + os.listd原创 2020-10-08 18:55:08 · 10585 阅读 · 1 评论 -
自己收集数据集训练分类器
网络效果这是一个简单的分类器网络,主干网络使用的是resnet18,我只收集了4个类,下面是网络识别的效果下面我来介绍具体是怎么做的Step1首先使用爬虫收集数据集,爬虫代码和资源我都找好了,在你的项目根目录需要有4个文件,分别是 getImage.py,dir.txt, image.txt, test_image.txt,下面我来逐个介绍首先是 getImage.py ,这是一个爬虫,将图片保存至硬盘中,他会读取三个txt文件,其中 dir.txt是类别信息,爬虫会根据类别建立文件夹,每个类建原创 2020-10-06 14:46:07 · 2105 阅读 · 0 评论 -
《Multiple-Operation Image Anti-Forensics with WGAN-GP Framework 》代码复现
这是什么因为一个比赛,我们去看文献,然后恰好读到这篇论文,名字叫《Multiple-Operation Image Anti-Forensics with WGAN-GP Framework 》,简单来说就是对于一张篡改图片,我们使用多种后处理方法隐藏篡改痕迹,然后再使用WGAN网络隐藏痕迹,让篡改真正做到无迹可寻(实际的欺骗率大概在50%左右)。网络结构这就是论文中给出的图片结构,还是比较清晰的。损失函数损失函数分为两个:生成器和判别器。首先是生成器的损失函数LG=Ex‘[αLGpixel原创 2020-09-17 12:21:27 · 467 阅读 · 0 评论 -
基于pytorch的segnet实现,使用camvid数据集训练
程序结构基本与https://blog.youkuaiyun.com/haohulala/article/details/107660273这篇文章相似,有什么问题也可以参考这篇文章。import torchfrom torch import nnimport torch.nn.functional as fimport torchvisionimport torchvision.transforms as tfsfrom torch.utils.data import DataLoaderfrom to原创 2020-08-01 13:19:24 · 6085 阅读 · 19 评论 -
基于pytorch的FCN网络简单实现
参考知乎专栏实现FCN网络https://zhuanlan.zhihu.com/p/32506912import torchfrom torch import nnimport torch.nn.functional as fimport torchvisionimport torchvision.transforms as tfsfrom torch.utils.data import DataLoaderfrom torch.autograd import Variableimport原创 2020-07-29 11:48:48 · 10259 阅读 · 38 评论 -
使用pytorch进行迁移学习模型下载失败解决办法
使用pytorch进行迁移学习的时候,我们需要下载预训练的模型,但是这个模型通常很大,如果在代码中在线下载的话,很可能会中断,并且一中断之前也就白下载了,这篇文章里我介绍一种离线使用预训练模型的方法。所谓离线使用预训练模型的方法,实际上就是使用浏览器将模型下载下来(通常浏览器下载会比较稳定,并且如果下载中断还能恢复),下面给出各种模型的下载地址,只需要将对应的url键入到浏览器中就可以建立下载1. Resnet: model_urls = { 'resnet18': 'https:原创 2020-07-26 20:25:12 · 6332 阅读 · 0 评论 -
神经网络中转置卷积上采样与反最大池化上采样的对比
目前,CNN卷积神经网络中,图像上采样通常有两种方法,分别是FCN网络使用的转置卷积和segnet中使用的反最大池化。我们首先来看转置卷积的上采样方法,关于转置卷积的原理,可以看下面这篇文章https://blog.youkuaiyun.com/lanadeus/article/details/82534425我们知道,卷积网络输入输出尺寸的关系如下nout=nin−kernel+2∗paddingstride+1 n_{out} = \frac{n_{in}-kernel+2*padding} {stride原创 2020-07-23 20:51:55 · 863 阅读 · 2 评论 -
pytorch CNN CIFAR10数据集识别
尝试使用深层结构进行CIFAR10的识别import torchimport torchvisionimport torchvision.transforms as transformsBATCH_SIZE = 64EPOCHES = 50NUM_WORKERS = 4LEARNING_RATE = 0.005# 数据转换transform = transforms.Compose( [transforms.ToTensor(), transforms.Normali原创 2020-07-16 14:55:24 · 2084 阅读 · 0 评论 -
卷积动画详解
卷积算法这篇文章是深度学习中卷积算法的动画演示本教程的代码和图像可按以下规定免费使用许可并受适当的署名:[1] Vincent Dumoulin, Francesco Visin - A guide to convolution arithmeticfor deep learning(BibTeX)卷积动画蓝色的图像是输入图像,青色的图像是输出图像没有边界填充,无跨步(No padding, no strides)任意的边界填充,无跨步()半填充,无跨步(Half pa原创 2020-07-14 10:43:31 · 4287 阅读 · 0 评论 -
pytorch全连接神经网络进行MNIST识别
这个例程使用全连接神经网络进行MNIST识别import numpy as npimport torchfrom torchvision.datasets import mnistfrom torch import nnfrom torch.autograd import Variabledef data_tf(x): x = np.array(x, dtype="float32")/255 x = (x-0.5)/0.5 x = x.reshape((-1))原创 2020-07-13 11:42:22 · 1705 阅读 · 1 评论 -
python构建决策树
决策树是一常见的机器学习算法,本例程将参考《机器学习实践》中的代码完成决策树算法中,信息熵被用来定义数据的纯度。假定当前样本集合D中第k类样本所占比例为$ p_k $,则有 Ent(D)=−∑k=1npklog2pk Ent(D)=-\sum_{k=1}^n p_k \log_2 p_k Ent(D)=−k=1∑npklog2pk我们认为Ent(D)的值越小,则D的纯度越高。假定离散属性a有V个可能的取值$ { a^1, a^2, …, a^V } $ ,若用a对样本集D进行划分,则会产原创 2020-07-03 12:22:06 · 2184 阅读 · 0 评论 -
pytorch 实现minist手写识别体
from 莫烦pythonimport torchimport torch.nn as nnimport torch.utils.data as Dataimport torchvision # 数据库模块import matplotlib.pyplot as plttorch.manual_seed(1) # reproducible# Hyper ParametersEPOCH = 1 # 训练整批数据多少次, 为了节约时间, 我们只训练一次原创 2020-06-24 10:07:24 · 737 阅读 · 1 评论 -
pytorch NNLM 模型的简单实现(注释版)
我是跟着b站一个up主的博客学的代码,然后自己添加了一些注释https://wmathor.com/index.php/archives/1442/import torchimport torch.nn as nnimport torch.optimimport torch.utils.data as Datadtype = torch.FloatTensorsentences = ['i like cat', 'i love coffee', 'i hate milk']#将上面原创 2020-06-22 14:28:43 · 769 阅读 · 0 评论 -
朴素贝叶斯分类器
贝叶斯定理说起贝叶斯定理,大家一定能想到条件概率。条件概率就是在某一些条件确定的情况下概率会发生改变。下面我们来举一个简单的例子来复习条件概率。小明问他的妈妈明天下雨的概率是多少,他妈妈查了过去十天的天气情况,发现一共有八天晴天,两天下雨,于是他妈妈就像告诉小明说明天下雨的概率为0.2。小明的妈妈刚刚想告诉小明这个结论,没想到小明抢先一步说:“我刚刚看了天空,天空中有星星”。emmmm,故事讲...原创 2020-04-20 16:41:53 · 228 阅读 · 0 评论 -
神经网络与反向传播算法
相信对于神经网络大家都已经不陌生了,这篇文章主要介绍一下神经网络参数优化的时候反向传播算法的原理。我们使用的神经网络为了简单起见,我们使用只有三层的神经网络(包括输入层)如下图所示神经网络中的参数表示我们用wijl{w_{ij}}^{l}wijl来表示第l−1l-1l−1层的中第jjj个结点到第lll层中第iii个结点的偏置用bil{b_{i}}^{l}bil表示第lll层中第ii...原创 2020-04-18 14:31:41 · 521 阅读 · 1 评论 -
【pytorch】简单的CNN神经网络
cnn神经网络主要由卷积层,池化层和全连接层构成,下面这段代码就是一个简单的cnn神经网络模型#coding=utf-8"""一个简单的CNN网络模型"""#明天写import torchfrom torch import nnclass simpleCNN(nn.Module): def __init__(self): super(simpleC...原创 2020-03-26 15:59:37 · 1510 阅读 · 1 评论 -
【pytorch】线性回归模型
线性回归是机器学习中最简单的模型了,简单来说就是给定一定的数据点,我们需要给定一条直线y=w*x+b,确定w和b的取值,让所有数据点到这条线的距离最短。在进行回归的时候我们使用均方差作为损失函数,训练的目标就是让损失函数的值最小。下面这段代码是可以跑通的#coding=utf-8"""一阶线性回归"""import numpy as npimport torchfrom...原创 2020-03-25 22:44:41 · 591 阅读 · 0 评论 -
win10中anaconda安装pytorch
网上很多教程都是直接用conda安装pytorch,但是由于pytorch很大,所以下载的时候会中断,conda下载的时候一旦中断之前都白下了,所以这里介绍第二种方式。我使用的环境是 python3.7+pytorch1.0.0+cuda10.2+cudnn7.x(后面这个x应该问题不大,我使用最新的版本)步骤一:CUDA安装如果是用GPU版的pytorch,首先应该安装cuda 。...原创 2020-03-18 18:20:28 · 7093 阅读 · 14 评论