# カメラ距離やマイク（スピーカーフォン）を変えたらAI認識精度が急落する理由：前処理ハイパーパラメータの前提崩壊と再校正

> ハードウェア条件（カメラの取り付け高さ・左右の向き、ヘッドセットからスピーカーフォンへの変更など）を変えた途端にAIの認識精度が急落する原因を解説。旧ハード向け前処理（画面端クロップや角度ヒストグラム等）が害に転じる仕組みと、分類層のみの重み調整の限界を整理します。

- **Canonical URL**: https://nodus-lab.pages.dev/articles/hardware-change-camera-microphone-hyperparameter-regression-guide.html
- **CSV Comparison Table**: https://nodus-lab.pages.dev/datasets/hardware-change-camera-microphone-hyperparameter-regression-guide.csv
- **Category**: Architecture
- **Article type**: 選び方・公式資料から整理（実測なし）
- **Data Updated**: 2026-10-16

## 選び方の要点
- カメラの取り付け距離や左右の向きを変えた際、旧ハード向けに調整した『画面端の切り落とし（クロップ）』や『1度刻みの傾きヒストグラム』を残していると、有効領域の1/4を削り落としたり補正が打ち消し合ったりして精度が急落する。
- マイクをヘッドセットからスピーカーフォンへ変更した際、特徴抽出器（Encoder）を固定したまま最後の分類層（Classifier）の損失重みだけを2倍・4倍にしても効果はほぼ無く、別条件での回帰低下を招く。
- ハードウェア変更時はまず物理寸法・校正値の再測定と不要な前処理の撤去を行い、モデル適応では重み1倍（全件通過）の対照実験と複数乱数シード（3 seed等）で『1シード・最終エポックだけの偶然の差』を排除する。


## 選択肢の比較表
| ハードウェア変更に伴う問題 | 旧設定のまま残した場合の現象（例） | 原因のメカニズム | 正しい再校正・改善アプローチ |
| --- | --- | --- | --- |
| カメラ配置変更（右手用→左手用・距離接近）での画面端クロップ | 切り落とし幅を増やすと一致率が 77.4% → 64.7% へ低下する | 旧ハードでは写り込む指を隠すために有効だったが、新ハードでは対象が消え、さらに距離接近で1画面4マスしか入らないため160px削ると1/4のマスが消滅する | 旧ハード前提の切り落とし構成を撤去し、現在の画角での手の占有率を実測してから判断する |
| 画面内ドット数減少による傾き推定の崩壊 | 紙が傾いた録画で隣り合うフレームの推定角が +22度 と -25度 を行き来し、平滑化でゼロになり補正が全く効かない | 1画面のマス数が減り投票材料のドット対が減ったのに、1度刻みの細かいヒストグラムを使っているため真の角度の票が散り、偶然固まったノイズ対に最頻値を奪われる | ヒストグラムのビン幅を5度へ広げ、ペアの長さ重み付き投票に変更することで傾き補正を機能させる |
| マス間ピッチ推定の振れとマスの二重割れ | 1つのマスが左列と右列の2つのマスに割れて重なる現象が全フレームの15.7%で発生する | ピッチ許容帯域が広すぎるとマスの箱寸法が半分〜1.4倍まで振れ、さらに機体固有のマス間比（2.27）が分割閾値に近いため列間とマス間を取り違える | カメラ高さの実測値に基づきピッチ帯域を 0.8〜1.2倍 に縛り、点の二重検出は潰さず重なったマスの箱同士をマージする |
| マイク変更（スピーカーフォン化）に対する分類層のみの損失重み増加 | 端末データの損失重みを2倍・4倍にしても主指標の上積みは平均0.00〜+0.21ptに留まり、3シード中2シードでは1倍より低く、既存条件が最大-4.07pt劣化する | 特徴抽出器（encoder）を固定したまま最後の線形分類層（classifier）の重み比率だけを変えても、新しいマイクの音響特徴そのものを抽出できるようにはならない | 分類層のみの重み調整で無理に4倍を採用せず、1倍重みのまま全データを毎エポック通し、小さい学習率でencoderの一部（上位層）を含めて更新する |

## 詳細解説・原因分析
### ハードを変えたとき、なぜ「かつて精度を上げた工夫」が足を引っ張るのか
カメラやセンサーを使った組込みAIでは、筐体の改良によって「カメラの取り付け高さを4.0cmから3.0cmへ近づけた」「右手でなぞる構造から左手でなぞる構造へ変えた」といったハードウェア変更が頻繁に発生します。このとき、旧ハードウェアで80%以上の高精度を出していた認識パイプラインをそのまま流用すると、一気に精度が落ちることがあります。

原因を調べると、ニューラルネットワーク（点検出YOLO等）の推論精度ではなく、その前後に置かれた幾何処理のハイパーパラメータが前提崩壊を起こしています。例えば、旧ハードでは「右手の指が画面右端に写り込むのを防ぐため、画面端160pxを切り落とす（クロップする）」という前処理が有効でした。ところが左手用ハードに変えてカメラ距離も近づけると、右端にはそもそも手が写らなくなり（占有率0%）、さらに1画面に4文字分しか入らない拡大率になったため、160px切り落とすと「読めるはずの1文字分（画面の4分の1）を自ら削り落とす」だけの害悪に転じてしまいます。

また、カメラが近づいて1画面内のドット数が減ると、紙の傾きを求める「1度刻みの角度ヒストグラム投票」で票がばらけ、隣り合うフレームで推定角度が+22度と-25度に暴れて平滑化でゼロに打ち消し合う現象や、点の二重検出を前段で潰したせいで逆に格子当てはめの情報が減って精度が落ちるといった逆転現象も起きます。ハードウェアを変えたときは、まず基準高さでのピクセル寸法（DX/DY）を実測して校正値を取り直し、旧ハード専用の切り落としを撤去したうえで、ピッチ許容帯域（例：実測のばらつきを包む0.8〜1.2倍）を締め直すだけで大幅な改善が得られます。

主なチェックポイントは以下の通りです：旧ハードの録画・数字との単純比較禁止：ハードウェアや評価判定器を修正した後はベースライン自体が変わるため、現行ハードの録画セット上で全候補を測り直す / 前段で潰すか後段でまとめるかの検証：点の二重検出がフレーム内で出ていても、前段で無理に間引くと格子推定の材料が減って精度が落ちることがあるため、後段のマス分割時に重なり率（例：0.3以上）でマージする方が強い / 距離変更時の再校正：カメラと紙面の距離を大きく変えた場合、単純な反比例の式だけではレンズ特性や基準点の違いで数%の残差が出るため、設定ファイルの基準ピクセル値そのものを実測し直す。
参照: [scikit-learn User Guide: Cross-validation and Model Evaluation](https://scikit-learn.org/stable/modules/model_evaluation.html)
参照: [scikit-learn User Guide: Common pitfalls and recommended practices](https://scikit-learn.org/stable/common_pitfalls.html)

### マイク変更（スピーカーフォン適応）と「1シード・最終エポック比較」の罠
同様に、音声認識で実運用デバイスが「近接マイク・ヘッドセット」から「スピーカーフォン（距離が遠く反響や環境音が混じる端末）」へ変わった場合、スピーカーフォン収録データの損失重み（Loss Weight）を2倍・4倍に増やして再学習したくなります。

しかし、特徴抽出器（wav2vec 2.0等のEncoder）を固定したまま最後の分類層（Classifier）だけを更新する予備実験を3つの乱数シード（seed 42 / 43 / 44）で回してみると、非常に重要な教訓が得られます。もし seed 42 の1回しか実験していなければ、1倍重み（75.87%）に対して4倍重み（76.86%）が「+0.99ポイント改善した」と結論づけてしまったはずです。ところが seed 43 と seed 44 では4倍重みの方が1倍重みより低く、3シード平均の上積みはわずか +0.21ポイント で一貫性がなく、さらに既存の別マイク条件では最大 -4.07ポイント の回帰低下が起きていました。

また、「未更新の初期モデル（73.02%）」と「4倍重みで学習したモデル（76.49%）」だけを比べて「重みを4倍にしたおかげで+3.47ポイント改善した」と説明するのも誤りです。なぜなら、重み1倍のまま全データを1回ずつ通して分類層を更新するだけでも 76.28% まで改善するからです。「学習を回したこと自体の効果」と「重みを増やした効果」を混同せず、端末の音響特性に適応させるなら重みは1倍を維持したまま、Encoderの一部（上位層）を小さな学習率で一緒にファインチューニングする方針を選ぶべきです。

主なチェックポイントは以下の通りです：初期値との差と対照実験の差を混同しない：重み4倍で初期値から上がった分をすべて重み付けの効果と呼ばず、必ず同一条件の『重み1倍（Control）』との差分で評価する / 最終エポック比較の罠：1倍重みはエポック6〜10でVal最良に達し、4倍重みはエポック18〜19で最良に達するなど学習速度が異なるため、最終20エポック時点だけを切り取って比較しない / 複数シードでの一貫性確認：0.2〜0.5ポイント程度の微差は乱数シード1つで簡単に逆転するため、ハイパーパラメータの採用判断には複数シードまたはグループ交差検証を用いる。
参照: [scikit-learn User Guide: Cross-validation and Model Evaluation](https://scikit-learn.org/stable/modules/model_evaluation.html)
参照: [scikit-learn User Guide: Common pitfalls and recommended practices](https://scikit-learn.org/stable/common_pitfalls.html)

## 記事の範囲
2026年10月16日にscikit-learnの評価・交差検証ガイドラインを確認し、カメラ幾何条件・マイク音響条件の変更に伴うハイパーパラメータ再校正と対照実験の手順を整理した記事です。


## 参考資料
- [scikit-learn User Guide: Cross-validation and Model Evaluation](https://scikit-learn.org/stable/modules/model_evaluation.html)
- [scikit-learn User Guide: Common pitfalls and recommended practices](https://scikit-learn.org/stable/common_pitfalls.html)

## 次に考えたいこと
- [オフライン正答率は高いのに実機で使えない理由：ストリーミングAIにおける「内容一致率」と「発火タイミング一致率」の乖離](https://nodus-lab.pages.dev/articles/streaming-ai-offline-accuracy-vs-realtime-timing-guide.html)
- [PyTorchで学習したモデルをONNX INT8量子化して実機へ載せるときに精度が落ちる原因：前処理不一致と段階的検証](https://nodus-lab.pages.dev/articles/edge-ai-pytorch-fp32-to-onnx-int8-preprocess-mismatch-guide.html)
- [機械学習で「全体の正答率（Accuracy）」だけ見ると失敗する理由：混同行列・Balanced Accuracy・誤り内訳の読み方](https://nodus-lab.pages.dev/articles/ml-accuracy-trap-confusion-matrix-balanced-accuracy-guide.html)
