[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-christiansafka--img2vec":3,"tool-christiansafka--img2vec":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",146793,2,"2026-04-08T23:32:35",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108111,"2026-04-08T11:23:26",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":77,"owner_email":76,"owner_twitter":76,"owner_website":78,"owner_url":79,"languages":80,"stars":85,"forks":86,"last_commit_at":87,"license":88,"difficulty_score":32,"env_os":89,"env_gpu":90,"env_ram":89,"env_deps":91,"category_tags":99,"github_topics":100,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":103,"updated_at":104,"faqs":105,"releases":141},5718,"christiansafka\u002Fimg2vec","img2vec",":fire: Use pre-trained models in PyTorch to extract vector embeddings for any image","img2vec 是一个基于 PyTorch 的开源工具，旨在将任意图片快速转化为数学向量（特征嵌入）。它利用预训练的深度学习模型，把复杂的图像信息压缩成一串数字，让计算机能够像理解文本一样“理解”图片内容。\n\n这一功能有效解决了图像非结构化数据难以直接计算和比较的难题。通过生成的向量，开发者可以轻松实现以图搜图、图片相似度排序、自动聚类分类以及图像压缩等高级应用，而无需从头训练庞大的神经网络。\n\nimg2vec 特别适合 Python 开发者、数据科学家及 AI 研究人员使用。无论是构建推荐系统，还是进行图像数据分析，它都能作为高效的底层库集成到项目中。其核心亮点在于灵活性与便捷性：支持 ResNet、VGG、EfficientNet 等多种主流模型，用户可自由切换以平衡速度与精度；同时提供 GPU 加速选项，并允许高级用户指定提取特定网络层的特征，满足定制化需求。只需几行代码，即可将图片处理流程融入现有应用，大幅降低图像特征提取的技术门槛。","# Image 2 Vec with PyTorch\n\nMedium post on building the first version from scratch:  https:\u002F\u002Fbecominghuman.ai\u002Fextract-a-feature-vector-for-any-image-with-pytorch-9717561d1d4c\n\n### Applications of image embeddings:\n - Ranking for recommender systems\n - Clustering images to different categories\n - Classification tasks\n - Image compression\n\n## Available models\n|Model name|Return vector length|\n|----|----|\n|Resnet-18|512|\n|Resnet-34|512|\n|Resnet-50|2048|\n|Resnet-101|2048|\n|Resnet-152|2048|\n|Alexnet|4096|\n|Vgg-11|4096|\n|Vgg-13|4096|\n|Vgg-16|4096|\n|Vgg-19|4096|\n|Densenet121|1024|\n|Densenet161| 2208|\n|Densenet169|1664|\n|Densenet201|1920|\n|efficientnet_b0|1280|\n|efficientnet_b1|1280|\n|efficientnet_b2|1408|\n|efficientnet_b3|1536|\n|efficientnet_b4|1792|\n|efficientnet_b5|2048|\n|efficientnet_b6|2304|\n|efficientnet_b7|2560|\n\n## Installation\n\nTested on Python 3.6 and torchvision 0.11.0 (nightly, 2021-09-25)\n\nRequires Pytorch: http:\u002F\u002Fpytorch.org\u002F\n\n```conda install -c pytorch-nightly torchvision```\n\n```pip install img2vec_pytorch```\n\n## Run test\n\n```python -m img2vec_pytorch.test_img_to_vec```\n\n## Using img2vec as a library\n```python\nfrom img2vec_pytorch import Img2Vec\nfrom PIL import Image\n\n# Initialize Img2Vec with GPU\nimg2vec = Img2Vec(cuda=True)\n\n# Read in an image (rgb format)\nimg = Image.open('test.jpg')\n# Get a vector from img2vec, returned as a torch FloatTensor\nvec = img2vec.get_vec(img, tensor=True)\n# Or submit a list\nvectors = img2vec.get_vec(list_of_PIL_images)\n```\n\n##### For running the example, you will additionally need:\n * Pillow:  ```pip install Pillow```\n * Sklearn ```pip install scikit-learn```\n\n## Running the example\n```git clone https:\u002F\u002Fgithub.com\u002Fchristiansafka\u002Fimg2vec.git```\n\n```cd img2vec\u002Fexample```\n\n```python test_img_similarity.py```\n\n#### Expected output\n```\nWhich filename would you like similarities for?\ncat.jpg\n0.72832 cat2.jpg\n0.641478 catdog.jpg\n0.575845 face.jpg\n0.516689 face2.jpg\n\nWhich filename would you like similarities for?\nface2.jpg\n0.668525 face.jpg\n0.516689 cat.jpg\n0.50084 cat2.jpg\n0.484863 catdog.jpg\n```\nTry adding your own photos!\n\n\n#### Img2Vec Params\n**cuda** = (True, False) &nbsp; # Run on GPU? &nbsp; &nbsp; default: False\u003Cbr>\n**model** = ('resnet-18', 'efficientnet_b0', etc.) &nbsp; # Which model to use? &nbsp; &nbsp; default: 'resnet-18'\u003Cbr>\n\n## Advanced users \n----\n\n### Read only file systems\n\nIf you use this library from the app running in read only environment (for example, docker container), \nspecify writable directory where app can store pre-trained models. \n\n```bash\nexport TORCH_HOME=\u002Ftmp\u002Ftorch\n```\n\n### Additional Parameters\n\n**layer** = 'layer_name' or int &nbsp; # For advanced users, which layer of the model to extract the output from.&nbsp;&nbsp; default: 'avgpool' \u003Cbr>\n**layer_output_size** = int &nbsp; # Size of the output of your selected layer\u003Cbr>\n**gpu** = (0, 1, etc.) &nbsp; # Which GPU to use? &nbsp; &nbsp; default: 0\u003Cbr>\n\n### [Resnet-18](http:\u002F\u002Fpytorch-zh.readthedocs.io\u002Fen\u002Flatest\u002F_modules\u002Ftorchvision\u002Fmodels\u002Fresnet.html)\nDefaults: (layer = 'avgpool', layer_output_size = 512)\u003Cbr>\nLayer parameter must be an string representing the name of a  layer below\n```python\nconv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False)\nbn1 = nn.BatchNorm2d(64)\nrelu = nn.ReLU(inplace=True)\nmaxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)\nlayer1 = self._make_layer(block, 64, layers[0])\nlayer2 = self._make_layer(block, 128, layers[1], stride=2)\nlayer3 = self._make_layer(block, 256, layers[2], stride=2)\nlayer4 = self._make_layer(block, 512, layers[3], stride=2)\navgpool = nn.AvgPool2d(7)\nfc = nn.Linear(512 * block.expansion, num_classes)\n```\n### [Alexnet](http:\u002F\u002Fpytorch-zh.readthedocs.io\u002Fen\u002Flatest\u002F_modules\u002Ftorchvision\u002Fmodels\u002Falexnet.html)\nDefaults: (layer = 2, layer_output_size = 4096)\u003Cbr>\nLayer parameter must be an integer representing one of the layers below\n```python\nalexnet.classifier = nn.Sequential(\n            7. nn.Dropout(),                  \u003C - output_size = 9216\n            6. nn.Linear(256 * 6 * 6, 4096),  \u003C - output_size = 4096\n            5. nn.ReLU(inplace=True),         \u003C - output_size = 4096\n            4. nn.Dropout(),\t\t      \u003C - output_size = 4096\n            3. nn.Linear(4096, 4096),\t      \u003C - output_size = 4096\n            2. nn.ReLU(inplace=True),         \u003C - output_size = 4096\n            1. nn.Linear(4096, num_classes),  \u003C - output_size = 4096\n        )\n```\n\n### [Vgg](https:\u002F\u002Fpytorch.org\u002Fvision\u002Fstable\u002F_modules\u002Ftorchvision\u002Fmodels\u002Fvgg.html)\nDefaults: (layer = 2, layer_output_size = 4096)\u003Cbr>\n```python\nvgg.classifier = nn.Sequential(\n            nn.Linear(512 * 7 * 7, 4096),\n            nn.ReLU(True),\n            nn.Dropout(),\n            nn.Linear(4096, 4096),\n            nn.ReLU(True),\n            nn.Dropout(),\n            nn.Linear(4096, num_classes),\n        )\n```\n\n### [Densenet](https:\u002F\u002Fpytorch.org\u002Fvision\u002Fstable\u002F_modules\u002Ftorchvision\u002Fmodels\u002Fdensenet.html)\nDefaults: (layer = 1 from features, layer_output_size = 1024)\u003Cbr>\n```python\ndensenet.features = nn.Sequential(OrderedDict([\n\t('conv0', nn.Conv2d(3, num_init_features, kernel_size=7, stride=2,\n\t\t\t\t\t\tpadding=3, bias=False)),\n\t('norm0', nn.BatchNorm2d(num_init_features)),\n\t('relu0', nn.ReLU(inplace=True)),\n\t('pool0', nn.MaxPool2d(kernel_size=3, stride=2, padding=1)),\n]))\n```\n\n### [EfficientNet](https:\u002F\u002Farxiv.org\u002Fabs\u002F1905.11946)\nDefaults: (layer = 1 from features, layer_output_size = 1280 for efficientnet_b0 model)\u003Cbr>\n\n\n## To-do\n- Benchmark speed and accuracy\n- Add ability to fine-tune on input data\n- Export documentation to a normal place\n\n\n\n\n","# 使用 PyTorch 的图像向量\n\n一篇关于从头构建第一个版本的 Medium 文章：https:\u002F\u002Fbecominghuman.ai\u002Fextract-a-feature-vector-for-any-image-with-pytorch-9717561d1d4c\n\n### 图像嵌入的应用：\n- 推荐系统的排序\n- 将图像聚类到不同类别\n- 分类任务\n- 图像压缩\n\n## 可用模型\n|模型名称|返回向量长度|\n|----|----|\n|Resnet-18|512|\n|Resnet-34|512|\n|Resnet-50|2048|\n|Resnet-101|2048|\n|Resnet-152|2048|\n|Alexnet|4096|\n|Vgg-11|4096|\n|Vgg-13|4096|\n|Vgg-16|4096|\n|Vgg-19|4096|\n|Densenet121|1024|\n|Densenet161| 2208|\n|Densenet169|1664|\n|Densenet201|1920|\n|efficientnet_b0|1280|\n|efficientnet_b1|1280|\n|efficientnet_b2|1408|\n|efficientnet_b3|1536|\n|efficientnet_b4|1792|\n|efficientnet_b5|2048|\n|efficientnet_b6|2304|\n|efficientnet_b7|2560|\n\n## 安装\n\n已在 Python 3.6 和 torchvision 0.11.0（夜间版，2021-09-25）上测试通过。\n\n需要 PyTorch：http:\u002F\u002Fpytorch.org\u002F\n\n```conda install -c pytorch-nightly torchvision```\n\n```pip install img2vec_pytorch```\n\n## 运行测试\n\n```python -m img2vec_pytorch.test_img_to_vec```\n\n## 作为库使用 img2vec\n```python\nfrom img2vec_pytorch import Img2Vec\nfrom PIL import Image\n\n# 使用 GPU 初始化 Img2Vec\nimg2vec = Img2Vec(cuda=True)\n\n# 读取一张图像（RGB 格式）\nimg = Image.open('test.jpg')\n# 从 img2vec 获取向量，返回为 torch FloatTensor\nvec = img2vec.get_vec(img, tensor=True)\n# 或者提交一个列表\nvectors = img2vec.get_vec(list_of_PIL_images)\n```\n\n##### 运行示例还需要：\n * Pillow：```pip install Pillow```\n * Sklearn ```pip install scikit-learn```\n\n## 运行示例\n```git clone https:\u002F\u002Fgithub.com\u002Fchristiansafka\u002Fimg2vec.git```\n\n```cd img2vec\u002Fexample```\n\n```python test_img_similarity.py```\n\n#### 预期输出\n```\n您想查询哪张图片的相似度？\ncat.jpg\n0.72832 cat2.jpg\n0.641478 catdog.jpg\n0.575845 face.jpg\n0.516689 face2.jpg\n\n您想查询哪张图片的相似度？\nface2.jpg\n0.668525 face.jpg\n0.516689 cat.jpg\n0.50084 cat2.jpg\n0.484863 catdog.jpg\n```\n试试加入你自己的照片吧！\n\n#### Img2Vec 参数\n**cuda** = (True, False) &nbsp; # 是否在 GPU 上运行？ &nbsp; &nbsp; 默认：False\u003Cbr>\n**model** = ('resnet-18', 'efficientnet_b0', 等) &nbsp; # 使用哪个模型？ &nbsp; &nbsp; 默认：'resnet-18'\u003Cbr>\n\n## 高级用户\n----\n\n### 只读文件系统\n\n如果您在只读环境中运行此库（例如 Docker 容器），请指定一个可写目录，以便应用程序可以存储预训练模型。\n\n```bash\nexport TORCH_HOME=\u002Ftmp\u002Ftorch\n```\n\n### 其他参数\n\n**layer** = 'layer_name' 或 int &nbsp; # 对于高级用户，指定从模型的哪一层提取输出。&nbsp;&nbsp; 默认：'avgpool' \u003Cbr>\n**layer_output_size** = int &nbsp; # 您选择的层的输出大小\u003Cbr>\n**gpu** = (0, 1, 等) &nbsp; # 使用哪块 GPU？ &nbsp; &nbsp; 默认：0\u003Cbr>\n\n### [Resnet-18](http:\u002F\u002Fpytorch-zh.readthedocs.io\u002Fen\u002Flatest\u002F_modules\u002Ftorchvision\u002Fmodels\u002Fresnet.html)\n默认值：(layer = 'avgpool', layer_output_size = 512)\u003Cbr>\nLayer 参数必须是一个表示以下层名称的字符串：\n```python\nconv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False)\nbn1 = nn.BatchNorm2d(64)\nrelu = nn.ReLU(inplace=True)\nmaxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)\nlayer1 = self._make_layer(block, 64, layers[0])\nlayer2 = self._make_layer(block, 128, layers[1], stride=2)\nlayer3 = self._make_layer(block, 256, layers[2], stride=2)\nlayer4 = self._make_layer(block, 512, layers[3], stride=2)\navgpool = nn.AvgPool2d(7)\nfc = nn.Linear(512 * block.expansion, num_classes)\n```\n\n### [Alexnet](http:\u002F\u002Fpytorch-zh.readthedocs.io\u002Fen\u002Flatest\u002F_modules\u002Ftorchvision\u002Fmodels\u002Falexnet.html)\n默认值：(layer = 2, layer_output_size = 4096)\u003Cbr>\nLayer 参数必须是一个表示以下层之一的整数：\n```python\nalexnet.classifier = nn.Sequential(\n            7. nn.Dropout(),                  \u003C - 输出大小为 9216\n            6. nn.Linear(256 * 6 * 6, 4096),  \u003C - 输出大小为 4096\n            5. nn.ReLU(inplace=True),         \u003C - 输出大小为 4096\n            4. nn.Dropout(),\t\t      \u003C - 输出大小为 4096\n            3. nn.Linear(4096, 4096),\t      \u003C - 输出大小为 4096\n            2. nn.ReLU(inplace=True),         \u003C - 输出大小为 4096\n            1. nn.Linear(4096, num_classes),  \u003C - 输出大小为 4096\n        )\n```\n\n### [Vgg](https:\u002F\u002Fpytorch.org\u002Fvision\u002Fstable\u002F_modules\u002Ftorchvision\u002Fmodels\u002Fvgg.html)\n默认值：(layer = 2, layer_output_size = 4096)\u003Cbr>\n```python\nvgg.classifier = nn.Sequential(\n            nn.Linear(512 * 7 * 7, 4096),\n            nn.ReLU(True),\n            nn.Dropout(),\n            nn.Linear(4096, 4096),\n            nn.ReLU(True),\n            nn.Dropout(),\n            nn.Linear(4096, num_classes),\n        )\n```\n\n### [Densenet](https:\u002F\u002Fpytorch.org\u002Fvision\u002Fstable\u002F_modules\u002Ftorchvision\u002Fmodels\u002Fdensenet.html)\n默认值：(layer = 1 from features, layer_output_size = 1024)\u003Cbr>\n```python\ndensenet.features = nn.Sequential(OrderedDict([\n\t('conv0', nn.Conv2d(3, num_init_features, kernel_size=7, stride=2,\n\t\t\t\t\t\tpadding=3, bias=False)),\n\t('norm0', nn.BatchNorm2d(num_init_features)),\n\t('relu0', nn.ReLU(inplace=True)),\n\t('pool0', nn.MaxPool2d(kernel_size=3, stride=2, padding=1)),\n]))\n```\n\n### [EfficientNet](https:\u002F\u002Farxiv.org\u002Fabs\u002F1905.11946)\n默认值：(layer = 1 from features，layer_output_size = 1280 for efficientnet_b0 model)\u003Cbr>\n\n\n## 待办事项\n- 基准测试速度和精度\n- 添加对输入数据进行微调的功能\n- 将文档导出到正常位置","# img2vec 快速上手指南\n\nimg2vec 是一个基于 PyTorch 的轻量级库，能够将任意图像转换为特征向量（Embedding）。生成的向量可用于图像相似度搜索、推荐系统排序、聚类分析及图像分类等任务。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**：Linux, macOS 或 Windows\n*   **Python 版本**：推荐 Python 3.6+\n*   **核心依赖**：\n    *   PyTorch (需预先安装)\n    *   torchvision (推荐版本 0.11.0+)\n    *   Pillow (用于图像处理)\n    *   scikit-learn (运行示例代码时需要)\n\n> **国内加速建议**：\n> 安装 PyTorch 及相关依赖时，推荐使用清华源或阿里源以提升下载速度。\n> ```bash\n> pip install torch torchvision -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n> ```\n\n## 安装步骤\n\n您可以通过 `pip` 直接安装预编译包：\n\n```bash\npip install img2vec_pytorch\n```\n\n如果需要运行官方示例代码，请额外安装以下依赖：\n\n```bash\npip install Pillow scikit-learn\n```\n\n若需体验最新特性或进行开发测试，可安装 nightly 版本的 torchvision：\n\n```bash\nconda install -c pytorch-nightly torchvision\n```\n\n## 基本使用\n\n以下是使用 img2vec 提取图像特征向量的最简代码示例。\n\n### 1. 初始化与单张图片处理\n\n```python\nfrom img2vec_pytorch import Img2Vec\nfrom PIL import Image\n\n# 初始化 Img2Vec\n# cuda=True 表示使用 GPU 加速，若无 GPU 请设为 False 或省略该参数\nimg2vec = Img2Vec(cuda=True)\n\n# 读取图片 (RGB 格式)\nimg = Image.open('test.jpg')\n\n# 获取特征向量\n# tensor=True 返回 torch FloatTensor 类型，默认为 numpy 数组\nvec = img2vec.get_vec(img, tensor=True)\n\nprint(f\"向量形状：{vec.shape}\")\n```\n\n### 2. 批量处理图片\n\n您也可以直接传入一个 PIL Image 对象列表进行批量处理：\n\n```python\n# 假设 list_of_PIL_images 是一个包含多个 PIL Image 对象的列表\nvectors = img2vec.get_vec(list_of_PIL_images)\n```\n\n### 3. 自定义模型与参数\n\n初始化时可指定不同的预训练模型（如 `resnet-50`, `efficientnet_b0` 等）：\n\n```python\n# 使用 ResNet-50 模型，输出向量长度为 2048\nimg2vec = Img2Vec(model='resnet-50', cuda=True)\n\n# 或者指定 EfficientNet\n# img2vec = Img2Vec(model='efficientnet_b0', cuda=True)\n```\n\n常用模型及其对应的向量长度参考：\n*   `resnet-18`: 512\n*   `resnet-50`: 2048\n*   `vgg-16`: 4096\n*   `efficientnet_b0`: 1280\n\n### 4. 运行官方示例（图像相似度）\n\n如果您克隆了源代码仓库，可以运行内置的相似度测试脚本：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fchristiansafka\u002Fimg2vec.git\ncd img2vec\u002Fexample\npython test_img_similarity.py\n```\n\n运行后根据提示输入文件名，系统将输出与该图片最相似的其他图片及其相似度得分。","某时尚电商平台的算法团队正致力于优化其“以图搜图”功能，希望用户上传一张街拍照片后，系统能精准推荐风格相似的在售商品。\n\n### 没有 img2vec 时\n- **开发周期漫长**：工程师需手动编写复杂的卷积神经网络代码，从数据预处理到模型训练耗时数周，难以快速验证想法。\n- **特征提取困难**：缺乏统一的向量表示方法，只能依赖粗糙的颜色直方图或人工标签，导致搜索结果往往“形似神不似”，无法捕捉深层语义。\n- **算力资源浪费**：自行训练大型模型需要昂贵的 GPU 集群支持，且调试过程中常因环境配置问题（如 CUDA 版本冲突）陷入停滞。\n- **扩展性差**：每当新增一类商品或更换模型架构，都需要重新调整整个流水线，维护成本极高。\n\n### 使用 img2vec 后\n- **即时落地应用**：通过几行 Python 代码即可调用预训练的 ResNet 或 EfficientNet 模型，将图片直接转化为高维向量，原型开发从数周缩短至数小时。\n- **搜索精度飞跃**：利用 img2vec 提取的深层语义向量计算余弦相似度，系统能准确识别出“波点衬衫”或“复古牛仔”等抽象风格，大幅提升转化率。\n- **部署灵活高效**：工具原生支持 GPU 加速且兼容多种主流模型，团队可根据业务需求在精度与速度间自由切换（如用 ResNet-18 提速或用 VGG-19 提准），无需关心底层实现。\n- **生态集成顺畅**：生成的向量可直接对接 Scikit-learn 进行聚类分析或构建推荐索引，无缝融入现有的大数据处理流程。\n\nimg2vec 通过将复杂的深度学习模型封装为简单的接口，让开发者能专注于业务逻辑而非算法基建，实现了图像语义理解的民主化。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fchristiansafka_img2vec_4c2e8c07.png","christiansafka","Christian Safka","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fchristiansafka_71edb01b.jpg","Music, engineering, ML, education",null,"Spain \u002F Estonia \u002F USA","https:\u002F\u002Flinkedin.com\u002Fin\u002Fchristiansafka","https:\u002F\u002Fgithub.com\u002Fchristiansafka",[81],{"name":82,"color":83,"percentage":84},"Python","#3572A5",100,621,98,"2026-03-22T10:04:16","MIT","未说明","非必需。支持可选 GPU 加速 (cuda=True)，需兼容 PyTorch 的 NVIDIA GPU，具体型号和显存未说明。",{"notes":92,"python":93,"dependencies":94},"默认使用 Resnet-18 模型。若在只读环境（如 Docker）运行，需设置 TORCH_HOME 环境变量以指定预训练模型的存储路径。示例代码基于 torchvision 0.11.0 nightly 版本测试。","3.6",[95,96,97,98],"torch","torchvision==0.11.0 (nightly)","Pillow","scikit-learn",[14],[101,102],"pytorch","deep-learning","2026-03-27T02:49:30.150509","2026-04-09T09:46:15.521137",[106,111,116,121,126,131,136],{"id":107,"question_zh":108,"answer_zh":109,"source_url":110},25933,"如何修复 'RuntimeError: expand(torch.FloatTensor...)' 或张量维度不匹配的错误？","这是一个常见的维度兼容性问题。解决方案是修改初始化代码和输出处理：\n1. 将 `my_embedding = torch.zeros(512)` 改为 `my_embedding = torch.zeros(1, 512, 1, 1)` 以匹配模型输出的维度。\n2. 在获取向量后，使用 `vec = vec.view(512)` 将其重塑回一维数组。\n或者，确保在注册 hook 时正确处理数据形状，例如使用 `o.data.reshape(o.data.size(1))`。","https:\u002F\u002Fgithub.com\u002Fchristiansafka\u002Fimg2vec\u002Fissues\u002F5",{"id":112,"question_zh":113,"answer_zh":114,"source_url":115},25934,"遇到 'RuntimeError: The size of tensor a (4) must match the size of tensor b (3)' 错误怎么办？","这通常是因为输入图像包含 Alpha 通道（RGBA），而模型期望的是 RGB 格式（3 个通道）。\n解决方法是在打开图像后显式转换为 RGB 模式：\n`img = Image.open(image_name).convert('RGB')`\n这将确保所有图片（无论是 JPG、PNG 还是其他格式）都统一为 3 通道，从而避免维度不匹配的错误。","https:\u002F\u002Fgithub.com\u002Fchristiansafka\u002Fimg2vec\u002Fissues\u002F31",{"id":117,"question_zh":118,"answer_zh":119,"source_url":120},25935,"为什么初始化 Img2Vec 时提示 'KeyError: Model vgg was not found'？","这是因为 PyPI 上发布的版本可能落后于 GitHub 主分支，导致旧版本中不包含 VGG 等模型的支持代码。\n解决方法：\n1. 卸载当前版本并直接从 GitHub 安装最新代码：`pip install git+https:\u002F\u002Fgithub.com\u002Fchristiansafka\u002Fimg2vec.git`\n2. 或者检查本地安装的 `_get_model_and_layer` 函数，确认是否缺少对应模型的判断逻辑。维护者已更新 PyPI，请确保升级到最新版本。","https:\u002F\u002Fgithub.com\u002Fchristiansafka\u002Fimg2vec\u002Fissues\u002F38",{"id":122,"question_zh":123,"answer_zh":124,"source_url":125},25936,"启用 CUDA (cuda=True) 能提升性能吗？主要加速体现在哪个阶段？","启用 CUDA 主要加速的是推理过程（即 `get_vec` 调用阶段），而不是初始化阶段。\n重要提示：`Img2Vec` 的初始化（加载模型）只需要发生一次，不应在每个请求中重复执行。正确的用法是先全局初始化一次 `img2vec = Img2Vec(cuda=True)`，然后在循环或请求中反复调用 `img2vec.get_vec(img)`。如果每次请求都重新初始化，将无法观察到 CUDA 带来的显著性能提升，且会浪费大量时间在模型加载上。","https:\u002F\u002Fgithub.com\u002Fchristiansafka\u002Fimg2vec\u002Fissues\u002F46",{"id":127,"question_zh":128,"answer_zh":129,"source_url":130},25937,"我需要手动将图片调整大小（Resize）到 224x224 吗？","不需要手动调整。`img2vec` 库内部已经包含了自动调整大小的变换（Transform），会自动将输入图像处理为模型所需的尺寸（如 ResNet 需要的 224x224）。\n不过，为了避免图像变形，建议您在传入前先自行将图片裁剪为正方形（宽高相等），然后再交给库处理。","https:\u002F\u002Fgithub.com\u002Fchristiansafka\u002Fimg2vec\u002Fissues\u002F48",{"id":132,"question_zh":133,"answer_zh":134,"source_url":135},25938,"如何生成大小为 256 的图像嵌入向量（默认是 512）？","库默认模型（如 ResNet18）输出的特征向量长度为 512。若需要 256 维向量，可以使用降维技术处理生成的向量列表。\n推荐使用 PCA（主成分分析）：\n```python\nfrom sklearn.decomposition import PCA\npca = PCA(n_components=256)\nvectors_256d = pca.fit_transform(list_of_all_your_vectors_512d)\n```\n此外，也可以考虑使用其他架构（如 EfficientNet）的特定层，其输出维度可能不同，但这需要修改源码或自定义模型加载逻辑。","https:\u002F\u002Fgithub.com\u002Fchristiansafka\u002Fimg2vec\u002Fissues\u002F36",{"id":137,"question_zh":138,"answer_zh":139,"source_url":140},25939,"如何使用自己训练的模型 checkpoint（.ckpt 文件）代替预训练模型？","目前库没有直接参数支持加载外部 checkpoint，但您可以自行修改代码实现：\n1. 参考 PyTorch 官方文档关于保存和加载模型的教程。\n2. 找到 `img2vec` 源码中加载 ResNet 或其他模型的部分。\n3. 将加载预训练权重的代码替换为加载您的 `.ckpt` 文件的逻辑（通常涉及 `torch.load` 和 `model.load_state_dict`）。\n维护者表示未来可能会添加接受 checkpoint 文件的参数，但目前需手动修改源码。","https:\u002F\u002Fgithub.com\u002Fchristiansafka\u002Fimg2vec\u002Fissues\u002F42",[]]