你有沒有這種經驗?在幾千張旅行照片中找一張特定的餐廳菜單,翻到眼睛都快瞎了。或者你是設計師,客戶說「幫我把那張圖裡面的藍色椅子換成紅色」,你得花半小時手動圈選那張椅子。

這種「在圖片中找出特定物體」的需求,以前只有專業人士用昂貴的標註軟體才能做到。但今天,NVIDIA 開源了一個超強模型——LocateAnything-3B,它只要一句話,就能在任意圖片中精準定位出你想要的任何東西。

而且它完全免費、開源、可以在你的電腦上跑。這篇文章會帶你從零開始,五分鐘內學會使用這個神級工具。準備好讓工作效率翻倍了嗎?

NVIDIA LocateAnything-3B 是什麼?為什麼它這麼強?

簡單來說,LocateAnything-3B 是一個「用自然語言找東西」的 AI 模型。你給它一張圖片,然後用文字描述你想找的物體,它就會回傳這個物體在圖片中的精確位置(用邊框框起來)。

你可能會說:「這不就是物件偵測嗎?YOLO、Faster R-CNN 早就有了。」

沒錯,傳統物件偵測模型確實能做類似的事,但它們有一個巨大的限制:只能偵測訓練時學過的類別。如果你訓練 YOLO 只學過「狗」、「貓」、「車子」,你想找「紅色馬克杯」,它就完全沒轍。你需要重新收集大量紅杯子的圖片、手動標註、重新訓練模型——整個流程可能耗時數天甚至數週。

LocateAnything-3B 完全不一樣。它屬於「開放詞彙物件偵測」(Open-Vocabulary Object Detection),意思是你不需要事先定義要找什麼。你只要用日常語言描述,它就能理解並找出對應物體。這是因為它背後結合了視覺編碼器和大型語言模型,讓它同時「看懂」圖片和「理解」文字。

根據 HuggingFace 上的數據,這個模型在過去一週內獲得了超過 1461 個讚、11 萬次下載,社群反應非常熱烈。而且它只有 30 億參數(3B),相較於動輒數百億參數的模型,它更輕量、更適合一般用戶在自己的 GPU 上運行。

如何在本機安裝與執行 LocateAnything-3B?

好,理論講完了,我們直接進入實戰。這部分我會一步步教你如何在你的電腦上跑起來。你需要一台有 NVIDIA GPU 的電腦(建議至少 8GB VRAM),或者你可以用 Google Colab 的免費 GPU 來跑。

步驟一:環境設定

首先,打開終端機(Terminal),建立一個新的 Python 虛擬環境:

python -m venv locate_env
source locate_env/bin/activate  # Mac/Linux
# 或
locate_env\Scripts\activate  # Windows

步驟二:安裝套件

安裝必要的套件。這裡我們用 HuggingFace 的 transformersaccelerate 來載入模型:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install transformers accelerate pillow matplotlib

步驟三:下載模型並執行推理

現在寫一個 Python 腳本。建立一個檔案叫 locate.py,貼上以下程式碼:

import torch
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from transformers import AutoModelForObjectDetection, AutoImageProcessor

# 載入模型和處理器
model_name = "nvidia/LocateAnything-3B"
processor = AutoImageProcessor.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForObjectDetection.from_pretrained(model_name, trust_remote_code=True)

# 載入圖片(請換成你自己的圖片路徑)
image = Image.open("your_photo.jpg").convert("RGB")

# 定義你要找的東西(用中文或英文都可)
prompt = "a red coffee mug on the table"  # 或 "桌子上的紅色馬克杯"

# 前處理
inputs = processor(images=image, text=prompt, return_tensors="pt")

# 推理
with torch.no_grad():
    outputs = model(**inputs)

# 後處理:取得邊框和信心分數
target_sizes = torch.tensor([image.size[::-1]])
results = processor.post_process_object_detection(
    outputs, target_sizes=target_sizes, threshold=0.3
)[0]

# 畫出結果
fig, ax = plt.subplots(1, 1, figsize=(12, 8))
ax.imshow(image)

for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
    box = box.tolist()
    x, y, w, h = box[0], box[1], box[2] - box[0], box[3] - box[1]
    rect = patches.Rectangle(
        (x, y), w, h, linewidth=2, edgecolor="r", facecolor="none"
    )
    ax.add_patch(rect)
    ax.text(x, y, f"{prompt}: {score:.2f}", color="white", fontsize=10,
            bbox=dict(facecolor="red", alpha=0.5))

plt.axis("off")
plt.savefig("result.jpg", bbox_inches="tight")
print("結果已儲存為 result.jpg")

步驟四:執行腳本

python locate.py

第一次執行的時候,它會自動下載模型(約 6GB),所以請確保網路穩定。下載完成後,程式會讀取你的圖片,找出符合描述的物體,並在圖片上畫出紅色邊框,最後儲存為 result.jpg

實戰案例:假設你是一位香港的室內設計師,客戶給了你一張參考圖片說「我想要這個空間裡面的那盞吊燈」。你只需要把圖片餵給模型,輸入「吊燈」或「hanging lamp」,它就會精準框出吊燈的位置。你再也不需要手動用 Photoshop 慢慢圈選。

進階技巧:如何用 LocateAnything-3B 批次處理大量圖片?

如果你有數百張產品照片,想要自動找出每一張中的特定物體(例如「公司的logo」或「產品上的瑕疵」),逐張執行上面的腳本顯然太慢。我們可以寫一個批次處理腳本。

建立 batch_locate.py

import os
import torch
from PIL import Image
from transformers import AutoModelForObjectDetection, AutoImageProcessor
import json

model_name = "nvidia/LocateAnything-3B"
processor = AutoImageProcessor.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForObjectDetection.from_pretrained(model_name, trust_remote_code=True)

# 設定圖片資料夾和輸出檔案
image_folder = "images/"
output_file = "results.json"
prompt = "product logo"  # 你要找的物體

results_list = []

for filename in os.listdir(image_folder):
    if filename.lower().endswith((".jpg", ".png", ".jpeg")):
        image_path = os.path.join(image_folder, filename)
        image = Image.open(image_path).convert("RGB")

        inputs = processor(images=image, text=prompt, return_tensors="pt")
        with torch.no_grad():
            outputs = model(**inputs)

        target_sizes = torch.tensor([image.size[::-1]])
        results = processor.post_process_object_detection(
            outputs, target_sizes=target_sizes, threshold=0.3
        )[0]

        for score, box in zip(results["scores"], results["boxes"]):
            results_list.append({
                "image": filename,
                "bbox": box.tolist(),
                "score": float(score)
            })

with open(output_file, "w") as f:
    json.dump(results_list, f, indent=2)

print(f"處理完成,結果儲存於 {output_file}")

這個腳本會掃描 images/ 資料夾中的所有圖片,找出你指定的物體,並將每個物體的位置(邊框座標)和信心分數輸出成 JSON 檔案。你可以把這個 JSON 餵給其他程式做後續處理,例如自動裁切出產品圖片。

台灣電商實例:一位蝦皮賣家上架了 500 件商品,每件商品都有多張照片。他想統一找出所有照片中的「價格標籤」來檢查價格是否正確。使用這個批次腳本,設定 prompt 為「價格標籤」或「price tag」,幾分鐘內就能得到所有標籤的位置,再配合 OCR 工具自動讀取價格數字,整個流程自動化。

常見問題

Q: 我的電腦只有 CPU,沒有 GPU,可以跑 LocateAnything-3B 嗎? A: 可以,但速度會非常慢。模型有 30 億參數,在 CPU 上推論一張圖片可能需要數分鐘。建議使用 Google Colab 的免費 GPU(T4 約 16GB VRAM),或者租用雲端 GPU 服務。如果一定要在本地 CPU 跑,可以考慮使用量化版本(如 GGUF 格式),但官方目前尚未提供。

Q: 模型支援中文輸入嗎? A: 支援。LocateAnything-3B 的底層語言模型支援多語言,包括繁體中文。你可以直接用「紅色馬克杯」、「桌上的手機」等中文描述。不過,英文的準確度通常略高一些,建議中英混用或優先使用英文。

Q: 為什麼我的模型找不到物體? A: 最常見的原因是信心門檻(threshold)設太高。程式碼中設為 0.3,你可以調低到 0.1 試試。另外,你的描述要夠精確。例如找「狗」可能不夠,試試「黃金獵犬」或「趴在沙發上的狗」。圖片品質也很重要,模糊或光線不足的圖片會降低準確率。

Q: 這個模型可以商用嗎? A: NVIDIA LocateAnything-3B 採用 NVIDIA Open Model License,允許商業使用。但請注意,你必須遵守授權條款,包括標註來源。建議在使用前閱讀 HuggingFace 模型頁面上的完整授權協議。

Q: 它跟 SAM(Segment Anything Model)有什麼不同? A: SAM 是「分割」模型,它會把圖片中的物體輪廓精確圈出來(像素級別),但你需要給它一個點或邊框作為提示。LocateAnything-3B 是「偵測」模型,它用文字描述作為提示,回傳的是物體的邊框(bounding box)。兩者可以搭配使用:先用 LocateAnything-3B 找出物體位置,再用 SAM 進行精確分割。

延伸閱讀

總結

NVIDIA LocateAnything-3B 是一個改變遊戲規則的工具。它讓「用一句話在圖片中找到任何東西」變成現實,而且完全開源免費。無論你是設計師、電商賣家、攝影師,還是只是想在照片堆中快速找到回憶,這個模型都能幫你省下大量時間。

今天的教學中,你學會了:

  1. LocateAnything-3B 的核心原理與傳統物件偵測的差異
  2. 如何在本機安裝並執行單張圖片定位
  3. 如何批次處理大量圖片,將結果輸出為 JSON 格式

現在就打開你的電腦試試吧!找一張你最喜歡的照片,輸入一個你一直想找的東西,看看 AI 能不能一秒幫你定位出來。相信我,當你看到那條紅色邊框精準框住目標的那一刻,你會感受到科技帶來的真正感動。

如果你在實作中遇到任何問題,歡迎在下方留言,我們一起討論解決方案。

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "我的電腦只有 CPU,沒有 GPU,可以跑 LocateAnything-3B 嗎?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "可以,但速度會非常慢。模型有 30 億參數,在 CPU 上推論一張圖片可能需要數分鐘。建議使用 Google Colab 的免費 GPU(T4 約 16GB VRAM),或者租用雲端 GPU 服務。如果一定要在本地 CPU 跑,可以考慮使用量化版本(如 GGUF 格式),但官方目前尚未提供。"
      }
    },
    {
      "@type": "Question",
      "name": "模型支援中文輸入嗎?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "支援。LocateAnything-3B 的底層語言模型支援多語言,包括繁體中文。你可以直接用「紅色馬克杯」、「桌上的手機」等中文描述。不過,英文的準確度通常略高一些,建議中英混用或優先使用英文。"
      }
    },
    {
      "@type": "Question",
      "name": "為什麼我的模型找不到物體?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "最常見的原因是信心門檻(threshold)設太高。程式碼中設為 0.3,你可以調低到 0.1 試試。另外,你的描述要夠精確。例如找「狗」可能不夠,試試「黃金獵犬」或「趴在沙發上的狗」。圖片品質也很重要,模糊或光線不足的圖片會降低準確率。"
      }
    },
    {
      "@type": "Question",
      "name": "這個模型可以商用嗎?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "NVIDIA LocateAnything-3B 採用 NVIDIA Open Model License,允許商業使用。但請注意,你必須遵守授權條款,包括標註來源。建議在使用前閱讀 HuggingFace 模型頁面上的完整授權協議。"
      }
    },
    {
      "@type": "Question",
      "name": "它跟 SAM(Segment Anything Model)有什麼不同?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "SAM 是「分割」模型,它會把圖片中的物體輪廓精確圈出來(像素級別),但你需要給它一個點或邊框作為提示。LocateAnything-3B 是「偵測」模型,它用文字描述作為提示,回傳的是物體的邊框(bounding box)。兩者可以搭配使用:先用 LocateAnything-3B 找出物體位置,再用 SAM 進行精確分割。"
      }
    }
  ]
}