wordpress寫的文章代碼顯示方式seo網(wǎng)絡優(yōu)化師招聘
實時開放詞匯目標檢測(論文復現(xiàn))
本文所涉及所有資源均在傳知代碼平臺可獲取
文章目錄
- 實時開放詞匯目標檢測(論文復現(xiàn))
- 概述
- 模型框架
- 使用方式
- 配置環(huán)境
- 訓練和評估
- 訓練
- 評估
- 演示效果
- Gradio Demo
概述
YOLO-World是由騰訊人工智能實驗室于2024年1月31日發(fā)布的實時開放詞匯目標檢測模型,能夠在實時環(huán)境中跨越開放詞匯表識別對象,無需先前的訓練。傳統(tǒng)的目標檢測模型如YOLO由于依賴于預定義和訓練過的目標類別(閉集檢測),它在開放場景中的適用性受到了限制,例如,使用COCO數(shù)據(jù)集訓練的模型僅能識別80個不同的類別。為了應對固定詞匯檢測器的限制,開放詞匯目標檢測(OVD)的概念應運而生,旨在識別超出預先建立類別范圍之外的對象。
YOLO-World利用大量的圖像-文本對和基礎圖像進行訓練,以理解和響應各種提示,例如“穿著黑色褲子的人”。通過引入“提示-然后檢測”的方法論,YOLO-World避開了即時文本編碼的需要,而是利用用戶提示生成的離線詞匯來進行檢測。這種方法顯著降低了計算需求,允許靈活調整檢測詞匯,以滿足各種需求,而不會影響性能,從而拓展了模型在實際場景中的適用性。在LVIS這個具有挑戰(zhàn)性的數(shù)據(jù)集上,YOLO-World在V100上達到了35.4的AP和52的FPS,無論是精度和速度上都超越了以前SOTA的方法,如下圖所示
模型框架
上圖所示為YOLO-World的整體框架,主要包括了YOLO檢測器,Text Encoder,和RepVL-PAN(Re-parameterizable Vision-Language Path Aggregation NetWork)。與傳統(tǒng)檢測器不同的是,YOLO-World作為開集檢測器,需要使用文本作為輸入,Text Encoder首先會編碼輸入的文本,然后輸出Vocabulary embedding;之后Image Encoder(backbone)會編碼輸入圖像,或者說提取圖像特征,以獲得多尺度特征圖;RepVL-PAN(Vision-Language PAN)會利用圖像和文本特征的多層次跨模態(tài)進行融合;最后,YOLO-World會預測出回歸框和目標embedding,去匹配在輸入文本中的出現(xiàn)的類別或者名詞。
YOLO檢測器
YOLO-World 是基于YOLOv8開發(fā)出來的,它包含了Darknet的backbone作為圖像encoder,一個路徑聚合網(wǎng)絡(PAN)構建多尺度特征金字塔,以及一個輸出回歸邊界框和目標embedding的預測頭。
文本encoder
給定文本T,我們使用預訓練CLIP的Transformer text encoder抽取相關的文本embedding。CLIP的text encoder能夠提供更好的視覺-語義能力,使得視覺目標和文本相互連接。
文本對比頭(Text Contrastive Head)
使用了yolov8的解耦頭和倆個3×3卷積。因為要計算目標-文本的相似度,所以提出文本對比頭。為了穩(wěn)定區(qū)域-文本訓練,目標編碼e和文本編碼t使用L2-Norm。
在線詞匯表
在訓練過程中,為每個包含4幅圖像的馬賽克樣本構建一個在線詞匯表 。
離線詞匯表
提出了一種以“提示后檢測”的策略,使用離線詞匯以進一步提高效率。離線詞匯表,特指的是經(jīng)過encoder的embedding,也就是類別名,名詞短語和目標描述構成的特征矩陣。與之對應的是,在線詞匯則表示的不是embedding,在線詞匯指的是沒有經(jīng)過encoder編碼后的詞匯
RepVL-PAN
RepVL-PAN的內部結構如上圖所示。其中,文本引導的CSPLayer(T-CSPLayer),負責將語言信息注入圖像特征中;而圖像池化注意力Image Pooling Attention(I-Pooling Attention)則是負責強化具備圖像意識的text embedding,以進一步增強圖像特征與文本特征之間的交互,這可以提高開集能力的視覺語義表示。RepVL-PAN使用的和YOLOv8相似的特征融合結構,包括了自上而下和自下而上的路徑,使用了多尺度的圖像特征 {C3,C4,C5}搭建了特征金字塔 {P3,P4,P5}
使用方式
配置環(huán)境
創(chuàng)建python虛擬環(huán)境并激活虛擬環(huán)境
conda create -n yolov_world python=3.10
conda activate yolov_world
安裝依賴包
# 安裝pytorch
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
# 安裝其他依賴,這一步會比較久
pip install -e .
# 如果一直卡在Building wheel for mmcv就嘗試下面的兩個命令然后再重試
pip install -U openmim
mim install mmcv
訓練和評估
訓練
使用mmyolo默認的訓練腳本,位于configs/pretrain目錄下。注意:YOLO-World是在4個節(jié)點(每個節(jié)點配有8個GPU,總計32個GPU)上訓練的。
# 給腳本增加可執(zhí)行權限
chmod +x tools/dist_train.sh
# 訓練的示例命令,使用8個GPU,開啟AMP混合精度訓練
./tools/dist_train.sh configs/pretrain/yolo_world_l_t2i_bn_2e-4_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py 8 --amp
評估
使用mmyolo默認的評估腳本,位于configs/finetune_coco目錄下。主要在LVIS-minival數(shù)據(jù)集上評估預訓練模型的性能
# # 給腳本增加可執(zhí)行權限
chmod +x tools/dist_test.sh
# 評估的命令
./tools/dist_test.sh path/to/config path/to/weights 8
演示效果
python image_demo.py path/to/config path/to/weights image/path/directory 'person,dog,cat' --topk 100 --threshold 0.005 --output-dir demo_outputs
# 將path/to/config替換成配置文件的路徑,path/to/weights換成模型權重路徑,模型權重可以在https://huggingface.co/wondervictor/YOLO-World/tree/main中下載,注意配置文件和模型權重需要對應,image/path/directory換成自己要檢測圖像的路徑,'person,dog,cat' 換成自己感興趣的類別,運行成功后結果在demo_outputs下查看。
# python image_demo.py configs/pretrain/yolo_world_v2_m_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py ./yolo_world_v2_m_obj365v1_goldg_pretrain-c6237d5b.pth data/images 'person,dog,cat' --topk 100 --threshold 0.005 --output-dir demo_outputs
YOLO-World 框架允許通過自定義提示動態(tài)指定類別,使用戶能夠根據(jù)自己的特定需求定制模型,而無需重新訓練。通過設置自定義提示,用戶可以引導模型關注感興趣的對象,從而提高檢測結果的相關性和準確性。如將上面的’person,dog,cat’ 換成自己感興趣的類別。
(注:如果運行報錯:Incorrect path_or_model_id: ‘…/pretrained_models/clip-vit-base-patch32-projection’.將configs目錄下對應的配置文件(如上面的configs/pretrain/yolo_world_v2_m_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py )中第一個text_model_name注釋掉,第二個text_model_name取消注釋,從而自動從huggingface下載clip模型。)
Gradio Demo
在本地機器上運行web界面
pip install gradio==4.16.0 onnx onnxsim # 安裝依賴
python demo.py path/to/config path/to/weights
# python demo.py configs/pretrain/yolo_world_v2_m_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py ./yolo_world_v2_m_obj365v1_goldg_pretrain-c6237d5b.pth
運行成功然后在瀏覽器訪問http://127.0.0.1:8080可以看到下面的界面,左上方輸入檢測的圖片,下方的文本框輸入想檢測的類別,然后點擊submit就能在右邊生成檢測結果。下面可以調節(jié)一些參數(shù),如NMS Threshold等。還支持導出onnx模型
文章代碼資源點擊附件獲取