当前位置: 首页 > 科技观察

基于PyTorch,简单易用的细粒度图像识别深度学习工具库Hawkeye开源

时间:2023-03-20 17:52:09 科技观察

细粒度图像识别[1]是视觉感知学习的重要研究课题,在智能新经济中具有巨大的应用价值和工业互联网,并在很多现实场景中得到了广泛的应用……鉴于该领域缺乏深度学习的开源工具库,南京理工大学魏秀灿教授团队花了近一年时间开发、打磨、完善Hawkeye——细粒度图像识别深度学习开源工具库,供相关领域的研究人员和工程师参考。本文是对鹰眼的详细介绍。一、什么是Hawkeye库Hawkeye是一个基于PyTorch的细粒度图像识别深度学习工具库,专为相关领域的研究人员和工程师设计。目前,Hawkeye包括了多种细粒度识别方法的代表范式,包括“基于深度过滤”、“基于注意力机制”、“基于高阶特征交互”、“基于特殊损失函数”、“基于网络数据”等方法。鹰眼项目代码风格好,结构清晰易读,可扩展性强。对于刚接触细粒度图像识别领域的小伙伴来说,鹰眼更容易上手,让他们了解细粒度图像识别的主要流程和代表方法,也方便快速实现自己的算法在这个工具库上。此外,我们还在库中给出了每个模型的训练示例代码,自研方法也可以根据示例快速适配添加到Hawkeye中。鹰眼开源库链接:https://github.com/Hawkeye-FineGrained/Hawkeye2。Hawkeye支持的模型和方法Hawkeye目前支持细粒度图像识别中主要学习范式的共16种模型和方法,如下:基于深度过滤的S3N(ICCV2019)Interp-Parts(CVPR2020)ProtoTree(CVPR)2021)基于注意力机制OSME+MAMC(ECCV2018)MGE-CNN(ICCV2019)APCNN(IEEETIP2021)基于高阶特征交互BCNN(ICCV2015)CBCNN(CVPR2016)FastMPN-COV(CVPR2018))BasedonspeciallossfunctionPairwiseConfusion(ECCV2018)API-Net(AAAI2020)CIN(AAAI2020)BasedonnetworkdataPeer-Learning(ICCV2021)OthermethodsNTS-Net(ECCV2018)CrossX(ICCV2019)DCL(CVPR2019)3。安装Hawkeye安装依赖使用conda或pip安装相关依赖:Python3.8PyTorch1.11.0orhighertorchvison0.12.0orhighernumpyyacstqdm克隆仓库:gitclonehttps://img.ydisp.cn/news/20221107/saidwiadnvxcdhawkeye准备数据集We提供8个常用的细粒度识别数据集和最新下载链接:CUB200:https://data.caltech.edu/records/65de6-vp158/files/CUB_200_2011.tgzStanfordDog:http://vision.stanford.edu/aditya86/ImageNetDogs/images.tarStanford汽车:http://ai.stanford.edu/~jkrause/car196/car_ims.tgzFGVC飞机:https://www.robots.ox.ac.uk/~vgg/data/fgvc-aircraft/archives/fgvc-aircraft-2013b.tar.gziNat2018:https://ml-inat-competition-datasets.s3.amazonaws.com/2018/train_val2018.tar.gzWebFG-bird:https://web-fgvc-496-5089-sh.oss-cn-shanghai.aliyuncs.com/web-bird.tar.gzWebFG-car:https://web-fgvc-496-5089-sh.oss-cn-shanghai。aliyuncs.com/web-car.tar.gzWebFG-aircraft:https://web-fgvc-496-5089-sh.oss-cn-shanghai.aliyuncs.com/web-aircraft.tar.gz首先下载一个数据设置(以CUB200为例):cdHawkeye/datawgethttps://data.caltech.edu/records/65de6-vp158/files/CUB_200_2011.tgzmkdirbird&&tar-xvfCUB_200_2011.tgz-Cbird/我们提供以上8每个数据集的元数据文件可以匹配库中的FGDataset。方便加载训练集和测试集。训练集和测试集是各数据集官方提供的划分。可以在中修改数据集配置,方便切换。在实验的配置文件中修改数据集配置。示例如下:dataset:name:cubroot_dir:data/bird/CUB_200_2011/imagesmeta_dir:metadata/cub4.使用鹰眼训练模型对于鹰眼支持的每一种方法,我们都提供了单独的训练模板和配置文件。比如训练APINet只需要一条命令:pythonExamples/APINet.py--configconfigs/APINet.yaml实验的参数都在对应的yaml文件中,可读性强,修改方便,如:experiment:name:API_res1012#实验名称log_dir:results/APINet#实验日志、结果等输出目录seed:42#可选择固定随机数seedresume:results/APINet/API_res1012/checkpoint_epoch_19.pth#你可以从训练中断的checkpoint恢复训练数据集:name:cub#使用CUB200数据集root_dir:data/bird/CUB_200_2011/images#数据集中放置图片的路径meta_dir:metadata/cub#元数据路径ofCUB200n_classes:10#类别数,APINet需要的数据集n_samples:4#每个类别的样本数batch_size:24#用于测试的batch样本数num_workers:4#Dataloader加载数据集transformer的线程数:#数据增强的参数配置image_size:224#输入图像的大小model224x224resize_size:256#图像增强前缩放后的大小为256x256model:name:APINet#使用API??Net模型,见model/methods/APINet.pynum_classes:200#类别数load:results/APINet/API_res1011/best_model.pth#可以加载训练好的模型参数train:cuda:[4]#使用的GPU设备ID列表,[]使用CPUepoch:100#训练epoch数save_frequency:10#自动保存模型的频率val_first:False#可选是否训练前测试模型精度optimizer:name:Adam#使用Adam优化器lr:0.0001#学习率为0.0001weight_decay:0.00000002scheduler:#这个例子使用自定义的组合调度器,它由warmup和cosineannealing学习率组成,见Examples/APINet.pyName:''T_max:100#调度器的总迭代次数warmup_epochs:8#Theepochnumberofwarmuplr_warmup_decay:0.01#warmupdecay的比例criterion:name:APINetLoss#APINet使用的损失函数,见实验主程序Examples/APINet.py中的model/loss/APINet_loss.pyAPINetTrainer继承自Trainer,无需编写复杂的训练过程、logger、模型保存、配置加载等代码,只需根据需要修改部分模块即可。我们在训练阶段也提供了多个钩子,可以满足一些Method的具体实现。日志文件、模型权重文件、训练使用的训练代码、当时的配置文件都会保存在实验输出目录log_dir中。备份配置和训练代码,方便日后不同实验对比。更详细的例子可以参考项目链接中的具体信息:https://github.com/Hawkeye-FineGrained/Hawkeye