画像認識と物体検出を学び直す Log#9 | 用語を下から積み直す ― モデル・学習・推論から基盤モデルまで
このシリーズは Log#8 まで、色で拾う・形を測る・平面を直すという順番で、自分の手で測りながら進んできた。使ってきたのは OpenCV の関数と、既知の寸法で印刷した紙と、自分で撮った写真だけになる。学習させたモデルは1つも出てきていない。
その先へ進むために調べ物をしたところ、知らない単語が並んだ状態になった。バックボーン、ゼロショット、オープン語彙、単眼深度、mAP。どれも読めば意味は取れるが、人に説明できるかというと怪しい。分かったつもりのまま次へ進むと、後で「なぜそれを選んだのか」を自分で説明できなくなる。
そこでこの回は、実装を1行も書かずに用語の定義だけをやる。下の段から積み上げて、上の段の固有名詞まで一続きにする。すでに Log#1〜8 で自分の手を動かして測った概念(色空間、閾値、輪郭、モルフォロジー、特徴点、射影変換)を土台として使い、そこに新しい語を接続していく形をとる。
なお当初の計画では Log#9 が「検出の当たり外れを数字にする ― IoU・Precision・Recall・mAP」だった。それは Log#10 へ1本ずらす。用語の足場を作ってから測る言葉に入ったほうが、順序として正しいと判断した。
この回で扱う用語を5つの段に分ける
段を分ける基準は「その語を理解するのに、他のどの語が必要か」になる。上の段の語は、下の段の語を使って定義される。
段 | 何の言葉か | 例 |
|---|---|---|
第0段 | 学習と推論の仕組みそのもの | モデル、パラメータ、損失、バックボーン |
第1段 | 何を出力するか | 検出、セグメンテーション、深度推定 |
第2段 | 個別の製品・モデル名 | DINOv3、YOLO26、SAM 3、Depth Anything 3 |
第3段 | 現場の用途で出てくる語 | 遮蔽、能動視覚、点群、近赤外 |
第4段 | サービス・道具の名前 | Roboflow、Hugging Face |
第0段が曖昧なままだと、第2段の固有名詞が全部「なんかすごいやつ」で終わる。だから第0段にいちばん字数を使う。
モデル・学習・推論という言葉の中身
モデルは、数値が並んだ巨大な計算式
モデルは、入力(画像)を入れると出力(枠や数字)が出てくる、計算式のかたまりになる。中身は膨大な数の掛け算と足し算で、その掛け算に使う数値のことをパラメータ(または重み)と呼ぶ。
「70億パラメータ」は、その数値が70億個あるという意味。パラメータの数が多いほど表現できることが増えるが、その分メモリと計算時間を食う。ファイルサイズもパラメータ数に比例して大きくなる。
Log#5 で使ったモルフォロジー演算のカーネルは3×3で9マスだった。あれも「どのマスを見るか」を決めた数値の並びで、役割としてはパラメータの原型にあたる。違いは、モルフォロジーのカーネルは人が決めるのに対し、モデルのパラメータは学習で決まる点になる。
学習と推論は、別の作業として分けて考える
学習は、正解付きの画像を大量に見せて、パラメータの値を少しずつ調整していく作業。時間がかかり、GPUが要る。
推論は、学習が終わったモデルに画像を1枚入れて答えを出させること。こちらは速い。
この2つを混ぜて話すと、必要な機材の見積もりを間違える。「このモデルは動くか」と聞くときは、学習させたいのか推論だけしたいのかで答えが変わる。推論だけなら手元のマシンで足りることが多く、学習を回すなら別の話になる。
Log#2〜8 でやってきた古典的な処理(色で選ぶ、輪郭を取る、行列で写す)は、この2つのどちらでもない。パラメータを学習で決めていないので学習は存在せず、しかし人が書いた式で答えを出しているので、推論とも言い方が違う。ルールベースと呼ばれる第3の系統になる。
学習の中身は、間違いの大きさを測って少しずつ直す繰り返し
学習が具体的に何をしているのかを、用語込みで並べる。
損失(loss)は、モデルの出した答えと正解のズレを1つの数字にしたもの。この数字が小さいほど正解に近い。損失をどう計算するかを決める式を損失関数と呼ぶ。
勾配降下法は、損失を小さくする方向へパラメータを少しずつ動かす手続き。「少しずつ」の歩幅を学習率と呼び、大きすぎると行き過ぎて発散し、小さすぎるといつまでも終わらない。
バッチは、一度にまとめて処理する画像の枚数。エポックは、用意した学習用画像を最初から最後まで1周見せることを1回と数える単位。「50エポック学習」なら、全画像を50周見せたという意味になる。
つまり学習とは、画像を見せる → 答えを出す → 正解とのズレを測る → ズレが減る方向へパラメータを動かす、をひたすら繰り返す作業になる。1回で決まるものではない。
過学習は、覚えてしまって応用が効かない状態
学習を続けると、いつかは学習用の画像に対しては完璧に答えられるようになる。ただしそれは「覚えた」だけで、見たことのない画像には弱いことがある。これを過学習と呼ぶ。
これを検出するために、データを3つに分ける。
分割 | 用途 |
|---|---|
学習用(train) | パラメータを調整するのに使う |
検証用(val) | 学習の途中で成績を見て、いつ止めるか決めるのに使う |
試験用(test) | 最後に1回だけ使う。ここを学習に混ぜると成績が嘘になる |
汎化は、見たことのない画像でもちゃんと答えられる性質のこと。学習の目的は学習用データで満点を取ることではなく、汎化することになる。
データ拡張は、1枚の画像を何枚にも化けさせる
データ拡張は、手元の画像を回したり、明るさを変えたり、左右反転させたりして、学習に使う枚数を水増しする手法。
ここが Log#3・Log#4 と直接つながる。照明を変えただけで青いブロックの色相が155度動いた。あれは、明るさや色味を変えた画像を学習に混ぜておかないと、実際の現場で崩れるという話そのものになる。データ拡張は、その崩れを先回りして学習に含める作業と言える。
アノテーションは、人が正解を書き込む作業
アノテーションは、画像に人が正解を書き込むこと。「この四角の中が赤ブロック」と枠を描く、輪郭をなぞる、点を打つ。
Log#7 で本の表紙の四隅を手でクリックして JSON に保存したが、あれがアノテーションそのものになる。あのとき、自動検出が7回とも失敗したので手動に切り替え、クリックの揺れを平均2.71px・最大7.21px と測った。人が付けた正解にも誤差があることを実測したことになる。
現場でいちばんお金と時間がかかるのがここになる。Log#1 で書いたとおり、分類なら画像1枚にラベル1つ、検出なら枠を複数、セグメンテーションなら画素単位で塗る。作業量が桁で変わる。
データセットとベンチマークは、成績を比べるための共通の物差し
データセットは、画像とアノテーションの組を大量に集めたもの。
名前 | 中身 |
|---|---|
COCO | 一般的な物体80種類。検出モデルの成績はほぼここで比べる |
LVIS | 1000種類以上の細かい分類。珍しい物が含まれる |
MVTec-AD | 工業製品の傷。異常検知の標準 |
Cityscapes | 街の風景のセマンティックセグメンテーション |
NYU Depth V2 | 室内の深度。深度推定の標準 |
ベンチマークは、その共通データセットで測った成績のこと。「COCO で 57.5 mAP」という言い方は、この物差しの上での数字になる。
注意点が1つある。ベンチマークの成績が高いモデルが、自分の現場で高いとは限らない。COCO には「マットの上の赤いブロック」も「海藻に混ざった破片」も入っていない。ベンチマークはモデル同士の相対比較には使えるが、自分の対象での性能は自分で測るしかない。
ゼロショット・few-shot・ファインチューニングは、自分のデータをどれだけ用意するかの段階
言葉 | 意味 |
|---|---|
ゼロショット | 自分では1枚も学習させずに、配布されたモデルをそのまま使う |
few-shot(少数ショット) | 数枚から数十枚だけ見せて使えるようにする |
ファインチューニング | 配布モデルを土台にして、自分の画像で追加学習して仕上げる |
以前は「自分のデータを1万枚集めて学習」しか道がなかった。今はゼロショットで試してから、足りない分だけファインチューニングする順番になっている。
この順番の変化が、個人で何かを作れるかどうかに直接効く。1万枚のアノテーションは個人には現実的でないが、ゼロショットで試して当たりを付けるのは今すぐできる。
バックボーンとヘッドは、前半と後半
モデルは大きく2つに割れる。
バックボーンは、画像から「特徴」を絞り出す前半部分。ヘッドは、その特徴を受け取って目的の答え(枠なのか、輪郭なのか、距離なのか)を出す後半部分。
ここが重要で、バックボーンは1個を使い回して、ヘッドだけを差し替えると別のタスクができる。だから「DINOv3 を凍結して軽いヘッドを付ける」という言い方になる。
凍結は「バックボーンのパラメータは一切いじらない」という意味。学習させるのはヘッドの分だけなので、パラメータ数が桁で減り、手元のマシンでも現実的な量になる。
特徴・埋め込み・記述子は、Log#7 で既に使っていた
特徴は、画像から絞り出した数値の並びのこと。特徴マップは、その数値が画像と同じように縦横に並んだもの。「密な特徴」という言い方は、1画素ないし数画素ごとに特徴が出ている状態を指す。粗いと物体があることは分かるが輪郭が甘くなる。
埋め込み(embedding)は、対象を数値のベクトルで表したもの。似たものは近い場所に、違うものは遠い場所に置かれるように学習される。
これは Log#7 で使った記述子と同じ考え方になる。ORB や SIFT は、特徴点の周りの見え方を数値の並びに変換して、数値どうしの距離が近いものを「同じ場所」とみなしていた。学習ベースの埋め込みは、その変換を人が設計するかわりに学習で決めたものになる。
Log#7 で分かったこと(近い記述子が見つかっても、それが正しい対応とは限らない。本が写っていない写真とも867件が合った)は、埋め込みにもそのまま当てはまる。距離が近いことは、同じであることの証明ではない。
畳み込みは、Log#5 のカーネルと同じ形をしている
畳み込み(convolution)は、小さな数値の格子(フィルタ、またはカーネル)を画像の上で滑らせて、重なった部分の掛け算と足し算で新しい値を作る処理になる。
Log#5 でモルフォロジーのカーネルを画像の上に順番に置いていったが、置き方は同じになる。違うのは判定の仕方で、モルフォロジーは「全部白か」「1つでも白か」で決めていたのに対し、畳み込みは掛けて足す。
そして決定的な違いが1つ。モルフォロジーのカーネルは人が形を決めた(矩形・十字・楕円)。畳み込みのフィルタは、中身の数値を学習で決める。「手で書くフィルタと、学習で決めるフィルタ」という言い方は、この違いを指している。
CNN(畳み込みニューラルネットワーク)は、この畳み込みを何十層も重ねたモデルの総称になる。
Transformer とパッチは、画像を単語のように扱う
Transformer は、もともと文章を扱うために作られた構造で、いまは画像でも主流になっている。
画像を扱うときは、画像を格子状の小さな正方形に切り分ける。この1枚をパッチと呼ぶ。「パッチサイズ14」なら14×14画素で1枚。切り分けたパッチを、文章でいう単語のように並べて処理する。
ViT(Vision Transformer)は、この方式のモデルの総称。「ViT-L/16」は、Largeサイズでパッチサイズ16という意味になる。
アテンションは、あるパッチが他のどのパッチを参考にするかを、その都度重み付けして決める仕組み。畳み込みが近所しか見ないのに対し、アテンションは画像の端から端まで一度に関係づけられる。遮蔽された果実のように「離れた場所の情報から推測する」場面で効くのはこのため。
信頼度と閾値は、Log#4 でやったことと同じ構造
検出モデルは枠を出すとき、必ず信頼度(confidence)という 0〜1 の数字を一緒に返す。「boat 0.89」の 0.89 がこれになる。
そして実際に使うときは「0.5以上のものだけ採用する」といった線引きをする。この線引きが信頼度閾値になる。
Log#4 でやったのは、色の数字に線を引いて赤か赤でないかを決める作業だった。構造は完全に同じで、閾値を下げれば拾いすぎ、上げれば取りこぼす。オレンジの光で RGB 式が画面の96%を赤と判定したのと同じことが、信頼度閾値でも起きる。
NMS(Non-Maximum Suppression)は、同じ物体に重なった枠が何個も出たときに、いちばん確からしい1個を残して他を消す後処理になる。「NMS不要(NMS-free)」は、この後処理を別工程として持たず、モデル自体が最初から1個だけ出すという意味。後処理が消えるぶん速く、別の実行環境へ持ち出すのも簡単になる。
mAP は、次回に自分の手で組み立てる数字
mAP(mean Average Precision)は、検出モデルの成績を表す代表的な数字。0〜1(または%)で、大きいほど良い。
これは IoU・Precision・Recall を積み上げた先にある値なので、Log#10 が終われば自分の言葉で説明できるようになる。いまの段階では「モデル同士を比べるための共通の点数」として扱う。
ひとつだけ先に置いておくと、mAP には「どの IoU 閾値で正解とみなすか」という設定が必ず付いてくる。同じ検出結果でも、この設定を変えると点数が変わる。Log#10 の主題はここになる。
FPS とレイテンシは、動きの質に直結する
FPS は1秒あたり何枚処理できるか。レイテンシは1枚あたり何ミリ秒かかるか。「11.8ms」なら1秒に約85枚。
ロボットが動きながら見るなら、ここが動きの質に直接効く。カメラで見て位置を直すループを回すとき、1周に何ミリ秒かかるかで、追従できる速さの上限が決まる。
モデルサイズの n / s / m / l / x は、同じ設計の大きさ違い
yolo26n yolo26s yolo26m yolo26l yolo26x のように、末尾1文字でサイズを表す慣習がある。nano / small / medium / large / extra-large の頭文字で、右へ行くほどパラメータが多く、精度が高く、遅い。
同じ設計のまま大きさだけを変えているので、まず n で動くことを確認して、精度が足りなければ上げる、という進め方ができる。
VRAM は GPU が持っているメモリのこと。モデルが載るかどうかはここで決まる。パラメータ数から必要量の当たりを付けられる(おおよそ、パラメータ1個あたり2〜4バイト)。手元のマシンで動くかどうかの判断は、まずこの計算から入る。
量子化・ONNX・TensorRT は、モデルを速くして持ち出すための語
量子化は、パラメータを表す数値の細かさを落として、軽く速くすること。FP32(32ビット小数)で学習したものを FP16(16ビット)や INT8(8ビット整数)に落とす。精度は少し落ちるが、メモリが減って速くなる。
ONNX は、モデルを別の実行環境へ持ち出すための共通ファイル形式。PyTorch で作ったものを、PyTorch のない環境で動かすときに通る道になる。
TensorRT は NVIDIA の GPU で高速に動かすための変換。「T4 TensorRT で 1.7〜11.8ms」という数字は、この変換をかけた後の速度になる。
エッジは、クラウドに送らず手元の機械で推論すること。通信が要らないので速く、外に画像を出さずに済む。
出力の形を7種類に分ける
Log#1 で作った表がそのまま効く。今回出てきた語をそこへ置き直す。
用語 | 何が返ってくるか | 現場での使いどころ |
|---|---|---|
分類(Classification) | 画像1枚にラベル1つ | 「この果実は熟している/いない」 |
物体検出(Detection) | 四角い枠+ラベル+信頼度 | 「ここにトマトが1個」 |
インスタンスセグメンテーション | 物体ごとの輪郭(画素単位) | 「このトマトの形はここまで」 |
セマンティックセグメンテーション | 画素ごとの種類分けのみ(個体は区別しない) | 「葉の領域はここ全部」 |
姿勢推定(Pose) | 関節点・キーポイントの座標 | 「果柄の切る位置はここ」 |
深度推定(Depth) | 画素ごとの距離 | 「そのトマトは320mm先」 |
OBB | 傾いた四角の枠 | 斜めに置かれた物 |
インスタンスとセマンティックの違いは、個体を数えられるかどうか
写真にトマトが3個写っているとき、セマンティックセグメンテーションは「トマトの画素」を一色に塗るだけで、3個なのか1個の大きな塊なのか分からない。インスタンスセグメンテーションは「1個目・2個目・3個目」を別々のマスクとして返す。
掴むならインスタンスが要る。何個あるか分からない状態では、どれを掴むか決められない。
Log#5 で connectedComponentsWithStats を使って白い塊を数え、Log#6 で findContours に切り替えた。あの「塊を個体として分ける」処理が、学習ベースではインスタンスセグメンテーションに対応する。
OBB は Log#6 で測った minAreaRect と同じもの
OBB は Oriented Bounding Box の略で、傾きを持った枠になる。
Log#6 で、紙を43度回したら軸に平行な boundingRect の面積が1.75倍に膨らみ、minAreaRect は0.3%しか動かなかった。あの minAreaRect を、学習モデルの出力形式として持つのが OBB になる。
斜めに並んだ物を扱うタスク(航空写真、棚に斜めに置かれた品物、コンベア上で向きがばらつく食品)で必要になる理由は、Log#6 の実測がそのまま説明になる。
固有名詞を4つに絞って位置づける
DINOv3 は、バックボーン専門のモデル
Meta が公開している、バックボーンだけのモデルになる。正解ラベルを一切使わない自己教師あり学習で、17億枚の画像から特徴の出し方だけを覚えた。最大70億パラメータ。凍結したまま検出・深度・分割に使える密な特徴を出す。
自己教師あり学習は、人が正解を書かずに、画像の一部を隠して当てさせるなどの方法で学習させるやり方。アノテーションが要らないので、桁違いの枚数を投入できるのが強みになる。
Gram Anchoring という仕組みが新しく入っているが、これは「長く学習させると画素単位の特徴がぼやけていく」という既知の劣化を止めるための工夫として理解しておけばいい。
いま異常検知でも医療画像でも農業でも、「DINOv3 を凍結して軽いヘッドを付ける」が標準の作り方になっている。
YOLO26 は、現場で回す実用モデル
Ultralytics が2026年1月に出した最新版。1つのパッケージで、検出・インスタンス分割・セマンティック分割・深度推定・分類・姿勢推定・OBB の7タスクと、オープン語彙検出をカバーする。
NMS不要のエンドツーエンド推論が売りで、COCO で 40.9〜57.5 mAP、T4 TensorRT で 1.7〜11.8ms。2026年7月に単眼深度推定がネイティブのタスクとして入り、それまで別プロジェクトの深度モデルをつなぐ必要があったものが1パッケージで済むようになった。
Python から数行で呼べる。
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # 検出
model = YOLO("yolo26n-seg.pt") # インスタンス分割
model = YOLO("yolo26n-depth.pt") # 深度
results = model("image.jpg")
SAM 3 は、言葉で指定してマスクを出す
Meta が2025年11月に公開したモデル。SAM は Segment Anything Model の略になる。
SAM 1・2 は「この点をクリックした物」を1個だけ切り出すものだった。SAM 3 は "yellow school bus" のような短い名詞句を渡すと、画像内の該当する全部にマスクと ID を付けて返す。これをプロンプト可能な概念セグメンテーション(PCS)と呼ぶ。848M パラメータ。
プロンプトは、モデルへの指示のこと。文章生成のときと同じ語だが、画像モデルでは点・枠・見本画像・言葉のどれもプロンプトになりうる。
オープン語彙(open vocabulary)は、事前に決めた80種類などのリストに縛られず、任意の言葉で指定できるという意味。従来の検出モデルが「COCO の80クラス」しか言えなかったのに対し、こちらは「海藻に混ざった白い破片」と書ける。
アノテーションの下書きを作る道具としても使える。人が1枚ずつ塗るかわりに、言葉で指定して出させたマスクを人が直す。作業量がいちばん重い工程を軽くする方向に効く。
Depth Anything 3 は、写真1枚から距離を出す
ByteDance が2025年11月に公開した深度推定の専門モデル。
単眼深度推定は、ステレオカメラや距離センサを使わず、普通のカメラ1台で距離を出すこと。カメラを2台置いて視差から測るステレオや、光を飛ばして往復時間を測る ToF センサとは別の道になる。
ここで相対深度と絶対深度(メトリック深度)の区別が要る。
種類 | 何が分かるか | 掴めるか |
|---|---|---|
相対深度 | A は B より手前、という順序だけ | 掴めない |
絶対深度(メトリック) | 320mm、という長さの値 | 掴める |
ロボットが掴むには絶対深度が要る。DA3 には絶対深度版があり、焦点距離を使ってメートルに直せる。
そして、この「焦点距離」が Log#8 と直結する。Log#8 で傾き角を逆算しようとして、近似のカメラ行列では絶対値が取れなかった(正対の紙で 4.56 度が出た)。カメラ内部パラメータ(焦点距離、主点、レンズ歪み)を実測で求める作業をカメラキャリブレーションと呼び、絶対深度を信じるにはこれが要る。Log#8 で「未校正」と書いて避けた場所が、深度に進むと避けられなくなる。
Gemini Robotics-ER と、VLM・VLA という2つの略語
VLM(Vision Language Model)は、画像を見て言葉で答えるモデル。すでにこのプロジェクトで使っている VLM-as-Reward(実機動作 → 撮影 → API で成否判定)の判定役がこれになる。
VLA(Vision Language Action Model)は、画像と言葉から直接モーターの指令まで出すモデル。
Gemini Robotics-ER は、VLM のロボット特化版になる。ER は Embodied Reasoning(身体を持った推論)の略。新しいのは pointing(指差し)で、「掴めるものを全部指差して」と書くと2次元の座標点を返してくる。物のサイズ・重さ・アフォーダンス(その物で何ができるか)を踏まえた点を出す。
役割分担は、ER が上位の判断役で、実際に動かすのは VLA や専用の掴みモデルという形になっている。このプロジェクトでいう計画層の位置に、そのまま重なる。
AnyGrasp は、物が何かを知らないまま掴み方を出す
点群から掴み姿勢の候補を出すモデル。7自由度(位置3+姿勢3+グリッパーの開き幅1)の掴み姿勢を返す。ビンピッキング(箱の中に雑多に入った物を1個ずつ取り出す作業)で成功率93.3%。
「物体が何であるかを知らないまま」というのが要点で、事前に対象を登録しなくていい。ただし NVIDIA の GPU が前提になる。
Dinomaly と異常検知は、種類を列挙できない対象への入口
異常検知は、正常な画像だけを見せて学習し、それと違うものを見つけるやり方になる。
検出との違いは根本的で、検出は「探すものの名前」を先に決める必要があるのに対し、異常検知は決めなくていい。海藻に混ざるゴミの種類を全部列挙することはできないが、「海藻だけの状態」を覚えさせて、そこから外れた画素を光らせることはできる。
Dinomaly は DINO 系のバックボーンを使った異常検知モデルで、名前もそこから来ている。
用途の現場で出てくる語
遮蔽は、農業ロボットの最大のボトルネック
遮蔽(occlusion)は、手前の物に隠れて対象の一部または全部が見えないこと。果樹園では葉と枝と他の果実が常に邪魔をする。
検出モデルの成績を上げても、そもそも写っていないものは検出できない。だから研究の主流は2つに割れている。ひとつは、見えている一部から全体を推測する方向。もうひとつが次の能動視覚になる。
能動視覚は、画像処理ではなく動きの設計
能動視覚 / Next-Best-View は、見えないならカメラを動かして見える位置へ行くという考え方になる。「次にどこから見るのがいちばん情報が増えるか」を計算して、アームやカメラを移動させる。
バナナの検出信頼度が、遮蔽状態の 0.30 から、視点を変えた後 0.62 に上がったという報告がある。
これは画像処理の話ではなく動きの設計の話になる。どこへ、どの速さで、どういう経路でカメラを動かすか。このシリーズが画像認識を扱いながら、最終的にロボットの動きへ戻ってくる合流点がここになる。
点群は、3次元に浮かぶ点の集まり
点群(point cloud)は、3次元空間に散らばった点の集合。距離センサや深度推定から作る。
「深度クラスタリングで枝葉の点群を除去」は、距離が近い点どうしをグループにまとめて、果実より奥にある葉のグループを捨てる処理になる。2次元の画像では葉と果実が重なって分けられなくても、距離が違えば分けられる。
近赤外とハイパースペクトルは、波長を増やす方向
近赤外(NIR)は、人の目に見える光より少しだけ波長の長い光。物質によって吸収の仕方が違うので、見た目が同じ色でも成分が違えば区別できる。食品と同色の樹脂片が見つかるのはこれによる。
ハイパースペクトルカメラは、数十から数百の波長ごとの明るさを1画素ずつ記録するカメラ。Log#2 で「カラー画像なら1画素につき数字が3つある」と書いたが、その3が100になったものと思えばいい。
Log#2〜4 でやってきたことは、この3つの数字をどう使うかの検討だった。3つでは足りない場面があり、そこでは数を増やすしかない、というのがこの段の結論になる。
センサ融合は、可視カメラ+近赤外+蛍光X線+ハイパースペクトルなど、複数の測り方を組み合わせて判定すること。
ドメインシフトという名前が、Log#3・Log#4 の現象に付いていた
ドメインシフト(分布シフト)は、学習したときの画像と、実際に使うときの画像の性質が違うこと。照明が違う、カメラが違う、背景が違う、季節が違う。
Log#3 で、光の色を変えただけで青いブロックの色相が 205.9 度から 50.9 度へ155度動いた。Log#4 で、白色光で合わせた赤検出をオレンジ光の写真に当てると画面の96%が赤と判定された。あれがドメインシフトの実例になる。
学習ベースに移っても、この問題は消えない。むしろ、なぜ壊れたのかが見えにくくなるぶん厄介になる。Log#3・Log#4 で「どの軸が何度動いたか」を数字で持っているのは、後で効く資産になる。
サービスと道具
名前 | 何をするか |
|---|---|
Roboflow | 画像を上げて、アノテーションして、学習して、公開するまで一続きでできる Web サービス |
Ultralytics Platform | YOLO 専用の同種サービス。2026年3月開始。SAM を使ったワンクリックのアノテーション付き |
CVAT / Label Studio | アノテーションだけを自前のマシンでやる無料ソフト |
FiftyOne | データセットの中身を目で見て検証する道具。学習機能はない |
Google AI Studio | Gemini 系のモデルをブラウザ上で試せる場所。コードなしで画像を投げられる |
Hugging Face | 学習済みモデルの配布所。多くのモデルがここから落とせる |
ライセンスは3種類だけ覚えておけば足りる
配布モデルを使うとき、使い方に条件が付く。最初に見るべきはここになる。
ライセンス | ざっくり何が起きるか |
|---|---|
Apache 2.0 / MIT | 商用利用できる。改変も再配布もできる。いちばん緩い |
AGPL-3.0 | 使うのは自由だが、ネットワーク越しに提供する場合に自分のコードも公開する義務が生じうる。商用で使うなら別途ライセンスを買う形が多い |
独自ライセンス | モデル提供者が個別に条件を書いている。研究利用のみ、特定用途の禁止など |
Ultralytics YOLO は AGPL-3.0 と商用ライセンスの2本立て。SAM 3 は Meta の独自ライセンス。Depth Anything 3 の絶対深度版は Apache 2.0。
個人の研究記録として公開するぶんには問題になりにくいが、誰かに納品する話になると最初に確認する項目になる。
Log#1〜8 で測ったことと、今回の用語の対応
このシリーズでやってきたことが、今回の用語のどこに対応するかを1枚にまとめる。
Log# | やったこと | 対応する用語 |
|---|---|---|
2 | 画素の数字が読み・保存・撮影で変わることを実測 | 入力の前処理、量子化(JPEG も情報を落とす) |
3 | HSV の色相が照明でどう動くかを実測 | ドメインシフト、データ拡張の必要性 |
4 | 閾値の線引きが光で崩れることを実測 | 信頼度閾値、ドメインシフト |
5 | モルフォロジーのカーネルで形を整える | 畳み込みのカーネル、後処理 |
6 | 輪郭から面積・重心・外接矩形・円形度を出す | インスタンスセグメンテーション、OBB |
7 | 特徴点の記述子で2枚を対応づける | 埋め込み、特徴、対応の正誤判定 |
8 | 射影変換で斜めの平面を真上に直す | カメラ内部パラメータ、キャリブレーション、深度の前提 |
古典的な処理を先にやったことの利点がここに出る。学習ベースの用語の多くは、古典側に対応する概念を持っていて、そちらは自分の手で測ってある。カーネルが何かは Log#5 で 34項目を予測して全部当てた時点で分かっているし、記述子の距離が正しさを示さないことは Log#7 で 867件の誤対応として実測してある。
この回で決まったこと
論点 | 結論 |
|---|---|
用語の段構造 | 第0段(仕組み)→ 第1段(出力の形)→ 第2段(固有名詞)→ 第3段(現場の語)→ 第4段(道具) |
学習と推論 | 別の作業として分けて話す。必要な機材が違う |
バックボーンとヘッド | バックボーンを凍結してヘッドだけ学習が今の標準 |
ゼロショットの位置 | まず試す入口。1万枚のアノテーションから始めない |
ベンチマークの読み方 | モデル同士の相対比較には使える。自分の対象での性能は自分で測る |
Log#1〜8 との関係 | 古典側で測った概念が、学習側の用語の下敷きになっている |
次回の位置 | Log#10 で IoU・Precision・Recall・mAP。この回で作った足場の上に置く |
この回の対話ログ(全量)
実装のない回なので、コードのかわりに対話そのものを記録として残す。外した議論や、途中で方針が変わった箇所も削っていない。
シリーズの現状確認から始まった
Log#1 から Log#8 までの記事8本を渡して、現状を確認してほしいという依頼から始まった。返した内容は、各回の到達点を1行ずつにした表と、全体の流れとして見えることの整理になる。
流れとして整理したのは3ブロック。Log#3〜4 が「色は光で壊れる」、Log#5〜6 が「形の量は測り方で決まる」、Log#7〜8 が「対応と変換は数だけ見ると嘘をつく」。3ブロックとも、期待していた主題より測定系そのものの誤差が先に出てきている構造になっていた。
未回収として挙げたのは3点。輪郭の削れ幅 0.45mm を減らすか補正するかが未着手であること。位置とサイズの交絡が現行シート設計では分離できないこと。Log#7 の tilt_45 で ORB の RANSAC が破綻して四隅が55px ずれた件の原因切り分けが済んでいないこと。
最新研究に寄せたいという転換
ここで方向が変わった。LinkedIn で見かけた投稿のスクリーンショットが3枚渡された。プールのアヒルを検出したもの、動画から深度を推定したもの(yolo26x-depth と書かれていた)、水平線の彼方の船を検出したもの(yolo26x-seg)。
そのうえで出た依頼がこれになる。
画像認識を最新の研究に寄せます。今の画像認識はどんなものが最新ですか?よく調査して教えてください。例えばロボットにやらせたいのは、農業の収穫や、食品の素材などに仕分け、ゴミの削除(例えば海藻の中にあるゴミをロボットに取り除いてもらうとか)などです。それらの精度を上げるためにどんな画像解析技術を学ぶ必要がありますか?またどんなサービスを試すと簡単に試すことができますか?
調べて返した内容の骨子は次のとおり。
現在の主流が3層に分かれていること。基盤モデル層(DINOv3 を凍結して使う)、タスクモデル層(YOLO26 で現場を回す)、言語で指定する層(SAM 3)。
用途ごとに詰まる場所が違うこと。農業の収穫は検出精度ではなく遮蔽が壁で、対策は多段の融合か能動視覚の2方向。食品の仕分けは RGB だけでは原理的に届かず、近赤外3波長カメラとカラーカメラの併用に深層学習を重ねる構成が実用に入っている(カメラ2台にそれぞれ GPU を付けて 40m/min)。海藻のゴミは検出問題ではなく異常検知問題として立てるのが正しく、ゴミの種類を列挙できない以上「海藻ではないもの」を見つける形にするしかない。
学ぶ順序として6段階を提示した。評価指標 → インスタンスセグメンテーション → 単眼深度 → オープン語彙・SAM 3 → 異常検知 → ファインチューニング。
試せるサービスとして、コードなしですぐ試せるもの(SAM 3 のプレイグラウンド、Google AI Studio の Gemini Robotics-ER)、数行のコードで試せるもの(Ultralytics の YOLO26)、データを集めて学習まで行く段階のもの(Roboflow、Ultralytics Platform、CVAT / Label Studio、FiftyOne)を分けて出した。
ハードの現実として、手元の環境(Mac M1・iPhone 2台・mechArm)で完結するのは YOLO26 の n / s サイズ、Depth Anything 3 の小さいモデル、Gemini API 経由の推論まで。SAM 3(848M)、DINOv3-L、AnyGrasp は GPU が要る、と切り分けた。
用語が分からないという指摘
ここで2度目の転換が入った。
わからない単語のオンパレードなので、まずは単語解説から順を追ってお願いします。初心者、中級者に教えるつもりで整理して教えてください。
これに対して、第0段から第4段までの段構造で用語を積み上げる形を出した。第0段にモデル・学習と推論・アノテーション・データセット・ゼロショット・バックボーンとヘッド・mAP・FPS を置き、第1段に出力の形の7種類、第2段に固有名詞、第3段に用途の語、第4段にサービス名を置いた。
各所で Log#1〜8 の実測に接続した。アノテーションは Log#7 の四隅クリックそのものであること。OBB は Log#6 の minAreaRect であること。ハイパースペクトルは Log#2 の「1画素につき数字が3つ」の3が100になったものであること。
この用語解説を記事にすることが決まった
3度目の転換で、当初予定していた Log#9(IoU・Precision・Recall・mAP)を一旦止めて、基礎知識だけの回を1本作る方針が確定した。
Log#9とかLog#10従来のやるべきことを一旦忘れて。基礎知識だけの記事を作りたいです。わかっているようでわかっていないことが結構あるので再確認の会にしたい。
追加で肉付けした基礎知識は次のとおり。学習の中身(損失・勾配降下・学習率・バッチ・エポック)。過学習と train / val / test の3分割と汎化。データ拡張と、それが Log#3・Log#4 の照明問題への対処であること。特徴・埋め込み・記述子が Log#7 の ORB / SIFT 記述子と同じ考え方であること。畳み込みのカーネルが Log#5 のモルフォロジーのカーネルと置き方は同じで、中身を人が決めるか学習で決めるかだけが違うこと。Transformer・パッチ・ViT・アテンション。信頼度スコアと信頼度閾値が Log#4 の色の閾値と同じ構造であること。NMS。モデルサイズの n / s / m / l / x と VRAM の見積もり。量子化・FP16・INT8・ONNX・TensorRT・エッジ。相対深度と絶対深度の区別と、絶対深度にはカメラキャリブレーションが要ること。ドメインシフトという名前が Log#3・Log#4 の現象に付いていたこと。ライセンスの3種類。
Log# の扱いは、この用語回を Log#9 とし、当初の Log#9(IoU・Precision・Recall・mAP)を Log#10 へ1本ずらす形で確定した。
次にやること
Log#10 で IoU・Precision・Recall・mAP に入る。使う画像は生成(正解の枠が既知)で、同一の検出結果がスコアリングの基準によって別のスコアになることを示す設計になる。
この回で作った足場のうち、Log#10 に直接効くのは3つ。信頼度と信頼度閾値が Log#4 の色の閾値と同じ構造であること。NMS が何を消しているか。ベンチマークの数字は相対比較には使えるが自分の対象では自分で測るしかないこと。
