行人属性识别开源项目

举报
AI浩 发表于 2023/01/31 20:49:25 2023/01/31
【摘要】 @[toc] 1、百度的行人属性识别项目PP-Human属性识别![在这里插入图片描述](https://img-blog.csdnimg.cn/3515acc2ad6348308e5a18af14a95046.png#pic_center =300x) 方案说明1、目标检测/多目标跟踪获取图片/视频输入中的行人检测框,模型方案为PP-YOLOE,详细文档参考PP-YOLOE。2、通过行人检...

@[toc]

1、百度的行人属性识别项目

PP-Human属性识别
![在这里插入图片描述](https://img-blog.csdnimg.cn/3515acc2ad6348308e5a18af14a95046.png#pic_center =300x)

方案说明

1、目标检测/多目标跟踪获取图片/视频输入中的行人检测框,模型方案为PP-YOLOE,详细文档参考PP-YOLOE
2、通过行人检测框的坐标在输入图像中截取每个行人。
3、使用属性识别分析每个行人对应属性,属性类型与PA100k数据集相同,具体属性列表如下:

- 性别:男、女
- 年龄:小于1818-60、大于60
- 朝向:朝前、朝后、侧面
- 配饰:眼镜、帽子、无
- 正面持物:是、否
- 包:双肩包、单肩包、手提包
- 上衣风格:带条纹、带logo、带格子、拼接风格
- 下装风格:带条纹、带图案
- 短袖上衣:是、否
- 长袖上衣:是、否
- 长外套:是、否
- 长裤:是、否
- 短裤:是、否
- 短裙&裙子:是、否
- 穿靴:是、否

4、属性识别模型方案为StrongBaseline,模型结构为基于ResNet50的多分类网络结构,引入Weighted BCE loss和EMA提升模型效果。

2、京东的JDAI-CV/fast-reid

链接:
https://github.com/JDAI-CV/fast-reid/tree/master/projects/FastAttr

在这里插入图片描述

使用方法

1、下载fast-reid项目:

https://github.com/JDAI-CV/fast-reid

2、下载pa-100k数据集

下载链接:
链接:https://pan.baidu.com/s/1Gjvg920nBrXFCiAQUrmbnA
提取码:8dq6

3、将数据集放到fast-reid项目中。
在这里插入图片描述

4、开始训练
修改预训练模型的路径。
配置文件路径:.projects/FastAttr/configs/Base-attribute.yml,预训练模型的路径改成红框里面的路径,然后把预训练权重放到项目的根目录。

![在这里插入图片描述](https://img-blog.csdnimg.cn/3b813c2fed194e589028be764e1b1a3c.png#pic_center =500x)

运行命令:

python projects/FastAttr/train_net.py --config-file projects/FastAttr/configs/pa100.yml

运行结果:

Dataset Accu Prec Recall F1 mA metric
PA100K 76.36 86.04 84.87 85.45 76.25 76.25

3、Rethinking_of_PAR

百度和京东开源的项目源于这个项目,链接:
https://github.com/valencebond/Rethinking_of_PAR

训练

1、下载Rethinking_of_PAR,链接:

https://github.com/valencebond/Rethinking_of_PAR

2、下载数据集

下载链接:
链接:https://pan.baidu.com/s/1Gjvg920nBrXFCiAQUrmbnA
提取码:8dq6

3、将数据集放到Rethinking_of_PAR项目中。

在这里插入图片描述
将图片文件夹的名字改为data,复制到data/PA100k下面。
在这里插入图片描述
4、修改源码中的错误
有几处错误的地方需要修改。第一处在./tools/utils.py,将time_str函数修改为:

def time_str(fmt=None):
    if fmt is None:
        fmt = '%Y_%m_%d_%H_%M_%S'
    return datetime.datetime.today().strftime(fmt)

还有一处是路径的问题,路径在./dataset/pedes_attr/pedes.py,在23行增加:

        dataset_info = pickle.load(open(data_path, 'rb+'))
        dataset_info.root="./data/PA100k/data"

root默认是原作者的,所以需要改一下。

5、安装库文件

 pip install inplace_abn    
 pip install visdom -i https://pypi.tuna.tsinghua.edu.cn/simple      
 pip install mmcv
      

6、开始训练
点击Terminal,然后输入命令:

python train.py --cfg ./configs/pedes_baseline/pa100k.yaml

就可以开始训练了。
在这里插入图片描述
训练300epoch的结果:
在这里插入图片描述

测试

测试代码参照https://www.pudn.com/news/62fca7d3f97302478e6a8d18.html修改的和调试的。
代码如下:

import argparse
import json
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
import pickle

from dataset.augmentation import get_transform
from dataset.multi_label.coco import COCO14
from metrics.pedestrian_metrics import get_pedestrian_metrics
from models.model_factory import build_backbone, build_classifier

import numpy as np
import torch

from PIL import Image
from configs import cfg, update_config

from models.base_block import FeatClassifier
from tools.function import get_model_log_path, get_reload_weight
from tools.utils import set_seed, str2bool
from models.backbone import resnet

set_seed(605)

clas_name = ['Hat','Glasses','ShortSleeve','LongSleeve','UpperStride',
             'UpperLogo','UpperPlaid','UpperSplice','LowerStripe','LowerPattern',
             'LongCoat','Trousers','Shorts','Skirt&Dress','boots','HandBag','ShoulderBag',
             'Backpack','HoldObjectsInFront','AgeOver60','Age18-60',
             'AgeLess18','Female','Front','Side','Back']

def main(cfg, args):
    exp_dir = os.path.join('exp_result', cfg.DATASET.NAME)
    model_dir, log_dir = get_model_log_path(exp_dir, cfg.NAME)

    train_tsfm, valid_tsfm = get_transform(cfg)
    print(valid_tsfm)

    backbone, c_output = build_backbone(cfg.BACKBONE.TYPE, cfg.BACKBONE.MULTISCALE)


    classifier = build_classifier(cfg.CLASSIFIER.NAME)(
        nattr=26,
        c_in=c_output,
        bn=cfg.CLASSIFIER.BN,
        pool=cfg.CLASSIFIER.POOLING,
        scale =cfg.CLASSIFIER.SCALE
    )

    model = FeatClassifier(backbone, classifier)

    if torch.cuda.is_available():
        model = torch.nn.DataParallel(model).cuda()

    model = get_reload_weight(model_dir, model, pth='ckpt_max_2023_01_11_13_40_16.pth')                               # 修改此处的模型名字
    model.eval()

    with torch.no_grad():
        for name in os.listdir(args.test_img):
            print(name)
            img = Image.open(os.path.join(args.test_img,name))
            img = valid_tsfm(img).cuda()
            img = img.view(1, *img.size())
            valid_logits, attns = model(img)


            valid_probs = torch.sigmoid(valid_logits[0]).cpu().numpy()

            valid_probs = valid_probs[0]>0.5

            res = []
            for i,val in enumerate(valid_probs):
                if val:
                    res.append(clas_name[i])
                if i ==14 and val==False:
                    res.append("male")
            print(res)

def argument_parser():
    parser = argparse.ArgumentParser(description="attribute recognition",
                                     formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument(
        "--test_img", help="test images", type=str,
        default="./test_imgs",

    )
    parser.add_argument(
        "--cfg", help="decide which cfg to use", type=str,default='./configs/pedes_baseline/pa100k.yaml'
    )
    parser.add_argument("--debug", type=str2bool, default="true")

    args = parser.parse_args()

    return args

if __name__ == '__main__':
    args = argument_parser()
    update_config(cfg, args)

    main(cfg, args)

运行结果如下:
在这里插入图片描述

4、yolov5-deepmar

行人轨迹和属性分析的解决方案,检测采用的是yolov5, 跟踪采用的是deepsort,属性分析采用的是deepmar,效果demo。github链接:https://github.com/lanmengyiyu/yolov5-deepmar。
![在这里插入图片描述](https://img-blog.csdnimg.cn/dec2d0faa3f94d0a93fc3d04c8a2b87d.jpeg#pic_center =500x)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。