午前2時、路地のCCTVに、誰かが缶を投げて姿を消す様子が映った。コンピュータは画面の数百万個の数字から人を探し、その人を関節13個の棒人間に変え、棒人間の動きを数個の数字(特徴)にまとめて「投棄かどうか」を判定する。人が決めたルールがどこでだまされるのか、学習が何を直すのか、そしてなぜ「どこに落ちたか」が最も重要な手がかりなのかを最後まで追いかける。
CCTVの管制室には画面が何十もある。人が一晩中すべての画面を見張ることはできない。研究室が受けたミッションは一つだ。ゴミを捨てる「動作」をAIが先に見抜けるようにせよ。
600万個の数字から人を探し、姿勢を26個の数字にまとめる
46フレームの動きを特徴4つに要約し、ルールと学習を比べる
リアルタイムのスコアと判定保留、そしてこの方法が外れるところ
コンピュータが受け取るのは写真ではなく、マスごとの赤・緑・青の強さ(0~255)である。表示方法を切り替え、画面の上にマウスを乗せてみよう。
フルHD CCTVの1フレームは横1,920 × 縦1,080マスで、マスごとに赤・緑・青の3つの数字がある。1,920 × 1,080 × 3 = 6,220,800個。毎秒30フレームなら、1秒で1億8,662万個になる。この数字のどこにも「人」や「ゴミ箱」という名札は付いていない。だから最初の段階は、数字の山から何がどこにあるのかを見つけることである。写真が数字の行列になる過程は4-2で詳しく扱う。
2段階である。まず物体検出が、人・ゴミ箱・缶の四角(バウンディングボックス)を見つける。続いて姿勢推定が、人の枠の中で関節13か所の座標を見つける。レイヤーをオン・オフしてみよう。
座標は、図(1402 × 1122)から関節の点を直接読み取って写した値である。左上が(0, 0)で、下に行くほどyが大きくなる。人と向かい合っているので、画面の左側の腕が「右腕」である。
投棄は一枚の場面ではなく、3秒間の動きである。6つの場面を選んでみよう。黄色の点線は右手首の軌跡、下のグラフは手首の速さと缶の状態である。
6つの場面は実際の映像ではなく、関節の角度を時間とともに変えて作った合成データである。身長を1とする単位(身長1.7 m基準)を使い、投げた缶は重力を受けて放物線を描いて飛ぶ。コード1の関数とこの図は同じ計算である。実際の映像なら、セクション3の姿勢推定がフレームごとにこの座標を作ってくれる。
1,196個の数字を、人が選んだ特徴4つにまとめる。そのうえで2通りの方法で判定する。人が決めたルールと、データから学んだモデルである。しきい値を動かして、ルールがどこで間違うかを探してみよう。
6つの場面の速さ(×0.8~1.25)・位置・動作の大きさ(×0.75~1.25)を変えて学習用600個、テスト用300個を作り、関節座標に揺れ(姿勢推定の誤差)を加えた。正解は結果で決める:缶がゴミ箱の外の地面に残れば投棄。 そのため「遠くに投げる」でも、強く投げて箱に入れば正常である(テストの投げる場面のうち投棄は52%のみ)。マスの数字はその場面を投棄と判定した割合で、正解と5%p以上ずれたものは赤で示した。
ルール1(60.7%):手を振る場面の94%を投棄と判定した(誤報)。ゆっくり落とした投棄は98%を見逃した。
ルール2(76.7%):「手放したか」を加えたことで、手を振る場面の誤報は消えた。しかし落とす場面は相変わらず見逃し、箱に投げ入れた正常な場面まで投棄と判定してしまう。
特徴4つ+ロジスティック回帰(99.7%):学習した重みは[速さ −0.33、手放し 1.16、箱からの距離 3.93、遠ざかり 1.19]である。手首の速さにはむしろ小さな負の値が付いた。モデルが選んだ最も強い手がかりは「缶が箱の外の地面に残ったか」である。
座標をそのまま入れたMLP(92.3%):投げる「形」は学んだが、箱に入った投げにも警報を鳴らした(誤報19個)。物体の座標2つを加えても良くならなかった。1,288個の数字の中から「最後のフレームの缶のx座標が箱の外か」を、学習データ600個だけで見つけ出すのは難しい。
コード2のロジスティック回帰が学んだ重みをそのまま使う。これまでに見たフレームだけで特徴4つを計算し直してスコアをつける。0.6以上なら警報、0.4~0.6なら判定保留として人に引き渡す。
誤報は罪のない人を疑わせ、見逃しは取り締まりを無力にする。二つのミスの重さが違うので、基準を一つに決めるのは難しい。そこで、スコアがあいまいな区間(ここでは0.4~0.6)は自動で判定せず、管制員が映像を直接見るようにする。AIは「どの画面を先に見るか」の順番を決めるところまでに使い、最終判断と責任は人が負う。「ランダムな場面」を何度か押して、箱に入った投げや弱く投げた投げを探してみよう。
棒人間と特徴4つは理解しやすく軽い。そのぶん、取りこぼすものもはっきりしている。
どちらのコードも、Colabに標準でインストールされているライブラリだけを使う。「ノートブック(.ipynb)をダウンロード」したあと、Colabでファイル → ノートブックをアップロードから開くか、コピーして新しいノートブックのセルに貼り付ける。
関節の角度から棒人間を描く関数(fk)、6つの場面、特徴4つを計算する。セクション5の上の表と同じ数字が出る。自分のデータに置き換えるには、clip()が返す関節座標の代わりに姿勢推定ツールが出した座標を入れ、人の身長が1になるように割る。
場面を変えながら学習用600個・テスト用300個を作り、ルール2つ、ロジスティック回帰、MLP 2つを比較する。セクション5の実験表とセクション6の管制室の重みは、この出力からそのまま作られる。
ChatGPT、Qwen、ClaudeのようなAIアシスタントに貼り付けるプロンプトである。「コピー」を押すと、プロンプトの後ろに選んだコードが一緒に付く。〔 〕の中を自分の状況に書き換えて使えばよい。
AIの答えは出発点にすぎない。提案された論文・数値・ライブラリ関数は、必ず原文と公式ドキュメントで確認する。実在の人物が映る映像を使うときは、撮影の同意と個人情報の取り扱い規定をまず確認する。
本文の黄色い点線下線と同じ辞書である。セクション名を押すと、最初に出てきた場所へ移動する。
たとえは理解の第一歩だが、誤解の種にもなる。人の知覚と比べたたとえには強さを示した。直接 実際に同じ働きをするという根拠がある · 部分 一部の性質だけが似ている · なし 対応するものが知られていない
| 概念 | 日常のたとえ | 人の知覚のたとえ | たとえが外れるところ |
|---|---|---|---|
| 物体検出 | 写真の中の人ごとに付箋を貼る | 部分 一目で「あそこに人がいる」と気づくこと | 付箋は人が正確に貼るが、検出器は確信度とともに間違った枠も出す |
| 姿勢推定 | 写真の上に針金人形を重ねる | 部分 いくつかの点の動きを見るだけで歩く人だとわかる能力(光点歩行) | 人は隠れた腕も推測できるが、姿勢推定は隠れると見当違いの場所に点を打つか、点を抜かしてしまう |
| 特徴 | 犯人のモンタージュの「身長・服装・歩き方」の項目 | なし | モンタージュの項目は人が選ぶ。座標をそのまま学習するモデルは、項目を自分で作る(セクション5のMLP) |
| ルールベース | 「走っている人は怪しい」という警備員の目分量 | なし | 警備員は文脈を見て目分量を修正するが、ルールは決めた条件の外の場面ではそのまま間違える |
| 判定保留 | 審判のビデオ判定の要求 | なし | ビデオ判定はまれにしか使わないが、保留区間を広げると管制員の仕事がまた増える |
E-1 著者紹介 · E-2 学術参考文献 · E-3 図と数字の出典
講師、実務OJT担当者、チューター向けの運営ガイドである。時間は目安なので、実際の授業に合わせて調整する。
| 対象 | 映像AIに初めて触れる大学生・社会人。公共安全、施設管理、店舗運営でCCTV分析の導入を検討している実務担当者 |
|---|---|
| 前提知識 | 写真が数字の行列であること(4-2)、座標と距離の計算(ピタゴラスの定理)、正解率の意味 |
| 学習目標 | ① CCTV映像 → 物体検出 → 姿勢推定 → 特徴 → 判定の流れを説明する ② ルールと学習がそれぞれどんな場面で間違えるか例を挙げる ③ 誤報と見逃し、判定保留、個人情報をあわせて考慮した運用案を示す |
| 目安時間 | 読む35〜45分 · アニメーションの実演20分 · Colab実習25分(コード1 10分、コード2 実行1分 + 解釈14分) |
導入5分(セクション1 通報)→ セクション2・3 画面から棒人間まで12分 → セクション4 6つの場面8分 → セクション5 ルールの基準値の実験10分 → セクション6 管制室10分 → 確認問題5分。
セクション1・3 15分 → セクション5の実験表を自分たちの現場の誤報コストで読み直す20分 → セクション6 判定保留の区間を決める討論15分 → セクション7 法・偏りのチェックリスト作り15分 → コード2の実行・解釈25分。
入門者はセクション2・3・5の上の表・6だけ。中級者にはコード1のfeatures関数を手でたどらせたあと、新しい特徴(例:手とゴミ箱の最小距離)を1つ加えてコード2で成績を比べさせる。
| セクション | 立ち止まって問いかける質問 | 操作のコツ |
|---|---|---|
| 2 画面は数字 | 「600万個の数字のどこに人がいるのか?」 | 「数字で見る」でマスの大きさを64 → 16に小さくしてみる |
| 3 人を探す | 「棒だけを残すと、何を失い何を守れるのか?」 | プライバシーモードをオンにしたまま次のセクションへ進む |
| 4 時間へ | 「手を振るのと投げるのとでは、グラフのどこが違うのか?」 | 2つの場面を交互に押して、黄色い線の高さを比べる |
| 5 ルール対学習 | 「基準値をどこに置けば6つの場面をすべて当てられるか?」 | スライダーを端まで動かして「ない」ことを確かめ、実験表へ進む |
| 6 管制室 | 「スコアが急に上がるフレームで何が起きたのか?」 | 「落とす」を再生し、缶が地面に着いた瞬間に止める |
| 7 限界 | 「AIが警報を鳴らしたら、すぐに過料を科してよいのか?」 | 判定保留と人による最終確認を結びつける |
| 誤解 | 正しい説明 | 見せる場面 |
|---|---|---|
| AIはCCTVの画面を人のように「見る」 | 数字の格子を受け取り、段階ごとに計算する。人・ゴミ箱という名札は検出モデルが付ける | セクション2「数字で見る」 |
| 腕を速く振れば投棄である | 手を振るのも速く、落とすのは遅い。結果(物体がどこに残ったか)のほうが強い手がかりである | セクション5 ルール1 |
| 正解率99.7%なら現場でも99.7%である | 合成データでの結果である。実際の映像では隠れ・暗さ・複数の人のせいで下がる | セクション5 下の説明3 |
| 座標を丸ごと入れるディープラーニングのほうが常に優れている | データが少なければ、うまく選んだ少数の特徴が勝つこともある | セクション5 実験表のMLPの2行 |
| 棒人間だけを保存すれば個人情報の問題はない | リスクを減らすだけで、なくしはしない。歩き方で人を見分けられることもあり、設置・保管の規定はそのまま守らなければならない | セクション3 プライバシーモード、セクション7 |
1920 × 1080 × 3 = 6,220,800個。棒人間は13 × 2 = 26個なので、6,220,800 ÷ 26 ≈ 239,262、約24万分の1である。
距離 = √(0.12² + 0.08²) ≈ 0.144。1/15秒の間なので0.144 × 15 ≈ 2.16 身長/秒。ルール1の基準2.0を超える。
見逃し:足元に落とす(手首が遅い)。誤報:強く投げたがゴミ箱の中に入った「投げる」(速くて放したが投棄ではない)。
そうではない。ほかの特徴(特にゴミ箱の外の距離)が一緒に入った状態での取り分である。ゴミ箱の外の距離がすでに投棄をほぼ説明しているので、速度には、手を振るように速いが正常な場面を少し押さえる役割だけが残った。重みを1つだけ切り離して解釈してはいけない。
判定保留(0.4〜0.6)なので自動判定せず、管制要員に映像を回す。基準を1つにすると0.52はすぐに投棄警報になり、あいまいな場面の誤報がそのまま人に返ってくる。
コード1に5つ目の特徴「缶を放した瞬間の手とゴミ箱の横方向の距離」を加える。6つの場面でこの値を表にまとめ、「入れる」と「落とす」を見分けるのに役立つかを2文で説明する。
コード2のmake_datasetで学習場面の数を100 → 25 → 400と変え、ロジスティック回帰と「関節+物体+MLP」のテスト正解率を比べる。データ量によって2つの方式の差がどう変わるかをグラフで報告する。
| 入門者 | セクション4のグラフとセクション5の実験表は「どの場面で間違えたか」だけ読めば十分である |
|---|---|
| 発展 | MediaPipeで自分で撮った短い映像(同意を得た演技)から関節座標を取り出し、コード1のfeaturesに入れてみさせる |
| 次回 | 5-2 見分けるから作るへ — 同じ特徴の表で矢印の向きを逆にして、動作を作り出す |
「5-1 CCTVゴミ投棄」編を最後まで読みました。研究室の仲間たちがひと言ずつまとめます。