細粒度影像辨識[1] 是視覺感知學習的重要研究主題,在智慧新經濟和工業互聯網等方面具有巨大應用價值,且在諸多現實場景已有廣泛應用… 鑑於當前領域內尚缺乏該方面的深度學習開源工具庫,南京理工大學魏秀參教授團隊用時近一年時間,開發、打磨、完成了Hawkeye——細粒度圖像識別深度學習開源工具庫,供相關領域研究人員和工程師參考使用。本文是對 Hawkeye 的詳細介紹。
Hawkeye 是一個基於 PyTorch 的細粒度圖像識別深度學習工具庫,專為相關領域研究人員和工程師設計。目前,Hawkeye 包含多種代表性範式的細粒度識別方法,包括“基於深度濾波器”、“基於注意力機制”、“基於高階特徵交互”、“基於特殊損失函數”、“基於網路數據”以及其他方法。
Hawkeye 專案程式碼風格良好,結構清晰易讀,可拓展性較強。對於剛接觸細粒度影像辨識領域的相關人員而言,Hawkeye 較易上手,便於其理解細粒度影像辨識的主要流程和代表性方法,同時也方便在本工具庫上快速實現自己的演算法。此外,我們也提供了庫中各模型的訓練範例程式碼,自研方法也可依範例快速適配並新增至 Hawkeye 中。
Hawkeye 開源程式庫連結:https://github.com/Hawkeye-FineGrained/Hawkeye
Hawkeye 目前支援細粒度圖像辨識中主要學習範式的共16 個模型與方法,如下:
基於深度濾波器
基於注意力機制
#基於高階特徵交互作用
基於特殊損失函數
基於網路資料
Peer-Learning (ICCV 2021)
其他方法
NTS-Net (ECCV 2018)
CrossX (ICCV 2019)
DCL (CVPR 2019)
##安裝依賴
使用conda 或pip 安裝相關依賴:準備資料集
我們提供了8 個常用的細粒度辨識資料集及最新的下載連結: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/cub4.使用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中文網其他相關文章!