在Python 3中使用YOLOv2

作者: Daisy丶 | 来源:发表于2017-03-30 13:13 被阅读22748次

    YOLOv2是Joseph Redmon提出的针对YOLO算法不足的改进版本,作者使用了一系列的方法对原来的YOLO多目标检测框架进行了改进,在保持原有速度的优势之下,精度上得以提升,此外作者提出了一种目标分类与检测的联合训练方法,通过这种方法YOLO9000可以同时在COCO和ImageNet数据集中进行训练,训练后的模型可以实现多达9000种物体的实时检测。

    Paperhttps://arxiv.org/abs/1612.08242
    Githubhttps://github.com/pjreddie/darknet
    Websitehttps://pjreddie.com/darknet/yolo

    作者为YOLO算法设计了独有的深度学习框架darknet,因此没有提供Python的接口。在实验中,我找到了两种在Python 3中使用YOLOv2网络的方法。

    第一种:为darknet添加Python接口

    Githubhttps://github.com/SidHard/py-yolo2

    该项目使用了原始的darknet网络,需要使用cmake重新编译源码,因此在Linux上使用更为方便一些。

    首先从git上下载该项目
    git clone https://github.com/SidHard/py-yolo2.git
    执行cmake生成项目
    cmake .. && make
    最后执行yolo.py测试项目,相应的网络结构.cfg文件保存在cfg文件夹中,权值.weight文件放在根目录下,这些可以从darknet的官方网站上下载使用。

    第二种:使用keras

    Githubhttps://github.com/allanzelener/YAD2K

    该项目使用了keras与tensorflow-gpu,因此可以在任何使用该框架的环境下运行,我在自己的程序中使用的该种方法。

    首先下载源文件并且配置环境,可以使用anaconda环境或者在全局安装。

    git clone https://github.com/allanzelener/yad2k.git
    cd yad2k
    
    # [Option 1] To replicate the conda environment:
    conda env create -f environment.yml
    source activate yad2k
    # [Option 2] Install everything globaly.
    pip install numpy
    
    pip install tensorflow-gpu  # CPU-only: conda install -c conda-forge tensorflow
    pip install keras # Possibly older release: conda install keras
    

    快速开始

    • 从Darknet官方下载model:official YOLO website.
      wget http://pjreddie.com/media/files/yolo.weights
    • 将 Darknet YOLO_v2 model转换为Keras model.
      ./yad2k.py cfg/yolo.cfg yolo.weights model_data/yolo.h5
    • 测试图片位于 images/文件夹.
      ./test_yolo.py model_data/yolo.h5

    最后执行test_yolo就可以执行网络,在images/out/文件夹里可以看到执行效果。

    dog.jpg eagle.jpg giraffe.jpg horses.jpg

    为了方便模型用于测试视频与图片,我对demo做了修改,相比原来的测试代码,能够直接移植到项目中去,对象化的程序也更易于修改,代码如下

    #! /usr/bin/env python
    """Run a YOLO_v2 style detection model on test images."""
    import cv2
    import os
    import time
    import numpy as np
    from keras import backend as K
    from keras.models import load_model
    
    from yad2k.models.keras_yolo import yolo_eval, yolo_head
    
    
    class YOLO(object):
        def __init__(self):
            self.model_path = 'model_data/yolo.h5'
            self.anchors_path = 'model_data/yolo_anchors.txt'
            self.classes_path = 'model_data/coco_classes.txt'
            self.score = 0.3
            self.iou = 0.5
    
            self.class_names = self._get_class()
            self.anchors = self._get_anchors()
            self.sess = K.get_session()
            self.boxes, self.scores, self.classes = self.generate()
    
        def _get_class(self):
            classes_path = os.path.expanduser(self.classes_path)
            with open(classes_path) as f:
                class_names = f.readlines()
            class_names = [c.strip() for c in class_names]
            return class_names
    
        def _get_anchors(self):
            anchors_path = os.path.expanduser(self.anchors_path)
            with open(anchors_path) as f:
                anchors = f.readline()
                anchors = [float(x) for x in anchors.split(',')]
                anchors = np.array(anchors).reshape(-1, 2)
            return anchors
    
        def generate(self):
            model_path = os.path.expanduser(self.model_path)
            assert model_path.endswith('.h5'), 'Keras model must be a .h5 file.'
    
            self.yolo_model = load_model(model_path)
    
            # Verify model, anchors, and classes are compatible
            num_classes = len(self.class_names)
            num_anchors = len(self.anchors)
            # TODO: Assumes dim ordering is channel last
            model_output_channels = self.yolo_model.layers[-1].output_shape[-1]
            assert model_output_channels == num_anchors * (num_classes + 5), \
                'Mismatch between model and given anchor and class sizes'
            print('{} model, anchors, and classes loaded.'.format(model_path))
    
            # Check if model is fully convolutional, assuming channel last order.
            self.model_image_size = self.yolo_model.layers[0].input_shape[1:3]
            self.is_fixed_size = self.model_image_size != (None, None)
    
            # Generate output tensor targets for filtered bounding boxes.
            # TODO: Wrap these backend operations with Keras layers.
            yolo_outputs = yolo_head(self.yolo_model.output, self.anchors, len(self.class_names))
            self.input_image_shape = K.placeholder(shape=(2, ))
            boxes, scores, classes = yolo_eval(yolo_outputs, self.input_image_shape, score_threshold=self.score, iou_threshold=self.iou)
            return boxes, scores, classes
    
        def detect_image(self, image):
            start = time.time()
            y, x, _ = image.shape
    
            if self.is_fixed_size:  # TODO: When resizing we can use minibatch input.
                resized_image = cv2.resize(image, tuple(reversed(self.model_image_size)), interpolation=cv2.INTER_CUBIC)
                image_data = np.array(resized_image, dtype='float32')
            else:
                image_data = np.array(image, dtype='float32')
    
            image_data /= 255.
            image_data = np.expand_dims(image_data, 0)  # Add batch dimension.
    
            out_boxes, out_scores, out_classes = self.sess.run(
                [self.boxes, self.scores, self.classes],
                feed_dict={
                    self.yolo_model.input: image_data,
                    self.input_image_shape: [image.shape[0], image.shape[1]],
                    K.learning_phase(): 0
                })
            print('Found {} boxes for {}'.format(len(out_boxes), 'img'))
    
            for i, c in reversed(list(enumerate(out_classes))):
                predicted_class = self.class_names[c]
                box = out_boxes[i]
                score = out_scores[i]
    
                label = '{} {:.2f}'.format(predicted_class, score)
                top, left, bottom, right = box
                top = max(0, np.floor(top + 0.5).astype('int32'))
                left = max(0, np.floor(left + 0.5).astype('int32'))
                bottom = min(y, np.floor(bottom + 0.5).astype('int32'))
                right = min(x, np.floor(right + 0.5).astype('int32'))
                print(label, (left, top), (right, bottom))
    
                cv2.rectangle(image, (left, top), (right, bottom), (255, 0, 0), 2)
                cv2.putText(image, label, (left, int(top - 4)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1, cv2.LINE_AA)
            end = time.time()
            print(end - start)
            return image
    
        def close_session(self):
            self.sess.close()
    
    
    def detect_vedio(video, yolo):
        camera = cv2.VideoCapture(video)
        cv2.namedWindow("detection", cv2.WINDOW_NORMAL)
        while True:
            res, frame = camera.read()
    
            if not res:
                break
    
            image = yolo.detect_image(frame)
            cv2.imshow("detection", image)
            if cv2.waitKey(110) & 0xff == 27:
                    break
        yolo.close_session()
    
    
    def detect_img(img, yolo):
        image = cv2.imread(img)
        r_image = yolo.detect_image(image)
        cv2.namedWindow("detection")
        while True:
            cv2.imshow("detection", r_image)
            if cv2.waitKey(110) & 0xff == 27:
                    break
        yolo.close_session()
    
    
    if __name__ == '__main__':
        yolo = YOLO()
        img = 'E:\Documents\Downloads\YAD2K-master\YAD2K-master\images\horses.jpg'
        video = 'E:\Documents\Documents\python\Traffic\data\person.avi'  
        detect_img(img, yolo)
        detect_vedio(video, yolo)
    

    相关文章

      网友评论

      • AI_wyx:Traceback (most recent call last):
        File "yad2k.py", line 270, in
        Loading weights.
        Weights Header: [1936876918 544108393 1886680168 791624307]
        Parsing Darknet config.
        _main(parser.parse_args())
        File "yad2k.py", line 91, in _main
        cfg_parser.read_file(unique_config_file)
        File "/opt/conda/lib/python3.6/configparser.py", line 718, in read_file
        self._read(f, source)
        File "/opt/conda/lib/python3.6/configparser.py", line 1080, in _read
        raise MissingSectionHeaderError(fpname, lineno, line)
        configparser.MissingSectionHeaderError: File contains no section headers.
        file: '', line: 1
        'version https://git-lfs.github.com/spec/v1\n'

        请问下总是报这种错误,是yolo.weights文件有问题吗?
        Daisy丶:你这个不是官方的weight吧,header部分对不上。
      • 2d800927432b:您好!请问这个项目可以训练自己的数据吗?还是说需要先在darknet c训练好再拿来用呀?
      • 033ee727a064:楼主,您好!我运行代码时出现TypeError: buffer is too small for requested array,不知楼主遇见这个问题没?求助,谢谢.....
        AI_wyx:电脑配置不行,直接去网上下载别人生成的yolo.h5文件
      • 困_d3bf:作者您好,请问画出预测框的时候 ,top = max(0, np.floor(top + 0.5).astype('int32')),请问为什么np.floor中要加上0.5啊
      • MassiveDynamic:作者大大你好,您有没有有空写一下里面的一些函数的解析,小白实在看不懂中间几个函数,yolo_head,yolo_body,yolo_correct_boxes,yolo_boxes_and_scores
      • 浩彬老撕:作者你好,报错说“No such file or directory: 'cfg/yolo.cfg'”这是什么原因?
      • 072affb5bd91:我看GitHub上需要下载 wget https://raw.githubusercontent.com/pjreddie/darknet/master/cfg/yolo.cfg 但是我看这个链接失效了,我该怎么做啊楼主
        072affb5bd91:@洛荷 楼主,我看你这篇文章对应和GitHub最新的对不上啊,能不能分享一下你这篇文章对应的代码啊
        Daisy丶:@_大盛 到Github的Darknet项目去下载或者去官方网站找链接。
      • upenggod:作者你好,我试了几个版本的YOLO,包括你写的V2和新出的V3,都会出现以下错误

        File "/home/god/anaconda3/envs/tensorflow/lib/python3.5/site-packages/numpy/core/numeric.py", line 531, in asarray
        Convert a list into an array:

        TypeError: float() argument must be a string or a number, not 'dict'
        能帮我看看是什么错误吗?
        Daisy丶:@upenggod 这个错误信息就是个单纯的numpy转换错误,看不出问题在哪里的…… 你要定位错误代码在哪里
        upenggod:升级到了tf1.5,keras2.1,不知道是库里哪里出了问题
      • 072affb5bd91:请问怎么让yolo实时输出boundingbox的坐标,而不仅仅是画框框
        Daisy丶:@_大盛 返回值本来就是box坐标,框是用坐标画的……
      • wsy_1652:您好大神,初次接触YAD2k,想请问下,如何用YAD2k来训练自己的数据,是否需要将自己的样本集转换成.npz格式,如何将训练数据转换成这个格式呢?
        Daisy丶:@wsy_1652 具体怎么保存其实train文件里代码都有注释。numpy的save可以保存字典格式,你应该构造一个带有images和boxes作为key的字典,iamges对应的value是图片,boxes对应的value是每张图片里box的的数组。ndarray是一个有序数组类型,因此你只要保证输入顺序对应就可以了。此外train_overfit.py提供了一个使用单张图片数据训练的样例。
        wsy_1652:@洛荷 谢谢您,我是初等探索的小白,image的读入和save能够找到,但是想请问下box如何导入,且save为和图像对应的.npz数据?
        Daisy丶:@wsy_1652 是,用numpy的save()将数组保存为npz文件。
      • 525cafd783b6:UserWarning: No training configuration found in save file: the model was *not* compiled. Compile it manually.
        warnings.warn('No training configuration found in save file: '作者你好,我在测试的时候会先报这个错误,然后就显示在图中没有找到boxes Found 0 boxes for dog.jpg请问这个问题应该怎么解决
      • e1dc897d2342:楼主,麻烦请教一下,在我运行retrain_yolo.py文件时报错:
        Traceback (most recent call last):
        File "F:/python/pycharm/workspace/YAD2K-master/retrain_yolo.py", line 367, in <module>
        _main(args)
        File "F:/python/pycharm/workspace/YAD2K-master/retrain_yolo.py", line 60, in _main
        image_data, boxes = process_data(data)
        File "F:/python/pycharm/workspace/YAD2K-master/retrain_yolo.py", line 166, in process_data
        return np.array(processed_images), np.array(boxes)
        ValueError: could not broadcast input array from shape (416,416,3) into shape (416,416)
        这个问题该如何解决呢?
        wsy_1652:@洛荷 麻烦请问下,如何生成retrain_yolo.py可以训练的数据集并输入进行训练呢?谢谢
        Daisy丶:@tempty 模型需要有3个通道的RGB图像,你这个只有1个通道。
      • Daisy丶:@tempty 模型要求的输入张量是 (416,416,3),也就是RGB图像并且通道在最后一位。你给的输入张量大小为(1,416,416),只有一个通道,应该是灰度图像,所以不符合输入大小的要求。
      • 成远_:Using TensorFlow backend.
        usage: test_yolo.py [-h] [-a ANCHORS_PATH] [-c CLASSES_PATH] [-t TEST_PATH]
        [-o OUTPUT_PATH] [-s SCORE_THRESHOLD] [-iou IOU_THRESHOLD]
        model_path
        test_yolo.py: error: the following arguments are required: model_path

        Process finished with exit code 2
        楼主,我的这个报错是什么意思呀
        Daisy丶:@成远_ 把模型参数文件放到model_data目录,执行test_yolo.py model_data\yolo.h5命令。
        成远_:@洛荷 我该怎么解决呢?新手,不太会弄
        Daisy丶:@成远_ 请按照命令的格式输入命令...带上必备参数
      • e1dc897d2342:2.我根据YAD2K-MASTER所提供的源码,自己制作了一个训练集并训练出了一个模型,但是在test_yolo文件上测试时,一直报错:
        Traceback (most recent call last):
        File "test_yolo.py", line 190, in <module>
        _main(parser.parse_args())
        File "test_yolo.py", line 76, in _main
        yolo_model = load_model(model_path)
        File "F:\python\anaconda\lib\site-packages\keras\models.py", line 243, in load_model
        model = model_from_config(model_config, custom_objects=custom_objects)
        File "F:\python\anaconda\lib\site-packages\keras\models.py", line 317, in model_from_config
        return layer_module.deserialize(config, custom_objects=custom_objects)
        File "F:\python\anaconda\lib\site-packages\keras\layers\__init__.py", line 55, in deserialize
        printable_module_name='layer')
        File "F:\python\anaconda\lib\site-packages\keras\utils\generic_utils.py", line 144, in deserialize_keras_object
        list(custom_objects.items())))
        File "F:\python\anaconda\lib\site-packages\keras\engine\topology.py", line 2520, in from_config
        process_node(layer, node_data)
        File "F:\python\anaconda\lib\site-packages\keras\engine\topology.py", line 2479, in process_node
        layer(input_tensors, **kwargs)
        File "F:\python\anaconda\lib\site-packages\keras\engine\topology.py", line 617, in __call__
        output = self.call(inputs, **kwargs)
        File "F:\python\anaconda\lib\site-packages\keras\layers\core.py", line 663, in call
        return self.function(inputs, **arguments)
        File "F:\python\pycharm\workspace\YAD2K-master\yad2k\models\keras_yolo.py", line 199, in yolo_loss
        # TODO: Remove extra computation shared with yolo_head.
        NameError: name 'yolo_head' is not defined。这个应该如何解决呢。
        e1dc897d2342:@洛荷 嗯,十分感谢!
        Daisy丶:这个问题应该在于,keras的load_model()函数可以将网络结构与权重一起导入,但是只限于keras内置的结构,用户自定义的结构,lambda函数包裹的结构均无法从h5文件里复现,会出现not define的错误。你保存的应该是整个yolo网络的结构,除了卷积网络部分还有后面的一些自定义转换的部分,而作者load的仅仅是卷积网络部分。
      • e1dc897d2342:作者,你好。我想咨询一下几个问题:1.为什么用test_yolo检测imgges/out下面的图片时,只能识别前四张
        car 0.75 (445, 74) (689, 174)
        bicycle 0.79 (204, 150) (565, 431)
        dog 0.89 (106, 196) (325, 541)
        Found 1 boxes for eagle.jpg
        bird 0.96 (114, 97) (614, 437)
        Found 1 boxes for giraffe.jpg
        horse 0.96 (151, 24) (435, 458)
        Found 4 boxes for horses.jpg
        horse 0.31 (14, 194) (145, 253)
        horse 0.63 (243, 198) (431, 366)
        cow 0.78 (425, 203) (596, 342)
        horse 0.89 (4, 195) (318, 415)
        Traceback (most recent call last):
        File "test_yolo.py", line 194, in <module>
        _main(parser.parse_args())
        File "test_yolo.py", line 119, in _main
        image_type = imghdr.what(os.path.join(test_path, image_file))
        File "F:\python\anaconda\lib\imghdr.py", line 14, in what
        f = open(file, 'rb')
        PermissionError: [Errno 13] Permission denied: 'images\\out'
        到第五张的person.jpg就报错,这里是有什么bug么?
        e1dc897d2342:@洛荷 嗯,十分感谢!
        Daisy丶:@devil_angel 这个问题是由于作者提供的图片写出功能存在问题,你自己重写一个或者直接显示图片应该就没有问题了。
      • 6ce9cf9a0fbd:楼主,请问一下,我在运行 conda env create -f enviroment.yml出错了,显示resovlvepackagenotfound:........
      • 仲葳:I am using yolo.cfg and yolo.weights on yad2k, however, the scream.jpg in demo images, shows zero bounding boxes. Anyone knows why? Thanks.
        谁把我昵称都起啦:可能是你的cuda版本和cudnn不匹配
      • 谁把我昵称都起啦:在gtx970上,预测一张图片的速度在0.8s左右
        Daisy丶:@谁把我昵称都起啦 那个是时间的。我当初实验的时候是在笔记本上的,视频跟图片都是0.5s左右,我不确定是不是因为框架变动造成的这些问题。
        谁把我昵称都起啦:@洛荷 model_data/yolo.h5 model, anchors, and classes loaded.
        warnings.warn('No training configuration found in save file: '
        Found 4 boxes for img
        horse 0.50 (5, 177) (150, 339)
        horse 0.78 (247, 198) (436, 370)
        horse 0.85 (0, 193) (311, 411)
        horse 0.89 (434, 211) (600, 351)
        0.8803145885467529
        出来的结果是这样的,最后的这个0.88是时间吧,我没有细看程序呢
        Daisy丶:@谁把我昵称都起啦 emm我在GT640M上都是0.5s一帧
      • 别理我这个小可爱:两秒半测试一张图片,哈哈哈哈砸电脑了
      • Lagom_f99e:作者你好,非常感谢,已经安装成功了。用你写的demo测试的时候,报错Traceback (most recent call last):
        File "test_yolo.py", line 149, in <module>
        detect_img(img, yolo)
        File "test_yolo.py", line 136, in detect_img
        r_image = yolo.detect_image(image)
        File "test_yolo.py", line 75, in detect_image
        y, x, _ = image.shape
        AttributeError: 'NoneType' object has no attribute 'shape'用的tensorflow1.4.0 keras2.1 opencv3.3 。应该怎么解决呢?

        还有用自己的weights和cfg权重转换的时候报错Traceback (most recent call last):
        File "test_yolo-2.py", line 194, in <module>
        _main(parser.parse_args())
        File "test_yolo-2.py", line 87, in _main
        'Mismatch between model and given anchor and class sizes. ' \
        AssertionError: Mismatch between model and given anchor and class sizes. Specify matching anchors and classes with --anchors_path and --classes_path flags.
        者需要把源码中的txt文件也要换掉吗?
        b4514abb4c90:AssertionError: Mismatch between model and given anchor and class sizes 请问这个问题你解决了吗?
        Lagom_f99e:第一个问题解决了,windows10 img路径应该为D:anaconda3/envs///////// 反斜杠不合法
        Lagom_f99e:用安装过程中测试 python test_yolo.py model_data/yolo.h5 没有问题
      • Lagom_f99e:作者你好,还有个问题,刚才看你写的demo很清晰,但是我是用darknet训练完成了,并保存了weights,在demo里应该怎么用呢?直接用不行吧?
        Daisy丶:@Lagom_f99e 是的
        Lagom_f99e:@洛荷 windows系统 把命令行中的 ./ 改为python?
        Daisy丶:@Lagom_f99e 文章里提到了权重转换的问题。
      • Lagom_f99e:作者你好,请问有方法读取出识别结果中的box数量吗?比如读取出检测结果中的人数,求指教,谢谢啦!
        Lagom_f99e:@洛荷 好的
        Daisy丶:@Lagom_f99e len(out_boxes)
      • 319f9efa9fc3:楼主的yolo_anchors.txt文件能提供下吗
        Daisy丶:保存为txt。
        0.738768,0.874946, 2.42204,2.65704, 4.30971,7.04493, 10.246,4.59428, 12.6868,11.8741
      • 976d8a3db083:您好,我觉得您写的那个python版本实现yolo很详细,但是我在最后直接使用python yolo.py的时候出现这个问题 from libpydarknet import DarknetObjectDetector no module libpydarknet,cmake里面添加libdarknet.so也成功了 不知道为什么还是说找不到模块
        976d8a3db083:@雨轩_c430 对不起,我显示出现了boost版本不对的问题,但是我ubuntu里面配置东西多,不敢换boost版本。我觉得这个简书博主写的很好的,应该可行
        ff67ac3d7fed:请问你在python里实现yolo成功了么?
      • 991561153aba:function process_data():的问题
        orig_size = np.array([images[0].width, images[0].height]) 应该改成:
        orig_size = np.array([[image.width, image.height] for image in (images)])
        并且
        # boxes_xy = [boxxy / orig_size for boxxy in boxes_xy]
        # boxes_wh = [boxwh / orig_size for boxwh in boxes_wh]
        应该改成:
        boxes_xy = [boxxy / orig_size[i] for i, boxxy in enumerate(boxes_xy)]
        boxes_wh = [boxwh / orig_size[i] for i, boxwh in enumerate(boxes_wh)]
        是不是有以上问题呢?
      • ff2854315da3:谢谢楼主分享,我此前也搭建了一个。试了试您开发的程序,发现个问题,请教一下:.视频部分无法工作;报错如下:D:\dev\python\WinPython35\python-3.5.3.amd64\lib\site-packages\keras\models.py:240: UserWarning: No training configuration found in save file: the model was *not* compiled. Compile it manually.
        warnings.warn('No training configuration found in save file: '
        model_data/yolo.h5 model, anchors, and classes loaded.
        是否因为自己没有训练呢?怎么训练视频呢?您有训练过的cfg文件吗?谢谢。
        Daisy丶:@autogyro 我写这个的时候这个项目是基于keras 1.2.2,后来源作者更新了基于keras2的,相关model文件跟接口都有更改,你可以参照作者的更改修改下代码。
      • e6dc7717068e:你好,洛荷,请问下,你在运行test_yolo的时候遇到过yolo_model=load_model(model_path)报错没,TypeError: float() argument must be a string or a number
        e6dc7717068e:@洛荷 谢谢你 ,应该没有对应错,你能否将你生成的yolo.h5文件和yolo_anchors.txt发我一份。1240631165@qq.com。
        Daisy丶: @zyslyw 我这边并没有遇到过这个问题,是不是你转换的cfg文件选错了
        e6dc7717068e:你好,我感觉是生成yolo.h5时的问题,可是并没有报错,是不是版本的问题?
      • LucasJin:为啥预测的速度如此之慢啊,慢到爆炸
        f39f9bcc369f:mac上跑的,好像不支持gpu,慢到爆炸
        Daisy丶: @Nicholas_Jela 显卡好用的话速度挺快的
      • Skye_kh:你好,python 实现的第二种能自己做训练吗? 还是需要再原来 darknet c的代码训练好了 拿来用的?
        Daisy丶: @Skye_kh 原来基于keras1.2.2的不能训练,后来作者更新了keras2的好像加入了训练的功能。
      • yanmenglu1202:Hello,洛荷,非常感谢你的分享,请问最后你给出的demo,yolo_anchors.txt这个文件是怎么产生的?是将YOLOv2转换为keras model的时候产生的吗?还是像.cfg文件一样,来自于https://github.com/pjreddie/darknet/tree/master/cfg
        yanmenglu1202:@洛荷 谢谢:blush:
        Daisy丶: @yanmenglu1202 来自于cfg文件的,不同的训练集anchors也不一样。

      本文标题:在Python 3中使用YOLOv2

      本文链接:https://www.haomeiwen.com/subject/flgyottx.html