你有沒有這種經驗?在幾千張旅行照片中找一張特定的餐廳菜單,翻到眼睛都快瞎了。或者你是設計師,客戶說「幫我把那張圖裡面的藍色椅子換成紅色」,你得花半小時手動圈選那張椅子。
這種「在圖片中找出特定物體」的需求,以前只有專業人士用昂貴的標註軟體才能做到。但今天,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 的 transformers 和 accelerate 來載入模型:
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 是一個改變遊戲規則的工具。它讓「用一句話在圖片中找到任何東西」變成現實,而且完全開源免費。無論你是設計師、電商賣家、攝影師,還是只是想在照片堆中快速找到回憶,這個模型都能幫你省下大量時間。
今天的教學中,你學會了:
- LocateAnything-3B 的核心原理與傳統物件偵測的差異
- 如何在本機安裝並執行單張圖片定位
- 如何批次處理大量圖片,將結果輸出為 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 進行精確分割。"
}
}
]
}