CNN车型分类总结

  最近在做一个CNN车型分类的任务,首先先简要介绍一下这个任务。

  总共30个类,训练集图片为车型图片,类似监控拍摄的车型图片,训练集测试集安6:4分,训练集有22302份数据,测试集有14893份数据。

  首先使用的是VGGNet网络,

nn.Sequential {
[input -> (1) -> (2) -> (3) -> (4) -> (5) -> (6) -> (7) -> (8) -> (9) -> (10) -> (11) -> (12) -> (13) -> (14) -> (15) -> (16) -> (17) -> (18) -> (19) -> (20) -> (21) -> (22) -> (23) -> (24) -> (25) -> output]
(1): nn.DataLayer
(2): cudnn.SpatialConvolution(3 -> 64, 6x6, 2,2, 2,2)
(3): cudnn.ReLU
(4): cudnn.SpatialMaxPooling(2x2, 2,2)
(5): cudnn.SpatialConvolution(64 -> 128, 5x5, 2,2, 2,2)
(6): cudnn.ReLU
(7): cudnn.SpatialMaxPooling(2x2, 1,1)
(8): cudnn.SpatialConvolution(128 -> 256, 3x3, 2,2, 2,2)
(9): cudnn.ReLU
(10): cudnn.SpatialMaxPooling(2x2, 1,1)
(11): cudnn.SpatialConvolution(256 -> 512, 2x2)
(12): cudnn.ReLU
(13): cudnn.SpatialMaxPooling(2x2, 1,1)
(14): cudnn.SpatialConvolution(512 -> 512, 2x2)
(15): cudnn.ReLU
(16): cudnn.SpatialMaxPooling(2x2, 1,1)
(17): nn.View(12800)
(18): nn.Linear(12800 -> 4096)
(19): cudnn.ReLU
(20): nn.Dropout(0.500000)
(21): nn.Linear(4096 -> 4096)
(22): cudnn.ReLU
(23): nn.Dropout(0.500000)
(24): nn.Linear(4096 -> 30)
(25): nn.LogSoftMax
}

  网络参数如上。五个卷积层,三个全连接层。

  数据预处理:每个图片scale成3*150*150大小。

  实验结果:十余小时90%的正确率。(据之前结果最高到92%)

  微调:使用Imagenet训练处的DataLayer,十余小时正确率达92%。(据之前结果最高到97%)

  注意(源代码中数据预处理与训练过程中有一点不匹配,会导致维度出错的bug,具体错误请自行调试)

  

  然后使用了Residual Learning的方法,使用的模型是ResNet-50。Model详见:http://ethereon.github.io/netscope/#/gist/db945b393d40bfa26006

  使用了之前用ImageNet训练好的ResNet-50的模型进行retrain,将最后的全连接2048-1000的Linear换成了2048-30的Linear。

  训练结果:十余小时94%的TOP1正确率。

  网络结构需参考: BatchNormalization论文。

  ResNet-50网络所需内存达到4000MB左右,需要两个GPU同时运行才能跑。

  结构中所采用的1*1卷积大大减少了网络的参数,首先1*1进行降维,3*3卷积后再使用1*1进行升维。每次维度变化都为4倍。

  数据预处理:输入为3*224*224。

  收敛速度曲线与论文中曲线类似:

时间: 2024-11-01 13:24:40

CNN车型分类总结的相关文章

CNN文本分类

CNN用于文本分类本就是一个不完美的解决方案,因为CNN要求输入都是一定长度的,而对于文本分类问题,文本序列是不定长的,RNN可以完美解决序列不定长问题, 因为RNN不要求输入是一定长度的.那么对于CNN用于解决文本分类问题而言,可以判断文本的长度范围,例如如果大多数文本长度在100以下,极少数在100以上,那就 可以设定文本长度是100,不足100的文本用padding补齐,多于100的文本则截断.具体过程如下图: 首先把分词之后的句子按照设定的维度展开,这里维度是9,每个单词都会有一个向量表

pytorch -- CNN 文本分类 -- 《 Convolutional Neural Networks for Sentence Classification》

论文  < Convolutional Neural Networks for Sentence Classification>通过CNN实现了文本分类. 论文地址: 666666 模型图: 模型解释可以看论文,给出code and comment: 1 # -*- coding: utf-8 -*- 2 # @time : 2019/11/9 13:55 3 4 import numpy as np 5 import torch 6 import torch.nn as nn 7 impor

简单的CNN文本分类

假设我们一句话有十个词,每个词语都可以用128维来表示,那么一句话就是一个10*128的矩阵图片.建立一个如下图的卷积神经网络:上面对这个图片进行卷积核大小分别为2.3.4的卷积计算形成feature_map 最后通过softmax进行分类 代码如下: #coding:utf-8 import tensorflow as tf import numpy as np import pickle class TextCNN(object): """ A CNN for text

tensorflow学习之(十)使用卷积神经网络(CNN)分类手写数字0-9

#卷积神经网络cnn import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #数据包,如果没有自动下载 number 1 to 10 data mnist = input_data.read_data_sets('MNIST_data',one_hot=True) #用测试集来评估神经网络的准确度 def computer_accuracy(v_xs,v_ys): global pre

深度学习(主要是CNN)用于图片的分类和检测总结

前言: 主要总结一下自己最近看文章和代码的心得. 1. CNN用于分类:具体的过程大家都知道,无非是卷积,下采样,激活函数,全连接等.CNN用于分类要求它的输入图片的大小是固定的(其实不单单是CNN,很多其它的方法也是这样的),这是它的一个不足之处之一.目前的大部分CNN都是用来做分类比较多. 2. CNN用于检测:主要的方法有两种,细分一下有三种, 第一种最为简单和暴力的,通过滑动窗口的方法,提取一个固定大小的图像patch输入到CNN网络中,得到该patch的一个类别,这样得到一个图片密集的

基于卷积神经网络(CNN)的中文垃圾邮件检测

前言 跳过废话,直接看正文 文本分类任务是一个经久不衰的课题,其应用包括垃圾邮件检测.情感分析等. 传统机器学习的做法是先进行特征工程,构建出特征向量后,再将特征向量输入各种分类模型(贝叶斯.SVM.神经网络等)进行分类. 随着深度学习的发展以及RNN.CNN的陆续出现,特征向量的构建将会由网络自动完成,因此我们只要将文本的向量表示输入到网络中就能够完成自动完成特征的构建与分类过程. 就分类任务而言,CNN比RNN更为合适.CNN目前在图像处理方向应用最为广泛,在文本处理上也有一些的应用.本文将

卷积神经网络(CNN)基础介绍

本文是对卷积神经网络的基础进行介绍,主要内容包含卷积神经网络概念.卷积神经网络结构.卷积神经网络求解.卷积神经网络LeNet-5结构分析.卷积神经网络注意事项. 一.卷积神经网络概念 上世纪60年代.Hubel等人通过对猫视觉皮层细胞的研究,提出了感受野这个概念.到80年代.Fukushima在感受野概念的基础之上提出了神经认知机的概念,能够看作是卷积神经网络的第一个实现网络,神经认知机将一个视觉模式分解成很多子模式(特征),然后进入分层递阶式相连的特征平面进行处理,它试图将视觉系统模型化,使其

【深度学习篇】---CNN和RNN结合与对比,实例讲解

一.前述 CNN和RNN几乎占据着深度学习的半壁江山,所以本文将着重讲解CNN+RNN的各种组合方式,以及CNN和RNN的对比. 二.CNN与RNN对比 1.CNN卷积神经网络与RNN递归神经网络直观图 2.相同点:    2.1. 传统神经网络的扩展.    2.2. 前向计算产生结果,反向计算模型更新.    2.3. 每层神经网络横向可以多个神经元共存,纵向可以有多层神经网络连接. 3.不同点    3.1. CNN空间扩展,神经元与特征卷积:RNN时间扩展,神经元与多个时间输出计算   

基于tensorflow的CNN卷积神经网络对Fasion-MNIST数据集的分类器

写一个基于tensorflow的cnn,分类fasion-MNIST数据集 这个就是fasion-mnist数据集了 先上代码,在分析: import tensorflow as tf import pandas as pd import numpy as np config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.3 train_data = pd.read_csv('test.csv'