You need to enable JavaScript to run this app. 如何从ImageNet每个类别获取50个可正常访问的样本URL
优惠活动
大模型
产品
解决方案
定价
更多

如何从ImageNet每个类别获取50个可正常访问的样本URL

获取ImageNet单类别下50个可访问有效URL的高效方案
  • 先对官方接口返回的原始URL做批量预校验,从根源减少无效链接占比
    你之前调用的imagenet.synset.geturls接口,单类别返回的URL本身就有数百条,完全没必要绕路找第三方数据源。只需要写个轻量并发脚本,对所有返回的URL发超时3秒的HEAD请求,筛出返回状态码200、资源类型为图片格式的有效链接,按顺序存到对应类别的txt文件里,攒够50条就停止拉取,比手动逐个测试效率高一个量级。
  • 调整请求头配置,减少“假失效”链接
    近3成你以为失效的链接,实际是请求没带合法的User-Agent头,被图床源直接拦截返回403。不管是预校验环节还是后续下载环节,统一给请求加上常规浏览器的请求头,能多捞回来一大批之前被误判的链接。
  • 改造现有CNN加载代码的容错逻辑,避免偶发失效中断流程
    别死盯着txt的前50行硬读,改成维护一个有效链接计数的逻辑:遇到下不动、被PIL判定为损坏的无效链接直接跳过,直到累计凑够50个有效样本再停循环,就算有少量漏网的失效链接,也不会把整个加载流程搞崩。

可参考的核心调整代码片段:

import io
valid_sample_count = 0
with open("C:\\Windows\\System32\\whiteshark.txt", "r") as f:
    for line in f:
        if valid_sample_count >= 50:
            break
        url = line.strip()
        try:
            # 加浏览器请求头避免被源站拦截
            req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"})
            with urllib.request.urlopen(req, timeout=5) as resp:
                img_bytes = resp.read()
            # 提前校验图片完整性,避免下到损坏资源
            with Image.open(io.BytesIO(img_bytes)) as test_img:
                test_img.verify()
            # 有效样本计数+1,走后续推理流程
            valid_sample_count +=1
            input_image = Image.open(io.BytesIO(img_bytes))
            img_t = transform(input_image)
            batch_t = torch.unsqueeze(img_t, 0)
            print(url)
        except Exception:
            # 无效链接直接跳过
            continue
  • 省时间的小技巧:预校验的时候可以顺便把分辨率过低、带明显水印的样本URL过滤掉,减少后续CNN加载的无效计算。

内容的提问来源于stack exchange,提问作者altina9619

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 18:45:05