2024年6月23日~2024年6月29日
6/23 Detectron2
久しぶりに画像検出系のコンペに参加。
試しにDetectron2で畑領域を検出できないかを試しているが、上手くいかない。(学習してもまったく領域を検出しようとしない。)
一応チュートリアルを参考にコードを実装したが、果たして実装方法が悪いのかデータ自体の予測が難しいのか。(提出スコアをみると結構低めなのである程度工夫しないと無理?)
わざと少量の学習データで過学習を発生させて、学習データで領域を検出できなかったら、たぶん予測が難しい。(一応初期のハイパーパラメータとかを調整するといけるかもしれないので、この辺を試行錯誤してみる。)
実装方法が悪い場合、一部カスタムデータに調整したアノテーション部分を極力チュートリアルの表現に調整することを考える。
それでもダメだったら別の手法を考えることにする。
他の候補として、mmdetectionがある。実はこれを当初使用する予定だったが、公式のチュートリアルノートブックが、バージョンの不整合で利用できない。一応バージョンを調整すると利用できるが、セットアップに30分以上かかり、実験に時間がかかるし、GPUリソースが無駄になるので正直避けたい。(環境の調整とかできないだろうか?)
6/24 Detectron2 デバッグ
久しぶりに画像検出系のコンペに参加。
solafuneの畑領域の検出コンペ
Detectron2で畑領域を検出できないかを試しているが、上手くいかない。(学習してもまったく領域を検出しようとしない。)
わざと少量の学習データで過学習を発生させて、学習データで領域を検出できなかったので予測が難しいものかと思ったら、チュートリアル上のミス?なのかわからないが推論時のconfigにモデルのアーキテクチャを指定すると上手くいった。
具体的には以下の通り。
修正前
cfg = get_cfg()
cfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, "model_final.pth") # path to the model we just trained
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5 # set a custom testing threshold
cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 512 # ROI_HEADのバッジサイズ???(default: 512)
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 1 # セグメンテーションのクラス数
cfg.TEST.DETECTIONS_PER_IMAGE = 2048
predictor = DefaultPredictor(cfg)
修正後
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")) ← ここ
cfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, "model_final.pth") # path to the model we just trained
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5 # set a custom testing threshold
cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 512 # ROI_HEADのバッジサイズ???(default: 512)
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 1 # セグメンテーションのクラス数
cfg.TEST.DETECTIONS_PER_IMAGE = 2048
predictor = DefaultPredictor(cfg)
恐らく推論時にモデルマージmerge_from_file
をしてなかったことで、学習済みモデルを上手く読み込めていなかったものと推測。(もしくは一部しか読み込めず、モデルのパラメータがぐちゃぐちゃになっていた。)
しかしチュートリアルでは、修正前のコードでも問題なく動いていた。カスタムデータでは上手く学習済みモデルが読み込めないのはなぜなのか。。。
6/25 ミニPCのライセンス復旧(進捗)
先日メーカーにライセンスに関するメールを送付したところ、返信があったため確認。
内容としては、Windows Timeを使い、同期を手動から自動にするとライセンス認証ができるとかなんとか。
しかしドキュメントを確認すると、エラーコードが「xc0EU1000A」の時の想定での対処であったためか、手順通りに行っても復旧できず。ローカルでは異なるエラーコードを確認
エラーコードを添付して送りなおすことにする。(そもそもエラーコードを送れば良い話ではあった。。。)
Windows Timeとは何ぞや
そもそもWindows Timeとは何なのか?
→「ネットワーク上のクライアントとサーバーの日時を維持します」
つまり、デバイスをサーバー(おそらくマイクロソフト)の時間を同期させるサービスで時刻を調整する役割を持っている。
なぜ時刻の同期がライセンスに関係あるのかは不明だが、NTPサーバー(時刻を設定し他のPCに同期させるサーバー)などの同期がうまくいっていない場合にエラーとなり、ライセンス認証が失敗する場合があるそうだ。
6/27 ミニPCの進捗
メーカーからプロダクトキーをもらって、何とかライセンスは復旧。
なぜプロダクトキーが消えたかについては不明だが、考えられるとしたらファームウェアの書き換えを試しに行ったのが要因か。(プロダクトキーはBIOSやファームウェア上に保存されているという話らしいので、書き換え時に消えた可能性あり。)
その後キーボードの設定を「日本語」に設定し、国は「日本」に変更して使用する準備はOK
これからやること
- chormebookからのリモートデスクトップ接続
- WSL2によるlinux環境の導入
chormebookからのリモートデスクトップ接続は「remote Desktop」で行っているが、上手くいかない。おそらくユーザー設定とパスワードの設定辺りが足りていないのだと思われる。
WSL2によるlinux環境の導入もまだうまくいかない。セットアップに必要な設定をBIOSで行う必要がありそうだ。
というかそもそもWSL2が何なのかを詳しく知る必要がある。
6/29 Detectron2
先日は仕事の都合で何もできず。。。
とりあえず今日はDetectorn2の学習済みモデルで、検証データの推論の結果のスコアを計算したりしていた。
ここで言えることは、Detectoron2のインスタンスセグメンテーションの予測は各boxの予測に、1つのチャネルを使っているということがわかった。
この言い方だと分かりにくいので言い方を変えると、
512×768サイズの画像があり、の画像から、100か所のバウンディングボックス(セグメンテーション)の予測があった場合、detectron2のpredictor
の出力は、
(100, 512, 768)
となる。