yolov3源码darknet在vscode下调试
1. 安装配置:
- https://pjreddie.com/darknet/yolo/
- darknet文件夹下make命令搞定;
2. 配置vscode
打开安装好的vscode并安装扩展C/C++(ms-vscode.cpptools);在开始处打开文件夹打开darknet文件夹;
首先分析一下目录结构:
├── backup
├── cfg
├── darknet //编译的可执行文件
├── data
├── examples //重要:examples/darknet.c exmapels/detector.c等文件是主要执行文件的入口;调用src下的源码
├── ILSVRC2015_train_00755001.mp4
├── include
├── libdarknet.a
├── libdarknet.so
├── LICENSE
├── LICENSE.fuck
├── LICENSE.gen
├── LICENSE.gpl
├── LICENSE.meta
├── LICENSE.mit
├── LICENSE.v1
├── Makefile
├── obj
├── predictions.jpg
├── python
├── README.md
├── results
├── scripts
├── src // 重要代码;各个层的实现,src/demo实现摄像头实时检测
├── yolov3-tiny.weights
└── yolov3.weights
- vscode默认从系统和${workspaceFolder}(当前打开的文件夹,即darknet目录)下找头文件,所以我们要将工作区的include文件夹加入到配置文件中去。vscode下的C或C++项目的配置文件是c_cpp_properties.json,用快捷键ctrl+shift+p调出vscode命令搜索框,搜索Edit Configurations并点击就会跳转到c_cpp_properties.json文件的编辑界面,将include加入到includePath即可:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/include"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
3. 调试
要启动调试,vscode需要知道编译的可调式的可执行文件的目录,以及带进去的参数,这些内容需要配置到launch.json中。按F5启动调试,选择GDB环境,编辑launch.json如下所示:主要修改program和args,具体参数请根据自己具体的情况配置;
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/darknet",
"args": ["detector","test"," cfg/coco.data","cfg/yolov3.cfg","yolov3.weights","data/dog.jpg"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
- 调试主要进入darknet.c文件,选择进入相应的子函数:
int main(int argc, char **argv)
{
//test_resize("data/bad.jpg");
//test_box();
//test_convolutional_layer();
if(argc < ){
fprintf(stderr, "usage: %s <function>\n", argv[]);
return ;
}
gpu_index = find_int_arg(argc, argv, "-i", );
if(find_arg(argc, argv, "-nogpu")) {
gpu_index = -;
} #ifndef GPU
gpu_index = -;
#else
if(gpu_index >= ){
cuda_set_device(gpu_index);
}
#endif if ( == strcmp(argv[], "average")){
average(argc, argv);
} else if ( == strcmp(argv[], "yolo")){
run_yolo(argc, argv);
} else if ( == strcmp(argv[], "super")){
run_super(argc, argv);
} else if ( == strcmp(argv[], "lsd")){
run_lsd(argc, argv);
} else if ( == strcmp(argv[], "detector")){
run_detector(argc, argv);
} else if ( == strcmp(argv[], "detect")){
float thresh = find_float_arg(argc, argv, "-thresh", .);
char *filename = (argc > ) ? argv[]: ;
char *outfile = find_char_arg(argc, argv, "-out", );
int fullscreen = find_arg(argc, argv, "-fullscreen");
test_detector("cfg/coco.data", argv[], argv[], filename, thresh, ., outfile, fullscreen);
} else if ( == strcmp(argv[], "cifar")){
run_cifar(argc, argv);
} else if ( == strcmp(argv[], "go")){
run_go(argc, argv);
} else if ( == strcmp(argv[], "rnn")){
run_char_rnn(argc, argv);
} else if ( == strcmp(argv[], "coco")){
run_coco(argc, argv);
} else if ( == strcmp(argv[], "classify")){
predict_classifier("cfg/imagenet1k.data", argv[], argv[], argv[], );
} else if ( == strcmp(argv[], "classifier")){
run_classifier(argc, argv);
} else if ( == strcmp(argv[], "regressor")){
run_regressor(argc, argv);
} else if ( == strcmp(argv[], "isegmenter")){
run_isegmenter(argc, argv);
} else if ( == strcmp(argv[], "segmenter")){
run_segmenter(argc, argv);
} else if ( == strcmp(argv[], "art")){
run_art(argc, argv);
} else if ( == strcmp(argv[], "tag")){
run_tag(argc, argv);
} else if ( == strcmp(argv[], "3d")){
composite_3d(argv[], argv[], argv[], (argc > ) ? atof(argv[]) : );
} else if ( == strcmp(argv[], "test")){
test_resize(argv[]);
} else if ( == strcmp(argv[], "nightmare")){
run_nightmare(argc, argv);
} else if ( == strcmp(argv[], "rgbgr")){
rgbgr_net(argv[], argv[], argv[]);
} else if ( == strcmp(argv[], "reset")){
reset_normalize_net(argv[], argv[], argv[]);
} else if ( == strcmp(argv[], "denormalize")){
denormalize_net(argv[], argv[], argv[]);
} else if ( == strcmp(argv[], "statistics")){
statistics_net(argv[], argv[]);
} else if ( == strcmp(argv[], "normalize")){
normalize_net(argv[], argv[], argv[]);
} else if ( == strcmp(argv[], "rescale")){
rescale_net(argv[], argv[], argv[]);
} else if ( == strcmp(argv[], "ops")){
operations(argv[]);
} else if ( == strcmp(argv[], "speed")){
speed(argv[], (argc > && argv[]) ? atoi(argv[]) : );
} else if ( == strcmp(argv[], "oneoff")){
oneoff(argv[], argv[], argv[]);
} else if ( == strcmp(argv[], "oneoff2")){
oneoff2(argv[], argv[], argv[], atoi(argv[]));
} else if ( == strcmp(argv[], "print")){
print_weights(argv[], argv[], atoi(argv[]));
} else if ( == strcmp(argv[], "partial")){
partial(argv[], argv[], argv[], atoi(argv[]));
} else if ( == strcmp(argv[], "average")){
average(argc, argv);
} else if ( == strcmp(argv[], "visualize")){
visualize(argv[], (argc > ) ? argv[] : );
} else if ( == strcmp(argv[], "mkimg")){
mkimg(argv[], argv[], atoi(argv[]), atoi(argv[]), atoi(argv[]), argv[]);
} else if ( == strcmp(argv[], "imtest")){
test_resize(argv[]);
} else {
fprintf(stderr, "Not an option: %s\n", argv[]);
}
return ;
}
4. 测试Real-Time Detection on a Webcam
Running YOLO on test data isn't very interesting if you can't see the result. Instead of running it on a bunch of images let's run it on the input from a webcam!
To run this demo you will need to compile Darknet with CUDA and OpenCV. Then run the command:
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
YOLO will display the current FPS and predicted classes as well as the image with bounding boxes drawn on top of it.
You will need a webcam connected to the computer that OpenCV can connect to or it won't work. If you have multiple webcams connected and want to select which one to use you can pass the flag -c <num>
to pick (OpenCV uses webcam 0
by default).
You can also run it on a video file if OpenCV can read the video:
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file>
That's how we made the YouTube video above.
yolov3源码darknet在vscode下调试的更多相关文章
- vscode下调试caffe源码
caffe目录: ├── build -> .build_release // make生成目录,生成各种可执行bin文件,直接调用入口: ├── cmake ├── CMakeLists.tx ...
- Pytorch版本yolov3源码阅读
目录 Pytorch版本yolov3源码阅读 1. 阅读test.py 1.1 参数解读 1.2 data文件解析 1.3 cfg文件解析 1.4 根据cfg文件创建模块 1.5 YOLOLayer ...
- QTimer源码分析(以Windows下实现为例)
QTimer源码分析(以Windows下实现为例) 分类: Qt2011-04-13 21:32 5026人阅读 评论(0) 收藏 举报 windowstimerqtoptimizationcallb ...
- eos源码分析和应用(一)调试环境搭建
转载自 http://www.limerence2017.com/2018/09/02/eos1/#more eos基于区块链技术实现的开源引擎,开发人员可以基于该引擎开发DAPP(分布式应用).下面 ...
- Android之源码之模块编译和调试
Android之源码之模块编译调试 (一) 进行源码模块修改进行编译的调试 1.首先是从git或者svn上拉一套完整的工程下来,然后全编一下,一般这个时间比较长,大概会得2,3个小时左右, 2,编译成 ...
- JDK源码重新编译——支持eclipse调试JDK源码--转载
最近在研究jdk源码,发现debug时无法查看源码里的变量值. 因为sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar. 下面这六步是编译jdk的具体步骤: Step 1: ...
- Golang源码探索(一) 编译和调试源码(转)
GO可以说是近几年最热门的新兴语言之一了, 一般人看到分布式和大数据就会想到GO,这个系列的文章会通过研究golang的源代码来分析内部的实现原理,和CoreCLR不同的是, golang的源代码已经 ...
- vlc源码分析(七) 调试学习HLS协议
HTTP Live Streaming(HLS)是苹果公司提出来的流媒体传输协议.与RTP协议不同的是,HLS可以穿透某些允许HTTP协议通过的防火墙. 一.HLS播放模式 (1) 点播模式(Vide ...
- .NET框架源码解读之SSCLI的调试支持
阅读源码一个比较快的手段就是在调试器里阅读,这样可以在实际运行SSCLI的过程中,通过堆栈跟踪的方式查看完整的程序执行路径. 当在SSCLI环境里执行一个托管程序的时候,堆栈上通常有托管和非托管代码同 ...
随机推荐
- hdu3183 rmq求区间最值的下标
两个月前做的题,以后可以看看,是rmq关于求区间最值的下标 /* hdu3183 终点 给一个整数,可以删除m位,留下的数字形成一个新的整数 rmq 取n-m个数,使形成的数最小 */ #includ ...
- Number对象的常用属性和方法
方法 描述 isNan() 检查值是否为数字 toFied() 将特定数字四舍五入至小数位数(返回一个字符串) toPrecision() 按数字的位数四舍五入(返回一个字符串) toExponent ...
- SpringAOP学习第一天 @Pointcut注解
自从上班之后,就很少再看AOP相关的内容,几年时间里虽然也有一两次完整看过,一直没有机会用到,都忘记了.今天重温一下 TestNG测试类 package com.test.spring.aop.min ...
- Zookeeper笔记(三)部署与启动Zookeeper
下载zookeeper安装包 去Zookeeper官网,下载地址http://zookeeper.apache.org/releases.html,建议下载稳定版本,我下载的是zookeeper-3. ...
- 解析Linux下\r\n的问题(回车和换行)
http://www.jb51.net/article/37389.htm 深入解析Linux下\r\n的问题 http://www.ruanyifeng.com/blog/2006/04/post_ ...
- 'utf-8' codec can't decode byte 0xc8 in position 0
今天学习python中使用jieba库,遇到了错误:“UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0: i ...
- 为什么NULL指针也能访问成员函数?(但不能访问成员变量)
查看更加详细的解析请参考这篇文章:http://blog.51cto.com/9291927/2148695 看一个静态绑定的例子: 1 #include <iostream> 2 3 u ...
- maven环境的配置,如果jar包下载不下来,其他配置无错误的话,极有可能是网速的缘故
1首先下载apach maven 2配置maven环境变量 m2_home maven的源文件的路径 path变量后跟 %m2_home%\bin 3cmd 控制台运行mvn -version 查看 ...
- mysql DISTINCT的用法
http://justcoding.iteye.com/blog/2116837 SELECT count(*) FROM tablename:百万级别的数据也能很快返回结果,但是如果加了where条 ...
- 如何在MacBook的以太网端口上成功运行DHCP服务器?
我的目标是在我的MacBook以太网端口上安装一个以太网交换机,我将通过DHCP连接几个Raspberry Pi连接,每个都将运行VNC服务器进行远程访问,我希望我的互联网可以从我的MacBook的W ...