1 首先用Pre-Trained Model做检测,测试模型
$wget http://pjreddie.com/media/files/yolo.weights
$python detect.py cfg/yolo.cfg yolo.weights data/dog.jpg
得到如下输出:
layer filters size input output
0 conv 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32
1 max 2 x 2 / 2 416 x 416 x 32 -> 208 x 208 x 32
......
30 conv 425 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 425
31 detection
Loading weights from yolo.weights... Done!
data/dog.jpg: Predicted in 0.014079 seconds.
truck: 0.934711
bicycle: 0.998013
dog: 0.990524
2 将自己的数据制作成VOC格式
在pytorch-yolo2-master文件下新建VOCdevkit文件夹:
VOCdevkit
|VOC2007
|Annotations
|ImageSets
|JPEGImages
|lables
3 制作VOC lables
$ wget http://pjreddie.com/media/files/voc_label.py
这一步会在pytorch-yolo2-master中生成2007_test.txt等文件
pythonvoclabel.py这一步会将2007test.txt等文件合并成voctrain.txt
cat 2007_train.txt 2007_val.txt 2012_*.txt > voc_train.txt
4 修改cfg
根据data/voc.names生成自己的数据集的your.names
在cfg/voc.data中将names = data/voc.names换成names = data/your.names
train = train.txt
valid = 2007_test.txt
names = data/voc.names
backup = backup
gpus = 0,1,2,3 ###可以设置GPU
cfg/yolo-voc.cfg中是网络的运行参数,以及网络结构文件:
可以新建cfg/gesture.cfg,最后面的:classes=20修改为自己的类别数
5 下载Pretrained Convolutional Weights
wget http://pjreddie.com/media/files/darknet19_448.conv.23
6 训练Model
python train.py cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23
7 遇到的问题
1. NAN
跑到一半loss突然跑飞了,那就说明学习率设置的太大了,可以慢慢调小。
最好也使用warm up,也就是一开始使用很小的学习率:
base_lr: 0.001
step: -1, 500,20000,40000
scales=0.1,10,.1,.1
则前500次迭代会使用0.0001的学习率,之后才变回0.001的学习率。
8 待解决的问题
1. 结合Focal loss
初步猜想:直接将region_loss.py中中对分类的损失从nn.CrossEntropyLoss换成Focal_loss
2. 准确率不如darknet的版本
正在调整合适的学习率