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

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

新規登録して質問してみよう
ただいま回答率
85.48%
YOLO

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

PyTorch

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

Python

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

Q&A

1回答

3556閲覧

(YOLOv5)物体検出でエラー「 Label class 1 exceeds nc=1 in data.yaml. Possible class labels are 0-0」

hona_tan

総合スコア45

YOLO

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

PyTorch

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

Python

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

0グッド

0クリップ

投稿2022/12/06 07:57

編集2022/12/07 07:09

yolov5物体検出をしています。
スナックエンドウの画像を使って学習実行の項目くでつまづいてしまいました。

私はスナックエンドウではなく、キャベツで物体検出しています。
エラー結果の意味がいまいち分からず、何かアドバイスいただけると嬉しいです。

使用するtrain.pyのプログラムが長いのでリンク先で確認していただけたらと思います。
プログラムの確認先

実行結果とエラー

(yolov5) C:\Users\isl\Desktop\yolov5>python train.py --data data.yaml --cfg yolov5m.yaml --weights '' --batch-size 8 --epochs 100 train: weights='', cfg=yolov5m.yaml, data=data.yaml, hyp=data\hyps\hyp.scratch-low.yaml, epochs=100, batch_size=8, imgsz=640, rect=False, resume=False, nosave=False, noval=False, noautoanchor=False, noplots=False, evolve=None, bucket=, cache=None, image_weights=False, device=, multi_scale=False, single_cls=False, optimizer=SGD, sync_bn=False, workers=8, project=runs\train, name=exp, exist_ok=False, quad=False, cos_lr=False, label_smoothing=0.0, patience=100, freeze=[0], save_period=-1, seed=0, local_rank=-1, entity=None, upload_dataset=False, bbox_interval=-1, artifact_alias=latest github: skipping check (not a git repository), for updates see https://github.com/ultralytics/yolov5 YOLOv5 2022-10-19 Python-3.8.13 torch-1.7.1+cu110 CUDA:0 (NVIDIA GeForce GTX 1050 Ti, 4096MiB) hyperparameters: lr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=0.05, cls=0.5, cls_pw=1.0, obj=1.0, obj_pw=1.0, iou_t=0.2, anchor_t=4.0, fl_gamma=0.0, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0 ClearML: run 'pip install clearml' to automatically track, visualize and remotely train YOLOv5 in ClearML Comet: run 'pip install comet_ml' to automatically track and visualize YOLOv5 runs in Comet TensorBoard: Start with 'tensorboard --logdir runs\train', view at http://localhost:6006/ Overriding model.yaml nc=80 with nc=1 from n params module arguments 0 -1 1 5280 models.common.Conv [3, 48, 6, 2, 2] 1 -1 1 41664 models.common.Conv [48, 96, 3, 2] 2 -1 2 65280 models.common.C3 [96, 96, 2] 3 -1 1 166272 models.common.Conv [96, 192, 3, 2] 4 -1 4 444672 models.common.C3 [192, 192, 4] 5 -1 1 664320 models.common.Conv [192, 384, 3, 2] 6 -1 6 2512896 models.common.C3 [384, 384, 6] 7 -1 1 2655744 models.common.Conv [384, 768, 3, 2] 8 -1 2 4134912 models.common.C3 [768, 768, 2] 9 -1 1 1476864 models.common.SPPF [768, 768, 5] 10 -1 1 295680 models.common.Conv [768, 384, 1, 1] 11 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] 12 [-1, 6] 1 0 models.common.Concat [1] 13 -1 2 1182720 models.common.C3 [768, 384, 2, False] 14 -1 1 74112 models.common.Conv [384, 192, 1, 1] 15 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] 16 [-1, 4] 1 0 models.common.Concat [1] 17 -1 2 296448 models.common.C3 [384, 192, 2, False] 18 -1 1 332160 models.common.Conv [192, 192, 3, 2] 19 [-1, 14] 1 0 models.common.Concat [1] 20 -1 2 1035264 models.common.C3 [384, 384, 2, False] 21 -1 1 1327872 models.common.Conv [384, 384, 3, 2] 22 [-1, 10] 1 0 models.common.Concat [1] 23 -1 2 4134912 models.common.C3 [768, 768, 2, False] 24 [17, 20, 23] 1 24246 models.yolo.Detect [1, [[10, 13, 16, 30, 33, 23], [30, 61, 62, 45, 59, 119], [116, 90, 156, 198, 373, 326]], [192, 384, 768]] YOLOv5m summary: 291 layers, 20871318 parameters, 20871318 gradients, 48.2 GFLOPs AMP: checks passed optimizer: SGD(lr=0.01) with parameter groups 79 weight(decay=0.0), 82 weight(decay=0.0005), 82 bias train: Scanning 'C:\Users\isl\Desktop\yolov5\data\Train\labels.cache' images and labels... 40 found, 0 missing, 0 empty Traceback (most recent call last): File "train.py", line 630, in <module> main(opt) File "train.py", line 524, in main train(opt.hyp, opt, device, callbacks) File "train.py", line 202, in train assert mlc < nc, f'Label class {mlc} exceeds nc={nc} in {data}. Possible class labels are 0-{nc - 1}' AssertionError: Label class 1 exceeds nc=1 in data.yaml. Possible class labels are 0-0

イメージ説明
イメージ説明
イメージ説明

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

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

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

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

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

jbpb0

2022/12/06 10:10

> AssertionError: Label class 1 exceeds nc=1 in data.yaml. Possible class labels are 0-0 「nc=1」(検出対象が一種類)なのでクラスラベルは「0」だけのはずなのに、クラスラベルに「1」がある、というエラーです > キャベツで物体検出しています。 アノテーションは、一種類のキャベツだけですか?
hona_tan

2022/12/07 04:05

コメントありがとうございます。 他にもいんげん、人参、豚肉、じゃがいも、タマネギをアノテーションしています。 ですがディレクトリ、yolov5/data/Trainの中にはキャベツだけしか入れていません。 これがいけないのでしょうか?
jbpb0

2022/12/07 04:23 編集

> 他にもいんげん、人参、豚肉、じゃがいも、タマネギをアノテーションしています。 アノテーション時に、対象物毎に違うラベルが付与されますよね キャベツを含めて6種類なら、0〜5のどれかになります > ディレクトリ、yolov5/data/Trainの中にはキャベツだけしか入れていません。 アノテーション時にキャベツに付与されたラベルが「0」ならいいのですが、もしキャベツのラベルが「0」以外ならダメだと思います エラーメッセージから想像すると、キャベツのラベルが「1」なのではないですかね
hona_tan

2022/12/07 04:30

0~5の数字をすべて試しましたが、同じエラーが表示されます。 ラベルの確認方法はありますか? 前に6種類すべてをディレクトリ、yolov5/data/Trainの中入れて実行したときはエラーなく実行されました。
jbpb0

2022/12/07 06:21

> ラベルの確認方法はありますか? 「labels」ディレクトリにある「*.txt」ファイルを調べてください https://www.alpha.co.jp/blog/202108_02 の「自作データセットを用いたYOLOv5での学習」の「データセットの準備」の例のように、行の先頭(一番左)の数値がラベルです 上記Webページの例では、二つの行のどちらも「0」です また、上記Webページの「学習」に書かれてるように、「data.yaml」の「nc:」と「names:」も確認してください エラーに「nc=1」とあるので「nc:」は大丈夫だと思いますが、「names:」も一つだけでしょうか?
hona_tan

2022/12/07 06:33

確認方法をご提示してくださりありがとうございます。 確認しました。 nameも一つだけなのでプログラムは正しく書けていると思います。
jbpb0

2022/12/07 06:59 編集

ラベルが一つということは、ラベルは「0」だけですよ 質問に追加された画像を見たら、「*.txt」ファイルの行の先頭(一番左)の数値が全て「1」ですよね そこが「0」じゃないとダメです > 0~5の数字をすべて試しましたが、同じエラーが表示されます。 では、何を試したのでしょうか? 「labels」ディレクトリにある「*.txt」ファイルの行の先頭(一番左)の数値を書き換えたのではないのでしょうか?
hona_tan

2022/12/07 07:08

ということは、食材一つ一つを物体検出させるにはアノテーションやり直しでしょうか? またこのようなプログラムの書き方どうですか? 質問に写真を追加したので確認お願いいたします。
hona_tan

2022/12/07 07:13

申し訳ございません。 「0~5の数字をすべて試しましたが、同じエラーが表示されます。」についてですが、nc:の数字を変えて再度実行したことを意味しています。 また「*.txt」ファイルの行の先頭(一番左)の数値ですが、書き換えていません。
jbpb0

2022/12/07 07:47 編集

キャベツのラベルが「1」なら、「nc: 2」にして、「names:」は先頭の二つだけにして、画像と「*.txt」はキャベツのだけにしたら、どうなりますか? > 「0~5の数字をすべて試しましたが、同じエラーが表示されます。」についてですが、nc:の数字を変えて再度実行したことを意味しています。 「nc:」の数値が「2以上」ならラベル「1」は大丈夫なはずなので、エラーが出るとしても > AssertionError: Label class 1 exceeds nc=1 in data.yaml. Possible class labels are 0-0 とは違うエラーになるはずですが、どんなエラーが出るのでしょうか?
jbpb0

2022/12/07 07:50

> 食材一つ一つを物体検出させるにはアノテーションやり直しでしょうか? 「labels」の「*.txt」は、どのようにして作ったのでしょうか? 何らかのアノテーション用のツールで作成したファイルから、何らかのプログラムでyolov5用の「*.txt」ファイルに変換したのでしょうか?
hona_tan

2022/12/07 07:51

実行してみました。 質問内容とは別のエラーが出てきました。 ↓ cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\core\src\alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 18662400 bytes in function 'cv::OutOfMemoryError'
jbpb0

2022/12/07 08:21 編集

> Failed to allocate 18662400 bytes in function 'cv::OutOfMemoryError' メモリーが足りない、と言われてるようです windowsを使ってるなら、「ページングファイル」のサイズを増やしてみてください https://www.windows10info.net/setup/pagefile.html
hona_tan

2022/12/07 09:04

何から何まで本当にありがとうございます。 不要な大きいファイルを消して容量を空けました。 今のところ無事実行されているので、最後まで待っていようと思います。 エポック数100でしているのでそんなに時間はかからないと思います。
hona_tan

2022/12/07 09:15

実行終わりました。 無事にきちんとした実行結果がでました!ありがとうございます。 jbpb0さんの回答をベストアンサーにしたいのですが、、
jbpb0

2022/12/07 10:01 編集

どうやったらうまくいったのでしょうか? > キャベツのラベルが「1」なら、「nc: 2」にして、「names:」は先頭の二つだけにして、画像と「*.txt」はキャベツのだけ としたのでしょうか?
guest

回答1

0

AssertionError: Label class 1 exceeds nc=1 in data.yaml. Possible class labels are 0-0

「nc=1」(検出対象が一種類)なのでクラスラベルは「0」だけのはずなのに、クラスラベルに「1」がある、というエラーです

 
「labels」ディレクトリにある「*.txt」ファイルを調べてください
YOLOv5を使った物体検出
の「自作データセットを用いたYOLOv5での学習」の「データセットの準備」の例のように、行の先頭(一番左)の数値がラベルです
上記Webページの例では、二つの行のどちらも「0」です

「data.yaml」の「nc:」での指定が「1」ならば、「labels」ディレクトリにある「*.txt」ファイルのラベルは「0」だけしかダメです

 
エラーメッセージから想像すると、キャベツのラベルが「1」なのだと思います
その場合は、「data.yaml」を、「nc: 2」にして、「names:」で二つ(二つ目をキャベツ)指定すれば、質問のエラーは出なくなると思います

投稿2022/12/17 02:38

編集2022/12/17 02:39
jbpb0

総合スコア7651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問