甘肃建设厅官方网站,seo网站诊断报告,西安优化官网厂家,吃什么补肾最快最好源码来自作者Bubbliiiing#xff0c;我对参考链接的代码略有修改#xff0c;网盘地址
链接#xff1a;百度网盘 请输入提取码 提取码#xff1a;dvb1
目录
1 参考链接
2 环境
3 数据集准备
3.1 VOCdevkit/VOC2007
3.2 model_data/voc_classes.txt
3.3 voc_an…源码来自作者Bubbliiiing我对参考链接的代码略有修改网盘地址
链接百度网盘 请输入提取码 提取码dvb1
目录
1 参考链接
2 环境
3 数据集准备
3.1 VOCdevkit/VOC2007
3.2 model_data/voc_classes.txt
3.3 voc_annotation.py
4 训练 train.py
5 训练结果
6 预测
7 其他
7.1 多线程训练
7.2 二次训练
7.3 学习速率 1 参考链接
源码地址 GitHub - bubbliiiing/yolo3-tf2: 这是一个yolo3-tf2的源码可以用于训练自己的模型。
博客地址 睿智的目标检测51——Tensorflow2搭建yolo3目标检测平台_Bubbliiiing的博客-CSDN博客_yolo3
视频地址 睿智的目标检测51——Tensorflow2搭建yolo3目标检测平台_Bubbliiiing的博客-CSDN博客_yolo3
2 环境
系统 Linux显卡 NVIDIA GeForce RTX 3060CUDA 11.1CUDNN 无 (cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2与cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2都查不到)
python版本3.6环境如下 我直接用这个whl装的tensorflow_gpu-2.6.0-cp36-cp36m-manylinux2010_x86_64.whl
装完之后将keras降到了2.6.0
训练时默认使用GPU资源进行训练
项目放在home下项目命名为tensorflow_object_detection 3 数据集准备
数据集为877张图像4分类其中speedlimit 705个框crosswalk 174个框traffclight 154个框stop 88个框 3.1 VOCdevkit/VOC2007
在项目路径下的VOCdevkit/VOC2007中将Annotations放入标注的XML文件JPEGImages放入标注的图片文件(必须是jpg格式的图像其他格式的不行) 进入ImageSets/Main删除其中的所有内容 删除项目路径下的 2007_train.txt与2007_val.txt 3.2 model_data/voc_classes.txt
打开项目路径下model_data中的voc_classes.txt 将里面的内容改为自己要训练的类别顺序无所谓 3.3 voc_annotation.py
不需要改动代码直接运行 voc_annotation.py 运行后会生成这些文件 4 训练 train.py
根据需要修改这里的epoch 然后直接运行就好了一些warning可以无视掉 在训练开始的时候会给一些提示可根据这里的提示修改上面的epoch比如我现在就将epoch设置为569 训练会持续很长事件
5 训练结果
训练结束后会在logs中出现一些文件我们预测的时候使用 best_epoch_weights.h5 就可以了 我们可以在训练过程中或者在训练好的loss文件中查看loss情况 在epoch_loss.txt中可以查看具体的数值
看下面这两个哪个都行6 预测
修改yolo.py这里的模型信息 我简单改了一下源代码中yolo.py的detect_image方法目的是拿到预测的信息而不是直接得到图像
文件名改为了Suyu_yolo.py下面的predict.py中会进行调用然后改了一下源码中的predict.py(文件名我改为了Suyu_predict.py)
import time
import cv2
import numpy as np
import tensorflow as tf
from PIL import Image
from Suyu_yolo import YOLO
from utils.utils import get_classesgpus tf.config.experimental.list_physical_devices(device_typeGPU)
for gpu in gpus:tf.config.experimental.set_memory_growth(gpu, True)yolo YOLO()class_names,num_classes get_classes(model_data/voc_classes.txt)
img ./img/road344.jpg
image Image.open(img)
out_boxes, out_scores, out_classes yolo.detect_image(image)result_img cv2.imread(img)
for i, c in list(enumerate(out_classes)):predicted_class class_names[int(c)]box out_boxes[i]score out_scores[i]top, left, bottom, right boxtop max(0, np.floor(top).astype(int32))left max(0, np.floor(left).astype(int32))bottom min(image.size[1], np.floor(bottom).astype(int32))right min(image.size[0], np.floor(right).astype(int32))label {} {:.2f}.format(predicted_class, score)print(label)cv2.rectangle(result_img,(left,top),(right,bottom),(0,255,0),2)cv2.putText(result_img,label,(left,top5),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),2)cv2.imshow(result_img,result_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
之后我们将一张图像放在文件夹img中 之后运行predict.py就可以得到结果了 7 其他
7.1 多线程训练
将train.py中的num_workers置为0可以进行多线程训练 7.2 二次训练
每一次都从0开始训练耗费时间太多所以我们需要对训练好的模型进行二次训练
首先读取一次训练训练好的模型 将其更改为一次训练的epoch数 将其更改为最终的轮数我上面初始写的500这里写的1000就表明再训练500轮 二次训练的初始loss值是根据你之前训练好的模型来的所以初始的loss值不会像没训练过一样高(20多) 7.3 学习速率
训练结束后如果我们发现loss值没有走低的趋势的时候或训练过程中我们可以停止训练然后使用最近一次的h5文件进行二次训练二次训练我们可以尝试降低学习率