Leveraging Unlabeled Data for Crowd Counting by Learning to Rank

无标签人群技术,作者引入了一种排名。
利用的是一个图的人群数量一定小于等于包含这个图的图

生成排名数据集

作者提出了一种自监督任务,利用的是一个图的人群数量一定小于等于包含这个图的图
在这里插入图片描述
流程:
1.以图像中心为中心,划分一个 1 / r 1/r 1/r图像大小的矩形(但是这里没写是面积的还是长宽的)
在这个矩形中,随机选择一个点当作锚点
2.以锚点为中心,找到一个不超过图像边界的正方形
3.重复 k − 1 k-1 k1次,每次生成一个正方形,大小是上一个正方形的 1 / s 1/s 1/s(也没说是面积还是长宽)
目测代码是这样写的

def generate_ranking(img, k, s, r):
    h, w, _ = img.shape
    center_h = h // 2
    center_w = w // 2
    region_h = int(h // (r**0.5))
    region_w = int(w // (r**0.5))
    left_h = center_h - region_h // 2
    left_w = center_w - region_w // 2
    right_h = left_h + region_h
    right_w = left_w + region_w

    anchor_h = np.random.randint(left_h, right_h)
    anchor_w = np.random.randint(left_w, right_w)
    radius = min(anchor_h, h - anchor_h, anchor_w, w - anchor_w)

    res = []
    for _ in range(k):
        res.append(img[anchor_h - int(radius):anchor_h + int(radius),
                   anchor_w - int(radius):anchor_w + int(radius)])
        radius *= float(s)

    return res

为了收集一个大的数据集,作者用了两种方法
Keyword query:google里搜索Crowded, Demonstration, Train station, Mall, Studio,
Beach

Query-by-example image retrieval:利用UCF CC 50,ShanghaiTech Part A, ShanghaiTech Part B,在google图搜图,每一张图选10张
在这里插入图片描述

Learning from ranked image sets

Crowd density estimation network

用的vgg16,去掉全连接,最后一个max pooling换成 3 ∗ 3 3*3 33的卷积,把通道从512变为1,生成density map
模型就是图中的橙色部分
在这里插入图片描述

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import torch
from torch import nn
from torchvision.models import vgg16, VGG16_Weights

class VGG(nn.Module):
    def __init__(self):
        super(VGG, self).__init__()
        vgg_16 = vgg16(weights=VGG16_Weights.DEFAULT)
        self.features = vgg16(weights=VGG16_Weights.DEFAULT).features
        temp = nn.Conv2d(512, 1, 3, 1, 1)
        nn.init.normal_(temp.weight, std=0.01)
        if temp.bias is not None:
            nn.init.constant_(temp.bias, 0)
        self.features[-1] = temp

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


if __name__ == '__main__':
    model = VGG()
    B = 2
    a = torch.rand((B, 3, 224, 224))
    b = model(a)
    c = b.view(B, 1, -1)
    M = c.size(2)
    d = torch.mean(c, dim=-1)
    print(M)
    print(b.shape) # torch.Size([2, 1, 14, 14])
    print(c.shape) # torch.Size([2, 1, 196])
    print(d.shape) # torch.Size([2, 1])

标签的density map就是每一个点分别做一个标准差为1,大小为15的高斯核,损失用的MSE
为了进一步提升效果,我们随机采样一个正方形(56-448像素)

Crowd ranking network

这里针对的是没有标注的部分
简单来说就是对density map做average pooling,得到 c ^ i \hat{c}_i c^i, 人群数量就是 C ^ ( I i ) = M × c ^ ( I i ) \hat{C}\left(I_i\right) = M \times \hat{c}\left(I_i\right) C^(Ii)=M×c^(Ii)

损失是一个排名hinge loss
L r = max ⁡ ( 0 , c ^ ( I 2 ) − c ^ ( I 1 ) + ε ) L_r = \max \left(0, \hat{c}\left(I_2\right) - \hat{c}\left(I_1\right) + \varepsilon\right) Lr=max(0,c^(I2)c^(I1)+ε)
这里的 ε = 0 \varepsilon=0 ε=0
这个loss就是要大的图片比小的图片排名靠前(人数更多)

损失只针对比他小

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import torch
from torch import nn
import torch.nn.functional as F

class RankingLoss(nn.Module):
    def __init__(self, k, eps=0, reduction='sum'):
        super(RankingLoss, self).__init__()
        self.k = k
        self.eps = eps
        self.reduction = reduction

    def forward(self, x):
        B = x.size(0)
        assert B % self.k == 0
        loss = 0.
        cnt = 0
        for start in range(0, B, self.k):
            end = start + self.k
            for i in range(start, end):
                for j in range(i + 1, end):
                    loss += F.relu(x[j] - x[i] + self.eps)
                cnt += 1
        if self.reduction == 'mean':
            return loss / cnt
        return loss

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

All the stories begin at installation

Before installation, there are some key points about Conan: “Conan is a dependency and package manager for C and C languages.”“With full binary management, Conan can create and reuse any number of different binaries (for different configurations like a…

MATLAB Fundamentals>>>Smoothing Data with Moving Average

MATLAB Fundamentals>Common Data Analysis Techniques>Smoothing Data> (2/5) Smoothing Data with Moving Average 例1: Smoothing method:Moving mean Moving window:Centered 2 代码2: % Smooth input data ySm smoothdata(y,"mov…

系统引导器GRUB

全称为GNU GRUB,来自GNU计划的多操作系统引导器。 作用: 查看引导分区内容 ls /boot ls /boot/grub2/ 查看GRUB2的配置文件 cat /boot/grub2/grub.cfg 可以看到/boot中保存的文件主要是linux内核、内存映像文件等。 注意到是子用户,但在…

Elasticsearch+Kibana 学习记录

文章目录 安装Elasticsearch 安装Kibana 安装 Rest风格API操作索引基本概念示例创建索引查看索引删除索引映射配置(不配置好像也行、智能判断)新增数据随机生成ID自定义ID 修改数据删除数据 查询基本查询查询所有(match_all)匹配查…

axios的基本使用

在项目根目录下创建js目录&#xff0c;目录中添加axios.min.js文件 准备页面&#xff1a;testAxios.html: 实现一个简单的GET请求 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title>…

Java数据结构之排序(头歌平台,详细注释)

目录 第1关&#xff1a;选择排序 任务描述 相关知识 代码&#xff1a; 第2关&#xff1a;插入排序 任务描述 相关知识 插入排序 代码&#xff1a; 第3关&#xff1a;归并排序 任务描述 相关知识 归并排序 原理 代码&#xff1a; 第4关&#xff1a;快速排序 任务描述 相关…

Prometheus配置Grafana监控大屏(Docker)

拉取镜像 docker pull grafana/grafana挂载目录 mkdir /data/prometheus/grafana -p chmod 777 /data/prometheus/grafana临时启动 docker run -d -p 3000:3000 --name grafana grafana/grafana从容器拷贝配置文件至对应目录 docker exec -it grafana cat /etc/grafana/gra…

[C++]:12:模拟实现list

[C]:12:模拟实现list 一.看一看SGI的stl_list的源码&#xff1a;1.基础结构构造函数1.节点结构&#xff1a;2.节点构造函数&#xff1a;3.链表结构&#xff1a;4.链表的构造函数&#xff1a; 2.析构1.节点析构&#xff1a;2.链表的析构&#xff1a; 3.迭代器 二.模拟实现list1.…

PyTorch深度学习实战(31)——生成对抗网络(Generative Adversarial Network, GAN)

PyTorch深度学习实战&#xff08;31&#xff09;——生成对抗网络 0. 前言1. GAN2. GAN 模型分析3. 利用 GAN 模型生成手写数字小结系列链接 0. 前言 生成对抗网络 (Generative Adversarial Networks, GAN) 是一种由两个相互竞争的神经网络组成的深度学习模型&#xff0c;它由…

EOCR电机保护器带煤电厂的具体应用

EOCR系列电动机智能保护器在煤电厂中有广泛的应用。这些保护器具有齐全的保护功能、直观的测量参数、快速的反应灵敏度、可靠的行动以及与上位机通讯构成远程监控的能力&#xff0c;使其成为理想的低压电动机保护及远程监控产品。 在煤电厂中&#xff0c;电动机保护器需要具备过…

SpringCloud Aliba-Sentinel【上篇】-从入门到学废【4】

&#x1f3b5;诗词分享&#x1f3b5; 大江东去&#xff0c;浪淘尽&#xff0c;千古风流人物。 ——苏轼《念奴娇赤壁怀古》 目录 &#x1f37f;1.Sentinel是什么 &#x1f9c2;2.特点 &#x1f9c8;3.下载 &#x1f32d;4.sentinel启动 &#x1f953;5.实例演示 1.Senti…

IOT pwn

已经过了填坑的黄金时期 环境搭建 交叉编译工具链 很多开源项目需要交叉编译到特定架构上&#xff0c;因此需要安装对应的交叉编译工具链。 sudo apt install gcc-arm-linux-gnueabi g-arm-linux-gnueabi -y sudo apt install gcc-aarch64-linux-gnu g-aarch64-linux-gnu -…

RK3568笔记十:Zlmediakit交叉编译

若该文为原创文章&#xff0c;转载请注明原文出处。 编译Zlmediakit的主要目的是想实现在RK3568拉取多路RTPS流&#xff0c;并通过MPP硬解码&#xff0c;DRM显示出来。为了实现拉取多路流选择了Zlmediakit,使用FFMEPG也可以&#xff0c;在RV1126上已经验证了可行性。 一、环境…

对MODNet 主干网络 MobileNetV2的剪枝探索

目录 1 引言 1.1 MODNet 原理 1.2 MODNet 模型分析 2 MobileNetV2 剪枝 2.1 剪枝过程 2.2 剪枝结果 2.2.1 网络结构 2.2.2 推理时延 2.3 实验结论 3 模型嵌入 3.1 模型保存与加载 法一&#xff1a;保存整个模型 法二&#xff1a;仅保存模型的参数 小试牛刀 小结…

服务端实现微信小游戏登录

1 微信小程序用户登录及其流程 小程序可以通过微信官方提供的登录能力,便能方便的获取微信提供的用户身份标识,达到建立用户体系的作用。 官方文档提供了登录流程时序图,如下: 从上述的登录流程时序图中我们发现,这里总共涉及到三个概念。 第一个是小程序,小程序即我们…

C#,入门教程(30)——扎好程序的笼子,错误处理 try catch

上一篇&#xff1a; C#&#xff0c;入门教程(29)——修饰词静态&#xff08;static&#xff09;的用法详解https://blog.csdn.net/beijinghorn/article/details/124683349 程序员语录&#xff1a;凡程序必有错&#xff0c;凡有错未必改&#xff01; 程序出错的原因千千万&…

Rockchip linux USB 驱动开发

Linux USB 驱动架构 Linux USB 协议栈是一个分层的架构&#xff0c;如下图 5-1 所示&#xff0c;左边是 USB Device 驱动&#xff0c;右边是 USB Host 驱动&#xff0c;最底层是 Rockchip 系列芯片不同 USB 控制器和 PHY 的驱动。 Linux USB 驱动架构 USB PHY 驱动开发 USB 2…

LeetCode 77. 组合

77. 组合 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2&#xff1a; 输入&#xff1a;…

Kafka(八)使用Kafka构建数据管道

目录 1 使用场景2 构建数据管道时需要考虑的问题2.1 及时性2.2 可靠性高可用可靠性数据传递 2.3 高吞吐量2.4 数据格式2.5 转换ETLELT 2.6 安全性2.7 故障处理2.8 耦合性和灵活性临时数据管道元数据丢失末端处理 3 使用Connect API3.1 Connect的数据处理流程sourcesinkconnecto…

csrf漏洞之DedeCMS靶场漏洞(超详细)

1.Csrf漏洞&#xff1a; 第一步&#xff0c;查找插入点&#xff0c;我选择了网站栏目管理的先秦两汉作为插入点 第二步修改栏目名称 第三步用burp拦截包 第四步生成php脚本代码 第五步点击submit 第六步提交显示修改成功 第二个csrf 步骤与上述类似 红色边框里面的数字会随着…