添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
有情有义的蟠桃  ·  base1. ...·  2 年前    · 
wget https://pjreddie.com/media/files/yolov3.weights

或者用百度云,给个地址:https://pan.baidu.com/s/1kPxCb1baKOtkoKju-aJWeA 提取码:mv2w

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

2. yolov3训练自己的数据集

1)普通的训练

  • 下载与训练模型
wget https://pjreddie.com/media/files/darknet53.conv.74

或者用百度云,给个地址:https://pan.baidu.com/s/1KvSmjrs2fMBNMvGtpwEb8A 提取码:8vtz

  • 准备数据集

前提:数据集的标注方式与voc一样是xml文件

1.下载voc_label.py

wget https://pjreddie.com/media/files/voc_label.py

2.修改voc_label.py文件:

sets=[ ('2007', 'train'), ('2007', 'val'), ('2007', 'test')]
#删除2012
classes = ["car","person","bicycle"]
#改自己的类别

3.修改./cfg/voc.data文件,刚刚我们得到生成文件:2007_test.txt,2007_train.txt,2007_val.txt,train.txt,train.all.txt;

classes= 3
train  = /home/ubuntu247/liliang/algorithms/darknet/VOCdevkit/VOC2007/train.txt
valid  = /home/ubuntu247/liliang/algorithms/darknet/VOCdevkit/VOC2007/2007_test.txt
names = data/voc.names
backup = backup

4.修改./cfg/yolov3-voc.cfg(4处):

第一处:修改batch和subdivisions

[net]
# Testing 测试的时候把这个参数打开
#batch=1
#subdivisions=1
# Training 现在是训练的时候,打开这个部分
batch=64
subdivisions=16

第2-4处:修改类别:先查找文件中“yolo”出现的3处

举其中一处为例,剩下两处都一样
[convolutional]
size=1
stride=1
pad=1
filters=24 #改这里 3*(类别数+5) 我的类别是3类,所以是24
activation=linear
[yolo]
mask = 6,7,8
anchors =   7, 15, 16, 18, 22, 32, 9, 40, 20, 71, 37, 39, 52, 65, 70, 110, 105, 208
classes=3#这里类别数
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0

5.开始训练:

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

2)将anchor换成自己数据集匹配的值:

参考:https://blog.csdn.net/cgt19910923/article/details/82154401

  • clone anchor生成工具:
git clone https://github.com/lars76/kmeans-anchor-boxes
  • 修改一下example.py代码:
import glob
import xml.etree.ElementTree as ET
import numpy as np
from kmeans import kmeans, avg_iou
ANNOTATIONS_PATH = "/home/ubuntu247/liliang/Data/INF_20191030/Annotations1107/"
CLUSTERS = 9
def load_dataset(path):
	dataset = []
	for xml_file in glob.glob("{}/*xml".format(path)):
		tree = ET.parse(xml_file)
		height = float(tree.findtext("./size/height"))
		width = float(tree.findtext("./size/width"))
		for obj in tree.iter("object"):
			xmin = float(obj.findtext("bndbox/xmin")) / width
			ymin = float(obj.findtext("bndbox/ymin")) / height
			xmax = float(obj.findtext("bndbox/xmax")) / width
			ymax = float(obj.findtext("bndbox/ymax")) / height
			dataset.append([xmax - xmin, ymax - ymin])
	return np.array(dataset)
if __name__ == '__main__':
    data = load_dataset(ANNOTATIONS_PATH)
    out = kmeans(data, k=CLUSTERS)
    print("Accuracy: {:.2f}%".format(avg_iou(data, out) * 100))
    print("Boxes:\n {}".format(out))
    ratios = np.around(out[:, 0] / out[:, 1], decimals=2).tolist()
    print("Ratios:\n {}".format(sorted(ratios)))
  • 运行代码:
sudo python example.py
  • 将boxes乘以416(图片resize后的大小),会得到9个box,再按照大小排列以后得到anchors
anchors =  7, 15, 16, 18, 22, 32, 9, 40, 20, 71, 37, 39, 52, 65, 70, 110, 105, 208
  • 更改./yolov3-voc.cfg文件:【之前提到的查找yolo存在的位置,更改3处】,每一处的anchors都替换成自己的值

以其中一处为例子,剩余两处一样的格式
[yolo]
mask = 0,1,2
anchors =   7, 15, 16, 18, 22, 32, 9, 40, 20, 71, 37, 39, 52, 65, 70, 110, 105, 208
classes=3
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0
  • 重新开始训练:
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

3. yolov3的caffe使用

1)转成caffe模型

前提:刚刚训练得到了相应的weights,准备好yolo需要的layer--upsample_layer.cpp,upsample_layer.cu,upsample_layer.h

参考:https://blog.csdn.net/watermelon1123/article/details/82083522

将新的layer添加进去,完成caffe的准备工作。然后还要安装好pytorch。

  • clone 转换工具:
git clone https://github.com/marvis/pytorch-caffe-darknet-convert
  • 开始转换:最后会得到 yolov3.prototxt yolov3.caffemodel
python2.7 darknet2caffe.py cfg/yolov3-voc.cfg yolov3-voc.weights yolov3.prototxt yolov3.caffemodel
将yolov3-voc.weights放在文件夹下
然后将yolov3-voc.cfg放在./cfg文件夹下面
yolov3.prototxt yolov3.caffemodel是要生成的caffe模型和pro文件命名

2)使用caffe模型:

  • clone使用工具:
git clone https://github.com/ChenYingpeng/caffe-yolov3
cd caffe-yolov3
  • 将生成的caffemodel和prototxt放在./caffemodel和./prototxt文件下【没有就建一个】
  • 修改cmakelist.txt
"""全部都要改成自己的caffe路径"""
# build C/C++ interface
include_directories(${PROJECT_INCLUDE_DIR} ${GIE_PATH}/include)
include_directories(${PROJECT_INCLUDE_DIR} 
	/home/ubuntu247/liliang/caffe-ssd/include 
	/home/ubuntu247/liliang/caffe-ssd/build/include 
file(GLOB inferenceSources *.cpp *.cu )
file(GLOB inferenceIncludes *.h )
cuda_add_library(yolov3-plugin SHARED ${inferenceSources})
target_link_libraries(yolov3-plugin 
	/home/ubuntu247/liliang/caffe-ssd/build/lib/libcaffe.so  
	/usr/lib/x86_64-linux-gnu/libglog.so  
	/usr/lib/x86_64-linux-gnu/libgflags.so.2
    	/usr/lib/x86_64-linux-gnu/libboost_system.so  
	/usr/lib/x86_64-linux-gnu/libGLEW.so.1.13  
  • 如果你在训练中使用的是自己的anchors值,要修改anchors的值(yolo.cpp中),再进行编译;还有yolo.h中的classes数
* Company: Synthesis * Author: Chen * Date: 2018/06/04 #include "yolo_layer.h" #include "blas.h" #include "cuda.h" #include "activations.h" #include "box.h" #include <stdio.h> #include <math.h> //yolov3 //float biases[18] = {10,13,16,30,33,23,30,61,62,45,59,119,116,90,156,198,373,326}; float biases[18] = {7, 15, 16, 18, 22, 32, 9, 40, 20, 71, 37, 39, 52, 65, 70, 110, 105, 208}; * Company: Synthesis * Author: Chen * Date: 2018/06/04 #ifndef __YOLO_LAYER_H_ #define __YOLO_LAYER_H_ #include <caffe/caffe.hpp> #include <string> #include <vector> using namespace caffe; const int classes = 3; const float thresh = 0.5; const float hier_thresh = 0.5; const float nms_thresh = 0.5; const int num_bboxes = 3; const int relative = 1;
mkdir build
cd build
cmake ..
make -j12
 ./x86_64/bin/detectnet ../prototxt/yolov3.prototxt ../caffemodel/yolov3.caffemodel ../images/dog.jpg

Gaussian yolov3使用

1).训练自己数据集

整体与yolov3的步骤一样,数据准备与yolov3一致。准备好数据以后:

  • 将yolov3中的./cfg/voc.data,./data/voc.names,./cfg/yolov3-voc.cfg,分别复制到对应文件夹下面
  • 对./cfg/yolov3-voc.cfg进行修改,将它重命名为./cfg/gaussian-yolov3-voc.cfg,查找yolo的位置,修改内容【3处】
还是以其中一处为例
[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky
[convolutional]
size=1
stride=1
pad=1
filters=36 # 3*(类别数+5+4) 我的类别是3类,所以是36
activation=linear
[Gaussian_yolo]
mask = 6,7,8
anchors = 7, 15, 16, 18, 22, 32, 9, 40, 20, 71, 37, 39, 52, 65, 70, 110, 105, 208
classes=3
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0
  • 开始训练:
./darknet detector train cfg/voc.data cfg/gaussian-yolov3-voc.cfg darknet53.conv.74

2)caffe使用:

  • 转caffe的环境刚刚在yolov3中已经配置好了,所以一样的转模型就可以
python2.7 darknet2caffe.py cfg/gaussian-yolov3-voc.cfg gaussian-yolov3-voc.weights gaussian-yolov3.prototxt gaussian-yolov3.caffemodel
  • 将caffe-yolov3中的yolo.cpp和yolo.h替换成gaussian_yolo_layer.h和gaussian_yolo_layer.cpp,重新编译
cd caffe-yolov3
rm -rf build
mkdir build
cd build
cmake ..
make -j12
  • 一样的放好模型以后,开始检测
 ./x86_64/bin/detectnet ../prototxt/gaussian-yolov3.prototxt ../caffemodel/gaussian-yolov3.caffemodel ../images/dog.jpg

1.检测一个文件夹下面的多张图片(有txt标注),并计算map,修改caffe-yolov3中./detectnet/detectnet.cpp文件就可以了。

2.我自己修改的一些代码存放地址:

https://github.com/hualuluu/gaussian-yolov3-detection-caffe

【代码修改参考:https://github.com/ChenYingpeng/caffe-yolov3 yolo.cpp和yolo.h文件还有yolov3的源码】

1. 前言 最近在做Hi3559A的相关项目,其中需要使用yolov3模型,然而网上基本找不到现成的caffe-yolov3模型,只能够自行换。另外网上有一些相关的博客,但是其中存在一些问题,特此记录。 本文环境所配环境: ubun16.0.4+cuda8.0+cudnn6.0+opencv3.4.3+torch0.40+python3.5 ps:opencv必须用源码编译,不能pip install opencv-python; 最好退出anaconda环境,连base都退出,笔者在编译caffe时 非常感谢大家的提问,最近很忙几乎没有回复,但是我把问题都总结了一下,我都更新到了github上,有需求的可以直接上github,还是老地址,可能回复不是很及时,还请见谅! 补充说... 在安装好caffe后进行caffe复现yolov3时遇到的问题解决方案,跑代码来自 https://github.com/ChenYingpeng/caffe-yolov3 将代码中的所有文件添加进VS源代码对应位置中,在运行过程中遇到的问题,但是该方案无法实现进行YOLO换,仅仅能够实现调用caffe的C++接口,因为caffe中不存在YOLO层,笔者考虑将上述网页中的YOLO层添加进caff... 1 CV中目标检测进展开篇先来看看最近目标检测领域的进展:hoya012/deep_learning_object_detection这个开源项目实时更新 + 罗列了目标检测的一些top论文。该项目集合了从 2013 年 11 月提出的 R-CNN 至在近期举办的 ECCV2018 上发表的 RFBNet 等四十多篇关于目标检测的论文,相当全面。一般目标检测问题本身的定义为:给定任意一张... 1. 模型训练环境:1) 系统:Ubuntu16.042) 显卡:TITAN XP3)CUDA:9.14) CUDNN:7.55) 运行内存32G6)pycharm7)anaconda2. 资源的下载:基于darknet框架在Linux系统下训练YOLOV3数据集,下载darknet文件,链接:https://download.csdn.net/download/qq_4190... 文章目录测试预训练模型install添加upsample层代码test结果待续。 最近由于要在工程上实现yolov3-tiny的caffe模型的训练和测试,记录踩的坑和解决的办法。 测试预训练模型 基于这篇文章:基于caffe框架复现yolov3目标检测. github在这里. 测试了预训练模型。由于要做的是yolov3-tiny的caffe换,只测试了yolov3-tiny上的结果。 其中出现... 本课程内容分为5个部分: 1.海思35xx SDK资料梳理以及SVP相关文档详细介绍 2.将darknet框架训练出来的yolov3模型换成caffemodel 3.RuyiStudio工具的安装及其使用4.Windows上仿真代码的运行以及代码分析5.开发板上的sample代码的运行以及代码分析 本课程特色: 1. 不是照本宣科,着力把背后的原理讲清楚。 2. 实用性很强。 目标检测算法是计算机视觉基本任务之一,而YOLOv3则仍然是目前工业界中应用非常广泛的算法模型,从速度、准确度以及易用性的trade-off来看,它目前仍然是最好的算法模型之一。