🎸

そっくりな人をAIは見分けられるか?第2回 チュートリアルに勝った!いろいろコード変えてわかったこと!

2024/09/13に公開

話すこと。

いろいろコード変えてわかったこと!
チュートリアルよりいい正解率がでたこと!

読者対象

作るだけでなく、精度を上げたい!
作るだけでなく、より理解したい人

データ目視検査

コードでデータ集めるだけだと、 違う画像も入ってたので、全部目で検査して削除しました。
後で気がついたが まだ消した方がよさそうな一枚見つけてしまったがそのまま。
そのデータで正解率だすと
あいみょ〇と小松菜〇を比べた。正解率82.1%
あいみょ〇とあい〇を比べた。 正解率91.6%
あいみょ〇と宮崎あお〇を比べた。正解率82.1%

転移学習前

以下のように学習前に評価精度だすようにした
毎回違うが大体50%前後をいったりきたり(想定通り)

###最初につまりtrainやるまえにvalのaccuracyだす
def train_model(model, criterion, optimizer, scheduler, num_epochs=25):
    since = time.time()

    # Create a temporary directory to save training checkpoints
    with TemporaryDirectory() as tempdir:
        best_model_params_path = os.path.join(tempdir, 'best_model_params.pt')

        torch.save(model.state_dict(), best_model_params_path)
        best_acc = 0.0

        for epoch in range(num_epochs+1):
            print(f'Epoch {epoch}/{num_epochs - 1}')
            print('-' * 10)

            # Each epoch has a training and validation phase
            for phase in ['val','train']:
                if phase == 'train':
                    model.train()  # Set model to training mode
                else:
                    model.eval()   # Set model to evaluate mode

チュートリアルよりいい正解率がでた!

学習率を以下の2step毎に0.8倍にしたら、全体で精度良くなった(本当は統計的にやるべき)
あいみょ〇と小松菜〇を比べた。正解率82.1%  > 92.8%
あいみょ〇とあい〇を比べた。 正解率91.6%  > 87.5%
あいみょ〇と宮崎あお〇を比べた。正解率82.1% > 85.7%

exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=2, gamma=0.8)
# tutorial setting
# Decay LR by a factor of 0.1 every 7 epochs
# exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)

4人一度に分類

以下のコードとデータ構造変えて正解率みると2択の平均よりは悪そう。ちなみにやはり勝っている!
チュートリアルコードで77%
自分が設定変えたもので81.2%
写真見るとやはりあいみょ〇と小松さんか間違ってるようだ。自分が見てもよくわからん。

# Here the size of each output sample is set to 2.
# Alternatively, it can be generalized to ``nn.Linear(num_ftrs, len(class_names))``.
model_ft.fc = nn.Linear(num_ftrs, 4)

あとがき

第三回は、調整をソフトに自動的にさせようとおもいます! optunaで!
あとは、同じデータでおしゃれ度をいい感じで出せたらこの回に追加します。

読んでくれてありがとうございます!よかったらいいね!かフォローしてくれたら嬉しいです!

Discussion