Posted on

OpenAI Playground介紹

什麼是OpenAI Playground

教學文件:

https://platform.openai.com/docs/overview

OpenAI Playground(OpenAI 遊樂場)是OpenAI提供的一個線上平台,用於演示和測試他們的自然語言處理模型,例如GPT-3.5(本模型的基礎)。它允許用戶與模型進行互動,輸入文本並獲得模型的自動回應,以便演示其自然語言處理能力

OpenAI Playground通常用於展示GPT-3及其他相關模型的功能,並讓開發者和研究人員評估這些模型的效能以及探索其應用潛力。用戶可以在Playground上提出各種問題,構建對話,生成文字,從而了解模型如何處理不同的輸入。

此外,OpenAI Playground也提供一個用戶友好的界面,讓用戶可以輕鬆嘗試GPT-3及相關模型的能力,而無需自行設定或編程。這對於探索自然語言處理的應用,以及將這些模型集成到不同的應用中都非常有用。

在OpenAI Playground體驗與模型的互動

Playground 的完整版介面,可以提供各種模式和參數,通過調整無數其他可自定義選項來增強用戶體驗。在對話框的部分也可以使用語音輸入,或者上傳既有的語音檔,使用OpenAI語音轉文字的功能提供資料給Playground

下面是這個介面的一些功能

  1. 輸入現有文本供AI編輯:輸入一段現有的文本,然後要求模型對其進行編輯、修改或擴展。這讓您可以看到模型如何處理和改進您提供的文本,並且可以用於文本編輯和生成的場景。
  2. 使用溫度控制響應的隨機性: 溫度控制是一個重要的參數,它允許您調整模型生成文本的隨機性。較高的溫度值將增加生成文本的隨機性,而較低的溫度值將使生成文本更加確定和一致。這使得用戶可以根據需要調整生成文本的多樣性。
  3. 調整頻率以控制其相應的重複程度: 您可以使用不同的方法來調整生成文本中重複內容的頻率。這可以通過調整模型的參數來實現,以使生成的文本在某些情況下更具多樣性,或者在其他情況下更加一致。這樣,您可以根據具體的應用需求來調整生成文本的重複性。

這些功能和選項使用戶可以更好地控制模型的生成行為,以滿足不同的用例和需求。這使得OpenAI Playground成為一個有用的工具,用於測試、探索和改進自然語言處理應用,並理解模型的行為。

使用OpenAI語音轉文字功能

切到完整功能並且按麥克風的圖案,就可以上傳語音檔案,並使用Whisper轉成文字,這個功能已經開源了

OpenAI Playground的核心特性

支持多種型號的模型

OpenAI API 由具有不同功能和價格點的多種模型提供支援。您也可以透過微調,針對您的特定用例對我們的模型進行客製化

MODELDESCRIPTION
GPT-4 and GPT-4 Turbo一組改進 GPT-3.5 的模型,可以理解並產生自然語言或程式碼
GPT-3.5一組改進 GPT-3 的模型,可以理解並產生自然語言或程式碼
DALL·E
可以在自然語言提示下產生和編輯圖像的模型
TTS一組可以將文字轉換為聽起來自然的語音的模型
Whisper可以將音訊轉換為文字的模型
Embeddings一組可以將文字轉換為數字形式的模型
Moderation可以偵測文字是否敏感或不安全的微調模型
GPT base一組無需遵循指令即可理解並產生自然語言或程式碼的模型
Deprecated已棄用的型號的完整清單以及建議的替代品

我們也發布了開源模型,包括 Point-EWhisperJukeboxCLIP.

Posted on

免程式碼將ChatGPT串接到LINE對話

使用工具 – FancyAI

FancyAI網址: https://www.fancyai.co/

可輕鬆使用GPT大語言模型知識庫,介面化匯入文件(PDF, CSV, TXT)或網址,讓FANCY AI迅速掌握您的知識進行問答。只需30秒,即可與LINE官方帳號整合,建立分享知識Bot連結。更有視覺化的工作流程編排和對話紀錄功能!

AI大模型問答介面,可設定你專屬AI回答流程

FANCY AI 能力

  • AI ChatGPT知識客服: 結合你自己專屬知識,ChatGPT 24/7 的為您的用戶服務
  • 超快速精準匯入處理:自動分段,輸入,拆成問答,多種方式讓您處理的數據 (支持PDF,CSV,TXT,網址)
  • 簡單直覺操作AI大模型問答介面:讓你設定你專屬AI回答流程,可以自訂預設開場白,選擇性問題,個性化你的AI
  • 30秒串接好LINE官方帳號,分享連結:結合你的知識庫,LINE官方帳號直接用ChatGPT不間斷服務。

步驟一、創建OpenAI開發者使用的密鑰

首先要去你的OpenAI開發者平台,創建你的API Keys: https://platform.openai.com/api-keys。這樣其他應用程式才可以呼叫你的OpenAI帳號下的API(然後扣你的錢)

接著就是要付款給OpenAI,點此付款: https://platform.openai.com/account/billing/overview。單次可購買$5~$95美金(也就是最低約150左右)

OpenAI的API使用需要付費,價格資訊如下: https://openai.com/pricing

由上圖可知道,OpenAI的API計費單位為Token,下面會解釋甚麼叫做Token,也可以線上去測試某段文字的Token數量是多少,可以更精準地了解可能的花費。

可選擇模型的比較

甚麼是Token

在 API 處理提示之前,輸入會被分解為Tokens 。這些Tokens並未準確地在單字開始或結束的位置進行切割 – Tokens可以包含尾隨空格甚至子單字。

以下是一些幫助理解Token長度的有用經驗規則:

  • 1 個標記 ~= 4 個英文字符
  • 1 個令牌 ~= 3/4 個單字
  • 100 個標記 ~= 75 個單字
  • 1-2 句 ~= 30 個標記
  • 1 段 ~= 100 個標記
  • 1,500 個單字 ~= 2048 個標記

Token切割測試工具: https://platform.openai.com/tokenizer

步驟二、創建Line Bot帳號並為串接做準備

首先要申請一個Line API串接的開發者帳號: https://developers.line.biz/console/

創建帳號流程如下:

設定你的LINE BOT帳號為使用Webhook

接著這邊是在分享時未設定的部分,就是把預設的固定回復關掉,開啟 LINE Official Account Manager

打開Webhook並且關閉自動回應訊息,這樣所收到的訊息才會傳到我們的API裡面

步驟三、創建FancyAI帳號

創建帳號之後,首先要把帳號和你的OpenAI綁定,點OpenAI帳號後,把剛剛第一步驟創建的Key貼進去,這樣FancyAI才能夠呼叫你的OpenAI API

Fancy AI: https://www.fancyai.co/

新建一個應用,選擇簡單對話

設定與Line的串接 – 設定API秘鑰

Line Channel Access Token: 瀏覽剛剛創建的Line帳號的頁面MessageAPI -> Channel access token -> Issue將出現的字串複製進去

Line Channel Secret位於Basic settings下方

接著告訴Line要API的webhook位置: 選擇”應用>你的應用名字>Line API”

把這邊的webhook網址貼到剛剛LINE Developer的webhook設定位置

接著就可以測試你的機器人囉!!

Posted on

讓你的ChatGPT更強大 – PDF分析

讓ChatGPT可以上傳、分析PDF的好工具

這個工具可以讓ChatGPT可以閱讀內容很長的PDF檔案,而且不用Plus也可以使用,可以讓使用者就PDF的內容來發問,CHATGPT會依照PDF的內容來回答

現在有人開發了AI PDF的工具,也可以嘗試看看: https://chat.openai.com/g/g-V2KIUZSj0-ai-pdf

但是這個工具一定要付費的ChatGPT Plus才可使用,所以如果沒有Plus的人,可以使用下面的Chrome插件的方式

Chrome插件下載

ChatGPT Sidebar & File Uploader

啟用之後你的ChatGPT會增加上傳檔案的按鈕(非Plus用戶也可以唷!)

設定外掛

至下列網址設定外掛行為: chrome://extensions/

如果沒有設定的話,這個的Sidebar在每個站都會有,我在這邊讓他只能夠影響到ChatGPT這個站,下面的三個開關則請憑自己的喜好去設定

設定PDF檔案內容分段的prompt

這邊我是建議要改用中文來寫,不然他回答都會一直是英文,後面問答用中文問的效果也會很差,但一開始prompt就用中文下的話,回答的內容都還算正確

下面是我設定的值

Single Part Prompt

#zh-TW
下面是文件完整的資訊,請幫我做此文件資料的總結

Multi Part First Prompt

#zh-TW
我所分享的此份文件會被分成很多個部分,請等待我輸入所有部分,接著再做全部資料的總結,在這之前,請單單回應 “了解,我會等待其餘的部分輸入”

Multi Part Consecutive Prompts

#zh-TW
這是此份文件分段的其中一部份,請回應”了解,我會等待其餘部分的輸入”

Last Part Prompt

#zh-TW
這是最後一部分,請仔細地觀看全部的文件,在之後的問題中,回應我這份文件的相關資訊 ,請單單回應 “了解,我會整理從第一部份至最後一部分的資訊”

設定分段的長度

這邊可視你的ChatGPT的版本來設定,一般來說,就是Token長度,不可以超過長度上限

特點/模型Bard (Google)ChatGPT (OpenAI)ChatGPT Plus (OpenAI)Bing (Microsoft)Claude (Anthropic)
上下文窗口 長度(Token)32K4K8K8K100K
推理能力不錯最佳最佳不明不錯
網路連接功能原生支持網路搜尋無法讀取網頁需連至Bing取得網頁內容所有用戶可用的連接功能無法讀取網頁
多模態能力支持文字、圖像、語音輸入支持圖像、語音及文字輸入,以及圖像、文字、檔案輸出支持文字輸入,圖像、文字輸出支持PDF等檔案的文字讀取
建議用途圖像辨識初次接觸者皆可資訊搜尋長文PDF摘要
費用免費免費每月$20美金免費免費
主要用途研究、資料分析、聊天程式碼開發、聊天多模態及與其他服務的串接應用網路搜尋、聊天研究、分析
Posted on

讓你的ChatGPT更強大 – Zapier AI Actions

Zapier是甚麼

Zapier 是一個無需編寫代碼的自動化工具,用於連接和自動化不同應用程序。它允許你創建自動化工作流程(Zaps),觸發事件(如新郵件)將啟動操作(如將附件上傳到雲端硬盤),提高生產力並節省時間。 Zapier 支持數千種應用程序,包括常見的工作工具、社交媒體和電子郵件服務。

在ChatGPT Plus使用API連接Zapier可以做到甚麼

與其他應用程式連動 – 通訊錄

與其他應用程式連動 – 日曆

與其他應用程式連動 – Gmail

如何建立連動

首先,你一定要付費成為ChatGPT Plus會員,這樣才會能夠在你的ChatGPT裡面串接外部API

接著,建立一個你自己專屬的My GPTs,選擇Create a GPT

接著,這邊有詳細的設定教學(https://actions.zapier.com/docs/platform/gpt)

首先,複製這串網址

https://actions.zapier.com/gpt/api/v1/dynamic/openapi.json?tools=meta

選擇最下面的Create new action,接著選擇Import from URL,把剛剛的網址貼上去

設定Zapier方的權限

這邊的設定就和ChatGPT本身無關,而是Zapier這邊的權限控管,如果ChatGPT的這個對話功能不會只有自己使用的話,也要教所有使用者如何允許ChatGPT去存取他的Zapier帳號

提供配置 URL

我們為您提供了一個支援自然語言參數的網址,供您在 GPT 中使用,您可以在其中指定操作名稱,也可以選擇包含特定欄位值詳細資訊。使用 https://actions.zapier.com/gpt/start 作為基礎。

它支援兩個可選的查詢參數:

  • setup_action 與操作名稱
  • setup_params 用於欄位指令(提供某些欄位值,例如進行 AI 猜測,或說不包含某些欄位)

例如,下面的連結將為 Google 日曆尋找電子郵件設定新操作,並將開始時間和結束時間欄位設為讓 AI 猜測.立即嘗試此處或造訪此網址:

https://actions.zapier.com/gpt/start?setup_action=google calendar find event&setup_params=set have AI guess for Start and End time

把下面的文字加入ChatGPT的Instructions欄位裡面,教導GPT如何引導使用者去開啟Zapier權限

###Rules:
- 在操作之前,我需要確認您是否已登入並設定了 Zapier 的 AI Actions。這是進行下一步所必需的。
- 假入已經登入的話,開始下面的步驟

###Instructions for Zapier Custom Action:
Step 1. 我將首先檢查您是否擁有完成此請求所需的 Zapier AI Actions。我會呼叫 /list_available_actions/ 來列出可用的操作。 假如REQUIRED_ACTION可以在AVAILABLE ACTIONS之中找到的話,則到Step 4,否則則到Step 2。

Step 2. 如果所需的操作不可用,我將向您發送所需操作的配置連結。您需要根據該連結配置 Zapier AI Action,並在完成後通知我。

Step 3. 一旦您確認已配置所需的操作,我將繼續處理您的原始請求。

Step 4. 使用在/list_available_actions/ 的JSON 回應中傳回的id 欄位(在results 陣列中),我將填寫運行操作所需的字串。我將根據您的請求填寫指令和任何其他必要的欄位。 

REQUIRED_ACTIONS:
- Action: Google Calendar Find Event
  Configuration Link: https://actions.zapier.com/gpt/start?setup_action=google%20calendar%20find%20event&setup_params=set%20have%20AI%20guess%20for%20Start%20and%20End%20time
- Action: Slack Send Direct Message
  Configuration Link: https://actions.zapier.com/gpt/start?setup_action=Slack%20Send%20Direct%20Message

日曆功能的GPT 演示

實驗心得

這個Action應該非常花費額度, 因為我的Plus沒呼叫幾個Action就會額度用完了,而且在呼叫Action的時候,或許是驗證問題,或許是額度不足失敗問題,會導致很多機會沒辦法照著我們的想法去走。

但是在ChatGPT內可以串接自己的API連接到自己的網站功能裡,真的非常強大,很期待日後系統越來越穩定,功能越來越健全後此功能的可能未來性

參考資料

Create custom versions of ChatGPT with GPTs and Zapier

AI Actions

Posted on

YOLOv8使用範例

建模的範例

先用下面指令安裝好所需的套件

pip install ultralytics

然後在Roloflow下載要訓練的素材集,選擇YOLOv8

把裡面的資料(含data.yaml)解壓縮在同層資料夾下,如圖

接著直接執行下面的程式,yolov8會自動下載所需要的yolov8.yamlyolov8n.pt

import multiprocessing
import os
from ultralytics import YOLO
os.environ['CUDA_LAUNCH_BLOCKING'] = '1'

def my_function():
    model = YOLO('yolov8.yaml').load("yolov8n.pt")
    # Train the model
    model.train(data='./data.yaml', epochs=300, imgsz=640)
    model.val(data="./data.yaml")

if __name__ == '__main__':
    multiprocessing.freeze_support()  # Optional, if you're freezing the script
    my_function()

這時候會出現錯誤如下,因為資料集放在哪邊也是剛剛才自動下載的,所以我們要打開一下這個設定檔案,設定一下我們的資料集的正確位置(datasets_dir)

看到這些訊息就代表成功的開始建模型囉!

模型使用範例

重點是在這行

model = YOLO('best.pt')

這行在載入我們建好的模型

results = model(image, show=False, verbose=False)

model這個預測方法有很多可控制的參數,例如要不要直接秀出圖片、要不要存圖片等等

YOLOv8非常貼心的是在於說,其吐出的物件如result,只要print這個物件,就會有非常詳細的結構和屬性意義教學,在開發上非常的方便

import VideoStream
import cv2
import numpy as np
from ultralytics import YOLO


videostream = VideoStream.VideoStream((1280, 720), 30, 0).start()
cam_quit = 0
model = YOLO('best.pt')
# 繪製邊框和標籤
def detect(image):
    results = model(image, show=False, verbose=False)
    # Show the results
    result = list(results)[0]
    for i in range(len(result.boxes)):
        r = result[i].boxes
        cls = int(r.cls[0].item())
        xywh = r.xywh[0].tolist()
        x_center, y_center, width, height = [int(x) for x in xywh[:4]]
        if width < 100 and height < 100:
            x1 = int(x_center - (width / 2))
            y1 = int(y_center - (height / 2))
            x2 = x1 + width
            y2 = y1 + height
            cv2.rectangle(image, (x1, y1), (x2, y2), (0, 0, 255), 3)
            cv2.putText(image, result.names[cls], (x1, y1), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 255), 1, cv2.LINE_AA) 

while cam_quit == 0:
    imageSource = videostream.read()
    imageSource = cv2.resize(imageSource, (960, 540))
    detect(imageSource)
    cv2.imshow("image", imageSource)
    key = cv2.waitKey(1) & 0xFF
    if key == ord("q"):
        cam_quit = 1

videostream.stop()
cv2.destroyAllWindows()

Posted on

pyav介紹

甚麼是pyav

PyAV是FFmpeg的Python封裝,旨在提供底層庫的全部功能和控制,同時盡可能管理繁瑣的細節。PyAV用於直接和精確地訪問媒體,包括容器、流、封包、編解碼器和幀。它還提供了一些數據轉換功能,並幫助您在其他程序之間傳送數據(例如Numpy和Pillow)。

然而,由於媒體處理非常複雜,PyAV無法完全抽像或為您做出所有最佳決策。 如果FFmpeg命令可以滿足您的需求,那麼PyAV可能會成為阻礙。 但在必要時,PyAV是一項關鍵工具。安裝PyAV可能有一些複雜的依賴關係,但現在可以在PyPI上找到針對Linux、Mac和Windows的二進位安裝套件。

官方網站: https://pyav.org/docs/stable/

GitHub位置: https://github.com/PyAV-Org/PyAV

建議使用場景

pyAVffmpeg 都是用來處理影音的工具,但它們的使用場景和方法有所不同。以下是對兩者的比較,以及根據不同情境的建議:

  1. 使用介面
    • pyAV:是一個 Python 函式庫,允許開發者使用 Python 語言來操作影音資料。
    • ffmpeg:是一個命令行工具,通常被用於進行批量處理或在沒有 Python 環境的系統上執行。
  2. 易用性和彈性
    • pyAV:由於是 Python 函式庫,使用者可以利用 Python 語言的所有特性來進行更複雜的操作,比如條件式處理、迴圈等。這使得對於需要更細緻操作的場景,例如資料分析、特定範圍的編輯等,pyAV 更有優勢。
    • ffmpeg:對於直接和簡單的影音轉換、剪裁、合併等操作,ffmpeg 的命令行界面非常適用。它能夠快速完成大部分的基本任務。
  3. 整合和擴展性
    • 如果你正在開發一個 Python 應用程序,並且希望直接在程式中處理影音,那麼 pyAV 可能是更好的選擇。
    • 如果只是簡單的一次性任務,或者需要在不同的平台或系統上腳本化影音處理,那麼 ffmpeg 可能更為適合。

結論

  • 如果你是 Python 開發者,且希望在程式中進行複雜的影音操作,那麼 pyAV 是個不錯的選擇。
  • 如果你只需要執行基本的影音轉換、剪裁或合併等操作,且希望能在多種平台上快速執行,那麼直接使用 ffmpeg 命令行工具可能更加適合。

安裝方法

使用以下方式安裝(如果下面的指令失敗的話,請參考此頁面安裝: https://pyav.org/docs/stable/overview/installation.html)

pip install av

後來我是使用下面這方法安裝成功的(windows)

pip install av --no-binary av
git clone https://github.com/PyAV-Org/PyAV.git
cd PyAV-main
python setup.py build --ffmpeg-dir=C:\ffmpeg

簡單的拉取RTMP源流的範例

以下的範例會拉取rtmp://127.0.0.1/live/testStream並使用OpenCV的函數顯示影像在視窗裡

import av
import cv2
import numpy as np
import os
import signal

def exit(*args,**kwargs):
    os.kill( os.getpid(), 9 )
signal.signal(signal.SIGINT,exit)

print('opening video...')
video = av.open('rtmp://127.0.0.1/live/testStream', 'r')

print('start streaming')
try:
    for packet in video.demux():
        for frame in packet.decode():
            if packet.stream.type == 'video':
                img = frame.to_ndarray(format='bgr24')
                cv2.imshow("Test", img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
except KeyboardInterrupt:
    print(KeyboardInterrupt)
    pass
cv2.destroyAllWindows()
Posted on

Segment Anything研究筆記

Segment Anything介紹

論文網址: https://arxiv.org/pdf/2304.02643.pdf

GitHub地址: https://github.com/facebookresearch/segment-anything

這份內容介紹了「Segment Anything」(SA)計畫,它包括了一個新的圖像分割任務、模型和數據集。使用高效的模型,在數據收集過程中建立了迄今為止最大的分割數據集,擁有超過10億個遮罩和1100萬張的圖像。這個模型設計和訓練成可提示,因此它可以進行zero-shot轉移到一系列任務,通過提示工程(prompt)實現。模型的zero-shot性能印象深刻,通常與或優於以前的完全監督結果競爭。他們公開了「Segment Anything Model」(SAM)和相應的數據集(SA-1B),以促進計算機視覺基礎模型的研究。

SAM模型由圖像編碼器、提示編碼器和遮罩解碼器三個組件組成,旨在實現高效運行和實時互動提示。數據引擎包括三個階段,從手動標註到半自動標註,最後實現完全自動生成遮罩。最終數據集SA-1B包括1100萬張高分辨率圖像和10億多個高質量分割遮罩,可供未來計算機視覺基礎模型的研究使用。該數據集的質量經過詳細分析,結果顯示自動生成的遮罩質量很高。

此外,文中還提到了有關模型效能、數據集特性以及公平性考這份內容介紹了「Segment Anything」(SA)計畫,它包括了一個新的圖像分割任務、模型和數據集。使用高效的模型,在數據收集過程中建立了迄今為止最大的分割數據集,擁有超過10億個遮罩和1100萬張許可和隱私尊重的圖像。這個模型設計和訓練成可提示,因此它可以進行零-shot轉移到一系列任務,通過提示工程實現。模型的零-shot性能印象深刻,通常與或優於以前的完全監督結果競爭。他們釋放了「Segment Anything Model」(SAM)和相應的數據集(SA-1B),以促進計算機視覺基礎模型的研究。

此外,文中還提到了有關模型效能、數據集特性以及公平性考慮的討論。該計畫的目標是促進基礎模型的發展,以應對圖像分割等廣泛的計算機視覺問題。整體來說,這個計畫提供了一個重要的資源,用於研究和開發計算機視覺基礎模型。

Segment Anything做了甚麼

1. 啟示來源:

  • 啟發自NLP的標記預測任務,並考慮如何為分割任務設計基礎模型

2. 定義分割任務:

  • 基於NLP的提示概念,SAM將其轉化為分割。提示可以是前景/背景點、粗略框、遮罩、或自由文本
  • 任務目標是根據給予的提示返回有效的分割遮罩。即使提示模糊,輸出仍應是合理的遮罩。

3. 預訓練策略:

  • 透過模擬各類提示序列進行預訓練,並將模型預測的遮罩與實際情況對照。
  • 即使遇到歧義的情境,如衣服與人的示例,模型仍應該能提供有效的遮罩。

4. 零樣本轉移:

  • 預訓練賦予模型根據不同提示進行推理的能力。
  • 通過工程化特定的提示,例如使用邊界框檢測器,可以解決具體的下游分割任務。

5. 分割的多面性:

  • 分割技術包括互動分割、邊緣檢測、超像素化等多種方法。
  • 本研究旨在產生一通用模型,可以適應多數分割任務,並透過提示工程來達成。

6. 與多任務分割的區別:

  • 傳統的多任務分割模型針對一組固定任務訓練,但SAM的模型在推理階段可以適應和執行不同的任務

7. 深入討論:

  • 提示和組合提供了一種策略,使模型更具擴展性,能夠完成許多不同的任務。
  • 透過組合的策略,模型可以作為更大系統的一部分進行運作,例如結合現有的對象檢測器進行實例分割。
從這個圖可以看出,SAM可以從同一個點的提示輸入,對照至多個不同的輪廓,這可以讓模型更具擴展性,藉由後續的訓練和組合完成更多不同的任務

Segment Anything Model (SAM) 簡介

SAM 是為了可以應對提示的分割而設計的模型。它主要包含三個組件:

  1. 圖像編碼器(image encoder):基於擴展性和強大的預訓練方法,SAM使用經過預訓練的Vision Transformer (ViT) 來適應處理高分辨率的輸入。該圖像編碼器每張圖片只運行一次,可以在對模型給出提示之前先運行。
  2. 提示編碼器(prompt encoder):SAM考慮兩組提示:稀疏(如點、框、文本)和密集(如遮罩)。SAM使用位置編碼來表示點和框,並為每種提示類型加上學到的嵌入;自由形式的文本則使用CLIP的文本編碼器。對於密集的提示(即遮罩),SAM使用卷積來嵌入它,並與圖像嵌入進行元素級的相加。
  3. 遮罩解碼器(mask decoder):該解碼器有效地映射圖像嵌入、提示嵌入以及輸出令牌到一個遮罩。在經過兩個解碼器區塊後,SAM放大圖像嵌入,然後使用一個MLP將輸出令牌映射到一個動態線性分類器,進而計算每個圖像位置上的遮罩前景概率。
這張圖展示了SAM模型的整體流程。一個高效的圖像編碼器會輸出一個圖像嵌入(表示),然後可以被各種不同的輸入提示有效地查詢,以實時的速度產生物體的遮罩。對於對應多於一個物體的模糊提示,SAM能夠輸出多個合法的遮罩以及相關的信心分數。

解決模糊性:對於模糊的提示,模型可能會輸出多個合理的遮罩。為了解決這一問題,SAM修改模型使其能夠對單一提示預測多個輸出遮罩。SAM發現3個遮罩輸出通常足以應對大多數常見情況。模型還會為每個遮罩預測一個信心分數(即預估的IoU)。

效率:整體的模型設計主要是考慮到效率。給定一個預先計算的圖像嵌入,提示編碼器和遮罩解碼器可以在一個網頁瀏覽器上、在CPU上、在約50ms內運行。這樣的運行效能使得SAM的模型可以實時互動地給出提示。

損失和訓練:SAM使用focal loss和dice loss的線性組合來監督遮罩預測。SAM使用幾何提示的混合來訓練可提示的分割任務。SAM模擬一個互動設置,每個遮罩隨機抽樣提示11輪,使SAM能夠無縫地融入數據引擎中。

Zero-Shot Transfer 實驗

「零樣本遷移」是機器學習中的一個概念,主要關注如何讓模型在沒有直接經過訓練的任務或類別上表現得很好。以下是其詳細解釋:

零次轉移(Zero-Shot Transfer)簡介:

  1. 定義:在機器學習中,當我們訓練一個模型來處理某種任務或分類某些類別,但希望它能夠處理從未見過的新任務或新類別時,我們稱之為「零次轉移」換言之,模型從未直接在某些任務或類別上進行過訓練,但希望我們仍然能夠在這些任務或類別上表現良好。
  2. 如何實現:這通常是透過利用與目標任務或類別相關的一些額外資訊來實現的,例如語義關係或屬性。例如,在圖像分類中,即使模型從未見過「斑馬」這個類別,但透過知道斑馬是黑白條紋的、與馬相似的動物,模型可能能夠正確地辨識出斑馬。
  3. 應用:零樣本學習的應用範圍廣泛,包括圖像分類、文字分類、語音識別等。在現實世界中,我們經常遇到新的任務或類別,而不是總是從頭開始訓練新的模型,所以零次轉移學習提供了一個有效的方法來適應這些新情境。
  4. 與其他轉移學習的區別:轉移學習通常意味著將一個任務中學到的知識應用到另一個相關任務中。當這種轉移不涉及模型中從未見過的新類別時,它被稱為“有的轉移學習」或「少射程學習」。而當轉移涉及到完全未見過的監督類別時,它被稱為「零次轉移學習」。

總之,「零次轉移」是關於如何使機器學習模型具有更強的泛化能力,從而能夠處理它從未直接經歷過的任務或類別。

在這篇論文中,我們提示SAM來:(1) 執行邊緣檢測,(2) 分割所有內容,即物體提議生成,(3) 分割檢測到的物體,即實例分割,以及(4) 作為概念驗證,從自由格式文本中分割物體。下圖為測試結果:

從單個前景點分割出一個對象。但由於一個點可能指向多個對象,這樣的任務定義起來是不確定的。大多數數據集的真實遮罩並未列出所有可能的遮罩,使得自動度量可能不可靠。因此,我們除了標準的mIoU指標外,還進行了一項由標註者對遮罩質量進行1(無意義)到10(完美)評分的人類研究。

結果:

  • 在使用mIoU的全套23個數據集的自動評估中,與RITM比較,SAM在其中16個數據集上表現更好。
  • 在進行歧義解決的“神諭”實驗中,SAM在所有數據集上都超過了RITM。
  • 人類研究的結果顯示,評分者總是將SAM的遮罩質量評分為高於RITM。而且,SAM的平均評分落在7到9之間,這意味著其遮罩質量相當好。

其他觀察:

  • 當點的數量從1增加到9時,各方法之間的差距會減少。
  • 使用隨機點取樣替代默認的中心點取樣時,SAM與基線之間的差距變得更大,但SAM在兩種取樣方法下都能獲得相似的結果。

使用SAM進行智慧標記

Roboflow採用了SAM來進行智慧標記,使用狀況可參考下面的影片

Posted on

U2Net模型的去背應用

官方GitHub: https://github.com/danielgatis/rembg/tree/main

安裝方式

CPU support

pip install rembg # for library
pip install rembg[cli] # for library + cli

GPU support

首先要去安裝onnxruntime-gpu,接著

pip install rembg[gpu] # for library
pip install rembg[gpu,cli] # for library + cli

使用範例

下面為一個讀取攝影機的簡單去背使用範例

import VideoStream
import cv2
import numpy as np
import time
from rembg import new_session, remove

videostream = VideoStream.VideoStream((1280, 720), 30, 0).start()
cam_quit = 0
total = 0
frame = 0

while cam_quit == 0:
    imageSource = videostream.read()
    imageSource = cv2.resize(imageSource, (640,360))
    aStart = time.time()
    # u2netp為model名稱
    output = remove(imageSource, session = new_session("u2netp") )
    aEnd = time.time()
    if frame <= 60:
        total = total + (aEnd - aStart)
        frame = frame + 1
    print("detect time: " + str(aEnd - aStart ))
    cv2.imshow("output", output)
    key = cv2.waitKey(1) & 0xFF
    if key == ord("q"):
        print("avg detect time: " + str(total/frame))
        cam_quit = 1

videostream.stop()
cv2.destroyAllWindows()

Stable Diffusion WebUI Rembg

Stable Diffusion WebUI所使用的去背功能也是這個唷!

相關介紹文章: https://zhuanlan.zhihu.com/p/648234420

可以參考WebUI的參數去尋找相關程式碼可設定的部分,例如Erode size、Foreground threshold、Background threshold

模型去背測試

原始影像如下圖

模型列表

u2net

  • 檔案大小: 171,873KB
  • 處理時間: 1.741s

u2netp

  • 檔案大小: 4,468KB
  • 處理時間: 0.702s

u2net_human_seg

  • 檔案大小: 171,873KB
  • 處理時間: 1.997s

u2net_cloth_seg

  • 檔案大小: 172,066KB
  • 處理時間: 5.496s

silueta

  • 檔案大小: 43,138KB
  • 處理時間: 5.496s

isnet-general-use

  • 檔案大小: 174,461KB
  • 處理時間: 2.629s

isnet-anime

  • 檔案大小: 171,944KB
  • 處理時間: 2.533s
Posted on

影像分割模型介紹

Image Segmentation介紹

影像分割(Image Segmentation)是電腦視覺中的一個基本任務,目的是將數字影像劃分成多個片段(或稱為「超像素」),使得具有相似性質的像素群組成同一片段。影像分割的目的是簡化或改變影像的表示形式,使其更容易被分析。以下是關於影像分割的詳細介紹:

  1. 目標
    • 將影像中具有相似特性(如顏色、強度、紋理)的像素分到同一區域。
    • 賦予影像的每一個像素一個標籤,該標籤指示該像素屬於哪一物體或區域。
  2. 分割技術類型
    • 閾值分割:根據像素值的閾值將影像分成兩個或多個部分。
    • 基於區域的分割:從種子點開始,將相鄰的像素添加到區域中,直到符合某些條件。
    • 基於邊緣的分割:檢測影像中的邊緣(突然的強度變化)來劃分區域。
    • 基於聚類的分割:例如 K-means,將像素分為擁有相似特性的多個群體。
    • 神經網路和深度學習:如 U-Net, DeepLab 等模型,用於更複雜的影像分割任務。
  3. 應用
    • 醫學影像:例如,從 MRI 影像中識別出不同的器官或病變區域。
    • 遙感:劃分地表的不同區域,如水域、森林、城市等。
    • 物體識別和跟踪:識別影像中的特定物體。
    • 電腦視覺任務:如場景理解、影像修復、3D 建模等。
  4. 評估
    • 可以使用像 Jaccard 系數(Intersection over Union, IoU)這樣的指標來評估分割模型的性能。

影像分割作為電腦視覺中的一個核心任務,在許多應用中都扮演著重要的角色,且隨著深度學習的發展,其效果和應用領域持續擴展。

使用深度學習做影像分割

深度學習和神經網路在影像去背上已取得了驚人的成果。常見的模型如下:

  1. U-Net 結構:
    • U-Net是一種用於影像分割的卷積神經網路(CNN)結構。
    • 它具有縮小(下採樣)和擴展(上採樣)的部分,使其形狀像字母“U”。
    • U-Net非常適合進行像素級別的分類,如分離前景和背景。
  2. Mask R-CNN:
    • Mask R-CNN是一種用於實例分割的方法,可以同時偵測物件並生成對應的遮罩。
    • 它結合了Faster R-CNN(用於物件偵測)和一個額外的遮罩分支。
  3. DeepLab:
    • DeepLab是一個強大的影像分割模型,它使用了空間金字塔池化和全卷積網路。
    • 它能夠精確地捕捉物件的邊界,使其適合去背任務。

火紅的模型U-Net介紹

網路的介紹文章: https://ithelp.ithome.com.tw/articles/10240314

  • 起源:U-Net 最初是為了醫學影像分割而設計的,特別是在數據集相對較小的情境下。
  • 架構:U-Net 架構具有對稱的編碼器和解碼器部分。編碼器進行下採樣,而解碼器進行上採樣。兩者之間有跳躍連接,這意味著對應的編碼器和解碼器層之間的特徵被結合在一起,這有助於模型獲取更精確的位置信息。

去背改良版U2NET

網路相關教學文章: https://blog.csdn.net/xuzz_498100208/article/details/109912302

  • 起源:U^2-Net 被設計為一個更深的網絡結構,用於進行較為複雜的影像分割和去背工作。
  • 架構:U2-Net 的名稱意味著「U-Net 的 U-Net」,這是因為它的設計理念是將多個 U-Net 結構嵌套在一起。具體來說,它利用了深層和淺層的嵌套U-Net架構來捕獲多尺度特徵。U2-Net 的重要組件是其嵌套的殘差結構,這有助於模型學習從各種層次獲取的資訊。U2-Net的架構包括六個編碼器階段和五個解碼器階段,以及一個用於融合顯著地圖的模塊。它通過嵌套的U結構從不同階段有效提取多尺度特徵,從而實現了顯著對象檢測的優異性能。該方法對於克服現有骨幹網絡的限制和提高檢測性能具有重要意義。
  • 特性:由於其深度和複雜的架構,U^2-Net 在某些情境下可能比 U-Net 有更好的性能,特別是在需要捕獲多尺度特徵的情境下。
Posted on

Transformer 模型於機器視覺的應用

論文來源 – CAPABILITIES – Vision

在 2021 年 8 月的一篇論文中,史丹佛大學的研究人員將 Transformer 模型稱為「基礎模型」,他們認為這些模型推動了人工智慧的典範移轉。他們寫道:「在過去幾年,基礎模型之規模和範圍擴大了我們對可能性的想像。」

On the Opportunities and Risks of Foundation Models

Transformer 模型帶來的突破

通過大規模的自我監督學習,Transformer模型可以將多模態的原始感官資料轉化為視覺知識。這不僅有助於傳統的感知任務,還可能開創對時間和常識推理的新方法。這些資料可以來自不同的數據源和領域,顯示出在醫療和互動式感知環境中有廣泛的應用潛力。

在電腦視覺領域,Transformer模型能將來自多種來源和感測器的原始資料轉化成視覺知識,此知識適用於多種應用場景。這種思路其實是過去十年在該領域漸漸發展起來的。尤其是ImageNet的出現和監督式預訓練的技術,都帶領了電腦視覺朝向深度學習的方向演變。現今的深度學習模型超越了早期的傳統方法,能夠在大量資料上訓練後,再應用於如圖像識別、物件偵測和圖像分割等不同任務,這樣的思維持續為Transformer模型所採納。

Transformer模型的發展背後是先前方法的限制。傳統的監督學習需要昂貴且仔細收集的標籤,這限制了它的穩定性、泛化性和適用性。相對地,自我監督學習的進步為發展Transformer模型提供了新路徑,讓它能從大量的原始資料中獲取對視覺世界的上下文理解。雖然相對於整個領域的廣泛目標,Transformer模型的能力還在初級階段,但已在傳統電腦視覺任務上展現出增強的泛化能力,且預計這種進展會持續。長遠來看,Transformer模型減少對明確標籤的依賴可能會帶來如常識推理等基礎認知技能的進步,這在傳統監督學習中一直難以達成。

過去機器視覺的關鍵功能

這些任務涵蓋了電腦領域的多個方面,包括:

  1. 影像分類:將影像分為不同的類別或標籤,通常使用複雜神經網路(CNN)等深度學習模型進行分類。
  2. 目標偵測:辨識影像中的特定物體,並確定它們的位置和邊界框。
  3. 語意分割:將影像的分配到特定的像素類別,以實現像素級的影像分割。
  4. 動作辨識:辨識影像序列中的動作或運動,通常用於影片分析和動作捕捉。
  5. 場景圖產生:產生影像描述場景中物件以及它們之間關係的場景圖。
  6. 幾何、運動與3D任務:頭部了深度估計(工件的距離或深度資訊)、運動結構(推斷物體的運動)、表面法向偵測(辨識物體表面的法向方向)、曲率線(偵測物體的運動)曲率資訊)和關鍵點估計等3D任務。

深度學習模型的主要進展源於ImageNet資料集的引入。通常,模型先在像圖像分類這樣的監督訓練任務上進行訓練,然後根據特定的任務和資料集進行調整,以適應該任務或領域的需求。

電腦視覺任務在多種實際應用中,如自動駕駛、影像編輯、機器人和醫學影像分析都起到關鍵作用。深度學習的進步已大大提高了這些任務的效能,使其更符合實際需求。

新的視覺合成和無監督學習領域

  1. GANs:透過一對競爭的生成器和判別器,GANs能夠創建具有個性和活潑的視覺內容。它們互相學習而不需要明確的監督,使GAN成為強大的視覺內容生成工具,廣泛應用於圖像生成和擴增實境。
  2. VAEs:VAE是機率型的生成模型,能在無監督下學習視覺特性。透過學習潛在的表示,它對生成圖像有出色的能力。
  3. 對比學習:這是一種自我監督方法,透過分析資料樣本的相似性來學習特徵。常用於如影像檢索和確定相似性的任務中。
  4. 視覺屬性推論:某些神經模型能夠推測圖像中的特性,如顏色或形狀,即使沒有明確標籤。這通常利用自我監督方法,如重建或對比學習。
  5. 結合架構與規模:最新研究利用靈活的神經網路,如資料視覺轉換器,和大型訓練資料集,達到更佳的視覺合成和無監督學習效果。這增強了模型的規模和效能。

這些發展使得視覺合成和無監督學習在電腦視覺領域具有更廣泛的應用前景,有助於提高影像生成、影像處理、場景合成等任務的表現。同時,這些技術也為自動駕駛、虛擬實境、影像增強等領域提供了更多的可能性。

在無需明確標籤或註釋的訓練中,樣本的適應效率提高。視覺合成領域尤其如此,DALL-E就是一明例。但需了解,電腦視覺的基礎模型相比自然語言還在初階。圖像不僅包含物理場景理解、視覺常識、時間事件等,還涉及社會觀點。雖然這些都是目標,但因關注範疇廣,實際應用仍有挑戰。如,視覺問答系統在回答需常識理解的問題時表現不佳,因這類問題通常需外部知識,非單從圖像獲取。

Transformer 模型於機器視覺的可能應用

基礎模型的五個關鍵屬性:
表達能力——靈活地捕獲和表示豐富的資訊;
可擴充性 ─ 高效使用大量資料;
模式——將各種模式和領域連接在一起;
記憶能力——存儲大量積累的知識;
組合能力——概括到新的上下文、任務和環境。
  1. 環境智慧於醫療保健和家居:在這些場合,利用現有的智慧技術,transformer模型或許能更細緻地偵測人類活動和醫療狀況,並優化醫生、患者和消費者之間的交互體驗。
  2. 移動和消費者應用:具備更強大的多模態銜接的transformer模型可以在移動場景中提供更高效的互動,而該模型在視覺和語言生成上的進步也能讓計算攝影和內容編輯得到裨益。
  3. 機器人交互:transformer模型在機器人環境中的雙重輸入已被證實是有效的;基於大量自我為中心的視覺資料(真實或模擬,人或機器人)訓練的transformer模型可能通過捕捉更多的場景、視覺和動作來推進此領域。

Transformer 模型的可能挑戰

  1. 圖像理解與泛化:人類具有獨特的能力,可以清楚地解讀不易辨識的結構圖,並推斷出物體和場景的物理和幾何特性。雖然目前的transformer模型在圖像合成及細緻語言輸入的泛化上展現了潛力,但它們仍然難以適應簡單的形狀和顏色組合。泛化不僅僅是語義層面;視覺場景和物體自身都遵循特定的物理和幾何法則。transformer模型已初步掌握了對場景和物體幾何形狀的認知,且早期對物理場景和幾何形狀理解的研究,可能為transformer模型的進一步發展提供有益的方向。
  2. 計算效率與模型建立:當涉及到解析視覺、場景和事件的動態畫面時,人類展現了高效的能力。這些動態視覺流對於捕捉事件變化是十分重要的。Transformer模型已在模擬事件的長期連續性方面顯示初步能力,對於機器人等應用中的時間序列和因果一致性建模尤為有益。然而,相較於語言中的文字標記,低級的視覺輸入具有高維度:例如,一張1080p的圖像包含超過200萬像素。在這種背景下,模擬更多元的事件動態,特別是當涉及其他模式(如語音、光流等)和更高解析度時,是一大挑戰。顯然,處理每個像素是具挑戰性的。當前的視覺Transformer模型經常透過整合圖像區塊或多幀的嵌入來解決此問題,但這種做法可能會遺失某些細節。