NoRM

SLAM之特征匹配(一)————RANSAC-------OpenCV中findFundamentalMat函数使用的模型

风格不统一 提交于 2020-04-27 17:24:26
随机抽样一致性(RANSAC)算法,可以在一组包含“外点”的数据集中,采用不断迭代的方法,寻找最优参数模型,不符合最优模型的点,被定义为“外点”。在图像配准以及拼接上得到广泛的应用,本文将对RANSAC算法在OpenCV中角点误匹配对的检测中进行解析。 1.RANSAC原理 OpenCV中滤除误匹配对采用RANSAC算法寻找一个最佳单应性矩阵H,矩阵大小为3×3。RANSAC目的是找到最优的参数矩阵使得满足该矩阵的数据点个数最多,通常令h33=1来归一化矩阵。由于单应性矩阵有8个未知参数,至少需要8个线性方程求解,对应到点位置信息上,一组点对可以列出两个方程,则至少包含4组匹配点对。 其中(x,y)表示目标图像角点位置,(x',y')为场景图像角点位置,s为尺度参数 。 RANSAC算法从匹配数据集中随机抽出4个样本并保证这4个样本之间不共线,计算出单应性矩阵,然后利用这个模型测试所有数据,并计算满足这个模型数据点的个数与投影误差(即代价函数),若此模型为最优模型,则对应的代价函数最小。 ----------------------------------------------------------------------------------------------------------------- RANSAC算法步骤: 1. 随机从数据集中随机抽出4个样本数据

PyTorch之前向传播函数自动调用forward

夙愿已清 提交于 2020-04-27 05:36:41
参考:1. pytorch学习笔记(九):PyTorch结构介绍 2. pytorch学习笔记(七):pytorch hook 和 关于pytorch backward过程的理解 3. Pytorch入门学习(三):Neural Networks 4. forward 神经网络的典型处理如下所示: 1. 定义可学习参数的网络结构(堆叠各层和层的设计); 2. 数据集输入; 3. 对输入进行处理(由定义的网络层进行处理),主要体现在网络的前向传播; 4. 计算loss ,由Loss层计算; 5. 反向传播求梯度; 6. 根据梯度改变参数值,最简单的实现方式(SGD)为: weight = weight - learning_rate * gradient 下面是利用PyTorch定义深度网络层(Op)示例: class FeatureL2Norm( torch. nn. Module): def __init__ ( self): super(FeatureL2Norm, self).__init_ _() def forward ( self, feature): epsilon = 1e- 6 # print(feature.size()) # print(torch.pow(torch.sum(torch.pow(feature,2),1)+epsilon,0.5).size(

opencv-图像上采样和降采样

十年热恋 提交于 2020-04-24 23:00:55
图像金字塔 图像金字塔是图像多尺度表达的一种,是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。 降采样 ,即是采样点数减少。对于一幅N*M的图像来说,如果降采样系数为k,则即是在原图中 每行每列 每隔k个点取一个点组成一幅图像。降采样很容易实现. 升采样 ,也即插值。对于图像来说即是二维插值。如果升采样系数为k,即在原图n与n+1两点之间插入k-1个点,使其构成k分。二维插值即在每行插完之后对于每列也进行插值。 插 值的方法分为很多种,一般主要从时域和频域两个角度考虑。对于时域插值,最为简单的是线性插值。除此之外,Hermite插值,样条插值等等均可以从有关 数值分析书中找到公式,直接代入运算即可。对于频域,根据傅里叶变换性质可知,在频域补零等价于时域插值。所以,可以通过在频域补零的多少实现插值运 算。 高斯金字塔采样相关API (1)上采样(cv::pyrUp) – 放大(zoom in),向底端发展 pyrUp(Mat src, Mat dst, Size(src.cols*2, src.rows*2)); //生成的图像是原图在宽与高各放大两倍 pyrUp(src

如何用深度学习模型为自己做个漫画画像(含代码流程)

大城市里の小女人 提交于 2020-04-24 12:07:21
最近看到一个特别有意思的开源项目,能把照片自动转化成漫画效果,经过半个小时的调试,终于跑通了。正先给大家看下实际效果,我在网上的随便搜了一张帅哥的证件照片试了下。基本上会把脑袋切出来,然后放大眼睛。 原照: 漫画效果后: 使用的是开源项目: https://github.com/minivision-ai/photo2cartoon 具体原理直接摘录read.me的一段描述: 人像卡通风格渲染的目标是,在保持原图像ID信息和纹理细节的同时,将真实照片转换为卡通风格的非真实感图像。我们的思路是,从大量照片/卡通数据中习得照片到卡通画的映射。一般而言,基于成对数据的pix2pix方法能达到较好的图像转换效果,但本任务的输入输出轮廓并非一一对应,例如卡通风格的眼睛更大、下巴更瘦;且成对的数据绘制难度大、成本较高,因此我们采用unpaired image translation方法来实现。 Unpaired image translation流派最经典方法是CycleGAN,但原始CycleGAN的生成结果往往存在较为明显的伪影且不稳定。近期的论文U-GAT-IT提出了一种归一化方法——AdaLIN,能够自动调节Instance Norm和Layer Norm的比重,再结合attention机制能够实现精美的人像日漫风格转换。 与夸张的日漫风不同,我们的卡通风格更偏写实

mmdetection(一)安装及训练、测试VOC格式的数据

时间秒杀一切 提交于 2020-04-21 00:28:54
一、安装 https://github.com/open-mmlab/mmdetection/blob/master/docs/INSTALL.md 二、训练自己的数据  1、数据  mmdet的默认格式是coco的,这里就以voc格式为例,data下文件夹摆放位置如图 2、训练 (1)修改configs文件下的文件    可先复制一份,然后自己命名一下。比如retinanet_x101_64x4d_fpn_1x.py,修改的部分主要是dataset settings部分,这部分可直接参考 pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py(如下);还有一部分是修改该文件下的num_classes(类别数+1) # dataset settings dataset_type = ' VOCDataset ' data_root = ' data/VOCdevkit/ ' img_norm_cfg = dict( mean =[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb= True) train_pipeline = [ dict(type = ' LoadImageFromFile ' ), dict(type = ' LoadAnnotations ' ,

看GAN如何一步步控制图像生成风格?详解StyleGAN进化过程

跟風遠走 提交于 2020-04-20 13:35:04
GAN 能够有条不紊地控制其生成图像的风格吗? 选自Medium,作者:Jonathan Hui,机器之心编译,参与:魔王、杜伟。 你了解自己的风格吗?大部分 GAN 模型并不了解。那么,GAN 能够有条不紊地控制其生成图像的风格吗? 原版 GAN 基于潜在因子(latent factor)z 生成图像。 通常,潜在因子 z 采样自正态或均匀分布,它们决定了生成内容的类型和风格。 基于此,我们需要解答以下两个重要问题: 为什么 z 是均匀或正态分布? 既然 z 包含元信息,那么它是否应在每个卷积层生成数据的过程中发挥更主要的作用?(而不是仅作为第一层的输入) 注意:本文将使用「风格」(style)来指代元信息,其包含类型信息和风格信息。 下图是 StyleGAN2 生成的图像: 潜在因子 z 机器学习中的潜在因子通常彼此独立,以简化模型训练过程。例如,身高和体重具备高度相关性(个子越高的人通常体重更大)。因此,基于身高、体重计算得到的身体质量指数(body mass index,BMI)较常用于衡量人体肥胖程度,其所需的训练模型复杂度较低。而彼此独立的因子使得模型更易于解释。 在 GAN 中,z 的分布应与真实图像的潜在因子分布类似。如果我们从正态或均匀分布中采样 z,则优化后的模型可能需要 z 来嵌入类型和风格以外的信息。例如,我们为军人生成图像

PaddlePaddle/PaddleDetection

风格不统一 提交于 2020-04-17 03:42:32
【推荐阅读】微服务还能火多久?>>> English | 简体中文 PaddleDetection PaddleDetection的目的是为工业界和学术界提供丰富、易用的目标检测模型。不仅性能优越、易于部署,而且能够灵活的满足算法研究的需求。 目前检测库下模型均要求使用PaddlePaddle 1.7及以上版本或适当的develop版本。 简介 特性: 易部署: PaddleDetection的模型中使用的核心算子均通过C++或CUDA实现,同时基于PaddlePaddle的高性能推理引擎可以方便地部署在多种硬件平台上。 高灵活度: PaddleDetection通过模块化设计来解耦各个组件,基于配置文件可以轻松地搭建各种检测模型。 高性能: 基于PaddlePaddle框架的高性能内核,在模型训练速度、显存占用上有一定的优势。例如,YOLOv3的训练速度快于其他框架,在Tesla V100 16GB环境下,Mask-RCNN(ResNet50)可以单卡Batch Size可以达到4 (甚至到5)。 支持的模型结构: ResNet ResNet-vd 1 ResNeXt-vd SENet MobileNet HRNet Res2Net Faster R-CNN ✓ ✓ x ✓ ✗ ✗ ✗ Faster R-CNN + FPN ✓ ✓ ✓ ✓ ✗ ✓ ✓ Mask R-CNN ✓ ✓

PaddlePaddle/PaddleSeg

北慕城南 提交于 2020-04-16 11:16:37
【推荐阅读】微服务还能火多久?>>> PaddleSeg 图像分割库 简介 PaddleSeg是基于 PaddlePaddle 开发的语义分割库,覆盖了DeepLabv3+, U-Net, ICNet, PSPNet, HRNet, Fast-SCNN等主流分割模型。通过统一的配置,帮助用户更便捷地完成从训练到部署的全流程图像分割应用。 特点 安装 使用教程 快速入门 基础功能 预测部署 高级功能 在线体验 FAQ 交流与反馈 更新日志 贡献代码 特点 丰富的数据增强 基于百度视觉技术部的实际业务经验,内置10+种数据增强策略,可结合实际业务场景进行定制组合,提升模型泛化能力和鲁棒性。 模块化设计 支持U-Net, DeepLabv3+, ICNet, PSPNet, HRNet, Fast-SCNN六种主流分割网络,结合预训练模型和可调节的骨干网络,满足不同性能和精度的要求;选择不同的损失函数如Dice Loss, BCE Loss等方式可以强化小目标和不均衡样本场景下的分割精度。 高性能 PaddleSeg支持多进程I/O、多卡并行、跨卡Batch Norm同步等训练加速策略,结合飞桨核心框架的显存优化功能,可大幅度减少分割模型的显存开销,让开发者更低成本、更高效地完成图像分割训练。 工业级部署 全面提供 服务端 和 移动端 的工业级部署能力

【实例分割_SOLOv2】SOLOv2:Dynamic,Faster and Stronger

被刻印的时光 ゝ 提交于 2020-04-16 10:01:36
【推荐阅读】微服务还能火多久?>>> 文章目录 一、背景 二、相关工作 三、重看 SOLOv1 四、SOLOv2 4.1 Dynamic Instance Segmentation 4.1.1 Mask kernel branch 4.1.2 Mask feature branch 4.1.3 Forming Instance Mask 五、Experiments 5.1 Instance segmentation 5.1.1 Main results 5.1.2 SOLOv2 visualization 5.1.3 Ablation Experiments 论文链接: https://arxiv.org/abs/2003.10152 代码链接: http://github.com/WXinlong/SOLO 一、背景 在 SOLOv1的基础上的两个提升: 1、Mask Learning SOLOv2要进一步动态学习目标分割器的 mask head,mask head 被解耦成 mask kernel branch 和 mask feature branch,分别来学习卷积核和卷积特征。mask learning 可以分为两部分: convolutional kernel learning:当把 pixel 分类到不同的网格中时,网络会自动预测要使用的分类器,并根据输入图像进行调整

基于PaddlePaddle的StarGAN,AttGAN,STGAN算法

我的未来我决定 提交于 2020-04-14 16:09:48
【推荐阅读】微服务还能火多久?>>> 简介 生成对抗网络(Generative Adversarial Network[1], 简称GAN) 是一种非监督学习的方式,通过让两个神经网络相互博弈的方法进行学习,该方法由lan Goodfellow等人在2014年提出。生成对抗网络由一个生成网络和一个判别网络组成,生成网络从潜在的空间(latent space)中随机采样作为输入,其输出结果需要尽量模仿训练集中的真实样本。判别网络的输入为真实样本或生成网络的输出,其目的是将生成网络的输出从真实样本中尽可能的分辨出来。而生成网络则尽可能的欺骗判别网络,两个网络相互对抗,不断调整参数。 生成对抗网络常用于生成以假乱真的图片。此外,该方法还被用于生成影片,三维物体模型等。 下载安装命令 ## CPU版本安装命令 pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle ## GPU版本安装命令 pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu 本项目采用celeba数据集,关于celeba数据集的介绍,详见 https://zhuanlan.zhihu.com/p/35975956 In[1] #解压数据集