利用Xception网络判断图片是不是狗,入门用的

本文介绍使用Xception深度学习模型来判断一张图片是否为狗的方法。通过加载预训练权重,设置狗的ImageNet类别ID,并对输入图片进行预处理,实现对图片中狗的精确识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用Xception网络判断图片是不是狗,更多办法,查阅

https://keras-cn.readthedocs.io/en/latest/other/application/

from keras.applications import *
import cv2
import numpy as np

model_pre = xception.Xception(weights='imagenet')
Dogs = set(['n02085620', 'n02085782', 'n02085936', 'n02086079', 'n02086240', 'n02086646', 'n02086910', 'n02087046', 'n02087394', 'n02088094', 'n02088238',
            'n02088364', 'n02088466', 'n02088632', 'n02089078', 'n02089867', 'n02089973', 'n02090379', 'n02090622', 'n02090721', 'n02091032', 'n02091134',
            'n02091244', 'n02091467', 'n02091635', 'n02091831', 'n02092002', 'n02092339', 'n02093256', 'n02093428', 'n02093647', 'n02093754', 'n02093859',
            'n02093991', 'n02094114', 'n02094258', 'n02094433', 'n02095314', 'n02095570', 'n02095889', 'n02096051', 'n02096177', 'n02096294', 'n02096437',
            'n02096585', 'n02097047', 'n02097130', 'n02097209', 'n02097298', 'n02097474', 'n02097658', 'n02098105', 'n02098286', 'n02098413', 'n02099267',
            'n02099429', 'n02099601', 'n02099712', 'n02099849', 'n02100236', 'n02100583', 'n02100735', 'n02100877', 'n02101006', 'n02101388', 'n02101556',
            'n02102040', 'n02102177', 'n02102318', 'n02102480', 'n02102973', 'n02104029', 'n02104365', 'n02105056', 'n02105162', 'n02105251', 'n02105412',
            'n02105505', 'n02105641', 'n02105855', 'n02106030', 'n02106166', 'n02106382', 'n02106550', 'n02106662', 'n02107142', 'n02107312', 'n02107574',
            'n02107683', 'n02107908', 'n02108000', 'n02108089', 'n02108422', 'n02108551', 'n02108915', 'n02109047', 'n02109525', 'n02109961', 'n02110063',
            'n02110185', 'n02110341', 'n02110627', 'n02110806', 'n02110958', 'n02111129', 'n02111277', 'n02111500', 'n02111889', 'n02112018', 'n02112137',
            'n02112350', 'n02112706', 'n02113023', 'n02113186', 'n02113624', 'n02113712', 'n02113799', 'n02113978'])

def pred_dog(imgpath):
    img = cv2.imread(imgpath)
    img = img[:, :, ::-1]
    img = cv2.resize(img, (299, 299))
    X = np.expand_dims(img, axis=0)
    X = xception.preprocess_input(X)
    preds = model_pre.predict(X)
    dps = xception.decode_predictions(preds, 5)
    is_dog = False
    features = dps[0]
    for i, val in enumerate(features):
        category = val[0]
        if category in Dogs:
            is_dog = True
            break
    if not is_dog:
        print(imgpath, is_dog)
    return is_dog

 

### Xception 神经网络架构详解 #### 架构起源与发展背景 Xception 的名称源自 “Extreme Inception”,该模型是在 Inception 架构基础上进行了扩展和改进[^1]。Inception 架构由 Google 团队提出,旨在通过引入多尺度卷积操作来优化深层卷积神经网络中的计算效率与参数管理。 #### 主要创新点——深度可分离卷积 不同于传统的标准卷积层,在 Xception 中采用了深度可分离卷积 (Depthwise Separable Convolution),这是一种高效的替代方案。具体来说,这种技术将常规的空间卷积分解成两个独立的过程:首先是逐通道的卷积(depthwise convolution),接着是对每个位置上的特征图进行线性组合(pointwise convolution)。这种方法不仅减少了大量冗余运算,还保持甚至提升了模型性能[^3]。 #### 类似 ResNet 的残差结构应用 为了进一步提升训练效果并加速收敛速度,Xception 还借鉴了 Residual Network (ResNet) 的设计理念,在网络内部加入了跳跃连接或称为捷径路径(shortcut connections)[^2]。这些额外建立起来的数据流使得梯度可以更顺畅地向前传播,从而有效缓解了深层网络常见的梯度消失问题,并提高了最终分类准确性。 ```python import tensorflow as tf from tensorflow.keras import layers, models def create_xception_block(input_tensor): residual = input_tensor # Depthwise separable convolutions x = layers.SeparableConv2D(128, kernel_size=(3, 3), padding='same')(input_tensor) x = layers.BatchNormalization()(x) x = layers.Activation('relu')(x) # Add shortcut connection from the start of this block to its end. output_tensor = layers.add([residual, x]) return output_tensor ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值