Skip to content

XiangqianMa/yolov3.pytorch

Repository files navigation

yolov3.pytorch

本仓库为在已有的优秀的yolvo3的实现上,为方便自己使用修改得到。目前只是一个很初级的版本,性能尚有不足,后续将持续改进。

数据集

Pascal VOC data

按照如下的方式下载Pascal VOC数据集:

在任意位置(如mydata),执行如下语句:

wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
tar xf VOCtrainval_11-May-2012.tar
tar xf VOCtrainval_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar

接着,在mydata目录下,执行:

mkdir voc
cp VOCdevit/VOC2007/JPEGImages ./voc/
cp VOCdevit/VOC2007/Annotations ./voc/
cp VOCdevit/VOC2012/JPEGImages/* ./voc/JPEGImages/
cp VOCdevit/VOC2012/Annotations/* ./voc/Annotations/

mkdir ./voc/ImageSets
mkdir ./voc/ImageSets/Main

cat VOCdevit/VOC2007/ImageSets/Main/train.txt VOCdevit/VOC2007/ImageSets/Main/val.txt VOCdevit/VOC2012/ImageSets/Main/train.txt VOCdevit/VOC2012/ImageSets/Main/val.txt > ./voc/ImageSets/Main/train.txt
cp VOCdevit/VOC2007/ImageSets/Main/test.txt voc/ImageSets/Main/

rm -r VOCdevit

接着,进入项目根目录(mydata即为上述数据集的下载根目录),执行:

mkdir data
ln mydata/voc ./data/

在项目根目录下执行:

python scripts/prepare_voc.py

执行完成后,将在./data/voc目录下生成三个文件夹:

train: 存放训练图片
train_txt: 存放各个图片所对应的标注文件
categories_id_to_name.json: 类别id到名称的转换文件

训练

下载预训练权重

cd checkpoints/official_weights
wget https://pjreddie.com/media/files/darknet53.conv.74

开始训练

本项目目前只支持单GPU训练

在项目根目录下执行:

python train.py

# 如果设备上有多台GPU,请使用下述语句
CUDA_VISIBLE_DEVICES=0 python train.py

在训练过程中,中间文件将被保存在./checkpoints/backup下的文件夹内,例如checkpoints/backup/log-2020-06-02T10-32-09

Tensorboard

进入checkpoints/backup/log-2020-06-02T10-32-09下的tensorboard目录,执行:

tensorboard --logdir=./

测试

训练完成后,使用test.py文件进行测试。将test.py文件中的权重路径修改为待测试的.pth的路径,如:

weight_path = "checkpoints/backup/log-2020-06-02T10-32-09/weights/yolov3_79.pth"

在项目根目录下执行:

python test.py

# 如果设备上有多台GPU,请使用下述语句
CUDA_VISIBLE_DEVICES=0 python test.py

检测

结果可视化使用的程序文件为detect.py文件。

  • 请确保该文件中的网络结构配置文件、权重文件等文件相互匹配。

  • 将待测试图片放在data/test_images下。

  • 在根目录下执行:

    python detect.py

检测结果将被存放在data/test_results文件夹内。结果如下:

自定义参数

本工程的所有的超参数管理均由config.json一个文件完成,提供如下的功能:

  • 学习率、epoch等基础参数修改;
  • 提供多种学习率衰减策略;
  • 提供多种优化算法(SGD、Adam等);
  • 多尺度训练;
  • Mosaic数据增强(测试中);
  • 左右翻转、上下翻转等普通的数据增强(测试中);
  • GIoU边框回归损失(测试中)。

待完成

  • mosaic数据增强;
  • voc数据集上的性能较低,待提升;
  • 网络结构轻量化,包括剪枝、量化、知识蒸馏等;
  • Jetson Nano部署。

注意事项

  • 在使用Mosaic和训练集数据增强时,如果使用SGD优化器,学习率最高只能是1e-4,否则会导致训练不稳定;但如果使用Adam,则学习率可以调整为1e-3。

参考

在编写本项目中,参考了如下两个优秀的项目实现:

后记

调了好久了,卡在一个点上不动,目前还没有找出问题。还望能找出问题的大佬和我交流一下。

About

My implementation of yolov3 in pytorch.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages