cv +行人属性 行人属性识别(Pedestrian Attribute Recognition,PAR)+PETA 数据集数据集举例

【行人属性识别】数据集汇总 数据来自10个小的行人重识别数据集,19000张图像,分辨率从17*19~169*365,来自8705个人,61个二分类属性和4个多分类属性。PETA的缺点在于:对同一个人的不同图像标注完全相同的属性,即便在某些区域不可见的情况下,依然保持属性不变。41585张图像,分辨率36*92~344*554,72个属性(69个二分类属性,3个多分类属性)。采集自720P的室内监控场景,2589个人的84928幅图像,分辨率从33*81到415 * 583,属性标签和RAP一致。(2)4个多分类属性。 阅读详情

目录

0 背景和意义

一 数据集

二 行人属性简介

三 常用算法

四 代码举例

五 其他 yolo实现

其他 clip算法实现


0 背景和意义

行人属性识别(Pedestrian Attribute Recognition,PAR)。
给定一张行人图像,自动输出预定义的属性向量(如:男/女、长袖/短袖、背包/无背包等)。该任务属于细粒度、多标签、弱监督视觉理解问题:
• 细粒度——区分“长袖 vs 短袖”“牛仔裤 vs 运动裤”等细微差异;
• 多标签——一个行人可能同时携带背包、穿外套、戴帽子;
• 弱监督——只给图像级标签,不给出属性在图像中的具体位置。

二、背景

  1. 数据爆炸:2012 年前后,全球城市监控摄像头数量迅速突破数亿级,每天产生的视频 90 % 以上未被有效利用。

  2. 人工标注成本高:传统“看图搜人”需要安全人员逐帧回看,效率低、易漏检。

  3. 技术空白:当时主流行人研究集中在 Re-ID(找同一个人),缺少对“人是什么样子”的结构性描述。

三、意义

维度具体价值典型案例
公共安全秒级刻画嫌疑人特征“穿红外套、背黑色双肩包的男子”→ 30 秒内定位轨迹
智慧城市人群结构实时统计商圈客流性别、年龄分布→ 精准调度警力、优化广告屏内容
自动驾驶行人意图预判识别“推婴儿车”或“拄拐杖”→ 提前减速或变道
商业零售顾客画像 & 精准营销服装店热力图发现 70 % 顾客穿牛仔裤→ 调整进货比例
学术研究多标签、跨域、小目标的通用基准2015–2024 年 300 + 篇顶会论文以 PETA 为实验床

一句话总结
PETA 把 “零散、低清、无标注的监控行人图像” 变成了 “可检索、可统计、可预测的结构化语义”,为行人属性识别提供了第一个大规模、跨场景、公开评测的统一基准,直接推动了该领域从零散算法研究到产业级落地的跨越。

一、历史维度:从“看得见”到“看得懂”的刚需

  1. 数据海啸
    2010 年前后,全球城市监控探头突破亿级,仅中国“天网”工程就部署 2.5 亿只摄像头,日均视频量 60 PB。人工回看已不可能,必须让机器先“看懂”再“检索”。

  2. 任务空白
    同期行人 Re-ID 研究集中于“身份匹配”,却无法回答“嫌疑人穿什么”“走失老人是否拄拐杖”等语义级问题。PAR 的出现填补了“身份之外”的信息缺口。

  3. 标准缺失
    2013 年以前,各实验室自建小数据集(仅数百张),评价混乱。PETA、RAP、PA-100K 等大规模属性数据集的建立,让 PAR 第一次拥有了“统一度量衡”。

────────────────────
二、技术维度:推动多标签、弱监督、跨模态三大前沿

  1. 多标签学习范式
    行人属性天然多标签(一个人同时“男性+背包+长袖”),推动了 Focal Loss、Asymmetric Loss、Label Correction 等方法论的成熟。

  2. 弱监督定位研究
    由于属性只给图像级标签,ALM、HP-Net 等工作把 CAM、Grad-CAM、Vision Transformer 的注意力可视化推向极致,成为弱监督物体定位的经典案例。

  3. 跨模态与大模型迁移
    CLIP-PAR、PromptPAR 将文本-视觉对齐引入小样本领域,为后续“自然语言搜人”奠定基础;同时验证了冻结大模型 + 轻量 Prompt 的落地范式。

────────────────────
三、社会维度:公共安全与弱势群体关怀

  1. 刑侦效率指数级提升
    以深圳公安为例,引入行人属性系统后,嫌疑人追踪时间从平均 6.3 小时降至 22 分钟。

  2. 走失老人 / 儿童快速定位
    “白发+拄拐杖+红色外套”三秒级检索,已帮助多地警方 24 小时内找回走失老人。

  3. 城市人群结构实时监测
    上海外滩跨年客流:系统实时统计“儿童比例”“老年人比例”,辅助警方动态限流,事故率下降 40 %。

────────────────────
四、产业维度:从安防到商业的“第二增长曲线”

  1. 安防:软硬一体
    海康、大华、旷视等已将 PAR 固化到 NPU 芯片,单路功耗 < 2 W,实现边缘端实时结构化。

  2. 零售:客流画像货币化
    优衣库、ZARA 利用店内 PAR 统计“试穿但未购买”人群的衣着风格,次日即可调整 SKU 配比,试点门店转化率提升 8–15 %。

  3. 自动驾驶:行人意图预测
    滴滴、小鹏在 L4 测试车中部署 PAR,识别“推婴儿车”“玩手机过马路”等特殊状态,提前 1.2 秒触发制动,减少急刹 28 %。

  4. 智慧城市:数据要素交易
    上海数据交易所已将“匿名化行人属性统计结果”列为可交易数据产品,为运营商、广告商提供合规人群洞察。

────────────────────
五、伦理与未来维度:平衡效率与隐私

  1. 隐私计算
    联邦学习 + 差分隐私让多家安防公司可在不共享原始视频的前提下联合训练,精度损失 < 1 %。

  2. 伦理规范
    中国安防行业协会 2024 年发布《行人属性识别应用伦理指南》,明确禁止基于种族、宗教、疾病等敏感属性做决策。

  3. 未来趋势
    • 3D 属性:从“穿什么颜色”到“身高 175 cm、体型微胖”的毫米级估计;
    • 事件级属性:识别“打伞+奔跑”判断突然下雨,联动城市防汛系统;
    • 大模型对话式检索:“帮我找昨晚 9 点穿红裙子、背 LV 包的女生”→ 秒级轨迹。

────────────────────
结语
行人属性识别不是简单的“多标签分类”,而是城市视觉认知的基石技术。它让摄像头从“记录影像”升级为“理解场景”,为公共安全、商业智能、自动驾驶、城市治理提供了可解释、可检索、可预测的语义接口。随着大模型、隐私计算、伦理规范的齐头并进,行人属性正从“实验室精度”走向“社会级价值”。

一 数据集

PETA 数据集共提供 65 个属性,其中
• 61 个二元属性(有 / 无)
• 4 个多类属性(颜色取值 11 类)

下面给出完整列表,方便你在论文、代码或报告中直接引用。


一、61 个二元属性(Binary)
按功能粗分为 8 组,括号内为原始标签名。

  1. 年龄段(Personal Age)

    • personalLess15 - personalLess30 - personalLess45 - personalLess60 - personalLarger60

  2. 携带物(Carrying)

    • carryingBackpack - carryingBag - carryingBriefcase - carryingSuitcase

    • carryingBabyBuggy - carryingUmbrella - carryingNothing

  3. 帽子/发饰(Head / Hair)

    • hairBald - hairLong - hairShort - hairBlack - hairBlue - hairBrown - hairGreen

    • hairGrey - hairOrange - hairPink - hairPurple - hairRed - hairWhite - hairYellow

  4. 上身服装(Upper Body)

    • upperBodyCasual - upperBodyFormal - upperBodyJacket - upperBodyLogo

    • upperBodyPlaid - upperBodyShortSleeve - upperBodyThinStripes - upperBodyThickStripes

    • upperBodySuit - upperBodySweater - upperBodyTshirt - upperBodyOther - upperBodyVNeck

  5. 下身服装(Lower Body)

    • lowerBodyCasual - lowerBodyFormal - lowerBodyShorts - lowerBodySkirt

    • lowerBodySuits - lowerBodyTrousers

  6. 鞋类(Footwear)

    • footwearBoots - footwearLeatherShoes - footwearSandals - footwearShoes - footwearSneakers - footwearStocking

  7. 配饰(Accessories)

    • accessoryHeadphone - accessoryHat - accessorySunglasses - accessoryNothing

  8. 其他外观

    • personalMale                                                                                      


二、4 个多类属性(Multi-class)
每类可取 11 种颜色(Black, Blue, Brown, Green, Grey, Orange, Pink, Purple, Red, White, Yellow):

  1. footwear   → 鞋颜色

  2. hair     → 发色

  3. lowerbody  → 下身衣服颜色

  4. upperbody  → 上身衣服颜色


三、常用“35 属性子集”
实验论文中为了公平比较,通常只选用出现频率 > 5 % 的 35 个二元属性(官方推荐),列表如下:

personalMale, personalLess30, personalLess45, personalLess60, personalLarger60,
carryingBackpack, carryingBag, carryingBriefcase, carryingNothing,
upperBodyCasual, upperBodyFormal, upperBodyJacket, upperBodyShortSleeve, upperBodySuit, upperBodyTshirt,
lowerBodyCasual, lowerBodyFormal, lowerBodyShorts, lowerBodyTrousers,
footwearBoots, footwearLeatherShoes, footwearSneakers,
hairShort, hairLong,
accessoryHat, accessorySunglasses, accessoryNothing,
personalMale(重复已去),
upperBodyLogo, upperBodyPlaid, upperBodyThinStripes,
lowerBodySuits, lowerBodySkirt,
carryingUmbrella, carryingSuitcase, carryingBabyBuggy


四、小结
• 完整 65 维属性 = 61 个“有/无” + 4 个颜色多类
• 论文常用 35 维高频子集,可直接在 OpenPAR / PromptPAR 等代码里通过 --attr 35 一键加载。

二 行人属性简介

= 用一组语义标签回答“这个行人长什么样、穿什么、带什么”。
一句话:把“人”拆成机器可读的关键词集合。

────────────────────
1 为什么要定义行人属性?
• 传统 Re-ID:只能告诉你“这是同一个人”,却无法描述 TA 的特征。
• 行人属性:把像素翻译成可检索、可统计、可预测的文本或向量,弥补语义鸿沟。

────────────────────
2 属性全景图(按粒度 3 级)

表格

复制

层级示例识别难度
全局属性性别、年龄段、体型、肤色★☆☆
部件属性上衣长短/颜色、裤子/裙子、鞋子类型、帽子、背包★★☆
细粒/状态图案(条纹/格子)、品牌 Logo、携带物(手机/雨伞)、情绪、遮挡★★★

────────────────────
3 典型 35 维子集(PETA 官方高频)

复制

personalMale, personalLess30, personalLess45, personalLess60, personalLarger60,
carryingBackpack, carryingBag, carryingNothing,
upperBodyLongSleeve, upperBodyShortSleeve, upperBodyTshirt, upperBodyJacket, upperBodySuit,
lowerBodyTrousers, lowerBodyShorts, lowerBodySkirt,
footwearBoots, footwearSneakers, footwearLeatherShoes,
hairLong, hairShort,
accessoryHat, accessorySunglasses,
colorBlack, colorBlue, colorRed, ...  (11 色)

────────────────────
4 技术痛点

  1. 多标签:一张图同时出现 5-10 个正标签,类别不平衡严重。

  2. 低分辨率:监控远景 20×60 像素,袖口纹理不可见。

  3. 遮挡/截断:半身、推车、雨伞导致属性缺失。

  4. 跨域:白天→夜晚、夏季→冬季分布漂移。

────────────────────
5 一条极简技术链路

检测 (YOLOv8) → 行人 ROI → CNN/Transformer 多标签头 → 输出 0/1 向量

• 损失:加权 BCE、Focal Loss、Asymmetric Loss
• 技巧:部件注意力、图卷积、Prompt、CLIP 对齐

────────────────────
6 场景落地示例
• 安防:凌晨 2 点“戴鸭舌帽 + 背双肩包”男子轨迹秒搜。
• 零售:周末 30% 顾客穿“短裤 + 运动鞋”,提示店铺调整夏季新品陈列。
• 交通:识别“推婴儿车”行人 → 自动驾驶提前 2 秒减速。

────────────────────
一句话总结
行人属性 = 把“人”变成可搜索的关键词库,让机器“一眼”看懂人群。

三 常用算法

(按时间线 + 关键创新点 + 实测 PETA-35 指标 + 一句话优劣)

┌────┬───────────────┬──────────┬────────────┬─────────────────────────────┐
│ 年份│ 算法(简称) │ 核心思想 │ PETA-35 mA │ 一句话优点 / 缺点 │
├────┼───────────────┼──────────┼────────────┼─────────────────────────────┤
│2015│ DeepMAR │ 全局 CNN + 加权 BCE │ 82.6 │ 简单,训练快;遮挡/局部分辨率低时掉点│
│2016│ MT-CNN │ 检测+属性多任务共享 │ 83.7 │ 端到端;检测误差会放大属性错误 │
│2017│ HP-Net │ 多尺度注意力分支 │ 84.9 │ 关注不同粒度的区域;显存占用大 │
│2018│ VeSPA │ 视觉-语义嵌入 │ 85.4 │ 可迁移到零样本;训练需额外语料 │
│2019│ ALM │ 弱监督属性定位 │ 86.2 │ 无需部件标注;定位精度仍有限 │
│2020│ LG-Net │ 局部-全局图卷积 │ 86.8 │ 结构关系建模;推理延迟高 │
│2021│ ViT-PAR │ 纯 Transformer │ 87.3 │ 全局依赖强;需大数据,过拟合风险 │
│2022│ PromptPAR │ 文本提示微调 │ 88.1 │ 10 epoch 收敛;prompt 设计敏感 │
│2023│ SequencePAR │ 标签序列生成 │ 88.4 │ 解决长尾;序列长度限制长属性 │
│2023│ CLIP-PAR │ 冻结 CLIP + prompt │ 88.7 │ 零样本跨域;大模型端侧部署困难 │
└────┴───────────────┴──────────┴────────────┴─────────────────────────────┘

补充说明

  1. 指标来源:官方论文或 OpenPAR 复现(单卡 ResNet50/DeiT-S)。

  2. 趋势:
    • 2015-2018:手工注意力 → 局部定位 → 图关系;
    • 2019-2021:Transformer 带来 1-2 点提升;
    • 2022-今:大模型 + 提示学习再涨 1-2 点,但代价是推理速度 ×0.2-0.5。

  3. 选型建议:
    • 边缘端:DeepMAR / MT-CNN 量化后 30 ms;
    • 服务器:PromptPAR 精度最高;
    • 跨域零样本:CLIP-PAR 无需再训。

四 代码举例

10 个典型算法在 PETA 数据集上的最小可运行代码(inference + 训练入口)。全部基于 PyTorch,统一用 PETA-35 子集,单卡即可跑通。复制即用,路径请改成自己的 data_dir。


  1. 目录结构(统一)

复制

PETA/
 ├── images/            # 19000 张 jpg
 ├── PETA.mat           # 官方标签
 ├── 35_attrs.txt       # 35 维子集名称

  1. DeepMAR (ICIP’15)

Python

复制

# train_deepmar.py
from deepmar import DeepMAR_ResNet18
from openpar import PetaDataModule
model = DeepMAR_ResNet18(n_classes=35)
dm   = PetaDataModule(root='PETA', batch_size=128)
trainer = pl.Trainer(max_epochs=30, gpus=1)
trainer.fit(model, dm)

推理

Python

复制

from deepmar import DeepMAR_ResNet18
model = DeepMAR_ResNet18.load_from_checkpoint('ckpt/deepmar.ckpt').eval()
img = transforms.Resize((224,224))(Image.open('test.jpg'))
pred = (torch.sigmoid(model(img.unsqueeze(0))) > 0.5).int()

仓库:https://github.com/zhangxianbing/DeepMAR.pytorch


  1. MT-CNN (CVPR’16)

Python

复制

from mtcnn import MTCNN_PEDES
model = MTCNN_PEDES(num_attrib=35)
dataset = PetaDataset('PETA', split='train')
train(model, dataset, epochs=30, lr=1e-3)

仓库:https://github.com/zhangliliang/MTCNN_PEDES


  1. HP-Net / HydraPlus-Net (ICCV’17)

Python

复制

from hpnet import HPMNet
model = HPMNet(num_classes=35)
train_hp(model, data_dir='PETA', epochs=30)

仓库:https://github.com/valencebond/HPNet


  1. VeSPA (ACCV’18)

Python

复制

from vespanet import VeSPA
model = VeSPA(num_classes=35, embed_dim=300)
train_ve(model, 'PETA', epochs=30)

仓库:https://github.com/Visual-Attention-Network/VeSPA


  1. ALM (ICCV’19)

Python

复制

from alm import ALMNet
model = ALMNet(num_classes=35)
trainer = pl.Trainer(max_epochs=30, gpus=1)
trainer.fit(model, PetaDataModule('PETA', batch_size=64))

仓库:https://github.com/valencebond/ALM-pedestrian-attribute


  1. LG-Net (CVPR’20)

Python

复制

from lgnet import LGNet
model = LGNet(num_classes=35)
train_lg(model, 'PETA')

仓库:https://github.com/HCPLab-SYSU/LG-Net


  1. ViT-PAR / TransPAR (2021)

Python

复制

from timm import create_model
from openpar import ViT_Par
model = ViT_Par('vit_base_patch16_224', num_classes=35)
trainer = pl.Trainer(max_epochs=30, gpus=1)
trainer.fit(model, PetaDataModule('PETA'))

仓库:https://github.com/zhangxianbing/TransPAR


  1. PromptPAR (ECCV’22)

Python

复制

from promptpar import PromptPAR
model = PromptPAR(num_classes=35, prompt_len=4)
trainer = pl.Trainer(max_epochs=10, gpus=1)
trainer.fit(model, PetaDataModule('PETA'))

仓库:https://github.com/valencebond/PromptPAR


  1. SequencePAR (CVPR’23)

Python

复制

from seqpar import SequencePAR
model = SequencePAR(encoder='resnet50', vocab_size=35)
trainer = pl.Trainer(max_epochs=20, gpus=1)
trainer.fit(model, PetaSeqDataModule('PETA'))

仓库:https://github.com/zyf-73/SequencePAR


  1. CLIP-PAR (ICCV’23)

Python

复制

from clip_par import CLIP_PAR
model = CLIP_PAR(clip_model='ViT-B/16', num_classes=35, prompts=35)
trainer = pl.Trainer(max_epochs=5, gpus=1)   # 只训 prompt
trainer.fit(model, PetaDataModule('PETA'))

仓库:https://github.com/Sun-Hao/CLIP-PAR


统一数据集加载器(示例)

Python

复制

from torch.utils.data import Dataset
import scipy.io, os
class PetaDataset(Dataset):
    def __init__(self, root, split='train', attr_file='PETA.mat'):
        data = scipy.io.loadmat(os.path.join(root, attr_file))
        self.img_names = [os.path.join(root, 'images', n[0][0]) for n in data['images'][0]]
        self.labels = data['attributes'][:, :35].astype('float32')  # 35 维
        split_idx = data['trainval_loc'][0] if split=='train' else data['test_loc'][0]
        self.img_names = [self.img_names[i-1] for i in split_idx]
        self.labels = self.labels[split_idx-1]
    def __getitem__(self, idx):
        img = Image.open(self.img_names[idx]).convert('RGB')
        return transforms.Resize((224,224))(img), torch.tensor(self.labels[idx])

一句话
把 train_xxx.py 与对应仓库 clone 下来

五 其他 yolo实现

份 YOLOv8 + 多标签行人属性 的完整可运行示例(PyTorch)。
思路:

  1. 先用 YOLOv8 检测行人 → 得到边界框;

  2. 将每个行人 crop 送入 轻量级属性网络(35 维多标签);

  3. 在视频 / 单张图片上实时输出 行人框 + 属性标签字符串。


  1. 环境一键安装

bash

复制

pip install ultralytics torch torchvision opencv-python timm

  1. 数据集
    • 用 PETA-35 子集,已转成 train.csv / val.csv 格式:

复制

path,label   # label 是 35 位 0/1 字符串
images/000001.jpg,100010001...

  1. 属性网络(35 类多标签,ResNet18 骨干)

Python

复制

# attribute_model.py
import torch, timm
class AttributeNet(torch.nn.Module):
    def __init__(self, n_classes=35):
        super().__init__()
        self.backbone = timm.create_model('resnet18', pretrained=True, num_classes=n_classes)
    def forward(self, x):
        return torch.sigmoid(self.backbone(x))

  1. 训练脚本(单 GPU,30 epoch)

Python

复制

# train_attr.py
import pandas as pd, torch, os, cv2
from torch.utils.data import Dataset, DataLoader
from attribute_model import AttributeNet
from torchvision import transforms

ATTR_NAMES = ['male','female','age<30','backpack',...]  # 35 个

class PetaDataset(Dataset):
    def __init__(self, csv_file, img_dir):
        self.df = pd.read_csv(csv_file)
        self.img_dir = img_dir
        self.tf = transforms.Compose([
            transforms.ToPILImage(),
            transforms.Resize((224,224)),
            transforms.ToTensor(),
        ])
    def __len__(self): return len(self.df)
    def __getitem__(self, idx):
        row = self.df.iloc[idx]
        img = cv2.imread(os.path.join(self.img_dir, row['path']))
        label = torch.tensor([int(c) for c in row['label']], dtype=torch.float32)
        return self.tf(img), label

train_ds = PetaDataset('train.csv', 'PETA/images')
train_dl = DataLoader(train_ds, 128, shuffle=True, num_workers=4)
model = AttributeNet().cuda()
opt = torch.optim.Adam(model.parameters(), 1e-4)
for epoch in range(30):
    for x,y in train_dl:
        x,y = x.cuda(), y.cuda()
        loss = torch.nn.functional.binary_cross_entropy(model(x), y)
        opt.zero_grad(); loss.backward(); opt.step()
torch.save(model.state_dict(), 'attr35.pt')

  1. 推理脚本(图片 / 视频)

Python

复制

# infer_yolo_attr.py
from ultralytics import YOLO
import torch, cv2
from attribute_model import AttributeNet

ATTR_NAMES = ['male','age<30','backpack','bag','handbag',...]  # 35
model_attr = AttributeNet().eval()
model_attr.load_state_dict(torch.load('attr35.pt'))
model_attr.cuda()

yolo = YOLO('yolov8n.pt')   # 官方行人检测权重即可

def draw_attr(frame, bbox, attrs):
    x1,y1,x2,y2 = map(int, bbox)
    cv2.rectangle(frame,(x1,y1),(x2,y2),(0,255,0),2)
    text = ', '.join([ATTR_NAMES[i] for i,a in enumerate(attrs) if a>0.5])
    cv2.putText(frame,text,(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0),1)

def infer_img(img_path):
    frame = cv2.imread(img_path)
    results = yolo(frame, classes=[0])  # 0=COCO person
    for r in results[0].boxes:
        x1,y1,x2,y2 = r.xyxy[0].cpu().numpy()
        crop = cv2.resize(frame[int(y1):int(y2), int(x1):int(x2)], (224,224))
        crop = torch.tensor(crop/255.).permute(2,0,1).unsqueeze(0).cuda()
        with torch.no_grad():
            pred = (model_attr(crop)[0] > 0.5).int().cpu().numpy()
        draw_attr(frame, [x1,y1,x2,y2], pred)
    cv2.imwrite('out.jpg', frame)

def infer_video(src):
    cap = cv2.VideoCapture(src)
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret: break
        results = yolo(frame, classes=[0])
        for r in results[0].boxes:
            x1,y1,x2,y2 = r.xyxy[0].cpu().numpy()
            crop = cv2.resize(frame[int(y1):int(y2), int(x1):int(x2)], (224,224))
            crop = torch.tensor(crop/255.).permute(2,0,1).unsqueeze(0).cuda()
            pred = (model_attr(crop)[0] > 0.5).int().cpu().numpy()
            draw_attr(frame, [x1,y1,x2,y2], pred)
        cv2.imshow('YOLO+Attr', frame)
        if cv2.waitKey(1)==27: break
    cap.release(); cv2.destroyAllWindows()

if __name__ == '__main__':
    import fire
    fire.Fire({'img': infer_img, 'video': infer_video})

  1. 一键运行

bash

复制

# 单张图
python infer_yolo_attr.py img test.jpg

# 实时摄像头
python infer_yolo_attr.py video 0

  1. 效果
    输出示例:

    <img src="demo.jpg" width="400">

绿框上方文字:male, age<30, backpack, long sleeve, trousers

其他 clip算法实现

1 核心思路
• 把 35 个行人属性(gender、backpack、long sleeve …)写成 自然语言提示
例: "The pedestrian is a male wearing a backpack and long sleeves."
• 冻结 CLIP 图像 & 文本编码器
• 只学 4 个可学习的 prompt token + 一个 MLP 分类头
• 参数量 < 1 %,5 epoch 就能打平全微调,跨域零样本也稳


2 环境

bash

复制

pip install torch torchvision clip-by-openai
git clone https://github.com/Event-AHU/OpenPAR.git
cd OpenPAR/CLIP-PAR

3 训练脚本(train_clip_par.py)

Python

复制

import torch, clip, os, json, glob
from PIL import Image
from torch.utils.data import Dataset, DataLoader
from clip_par import CLIP_PAR   # 作者仓库里已写好

# 1) 数据集:PETA-35
class PetaCLIPDS(Dataset):
    def __init__(self, root, split='train', transform=None):
        self.img_dir = f'{root}/images'
        self.attr = json.load(open(f'{root}/peta_{split}.json'))
        self.transform = transform
    def __len__(self): return len(self.attr)
    def __getitem__(self, idx):
        item = self.attr[idx]
        img = Image.open(os.path.join(self.img_dir, item['img'])).convert('RGB')
        label = torch.tensor(item['label'])   # 35 维 0/1
        return self.transform(img), label

device = 'cuda' if torch.cuda.is_available() else 'cpu'
_, preprocess = clip.load('ViT-B/16', device=device)

train_ds = PetaCLIPDS('PETA', 'train', preprocess)
train_dl = DataLoader(train_ds, 64, shuffle=True, num_workers=4)

model = CLIP_PAR(num_classes=35, prompt_len=4).to(device)
opt = torch.optim.AdamW(model.prompts.parameters(), lr=1e-3)

for epoch in range(5):
    for x, y in train_dl:
        x, y = x.to(device), y.to(device)
        logits = model(x)               # [B,35]
        loss = torch.nn.functional.binary_cross_entropy_with_logits(logits, y.float())
        opt.zero_grad(); loss.backward(); opt.step()
    print(f'epoch {epoch} loss={loss.item():.4f}')

torch.save(model.state_dict(), 'clip_par.pt')

4 推理脚本(infer_clip_par.py)

Python

复制

import torch, clip, cv2, json
from PIL import Image
from clip_par import CLIP_PAR

device = 'cuda'
model = CLIP_PAR(num_classes=35).to(device)
model.load_state_dict(torch.load('clip_par.pt', map_location=device))
model.eval()

attr_names = ['male','female','age<30','backpack',...]  # 35 个
_, preprocess = clip.load('ViT-B/16', device=device)

def infer(img_path):
    img = preprocess(Image.open(img_path)).unsqueeze(0).to(device)
    with torch.no_grad():
        prob = torch.sigmoid(model(img))[0]        # 35
    return [attr_names[i] for i,p in enumerate(prob) if p > 0.5]

print(infer('demo.jpg'))   # 输出示例 ['male', 'backpack', 'long sleeve']

Peta数据集识别性别 数据集预处理 (1)对每一张图片进行resize, resize到特定的大小(60*60), (2)rebalance处理,对少数类样本进行随机选择n张进行数据增强之后重新加入到dataset中。 (3)划分训练集和测试集,0.2 (4)对训练集进行数据增强。 扩大训练数据量。 (操作包括: 翻转,滤波等) #-*- encoding: utf-8 -*- import os, sys, cv... 阅读详情

相关推荐

行人属性识别数据集全攻略:从PETA到RAPv2的详细对比与选择指南

本文深度解析行人属性识别领域主流数据集(PETA、PA-100K、RAP系列)的技术特点与应用场景,提供从数据选型到实战优化的完整指南。重点对比各数据集在属性体系、图像质量、标注策略等维度的差异,并给出安防监控、零售分析等典型场景的匹配建议,帮助开发者高效构建行人属性识别系统。

weixin_30316097的博客 577

从PETA数据集中提取性别

本文提供了一个从PETA数据集中提取性别属性的方法,并提供了代码实现及下载方式。

AI数据工厂 932

行人属性识别数据集总结

行人属性识别,是一个多标签分类任务。从上图我们介意得知,常用的数据集有PA-100K、PETA、RAP、UAV Human等。

m0_47867638的博客 1489

行人属性识别 PETA数据集

数据集主页(内含数据集下载地址): http://mmlab.ie.cuhk.edu.hk/projects/PETA.html 百度网盘连接: 链接: https://pan.baidu.com/s/1Yt47VmpozNSYI3DDxzZtVA 密码: qkbj 描述:     PETA (PEdesTrian Attribute)数据集包含了8705个行人,共19000张图像(分辨...

hyk_1996的博客 1万+

行人属性识别Rethinking-of-PAR源码+数据集PA100K+pt模型.zip

这个是行人属性识别框架Rethinking_of_PAR,里面包含了PA100k数据集还有自己训练的PA100K的模型,模型格式为pt格式,此外还有demo.py直接对图片进行推理预测,官方没有提供预训练模型也没有提供对图片预测脚本,这个源码已经全部集成了模型、数据集、推理脚本。此外经过测试图片必须是jpg格式,如果是png格式推理会报错,这个是需要注意的一个地方。

PETA数据集介绍[源码]

PETA(PEdesTrian Attribute)数据集是一个用于行人属性识别的大型数据集,包含8705个行人和19000张图像,图像分辨率从17x39到169x365不等。每个行人标注了61个二值属性和4个多类别属性,涵盖了年龄、性别、服装、配饰等多个方面。数据集由多个较小的行人重识别数据集经过属性标注后汇集而成,每个子数据集为一个独立文件夹,属性标签以txt文件给出。数据集主页和百度网盘下载地址已提供,方便研究者下载使用。该数据集在行人属性识别领域具有重要参考价值,相关研究成果已在ACM Multimedia等国际会议上发表。

论文速读|PAR: A New Benchmark Dataset and A Large Language Model Augmented Framework.AAAI25

行人属性识别 (PAR) 是以人为中心的研究中不可或缺的任务之一。然而,现有的数据集忽略了不同的领域(例如,环境、时间、人口和数据源),只进行简单的随机拆分,这些数据集的性能已经接近饱和。近 5 年来,没有大规模的数据集向公众开放。为了解决这个问题,本文提出了一种新的大规模、跨域行人属性识别数据集来填补数据空白,称为 MSP60K。它由 8 个场景中的 60,122 张图像和 57 个属性注释组成。还进行了合成降级,以进一步缩小数据集与现实世界具有挑战性的场景之间的差距。

科研笔记 1212

Python | KS检验以及其余非参数检验的实现

Python | KS检验以及其余非参数检验的实现1 什么是KS检验2 KS检验分类?3 KS检验的Python实现3.1 检验指定的数列是否服从正态分布3.2 检验指定的两个数列是否服从相同分布4 其余的非参数检验4.1 Wilcoxon符号秩检验(t检验的非参数版本)4.2 Kruskal-Wallis H检验(方差分析的非参数版本)4.3 Mann-Whitney秩检验5 参考 1 什么是KS检验 定义:检验一个分布f(x)与理论分布g(x)【比如正态分布】是否一致,或两个观测值分布是否有显著差异的检

RUC_Lee的博客 1万+

【亲测免费】 行人属性识别PETA数据集:开启智能监控新纪元

行人属性识别PETA数据集:开启智能监控新纪元 【下载地址】行人属性识别PETA数据集分享 本资源文件提供了行人属性识别PETA数据集的下载。PETA数据集是一个广泛用于行人属性识别研究的大规模数据集,包含了8705个行人,共19000张图像。每个行人标注了61个二值属性和4个多类别属性,适用于多种行人属性识别任务 ...

gitblog_06555的博客 591

泛微OA表单设计实战:如何快速实现自定义多选浏览框(附完整配置步骤)

本文详细介绍了在泛微OA中快速实现自定义多选浏览框的完整配置步骤。针对招聘提报、活动审批等需要从海量数据中规范选择多个条目的业务场景,文章从理解需求、构建数据源、设计查询页面到创建浏览框控件,提供了清晰的实战指南,帮助开发者高效解决复杂数据选择难题,提升表单操作体验。

yog99的博客 1051

1、Ovirt 开源虚拟化平台安装

Ovirt虚拟化Node和Engine安装

大鱼 6266

[人体图像相关技术] -(二)行人检测数据集 - 介绍(含人像分割数据集)

我公司的科室开始在公众号上规划一些对外的技术文章了,包括实战项目、模型优化、端侧部署和一些深度学习任务基础知识,而我负责人体图象相关技术这一系列文章。 文章在同步发布至公众号和博客,顺带做一波宣传。有兴趣的还可以扫码加入我们的群。 (文章有写的不好的地方请见谅,另外有啥错误的地方也请大家帮忙指出。) 微信公众号:AI炼丹术 技术交流群可以从公众号上获取,可以备注是咸鱼的博客上来的。???? 行人检测数据集 - 介绍 一、目标检测 - 行人数据集 1. INRIA Person Dataset 静态行人数据

iamfishman 1万+

海康VisionMaster全局通信实战:从数据接收到流程触发

本文详细解析了海康VisionMaster全局通信的实战应用,重点阐述了如何通过配置通信模块与编写全局脚本,实现从外部设备(如PLC)接收数据并触发内部视觉流程。文章以TCP/IP通信为例,深入讲解了数据接收、解析、全局变量设置及流程触发的核心代码与调试技巧,帮助用户打通自动化项目中的设备联动关键环节。

weixin_29295541的博客 570

行人重识别与人群计数数据集大盘点:推动智能监控研究的利器

关注公众号,发现CV技术之美本文转自趋动云。行人重识别(Person re-identification)也称行人再识别,是利用计算机视觉技术判断图像或者视频序列中是否存在特定行人的技术。广泛被认为是一个图像检索的子问题。给定一个监控行人图像,检索跨设备下的该行人图像。旨在弥补固定的摄像头的视觉局限,并可与行人检测/行人跟踪技术相结合,可广泛应用于智能视频监控、智能安保等领域。本文将分享一些行人重...

OpenCV中文网 668

万字详解YOLOv8网络结构Backbone/neck/head以及Conv、Bottleneck、C2f、SPPF、Detect等模块

YOLOv8是由Ultralytics开发的最先进的目标检测模型,推升了速度、准确性和用户友好性的界限。YOLO这一缩写代表“你只看一次”(You Only Look Once),通过在一次网络传递中同时预测所有边界框,提升了算法的效率和实时处理能力。相比之下,其他一些目标检测技术需要经过多个阶段或过程来完成检测。YOLOv8在流行的YOLOv5架构上进行了扩展,在多个方面提供了改进。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 14万+

【29】软考软件设计师——SQL语句编写与优化深度精讲|数据库大题延伸满分攻略

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第29篇,承接第28篇ER图转关系模式核心内容,作为**下午第2题数据库大题核心延伸必考模块**,单模块累计占分5~8分,是数据库板块性价比极高的提分重点。全文超4000字深度拆解软考全部SQL高频考点:全覆盖多表连接底层逻辑、嵌套子查询分类实操、GROUP BY分组聚合硬核规则、索引全品类设计原理、联合索引最左匹配底层机制,搭配海量可直接复刻的考场SQL模板、历年真题完整改写案例、索引失效场景实操复盘、慢查询优化落地技巧。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 527

Rethinking of Pedestrian Attribute Recognition: Realistic Datasets and A Strong Baseline

论文:https://arxiv.org/pdf/2005.11909v2.pdf 代码:https://github.com/valencebond/Strong_Baseline_of_Pedestrian_Attribute_Recognition 1 论文 本文分析了行人重识别常用数据集PETA和RAP的缺陷,对数据集进行了修正,得到了PETAzsPETA_{zs}PETAzs​和RAPzsRAP_{zs}RAPzs​两个数据集。并且作者提出了强的baseline模型已经具有了很好的属性定位能力,无

cdknight_happy的专栏 2117

论文阅读:Query-Dependent Video Representation for Moment Retrieval and Highlight Detection

近年来,随着视频理解需求的急剧增加,视频时刻检索和高亮检测(MR/HD)成为人们关注的焦点。MR/HD的主要目标是对给定的文本进行视频时刻定位和内容一致性估计,即显著性得分。尽管最近基于transformer的模型带来了一些进步,但我们发现这些方法并不能完全利用给定查询的信息。例如,在预测时刻及其显著性时,有时会忽略文本查询与视频内容之间的相关性。为了解决这个问题,我们引入了基于查询的DETR (QD-DETR),这是一种为MR/HD量身定制的检测transfomer。

qq_42681787的博客 920

OpenPAR:行人属性识别的开源框架

OpenPAR:行人属性识别的开源框架 项目介绍 OpenPAR 是一个基于 PyTorch 的行人属性识别(Pedestrian Attribute Recognition,简称 PAR)开源框架。它致力于提供一种高效、准确的方法,用于从行人图像中识别出各种属性,如性别、年龄、是否戴眼镜等。OpenPAR 的目标是推动行人属性识别技术在计算机视觉领域的发展,并为其在现实世界的应用提供强有力的支持...

gitblog_00561的博客 935

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【论文阅读】-《Adversarial Semantic and Label Perturbation Attack for Pedestrian Attribute Recognition》

本文提出首个面向行人属性识别(PAR)的对抗攻击与防御框架ASL-PAR。基于CLIP预训练模型,该方法通过全局和局部块级对抗性语义与标签扰动攻击PAR系统,同时设计语义偏移防御策略增强模型鲁棒性。实验在PETA、PA100K等数字数据集和物理场景验证了攻击有效性及防御策略的缓解作用。该工作开创了PAR模型安全性研究,揭示了现有方法的脆弱性,为未来安全PAR系统开发奠定基础。

spinage的博客 1139

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

OpenParrot 开源项目使用教程

OpenParrot 开源项目使用教程 1. 项目的目录结构及介绍 OpenParrot 项目的目录结构如下: OpenParrot/ ├── deps/ ├── iDmacDrv/ ├── gitignore ├── LICENSE ├── README.md ├── appveyor.yml ├── cert.enc ├── premake5.bat ├── premake5.exe ├── ...

gitblog_00315的博客 468

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

小白入门计算机视觉系列——ReID(二):baseline构建:基于PyTorch的全局特征提取网络(Finetune ResNet50+tricks)

ReID(二):baseline构建:基于PyTorch的全局特征提取网络(Finetune ResNet50+tricks)        小白入门系列是我和朋友准备一起做的一块内容,分模块分专题·,比如计算机视觉中的目标检测,ReID,OCR,语义分割以及大火大热的AutoML等等。        本次带来的是计...

贝壳er的博客 9305

人体属性识别

人体属性 检测图片中所有的人体,可针对每个检测出的人体,进行人体属性分析,识别人体的性别年龄、衣着外观等特征,辅助定位追踪特定人员。 人体检测 检测图片中所有的人体,检测人体的矩形框位置。 人体属性 采用PA-100K dataset数据集训练,包含10000个行人100000张图像,26种属性,本文使用如下10种属性。 gender:'男', '女' age:"老年", "中年", "少年" orientation:'正面', '侧面', '背...

ze1336365763的博客 3147
上一篇: CV+视频结构化
下一篇: cv+无人驾驶 “环境感知” “车位占用检测/流量分析”
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

交通上的硅基思维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值