目录
1.代码准备
2.ccpd数据集准备
2.1ccpd数据集源下载至本地(占用12G左右内存,建议下载至D盘或移动硬盘):
2.2在数据集目录下建立两个文件夹test_datasest/ccpd_train:<如图
2.3ccpd转yolov5目标格式
(1)将数据集图片6:2:2分为训练集、验证集、测试集
(2)将x文件夹下图片命名信息提取切割,存储为txt文档,并存储至x文件夹
3.开始炼丹(训练)
3.1 炼丹over
3.2炼丹过程tensorboard可视化
3.2.1利用MobaXterm可视化Tensorboard
3.2.2开启tensorboard
4.用于检测目标
-----------------------------------------------使用mobaxterm!!!----------------------------------------------------
目录
1.代码准备
2.ccpd数据集准备
2.1ccpd数据集源下载至本地(占用12G左右内存,建议下载至D盘或移动硬盘):
2.2在数据集目录下建立两个文件夹images、labels:<如图
2.3ccpd转yolov5目标格式
(1)将数据集图片分为train、val两个文件夹
(2)将x文件夹下图片命名信息提取切割,存储为txt文档,并存储至x文件夹
(3)ccpd文件内txt与jpg文件分割:
(4)删除图片文件夹中生成的.txt文件
(5)最最最后一步!
3.开始炼丹(训练)
3.1 炼丹over
3.2炼丹过程tensorboard可视化
3.2.1利用MobaXterm可视化Tensorboard
3.2.2开启tensorboard
4.用于检测目标
<文件夹地址: 例:/home/li/~Pycode/ https://github.com/ultralytics/yolov5(建议进入github) ------<本人常用p/i/g/c/h/a> https://github.com/detectRecog/CCPD(建议进入github) ------<本人常用p/i/g/c/h/a> <数据集在本地解压(本地解压更方便点) <将解压后数据集文件上传至mobaxterm服务器: <文件夹地址: 例:/home/li/~Pycode/yolov5-master/data/ 在ccpd_train目录下建立两个文件夹images/labels:<如图 <两文件夹下分别创建两个文件夹train、val:<如图 ----------<修改路径:第六行:os.lisdir:自己的数据集文件夹 -------------------------<第13、14、15行:traindir:images/train所在地址 ---------------------------valdir:images/val所在地址 ---------------------------detect:检测所用图片所在地址 -------------------------<第16行:同第六行 ---------<只修改 train/val 路径为图片所在路径!!!!!train、val两个文件夹!!! 最后一步! <打开yolov5文件夹下data文件夹,复制粘贴图中红色框框文件,修改命名像绿框框一样自己看得懂的名字。 <修改内容如图 -----------------------至此!!!!-----------数据集准备完毕---鼓掌鼓掌~--------------------------------------_ --------<修改如图默认参数,--weights: default=' '根据需要选择,这里选用yolov5s.pt -----------<--data : 如图修改 default <右键run!开始炼丹 <这个时候建议去厕所思考会儿人生----<如果网速可以,腿麻的时候回来差不多结束了 <炼丹结果如图: <炼丹过程自动存储在文件夹路径: /home/li/~Pycode/yolov5-master/runs/train/exp30/-------------- <如下图,红色箭头Tool ----- <然后按照如图所示填写 -----------------<本地端号、服务器IP、端号、用户名......... <创建好后如图,点击start < 输入指令行: < 键入指令行: <成功启动 <浏览器(建议chrome <访问tensorboard -------------------------------------------炼丹至此over-----------撒花撒花-------------------------------------------- <将需要检测的图片,在data/images文件夹下保存 <打开yolov5文件夹下的 detect.py文件 -----------------<--weights: default=炼丹过程最优结果: ---------------存储地址:"/home/li/~Pycode/yolov5-master/runs/train/exp30/weights/best.pt" ------------------<--source: default=需要检测的图片路径 <右键run~~~,等待运行结束! ---------------检测结果保存地址:"/home/li/~Pycode/yolov5-master/runs/detect/" ----------------------------------------ccpd-----yolov5-------over~------------------------------------------------------2.ccpd数据集准备
2.1ccpd数据集源下载至本地(占用12G左右内存,建议下载至D盘或移动硬盘):
2.2在数据集目录下建立两个文件夹test_datasest/ccpd_train:<如图
2.3ccpd转yolov5目标格式
(1)将数据集图片6:2:2分为训练集、验证集、测试集
import shutil
from shutil import copy2
trainfiles = os.listdir("/home/li/~Pycode/yolov5master/data/CCPD2019.tar/ccpd_fn/")
#(图片文件夹)
num_train = len(trainfiles)
print( "num_train: " + str(num_train) )
index_list = list(range(num_train))
print(index_list)
random.shuffle(index_list)
num = 0
trainDir = "/home/li/~Pycode/yolov5-master/data/ccpd_train/images/train/"
#(将图片文件夹中的6份放在这个文件夹下)
validDir = "/home/li/~Pycode/yolov5-master/data/ccpd_train/images/val/"
#(将图片文件夹中的2份放在这个文件夹下)
detectDir = "/home/li/~Pycode/yolov5-source/data/test_datasets/images/"
#(将图片文件夹中的2份放在这个文件夹下)
for i in index_list:
fileName = os.path.join("/home/li/~Pycode/yolov5master/data/CCPD2019.tar/ccpd_fn/", trainfiles[i])
if num < num_train*0.6:
print(str(fileName))
copy2(fileName, trainDir)
elif num < num_train*0.8:
print(str(fileName))
copy2(fileName, detectDir)
else:
copy2(fileName, validDir)
num += 1
(2)将x文件夹下图片命名信息提取切割,存储为txt文档,并存储至x文件夹
import shutil
import cv2
import os
def txt_file(img_path):
x = img_path.split("/", 9)
if x[8] == "train":
y = '/'.join(x[0:7]) + '/labels/' + 'train/'
else:
y = '/'.join(x[0:7]) + '/labels/' + 'val/'
return y
def txt_translate(path, txt_path):
for filename in os.listdir(path):
print(filename)
list1 = filename.split("-", 3) # 第一次分割,以减号'-'做分割
subname = list1[2]
list2 = filename.split(".", 1)
subname1 = list2[1]
if subname1 == 'txt':
continue
lt, rb = subname.split("_", 1) # 第二次分割,以下划线'_'做分割
lx, ly = lt.split("&", 1)
rx, ry = rb.split("&", 1)
width = int(rx) - int(lx)
height = int(ry) - int(ly) # bounding box的宽和高
cx = float(lx) + width / 2
cy = float(ly) + height / 2 # bounding box中心点
img = cv2.imread(path + filename)
if img is None: # 自动删除失效图片(下载过程有的图片会存在无法读取的情况)
os.remove(os.path.join(path, filename))
continue
width = width / img.shape[1]
height = height / img.shape[0]
cx = cx / img.shape[1]
cy = cy / img.shape[0]
txtname = filename.split(".", 1)
txtfile = txt_path + txtname[0] + ".txt"
# 绿牌是第0类,蓝牌是第1类
with open(txtfile, "w") as f:
f.write(str(0) + " " + str(cx) + " " + str(cy) + " " + str(width) + " " + str(height))
if __name__ == '__main__':
# 修改此处地址
trainDir = "/home/li/~Pycode/yolov5-master/data/ccpd_train/images/train/"
validDir = "/home/li/~Pycode/yolov5-master/data/ccpd_train/images/val/"
# 该处修改为图片存储地址
txt_path1 = txt_file(trainDir)
txt_path2 = txt_file(validDir)
txt_translate(trainDir, txt_path1)
txt_translate(validDir, txt_path2)
3.开始炼丹(训练)
3.1 炼丹over
3.2炼丹过程tensorboard可视化
3.2.1利用MobaXterm可视化Tensorboard
3.2.2开启tensorboard
cd "/home/li/~Pycode/yolov5-master/"
tensorboard --logdir="runs/train"
http://127.0.0.1:16006/
4.用于检测目标