说明:主要思想是微调使用ImageNet预训练的CaffeNet模型参数,用来对车颜色进行识别。为了不和其他文件混乱,我们在examples下新建文件夹finetune_myself。

1.计算图像均值

caffenet需要图像均值文件,所以先计算均值文件。在finetune_myself下新建文件夹Image_mean,从imagenet中拷贝make_imagenet_mean.sh到finetune_myself下,更名为make_image_mean.sh(为了和imagenet区分),然后修改脚本如下:

EXAMPLE=examples/finetune_myself #该路径下为训练图像的lmdb文件
DATA=examples/finetune_myself/Image_mean #该路径为生成的均值文件保存的地方
TOOLS=build/tools$TOOLS/compute_image_mean $EXAMPLE/car_train_lmdb \ #这里的lmdb和自己的对应$DATA/image_mean.binaryproto #生成的均值文件名字,这里为了区分改一下名字

这样,生成的均值文件保存在finetune_myself下的Image_mean文件夹里,名字为image_mean.binaryproto。

2.准备caffenet模型

在finetune_myself下新建文件夹,命名为models,将caffenet的train_val.prototxt、solver.prototxt和deploy.prototxt复制到此models文件夹里,然后,对模型进行修改。假设我们的训练集类别是m,那么fc8层的num_output需要修改成m,又由于finetune时用到的权重是根据层名匹配的,而fc8的num_output已经修改,该层的参数必须重新学习,所以我们把该层的名字也进行修改,如改为fc8_myself。具体修改如下。

对train_val.prototxt的修改:

(1) mean_file路径:"examples/finetune_myself/Image_mean/image_mean.binaryproto"

训练和测试阶段的data层均要修改。

(2)假设训练集和测试集的lmdb文件在finetune_myself下,所以训练阶段的的data层:

data_param {source:"examples/finetune_myself/car_train_lmdb"batch_size: 50 #这里自己可以修改合适的batch大小backend:LMDB
}

同理,TEST阶段的data层也作同样的修改。即:

data_param{source: "examples/finetune_myself/car_test_lmdb"batch_size:50backend:LMDB}

(3)修改fc8层和相关层

将层名改为fc8_myself(当然其他也行),并修改权重的lr_mult=10,bias的lr_mult=20,目的是让非微调层学习更快。num_output修改为类别数。具体如下:

layer {name: "fc8_myself"type: "InnerProduct"bottom: "fc7"top: "fc8_myself"param {lr_mult: 10decay_mult: 1}param {lr_mult: 20decay_mult: 0}inner_product_param {num_output: 8  #根据类别修改,我做的实验为8类weight_filler {type: "gaussian"std: 0.01}bias_filler {type: "constant"value: 0}}
}

与fc8相关的层也要修改:

layer {name:"accuracy"type:"Accuracy"bottom: "fc8_myself"bottom:"label"top:"accuracy"include {phase: TEST}
}
layer {name: "loss"type: "SoftmaxWithLoss"bottom: "fc8_myself"bottom: "label"top: "loss"
}

对solver.prototxt的修改:

主要是

net:"examples/finetune_myself/models/train_val.prototxt",

该路径改为train_val.Prototxt的路径。

还有

snapshot_prefix:"examples/finetune_myself/models/caffenet"

此路径是训练过程得到的caffemodel和solverstate保存路径,按自己想保存的路径更改。

对deploy.prototxt的修改:

网络的名字name要与train_val.prototxt相同。然后修改fc8层和相关层:

layer {name: "fc8_myself"type: "InnerProduct"bottom: "fc7"top: "fc8_myself"inner_product_param {num_output: 8 #根据类别数改}
}
layer {name:"prob"type:"Softmax"bottom: "fc8_myself"top:"prob"
}

这样,模型就改好了。

3.准备预训练好的caffenet模型参数

finetune_myself下新建文件夹pre_train_models,运行

./scripts/download_model_binary.py examples/finetune_myself/pre_train_models

即将文件下载在pre_train_models中。

4.开始训练

./build/tools/caffe train –solver examples/finetune_myself/models/solver.ptototxt –weights examples/finetune_myself/pre_train_models/bvlc_reference_caffenet

5.结果

训练结果

精度还是挺高的。

训练完成后,得到caffemodel文件:
测试:
./build/examples/cpp_classification/classification.bin **/**/deploy.prototxt **/***/models_iter_100000.caffemodel **/**/image_mean.binaryproto **/**/labels.txt **/**/car.jpg

这些路径按自己的设置,labels是标签,比如你的train.txt中白色标签是0,红色标签是1,那么labels中第一行是white,第二行是red,其他的也是这样按顺序排。

结果:
white - "0.9963"
gray - "0.0036"
green - "0.0001"

输出前三个预测结果


微调CaffeNet用于车颜色识别相关推荐

  1. PAMTRI:用于车辆重新识别的姿势感知多任务学习

    Today, we will discuss an unorthodox paper by NVIDIA Labs on Vehicle Re Identification. 今天,我们将讨论NVID ...

  2. OpenCV形状颜色识别Java,Android

    纯java代码实现安卓的CV识别图形形状颜色 半年前开的帖,一直在忙 回来更新下. cv环境已经没有了,图就用以前的吧,代码我贴出来,凭记忆解释一下,算法实现的,我会说明逻辑 首先,环境是OpenCV ...

  3. unity随机方向的代码_ECCV 2020 目前用于车辆重识别(vehicle reID)中最大的合成车辆数据集(代码开源)...

    论文题目: Simulating Content Consistent Vehicle Datasets with Attribute Descent 论文地址: https://arxiv.org/ ...

  4. 一种用于茶叶病害识别的低阶学习方法

    一种用于茶叶病害识别的低阶学习方法 1.研究内容 通过提取茶叶病害图像的颜色和纹理特征,利用支持向量机(SVM)方法对病害图像进行分割.以分割后的病斑图像为输入,通过改进的条件深度卷积生成对抗网络生成 ...

  5. Android扫车牌号识别技术SDK

    Android扫车牌号识别技术SDK Android扫车牌号识别技术SDK描述 Android扫车牌号识别技术SDK是我公司开发的基于移动平台的车牌识别软件开发包,支持android.iOS等多种主流 ...

  6. RT-Thread学习笔记|TCS34725 RGB 颜色识别传感器详解

    rt-thread是什么? RT-Thread 是一个集实时操作系统(RTOS)内核.中间件组件和开发者社区于一体的技术平台,组件完整丰富.高度可伸缩.简易开发.超低功耗.高安全性的物联网操作系统.R ...

  7. 备赛笔记:Opencv学习:颜色识别

    OpenCV颜色识别一般要以下步骤: 1 颜色空间转换,将BGR转换为HSV,用色调区分颜色 2 按照阈值滤出所识别的颜色 3 消除噪点,平滑边界 3 提取连续域,提取要识别的颜色 1 HSV H:色 ...

  8. OPenCV4-颜色识别(一)调色板和简单的颜色识别

    OPenCV4-颜色识别(一)调色板和简单的颜色识别 使用 OPenCV4 做颜色识别十分简单.本文章使用 python 语言来实现一个调色板和简单的颜色识别. 1.调色板 绘制一个调色板对颜色识别非 ...

  9. 数字图像处理(DIP)实验4 目标颜色识别

    数字图像处理(DIP)实验4 目标颜色识别 数字图像处理课程相关文章 传送门 https://blog.csdn.net/qq_46164507/article/details/122503851 博 ...

最新文章

  1. 报表控件NCreport教程:报表高级设计
  2. AVL树入门(转载)
  3. nginx已添加systemctl,但不能开机自启动问题
  4. 疯狂ios讲义之网页控件(UIWebView)
  5. Spring AOP详解一文搞懂@Aspect、@Pointcut、@Before、@Around、@After、@AfterReturning、@AfterThrowing
  6. php time相差12小时_PHP获取时间比实际时间少8小时的问题
  7. CSS: 首字母字体变大时下划线不对齐的解决方法
  8. 如何修改Vs2008环境变量
  9. python将十进制转为二进制_如何用Python将十进制数字转为二进制,以及将二进制转为十六进制?...
  10. 2017CCPC秦皇岛 L题One-Dimensional MazeZOJ3992【模拟】
  11. javascript 将时间戳格式化
  12. 夯实Java基础(八)——代码块
  13. linux进程属性,linux进程属性
  14. 无线充qi协议c语言详解,无线充电Qi协议正向通信FSK的解调设计
  15. Prisma(一)——基础
  16. 胡灵 c语言,清华作业们男女主角现身
  17. 腾讯云容器安全已支持检测Apache Log4j2漏洞
  18. IPsec-Tools配置之racoon
  19. 多御浏览器新出的手机版本有什么功能?
  20. 做设计这么久,UED/UXD、IXD、GUI到底是什么?你分清了吗

热门文章

  1. crc校验c语言程序,C语言:CRC校验
  2. STM32 学习笔记3-智能小车-红外避障
  3. 翩翩一叶舟 載不动许多愁
  4. Netfilter 网桥日志
  5. Unix awk使用手册(转)
  6. HTC G1 Dream使用总结
  7. C++ 第17章 输入、输出和文件(iostream/ostream/fstream)
  8. 如何提高网络广告点击率
  9. Win10打字输入法不显示输入框怎么办?
  10. 1.ElasticSearch系列之集群部署