0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DJProject_備忘録_8

Last updated at Posted at 2025-01-15

2025-01-14

(続き)

あとやることは…

・ballスケジュール「make_x」を仮定
・InitAiTypesPlayerの実装(🔺)
・InitAiTypesPlayerをmake_xに追加
・ChangeAiModePlayerの実装(✅)
・ChangeAiModePlayerをmake_xに追加…しない(トグルスイッチでかつデフォルトがTrainの為)(✅)
・ChangeTravelModePlayerの実装(✅)
・ChangeTravelModePlayerをmake_xに追加しない(トグルスイッチでかつデフォルトがForwardの為)(✅)
・AiSettingsPlayerの実装
・AiSettingsPlayerを見ながら、TokenizerPlayerを作る。
・AiSettingsPlayerをmake_xに追加
・EmbeddingPlayerの実装
・EmbeddingPlayerをmake_xに追加

実装中のつぶやき

2025-01-18

やること

あとやることは…

・ballスケジュール「make_x」を仮定
・InitAiTypesPlayerの実装(🔺)
・InitAiTypesPlayerをmake_xに追加
・ChangeAiModePlayerの実装(✅)
・ChangeAiModePlayerをmake_xに追加…しない(トグルスイッチでかつデフォルトがTrainの為)(✅)
・ChangeTravelModePlayerの実装(✅)
・ChangeTravelModePlayerをmake_xに追加しない(トグルスイッチでかつデフォルトがForwardの為)(✅)
・AiSettingsPlayerの実装(✅)
・AiSettingsPlayerを見ながら、TokenizerPlayerを作る。(✅)
・AiSettingsPlayerをmake_xに追加(✅)
・EmbeddingPlayerの実装(✅)
・EmbeddingPlayerをmake_xに追加(✅)
・BallOfjectの、ScheduleOfScheduleに、「モードの分岐処理は、各々プレイヤー自体に実装してください。」と、冒頭に記入しておく。(✅)
・スケジュールモードのスケジュール(モード分岐)の実装(✅)
・そして、上記のスケジュール実装中で必要と認識し、仮定したプレイヤーの実装
・スケジュールの実装


…ちょっと待って、、、ScheduleOfScheduleでスケジュールモードを切り替えるより、スケジュールモードを切り替えるプレイヤーを作った方が良くない、、!?

わかった、ScheduleOfScheduleは
「このモードが終了した後に、このモードを実行する」
という概念のみにしよう。つまり、forやmodeのif分岐は、全てプレイヤーの方で実装すれば、ScheduleOfScheduleはものすごくスッキリしたものになる!!!(上記のやることリストをそのように改変済み)

2025-01-23

あとやることは、、

・BallOfjectの、ScheduleOfScheduleに、「モードの分岐処理は、各々プレイヤー自体に実装してください。」と、冒頭に記入しておく。(✅)
・スケジュールモードのスケジュール(モード分岐)の実装(✅)
・そして、上記のスケジュール実装中で必要と認識し、仮定したプレイヤーの実装
・スケジュールの実装


モード切り替えのペア実装が完了した。↓


// 最初はロードから。
if ("FirstMode" == this.ScheduleMode)
{
    this.ScheduleMode = "ParamsLoadMode";
}
// Aiの推論設定
else if ("ParamsLoadMode" == this.ScheduleMode)
{
    this.ScheduleMode = "SettingsOfPredictMode";
}
// 入力データのベクトル化
else if ("SettingsOfPredictMode" == this.ScheduleMode)
{
    this.ScheduleMode = "ToVecOfXOfPredictMode";
}
// 推論を開始する
else if ("ToVecOfXOfPredictMode" == this.ScheduleMode)
{
    this.ScheduleMode = "OnePositionLoopOfPredictMode"; // eosトークンで抜ける
}
// 大臣と情報交換する(推論結果とサンプルデータのやり取り)
else if ("OnePositionLoopOfPredictMode" == this.ScheduleMode)
{
    this.ScheduleMode = "SNSWithDaijinMode"; // eosトークンで抜ける
}
// Aiの設定(訓練としての設定)
else if ("SNSWithDaijinMode" == this.ScheduleMode)
{
    this.ScheduleMode = "SettingsOfTrainMode";
}
// 入力データとラベルデータの、ベクトル化
else if ("SettingsOfTrainMode" == this.ScheduleMode)
{
    this.ScheduleMode = "ToVecOfXandTMode";
}
// 学習開始
else if ("ToVecOfXandTMode" == this.ScheduleMode)
{
    this.ScheduleMode = "OnePositionLoopOfTrainMode";
}
// パラメータのセーブ(セーブするしないの判断処理を含む)
else if ("OnePositionLoopOfTrainMode" == this.ScheduleMode)
{
    this.ScheduleMode = "ParamsSendToHomePCMode";
}
// 推論設定に戻る(ループする) ループだけどこっちが正規ルートの為実装。
else if ("ParamsSendToHomePCMode" == this.ScheduleMode)
{
    this.ScheduleMode = "SettingsOfPredictMode";
}

(ヤバっ、私の神的デザインパターンがバレるぅ💕)

未実装のモードの実装へ。

未実装のモード群

(実装次第チェック)

FirstMode(✅)
ParamsLoadMode()
SettingsOfPredictMode
ToVecOfXOfPredictMode
OnePositionLoopOfPredictMode
SNSWithDaijinMode
SettingsOfTrainMode
ToVecOfXandTMode
OnePositionLoopOfTrainMode
ParamsSendToHomePCMode

2025-01-23

やることリスト

FirstMode(✅)
ParamsLoadMode
→ これは内部で(
class BitEncoderDecoderPlayer(仮)
    def FlattenAndEncodeToBits
    def UnpackFromBitArray
)の実装が必要()
SettingsOfPredictMode
ToVecOfXOfPredictMode
OnePositionLoopOfPredictMode
SNSWithDaijinMode
SettingsOfTrainMode
ToVecOfXandTMode
OnePositionLoopOfTrainMode
ParamsSendToHomePCMode

スケジュールの実装()


InstallFromParams2DcodePlayer
は、

  • エンコード(1行25bitの行列でデータを作る)プレイヤーを実行
  • AiSettingsPlayerに渡す
    の2つだけかな?

→でも、エンコード、デコードはプレイヤーでまとめたいよ…

2025-01-25~

試行錯誤中(https://chatgpt.com/g/g-kuufVcS5H-miraitoriko/c/67939986-7220-8012-b7d0-a4ca3710fff0)
・モードのスケジュールが完了
・仮定義したスケジュールの実装
・仮定義したプレイヤーの実装
・_BitEncoderDecoderPlayerの実装中

チェックリスト

[✅] FirstMode
[✅] ParamsLoadMode
[✅]_BitEncoderDecoderPlayer
 [✅]FlattenAndEncodeToBits メソッド
 [✅]UnpackFromBitArray メソッド
 ▷(https://chatgpt.com/g/g-kuufVcS5H-miraitoriko/c/6797df6c-8aac-8012-abea-3abf2bef8dfe)
 ▷ BitEncoderDecoderPlayerは、全てのパラメータを、ひとつの1次元ジャグにまとめて出力するメソッド、またその1次元ジャグをデコードロードするメソッドを持たせました。
 なので、2Dcodeデータ ⇔ モデルParams のやり取りができるプレイヤーです。
[✅]OptimizerPlayerの実装
[🔺]作られたParamsのBit配列を、2Dcodeの限界容量毎にスプリットした2次元リストの作成(エンコード)するメソッド、それをデコードするメソッドを持った、新しいBitArraySplitterPlayerの実装
 ▷ 2Dコードの限界容量を取ってこよう(⚠️手間と判断。デバッグ時に実装する。)
[✅] // 二次元Bit配列からひとつ取り出すPlayerの実装
[] t_QRCodeErrorCorrectionAndMaskPlayerDir は多分使ってないですね、、。明確に使っていないことを確認する
[✅] // 二次元Bit配列にデータが無くなり次第(先頭のデータがnullになり次第)、次のモードを設定するPlayer の、実装(プレイヤーじゃないかも。)
[✅] // 二次元ジャグ化したら、各行の先頭にインデックスを加える(paddingSize=3 #100<1000枚程のテクスチャ使うから。) の実装
[✅]そのプレイヤーでエンコードされたデータを、forで回して沢山の2Dcodeを生産する形に、Modeを作り直し。
[✅] 二次元ジャグ化したら、各行の先頭にindexを追加する機能をどうにか入れる(BitArraySplitterPlayerに機能を追加する形にしよう。)
[✅] ParamsToBitDataModeのプレイヤー群のMainの再確認
[🔺]学習結果を今回保存するしないの判断をプレイヤーでやり、モード分岐をする。(保存するしないの条件だけ未実装)(ParamsSaveFlagControllingPlayerとして実装中…)

[✅]プレイヤー同士のクラス変数の渡し合いの実装
(
ParamsToBitDataMode(encode時、入力される二次元ジャグのindexがバラバラでも対応できるように改良もした)(✅)
BitDataTo2DcodeMode(
BitArrayFirstToEndHandlerPlayer(✅)
ChecksumPlayer(
ExtractedDataはstring型にしてこのプレイヤーに処理させなくちゃ。このプレイヤーでやる。関数を作った。
) (✅)
QRCodeMapInitializerPlayer (✅)
QRCodePositionDetectionPlayer (✅)
QRCodeTimingPatternPlayer (✅)
QRCodeAlignmentPatternPlayer (✅)
QRCodeMarkingPlayer (
あれっ、引き継ぎがへん、確認開始
QRCodeMarkingPlayer の変数の取得は次の通りに書かれている。

// 前のプレイヤーからデータを取得
ModeCharNumInfoChecksumBitlist = QRCodeAlignmentPatternPlayer.ModeCharNumInfoChecksumBitlist;
Version = QRCodeAlignmentPatternPlayer.Version;
GridSize = QRCodeAlignmentPatternPlayer.GridSize;
QRCodeMap = QRCodeAlignmentPatternPlayer.QRCodeMap;

全ての変数は、1つ前のプレイヤーである「QRCodeAlignmentPatternPlayer」から取得しているようだ。
全ての変数しっかり存在しているか確認しよう。
?QRCo・・・ernPlayerに存在?
ModeCharNumInfoChecksumBitlist(❌)
Version(❌)→versionは存在
GridSize(❌)→ gridSizeは存在
QRCodeMap(❌)→ qrCodeMapは存在
# 修正に取り掛かる
ModeCharNumInfoChecksumBitlist(❌)
→これは厄介ね。過去の自分のまとめ方を思い出しながらいこう。
現在、
・データ
・QRCodeMap
のふたつを作成中。ModeCh・・・Bitlistは後者と思われる。
ChecksumPlayer にこの同じ名前の変数がある!
Version(✅)
gridSize(✅)
qrCodeMap(✅)
)(✅)
WriteMainDataPatternPlayer (✅)
QRCodeMaskApplicatorPlayer (✅)
QRCodeErrorCorrectionAndMaskPlayer (🔺(多分入力変数不要))
QRCodeFormatInfoInserterPlayer (✅)
QRCodeTextureManagerPlayer(🦌)
)

[✅] ParamsToBitDataMode は、一次元ジャグ化するためのモード、とスケジュールにはメモされているけれど、本当に?確かめる。ParamsToBitDataModeで実行されている内容は…(
InitFromQrcodePlayer(AllParamsを一次元ジャグ化)(✅)
ParamsSaveFlagControllingPlayer(全開セーブ時刻から時間経過した時 かつ左大臣がワールドに存在した時に🚩を立てる)(🔺)
QRCodeModePlayer(モードを数字に変えるだけ)(✅)
QRCodeCharacterCountPlayer(CalculateBitCount() が
"0010" (英数字モード) → 9ビット、、
などの初期化設定。具体的にモードごとのビット数を決定して、指定された長さでゼロ埋めしたビット列を生成。最終的には、
モード指示子と文字数ビット列を結合して、最終的なビット出力を 
outputBits に格納。設定と最初のbitの用意だけなので、問題は無し)(✅)
QRCodeBitConversionPlayer(データをbitに変換するプレイヤー)(✅)
BitArraySplitterPlayer (QRの最大容量ごとにスプリットし、二次元ジャグ化しているプレイヤー)(✅)
)

[✅] Alphanumericモードは、
「
0 1 2 3 4 5 6 7 8 9  
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z  
スペース $ % * + - . / :  
」
しか変換ができないのだそう。なので、BitEncoderDecoderPlayer内では、アライメントをすべて「スペース $ % * / :  」のどれかにする様な改良が必要。修正した。README.mdにも「tokenizerにはalphabet飲みを使用してください」と記した。

[✅]あれ?AllParamsは二次元ジャグ。QRにするための一次元ジャグ化はどこ?(BitEncoderDecoderPlayerだ。でもこのプレイヤーはスケジュール内には存在させずに、ライブラリとして利用した気がする…使用している箇所を突き止める▷使っていなかった。BitEncoderDecoderPlayerをどうにか実装する。)(エンコードメソッドをInitFromQrcodePlayerResetのメインメソッドに実装した。)

[✅]思い返すと、重みやバイアスのなにか保存する時、文字列とfloat混ぜた気がするから、確認と修正(encode時にはstr化、Decode時には元に戻していたから問題なし)

### モードの作成と必要なプレイヤーの実装
▶︎モードスケジュールを上から見ていきます。([✅]スケジュールを整理しました。)

[✅]YoutubeQRsChangeToArray2DMode ▷⚠️"ball"にスケジュールを作っていこう、つまりプレイヤーは仮定物。メモした紙を見ながらスケジュール
// YouTubeの必要画面を
// 全てスクリーンショットし、
// それからQRを全てデコードし、
// Array2Dに変換するまで。
// 「YoutubeQRsChangeToArray2DMode」
// [仮]init_YoutubeQRChangeToArray2DModePlayer // QRcodeの数を元にスクリーンショット1枚あたりの全てのQRの座標をリスト化, スクリーンショットの最大枚数は何枚なのか、を、メンバ変数として持たせる
// [仮]YoutubeScreenShotsPlayer // 最大枚数集まるまでスクリーンショットする(既に集まっていればパス)
// [仮]ScreenShootSelectingPlayer // 自分が処理すべきスクリーンショットを選択する
// [仮]QRcodeSelectingPlayer // 自分が処理すべきQRcodeを抜き取り選択する
// CentralSquareReaderPlayer // 抜き取ったQR含有テクスチャからQR部分を取り出す。(この時点でまだQRの台形歪みは未処理)
// TrapezoidCorrectionPlayer // QR コードの台形歪みを補正し、25x25 の正方形マトリックスにリサイズするプレイヤー。
// PatternDetectionPlayer // QR コードの画像を取得し、それを 25x25 のバイナリマトリックスに変換して、主要なパターン(位置検出パターン、タイミングパターン、ダークモジュール)が正しく存在するかを検出するプレイヤー。
// ReplacePatternPlayer // QR コードの 2D マトリックスにおける主要なパターン(位置検出パターン、タイミングパターン、ダークモジュールを特定の値(-11)で置き換えるプレイヤー。
// ColumnSplitterConcatPlayer // QR コードの 2D マトリックスに対して特定の処理を行い、新しいジャグ配列を作成するプレイヤー。
// RightBottomReaderPlayer // QRコードデータの2Dリストを解析し、右下からデータを抽出して1Dリストとして取得するプレイヤー。
// BitDataProcessorPlayer // QRコードや画像データから取得したビットデータを処理し、8ビットごとに分割する役割を持つプレイヤー。
// ChecksumCheekPlayer // ChecksumCheekPlayer は、QRコードのデータ処理後にチェックサムの整合性を確認するプレイヤー。
// SpiritBitDataPlayer // QRコードのデータ部分を解析し、モードや文字数情報を取得するプレイヤー。
// BitModeDataReconstructorPlayer // QRコードのビットモードデータを復元するプレイヤー。
//  [仮] WaitressQRDataWritingSchedulerPlayer  // 復元したデータをウェイトレスの帳簿に書き込み、次のユーザーに(ウェイトレスがいなければ、ウェイトレスが来るまで "Complete" を返さず、待機。さらに、全てのQRの読み込みが終わったことがウェイトレスから告げられたら、"Completed"とし、読み込み完了とする。
)

☆SNSBy1byteFromTexturePlayerTypesの作成
[🦌] SNSBy1byteFromTexturePlayerTypes(
[🦌] init_SNSBy1byteFromTexturePlayerTypesPlayer
[🦌] EncodePush_a_IntToTexturesPlayer
[🦌] PullDecode_a_TexturesToIntPlayer
)


[🦌] YoutubeQRsChangeToArray2DModeのクラス変数の受け渡し受け取りの確認と、未実装プレイヤーの実装(
[] init_YoutubeReaderPlayer
YoutubeScreenShotsPlayer
ScreenShootSelectingPlayer
QRcodeSelectingPlayer
CentralSquareReaderPlayer
TrapezoidCorrectionPlayer
PatternDetectionPlayer
ReplacePatternPlayer
ColumnSplitterConcatPlayer
RightBottomReaderPlayer
BitDataProcessorPlayer
ChecksumCheekPlayer
SpiritBitDataPlayer
BitModeDataReconstructorPlayer
WaitressQRDataWritingSchedulerPlayer
)




[]SettingsOfPredictMode
▷ ParamsLoadModeの次に実行されるものですね。 Aiの推論設定です。
[]ToVecOfXOfPredictMode
[]OnePositionLoopOfPredictMode
[]SNSWithDaijinMode
[]SettingsOfTrainMode
[]ToVecOfXandTMode
[]OnePositionLoopOfTrainMode
[]ParamsSendToHomePCMode
[]プレイヤー同士のクラス変数の渡し合いの実装
[✅] ParamsToBitDataMode
▷パラメータをBit一次元化と、それをQRCodeサイズにスプリットして2次元化
[✅] BitDataTo2DcodeMode
▷2次元Bitパラメータを全てQRcodeテクスチャ化
[]

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?