社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

基于PyTorch、易上手,细粒度图像识别深度学习工具库Hawkeye开源

新机器视觉 • 1 年前 • 139 次点击  

点击下方卡片,关注“新机器视觉”公众号

重磅干货,第一时间送达

细粒度图像识别 [1] 是视觉感知学习的重要研究课题,在智能新经济和工业互联网等方面具有巨大应用价值,且在诸多现实场景已有广泛应用…… 鉴于当前领域内尚缺乏该方面的深度学习开源工具库,南京理工大学魏秀参教授团队用时近一年时间,开发、打磨、完成了 Hawkeye——细粒度图像识别深度学习开源工具库,供相关领域研究人员和工程师参考使用。本文是对 Hawkeye 的详细介绍。


目录


1. 什么是 Hawkeye 库

2. Hawkeye 支持的模型及方法

3. 安装 Hawkeye

4. 使用 Hawkeye 训练模型


1. 什么是 Hawkeye 库



Hawkeye 是一个基于 PyTorch 的细粒度图像识别深度学习工具库,专为相关领域研究人员和工程师设计。目前,Hawkeye 包含多种代表性范式的细粒度识别方法,包括 “基于深度滤波器”、“基于注意力机制”、“基于高阶特征交互”、“基于特殊损失函数”、“基于网络数据” 以及其他方法。


Hawkeye 项目代码风格良好,结构清晰易读,可拓展性较强。对于刚接触细粒度图像识别领域的相关人员而言,Hawkeye 较易上手,便于其理解细粒度图像识别的主要流程和代表性方法,同时也方便在本工具库上快速实现自己的算法。此外,我们还给出了库中各模型的训练示例代码,自研方法也可按照示例快速适配并添加至 Hawkeye 中。


Hawkeye 开源库链接:https://github.com/Hawkeye-FineGrained/Hawkeye


2. Hawkeye 支持的模型及方法


Hawkeye 目前支持细粒度图像识别中主要学习范式的共 16 个模型与方法,具体如下:


  • 基于深度滤波器

  • S3N (ICCV 2019)

  • Interp-Parts (CVPR 2020)

  • ProtoTree (CVPR 2021)

  • 基于注意力机制

  • OSME+MAMC (ECCV 2018)

  • MGE-CNN (ICCV 2019)

  • APCNN (IEEE TIP 2021)

  • 基于高阶特征交互

  • BCNN (ICCV 2015)

  • CBCNN (CVPR 2016)

  • Fast MPN-COV (CVPR 2018)

  • 基于特殊损失函数

  • Pairwise Confusion (ECCV 2018)

  • API-Net (AAAI 2020)

  • CIN (AAAI 2020)

  • 基于网络数据

  • Peer-Learning (ICCV 2021)

  • 其他方法

  • NTS-Net (ECCV 2018)

  • CrossX (ICCV 2019)

  • DCL (CVPR 2019)


3. 安装 Hawkeye


安装依赖


使用 conda 或者 pip 安装相关依赖:


  • Python 3.8

  • PyTorch 1.11.0 or higher

  • torchvison 0.12.0 or higher

  • numpy

  • yacs

  • tqdm


克隆仓库:


git clone https://github.com/Hawkeye-FineGrained/Hawkeye.gitcd Hawkeye


准备数据集


我们提供了 8 个常用的细粒度识别数据集及最新的下载链接:

  • CUB200: https://data.caltech.edu/records/65de6-vp158/files/CUB_200_2011.tgz

  • Stanford Dog: http://vision.stanford.edu/aditya86/ImageNetDogs/images.tar

  • Stanford Car: http://ai.stanford.edu/~jkrause/car196/car_ims.tgz

  • FGVC Aircraft: https://www.robots.ox.ac.uk/~vgg/data/fgvc-aircraft/archives/fgvc-aircraft-2013b.tar.gz

  • iNat2018: https://ml-inat-competition-datasets.s3.amazonaws.com/2018/train_val2018.tar.gz

  • WebFG-bird: https://web-fgvc-496-5089-sh.oss-cn-shanghai.aliyuncs.com/web-bird.tar.gz

  • WebFG-car: https://web-fgvc-496-5089-sh.oss-cn-shanghai.aliyuncs.com/web-car.tar.gz

  • WebFG-aircraft: https://web-fgvc-496-5089-sh.oss-cn-shanghai.aliyuncs.com/web-aircraft.tar.gz


首先,下载一个数据集(以 CUB200 为例):


cd Hawkeye/datawget https://data.caltech.edu/records/65de6-vp158/files/CUB_200_2011.tgzmkdir bird && tar -xvf CUB_200_2011.tgz -C bird/


我们提供了上述 8 个数据集的 meta-data 文件,能够匹配库中的 FGDataset 方便地加载训练集和测试集,训练集和测试集为各个数据集官方提供的划分。使用不同数据集时,只需在实验的 config 文件中修改 dataset 配置即可,方便切换。


在实验的 config 文件中修改 dataset 配置,示例如下:


dataset:  name: cub


    
  root_dir: data/bird/CUB_200_2011/images  meta_dir: metadata/cub


4. 使用 Hawkeye 训练模型


对于 Hawkeye 支持的每个方法,我们均提供了单独的训练模板和配置文件。例如训练 APINet 只需一条命令:


python Examples/APINet.py --config configs/APINet.yaml

实验的参数都在相应的 yaml 文件中,可读性高、便于修改,如:


experiment:name: API_res101 2        # 实验名称  log_dir: results/APINet   # 实验日志、结果等的输出目录  seed: 42                  # 可以选择固定的随机数种子#  resume: results/APINet/API_res101 2/checkpoint_epoch_19.pth    # 可以从训练中断的 checkpoint 中恢复训练dataset:  name: cub          # 使用 CUB200 数据集  root_dir: data/bird/CUB_200_2011/images   # 数据集中图像放置的路径  meta_dir: metadata/cub                  # CUB200 的 metadata 路径  n_classes: 10         # 类别数,APINet 需要的数据集  n_samples: 4          # 每个类别的样本数  batch_size: 24        # 测试时的批样本数  num_workers: 4      # Dataloader 加载数据集的线程数  transformer:        # 数据增强的参数配置    image_size


    
: 224      # 图像输入模型的尺寸 224x224    resize_size: 256    # 图像增强前缩放的尺寸 256x256model:  name: APINet        # 使用 APINet 模型,见 `model/methods/APINet.py`  num_classes: 200      # 类别数目#  load: results/APINet/API_res101 1/best_model.pth     # 可以加载训练过的模型参数train:  cuda: [4]          # 使用的 GPU 设备 ID 列表,[] 时使用 CPU  epoch: 100        # 训练的 epoch 数量  save_frequence: 10    # 自动保存模型的频率#  val_first: False      # 可选是否在训练前进行一次模型精度的测试  optimizer:    name: Adam        # 使用 Adam 优化器    lr: 0.0001        # 学习率为 0.0001    weight_decay: 0.00000002  scheduler:    # 本例使用自定义组合的 scheduler,由 warmup 和余弦退火学习率组合而成,见 `Examples/APINet.py`    name: ''    T_max: 100        # scheduler 的总迭代次数    warmup_epochs: 8    # warmup 的 epoch 数    lr_warmup_decay: 0.01  # warmup 衰减的比例  criterion:    name: APINetLoss    # APINet 使用的损失函数,见 `model/loss/APINet_loss.py`

实验的主程序 Examples/APINet.py 中的训练器 APINetTrainer 继承自 Trainer,不需要再写复杂的训练流程、logger、模型保存、配置加载等代码,只用按需修改部分模块即可。我们也提供了训练阶段的多个 hook 钩子,可以满足一些方法特别的实现方式。

日志文件、模型权重文件、训练使用的训练代码以及当时的配置文件都会保存在实验输出目录 log_dir 中,备份配置和训练代码便于日后对不同实验进行对比。


更多详细示例可参考项目链接中的具体信息:https://github.com/Hawkeye-FineGrained/Hawkeye


参考

[1] X.-S. Wei, Y.-Z. Song, O. Mac Aodha, J. Wu, Y. Peng, J. Tang, J. Yang, and S. Belongie. Fine-Grained Image Analysis with Deep Learning: A Survey. IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAMI), DOI: 10.1109/TPAMI.2021.3126648. https://ieeexplore.ieee.org/document/9609630


转自丨机器之

本文仅做学术分享,如有侵权,请联系删文。

—THE END—

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/149059
 
139 次点击