小白初次使用Yolov3训练自己数据集常见问题:ValueError: not enough values to unpack (expected 3, got 0)

前言

       最近在使用yolov3算法做目标检测实验,从GitHub上clone了项目,运行时出现了不少错误,查了一大堆资料,一个个的解决,真是愁苦了孩子,故在此分享初次使用yolov3容易出现的几个错误的解决办法。

错误1:文件目录正确但提示No such file or directary:

解决办法:1、要使用绝对路径;2、在dataset.py文件的img_path处,要保证读取图片的位置要和train.txt,val.txt文件中图片的位置相衔接,这样才能在训练数据时准确读取到图片,label_path处读取的是数据集图片转化后的.txt标签文件

小白初次使用Yolov3训练自己数据集常见问题:ValueError: not enough values to unpack (expected 3, got 0)_第1张图片

 img_path = 'F:/001/PyTorch-YOLOv3/PyTorch-YOLOv3/data/coco' + img_path
        #print (img_path)
        # Extract image as PyTorch tensor
        img = transforms.ToTensor()(Image.open(img_path).convert('RGB'))

        # Handle images with less than three channels
        if len(img.shape) != 3:
            img = img.unsqueeze(0)
            img = img.expand((3, img.shape[1:]))

        _, h, w = img.shape
        h_factor, w_factor = (h, w) if self.normalized_labels else (1, 1)
        # Pad to square resolution
        img, pad = pad_to_square(img, 0)
        _, padded_h, padded_w = img.shape

        # ---------
        #  Label
        # ---------

        label_path = self.label_files[index % len(self.img_files)].rstrip()
        label_path = 'F:/001/PyTorch-YOLOv3/PyTorch-YOLOv3/data/coco/labels' + label_path    

错误2:IndexError: index 0 is out of range

出现这种错误的原因可能是config文件夹中yolov3的网络配置文件出现使用错误,简而言之就是你可能使用的是原作者的80分类的配置文件

解决办法:将原来的yolov3.cfg文件删除,从Git官网Git (git-scm.com)下载git这个小程序,安装后鼠标右键就可以看到

小白初次使用Yolov3训练自己数据集常见问题:ValueError: not enough values to unpack (expected 3, got 0)_第2张图片

点击Git Bash Here,输入命令 "bash  .sh文件名   类别个数" 运行即可生成自己的网络配置文件

错误3:ValueError: not enough values to unpack (expected 3, got 0);这个问题真是让我头疼了一天,它能正常训练数据,但训练完后啪啪地就给我报错了,给我气的........加上这个错误网上资料甚少,真是愁死了人,终于功夫不负有心人,在网上爬了一天,总算找到了解决办法。

小白初次使用Yolov3训练自己数据集常见问题:ValueError: not enough values to unpack (expected 3, got 0)_第3张图片

解决办法1:在test.py文件53行左右在#concatenate sample statistics之前,插入这段代码

    if len(sample_metrics) == 0:  
        return np.array([0]), np.array([0]), np.array([0]), np.array([0]), np.array([0], dtype=np.int)

解决办法2:在train.py 第159行左右将0改为1,但本人不建议采用此法

if epoch % opt.evaluation_interval == 0:              
    print("\n---- Evaluating Model ----")
######################################
cahnge to
######################################
if epoch % opt.evaluation_interval == 1:              
    print("\n---- Evaluating Model ----")

最后顺利运行

小白初次使用Yolov3训练自己数据集常见问题:ValueError: not enough values to unpack (expected 3, got 0)_第4张图片

 试运行我这里使用的是从coco数据集选出100张图片进行训练

小白初次使用Yolov3训练自己数据集常见问题:ValueError: not enough values to unpack (expected 3, got 0)_第5张图片

好了,dome跑通了之后就是漫长的模型网络改进学习了,作为小白我是真的特别特别理解那种遇到问题解决不掉,资料找不到,又没人帮的心情,在这里希望后人遇到同样的问题时能快速地在CSDN上找到答案。

你可能感兴趣的:(算法,深度学习,python)