YOLO的使用

Yolo 比较好的两个版本:

官方版本:https://github.com/pjreddie/darknet

版本2  :https://github.com/AlexeyAB/darknet

 

版本2中,在window下效果也是非常好的,这个我也尝试过。

 

推荐使用版本2,速度比官方版本快,同时方便在后续处理。在官方版本中,读进的图片都是使用Image这个结构体来保存数据,而版本2使用的是OpenCV中IplImage,方便使用OpenCV自身带有的画框函数、文字标识以及对图片视频文件的保存。

 

Yolo的使用:

   Yolo虽有有很多版本(yolov1,yolov2,yolov3和各个版本下的tiny版本),这些版本主要在网络设计上有不同,只会影响最终的识别速度和准确率。在使用yolo的时候,只关注输入和输出,以及可能对网咯的输出进行处理。

  1. 模型的训练:参照官网的介绍

  https://pjreddie.com/darknet/yolo/

  这里需要根据待识别数据的类别对检测的配置文件进行修改

  需要修改的文件 :

  darknet/cfg/coco.data (以coco为例,需修改训练和测试数据集路径)

darknet/cfg/coco.names(修改类别的名字)

Darknet/cfg/yolov3.cfg(修改输出的类别,输出的数据维度大小)

  1. yolo的输出:

Yolo对视频处理主要涉及到的源码文件为:

  darknet/src/demo.c和darknet/src/image.c这两个文件

 

  demo.c这个文件首先通过cap = cvCaptureFromFile(filename)(文件中290行),这个读取摄像获取到到的数据,然后通过两个线程对图片中物体进行识别,

void *detect_in_thread(void *ptr)

 

 

{

 

running = 1;

 

float nms = .4;

 

 

 

layer l = net->layers[net->n-1];

 

float *X = buff_letter[(buff_index+2)%3].data;

 

network_predict(net, X);

 

 

 

/*

 

if(l.type == DETECTION){

 

get_detection_boxes(l, 1, 1, demo_thresh, probs, boxes, 0);

 

} else */

 

remember_network(net);

 

detection *dets = 0;

 

int nboxes = 0;

 

dets = avg_predictions(net, &nboxes);

 

 

 

 

 

/*

 

int i,j;

 

box zero = {0};

 

int classes = l.classes;

 

for(i = 0; i < demo_detections; ++i){

 

avg[i].objectness = 0;

 

avg[i].bbox = zero;

 

memset(avg[i].prob, 0, classes*sizeof(float));

 

for(j = 0; j < demo_frame; ++j){

 

axpy_cpu(classes, 1./demo_frame, dets[j][i].prob, 1, avg[i].prob, 1);

 

avg[i].objectness += dets[j][i].objectness * 1./demo_frame;

 

avg[i].bbox.x += dets[j][i].bbox.x * 1./demo_frame;

 

avg[i].bbox.y += dets[j][i].bbox.y * 1./demo_frame;

 

avg[i].bbox.w += dets[j][i].bbox.w * 1./demo_frame;

 

avg[i].bbox.h += dets[j][i].bbox.h * 1./demo_frame;

 

}

 

//copy_cpu(classes, dets[0][i].prob, 1, avg[i].prob, 1);

 

//avg[i].objectness = dets[0][i].objectness;

 

}

 

*/

 

 

 

if (nms > 0) do_nms_obj(dets, nboxes, l.classes, nms);

 

 

 

printf("\033[2J");

 

printf("\033[1;1H");

 

printf("\nFPS:%.1f\n",fps);//1秒处理多少张图片

 

printf("Objects:\n\n");

 

image display = buff[(buff_index+2) % 3];

 

draw_detections(display, dets, nboxes, demo_thresh, demo_names, demo_alphabet, demo_classes);

 

free_detections(dets, nboxes);

 

 

 

demo_index = (demo_index + 1)%demo_frame;

 

running = 0;

 

return 0;

 

}

 

   这部分中最重要的就是draw_detections(display, dets, nboxes, demo_thresh, demo_names, demo_alphabet, demo_classes);这个函数在image.c中,labelstr代表的检测到物体的标签;

int right = (b.x+b.w/2.)*im.w;

int top = (b.y-b.h/2.)*im.h;

int bot = (b.y+b.h/2.)*im.h;

int left = (b.x-b.w/2.)*im.w;

Leftrighttopbot代表检测到物体的坐标

根据自己的需求,自定义draw_detections这个函数,实现一些其他的检测任务。

### YOLO 使用教程详细指南 #### 1. TensorFlow 实现的 YOLO (yolo_tensorflow) YOLO 的 TensorFlow 版本提供了完整的训练和测试流程[^1]。该项目支持多种版本的 YOLO 模型,并提供详细的文档帮助开发者快速上手。 以下是基于 `yolo_tensorflow` 的基本使用步骤: - **环境准备**: 安装必要的依赖项,包括 TensorFlow 和其他 Python 库。 - **数据集处理**: 将数据集转换为适合 YOLO 训练的格式(通常为 Pascal VOC 或 COCO 格式)。 - **模型训练**: 调整配置文件中的超参数并运行脚本来启动训练过程。 代码示例: ```python from yolo_tensorflow import train_yolo_model train_yolo_model(config_path="config.json", data_dir="./data/") ``` --- #### 2. YOLO 系列模型改进指南 (yolov5-TSCODE) 此部分介绍了如何通过 Task-Specific Context Decoupling 改进 YOLOv5 性能[^2]。为了实现这一功能,需先安装额外的库 `einops` 并按照官方视频教程操作。 具体步骤如下: - **安装依赖**: 执行命令 `pip install -i https://pypi.tuna.tsinghua.edu.cn/simple einops` 来安装所需库。 - **修改网络架构**: 在 YOLOv5 中集成 TSCODE 层以增强上下文解耦能力。 - **验证效果**: 对新模型进行评估并与原始模型对比性能差异。 代码片段展示如何加载预定义模型: ```python import torch from models.experimental import attempt_load weights = &#39;yolov5s.pt&#39; device = torch.device(&#39;cuda&#39; if torch.cuda.is_available() else &#39;cpu&#39;) model = attempt_load(weights, map_location=device) print(f"Model loaded successfully on {device}.") ``` --- #### 3. Mamba-YOLO 开源项目教程 Mamba-YOLO 是一个高度可扩展的目标检测框架,其核心组件位于 `ultralytics/` 文件夹下[^3]。以下是对该工具链的关键特性及其使用的概述: ##### a) 目录结构解析 | 文件名 | 描述 | |--------|------| | asserts/ | 存储静态资源文件,如图片或权重矩阵。 | | selective_scan/ | 提供选择性扫描算法的支持模块。 | | tests/ | 测试用例集合,确保各子系统的稳定性。 | | ultralytics/ | 主要逻辑所在位置,封装了大部分目标检测函数。 | ##### b) 启动文件详解 (`mbyolo_train.py`) 这是整个项目的入口点,负责初始化训练环境以及调用相关 API 进行迭代优化。 典型工作流描述如下: 1. 加载预训练权重; 2. 设置自定义损失函数与度量标准; 3. 循环执行前向传播、反向传播直至收敛条件满足为止; 样例程序演示如何指定输入路径及输出日志保存地点: ```python if __name__ == "__main__": from mbyolo_train import start_training config_file = "./configs/default.yaml" output_dir = "./results/" start_training(config=config_file, save_to=output_dir) ``` --- ### 结论 上述三个部分分别针对不同场景下的 YOLO 使用方法进行了阐述。无论是初学者还是高级工程师都能从中找到适合自己需求的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值