精华内容
下载资源
问答
  • 初析yolov3 tiny 网络模型结构

    万次阅读 2019-09-26 17:16:54
    前言 想上网了解下yolov3 tiny的网络结构,竟然没看到一篇文章详细讲解它的( 可能有,没看到而已。。。)。..../darknet detector test cfg/coco.data cfg/yolov3-tiny.cfg cfg/yolov3-tiny.we...

    前言

    想上网了解下yolov3 tiny的网络结构,竟然没看到一篇文章详细讲解它的( 可能有,没看到而已。。。)。

    Yolo3 tiny网络结构

    想知道yolo3 tiny网络模型层次架构,其实很简单。使用下面的命令就可以把它打印出来。

    ./darknet detector test cfg/coco.data cfg/yolov3-tiny.cfg cfg/yolov3-tiny.weights data/dog.jpg -thresh 0.6

    其结果如下: 

    
    layer     filters    size              input                output
        0 conv     16  3 x 3 / 1   416 x 416 x   3   ->   416 x 416 x  16  0.150 BFLOPs
        1 max          2 x 2 / 2   416 x 416 x  16   ->   208 x 208 x  16
        2 conv     32  3 x 3 / 1   208 x 208 x  16   ->   208 x 208 x  32  0.399 BFLOPs
        3 max          2 x 2 / 2   208 x 208 x  32   ->   104 x 104 x  32
        4 conv     64  3 x 3 / 1   104 x 104 x  32   ->   104 x 104 x  64  0.399 BFLOPs
        5 max          2 x 2 / 2   104 x 104 x  64   ->    52 x  52 x  64
        6 conv    128  3 x 3 / 1    52 x  52 x  64   ->    52 x  52 x 128  0.399 BFLOPs
        7 max          2 x 2 / 2    52 x  52 x 128   ->    26 x  26 x 128
        8 conv    256  3 x 3 / 1    26 x  26 x 128   ->    26 x  26 x 256  0.399 BFLOPs
        9 max          2 x 2 / 2    26 x  26 x 256   ->    13 x  13 x 256
       10 conv    512  3 x 3 / 1    13 x  13 x 256   ->    13 x  13 x 512  0.399 BFLOPs
       11 max          2 x 2 / 1    13 x  13 x 512   ->    13 x  13 x 512
       12 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024  1.595 BFLOPs
       13 conv    256  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 256  0.089 BFLOPs
       14 conv    512  3 x 3 / 1    13 x  13 x 256   ->    13 x  13 x 512  0.399 BFLOPs
       15 conv    255  1 x 1 / 1    13 x  13 x 512   ->    13 x  13 x 255  0.044 BFLOPs
       16 yolo
       17 route  13
       18 conv    128  1 x 1 / 1    13 x  13 x 256   ->    13 x  13 x 128  0.011 BFLOPs
       19 upsample            2x    13 x  13 x 128   ->    26 x  26 x 128
       20 route  19 8
       21 conv    256  3 x 3 / 1    26 x  26 x 384   ->    26 x  26 x 256  1.196 BFLOPs
       22 conv    255  1 x 1 / 1    26 x  26 x 256   ->    26 x  26 x 255  0.088 BFLOPs
       23 yolo
    Loading weights from cfg/yolov3-tiny.weights...Done!
    data/dog.jpg: Predicted in 0.003733 seconds.
    

    结构分析 

    从上面的网络结构打印信息,可以得出一些初步的结论:

    1)总共只有24网络层,比yolo3 107层大为减少。

    2)只有两个yolo层,分别是yolo16和yolo23   其大小分别为13x13和26x26 此外,每个yolo层也对应有3个anchors,总共有6个anchors值。

    3)yolo层前面是一个1x1的卷积层,该层的输入和输出部分保持width, height以及channels不变。在darknet里面,其卷积公式为:output = (input + padding - kernel_size) / stride + 1。  这里padding = 0. 

     

    展开全文
  • yolov3Tiny的cfg配置文件以及weights文件,测试帧数达到40+,精度高
  • 这是我在上面写的一个回答:在这里插入图片描述因此,这一节我们只用关注YOLOv3算法本身,训练的时候将它的损失函数认为和YOLOv2一样就好,Darknet以及很多开源代码都是这样来做的。算法原理YOLOv3应该是现在Y...

    前言

    昨天稍微填上了YOLOv2损失函数的坑,然后我在知乎关注了一个有趣的问题,地址是:https://www.zhihu.com/question/357005177 。这是我在上面写的一个回答:

    d8ccef06d4a68bd5f4ac92320d3caf08.png
    在这里插入图片描述

    因此,这一节我们只用关注YOLOv3算法本身,训练的时候将它的损失函数认为和YOLOv2一样就好,Darknet以及很多开源代码都是这样来做的。

    算法原理

    YOLOv3应该是现在YOLO系列应用的最广泛的算法了,基本就很少有人做工程还用V2了。而YOLOv3的算法原理也很简单,就引入了2个东西,一个是残差模型,一个是FPN架构。FPN我们已经介绍过了,推文在这:目标检测算法之FPN 残差结构后面梳理经典网络的时候应该会再介绍一遍。

    残差模型Darknet-53

    YOLOv3在YOLOv2提出的Darknet-19的基础上引入了残差模块,并进一步加深了网络,改进后的网络有53个卷积层,命名为Darknet-53,网络结构如下:

    a0d5d5edfe1b9acac653896dd1565d6e.png
    在这里插入图片描述

    同时为了说明Darknet-53的有效性,作者给出了在TitanX上,使用相同的条件将的图片分别输入到以Darknet-19,Resnet-101,以及Resnet-152以及Darknet-53为基础网络的分类模型总,实验结果如下表:

    ce4706e6c93a759b90091e60f7130810.png从结果来看,Darknet-53比ResNet-101的性能更好,而且速度是其1.5倍,Darknet-53与ResNet-152性能相似但速度几乎是其2倍。同时,Darknet-53相比于其它网络结构实现了每秒最高的浮点数计算量,说明其网络结构可以更好的利用GPU。

    YOLOV3结构

    一张非常详细的结构图,其中YOLOv3有三个输出,维度分别是:    这里的75介绍过,代表的,其中20代表的是COCO数据集目标类别数,5代表的是每个目标预测框的,3代表的是某一个特征图的Anchor,也即先验框的数目。所以YOLOv3一共有9个Anchor,不过被平均分在了3个特征层中,这也实现了多尺度检测。。。一不小心就讲完了?

    7820df88911eef4b99994c7915e0861d.png
    在这里插入图片描述

    多尺度检测?

    上一节讲完了。。。总结一下,YOLOv3借鉴了FPN的思想,从不同尺度提取特征。相比YOLOv2,YOLOv3提取最后3层特征图,不仅在每个特征图上分别独立做预测,同时通过将小特征图上采样到与大的特征图相同大小,然后与大的特征图拼接做进一步预测。用维度聚类的思想聚类出9种尺度的anchor box,将9种尺度的anchor box均匀的分配给3种尺度的特征图。

    补充:YOLOv3-Tiny

    或许对于速度要求比较高的项目,YOLOV3-tiny才是我们的首要选择,这个网络的原理不用多说了,就是在YOLOv3的基础上去掉了一些特征层,只保留了2个独立预测分支,具体的结构图如下:

    f0909e9b8caf4cdd29eb95c83b997e9b.png
    在这里插入图片描述

    这个是工程下更加常用的。

    后记

    YOLOv3和YOLOv3-Tiny就讲完了,感觉就是水文,后面有机会就更新一下如何使用NCNN部署YOLOv3或者YOLOv3-tiny模型,如果我还记得住这件事情的话,哈哈。顺便说一句,目标检测系列的讲解还远远没有结束,不信可以看我公众号work那一栏里面的深度学习里的目标检测学习路线,还有超多坑需要慢慢填!!!如果看到这里,不妨在右下角点个在看吧,谢谢。


    欢迎关注我的微信公众号GiantPadaCV,期待和你一起交流机器学习,深度学习,图像算法,优化技术,比赛及日常生活等。0b698373c150fd08bd664e487b71188e.png

    展开全文
  • 将keras框架yolov3 tiny_yolo_body网络结构改为vgg16网络结构,程序能够运行 loss正常下降即可。
  • yolov3 tiny进行行人识别—anaconda环境配置 前言:anaconda是一种非常好用的环境管理软件,可以非常容易安装各类包,如果运行显示缺包,那就去environment去安装对应的包。 以我的版本为例:python 3.7.4 - ...

    yolov3 tiny进行行人识别—anaconda环境配置

    前言:anaconda是一种非常好用的环境管理软件,可以非常容易安装各类包,如果运行显示缺包,那就去environment去安装对应的包。
    以我的版本为例:python 3.7.4 - tensorflow 1.13.1 - numpy 1.16.0 - keras 2.2.4

    环境安装(纯享版)

    1.打开boot环境下的
    在这里插入图片描述
    创建一个虚拟环境

    conda create -n yolvo python=3.5//yolvo是创建的环境名称
    

    激活环境:

    conda activate yolvo//yolvo是创建的环境名称
    

    安装tensorflow_gpu-1.13.1:

    pip install tensorflow-gpu==1.13.1 –i https://pypi.tuna.tsinghua.edu.cn/simple
    

    安装tensorflow_gpu版本的keras(2.2.4)

    pip install keras==2.2.4 –i https://pypi.tuna.tsinghua.edu.cn/simple
    

    安装numpy 1.16.0和opencv

    pip install numpy==1.16.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
    pip install opencv-python  -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    环境安装(出错篇)

    1.创建环境失败
    即第一步创建环境时就,卡在中间提示有错误发生

    An unexpected error has occurred. Conda has prepared the above report.
    If submitted, this report will be used by core maintainers to improve
    future releases of conda.

    解决方法:

    conda config --remove-key channels//恢复默认源
    

    2.pip报错socket.timeout
    参考链接
    在这里插入图片描述

    socket.timeout: The read operation timed out

    这种一般是下载超时,使用镜像源会很快的,比如清华镜像

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple +包名
    

    如果还是出错,应该是网络不稳定,多试几次。
    还是出错那就是下载过慢,超出默认时间,修改一下响应时间

    windows下: pip --default-timeout=100 install 包名
    linux下: pip --default-timeout=100 install -U 包名

    后话

    1.在安装模块的时候,pip install与conda install效果是一样的
    2.用anaconda创建环境的好处是,安装一个模块可能需要其它模块的支持,它会把支持的模块也一块下载好,当我们再次创建一个环境时,如果需要的模块之前已经装过,直接连接所需要的模块,而不会再重新下载

    展开全文
  • YoloV3 / tiny-YoloV3 + RaspberryPi3 / Ubuntu笔记本电脑+ NCS / NCS2 + USB摄像头+ Python 灵感来自 作为移动应用程序的性能比较(基于感官比较) ◯=高,△=中,×=低 没有。 模型 速度 准确性 适应距离 1个 ...
  • 使用opencv调用YOLOv3 tiny

    千次阅读 2019-11-06 10:12:35
    "backup/yolov3-tiny-pig_50000.weights" ; net = cv2 . dnn . readNetFromDarknet ( modelConfiguration , modelWeights ) net . setPreferableBackend ( cv2 . dnn . DNN_BACKEND_OPENCV ) net . ...
    #!/usr/bin/env python
    # coding: utf-8
    
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    from tqdm import tqdm_notebook as tqdm
    
    confThreshold = 0.5  #Confidence threshold
    nmsThreshold = 0.4   #Non-maximum suppression threshold
    inpWidth = 320       #Width of network's input image
    inpHeight = 320      #Height of network's input image
    
    # Get the names of the output layers
    def getOutputsNames(net):
        # Get the names of all the layers in the network
        layersNames = net.getLayerNames()
        # Get the names of the output layers, i.e. the layers with unconnected outputs
        return [layersNames[i[0] - 1] for i in net.getUnconnectedOutLayers()]
    
    
    # Draw the predicted bounding box
    def drawPred(classId, conf, left, top, right, bottom):
        # Draw a bounding box.
        cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255))
        
        label = '%.2f' % conf
            
        # Get the label for the class name and its confidence
        if classes:
            assert(classId < len(classes))
            label = '%s:%s' % (classes[classId], label)
     
        #Display the label at the top of the bounding box
        labelSize, baseLine = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)
        top = max(top, labelSize[1])
        cv2.putText(frame, label, (left, top), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255))
    
    
    # Remove the bounding boxes with low confidence using non-maxima suppression
    def postprocess(frame, outs):
        frameHeight = frame.shape[0]
        frameWidth = frame.shape[1]
     
        classIds = []
        confidences = []
        boxes = []
        # Scan through all the bounding boxes output from the network and keep only the
        # ones with high confidence scores. Assign the box's class label as the class with the highest score.
        classIds = []
        confidences = []
        boxes = []
        for out in outs:
            for detection in out:
                scores = detection[5:]
                classId = np.argmax(scores)
                confidence = scores[classId]
                if confidence > confThreshold:
                    center_x = int(detection[0] * frameWidth)
                    center_y = int(detection[1] * frameHeight)
                    width = int(detection[2] * frameWidth)
                    height = int(detection[3] * frameHeight)
                    left = int(center_x - width / 2)
                    top = int(center_y - height / 2)
                    classIds.append(classId)
                    confidences.append(float(confidence))
                    boxes.append([left, top, width, height])
     
        # Perform non maximum suppression to eliminate redundant overlapping boxes with
        # lower confidences.
        indices = cv2.dnn.NMSBoxes(boxes, confidences, confThreshold, nmsThreshold)
        for i in indices:
            i = i[0]
            box = boxes[i]
            left = box[0]
            top = box[1]
            width = box[2]
            height = box[3]
            drawPred(classIds[i], confidences[i], left, top, left + width, top + height)
    
    # Load names of classes
    classesFile = "data/pig.names";
    classes = None
    with open(classesFile, 'rt') as f:
        classes = f.read().rstrip('\n').split('\n')
     
    # Give the configuration and weight files for the model and load the network using them.
    modelConfiguration = "cfg/yolov3-tiny-pig.cfg";
    modelWeights = "backup/yolov3-tiny-pig_50000.weights";
     
    net = cv2.dnn.readNetFromDarknet(modelConfiguration, modelWeights)
    net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV)
    net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)
    
    video = cv2.VideoCapture('/home/xmj/mycipan3/卸猪台/demo_none.mp4')
    
    output_names = getOutputsNames(net)
    for i in tqdm(range(200)):
        ret, frame = video.read()
        # Create a 4D blob from a frame.
        blob = cv2.dnn.blobFromImage(frame, 1/255, (inpWidth, inpHeight), [0,0,0], 1, crop=False)
     
        # Sets the input to the network
        net.setInput(blob)
     
        # Runs the forward pass to get output of the output layers
        outs = net.forward(output_names)
     
        # Remove the bounding boxes with low confidence
    #     print(len(outs), outs)
        postprocess(frame, outs)
    #     print(len(outs), outs)
        # Put efficiency information. The function getPerfProfile returns the 
        # overall time for inference(t) and the timings for each of the layers(in layersTimes)
        t, _ = net.getPerfProfile()
        label = 'Inference time: %.2f ms' % (t * 1000.0 / cv2.getTickFrequency())
        print(label)
        cv2.putText(frame, label, (0, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255))
    #     plt.imshow(frame)
    #     plt.show()
    
    
    展开全文
  • yolov3-tiny预训练 yolov3预训练 yolov4 预训练yolov4-tiny预训练模型,全部打包在压缩文件
  • 生成yolo.h5 convert.py yolov3.cfg yolov3.weights model_data/yolo.h5 运行相应的视频 yolo_video.py [video_path] 运行结果:
  • 量化yolov3tiny 基于tensorflow lite

    千次阅读 2019-05-28 11:13:34
    首先给出一个github链接:https://github.com/caslabai/yolov3tiny_tensorflow_int8_quantized 里面的代码其实也没啥,无非是一些预训练好的模型与权重,制作好的脚本,run之后就会得到是适应于tensorflow lite支持...
  •  ./darknet partial ./cfg/yolov3-tiny.cfg ./yolov3-tiny.weights ./yolov3-tiny.conv.15 15 对于yolov3 tiny配置文件的修改: cp yolov3-tiny.cfg yolov3-tiny-voc.cfg 然后做和上面YOLOv3yolov3-voc.cfg里一样...
  • mask = 6,7,8 这一层预测第6、7、8个 anchor boxes ,每个yolo层实际上只预测3个由mask定义的anchors anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 [?]anc...
  • 在树莓派+Intel NCS2上跑YoloV3 Tiny

    千次阅读 热门讨论 2019-01-17 12:40:09
    上一篇:树莓派3B+安装OpenVINO,Intel Movidius神经计算棒NCS2的环境部署 二话不说,先放官方教程,不记得从官网的哪个页面下载的了,存在百度网盘,提取码:76zd 。 1. 将Yolo V3的.weights文件转为OpenVINO的IR...
  • 安卓端目标识别 模型训练 ncnn 效果很棒
  • 1)系统配置 Intel Core i7-5500U 2.40 GHz Windows10 2)源码 ... 3)修改 ...运行tiny模型时,需要修改yolo.py: 把anchors_path改一下 ## "anchors_path": 'model_data/yolo_anchors.txt', ...
  • python convert.py -w yolov3-tiny.cfg yolov3-tiny.weights model_data/tiny_yolo_weights.h5   6.x 如果不训练,此时可以直接运行验证别人训练好的网络的性能(*) python yolo_video.py --image ...
  • yolov4 tiny models

    2021-01-01 12:31:41
    <p>python3 onnx_to_tensorrt.py --model yolov4-tiny-416 Loading ONNX file from path yolov4-tiny-416.onnx... Beginning ONNX file parsing Completed parsing of ONNX file Building an engine; this may take ...
  • yolov3-tiny.weights

    2020-07-13 10:20:11
    pytorch yolov3 目标检测 yolov3-tiny.weights https://pjreddie.com/media/files/yolov3-tiny.weights yolov3 yolov3-tiny.weights

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 977
精华内容 390
关键字:

yolov3tiny