『cs231n』图像定位与检测

图像处理任务

分类,定位,检测,图像分割辨析:

定位:

每张图片只有单个对象(可以有多个类),后面有提到,一般只要是固定个对象即可,不一定是一个(人体姿势判断部分)由于实现相对简单,所以能划分为定位任务时尽量划分为定位任务

检测:

每张图片可以有多个对象和多个类

分割:

不是简单的画框,而是围出轮廓,本节不予讨论

图像分类&定位

定位任务引入

和分类任务输出一个代表类标签的向量不同,定位任务输出的是描述框的四个数字,而网络评估不使用准确率而使用IOU。【注】IOU定义如下:

矩形框A、B的一个重合度IOU计算公式为:

IOU=(A∩B)/(A∪B)

定位任务idea:回归任务

像训练回归任务一样训练定位任务:

  • 神经网络输出4个值
  • 标准值也有四个(样本)
  • 计算L2损失(平方和损失)
  • 反向传播优化神经网络。

定位任务实践:

首先训练&下载一个分类模型(使用迁移学习的概念)

修改全链接层的结构:使N分类的最后一层输出改为输出4个数字。

使用数据集训练新的网络。

在测试时同时经过两个网络,实现分类&定位。

定位任务思考

回归层输出值修改:

不同的回归层,假设是C分类问题:

  • 分类网络输出C个数字
  • 定位网络输出4个数字,即训练不针对特定类别
  • 定位网络输出C*4个数字,即每个类对应一个框(损失计算有修改,但是老师没有说明)

回归层位置修改:

两种思路:

  • 卷积层之后直接加回归层
  • 全链接层之后再加回归层(去掉输出层后修改,和前面介绍类似)

定位任务拓展

多目标定位:定位一个对象和他的子对象(个人理解是因为一个特定类对象的子对象种类数目是确定的,可以使用简单的定位网络完成,也是定位的思考一的成果)

人体姿势判断

Google的一篇论文,其思想就是使用CNN得到人体各个关节的位置后,对人体的姿势进行判断。

定位任务idea:滑动窗口

技术思路:

  • 通过滑窗多次使用分类&多目标定位网络实现目标
  • 使用卷积层取代全连接层提升效率

滑窗实例:Overfeat

Overfeat网络,使用AlexNet的架构,添加一个定位网络后实现定位功能

经典滑窗定位小猫示意:

注意到有的框都画到滑窗外面去了,老师给出的解释是因为是回归,所以输出值理论可以是任何值,感觉虽然回归的确是这么个道理,但用在这里做解释始终不太信服。

论文示意图:

  • 滑窗位置+得分图
  • 每个滑窗给出的定位+得分图
  • 最终结果

效率提升

将全连接层替换为卷积层可以大大减少参数量,提升网络效率

替换原理

定位网络成果统计

时间: 2024-07-30 13:33:23

『cs231n』图像定位与检测的相关文章

『cs231n』图像定位与检测(下,待续)

图像检测原理 定义: 给出一张图片和几个类别,定位出图片中这些类所有的实例. 思路分析:回归vs分类 由于输出数目不定,所以不能简单的把检测任务像定位任务一样归化为回归任务(检测任务会导致回归层神经元数目是不确定的) 在机器学习中,分类和回归是解决所有问题的两种基本思路,所以我们尝试用分类的思想分析问题. 思路是将所有可能分类的区域送入网络 问题是图片数量太多 直观的解决思路是换个速度快的电脑... ... 实际上新电脑还是不够快... ... 那就只查看一些可能的区域(预处理) Region

『cs231n』计算机视觉基础

线性分类器损失函数明细: 『cs231n』线性分类器损失函数 最优化Optimiz部分代码: 1.差劲的方案,随机搜索 bestloss = float('inf') # 无穷大 for num in range(1000): W = np.random.randn(10, 3073) * 0.0001 loss = L(X_train, Y_train, W) if loss < bestloss: bestloss = loss bestW = W scores = bsetW.dot(Xt

『cs231n』Faster_RCNN(待续)

前言 研究了好一阵子深度学习在计算机视觉方面的实际应用意义不大的奇技淫巧,感觉基本对研究生生涯的工作没啥直接的借鉴意义,硬说收获的话倒是加深了对tensorflow的理解,是时候回归最初的兴趣点--物体检测了,实际上对cs231n的Faster RCNN讲解理解的不是很好,当然这和课上讲的比较简略也是有关系的,所以特地重新学习一下,参考文章链接在这,另: Faster RCNN github : https://github.com/rbgirshick/py-faster-rcnn Faste

『Caffe』图像检测程序(待续)

和图像分类不同,图像检测涉及更多的技术基础,本程序是基于传统的滑窗模式完成检测,当下已经有了最新的基于caffe的RCNN.Fast-RCNN.Faster-RCNN以及SSD框架 ,个中思路不同,不得叹惋前路漫漫.由于接触本部时走了很多弯路,所以给出几个关键词用于学习滑窗检测理论基础学习:overfeat:全卷积网络:图像金字塔:非极大值抑制,当然了,传统的卷积分类网络也要了解. 程序调用逻辑图如下: 库导入以及参数设置部分: 1 # coding=utf-8 2 import numpy a

『cs231n』作业3问题4选讲_图像梯度应用强化

[注],本节(上节也是)的model是一个已经训练完成的CNN分类网络. 随机数图片向前传播后对目标类优化,反向优化图片本体 def create_class_visualization(target_y, model, **kwargs): """ Perform optimization over the image to generate class visualizations. Inputs: - target_y: Integer in the range [0,

『cs231n』视频数据处理

视频信息 和我之前的臆想不同,视频数据不仅仅是一帧一帧的图片本身,还包含个帧之间的联系,也就是还有一个时序的信息维度,包含人的动作判断之类的任务都是要依赖动作的时序信息的 视频数据处理的两种基本方法 - 使用3D卷积网络引入时间维度:由于3D卷积网络每次的输入帧是有长度限定的,所以这种方法更倾向于关注局部(时域)信息的任务 - 使用RNN/LSTM网络系列处理时序信息:由于迭代网络的特性,它更擅长处理全局视频信息 发散:结合两种方法的新思路 上面的具体实现也未必需要3D卷积,毕竟递归网络自己已经

『cs231n』卷积神经网络的可视化与进一步理解

cs231n的第18课理解起来很吃力,听后又查了一些资料才算是勉强弄懂,所以这里贴一篇博文(根据自己理解有所修改)和原论文的翻译加深加深理解. 可视化理解卷积神经网络 原文地址 一.相关理论 本篇博文主要讲解2014年ECCV上的一篇经典文献:<Visualizing and Understanding Convolutional Networks>,可以说是CNN领域可视化理解的开山之作,这篇文献告诉我们CNN的每一层到底学习到了什么特征,然后作者通过可视化进行调整网络,提高了精度.最近两年

『TensorFlow』图像预处理_

部分代码单独测试: 这里实践了图像大小调整的代码,值得注意的是格式问题: 输入输出图像时一定要使用uint8编码, 但是数据处理过程中TF会自动把编码方式调整为float32,所以输入时没问题,输出时要手动转换回来!使用numpy.asarray(dtype)或者tf.image.convert_image_dtype(dtype)都行 都行 1 import numpy as np 2 import tensorflow as tf 3 import matplotlib.pyplot as

『cs231n』RNN之理解LSTM网络

概述 LSTM是RNN的增强版,1.RNN能完成的工作LSTM也都能胜任且有更好的效果:2.LSTM解决了RNN梯度消失或爆炸的问题,进而可以具有比RNN更为长时的记忆能力.LSTM网络比较复杂,而恰好找到一篇不错的介绍文章,和课程的讲述范围差不多,所以这里摘下来(自己截图记录好麻烦),另外找到一篇推了公式的LSTM介绍,这个cs231n的课程并没有涉及,我暂时也不做这方面的研究,不过感觉内容不错,链接记下来以备不时之需. 本篇原文链接 RNN以及LSTM的介绍和公式梳理 按照老师的说法,LST