希望能一文让人回忆起曾经学习过的知识吧,工作后注重工程落地,反倒是丢了很多模型细节知识。
近来也发现疫情让大家更卷了,大家疫情在家估计更有精力去创作吧。
比如:https://space.bilibili.com/18161609/channel/seriesdetail?sid=244160

深度学习模型学习步骤:
(1)看网上的资料;
(2)看论文;
(3)看源码;
(4)反看论文。

1 RCNN

RCNN的算法过程:
(1)候选区域生成: 一张图像生成1K~2K个候选区域 (采用Selective Search 方法)
Selective Search 方法是基于图像分割的,在CPU上计算,一般时间得需要2秒钟。候选区域就是非常多的有一定道理的框。

(2)利用候选区域,crop原图,将2k个的warped region送入CNN网络提取特征,比如VGG16网络。得到 2k X 4096 的矩阵。

(3)对于每个类别做一个SVM分类器和SVM回归器,就有 20个SVM分类器 + 20个SVM回归器 。
2k个框里面判断是不是属于某个类别,然后NMS之后留下的框中存在的就是某个类别,再依靠SVM回归器对 x中心、y中心、x偏移、y偏移 进行回归。

RCNN的缺点:
(1)CNN特征提取是重复的;
(2)训练很麻烦,需要分别训练各个网络;
(3)训练所需空间很大(SVM分类器后才是SVM回归器,需要对分类器数据保留在硬盘)。

2 Fast-RCNN

论文:https://arxiv.org/pdf/1504.08083.pdf

Fast-RCNN 做了什么:
(1)图像只提取一次特征,在最后加入RoI pooling池化,池化成 7X7 特征图。 原图像大小就不用再关心。
(2)最终结果是使用2个并行的FC网络。
softmax是分类出21个类别,1个类别是背景。
bbox regressor 回归出(dx,dy,dw,dh)。

分类损失函数:
L(p,u,tu,v)=Lcls(p,u)+λ[u≥1]Lloc(tu,v)L\left(p, u, t^{u}, v\right)=L_{\mathrm{cls}}(p, u)+\lambda[u \geq 1] L_{\mathrm{loc}}\left(t^{u}, v\right)L(p,u,tu,v)=Lcls​(p,u)+λ[u≥1]Lloc​(tu,v)
bbox回归损失函数:
Lloc(tu,v)=∑i∈{x,y,w,h}smooth⁡L1(tiu−vi)L_{\mathrm{loc}}\left(t^{u}, v\right)=\sum_{i \in\{\mathrm{x}, \mathrm{y}, \mathrm{w}, \mathrm{h}\}} \operatorname{smooth}_{L_{1}}\left(t_{i}^{u}-v_{i}\right)Lloc​(tu,v)=∑i∈{x,y,w,h}​smoothL1​​(tiu​−vi​)
其中:
smooth⁡L1(x)={0.5x2if ∣x∣<1∣x∣−0.5otherwise \operatorname{smooth}_{L_{1}}(x)= \begin{cases}0.5 x^{2} & \text { if }|x|<1 \\ |x|-0.5 & \text { otherwise }\end{cases}smoothL1​​(x)={0.5x2∣x∣−0.5​ if ∣x∣<1 otherwise ​

训练过程:
(1)候选区域生成: 一张图像生成1K~2K个候选区域 (采用Selective Search 方法)
(2)
正样本:与 ground truth 的 bbox IOU>0.5
负样本:与 ground truth 的 bbox 0.1 < IOU <= 0.5
从 1K~2K个候选区域 中随机选出一些正负样本进行训练。

网络:

链接:https://github.com/gary1346aa/Fast-RCNN-Object-Detection-Pytorch/blob/master/README.ipynb

class RCNN(nn.Module):def __init__(self):super().__init__()rawnet = torchvision.models.vgg16_bn(pretrained=True)self.seq = nn.Sequential(*list(rawnet.features.children())[:-1])self.roipool = SlowROIPool(output_size=(7, 7))self.feature = nn.Sequential(*list(rawnet.classifier.children())[:-1])_x = Variable(torch.Tensor(1, 3, 224, 224))_r = np.array([[0., 0., 1., 1.]])_ri = np.array([0])_x = self.feature(self.roipool(self.seq(_x), _r, _ri).view(1, -1))feature_dim = _x.size(1)self.cls_score = nn.Linear(feature_dim, N_CLASS+1)self.bbox = nn.Linear(feature_dim, 4*(N_CLASS+1))self.cel = nn.CrossEntropyLoss()self.sl1 = nn.SmoothL1Loss()def forward(self, inp, rois, ridx):res = inpres = self.seq(res)res = self.roipool(res, rois, ridx)res = res.detach()res = res.view(res.size(0), -1)feat = self.feature(res)cls_score = self.cls_score(feat)bbox = self.bbox(feat).view(-1, N_CLASS+1, 4)return cls_score, bboxdef calc_loss(self, probs, bbox, labels, gt_bbox):loss_sc = self.cel(probs, labels)lbl = labels.view(-1, 1, 1).expand(labels.size(0), 1, 4)mask = (labels != 0).float().view(-1, 1).expand(labels.size(0), 4)loss_loc = self.sl1(bbox.gather(1, lbl).squeeze(1) * mask, gt_bbox * mask)lmb = 1.0loss = loss_sc + lmb * loss_locreturn loss, loss_sc, loss_loc

3 Faster RCNN

论文:https://arxiv.org/pdf/1506.01497.pdf


Faster RCNN 做了什么:
(1)基础结构同Fast RCNN,多了RPN网络;
(2)RPN网络:是独立训练的一个网络,主要作用是判断anchor里面有没有存在待检测类别。
(3)一张原始图中,以每个像素点为中心生成不同面积、不同比例的9个 anchor, 除去边界影响的 anchor , 大概会剩下6k个anchor,经过RPN,然后NMS后大概就剩下2k个候选框。

【深度学习】计算机视觉目标检测 RCNN Fast-RCNN Faster-RCNN相关推荐

  1. 基于深度学习的目标检测算法对比分析(RCNN、SPP、YOLO、SSD、FPN、RetinaNet)

    目录 (1) RCNN与SPP的比较 (2) RCNN → Fast RCNN → Faster RCNN (3) YOLO与RCNN类方法比较 (4) YOLO与SSD的比较 (5) YOLO v1 ...

  2. 基于深度学习的目标检测(object detection)—— rcnn、fast-rcnn、faster-rcnn、SSD、YOLO

    模型和方法: 在深度学习求解目标检测问题之前的主流 detection 方法是,DPM(Deformable parts models), 度量与评价: mAP:mean Average Precis ...

  3. 干货|基于深度学习的目标检测算法面试必备(RCNN~YOLOv5)

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨不出名的小金@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/35406 ...

  4. tf-faster-rcnn代码学习.目标检测(Tensorflow版Faster R-CNN)

    TF-Faster R-CNN 电脑配置 代码来源 环境配置 demo测试 参考博客 训练自己的数据集 测试阶段 Tensorboard查看收敛情况 电脑配置 系统:Ubuntu 16.04 GPU型 ...

  5. 中科院陈智能:计算机视觉经典——深度学习与目标检测

    不到现场,照样看最干货的学术报告! 嗨,大家好.这里是学术报告专栏,读芯术小编不定期挑选并亲自跑会,为大家奉献科技领域最优秀的学术报告,为同学们记录报告干货,并想方设法搞到一手的PPT和现场视频--足 ...

  6. 深度学习之目标检测:R-CNN、Fast R-CNN、Faster R-CNN

    object detection 就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection 要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题不是容 ...

  7. 基于深度学习的目标检测算法综述(从R-CNN到Mask R-CNN)

    深度学习目标检测模型全面综述:Faster R-CNN.R-FCN和SSD 从RCNN到SSD,这应该是最全的一份目标检测算法盘点 基于深度学习的目标检测算法综述(一) 基于深度学习的目标检测算法综述 ...

  8. OCR:深度学习-目标检测-超详细图解Faster R-CNN

    版权声明:本文为博主原创文章,转载请标明原始博文地址: https://blog.csdn.net/yuanlulu/article/details/86769589 本文动机 说实话,介绍Faste ...

  9. 深度学习图像处理目标检测图像分割计算机视觉 02--图像特征与描述

    深度学习图像处理目标检测图像分割计算机视觉 02--图像特征与描述 摘要 一.图像特征与描述 1.1.颜色特征 1.2.几何特征提取 1.3.基于特征点的特征描述子 1.3.1.几何特征:关键点 1. ...

  10. 深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法

    深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法 摘要 一.神经元 二.前馈网络 2.1 Delta学习规则 2.2 目标函数J(w) 三.误差反向传播算法(BP算法 ...

最新文章

  1. html盒子移动动画代码,HTML5/Canvas 盒子追踪动画
  2. Boost:path的测试程序
  3. 收藏 | 分享 3 种脑洞大开的Excel技巧
  4. html页面加载完成后会触发的事件_前端隐秘角落 - 页面渲染
  5. vue将文本渲染html,vue2.0 之文本渲染-v-html、v-text
  6. 不定高宽的元素居中的方法
  7. 央视《新闻联播》正式入驻快手平台
  8. Java中JTextField.getText() 和 JPassword.getPassword() 的区别
  9. Leetcode-403-青蛙过河(DFS+备忘录)
  10. mybatis 注解使用
  11. Charles破解和安装【破解APP抓包限制】Xposed+JustTrustMe关闭SSL证书验证
  12. 访问不了共享文件夹提示“网络错误“的解决方法
  13. 使用powershell提权的一些技巧
  14. springmvc GET POST 接受参数方式
  15. shim是什么?Vue响应式原理
  16. 智能送药小车解说(国二)
  17. libigl第五章-参数化
  18. “TrueType 造字程序”的具体用法
  19. EXP-00002错误解决方法
  20. 【转载】VMware虚拟机安装黑群晖7.0教程

热门文章

  1. STL案例-员工分组
  2. Kernel Exception 问题分析详解
  3. Oracle_11gR2安装
  4. html将div标签添加背景音乐,html页面加上背景音乐自动播放
  5. Java对于数据加密与解密的实现EncryptUtil、MD5与sha-1
  6. 前端简介以及开发环境搭建
  7. react-native 0.43 后如何使用自己的OkHttpClient
  8. Jedis和Lettuce的区别
  9. android电视用久了会卡吗,电视卡顿怎么办?三个方法,轻松让卡顿的电视满血复活...
  10. 视频教程-Java基础中国象棋和网络聊天室Swing开发-Java