目录
2.1ccpd数据集源下载至本地(占用12G左右内存,建议下载至D盘或移动硬盘):
2.2在数据集目录下建立两个文件夹test_datasest/ccpd_train:<如图
(2)将x文件夹下图片命名信息提取切割,存储为txt文档,并存储至x文件夹
3.2.1利用MobaXterm可视化Tensorboard
-----------------------------------------------使用mobaxterm!!!----------------------------------------------------
目录
2.1ccpd数据集源下载至本地(占用12G左右内存,建议下载至D盘或移动硬盘):
2.2在数据集目录下建立两个文件夹images、labels:<如图
(2)将x文件夹下图片命名信息提取切割,存储为txt文档,并存储至x文件夹
3.2.1利用MobaXterm可视化Tensorboard
1.代码准备
<yolov5代码下载至本地并上传至mobaxterm:
<文件夹地址:
例:/home/li/~Pycode/
https://github.com/ultralytics/yolov5(建议翻墙进入github)
------<本人常用p/i/g/c/h/a>
2.ccpd数据集准备
2.1ccpd数据集源下载至本地(占用12G左右内存,建议下载至D盘或移动硬盘):
https://github.com/detectRecog/CCPD(建议翻墙进入github)
------<本人常用p/i/g/c/h/a>
<数据集在本地解压(本地解压更方便点)
<将解压后数据集文件上传至mobaxterm服务器:
<文件夹地址:
例:/home/li/~Pycode/yolov5-master/data/
2.2在数据集目录下建立两个文件夹test_datasest/ccpd_train:<如图
在ccpd_train目录下建立两个文件夹images/labels:<如图
<两文件夹下分别创建两个文件夹train、val:<如图
2.3ccpd转yolov5目标格式
(1)将数据集图片6:2:2分为训练集、验证集、测试集
----------<修改路径:第六行:os.lisdir:自己的数据集文件夹
-------------------------<第13、14、15行:traindir:images/train所在地址
---------------------------valdir:images/val所在地址
---------------------------detect:检测所用图片所在地址
-------------------------<第16行:同第六行
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文件夹
---------<只修改 train/val 路径为图片所在路径!!!!!train、val两个文件夹!!!
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)
最后一步!
<打开yolov5文件夹下data文件夹,复制粘贴图中红色框框文件,修改命名像绿框框一样自己看得懂的名字。
<修改内容如图
-----------------------至此!!!!-----------数据集准备完毕---鼓掌鼓掌~--------------------------------------_
3.开始炼丹(训练)
--------<修改如图默认参数,--weights: default=' '根据需要选择,这里选用yolov5s.pt
-----------<--data : 如图修改 default
<右键run!开始炼丹
<这个时候建议去厕所思考会儿人生----<如果网速可以,腿麻的时候回来差不多结束了
3.1 炼丹over
<炼丹结果如图:
<炼丹过程自动存储在文件夹路径:
/home/li/~Pycode/yolov5-master/runs/train/exp30/--------------<be like
3.2炼丹过程tensorboard可视化
3.2.1利用MobaXterm可视化Tensorboard
<如下图,红色箭头Tool -----<MobaSSHTunnel
<然后按照如图所示填写
-----------------<本地端号、服务器IP、端号、用户名.........
<创建好后如图,点击start
3.2.2开启tensorboard
< 输入指令行:
cd "/home/li/~Pycode/yolov5-master/"
< 键入指令行:
tensorboard --logdir="runs/train"
<成功启动
<浏览器(建议chrome
<访问tensorboard
http://127.0.0.1:16006/
-------------------------------------------炼丹至此over-----------撒花撒花--------------------------------------------
4.用于检测目标
<将需要检测的图片,在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~------------------------------------------------------