2022年度第11回卒研セミナー(2022/06/30)

関連サイトと資料

tqdm, requests, PyYAML, seaborn, protobufライブラリのインストール

  1. 下の図の赤丸をクリックして、コマンドプロンプトを開いてください。


  2. 「conda activate torch_gpu」と入力して、エンターキーを押してください。 プロンプトの左側のカッコの中の表示が「base」から「torch_gpu」に変化し、仮想環境「torch_gpu」に入ったことを示しています。


  3. 仮想環境「torch_gpu」で、 「pip install tqdm --proxy=https://ccproxyz.kanagawa-it.ac.jp:10080」と入力して、 エンターキーを押してください。
  4. 仮想環境「torch_gpu」で、 「pip install requests --proxy=https://ccproxyz.kanagawa-it.ac.jp:10080」と入力して、 エンターキーを押してください。
  5. 仮想環境「torch_gpu」で、 「pip install PyYAML --proxy=https://ccproxyz.kanagawa-it.ac.jp:10080」と入力して、 エンターキーを押してください。
  6. 仮想環境「torch_gpu」で、 「pip install seaborn --proxy=https://ccproxyz.kanagawa-it.ac.jp:10080」と入力して、 エンターキーを押してください。
  7. 仮想環境「torch_gpu」で、 「pip install protobuf==3.20.1 --proxy=https://ccproxyz.kanagawa-it.ac.jp:10080」と入力して、 エンターキーを押してください。

学習済みモデルを用いた人物検出

使用したGPU処理に要した時間
GeForce RTX20802分41秒(161秒)
GeForce GTX1050Ti3分38秒(218秒)

import os
import numpy as np
import pandas as pd
from tqdm import tqdm
from sklearn.metrics import classification_report
import torch
  
# proxy
os.environ["http_proxy"] = "http://ccproxyz.kanagawa-it.ac.jp:10080"
os.environ["https_proxy"] = "http://ccproxyz.kanagawa-it.ac.jp:10080"
    

# GPUを使うかどうか
USE_DEVICE = 'cuda:0' if torch.cuda.is_available() else 'cpu'
device = torch.device(USE_DEVICE)
# データがあるディレクトリ
DATASET = 'forest-path-movie-dataset-main/forest-path-movie-dataset-main/'
    


# TorchHubからモデルを読み込む
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
# モデルを推論用に設定する
model.eval()
model.to(device)    

# データセットを読み込む
df = pd.read_csv(DATASET + 'all_file.csv')
df = df[df.when=='daytime'] # 昼間の画像のみ使う
  
y_true, y_pred = [], []
with torch.no_grad():
    for file, person in tqdm(zip(df.file,df.person), total=len(df)):
        filename = DATASET + file # 認識する画像ファイル名
        results = model([filename], size=640) # 640pixelで認識する
        bbox = results.xyxy[0].detach().cpu().numpy()
        pred = 0 # 人物を認識したかどうか
        for preds in bbox:
            type = int(preds[5]) # 0~3が位置、4が可能性、5がクラス
            if type == 0: # type=0が'preson'
                pred = 1 # 人物を認識した
                break
        y_true.append(person) # 正しいタグ
        y_pred.append(pred) # 認識した、人物が写っているかどうかのタグ
print(classification_report(y_true, y_pred)) # 分類スコアを表示
    

GeForce RTX2080での動作結果

GeForce GTX1050Tiでの動作結果