虽然ChatGPT推动了人工智能的发展,但它还没有找到合适的盈利模式。这让投资者微软不得不亲自上阵,充当OpenAI的销售人员。微软甚至提着2.5升的矿泉水,背着电脑包,四处奔波,努力寻找行业的实际应用和产品落地。
在计算机视觉领域,人工智能已经开始赚到钱了。人们用AI生成衣服图片代替模特,也用AI生成游戏怪物取代特效师。甚至在传统的图书出版行业中,也有书籍开始使用AI生成插图。
因此,我打算探讨人工智能在视觉处理方面的原理,并通过实践,从零开始创建一个图像分类的开放能力。
为了让大家直观感受AI在视觉处理上的能力,我将先演示一个低成本的图像分类代码。后面,我们将详细讲解原理,并逐步构建自己的系统。
```python from transformers import AutoImageProcessor, ResNetForImageClassification import torch from PIL import Image
processor = AutoImageProcessor.frompretrained("model") model = ResNetForImageClassification.frompretrained("model")
image = Image.open("pics/dog.jpeg") inputs = processor(image, return_tensors="pt")
with torch.nograd(): logits = model(**inputs).logits predictedlabel = logits.argmax(-1).item()
print(model.config.id2label[predicted_label]) ```
这段代码展示了如何使用transformers库加载一个预训练的图像分类模型,并对一张图片进行分类。
以下是项目的文件结构:
|---- model # 模型权重
|---- config.json
|---- preprocessor_config.json
|---- pytorch_model.bin
|---- pics # 测试图片
|---- dog.jpeg # 一张狗的图片
|---- main.py # 主程序
模型文件夹中包含了预训练的模型权重,可以直接使用。此外,还需安装相关依赖库,例如transformers
和torch
。
我测试了几种动物的图片,发现该模型不仅能区分猫、狗、老鼠和兔子,还能进一步识别出具体的品种。例如,它能识别出金毛犬和松鼠。
计算机视觉的核心在于理解图像的构成。我们知道红、绿、蓝(RGB)是三原色,通过不同组合可以生成各种色彩。每张图像实际上是由许多像素点组成的,每个像素点由RGB三个数值表示。
图像处理离不开卷积神经网络(CNN)。CNN包含卷积层、池化层和全连接层。卷积层负责提取图像的特征,池化层则通过降采样减少数据量,全连接层则进行最终分类。
接下来,我们将通过TensorFlow搭建一个图像分类模型,用于识别天气图片。我们将使用3个类别:晴天、多云、有雨。
```python import tensorflow as tf from tensorflow.keras import layers from tensorflow.keras.models import Sequential
model = Sequential([ layers.Rescaling(1./255, input_shape=(200, 200, 3)), layers.Conv2D(16, 3, padding='same', activation='relu'), layers.MaxPooling2D(), layers.Conv2D(32, 3, padding='same', activation='relu'), layers.MaxPooling2D(), layers.Conv2D(64, 3, padding='same', activation='relu'), layers.MaxPooling2D(), layers.Dropout(0.2), layers.Flatten(), layers.Dense(128, activation='relu'), layers.Dense(3) ]) ```
```python
trainds = tf.keras.utils.imagedatasetfromdirectory( "datasets", imagesize=(200, 200), batchsize=24 )
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy'])
cpcallback = tf.keras.callbacks.ModelCheckpoint(filepath="tf2/checkpoint", saveweightsonly=True) model.fit(trainds, epochs=10, callbacks=[cp_callback]) ```
```python
model.load_weights("tf2/checkpoint")
img = tf.keras.utils.loadimg("test.png", targetsize=(200, 200)) imgarray = tf.keras.utils.imgtoarray(img) imgarray = tf.expanddims(imgarray, 0)
predictions = model.predict(img_array) score = tf.nn.softmax(predictions[0])
print("分类 {}, 得分 {:.2f}".format(names[np.argmax(score)], 100 * np.max(score))) ```
通过上述步骤,我们成功搭建了一个图像分类模型,并进行了训练和预测。如果你想深入了解更多细节,可以查看我在GitHub上的完整代码。
希望这篇文章对你有所帮助,祝你在人工智能领域取得成功!