:数据标注json文件转化yolov3配置)
目录一、数据标注1.标注工具的下载2.标注工具的使用二、json转化为txt三、YOLOv3的使用1.数据2.classes.names文件的创建3.config中的yolo文件配置信息4.config中coco文件配置信息5.配置训练参数6.其他接上文YOLOv3使用yolo进行目标检测收集数据集之后我们还要对数据集进行标注得到json文件然后转化为txt文件。一、数据标注1.标注工具的下载数据标注所需要的工具下载以下第三方库第三方库下载过程中可能会出现一些问题比如labelme回车不能启动。不能启动的同时会给出错误理由可以根据大模型自行解决。2.标注工具的使用输入回车后弹出一个窗口这个窗口就是我们进行图片数据标注的界面。如果我们要进行一个猫狗检测的项目收集了很多猫狗的图片那么就要对数据集图片进行猫狗的标注。点击open打开图片就会显示我们所点击的图片。就可以进行数据标注了但一般情况下进行数据标注是需要标注很多图片。点开opendir就可以选择含有数据的文件夹会自动读取到所有图片文件箭头可以切换到上一张或者下一张图片。右击图片会有选项不同选项对应着标注使用不同的框可以自行尝试我们选择适合本次标注的框rectangle矩形框。输入该标注的类别也就是dog点击确定同样也标注上cat标注完之后可以把标注好的信息保存在自定义的文件夹下就会得到json为后缀的文件进行训练的时候我们需要的是txt文件所以还需要把json文件转化为txt文件二、json转化为txt转化代码1.首先要注意类别在标注的时候会有label list。顺序不能混乱要对应。例如2.txtname中的txt保存路径需要修改为自己的也就是我们转化的txt文件所在的文件夹3.标注的时候我们使用的是rectangle所以shape_type要对应4.主程序中json_floder_path是我们存放json文件的文件夹import json import os name2id { dog:0, cat:1}#有多少个类别,在字典中就写多少个对应的就可以 def convert(img_size, box): dw 1./ (img_size[0]) dh 1./(img_size[1]) x (box[0] box[2])/2.0 - 1 y (box[1] box[3])/2.0 - 1 w box[2]- box[0] h box[3] - box[1] x x*dw w w*dw y y*dh h h*dh return (x,y,w,h) def decode_json(json_floder_path,json_name ) : #转换好的标签路径,建议保存在data\custom\labels中 # txt_name rdata\\custom2\\labels\\ json_name[0:-5] .txt txt_name rdata\\custom2\\labels\\ json_name[0:-5] .txt txt_file open(txt_name,w) json_path os.path.join(json_floder_path, json_name) data json.load(open(json_path, r)) img_w data[ imageWidth ] img_h data[ imageHeight ] for i in data[ shapes]: label_name i[label] if ( i[shape_type ] rectangle ): x1 int(i[points][0][0]) y1 int(i[points][0][1]) x2 int(i[points][1][0]) y2 int(i[points][1][1]) bb (x1,y1,x2,y2) bbox convert((img_w,img_h),bb) txt_file.write(str(name2id[label_name]) .join([str(a) for a in bbox]) \n) txt_file.close() if __name__ __main__ : json_floder_path ./label2 json_names os.listdir(json_floder_path) for json_name in json_names: decode_json(json_floder_path,json_name)yolo目标检测所需要的就是图片数据集合对应的txt文件。三、YOLOv3的改进yolov3的网络结构有很大的改进v2时所用的是darknet19而到v3的时候darknet53残差结构residual物体检测更精确。YOLOv3 核心进步多尺度检测 更深网络彻底解决了 v1/v2 小物体差、精度低的问题YOLOv3 最大短板速度牺牲、算力需求高定位精度和超小物体检测仍有优化空间它是YOLO 系列的里程碑奠定了后面所有 YOLO 版本的基础架构。四、YOLOv3的相关配置的修改例猫狗目标检测训练yolo是一个框架可以在github网站内下载v3文件PyTorch-YOLOv3_myself_data.rar链接: https://pan.baidu.com/s/1mqwMkiFEXfmrDUcKs4IToA?pwdr7j8 提取码: r7j81.数据把图片放在data文件下下自建 的custom2文件夹。images是图片train是训练集图片val是验证集图片labels用来存放生成的txt文件train是训练集txtval是验证集txt2.classes.names文件的创建在data文件夹custom2下和images和labels同级创建一个文本文件编辑我们类别的标签顺序严格对应输入最后一个类别之后一定要回车留出空白一行此外我们需要把训练集和测试集图片的路径生成文本也就是这里的train.txt和valid.txt注意路径中不要有中文。图片的格式会有很多种比如jpgpng等这些情况都要考虑到import os # 把这里改成你的图片文件夹路径 image_dir rD:\learn\YOLOs\PyTorch-YOLOv3_myself_data\PyTorch-YOLOv3_myself_data\data\custom2\images\val#train # 保存的 train.txt 会生成在 代码所在文件夹 save_txt rD:\learn\YOLOs\PyTorch-YOLOv3_myself_data\PyTorch-YOLOv3_myself_data\data\custom2\valid.txt#train # 支持的图片格式你可以自己加 img_suffix [.jpg, .jpeg, .png, .bmp, .webp] with open(save_txt, w, encodingutf-8) as f: # 遍历文件夹里所有文件 for filename in os.listdir(image_dir): # 判断是不是图片 if any(filename.endswith(suf) for suf in img_suffix): # 拼接完整路径 img_path os.path.join(image_dir, filename) # 写入 txt f.write(img_path \n) print(f生成成功 已保存共 {len(os.listdir(image_dir))} 张图片)如果我们收集的图片中有各种格式还需要改一处代码找到utils文件夹中的dataset.py文件找到对应代码行把所有图片文件格式全部都添加上以防后续图片格式不同而出错。3.config中的yolo文件配置信息找到三层yolo层把类别这里改成我们项目的类别个数这里是猫狗目标检测那么就为2。可以不修改这个原yolo文件复制一份修改4.config中coco文件配置信息在config文件下有一个coco文件同样可以先复制一份自定义文件名custom2就是我自定义的文件名这个文件里面写的是类别个数图片数据集的路径以及classes.names文件的路径5.配置训练参数打开train.py文件右击配置参数这里根据自己的路径进行修改。全部的参数及参数含义6.其他checkpoints中是我们训练每一轮的数据weights是权重文件在配置训练文件参数时可设置detect.py是检测识别也需要配置相关参数v3没有数据增强所以这个文件里面只有一个图片翻转除了以上操作还会出现其他我们需要解决的问题比如说第三方库的安装都会遇到问题可以结合大模型自行解决。