您的位置:首页 > Web前端

Caffe实现多标签分类

2017-09-27 11:06 381 查看
任务

我这里给出一个具体的任务咯,要求在以下图片中,识别出汽车品牌和车辆外形。汽车品牌分为:Benz/BMW/Audi 车辆外形分为:Sedan/SUV。这是一个只有72张图片的小数据库,包括了测试和训练集:

这里写图片描述

其中标注是这样的,Audi=0,BMW=1,Benz=2. Sedan =0, SUV=1。所以如果这辆车是奥迪的SUV,标注就是: xx.jpg 0 1。在数据库中,标注已经做好了。数据集的下载方式在文章的最后。

定义我们的网络结构

我们这里采用的是上述文章中薛大牛的方法,两个data层,一个data只放图片,另一个data放label,label通过slice layer切开。然后我们开始定义网络!修改AlexNet!这是我的网络:

做数据转换工具!

整个网络结构需要两类数据,一类是纯图片的lmdb,一类是包含两个标签的lmdb。首先我们需要修改caffe中的源码(相信我,很简单!)打开你编译caffe时候的工程,找到convert_imageset这个工程:

修改convert_imageset.cpp为convert_multilabel.cpp,内容如下,全部替代也可以:(见github:https://github.com/HolidayXue/CodeSnap/blob/master/convert_multilabel.cpp)然后重新编译这个convert_imageset这个project。你可能会遇到什么没有生成object的警告,在这里关掉即可:

完成后,我们会看到release文件夹下多了一个convert_multilabel的exe,这个就是我们的lmdb生成工具啦。

做图像和多标签数据!

下载我的(或者自己做也可以)数据集,用命令行命令:

convert_imageset.exe --resize_height=256 --resize_width=256 --shuffle=true D:\caffe-master\examples\ZnCar\Test\ D:\caffe-master\examples\ZnCar\Test.txt D:\caffe-master\examples\ZnCar\test_lmdb D:\caffe-master\examples\ZnCar\test_label_lmdb 2
pause


然后还要做均值文件:

compute_image_mean.exe D:\caffe-master\examples\ZnCar\test_lmdb D:\caffe-master\examples\ZnCar\TestMean.binaryproto
pause


总之最后应该有六个东西,如图:



微调AlexNet!

网上下载一个bvlc_alexnet.caffemodel的权重文件。然后就是finetune了,参数的话得好好改改solver.prototxt里面,比如base_lr调小一点啦,迭代max_iter不要太多啦等等。此外也可以把两个fc8层的学习率适当提升一些,因为在finetune的时候训练好的权重只对原来没变的层有作用,这个新层就相当于是随机初始化的参数。

试一试我们的模型

这里还需要修改classification.cpp文件,因为Caffe自带的只支持单样本。我自己做了一个修改版本的,主要是修改了命令行和输出网络的部分,这个cpp只支持两标签,主要是用着方便,如果你需要更多的标签可以自己修改。编译步骤同convert_multilabel.cpp的编译。链接中的的代码直接就可以替换原来的cpp。

结果

写两个标注文件:

label1.txt:

Sedan

SUV

label2.txt:

Audi

BMW

Benz

1

2

3

4

5

6

7

8

我修改后的classification.exe 分类的命令行:

.\Build\x64\Release\classification.exe D:\caffe-master\examples\ZnCar\deploy.prototxt D:\caffe-master\examples\ZnCar\Train.caffemodel D:
9bdc
\caffe-master\examples\ZnCar\ZnCarTrainMean.binaryproto D:\caffe-master\examples\ZnCar\label1.txt D:\caffe-master\examples\ZnCar\label2.txt D:\caffe-master\examples\ZnCar\Test\1.jpg

.\Build\x64\Release\classification.exe D:\caffe-master\examples\ZnCar\deploy.prototxt D:\caffe-master\examples\ZnCar\Train.caffemodel D:\caffe-master\examples\ZnCar\ZnCarTrainMean.binaryproto D:\caffe-master\examples\ZnCar\label1.txt D:\caffe-master\examples\ZnCar\label2.txt D:\caffe-master\examples\ZnCar\Test\2.jpg
pause


本项目的Github网址:https://github.com/ChenJoya/Caffe_MultiLabel_Classification

数据集:http://download.csdn.net/detail/mr_curry/9742578
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: