yolov3如何训练自己的数据集,yolov3训练自己的数据
第一篇深度时尚介绍2数据集2数据集格式转换2.1深度时尚标签格式转换为COCO标签格式2.2转换为YOLO格式3用YOLOv4模型训练4参考
1 DeepFashion2数据集介绍
该数据集包含19W训练样本和3W测试样本,样本包含各类服装的买家秀和卖家秀图像。此外,数据集包含许多标签,如风格、包围盒、密集标志和遮罩,可用于训练服装检测、案例分割、关键点检测等任务的模型。数据集中的服装包括模特或买手穿过的服装和没穿过的服装。鉴于DeepFashion数据集中部分服装类别难以区分,将该数据集的服装类别标签改为以下13个类别。下图显示了每个类别的训练样本数。
下图是DeepFashion2数据集中的一些数据例子,用来说明数据集具有尺度、缩放、视角、遮挡的多样性,能够有效帮助模型学习具有更好泛化能力的模型。
数据集的获取和详细介绍,请参见文尾链接:
2数据集格式转换2.1 DeepFashion注释格式转换为COCO注释格式。下载完数据集后,解压数据集(解压密码通过上面Github项目给出的链接发给官方,过程不长)。我们得到train和validation的文件夹,文件夹结构如下:
annos文件夹是注释文件,图像文件是原始图像文件。然后,使用这个链接的代码可以将DeepFashion的标注格式转换为COCO格式。
注意:使用时间代码时,根据处理对象是训练还是验证,将代码第244行的json_name变量改为 train.json 或 valid.json 。并且,将第118行和第119行更改为相应的文件路径。
然后分别对训练集和验证集执行一次代码,我们会在DeepFashion2的路径下得到两个COCO格式的标注文件train.json和valid.json。由于图片数量较多,转换过程需要进行一段时间,耐心等待即可。
2.2转换为YOLO格式。由于我们在这里只训练目标检测模型,所以我们只需要获得标签文件中的位置标签。
首先,我们在DeepFashion2文件夹下克隆这个链接的Format.py和example.py文件,在这个文件夹下创建一个“fashion_classes.txt”文件,在这个文件中写入了着装类别标签,如下图:
然后,我们对Format.py中的文件进行适当修改。原因是,该代码生成的格式是将每一幅图像的标注单独写成一个文本文件(文本文件)文件,而我采用的训练模型接受的标注文件格式与之不同,修改内容如下:在Format.py中的YOLO类中添加如下两个成员函数:def generate_v1(self,data):try:progress_length=len(data)progress _ CNT=0打印进度条(0,progress _ length,prefix= \ nYOLO生成:。ljust(15),suffix=Complete ,length=40)result={ } for key in data:img _ width=int(data[key][ size ][ width ])img _ height=int(data[key][ size ][ height ])contents= for idx in range(0,int(data[key][ objects ][ num _ obj ]):xmin=data[key][ objects ][str(idx)][ bndbox ][加入([ 。join([str(e),,]) for e in b]) contents= .join([contents, ,bndbox[:-1],,,str(cls _ id)])result[key]=内容打印进度条(progress _ CNT 1,progress_length,前缀=YOLO生成:。ljust(15),后缀=完成,长度=40)进度_计数=1返回没错,结果除了exc_type,exc_obj,exc _ TB=sys。exc _ info()fname=OS。路径。split(exc _ TB。TB _ frame。f _ code。co _ filename)[1]msg= ERROR:{ },moreInfo : {}\t{}\t{} .格式(e,exc_type,fname,exc_tb.tb_lineno)返回False,msg def save_v1(self,data,save_path,img_path,img_type,mani past _ path):try:progress_length=len(data)progress _ CNT=0打印进度条(0,progress _ length,prefix= \ nYOLO保存: .ljust(15),后缀=完成,长度=40) with open(manipast_path, w )as mani past _ file:for key in data:# mani past _ file。写(OS。路径。ABS路径(OS。路径。加入(img _ path), .join([key,img_type, \ n ]))key _ path= .join([深度时尚2/train/image/,key,img _ type])#与open(OS。路径。abspath(OS。路径。join(保存路径), .加入([key .txt])))), w )作为output _ txt _ file:mani过去_ file。写().join([key_path, ,data[key], \ n ]))打印进度条(progress _ CNT 1,progress_length,前缀=YOLO保存:。ljust(15),后缀=完成,长度=40)进度_计数=1返回没错,除了exc_type,exc_obj,exc _ TB=sys。exc _ info()fname=OS。路径。split(exc _ TB。TB _ frame。f _ code。co _ filename)[1]msg= ERROR:{ },moreInfo : {}\t{}\t{} .格式(e,exc_type,fname,exc_tb.tb_lineno)返回假的,味精将示例。巴拉圭的第58行、第61行的约洛。生成,yolo。保存分别改成yolo.generate_v1和yolo.save_v1 .接着,在控制台运行如下指令:
(1) 生成训练集标签
python例子。py-datasets COCO-img _ path ./train/image/-标记火车。JSON-convert _ output _ path YOLO/-img _ type .jpg -mani past _ path火车。txt-cls _ list _ file fashion _ class。txt(2)生成验证集标签
python例子。py-datasets COCO-img _ path ./validation/image/-标签有效。JSON-convert _ output _ path YOLO/-img _ type . jpg -mani past _ path有效。txt-cls _ list _ file fashion _ class。文本文件(textfile)完成上述两个步骤后,会在当前文件夹生成 train.txt 和" valid.txt "两个我们需要的标注文件,其标注格式为,如下图示例:
img_path xmin,ymin,xmax,ymax,cls_id1 xmin,ymin,xmax,ymax,cls_id2
其中,img_path为图片的路径,使用时可以通过修改保存_v1函数中key_path=" " .join(["深度时尚2/train/image/",key,img_type])里面的代码,将其改为你电脑上的绝对路径,然后只需要将两个标注文件放到项目路径下面。否则,你也需要将整个数据集按照如下结构组织,并放到项目路径下面:
-深度时尚2-训练-图像-验证-图像3使用YOLOv4模型进行训练 我用的是这个仓库下的代码https://github.com/bubbliiiing/yolov4-pytorch,这份实现包含了一些训练的诡计,比如余弦调度器学习率、马赛克、剪切混合、标签平滑、CIoU等。
将刚刚生成好的数据标签文件train.txt和valid.txt放到项目的根目录下面(如果你的标注文件里面的文件路径采用的不是绝对路径,还需要把数据集的图像按照第二章所说的目录结构拷贝过来)。
项目原来的代码是将训练集中划出一定比例作为验证集,由于我们有验证集的标注,所以适当的修改代码。适当修改train_with_tensorboard.py中的代码:
[第142行]:-annotation _ path= 2007 _ train。txt train _ path=火车。 val _ path=有效。txt [第179行]:-val _ split=0.1-with open(annotation _ path)as f:-lines=f . read lines()-NP。随机的。种子(10101)-NP。随机的。洗牌(台词)-NP。随机的。seed(None)-num _ val=int(len(lines)* val _ split)-num _ train=numgenerate(mosaic=mosaic)-gen _ val=Generator(Batch _ size,lines[num_train:],(input_shape[0],input_shape[1]).generate(mosaic=False)gen=Generator(Batch _ size,train_lines,(input_shape[0],input_shape[1]).generate(mosaic=mosaic)gen=Generator(Batch _ size,train_lines,(input_shape[0],input_shape[1]).生成(马赛克=马赛克)然后,按照项目的说明文档操作即可。我这次的训练由于国家政治保卫局。参见国家政治保卫局资源不能长时间使用,训练过程没结束就被终止了,结果不是特别好,挥发性有机化合物图评价指标如下图所示:
但是,跑开指标不谈,这个数据集还是训练出了泛化能力不错的模型,下面给出几幅该模型的预测结果图像:
四参考https://arxiv.org/abs/1901.07973
https://github.com/switchablenorms/DeepFashion2
https://github。com/manishsinghrajput 98/A-Z-深度时尚2-实现
https://github。com/manishsinghrajput 98/deep fashion 2 coco _ to _ yolo _
https://github.com/bubbliiiing/yolov4-pytorch
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。