Looking at pictures to identify cars, are there too many BYD models to recognize? Python develops and implements BYD car model image recognition system based on VGG

This year, all the new forces in domestic car manufacturing have performed well. BYD’s cars are the most popular ones around. This is also due to BYD’s huge product network. Sometimes it is easy to confuse different car models. Today, take advantage of this opportunity. When I have time, I want to develop an image recognition system to identify different BYD models. First, let’s take a look at the example effect:

VGG (Visual Geometry Group) is a classic convolutional neural network model proposed by Simonyan and Zisserman in 2014. The construction principle of the VGG model is as follows:

  1. The input image is passed to the model in fixed dimensions.

  2. The VGG model consists of a series of convolutional layers and pooling layers. Each convolutional layer uses a small-sized (usually 3x3) convolution kernel for convolution operations, and uses a ReLU activation function for nonlinear transformation. The pooling layer usually uses the Max Pooling operation to reduce the size of the feature map by subsampling non-overlapping areas of the input image.

  3. The core idea of ​​the VGG model is to increase the depth of the model through the stacking of multiple convolutional layers and pooling layers. VGG models are named after different configurations, such as VGG16 and VGG19, indicating the number and order of convolutional and pooling layers in the model.

  4. On top of the VGG model, there are usually some fully connected layers. These fully connected layers flatten the feature map into a one-dimensional vector and perform classification through a series of fully connected layers. The last layer uses the softmax activation function to output probability distributions of different categories for image classification tasks.

The VGG model builds a deep neural network by stacking multiple convolutional and pooling layers to learn and encode image features. The depth and simple convolutional layer structure of the VGG model make it a classic benchmark model that has achieved good performance in computer vision tasks such as image classification.

The VGG-16 and VGG-19 models are mainly used in daily life. The corresponding model implementation is given here based on keras, which can be directly integrated into your own project for use.

【VGG-16】

#coding=utf-8  
from keras.models import Sequential  
from keras.layers import Dense,Flatten,Dropout  
from keras.layers.convolutional import Conv2D,MaxPooling2D  
import numpy as np  
seed = 7  
np.random.seed(seed)  
  
model = Sequential()  
model.add(Conv2D(64,(3,3),strides=(1,1),input_shape=(224,224,3),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(64,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Conv2D(128,(3,2),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(128,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Flatten())  
model.add(Dense(4096,activation='relu'))  
model.add(Dropout(0.5))  
model.add(Dense(4096,activation='relu'))  
model.add(Dropout(0.5))  
model.add(Dense(1000,activation='softmax'))  
model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])  
model.summary() 

【VGG-19】

#coding=utf-8  
from keras.models import Sequential  
from keras.layers import Dense,Flatten,Dropout  
from keras.layers.convolutional import Conv2D,MaxPooling2D  
import numpy as np  
seed = 7  
np.random.seed(seed)  
  
model = Sequential()  
model.add(Conv2D(64,(3,3),strides=(1,1),input_shape=(224,224,3),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(64,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Conv2D(128,(3,2),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(128,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Flatten())  
model.add(Dense(4096,activation='relu'))  
model.add(Dropout(0.5))  
model.add(Dense(4096,activation='relu'))  
model.add(Dropout(0.5))  
model.add(Dense(1000,activation='softmax'))  
model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])  
model.summary()  

The data set used in this article comes from network data collection and manual processing. It mainly collects more than 100 common Chinese medicinal materials. The data set loading and analysis processing is implemented as follows:

# 加载解析创建数据集
if not os.path.exists("dataset.json"):
    train_dataset = []
    test_dataset = []
    all_dataset = []
    classes_list = os.listdir(datasetDir)
    classes_list.sort()
    num_classes = len(classes_list)
    if not os.path.exists("labels.json"):
        with open("labels.json","w") as f:
            f.write(json.dumps(classes_list))
    print("classes_list: ", classes_list)
    for one_label in os.listdir(datasetDir):
        oneDir = datasetDir + one_label + "/"
        for one_pic in os.listdir(oneDir):
            one_path = oneDir + one_pic
            one_ind = classes_list.index(one_label)
            all_dataset.append([one_ind, one_path])
    train_ratio = 0.90
    train_num = int(train_ratio * len(all_dataset))
    all_inds = list(range(len(all_dataset)))
    train_inds = random.sample(all_inds, train_num)
    test_inds = [one for one in all_inds if one not in train_inds]
    for one_ind in train_inds:
        train_dataset.append(all_dataset[one_ind])
    for one_ind in test_inds:
        test_dataset.append(all_dataset[one_ind])

Let’s take a brief look at the example data:

【BYD e2】

【Equation Leopard 5】

[BYD Frigate 07]

[BYD looks up to U8]

Not all car models have been collected here. This is just a project of personal interest and practice. The list of car models I have collected is as follows:

The default is 100 epoch iterative calculations. After the training is completed, the overall training process is visualized, as shown below:
[Accuracy Curve]

【Loss Curve】

An example of visual reasoning is as follows:

If you are interested, you can collect a more complete and fine-grained vehicle model data set to develop and build your own recognition model.

Guess you like

Origin blog.csdn.net/Together_CZ/article/details/134976137