# 我的YOLO源码实验 **Repository Path**: penguink3/My_YOLO ## Basic Information - **Project Name**: 我的YOLO源码实验 - **Description**: 进行了YOLO源码实验,用于打比赛和学习目标检测准备 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-04-10 - **Last Updated**: 2022-05-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1. 关于如何使用这份源码?! ## 1.1. 文件结构 ``` checkpoints:这个文件夹保存网络每回合训练后的参数 config ->| coco.data:coco这个数据集的位置,以及分类数量,train数据,val数据等信息(自己的数据集属性可以仿照这个书写) custom: 仿照coco.data写的自己数据集信息 yolov3-tiny.cfg: 官方yolov3的tiny版本的网络参数信息 yolov3.cfg: 官方yolov3的网络参数信息 output: detect输出的文件会保存在这里 utils: 源代码中的一些工具代码,如果只是使用可以不用过多了解 dataset: 这里要提一嘴这个文件,如果需要训练的数据集路径改变了,记得修改ListDataset类中的getitem data:数据集所在地(没上传,自己改造) weights ->| darknet53.conv.74: 官方facebook的预训练参数 yolov3-tiny.weights: 官方yolov3的tiny版本预训练参数 yolov3.weights: 官方yolov3的版本预训练参数 detect.py: 使用训练好的模型进行样本检测,会输出到output,读取的是data/samples中的图片 eval.py: 检测训练好的模型的mAP models.py: 根据cfg文件生成模型的主要代码 train.py: 加载数据集训练模型 ``` ## 1.2. 训练COCO数据集 1. COCO数据集中的构造
2. 在命令行运行[train.py](train.py)文件,输入时添加如下三个参数 ``` --model_def config/yolov3.cfg # 模型配置文件 --data_config config/coco.data # coco数据集配置文件 --pretrained_weights weights/darknet53.conv.74 # 预训练参数文件 ``` 3. 训练时每过一回合会保存checkpoint并且进行eval,可以输入以下参数调整间隔回合数 ``` --checkpoint_interval 1 --evaluation_interval 1 ``` 4. coco训练好的模型,我们可以运行[detect.py](detect.py)进行图片的预测,运行时请输入并调整如下参数 ``` --image_folder data/samples --model_def config/yolov3.cfg # 模型配置文件 --weights_path weights/darknet53.conv.74 # 训练好的模型参数文件 --class_path data/custom/classes.names # 分类任务分类种类数(这里是coco有80个类) --conf_thres 0.6 # 置信度高于这个值才判别为检测到物体 ``` # 2. 关于如何训练自己的数据集 ## 2.1. 安装标签工具[labelme](https://link.zhihu.com/?target=https%3A//github.com/wkentaro/labelme) - 如果已经有python或者conda ```py # python3 conda create --name=labelme python=3.6 source activate labelme # conda install -c conda-forge pyside2 # conda install pyqt # pip install pyqt5 # pyqt5 can be installed via pip on python3 pip install labelme # or you can install everything by conda command # conda install labelme -c conda-forge ``` - 安装完成后,cmd输入labelme即可打开 ## 2.2. 给数据集做标签 1. 使用labelme打标签 - 右键可以选择打哪种标签(正方形、圆形、图像分割)
2. 保存后的标签是json格式,我们使用文件json2yolo.py将json转换为源码中需要的txt - 修改代码中的name2id为分类种类和标号,要和classes每一行对应 - json_floder_path修改为json标签存放路径 - 输出到json2yolo.py所在目录下的labels文件夹,所以建议把代码移动到json标签所在文件夹执行 - 注意图片名字和txt格式的label文件的得一致 3. 把数据集文件夹整理成如下形式,比如文件夹名为custom,则custom文件夹下目录如下 - images: 数据集图片所在位置 - labels: 数据集标签txt版本所在位置 - samples: 最终测试模型训练效果的图片 - classes.names:模型分类种类名称(最后一行是空,否则识别会少一类) - train.txt:训练数据集相对位置 - valid:eval数据集相对位置
- 以上文件都可以参考data文件夹中的custom,coco太大就不上传了 4. 把custom放到源码data文件夹下 ## 2.3. 修改源码的一些配置文件 1. config文件夹下面有一个create_custom_model.sh,运行如下指令,产生对应结构的yolo网络配置文件yolov3-custom.cfg - win下如何运行sh请百度 - create_custom_model.sh最后一行可以修改输出文件的名称 ```py # 3是你数据集分类种类数量 create_custom_model.sh 3 ``` 2. 在config下创建custom.data,输入如下内容 ``` classes= 1 # 分类数量 train=data/custom/train.txt # 训练集标识文件路径 valid=data/custom/valid.txt # eval数据集表示文件路径 names=data/custom/classes.names # 分类类名列表 ``` ## 2.4. 运行训练和检测 1. 运行训练文件train.py,运行时添加或者直接文件中修改如下参数 ``` --model_def config/yolov3-custom.cfg # 模型配置文件,刚才生成的那个yolov3-custom.cfg --data_config config/custom.data # 数据集配置文件 --pretrained_weights weights/yolov3.cfg # 预训练参数文件 --checkpoint_interval 5 # 如果训练数据少,没必要每回合保存一次模型 --evaluation_interval 5 # 设置机会合eval一次 ``` 2. 在进行detect之前,在data/custom/sample文件夹中放入检测的图片 3. 运行文件detect.py进行模型训练成果检测,需要调整以下参数 ``` --image_folder data/custom/samples # 需要detect的图片所在位置 --model_def config/yolov3-custom.cfg # 模型配置文件 --weights_path checkpoints/yolov3_ckpt_90.pth # 训练好的模型参数文件,注意这里你需要的是checkpoints中的文件,那些才是你训练好的模型的参数 --class_path data/custom/classes.names # 分类任务分类种类数 --conf_thres 0.6 # 置信度高于这个值才判别为检测到物体 ``` 4. 结果会输出到output当中,当然你可以修改源码中plt.savefig后的保存地址 # 模型参数和tips 1. 模型参数可以在这里下载,下载后放入weights文件夹 ``` 链接:https://pan.baidu.com/s/1HN6HfUKXFEDunAzzYK8fvA?pwd=f4tp 提取码:f4tp --来自百度网盘超级会员V5的分享 ``` 2. 为了更好区分,以上custom都可以改名