yolov8 /path/train.cache ソリューションにラベルが見つかりません

yolov8 で Ultralytics/datasets/coco.yaml を使用してトレーニングすると、「train2017.cache にラベルが見つかりません」というエラーが発生しました。

model.train(
        data="ultralytics/datasets/coco.yaml",
        epochs=100,
        imgsz=640,
        batch=16,
        save_period=10,
    )

この問題の理由を以下で見つけてください。

ここでは coco データセットは事前にダウンロードされず、トレーニング中に自動的にダウンロードされるため、ダウンロード速度は比較的遅くなります。
すると、データセットの下に coco フォルダーが表示されます (ここにフォルダーが表示されない場合は、~/.config/Ultralytics/settings.yamlパスの設定を確認してください)。

画像の説明を追加してください

train.cache はラベルフォルダーにあります。ダウンロードではなく、画像内の電車やヴァルの写真をもとにラベルから対応するファイルを見つけて生成します。
したがって、この生成プロセス中に何が問題になったのかを確認する必要があります。

まず、画像とラベルへのパスが正しいかどうかを確認します。
label_files をチェックインして、ultralytics/yolo/data/dataset.pyファイルが存在するかどうかを確認します。
(インターネット上の多くの記事では、この手順で問題が解決されています)

    def get_labels(self):
        """Returns dictionary of labels for YOLO training."""
        self.label_files = img2label_paths(self.im_files)
        #print(self.label_files)
        cache_path = Path(self.label_files[0]).parent.with_suffix('.cache')

このステップでは、ブロガーはこれらのファイルがフォルダー内に存在することを確認します。引き続き原因の究明が必要です。
エラーはここで報告されます。

        # Display cache
        nf, nm, ne, nc, n = cache.pop('results')  # found, missing, empty, corrupt, total
        if exists and LOCAL_RANK in (-1, 0):
            d = f'Scanning {
      
      cache_path}... {
      
      nf} images, {
      
      nm + ne} backgrounds, {
      
      nc} corrupt'
            tqdm(None, desc=self.prefix + d, total=n, initial=n, bar_format=TQDM_BAR_FORMAT)  # display cache results
            if cache['msgs']:
                LOGGER.info('\n'.join(cache['msgs']))  # display warnings
        if nf == 0:  # number of labels found
            raise FileNotFoundError(f'{
      
      self.prefix}No labels found in {
      
      cache_path}, can not start training. {
      
      HELP_URL}')

明らかに nf=0 と表示されていますが、なぜ nf 0 なのでしょうか?生成プロセス中にキャッシュに問題がある可能性が非常に高いため、次に、キャッシュによって生成されたコードを見つける必要があります。
ここでは nf で +1 操作がまだdataset.py
行われています。明らかに、何か問題が発生し、+1 操作が実行されませんでした。

    def cache_labels(self, path=Path('./labels.cache')):
        """Cache dataset labels, check images and read shapes.
        Args:
            path (Path): path where to save the cache file (default: Path('./labels.cache')).
        Returns:
            (dict): labels.
        """
        x = {
    
    'labels': []}
        nm, nf, ne, nc, msgs = 0, 0, 0, 0, []  # number missing, found, empty, corrupt, messages
        desc = f'{
      
      self.prefix}Scanning {
      
      path.parent / path.stem}...'
        total = len(self.im_files)
        nkpt, ndim = self.data.get('kpt_shape', (0, 0))
        if self.use_keypoints and (nkpt <= 0 or ndim not in (2, 3)):
            raise ValueError("'kpt_shape' in data.yaml missing or incorrect. Should be a list with [number of "
                             "keypoints, number of dims (2 for x,y or 3 for x,y,visible)], i.e. 'kpt_shape: [17, 3]'")
        with ThreadPool(NUM_THREADS) as pool:
            results = pool.imap(func=verify_image_label,
                                iterable=zip(self.im_files, self.label_files, repeat(self.prefix),
                                             repeat(self.use_keypoints), repeat(len(self.data['names'])), repeat(nkpt),
                                             repeat(ndim)))
            pbar = tqdm(results, desc=desc, total=total, bar_format=TQDM_BAR_FORMAT)
            for im_file, lb, shape, segments, keypoint, nm_f, nf_f, ne_f, nc_f, msg in pbar:
                nm += nm_f
                nf += nf_f
                ne += ne_f
                nc += nc_f
                if im_file:
                    x['labels'].append(
                        dict(
                            im_file=im_file,
                            shape=shape,
                            cls=lb[:, 0:1],  # n, 1
                            bboxes=lb[:, 1:],  # n, 4
                            segments=segments,
                            keypoints=keypoint,
                            normalized=True,
                            bbox_format='xywh'))
                if msg:
                    msgs.append(msg)
                pbar.desc = f'{
      
      desc} {
      
      nf} images, {
      
      nm + ne} backgrounds, {
      
      nc} corrupt'
            pbar.close()

ここで、電車のフォルダー内の写真が見つからないことがわかり、フォルダーを
確認したultralytics/datasets/coco/images/train2017ところ、フォルダーは空でした。
2 番目の外観のサイズtrain2017.zipはわずか 2.2kB です! ダウンロードは失敗しました。
問題は、ダウンロードしたファイルが破損しているかどうかの確認ができないことであることが判明しました。

おすすめ

転載: blog.csdn.net/level_code/article/details/132538501
おすすめ