首頁  >  文章  >  科技週邊  >  基於PyTorch、易上手,細粒度影像辨識深度學習工具庫Hawkeye開源

基於PyTorch、易上手,細粒度影像辨識深度學習工具庫Hawkeye開源

WBOY
WBOY轉載
2023-04-12 20:43:031597瀏覽

細粒度影像辨識[1] 是視覺感知學習的重要研究主題,在智慧新經濟和工業互聯網等方面具有巨大應用價值,且在諸多現實場景已有廣泛應用… 鑑於當前領域內尚缺乏該方面的深度學習開源工具庫,南京理工大學魏秀參教授團隊用時近一年時間,開發、打磨、完成了Hawkeye——細粒度圖像識別深度學習開源工具庫,供相關領域研究人員和工程師參考使用。本文是對 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 或 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/data
wget https://data.caltech.edu/records/65de6-vp158/files/CUB_200_2011.tgz
mkdir 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# 图像增强前缩放的尺寸 256x256
model:
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

以上是基於PyTorch、易上手,細粒度影像辨識深度學習工具庫Hawkeye開源的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除