欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入免费知识星球。

Darknet训练CIFAR分类器

YOLO 迷途小书童 4年前 (2019-12-16) 3156次浏览 0个评论

软硬件环境

  • Intel(R) Xeon(R) CPU E5-1607 v4 @ 3.10GHz
  • GTX 1070 Ti 32G
  • ubuntu 18.04 64bit
  • anaconda with python 3.6
  • darknet git version
  • cuda 8.0
  • opencv 3.1.0

CIFAR数据集

CIFAR数据集包括CIFAR-10CIFAR-100,前者包含10种物体,每种物体6000张图片;后者有100个物体,每个类别600张图片,它们是由Alex Krizhevsky, Vinod NairGeoffrey Hinton收集的,非常感谢。

在CIFAR-10训练classifier

首先,拉取最新的darknet源码,编译生成darknet可执行程序,后面需要用到

git clone https://github.com/pjreddie/darknet
cd darknet
make

然后准备CIFAR-10数据,darknet的作者pjreddie准备了适用darknet的数据集供大家下载,CIFAR官方只提供了二进制文件,是没有图片的

cd data
wget https://pjreddie.com/media/files/cifar.tgz
tar xzf cifar.tgz

压缩包解压之后是一个文本文件labels.txt(包含的class的名称)、文件夹train(训练用的图片)和文件夹test(测试用的图片)。图片有了以后,还需要2个类似索引的文件,存放的是图片的地址

cd cifar
find `pwd`/train -name \*.png > train.list
find `pwd`/test -name \*.png > test.list
cd ../..

同训练模型一样,我们也需要创建一个数据配置文件cfg/cifar.data

classes=10
train  = data/cifar/train.list
valid  = data/cifar/test.list
labels = data/cifar/labels.txt
backup = backup/
top=2

最后就是书写网络配置文件了cfg/cifar_small.cfg,这个是官方提供的极简版的,源码中有个cfg/cifar.test.cfg可以参考下

[net]
batch=128
subdivisions=1
height=28
width=28
channels=3
max_crop=32
min_crop=32

hue=.1
saturation=.75
exposure=.75

learning_rate=0.1
policy=poly
power=4
max_batches = 5000
momentum=0.9
decay=0.0005

[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=16
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=32
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=64
size=1
stride=1
pad=1
activation=leaky

[convolutional]
filters=10
size=1
stride=1
pad=1
activation=leaky

[avgpool]

[softmax]

一切准备就绪,我们就开始训练了

./darknet classifier train cfg/cifar.data cfg/cifar_small.cfg

我用1070Ti训练的,不一会就结束了,如果训练过程中中断过,可以使用下面命令从中断点继续训练,就不用从头开始了

./darknet classifier train cfg/cifar.data cfg/cifar_small.cfg backup/cifar_small.backup

验证模型

模型训练好了,使用valid命令看看,模型工作的如何,执行下面命令

./darknet classifier valid cfg/cifar.data cfg/cifar_small.cfg backup/cifar_small.backup

训练CIFAR-100

我把CIFAR-100中的所有图片解析出来了,打了个包,放在了CSDN下载频道上,https://download.csdn.net/download/djstavav/10956219,需要的话去下载。我这里只是训练了一个class老鼠,简单写了个python脚本,用来给图片进行重命名,命名的规则是编号_所属类别.jpg

# -*- coding: utf-8 -*-

"""
@author: Xu Gaoxiang
@license: Apache V2
@email: xugx.ai@gmail.com
@site: https://www.xugaoxiang.com
@software: PyCharm
@file: cifar_rename.py
@time: 3/14/2019 10:58 AM
"""

import os
import click
import shutil

@click.command()
@click.option('--path', help = 'cifar image dir.')
def main(path):

    for i in os.listdir(path):
        print(i)
        shutil.move(i, '{}_mouse.jpg'.format(i.split('.')[0])) 

if __name__ == '__main__':

    main()

将处理完后的traintest文件夹存放到data/cifar_mouse下,labels.txt只有一个mouse,然后用老方法生成train.listtest.list,要注意这里的图片格式是jpg而不是png

cd cifar_mouse
find `pwd`/train -name \*.jpg > train.list
find `pwd`/test -name \*.jpg > test.list

接下来准备cfg/cifar_mouse.data文件

train = data/cifar_mouse/train.list
test = data/cifar_mouse/test.list
labels = data/cifar_mouse/labels.txt
backup = backup_mouse/
top = 2

网络训练文件还是使用cfg/cifar_small.cfg中的配置,将其重命名为cfg/cifar_mouse.cfg,只是需要改动下filter=1,这个值其实是指class的值

开始训练

./darknet classifier train cfg/cifar_mouse.data cfg/cifar_mouse.cfg

最后进行图片预测

./darknet classifier predict cfg/cifar_mouse.data cfg/cifar_mouse.cfg backup_mouse/cifar_mouse.weights data/test.jpg

参考资料

喜欢 (0)

您必须 登录 才能发表评论!

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

请关闭 Adblock 等类似浏览器插件,然后刷新页面访问,感谢您的支持!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.