RCNN系列(注意事项及简单步骤)

2024-05-14 09:08

本文主要是介绍RCNN系列(注意事项及简单步骤),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:https://blog.csdn.net/poorfriend/article/details/51604385



训练过程:

step 1: 对于每张图片,利用选择性搜索(SS,Selective Search)找出2K个候选区域。对每个候选区域改变其尺度和长宽比,使其与卷积神经网络要求的图片输入的规格保持一致。

step 2: 利用Alexnet或VGGnet初始化CNN,将最后的1000类分类器替换成21类(20类+背景)分类器,随机初始化这层权重,然后就是整个网络的fine-tuning。训练时候选区域中,与GT box(grand-true box)的IOU大于0.5标为正样本,其余为负样本。从正样本中随机抽取32个,负样本中随机抽取96个,构成一个128的min-batch。

step 3: 利用步骤2调整好的网络(前面的网络已经是固定了)提取特征,用SVM分类。GT box标为正,其他候选区域中与GT box的IOU小于0.3标为负,其他的舍去。

step 4: 边框回归


注:

1 改变图片大小,文中给出了几种方法:

(1)各向异性缩放, 我的理解是长宽放缩不同的倍数:

这种方法很简单,就是不管图片的长宽比例,管它是否扭曲,进行缩放就是了,全部缩放到CNN输入的大227*227,如下图(D)所示;

(2)各向同性缩放,长宽放缩相同的倍数

A、tightest square with context:把region proposal的边界进行扩展延伸成正方形,灰色部分用原始图片中的相应像素填补,如下图(B)所示;

B、“tightest square without context”:把region proposal的边界进行扩展延伸成正方形,灰色部分不填补,如下图(C)所示;

在放缩之前,作者也考虑了,在region proposal周围补额外的原始图片像素(pad p)。两张图片第一层p=0,第二层p=16.


2  正负样本和softmax的问题:

为什么最后分类的时候用SVM代替了softmax,因为作者通过实验发现还是SVM更好。那为什么不一开始就用SVM做fine-tuning呢?我认为是SVM是一个二分类器,并不适合做fine-tuning。当用softmax做fine-tuning时,如果采用和SVM一样的区分正负样本策略,则效果会差很多。作者猜测是因为这样做会引起样本数太少导致过拟合。softmax区分样本的方法更宽泛,将正样本的数量提高近30倍,这样就避免了过拟合。值得注意的是,这样做得到的结果是次优的,因为并没有用精确的定位以及更严格的负样本来fine-tuning。svm训练的时候,因为svm适用于少样本训练,所以对于训练样本数据的IOU要求比较严格。


3 边框回归:

用SVM为每个region proposal评分后,可以用边框回归找到更精确地定位。这些边框回归器是按类来训练的

      

P和G分布候选区域和GT Box,P和G的IOU必须达到某个阈值(文中是0.6)。下面不加说明的话省略上标i.。公式中x,y代表区域中心坐标,w,h代表长和高。是region proposal经变换后的新区域。




据作者的结论,对候选区域评分和边框回归只进行一次,多次迭代,并无提升。

这篇关于RCNN系列(注意事项及简单步骤)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/988343

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 10130 简单背包

题意: 背包和 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP