一枚の写真を渡して、「左の人が持っているグラス」を背景からきれいに切り抜いてほしいと頼んでみよう。コンピュータは二つの作業を順番にこなす。まずそのグラスがどこにあるかを探し、次に輪郭に沿って切り取る。
切り取る作業にも二つの段階がある。セグメンテーション(segmentation)は、グラスが写真の中で占める領域をまるごと塗り分ける。ここまでがグラス、そこから先は背景、というように。マッティング(matting)はもう一歩進む。境界のピクセルそれぞれがどれくらい透けているかまで値を付ける。ガラス越しに透けて見える背景は、半分はガラスで半分は背景だ。この「半分」を 0 と 1 のあいだの数値で書き込んだ成果物がアルファマット(alpha matte)である。髪の毛一本、ガラスの透明な縁をきれいに合成するには、セグメンテーションの「領域」だけでは足りず、マッティングの「透明度」が要る。
これまで、位置の特定と切り抜きは別々のモデルが分担するのが普通だった。テンセント WeChat Vision チームが公開した WeVisOne-VL は、この二つをひとつのモデルの中でやってのける VLM(ビジョン言語モデル、画像を見て言葉で答える AI)だ。そしてもう一つの工夫がある。探している対象が写真に無ければ、無理にどこかを指すのではなく「無い」と答える。この記事が最後まで追う軸がまさにこれだ。モデルが出した答え、とりわけ「無い」という答えを、ユーザーが信じられるようにする設計である。
このモデルが扱うタスクは六つある。大きく二つの束に分けると分かりやすい。
「六つのタスクをひとつのモデルに統一した」という言い回しは誤解を招きやすい。すべての出力を同じ形に打ち出す、という意味ではない。対象と座標は言語モデルがトークン(token、モデルが読み書きする文字の断片のような基本単位)で指定し、ピクセル領域はその情報を受け取った専用デコーダが描く。統一されたのは出力の形ではなく経路だ。どのタスクでも同じやり方で指示を受け、対象をひとつの表現でつかまえ、そこから点・ボックス・マスク・アルファマットのうち必要な形を取り出す。写真に対象が無ければ、その枠を「無し」で埋める。
ピクセルマスクが必要なとき、よく使われてきた方法がある。ボックスまでは VLM が出し、そのボックスを SAM のような別の大きなセグメンテーションモデルに渡してマスクを受け取る、というやり方だ。二つのモデルを継ぎ合わせるこの構成には代償がついてまわる。
一つは重さだ。モデルをもう一つ載せれば、それだけ遅く重くなる。
もう一つのほうが厄介だ。VLM が「あのグラス」と指した対象と、セグメンテーションモデルが実際に切り抜いた領域が、同じものだという保証がない。VLM は左のグラスを指したのに、セグメンテーションモデルはその隣のコップの輪郭を切り取るかもしれない。二つは別々の目を持っていて、あいだでやりとりするのはボックス一つきりだからだ。言葉で指した対象とピクセルで切り取った対象がずれてしまえば、結果がどれほど精巧でも、間違った物をきれいに切り抜いたことになる。
WeVisOne-VL は、セグメンテーションに渡す信号を、外部のモデルではなく VLM 自身がたった今つくった表現から取り出す。指した主体と切り抜く主体が同じ表現を使うので、両者が別の対象を指す余地が減る。二つのモデルをたたんでひとつにする理由はここにある。
流れは一本の線で読める。
グラスを指し示す → その対象をボックスと <OBJ> トークン一つで表現する → その表現から領域と透明度を予測する。
言語モデルが「何を、どこで」を定めてボックスを出す。その直後に <OBJ> という特殊トークンをもう一つつくる。このトークンの内部状態が、「たった今指した、その対象」を圧縮した表現の役目を果たす。すると軽量なピクセルデコーダが、この表現と画像特徴、そしてたった今出したボックスを受け取り、マスクやアルファマットを描く。
ここでボックスの役割に注目してほしい。ピクセルデコーダにとってボックスは「この近辺を集中して見ろ」という指示だ。だから指し示しの段階が見当違いの場所にボックスを置けば、デコーダは見当違いの場所で精巧な輪郭を切り取る。形はもっともらしいのに対象が間違ったマスクが出てくる。後段がどれほど優秀でも、この誤りは取り戻せない。だからこの設計では、位置をどれだけ正確に捉えるかが領域品質の上限を決める。指し示しが揺らげば、その下がすべて揺らぐ。
言語モデルはトークンを一つずつ順番に出していく。「この猫は横 0.37、縦 0.52」のように座標をふつうの数字で書くと、数字一つが複数のトークンに分かれて出力が長くなる。WeVisOne-VL は 0〜1 の比率座標を表す専用トークン <0> から <1000> までを、あらかじめ語彙に入れてある。座標一つがトークン一つで済むので、出力が短くなり処理コストも下がる。[^1]
出力の形式はタスクが決める。ボックスが必要なら座標四つ、点が必要なら一組。対象が無ければ座標の枠を None で埋める。「無し」はエラーでも空の応答でもなく、モデルが正式に出す一つの出力だ。後で扱う拒否の学習が、まさにこの None を狙っている。
<OBJ> トークンでピクセルまでつなぐセグメンテーションとマッティングは画像全体をピクセル単位で覆わなければならず、トークン数個では終わらない。<OBJ> トークンが両者をつなぐ橋だ。デコーダはこのトークンで「どの対象なのか」を確かめたうえで、画像特徴とボックスを参照して輪郭を切り取る。
このボックスが解く問題 — 外部セグメンテーションモデル無しで ピクセルデコーダは精緻化モジュールまで合わせても約 960 万(9.6M)パラメータと軽い。SAM のような別の大きなセグメンテーションモデルを付けずに、ボックスレベルの疎な予測と、ピクセルレベルの密な予測を、ひとつのモデルで同時に出す。デコーダが
<OBJ>表現から「この対象を探す」というクエリを立ち上げるよう設計したことが肝だ。[^2]
学習は易しいものから積み上げる。指示に従って形式どおりの出力を出す基礎をまず固め、高解像度データで小さな物体や混み合った場面を見落とさないように鍛え、最後にピクセルタスクを入れて、位置特定から領域切り出しへと広げる。その上に強化学習を載せる。
このボックスが解く問題 — ハルシネーションを学習目標の中へ 強化学習の段階で、モデルが最も迷うサンプルを選び、無いものをでっち上げたり同じ予測を繰り返したりする癖を抑えながら、位置精度を高める。ハルシネーションを減らす仕事が、事後に付け足したフィルタではなく、学習目標の中に組み込まれているということだ。[^3]
これほどの汎用性は、膨大なデータの上でしか生まれない。だから論文の半分近くがデータエンジン(WDE)に割かれている。WDE は GRIT・CC3M・LAION・SA-1B といった公開データを引き込み、1 億(100M)枚を超える画像と、約 36 億(3.6 billion)個のバウンディングボックス注釈を在庫として抱える。
注釈をつくるやり方に、このモデルの性格がよく表れている。専用の検出器と VLM は得意・不得意が真逆だ。検出器(YOLO・DETR 系)は混み合った場面で候補を密に吐き出すが、初めて見る概念には弱い。VLM は概念はよく見分けるが、混み合った場面では取りこぼす。エンジンはこの二つを役割で分けて使う。エキスパートモデルたちが候補をたくさんつくれば、[^4] Qwen3-VL が「この領域はこの説明に合うか」を一つずつ検証する。たくさんつくる側と、ふるい落とす側を分けたわけだ。ボックスからマスクへ、さらにマットへと進むときも、もとの対象説明をそのまま引き継いで、最初から最後まで同じインスタンスを指すようにする。
エンジンが最も手をかけたのは、「無い」を教えるデータだ。モデルに、無いものを無いと言わせるには、わざと罠を見せなければならない。これをハードネガティブ(hard-negative)と呼ぶ。ところが罠づくりが厄介だ。「赤い車」を「青い車」に書き換えたからといって、その写真に青い車が無いとは限らないし、検出器が何も見つけられなかったからといって、対象が本当に無いとも限らない。そこで候補の罠を写真全体ともう一度照合し、本物の対象が見つかれば罠から外して正常な事例に戻す。検収を通った「本当に無い」事例なのに、それでもモデルが何かを指してしまうなら、その事例をハードネガティブとする。
これと対にして、取りこぼしやすい本物の対象(ハードポジティブ)も一緒に入れる。拒否ばかり強く教えると、モデルは「分からなければ無いと言っておく」という怠け技を覚える。二つを対で入れてはじめて、拒否が言い訳として固まらない。「無ければ拒否」と「有れば捕捉」をひと束で学習させることが、このエンジンのバランス錘だ。[^5]
論文は 30 を超えるベンチマークで評価しており、比較相手は複数タスクをまんべんなくこなす汎用モデルと、単一タスクに特化した専門システムだ。この記事はタスクごとのスコアを扱わない。代わりに、この設計を評価するには何を見るべきかを押さえる。
平均スコア一行では、このモデルを正しく読めない。設計が、互いに引っ張り合う二つの目標を同時に追っているからだ。拒否を強くかけるほど本物の対象を取りこぼす危険が増し、取りこぼすまいとするほど無いものを有ると言う危険が増す。だから見るべき最初の結果は、拒否と再現率(recall、実際に有る対象をどれだけ漏れなく見つけるか)を一緒に示す数値だ。片方だけ高いのは簡単。両方を同時に守れるかどうかが、この設計の成否である。
どちらをより締めるかは、現場のコストが決める。産業検査ラインで、まともな部品を不良と誤報すれば再検査のコストが増え(過検出)、本物の欠陥を見逃せば不良がそのまま出荷される(見落とし)。過検出が高くつく現場は拒否を強く、見落としが高くつく現場は再現率を押す。この分岐点を見つけるには、正解の分かっている別の標本で、過検出と見落としを別々に数えなければならない。
二つ目に見るべきは、統合の損得だ。複数のモデルをひとつにたためば運用は軽くなるが、タスクによっては特化モデルに及ばない箇所が出うる。この損得はタスクごとに別々に測ってこそ、平均スコアの陰に隠れずに済む。
ベンチマークは、よく整えられたテストセット上の数値だ。実際の運用環境の分布シフト・遅延・コストまで保証するものではない。どんなモデルにも共通する限界である。
著者たちは、ハルシネーション、意図の読み違い、目立たない対象の見落としという、製品レベルの欠陥を出発点に据えた。これらの欠陥が消えたというより、「減らそうと手をかけた対象」と読むのが正確だ。設計を追っていくと、バランスが崩れる条件が見えてくる。
データエンジンが自分自身を参照している。 WDE は既存モデルたちの予測を検証・フィルタリングしてラベルをつくる。標本点検と「モデルの誤り 対 注釈の誤り」の切り分けで和らげてはいるが、ラベルの大半を疑似ラベルで埋める以上、そのエキスパートモデルたちが共有する盲点まで引き継がない保証はない。拒否の基準そのものが、その盲点の上に立っている可能性がある。
バランス点はドメインごとに動く。 学習で定めた拒否と捕捉のバランスが、すべての現場で同じ位置にとどまるわけではない。照明が悪い、対象が学習分布と違う、コスト構造が特殊、といった現場でどちらに傾くかは、平均スコアには出ない。前節の「別の標本で過検出・見落としを別々に測る」が必要なのはこのためだ。
2B・4B というサイズ。 バックボーンは Qwen3-VL で、モデルは 20 億(2B)・40 億(4B)パラメータの二種類。ピクセルデコーダは軽いが、バックボーンは VLM なので決して小さくない。そしてパラメータ数がそのまま速度になるわけでもない。入力解像度、出力長、バッチの組み方によって、実際の遅延とスループットは大きく変わる。エッジ・リアルタイム環境で特化検出器に比べてどうかは、「効率」の主張とは別に、運用の数値で改めて測るべきだ。
顧客が QA スクリーンショットを数十枚アップロードして、ONTLE の AI PM に任せる。「決済ボタンが重なってしまった画面だけ抜き出して」。よくある失敗は二つだ。「重なったものを見つけなければ」という圧力で、まともな画面からもっともらしい座標をでっち上げるか(虚偽報告)、曖昧な本物の欠陥を「確証がない」とまるごと落とすか(見落とし)。PM にとっては、どちらも致命的だ。
ONTLE は、人の PM がやっていたプロジェクト管理を代わりに引き受けるサービスだ。WeVisOne-VL から持ち帰るべきは、ピクセルデコーダの構造ではなく、「無いものは無いと言う」を、プロンプト一行(「事実だけ言え」)ではなく製品構造として組み込む方法である。以下は現在提供している機能ではなく設計の提案であり、ビジョンモデルの学習法が PM エージェントにそのまま移せるわけでもない。同じ問題をもう一度解くときの下絵として読んでほしい。
肝は、モデルの None を三つに割ることだ。モデルが一つの画面を見て下せる判定は三つあり、それぞれが顧客に求める次の動作が違う。
ここに、WeVisOne-VL の二つの習慣をさらに借りる。一つ、拒否(ハードネガティブ)と捕捉(ハードポジティブ)を対で評価し、拒否が怠けた言い訳として固まっていないかを見る。二つ、報告を虚偽報告と取りこぼしに分けて測る。よく「報告の前にもう一度ざっと見直す」再レビューを付けるが、同じモデルが同じ目で見直せば、最初とまったく同じ盲点をそのまま通してしまう。再レビューが意味を持つには、最初の判断とは別の基準 — たとえば正解の分かっている標本との照合 — でふるいにかける必要がある。
重なった画面を見つけられなかったという報告が、探さなかったのではなく本当に無かったからだと顧客が信じられるとき、その報告はようやく役に立つようになる。
論文の HTML 版は CC BY 4.0 と表記されており、プロジェクトページ(tencent.github.io/WeVisOne-VL)、コード(GitHub の Tencent/WeVisOne-VL)、重み(HuggingFace の tencent/wevisone-vl コレクション)が公開されています。モデル重みそのものの利用ライセンスは、当該 HuggingFace ページで確認してください。
領域さえ分かればよい仕事 — どこに何があるかを示したり、特定の物体だけを消したりする場合 — にはセグメンテーションマスクで十分です。一方、髪の毛、ガラス、煙のように境界が半透明な対象を、別の背景に自然に合成(切り抜き)しなければならないときは、透明度の値を持つアルファマットが必要です。マッティングのほうが精密な代わりに重くなります。
前段は共有します。どのタスクでも、対象を指し示して座標を専用トークンで出す段階までは同じです。ただしピクセル領域が要らないタスク(検出・カウンティング・OCR・ポインティング)は、`
[^1]: 比率座標を専用トークンにするやり方は Rex-Omni、LocateAnything から取り入れた。
[^2]: ピクセルデコーダは Deformable DETR の設計に従う(deformable ブロック 6 個)が、クエリスロットを学習済みの固定値ではなく <OBJ> 表現から直接初期化する。中間の ViT 特徴はアダプタが整え、マッティングは微細な境界と半透明度のための軽量な精緻化モジュールをもう一つ使う。
[^3]: 3 段階の教師あり学習(SFT)のあとに、混合タスクの強化学習を載せるカリキュラムだ。強化学習は不確実なサンプルを先に選んだうえで GRPO(Group Relative Policy Optimization)を適用する、オンポリシー(モデルが自ら生成した答えで学習する)方式である。
[^4]: 候補の生成には SAM3、社内の DINO 系検出器、Rex-Omni などが使われる。どの画像をさらに集めるかは、Wikipedia・WordNet から出発した知識グラフで方向づける。ボックス→マスクの変換には SAM2 を使う。
[^5]: マッティング用のラベルは BiRefNet・MatAnyone2 でアルファ候補を取り出し、複数の基準でふるいにかけたあと、専用のマッティングアノテータ(凍結した SAM2.1-Base+ にアルファ精緻化ヘッドを付けた構成、SAM2Matting に着想を得た)でコーパス全体を改めて注釈してつくる。学習ラウンドごとに誤りを種類別に分類するが、「モデルの予測誤り」と「注釈そのものの誤り」を区別し、注釈の欠陥のときだけラベルを直す。公式ベンチマークは学習データから隔離する。