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
프로 테스트가 효과적입니다!