CLIP代码运行

CLIP代码运行

整体步骤

1.上传代码至服务器
2.创建conda环境clip_dev
3.安装依赖pytorch、torchvision依赖
4.安装其他依赖
5.在项目路径下
6.运行项目

具体实现

  1. 上传代码至服务器

  2. 创建conda环境clip_dev

    conda create clip_dev python=3.8
    # 如果镜像源出现问题导致无法创建上述环境,先用下行代码换回默认源再创建
    conda config --remove-key channels 
    
  3. 安装依赖pytorch、torchvision依赖(conda不行用pip

    # 先检查一下nvidia的最高版本
    nvidia-smi
    # 复制pytorch安装代码(https://pytorch.org/get-started/previous-versions/)
    pip install torch==2.2.1 torchvision==0.17.1 torchaudio==2.2.1 --index-url https://download.pytorch.org/whl/cu118
    
  4. 安装其他依赖

    # 根据官网提示/requirements.txt文件安装其他依赖
    pip install ftfy regex tqdm
    
    #清华源 -i https://pypi.tuna.tsinghua.edu.cn/simple
    
  5. 安装setup.pysetup.py文件会遍历requirements.txt,并自动安装其中包含的依赖,因此实际上5包含了4,按理说只要执行5就够了,但是由于pip安装常常需要镜像源,一般还是先用4安装,再用5作为双层保险)

    setup.py的作用有两个:

    1. 自动安装requirements.txt的依赖
    2. 将整个项目构建成一个包,让它可以在其他项目中作为一个依赖进行导入
    # 先进入项目路径下
    cd CLIP_MAIN
    # 安装setup.py
    pip install -e .
    或pip install .
    
  6. 运行项目

    #根据官网提示,在项目路径下创建文件myEntry.py,复制官网提供的代码
    import torch
    import clip
    from PIL import Image
    
    device = "cuda" if torch.cuda.is_available() else "cpu"
    model, preprocess = clip.load("ViT-B/32", device=device)
    
    image = preprocess(Image.open("CLIP.png")).unsqueeze(0).to(device)
    text = clip.tokenize(["a diagram", "a dog", "a cat"]).to(device)
    
    with torch.no_grad():
        image_features = model.encode_image(image)
        text_features = model.encode_text(text)
        
        logits_per_image, logits_per_text = model(image, text)
        probs = logits_per_image.softmax(dim=-1).cpu().numpy()
    
    print("Label probs:", probs)  # prints: [[0.9927937  0.00421068 0.00299572]]
    
    #执行myEntry.py
    python myEntry.py
    
  7. 调试项目(Debug-参考利用Docker容器部署GLIP项目最后的Debug部分)

    1. 创建launch.json文件。点击vscode左侧的run and debug窗口=> create a launch.json =>选择Python debugger => Python file,然后就创建了一个launch.json文件

    2. 点击右下角的Python Interpreter,选择服务器端的Python解释器(我选择的是之前安装conda创建的clip_dev这一虚拟环境的Python解释器)

    3. 修改launch.json文件内容

      参考原本开启训练的代码python myEntry.py修改launch.json

      # 修改项目路径为开启训练时的python文件myEntry.py的绝对路径
      # 修改最后一项"python"对应的值,表示python解释器的地址。如果是conda环境,可以直接在环境中输入which python,即可获得该地址(这一步应该和步骤2是重复的)
      {
          // Use IntelliSense to learn about possible attributes.
          // Hover to view descriptions of existing attributes.
          // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
          "version": "0.2.0",
          "configurations": [
              {
                  "name": "Clip Debug",
                  "type": "debugpy",
                  "request": "launch",
                  "program": "${file}", # 将值修改为/data/xxx/CLIP_main/myEntry.py
                  "console": "integratedTerminal",
                  "python": "/home/xjingyu/anaconda3/envs/clip_dev/bin/python"
              }
          ]
      }
      
    4. 回到文件目录,打断点调试

### 复现CLIP代码的方法 #### 一、环境搭建 复现CLIP代码的第一步是构建合适的开发环境。由于CLIP项目的依赖较为复杂,建议按照官方文档中的说明安装必要的库和工具[^1]。如果遇到兼容性问题,可以尝试使用虚拟环境隔离不同版本的Python包。 以下是推荐的环境配置流程: ```bash conda create -n clip_env python=3.8 conda activate clip_env pip install torch torchvision transformers opencv-python matplotlib scikit-learn ``` 对于GPU支持的情况,需确认PyTorch已正确绑定CUDA驱动程序并验证其功能正常运行。 #### 二、模型结构设计 在网络架构方面,通常会采用预训练好的CLIP编码器作为基础模块,并在其之上叠加自定义映射层完成特定任务的学习过程[^2]。这种做法能够有效减少计算资源消耗的同时保持较高的泛化能力。 具体而言,可以通过如下方式初始化两个独立但相互关联的部分——即固定权重不变的基础视觉/文本表示提取组件以及可微调的目标转换操作子: ```python import torch.nn as nn class CustomModel(nn.Module): def __init__(self, base_model, embed_dim): super(CustomModel, self).__init__() # 使用预加载的CLIP模型实例 self.base_model = base_model # 新增线性变换层用于适配下游应用场景需求 self.mapping_layer = nn.Linear(embed_dim, num_classes) def forward(self, input_data): features = self.base_model(input_data) # 提取高层语义特征向量 output = self.mapping_layer(features) # 转换至类别空间维度 return output ``` 注意这里仅展示了简化版框架示意;实际应用时还需考虑更多细节因素比如正则项设置等[^3]。 #### 三、数据处理与训练策略 当准备替换个人专属的数据源进入上述体系当中开展进一步探索之前 ,应当先做好充分准备工作 。这包括但不限于 :标注好每张图片对应的标签信息文件夹整理清晰等等步骤之后再着手编写相应读取逻辑脚本以便于后续高效利用这些素材参与整个学习周期之中去达成预期目标效果最佳实践分享给大家参考借鉴一下吧😊 另外值得注意的一点就是关于损失函数的选择上也存在多种可能性可供挑选依据具体情况而定比如说交叉熵误差衡量标准就非常适合用来解决多分类场景下的优化难题等方面表现优异[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值