YOLO8 교육에 창을 사용하면 오류가 보고됩니다. ForkingPickler(file, protocol).dump(obj) BrokenPipeError: [Errno 32] BrokenPipe

YOLO8의 사용자 지정 데이터 교육에 창을 사용하면 ForkingPickler(file, protocol).dump(obj)BrokenPipeError: [Errno 32] Broken pipe 오류가 보고됩니다.

1. 다음과 같은 문제가 발생합니다.

2. 오류 원인:

이 문제는 DataLoader 클래스와 관련된 Windows의 다중 스레드 문제로 인해 발생합니다. 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

프로 테스트가 효과적입니다!

Ich denke du magst

Origin blog.csdn.net/Jin1Yang/article/details/129236974
Empfohlen
Rangfolge