# 我的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都可以改名