YOLO8 のカスタム データ トレーニングに Windows を使用すると、エラー ForkingPickler(file, protocol).dump(obj)BrokenPipeError: [Errno 32] Broken Pipe が報告されます
1. 問題は次のように発生します。
2. エラーの原因:
この問題は、Windows での DataLoader クラスに関連するマルチスレッドの問題によって発生します。num_workers の数を 0 に変更します。これは Windows のバグのような気がします。
3. 解決策:
一般に、次のようにtrain.py のnum_workers=1 を0 に変更するだけです。
trainset = torchvision.datasets.CIFAR10(root='./data',train=True,
download=True,transform=transform)
trainloader = torch.utils.data.DataLoader(trainset,batch_size=4,
shuffle = True,num_workers=1) #改为0
しかし、長い間探しましたが、yolo8 の train.py の num_workers がどこにあるのか見つかりませんでした。最終的に、build.py の build_dataloader 関数によって返される num_workers が次のように変更できることがわかりました。
def build_dataloader(cfg, batch, img_path, stride=32, rect=False, names=None, rank=-1, mode='train'):...
ファイルの具体的な場所は次のとおりです。
你安装的虚拟环境\Lib\site-packages\ultralytics\yolo\data\build.py
プロテストは効果あり!