利用Darket 和YOLOV3训练自己的数据集(制作VOC)

超详细教程:YOLO_V3(yolov3)训练自己的数据 前言:最近刚好做一个项目需要做detection,选择的算法是yolo v3,因为它既有速度又有精度,还非常灵活,简直是工业界良心。做项目免不了需要用到自己的数据集,所以的从头一个脚印的来,走通了之后决定写一个帖子,以免需要用的人少走歪路,节约时间。 官网上已经教我们如何跑起来yolo v3,因此大部分时间其实花在制作数据集上。总体来说,分为四个步骤,分别是:标注数据,利用voc制作自己的数据集,... 阅读详情

darkenet源码:https://github.com/pjreddie/darknet.git

1. 配置Darknet

  • 下载darknet源码:git clone https://github.com/pjreddie/darknet
  • 进入darknet目录: cd darknet
  • 如果是cpu直接make,否则需要修改Makefile,设置cuda和cudnn路径:
GPU=1
CUDNN=1
NVCC=/usr/local/cuda-8.0/bin/nvcc
  • 如果需要调用摄像头,还要设置OPENCV=1,这里注意一下,如果设置了OPENCV=1,进行测试的时候可能会有错,这个我在github上看到是因为opencv版本太高导致的,可以切换为opencv2进行测试
  • 下载yolov3的模型文件wget https://pjreddie.com/media/files/yolov3.weights
  • 进行测试:./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

2. 制作VOC数据集

\quad这里介绍一下如何制作PASCAL VOC数据集,首先来看VOC数据集的结构:

这里写图片描述
这里写图片描述
我们训练自己的数据时只需要修改Annotations、ImageSets、JPEGImages 三个文件夹,请自动忽略voc_label。接下来就可以先搞定Annotations这个文件夹,这个文件夹下存储的是每一张图片对应的boundingbox坐标,是这种格式:
这里写图片描述
这里写图片描述
,在制作这个文件夹下的xml之前请先把训练数据集放到JPEGImages下。然后可以使用我下面的脚本生成Annotations的各个xml。

#coding=utf-8
import os, sys
import glob #用来查找特定文件名的文件
from PIL import Image

#Safety Hat图片位置
src_img_dir = "/home/zxy/PycharmProjects/Acmtest/input/train"
#Safety Hat图片的groundtruth的文件位置
src_txt_dir = "/home/zxy/PycharmProjects/Acmtest/gt/train_labels.txt"
src_xml_dir = "/home/zxy/PycharmProjects/darknet/VOCdevkit/VOC2007/Annotations"

img_Lists = glob.glob(src_img_dir + '/*.jpg')
#图片名
img_basenames = []
for item in img_Lists:
    img_basenames.append(os.path.basename(item))


print(len(img_basenames))
image_names = []
for item in img_basenames:
    temp1, temp2 = os.path.splitext(item)
    image_names.append(temp1)

# open the crospronding txt file
now_gt = {}


fopen = open(src_txt_dir, 'r')
lines = fopen.readlines()
i = 0
for num, line in enumerate(lines):
    temp1, temp2 = line.split(',')
    if(len(temp2.replace('\n', '').strip())!=0):
        t1, t2, t3, t4 = temp2.replace('\n', '').strip().split(' ')
        # print("*%s %s %s %s*" % (t1, t2, t3, t4))
        # print(temp2.replace('\n', '').strip().split(' '))
        if temp1 not in now_gt.keys():
            now_gt[temp1] = [[t1, t2, t3, t4]]
        else:
            now_gt[temp1].append([t1, t2, t3, t4])

    else:
        now_gt[temp1] = []
    print(num , ' is processing ... ')
print(len(now_gt.keys()))


total = 0

for img in image_names:
    total += 1
    im = Image.open((src_img_dir+'/'+img+'.jpg'))
    width, height = im.size
    xml_file = open((src_xml_dir + '/' + img + '.xml'), 'w')
    xml_file.write('<annotation>\n')
    xml_file.write('    <folder>VOC2007</folder>\n')
    xml_file.write('    <filename>' + str(img) + '.jpg' + '</filename>\n')
    xml_file.write('    <size>\n')
    xml_file.write('        <width>' + str(width) + '</width>\n')
    xml_file.write('        <height>' + str(height) + '</height>\n')
    xml_file.write('        <depth>3</depth>\n')
    xml_file.write('    </size>\n')
    for img_each_label in now_gt[img+".jpg"]:
        spt = img_each_label
        cnt = len(img_each_label) // 4
        for i in range(0, cnt):
            xml_file.write('    <object>\n')
            xml_file.write('        <name>' + str("safetyhat") + '</name>\n')
            xml_file.write('        <pose>Unspecified</pose>\n')
            xml_file.write('        <truncated>0</truncated>\n')
            xml_file.write('        <difficult>0</difficult>\n')
            xml_file.write('        <bndbox>\n')
            xml_file.write('            <xmin>' + str(spt[i*4+0]) + '</xmin>\n')
            xml_file.write('            <ymin>' + str(spt[i*4+1]) + '</ymin>\n')
            xml_file.write('            <xmax>' + str(spt[i*4+2]) + '</xmax>\n')
            xml_file.write('            <ymax>' + str(spt[i*4+3]) + '</ymax>\n')
            xml_file.write('        </bndbox>\n')
            xml_file.write('    </object>\n')

    xml_file.write('</annotation>')

print(total)

生成了Annotation文件夹下的xml之后,就可以生成Main下的4个txt文件,这四个文件夹中存储的时上一步中xml文件的文件名。trainval和 test内容相加为所有xml文件,train和val内容相加为trainval。代码如下:

import os
import random

trainval_percent = 0.5
train_percent = 0.5
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets/Main'
total_xml = os.listdir(xmlfilepath)

num=len(total_xml)
list=range(num)
tv=int(num*trainval_percent)
tr=int(tv*train_percent)
trainval= random.sample(list,tv)
train=random.sample(trainval,tr)

ftrainval = open(txtsavepath+'/trainval.txt', 'w')
ftest = open(txtsavepath+'/test.txt', 'w')
ftrain = open(txtsavepath+'/train.txt', 'w')
fval = open(txtsavepath+'/val.txt', 'w')

for i  in list:
    name=total_xml[i][:-4]+'\n'
    if i in trainval:
        ftrainval.write(name)
        if i in train:
            ftrain.write(name)
        else:
            fval.write(name)
    else:
        ftest.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest .close()

最后一步是生成YOLO要用的VOC标签格式,首先下载格式转化文件:wget https://pjreddie.com/media/files/voc_label.py,gedit打开voc_label.py,进行修改

# 因为没有用到VOC2012的数据,要修改年份
sets=[('2007', 'train'), ('2007', 'val'), ('2007', 'test')]
# 修改检测的物体种
classes = ["safetyhat"]

运行voc_label.py,即可完成文件转化。用train和val的数据一起用来训练,所以需要合并文件:cat 2007_train.txt 2007_val.txt > train.txt,其中voc_label.py是在这个目录下运行的:
这里写图片描述
OK啦,VOC数据集就制作完了,可以进行yolov3训练了。

#3. yolov3训练数据
\quad修改pascal数据的cfg文件,打开cfg/voc.data文件,进行如下修改:

classes= 1  # 自己数据集的类别数
train  = /home/xxx/darknet/train.txt  # train文件的路径
valid  = /home/xxx/darknet/2007_test.txt   # test文件的路径
names = /home/xxx/darknet/data/voc.names #用绝对路径
backup = backup #模型保存的文件夹

\quad注意需要在darknet文件夹下,新建名为backup的文件夹,否则训练过程报错:Couldn’t open file: backup/yolov3-voc.backup。最后,打开data/voc.names文件,对应自己的数据集修改类别。
\quad下载Imagenet上预先训练的权重,wget https://pjreddie.com/media/files/darknet53.conv.74
\quad 修改cfg/yolov3-voc.cfg,首先修改分类数为自己的分类数,然后注意开头部分训练的batchsize和subdivisions被注释了,如果需要自己训练的话就需要去掉,测试的时候需要改回来,最后可以修改动量参数为0.99和学习率改小,这样可以避免训练过程出现大量nan的情况,最后把每个[yolo]前的filters改成18这里怎么改具体可以看这个issule:https://github.com/pjreddie/darknet/issues/582, 改完之后就可以训练我们的模型了./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 。

4. 训练过程参数的意义

  • Region xx: cfg文件中yolo-layer的索引;
  • Avg IOU:当前迭代中,预测的box与标注的box的平均交并比,越大越好,期望数值为1;
  • Class: 标注物体的分类准确率,越大越好,期望数值为1;
  • obj: 越大越好,期望数值为1;
  • No obj: 越小越好;
  • .5R: 以IOU=0.5为阈值时候的recall; recall = 检出的正样本/实际的正样本
  • 0.75R: 以IOU=0.75为阈值时候的recall;
  • count:正样本数目。
  • 待补充ing
Loaded: 0.000034 seconds
Region 82 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.000009, .5R: -nan, .75R: -nan,  count: 0
Region 94 Avg IOU: 0.790078, Class: 0.996943, Obj: 0.777700, No Obj: 0.001513, .5R: 1.000000, .75R: 0.833333,  count: 6
Region 106 Avg IOU: 0.701132, Class: 0.998590, Obj: 0.710799, No Obj: 0.000800, .5R: 0.857143, .75R: 0.571429,  count: 14
Region 82 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.000007, .5R: -nan, .75R: -nan,  count: 0
Region 94 Avg IOU: 0.688576, Class: 0.998360, Obj: 0.855777, No Obj: 0.000512, .5R: 1.000000, .75R: 0.500000,  count: 2
Region 106 Avg IOU: 0.680646, Class: 0.998413, Obj: 0.675553, No Obj: 0.000405, .5R: 0.857143, .75R: 0.428571,  count: 7
Region 82 Avg IOU: 0.478347, Class: 0.999972, Obj: 0.999957, No Obj: 0.000578, .5R: 0.000000, .75R: 0.000000,  count: 1
Region 94 Avg IOU: 0.901106, Class: 0.999994, Obj: 0.999893, No Obj: 0.000308, .5R: 1.000000, .75R: 1.000000,  count: 1
Region 106 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.000025, .5R: -nan, .75R: -nan,  count: 0
Region 82 Avg IOU: 0.724108, Class: 0.988430, Obj: 0.765983, No Obj: 0.003308, .5R: 1.000000, .75R: 0.400000,  count: 5
Region 94 Avg IOU: 0.752382, Class: 0.996165, Obj: 0.848303, No Obj: 0.002020, .5R: 1.000000, .75R: 0.500000,  count: 8
Region 106 Avg IOU: 0.652267, Class: 0.998596, Obj: 0.646115, No Obj: 0.000728, .5R: 0.818182, .75R: 0.545455,  count: 11
Region 82 Avg IOU: 0.755896, Class: 0.999879, Obj: 0.999514, No Obj: 0.001232, .5R: 1.000000, .75R: 1.000000,  count: 1
Region 94 Avg IOU: 0.749224, Class: 0.999670, Obj: 0.988916, No Obj: 0.000441, .5R: 1.000000, .75R: 0.500000,  count: 2
Region 106 Avg IOU: 0.601608, Class: 0.999661, Obj: 0.714591, No Obj: 0.000147, .5R: 0.750000, .75R: 0.250000,  count: 4
Region 82 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.000011, .5R: -nan, .75R: -nan,  count: 0
Region 94 Avg IOU: 0.797704, Class: 0.997323, Obj: 0.910817, No Obj: 0.001006, .5R: 1.000000, .75R: 0.750000,  count: 4
Region 106 Avg IOU: 0.727626, Class: 0.998225, Obj: 0.798596, No Obj: 0.000121, .5R: 1.000000, .75R: 0.500000,  count: 2
Region 82 Avg IOU: 0.669070, Class: 0.998607, Obj: 0.958330, No Obj: 0.001297, .5R: 1.000000, .75R: 0.000000,  count: 2
Region 94 Avg IOU: 0.832890, Class: 0.999755, Obj: 0.965164, No Obj: 0.000829, .5R: 1.000000, .75R: 1.000000,  count: 1
Region 106 Avg IOU: 0.613751, Class: 0.999541, Obj: 0.791765, No Obj: 0.000554, .5R: 0.833333, .75R: 0.333333,  count: 12
Region 82 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.000007, .5R: -nan, .75R: -nan,  count: 0
Region 94 Avg IOU: 0.816189, Class: 0.999966, Obj: 0.999738, No Obj: 0.000673, .5R: 1.000000, .75R: 1.000000,  count: 2
Region 106 Avg IOU: 0.756419, Class: 0.999139, Obj: 0.891591, No Obj: 0.000712, .5R: 1.000000, .75R: 0.500000,  count: 12
12010: 0.454202, 0.404766 avg, 0.000100 rate, 2.424004 seconds, 768640 images
Loaded: 0.000034 seconds

这断代码展示了一个批次(batch),批次大小的划分根据yolov3-voc.cfg的subdivisions参数。在我使用的 .cfg 文件中 batch =256,subdivision = 8,所以在训练输出中,训练迭代包含了32组,每组又包含了8张图片,跟设定的batch和subdivision的值一致。

  • 批输出 针对上面的bacth的最后一行输出来说,12010代表当前训练的迭代次数,0.454202代表总体的loss,0.404766 avg代表平均损失,这个值越低越好,一般来说一旦这个数值低于0.060730 avg就可以终止训练了。0.0001代表当前的学习率,2.424004 seconds代表当前批次花费的总时间。768640代表3002*256代表当前训练的图片总数。

#5. yolov3模型的批量测试和位置输出
\quad预测时的命令为:./darknet detect cfg/yolov3-voc.cfg yolov3-voc_900.weights test3.jpg ,需要批量测试需要修改yolo.c文件后重新编译,修改后的代码为:

void validate_yolo(char *cfgfile, char *weightfile)
{
    network net = parse_network_cfg(cfgfile);
    if(weightfile){
        load_weights(&net, weightfile);
    }
    set_batch_network(&net, 1);
    fprintf(stderr, "Learning Rate: %g, Momentum: %g, Decay: %g\n", net.learning_rate, net.momentum, net.decay);
    srand(time(0));

    char *base = "results/comp4_det_test_";
    //list *plist = get_paths("data/voc.2007.test"); # 生成过程见官网,表示需要test的文件的路径
    list *plist = get_paths("/home/pjreddie/data/voc/2007_test.txt"); # .txt文件为需要test的文件的绝对路径,和train.txt是相同的形式
    //list *plist = get_paths("data/voc.2012.test");
    char **paths = (char **)list_to_array(plist);

    layer l = net.layers[net.n-1];
    int classes = l.classes;
    int square = l.sqrt;
    int side = l.side;

    int j;
    FILE **fps = calloc(classes, sizeof(FILE *));
    for(j = 0; j < classes; ++j){
        char buff[1024];
        snprintf(buff, 1024, "%s%s.txt", base, voc_names[j]);
        fps[j] = fopen(buff, "w");
    }
    box *boxes = calloc(side*side*l.n, sizeof(box));
    float **probs = calloc(side*side*l.n, sizeof(float *));
    for(j = 0; j < side*side*l.n; ++j) probs[j] = calloc(classes, sizeof(float *));

    int m = plist->size;
    int i=0;
    int t;

    float thresh = .001;
    int nms = 1;
    float iou_thresh = .5;

    int nthreads = 2;
    image *val = calloc(nthreads, sizeof(image));
    image *val_resized = calloc(nthreads, sizeof(image));
    image *buf = calloc(nthreads, sizeof(image));
    image *buf_resized = calloc(nthreads, sizeof(image));
    pthread_t *thr = calloc(nthreads, sizeof(pthread_t));

    load_args args = {0};
    args.w = net.w;
    args.h = net.h;
    args.type = IMAGE_DATA;

    for(t = 0; t < nthreads; ++t){
        args.path = paths[i+t];
        args.im = &buf[t];
        args.resized = &buf_resized[t];
        thr[t] = load_data_in_thread(args);
    }
    time_t start = time(0);
    for(i = nthreads; i < m+nthreads; i += nthreads){
        fprintf(stderr, "%d\n", i);
        for(t = 0; t < nthreads && i+t-nthreads < m; ++t){
            pthread_join(thr[t], 0);
            val[t] = buf[t];
            val_resized[t] = buf_resized[t];
        }
        for(t = 0; t < nthreads && i+t < m; ++t){
            args.path = paths[i+t];
            args.im = &buf[t];
            args.resized = &buf_resized[t];
            thr[t] = load_data_in_thread(args);
        }
        for(t = 0; t < nthreads && i+t-nthreads < m; ++t){
            char *path = paths[i+t-nthreads];
            char *id = basecfg(path);
            float *X = val_resized[t].data;
            float *predictions = network_predict(net, X);
            int w = val[t].w;
            int h = val[t].h;
            convert_yolo_detections(predictions, classes, l.n, square, side, w, h, thresh, probs, boxes, 0);
            if (nms) do_nms_sort(boxes, probs, side*side*l.n, classes, iou_thresh);
            print_yolo_detections(fps, id, boxes, probs, side*side*l.n, classes, w, h);
            free(id);
            free_image(val[t]);
            free_image(val_resized[t]);
        }
    }
    fprintf(stderr, "Total Detection Time: %f Seconds\n", (double)(time(0) - start));
}

void print_yolo_detections(FILE **fps, char *id, box *boxes, float **probs, int total, int classes, int w, int h)
{
    int i, j;
    for(i = 0; i < total; ++i){
        float xmin = boxes[i].x - boxes[i].w/2.;
        float xmax = boxes[i].x + boxes[i].w/2.;
        float ymin = boxes[i].y - boxes[i].h/2.;
        float ymax = boxes[i].y + boxes[i].h/2.;

        if (xmin < 0) xmin = 0;
        if (ymin < 0) ymin = 0;
        if (xmax > w) xmax = w;
        if (ymax > h) ymax = h;

        for(j = 0; j < classes; ++j){
            if (probs[i][j]) fprintf(fps[j], "%s %f %f %f %f %f\n", id, probs[i][j], xmin, ymin, xmax, ymax);
        }
    }
}

然后执行:./darknet yolo valid cfg/yolov3-voc.cfg yolov3-voc_900.weights就可以在批量生成测试数据集的结果了。

#6. 调参遇到的trick

  • CUDA: out of memory 以及 resizing 问题?显存不够,调小batch,关闭多尺度训练:random = 0。
  • YOLOV3训练出现nan的问题?在显存允许的情况下,可适当增加batch大小,可以一定程度上减少NAN的出现,动量参数可以调为0.99
  • YOLOv3打印的参数都是什么含义?详见yolo_layer.c文件的forward_yolo_layer函数。
printf("Region %d Avg IOU: %f, Class: %f, Obj: %f, No Obj: %f, .5R: %f, .75R: %f,  count: %d\n", net.index, avg_iou/count, avg_cat/class_count, avg_obj/count, avg_anyobj/(l.w*l.h*l.n*l.batch), recall/count, recall75/count, count);

刚开始迭代,由于没有预测出相应的目标,所以查全率较低【.5R,0.75R】,会出现大面积为0的情况,这个是正常的。

  • ing

维护了一个微信公众号,分享论文,算法,比赛,生活,欢迎加入。

在这里插入图片描述

大模型量化技术全解析:从INT8到GPTQ/AWQ,降低部署成本实战指南 模型量化是一种通过降低神经网络权重和激活值的数据精度(如从FP16降至INT8/INT4),从而大幅减少模型内存占用和计算开销的核心模型压缩技术。其原理基于线性变换,将高精度浮点数映射到低精度整数表示,在硬件层面能利用专用低精度计算单元实现显著加速。这项技术的核心价值在于解决了大模型(如千亿参数LLM)部署时面临的高昂显存成本和推理延迟问题,使其能在消费级GPU和边缘设备上高效运行。当前,后训练量化(PTQ)因其无需重新训练的特性成为主流,衍生出GPTQ、AWQ、SmoothQuant等多种方法,广泛应用于 阅读详情

相关推荐

k8s学习笔记(3)--- kubernetes核心技术概念

kubernetes核心技术概念 1.API对象         API对象是K8s集群中的管理操作单元。K8s集群系统每支持一项新功能,引入一项新技术,一定会新引入对应的API对象,支持对该功能的管理操作。例如副本集Replica Set对应的API对象是RS。 2.集群(Cluster)         集群是指由...

梦谜的博客 1293

YOLOv3目标检测实战:训练自己的数据集

YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。本课程将手把手地教大家使用labelImg标注和使用YOLOv3训练自己的数据集。课程分为三个小项目:足球目标检测(单目标检测)、梅西目标检测(单目标检测)、足球和梅西同时目标检测(两目标检测)。本课程的YOLOv3使用Darknet,在Ubuntu系统上做项目演示。包括:安装Darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入探究。购课后可加入白勇老师课程学习交流QQ群:957519975除本课程《YOLOv3目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括:《YOLOv3目标检测实战:交通标志识别》《YOLOv3目标检测:原理与源码解析》《YOLOv3目标检测:网络模型改进方法》敬请关注并选择学习!

【项目分享】RailTracker: 火车票务数据采集与分析

从12306使用爬虫爬取火车站及车次信息、火车票价 通过本项目,我们将带领访问者手把手完成火车票数据采集、数据清洗、数据集成、可视化的一整个流程!

zhushatong的博客 3345

yolo v3 参数理解

[net] # Testing 测试模式 # batch=1 # subdivisions=1 # Training 训练模式 batch=64 一批训练样本的样本数量,每batch个样本更新一次参数...

weixin_38770711的博客 1442

零代码实战:基于Coze平台打造测试用例生成AI助手

本文详细介绍了如何利用Coze平台零代码打造测试用例生成AI助手,通过智能体和工作流配置,实现需求文档自动解析与结构化测试用例生成。该方案显著提升测试效率,特别适合敏捷开发中频繁变更的需求场景,帮助测试工程师快速应对挑战。

weixin_42526015的博客 209

ArduPilot + Gazebo + Mavros + QGC + 遥控器:从仿真到实机的自主轨迹控制实践

本文详细介绍了基于ArduPilot、Gazebo、Mavros和QGC的无人机自主轨迹控制全流程实践。从仿真环境搭建、多终端协同配置,到遥控器集成与自主圆形轨迹算法实现,提供了完整的代码示例和实机迁移要点,帮助开发者快速掌握无人机自主控制技术。

corn8的博客 941

使用Yolov3训练自己制作数据集,快速上手(详细图文教程)

在目标检测和分类这方面,Yolo可以快速很好的解决许多问题,这里总结了快速上手Yolov3的方法,直接快速训练自己的数据集使用。

qq_40280673的博客 7055

DAIC-WOZ数据集文件结构详解:CLNF特征文件、音频转录与PHQ8评分全解读

本文深入解析DAIC-WOZ数据集的文件结构,重点介绍CLNF特征文件、音频转录与PHQ8评分的详细内容。通过多模态数据处理实战指南,帮助研究者高效利用这一抑郁分析领域的重要资源,掌握面部动作单元、声学特征和文本转录的科学解读与应用技巧。

weixin_29159711的博客 185

如何用YOLOv3训练自己的数据集

首先注意自己的需要的系统,Windows和ubuntu不互通,选择自己系统,本文为Windows10及pycharmYOLOv3下载地址注意选定版本1.在下载的根目录下,新建VOCdevkit文件夹2.在VOCdevkit文件夹,新建images,labels,VOC2007文件夹3.在images文件夹新建train和val文件夹4.在labels文件夹新建train和val文件夹5.在VOC2007文件夹新建Annotations,JPEGImages,YOLOLabels文件夹。

zhuweida000的博客 2892

从零到精通:BLDC电机驱动电路详解与设计思路

这套电机驱动电路从核心控制器到反馈采集模块,涉及了BLDC电机驱动的方方面面。每一个模块的设计和选择都需要综合考虑系统需求和实际使用环境。在实际应用中,很多细微的设计改进都会显著影响电机的运行性能。

weixin_43199439的博客 3109

Codex 接入自定义大模型终极教程:插件解锁、会话管理、国产模型一键搞定

🚀 Codex 默认只能使用 OpenAI 官方模型?这篇文章带你从零接入 DeepSeek、通义千问、GLM 等国产大模型,并彻底解锁插件、会话删除、多模型切换等隐藏功能。配置原理、常见坑点、傻瓜式增强工具分享,小白也能轻松上手!🔥

XiaoqiangClub的博客 3153

darknet在windows上的安装,以及利用yolo训练自己的训练集并测试

1.darknet下载2.安装环境vs20194.opencv安装,如果加完不行可能要重启电脑重新激活环境变量用文本文档打开darknet.vcxproj文件修改cuda版本号,yolo_cpp_dll,yolo_console_dll.同样如此2.若遇到BuildCustomizations\CUDA下没有CUDA则表示没有安好Cudnn或者cudnn没有放到CUDA目录下不在环境变量中。

qq_38348811的博客 2792

第38节:cesium 风场效果(含源码+视频)

cesium 风场效果

qq_29384639的博客 2331

【图像识别与处理】darket-训练自己的yolov3模型

darknet-训练自己的Yolov3模型

穿着帆布鞋也能走猫步 1601

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

DarkNet-YOLOv3训练自己的数据集(二)(过程超详细!!!)

上一篇讲了制作数据集和重新聚类anchor,接下来讲如何训练模型 一、修改Makefile文件 将GPU、CUDNN改为1,因为我没有检测视频,所以OPENCV没有改,如果需要的话可以改为1。 修改完后保存并执行以下命令重新编译 make 二、编译成功后,修改cfg/voc.data文件,classes改为自己的类别数,路径也改为自己的,最后两个可以不动。 三、 修改data/voc.names和coco.names。改成自己的类别名称即可 四、 修改cfg/yolov3-voc.cfg,搜索y

Sagacity_1125的博客 844

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

YoloV2之TensorFlow版源码解析

    准备阶段 数据集的准备: ① 索引文件trainval.txt: 存放的是训练图片的名称                                   ② 图片文件:                                    ③ 标签文件xml:                       网络的设计(分类训练与检测训练)      Train...

一路向北 6045

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

darknet yolov3训练Voc数据集

1.配置好ubuntu16.04 nvidia-driver-394 cuda8.0 cudnn6.0 opencv3.4.1环境 2.下载 darknet-master git clone https://github.com/pjreddie/darknet cd darknet gedit Makefile GPU=1 CUDNN=1 OPENCV=1 make -j8 下载yolov3权重...

弯道超越的博客 1986

YOLOV3训练自己的数据集(VOC数据集格式)

包括内容: darknet yolov3的下载、配置、测试 制作自己训练集标签(VOC数据集格式) 在yolov3下训练自己的数据集 验证训练结果,进行测试 (一)darknet yolov3的下载、配置、测试: 下载并配置yolo 打开网址:https://pjreddie.com/darknet/yolo/,这是官网给出的使用及训练教程。 下载yolo项目 git clone https:.........

Carroll的博客 1万+

深度学习:YOLO v3(darknet)——训练自己的VOC数据

论文:YOLOv3: An Incremental Improvement  论文地址:https://pjreddie.com/media/files/papers/YOLOv3.pdf darknet代码:https://github.com/AlexeyAB/darknet#how-to-compile-on-linux   本文配置的方法也主要是参考  https://github...

volcano_Lin 的博客 1万+

YOLO v3——训练自己的VOC数据及训练技巧

目录 一、安装darknet 二、编译(这里直接安装cpu版本作为例子) 三、制作数据集 四、修改训练配置文件 五、开始训练 六、训练过程中参数含义 七、训练小窍门 一、安装darknet $ git clone https://github.com/pjreddie/darknet $ cd darknet 二、编译(这里直接安装cpu版本作为例子) ma...

linzs.online 1万+

yolov3训练自己的数据集

yolov3训练自己的数据集从图片和xml的保存,到训练可能的报错进行改进和防止报错 从图片和xml的保存,到训练 保存地址随便,但图片名,要和xml的命名对应。因为convert_to_txt.py文件是以xml的命名为切分,而voc_annotation.py文件是以convert_to_txt.py生成的文件来遍历生成文件。 下面是详细步骤: 1,图片保存 在convert_to_txt.py调整自己的路径,和生成文件的路径,自己记得就行, 然后运行。就生成了如下 然后执行voc_annotati

A1871160的博客 543

学习YOLOv3训练自己的数据集

学习yolov3记录提示:以下是本篇文章正文内容,下面案例可供参考。

m0_46533523的博客 921

YOLOv3训练自己的数据集

写这篇博客的原因就是想记录一下自己使用YOLOv3时踩过的坑,之前一直都是使用pytorch版本的YOLOv3,比较熟悉,但是最近导师接了一个项目,需要使用darknet版本的YOLOv3,一直没有使用过这个框架,比较小众,因此处理很多的错,想简单的记录一下,方便自己以后的学习。 1安装darknet框架 git clone https://github.com/pjreddie/darknet.git 其实也可以去下面这个网站下载压缩包,然后上传到服务器,用自己电脑跑代码的话,可以直接解压即可..

qq_45659693的博客 6248

yolov3 训练及数据集准备【记录】

------------------------------ 本文仅供学习交流,如有错误,望交流指教 ------------------------------ yolov3 训练及数据集准备【记录】 一、数据集的准备 0x00.文件目录结构 VOCdevkit ——VOC2018这个年号可以自行替换,但是注意同时修改脚本上的年号,否则找不到目录 ————Annotations 存放所有的mxl...

liuyubo23的博客 4033

(pytorch)如何用yolov3训练自己的数据集(亲测有效)

鉴于网络上有很多用yolov3算法训练自己的数据集的教程都失效的情况下,我决定自己写一篇。在最新版的pytorch环境下训练。 首先要准备好我们自己的数据集(也就是图片),然后用我们的标注工具进行标注 1、标注工具(labelimg) Labelimg是一款开源的数据标注工具,可以标注三种格式。 1 VOC标签格式,保存为xml文件。 2 yolo标签格式,保存为txt文件。 3 createML标签格式,保存为json格式。 下载就不多说了,...

weixin_45266691的博客 1万+

yolov5/yolov3训练自己的数据集(超详细,细的有点烦)

YOLO系列是非常优秀的物体检测框架,目前总共有V1-V5五个版本。本博客的目的在于教大家如何使用YOLOv5训练自己的数据,重点在于应用。有关原理我会在后面的博客中详细介绍。使用YOLOv5训练自己的数据往往要经过以下几个步骤: 一、环境配置 在环境配置方面,我安装的是tensorflow-gpu2.3.0、cuda10.1、cudnn7.6.4、torch1.9.0、anaconda我选择的是python3.8版本。有关详细的安装过程大家可以参考我的另一篇博客《Tensorflow-gpu2.1

qq_43078154的博客 1万+
上一篇: 在TX2上安装ch340/341USB驱动
下一篇: C++11 并发学习
just_sort
博客等级 码龄11年 2358粉丝 1667原创
评论 65
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值