网页设计网站制作流程,页面设计网站素材,淮北网站三合一建设公司,东莞有哪家比较好的网站建设公司目录一、Windows环境下的YOLOv4目标检测1、环境配置环境准备#xff1a;Win10、CUDA10.1、cuDNN7.65、Visual Studio 2019、OpenCV 3.4(1)Visual Studio2019企业版安装(3)下载并安装CUDA10.1#xff0c;下载安装cuDNN7.65对于cudnn直接将其解开压缩包#xff0c;然后需要将b…目录一、Windows环境下的YOLOv4目标检测1、环境配置环境准备Win10、CUDA10.1、cuDNN7.65、Visual Studio 2019、OpenCV 3.4(1)Visual Studio2019企业版安装(3)下载并安装CUDA10.1下载安装cuDNN7.65对于cudnn直接将其解开压缩包然后需要将binincludelib中的文件复制粘贴到cuda的文件夹下比如C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1(4)CUDA安装测试(5)OpenCV安装下载2、克隆或下载YOLOv4在GitHub上直接下载并将解压后的darknet-master文件夹改名为darknet3、Visual Studio2019配置YOLOv4项目(1)复制opencv文件在文件夹C:\Program Files (x86)\opencv\build\x64\vc15\bin的两个dll文件opencv_ffffmpeg340_64.dll和opencv_world340.dll复制到D:\darknet\build\darknet\x64(2)Visual Studio 2019项目配置用visual studio2019打开darknet.sln文件然后需要重启电脑。打开darknet.sln项目对其进行配置项目 -属性注意应选release和x64(3)接下来几个步骤比较关键注意检查Windows SDK版本修改包含目录和库目录添加opencv3.4的包含目录和库目录(按照自己的opencv3.4的路径)包含目录C:\Program Files (x86)\opencv\build\includeC:\Program Files (x86)\opencv\build\include\opencvC:\Program Files (x86)\opencv\build\include\opencv2库目录C:\Program Files (x86)\opencv\build\x64\xc14\lib附加依赖项添加附加依赖项(按照自己的opencv3.4的路径)C:\Program Files (x86)\opencv\build\x64\vc14\lib\opencv_world340.lib4、Visual Studio2019编译YOLOv4项目点击“重新生成解决方案”。可能有下述错误严重性 代码 说明 项目 文件 行 禁止显示状态 错误 MSB4019 找不到导入的项目“C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations\CUDA 10.0.props”。请确认 Import 声明“C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations\CUDA 10.0.props”中的表达式正确且文件位于磁盘上。 darknet D:\darknet\build\darknet\darknet.vcxproj解决方法将D:\darknet\build\darknet\darknet.vcxproj中版本号进行修改如下仍然有错误时的解决方法将NVIDIA CUDA的安装程序(.exe文件)数据解压到一个指定文件夹中(最好是放在一个文件夹解压后会出现很多文件这样方便查找)D:\Temp\CUDA\VisualStudioIntegration\extras\visual_studio_integration\MSBuildExtensions下的文件直接拷贝到“C:\Program Files (x86)\Microsoft VisualStudio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations”文件夹中。再次点击重新生决方案这时成解应该编译成功并产生可执行文件D:\darknet\build\darknet\x64\darknet.exe5、YOLOv4权重文件下载yolov4.weight下载拷贝权重文件到D:\darknet\build\darknet\x646、YOLOv4目标检测测试(1)测试图片在D:\darknet\build\darknet\x64\ 目录下执行darknet.exe detector test cfg\coco.data cfg\yolov4.cfg yolov4.weights data\dog.jpg结果如下(2)测试视频在D:\darknet\build\darknet\x64\ 目录下执行darknet.exe detector demo cfg\coco.data cfg\yolov4.cfg yolov4.weights data\driving.mp47、使用YOLOv4训练自己的数据集(1)数据集准备使用PASCAL VOC数据集的目录结构(建立文件夹层次为 D:\darknet\build\darknet\x64\VOCdevkit\ VOC2007):JPEGImages放所有的训练和测试图片Annotations放所有的xml标记文件(2)训练集和测试集生成在D:\darknet\build\darknet\x64\目录下执行python genfiles.py在VOCdevkit \ VOC2007目录下可以看到生成了文件夹labels 同时在darknet下生成了两个文件2007_train.txt和2007_test.txt。2007_train.txt和2007_test.txt分别给出了训练图片文件和测试图片文件的列表含有每个图片的路径和文件名。另外在VOCdevkit \ VOC2007\ImageSets\Main目录下生产了两个文件test.txt和train.txt分别给出了训练图片文件和测试图片文件的列表但只含有每个图片的文件名(不含路径和扩展名)。labels下的文件是images文件夹下每一个图像的yolo格式的标注文件这是由annotations的xml标注文件转换来的。最终训练只需要2007_train.txt2007_test.txtlabels下的标注文件和 VOCdevkit\VOC2007\JPEGImages下的图像文件。生成YOLO格式的txt标记文件内容如下genfiles.py文件如下import xml.etree.ElementTree as ETimport pickleimport osfrom os import listdir, getcwdfrom os.path import joinimport randomclasses[aeroplane, bicycle, bird, boat, bottle, bus, car, cat, chair, cow, diningtable, dog, horse, motorbike, person, pottedplant, sheep, sofa, train, tvmonitor]def clear_hidden_files(path):dir_list os.listdir(path)for i in dir_list:abspath os.path.join(os.path.abspath(path), i)if os.path.isfile(abspath):if i.startswith(._):os.remove(abspath)else:clear_hidden_files(abspath)def convert(size, box):dw 1./size[0]dh 1./size[1]x (box[0] box[1])/2.0y (box[2] box[3])/2.0w box[1] - box[0]h box[3] - box[2]x x*dww w*dwy y*dhh h*dhreturn (x,y,w,h)def convert_annotation(image_id):in_file open(VOCdevkit\VOC2007\Annotations\%s.xml %image_id)out_file open(VOCdevkit\VOC2007\labels\%s.txt %image_id, w)treeET.parse(in_file)root tree.getroot()size root.find(size)w int(size.find(width).text)h int(size.find(height).text)for obj in root.iter(object):difficult obj.find(difficult).textcls obj.find(name).textif cls not in classes or int(difficult) 1:continuecls_id classes.index(cls)xmlbox obj.find(bndbox)b (float(xmlbox.find(xmin).text), float(xmlbox.find(xmax).text), float(xmlbox.find(ymin).text), float(xmlbox.find(ymax).text))bb convert((w,h), b)out_file.write(str(cls_id) .join([str(a) for a in bb]) \n)in_file.close()out_file.close()wd os.getcwd()wd os.getcwd()work_sapce_dir os.path.join(wd, VOCdevkit\\)if not os.path.isdir(work_sapce_dir):os.mkdir(work_sapce_dir)work_sapce_dir os.path.join(work_sapce_dir, VOC2007\\)if not os.path.isdir(work_sapce_dir):os.mkdir(work_sapce_dir)annotation_dir os.path.join(work_sapce_dir, Annotations\\)if not os.path.isdir(annotation_dir):os.mkdir(annotation_dir)clear_hidden_files(annotation_dir)image_dir os.path.join(work_sapce_dir, JPEGImages\\)if not os.path.isdir(image_dir):os.mkdir(image_dir)clear_hidden_files(image_dir)VOC_file_dir os.path.join(work_sapce_dir, ImageSets\\)if not os.path.isdir(VOC_file_dir):os.mkdir(VOC_file_dir)VOC_file_dir os.path.join(VOC_file_dir, Main\\)if not os.path.isdir(VOC_file_dir):os.mkdir(VOC_file_dir)train_file open(os.path.join(wd, 2007_train.txt), w)test_file open(os.path.join(wd, 2007_test.txt), w)train_file.close()test_file.close()VOC_train_file open(os.path.join(work_sapce_dir, ImageSets\\Main\\train.txt), w)VOC_test_file open(os.path.join(work_sapce_dir, ImageSets\\Main\\test.txt), w)VOC_train_file.close()VOC_test_file.close()if not os.path.exists(VOCdevkit\\VOC2007\\labels):os.makedirs(VOCdevkit\\VOC2007\\labels)train_file open(os.path.join(wd, 2007_train.txt), a)test_file open(os.path.join(wd, 2007_test.txt), a)VOC_train_file open(os.path.join(work_sapce_dir, ImageSets\\Main\\train.txt), a)VOC_test_file open(os.path.join(work_sapce_dir, ImageSets\\Main\\test.txt), a)list os.listdir(image_dir) # list image filesprobo random.randint(1, 100)print(Probobility: %d % probo)for i in range(0,len(list)):path os.path.join(image_dir,list[i])if os.path.isfile(path):image_path image_dir list[i]voc_path list[i](nameWithoutExtention, extention) os.path.splitext(os.path.basename(image_path))(voc_nameWithoutExtention, voc_extention) os.path.splitext(os.path.basename(voc_path))annotation_name nameWithoutExtention .xmlannotation_path os.path.join(annotation_dir, annotation_name)probo random.randint(1, 100)print(Probobility: %d % probo)if(probo 75):if os.path.exists(annotation_path):train_file.write(image_path \n)VOC_train_file.write(voc_nameWithoutExtention \n)convert_annotation(nameWithoutExtention)else:if os.path.exists(annotation_path):test_file.write(image_path \n)VOC_test_file.write(voc_nameWithoutExtention \n)convert_annotation(nameWithoutExtention)train_file.close()test_file.close()VOC_train_file.close()VOC_test_file.close()(3)修改配置文件新建data\voc.names文件该文件内容存放数据标签名可以复制data\voc.names再根据自己情况的修改(修改成自己的分类)可以重新命名等。新建 data\voc.data文件可以复制data\voc.data再根据自己情况的修改可以重新命等。classes N N为自己的分类数量train 训练集完整路径列表valid 测试集完整路径列表names data/voc.names 类别文件backup backup/ 训练结果保存在darknet/backup/目录下。新建cfg\yolov4-voc.cfg可以复制cfg\yolov4-custom.cfg再根据自己情况的修改可以重新命名等。yolov4-voc.cfg文件参数说明batch: 每一次迭代送到网络的图片数量也叫批数量。增大这个可以让网络在较少的迭代次数内完成一个epoch。在固定最大迭代次数的前提下增加batch会延长训练时间但会更好的寻找到梯度下降的方向。如果你显存够大可以适当增大这个值来提高内存利用率。这个值是需要大家不断尝试选取的过小的话会让训练不够收敛过大会陷入局部最优。subdivision这个参数它会让你的每一个batch不是一下子都丢到网络里。而是分成subdivision对应数字的份数一份一份的跑完后在一起打包算作完成一次iteration。这样会降低对显存的占用情况。如果设置这个参数为1的话就是一次性把所有batch的图片都丢到网络里如果为2的话就是一次丢一半。(subdivisions8 ,如果显存溢出改为16,32或64)angle图片旋转角度这个用来增强训练效果的。从本质上来说就是通过旋转图片来变相的增加训练样本集。saturationexposurehue饱和度曝光度色调这些都是为了增强训练效果用的。learning_rate学习率训练发散的话可以降低学习率。学习遇到瓶颈loss不变的话也减低学习率。max_batches 最大迭代次数。policy学习策略一般都是step这种步进式。stepscales这两个是组合一起的举个例子learn_rate: 0.001, step:100,25000,35000 scales: 10, .1, .1 这组数据的意思就是在0-100次iteration期间learning rate为原始0.001在100-25000次iteration期间learning rate为原始的10倍0.01在25000-35000次iteration期间learning rate为当前值的0.1倍就是0.001 在35000到最大iteration期间使用learning rate为当前值的0.1倍就是0.0001。随着iteration增加降低学习率可以是模型更有效的学习也就是更好的降低train loss。在cfg\yolov4-voc.cfg文件中三个yolo层和各自前面的convolutional层的参数需要修改filtersnum╳(classes5)5的意义是4个坐标加一个置信率num表示YOLO中每个cell预测的框的个数yolo层中的classes为类别YOLOV3中为3。此 处 的 值 要 根 据 自 己 的 数 据 集 进 行 更 改 例 如 识 别 4 个 类 别 则 filters3 ╳(45)27。(4)使用YOLOv4进行训练下载权重文件yolov4.conv.137放置在D:\darknet\build\darknet\x64目录下这里的训练使用迁移学习所以下载的yolov4在coco数据集上的预训练权重文件(不含全连接层)训练网络(如需要显示训练过程的map变化在命令末尾加-map)darknet.exe detector train data\voc.data cfg\yolov4.cfg yolov4.conv.137 -map网络训练建议batch16subdivisions8 (如果显存溢出改为1664)把max_batches设置为 (classes*2000)但最小为4000。例如如果训练3个目标类别max_batches6000把steps改为max_batches的80% and 90%例如steps4800, 5400。为增加网络分辨率可增大height和width的值但必须是32的倍数 (height608, width608 or 32的整数倍) 。这有助于提高检测精度。(5)mAP性能统计统计 mAPIoU0.50darknet.exe detector map data\voc.data cfg\yolov4-test.cfg backup\yolov4.weights统计 mAPIoU0.75:darknet.exe detector map data\voc.data cfg\yolov4-test.cfg backup\yolov4.weights -iou_thresh 0.758、Anchor Box先验框聚类分析与修改使用k-means聚类获得自己数据集的先验框大小darknet.exe detector calc_anchors data\voc.data -num_of_clusters 9 -width 608 -height 608D:\darknet\build\darknet\x64目录下生成anchors.txt文件修改cfg文件中的先验框大小重新训练和测试二、Linux环境下的YOLOv4目标检测1、环境配置环境准备Ubuntu16.04、CUDA10.1、cuDNN 7.65、OpenCV 3.4opencv安装可以基于源码可以使用命令安装apt-get install libopencv-dev2、YOLOv4下载和编译cd darknetmake #直接make则使用的是darknet原始配置(使用CPU)如果使用GPU和OpenCV则将Makefile文件中的对应项改为1然后再执行make命令最后在终端输入./darknet出现以下输出则说明安装成功usage: ./darknet 3、测试图片测试单张图片./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg测试多张图片(根据提示输入图片路径)./darknet detect cfg/yolov4.cfg yolov4.weights