Caffe实现多标签分类

来源:互联网 发布:linux mount命令详解 编辑:程序博客网 时间:2024/05/19 19:30

任务

我这里给出一个具体的任务咯,要求在以下图片中,识别出汽车品牌和车辆外形。汽车品牌分为: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.binaryprotopause

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

这里写图片描述
微调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:\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.jpgpause

本项目的Github网址:https://github.com/ChenJoya/Caffe_MultiLabel_Classification
数据集:http://download.csdn.net/detail/mr_curry/9742578

原创粉丝点击