20230509MTCNN2

news2024/12/26 9:18:27

卷积切分图片


  • 怎么切分图片?

    • 使用opencv,PIL切分图片有什么问题?

    • 使用 卷积来切分图片
      卷积的运算过程 类似于切图
      在这里插入图片描述


  • 卷积 对输入图片的尺寸 有没有 的要求?

    就是 输入的图片尺寸 必须大于 卷积核的大小

test1.py

import torch
from torch import nn

"""
卷积对输入的图片有没有尺寸的要求?
就是 输入的图片尺寸 必须大于 卷积核的大小
"""

class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.layer = nn.Sequential(
            nn.Conv2d(3, 12, 3),
            nn.ReLU(),
            nn.Conv2d(12, 32, 3),
            nn.ReLU(),
            nn.Conv2d(32, 56, 3),
            nn.ReLU(),
            nn.Conv2d(56, 128, 3),
            nn.ReLU(),
            nn.Conv2d(128, 256, 3)
    )

    def forward(self, x):
        return self.layer(x)

if __name__ == '__main__':
    net = Net()
    x1 = torch.randn(1, 3, 32, 32)
    y1 = net(x1)
    print(y1.shape)

    x2 = torch.randn(1, 3, 28, 28)
    y2 = net(x2)
    print(y2.shape)

    x3 = torch.randn(1, 3, 5, 5)
    y3 = net(x3)
    print(y2.shape)

在这里插入图片描述


  • 全连接 对输入图片的尺寸 有没有 要求?

    • 全连接定死了,输入图片的尺寸 就定死了;所以 全连接 对图片输入的尺寸 有要求

  • 为什么 卷积的输出通道 需要我们来 指定?

    • 输出通道 决定 卷积核的个数
    • 卷积核的个数 代表 特征个数
    • 我需要多少个特征,是由我们自己定义
    • 不是越多越好(多了,会出现过拟合)

  • 图片从 32 * 32 到 22 * 22,是等价的吗?

    • 缩小图片的过程中,它是在丢失信息。所以不等价

  • 虽然 图片变小 了,但是 通道数 增加 了
  • 卷积运算 把图片的特征 保留到 通道上面,有 多少个通道,就有 多少个特征
    是通过 通道区分特征,而是通过 图片的h.w 来区分特征
    在这里插入图片描述

  • 输入的图片 和 特征图 的信息 有没有 区别?

test2.py

import torch
from torch import nn

"""
输入的图片 和 特征图 的 信息  没有区别
前提是 卷积核的个数 不能太少,一个卷积核 只能 提取 一种特征 (卷积核 太少,可能会 丢失信息)
"""

x = torch.randn(1,1,28,28)
layer = nn.Conv2d(1,784,28)
y = layer(x)
print(y.shape)

784个通道 1*1的特征图

在这里插入图片描述
在这里插入图片描述

  • 输入的图片特征图信息 区别

    • 前提是 卷积核的个数 不能太少一个卷积核 只能 提取 一种特征 (卷积核 太少,可能会 丢失信息)
      在这里插入图片描述

在这里插入图片描述

在这里插入图片描述0

  • 图片切分:

    • 图片 分成 一个一个区域,按一定的 步长 进行分割,把每一个区域 单目标检测模型 中,这就相当于 卷积运算过程切分格子大小 就是 卷积核的大小,用卷积代替 切分的过程。
    • 原图 输入到模型中 去检测转变为 把 卷积运算后的特征图 输入到模型 去检测
    • 前提是 原图特征图信息量对等
    • 如果 信息量 要对等的话,需要 增加卷积核的个数
    • 图片上面信息 可以放到 特征图通道 上面

全卷积结构 - 1


在这里插入图片描述

  • 能否把两个卷积合并成一个卷积?

    • 卷积分解

test3.py

import torch
import torch.nn as nn

"""
能否把两个卷积合并成一个卷积?
卷积分解
"""
conv = nn.Conv2d(1,1,5)
class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.layer = nn.Sequential(
            nn.Conv2d(1,1,3),
            nn.ReLU(),
            nn.Conv2d(1,1,3)
        )

    def forward(self,x):
        return self.layer(x)

if __name__== "__main__":
    x = torch.randn(1,1,15,15)
    net = Net()
    out1 = conv(x)
    out2 = net(x)
    print(out1.shape)
    print(out2.shape)

在这里插入图片描述
1个5 * 5 的卷积,等价于两个3 * 3 的卷积
一个模型 来代替 一层卷积 (如:模型里有两个3 * 3 的卷积,一层卷积是 1个5 * 5 的卷积)

  • 我们可以用一个卷积多个卷积
  • 两个卷积 一个卷积,这个卷积 即做 图片切分 又做 特征提取
  • 即做 图片切分,又做 单目标检测
  • 一个模型 来代替 一层卷积


  • 如何把 模型 设计成 相当于 一个卷积层

    这个卷积 即做 图片切分,又做 单目标检测

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

  • 可以用 一个模型替这 一层卷积
  • 如何把 模型 设计相当于 一个12 * 12 的卷积
  • 把一个 12 * 12 的格子,小成 1 * 1 的格子

  • 为什么 卷积的后面 要有 一个全连接?

在这里插入图片描述
- 因为要把 所有的通道 合成 一个通道特征融合,使用 全连结 来做 特征融合


  • 能不能用 卷积 来做 特征融合?

test4.py

import torch
import torch.nn as nn

"""
能不能用 卷积 来做 特征融合?
"""
x = torch.randn(1,32,4,4)
x1 = x.reshape(-1,32*4*4)
net1 = nn.Linear(32*4*4,5) #
y1 = net1(x1)
print(y1.shape)
#print(y1)

print("---------------")
net2 = nn.Conv2d(32,5,4) #
y2 = net2(x)
print(y2.shape)
#print(y2)

在这里插入图片描述
在这里插入图片描述

  • 我们可以 把特征 通道 上面,让模型 通过通道 直接输出
    如果 模型全连结层,那么模型的 输入定死
    如果 模型全卷积结构,那么模型的 输入不会定死

  • 全卷积结构,理论上可以 输入 任意大小图片
    前提是 输入的图片尺寸 大于 卷积核大小

在这里插入图片描述

总结

我们用一个 单目标检测网络 实现 输入任意大小 的图片,对图片按照 固定的大小
分,切分完了之后,传入模型里面,模型输出 5个通道,这个 5个通道 分别代表
cls,x1,y1,x2,y2,用 一个模型 就把这些 所有的事 做完

在这里插入图片描述


全卷积结构 - 2


在这里插入图片描述

在这里插入图片描述

  • 我们做 多目标检测 通过 单目标检测网络 来实现的,但是,我们 有使用 opencv ,PIL切图,使用 卷积 来达到 切图 的效果,
    切出来图片 输入模型 里面,然后 输出结果,做 统计

全卷积结构 实现输入 任意尺寸 的图片

  • 我们提出了 全卷积结构输入 任意尺寸 的图片,输出H,W任意

为什么输入 任意大小 的图片?

  • 因为人脸个数 和 人脸的 尺寸不固定
  • 多少个 人脸,可以通过 H * W 的格子 统计 出来
  • 人脸的 个数,就放在了 H和W维度上面

整个过程的 难点 在于 全卷积设计

  • 将图片上面 12 * 12 的区域 转化 为 5 * 1 * 1 的格子
  • 转化 的过程 就在做 特征提取
  • 如果有 多个人脸输入的尺寸 制,保证了 输出

全卷积结构 实现 多目标检测

  • 输出结果 就是 切分结果
  • 我们就使用 全卷积结构实现多目标检测

在使用 MTCNN 检测人脸 时, 三个网络 串行 使用

  • p网络 是一个 全卷积结构,相当于一个 12 * 12卷积核
    海量数据 进行 筛选
    大概 判断 哪些地方 有人脸,哪些地方 没人脸 (宁选错,勿放过 )
    p网络 侧重 在于 速度

  • 多目标 检测任务目标个数不固定
    输出 肯定是 不固定 的,那么 输入不固定

  • 为什么 p网络 是一个 全卷积结构 ?

    因为 目标的个数 我们 不知道输出不固定

MTCNN 可以 接受 任意尺寸 的 图片





MTCNN网络


在这里插入图片描述

P R O 三个网络都 可以 看成 一个 单目标检测网络,它们 做的事情 都是一样的

为什么 三个网络 输入的尺寸 越来越大?

  • 因为 我们希望 R和O网络 的 精度P网络 高
    那么要 网络 更深 更大,还要 输入信息量 更多

为什么R O 网络最后面是一个 全连结? 为什么不把三个网络都设计成 全卷积结构?

能不能把全连结换成卷积?

可以

为什么没用?

  • 全连结 意味着 R和O输入 定死

  • 因为R和O输入 之前, 人脸的个数 已经确定
    传给 R和O区域 只有 两种结果,要么有 一个人脸,要么 没有人脸,所以 输出定死 了。
    那么就以用 全连结

R和O 完全可以看 一个单目标检测网络



分析:
输入给R网络的 就是P网络 框出来的部分

P网络 检测后 效果图
在这里插入图片描述
在这里插入图片描述

R网络就是 一个单目标侦测,侦测 这个区域 有没有人脸


P R O输入的尺寸分布是 12 24 48

网络的输入 都是 正方形

因为MTCNN是 专门为人脸 而生的,专门 做人脸检测的。人脸刚好接近于 一个正方形 ,所以这三个网络 输入都是 正方形。所以 用MTCNN 一般都是 做人脸检测的

在这里插入图片描述

经过P网络后 输出结果 :
在这里插入图片描述

经过P网络 经过R网络后 输出结果 :
在这里插入图片描述
经过P网络 经过R网络后 经过O网络 输出结果 :
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot + vue3实现视频播放Demo

文章目录 学习链接前言ffmpeg安装ffmpeg配置环境变量分割视频文件 后台配置WebConfig 前端代码video.js示例安装依赖视频播放组件效果 Vue3-video-play示例安装依赖main.js中使用视频播放组件效果 学习链接 ffmpeg官网 长时长视频java存储及vue播放解决方法 【 攻城略地 】vue…

BitKeep逆势崛起:千万用户的信任,终点还未到来

在全球范围内,BitKeep钱包如今已拥有超过千万忠实用户。 当我得知这一令人震撼的数字时,既感到惊讶,同时也觉得这是意料之中的事情。几年来关注BitKeep的发展历程,我深切地感受到了这家公司的蓬勃壮大。回顾2018年他们发布的第一个…

linux0.12-8-9-fork.c

[362页] 1、 verify_area函数给其他文件使用的,跳转开始位置; 2、 copy_mem函数复制内存页表; 3、 copy_process函数是fork.c主要函数; 4、find_empty_process函数就2个作用:在一个范围内找last_pid和找空槽&#xff1…

如何利用互联网优势进行茶叶销售?

茶叶是中国传统文化的重要组成部分,具有丰富的文化内涵和高度的营养价值。如今,随着互联网的普及,越来越多的茶叶销售商(文章编辑ycy6221)开始利用互联网的优势来开拓市场。本文将介绍如何利用互联网优势进行茶叶销售。…

SecureCRT的下载安装

亲测成功了,按照下面的步骤完成即可! 下载安工具包包地址连接:网盘地址点击即可 提取码:0lp7 1、下载SecureCRT 2、从百度网盘下载SecureCRT,页面如下 3、安装SecureCRT 4、激活SecureCRT 第一步:打开安装…

自学Java怎么找工作?好程序员学员大厂面试经验分享!

简历要详细: 简历中的项目用到的技术点和个人负责的模块尽量写详细一些。其次,根据自己项目中用到的熟悉的技术点,在个人技能介绍模块去突出,面试官基本会根据你简历上写的去提问的,这样我们回答起来就会更加得心应手。…

【多线程初阶四】单例模式阻塞队列

目录 🌟一、单例模式 🌈1、饿汉模式 🌈2、懒汉模式(重点!) 🌟二、工厂模式 🌟三、阻塞式队列 🌈1、阻塞队列是什么? 🌈2、…

如何注册appuploader账号​

如何注册appuploader账号​ 我们上一篇讲到appuploader的下载安装,要想使用此软件呢,需要注册账号才能使用,今​ 天我们来讲下如何注册appuploader账号来使用软件。​ 1.Apple官网注册Apple ID​ 首先我们点击首页左侧菜单栏中的“常见网…

为什么企业选择局域网即时通讯软件?局域网即时通讯软件哪家好?

在当今互联网普及的时代,企业内部的沟通对企业管理有着非常重要的意义,即时通讯软件已成为企业工作中广泛采用的沟通工具。 然而,随着企业内部敏感信息通过互联网泄露的频繁发生,例如在工作期间,企业员工自发地频繁使…

盘点四款免费在线采购管理系统

今天来盘点五款免费在线采购管理系统。中小型企业在选择采购管理系统时成本是需要考虑的重要因素之一,因此免费在线的采购管理系统是最合适的第一步选择,本文将为您盘点免费在线采购管理系统:1.简道云;2.甄云;3.携客云…

【正点原子STM32连载】 第九章 STM32启动过程分析 摘自【正点原子】STM32F103 战舰开发指南V1.2

1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第九章…

Redis可持久化详解1

目录 Redis可持久化 以下是RDB持久化的代码示例: 面试常问 1什么是Redis的持久化机制? 2Redis支持哪些持久化机制?它们有什么区别? 3Redis的RDB持久化机制的原理是什么? 4Redis的AOF持久化机制的原理是什么&…

《三》包管理工具 npm

包管理工具 npm: npm:Node Package Manager,Node 包管理器,目前已经不仅仅作为 Node 的包管理工具,也作为前端的包管理工具来管理包。 npm 管理的包是存放在一个名为 registry 的仓库中的,发布一个包时是…

分享推荐32位MCU低成本替换8/16位升级完美之选——MM32G0001

灵动微在嵌入式闪存技术上做了优化,采用更稳定和经大规模量产验证的12寸晶圆工艺平台,对产品的功能、性能和成本进行了全方位的打磨,在保持MM32品质目标的前提下,推出了这款极具性价比、低成本的MM32G0001系列MCU产品。 不同于市…

Nuxt学习笔记

创建项目 npx create-nuxt-app projectName SSR 渲染流程 客户端发送 URL 请求到服务端,服务端读取对应的 URL 的模板信息,在服务端做出 HTML 和数据的渲染,渲染完成之后返回整个 HTML 结构给客户端。所以用户在浏览首屏的时候速度会比较快…

Scala学习(四)

文章目录 1.闭包2.函数式编程递归和尾递归2.1递归2.2 尾递归 3.控制抽象3.1 值调用3.2 名调用 4.惰性函数 1.闭包 如果一个函数,访问到了它的外部(局部)变量的值,那么这个函数和它所处的环境称之为闭包 //闭包练习def sumX(x:Int){def sumY(y:Int):Int{…

闲谈【Stable-Diffusion WEBUI】的插件:模型工具箱:省空间利器

文章目录 (零)前言(一)模型工具箱(Model Toolbox)(1.1)基本使用界面(1.2)高阶使用界面(1.3)自动修剪模型 (零)…

MyBatis基础介绍

目录 MyBatis是什么 怎么学MyBatis 第一个MyBatis查询 MyBatis的定位 创建数据库和表 搭建MyBatis环境 添加MyBatis框架支持 设置MyBatis的配置信息 设置数据库连接的相关信息 配置MyBatis xml的保存路径和xml命名规范 MyBatis模式开发 创建一个实体类 创建MyBatis…

AI换脸系统开发源码交付

AI换脸系统软件的发展趋势包括以下几个方面: 定制化和智能化:随着用户需求的不断增加,AI换脸系统将向更加定制化和智能化的方向发展,通过数据分析和用户画像等手段,为用户提供更加个性化的服务。 多模态应用&a…

通达信头肩底形态选股公式,突破波峰发出信号

本文将为大家介绍头肩底形态选股公式的编写方法,相较于前两篇文章介绍的N字形态和W底形态,头肩底形态更为复杂,包含3个波谷和2个波峰。 头肩底是一种反转形态,在下降趋势之后形成,其完成标志着趋势的改变。该形态包含三…