在研究目标检测算法的时候,通常会遇到如何稀疏化检测框这个问题。无论是anchor-based还是anchor-free的检测算法,输出的检测框在未经处理的时候,都很容易出现很多重复度很高的box, 这样从一定程度上会影响模型的准确率。通常,NMS是比较常用的合并检测框的方法,不了解的可以戳《NMS》。 本文介绍的是WBF,一种加权的检测框合并算法,也适用于与多模型的预测结果合并。论文:https
全局变量是用来串联GPU中各个单元中计算数据的方法之一。 #include <cuda_runtime.h> #include <stdio.h> __device__ float devData; __global__ void checkGlobalVariable() { printf("Device: The value of the globa
CUDA编程,从某种意义而言,可以划分为异构系统编程,其实是一个CPU+GPU模式。其中,CPU被称为Host,而GPU被称为Device。 #include <cuda_runtime.h> #include <stdio.h> int main(int argc,char** argv) { int deviceCount = 0; cu
CUDA的优势是并行计算,计算机中最常见的需要并行计算的地方就是矩阵运算。图像图像处理、数字信号处理、神经网络算法等等都包含大量的矩阵运算。这也是CUDA被广泛使用的原因。了解完CUDA程序的基本构成、CUDA程序的资源分配之后,可以实战进行一个矩阵乘法。Demo如下: #include<stdio.h> #include<cuda.h> #include<cu
本系列讲述的方法均是Linux实现方法。说CUDA是人工智能算法行业的重要基石一点也不为过。老黄在图灵架构发布的时候说,图灵架构是英伟达历史上自2006年以来最伟大的飞跃。而2006年,正是CUDA发布的时间。利用CUDA,开发者可以拿N家的GPU进行各种自定义的任务,挖矿、炼丹等等。今天咱们通过第一个CUDA程序,了解一下CUDA程序的构造。看CUDA界的Hello World程序: #inc
CUDA之所以能实现并行计算,主要得益于开发人员能够对GPU计算资源有效分配。CUDA的粒度有三种,从大到小以此为: grid、block、thread三者关系如下: Grid好比一个小区,block是这个小区的每一栋房子,而thread则是每栋房子里的小隔间。我们要进行工作的最小单位就是一个小隔间,即thread。 咱们可以从一个简单的cuda程序入手,了解这几个概念: #incl
如果用Python初始化一个长度为n的一维list,很简单,只需: ls = [0] * n 初始化元素为n个0。但是对于二维,如果简单用这个方法扩展就很容易出错: ls = [[0] * n] * m 就会出现问题。把每个一维list当作元素,上面的代码只会把[[0] _ n]的引用复制m倍,并不会开辟m_n个单位的内存空间来。 这个时候,满足ls[0]的地址跟ls[1],…,
dropout是Hinton老爷子提出来的一个用于训练的trick。在pytorch中,除了原始的用法以外,还有数据增强的用法(后文提到)。 首先要知道,dropout是专门用于训练的。在推理阶段,则需要把dropout关掉,而model.eval()就会做这个事情。 原文链接: https://arxiv.org/abs/1207.0580 通常意义的dropout解释为:在训练过程的前向
Optical Flow,即光流是一种经典的传统视觉算法。在视频层次的其他任务上,如视频目标检测、跟踪和分割等等,有着很大用武之地。 实现效果: 1.先准备一个video,如果没有,可以用官方video: wget https://www.bogotobogo.com/python/OpenCV_Python/images/mean_shift_tracking/slow_traffic
torch.roll顾名思义,就是让张量滚动的意思。官方文档:https://pytorch.org/docs/master/generated/torch.roll.html形参形式: torch.roll(input, shifts, dims=None) → Tensor input为输入张量,shifts表示要滚动的方向。负数表示左上,正数表示右下。dims表示要滚动的维度。比如,
第零步,查看阿里最新的镜像源:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors第一步:在/etc/docker/daemon.json中添加镜像源 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry
众所周知,python的多线程提供的只是并发性,不会实际加快运行效率。而多进程则是用资源换取效率,可以实现真正的并行性。对于高阶Pythoner而言,掌握多进程非常有必要。 这篇文章主要想帮助大家理解Python多进程的运行机制和基本概念,并且提供一个较为通用的多线程启动模板。 先看一段使用多进程的代码: import time from multiprocessing import Pr
这篇博文主要介绍多视角三维重建的实用工具COLMAP。为了让读者更快确定此文是否为自己想找的内容,我先用简单几句话来描述此文做的事情: 假设我们针对一个物体(人)采集了多个(假设60个)视角的照片,希望用COLMAP实现:(1)通过不同视角之间的特征匹配算出每个视角的相机位资(内外参);(2) 对物体进行初步的稀疏重建,完成多视角数据的可视化(详见图3)。参考链接:(官方)Github: http
Python做图像图形研究的时候,通常需要画很多辅助几何形状(比如bounding box等)。基于opencv的几何图形绘制具有易用性,而且天然能和numpy数组交互。 本文总结了几种常用的cv2画几何图形的方法,当一个简易的手册使用: 1.直线绘制:cv2.line输入规范如下: cv2.line(image, start_point, end_point, color, thickne
Pytorch实现并行训练通常有两个接口:DP(DataParallel)和DDP(DistributedDataParallel)。目前DP(DataParallel)已经被Pytorch官方deprecate掉了,原因有二:1,DP(DataParallel)只支持单机多卡,无法支持多机多卡;2,DP(DataParallel)即便在单机多卡模式下效率也不及DDP(DistributedDat
cumprod取自“cumulative product”的缩写,即“累计乘法”。数学公式为:官方链接:torch.cumprod用法: import torch a = torch.Tensor([[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]) r0 = torch.cumprod(a, dim=0) print(r0) # tensor([[ 1., 2.,
pytorch使用过程中,经常需要对张量进行维度校准。我们简单把一个2x2的tensor升维到1x2x2,该怎么做呢? 方法一:a[None] import torch a = torch.rand(2, 2) b = a[None] print(b.shape) # torch.Size([1, 2, 2]) 方法二:a.unsqueeze(0) import torch
transformer者,传思法模也。 ——木盏 如果非要找一个模型来作为近三年来AI算法进展的突出代表,我认为transformer定会高票当选。 本文作为算法解析文章,倡导思想为主,公式为辅,希望有助于大家理解transformer。行文逻辑为总-分-总结构。本文所有未标来源的图片均为本人所画,引用时请附上本文链接。 本文首发于本人知乎:https://zhuan
离散余弦变换是图像处理中非常常用的算法,可以用于jpg图像压缩等领域。数学原理我就不扯了,网上一大堆。但介于网上实在没有关于python+opencv来实现DCT的好文章(至少木盏没有搜到过)。于是稍微写一个博文做一个总结,给后人便利。 要用到的模块是opencv,安装方法看另一篇文章《opencv快速安装》 python==3.6.5 opencv==3.1.0 scipy==1.1.0
Q-learning是RL最基础的算法,于1989年由Watkins被提出来,与同样经典的SARSA算法非常类似。按木盏习惯,本文依旧不会大量堆公式,尽量以易理解的方式来表达Q-Learning。 1. 查表操作 “查表操作”这四个字足以概括Q-Learning的精髓。大家都知道强化学习的用处就是“做决策”,翻译成计算机科学语言就是:在当前的state下选择对应的action。这一步完全可
做3D pose的同学经常需要可视化单帧的3D关键点结果来进行调试。 本文实验目的,用matplotlib把一组点画成3D火柴人。注意:我画的都是17关节点的,其他数量的关节点请对照着改。 输入: [[9.07790224, -72.22343977, -76.2384473, -14.76985357, 93.36553108, 37.00967529, 50.7755518
matplotlib是python里最popular的画图工具,最近发现它可以用来画动态图。可以看看AI模型训练时候的loss曲线,accuracy变化等等。客观上,比tensorboard更简洁。 代码还是很简单滴: import matplotlib.pyplot as plt from random import random def do_something():
TensorBoard是一款优秀的基于浏览器的机器学习可视化工具。之前是tensorflow的御用可视化工具,由于tensorboard并不是直接读取tf张量,而是读取log进行可视化。所以,其他框架只需生成tensorboard可读的log,即可完成可视化。 之前,我一直用visdom做pytorch可视化,也是非常易用。不过现在跟tensorboard对比,我还是更推荐tensorboard
MUNIT是ECCV2018的一篇关于不同风格图像之间转换的文章,是UNIT的衍生版本。作者是很大方滴,在gayhub上就可以找到munit的代码。 Munit做了一件说明事情呢?我们看图就知道了: 通过几笔简笔就可以生成真实感的图像,这就是munit的用处之一了。准确来说,munit是cycleGAN的强化版本。 论文地址:http://openaccess.thecvf.com/co
数据增强方法无疑是需要重点研究的基本任务之一,因为我们的主流深度学习算法还是一个有监督过程。台湾国立清华大学在ECCV2018发表了一篇AugGAN开始把GAN用在数据增强方面了,当然,这并不是这个领域的第一篇。不过很具有参考意义,也很能解决实际问题。所以特地写一个blog研究一番。 读本文需要懂GAN和Auto-Encoder的基本算法流程,没有GAN和AE基础的可以看我关于GAN和A
在有监督机器学习算法越来越强大之时,数据便成了限制模型performance的最关键因素了。所以不少国内外学者的研究方向都开始转向数据增强了。 今天看了一篇来自《计算机应用》的期刊文章(好久没看journal了,而且还是国内的),不过这篇期刊还是有点货的。国内的journal,咱并不期待能当算法风向标,但可以当综述看,也可以有一定的价值。放一下论文链接:《基于生成式对抗神经网络的数据增强方法》文
cGAN = conditional GAN也是最基础的GAN模型,和GAN原文同时发表在NIPS2014上面。事实上,cGAN在GAN的基础上并没有做很大的改动,下文会主要分析一下cGAN的改动。 先按照国际惯例,放论文链接: Conditional Generative Adversarial Nets ~~~如果还不熟悉GAN算法的,可以看我的上一篇博文。前面说到GAN的缺点: 在训
Generative adversarial network 据有关媒体统计:CVPR2018的论文里,有三分之一的论文与GAN有关由此可见,GAN在视觉领域的未来多年内,将是一片沃土(CVer们是时候入门GAN了)。而发现这片矿源的就是GAN之父,Goodfellow大神。 神。文末有基于keras的GAN代码,有助于理解GAN的原理 生成对抗网络GAN,是当今的一大热门研究方向。在2
实时目标检测一直是yolo系列的追求之一,从yolo v1开始,作者就在论文中强调real-time。在后期的v2和v3的发展过程中,慢慢在P&R(尤其是recall rate)上下不少功夫。同时,计算量的增大也牺牲了yolo的实时性。 tiny-yolo是轻量级的yolo,在不那么要求mAP的场景下,tiny-yolo可以作为v2甚至v3的代替结构。事实上,对于无GPU的设备来讲,ti
yolo_v2论文发表在CVPR2017。v2算法在v1的基础上可以说是飞跃性提升,吸取诸子百家之优势。同时,v2的论文也是目前为止yolo系列论文里干货最多的文章。 论文标题:《YOLO9000: Better, Faster, Stronger》 论文地址: https://arxiv.org/pdf/1612.08242v1.pdf yolo_v2的一大特点是可以”tradeo
yolo v1发表在CVPR2016上,是经典的one-stage检测算法。在没接触yolo之前,我曾经就和师兄争论过,是否能把bounding box的坐标和宽高像分类网络那样预测出来,Yolo v1的出现证明了我的猜测是对的。 论文标题: 《You Only Look Once: Unified, Real-Time Object Detection》论文地址:https://arxiv
积分
粉丝
勋章
TA还没有专栏噢
第三方账号登入
看不清?点击更换
第三方账号登入
QQ 微博 微信