teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2093閲覧

YOLOの学習曲線について

nbvcc

総合スコア1

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2023/01/04 09:58

1

0

前提

機械学習の物体検出に使うyoloに関する質問です。

オリジナルのデータセットを用いて学習後にprecisionとrecallのグラフが出ると思います。
Precision や Recall の学習曲線は訓練データと検証データどちらで計算して出力しているのでしょうか?

計算していることがわかるyolov7に使用するファイルなどありましたら教えていただきたいです。
https://github.com/WongKinYiu/yolov7

実現したいこと

Precision や Recall の学習曲線は訓練データと検証データどちらで計算しているか確認する

試したこと

yolov7/utils/loss.py

補足情報(FW/ツールのバージョンなど)

学習にはyolov7のtrain.pyを使用しています。

nbvcc👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2023/01/07 23:23

「解決済」にしてください
guest

回答1

0

ベストアンサー

Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.38453
とあります。

ここから進めていきます。

  1. どこかにprint("Recall")みたいな関数があると仮定します。
  2. リポジトリでRecallという文字列を検索します。
  3. リポジトリのmetrics.pyap_per_classという関数に行きつきます。
  4. リポジトリでap_per_classという文字列を検索します。
  5. リポジトリのtest.pyに行きつきます。
  6. 引数のstatsを使ってデータを捌いていることが分かります。
  7. stats = [np.concatenate(x, 0) for x in zip(*stats)] # to numpy…もう少し上を探る必要がありそうです。
  8. stats.append((correct.cpu(), pred[:, 4].cpu(), pred[:, 5].cpu(), tcls))…これらの値がstatsとなり、metricsとしてprintされているようです。これは、具体的には、stats.append(正解,予測値)という構造となっている関数とみなすことができそうです。

「じゃあこの予測値はどこから来た?」を考えます。

  1. for si, pred in enumerate(out):でpredが出現しています。outの由来が分かれば良さそうです。
  2. out = non_max_suppression(out, conf_thres=conf_thres, iou_thres=iou_thres, labels=lb, multi_label=True)でoutを入れてoutを出していますので、もう少し上を探る必要がありそうです。
  3. out, train_out = model(img, augment=augment) # inference and training outputsつまり、生イメージを入れて、データ増強をしたものをモデルにぶち込んでいる構図となります。このimgの由来が質問者さんの答えっぽそうです。
  4. for batch_i, (img, targets, paths, shapes) in enumerate(tqdm(dataloader, desc=s)):とありますので、dataloaderからimg切り出していることが分かります。
  5. モードの切り替えに従ってデータを切り出しているようです。
  6. 当たり前と言えば当たり前ですが、コードの引数に行きつきます。parser.add_argument('--task', default='val', help='train, val, test, speed or study')とあり、特に指定がなければopt.task = 'val'が指定されます。

もうわかりましたね?

Precision や Recall の学習曲線は訓練データと検証データどちらで計算しているか確認する
test.pyを走らせるとopt.task = 'val'が有効になり**、データローダーにバリデーションデータが読み込まれ、Recall云々がバリデーションデータを基に**算出されます。

投稿2023/01/05 16:10

編集2023/01/05 16:12
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nbvcc

2023/01/06 07:21

お忙しい中ご対応いただきありがとうございます。 precisionは訓練データ、Recallは検証データを基に算出しているということでしょうか?
退会済みユーザー

退会済みユーザー

2023/01/06 12:36

precisionもrecallも https://github.com/WongKinYiu/yolov7/blob/55b90e111984dd85e7eed327e9ff271222aa8b82/test.py#L104 のdataloaderに突っ込むデータ次第で変わります。そこにTrainのデータを入れれたTrainの結果が、TestならTestの、ValidationならValidationの結果が出ます。あなたが何の引数を指定してどのプログラムを走らせたか次第です。ただ、既定であればValidationが走る、という話です。
nbvcc

2023/01/06 13:50

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問