ORB算法笔记

无人机航拍图像匹配——ORB算法实践(含代码) 无人机航拍图像,用orb算法进行匹配 阅读详情

ORB(Oriented FAST and Rotated BRIEF)特征是目前看来非常具有代表性的实时图像特征。它改进了FAST检测子不具有方向性的问题,并采用速度极快的二进制描述子BRIEF(Binary Robust Independent Elementary Feature),使整个图像特征提取的环节大大加速。ORB在保持了特征子具有旋转、尺度不变性的同时,在速度方面提升明显,ORB是质量与性能之间很好地折中,对于实时性要求很高的SLAM而言是一个很好地选择。

ORB算法根据功能不同可分为特征点提取和特征点描述两部分

一、特征提取

特征提取模块从预处理的图像中提取角点,随后计算提取出的角点的描述子,其中主要部分为角点提取算法以及角点描述子算法。

早期的角点提取算法有Moravec角点检测算法、Harris角点检测算法、SUSAN角点检测算法、GFTT角点检测算法等等。其中 Moravec是最早的角点检测算法之一,但该算法存在对边缘的响应单一、噪声较多等问题。针对这些问题 Chris Harris等人提出了Harris 角点检测算法,其主要采用窗口滑动法对角点进行检测。

早期角点检测算法对角点的提取效果并不理想,相较而言,后期提出的ORB算法、SURF算法以及SIFT算法的应用性较高,能够满足实际应用需求。

其中以使用ORB算法为基础的ORB-SLAM2系统有着极高的应用性,其采用实时性较高的FAST角点检测算法对角点进行检测,随后采用BRIEF (Binary Robust Independent Elementary Features)特征描述算法对特征点描述子进行计算,虽然ORB算法的旋转不变性和尺度不变性相较于SURF算法和SIFT算法处于劣势,但由于FAST算法和BRIEF算法的计算速度快,因此其具有较高的实时性。在尺度不变性方面,ORB算法采用了高斯金字塔模型因此也具有一定的旋转不变性和尺度不变性,是较为理想的算法。

二、特征匹配

特征匹配主要分为基于灰度的匹配方法和基于特征的匹配方法。其中灰度匹配相较于特征匹配在匹配速度和精度上均存在不足,因此特征匹配在当下环境中拥有广泛的适应性。

常用的基于特征的匹配方法有暴力匹配(Brute-Force)算法和快速近似最近邻算法(FLANN)两种,其中暴力匹配算法将当前描述符的所有特征都拿来和另一个描述符进行比较并通过对比较两个描述符,产生匹配结果列表。而快速近似最近邻算法在处理大量特征点时有着相较于其他最近邻算法更快的速度。
在这里插入图片描述

#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/xfeatures2d.hpp>
#include <opencv2/features2d/features2d.hpp>
void extracte_orb(cv::Mat input,std::vector<cv::KeyPoint> &keypoint,cv::Mat &descriptor){
    cv::Ptr<cv::ORB> f2d = cv::ORB::create(500);
    f2d->detect(input,keypoint);
    cv::Mat image_with_kp;
    f2d->compute(input,keypoint,descriptor);
    cv::drawKeypoints(input, keypoint, image_with_kp, cv::Scalar::all(-1),cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
    cv::imwrite("orb"+std::to_string(random())+".png",image_with_kp);
}

void match_two_image(cv::Mat image1,cv::Mat image2, std::vector<cv::KeyPoint> keypoint1,std::vector<cv::KeyPoint> keypoint2,cv::Mat descriptor1,cv::Mat descriptor2){
    cv::BFMatcher matcher(cv::NORM_HAMMING);
    std::vector<cv::DMatch> matches;
    matcher.match(descriptor1,descriptor2, matches);
    cv::Mat good_matches_image;
    cv::drawMatches(image1, keypoint1, image2, keypoint2,
                    matches, good_matches_image, cv::Scalar::all(-1), cv::Scalar::all(-1),
                    std::vector<char>(), cv::DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS);
    cv::imwrite("good_matches_image.png",good_matches_image);
    {
        std::vector <cv::KeyPoint> RAN_KP1, RAN_KP2;
        std::vector<cv::Point2f> keypoints1, keypoints2;
        for (int i = 0; i < matches.size(); i++) {
            keypoints1.push_back(keypoint1[matches[i].queryIdx].pt);
            keypoints2.push_back(keypoint2[matches[i].trainIdx].pt);
            RAN_KP1.push_back(keypoint1[matches[i].queryIdx]);
            RAN_KP2.push_back(keypoint2[matches[i].trainIdx]);
        }

        std::vector<uchar> RansacStatus;
        cv::findFundamentalMat(keypoints1, keypoints2, RansacStatus, cv::FM_RANSAC);
        std::vector <cv::KeyPoint> ransac_keypoints1, ransac_keypoints2;
        std::vector <cv::DMatch> ransac_matches;
        int index = 0;
        for (size_t i = 0; i < matches.size(); i++)
        {
            if (RansacStatus[i] != 0)
            {
                ransac_keypoints1.push_back(RAN_KP1[i]);
                ransac_keypoints2.push_back(RAN_KP2[i]);
                matches[i].queryIdx = index;
                matches[i].trainIdx = index;
                ransac_matches.push_back(matches[i]);
                index++;
            }
        }
        cv::Mat after_ransac_sift_match;
        cv::drawMatches(image1, ransac_keypoints1, image2, ransac_keypoints2,
                        ransac_matches, after_ransac_sift_match, cv::Scalar::all(-1), cv::Scalar::all(-1),
                        std::vector<char>(), cv::DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS);
        cv::imwrite("after_ransac_orb_match.png",after_ransac_sift_match);
    }
}

int main(int argc, char *argv[])
{
    cv::Mat image1 = cv::imread(argv[1]);
    cv::Mat image2 = cv::imread(argv[2]);
    std::vector<cv::KeyPoint> keypoint1,keypoint2;
    cv::Mat descriptor1, descriptor2;
    extracte_orb(image1,keypoint1,descriptor1);
    extracte_orb(image2,keypoint2,descriptor2);
    match_two_image(image1,image2,keypoint1,keypoint2,descriptor1,descriptor2);
    return 0;
}
特征检测---ORB 文章目录为什么要引入ORB什么是ORBFASTOriented FASTBRIEF描述子Hamming距离改进的BRIEF 为什么要引入ORB 在ORB之前,有SIFT、SURF,虽然具有良好的旋转不变性、光照不变性等,但这两个检测方法需要的时间实在是有些长,尤其是SIFT。下图是ORB文献里提到的每种方法检测一帧图像(640*480)所用的时间: 可以看出来,ORB在速度上的确是快很多。 什么是ORB ORB全称是Oriented FAST and Rotated BRIEF,是目前最快速稳定的特征点检 阅读详情

相关推荐

OpenCV4学习笔记(48)——GFTT特征点检测算法

在之前的笔记《OpenCV学习笔记(32)》中整理记录了在OpenCV中关于Harris角点检测和shi-tomas角点检测的一些内容,而由于角点对于一幅图像而言是非常重要的特征点,所以OpenCV在特征点检测模块中又基于shi-tomas角点检测算法集成了一个新的特征检测器,这也就是今天要记录的GFTT特征点检测。 那么什么是GFTT特征点呢?哈哈哈哈其实这个命名很随意,还记得之前记录的关于调用...

邱小兵的博客 6142

ORB

一、介绍 假如有两张人物图片,我没的目标是要确认这两张图片中的人物是否是同一个人。如果人来判断,这太简单了。但是让计算机来完成这个功能就困难重重。一种可行的方法是: 分别找出两张图片中的特征点描述这些特征点的属性,比较这两张图片的特征点的属性。如果有足够多的特征点具有相同的属性,那么就可以认为两张图片中的人物就是同一个人。 ORB(Oriented FAST and Rotate

郭云飞的专栏 7499

[图像特征匹配]SIFT、SURF、ORB算法笔记以及代码实现

SIFT算法学习笔记 尺度不变特征转换(Scale-invariant feature transform)是一种用来侦测与描述影像中的局部性特征的视觉算法,即通过求一幅图中的特征点及其有关尺度和方向的描述子得到特征,并进行图像特征点匹配。SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等,噪声也保持一定程度的稳定性,除此...

Ah丶Weii 4444

ORB特征提取和匹配

特征是图像信息的一种表达方式,我们可以把角点、边缘和区块都可以看作图像中有代表性的地方,我们发现,图像中的角点、边缘相比于区块更加“特别”,一种直观的提取特征的方式就是在不同的图像间辨认角点,确定它们的对应关系。在这种做法中,角点就是所谓的特征。角点的提取算法有很多,例如Harris角点、FAST角点、GFTT角点等等,然而ORB(Oriented Fast and Rotated BRIEF)是Oriented Fast + Rotated BRIEF的缩写,是目前最快速稳定的特征点检测和提取算法。...

weixin_44391223的博客 3273

OpenCV4学习笔记(42)——基于ORB特征提取描述算法的已知目标检测

在上次的笔记《OpenCV4学习笔记(40)》中,整理记录了关于ORB特征提取描述算法的一些使用方式,而今天正是要基于ORB算法来实现对图像中已知目标的检测。 实现步骤如下: 1、使用ORB特征提取描述算法来分别计算检测目标的模板图像和包含目标的待检测图像的特征描述子,要注意这一步骤非常重要,会影响到后续最佳匹配特征点对的获取; 2、通过暴力匹配算法来比对模板图像和待检测图像的特征描述子,并将两幅...

邱小兵的博客 1728

手写VIO --学习笔记 - Part6

1、 参考 从零手写VIO——(五)视觉前端 Frontend 手写VIO总结(四) 手写VIO课后作业(四) 从零开始手写VIO第四章作业(含关键点的参考资料) 深蓝学院《从零开始手写VIO》作业4 深蓝学院《从零开始手写VIO》作业四 有道云笔记 高翔,张涛等《视觉SLAM十四讲》p186-p197 ...

~勿据散客~的博客 1325

OpenCV4学习笔记(41)——ORB特征提取描述算法

今天要整理记录的笔记内容是特征算法中比较常用的一种——ORB特征提取描述算法,顾名思义,ORB算法包含了对特征点的提取和描述这两个部分。而在上次的博文《OpenCV4学习笔记(39)》中,记录了FAST特征提取算法和BRIEF特征描述算法,而今天的ORB算法正是这两者的融合升级。 ORB(Oriented FAST and Rotated BRIEF)算法是一种快速特征点提取和描述的算法。这个算法...

邱小兵的博客 1万+

ORB 算法理解

根据ORB an effiient alternative to SIFT or SURF论文,对ORB算法的理解

OpenCV学习笔记之:调整ORB算法的参数以适应不同的图像

追求精度 / 鲁棒性:增大nfeatures、减小、增大patchSize;追求速度 / 实时性:减小nfeatures、增大、减小patchSize;最终需通过 “可视化 + 匹配率” 验证,确保参数适配具体图像和任务。

xulibo5828的博客 1264

【Verilog模块例化全解析:从入门到精通】

本文详细解析了Verilog模块例化的核心概念与方法。主要内容包括: 模块定义与例化的基本概念,强调模块例化会生成独立硬件电路; 两种端口连接方式:位置映射(按顺序连接)和名称映射(按端口名连接),推荐使用名称映射提高可读性; 参数化例化方法,通过parameter实现可配置模块设计; 多层模块嵌套的实战应用,展示复杂设计的层次化实现。 文章通过2位加法器等代码示例,对比分析了不同例化方式的优缺点,为硬件设计中的模块复用提供了实用指导。重点推荐名称映射和参数化设计方法,以提高代码可维护性和设计灵活性。

m0_58476824的博客 1326

Minitab正交试验设计:从入门到精通的完整指南

本文提供了一份使用Minitab进行正交试验设计的完整指南。从正交试验省时省力的原理讲起,详细介绍了在Minitab中创建正交表、填入数据、执行分析(包括解读ANOVA和P值)以及寻找最优参数组合的全流程。文章旨在帮助读者,特别是工艺优化和研发人员,快速掌握这一高效工具,从而用最少的实验次数锁定关键影响因素,提升工作效率与成果。

weixin_29201313的博客 463

Opencv学习笔记(二)———Opencv3中ORB算法的使用

相信很多小伙伴在使用ORB算法的时候,一般会从网上搜一些代码作为参考,那么问题来了:在好多ORB程序中都会这么写: ORB orb;如果你使用的是Opencv3的版本,编译器就会报错:ORB是一个纯虚类,无法进行实例化。但在opencv2的版本中可以正常使用。这是为什么呢?于是乎就在opencv3官方的Documents中寻找答案,ORB属于features2d模块中。在它的文档中终于发现了原

bingoplus的博客 2万+

深入解析安卓性能分析工具systrace/atrace的使用技巧与实战场景

本文深入解析了安卓性能分析工具systrace/atrace的核心使用技巧与实战场景。文章澄清了环境搭建的常见误区,详细拆解了命令参数,并通过列表卡顿、启动优化等具体案例,手把手指导开发者利用这些工具精准定位性能瓶颈,提升应用流畅度。

yyy34的博客 239

OpenCV4.5.5学习笔记(二十二):使用 FLANN 进行特征匹配和ORB算法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、使用 FLANN 进行特征匹配二、ORB算法总结 前言 这是这个系列的最后一章,笔者也用了半个多月的时间内复习完了毛星云前辈编写的《OpenCV3编程入门》,非常感谢毛星云前辈。 笔者本科时候有幸接触了OpenCV3.2.0版本的学习,后因考研压力不得不暂时停下学习的脚步,现在考研任务结束了,未来的导师也是从事的该方向,笔者又开始了新一轮的学习。回来发现OpenCV已经出到了4.5.5版本,遂重新下载新版本并决定记录这一.

qq_43264167的博客 1565

基于Arduino的智能垃圾桶

通过本次简单的Arduino智能垃圾桶小实验可以快速了解Arduino的基本用法 1、材料准备 Arduino UNO HC-SR04超声波模块 SG90舵机 杜邦线 电源 电脑 2、代码分析 电机的控制 #include<Servo.h> #define duoji D5 Servo myduoji; void setup() { myduoji.attach(duoji); //舵机连接 Serial.begin(115200); } void loop() { myduoji.w

weixin_41679960的博客 1万+

GPS卫星轨道的理论和计算笔记分享

广义相对论预测,对比在时空弯曲度较大的地面上的原子钟,运行于时空弯曲度较小的卫星原子钟在地面上看起来更快,每天快约45us;反过来,当电压施加在晶体上时,晶体形状会扭曲(比如说伸长),而当晶体被施加上反向电压后,它将做相反的变形运动(比如缩短)。X轴:指向参考子午面与地球赤道的一个交点;从北黄极上方观察,地球北极在空间的运动轨迹是一个近似于以北黄极为中心的顺时针方向旋转的圆周,圆周半径等于。从上万年周期看,地球北极绕北黄极做大圆周运动,而从几年的短期来看,北极又在某一点处做局部的小幅椭圆运动。

m0_57139844的博客 2003

[学习笔记-图像处理篇]特征提取与匹配算法matlab程序梳理——ORB

第3弹 整理整理,一鼓作气。 ORB 程序指路 ???? ORB特征匹配 注: 1)程序为c++程序,可以基于VS实现,也可以使用作者提供的CMakeLists.txt在linux下编译; 2)直接复制程序到VS会出现符号错误,主要是【空格符】的问题,重新打一下就好; 3)程序中imshow后面都有waitKey(0),想一次出图可以注释掉。 程序中注释写的很清楚,好匹配(good match)的筛选条件自己可以修改下面的条件。 if (matches[i].distance <= max(2 *

warningm_dm的博客 1658

小梅哥Xilinx ZYNQ学习笔记2——38译码器

译码器(Decoder)是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等),功能与编码器相反。译码器一般分为通用译码器和数字显示译码器两大类。本设计的是通用译码器。三八译码器,即是 3 种输入状态翻译成 8 种输出状态。1.case开始开始,endcase结束;2.数字声明时,合法的基数格式有 4 中,包括:十进制('d 或 'D),十六进制('h 或 'H),二进制('b 或 'B),八进制('o 或 'O)。数值可指明位宽,也可不指明位宽。

m0_51430584的博客 1636

数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF

数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF 一、概述 ORB的全称是Oriented FAST and Rotated BRIEF,是目前来说非常好的能够进行的实时的图像特征提取和描述的算法,它改进了FAST特征提取算法,并使用速度极快的二进制描述子BRIEF。 针对FAST特征提取的算法的一些确定,ORB也做了相应的...

Leon_Chen的博客 7717

08 RK3568 MAC TO MAC直连 RTL8367S mdio

本文:采用rk3568 gamc0 通过rgmii直连 交换芯片的mac口 通信方法为mdio。

qq_39451352的博客 3474

Bootstrap方法详解——技术与实例

一、Introduction 如果说到Bootstrap你会想到什么?是Twitter推出的那个用于前端开发的开源工具包吗?Unfortunately,本文要讨论的并非是Bootstrap工具包,而是统计学习中一种重采样(Resampling)技术。这种看似简单的方法,对后来的很多技术都产生了深远的影响。机器学习中的Bagging,AdaBoost等方法其实都蕴含了Bootstrap的思想...

白马负金羁 8万+

(学习笔记)基于ROS以及不基于ROS的ORB-SLAM2算法包运行(运行自己的video和数据集)

不基于ROS环境: 1、将算法包克隆下来: git clone https://github.com/raulmur/ORB_SLAM2 按照其官网说明安装依赖,比如pangolin,cere,

巧克力热拿铁 1148

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【SLAM学习笔记】2-ORB_SLAM3关键源码分析⓪ 算法框架&命名规范&KeyFrameDatabase(一)

2021SC@SDUSC

qq_47891062的博客 1246

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Linux系统安装与ORB_SLAM2的算法编译实验

具体过程,请看:优快云博客 一、实验题目 Linux系统安装实验(Ubuntu16.04) ORB-SLAM2算法编译实验 二、实验要求 Linux系统安装实验(Ubuntu16.04)的实验要求: … ORB-SLAM2算法编译实验的实验要求: … 三、实验器材或设备 惠普笔记本电脑,配置如下: … 四、实验步骤 Linux系统安装实验(Ubuntu16.04)步骤 … ORB-SLAM2算法编译实验步骤 … 调试及编译过程中的问题与解答 … 五、实验结果 图3.4 TUM数据集中_360

成名每在穷苦日 248

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ORB-SLAM2代码阅读笔记(十):sim3求解

Table of Contents 1.sim3的简单概述 2.sim3算法介绍 1)3对匹配的3D点建立坐标系 2)旋转矩阵计算 3)平移向量计算 4)尺度计算 3.代码解析 1)sim3求解器构造函数Sim3Solver 2)sim3迭代求解Sim3Solver::iterate 本篇笔记对 ORB-SLAM2代码阅读笔记(八):LoopClosing线程 中提到的s...

1万+

数字图像处理学习笔记(一):特征检测和匹配概述

数字图像处理学习笔记(一):特征检测和匹配综述 参考博客: 特征点的匹配 1、特征点概述 如何高效且准确的匹配出两个不同视角的图像中的同一个物体,是许多计算机视觉应用中的第一步。虽然图像在计算机中是以灰度矩阵的形式存在的,但是利用图像的灰度并不能准确的找出两幅图像中的同一个物体。这是由于灰度受光照的影响,并且当图像视角变化后,同一个物体的灰度值也会跟着变化。所以,就需要找出一种能够在相机进行移动和...

Leon_Chen的博客 3855
上一篇: 2023年“挑战杯”大学生课外学术科技作品竞赛有感
下一篇: 2023第十届大唐杯省赛心得体会总结
极客范儿
极客范儿 新星创作者: 游戏开发技术领域 新星创作者: 游戏开发技术领域 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄12年 1万+粉丝 341原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值