# ハエさんのお絵かき

お手本の周囲を観測し、固定のハエ脳モデルの反応からペンを動かす実験です。追加の読み出し器を学習させます。絵の意味を理解する能力や、実物のハエの描画能力を再現したものではありません。

## アクセスと最初の実習

音楽ページの「お絵かき」、または [公開版のお絵かき](https://hirokimorimoto0713.github.io/fly-music-lab/draw.html) を開きます。手元で起動する場合は `http://127.0.0.1:4389/draw.html` です。起動と接続方法は [README](../README.md) を参照してください。

1. 「ペンの使い方を練習」を押します。丸・三角・波線の局所的な観測と、方向境界の補助例、白紙を使い、105例から読み出し器を学習します。初回は全配線データの読み込みに時間がかかります。
2. お手本を「波線」にして「描いてもらう」を押します。一筆ごとに実計算し、動いた先から次の線を観測します。鉛筆を持つ3Dハエの演技、見ている範囲、脳反応を観察できます。
3. 「見る一筆」で履歴を選び、そこまでに描いた線と、その操作を決めた視覚入力・発火を確認します。
4. お手本を丸や三角、未練習の星に変えます。シードを2に変えると刺激の発火タイミングも変わります。形やシードでどの程度結果が変わるか比べてください。
5. 「自分で描く」を選び、お手本の用紙をドラッグします。一筆の線を入力でき、もう一度ドラッグすると置き換わります。「描き直す」で空にできます。キーボードの場合は用紙へフォーカスし、矢印キーで4 pxずつ線を描き、Enterで入力を区切ります。プリセットもキーボードだけで選べます。
6. 「3つの条件を比べる」で通常・伝播なし・視覚入力なしを計算します。各結果を選ぶと、その条件の線と脳反応を表示します。

自作のお手本を追加学習する機能はありません。固定の練習例から得た読み出し器で、自作線に対応できるかを試します。自作線が練習例と同じ場合もあるので、すべての自作線を未知の課題とは断定しません。途中停止は完了済みの学習を保持し、途中の線は作品として書き出しません。

## 数字の読み方

- 線からの平均距離: 描いた線の各点からお手本までの最短距離の平均。小さいほど線に近く、描線がなければ「描線なし」です。
- なぞれた範囲: お手本の点のうち、描線から6 px以内に入った点の割合。0〜100%です。
- いずれも256×256の仮想用紙上で計算し、表示する画面サイズとは独立です。線上を密に補間して近似します。

同じ場所を行き来しても距離は小さくなります。そのため距離だけでなく範囲も見てください。範囲100%でも、筆順や余分な線、形の意味が正しいことは保証しません。160筆で打ち切るため、止まった場所が終点とは限りません。

## 入力から一筆まで

1. お手本の一筆線を256×256の画素に変換します。開始位置と開始方向はお手本の最初の線から与えます。自分で開始点を探す課題は含みません。
2. ペン周辺の8方向、半径6・10 pxの近傍を調べ、線への近さを0〜1で表します。直前の向きから後ろ側の入力を抑える処理も含みます。これは方向情報を作る人工的な前処理です。画像全体の認識を脳に任せているわけではありません。
3. 8個の値を、LC4・LC6・LC9・LC11・LC12・LC15・LC16・LC17の入力率へ対応させます。入力細胞数は順に126・124・219・143・498・126・182・353です。入力率は `300 × センサー値² Hz`。種類と方向の対応はアプリ独自で、自然な受容野の再現ではありません。
4. 各観測で脳を初期状態へ戻し、20 msを計算します。全166,700神経・25,582,938接続の固定LIFを使用します。観測間の神経記憶を持ち越す実験ではありません。
5. 直接刺激した8種類の入力細胞を除外し、残りの電位・シナプス状態・発火数を192個の特徴にまとめます。音楽実験と同じ集約方法です。
6. 学習済みの線形読み出し器が8方向とペンを上げる操作の9候補を採点し、最大の候補を選びます。1回の移動は3 px、紙の内側で制限します。ペンを上げたら終了、下ろし続けた場合は160筆で打ち切ります。
7. 移動先と直前の向きから、次の視覚入力を作ります。推論関数 `predictPen(model, features)` はお手本の座標・形の名前・次の正解点・センサー値を直接受け取りません。

読み出し器の学習は特徴の標準化と正則化線形回帰（λ=10、切片あり）です。教師方向は学習中だけ使います。形の72観測、方向境界の32補助例、白紙1例で学習します。配線重みは変えません。特徴が完全にゼロならペンを上げる明示的な規則があります。

LC神経と視覚情報の関係は [Wu et al., 2016の研究](https://www.janelia.org/publication/visual-projection-neurons-drosophila-lobula-link-feature-detection-distinct-behavioral) を参照しました。この研究が本アプリの方向割り当てや絵の課題を検証したわけではありません。実配線とLIFの由来・限界は [モデル文書](model.md) にあります。

## 対照と限界

伝播なしでは直接入力した細胞は発火しますが、入力細胞以外の特徴はゼロになり、ペンを上げます。視覚入力なしでは初期状態から何も刺激せず、発火も描線もゼロです。これらは計算経路がつながっていることを確認する対照で、生物学的理解の証明ではありません。

初期試験ではLC4の細胞を8分割すると方向を区別しにくく、8種類のLCへ人工的に割り当てる方式へ変更しました。種類による応答の違いを読み出しに使う設計です。脳が自然に8方向を表現するとの主張ではありません。通常の画像処理だけの制御、別の配線、ランダム回路より優れているかも未検証です。

丸・三角・波線の局所的な教師例への適合と、自分が動いて観測する閉ループの成績は異なります。星は練習形状に含めませんが、その線分方向は練習した方向と重なるため、完全に未知の視覚特徴とも言えません。筆順の理解、複数ストローク、色、自由な作画は対象外です。

## 保存と反応図

- 絵をPNGで保存: 完了した実験の全描線を白い用紙に保存します。一筆の履歴を選択中でも、保存対象は全描線です。お手本や観測枠は含みません。
- 反応の画像を保存: 選択中の一筆の反応図をPNGへ保存します。橙色は実計算の発火、背景は実データの細胞体位置のXY投影です。位置不明の活動細胞数も表示します。
- 実験JSON: お手本、開始位置を含むペン軌跡、各観測の入力・神経特徴・発火位置・ペン操作、条件、採点、学習係数、対照結果を保存します。ノートとは異なる解析用の形式です。
- ノート: 学習係数と現在のお手本を保存・復元します。読み込みは500 KBまで。音楽のノートとは別の形式です。
- 学習と有効なお手本はブラウザへ自動保存します。空の下書きや未完了の再学習で、前回の有効な保存内容を消しません。端末・ブラウザ・URLが変わると自動では共有されません。

画像、線、神経計算を外部AIへ送りません。実験はブラウザ内で動きます。Mac実機での3DやSafariの速度は別途確認が必要です。

## コードを読むなら

`src/draw-model.js` の `observe` → `sense` → `predictPen` → `movePen` が一巡です。`teachingExamples` と `fitDrawing` が追加読み出し器の学習、`measureDrawing` が採点です。Workerの `src/draw-worker.js` が実データを読み込み、`src/draw-ui.js` が作画と保存を扱います。自動テストは `tests/draw.test.mjs` と `tests/draw-browser.mjs`、実測値は [検証記録](verification.md) を参照してください。
