YOLOv2(一) 参考资料

参考资料

  • Yolo-v2训练voc及自己的数据集

  • 【YOLO学习】使用YOLO v2训练自己的数据

  • Python Wrappers for Yolov2

  • YOLOv2如何fine-tuning?

  • Yolov2 on tensorflow

  • How to use C library in python? (Generating Python wrappers for C library)

  • Use Darklnet as a lib

  • Google Group Question 1

  • PASCAL VOC Chanllenge

  • yolo的训练和测试

使用

画框源码

void draw_box(image a, int x1, int y1, int x2, int y2, float r, float g, float b)
{
    //normalize_image(a);
    int i;
    if(x1 < 0) x1 = 0;
    if(x1 >= a.w) x1 = a.w-1;
    if(x2 < 0) x2 = 0;
    if(x2 >= a.w) x2 = a.w-1;

    if(y1 < 0) y1 = 0;
    if(y1 >= a.h) y1 = a.h-1;
    if(y2 < 0) y2 = 0;
    if(y2 >= a.h) y2 = a.h-1;

    for(i = x1; i <= x2; ++i){
        a.data[i + y1*a.w + 0*a.w*a.h] = r;
        a.data[i + y2*a.w + 0*a.w*a.h] = r;

        a.data[i + y1*a.w + 1*a.w*a.h] = g;
        a.data[i + y2*a.w + 1*a.w*a.h] = g;

        a.data[i + y1*a.w + 2*a.w*a.h] = b;
        a.data[i + y2*a.w + 2*a.w*a.h] = b;
    }
    for(i = y1; i <= y2; ++i){
        a.data[x1 + i*a.w + 0*a.w*a.h] = r;
        a.data[x2 + i*a.w + 0*a.w*a.h] = r;

        a.data[x1 + i*a.w + 1*a.w*a.h] = g;
        a.data[x2 + i*a.w + 1*a.w*a.h] = g;

        a.data[x1 + i*a.w + 2*a.w*a.h] = b;
        a.data[x2 + i*a.w + 2*a.w*a.h] = b;
    }
}

代码在./src/image.c中,从源码中可以看出,YOLO预测值为矩阵的左上角坐标和右下角坐标。(并不是,这是经过转换之后,在网络中流动的是anchor box,即(x,y)在box中心的高度,然后再根据数据结果,进行转换。

YOLOv2 中的Box格式----anchor box

用于准备数据的voc_label.py

def convert(size, box):
    dw = 1./size[0]
    dh = 1./size[1]
    x = (box[0] + box[1])/2.0
    y = (box[2] + box[3])/2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)

size是图像的widthheightbox参数为xmin, xmax,yin,ymax。所以传入的是矩形框左上和右下两个角点的坐标,然后输出值是标准化的图像中心坐标和图像宽度和高度。
实例如下:

2008_000002.xml


    VOC2012
    2008_000002.jpg
    
        The VOC2008 Database
        PASCAL VOC2008
        flickr
    
    
        500
        375
        3
    
    0
    
        tvmonitor
        Frontal
        0
        0
        
            34
            11
            448
            293
        
        0
    

经过转换得到的标记文件如下:

19 0.482 0.405333333333 0.828 0.752

其中,第一个数值表示分类标签,后四个值分别表示均一化的x, y, width, height

由视频提取图像和标记

YOLOv2(一) 参考资料_第1张图片
opencv add vs numpy add

你可能感兴趣的:(YOLOv2(一) 参考资料)