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.shapecenter_h = h // 2center_w = w // 2region_h = int(h // (r**0.5))region_w = int(w // (r**0.5))left_h = center_h - region_h // 2left_w = center_w - region_w // 2right_h = left_h + region_hright_w = left_w + region_wanchor_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_Weightsclass VGG(nn.Module):def __init__(self):super(VGG, self).__init__()vgg_16 = vgg16(weights=VGG16_Weights.DEFAULT)self.features = vgg16(weights=VGG16_Weights.DEFAULT).featurestemp = 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] = tempdef forward(self, x):return self.features(x)if __name__ == '__main__':model = VGG()B = 2a = 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 Fclass RankingLoss(nn.Module):def __init__(self, k, eps=0, reduction='sum'):super(RankingLoss, self).__init__()self.k = kself.eps = epsself.reduction = reductiondef forward(self, x):B = x.size(0)assert B % self.k == 0loss = 0.cnt = 0for start in range(0, B, self.k):end = start + self.kfor i in range(start, end):for j in range(i + 1, end):loss += F.relu(x[j] - x[i] + self.eps)cnt += 1if self.reduction == 'mean':return loss / cntreturn loss

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS安装Flume

CentOS安装Flume 一、简介二、安装1、下载2、解压3、创建配置文件4、启动flume agent5、验证 一、简介 Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexi…

使用 Swift 代码优化项目编译速度

引言 软件的性能是评价一个软件质量的重要指标,尤其在今天这个时代,性能已成为大型项目不可或缺的考虑因素之一。对于用户量极大的软件,如网银系统、在线购物商城等,更是必须保证其高效稳定的性能。在这种背景下,优化…

K8S--安装Nginx

原文网址:K8S--安装Nginx-CSDN博客 简介 本文介绍K8S安装Nginx的方法。 1.创建Nginx目录及配置文件 mkdir -p /work/devops/k8s/app/nginx/{config,html} 在config目录下创建nginx.conf配置文件,内容如下: # events必须要有 events {wo…

C++ 设计模式之备忘录模式

【声明】本题目来源于卡码网(题目页面 (kamacoder.com)) 【提示:如果不想看文字介绍,可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 -- 什么是备忘录模式 (第17种模式) 备忘录模式(Meme…

【第七在线】利用大数据与AI,智能商品计划的未来已来

随着科技的快速发展,大数据和人工智能(AI)已经成为各行各业变革的重要驱动力。在服装行业,这两大技术的结合正在深刻改变着传统的商品计划方式,引领着智能商品计划的未来。 一、大数据与AI在智能商品计划中的角色 大数据为智能商品计划提供了…

leetCode-42.接雨水

📑前言 本文主要是【算法】——算法模拟的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句&#xff…

AI嵌入式K210项目(15)-安全散列算法加速器

文章目录 前言一、什么是SHA256?实验原理 二、K210的安全散列算法加速器三、实验过程总结 前言 K210内置了丰富的加速器,包括神经网络处理器 (KPU),AES(高级加密加速器),APU 麦克风阵列语音数据加速计算处理器,现场可…

Docker技巧汇总

Docker技巧汇总 前言使用流程安装配置镜像管理创建并运行容器使用容器/常用命令导出和导入查看元数据挂载数据卷端口映射/转发VS Code连接Docker 前言 Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xf…

【Unity】URP报错Object reference not set to an instance of an object

使用URP之后,Unity报错:显示不正常 NullReferenceException: Object reference not set to an instance of an object UnityEngine.Rendering.Universal.UniversalAdditionalCameraData.get_cameraStack () (at Library/PackageCache/com.unity.render-p…

项目上线存在的缓存问题以及存在的debugger和console.log等问题

下载uglifyjs-webpack-plugin插件 在vue.config文件中进行配置 publicPath: process.env.NODE_ENV production ? ./ : /,outputDir: n-sim-ipc-manage-build,productionSourceMap: false,configureWebpack: config > {//打包文件增加hashconfig.output.filename js/[nam…

LeetCode、2300. 咒语和药水的成功对数【中等,排序+二分】

文章目录 前言LeetCode、2300. 咒语和药水的成功对数【中等,排序二分】题目及类型思路及代码 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域…

VB6.0 从内存地址获取String内容

VB6.0开发,调用了DLL中的方法去获取两个字符串,但实际返回字符串的地址。 怎样从地址得到完整的字符串内容呢?方法如下,核心是oleaut32.dll中的SysAllocStringByteLen方法: Private Declare Function SysAllocString…