diff --git a/.python-version b/.python-version new file mode 100644 index 0000000000000000000000000000000000000000..e4fba2183587225f216eeada4c78dfab6b2e65f5 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..f53929badc257a52f5f5ba8a68cf7acb010f0c17 --- /dev/null +++ b/LICENSE @@ -0,0 +1,6 @@ +Licenses + +Unless specifically labeled otherwise, these Datasets are provided to You under the terms of the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License (“CC BY-NC-SA 4.0”), with the additional terms included herein. +The CC BY-NC-SA 4.0 may be accessed at https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode. When You download or use the Datasets from the Website or elsewhere, You are agreeing to comply with the terms of CC BY-NC-SA 4.0, and also agreeing to the Dataset Terms. +Where these Dataset Terms conflict with the terms of CC BY-NC-SA 4.0, these Dataset Terms shall prevail. We reiterate once again that this dataset is used only for non-commercial purposes such as academic research, teaching, or scientific publications. +We prohibits You from using the dataset or any derivative works for commercial purposes, such as selling data or using it for commercial gain. diff --git a/README.md b/README.md index 9809723d1d73e1499dfc0fbd9c1631a3da16786a..4ec65c8be512a2698ea43dd492a01c890bdc3e79 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,189 @@ --- -title: DeForge AIGIBench -emoji: 👀 -colorFrom: pink +title: DeForge AI +emoji: 📉 +colorFrom: yellow colorTo: gray sdk: gradio sdk_version: 6.14.0 -python_version: '3.13' +python_version: '3.12' app_file: app.py pinned: false -license: cc-by-nc-sa-4.0 --- -Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference +
+
+

Is Artificial Intelligence Generated Image Detection a Solved Problem?

+ +[Ziqiang Li](https://scholar.google.com/citations?user=mj5a8WgAAAAJ&hl=zh-CN)1, [Jiazhen Yan](https://scholar.google.com/citations?user=QkURh8EAAAAJ&hl=zh-CN)1, [Ziwen He](https://scholar.google.com/citations?user=PjkDK9cAAAAJ&hl=zh-CN)1, [Kai Zeng](https://scholar.google.com.hk/citations?user=TsI93SIAAAAJ&hl=zh-CN)2, [Weiwei Jiang](https://scholar.google.co.jp/citations?user=mbPN0hgAAAAJ&hl=zh-CN)1, [Lizhi Xiong](https://scholar.google.com/citations?user=-FzrEP4AAAAJ&hl=zh-CN)1, [Zhangjie Fu](https://scholar.google.com/citations?user=fO9NmagAAAAJ&hl=zh-CN)1‡ + + +
+

+ Corresponding author +

+
+ +1Nanjing University of Information Science and Technology 2University of Siena +

+ + + + + + + + + +

+
+ +## 🔥 News +* [2025-09-19]🎉🎉🎉 AIGIBench is accepted by NeurIPS 2025 Datasets and Benchmarks. + +## + +**This repository is the official repository of the AIGIBench.** + +> [!NOTE] +> This is a **modified version** of the original [AIGIBench](https://github.com/HorizonTEL/AIGIBench) repository. In addition to the original dataset and methods, it includes my custom detection solutions: **DeForge-AI** and **C2P-DINOv2** (intermediary solution). + +**This repository contains the AIGIBench dataset and the evaluated methods.** + + **AIGIBench** dataset contains two types of training and 25 test subsets. This dataset has the following advantages: +- Comprehensive generate types: including GAN-based Noise-to-Image Generation, Diffusion for Text-to-Image Generation, GANs for Deepfake, Diffusion for Personalized Generation, and Open-source Platforms. +- State-of-the-art Generators: MidjourneyV6, Stable Diffusion 3, Imagen, DALLE3, InstantID, FaceSwap, StyleGAN-XL and so on. +- Completely unknown generation method: Crawl pictures from communities and social media to build datasets CommunityAI & SocialRF, making detection more challenging. + +![example](https://github.com/user-attachments/assets/36250270-6fc1-4919-8078-1865f80913c0) + +If this project helps you, please fork, watch, and give a star to this repository. + +## 📚Dataset +The training set and testing set used in the paper can be downloaded on [Huggingface](https://huggingface.co/datasets/HorizonTEL/AIGIBench)/[Baidu Netdisk](https://pan.baidu.com/s/1XTwfXlfqkGxAwYLxXuZbfA?pwd=sm6v). + +Each folder contains compressed files. After unzip the file, files under the data root directory can be organized as follows. +### Train +AIGIBench introduces two training dataset settings: **(i) Setting-I:** Training on 144K images generated by ProGAN across four object categories—car, cat, chair, and horse. **(ii) Setting-II:** Training on 144K images generated by both SD-v1.4 and ProGAN, covering the same four object categories. The data of ProGAN comes from ForenSynths, and the data of sdv1.4 comes from GenImage. In order to maintain the fairness of the training data, we randomly select the sdv1.4 training images of GenImage to keep the same number as ProGAN, and then merge the data. The file directory is as follows: + +``` +├── train +│ ├── car +│ │ ├── 0_real +│ │ ├── 1_fake +│ ├── cat +│ │ ├── ... +│ ├── chair +│ │ ├── ... +│ ├── horse +│ │ ├── ... +│ ├── sdv1.4 +│ │ ├── 0_real +│ │ ├── 1_fake +├── val +│ ├── ... +│ │ ├── 0_real +│ │ ├── 1_fake +│ │ ... +``` + +### Test +AIGIBench comprehensively tests the performance of the detector and builds a test dataset from five perspectives: GAN-based Noise-to-Image Generation, Diffusion for Text-to-Image Generation, GANs for Deepfake, Diffusion for Personalized Generation, and Open-source Platforms. The file directory is as follows: +``` +├── test +│ ├── ProGAN +│ │ ├── 0_real +│ │ ├── 1_fake +│ ├── R3GAN +│ │ ├── ... +│ │ ... +│ ├── BlendFace +│ │ ├── 0_real +│ │ ├── 1_fake +│ ├── InSwap +│ │ ├── ... +│ │ ... +│ ├── FLUX1-dev +│ │ ├── 0_real +│ │ ├── 1_fake +│ ├── Midjourney-V6 +│ │ ├── ... +│ │ ... +│ ├── BLIP +│ │ ├── 0_real +│ │ ├── 1_fake +│ ├── Infinite-ID +│ │ ├── ... +│ │ ... +│ ├── CommunityAI +│ │ ├── 0_real +│ │ ├── 1_fake +│ ├── SocialRF +│ │ ├── ... +``` + +*Note: The test set count in the paper contained some errors, which we are correcting here. Please note that the number of real images and generated images are consistent; only the number of generated images is listed below.* +| Generator | Number | +|:------: |:---------:| +| CommunityAI | 6000 | +| SocialRF | 3000 | +| FaceSwap | 4000 | +| ImSwap | 4000 | +| WFIR | 1000 | + +## 🔍Detection Methods +We use the official code for all detection codes and make unified modifications to the input and output. The code we use for training in Setting-II is publicly available above, the corresponding pre-trained checkpoints are publicly available on [Huggingface](https://huggingface.co/HorizonTEL/AIGIBench). Of course, if you need the code from the original paper, the following is the corresponding detection code in the paper: +- [ResNet-50](https://github.com/huggingface/pytorch-image-models/tree/v0.6.12/timm): Deep Residual Learning for Image Recognition +- [CNNDetection](https://github.com/PeterWang512/CNNDetection): CNN-generated images are surprisingly easy to spot...for now +- [GramNet](https://github.com/liuzhengzhe/Global_Texture_Enhancement_for_Fake_Face_Detection_in_the-Wild): Global Texture Enhancement for Fake Face Detection in the Wild +- [LGrad](https://github.com/chuangchuangtan/LGrad): Learning on Gradients: Generalized Artifacts Representation for GAN-Generated Images Detection +- [CLIPDetection](https://github.com/WisconsinAIVision/UniversalFakeDetect): Towards Universal Fake Image Detectors that Generalize Across Generative Models +- [FreqNet](https://github.com/chuangchuangtan/FreqNet-DeepfakeDetection): FreqNet: A Frequency-domain Image Super-Resolution Network with Dicrete Cosine Transform +- [NPR](https://github.com/chuangchuangtan/NPR-DeepfakeDetection): Rethinking the Up-Sampling Operations in CNN-based Generative Network for Generalizable Deepfake Detection +- [DFFreq](https://github.com/HorizonTEL/DFFreq-main): Dual Frequency Branch Framework with Reconstructed Sliding Windows Attention for AI-Generated Image Detection +- [LaDeDa](https://github.com/barcavia/RealTime-DeepfakeDetection-in-the-RealWorld): Real-Time Deepfake Detection in the Real-World +- [AIDE](https://github.com/shilinyan99/AIDE): A Sanity Check for AI-generated Image Detection +- [SAFE](https://github.com/Ouxiang-Li/SAFE): Improving Synthetic Image Detection Towards Generalization: An Image Transformation Perspectives +- [Effort](https://github.com/YZY-stack/Effort-AIGI-Detection): Orthogonal Subspace Decomposition for Generalizable AI-Generated Image Detection + +## ⏳Detection Results (Continuously updating) +**To ensure a fair comparison, we retrain all baseline methods on the Setting-II of AIGIBench.** + +_If your retrained results differ significantly from those shown, please contact us._ +| Method | Paper | Ref | R.Acc. | F.Acc. | Acc. | A.P. | +|:------: |:---------: |:---------:|:------:|:------:|:----:|:----:| +| CNNDetection | CNN-generated images are surprisingly easy to spot... for now | CVPR 2020 |**98.2**| 11.6 | 54.9 | 67.0 | +| Gram-Net | Global Texture Enhancement for Fake Face Detection In the Wild | CVPR 2020 | 90.5 | 26.6 | 58.6 | 62.4 | +| LGrad | Learning on Gradients: Generalized Artifacts Representation for GAN-Generated Images Detection | CVPR 2023 | 85.8 | 39.6 | 62.9 | 66.6 | +| UniFD | Towards Universal Fake Image Detectors that Generalize Across Generative Models | CVPR 2023 | 73.3 | 71.5 | 72.5 | 75.6 | +| FreqNet | Frequency-Aware Deepfake Detection: Improving Generalizability through Frequency Space Learning | AAAI 2024 | 65.9 | 66.4 | 66.2 | 70.1 | +| NPR | Rethinking the Up-Sampling Operations in CNN-based Generative Network for Generalizable Deepfake Detection | CVPR 2024 | 93.8 | 41.9 | 67.9 | 73.9 | +| Ladeda | Real-Time Deepfake Detection in the Real-World | Arxiv 2024| 91.7 | 54.9 | 73.4 | 79.3 | +| DFFreq | Dual Frequency Branch Framework with Reconstructed Sliding Windows Attention for AI-Generated Image Detection | TIFS 2026 | 91.8 | 58.0 | 75.1 | 82.2 | +| C2P-CLIP* | C2P-CLIP: Injecting Category Common Prompt in CLIP to Enhance Generalization in Deepfake Detection | AAAI 2025 | 93.8 | 49.8 | 71.8 | 82.2 | +| AIDE | A Sanity Check for AI-generated Image Detection | ICLR 2025 | 88.1 | 67.0 | 77.6 | 82.7 | +| SAFE | Improving Synthetic Image Detection Towards Generalization: An Image Transformation Perspectives | KDD 2025 | 89.0 | 66.6 | 78.1 | 83.6 | +| VIB-Net | Towards Universal AI-Generated Image Detection by Variational Information Bottleneck Network | CVPR 2025 | 60.6 |**78.1**| 69.3 | 70.9 | +| $D^3$ | $D^3$: Scaling Up Deepfake Detection by Learning from Discrepancy | CVPR 2025 | 81.0 | 46.4 | 63.7 | 68.9 | +| Effort | Orthogonal Subspace Decomposition for Generalizable AI-Generated Image Detection | ICML 2025 | 96.9 | 57.1 | 77.1 |**87.2**| +| FerretNet | FerretNet: Efficient Synthetic Image Detection via Local Pixel Dependencies | NIPS 2025 | 96.6 | 61.8 |**79.4**| 85.8 | +| LOTA | LOTA: Bit-Planes Guided AI-Generated Image Detection | ICCV 2025 | 89.3 | 65.1 | 77.4 | 83.1 | +| BSF | Beyond Semantic Features: Pixel-level Mapping for Generalized AI-Generated Image Detection | AAAI 2026 | 91.5 | 65.6 | 78.8 | 81.1 | +| LTD | Layer Consistency Matters: Elegant Latent Transition Discrepancy for Generalizable Synthetic Image Detection | CVPR 2026 | 82.0 | 67.7 | 74.9 | 77.6 | + +**For specific reasons, in the following method, we directly utilize the official pre-trained weights for inference.** +| Method | Paper | Ref | R.Acc. | F.Acc. | Acc. | A.P. | +|:------: |:---------: |:---------:|:------:|:------:|:----:|:----:| +| DDA | Dual Data Alignment Makes AI-Generated Image Detector Easier Generalizable | NIPS 2025 | 93.9 | 69.3 | 81.6 | 90.2 | + +## Citation +``` +@inproceedings{li2025artificial, + title={Is Artificial Intelligence Generated Image Detection a Solved Problem?}, + author={Li, Ziqiang and Yan, Jiazhen and He, Ziwen and Zeng, Kai and Jiang, Weiwei and Xiong, Lizhi and Fu, Zhangjie}, + booktitle={Advances in Neural Information Processing Systems}, + year={2025} +} +``` + +## Contact +If you have any question about this project, please feel free to contact 247918horizon@gmail.com diff --git a/app.py b/app.py new file mode 100644 index 0000000000000000000000000000000000000000..46ce9f13d88cb8dea46f242c0274dfe1f7d8fd79 --- /dev/null +++ b/app.py @@ -0,0 +1,81 @@ +import gradio as gr + +from detector_codes import DEVICE, detector_classes, weight_mapping + +# Model cache to avoid reloading +model_cache = {'name': None, 'instance': None} + + +def predict(model_name, input_image): + if input_image is None: + return 'Please upload an image.' + + global model_cache + + # Load model if not in cache or if model changed + if model_cache['name'] != model_name: + print(f'Loading model: {model_name}...') + try: + detector_class = detector_classes[model_name] + weights = weight_mapping[model_name] + model_cache['instance'] = detector_class(weights) + model_cache['name'] = model_name + except Exception as e: + return f'Error loading model {model_name}: {str(e)}' + + detector = model_cache['instance'] + + # Preprocess image + try: + img_tensor = detector.transform(input_image).unsqueeze(0).to(DEVICE) + + # Inference + p_fake = detector.detect(img_tensor).item() + p_real = 1.0 - p_fake + + return {'Real Image': p_real, 'AI Generated': p_fake} + except Exception as e: + return f'Error during inference: {str(e)}' + + +# Define the Gradio interface +with gr.Blocks(title='AIGI Detector Bench') as demo: + gr.Markdown('# AIGI Detector Benchmark') + gr.Markdown( + "Select a model and upload an image to check if it's AI-generated or real." + ) + + with gr.Row(): + with gr.Column(): + model_dropdown = gr.Dropdown( + choices=sorted(list(detector_classes.keys())), + value='DeForge-AI', + label='Select Detection Model', + ) + input_img = gr.Image(type='pil', label='Upload Image') + btn = gr.Button('Detect', variant='primary') + + with gr.Column(): + output_label = gr.Label(num_top_classes=2, label='Prediction') + + btn.click(fn=predict, inputs=[model_dropdown, input_img], outputs=output_label) + + gr.Markdown(""" + ### About + This tool is a **modified version** of the official [AIGIBench](https://github.com/HorizonTEL/AIGIBench) repository, featuring state-of-the-art AI-Generated Image (AIGI) detectors. + + In this version, I have integrated the original baselines along with my own proposed solutions: **DeForge-AI** and **C2P-DINOv2**. + + - **Project Page**: [NeurIPS 2025] Is Artificial Intelligence Generated Image Detection a Solved Problem? + - **Original Repository**: [HorizonTEL/AIGIBench](https://github.com/HorizonTEL/AIGIBench) + + #### Featured Models: + - **DeForge-AI**: My proposed multi-modal forensic detector (optimized for diverse generators). + - **C2P-DINOv2**: My solution leveraging DINOv2 features (intermediary solution). + - **RIGID, AIDE, SAFE, Effort, NPR, LaDeDa, etc.**: Original SOTA baselines. + + Each model has different strengths. DeForge-AI generally provides the best performance across diverse generators. + """) + +if __name__ == '__main__': + demo.launch() diff --git a/detector_codes/AIDE-main/LICENSE b/detector_codes/AIDE-main/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..aed78fa8ad12d5120ec8a9a008160a4b7a6941f7 --- /dev/null +++ b/detector_codes/AIDE-main/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Shilin Yan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/detector_codes/AIDE-main/data/__init__.py b/detector_codes/AIDE-main/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/AIDE-main/data/datasets.py b/detector_codes/AIDE-main/data/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..ff97d5ad691c9f2b8c92b3113a9c81ffe209662e --- /dev/null +++ b/detector_codes/AIDE-main/data/datasets.py @@ -0,0 +1,199 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. + +# All rights reserved. + +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + + +import os +from torchvision import transforms +from torch.utils.data import Dataset + +from PIL import Image +import io +import torch +from .dct import DCT_base_Rec_Module +import random + +try: + from torchvision.transforms import InterpolationMode + BICUBIC = InterpolationMode.BICUBIC +except ImportError: + BICUBIC = Image.BICUBIC + +from PIL import ImageFile +ImageFile.LOAD_TRUNCATED_IMAGES = True +import kornia.augmentation as K + +Perturbations = K.container.ImageSequential( + K.RandomGaussianBlur(kernel_size=(3, 3), sigma=(0.1, 3.0), p=0.1), + K.RandomJPEG(jpeg_quality=(30, 100), p=0.1) +) + +transform_before = transforms.Compose([ + transforms.ToTensor(), + transforms.Lambda(lambda x: Perturbations(x)[0]) + ] +) +transform_before_test = transforms.Compose([ + transforms.ToTensor(), + ] +) + +transform_train = transforms.Compose([ + transforms.Resize([256, 256]), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])] +) + +transform_test_normalize = transforms.Compose([ + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])] +) + + +class TrainDataset(Dataset): + def __init__(self, is_train, args): + + root = args.data_path if is_train else args.eval_data_path + + self.data_list = [] + + if'GenImage' in root and root.split('/')[-1] != 'train': + file_path = root + + if '0_real' not in os.listdir(file_path): + for folder_name in os.listdir(file_path): + + assert (os.listdir(os.path.join(file_path, folder_name)) == ['0_real', '1_fake']) or (os.listdir(os.path.join(file_path, folder_name)) == ['1_fake', '0_real']) + + for image_path in os.listdir(os.path.join(file_path, folder_name, '0_real')): + self.data_list.append({"image_path": os.path.join(file_path, folder_name, '0_real', image_path), "label" : 0}) + + for image_path in os.listdir(os.path.join(file_path, folder_name, '1_fake')): + self.data_list.append({"image_path": os.path.join(file_path, folder_name, '1_fake', image_path), "label" : 1}) + + else: + for image_path in os.listdir(os.path.join(file_path, '0_real')): + self.data_list.append({"image_path": os.path.join(file_path, '0_real', image_path), "label" : 0}) + for image_path in os.listdir(os.path.join(file_path, '1_fake')): + self.data_list.append({"image_path": os.path.join(file_path, '1_fake', image_path), "label" : 1}) + else: + + for filename in os.listdir(root): + + file_path = os.path.join(root, filename) + + if '0_real' not in os.listdir(file_path): + for folder_name in os.listdir(file_path): + + assert (os.listdir(os.path.join(file_path, folder_name)) == ['0_real', '1_fake']) or (os.listdir(os.path.join(file_path, folder_name)) == ['1_fake', '0_real']) + + for image_path in os.listdir(os.path.join(file_path, folder_name, '0_real')): + self.data_list.append({"image_path": os.path.join(file_path, folder_name, '0_real', image_path), "label" : 0}) + + for image_path in os.listdir(os.path.join(file_path, folder_name, '1_fake')): + self.data_list.append({"image_path": os.path.join(file_path, folder_name, '1_fake', image_path), "label" : 1}) + + else: + for image_path in os.listdir(os.path.join(file_path, '0_real')): + self.data_list.append({"image_path": os.path.join(file_path, '0_real', image_path), "label" : 0}) + for image_path in os.listdir(os.path.join(file_path, '1_fake')): + self.data_list.append({"image_path": os.path.join(file_path, '1_fake', image_path), "label" : 1}) + + self.dct = DCT_base_Rec_Module() + + + def __len__(self): + return len(self.data_list) + + def __getitem__(self, index): + + sample = self.data_list[index] + + image_path, targets = sample['image_path'], sample['label'] + + try: + image = Image.open(image_path).convert('RGB') + except: + print(f'image error: {image_path}') + return self.__getitem__(random.randint(0, len(self.data_list) - 1)) + + + image = transform_before(image) + + try: + x_minmin, x_maxmax, x_minmin1, x_maxmax1 = self.dct(image) + except: + print(f'image error: {image_path}, c, h, w: {image.shape}') + return self.__getitem__(random.randint(0, len(self.data_list) - 1)) + + x_0 = transform_train(image) + x_minmin = transform_train(x_minmin) + x_maxmax = transform_train(x_maxmax) + + x_minmin1 = transform_train(x_minmin1) + x_maxmax1 = transform_train(x_maxmax1) + + + + return torch.stack([x_minmin, x_maxmax, x_minmin1, x_maxmax1, x_0], dim=0), torch.tensor(int(targets)) + + + +class TestDataset(Dataset): + def __init__(self, is_train, args): + + root = args.data_path if is_train else args.eval_data_path + + self.data_list = [] + + file_path = root + + if '0_real' not in os.listdir(file_path): + for folder_name in os.listdir(file_path): + + assert (os.listdir(os.path.join(file_path, folder_name)) == ['0_real', '1_fake']) or (os.listdir(os.path.join(file_path, folder_name)) == ['1_fake', '0_real']) + + for image_path in os.listdir(os.path.join(file_path, folder_name, '0_real')): + self.data_list.append({"image_path": os.path.join(file_path, folder_name, '0_real', image_path), "label" : 0}) + + for image_path in os.listdir(os.path.join(file_path, folder_name, '1_fake')): + self.data_list.append({"image_path": os.path.join(file_path, folder_name, '1_fake', image_path), "label" : 1}) + + else: + for image_path in os.listdir(os.path.join(file_path, '0_real')): + self.data_list.append({"image_path": os.path.join(file_path, '0_real', image_path), "label" : 0}) + for image_path in os.listdir(os.path.join(file_path, '1_fake')): + self.data_list.append({"image_path": os.path.join(file_path, '1_fake', image_path), "label" : 1}) + + + self.dct = DCT_base_Rec_Module() + + + def __len__(self): + return len(self.data_list) + + def __getitem__(self, index): + + sample = self.data_list[index] + + image_path, targets = sample['image_path'], sample['label'] + + image = Image.open(image_path).convert('RGB') + + image = transform_before_test(image) + + # x_max, x_min, x_max_min, x_minmin = self.dct(image) + + x_minmin, x_maxmax, x_minmin1, x_maxmax1 = self.dct(image) + + + x_0 = transform_train(image) # 上采样到256*256 + x_minmin = transform_train(x_minmin) + x_maxmax = transform_train(x_maxmax) + + x_minmin1 = transform_train(x_minmin1) + x_maxmax1 = transform_train(x_maxmax1) + + return torch.stack([x_minmin, x_maxmax, x_minmin1, x_maxmax1, x_0], dim=0), torch.tensor(int(targets)) + diff --git a/detector_codes/AIDE-main/data/dct.py b/detector_codes/AIDE-main/data/dct.py new file mode 100644 index 0000000000000000000000000000000000000000..b695755d4d970908d8ae466bd2b1f5191ef1f070 --- /dev/null +++ b/detector_codes/AIDE-main/data/dct.py @@ -0,0 +1,151 @@ +import os +import torch +import torch.nn as nn +import numpy as np +import torch.nn.functional as F + + +def DCT_mat(size): + m = [[ (np.sqrt(1./size) if i == 0 else np.sqrt(2./size)) * np.cos((j + 0.5) * np.pi * i / size) for j in range(size)] for i in range(size)] + return m + + +def generate_filter(start, end, size): + return [[0. if i + j > end or i + j < start else 1. for j in range(size)] for i in range(size)] + + +def norm_sigma(x): + return 2. * torch.sigmoid(x) - 1. + + +class Filter(nn.Module): + def __init__(self, size, band_start, band_end, use_learnable=False, norm=False): + super(Filter, self).__init__() + self.use_learnable = use_learnable + self.base = nn.Parameter(torch.tensor(generate_filter(band_start, band_end, size)), requires_grad=False) + if self.use_learnable: + self.learnable = nn.Parameter(torch.randn(size, size), requires_grad=True) + self.learnable.data.normal_(0., 0.1) + self.norm = norm + if norm: + self.ft_num = nn.Parameter(torch.sum(torch.tensor(generate_filter(band_start, band_end, size))), requires_grad=False) + + + def forward(self, x): + if self.use_learnable: + filt = self.base + norm_sigma(self.learnable) + else: + filt = self.base + + if self.norm: + y = x * filt / self.ft_num + else: + y = x * filt + return y + + +class DCT_base_Rec_Module(nn.Module): + """_summary_ + + Args: + x: [C, H, W] -> [C*level, output, output] + """ + def __init__(self, window_size=32, stride=16, output=256, grade_N=6, level_fliter=[0]): + super().__init__() + + assert output % window_size == 0 + assert len(level_fliter) > 0 + + self.window_size = window_size + self.grade_N = grade_N + self.level_N = len(level_fliter) + self.N = (output // window_size) * (output // window_size) + + self._DCT_patch = nn.Parameter(torch.tensor(DCT_mat(window_size)).float(), requires_grad=False) + self._DCT_patch_T = nn.Parameter(torch.transpose(torch.tensor(DCT_mat(window_size)).float(), 0, 1), requires_grad=False) + + self.unfold = nn.Unfold( + kernel_size=(window_size, window_size), stride=stride + ) + self.fold0 = nn.Fold( + output_size=(window_size, window_size), + kernel_size=(window_size, window_size), + stride=window_size + ) + + lm, mh = 2.82, 2 + level_f = [ + Filter(window_size, 0, window_size * 2) + ] + + self.level_filters = nn.ModuleList([level_f[i] for i in level_fliter]) + self.grade_filters = nn.ModuleList([Filter(window_size, window_size * 2. / grade_N * i, window_size * 2. / grade_N * (i+1), norm=True) for i in range(grade_N)]) + + def forward(self, x): + + N = self.N + grade_N = self.grade_N + level_N = self.level_N + window_size = self.window_size + C, W, H = x.shape + x_unfold = self.unfold(x.unsqueeze(0)).squeeze(0) + + + _, L = x_unfold.shape + x_unfold = x_unfold.transpose(0, 1).reshape(L, C, window_size, window_size) + x_dct = self._DCT_patch @ x_unfold @ self._DCT_patch_T + + y_list = [] + for i in range(self.level_N): + x_pass = self.level_filters[i](x_dct) + y = self._DCT_patch_T @ x_pass @ self._DCT_patch + y_list.append(y) + level_x_unfold = torch.cat(y_list, dim=1) + + grade = torch.zeros(L).to(x.device) + w, k = 1, 2 + for _ in range(grade_N): + _x = torch.abs(x_dct) + _x = torch.log(_x + 1) + _x = self.grade_filters[_](_x) + _x = torch.sum(_x, dim=[1,2,3]) + grade += w * _x + w *= k + + _, idx = torch.sort(grade) + max_idx = torch.flip(idx, dims=[0])[:N] + maxmax_idx = max_idx[0] + if len(max_idx) == 1: + maxmax_idx1 = max_idx[0] + else: + maxmax_idx1 = max_idx[1] + + min_idx = idx[:N] + minmin_idx = idx[0] + if len(min_idx) == 1: + minmin_idx1 = idx[0] + else: + minmin_idx1 = idx[1] + + x_minmin = torch.index_select(level_x_unfold, 0, minmin_idx) + x_maxmax = torch.index_select(level_x_unfold, 0, maxmax_idx) + x_minmin1 = torch.index_select(level_x_unfold, 0, minmin_idx1) + x_maxmax1 = torch.index_select(level_x_unfold, 0, maxmax_idx1) + + x_minmin = x_minmin.reshape(1, level_N*C*window_size* window_size).transpose(0, 1) + x_maxmax = x_maxmax.reshape(1, level_N*C*window_size* window_size).transpose(0, 1) + x_minmin1 = x_minmin1.reshape(1, level_N*C*window_size* window_size).transpose(0, 1) + x_maxmax1 = x_maxmax1.reshape(1, level_N*C*window_size* window_size).transpose(0, 1) + + x_minmin = self.fold0(x_minmin) + x_maxmax = self.fold0(x_maxmax) + x_minmin1 = self.fold0(x_minmin1) + x_maxmax1 = self.fold0(x_maxmax1) + + + return x_minmin, x_maxmax, x_minmin1, x_maxmax1 + + + + + diff --git a/detector_codes/AIDE-main/engine_finetune.py b/detector_codes/AIDE-main/engine_finetune.py new file mode 100644 index 0000000000000000000000000000000000000000..e66bd0f80c56e54135e1e6767db30c98ef2ebf01 --- /dev/null +++ b/detector_codes/AIDE-main/engine_finetune.py @@ -0,0 +1,202 @@ +import math +from typing import Iterable, Optional + +import torch +import utils +from scipy.special import softmax +from sklearn.metrics import accuracy_score, average_precision_score +from timm.data import Mixup +from timm.utils import ModelEma, accuracy +from utils import adjust_learning_rate + + +def train_one_epoch( + model: torch.nn.Module, + criterion: torch.nn.Module, + data_loader: Iterable, + optimizer: torch.optim.Optimizer, + device: torch.device, + epoch: int, + loss_scaler, + max_norm: float = 0, + model_ema: Optional[ModelEma] = None, + mixup_fn: Optional[Mixup] = None, + log_writer=None, + args=None, +): + model.train(True) + metric_logger = utils.MetricLogger(delimiter=' ') + metric_logger.add_meter('lr', utils.SmoothedValue(window_size=1, fmt='{value:.6f}')) + header = 'Epoch: [{}]'.format(epoch) + print_freq = 100 + + update_freq = args.update_freq + use_amp = args.use_amp + optimizer.zero_grad() + + for data_iter_step, (samples, targets) in enumerate( + metric_logger.log_every(data_loader, print_freq, header) + ): + # we use a per iteration (instead of per epoch) lr scheduler + if data_iter_step % update_freq == 0: + adjust_learning_rate( + optimizer, data_iter_step / len(data_loader) + epoch, args + ) + + samples = samples.to(device, non_blocking=True) + targets = targets.to(device, non_blocking=True) + + if mixup_fn is not None: + samples, targets = mixup_fn(samples, targets) + + if use_amp: + with torch.cuda.amp.autocast(): + output = model(samples) + loss = criterion(output, targets) + else: # full precision + output = model(samples) + loss = criterion(output, targets) + + loss_value = loss.item() + + if not math.isfinite(loss_value): + print('Loss is {}, stopping training'.format(loss_value)) + assert math.isfinite(loss_value) + + if use_amp: + # this attribute is added by timm on one optimizer (adahessian) + is_second_order = ( + hasattr(optimizer, 'is_second_order') and optimizer.is_second_order + ) + loss /= update_freq + grad_norm = loss_scaler( + loss, + optimizer, + clip_grad=max_norm, + parameters=model.parameters(), + create_graph=is_second_order, + update_grad=(data_iter_step + 1) % update_freq == 0, + ) + if (data_iter_step + 1) % update_freq == 0: + optimizer.zero_grad() + if model_ema is not None: + model_ema.update(model) + else: # full precision + loss /= update_freq + loss.backward() + if (data_iter_step + 1) % update_freq == 0: + optimizer.step() + optimizer.zero_grad() + if model_ema is not None: + model_ema.update(model) + + torch.cuda.synchronize() + + if mixup_fn is None: + class_acc = (output.max(-1)[-1] == targets).float().mean() + else: + class_acc = None + + metric_logger.update(loss=loss_value) + metric_logger.update(class_acc=class_acc) + min_lr = 10.0 + max_lr = 0.0 + for group in optimizer.param_groups: + min_lr = min(min_lr, group['lr']) + max_lr = max(max_lr, group['lr']) + + metric_logger.update(lr=max_lr) + metric_logger.update(min_lr=min_lr) + weight_decay_value = None + for group in optimizer.param_groups: + if group['weight_decay'] > 0: + weight_decay_value = group['weight_decay'] + metric_logger.update(weight_decay=weight_decay_value) + if use_amp: + metric_logger.update(grad_norm=grad_norm) + if log_writer is not None: + log_writer.update(loss=loss_value, head='loss') + log_writer.update(class_acc=class_acc, head='loss') + log_writer.update(lr=max_lr, head='opt') + log_writer.update(min_lr=min_lr, head='opt') + log_writer.update(weight_decay=weight_decay_value, head='opt') + if use_amp: + log_writer.update(grad_norm=grad_norm, head='opt') + log_writer.set_step() + + print('Averaged stats:', metric_logger) + return {k: meter.global_avg for k, meter in metric_logger.meters.items()} + + +@torch.no_grad() +def evaluate(data_loader, model, device, use_amp=False): + criterion = torch.nn.CrossEntropyLoss() + + metric_logger = utils.MetricLogger(delimiter=' ') + header = 'Test:' + + # switch to evaluation mode + model.eval() + + predictions = [] + labels = [] + + for index, batch in enumerate(metric_logger.log_every(data_loader, 10, header)): + images = batch[0] + target = batch[-1] + + images = images.to(device, non_blocking=True) + target = target.to(device, non_blocking=True) + + # compute output + if use_amp: + with torch.cuda.amp.autocast(dtype=torch.bfloat16): + output = model(images) + if isinstance(output, dict): + output = output['logits'] + loss = criterion(output, target) + else: + output = model(images) # [bs, num_cls] + if isinstance(output, dict): + output = output['logits'] + + loss = criterion(output, target) + + predictions.append(output) + labels.append(target) + + torch.cuda.synchronize() + + acc1, acc5 = accuracy(output, target, topk=(1, 2)) + + batch_size = images.shape[0] + metric_logger.update(loss=loss.item()) + metric_logger.meters['acc1'].update(acc1.item(), n=batch_size) + metric_logger.meters['acc5'].update(acc5.item(), n=batch_size) + + print( + '* Acc@1 {top1.global_avg:.3f} Acc@5 {top5.global_avg:.3f} loss {losses.global_avg:.3f}'.format( + top1=metric_logger.acc1, top5=metric_logger.acc5, losses=metric_logger.loss + ) + ) + + # Concatenate predictions and labels + predictions = torch.cat(predictions, dim=0) + labels = torch.cat(labels, dim=0) + + y_pred = softmax(predictions.detach().cpu().numpy(), axis=1)[:, 1] + y_true = labels.detach().cpu().numpy() + y_true = y_true.astype(int) + + acc = accuracy_score(y_true, y_pred > 0.5) + r_acc = accuracy_score(y_true[y_true == 0], y_pred[y_true == 0] > 0.5) + f_acc = accuracy_score(y_true[y_true == 1], y_pred[y_true == 1] > 0.5) + ap = average_precision_score(y_true, y_pred) + + return ( + {k: meter.global_avg for k, meter in metric_logger.meters.items()}, + acc, + ap, + r_acc, + f_acc, + ) diff --git a/detector_codes/AIDE-main/main_finetune.py b/detector_codes/AIDE-main/main_finetune.py new file mode 100644 index 0000000000000000000000000000000000000000..6ff45f09d8eb11b7fc2e4cec75a5553e23753fda --- /dev/null +++ b/detector_codes/AIDE-main/main_finetune.py @@ -0,0 +1,657 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import argparse +import csv +import datetime +import json +import os +import time +import warnings +from pathlib import Path + +import models.AIDE as AIDE +import numpy as np +import torch +import torch.backends.cudnn as cudnn +import utils +from data.datasets import TestDataset, TrainDataset +from engine_finetune import evaluate, train_one_epoch +from optim_factory import create_optimizer +from timm.data.mixup import Mixup +from timm.loss import LabelSmoothingCrossEntropy, SoftTargetCrossEntropy +from timm.utils import ModelEma +from utils import NativeScalerWithGradNormCount as NativeScaler +from utils import str2bool + +warnings.filterwarnings('ignore') + + +def get_args_parser(): + parser = argparse.ArgumentParser('Resnet fine-tuning', add_help=False) + parser.add_argument('--batch_size', default=32, type=int, help='Per GPU batch size') + parser.add_argument('--epochs', default=100, type=int) + parser.add_argument( + '--update_freq', default=1, type=int, help='gradient accumulation steps' + ) + + # Model parameters + parser.add_argument( + '--model', + default='AIDE', + type=str, + metavar='MODEL', + help='Name of model to train', + ) + parser.add_argument( + '--resnet_path', + default=None, + type=str, + metavar='MODEL', + help='Path of resnet model', + ) + parser.add_argument( + '--convnext_path', + default=None, + type=str, + metavar='MODEL', + help='Path of ConvNeXt of model', + ) + + # EMA related parameters + parser.add_argument('--model_ema', type=str2bool, default=False) + parser.add_argument('--model_ema_decay', type=float, default=0.9999, help='') + parser.add_argument('--model_ema_force_cpu', type=str2bool, default=False, help='') + parser.add_argument( + '--model_ema_eval', + type=str2bool, + default=False, + help='Using ema to eval during training.', + ) + + # Optimization parameters + parser.add_argument( + '--clip_grad', + type=float, + default=None, + metavar='NORM', + help='Clip gradient norm (default: None, no clipping)', + ) + parser.add_argument( + '--weight_decay', type=float, default=0.0, help='weight decay (default: 0.05)' + ) + parser.add_argument( + '--lr', + type=float, + default=None, + metavar='LR', + help='learning rate (absolute lr)', + ) + parser.add_argument( + '--blr', + type=float, + default=5e-4, + metavar='LR', + help='base learning rate: absolute_lr = base_lr * total_batch_size / 256', + ) + parser.add_argument('--layer_decay', type=float, default=1.0) + parser.add_argument( + '--min_lr', + type=float, + default=1e-6, + metavar='LR', + help='lower lr bound for cyclic schedulers that hit 0 (1e-6)', + ) + parser.add_argument( + '--warmup_epochs', + type=int, + default=0, + metavar='N', + help='epochs to warmup LR, if scheduler supports', + ) + + parser.add_argument( + '--warmup_steps', + type=int, + default=-1, + metavar='N', + help='num of steps to warmup LR, will overload warmup_epochs if set > 0', + ) + parser.add_argument( + '--opt', + default='adamw', + type=str, + metavar='OPTIMIZER', + help='Optimizer (default: "adamw"', + ) + parser.add_argument( + '--opt_eps', + default=1e-8, + type=float, + metavar='EPSILON', + help='Optimizer Epsilon (default: 1e-8)', + ) + parser.add_argument( + '--opt_betas', + default=None, + type=float, + nargs='+', + metavar='BETA', + help='Optimizer Betas (default: None, use opt default)', + ) + parser.add_argument( + '--momentum', + type=float, + default=0.9, + metavar='M', + help='SGD momentum (default: 0.9)', + ) + parser.add_argument( + '--weight_decay_end', + type=float, + default=None, + help="""Final value of the + weight decay. We use a cosine schedule for WD and using a larger decay by + the end of training improves performance for ViTs.""", + ) + + # Augmentation parameters + parser.add_argument( + '--color_jitter', + type=float, + default=None, + metavar='PCT', + help='Color jitter factor (enabled only when not using Auto/RandAug)', + ) + parser.add_argument( + '--aa', + type=str, + default='rand-m9-mstd0.5-inc1', + metavar='NAME', + help='Use AutoAugment policy. "v0" or "original". " + "(default: rand-m9-mstd0.5-inc1)', + ) + parser.add_argument( + '--smoothing', type=float, default=0.1, help='Label smoothing (default: 0.1)' + ) + + parser.add_argument( + '--train_interpolation', + type=str, + default='bicubic', + help='Training interpolation (random, bilinear, bicubic default: "bicubic")', + ) + + # * Random Erase params + parser.add_argument( + '--reprob', + type=float, + default=0.25, + metavar='PCT', + help='Random erase prob (default: 0.25)', + ) + parser.add_argument( + '--remode', + type=str, + default='pixel', + help='Random erase mode (default: "pixel")', + ) + parser.add_argument( + '--recount', type=int, default=1, help='Random erase count (default: 1)' + ) + parser.add_argument( + '--resplit', + type=str2bool, + default=False, + help='Do not random erase first (clean) augmentation split', + ) + + # * Mixup params + parser.add_argument( + '--mixup', type=float, default=0.0, help='mixup alpha, mixup enabled if > 0.' + ) + parser.add_argument( + '--cutmix', type=float, default=0.0, help='cutmix alpha, cutmix enabled if > 0.' + ) + parser.add_argument( + '--cutmix_minmax', + type=float, + nargs='+', + default=None, + help='cutmix min/max ratio, overrides alpha and enables cutmix if set (default: None)', + ) + parser.add_argument( + '--mixup_prob', + type=float, + default=1.0, + help='Probability of performing mixup or cutmix when either/both is enabled', + ) + parser.add_argument( + '--mixup_switch_prob', + type=float, + default=0.5, + help='Probability of switching to cutmix when both mixup and cutmix enabled', + ) + parser.add_argument( + '--mixup_mode', + type=str, + default='batch', + help='How to apply mixup/cutmix params. Per "batch", "pair", or "elem"', + ) + + # * Finetuning params + parser.add_argument('--finetune', default='', help='finetune from checkpoint') + parser.add_argument( + '--head_init_scale', + default=0.001, + type=float, + help='classifier head initial scale, typically adjusted in fine-tuning', + ) + parser.add_argument( + '--model_key', + default='model|module', + type=str, + help='which key to load from saved state dict, usually model or model_ema', + ) + parser.add_argument('--model_prefix', default='', type=str) + + # Dataset parameters + parser.add_argument( + '--data_path', default='path/dataset', type=str, help='dataset path' + ) + parser.add_argument( + '--nb_classes', default=2, type=int, help='number of the classification types' + ) + parser.add_argument( + '--output_dir', + default='./5class-checkpoints', + help='path where to save, empty for no saving', + ) + parser.add_argument('--log_dir', default=None, help='path where to tensorboard log') + parser.add_argument( + '--device', default='cuda:0', help='device to use for training / testing' + ) + parser.add_argument('--seed', default=0, type=int) + parser.add_argument('--resume', default='', help='resume from checkpoint') + + parser.add_argument( + '--eval_data_path', default=None, type=str, help='dataset path for evaluation' + ) + parser.add_argument('--imagenet_default_mean_and_std', type=str2bool, default=True) + parser.add_argument( + '--data_set', + default='IMNET', + choices=['CIFAR', 'IMNET', 'image_folder'], + type=str, + help='ImageNet dataset path', + ) + parser.add_argument('--auto_resume', type=str2bool, default=True) + parser.add_argument('--save_ckpt', type=str2bool, default=True) + parser.add_argument('--save_ckpt_freq', default=5, type=int) + parser.add_argument('--save_ckpt_num', default=100, type=int) + + parser.add_argument( + '--start_epoch', default=0, type=int, metavar='N', help='start epoch' + ) + parser.add_argument( + '--eval', type=str2bool, default=False, help='Perform evaluation only' + ) + parser.add_argument( + '--dist_eval', + type=str2bool, + default=True, + help='Enabling distributed evaluation', + ) + parser.add_argument( + '--disable_eval', + type=str2bool, + default=False, + help='Disabling evaluation during training', + ) + parser.add_argument('--num_workers', default=8, type=int) + parser.add_argument( + '--pin_mem', + type=str2bool, + default=True, + help='Pin CPU memory in DataLoader for more efficient (sometimes) transfer to GPU.', + ) + + # Evaluation parameters + parser.add_argument('--crop_pct', type=float, default=None) + + # GPU selection parameter + parser.add_argument( + '--gpu_ids', + type=str, + default='2', + help='gpu ids: e.g. 0 0,1,2, 0,2. use -1 for CPU', + ) + + parser.add_argument( + '--use_amp', + type=str2bool, + default=False, + help='Use apex AMP (Automatic Mixed Precision) or not', + ) + return parser + + +def main(args): + print(args) + + # Set device based on gpu_ids + if args.gpu_ids == '-1': + device = torch.device('cpu') + else: + os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu_ids + device = torch.device('cuda') + + # Fix the seed for reproducibility + seed = args.seed + torch.manual_seed(seed) + np.random.seed(seed) + cudnn.benchmark = True + + dataset_train = TrainDataset(is_train=True, args=args) + + if args.disable_eval: + dataset_val = None + else: + dataset_val = TrainDataset(is_train=False, args=args) + + sampler_train = torch.utils.data.RandomSampler(dataset_train) + + if dataset_val is not None: + sampler_val = torch.utils.data.SequentialSampler(dataset_val) + else: + sampler_val = None + + if args.log_dir is not None: + os.makedirs(args.log_dir, exist_ok=True) + log_writer = utils.TensorboardLogger(log_dir=args.log_dir) + else: + log_writer = None + + data_loader_train = torch.utils.data.DataLoader( + dataset_train, + sampler=sampler_train, + batch_size=args.batch_size, + num_workers=args.num_workers, + pin_memory=args.pin_mem, + drop_last=True, + ) + if dataset_val is not None: + data_loader_val = torch.utils.data.DataLoader( + dataset_val, + sampler=sampler_val, + batch_size=args.batch_size, + num_workers=args.num_workers, + pin_memory=args.pin_mem, + drop_last=False, + ) + else: + data_loader_val = None + + mixup_fn = None + mixup_active = args.mixup > 0 or args.cutmix > 0.0 or args.cutmix_minmax is not None + if mixup_active: + print('Mixup is activated!') + mixup_fn = Mixup( + mixup_alpha=args.mixup, + cutmix_alpha=args.cutmix, + cutmix_minmax=args.cutmix_minmax, + prob=args.mixup_prob, + switch_prob=args.mixup_switch_prob, + mode=args.mixup_mode, + label_smoothing=args.smoothing, + num_classes=args.nb_classes, + ) + + model = AIDE.__dict__[args.model]( + resnet_path=args.resnet_path, convnext_path=args.convnext_path + ) + + model.to(device) + + model_ema = None + if args.model_ema: + model_ema = ModelEma( + model, + decay=args.model_ema_decay, + device='cpu' if args.model_ema_force_cpu else '', + resume='', + ) + print('Using EMA with decay = %.8f' % args.model_ema_decay) + + model_without_ddp = model + n_parameters = sum(p.numel() for p in model.parameters() if p.requires_grad) + + print('Model = %s' % str(model_without_ddp)) + print('number of params:', n_parameters) + + eff_batch_size = args.batch_size * args.update_freq + num_training_steps_per_epoch = len(dataset_train) // eff_batch_size + + if args.lr is None: + args.lr = args.blr * eff_batch_size / 256 + + print('base lr: %.2e' % (args.lr * 256 / eff_batch_size)) + print('actual lr: %.2e' % args.lr) + + print('accumulate grad iterations: %d' % args.update_freq) + print('effective batch size: %d' % eff_batch_size) + + assigner = None + + optimizer = create_optimizer( + args, + model_without_ddp, + skip_list=None, + get_num_layer=assigner.get_layer_id if assigner is not None else None, + get_layer_scale=assigner.get_scale if assigner is not None else None, + ) + loss_scaler = NativeScaler() + + if mixup_fn is not None: + criterion = SoftTargetCrossEntropy() + elif args.smoothing > 0.0: + criterion = LabelSmoothingCrossEntropy(smoothing=args.smoothing) + else: + criterion = torch.nn.CrossEntropyLoss() + + print('criterion = %s' % str(criterion)) + + utils.auto_load_model( + args=args, + model=model, + model_without_ddp=model_without_ddp, + optimizer=optimizer, + loss_scaler=loss_scaler, + model_ema=model_ema, + ) + + if args.eval: + print('Eval only mode') + + vals = os.listdir(args.eval_data_path) + eval_data_path = args.eval_data_path + + rows = [ + ['{} model testing on...'.format(args.resume)], + ['testset', 'accuracy', 'avg precision', 'r_acc', 'f_acc'], + ] + + for v_id, val in enumerate(vals): + args.eval_data_path = os.path.join(args.eval_data_path, val) + dataset_val = TestDataset(is_train=False, args=args) + args.eval_data_path = eval_data_path + + sampler_val = torch.utils.data.SequentialSampler(dataset_val) + + data_loader_val = torch.utils.data.DataLoader( + dataset_val, + sampler=sampler_val, + batch_size=args.batch_size, + num_workers=args.num_workers, + pin_memory=args.pin_mem, + drop_last=False, + ) + + test_stats, acc, ap, r_acc, f_acc = evaluate(data_loader_val, model, device) + print( + f'Accuracy of the network on {len(dataset_val)} test images: {test_stats["acc1"]:.5f}%' + ) + + print( + f'test dataset is {val} acc: {acc}, ap: {ap}, r_acc: {r_acc}, f_acc: {f_acc}' + ) + print('***********************************') + + rows.append([val, acc, ap, r_acc, f_acc]) + + def calculate_column_means(rows): + if not rows or len(rows[0]) < 2: + raise ValueError( + 'The input rows list is empty or lacks numeric columns.' + ) + num_columns = len(rows[0]) - 1 + means = ['mean'] + [ + sum(row[i] for row in rows) / len(rows) + for i in range(1, num_columns + 1) + ] + return means + + rows.append(calculate_column_means(rows[2:])) + test_dataset_name = args.eval_data_path.split('/')[-2] + + csv_name = os.path.join( + args.output_dir, f'{os.path.basename(args.resume)}_{test_dataset_name}.csv' + ) + with open(csv_name, 'w') as f: + csv_writer = csv.writer(f, delimiter=',') + csv_writer.writerows(rows) + return + + max_accuracy = 0.0 + if args.model_ema and args.model_ema_eval: + max_accuracy_ema = 0.0 + + print('Start training for %d epochs' % args.epochs) + start_time = time.time() + for epoch in range(args.start_epoch, args.epochs): + if log_writer is not None: + log_writer.set_step(epoch * num_training_steps_per_epoch * args.update_freq) + train_stats = train_one_epoch( + model, + criterion, + data_loader_train, + optimizer, + device, + epoch, + loss_scaler, + args.clip_grad, + model_ema, + mixup_fn, + log_writer=log_writer, + args=args, + ) + if args.output_dir and args.save_ckpt: + if (epoch + 1) % args.save_ckpt_freq == 0 or epoch + 1 == args.epochs: + utils.save_model( + args=args, + model=model, + model_without_ddp=model_without_ddp, + optimizer=optimizer, + loss_scaler=loss_scaler, + epoch=epoch, + model_ema=model_ema, + ) + if data_loader_val is not None: + test_stats, acc, ap, r_acc, f_acc = evaluate( + data_loader_val, model, device, use_amp=args.use_amp + ) + print( + f'Accuracy of the model on the {len(dataset_val)} test images: {test_stats["acc1"]:.1f}%, ap: {ap}.' + ) + if max_accuracy < test_stats['acc1']: + max_accuracy = test_stats['acc1'] + if args.output_dir and args.save_ckpt: + utils.save_model( + args=args, + model=model, + model_without_ddp=model_without_ddp, + optimizer=optimizer, + loss_scaler=loss_scaler, + epoch='best', + model_ema=model_ema, + ) + print(f'Max accuracy: {max_accuracy:.2f}%') + + if log_writer is not None: + log_writer.update(test_acc1=test_stats['acc1'], head='perf', step=epoch) + log_writer.update(test_acc5=test_stats['acc5'], head='perf', step=epoch) + log_writer.update(test_loss=test_stats['loss'], head='perf', step=epoch) + + log_stats = { + **{f'train_{k}': v for k, v in train_stats.items()}, + **{f'test_{k}': v for k, v in test_stats.items()}, + 'epoch': epoch, + 'n_parameters': n_parameters, + } + + if args.model_ema and args.model_ema_eval: + test_stats_ema, acc, ap, r_acc, f_acc = evaluate( + data_loader_val, model_ema.ema, device, use_amp=args.use_amp + ) + print( + f'Accuracy of the model EMA on {len(dataset_val)} test images: {test_stats_ema["acc1"]:.1f}%, ap: {ap}' + ) + if max_accuracy_ema < test_stats_ema['acc1']: + max_accuracy_ema = test_stats_ema['acc1'] + if args.output_dir and args.save_ckpt: + utils.save_model( + args=args, + model=model, + model_without_ddp=model_without_ddp, + optimizer=optimizer, + loss_scaler=loss_scaler, + epoch='best-ema', + model_ema=model_ema, + ) + print(f'Max EMA accuracy: {max_accuracy_ema:.2f}%') + if log_writer is not None: + log_writer.update( + test_acc1_ema=test_stats_ema['acc1'], head='perf', step=epoch + ) + log_stats.update( + {**{f'test_{k}_ema': v for k, v in test_stats_ema.items()}} + ) + else: + log_stats = { + **{f'train_{k}': v for k, v in train_stats.items()}, + 'epoch': epoch, + 'n_parameters': n_parameters, + } + + if args.output_dir: + if log_writer is not None: + log_writer.flush() + with open( + os.path.join(args.output_dir, 'log.txt'), mode='a', encoding='utf-8' + ) as f: + f.write(json.dumps(log_stats) + '\n') + + total_time = time.time() - start_time + total_time_str = str(datetime.timedelta(seconds=int(total_time))) + print('Training time {}'.format(total_time_str)) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser('AIDE training', parents=[get_args_parser()]) + args = parser.parse_args() + if args.output_dir: + Path(args.output_dir).mkdir(parents=True, exist_ok=True) + main(args) diff --git a/detector_codes/AIDE-main/models/AIDE.py b/detector_codes/AIDE-main/models/AIDE.py new file mode 100644 index 0000000000000000000000000000000000000000..053805afad55edf61c9d9de4d2c499418dbb4674 --- /dev/null +++ b/detector_codes/AIDE-main/models/AIDE.py @@ -0,0 +1,298 @@ +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +import torch +import clip +import open_clip +from .srm_filter_kernel import all_normalized_hpf_list +import numpy as np + +class HPF(nn.Module): + def __init__(self): + super(HPF, self).__init__() + + #Load 30 SRM Filters + all_hpf_list_5x5 = [] + + for hpf_item in all_normalized_hpf_list: + if hpf_item.shape[0] == 3: + hpf_item = np.pad(hpf_item, pad_width=((1, 1), (1, 1)), mode='constant') + + all_hpf_list_5x5.append(hpf_item) + + hpf_weight = torch.Tensor(all_hpf_list_5x5).view(30, 1, 5, 5).contiguous() + hpf_weight = torch.nn.Parameter(hpf_weight.repeat(1, 3, 1, 1), requires_grad=False) + + + self.hpf = nn.Conv2d(3, 30, kernel_size=5, padding=2, bias=False) + self.hpf.weight = hpf_weight + + + def forward(self, input): + + output = self.hpf(input) + + return output + + + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=1, bias=False) + + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(BasicBlock, self).__init__() + self.conv1 = conv3x3(inplanes, planes, stride) + self.bn1 = nn.BatchNorm2d(planes) + self.relu = nn.ReLU(inplace=True) + self.conv2 = conv3x3(planes, planes) + self.bn2 = nn.BatchNorm2d(planes) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(Bottleneck, self).__init__() + self.conv1 = conv1x1(inplanes, planes) + self.bn1 = nn.BatchNorm2d(planes) + self.conv2 = conv3x3(planes, planes, stride) + self.bn2 = nn.BatchNorm2d(planes) + self.conv3 = conv1x1(planes, planes * self.expansion) + self.bn3 = nn.BatchNorm2d(planes * self.expansion) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class ResNet(nn.Module): + + def __init__(self, block, layers, num_classes=1000, zero_init_residual=True): + super(ResNet, self).__init__() + + self.inplanes = 64 + self.conv1 = nn.Conv2d(30, 64, kernel_size=7, stride=2, padding=3, + bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.fc = nn.Linear(512 * block.expansion, num_classes) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, nn.BatchNorm2d): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + + # Zero-initialize the last BN in each residual branch, + # so that the residual branch starts with zeros, and each residual block behaves like an identity. + # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + nn.init.constant_(m.bn3.weight, 0) + elif isinstance(m, BasicBlock): + nn.init.constant_(m.bn2.weight, 0) + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + conv1x1(self.inplanes, planes * block.expansion, stride), + nn.BatchNorm2d(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + + + return x + +class Mlp(nn.Module): + """ MLP as used in Vision Transformer, MLP-Mixer and related networks + """ + + def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU): + super().__init__() + out_features = out_features or in_features + hidden_features = hidden_features or in_features + + self.fc1 = nn.Linear(in_features, hidden_features) + self.act = act_layer() + self.fc2 = nn.Linear(hidden_features, out_features) + + def forward(self, x): + x = self.fc1(x) + x = self.act(x) + x = self.fc2(x) + return x + +class AIDE_Model(nn.Module): + + def __init__(self, resnet_path, convnext_path): + super(AIDE_Model, self).__init__() + self.hpf = HPF() + self.model_min = ResNet(Bottleneck, [3, 4, 6, 3]) + self.model_max = ResNet(Bottleneck, [3, 4, 6, 3]) + + if resnet_path is not None: + pretrained_dict = torch.load(resnet_path, map_location='cpu') + + model_min_dict = self.model_min.state_dict() + model_max_dict = self.model_max.state_dict() + + for k in pretrained_dict.keys(): + if k in model_min_dict and pretrained_dict[k].size() == model_min_dict[k].size(): + model_min_dict[k] = pretrained_dict[k] + model_max_dict[k] = pretrained_dict[k] + else: + print(f"Skipping layer {k} because of size mismatch") + + self.fc = Mlp(2048 + 256 , 1024, 2) + + print("build model with convnext_xxl") + self.openclip_convnext_xxl, _, _ = open_clip.create_model_and_transforms( + "convnext_xxlarge", pretrained=convnext_path + ) + + self.openclip_convnext_xxl = self.openclip_convnext_xxl.visual.trunk + self.openclip_convnext_xxl.head.global_pool = nn.Identity() + self.openclip_convnext_xxl.head.flatten = nn.Identity() + + self.openclip_convnext_xxl.eval() + + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.convnext_proj = nn.Sequential( + nn.Linear(3072, 256), + + ) + for param in self.openclip_convnext_xxl.parameters(): + param.requires_grad = False + + + + def forward(self, x): + + b, t, c, h, w = x.shape + + x_minmin = x[:, 0] #[b, c, h, w] + x_maxmax = x[:, 1] + x_minmin1 = x[:, 2] + x_maxmax1 = x[:, 3] + tokens = x[:, 4] + + x_minmin = self.hpf(x_minmin) + x_maxmax = self.hpf(x_maxmax) + x_minmin1 = self.hpf(x_minmin1) + x_maxmax1 = self.hpf(x_maxmax1) + + with torch.no_grad(): + + clip_mean = torch.Tensor([0.48145466, 0.4578275, 0.40821073]) + clip_mean = clip_mean.to(tokens, non_blocking=True).view(3, 1, 1) + clip_std = torch.Tensor([0.26862954, 0.26130258, 0.27577711]) + clip_std = clip_std.to(tokens, non_blocking=True).view(3, 1, 1) + dinov2_mean = torch.Tensor([0.485, 0.456, 0.406]).to(tokens, non_blocking=True).view(3, 1, 1) + dinov2_std = torch.Tensor([0.229, 0.224, 0.225]).to(tokens, non_blocking=True).view(3, 1, 1) + + local_convnext_image_feats = self.openclip_convnext_xxl( + tokens * (dinov2_std / clip_std) + (dinov2_mean - clip_mean) / clip_std + ) #[b, 3072, 8, 8] + assert local_convnext_image_feats.size()[1:] == (3072, 8, 8) + local_convnext_image_feats = self.avgpool(local_convnext_image_feats).view(tokens.size(0), -1) + x_0 = self.convnext_proj(local_convnext_image_feats) + + x_min = self.model_min(x_minmin) + x_max = self.model_max(x_maxmax) + x_min1 = self.model_min(x_minmin1) + x_max1 = self.model_max(x_maxmax1) + + x_1 = (x_min + x_max + x_min1 + x_max1) / 4 + + x = torch.cat([x_0, x_1], dim=1) + + x = self.fc(x) + + return x + +def AIDE(resnet_path, convnext_path): + model = AIDE_Model(resnet_path, convnext_path) + return model + diff --git a/detector_codes/AIDE-main/models/__init__.py b/detector_codes/AIDE-main/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/AIDE-main/models/clip/__init__.py b/detector_codes/AIDE-main/models/clip/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9f5c16b49122e721aac1257b06cabdf21f0e87b6 --- /dev/null +++ b/detector_codes/AIDE-main/models/clip/__init__.py @@ -0,0 +1 @@ +from .clip import * diff --git a/detector_codes/AIDE-main/models/clip/bpe_simple_vocab_16e6.txt.gz b/detector_codes/AIDE-main/models/clip/bpe_simple_vocab_16e6.txt.gz new file mode 100644 index 0000000000000000000000000000000000000000..36a15856e00a06a9fbed8cdd34d2393fea4a3113 --- /dev/null +++ b/detector_codes/AIDE-main/models/clip/bpe_simple_vocab_16e6.txt.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:924691ac288e54409236115652ad4aa250f48203de50a9e4722a6ecd48d6804a +size 1356917 diff --git a/detector_codes/AIDE-main/models/clip/clip.py b/detector_codes/AIDE-main/models/clip/clip.py new file mode 100644 index 0000000000000000000000000000000000000000..39093cbbddc58b1fc100c7d92c74e22d80584c17 --- /dev/null +++ b/detector_codes/AIDE-main/models/clip/clip.py @@ -0,0 +1,237 @@ +import hashlib +import os +import urllib +import warnings +from typing import Any, Union, List +from pkg_resources import packaging + +import torch +from PIL import Image +from torchvision.transforms import Compose, Resize, CenterCrop, ToTensor, Normalize +from tqdm import tqdm + +from .model import build_model +from .simple_tokenizer import SimpleTokenizer as _Tokenizer + +try: + from torchvision.transforms import InterpolationMode + BICUBIC = InterpolationMode.BICUBIC +except ImportError: + BICUBIC = Image.BICUBIC + + +if packaging.version.parse(torch.__version__) < packaging.version.parse("1.7.1"): + warnings.warn("PyTorch version 1.7.1 or higher is recommended") + + +__all__ = ["available_models", "load", "tokenize"] +_tokenizer = _Tokenizer() + +_MODELS = { + "RN50": "https://openaipublic.azureedge.net/clip/models/afeb0e10f9e5a86da6080e35cf09123aca3b358a0c3e3b6c78a7b63bc04b6762/RN50.pt", + "RN101": "https://openaipublic.azureedge.net/clip/models/8fa8567bab74a42d41c5915025a8e4538c3bdbe8804a470a72f30b0d94fab599/RN101.pt", + "RN50x4": "https://openaipublic.azureedge.net/clip/models/7e526bd135e493cef0776de27d5f42653e6b4c8bf9e0f653bb11773263205fdd/RN50x4.pt", + "RN50x16": "https://openaipublic.azureedge.net/clip/models/52378b407f34354e150460fe41077663dd5b39c54cd0bfd2b27167a4a06ec9aa/RN50x16.pt", + "RN50x64": "https://openaipublic.azureedge.net/clip/models/be1cfb55d75a9666199fb2206c106743da0f6468c9d327f3e0d0a543a9919d9c/RN50x64.pt", + "ViT-B/32": "https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt", + "ViT-B/16": "https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt", + "ViT-L/14": "https://openaipublic.azureedge.net/clip/models/b8cca3fd41ae0c99ba7e8951adf17d267cdb84cd88be6f7c2e0eca1737a03836/ViT-L-14.pt", + "ViT-L/14@336px": "https://openaipublic.azureedge.net/clip/models/3035c92b350959924f9f00213499208652fc7ea050643e8b385c2dac08641f02/ViT-L-14-336px.pt", +} + + +def _download(url: str, root: str): + os.makedirs(root, exist_ok=True) + filename = os.path.basename(url) + + expected_sha256 = url.split("/")[-2] + download_target = os.path.join(root, filename) + + if os.path.exists(download_target) and not os.path.isfile(download_target): + raise RuntimeError(f"{download_target} exists and is not a regular file") + + if os.path.isfile(download_target): + if hashlib.sha256(open(download_target, "rb").read()).hexdigest() == expected_sha256: + return download_target + else: + warnings.warn(f"{download_target} exists, but the SHA256 checksum does not match; re-downloading the file") + + with urllib.request.urlopen(url) as source, open(download_target, "wb") as output: + with tqdm(total=int(source.info().get("Content-Length")), ncols=80, unit='iB', unit_scale=True, unit_divisor=1024) as loop: + while True: + buffer = source.read(8192) + if not buffer: + break + + output.write(buffer) + loop.update(len(buffer)) + + if hashlib.sha256(open(download_target, "rb").read()).hexdigest() != expected_sha256: + raise RuntimeError("Model has been downloaded but the SHA256 checksum does not not match") + + return download_target + + +def _convert_image_to_rgb(image): + return image.convert("RGB") + + +def _transform(n_px): + return Compose([ + Resize(n_px, interpolation=BICUBIC), + CenterCrop(n_px), + _convert_image_to_rgb, + ToTensor(), + Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711)), + ]) + + +def available_models() -> List[str]: + """Returns the names of available CLIP models""" + return list(_MODELS.keys()) + + +def load(name: str, device: Union[str, torch.device] = "cuda" if torch.cuda.is_available() else "cpu", jit: bool = False, download_root: str = None): + """Load a CLIP model + + Parameters + ---------- + name : str + A model name listed by `clip.available_models()`, or the path to a model checkpoint containing the state_dict + + device : Union[str, torch.device] + The device to put the loaded model + + jit : bool + Whether to load the optimized JIT model or more hackable non-JIT model (default). + + download_root: str + path to download the model files; by default, it uses "~/.cache/clip" + + Returns + ------- + model : torch.nn.Module + The CLIP model + + preprocess : Callable[[PIL.Image], torch.Tensor] + A torchvision transform that converts a PIL image into a tensor that the returned model can take as its input + """ + if name in _MODELS: + model_path = _download(_MODELS[name], download_root or os.path.expanduser("~/.cache/clip")) + elif os.path.isfile(name): + model_path = name + else: + raise RuntimeError(f"Model {name} not found; available models = {available_models()}") + + with open(model_path, 'rb') as opened_file: + try: + # loading JIT archive + model = torch.jit.load(opened_file, map_location=device if jit else "cpu").eval() + state_dict = None + except RuntimeError: + # loading saved state dict + if jit: + warnings.warn(f"File {model_path} is not a JIT archive. Loading as a state dict instead") + jit = False + state_dict = torch.load(opened_file, map_location="cpu") + + if not jit: + model = build_model(state_dict or model.state_dict()).to(device) + if str(device) == "cpu": + model.float() + return model, _transform(model.visual.input_resolution) + + # patch the device names + device_holder = torch.jit.trace(lambda: torch.ones([]).to(torch.device(device)), example_inputs=[]) + device_node = [n for n in device_holder.graph.findAllNodes("prim::Constant") if "Device" in repr(n)][-1] + + def patch_device(module): + try: + graphs = [module.graph] if hasattr(module, "graph") else [] + except RuntimeError: + graphs = [] + + if hasattr(module, "forward1"): + graphs.append(module.forward1.graph) + + for graph in graphs: + for node in graph.findAllNodes("prim::Constant"): + if "value" in node.attributeNames() and str(node["value"]).startswith("cuda"): + node.copyAttributes(device_node) + + model.apply(patch_device) + patch_device(model.encode_image) + patch_device(model.encode_text) + + # patch dtype to float32 on CPU + if str(device) == "cpu": + float_holder = torch.jit.trace(lambda: torch.ones([]).float(), example_inputs=[]) + float_input = list(float_holder.graph.findNode("aten::to").inputs())[1] + float_node = float_input.node() + + def patch_float(module): + try: + graphs = [module.graph] if hasattr(module, "graph") else [] + except RuntimeError: + graphs = [] + + if hasattr(module, "forward1"): + graphs.append(module.forward1.graph) + + for graph in graphs: + for node in graph.findAllNodes("aten::to"): + inputs = list(node.inputs()) + for i in [1, 2]: # dtype can be the second or third argument to aten::to() + if inputs[i].node()["value"] == 5: + inputs[i].node().copyAttributes(float_node) + + model.apply(patch_float) + patch_float(model.encode_image) + patch_float(model.encode_text) + + model.float() + + return model, _transform(model.input_resolution.item()) + + +def tokenize(texts: Union[str, List[str]], context_length: int = 77, truncate: bool = False) -> Union[torch.IntTensor, torch.LongTensor]: + """ + Returns the tokenized representation of given input string(s) + + Parameters + ---------- + texts : Union[str, List[str]] + An input string or a list of input strings to tokenize + + context_length : int + The context length to use; all CLIP models use 77 as the context length + + truncate: bool + Whether to truncate the text in case its encoding is longer than the context length + + Returns + ------- + A two-dimensional tensor containing the resulting tokens, shape = [number of input strings, context_length]. + We return LongTensor when torch version is <1.8.0, since older index_select requires indices to be long. + """ + if isinstance(texts, str): + texts = [texts] + + sot_token = _tokenizer.encoder["<|startoftext|>"] + eot_token = _tokenizer.encoder["<|endoftext|>"] + all_tokens = [[sot_token] + _tokenizer.encode(text) + [eot_token] for text in texts] + if packaging.version.parse(torch.__version__) < packaging.version.parse("1.8.0"): + result = torch.zeros(len(all_tokens), context_length, dtype=torch.long) + else: + result = torch.zeros(len(all_tokens), context_length, dtype=torch.int) + + for i, tokens in enumerate(all_tokens): + if len(tokens) > context_length: + if truncate: + tokens = tokens[:context_length] + tokens[-1] = eot_token + else: + raise RuntimeError(f"Input {texts[i]} is too long for context length {context_length}") + result[i, :len(tokens)] = torch.tensor(tokens) + + return result diff --git a/detector_codes/AIDE-main/models/clip/lora_clip.py b/detector_codes/AIDE-main/models/clip/lora_clip.py new file mode 100644 index 0000000000000000000000000000000000000000..2b9b0541d26dd31e565a73a259ee1f1d345571be --- /dev/null +++ b/detector_codes/AIDE-main/models/clip/lora_clip.py @@ -0,0 +1,151 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from models.clip import clip +import math +import copy +from collections import OrderedDict +import numpy as np +from torch.utils.data import Dataset, DataLoader +from PIL import Image +import os + + +class LoRALayer(nn.Module): + """ + LoRA层的实现:添加低秩矩阵以高效微调大型模型 + """ + + def __init__(self, in_dim, out_dim, rank=4, alpha=1.0): + super().__init__() + # 缩放系数,决定了LoRA部分的权重 + self.scale = alpha / rank + + # 创建LoRA的低秩矩阵A和B + self.lora_down = nn.Linear(in_dim, rank, bias=False) + self.lora_up = nn.Linear(rank, out_dim, bias=False) + + # 初始化:下投影随机初始化,上投影初始化为0 + nn.init.kaiming_uniform_(self.lora_down.weight, a=math.sqrt(5)) + nn.init.zeros_(self.lora_up.weight) + + def forward(self, x): + # 计算LoRA的贡献并返回 + return self.lora_up(self.lora_down(x)) * self.scale + + +# ---------------------- 2. CLIP的LoRA包装器 ---------------------- + +class CLIPWithLoRA(nn.Module): + """ + 为CLIP的图像编码器添加LoRA适配层的完整实现 + """ + + def __init__(self, base_clip_model, lora_rank=8, lora_alpha=16): + super().__init__() + # 保存原始的CLIP模型 + self.clip = base_clip_model + + # 冻结原始CLIP的所有参数 + for param in self.clip.parameters(): + param.requires_grad = False + + # 分析CLIP的图像编码器结构 + # 对于ViT-L/14,每个Transformer块有三个投影矩阵 + # 我们将为每个投影矩阵添加LoRA层 + self.image_encoder = self.clip.visual + + # 检查并确定这是一个Vision Transformer结构 + assert hasattr(self.image_encoder, 'transformer'), "不支持的CLIP视觉编码器类型" + + # 创建LoRA层字典 + self.lora_layers = nn.ModuleDict() + + # 获取隐藏层维度(对于ViT-L/14,通常是1024) + if hasattr(self.image_encoder, 'width'): + hidden_dim = self.image_encoder.width + else: + hidden_dim = self.image_encoder.transformer.width + + # 为每个Transformer块的注意力层添加LoRA + for block_idx, block in enumerate(self.image_encoder.transformer.resblocks): + # 为QKV矩阵添加LoRA + # 注意:根据OpenAI的CLIP实现,通常QKV是在一个单一的投影中 + attn = block.attn + + # 添加LoRA到Query投影 + self.lora_layers[f"block_{block_idx}_q"] = LoRALayer( + hidden_dim, hidden_dim, + rank=lora_rank, alpha=lora_alpha + ) + + # 添加LoRA到Key投影 + self.lora_layers[f"block_{block_idx}_k"] = LoRALayer( + hidden_dim, hidden_dim, + rank=lora_rank, alpha=lora_alpha + ) + + # 添加LoRA到Value投影 + self.lora_layers[f"block_{block_idx}_v"] = LoRALayer( + hidden_dim, hidden_dim, + rank=lora_rank, alpha=lora_alpha + ) + + # 修改注意力的前向传播方法 + self._patch_attention_forward(block.attn, block_idx) + + def _patch_attention_forward(self, attn_module, block_idx): + """ + 通过钩子技术修改注意力层的前向传播,插入LoRA计算 + """ + # 保存原始的前向传播方法 + original_forward = attn_module.forward + + # 保存self引用以在闭包中使用 + _self = self + + # 定义新的前向传播方法 + def lora_forward(self, query, key, value, need_weights=False, **kwargs): + # 获取模型尺寸 + B, N, C = query.shape + + # 原始的QKV投影 + original_qkv = self.in_proj_weight + + # 将输入分成三部分用于q、k、v计算 + qkv = F.linear(query, original_qkv, self.in_proj_bias) + qkv = qkv.reshape(B, N, 3, C).permute(2, 0, 1, 3) # [3, B, N, C] + q, k, v = qkv[0], qkv[1], qkv[2] + + # 应用LoRA修改到q、k、v + q = q + _self.lora_layers[f"block_{block_idx}_q"](query) + k = k + _self.lora_layers[f"block_{block_idx}_k"](query) + v = v + _self.lora_layers[f"block_{block_idx}_v"](query) + + # 继续原始注意力计算 + self.scale = q.size(-1) ** -0.5 + q = q * self.scale + attn = (q @ k.transpose(-2, -1)) + attn = attn.softmax(dim=-1) + # attn = self.attn_dropout(attn) + + x = (attn @ v).transpose(1, 2).reshape(B, N, C) + x = self.out_proj(x) + # x = self.out_dropout(x) + + if need_weights: + return x, attn + return x + + # 替换原始的前向传播方法 + attn_module.forward = lora_forward.__get__(attn_module, type(attn_module)) + + def forward(self, image): + """ + 模型的前向传播,使用LoRA修改的CLIP进行图像编码 + """ + # 直接使用修改后的CLIP模型 + image_features = self.clip.encode_image(image) + + # 返回归一化的图像特征 + return image_features diff --git a/detector_codes/AIDE-main/models/clip/model.py b/detector_codes/AIDE-main/models/clip/model.py new file mode 100644 index 0000000000000000000000000000000000000000..6b1defbddfed45f4b6bcdeeef282f22b7dd17864 --- /dev/null +++ b/detector_codes/AIDE-main/models/clip/model.py @@ -0,0 +1,452 @@ +from collections import OrderedDict +from typing import Tuple, Union + +import numpy as np +import torch +import torch.nn.functional as F +from torch import nn + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1): + super().__init__() + + # all conv layers have stride 1. an avgpool is performed after the second convolution when stride > 1 + self.conv1 = nn.Conv2d(inplanes, planes, 1, bias=False) + self.bn1 = nn.BatchNorm2d(planes) + self.relu1 = nn.ReLU(inplace=True) + + self.conv2 = nn.Conv2d(planes, planes, 3, padding=1, bias=False) + self.bn2 = nn.BatchNorm2d(planes) + self.relu2 = nn.ReLU(inplace=True) + + self.avgpool = nn.AvgPool2d(stride) if stride > 1 else nn.Identity() + + self.conv3 = nn.Conv2d(planes, planes * self.expansion, 1, bias=False) + self.bn3 = nn.BatchNorm2d(planes * self.expansion) + self.relu3 = nn.ReLU(inplace=True) + + self.downsample = None + self.stride = stride + + if stride > 1 or inplanes != planes * Bottleneck.expansion: + # downsampling layer is prepended with an avgpool, and the subsequent convolution has stride 1 + self.downsample = nn.Sequential(OrderedDict([ + ("-1", nn.AvgPool2d(stride)), + ("0", nn.Conv2d(inplanes, planes * self.expansion, 1, stride=1, bias=False)), + ("1", nn.BatchNorm2d(planes * self.expansion)) + ])) + + def forward(self, x: torch.Tensor): + identity = x + + out = self.relu1(self.bn1(self.conv1(x))) + out = self.relu2(self.bn2(self.conv2(out))) + out = self.avgpool(out) + out = self.bn3(self.conv3(out)) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu3(out) + return out + + +class AttentionPool2d(nn.Module): + def __init__(self, spacial_dim: int, embed_dim: int, num_heads: int, output_dim: int = None): + super().__init__() + self.positional_embedding = nn.Parameter(torch.randn(spacial_dim ** 2 + 1, embed_dim) / embed_dim ** 0.5) + self.k_proj = nn.Linear(embed_dim, embed_dim) + self.q_proj = nn.Linear(embed_dim, embed_dim) + self.v_proj = nn.Linear(embed_dim, embed_dim) + self.c_proj = nn.Linear(embed_dim, output_dim or embed_dim) + self.num_heads = num_heads + + def forward(self, x): + x = x.flatten(start_dim=2).permute(2, 0, 1) # NCHW -> (HW)NC + x = torch.cat([x.mean(dim=0, keepdim=True), x], dim=0) # (HW+1)NC + x = x + self.positional_embedding[:, None, :].to(x.dtype) # (HW+1)NC + x, _ = F.multi_head_attention_forward( + query=x[:1], key=x, value=x, + embed_dim_to_check=x.shape[-1], + num_heads=self.num_heads, + q_proj_weight=self.q_proj.weight, + k_proj_weight=self.k_proj.weight, + v_proj_weight=self.v_proj.weight, + in_proj_weight=None, + in_proj_bias=torch.cat([self.q_proj.bias, self.k_proj.bias, self.v_proj.bias]), + bias_k=None, + bias_v=None, + add_zero_attn=False, + dropout_p=0, + out_proj_weight=self.c_proj.weight, + out_proj_bias=self.c_proj.bias, + use_separate_proj_weight=True, + training=self.training, + need_weights=False + ) + return x.squeeze(0) + + +class ModifiedResNet(nn.Module): + """ + A ResNet class that is similar to torchvision's but contains the following changes: + - There are now 3 "stem" convolutions as opposed to 1, with an average pool instead of a max pool. + - Performs anti-aliasing strided convolutions, where an avgpool is prepended to convolutions with stride > 1 + - The final pooling layer is a QKV attention instead of an average pool + """ + + def __init__(self, layers, output_dim, heads, input_resolution=224, width=64): + super().__init__() + self.output_dim = output_dim + self.input_resolution = input_resolution + + # the 3-layer stem + self.conv1 = nn.Conv2d(3, width // 2, kernel_size=3, stride=2, padding=1, bias=False) + self.bn1 = nn.BatchNorm2d(width // 2) + self.relu1 = nn.ReLU(inplace=True) + self.conv2 = nn.Conv2d(width // 2, width // 2, kernel_size=3, padding=1, bias=False) + self.bn2 = nn.BatchNorm2d(width // 2) + self.relu2 = nn.ReLU(inplace=True) + self.conv3 = nn.Conv2d(width // 2, width, kernel_size=3, padding=1, bias=False) + self.bn3 = nn.BatchNorm2d(width) + self.relu3 = nn.ReLU(inplace=True) + self.avgpool = nn.AvgPool2d(2) + + # residual layers + self._inplanes = width # this is a *mutable* variable used during construction + self.layer1 = self._make_layer(width, layers[0]) + self.layer2 = self._make_layer(width * 2, layers[1], stride=2) + self.layer3 = self._make_layer(width * 4, layers[2], stride=2) + self.layer4 = self._make_layer(width * 8, layers[3], stride=2) + + embed_dim = width * 32 # the ResNet feature dimension + self.attnpool = AttentionPool2d(input_resolution // 32, embed_dim, heads, output_dim) + + def _make_layer(self, planes, blocks, stride=1): + layers = [Bottleneck(self._inplanes, planes, stride)] + + self._inplanes = planes * Bottleneck.expansion + for _ in range(1, blocks): + layers.append(Bottleneck(self._inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + def stem(x): + x = self.relu1(self.bn1(self.conv1(x))) + x = self.relu2(self.bn2(self.conv2(x))) + x = self.relu3(self.bn3(self.conv3(x))) + x = self.avgpool(x) + return x + + x = x.type(self.conv1.weight.dtype) + x = stem(x) + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + x = self.attnpool(x) + + return x + + +class LayerNorm(nn.LayerNorm): + """Subclass torch's LayerNorm to handle fp16.""" + + def forward(self, x: torch.Tensor): + orig_type = x.dtype + ret = super().forward(x.type(torch.float32)) + return ret.type(orig_type) + + +class QuickGELU(nn.Module): + def forward(self, x: torch.Tensor): + return x * torch.sigmoid(1.702 * x) + + +class ResidualAttentionBlock(nn.Module): + def __init__(self, d_model: int, n_head: int, attn_mask: torch.Tensor = None): + super().__init__() + + self.attn = nn.MultiheadAttention(d_model, n_head) + self.ln_1 = LayerNorm(d_model) + self.mlp = nn.Sequential(OrderedDict([ + ("c_fc", nn.Linear(d_model, d_model * 4)), + ("gelu", QuickGELU()), + ("c_proj", nn.Linear(d_model * 4, d_model)) + ])) + self.ln_2 = LayerNorm(d_model) + self.attn_mask = attn_mask + + def attention(self, x: torch.Tensor): + self.attn_mask = self.attn_mask.to(dtype=x.dtype, device=x.device) if self.attn_mask is not None else None + return self.attn(x, x, x, need_weights=False, attn_mask=self.attn_mask)[0] + + def forward(self, x: torch.Tensor): + x = x + self.attention(self.ln_1(x)) + x = x + self.mlp(self.ln_2(x)) + return x + + +class Transformer(nn.Module): + def __init__(self, width: int, layers: int, heads: int, attn_mask: torch.Tensor = None): + super().__init__() + self.width = width + self.layers = layers + self.resblocks = nn.Sequential(*[ResidualAttentionBlock(width, heads, attn_mask) for _ in range(layers)]) + + def forward(self, x: torch.Tensor): + out = {} + for idx, layer in enumerate(self.resblocks.children()): + x = layer(x) + out['layer'+str(idx)] = x[0] # shape:LND. choose cls token feature + return out, x + + # return self.resblocks(x) # This is the original code + + +class VisionTransformer(nn.Module): + def __init__(self, input_resolution: int, patch_size: int, width: int, layers: int, heads: int, output_dim: int): + super().__init__() + self.input_resolution = input_resolution + self.output_dim = output_dim + self.conv1 = nn.Conv2d(in_channels=3, out_channels=width, kernel_size=patch_size, stride=patch_size, bias=False) + + scale = width ** -0.5 + self.class_embedding = nn.Parameter(scale * torch.randn(width)) + self.positional_embedding = nn.Parameter(scale * torch.randn((input_resolution // patch_size) ** 2 + 1, width)) + self.ln_pre = LayerNorm(width) + + self.transformer = Transformer(width, layers, heads) + + self.ln_post = LayerNorm(width) + self.proj = nn.Parameter(scale * torch.randn(width, output_dim)) + + + + def forward(self, x: torch.Tensor): + x = self.conv1(x) # shape = [*, width, grid, grid] + x = x.reshape(x.shape[0], x.shape[1], -1) # shape = [*, width, grid ** 2] + x = x.permute(0, 2, 1) # shape = [*, grid ** 2, width] + x = torch.cat([self.class_embedding.to(x.dtype) + torch.zeros(x.shape[0], 1, x.shape[-1], dtype=x.dtype, device=x.device), x], dim=1) # shape = [*, grid ** 2 + 1, width] + x = x + self.positional_embedding.to(x.dtype) + x = self.ln_pre(x) + + x = x.permute(1, 0, 2) # NLD -> LND + out, x = self.transformer(x) + x = x.permute(1, 0, 2) # LND -> NLD + + x = self.ln_post(x[:, 0, :]) + + + out['before_projection'] = x + + if self.proj is not None: + x = x @ self.proj + out['after_projection'] = x + + # Return both intermediate features and final clip feature + # return out + + # This only returns CLIP features + return x + + +class CLIP(nn.Module): + def __init__(self, + embed_dim: int, + # vision + image_resolution: int, + vision_layers: Union[Tuple[int, int, int, int], int], + vision_width: int, + vision_patch_size: int, + # text + context_length: int, + vocab_size: int, + transformer_width: int, + transformer_heads: int, + transformer_layers: int + ): + super().__init__() + + self.context_length = context_length + + if isinstance(vision_layers, (tuple, list)): + vision_heads = vision_width * 32 // 64 + self.visual = ModifiedResNet( + layers=vision_layers, + output_dim=embed_dim, + heads=vision_heads, + input_resolution=image_resolution, + width=vision_width + ) + else: + vision_heads = vision_width // 64 + self.visual = VisionTransformer( + input_resolution=image_resolution, + patch_size=vision_patch_size, + width=vision_width, + layers=vision_layers, + heads=vision_heads, + output_dim=embed_dim + ) + + self.transformer = Transformer( + width=transformer_width, + layers=transformer_layers, + heads=transformer_heads, + attn_mask=self.build_attention_mask() + ) + + self.vocab_size = vocab_size + self.token_embedding = nn.Embedding(vocab_size, transformer_width) + self.positional_embedding = nn.Parameter(torch.empty(self.context_length, transformer_width)) + self.ln_final = LayerNorm(transformer_width) + + self.text_projection = nn.Parameter(torch.empty(transformer_width, embed_dim)) + self.logit_scale = nn.Parameter(torch.ones([]) * np.log(1 / 0.07)) + + self.initialize_parameters() + + def initialize_parameters(self): + nn.init.normal_(self.token_embedding.weight, std=0.02) + nn.init.normal_(self.positional_embedding, std=0.01) + + if isinstance(self.visual, ModifiedResNet): + if self.visual.attnpool is not None: + std = self.visual.attnpool.c_proj.in_features ** -0.5 + nn.init.normal_(self.visual.attnpool.q_proj.weight, std=std) + nn.init.normal_(self.visual.attnpool.k_proj.weight, std=std) + nn.init.normal_(self.visual.attnpool.v_proj.weight, std=std) + nn.init.normal_(self.visual.attnpool.c_proj.weight, std=std) + + for resnet_block in [self.visual.layer1, self.visual.layer2, self.visual.layer3, self.visual.layer4]: + for name, param in resnet_block.named_parameters(): + if name.endswith("bn3.weight"): + nn.init.zeros_(param) + + proj_std = (self.transformer.width ** -0.5) * ((2 * self.transformer.layers) ** -0.5) + attn_std = self.transformer.width ** -0.5 + fc_std = (2 * self.transformer.width) ** -0.5 + for block in self.transformer.resblocks: + nn.init.normal_(block.attn.in_proj_weight, std=attn_std) + nn.init.normal_(block.attn.out_proj.weight, std=proj_std) + nn.init.normal_(block.mlp.c_fc.weight, std=fc_std) + nn.init.normal_(block.mlp.c_proj.weight, std=proj_std) + + if self.text_projection is not None: + nn.init.normal_(self.text_projection, std=self.transformer.width ** -0.5) + + def build_attention_mask(self): + # lazily create causal attention mask, with full attention between the vision tokens + # pytorch uses additive attention mask; fill with -inf + mask = torch.empty(self.context_length, self.context_length) + mask.fill_(float("-inf")) + mask.triu_(1) # zero out the lower diagonal + return mask + + @property + def dtype(self): + return self.visual.conv1.weight.dtype + + def encode_image(self, image): + return self.visual(image.type(self.dtype)) + + def encode_text(self, text): + x = self.token_embedding(text).type(self.dtype) # [batch_size, n_ctx, d_model] + + x = x + self.positional_embedding.type(self.dtype) + x = x.permute(1, 0, 2) # NLD -> LND + x = self.transformer(x) + x = x.permute(1, 0, 2) # LND -> NLD + x = self.ln_final(x).type(self.dtype) + + # x.shape = [batch_size, n_ctx, transformer.width] + # take features from the eot embedding (eot_token is the highest number in each sequence) + x = x[torch.arange(x.shape[0]), text.argmax(dim=-1)] @ self.text_projection + + return x + + def forward(self, image, text): + image_features = self.encode_image(image) + text_features = self.encode_text(text) + + # normalized features + image_features = image_features / image_features.norm(dim=1, keepdim=True) + text_features = text_features / text_features.norm(dim=1, keepdim=True) + + # cosine similarity as logits + logit_scale = self.logit_scale.exp() + logits_per_image = logit_scale * image_features @ text_features.t() + logits_per_text = logits_per_image.t() + + # shape = [global_batch_size, global_batch_size] + return logits_per_image, logits_per_text + + +def convert_weights(model: nn.Module): + """Convert applicable model parameters to fp16""" + + def _convert_weights_to_fp16(l): + if isinstance(l, (nn.Conv1d, nn.Conv2d, nn.Linear)): + l.weight.data = l.weight.data.half() + if l.bias is not None: + l.bias.data = l.bias.data.half() + + if isinstance(l, nn.MultiheadAttention): + for attr in [*[f"{s}_proj_weight" for s in ["in", "q", "k", "v"]], "in_proj_bias", "bias_k", "bias_v"]: + tensor = getattr(l, attr) + if tensor is not None: + tensor.data = tensor.data.half() + + for name in ["text_projection", "proj"]: + if hasattr(l, name): + attr = getattr(l, name) + if attr is not None: + attr.data = attr.data.half() + + model.apply(_convert_weights_to_fp16) + + +def build_model(state_dict: dict): + vit = "visual.proj" in state_dict + + if vit: + vision_width = state_dict["visual.conv1.weight"].shape[0] + vision_layers = len([k for k in state_dict.keys() if k.startswith("visual.") and k.endswith(".attn.in_proj_weight")]) + vision_patch_size = state_dict["visual.conv1.weight"].shape[-1] + grid_size = round((state_dict["visual.positional_embedding"].shape[0] - 1) ** 0.5) + image_resolution = vision_patch_size * grid_size + else: + counts: list = [len(set(k.split(".")[2] for k in state_dict if k.startswith(f"visual.layer{b}"))) for b in [1, 2, 3, 4]] + vision_layers = tuple(counts) + vision_width = state_dict["visual.layer1.0.conv1.weight"].shape[0] + output_width = round((state_dict["visual.attnpool.positional_embedding"].shape[0] - 1) ** 0.5) + vision_patch_size = None + assert output_width ** 2 + 1 == state_dict["visual.attnpool.positional_embedding"].shape[0] + image_resolution = output_width * 32 + + embed_dim = state_dict["text_projection"].shape[1] + context_length = state_dict["positional_embedding"].shape[0] + vocab_size = state_dict["token_embedding.weight"].shape[0] + transformer_width = state_dict["ln_final.weight"].shape[0] + transformer_heads = transformer_width // 64 + transformer_layers = len(set(k.split(".")[2] for k in state_dict if k.startswith("transformer.resblocks"))) + + model = CLIP( + embed_dim, + image_resolution, vision_layers, vision_width, vision_patch_size, + context_length, vocab_size, transformer_width, transformer_heads, transformer_layers + ) + + for key in ["input_resolution", "context_length", "vocab_size"]: + if key in state_dict: + del state_dict[key] + + convert_weights(model) + model.load_state_dict(state_dict) + return model.eval() diff --git a/detector_codes/AIDE-main/models/clip/simple_tokenizer.py b/detector_codes/AIDE-main/models/clip/simple_tokenizer.py new file mode 100644 index 0000000000000000000000000000000000000000..ec202a94339b1eb1cf92f5b3ac26ab7d027b3854 --- /dev/null +++ b/detector_codes/AIDE-main/models/clip/simple_tokenizer.py @@ -0,0 +1,132 @@ +import gzip +import html +import os +from functools import lru_cache + +import ftfy +import regex as re + + +@lru_cache() +def default_bpe(): + return os.path.join(os.path.dirname(os.path.abspath(__file__)), "bpe_simple_vocab_16e6.txt.gz") + + +@lru_cache() +def bytes_to_unicode(): + """ + Returns list of utf-8 byte and a corresponding list of unicode strings. + The reversible bpe codes work on unicode strings. + This means you need a large # of unicode characters in your vocab if you want to avoid UNKs. + When you're at something like a 10B token dataset you end up needing around 5K for decent coverage. + This is a signficant percentage of your normal, say, 32K bpe vocab. + To avoid that, we want lookup tables between utf-8 bytes and unicode strings. + And avoids mapping to whitespace/control characters the bpe code barfs on. + """ + bs = list(range(ord("!"), ord("~")+1))+list(range(ord("¡"), ord("¬")+1))+list(range(ord("®"), ord("ÿ")+1)) + cs = bs[:] + n = 0 + for b in range(2**8): + if b not in bs: + bs.append(b) + cs.append(2**8+n) + n += 1 + cs = [chr(n) for n in cs] + return dict(zip(bs, cs)) + + +def get_pairs(word): + """Return set of symbol pairs in a word. + Word is represented as tuple of symbols (symbols being variable-length strings). + """ + pairs = set() + prev_char = word[0] + for char in word[1:]: + pairs.add((prev_char, char)) + prev_char = char + return pairs + + +def basic_clean(text): + text = ftfy.fix_text(text) + text = html.unescape(html.unescape(text)) + return text.strip() + + +def whitespace_clean(text): + text = re.sub(r'\s+', ' ', text) + text = text.strip() + return text + + +class SimpleTokenizer(object): + def __init__(self, bpe_path: str = default_bpe()): + self.byte_encoder = bytes_to_unicode() + self.byte_decoder = {v: k for k, v in self.byte_encoder.items()} + merges = gzip.open(bpe_path).read().decode("utf-8").split('\n') + merges = merges[1:49152-256-2+1] + merges = [tuple(merge.split()) for merge in merges] + vocab = list(bytes_to_unicode().values()) + vocab = vocab + [v+'' for v in vocab] + for merge in merges: + vocab.append(''.join(merge)) + vocab.extend(['<|startoftext|>', '<|endoftext|>']) + self.encoder = dict(zip(vocab, range(len(vocab)))) + self.decoder = {v: k for k, v in self.encoder.items()} + self.bpe_ranks = dict(zip(merges, range(len(merges)))) + self.cache = {'<|startoftext|>': '<|startoftext|>', '<|endoftext|>': '<|endoftext|>'} + self.pat = re.compile(r"""<\|startoftext\|>|<\|endoftext\|>|'s|'t|'re|'ve|'m|'ll|'d|[\p{L}]+|[\p{N}]|[^\s\p{L}\p{N}]+""", re.IGNORECASE) + + def bpe(self, token): + if token in self.cache: + return self.cache[token] + word = tuple(token[:-1]) + ( token[-1] + '',) + pairs = get_pairs(word) + + if not pairs: + return token+'' + + while True: + bigram = min(pairs, key = lambda pair: self.bpe_ranks.get(pair, float('inf'))) + if bigram not in self.bpe_ranks: + break + first, second = bigram + new_word = [] + i = 0 + while i < len(word): + try: + j = word.index(first, i) + new_word.extend(word[i:j]) + i = j + except: + new_word.extend(word[i:]) + break + + if word[i] == first and i < len(word)-1 and word[i+1] == second: + new_word.append(first+second) + i += 2 + else: + new_word.append(word[i]) + i += 1 + new_word = tuple(new_word) + word = new_word + if len(word) == 1: + break + else: + pairs = get_pairs(word) + word = ' '.join(word) + self.cache[token] = word + return word + + def encode(self, text): + bpe_tokens = [] + text = whitespace_clean(basic_clean(text)).lower() + for token in re.findall(self.pat, text): + token = ''.join(self.byte_encoder[b] for b in token.encode('utf-8')) + bpe_tokens.extend(self.encoder[bpe_token] for bpe_token in self.bpe(token).split(' ')) + return bpe_tokens + + def decode(self, tokens): + text = ''.join([self.decoder[token] for token in tokens]) + text = bytearray([self.byte_decoder[c] for c in text]).decode('utf-8', errors="replace").replace('', ' ') + return text diff --git a/detector_codes/AIDE-main/models/srm_filter_kernel.py b/detector_codes/AIDE-main/models/srm_filter_kernel.py new file mode 100644 index 0000000000000000000000000000000000000000..ddc6cca1ab40db6a5dff85aa6d377abce27cea82 --- /dev/null +++ b/detector_codes/AIDE-main/models/srm_filter_kernel.py @@ -0,0 +1,220 @@ + +import numpy as np + +filter_class_1 = [ + np.array([ + [1, 0, 0], + [0, -1, 0], + [0, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 1, 0], + [0, -1, 0], + [0, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 0, 1], + [0, -1, 0], + [0, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 0, 0], + [1, -1, 0], + [0, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 0, 0], + [0, -1, 1], + [0, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 0, 0], + [0, -1, 0], + [1, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 0, 0], + [0, -1, 0], + [0, 1, 0] + ], dtype=np.float32), + np.array([ + [0, 0, 0], + [0, -1, 0], + [0, 0, 1] + ], dtype=np.float32) +] + + +filter_class_2 = [ + np.array([ + [1, 0, 0], + [0, -2, 0], + [0, 0, 1] + ], dtype=np.float32), + np.array([ + [0, 1, 0], + [0, -2, 0], + [0, 1, 0] + ], dtype=np.float32), + np.array([ + [0, 0, 1], + [0, -2, 0], + [1, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 0, 0], + [1, -2, 1], + [0, 0, 0] + ], dtype=np.float32), +] + + +filter_class_3 = [ + np.array([ + [-1, 0, 0, 0, 0], + [0, 3, 0, 0, 0], + [0, 0, -3, 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 0, -1, 0, 0], + [0, 0, 3, 0, 0], + [0, 0, -3, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 0, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 0, 0, 0, -1], + [0, 0, 0, 3, 0], + [0, 0, -3, 0, 0], + [0, 1, 0, 0, 0], + [0, 0, 0, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 0, 0, 0, 0], + [0, 0, 0, 0, 0], + [0, 1, -3, 3, -1], + [0, 0, 0, 0, 0], + [0, 0, 0, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 0, 0, 0, 0], + [0, 1, 0, 0, 0], + [0, 0, -3, 0, 0], + [0, 0, 0, 3, 0], + [0, 0, 0, 0, -1] + ], dtype=np.float32), + np.array([ + [0, 0, 0, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, -3, 0, 0], + [0, 0, 3, 0, 0], + [0, 0, -1, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 0, 0, 0, 0], + [0, 0, 0, 1, 0], + [0, 0, -3, 0, 0], + [0, 3, 0, 0, 0], + [-1, 0, 0, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 0, 0, 0, 0], + [0, 0, 0, 0, 0], + [-1, 3, -3, 1, 0], + [0, 0, 0, 0, 0], + [0, 0, 0, 0, 0] + ], dtype=np.float32) +] + + +filter_edge_3x3 = [ + np.array([ + [-1, 2, -1], + [2, -4, 2], + [0, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 2, -1], + [0, -4, 2], + [0, 2, -1] + ], dtype=np.float32), + np.array([ + [0, 0, 0], + [2, -4, 2], + [-1, 2, -1] + ], dtype=np.float32), + np.array([ + [-1, 2, 0], + [2, -4, 0], + [-1, 2, 0] + ], dtype=np.float32), +] + +filter_edge_5x5 = [ + np.array([ + [-1, 2, -2, 2, -1], + [2, -6, 8, -6, 2], + [-2, 8, -12, 8, -2], + [0, 0, 0, 0, 0], + [0, 0, 0, 0, 0] + ], dtype=np.float32), + np.array([ + [0, 0, -2, 2, -1], + [0, 0, 8, -6, 2], + [0, 0, -12, 8, -2], + [0, 0, 8, -6, 2], + [0, 0, -2, 2, -1] + ], dtype=np.float32), + np.array([ + [0, 0, 0, 0, 0], + [0, 0, 0, 0, 0], + [-2, 8, -12, 8, -2], + [2, -6, 8, -6, 2], + [-1, 2, -2, 2, -1] + ], dtype=np.float32), + np.array([ + [-1, 2, -2, 0, 0], + [2, -6, 8, 0, 0], + [-2, 8, -12, 0, 0], + [2, -6, 8, 0, 0], + [-1, 2, -2, 0, 0] + ], dtype=np.float32), +] + +square_3x3 = np.array([ + [-1, 2, -1], + [2, -4, 2], + [-1, 2, -1] +], dtype=np.float32) + +square_5x5 = np.array([ + [-1, 2, -2, 2, -1], + [2, -6, 8, -6, 2], + [-2, 8, -12, 8, -2], + [2, -6, 8, -6, 2], + [-1, 2, -2, 2, -1] +], dtype=np.float32) + + +all_hpf_list = filter_class_1 + filter_class_2 + filter_class_3 + filter_edge_3x3 + filter_edge_5x5 + [square_3x3, square_5x5] + +hpf_3x3_list = filter_class_1 + filter_class_2 + filter_edge_3x3 + [square_3x3] +hpf_5x5_list = filter_class_3 + filter_edge_5x5 + [square_5x5] + +normalized_filter_class_2 = [hpf / 2 for hpf in filter_class_2] +normalized_filter_class_3 = [hpf / 3 for hpf in filter_class_3] +normalized_filter_edge_3x3 = [hpf / 4 for hpf in filter_edge_3x3] +normalized_square_3x3 = square_3x3 / 4 +normalized_filter_edge_5x5 = [hpf / 12 for hpf in filter_edge_5x5] +normalized_square_5x5 = square_5x5 / 12 + +all_normalized_hpf_list = filter_class_1 + normalized_filter_class_2 + normalized_filter_class_3 + \ + normalized_filter_edge_3x3 + normalized_filter_edge_5x5 + [normalized_square_3x3, normalized_square_5x5] + +normalized_hpf_3x3_list = filter_class_1 + normalized_filter_class_2 + normalized_filter_edge_3x3 + [normalized_square_3x3] +normalized_hpf_5x5_list = normalized_filter_class_3 + normalized_filter_edge_5x5 + [normalized_square_5x5] + +normalized_3x3_list = normalized_filter_edge_3x3 + [normalized_square_3x3] +normalized_5x5_list = normalized_filter_edge_5x5 + [normalized_square_5x5] \ No newline at end of file diff --git a/detector_codes/AIDE-main/models/utils.py b/detector_codes/AIDE-main/models/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..fbfbbc546307cb2c1d483182852ca30bdd9fe54d --- /dev/null +++ b/detector_codes/AIDE-main/models/utils.py @@ -0,0 +1,116 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. + +# All rights reserved. + +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + + +import numpy.random as random + +import torch +import torch.nn as nn +import torch.nn.functional as F +# from MinkowskiEngine import SparseTensor + +# class MinkowskiGRN(nn.Module): +# """ GRN layer for sparse tensors. +# """ +# def __init__(self, dim): +# super().__init__() +# self.gamma = nn.Parameter(torch.zeros(1, dim)) +# self.beta = nn.Parameter(torch.zeros(1, dim)) + +# def forward(self, x): +# cm = x.coordinate_manager +# in_key = x.coordinate_map_key + +# Gx = torch.norm(x.F, p=2, dim=0, keepdim=True) +# Nx = Gx / (Gx.mean(dim=-1, keepdim=True) + 1e-6) +# return SparseTensor( +# self.gamma * (x.F * Nx) + self.beta + x.F, +# coordinate_map_key=in_key, +# coordinate_manager=cm) + +# class MinkowskiDropPath(nn.Module): +# """ Drop Path for sparse tensors. +# """ + +# def __init__(self, drop_prob: float = 0., scale_by_keep: bool = True): +# super(MinkowskiDropPath, self).__init__() +# self.drop_prob = drop_prob +# self.scale_by_keep = scale_by_keep + +# def forward(self, x): +# if self.drop_prob == 0. or not self.training: +# return x +# cm = x.coordinate_manager +# in_key = x.coordinate_map_key +# keep_prob = 1 - self.drop_prob +# mask = torch.cat([ +# torch.ones(len(_)) if random.uniform(0, 1) > self.drop_prob +# else torch.zeros(len(_)) for _ in x.decomposed_coordinates +# ]).view(-1, 1).to(x.device) +# if keep_prob > 0.0 and self.scale_by_keep: +# mask.div_(keep_prob) +# return SparseTensor( +# x.F * mask, +# coordinate_map_key=in_key, +# coordinate_manager=cm) + +# class MinkowskiLayerNorm(nn.Module): +# """ Channel-wise layer normalization for sparse tensors. +# """ + +# def __init__( +# self, +# normalized_shape, +# eps=1e-6, +# ): +# super(MinkowskiLayerNorm, self).__init__() +# self.ln = nn.LayerNorm(normalized_shape, eps=eps) +# def forward(self, input): +# output = self.ln(input.F) +# return SparseTensor( +# output, +# coordinate_map_key=input.coordinate_map_key, +# coordinate_manager=input.coordinate_manager) + +class LayerNorm(nn.Module): + """ LayerNorm that supports two data formats: channels_last (default) or channels_first. + The ordering of the dimensions in the inputs. channels_last corresponds to inputs with + shape (batch_size, height, width, channels) while channels_first corresponds to inputs + with shape (batch_size, channels, height, width). + """ + def __init__(self, normalized_shape, eps=1e-6, data_format="channels_last"): + super().__init__() + self.weight = nn.Parameter(torch.ones(normalized_shape)) + self.bias = nn.Parameter(torch.zeros(normalized_shape)) + self.eps = eps + self.data_format = data_format + if self.data_format not in ["channels_last", "channels_first"]: + raise NotImplementedError + self.normalized_shape = (normalized_shape, ) + + def forward(self, x): + if self.data_format == "channels_last": + return F.layer_norm(x, self.normalized_shape, self.weight, self.bias, self.eps) + elif self.data_format == "channels_first": + u = x.mean(1, keepdim=True) + s = (x - u).pow(2).mean(1, keepdim=True) + x = (x - u) / torch.sqrt(s + self.eps) + x = self.weight[:, None, None] * x + self.bias[:, None, None] + return x + +class GRN(nn.Module): + """ GRN (Global Response Normalization) layer + """ + def __init__(self, dim): + super().__init__() + self.gamma = nn.Parameter(torch.zeros(1, 1, 1, dim)) + self.beta = nn.Parameter(torch.zeros(1, 1, 1, dim)) + + def forward(self, x): + Gx = torch.norm(x, p=2, dim=(1,2), keepdim=True) + Nx = Gx / (Gx.mean(dim=-1, keepdim=True) + 1e-6) + return self.gamma * (x * Nx) + self.beta + x \ No newline at end of file diff --git a/detector_codes/AIDE-main/optim_factory.py b/detector_codes/AIDE-main/optim_factory.py new file mode 100644 index 0000000000000000000000000000000000000000..5ebfabd7e4252b83ec9f7f5a90e71c28034b6637 --- /dev/null +++ b/detector_codes/AIDE-main/optim_factory.py @@ -0,0 +1,222 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. + +# All rights reserved. + +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + + +import torch +from torch import optim as optim + +from timm.optim.adafactor import Adafactor +from timm.optim.adahessian import Adahessian +from timm.optim.adamp import AdamP +from timm.optim.lookahead import Lookahead +# from timm.optim.nadam import Nadam +# from timm.optim.novograd import NovoGrad +# from timm.optim.nvnovograd import NvNovoGrad +# from timm.optim.radam import RAdam +from timm.optim.rmsprop_tf import RMSpropTF +from timm.optim.sgdp import SGDP + +import json + +try: + from apex.optimizers import FusedNovoGrad, FusedAdam, FusedLAMB, FusedSGD + has_apex = True +except ImportError: + has_apex = False + + +def get_num_layer_for_convnext_single(var_name, depths): + """ + Each layer is assigned distinctive layer ids + """ + if var_name.startswith("downsample_layers"): + stage_id = int(var_name.split('.')[1]) + layer_id = sum(depths[:stage_id]) + 1 + return layer_id + + elif var_name.startswith("stages"): + stage_id = int(var_name.split('.')[1]) + block_id = int(var_name.split('.')[2]) + layer_id = sum(depths[:stage_id]) + block_id + 1 + return layer_id + + else: + return sum(depths) + 1 + + +def get_num_layer_for_convnext(var_name): + """ + Divide [3, 3, 27, 3] layers into 12 groups; each group is three + consecutive blocks, including possible neighboring downsample layers; + adapted from https://github.com/microsoft/unilm/blob/master/beit/optim_factory.py + """ + num_max_layer = 12 + if var_name.startswith("downsample_layers"): + stage_id = int(var_name.split('.')[1]) + if stage_id == 0: + layer_id = 0 + elif stage_id == 1 or stage_id == 2: + layer_id = stage_id + 1 + elif stage_id == 3: + layer_id = 12 + return layer_id + + elif var_name.startswith("stages"): + stage_id = int(var_name.split('.')[1]) + block_id = int(var_name.split('.')[2]) + if stage_id == 0 or stage_id == 1: + layer_id = stage_id + 1 + elif stage_id == 2: + layer_id = 3 + block_id // 3 + elif stage_id == 3: + layer_id = 12 + return layer_id + else: + return num_max_layer + 1 + +class LayerDecayValueAssigner(object): + def __init__(self, values, depths=[3,3,27,3], layer_decay_type='single'): + self.values = values + self.depths = depths + self.layer_decay_type = layer_decay_type + + def get_scale(self, layer_id): + return self.values[layer_id] + + def get_layer_id(self, var_name): + if self.layer_decay_type == 'single': + return get_num_layer_for_convnext_single(var_name, self.depths) + else: + return get_num_layer_for_convnext(var_name) + + +def get_parameter_groups(model, weight_decay=1e-5, skip_list=(), get_num_layer=None, get_layer_scale=None): + parameter_group_names = {} + parameter_group_vars = {} + + for name, param in model.named_parameters(): + if not param.requires_grad: + continue # frozen weights + if len(param.shape) == 1 or name.endswith(".bias") or name in skip_list or \ + name.endswith(".gamma") or name.endswith(".beta"): + group_name = "no_decay" + this_weight_decay = 0. + else: + group_name = "decay" + this_weight_decay = weight_decay + if get_num_layer is not None: + layer_id = get_num_layer(name) + group_name = "layer_%d_%s" % (layer_id, group_name) + else: + layer_id = None + + if group_name not in parameter_group_names: + if get_layer_scale is not None: + scale = get_layer_scale(layer_id) + else: + scale = 1. + + parameter_group_names[group_name] = { + "weight_decay": this_weight_decay, + "params": [], + "lr_scale": scale + } + parameter_group_vars[group_name] = { + "weight_decay": this_weight_decay, + "params": [], + "lr_scale": scale + } + + parameter_group_vars[group_name]["params"].append(param) + parameter_group_names[group_name]["params"].append(name) + print("Param groups = %s" % json.dumps(parameter_group_names, indent=2)) + return list(parameter_group_vars.values()) + + +def create_optimizer(args, model, get_num_layer=None, get_layer_scale=None, filter_bias_and_bn=True, skip_list=None): + opt_lower = args.opt.lower() + weight_decay = args.weight_decay + # if weight_decay and filter_bias_and_bn: + if filter_bias_and_bn: + skip = {} + if skip_list is not None: + skip = skip_list + elif hasattr(model, 'no_weight_decay'): + skip = model.no_weight_decay() + parameters = get_parameter_groups(model, weight_decay, skip, get_num_layer, get_layer_scale) + weight_decay = 0. + else: + parameters = model.parameters() + + if 'fused' in opt_lower: + assert has_apex and torch.cuda.is_available(), 'APEX and CUDA required for fused optimizers' + + opt_args = dict(lr=args.lr, weight_decay=weight_decay) + if hasattr(args, 'opt_eps') and args.opt_eps is not None: + opt_args['eps'] = args.opt_eps + if hasattr(args, 'opt_betas') and args.opt_betas is not None: + opt_args['betas'] = args.opt_betas + + opt_split = opt_lower.split('_') + opt_lower = opt_split[-1] + if opt_lower == 'sgd' or opt_lower == 'nesterov': + opt_args.pop('eps', None) + optimizer = optim.SGD(parameters, momentum=args.momentum, nesterov=True, **opt_args) + elif opt_lower == 'momentum': + opt_args.pop('eps', None) + optimizer = optim.SGD(parameters, momentum=args.momentum, nesterov=False, **opt_args) + elif opt_lower == 'adam': + optimizer = optim.Adam(parameters, **opt_args) + elif opt_lower == 'adamw': + optimizer = optim.AdamW(parameters, **opt_args) + # elif opt_lower == 'nadam': + # optimizer = Nadam(parameters, **opt_args) + # elif opt_lower == 'radam': + # optimizer = RAdam(parameters, **opt_args) + elif opt_lower == 'adamp': + optimizer = AdamP(parameters, wd_ratio=0.01, nesterov=True, **opt_args) + elif opt_lower == 'sgdp': + optimizer = SGDP(parameters, momentum=args.momentum, nesterov=True, **opt_args) + elif opt_lower == 'adadelta': + optimizer = optim.Adadelta(parameters, **opt_args) + elif opt_lower == 'adafactor': + if not args.lr: + opt_args['lr'] = None + optimizer = Adafactor(parameters, **opt_args) + elif opt_lower == 'adahessian': + optimizer = Adahessian(parameters, **opt_args) + elif opt_lower == 'rmsprop': + optimizer = optim.RMSprop(parameters, alpha=0.9, momentum=args.momentum, **opt_args) + elif opt_lower == 'rmsproptf': + optimizer = RMSpropTF(parameters, alpha=0.9, momentum=args.momentum, **opt_args) + elif opt_lower == 'novograd': + optimizer = NovoGrad(parameters, **opt_args) + elif opt_lower == 'nvnovograd': + optimizer = NvNovoGrad(parameters, **opt_args) + elif opt_lower == 'fusedsgd': + opt_args.pop('eps', None) + optimizer = FusedSGD(parameters, momentum=args.momentum, nesterov=True, **opt_args) + elif opt_lower == 'fusedmomentum': + opt_args.pop('eps', None) + optimizer = FusedSGD(parameters, momentum=args.momentum, nesterov=False, **opt_args) + elif opt_lower == 'fusedadam': + optimizer = FusedAdam(parameters, adam_w_mode=False, **opt_args) + elif opt_lower == 'fusedadamw': + optimizer = FusedAdam(parameters, adam_w_mode=True, **opt_args) + elif opt_lower == 'fusedlamb': + optimizer = FusedLAMB(parameters, **opt_args) + elif opt_lower == 'fusednovograd': + opt_args.setdefault('betas', (0.95, 0.98)) + optimizer = FusedNovoGrad(parameters, **opt_args) + else: + assert False and "Invalid optimizer" + + if len(opt_split) > 1: + if opt_split[0] == 'lookahead': + optimizer = Lookahead(optimizer) + + return optimizer diff --git a/detector_codes/AIDE-main/requirements.txt b/detector_codes/AIDE-main/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..23cef9582adbecd13786ed220aa3e4937aa1d63b --- /dev/null +++ b/detector_codes/AIDE-main/requirements.txt @@ -0,0 +1,36 @@ +einops==0.6.1 +fairscale==0.4.13 +filelock==3.13.1 +ftfy==6.1.3 +h5py==3.10.0 +imgaug==0.2.6 +keras==2.11.0 +kornia==0.7.2 +kornia_rs==0.1.2 +lmdb==1.4.1 +matplotlib==3.7.4 +matplotlib-inline==0.1.6 +numpy==1.24.3 +omegaconf==2.3.0 +open-clip-torch==2.24.0 +openai-clip==1.0.1 +openpyxl==3.1.2 +pandas==2.0.3 +Pillow==9.5.0 +safetensors==0.4.1 +scikit-image==0.20.0 +scikit-learn==1.3.2 +scipy==1.9.1 +sentencepiece==0.2.0 +streamlit==1.30.0 +tenacity==8.2.3 +tensorboard==2.11.2 +tensorboard-data-server==0.6.1 +tensorboard-plugin-wit==1.8.1 +tensorboardX==2.6.2.2 +torch==1.11.0 +torch-fidelity==0.3.0 +torchmetrics==0.6.0 +torchsummary==1.5.1 +torchvision==0.12.0 +tqdm==4.66.1 diff --git a/detector_codes/AIDE-main/scripts/eval.sh b/detector_codes/AIDE-main/scripts/eval.sh new file mode 100644 index 0000000000000000000000000000000000000000..0a943a0c7a8f64a9d37af493c1d025f3c5f370e6 --- /dev/null +++ b/detector_codes/AIDE-main/scripts/eval.sh @@ -0,0 +1,21 @@ +MODEL="AIDE" +RESUME_PATH="./4class-checkpoints" + +eval_datasets=( + # "/data/ziqiang/Benchmark" \ + # "/data/ziqiang/jpeg" \ + # "/data/ziqiang/noise" \ + "/data/ziqiang/sample" \ +) +for eval_dataset in "${eval_datasets[@]}" +do + python main_finetune.py \ + --model $MODEL \ + --data_path /data/ziqiang/yjz/dataset/ForenSynths/train \ + --eval_data_path $eval_dataset \ + --batch_size 64 \ + --output_dir $RESUME_PATH \ + --resume $RESUME_PATH/checkpoint-best.pth \ + --eval True +done + diff --git a/detector_codes/AIDE-main/scripts/train.sh b/detector_codes/AIDE-main/scripts/train.sh new file mode 100644 index 0000000000000000000000000000000000000000..c38f855a9e4c9bad2d16ad98919cb7919bc73142 --- /dev/null +++ b/detector_codes/AIDE-main/scripts/train.sh @@ -0,0 +1,24 @@ + +GPU_NUM=8 +WORLD_SIZE=1 +RANK=0 +MASTER_ADDR=localhost +MASTER_PORT=29512 + + +DISTRIBUTED_ARGS=" + --nproc_per_node $GPU_NUM \ + --nnodes $WORLD_SIZE \ + --node_rank $RANK \ + --master_addr $MASTER_ADDR \ + --master_port $MASTER_PORT +" + +PY_ARGS=${@:1} # Any other arguments + +python -m torch.distributed.launch $DISTRIBUTED_ARGS main_finetune.py \ + --model AIDE \ + --batch_size 32 \ + --blr 1e-4 \ + --epochs 20 \ + ${PY_ARGS} diff --git a/detector_codes/AIDE-main/utils.py b/detector_codes/AIDE-main/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..4f474887dc80542b03a8f146e3580a529bb5a179 --- /dev/null +++ b/detector_codes/AIDE-main/utils.py @@ -0,0 +1,700 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. + +# All rights reserved. + +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + + +import datetime +import math +import os +import time +from collections import OrderedDict, defaultdict, deque +from pathlib import Path + +import numpy as np +import torch +import torch.distributed as dist +from tensorboardX import SummaryWriter +from timm.utils import get_state_dict +from torch import inf + + +def str2bool(v): + """ + Converts string to bool type; enables command line + arguments in the format of '--arg1 true --arg2 false' + """ + if isinstance(v, bool): + return v + if v.lower() in ('yes', 'true', 't', 'y', '1'): + return True + elif v.lower() in ('no', 'false', 'f', 'n', '0'): + return False + else: + raise argparse.ArgumentTypeError('Boolean value expected.') + + +class SmoothedValue(object): + """Track a series of values and provide access to smoothed values over a + window or the global series average. + """ + + def __init__(self, window_size=20, fmt=None): + if fmt is None: + fmt = '{median:.4f} ({global_avg:.4f})' + self.deque = deque(maxlen=window_size) + self.total = 0.0 + self.count = 0 + self.fmt = fmt + + def update(self, value, n=1): + self.deque.append(value) + self.count += n + self.total += value * n + + def synchronize_between_processes(self): + """ + Warning: does not synchronize the deque! + """ + if not is_dist_avail_and_initialized(): + return + t = torch.tensor([self.count, self.total], dtype=torch.float64, device='cuda') + dist.barrier() + dist.all_reduce(t) + t = t.tolist() + self.count = int(t[0]) + self.total = t[1] + + @property + def median(self): + d = torch.tensor(list(self.deque)) + return d.median().item() + + @property + def avg(self): + d = torch.tensor(list(self.deque), dtype=torch.float32) + return d.mean().item() + + @property + def global_avg(self): + return self.total / self.count + + @property + def max(self): + return max(self.deque) + + @property + def value(self): + return self.deque[-1] + + def __str__(self): + return self.fmt.format( + median=self.median, + avg=self.avg, + global_avg=self.global_avg, + max=self.max, + value=self.value, + ) + + +class MetricLogger(object): + def __init__(self, delimiter='\t'): + self.meters = defaultdict(SmoothedValue) + self.delimiter = delimiter + + def update(self, **kwargs): + for k, v in kwargs.items(): + if v is None: + continue + if isinstance(v, torch.Tensor): + v = v.item() + assert isinstance(v, (float, int)) + self.meters[k].update(v) + + def __getattr__(self, attr): + if attr in self.meters: + return self.meters[attr] + if attr in self.__dict__: + return self.__dict__[attr] + raise AttributeError( + "'{}' object has no attribute '{}'".format(type(self).__name__, attr) + ) + + def __str__(self): + loss_str = [] + for name, meter in self.meters.items(): + loss_str.append('{}: {}'.format(name, str(meter))) + return self.delimiter.join(loss_str) + + def synchronize_between_processes(self): + for meter in self.meters.values(): + meter.synchronize_between_processes() + + def add_meter(self, name, meter): + self.meters[name] = meter + + def log_every(self, iterable, print_freq, header=None): + i = 0 + if not header: + header = '' + start_time = time.time() + end = time.time() + iter_time = SmoothedValue(fmt='{avg:.4f}') + data_time = SmoothedValue(fmt='{avg:.4f}') + space_fmt = ':' + str(len(str(len(iterable)))) + 'd' + log_msg = [ + header, + '[{0' + space_fmt + '}/{1}]', + 'eta: {eta}', + '{meters}', + 'time: {time}', + 'data: {data}', + ] + if torch.cuda.is_available(): + log_msg.append('max mem: {memory:.0f}') + log_msg = self.delimiter.join(log_msg) + MB = 1024.0 * 1024.0 + for obj in iterable: + data_time.update(time.time() - end) + yield obj + iter_time.update(time.time() - end) + if i % print_freq == 0 or i == len(iterable) - 1: + eta_seconds = iter_time.global_avg * (len(iterable) - i) + eta_string = str(datetime.timedelta(seconds=int(eta_seconds))) + if torch.cuda.is_available(): + print( + log_msg.format( + i, + len(iterable), + eta=eta_string, + meters=str(self), + time=str(iter_time), + data=str(data_time), + memory=torch.cuda.max_memory_allocated() / MB, + ) + ) + else: + print( + log_msg.format( + i, + len(iterable), + eta=eta_string, + meters=str(self), + time=str(iter_time), + data=str(data_time), + ) + ) + i += 1 + end = time.time() + total_time = time.time() - start_time + total_time_str = str(datetime.timedelta(seconds=int(total_time))) + print( + '{} Total time: {} ({:.4f} s / it)'.format( + header, total_time_str, total_time / len(iterable) + ) + ) + + +class TensorboardLogger(object): + def __init__(self, log_dir): + self.writer = SummaryWriter(logdir=log_dir) + self.step = 0 + + def set_step(self, step=None): + if step is not None: + self.step = step + else: + self.step += 1 + + def update(self, head='scalar', step=None, **kwargs): + for k, v in kwargs.items(): + if v is None: + continue + if isinstance(v, torch.Tensor): + v = v.item() + assert isinstance(v, (float, int)) + self.writer.add_scalar( + head + '/' + k, v, self.step if step is None else step + ) + + def flush(self): + self.writer.flush() + + +class WandbLogger(object): + def __init__(self, args): + self.args = args + + try: + import wandb + + self._wandb = wandb + except ImportError: + raise ImportError( + 'To use the Weights and Biases Logger please install wandb.' + 'Run `pip install wandb` to install it.' + ) + + # Initialize a W&B run + if self._wandb.run is None: + self._wandb.init(project=args.project, config=args) + + def log_epoch_metrics(self, metrics, commit=True): + """ + Log train/test metrics onto W&B. + """ + # Log number of model parameters as W&B summary + self._wandb.summary['n_parameters'] = metrics.get('n_parameters', None) + metrics.pop('n_parameters', None) + + # Log current epoch + self._wandb.log({'epoch': metrics.get('epoch')}, commit=False) + metrics.pop('epoch') + + for k, v in metrics.items(): + if 'train' in k: + self._wandb.log({f'Global Train/{k}': v}, commit=False) + elif 'test' in k: + self._wandb.log({f'Global Test/{k}': v}, commit=False) + + self._wandb.log({}) + + def log_checkpoints(self): + output_dir = self.args.output_dir + model_artifact = self._wandb.Artifact( + self._wandb.run.id + '_model', type='model' + ) + + model_artifact.add_dir(output_dir) + self._wandb.log_artifact(model_artifact, aliases=['latest', 'best']) + + def set_steps(self): + # Set global training step + self._wandb.define_metric( + 'Rank-0 Batch Wise/*', step_metric='Rank-0 Batch Wise/global_train_step' + ) + # Set epoch-wise step + self._wandb.define_metric('Global Train/*', step_metric='epoch') + self._wandb.define_metric('Global Test/*', step_metric='epoch') + + +def setup_for_distributed(is_master): + """ + This function disables printing when not in master process + """ + import builtins as __builtin__ + + builtin_print = __builtin__.print + + def print(*args, **kwargs): + force = kwargs.pop('force', False) + if is_master or force: + builtin_print(*args, **kwargs) + + __builtin__.print = print + + +def is_dist_avail_and_initialized(): + if not dist.is_available(): + return False + if not dist.is_initialized(): + return False + return True + + +def get_world_size(): + if not is_dist_avail_and_initialized(): + return 1 + return dist.get_world_size() + + +def get_rank(): + if not is_dist_avail_and_initialized(): + return 0 + return dist.get_rank() + + +def is_main_process(): + return get_rank() == 0 + + +def save_on_master(*args, **kwargs): + if is_main_process(): + torch.save(*args, **kwargs) + + +def init_distributed_mode(args): + + if args.dist_on_itp: + args.rank = int(os.environ['OMPI_COMM_WORLD_RANK']) + args.world_size = int(os.environ['OMPI_COMM_WORLD_SIZE']) + args.gpu = int(os.environ['OMPI_COMM_WORLD_LOCAL_RANK']) + args.dist_url = 'tcp://%s:%s' % ( + os.environ['MASTER_ADDR'], + os.environ['MASTER_PORT'], + ) + os.environ['LOCAL_RANK'] = str(args.gpu) + os.environ['RANK'] = str(args.rank) + os.environ['WORLD_SIZE'] = str(args.world_size) + # ["RANK", "WORLD_SIZE", "MASTER_ADDR", "MASTER_PORT", "LOCAL_RANK"] + elif 'RANK' in os.environ and 'WORLD_SIZE' in os.environ: + args.rank = int(os.environ['RANK']) + args.world_size = int(os.environ['WORLD_SIZE']) + args.gpu = int(os.environ['LOCAL_RANK']) + elif 'SLURM_PROCID' in os.environ: + args.rank = int(os.environ['SLURM_PROCID']) + args.gpu = args.rank % torch.cuda.device_count() + + os.environ['RANK'] = str(args.rank) + os.environ['LOCAL_RANK'] = str(args.gpu) + os.environ['WORLD_SIZE'] = str(args.world_size) + else: + print('Not using distributed mode') + args.distributed = False + return + + args.distributed = True + + torch.cuda.set_device(args.gpu) + args.dist_backend = 'nccl' + print( + '| distributed init (rank {}): {}, gpu {}'.format( + args.rank, args.dist_url, args.gpu + ), + flush=True, + ) + torch.distributed.init_process_group( + backend=args.dist_backend, + init_method=args.dist_url, + world_size=args.world_size, + rank=args.rank, + ) + torch.distributed.barrier() + setup_for_distributed(args.rank == 0) + + +def all_reduce_mean(x): + world_size = get_world_size() + if world_size > 1: + x_reduce = torch.tensor(x).cuda() + dist.all_reduce(x_reduce) + x_reduce /= world_size + return x_reduce.item() + else: + return x + + +def load_state_dict( + model, state_dict, prefix='', ignore_missing='relative_position_index' +): + missing_keys = [] + unexpected_keys = [] + error_msgs = [] + # copy state_dict so _load_from_state_dict can modify it + metadata = getattr(state_dict, '_metadata', None) + state_dict = state_dict.copy() + if metadata is not None: + state_dict._metadata = metadata + + def load(module, prefix=''): + local_metadata = {} if metadata is None else metadata.get(prefix[:-1], {}) + module._load_from_state_dict( + state_dict, + prefix, + local_metadata, + True, + missing_keys, + unexpected_keys, + error_msgs, + ) + for name, child in module._modules.items(): + if child is not None: + load(child, prefix + name + '.') + + load(model, prefix=prefix) + + warn_missing_keys = [] + ignore_missing_keys = [] + for key in missing_keys: + keep_flag = True + for ignore_key in ignore_missing.split('|'): + if ignore_key in key: + keep_flag = False + break + if keep_flag: + warn_missing_keys.append(key) + else: + ignore_missing_keys.append(key) + + missing_keys = warn_missing_keys + + if len(missing_keys) > 0: + print( + 'Weights of {} not initialized from pretrained model: {}'.format( + model.__class__.__name__, missing_keys + ) + ) + if len(unexpected_keys) > 0: + print( + 'Weights from pretrained model not used in {}: {}'.format( + model.__class__.__name__, unexpected_keys + ) + ) + if len(ignore_missing_keys) > 0: + print( + 'Ignored weights of {} not initialized from pretrained model: {}'.format( + model.__class__.__name__, ignore_missing_keys + ) + ) + if len(error_msgs) > 0: + print('\n'.join(error_msgs)) + + +class NativeScalerWithGradNormCount: + state_dict_key = 'amp_scaler' + + def __init__(self): + self._scaler = torch.cuda.amp.GradScaler() + + def __call__( + self, + loss, + optimizer, + clip_grad=None, + parameters=None, + create_graph=False, + update_grad=True, + ): + self._scaler.scale(loss).backward(create_graph=create_graph) + if update_grad: + if clip_grad is not None: + assert parameters is not None + self._scaler.unscale_( + optimizer + ) # unscale the gradients of optimizer's assigned params in-place + norm = torch.nn.utils.clip_grad_norm_(parameters, clip_grad) + else: + self._scaler.unscale_(optimizer) + norm = get_grad_norm_(parameters) + self._scaler.step(optimizer) + self._scaler.update() + else: + norm = None + return norm + + def state_dict(self): + return self._scaler.state_dict() + + def load_state_dict(self, state_dict): + self._scaler.load_state_dict(state_dict) + + +def get_grad_norm_(parameters, norm_type: float = 2.0) -> torch.Tensor: + if isinstance(parameters, torch.Tensor): + parameters = [parameters] + parameters = [p for p in parameters if p.grad is not None] + norm_type = float(norm_type) + if len(parameters) == 0: + return torch.tensor(0.0) + device = parameters[0].grad.device + if norm_type == inf: + total_norm = max(p.grad.detach().abs().max().to(device) for p in parameters) + else: + total_norm = torch.norm( + torch.stack( + [torch.norm(p.grad.detach(), norm_type).to(device) for p in parameters] + ), + norm_type, + ) + return total_norm + + +def save_model( + args, epoch, model, model_without_ddp, optimizer, loss_scaler, model_ema=None +): + output_dir = Path(args.output_dir) + epoch_name = str(epoch) + checkpoint_paths = [output_dir / ('checkpoint-%s.pth' % epoch_name)] + for checkpoint_path in checkpoint_paths: + to_save = { + 'model': model_without_ddp.state_dict(), + 'optimizer': optimizer.state_dict(), + 'epoch': epoch, + 'scaler': loss_scaler.state_dict(), + 'args': args, + } + + if model_ema is not None: + to_save['model_ema'] = get_state_dict(model_ema) + + save_on_master(to_save, checkpoint_path) + + if is_main_process() and isinstance(epoch, int): + to_del = epoch - args.save_ckpt_num * args.save_ckpt_freq + old_ckpt = output_dir / ('checkpoint-%s.pth' % to_del) + if os.path.exists(old_ckpt): + os.remove(old_ckpt) + + +def auto_load_model( + args, model, model_without_ddp, optimizer, loss_scaler, model_ema=None +): + output_dir = Path(args.output_dir) + if args.auto_resume and len(args.resume) == 0: + import glob + + all_checkpoints = glob.glob(os.path.join(output_dir, 'checkpoint-*.pth')) + latest_ckpt = -1 + for ckpt in all_checkpoints: + t = ckpt.split('-')[-1].split('.')[0] + if t.isdigit(): + latest_ckpt = max(int(t), latest_ckpt) + if latest_ckpt >= 0: + args.resume = os.path.join(output_dir, 'checkpoint-%d.pth' % latest_ckpt) + print('Auto resume checkpoint: %s' % args.resume) + + if args.resume: + if args.resume.startswith('https'): + checkpoint = torch.hub.load_state_dict_from_url( + args.resume, map_location='cpu', check_hash=True + ) + else: + checkpoint = torch.load(args.resume, map_location='cpu') + + model_without_ddp.load_state_dict(checkpoint['model']) + print('Resume checkpoint %s' % args.resume) + if 'optimizer' in checkpoint and 'epoch' in checkpoint: + optimizer.load_state_dict(checkpoint['optimizer']) + if not isinstance( + checkpoint['epoch'], str + ): # does not support resuming with 'best', 'best-ema' + args.start_epoch = checkpoint['epoch'] + 1 + else: + assert args.eval, 'Does not support resuming with checkpoint-best' + if hasattr(args, 'model_ema') and args.model_ema: + if 'model_ema' in checkpoint.keys(): + model_ema.ema.load_state_dict(checkpoint['model_ema']) + else: + model_ema.ema.load_state_dict(checkpoint['model']) + if 'scaler' in checkpoint: + loss_scaler.load_state_dict(checkpoint['scaler']) + print('With optim & sched!') + + +def cosine_scheduler( + base_value, + final_value, + epochs, + niter_per_ep, + warmup_epochs=0, + start_warmup_value=0, + warmup_steps=-1, +): + warmup_schedule = np.array([]) + warmup_iters = warmup_epochs * niter_per_ep + if warmup_steps > 0: + warmup_iters = warmup_steps + print('Set warmup steps = %d' % warmup_iters) + if warmup_epochs > 0: + warmup_schedule = np.linspace(start_warmup_value, base_value, warmup_iters) + + iters = np.arange(epochs * niter_per_ep - warmup_iters) + schedule = np.array( + [ + final_value + + 0.5 + * (base_value - final_value) + * (1 + math.cos(math.pi * i / (len(iters)))) + for i in iters + ] + ) + + schedule = np.concatenate((warmup_schedule, schedule)) + + assert len(schedule) == epochs * niter_per_ep + return schedule + + +def adjust_learning_rate(optimizer, epoch, args): + """Decay the learning rate with half-cycle cosine after warmup""" + if epoch < args.warmup_epochs: + lr = args.lr * epoch / args.warmup_epochs + else: + lr = args.min_lr + (args.lr - args.min_lr) * 0.5 * ( + 1.0 + + math.cos( + math.pi + * (epoch - args.warmup_epochs) + / (args.epochs - args.warmup_epochs) + ) + ) + for param_group in optimizer.param_groups: + if 'lr_scale' in param_group: + param_group['lr'] = lr * param_group['lr_scale'] + else: + param_group['lr'] = lr + return lr + + +def remap_checkpoint_keys(ckpt): + new_ckpt = OrderedDict() + for k, v in ckpt.items(): + if k.startswith('encoder'): + k = '.'.join(k.split('.')[1:]) # remove encoder in the name + if k.endswith('kernel'): + k = '.'.join(k.split('.')[:-1]) # remove kernel in the name + new_k = k + '.weight' + if len(v.shape) == 3: # resahpe standard convolution + kv, in_dim, out_dim = v.shape + ks = int(math.sqrt(kv)) + new_ckpt[new_k] = ( + v.permute(2, 1, 0).reshape(out_dim, in_dim, ks, ks).transpose(3, 2) + ) + elif len(v.shape) == 2: # reshape depthwise convolution + kv, dim = v.shape + ks = int(math.sqrt(kv)) + new_ckpt[new_k] = ( + v.permute(1, 0).reshape(dim, 1, ks, ks).transpose(3, 2) + ) + continue + elif 'ln' in k or 'linear' in k: + k = k.split('.') + k.pop(-2) # remove ln and linear in the name + new_k = '.'.join(k) + else: + new_k = k + new_ckpt[new_k] = v + + # reshape grn affine parameters and biases + for k, v in new_ckpt.items(): + if k.endswith('bias') and len(v.shape) != 1: + new_ckpt[k] = v.reshape(-1) + # elif 'grn' in k: + # new_ckpt[k] = v.unsqueeze(0).unsqueeze(1) + return new_ckpt + + +class Logger(object): + """Log stdout messages.""" + + def __init__(self, outfile): + self.terminal = sys.stdout + self.log = open(outfile, 'a') + sys.stdout = self + + def write(self, message): + self.terminal.write(message) + self.log.write(message) + + def flush(self): + self.terminal.flush() + + +def printSet(set_str): + set_str = str(set_str) + num = len(set_str) + print('=' * num * 3) + print(' ' * num + set_str) + print('=' * num * 3) diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/Word_Frequency_Analysis.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/Word_Frequency_Analysis.py new file mode 100644 index 0000000000000000000000000000000000000000..4f28e79e0a972f04fc8f4e1010cb2b0b8ecdf0cb --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/Word_Frequency_Analysis.py @@ -0,0 +1,147 @@ +import argparse +import os +import re +from collections import Counter, OrderedDict + +import matplotlib.pyplot as plt +import nltk +import numpy as np +from nltk.corpus import stopwords + +# os.environ['CURL_CA_BUNDLE'] = '' +# os.environ['HTTP_PROXY'] = "http://*:7890" +# os.environ['HTTPS_PROXY'] = "http://*:7890" +# os.environ['ALL_PROXY'] = "socks://*:7891" +nltk.download('stopwords') + + +def parse_args(): + parser = argparse.ArgumentParser(description='Word_Frequency_Analysis') + parser.add_argument('--root_path', type=str, help='') + parser.add_argument('--save_path', type=str, help='save_path', default='') + args = parser.parse_args() + + def print_options(parser, args): + message = '' + message += '----------------- Options ---------------\n' + for k, v in sorted(vars(args).items()): + comment = '' + default = parser.get_default(k) + if v != default: + comment = '\t[default: %s]' % str(default) + message += '{:>25}: {:<30}{}\n'.format(str(k), str(v), comment) + message += '----------------- End -------------------' + print(message) + + print_options(parser, args) + return args + + +def get_list(folder_path): + image_paths_real = [] + image_paths_fake = [] + for root, dirs, files in os.walk(folder_path): + for file in files: + if file.lower().endswith(('.txt')): + abspath_tmp = os.path.abspath(os.path.join(root, file)) + if '/0_real/' in abspath_tmp: + image_paths_real.append(abspath_tmp) + if '/1_fake/' in abspath_tmp: + image_paths_fake.append(abspath_tmp) + return image_paths_real, image_paths_fake + + +def get_words_counts(image_paths): + all_text = [] + for tpath in image_paths: + with open(tpath, 'r') as file: + all_text.append(file.read()) + content = ' '.join(all_text) + words = re.findall(r'\b\w+\b', content.lower()) + + stop_words = set(stopwords.words('english')) + filtered_words = [word for word in words if word not in stop_words] + + word_counts = Counter(filtered_words) + + common_words = word_counts.most_common(20) + common_words_dict = {} + for common_word in common_words: + common_words_dict[common_word[0]] = common_word[1] + return common_words_dict, dict(word_counts) + + +if __name__ == '__main__': + opt = parse_args() + os.makedirs(os.path.dirname(opt.save_path), mode=0o777, exist_ok=True) + if opt.root_path[-1] == '/': + opt.root_path = opt.root_path[:-1] + if isinstance(opt.root_path, list): + image_paths_real, image_paths_fake = [], [] + for textp in opt.root_path: + tmp_real, tmp_fake = get_list(textp) + image_paths_real.extend(tmp_real) + image_paths_fake.extend(tmp_fake) + else: + image_paths_real, image_paths_fake = get_list(opt.root_path) + + words_counts_real, words_counts_real_all = get_words_counts(image_paths_real) + words_counts_fake, words_counts_fake_all = get_words_counts(image_paths_fake) + + all_words = set(list(words_counts_real.keys()) + list(words_counts_fake.keys())) + for word in all_words: + if word not in words_counts_real.keys(): + words_counts_real[word] = ( + words_counts_real_all[word] + if word in list(words_counts_real_all.keys()) + else 0 + ) + if word not in words_counts_fake.keys(): + words_counts_fake[word] = ( + words_counts_fake_all[word] + if word in list(words_counts_fake_all.keys()) + else 0 + ) + + words_counts_fake_sorted = OrderedDict( + (key, words_counts_fake[key]) + for key in words_counts_real + if key in words_counts_fake + ) + + words_counts_real = [(k, v) for k, v in words_counts_real.items()] + words_counts_fake_sorted = [(k, v) for k, v in words_counts_fake_sorted.items()] + + words_real, counts_real = zip(*words_counts_real) + words_fake, counts_fake = zip(*words_counts_fake_sorted) + assert words_real == words_fake + + print(f'words_real: {words_real}') + print(f'counts_real: {counts_real}') + + print(f'words_fake: {words_fake}') + print(f'counts_fake: {counts_fake}') + # exit() + words_real, counts_real = words_real[:15], counts_real[:15] + words_fake, counts_fake = words_fake[:15], counts_fake[:15] + plt.figure(figsize=(16, 8)) + width = 0.35 + x = np.arange(len(words_real)) + plt.bar( + x - width / 2, + counts_real, + width, + label=f'{" ".join(opt.root_path.split("/")[-2:])} real', + ) + plt.bar( + x + width / 2, + counts_fake, + width, + label=f'{" ".join(opt.root_path.split("/")[-2:])} fake', + ) + # plt.ylabel('Frequency') + # plt.title('Top 15 Most Common Words') + plt.xticks(x, labels=words_fake, rotation=90, fontsize=35) + plt.legend(prop={'size': 20}) + plt.show() + plt.savefig(f'{opt.save_path}', bbox_inches='tight', pad_inches=0.1) diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/data/__init__.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e99df59f253573f9730ef2d81dfaed67eb83ae20 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/data/__init__.py @@ -0,0 +1,43 @@ +import torch +import numpy as np +from torch.utils.data.sampler import WeightedRandomSampler + +from .datasets import dataset_folder + +import os +def get_dataset(opt): + classes = os.listdir(opt.dataroot) if len(opt.classes) == 0 else opt.classes + if '0_real' not in classes or '1_fake' not in classes: + dset_lst = [] + for cls in classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) + return dataset_folder(opt, opt.dataroot) + +def get_bal_sampler(dataset): + targets = [] + for d in dataset.datasets: + targets.extend(d.targets) + + ratio = np.bincount(targets) + w = 1. / torch.tensor(ratio, dtype=torch.float) + sample_weights = w[targets] + sampler = WeightedRandomSampler(weights=sample_weights, + num_samples=len(sample_weights)) + return sampler + + +def create_dataloader(opt): + shuffle = not opt.serial_batches if (opt.isTrain and not opt.class_bal) else False + dataset = get_dataset(opt) + sampler = get_bal_sampler(dataset) if opt.class_bal else None + + data_loader = torch.utils.data.DataLoader(dataset, + batch_size=opt.batch_size, + shuffle=shuffle, + sampler=sampler, + drop_last=True if opt.isTrain else False, + num_workers=int(opt.num_threads)) + return data_loader diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/data/datasets.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/data/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..59569cbab6951cbec4fb355e025b41d3d43474bb --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/data/datasets.py @@ -0,0 +1,213 @@ +import cv2 +import numpy as np +import torchvision.datasets as datasets +import torchvision.transforms as transforms +import torchvision.transforms.functional as TF +from random import random, choice +from io import BytesIO +from PIL import Image +from PIL import ImageFile +from scipy.ndimage.filters import gaussian_filter +from torchvision.transforms import InterpolationMode +from typing import Any, Callable, cast, Dict, List, Optional, Tuple +import os +from transformers import AutoTokenizer + +ImageFile.LOAD_TRUNCATED_IMAGES = True +IMG_EXTENSIONS = (".jpg", ".jpeg", ".png", ".ppm", ".bmp", ".pgm", ".tif", ".tiff", ".webp") + +def pil_loader(path: str) -> Image.Image: + # open path as file to avoid ResourceWarning (https://github.com/python-pillow/Pillow/issues/835) + with open(path, "rb") as f: + img = Image.open(f) + return img.convert("RGB") + +class ImageFolder2(datasets.DatasetFolder): + def __init__( + self, + root: str, + opt, + transform: Optional[Callable] = None, + ): + super().__init__( + root, + transform=transform, + extensions=IMG_EXTENSIONS, + loader = pil_loader + ) + self.opt = opt + self.tokenizer = AutoTokenizer.from_pretrained(self.opt.clip, model_max_length=77, padding_side="right", use_fast=False) + self.tokenizer.pad_token_id = 0 + + def __getitem__(self, index: int) -> Tuple[Any, Any]: + """ + Args: + index (int): Index + + Returns: + tuple: (sample, target) where target is class_index of the target class. + """ + path, target = self.samples[index] + + + textpath = path.replace(self.opt.imgroot, self.opt.textroot) + textpath = os.path.splitext(textpath)[0] + '.txt' + + sample = self.loader(path) + try: + with open(textpath, 'r') as file: + text = file.read() + cates_len = len(self.opt.cates)//2 + if target == 1: text = f'{" ".join(self.opt.cates[:cates_len])}. {text} {" ".join(self.opt.cates[:cates_len])}.' + if target == 0: text = f'{" ".join(self.opt.cates[cates_len:])}. {text} {" ".join(self.opt.cates[cates_len:])}.' + inputs = self.tokenizer([text], padding="max_length", max_length=self.tokenizer.model_max_length, truncation=True, return_tensors="pt") + input_ids=inputs['input_ids'][0] + attention_mask=inputs['attention_mask'][0] + except: + text, input_ids, attention_mask = ' ', ' ', ' ' + + if self.transform is not None: + sample = self.transform(sample) + if self.target_transform is not None: + target = self.target_transform(target) + + return path, sample, text, input_ids, attention_mask, target + + +def dataset_folder(opt, root): + if opt.mode == 'binary': + return binary_dataset(opt, root) + if opt.mode == 'filename': + return FileNameDataset(opt, root) + raise ValueError('opt.mode needs to be binary or filename.') + + +def binary_dataset(opt, root): + if opt.isTrain: + crop_func = transforms.RandomCrop(opt.cropSize) + elif opt.no_crop: + crop_func = transforms.Lambda(lambda img: img) + else: + crop_func = transforms.CenterCrop(opt.cropSize) + + if opt.isTrain and not opt.no_flip: + flip_func = transforms.RandomHorizontalFlip() + else: + flip_func = transforms.Lambda(lambda img: img) + + if not opt.isTrain and opt.no_resize: + rz_func = transforms.Lambda(lambda img: img) + else: + rz_func = transforms.Lambda(lambda img: translate_duplicate(img, opt.cropSize)) + + dset = ImageFolder2( + root, + opt, + transforms.Compose([ + rz_func, + crop_func, + flip_func, + transforms.ToTensor(), + transforms.Normalize(mean=[0.48145466, 0.4578275, 0.40821073], std=[0.26862954, 0.26130258, 0.27577711]), + ])) + return dset + + +class FileNameDataset(datasets.ImageFolder): + def name(self): + return 'FileNameDataset' + + def __init__(self, opt, root): + self.opt = opt + super().__init__(root) + + def __getitem__(self, index): + # Loading sample + path, target = self.samples[index] + return path + + +import math +def translate_duplicate(img, cropSize): + if min(img.size) < cropSize: + width, height = img.size + + new_width = width * math.ceil(cropSize/width) + new_height = height * math.ceil(cropSize/height) + + new_img = Image.new('RGB', (new_width, new_height)) + for i in range(0, new_width, width): + for j in range(0, new_height, height): + new_img.paste(img, (i, j)) + return new_img + else: + return img + +def data_augment(img, opt): + img = np.array(img) + + if random() < opt.blur_prob: + sig = sample_continuous(opt.blur_sig) + gaussian_blur(img, sig) + + if random() < opt.jpg_prob: + method = sample_discrete(opt.jpg_method) + qual = sample_discrete(opt.jpg_qual) + img = jpeg_from_key(img, qual, method) + + return Image.fromarray(img) + + +def sample_continuous(s): + if len(s) == 1: + return s[0] + if len(s) == 2: + rg = s[1] - s[0] + return random() * rg + s[0] + raise ValueError("Length of iterable s should be 1 or 2.") + + +def sample_discrete(s): + if len(s) == 1: + return s[0] + return choice(s) + + +def gaussian_blur(img, sigma): + gaussian_filter(img[:,:,0], output=img[:,:,0], sigma=sigma) + gaussian_filter(img[:,:,1], output=img[:,:,1], sigma=sigma) + gaussian_filter(img[:,:,2], output=img[:,:,2], sigma=sigma) + + +def cv2_jpg(img, compress_val): + img_cv2 = img[:,:,::-1] + encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), compress_val] + result, encimg = cv2.imencode('.jpg', img_cv2, encode_param) + decimg = cv2.imdecode(encimg, 1) + return decimg[:,:,::-1] + + +def pil_jpg(img, compress_val): + out = BytesIO() + img = Image.fromarray(img) + img.save(out, format='jpeg', quality=compress_val) + img = Image.open(out) + # load from memory before ByteIO closes + img = np.array(img) + out.close() + return img + + +jpeg_dict = {'cv2': cv2_jpg, 'pil': pil_jpg} +def jpeg_from_key(img, compress_val, key): + method = jpeg_dict[key] + return method(img, compress_val) + + +rz_dict = {'bilinear': InterpolationMode.BILINEAR, + 'bicubic': InterpolationMode.BICUBIC, + 'lanczos': InterpolationMode.LANCZOS, + 'nearest': InterpolationMode.NEAREST} +def custom_resize(img, opt): + interp = sample_discrete(opt.rz_interp) + return TF.resize(img, opt.loadSize, interpolation=rz_dict[interp]) diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/decode_clipfeature_dataset.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/decode_clipfeature_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..5c9a9c060cffd5e4f7d5be6902c57b165e71eb03 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/decode_clipfeature_dataset.py @@ -0,0 +1,113 @@ +import os +import sys + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +import argparse +import os +import warnings + +import torch +from tqdm import tqdm + +warnings.filterwarnings('ignore') +from networks.decode_clipfeature_oneImage import ( + get_clip_model, + get_clipcap_model, + get_image_features, + get_text, +) + + +def parse_args(): + parser = argparse.ArgumentParser(description='decode detection feature to text') + parser.add_argument('--prefix_length', type=int, default=10) + parser.add_argument( + '--model_path', type=str, default='./ClipCaption_COCO.pt', help='model_path' + ) + parser.add_argument( + '--images_root', type=str, default='', help='image_path', required=True + ) + parser.add_argument( + '--save_path', type=str, default='', help='image_path', required=True + ) + parser.add_argument( + '--fc_path', type=str, default='./fc_parameters.pth', help='fc_path' + ) + parser.add_argument( + '--cal_detection_feat', action='store_true', help='cal_detection_feat' + ) + parser.add_argument('--device', type=str, default='cuda:0', help='cuda:n or cpu') + args = parser.parse_args() + + def print_options(parser, args): + message = '' + message += '----------------- Options ---------------\n' + for k, v in sorted(vars(args).items()): + comment = '' + default = parser.get_default(k) + if v != default: + comment = '\t[default: %s]' % str(default) + message += '{:>25}: {:<30}{}\n'.format(str(k), str(v), comment) + message += '----------------- End -------------------' + print(message) + + print_options(parser, args) + return args + + +def get_image_files_in_directory(directory): + image_extensions = [ + '.jpg', + '.jpeg', + '.png', + '.ppm', + '.bmp', + '.pgm', + '.tif', + '.tiff', + '.webp', + ] + image_files = [] + for root, dirs, files in os.walk(directory, followlinks=True): + for file in files: + if os.path.splitext(file)[1].lower() in image_extensions: + absolute_path = os.path.join(root, file) + image_files.append(absolute_path) + return image_files + + +if __name__ == '__main__': + opt = parse_args() + device = torch.device(opt.device) + assert os.path.exists(opt.images_root) + + opt.images_root = os.path.abspath(opt.images_root) + opt.save_path = os.path.abspath(opt.save_path) + os.makedirs(opt.save_path, mode=0o777, exist_ok=True) + + image_files = get_image_files_in_directory(opt.images_root) + print(f'len(image_files): {len(image_files)}') + + clipmodel, processor = get_clip_model( + clip_name='openai/clip-vit-large-patch14', device=device + ) + model, tokenizer = get_clipcap_model(opt.model_path, device=device) + + for image_file in tqdm(image_files): + image_features = get_image_features( + image_file, clipmodel, processor, device=device + ) + text = get_text( + image_features, + tokenizer, + model, + opt.fc_path, + opt.cal_detection_feat, + device=device, + ) + text_save_path = os.path.splitext( + image_file.replace(opt.images_root, opt.save_path) + )[0] + os.makedirs(os.path.dirname(text_save_path), mode=0o777, exist_ok=True) + with open(f'{text_save_path}.txt', 'w') as file: + file.write(text) diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/draw_tsne_kmean.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/draw_tsne_kmean.py new file mode 100644 index 0000000000000000000000000000000000000000..3d547d9ba1b6848a9b43022e0643b5160b161a69 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/draw_tsne_kmean.py @@ -0,0 +1,301 @@ +import os +import sys + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +import argparse +from random import shuffle +from typing import Any, Callable, Optional, Tuple + +import numpy as np +import PIL.Image +import skimage.io as io +import torch +import torchvision.datasets as datasets +from matplotlib import pyplot as plt +from MulticoreTSNE import MulticoreTSNE as TSNE +from PIL import ImageFile +from torch.utils.data import DataLoader +from transformers import CLIPProcessor +from utils.logger import Progbar + +np.random.seed(123) +# from clipcap import gg_text, get_model +from decode_clipfeature_image import get_clip_model, get_clipcap_model, get_text +from kmeans_pytorch import kmeans + +ImageFile.LOAD_TRUNCATED_IMAGES = True +IMG_EXTENSIONS = ( + '.jpg', + '.jpeg', + '.png', + '.ppm', + '.bmp', + '.pgm', + '.tif', + '.tiff', + '.webp', +) + + +class dataset_folder(datasets.DatasetFolder): + def __init__(self, root: str, transform: Optional[Callable] = None): + super().__init__(root, transform=None, extensions=IMG_EXTENSIONS, loader=None) + self.processor = CLIPProcessor.from_pretrained('openai/clip-vit-large-patch14') + + def __getitem__(self, index: int) -> Tuple[Any, Any]: + path, target = self.samples[index] + image = PIL.Image.fromarray(io.imread(path)) # .to(device) + sample = self.processor(images=image, return_tensors='pt')['pixel_values'][0] + return sample, target, path + + +def collate_fn(batch): + batch = list(filter(lambda x: x is not None, batch)) + return torch.utils.data.dataloader.default_collate(batch) + + +def binary_dataset(root): + return dataset_folder(root) + + +def generate_colors(num_colors): + # cmap = plt.cm.get_cmap('tab20') + cmap = plt.colormaps.get_cmap('tab20') + colors = cmap(range(num_colors)) + return colors + + +def tsne_vis(features, labels, draw_dir, opt, device): + + clipcap_model, tokenizer = get_clipcap_model( + model_path='https://www.now61.com/f/Xljmi0/coco_prefix_latest.pt', device=device + ) + all_labels = list(set(labels.reshape([-1]))) + num_clusters = 3 + all_cluster_centers = [] + all_text = {} + for tmp_label in all_labels: + feature_ = features[labels == tmp_label] + cluster_ids_x, cluster_centers = kmeans( + X=torch.from_numpy(feature_).cuda(), + num_clusters=num_clusters, + distance='euclidean', + device=device, + ) + all_cluster_centers.append(cluster_centers) + print('=' * 100) + print(opt.legend[tmp_label]) + tmp_text = [] + for index in range(num_clusters): + tmp_text.append( + get_text( + cluster_centers[index].to(device), + tokenizer, + clipcap_model, + fc_path='https://www.now61.com/f/qwvoH5/fc_parameters.pth', + cal_detection_feat=False, + device=device, + ) + ) + print(f'\n{tmp_text[-1]}') + all_text[str(tmp_label + len(all_labels))] = tmp_text + print('=' * 100) + + all_cluster_centers = torch.cat(all_cluster_centers, 0).cpu().numpy() + features = np.concatenate((features, all_cluster_centers), axis=0) + new_label = [] + for index, all_label in enumerate(all_labels): + new_label.extend([len(all_labels) + index] * num_clusters) + labels = np.concatenate((labels, np.array(new_label)), axis=0) + + embedding_path = os.path.join(draw_dir, '{}_embedding.npy'.format(opt.save_name)) + + if opt.do_fit or not os.path.exists(embedding_path): + print('>>> t-SNE fitting') + tsne_model = TSNE( + n_jobs=64, perplexity=opt.perplexity, random_state=1024, learning_rate=1000 + ) + embeddings = tsne_model.fit_transform(features) + print('<<< fitting over') + np.save(embedding_path, embeddings) + else: + embeddings = np.load(embedding_path) + + index = [i for i in range(len(embeddings))] + shuffle(index) + embeddings = [embeddings[index[i]] for i in range(len(index))] + labels = [labels[index[i]] for i in range(len(index))] + embeddings = np.array(embeddings) + + print('>>> draw image') + vis_x = embeddings[:, 0] + vis_y = embeddings[:, 1] + plt.figure(figsize=(35, 35)) + plt.rcParams['figure.dpi'] = 1000 + colors = generate_colors(20) + num_classes = len(set(labels)) + + for i in range(num_classes): + s = 1000 if i > 5 else 20 + marker = '*' if i > 5 else 'o' + color = colors[i] + class_index = [j for j, v in enumerate(labels) if v == i] + plt.scatter( + vis_x[class_index], vis_y[class_index], s=s, color=color, marker=marker + ) + + if i > 5 and opt.draw_text: + texthighs = [0] * len(vis_y[class_index]) + sorted_A = sorted( + enumerate(vis_y[class_index]), key=lambda x: x[1], reverse=False + ) + for rank, (index, value) in enumerate(sorted_A): + texthighs[index] = (rank + 1) * 40 + for tx, ty, ttext, texthigh in zip( + vis_x[class_index], vis_y[class_index], all_text[str(i)], texthighs + ): + fc = colors[i - num_classes // 2] + plt.annotate( + f' {ttext} ', + xy=(tx, ty), + xycoords='data', + xytext=(100, texthigh), + fontsize=30, + textcoords='offset points', + color='white', + va='center', + ha='center', + weight='bold', + bbox=dict(boxstyle='round', fc=fc, ec='none'), + arrowprops=dict( + connectionstyle='angle3,angleA=0,angleB=90', + arrowstyle='wedge, tail_width=1.', + fc=fc, + ec='none', + patchA=None, + ), + ) + if opt.draw_text: + img_path = os.path.join(draw_dir, '{}_draw-text_tsne.png'.format(opt.save_name)) + else: + img_path = os.path.join(draw_dir, '{}_tsne.png'.format(opt.save_name)) + plt.xticks([]) + plt.yticks([]) + legend = plt.legend(opt.legend, prop={'size': 35}) + for handle in legend.legend_handles: + handle.set_sizes([300]) + plt.show() + plt.savefig(img_path, bbox_inches='tight', pad_inches=0.1) + print('<< 0.5) + f_acc = accuracy_score(y_true[y_true == 1], y_pred[y_true == 1] > 0.5) + acc = accuracy_score(y_true, y_pred > 0.5) + ap = average_precision_score(y_true, y_pred) + + accs.append(acc) + aps.append(ap) + print( + '({} {:12}) acc: {:.2f}; ap: {:.2f}'.format( + v_id, val, acc * 100, ap * 100 + ) + ) + print( + '({} {:10}) acc: {:.2f}; ap: {:.2f}'.format( + v_id + 1, + 'Mean', + np.array(accs).mean() * 100, + np.array(aps).mean() * 100, + ) + ) + print('*' * 25) diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/networks/__init__.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/networks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/networks/base_model.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/networks/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..13f94d30f9db94eafb44c5515db2a51730d5f8c5 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/networks/base_model.py @@ -0,0 +1,108 @@ +# from pix2pix +import os + +import torch +import torch.nn as nn +from torch.nn import init + + +class BaseModel(nn.Module): + def __init__(self, opt): + super(BaseModel, self).__init__() + self.opt = opt + self.total_steps = 0 + self.isTrain = opt.isTrain + self.lr = opt.lr + self.save_dir = os.path.join(opt.checkpoints_dir, opt.name) + self.device = ( + torch.device('cuda:{}'.format(opt.gpu_ids[0])) + if opt.gpu_ids + else torch.device('cpu') + ) + + def save_networks(self, epoch): + save_filename = 'model_epoch_%s.pth' % epoch + save_path = os.path.join(self.save_dir, save_filename) + + # serialize model and optimizer to dict + state_dict = { + 'model': self.model.state_dict(), + # 'optimizer' : self.optimizer.state_dict(), + 'total_steps': self.total_steps, + } + torch.save(state_dict, save_path) + try: + try: + savemodel = self.model.module + except: + savemodel = self.model + # savemodel.model.vision_model = savemodel.vision_tower_lora.merge_and_unload() + save_path2 = os.path.join(self.save_dir, f'model_epoch_{epoch}') + os.makedirs(save_path2, mode=0o777, exist_ok=True) + savemodel.model.save_pretrained(save_path2, safe_serialization=False) + except: + pass + + # load models from the disk + def load_networks(self, epoch): + load_filename = 'model_epoch_%s.pth' % epoch + load_path = os.path.join(self.save_dir, load_filename) + + print('loading the model from %s' % load_path) + # if you are using PyTorch newer than 0.4 (e.g., built from + # GitHub source), you can remove str() on self.device + state_dict = torch.load(load_path, map_location=self.device) + if hasattr(state_dict, '_metadata'): + del state_dict._metadata + + self.model.load_state_dict(state_dict['model']) + self.total_steps = state_dict['total_steps'] + + if self.isTrain and not self.opt.new_optim: + self.optimizer.load_state_dict(state_dict['optimizer']) + ### move optimizer state to GPU + for state in self.optimizer.state.values(): + for k, v in state.items(): + if torch.is_tensor(v): + state[k] = v.to(self.device) + + for g in self.optimizer.param_groups: + g['lr'] = self.opt.lr + + def eval(self): + self.model.eval() + + def train(self): + self.model.train() + + def test(self): + with torch.no_grad(): + self.forward() + + +def init_weights(net, init_type='normal', gain=0.02): + def init_func(m): + classname = m.__class__.__name__ + if hasattr(m, 'weight') and ( + classname.find('Conv') != -1 or classname.find('Linear') != -1 + ): + if init_type == 'normal': + init.normal_(m.weight.data, 0.0, gain) + elif init_type == 'xavier': + init.xavier_normal_(m.weight.data, gain=gain) + elif init_type == 'kaiming': + init.kaiming_normal_(m.weight.data, a=0, mode='fan_in') + elif init_type == 'orthogonal': + init.orthogonal_(m.weight.data, gain=gain) + else: + raise NotImplementedError( + 'initialization method [%s] is not implemented' % init_type + ) + if hasattr(m, 'bias') and m.bias is not None: + init.constant_(m.bias.data, 0.0) + elif classname.find('BatchNorm2d') != -1: + init.normal_(m.weight.data, 1.0, gain) + init.constant_(m.bias.data, 0.0) + + print('initialize network with %s' % init_type) + net.apply(init_func) diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/networks/c2p_clip.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/networks/c2p_clip.py new file mode 100644 index 0000000000000000000000000000000000000000..977452e7994458c7125fafffd3ef7b1e3bfff861 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/networks/c2p_clip.py @@ -0,0 +1,59 @@ +import torch +import torch.nn as nn +from peft import LoraConfig, get_peft_model +from transformers import CLIPModel + + +class C2P_CLIP_Model(nn.Module): + def __init__( + self, + name='openai/clip-vit-large-patch14', + num_classes=1, + lora_r=16, + lora_alpha=32, + lora_dropout=0.05, + hf_token=None, + ): + super(C2P_CLIP_Model, self).__init__() + + self.model = CLIPModel.from_pretrained(name, token=hf_token) + del self.model.text_model + del self.model.text_projection + del self.model.logit_scale + + self.vision_tower = self.model.vision_model + self.vision_tower.requires_grad_(False) + self.model.visual_projection.requires_grad_(False) + + lora_config = LoraConfig( + r=lora_r, + lora_alpha=lora_alpha, + target_modules=['q_proj', 'k_proj', 'v_proj'], + lora_dropout=lora_dropout, + bias='none', + ) + self.vision_tower_lora = get_peft_model(self.vision_tower, lora_config) + + self.model.fc = nn.Linear(768, num_classes) + torch.nn.init.normal_(self.model.fc.weight.data, 0.0, 0.02) + + def encode_image(self, img): + vision_outputs = self.vision_tower_lora( + pixel_values=img, + output_attentions=self.model.config.output_attentions, + output_hidden_states=self.model.config.output_hidden_states, + return_dict=self.model.config.return_dict, + ) + pooled_output = vision_outputs[1] # pooled_output + image_features = self.model.visual_projection(pooled_output) + return image_features + + def forward(self, img): + image_embeds = self.encode_image(img) + image_embeds = image_embeds / image_embeds.norm(p=2, dim=-1, keepdim=True) + return self.model.fc(image_embeds) + + def detect(self, img): + with torch.no_grad(): + output = self.forward(img) + return torch.sigmoid(output).squeeze(1) diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/networks/decode_clipfeature_image.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/networks/decode_clipfeature_image.py new file mode 100644 index 0000000000000000000000000000000000000000..9c42520613f2f82cae74d806b9526c40ee168012 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/networks/decode_clipfeature_image.py @@ -0,0 +1,260 @@ +# conda -n create clip-text-decoder python=3.8.5 +import argparse +import warnings +from typing import Optional, Tuple + +import PIL.Image +import skimage.io as io +import torch # 2.3.1+cu118 conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=11.8 -c pytorch -c nvidia +import torch.nn.functional as nnf +from torch import nn +from transformers import ( # 4.25.0 + CLIPModel, + CLIPProcessor, + GPT2LMHeadModel, + GPT2Tokenizer, +) + +warnings.filterwarnings('ignore') + +N = type(None) +T = torch.Tensor +D = torch.device + + +class MLP(nn.Module): + def forward(self, x: torch.Tensor) -> torch.Tensor: + return self.model(x) + + def __init__(self, sizes: Tuple[int, ...], bias=True, act=nn.Tanh): + super(MLP, self).__init__() + layers = [] + for i in range(len(sizes) - 1): + layers.append(nn.Linear(sizes[i], sizes[i + 1], bias=bias)) + if i < len(sizes) - 2: + layers.append(act()) + self.model = nn.Sequential(*layers) + + +class ClipCaptionModel(nn.Module): + # @functools.lru_cache #FIXME + def get_dummy_token(self, batch_size: int, device: D) -> T: + return torch.zeros( + batch_size, self.prefix_length, dtype=torch.int64, device=device + ) + + def forward( + self, tokens: T, prefix: T, mask: Optional[T] = None, labels: Optional[T] = None + ): + embedding_text = self.gpt.transformer.wte(tokens) + prefix_projections = self.clip_project(prefix).view( + -1, self.prefix_length, self.gpt_embedding_size + ) + embedding_cat = torch.cat((prefix_projections, embedding_text), dim=1) + if labels is not None: + dummy_token = self.get_dummy_token(tokens.shape[0], tokens.device) + labels = torch.cat((dummy_token, tokens), dim=1) + out = self.gpt(inputs_embeds=embedding_cat, labels=labels, attention_mask=mask) + return out + + def __init__(self, prefix_length: int, prefix_size: int = 512): + super(ClipCaptionModel, self).__init__() + self.prefix_length = prefix_length + self.gpt = GPT2LMHeadModel.from_pretrained('gpt2') + self.gpt_embedding_size = self.gpt.transformer.wte.weight.shape[1] + self.clip_project = MLP( + ( + prefix_size, + (self.gpt_embedding_size * prefix_length) // 2, + self.gpt_embedding_size * prefix_length, + ) + ) + + +def generate2( + model, + tokenizer, + tokens=None, + prompt=None, + embed=None, + entry_count=1, + entry_length=67, + top_p=0.8, + temperature=1.0, + stop_token: str = '.', +): + model.eval() + generated_num = 0 + generated_list = [] + stop_token_index = tokenizer.encode(stop_token)[0] + filter_value = -float('Inf') + device = next(model.parameters()).device + + with torch.no_grad(): + for entry_idx in range(entry_count): + if embed is not None: + generated = embed + else: + if tokens is None: + tokens = torch.tensor(tokenizer.encode(prompt)) + tokens = tokens.unsqueeze(0).to(device) + generated = model.gpt.transformer.wte(tokens) + + for i in range(entry_length): + outputs = model.gpt(inputs_embeds=generated) + logits = outputs.logits + logits = logits[:, -1, :] / (temperature if temperature > 0 else 1.0) + sorted_logits, sorted_indices = torch.sort(logits, descending=True) + cumulative_probs = torch.cumsum( + nnf.softmax(sorted_logits, dim=-1), dim=-1 + ) + sorted_indices_to_remove = cumulative_probs > top_p + sorted_indices_to_remove[..., 1:] = sorted_indices_to_remove[ + ..., :-1 + ].clone() + sorted_indices_to_remove[..., 0] = 0 + + indices_to_remove = sorted_indices[sorted_indices_to_remove] + logits[:, indices_to_remove] = filter_value + next_token = torch.argmax(logits, -1).unsqueeze(0) + next_token_embed = model.gpt.transformer.wte(next_token) + if tokens is None: + tokens = next_token + else: + tokens = torch.cat((tokens, next_token), dim=1) + generated = torch.cat((generated, next_token_embed), dim=1) + if stop_token_index == next_token.item(): + break + + output_list = list(tokens.squeeze().cpu().numpy()) + output_text = tokenizer.decode(output_list) + generated_list.append(output_text) + + return generated_list[0] + + +def parse_args(): + parser = argparse.ArgumentParser(description='decode detection feature to text') + parser.add_argument('--prefix_length', type=int, default=10) + parser.add_argument( + '--model_path', + type=str, + default='https://www.now61.com/f/Xljmi0/coco_prefix_latest.pt', + help='model_path', + ) + parser.add_argument( + '--image_path', type=str, default='', help='image_path', required=True + ) + parser.add_argument( + '--fc_path', + type=str, + default='https://www.now61.com/f/qwvoH5/fc_parameters.pth', + help='fc_path', + ) + parser.add_argument( + '--cal_detection_feat', action='store_true', help='cal_detection_feat' + ) + parser.add_argument('--device', type=str, default='cuda:0', help='cuda:n or cpu') + args = parser.parse_args() + + def print_options(parser, args): + message = '' + message += '----------------- Options ---------------\n' + for k, v in sorted(vars(args).items()): + comment = '' + default = parser.get_default(k) + if v != default: + comment = '\t[default: %s]' % str(default) + message += '{:>25}: {:<30}{}\n'.format(str(k), str(v), comment) + message += '----------------- End -------------------' + print(message) + + print_options(parser, args) + return args + + +def get_text( + image_features, + tokenizer, + model, + fc_path, + cal_detection_feat=True, + prefix_length=10, + device='cpu', +): + mod = ( + torch.hub.load_state_dict_from_url(fc_path, map_location='cpu', progress=True) + if fc_path.startswith('http') + else torch.load(fc_path, map_location='cpu') + ) + weight, bias = mod['fc.weight'].to(device), mod['fc.bias'].to(device) + with torch.no_grad(): + prob = nnf.linear(image_features, weight, bias).sigmoid().cpu().numpy()[0][0] + dict_prob = {False: 'Fake', True: 'Real'} + # print( f'\nPredicted prob: {prob}, {dict_prob[prob<0.5]}' ) + # tmp=image_features;print(f'image_features: {tmp.shape}, max: {tmp.max()}, min: {tmp.min()}, mean: {tmp.mean()}') + if cal_detection_feat: + image_features = torch.mul(image_features, weight) + bias + image_features /= image_features.norm(2, dim=-1, keepdim=True) + prefix_embed = model.clip_project(image_features).reshape(1, prefix_length, -1) + generated_text_prefix = generate2(model, tokenizer, embed=prefix_embed) + return generated_text_prefix + + +def get_clip_model(clip_name='openai/clip-vit-large-patch14', device='cpu'): + clipmodel = CLIPModel.from_pretrained(clip_name) + processor = CLIPProcessor.from_pretrained(clip_name) + del clipmodel.text_model + del clipmodel.text_projection + del clipmodel.logit_scale + clipmodel = clipmodel.to(device) + return clipmodel, processor + + +def get_clipcap_model(model_path, prefix_length=10, device='cpu'): + tokenizer = GPT2Tokenizer.from_pretrained('gpt2') + model = ClipCaptionModel(prefix_length, prefix_size=768) + pretrained = ( + torch.hub.load_state_dict_from_url( + model_path, map_location='cpu', progress=True + ) + if model_path.startswith('http') + else torch.load(model_path, map_location='cpu') + ) + model.load_state_dict(pretrained) + assert pretrained.keys() == model.state_dict().keys() + model = model.eval() + model = model.to(device) + return model, tokenizer + + +def get_image_features(image_path, clipmodel, processor, device='cpu'): + with torch.no_grad(): + image = PIL.Image.fromarray(io.imread(image_path)) + inputs = processor(images=image, return_tensors='pt') + inputs['pixel_values'] = inputs['pixel_values'].to(device) + image_features = clipmodel.get_image_features(**inputs) + return image_features + + +if __name__ == '__main__': + opt = parse_args() + device = torch.device(opt.device) + + clipmodel, processor = get_clip_model( + clip_name='openai/clip-vit-large-patch14', device=device + ) + model, tokenizer = get_clipcap_model(opt.model_path, device=device) + + image_features = get_image_features( + opt.image_path, clipmodel, processor, device=device + ) + text = get_text( + image_features, + tokenizer, + model, + opt.fc_path, + opt.cal_detection_feat, + device=device, + ) + print(text) diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/networks/trainer.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/networks/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..67d4886a1c30d8062a68031565f86ce59cc74e04 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/networks/trainer.py @@ -0,0 +1,193 @@ +import torch +import torch.nn as nn +from peft import LoraConfig, get_peft_model +from transformers import CLIPModel, CLIPProcessor + +from networks.base_model import BaseModel + + +class CLIPModel_lora(nn.Module): + def __init__( + self, + name='openai/clip-vit-large-patch14-336', + num_classes=1, + lora_r=16, + lora_alpha=32, + lora_dropout=0.05, + ): + super(CLIPModel_lora, self).__init__() + self.model = CLIPModel.from_pretrained(name) + self.processor = CLIPProcessor.from_pretrained(name) + self.vision_tower = self.model.vision_model + self.vision_tower.requires_grad_(False) + self.model.text_model.requires_grad_(False) + self.model.visual_projection.requires_grad_(False) + self.model.text_projection.requires_grad_(False) + self.contrastive_loss = nn.CrossEntropyLoss() + self.model.logit_scale.requires_grad_(False) + lora_config = LoraConfig( + r=lora_r, + lora_alpha=lora_alpha, + target_modules=['q_proj', 'k_proj', 'v_proj'], + lora_dropout=lora_dropout, + bias='none', + ) + self.vision_tower_lora = get_peft_model(self.vision_tower, lora_config) + self.model.fc = nn.Linear(768, num_classes) + torch.nn.init.normal_(self.model.fc.weight.data, 0.0, 0.02) + + def encode_text(self, input_ids, attention_mask): + text_outputs = self.model.text_model( + input_ids=input_ids, + attention_mask=attention_mask, + position_ids=None, + output_attentions=self.model.config.output_attentions, + output_hidden_states=self.model.config.output_hidden_states, + return_dict=self.model.config.return_dict, + ) + text_embeds = text_outputs[1] + text_embeds = self.model.text_projection(text_embeds) + return text_embeds + + def encode_image(self, img): + vision_outputs = self.vision_tower_lora( + pixel_values=img, + output_attentions=self.model.config.output_attentions, + output_hidden_states=self.model.config.output_hidden_states, + return_dict=self.model.config.return_dict, + ) + pooled_output = vision_outputs[1] # pooled_output + image_features = self.model.visual_projection(pooled_output) + return image_features + + def forward(self, img, input_ids, attention_mask, cla=False): + # tmp = x; print(f'x: {tmp.shape}, max: {tmp.max()}, min: {tmp.min()}, mean: {tmp.mean()}') + + image_embeds = self.encode_image(img) + + image_embeds = image_embeds / image_embeds.norm(p=2, dim=-1, keepdim=True) + classhead = self.model.fc(image_embeds) + if cla: + return classhead + + text_embeds = self.encode_text(input_ids, attention_mask) + text_embeds = text_embeds / text_embeds.norm(p=2, dim=-1, keepdim=True) + + logits_per_text = ( + torch.matmul(text_embeds, image_embeds.t()) * self.model.logit_scale.exp() + ) + logits_per_image = logits_per_text.t() + + return logits_per_image, classhead.squeeze(1) + + def forward_eval(self, img): + image_embeds = self.encode_image(img) + image_embeds = image_embeds / image_embeds.norm(p=2, dim=-1, keepdim=True) + classhead = self.model.fc(image_embeds) + return classhead + + +class Trainer(BaseModel): + def name(self): + return 'Trainer' + + def __init__(self, opt): + super(Trainer, self).__init__(opt) + + self.delr = opt.delr + self.claloss = opt.claloss + + self.printOne = 1 + self.model = CLIPModel_lora( + name=opt.clip, + lora_r=opt.lora_r, + lora_alpha=opt.lora_alpha, + lora_dropout=opt.lora_dropout, + ) + + net_params = sum(map(lambda x: x.numel(), self.model.model.parameters())) + + print(f'Model parameters {net_params:,d}') + + if self.isTrain: + self.loss_fn = nn.BCEWithLogitsLoss() + if opt.optim == 'adam': + self.optimizer = torch.optim.Adam( + filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, + betas=(opt.beta1, 0.999), + ) + elif opt.optim == 'sgd': + self.optimizer = torch.optim.SGD( + self.model.parameters(), lr=opt.lr, momentum=0.0, weight_decay=0 + ) + elif opt.optim == 'adamw': + self.optimizer = torch.optim.AdamW( + filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, + weight_decay=0.05, + betas=(opt.beta1, 0.999), + eps=1e-8, + ) + else: + raise ValueError('optim should be [adam, sgd]') + + if not self.isTrain or opt.continue_train: + self.load_networks(opt.epoch) + + self.model = nn.DataParallel(self.model).cuda() + + def adjust_learning_rate(self, min_lr=1e-6): + for param_group in self.optimizer.param_groups: + param_group['lr'] *= self.delr + if param_group['lr'] < min_lr: + return False + self.lr = param_group['lr'] + print('*' * 25) + print( + f'Changing lr from {param_group["lr"] / self.delr} to {param_group["lr"]} with delr {self.delr}' + ) + print('*' * 25) + return True + + def set_input(self, input): + self.input = input[1].cuda() + self.text = input[2] + self.input_ids = input[3].cuda() + self.attention_mask = input[4].cuda() + self.label = input[5].cuda().float() + + def forward(self): + self.output, self.classhead = self.model( + self.input, self.input_ids, self.attention_mask + ) + + def contrastive_loss(self, logits: torch.Tensor) -> torch.Tensor: + + caption_loss = nn.functional.cross_entropy( + logits, torch.arange(len(logits), device=logits.device) + ) + image_loss = nn.functional.cross_entropy( + logits.t(), torch.arange(len(logits), device=logits.device) + ) + return (caption_loss + image_loss) / 2.0 + + def get_loss(self): + return self.model.clip_loss_input(self.input, self.text) + + def optimize_parameters(self): + self.forward() + + self.loss1 = sum( + [ + self.contrastive_loss(output) + for output in torch.split(self.output, self.output.shape[1], dim=0) + ] + ) + self.loss2 = self.claloss * self.loss_fn(self.classhead, self.label) + self.loss = self.loss1 + self.loss2 + # self.loss1, self.loss2 = 0.0, 0.0 + # self.loss = self.loss_fn(self.classhead, self.label) + self.optimizer.zero_grad() + self.loss.backward() + self.optimizer.step() diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/options/__init__.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/options/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/options/base_options.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/options/base_options.py new file mode 100644 index 0000000000000000000000000000000000000000..8fd95e3431f7c0d27b994cf0871fba2776ec13d0 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/options/base_options.py @@ -0,0 +1,131 @@ +import argparse +import os +import time +import utils.util as util +import torch +#import models +#import data + + +class BaseOptions(): + def __init__(self): + self.initialized = False + + def initialize(self, parser): + parser.add_argument('--mode', default='binary') + parser.add_argument('--arch', type=str, default='res50', help='architecture for binary classification') + + # data augmentation + parser.add_argument('--rz_interp', default='bilinear') + parser.add_argument('--blur_prob', type=float, default=0) + parser.add_argument('--blur_sig', default='0.5') + parser.add_argument('--jpg_prob', type=float, default=0) + parser.add_argument('--jpg_method', default='cv2') + parser.add_argument('--jpg_qual', default='75') + + parser.add_argument('--dataroot', default='./dataset/', help='path to images (should have subfolders trainA, trainB, valA, valB, etc)') + parser.add_argument('--textroot', default='./Genimage_CNNDetection_CLIP_prefix_caption/', help='path to texts') + + parser.add_argument('--classes', default='', help='which classes to use, separated by comma. If empty, use all subfolders of dataroot') + parser.add_argument('--class_bal', action='store_true') + parser.add_argument('--batch_size', type=int, default=64, help='input batch size') + parser.add_argument('--loadSize', type=int, default=256, help='scale images to this size') + parser.add_argument('--cropSize', type=int, default=224, help='then crop to this size') + parser.add_argument('--gpu_ids', type=str, default='0', help='gpu ids: e.g. 0 0,1,2, 0,2. use -1 for CPU') + parser.add_argument('--name', type=str, default='experiment_name', help='name of the experiment. It decides where to store samples and models') + parser.add_argument('--epoch', type=str, default='latest', help='which epoch to load? set to latest to use latest cached model') + parser.add_argument('--num_threads', type=int, default=8, help='# threads for loading data') + parser.add_argument('--checkpoints_dir', type=str, default='./checkpoints', help='models are saved here') + parser.add_argument('--serial_batches', action='store_true', help='if true, takes images in order to make batches, otherwise takes them randomly') + parser.add_argument('--resize_or_crop', type=str, default='scale_and_crop', help='scaling and cropping of images at load time [resize_and_crop|crop|scale_width|scale_width_and_crop|none]') + parser.add_argument('--no_flip', action='store_true', help='if specified, do not flip the images for data augmentation') + parser.add_argument('--init_type', type=str, default='normal', help='network initialization [normal|xavier|kaiming|orthogonal]') + parser.add_argument('--init_gain', type=float, default=0.02, help='scaling factor for normal, xavier and orthogonal.') + parser.add_argument('--suffix', type=str, default='', help='customized suffix: opt.name = opt.name + suffix: e.g., {model}_{netG}_size{loadSize}') + parser.add_argument('--delr_freq', type=int, default=20, help='frequency of change lr') + parser.add_argument('--delr', type=float, default=0.8, help='delr') + parser.add_argument('--seed', type=int, default=123, help='seed') + parser.add_argument('--clip', type=str, default='./clip-vit-large-patch14/', help='clip path') + parser.add_argument('--claloss', type=float, default=0.5, help='fixed num layer') + parser.add_argument('--cates', nargs='+', default=['Deepfake', 'Camera']) + parser.add_argument('--eval_freq', type=int, default=200, help='eval frequency') + parser.add_argument('--lora_r', type=int, default=16, help='eval frequency') + parser.add_argument('--lora_alpha', type=int, default=32, help='eval frequency') + parser.add_argument('--lora_dropout', type=float, default=0.1, help='eval frequency') + parser.add_argument('--lr', type=float, default=0.0001, help='initial learning rate for adam') + + self.initialized = True + return parser + + def gather_options(self): + # initialize parser with basic options + if not self.initialized: + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser = self.initialize(parser) + + # get the basic options + opt, _ = parser.parse_known_args() + self.parser = parser + + return opt + # return parser.parse_args() + + def print_options(self, opt): + message = '' + message += '----------------- Options ---------------\n' + for k, v in sorted(vars(opt).items()): + comment = '' + default = self.parser.get_default(k) + if v != default: + comment = '\t[default: %s]' % str(default) + message += '{:>25}: {:<30}{}\n'.format(str(k), str(v), comment) + message += '----------------- End -------------------' + print(message) + + # save to the disk + + expr_dir = os.path.join(opt.checkpoints_dir, opt.name) + util.mkdirs(expr_dir) + file_name = os.path.join(expr_dir, 'opt.txt') + with open(file_name, 'wt') as opt_file: + opt_file.write(message) + opt_file.write('\n') + + def parse(self, print_options=True): + + opt = self.gather_options() + opt.isTrain = self.isTrain # train or test + opt.imgroot = opt.dataroot + opt.name = '__'.join([opt.name, time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()), 'Seed_'+str(opt.seed), 'cates_'+'-'.join(opt.cates), 'claloss_'+str(opt.claloss), 'lora_r_'+str(opt.lora_r), 'lora_alpha_'+str(opt.lora_alpha), 'lora_dropout_'+str(opt.lora_dropout), 'lr_'+str(opt.lr)]) + + if opt.suffix: + suffix = ('_' + opt.suffix.format(**vars(opt))) if opt.suffix != '' else '' + opt.name = opt.name + suffix + + if print_options: + self.print_options(opt) + + # set gpu ids + str_ids = opt.gpu_ids.split(',') + opt.gpu_ids = [] + for str_id in str_ids: + id = int(str_id) + if id >= 0: + opt.gpu_ids.append(id) + if len(opt.gpu_ids) > 0: + torch.cuda.set_device(opt.gpu_ids[0]) + + # additional + opt.classes = opt.classes.split(',') + opt.rz_interp = opt.rz_interp.split(',') + opt.blur_sig = [float(s) for s in opt.blur_sig.split(',')] + opt.jpg_method = opt.jpg_method.split(',') + opt.jpg_qual = [int(s) for s in opt.jpg_qual.split(',')] + if len(opt.jpg_qual) == 2: + opt.jpg_qual = list(range(opt.jpg_qual[0], opt.jpg_qual[1] + 1)) + elif len(opt.jpg_qual) > 2: + raise ValueError("Shouldn't have more than 2 values for --jpg_qual.") + + self.opt = opt + return self.opt diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/options/test_options.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/options/test_options.py new file mode 100644 index 0000000000000000000000000000000000000000..8c7e16bc8f0439f32779c77c1f56832bbfbb05e1 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/options/test_options.py @@ -0,0 +1,17 @@ +from .base_options import BaseOptions + + +class TestOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + # parser.add_argument('--dataroot') + parser.add_argument('--model_path') + parser.add_argument('--no_resize', action='store_true') + parser.add_argument('--no_crop', action='store_true') + parser.add_argument('--eval', action='store_true', help='use eval mode during test time.') + parser.add_argument('--earlystop_epoch', type=int, default=15) + # parser.add_argument('--lr', type=float, default=0.00002, help='initial learning rate for adam') + parser.add_argument('--niter', type=int, default=0, help='# of iter at starting learning rate') + + self.isTrain = False + return parser diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/options/train_options.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/options/train_options.py new file mode 100644 index 0000000000000000000000000000000000000000..5e756971ba1740f54c78f93caf79aca06aa1e287 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/options/train_options.py @@ -0,0 +1,26 @@ +from .base_options import BaseOptions + + +class TrainOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--data_aug', action='store_true', help='if specified, perform additional data augmentation (photometric, blurring, jpegging)') + parser.add_argument('--optim', type=str, default='adam', help='optim to use [sgd, adam]') + parser.add_argument('--new_optim', action='store_true', help='new optimizer instead of loading the optim state') + parser.add_argument('--loss_freq', type=int, default=400, help='frequency of showing loss on tensorboard') + parser.add_argument('--save_latest_freq', type=int, default=2000, help='frequency of saving the latest results') + parser.add_argument('--save_epoch_freq', type=int, default=20, help='frequency of saving checkpoints at the end of epochs') + parser.add_argument('--continue_train', action='store_true', help='continue training: load the latest model') + parser.add_argument('--epoch_count', type=int, default=1, help='the starting epoch count, we save the model by , +, ...') + parser.add_argument('--last_epoch', type=int, default=-1, help='starting epoch count for scheduler intialization') + parser.add_argument('--train_split', type=str, default='train', help='train, val, test, etc') + parser.add_argument('--val_split', type=str, default='val', help='train, val, test, etc') + parser.add_argument('--niter', type=int, default=1000, help='number of epochs') + parser.add_argument('--total_steps', type=int, default=1000, help='total_steps to train') + parser.add_argument('--beta1', type=float, default=0.9, help='momentum term of adam') + # parser.add_argument('--model_path') + # parser.add_argument('--no_resize', action='store_true') + # parser.add_argument('--no_crop', action='store_true') + self.isTrain = True + return parser diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/requirements.txt b/detector_codes/C2P-CLIP-DeepfakeDetection-main/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..717900e4a13f41645b620059f8d85d267a6d3f96 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/requirements.txt @@ -0,0 +1,93 @@ +--extra-index-url https://download.pytorch.org/whl/cu118 +accelerate==0.32.1 +aiosignal==1.3.1 +annotated-types==0.7.0 +anyio==4.8.0 +attrs==23.2.0 +certifi==2024.7.4 +charset-normalizer==3.3.2 +click==8.1.7 +clip @ git+https://github.com/openai/CLIP.git@dcba3cb2e2827b402d2701e7e1c7d9fed8a20ef1 +contourpy==1.2.1 +cycler==0.12.1 +DingtalkChatbot==1.5.7 +distro==1.9.0 +dlib==19.24.6 +einops==0.8.0 +exceptiongroup==1.2.2 +filelock==3.13.1 +fonttools==4.53.1 +frozenlist==1.4.1 +fsspec==2024.2.0 +ftfy==6.2.0 +h11==0.14.0 +httpcore==1.0.7 +httpx==0.28.1 +idna==3.7 +imageio==2.35.1 +Jinja2==3.1.3 +jiter==0.8.2 +joblib==1.4.2 +jsonschema==4.23.0 +jsonschema-specifications==2023.12.1 +kiwisolver==1.4.5 +lazy_loader==0.4 +lora-pytorch==0.2.0 +MarkupSafe==2.1.5 +matplotlib==3.9.1 +mpmath==1.3.0 +msgpack==1.0.8 +munch==4.0.0 +networkx==3.2.1 +numpy==1.26.3 +nvidia-cublas-cu11==11.11.3.6 +nvidia-cuda-cupti-cu11==11.8.87 +nvidia-cuda-nvrtc-cu11==11.8.89 +nvidia-cuda-runtime-cu11==11.8.89 +nvidia-cudnn-cu11==8.7.0.84 +nvidia-cufft-cu11==10.9.0.58 +nvidia-curand-cu11==10.3.0.86 +nvidia-cusolver-cu11==11.4.1.48 +nvidia-cusparse-cu11==11.7.5.86 +nvidia-nccl-cu11==2.20.5 +nvidia-nvtx-cu11==11.8.86 +openai==1.60.2 +opencv-contrib-python==4.10.0.84 +opencv-python==4.10.0.84 +packaging==24.1 +peft==0.11.1 +pillow==10.2.0 +protobuf==5.27.2 +psutil==6.0.0 +pydantic==2.10.6 +pydantic_core==2.27.2 +pyparsing==3.1.2 +python-dateutil==2.9.0.post0 +pytorch_wavelets @ file:///opt/data/private/tcc/GANS_BS1_project6_LLM/A_FatFormer/FatFormer/pytorch_wavelets +PyYAML==6.0.1 +ray==2.32.0 +referencing==0.35.1 +regex==2024.5.15 +requests==2.32.3 +rpds-py==0.19.0 +safetensors==0.4.3 +scikit-image==0.24.0 +scikit-learn==1.5.1 +scipy==1.14.0 +setproctitle==1.3.3 +six==1.16.0 +sniffio==1.3.1 +sympy==1.12 +tensorboardX==2.6.2.2 +threadpoolctl==3.5.0 +tifffile==2024.8.28 +tokenizers==0.19.1 +torch==2.3.0 +torchaudio==2.3.0 +torchvision==0.18.0 +tqdm==4.66.4 +transformers==4.42.3 +triton==2.3.0 +typing_extensions==4.12.2 +urllib3==2.2.2 +wcwidth==0.2.13 diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/train.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/train.py new file mode 100644 index 0000000000000000000000000000000000000000..ba7d19e9337e936542d0e3044aa17187dcc390f6 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/train.py @@ -0,0 +1,150 @@ +import os +import sys + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +import random +import time + +import numpy as np +import torch +import torch.nn +from data import create_dataloader +from networks.trainer import Trainer +from options.test_options import TestOptions +from options.train_options import TrainOptions +from utils.util import Logger +from validate import validate + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if you are using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +"""Currently assumes jpg_prob, blur_prob 0 or 1""" + + +def get_val_opt(): + val_opt = TrainOptions().parse(print_options=False) + val_opt.dataroot = '{}/{}/'.format(val_opt.dataroot, val_opt.val_split) + val_opt.isTrain = False + val_opt.no_resize = False + val_opt.no_crop = False + val_opt.serial_batches = True + val_opt.jpg_method = ['pil'] + if len(val_opt.blur_sig) == 2: + b_sig = val_opt.blur_sig + val_opt.blur_sig = [(b_sig[0] + b_sig[1]) / 2] + if len(val_opt.jpg_qual) != 1: + j_qual = val_opt.jpg_qual + val_opt.jpg_qual = [int((j_qual[0] + j_qual[-1]) / 2)] + + return val_opt + + +if __name__ == '__main__': + opt = TrainOptions().parse() + seed_torch(opt.seed) + + Test_dataroot = os.path.join(opt.dataroot, 'test') + opt.dataroot = '{}/{}/'.format(opt.dataroot, opt.train_split) + Logger(os.path.join(opt.checkpoints_dir, opt.name, 'log.log')) + Testopt = TestOptions().parse(print_options=False) + Test_vals = os.listdir(Test_dataroot) + data_loader = create_dataloader(opt) + model = Trainer(opt) + + def testmodel(epoch=0): + print('*' * 25) + accs = [] + aps = [] + logs = [f'Testing end of {epoch}'] + print(time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime())) + for v_id, val in enumerate(Test_vals): + Testopt.dataroot = f'{Test_dataroot}/{val}' + # Testopt.classes = os.listdir(Testopt.dataroot) if multiclass[v_id] else [''] + Testopt.loadSize = opt.cropSize + Testopt.cropSize = opt.cropSize + Testopt.no_resize = False + Testopt.no_crop = False + Testopt.classes = '' + acc, ap, _, _, _, _ = validate(model.model, Testopt) + accs.append(acc) + aps.append(ap) + logs.append( + '({} {:10}) acc: {:.1f}; ap: {:.1f}'.format( + v_id, val, acc * 100, ap * 100 + ) + ) + print(logs[-1]) + logs.append( + '({} {:10}) acc: {:.1f}; ap: {:.1f}'.format( + v_id + 1, + 'Mean', + np.array(accs).mean() * 100, + np.array(aps).mean() * 100, + ) + ) + print(logs[-1]) + print('*' * 25) + print(time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime())) + return round(np.array(accs).mean() * 100, 4) + + model.train() + for epoch in range(opt.niter): + epoch_start_time = time.time() + iter_data_time = time.time() + epoch_iter = 0 + + for i, data in enumerate(data_loader): + model.total_steps += 1 + if model.total_steps > opt.total_steps: + break + epoch_iter += opt.batch_size + model.set_input(data) + model.optimize_parameters() + if model.total_steps % opt.loss_freq == 0: + print( + time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime()), + 'Train loss: {} loss1: {} loss2-cla: {} at step: {} lr {}'.format( + model.loss, + model.loss1, + model.loss2, + model.total_steps, + model.lr, + ), + ) + + # if model.total_steps % opt.eval_freq == 0: + # print(os.getcwd()) + # print(f'==========total_steps {model.total_steps}=================') + # model.eval() + # testacc = testmodel(epoch) + # model.save_networks( f'{str(epoch)}_total_steps_{str(model.total_steps)}_testacc_{str(testacc)}') + # model.train() + + if epoch % opt.delr_freq == 0 and epoch != 0: + print( + time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime()), + 'changing lr at the end of epoch %d, iters %d' + % (epoch, model.total_steps), + ) + model.adjust_learning_rate() + + model.eval() + testacc = testmodel(epoch) + model.save_networks( + f'{str(epoch)}_total_steps_{str(model.total_steps)}_testacc_{str(testacc)}' + ) + print( + 'saving the latest model %s (epoch %d, model.total_steps %d)' + % (opt.name, epoch, model.total_steps) + ) + model.train() diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/train_UniversalFakeDetect.sh b/detector_codes/C2P-CLIP-DeepfakeDetection-main/train_UniversalFakeDetect.sh new file mode 100644 index 0000000000000000000000000000000000000000..8201d753a593aa0ebcf31a0ea6c70489ea1b5b40 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/train_UniversalFakeDetect.sh @@ -0,0 +1,21 @@ +CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py \ + --name ForenSynths_train_val_19test_dataset \ + --dataroot ./ForenSynths_train_val_19test/ \ + --classes car,cat,chair,horse \ + --batch_size 128 \ + --delr_freq 10 \ + --lr 0.0004 \ + --niter 1 \ + --total_steps 800 \ + --delr 0.9 \ + --loadSize 256 \ + --cropSize 224 \ + --seed 123 \ + --clip ./clip-vit-large-patch14/ \ + --claloss 8.0 \ + --cates Deepfake Camera \ + --eval_freq 800 \ + --loss_freq 50 \ + --lora_r 6 \ + --lora_alpha 6 \ + --lora_dropout 0.8 \ No newline at end of file diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/train_aigibench.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/train_aigibench.py new file mode 100644 index 0000000000000000000000000000000000000000..f31d9a5d8998c37ed7d9e42617556e47b731771d --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/train_aigibench.py @@ -0,0 +1,231 @@ +import os +import random +import sys +import time + +import numpy as np +import torch +import torch.nn as nn +from datasets import load_dataset +from torch.utils.data import DataLoader, Dataset +from torchvision import transforms +from transformers import AutoTokenizer + +# Add the current directory to sys.path so it can find networks, options, etc. +current_dir = os.path.dirname(os.path.abspath(__file__)) +if current_dir not in sys.path: + sys.path.insert(0, current_dir) + +from networks.trainer import Trainer +from options.train_options import TrainOptions +from utils.util import Logger + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +class AIGIBenchDataset(Dataset): + def __init__(self, hf_data, opt, transform=None): + self.hf_data = hf_data + self.opt = opt + self.transform = transform + + # Use CLIP model path or HF name for tokenizer + tokenizer_name = ( + opt.clip if os.path.exists(opt.clip) else 'openai/clip-vit-large-patch14' + ) + self.tokenizer = AutoTokenizer.from_pretrained( + tokenizer_name, model_max_length=77, padding_side='right', use_fast=False + ) + self.tokenizer.pad_token_id = 0 + + def __len__(self): + return len(self.hf_data) + + def __getitem__(self, idx): + item = self.hf_data[idx] + image = item['image'].convert('RGB') + label = item['label'] + generator_id = item['generator'] + + # Generator mapping based on AIGIBench spec + gen_names = {0: 'Real', 1: 'ProGAN', 2: 'SD14'} + gen_name = gen_names.get(generator_id, 'Unknown') + + cates = self.opt.cates + cates_len = len(cates) // 2 + + # Generic image description to guide the contrastive learning + text = f'An image produced by {gen_name}' + + if label == 1: # Fake (AI-generated) + text = ( + f'{" ".join(cates[:cates_len])}. {text} {" ".join(cates[:cates_len])}.' + ) + else: # Real (Authentic) + text = ( + f'{" ".join(cates[cates_len:])}. {text} {" ".join(cates[cates_len:])}.' + ) + + inputs = self.tokenizer( + [text], + padding='max_length', + max_length=self.tokenizer.model_max_length, + truncation=True, + return_tensors='pt', + ) + input_ids = inputs['input_ids'][0] + attention_mask = inputs['attention_mask'][0] + + if self.transform: + image = self.transform(image) + + # Format: path, image, text, input_ids, attention_mask, label + return 'hf_dataset', image, text, input_ids, attention_mask, label + + +def get_train_transforms(opt): + return transforms.Compose( + [ + transforms.Resize(opt.loadSize), + transforms.RandomCrop(opt.cropSize), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.48145466, 0.4578275, 0.40821073], + std=[0.26862954, 0.26130258, 0.27577711], + ), + ] + ) + + +def get_val_transforms(opt): + return transforms.Compose( + [ + transforms.Resize(opt.loadSize), + transforms.CenterCrop(opt.cropSize), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.48145466, 0.4578275, 0.40821073], + std=[0.26862954, 0.26130258, 0.27577711], + ), + ] + ) + + +if __name__ == '__main__': + # Parse options + opt = TrainOptions().parse() + seed_torch(opt.seed) + + # Handle CLIP path if folder doesn't exist locally + if not os.path.exists(opt.clip): + print( + f"CLIP path {opt.clip} not found locally. Using 'openai/clip-vit-large-patch14' from HuggingFace." + ) + opt.clip = 'openai/clip-vit-large-patch14' + + # Initialize logger + log_path = os.path.join(opt.checkpoints_dir, opt.name) + if not os.path.exists(log_path): + os.makedirs(log_path) + Logger(os.path.join(log_path, 'log.log')) + + print('Loading AIGIBench dataset from HuggingFace...') + ds = load_dataset('TheKernel01/AIGIBench') + train_data = ds['train'] + + val_data = ds['validation'] + + train_dataset = AIGIBenchDataset( + train_data, opt, transform=get_train_transforms(opt) + ) + val_dataset = AIGIBenchDataset(val_data, opt, transform=get_val_transforms(opt)) + + train_loader = DataLoader( + train_dataset, + batch_size=opt.batch_size, + shuffle=True, + num_workers=opt.num_threads, + ) + val_loader = DataLoader( + val_dataset, + batch_size=opt.batch_size, + shuffle=False, + num_workers=opt.num_threads, + ) + + # Initialize Trainer + model = Trainer(opt) + + print(f'Starting training on {len(train_data)} samples...') + for epoch in range(opt.niter): + model.train() + epoch_start_time = time.time() + + for i, data in enumerate(train_loader): + model.total_steps += 1 + + model.set_input(data) + model.optimize_parameters() + + if model.total_steps % opt.loss_freq == 0: + print( + f'{time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime())} Train loss: {model.loss:.4f} loss1: {model.loss1:.4f} loss2-cla: {model.loss2:.4f} at step: {model.total_steps} lr {model.lr}' + ) + + if model.total_steps >= opt.total_steps: + break + + # Validation at the end of epoch + print('Running validation...') + model.eval() + with torch.no_grad(): + val_loss = 0 + val_acc = 0 + count = 0 + # Limit validation samples for speed during training + max_val_samples = 2000 + + for i, data in enumerate(val_loader): + model.set_input(data) + # Trainer's model is DataParallel, access it directly for inference + _, classhead = model.model( + model.input, model.input_ids, model.attention_mask + ) + + loss = nn.functional.binary_cross_entropy_with_logits( + classhead, model.label + ) + val_loss += loss.item() * len(model.label) + + preds = (torch.sigmoid(classhead) > 0.5).float() + val_acc += (preds == model.label).sum().item() + count += len(model.label) + + if count >= max_val_samples: + break + + avg_val_loss = val_loss / count + avg_val_acc = val_acc / count + print( + f'Epoch {epoch} | Val Loss: {avg_val_loss:.4f} | Val Acc: {avg_val_acc:.4f}' + ) + + # Save checkpoint + model.save_networks(f'epoch_{epoch}_acc_{avg_val_acc:.4f}') + + if model.total_steps >= opt.total_steps: + print('Reached total_steps limit. Ending training.') + break + + print('Training complete.') diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/train_aigibench.sh b/detector_codes/C2P-CLIP-DeepfakeDetection-main/train_aigibench.sh new file mode 100644 index 0000000000000000000000000000000000000000..9597ba10a74f7a8d5a320981136f9ae775ce6af9 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/train_aigibench.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# Training script for AIGIBench using C2P-CLIP +# This command reproduces the configuration found in the latest checkpoint. + +python ./train_aigibench.py \ + --name aigibench_full_train \ + --arch res50 \ + --batch_size 8 \ + --lr 0.0001 \ + --niter 1 \ + --total_steps 5000 \ + --loadSize 256 \ + --cropSize 224 \ + --seed 123 \ + --clip openai/clip-vit-large-patch14 \ + --claloss 0.5 \ + --cates Deepfake Camera \ + --eval_freq 200 \ + --loss_freq 50 \ + --lora_r 16 \ + --lora_alpha 32 \ + --lora_dropout 0.1 \ + --num_threads 4 diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/train_genimage.sh b/detector_codes/C2P-CLIP-DeepfakeDetection-main/train_genimage.sh new file mode 100644 index 0000000000000000000000000000000000000000..93d8b35051e7f9febd1cd2dbc5497e3e6e3995ba --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/train_genimage.sh @@ -0,0 +1,19 @@ +CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py \ + --name genimage \ + --dataroot ./GenImage_Dataset/ \ + --classes sdv4 \ + --batch_size 128 \ + --lr 0.0002 \ + --niter 1 \ + --total_steps 100 \ + --loadSize 256 \ + --cropSize 224 \ + --seed 123 \ + --clip ./clip-vit-large-patch14/ \ + --claloss 8 \ + --cates Deepfake Camera \ + --eval_freq 100 \ + --loss_freq 10 \ + --lora_r 6 \ + --lora_alpha 6 \ + --lora_dropout 0.5 \ No newline at end of file diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/utils/logger.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/utils/logger.py new file mode 100644 index 0000000000000000000000000000000000000000..b09cb063667cf07e0996b437804d39319f4d0cb6 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/utils/logger.py @@ -0,0 +1,214 @@ +import collections +import logging +import os +import sys +import time + +import numpy as np + + +def create_logger(log_dir, phase='train'): + time_str = time.strftime('%Y-%m-%d-%H-%M') + log_file = '{}_{}.log'.format(time_str, phase) + final_log_file = os.path.join(log_dir, log_file) + logging.basicConfig( + filename=str(final_log_file), + format='%(asctime)s %(levelname)s: %(message)s', + level=logging.INFO, + datefmt='%Y-%m-%d %H:%M:%S', + ) + logger = logging.getLogger() + logger.setLevel(logging.INFO) + console = logging.StreamHandler() + logging.getLogger('').addHandler(console) + return logger + + +class Progbar(object): + """Displays a progress bar. + # Arguments + target: Total number of steps expected, None if unknown. + width: Progress bar width on screen. + verbose: Verbosity mode, 0 (silent), 1 (verbose), 2 (semi-verbose) + stateful_metrics: Iterable of string names of metrics that + should *not* be averaged over time. Metrics in this list + will be displayed as-is. All others will be averaged + by the progbar before display. + interval: Minimum visual progress update interval (in seconds). + """ + + def __init__( + self, target, width=30, verbose=1, interval=0.05, stateful_metrics=None + ): + self.target = target + self.width = width + self.verbose = verbose + self.interval = interval + if stateful_metrics: + self.stateful_metrics = set(stateful_metrics) + else: + self.stateful_metrics = set() + + self._dynamic_display = ( + hasattr(sys.stdout, 'isatty') and sys.stdout.isatty() + ) or 'ipykernel' in sys.modules + self._total_width = 0 + self._seen_so_far = 0 + self._values = collections.OrderedDict() + self._start = time.time() + self._last_update = 0 + + def update(self, current, values=None): + """Updates the progress bar. + # Arguments + current: Index of current step. + values: List of tuples: + `(name, value_for_last_step)`. + If `name` is in `stateful_metrics`, + `value_for_last_step` will be displayed as-is. + Else, an average of the metric over time will be displayed. + """ + values = values or [] + for k, v in values: + if k not in self.stateful_metrics: + if k not in self._values: + self._values[k] = [ + v * (current - self._seen_so_far), + current - self._seen_so_far, + ] + else: + self._values[k][0] += v * (current - self._seen_so_far) + self._values[k][1] += current - self._seen_so_far + else: + self._values[k] = v + self._seen_so_far = current + + now = time.time() + info = ' - %.0fs' % (now - self._start) + if self.verbose == 1: + if ( + now - self._last_update < self.interval + and self.target is not None + and current < self.target + ): + return + + prev_total_width = self._total_width + if self._dynamic_display: + sys.stdout.write('\b' * prev_total_width) + sys.stdout.write('\r') + else: + sys.stdout.write('\n') + + if self.target is not None: + numdigits = int(np.floor(np.log10(self.target))) + 1 + barstr = '%%%dd/%d [' % (numdigits, self.target) + bar = barstr % current + prog = float(current) / self.target + prog_width = int(self.width * prog) + if prog_width > 0: + bar += '=' * (prog_width - 1) + if current < self.target: + bar += '>' + else: + bar += '=' + bar += '.' * (self.width - prog_width) + bar += ']' + else: + bar = '%7d/Unknown' % current + + self._total_width = len(bar) + sys.stdout.write(bar) + + if current: + time_per_unit = (now - self._start) / current + else: + time_per_unit = 0 + if self.target is not None and current < self.target: + eta = time_per_unit * (self.target - current) + if eta > 3600: + eta_format = '%d:%02d:%02d' % ( + eta // 3600, + (eta % 3600) // 60, + eta % 60, + ) + elif eta > 60: + eta_format = '%d:%02d' % (eta // 60, eta % 60) + else: + eta_format = '%ds' % eta + + info = ' - ETA: %s' % eta_format + else: + if time_per_unit >= 1: + info += ' %.0fs/step' % time_per_unit + elif time_per_unit >= 1e-3: + info += ' %.0fms/step' % (time_per_unit * 1e3) + else: + info += ' %.0fus/step' % (time_per_unit * 1e6) + + for k in self._values: + info += ' - %s:' % k + if isinstance(self._values[k], list): + avg = np.mean(self._values[k][0] / max(1, self._values[k][1])) + if abs(avg) > 1e-3: + info += ' %.4f' % avg + else: + info += ' %.4e' % avg + else: + info += ' %s' % self._values[k] + + self._total_width += len(info) + if prev_total_width > self._total_width: + info += ' ' * (prev_total_width - self._total_width) + + if self.target is not None and current >= self.target: + info += '\n' + + sys.stdout.write(info) + sys.stdout.flush() + + elif self.verbose == 2: + if self.target is None or current >= self.target: + for k in self._values: + info += ' - %s:' % k + avg = np.mean(self._values[k][0] / max(1, self._values[k][1])) + if avg > 1e-3: + info += ' %.4f' % avg + else: + info += ' %.4e' % avg + info += '\n' + + sys.stdout.write(info) + sys.stdout.flush() + + self._last_update = now + + def add(self, n, values=None): + self.update(self._seen_so_far + n, values) + + +class AverageMeter(object): + """Computes and stores the average and current value""" + + def __init__(self): + self.reset() + + def reset(self): + self.val = 0 + self.avg = 0 + self.sum = 0 + self.count = 0 + + def update(self, val, n=1): + self.val = val + self.sum += val * n + self.count += n + self.avg = self.sum / (0.0001 + self.count) + + def __str__(self): + """String representation for logging""" + # for values that should be recorded exactly e.g. iteration number + if self.count == 0: + return str(self.val) + # for stats + return '%.4f (%.4f)' % (self.val, self.avg) diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/utils/util.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/utils/util.py new file mode 100644 index 0000000000000000000000000000000000000000..9fc7f25e858269ee3cbc0bd03281c467af84e887 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/utils/util.py @@ -0,0 +1,52 @@ +import os +import sys + +import torch + + +def mkdirs(paths): + if isinstance(paths, list) and not isinstance(paths, str): + for path in paths: + mkdir(path) + else: + mkdir(paths) + + +def mkdir(path): + if not os.path.exists(path): + os.makedirs(path) + + +def unnormalize(tens, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]): + # assume tensor of shape NxCxHxW + return ( + tens * torch.Tensor(std)[None, :, None, None] + + torch.Tensor(mean)[None, :, None, None] + ) + + +class Logger(object): + """Log stdout messages.""" + + def __init__(self, outfile): + self.terminal = sys.stdout + self.log = open(outfile, 'a') + sys.stdout = self + + def write(self, message): + self.terminal.write(message) + self.log.write(message) + + def flush(self): + self.terminal.flush() + + def isatty(self): + return self.terminal.isatty() + + +def printSet(set_str): + set_str = str(set_str) + num = len(set_str) + print('=' * num * 3) + print(' ' * num + set_str) + print('=' * num * 3) diff --git a/detector_codes/C2P-CLIP-DeepfakeDetection-main/validate.py b/detector_codes/C2P-CLIP-DeepfakeDetection-main/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..25e69736864c47f82a6200af38a9d785bd3304b8 --- /dev/null +++ b/detector_codes/C2P-CLIP-DeepfakeDetection-main/validate.py @@ -0,0 +1,23 @@ +import numpy as np +import torch +from data import create_dataloader +from sklearn.metrics import accuracy_score, average_precision_score + + +def validate(model, opt): + data_loader = create_dataloader(opt) + + with torch.no_grad(): + y_true, y_pred = [], [] + for path, img, text, input_ids, attention_mask, label in data_loader: + y_pred.extend( + model(img.cuda(), None, None, cla=True).sigmoid().flatten().tolist() + ) + y_true.extend(label.flatten().tolist()) + + y_true, y_pred = np.array(y_true), np.array(y_pred) + r_acc = accuracy_score(y_true[y_true == 0], y_pred[y_true == 0] > 0.5) + f_acc = accuracy_score(y_true[y_true == 1], y_pred[y_true == 1] > 0.5) + acc = accuracy_score(y_true, y_pred > 0.5) + ap = average_precision_score(y_true, y_pred) + return acc, ap, r_acc, f_acc, y_true, y_pred diff --git a/detector_codes/C2P-DINOv2-main/dataset.py b/detector_codes/C2P-DINOv2-main/dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..b1195a58ade022b384f493cce7b267c1aca013d0 --- /dev/null +++ b/detector_codes/C2P-DINOv2-main/dataset.py @@ -0,0 +1,45 @@ +import torch +from torch.utils.data import Dataset +from torchvision import transforms + + +class AIGIBenchDataset(Dataset): + def __init__(self, hf_data, transform=None): + self.hf_data = hf_data + self.transform = transform + + def __len__(self): + return len(self.hf_data) + + def __getitem__(self, idx): + item = self.hf_data[idx] + image = item['image'].convert('RGB') + label = item['label'] # 0 for Real, 1 for Fake + + if self.transform: + image = self.transform(image) + + return image, torch.tensor(label, dtype=torch.float32) + + +def get_train_transforms(size=224): + return transforms.Compose( + [ + transforms.Resize(size + 32), + transforms.RandomCrop(size), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ] + ) + + +def get_val_transforms(size=224): + return transforms.Compose( + [ + transforms.Resize(size + 32), + transforms.CenterCrop(size), + transforms.ToTensor(), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ] + ) diff --git a/detector_codes/C2P-DINOv2-main/model.py b/detector_codes/C2P-DINOv2-main/model.py new file mode 100644 index 0000000000000000000000000000000000000000..a1cfc20a6c3dedc03a8d8614c7bcab0cd5e2090a --- /dev/null +++ b/detector_codes/C2P-DINOv2-main/model.py @@ -0,0 +1,54 @@ +import torch +import torch.nn as nn +from peft import LoraConfig, get_peft_model +from transformers import Dinov2Model + + +class C2P_DINOv2_Model(nn.Module): + def __init__( + self, + model_name='facebook/dinov2-large', + lora_r=16, + lora_alpha=32, + lora_dropout=0.05, + hf_token=None, + ): + super(C2P_DINOv2_Model, self).__init__() + + # Load the DINOv2 model + self.backbone = Dinov2Model.from_pretrained(model_name, token=hf_token) + self.backbone.requires_grad_(False) # Freeze by default + + # Configure LoRA + lora_config = LoraConfig( + r=lora_r, + lora_alpha=lora_alpha, + target_modules=[ + 'query', + 'key', + 'value', + ], # DINOv2 in transformers uses query/key/value in attention + lora_dropout=lora_dropout, + bias='none', + ) + + # Apply LoRA to the backbone + self.backbone = get_peft_model(self.backbone, lora_config) + + # Head (DINOv2-Large has hidden size of 1024) + hidden_size = self.backbone.config.hidden_size + self.fc = nn.Linear(hidden_size, 1) + torch.nn.init.normal_(self.fc.weight.data, 0.0, 0.02) + torch.nn.init.constant_(self.fc.bias.data, 0.0) + + def forward(self, x): + outputs = self.backbone(x) + # We use the [CLS] token representation for classification + # pooler_output is usually the CLS token in transformers implementation of ViT/DINOv2 + cls_token = outputs.pooler_output + return self.fc(cls_token) + + def detect(self, x): + with torch.no_grad(): + logits = self.forward(x) + return torch.sigmoid(logits).squeeze(1) diff --git a/detector_codes/C2P-DINOv2-main/train.py b/detector_codes/C2P-DINOv2-main/train.py new file mode 100644 index 0000000000000000000000000000000000000000..c1d625948aaa81d5ba23b181b63f55b24704c076 --- /dev/null +++ b/detector_codes/C2P-DINOv2-main/train.py @@ -0,0 +1,133 @@ +import os +import random +import sys + +import torch +import torch.nn as nn +import torch.optim as optim +from datasets import load_dataset +from dotenv import load_dotenv +from torch.utils.data import DataLoader +from tqdm import tqdm + +# Add current directory to sys.path +current_dir = os.path.dirname(os.path.abspath(__file__)) +if current_dir not in sys.path: + sys.path.insert(0, current_dir) + +from dataset import AIGIBenchDataset, get_train_transforms, get_val_transforms +from model import C2P_DINOv2_Model + + +def seed_everything(seed=123): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.benchmark = False + + +def train(): + seed_everything() + + # Load Environment Variables + load_dotenv() + HF_TOKEN = os.getenv('HF_TOKEN') + + device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + print(f'Using device: {device}') + + # Checkpoints directory + checkpoints_dir = os.path.join(current_dir, 'checkpoints') + os.makedirs(checkpoints_dir, exist_ok=True) + + # Load Dataset + print('Loading AIGIBench dataset from HuggingFace...') + ds = load_dataset('TheKernel01/AIGIBench', token=HF_TOKEN) + + train_ds = AIGIBenchDataset(ds['train'], transform=get_train_transforms()) + val_ds = AIGIBenchDataset(ds['validation'], transform=get_val_transforms()) + + train_loader = DataLoader( + train_ds, batch_size=16, shuffle=True, num_workers=8, pin_memory=True + ) + val_loader = DataLoader( + val_ds, batch_size=16, shuffle=False, num_workers=8, pin_memory=True + ) + + # Initialize Model + model = C2P_DINOv2_Model().to(device) + + # Optimizer and Loss + optimizer = optim.AdamW( + filter(lambda p: p.requires_grad, model.parameters()), + lr=1e-4, + weight_decay=0.01, + ) + criterion = nn.BCEWithLogitsLoss() + + num_epochs = 1 + print(f'Starting training for {num_epochs} epochs...') + + for epoch in range(num_epochs): + model.train() + running_loss = 0.0 + + pbar = tqdm(train_loader, desc=f'Epoch {epoch + 1}/{num_epochs}') + for i, (images, labels) in enumerate(pbar): + images, labels = images.to(device), labels.to(device).unsqueeze(1) + + optimizer.zero_grad() + logits = model(images) + loss = criterion(logits, labels) + loss.backward() + optimizer.step() + + running_loss += loss.item() + if i % 10 == 0: + pbar.set_postfix({'loss': running_loss / (i + 1)}) + + # Validation + model.eval() + val_loss = 0.0 + correct = 0 + total = 0 + + print('Running validation...') + with torch.no_grad(): + for images, labels in tqdm(val_loader, desc='Validating', leave=False): + images, labels = images.to(device), labels.to(device).unsqueeze(1) + logits = model(images) + loss = criterion(logits, labels) + val_loss += loss.item() + + preds = (torch.sigmoid(logits) > 0.5).float() + correct += (preds == labels).sum().item() + total += labels.size(0) + + avg_val_acc = correct / total + avg_val_loss = val_loss / len(val_loader) + print( + f'Epoch {epoch + 1} | Val Loss: {avg_val_loss:.4f} | Val Acc: {avg_val_acc:.4f}' + ) + + # Save Checkpoint + checkpoint_name = f'dinov2_lora_epoch_{epoch + 1}_acc_{avg_val_acc:.4f}.pth' + save_path = os.path.join(checkpoints_dir, checkpoint_name) + torch.save( + { + 'epoch': epoch + 1, + 'model_state_dict': model.state_dict(), + 'optimizer_state_dict': optimizer.state_dict(), + 'val_acc': avg_val_acc, + }, + save_path, + ) + print(f'Saved checkpoint to {save_path}') + + print('Training Complete!') + + +if __name__ == '__main__': + train() diff --git a/detector_codes/CLIPDetection-main/data/__init__.py b/detector_codes/CLIPDetection-main/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1f861263a4ac3d385446c9db7e7915f5d59870df --- /dev/null +++ b/detector_codes/CLIPDetection-main/data/__init__.py @@ -0,0 +1,59 @@ +import torch +import numpy as np +from torch.utils.data.sampler import WeightedRandomSampler + +from .datasets import dataset_folder + +''' +def get_dataset(opt): + dset_lst = [] + for cls in opt.classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) +''' + +import os + + +def get_dataset(opt): + classes = os.listdir(opt.dataroot) if len(opt.classes) == 0 else opt.classes + if '0_real' not in classes or '1_fake' not in classes: + dset_lst = [] + for cls in classes: + # for dir in os.listdir(opt.dataroot): + # root = opt.dataroot + '/' + dir + '/' + cls + # dset = dataset_folder(opt, root) + # dset_lst.append(dset) + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) + return dataset_folder(opt, opt.dataroot) + + +def get_bal_sampler(dataset): + targets = [] + for d in dataset.datasets: + targets.extend(d.targets) + + ratio = np.bincount(targets) + w = 1. / torch.tensor(ratio, dtype=torch.float) + sample_weights = w[targets] + sampler = WeightedRandomSampler(weights=sample_weights, + num_samples=len(sample_weights)) + return sampler + + +def create_dataloader(opt): + shuffle = not opt.serial_batches if (opt.isTrain and not opt.class_bal) else False + dataset = get_dataset(opt) + sampler = get_bal_sampler(dataset) if opt.class_bal else None + + data_loader = torch.utils.data.DataLoader(dataset, + batch_size=opt.batch_size, + shuffle=shuffle, + sampler=sampler, + num_workers=int(opt.num_threads)) + return data_loader diff --git a/detector_codes/CLIPDetection-main/data/datasets.py b/detector_codes/CLIPDetection-main/data/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..353df8af689377470da1594ec0f6cd12d41237eb --- /dev/null +++ b/detector_codes/CLIPDetection-main/data/datasets.py @@ -0,0 +1,212 @@ +import cv2 +import numpy as np +import torchvision.datasets as datasets +import torchvision.transforms as transforms +import torchvision.transforms.functional as TF +from random import random, choice +from io import BytesIO +from PIL import Image +from PIL import ImageFile +from scipy.ndimage.filters import gaussian_filter +from torchvision.transforms import InterpolationMode +import torch +import random + +ImageFile.LOAD_TRUNCATED_IMAGES = True + +def dataset_folder(opt, root): + if opt.mode == 'binary': + return binary_dataset(opt, root) + if opt.mode == 'filename': + return FileNameDataset(opt, root) + raise ValueError('opt.mode needs to be binary or filename.') + + +class RandomGaussianBlur(): + def __init__(self, kernel_size, sigma=(0.1, 2.0), p=1.0): + self.blur = transforms.GaussianBlur(kernel_size=kernel_size, sigma=sigma) + self.p = p + + def __call__(self, img): + if random.random() < self.p: + return self.blur(img) + return img + + +class RandomMask(object): + def __init__(self, ratio=0.5, patch_size=16, p=0.5): + """ + Args: + ratio (float or tuple of float): If float, the ratio of the image to be masked. + If tuple of float, random sample ratio between the two values. + patch_size (int): the size of the mask (d*d). + """ + if isinstance(ratio, float): + self.fixed_ratio = True + self.ratio = (ratio, ratio) + elif isinstance(ratio, tuple) and len(ratio) == 2 and all(isinstance(r, float) for r in ratio): + self.fixed_ratio = False + self.ratio = ratio + else: + raise ValueError("Ratio must be a float or a tuple of two floats.") + + self.patch_size = patch_size + self.p = p + + def __call__(self, tensor): + + if random.random() > self.p: return tensor + + _, h, w = tensor.shape + mask = torch.ones((h, w), dtype=torch.float32) + + if self.fixed_ratio: + ratio = self.ratio[0] + else: + ratio = random.uniform(self.ratio[0], self.ratio[1]) + + # Calculate the number of masks needed + num_masks = int((h * w * ratio) / (self.patch_size ** 2)) + + # Generate non-overlapping random positions + selected_positions = set() + while len(selected_positions) < num_masks: + top = random.randint(0, (h // self.patch_size) - 1) * self.patch_size + left = random.randint(0, (w // self.patch_size) - 1) * self.patch_size + selected_positions.add((top, left)) + + for (top, left) in selected_positions: + mask[top:top+self.patch_size, left:left+self.patch_size] = 0 + + return tensor * mask.expand_as(tensor) + +def binary_dataset(opt, root): + if opt.isTrain: + crop_func = transforms.RandomCrop(opt.cropSize) + rotation_func = transforms.RandomRotation(180) + jitter_func = transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5) + mask_func = RandomMask(ratio=(0.00, 0.75), patch_size=16, p=0.5) + elif opt.no_crop: + crop_func = transforms.Lambda(lambda img: img) + rotation_func = transforms.Lambda(lambda img: img) + jitter_func = transforms.Lambda(lambda img: img) + mask_func = transforms.Lambda(lambda img: img) + else: + crop_func = transforms.CenterCrop(opt.cropSize) + rotation_func = transforms.Lambda(lambda img: img) + jitter_func = transforms.Lambda(lambda img: img) + mask_func = transforms.Lambda(lambda img: img) + + if opt.isTrain and not opt.no_flip: + flip_func = transforms.RandomHorizontalFlip() + else: + flip_func = transforms.Lambda(lambda img: img) + if not opt.isTrain and opt.no_resize: + rz_func = transforms.Lambda(lambda img: img) + else: + # rz_func = transforms.Lambda(lambda img: custom_resize(img, opt)) + rz_func = transforms.Resize((opt.cropSize, opt.cropSize)) + # rz_func = transforms.CenterCrop(opt.cropSize) + + dset = datasets.ImageFolder( + root, + transforms.Compose([ + rz_func, + # transforms.Lambda(lambda img: data_augment(img, opt)), + crop_func, + flip_func, + # rotation_func, + # jitter_func, + transforms.ToTensor(), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + mask_func + ])) + return dset + + +class FileNameDataset(datasets.ImageFolder): + def name(self): + return 'FileNameDataset' + + def __init__(self, opt, root): + self.opt = opt + super().__init__(root) + + def __getitem__(self, index): + # Loading sample + path, target = self.samples[index] + return path + + +def data_augment(img, opt): + img = np.array(img) + + if random() < opt.blur_prob: + sig = sample_continuous(opt.blur_sig) + gaussian_blur(img, sig) + + if random() < opt.jpg_prob: + method = sample_discrete(opt.jpg_method) + qual = sample_discrete(opt.jpg_qual) + img = jpeg_from_key(img, qual, method) + + return Image.fromarray(img) + + +def sample_continuous(s): + if len(s) == 1: + return s[0] + if len(s) == 2: + rg = s[1] - s[0] + return random() * rg + s[0] + raise ValueError("Length of iterable s should be 1 or 2.") + + +def sample_discrete(s): + if len(s) == 1: + return s[0] + return choice(s) + + +def gaussian_blur(img, sigma): + gaussian_filter(img[:,:,0], output=img[:,:,0], sigma=sigma) + gaussian_filter(img[:,:,1], output=img[:,:,1], sigma=sigma) + gaussian_filter(img[:,:,2], output=img[:,:,2], sigma=sigma) + + +def cv2_jpg(img, compress_val): + img_cv2 = img[:,:,::-1] + encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), compress_val] + result, encimg = cv2.imencode('.jpg', img_cv2, encode_param) + decimg = cv2.imdecode(encimg, 1) + return decimg[:,:,::-1] + + +def pil_jpg(img, compress_val): + out = BytesIO() + img = Image.fromarray(img) + img.save(out, format='jpeg', quality=compress_val) + img = Image.open(out) + # load from memory before ByteIO closes + img = np.array(img) + out.close() + return img + + +jpeg_dict = {'cv2': cv2_jpg, 'pil': pil_jpg} +def jpeg_from_key(img, compress_val, key): + method = jpeg_dict[key] + return method(img, compress_val) + + +# rz_dict = {'bilinear': Image.BILINEAR, + # 'bicubic': Image.BICUBIC, + # 'lanczos': Image.LANCZOS, + # 'nearest': Image.NEAREST} +rz_dict = {'bilinear': InterpolationMode.BILINEAR, + 'bicubic': InterpolationMode.BICUBIC, + 'lanczos': InterpolationMode.LANCZOS, + 'nearest': InterpolationMode.NEAREST} +def custom_resize(img, opt): + interp = sample_discrete(opt.rz_interp) + return TF.resize(img, (opt.loadSize,opt.loadSize), interpolation=rz_dict[interp]) diff --git a/detector_codes/CLIPDetection-main/log_test.log b/detector_codes/CLIPDetection-main/log_test.log new file mode 100644 index 0000000000000000000000000000000000000000..4996f88c987f3955d277204a2f7e52a24439085d --- /dev/null +++ b/detector_codes/CLIPDetection-main/log_test.log @@ -0,0 +1,446 @@ +2025-04-24 08:06:05,094 Model_path /data/ziqiang/yjz/code/CLIPDetection-main/checkpoints/4class-car-cat-chair-horse2025_03_28_15_06_37/model_epoch_last.pth +2025-04-24 08:06:44,351 AIGIBench +2025-04-24 08:06:44,351 2025-04-24 08:06:44 +2025-04-24 08:08:31,807 (0 R3GAN ) acc: 93.0; ap: 98.6; r_acc: 90.4; f_acc: 95.6 +2025-04-24 08:10:17,898 (1 IP-Adapter ) acc: 62.3; ap: 73.9; r_acc: 91.2; f_acc: 33.4 +2025-04-24 08:12:47,594 (2 SocialRF ) acc: 49.2; ap: 46.2; r_acc: 91.2; f_acc: 7.2 +2025-04-24 08:15:05,822 (3 CommunityAI ) acc: 49.9; ap: 50.0; r_acc: 97.3; f_acc: 2.4 +2025-04-24 08:16:52,297 (4 StyleGAN-XL ) acc: 87.1; ap: 95.0; r_acc: 90.5; f_acc: 83.7 +2025-04-24 08:18:13,635 (5 Midjourney ) acc: 44.8; ap: 35.6; r_acc: 86.8; f_acc: 2.7 +2025-04-24 08:20:00,408 (6 FLUX1-dev ) acc: 46.3; ap: 39.6; r_acc: 90.1; f_acc: 2.4 +2025-04-24 08:21:49,412 (7 E4S ) acc: 72.4; ap: 82.5; r_acc: 89.6; f_acc: 55.1 +2025-04-24 08:23:36,668 (8 Imagen3 ) acc: 48.1; ap: 44.1; r_acc: 90.7; f_acc: 5.5 +2025-04-24 08:25:24,201 (9 BLIP ) acc: 57.8; ap: 68.9; r_acc: 92.5; f_acc: 23.1 +2025-04-24 08:27:11,512 (10 SDXL ) acc: 50.7; ap: 53.6; r_acc: 91.9; f_acc: 9.6 +2025-04-24 08:28:46,301 (11 DALLE-3 ) acc: 46.8; ap: 38.4; r_acc: 91.2; f_acc: 2.5 +2025-04-24 08:30:33,169 (12 GLIDE ) acc: 69.4; ap: 81.7; r_acc: 91.8; f_acc: 47.0 +2025-04-24 08:32:19,067 (13 InSwap ) acc: 48.9; ap: 48.2; r_acc: 90.7; f_acc: 6.2 +2025-04-24 08:34:04,522 (14 FaceSwap ) acc: 69.3; ap: 79.4; r_acc: 91.0; f_acc: 47.1 +2025-04-24 08:35:50,811 (15 StyleSwim ) acc: 94.5; ap: 99.3; r_acc: 90.6; f_acc: 98.3 +2025-04-24 08:37:22,977 (16 ProGAN ) acc: 99.5; ap: 100.0; r_acc: 99.9; f_acc: 99.1 +2025-04-24 08:39:16,177 (17 BlendFace ) acc: 47.2; ap: 42.7; r_acc: 89.2; f_acc: 5.1 +2025-04-24 08:41:02,377 (18 PhotoMaker ) acc: 47.0; ap: 41.4; r_acc: 90.4; f_acc: 3.6 +2025-04-24 08:42:54,489 (19 SD3 ) acc: 49.0; ap: 48.6; r_acc: 91.9; f_acc: 6.0 +2025-04-24 08:44:43,529 (20 Infinite-ID ) acc: 72.4; ap: 84.2; r_acc: 91.1; f_acc: 53.8 +2025-04-24 08:45:16,584 (21 WFIR ) acc: 91.0; ap: 97.8; r_acc: 88.0; f_acc: 94.0 +2025-04-24 08:47:04,394 (22 SimSwap ) acc: 50.1; ap: 51.5; r_acc: 90.8; f_acc: 9.4 +2025-04-24 08:48:50,905 (23 InstantID ) acc: 67.4; ap: 79.5; r_acc: 90.6; f_acc: 44.2 +2025-04-24 08:50:38,068 (24 StyleGAN3 ) acc: 68.4; ap: 79.0; r_acc: 88.6; f_acc: 48.1 +2025-04-24 08:50:38,068 (25 Mean ) acc: 63.3; ap: 66.4; r_acc: 91.1; f_acc: 35.4 +2025-04-24 08:50:38,068 ************************* +2025-05-12 05:24:48,976 Model_path /data/ziqiang/yjz/code/CLIPDetection-main/checkpoints/4class-car-cat-chair-horse2025_03_28_15_06_37/model_epoch_last.pth +2025-05-12 05:25:12,231 AIGIBench # crop +2025-05-12 05:25:12,231 2025-05-12 05:25:12 +2025-05-12 05:26:56,175 (0 R3GAN ) acc: 80.0; ap: 90.2; r_acc: 82.2; f_acc: 77.8 +2025-05-12 05:28:59,912 (1 IP-Adapter ) acc: 52.5; ap: 57.1; r_acc: 81.8; f_acc: 23.2 +2025-05-12 05:33:06,547 (2 SocialRF ) acc: 52.2; ap: 54.1; r_acc: 76.5; f_acc: 28.0 +2025-05-12 05:35:27,938 (3 CommunityAI ) acc: 50.9; ap: 55.9; r_acc: 97.6; f_acc: 4.2 +2025-05-12 05:37:19,682 (4 StyleGAN-XL ) acc: 89.1; ap: 94.8; r_acc: 82.0; f_acc: 96.1 +2025-05-12 05:39:00,152 (5 Midjourney ) acc: 37.7; ap: 37.0; r_acc: 63.3; f_acc: 12.1 +2025-05-12 05:40:47,464 (6 FLUX1-dev ) acc: 42.9; ap: 35.7; r_acc: 82.2; f_acc: 3.6 +2025-05-12 05:42:30,092 (7 E4S ) acc: 63.9; ap: 71.2; r_acc: 76.8; f_acc: 51.1 +2025-05-12 05:44:14,212 (8 Imagen3 ) acc: 46.3; ap: 44.1; r_acc: 82.4; f_acc: 10.3 +2025-05-12 05:46:18,151 (9 BLIP ) acc: 70.1; ap: 82.5; r_acc: 91.7; f_acc: 48.6 +2025-05-12 05:49:01,662 (10 SDXL ) acc: 49.1; ap: 50.2; r_acc: 85.2; f_acc: 12.9 +2025-05-12 05:50:54,138 (11 DALLE-3 ) acc: 44.1; ap: 38.0; r_acc: 82.4; f_acc: 5.8 +2025-05-12 05:52:41,398 (12 GLIDE ) acc: 62.8; ap: 72.2; r_acc: 86.1; f_acc: 39.5 +2025-05-12 05:54:41,868 (13 InSwap ) acc: 47.3; ap: 47.1; r_acc: 86.1; f_acc: 7.5 +2025-05-12 05:56:27,721 (14 FaceSwap ) acc: 68.0; ap: 76.6; r_acc: 85.4; f_acc: 50.2 +2025-05-12 05:58:20,590 (15 StyleSwim ) acc: 85.3; ap: 93.0; r_acc: 82.4; f_acc: 88.1 +2025-05-12 05:59:55,594 (16 ProGAN ) acc: 98.8; ap: 100.0; r_acc: 100.0; f_acc: 97.7 +2025-05-12 06:02:17,874 (17 BlendFace ) acc: 39.9; ap: 38.2; r_acc: 74.2; f_acc: 5.7 +2025-05-12 06:05:23,080 (18 PhotoMaker ) acc: 43.5; ap: 38.2; r_acc: 82.1; f_acc: 4.9 +2025-05-12 06:08:10,006 (19 SD3 ) acc: 52.5; ap: 55.6; r_acc: 85.2; f_acc: 19.8 +2025-05-12 06:10:33,500 (20 Infinite-ID ) acc: 53.9; ap: 58.1; r_acc: 84.2; f_acc: 23.7 +2025-05-12 06:11:04,934 (21 WFIR ) acc: 89.9; ap: 97.6; r_acc: 82.5; f_acc: 97.3 +2025-05-12 06:12:49,576 (22 SimSwap ) acc: 48.8; ap: 51.0; r_acc: 85.1; f_acc: 12.5 +2025-05-12 06:15:02,056 (23 InstantID ) acc: 44.8; ap: 40.7; r_acc: 82.8; f_acc: 6.9 +2025-05-12 06:16:48,020 (24 StyleGAN3 ) acc: 64.9; ap: 75.7; r_acc: 81.8; f_acc: 48.0 +2025-05-12 06:16:48,021 (25 Mean ) acc: 59.2; ap: 62.2; r_acc: 83.3; f_acc: 35.0 +2025-05-12 06:16:48,021 ************************* +2025-05-14 14:42:29,093 Model_path /data/ziqiang/yjz/code/CLIPDetection-main/checkpoints/4class-car-cat-chair-horse2025_03_28_15_06_37/model_epoch_last.pth +2025-05-14 14:45:23,171 jpeg +2025-05-14 14:45:23,171 2025-05-14 14:45:23 +2025-05-14 14:47:06,836 (0 R3GAN ) acc: 68.9; ap: 77.9; r_acc: 83.2; f_acc: 54.6 +2025-05-14 14:48:50,920 (1 IP-Adapter ) acc: 49.0; ap: 52.0; r_acc: 82.6; f_acc: 15.4 +2025-05-14 14:51:07,851 (2 SocialRF ) acc: 50.1; ap: 48.1; r_acc: 95.1; f_acc: 5.1 +2025-05-14 14:53:43,191 (3 CommunityAI ) acc: 49.7; ap: 53.6; r_acc: 96.8; f_acc: 2.6 +2025-05-14 14:55:38,656 (4 StyleGAN-XL ) acc: 70.6; ap: 80.3; r_acc: 82.2; f_acc: 58.9 +2025-05-14 14:57:02,997 (5 Midjourney ) acc: 47.5; ap: 35.6; r_acc: 93.7; f_acc: 1.4 +2025-05-14 14:59:09,853 (6 FLUX1-dev ) acc: 41.6; ap: 34.6; r_acc: 82.7; f_acc: 0.4 +2025-05-14 15:01:09,197 (7 E4S ) acc: 80.6; ap: 89.4; r_acc: 88.9; f_acc: 72.4 +2025-05-14 15:02:53,439 (8 Imagen3 ) acc: 42.9; ap: 37.9; r_acc: 82.7; f_acc: 3.0 +2025-05-14 15:04:37,658 (9 BLIP ) acc: 39.2; ap: 39.8; r_acc: 73.7; f_acc: 4.7 +2025-05-14 15:06:21,689 (10 SDXL ) acc: 44.2; ap: 40.3; r_acc: 86.2; f_acc: 2.4 +2025-05-14 15:07:54,601 (11 DALLE-3 ) acc: 42.7; ap: 36.8; r_acc: 83.0; f_acc: 2.4 +2025-05-14 15:09:45,899 (12 GLIDE ) acc: 54.7; ap: 60.5; r_acc: 80.6; f_acc: 28.8 +2025-05-14 15:11:28,949 (13 InSwap ) acc: 55.8; ap: 60.1; r_acc: 80.5; f_acc: 30.5 +2025-05-14 15:13:12,090 (14 FaceSwap ) acc: 70.4; ap: 79.1; r_acc: 79.9; f_acc: 60.6 +2025-05-14 15:14:56,503 (15 StyleSwim ) acc: 85.8; ap: 94.5; r_acc: 82.4; f_acc: 89.1 +2025-05-14 15:16:27,913 (16 ProGAN ) acc: 89.2; ap: 96.9; r_acc: 97.4; f_acc: 81.1 +2025-05-14 15:18:12,546 (17 BlendFace ) acc: 60.3; ap: 71.1; r_acc: 89.8; f_acc: 31.0 +2025-05-14 15:19:56,973 (18 PhotoMaker ) acc: 43.4; ap: 40.7; r_acc: 82.5; f_acc: 4.4 +2025-05-14 15:21:41,268 (19 SD3 ) acc: 44.8; ap: 42.0; r_acc: 86.2; f_acc: 3.6 +2025-05-14 15:23:25,587 (20 Infinite-ID ) acc: 66.8; ap: 77.2; r_acc: 84.2; f_acc: 49.5 +2025-05-14 15:23:51,852 (21 WFIR ) acc: 84.2; ap: 94.8; r_acc: 95.1; f_acc: 73.2 +2025-05-14 15:25:36,370 (22 SimSwap ) acc: 57.9; ap: 64.2; r_acc: 80.0; f_acc: 35.7 +2025-05-14 15:27:21,085 (23 InstantID ) acc: 48.9; ap: 51.3; r_acc: 82.1; f_acc: 15.7 +2025-05-14 15:29:04,687 (24 StyleGAN3 ) acc: 60.1; ap: 68.5; r_acc: 84.4; f_acc: 35.9 +2025-05-14 15:29:04,687 (25 Mean ) acc: 58.0; ap: 61.1; r_acc: 85.4; f_acc: 30.5 +2025-05-14 15:29:04,687 ************************* +2025-05-14 15:29:04,687 noise +2025-05-14 15:29:04,687 2025-05-14 15:29:04 +2025-05-14 15:31:15,461 (0 R3GAN ) acc: 72.5; ap: 81.9; r_acc: 81.9; f_acc: 63.2 +2025-05-14 15:36:47,816 (1 IP-Adapter ) acc: 52.4; ap: 56.2; r_acc: 81.6; f_acc: 23.3 +2025-05-14 15:45:08,800 (2 SocialRF ) acc: 48.4; ap: 43.0; r_acc: 91.6; f_acc: 5.3 +2025-05-14 15:49:26,424 (3 CommunityAI ) acc: 49.5; ap: 46.2; r_acc: 97.5; f_acc: 1.5 +2025-05-14 15:52:10,993 (4 StyleGAN-XL ) acc: 74.9; ap: 83.4; r_acc: 82.1; f_acc: 67.8 +2025-05-14 15:55:25,836 (5 Midjourney ) acc: 46.3; ap: 34.3; r_acc: 91.4; f_acc: 1.2 +2025-05-14 15:59:17,801 (6 FLUX1-dev ) acc: 41.3; ap: 35.5; r_acc: 81.9; f_acc: 0.7 +2025-05-14 16:02:09,939 (7 E4S ) acc: 71.2; ap: 79.6; r_acc: 87.6; f_acc: 54.9 +2025-05-14 16:06:23,406 (8 Imagen3 ) acc: 42.1; ap: 37.2; r_acc: 82.4; f_acc: 1.7 +2025-05-14 16:08:09,960 (9 BLIP ) acc: 41.5; ap: 43.4; r_acc: 73.4; f_acc: 9.7 +2025-05-14 16:12:07,932 (10 SDXL ) acc: 45.5; ap: 44.4; r_acc: 86.2; f_acc: 4.8 +2025-05-14 16:16:04,139 (11 DALLE-3 ) acc: 41.9; ap: 35.7; r_acc: 82.7; f_acc: 1.2 +2025-05-14 16:18:03,698 (12 GLIDE ) acc: 55.0; ap: 59.1; r_acc: 80.6; f_acc: 29.4 +2025-05-14 16:19:47,043 (13 InSwap ) acc: 45.9; ap: 46.3; r_acc: 79.9; f_acc: 11.1 +2025-05-14 16:21:30,440 (14 FaceSwap ) acc: 65.9; ap: 69.0; r_acc: 79.0; f_acc: 52.5 +2025-05-14 16:23:54,898 (15 StyleSwim ) acc: 88.3; ap: 96.7; r_acc: 81.2; f_acc: 95.4 +2025-05-14 16:25:34,337 (16 ProGAN ) acc: 95.0; ap: 99.5; r_acc: 99.4; f_acc: 90.6 +2025-05-14 16:27:41,327 (17 BlendFace ) acc: 48.7; ap: 48.6; r_acc: 88.7; f_acc: 8.6 +2025-05-14 16:31:15,128 (18 PhotoMaker ) acc: 41.7; ap: 37.4; r_acc: 81.5; f_acc: 1.9 +2025-05-14 16:35:34,053 (19 SD3 ) acc: 44.3; ap: 41.5; r_acc: 85.8; f_acc: 2.8 +2025-05-14 16:40:02,410 (20 Infinite-ID ) acc: 63.9; ap: 70.2; r_acc: 83.0; f_acc: 44.8 +2025-05-14 16:40:33,282 (21 WFIR ) acc: 87.3; ap: 96.6; r_acc: 95.3; f_acc: 79.3 +2025-05-14 16:42:34,042 (22 SimSwap ) acc: 46.6; ap: 48.1; r_acc: 79.8; f_acc: 13.5 +2025-05-14 16:47:24,789 (23 InstantID ) acc: 57.7; ap: 62.8; r_acc: 82.0; f_acc: 33.4 +2025-05-14 16:51:08,482 (24 StyleGAN3 ) acc: 60.1; ap: 67.9; r_acc: 93.2; f_acc: 27.0 +2025-05-14 16:51:08,482 (25 Mean ) acc: 57.1; ap: 58.6; r_acc: 85.2; f_acc: 29.0 +2025-05-14 16:51:08,482 ************************* +2025-05-14 16:51:08,482 sample +2025-05-14 16:51:08,482 2025-05-14 16:51:08 +2025-05-14 16:52:52,412 (0 R3GAN ) acc: 84.9; ap: 94.7; r_acc: 73.1; f_acc: 96.7 +2025-05-14 16:54:36,727 (1 IP-Adapter ) acc: 52.7; ap: 54.3; r_acc: 72.6; f_acc: 32.8 +2025-05-14 16:56:07,475 (2 SocialRF ) acc: 49.4; ap: 46.6; r_acc: 91.5; f_acc: 7.3 +2025-05-14 16:58:24,583 (3 CommunityAI ) acc: 49.4; ap: 47.7; r_acc: 96.2; f_acc: 2.5 +2025-05-14 17:00:09,089 (4 StyleGAN-XL ) acc: 77.5; ap: 83.0; r_acc: 72.6; f_acc: 82.4 +2025-05-14 17:01:21,604 (5 Midjourney ) acc: 44.4; ap: 35.0; r_acc: 86.3; f_acc: 2.4 +2025-05-14 17:03:06,258 (6 FLUX1-dev ) acc: 37.6; ap: 36.6; r_acc: 72.9; f_acc: 2.2 +2025-05-14 17:04:49,780 (7 E4S ) acc: 69.4; ap: 74.5; r_acc: 81.5; f_acc: 57.2 +2025-05-14 17:06:34,300 (8 Imagen3 ) acc: 38.9; ap: 38.3; r_acc: 72.7; f_acc: 5.0 +2025-05-14 17:08:18,760 (9 BLIP ) acc: 43.2; ap: 45.5; r_acc: 61.0; f_acc: 25.5 +2025-05-14 17:10:03,074 (10 SDXL ) acc: 43.8; ap: 45.6; r_acc: 78.9; f_acc: 8.6 +2025-05-14 17:11:36,094 (11 DALLE-3 ) acc: 38.0; ap: 35.7; r_acc: 73.8; f_acc: 2.1 +2025-05-14 17:13:20,473 (12 GLIDE ) acc: 61.1; ap: 64.1; r_acc: 71.5; f_acc: 50.7 +2025-05-14 17:15:03,674 (13 InSwap ) acc: 41.4; ap: 43.2; r_acc: 70.4; f_acc: 11.7 +2025-05-14 17:16:46,737 (14 FaceSwap ) acc: 58.4; ap: 61.0; r_acc: 69.8; f_acc: 46.7 +2025-05-14 17:18:31,218 (15 StyleSwim ) acc: 85.8; ap: 97.0; r_acc: 73.3; f_acc: 98.2 +2025-05-14 17:20:02,634 (16 ProGAN ) acc: 97.5; ap: 99.8; r_acc: 99.4; f_acc: 95.6 +2025-05-14 17:21:47,898 (17 BlendFace ) acc: 45.4; ap: 44.2; r_acc: 82.3; f_acc: 8.4 +2025-05-14 17:23:32,163 (18 PhotoMaker ) acc: 38.0; ap: 37.2; r_acc: 73.0; f_acc: 2.9 +2025-05-14 17:25:16,533 (19 SD3 ) acc: 42.2; ap: 43.0; r_acc: 78.9; f_acc: 5.5 +2025-05-14 17:27:00,905 (20 Infinite-ID ) acc: 63.1; ap: 66.4; r_acc: 76.3; f_acc: 49.9 +2025-05-14 17:27:27,254 (21 WFIR ) acc: 89.4; ap: 96.9; r_acc: 94.1; f_acc: 84.7 +2025-05-14 17:29:11,406 (22 SimSwap ) acc: 41.9; ap: 44.0; r_acc: 70.2; f_acc: 13.6 +2025-05-14 17:30:56,070 (23 InstantID ) acc: 57.4; ap: 59.2; r_acc: 73.7; f_acc: 41.1 +2025-05-14 17:32:40,355 (24 StyleGAN3 ) acc: 63.5; ap: 71.5; r_acc: 77.8; f_acc: 49.2 +2025-05-14 17:32:40,356 (25 Mean ) acc: 56.6; ap: 58.6; r_acc: 77.8; f_acc: 35.3 +2025-05-14 17:32:40,356 ************************* +2025-04-24 09:05:04,046 Model_path /data/ziqiang/yjz/code/CLIPDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_03_01_49_30/model_epoch_last.pth +2025-04-24 09:05:42,549 AIGIBench +2025-04-24 09:05:42,549 2025-04-24 09:05:42 +2025-04-24 09:07:30,361 (0 R3GAN ) acc: 83.5; ap: 91.2; r_acc: 72.9; f_acc: 94.1 +2025-04-24 09:09:16,767 (1 IP-Adapter ) acc: 82.6; ap: 87.3; r_acc: 73.3; f_acc: 92.0 +2025-04-24 09:11:55,519 (2 SocialRF ) acc: 54.4; ap: 55.2; r_acc: 53.3; f_acc: 55.5 +2025-04-24 09:14:14,092 (3 CommunityAI ) acc: 67.0; ap: 73.2; r_acc: 82.8; f_acc: 51.2 +2025-04-24 09:16:00,629 (4 StyleGAN-XL ) acc: 84.6; ap: 93.3; r_acc: 72.5; f_acc: 96.7 +2025-04-24 09:17:22,408 (5 Midjourney ) acc: 65.3; ap: 61.5; r_acc: 50.0; f_acc: 80.6 +2025-04-24 09:19:09,872 (6 FLUX1-dev ) acc: 80.0; ap: 79.5; r_acc: 73.3; f_acc: 86.6 +2025-04-24 09:20:54,697 (7 E4S ) acc: 57.0; ap: 57.1; r_acc: 67.0; f_acc: 46.9 +2025-04-24 09:22:41,105 (8 Imagen3 ) acc: 78.9; ap: 79.3; r_acc: 73.6; f_acc: 84.2 +2025-04-24 09:24:28,464 (9 BLIP ) acc: 88.6; ap: 95.8; r_acc: 85.1; f_acc: 92.1 +2025-04-24 09:26:15,714 (10 SDXL ) acc: 84.7; ap: 88.0; r_acc: 78.4; f_acc: 91.0 +2025-04-24 09:27:50,401 (11 DALLE-3 ) acc: 75.1; ap: 76.4; r_acc: 74.9; f_acc: 75.2 +2025-04-24 09:29:37,023 (12 GLIDE ) acc: 76.7; ap: 80.3; r_acc: 78.2; f_acc: 75.2 +2025-04-24 09:31:22,669 (13 InSwap ) acc: 43.7; ap: 40.2; r_acc: 78.4; f_acc: 8.2 +2025-04-24 09:33:08,215 (14 FaceSwap ) acc: 53.1; ap: 52.4; r_acc: 78.4; f_acc: 27.3 +2025-04-24 09:34:54,946 (15 StyleSwim ) acc: 86.4; ap: 95.2; r_acc: 74.7; f_acc: 98.1 +2025-04-24 09:36:27,155 (16 ProGAN ) acc: 98.4; ap: 99.9; r_acc: 97.9; f_acc: 98.9 +2025-04-24 09:38:21,091 (17 BlendFace ) acc: 35.0; ap: 35.3; r_acc: 64.6; f_acc: 5.5 +2025-04-24 09:40:07,217 (18 PhotoMaker ) acc: 69.3; ap: 72.3; r_acc: 73.3; f_acc: 65.2 +2025-04-24 09:41:59,429 (19 SD3 ) acc: 84.5; ap: 87.2; r_acc: 78.4; f_acc: 90.6 +2025-04-24 09:43:48,265 (20 Infinite-ID ) acc: 84.5; ap: 89.6; r_acc: 75.2; f_acc: 93.8 +2025-04-24 09:44:21,317 (21 WFIR ) acc: 70.0; ap: 82.0; r_acc: 48.0; f_acc: 91.9 +2025-04-24 09:46:09,261 (22 SimSwap ) acc: 43.7; ap: 40.4; r_acc: 78.8; f_acc: 8.6 +2025-04-24 09:47:56,443 (23 InstantID ) acc: 85.4; ap: 93.5; r_acc: 74.0; f_acc: 96.9 +2025-04-24 09:49:43,515 (24 StyleGAN3 ) acc: 79.6; ap: 84.5; r_acc: 76.5; f_acc: 82.6 +2025-04-24 09:49:43,515 (25 Mean ) acc: 72.5; ap: 75.6; r_acc: 73.3; f_acc: 71.5 +2025-04-24 09:49:43,515 ************************* +2025-05-08 13:35:35,485 Model_path /data/ziqiang/yjz/code/CLIPDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_03_01_49_30/model_epoch_last.pth +2025-05-08 13:36:17,688 AIGIBench # crop +2025-05-08 13:36:17,688 2025-05-08 13:36:17 +2025-05-08 13:39:39,870 (0 R3GAN ) acc: 80.3; ap: 84.4; r_acc: 76.7; f_acc: 83.8 +2025-05-08 13:43:07,071 (1 IP-Adapter ) acc: 78.3; ap: 82.2; r_acc: 76.6; f_acc: 80.0 +2025-05-08 13:46:09,307 (2 SocialRF ) acc: 48.7; ap: 49.2; r_acc: 58.8; f_acc: 38.6 +2025-05-08 13:50:42,844 (3 CommunityAI ) acc: 59.4; ap: 65.6; r_acc: 84.9; f_acc: 33.8 +2025-05-08 13:54:09,714 (4 StyleGAN-XL ) acc: 87.6; ap: 93.1; r_acc: 76.7; f_acc: 98.5 +2025-05-08 13:56:37,171 (5 Midjourney ) acc: 57.0; ap: 55.5; r_acc: 47.2; f_acc: 66.7 +2025-05-08 14:00:04,316 (6 FLUX1-dev ) acc: 77.8; ap: 79.7; r_acc: 76.2; f_acc: 79.5 +2025-05-08 14:03:29,825 (7 E4S ) acc: 49.3; ap: 49.3; r_acc: 67.1; f_acc: 31.4 +2025-05-08 14:06:56,475 (8 Imagen3 ) acc: 71.8; ap: 72.8; r_acc: 75.9; f_acc: 67.6 +2025-05-08 14:10:24,702 (9 BLIP ) acc: 89.3; ap: 96.3; r_acc: 92.0; f_acc: 86.6 +2025-05-08 14:13:52,566 (10 SDXL ) acc: 71.7; ap: 73.1; r_acc: 79.8; f_acc: 63.7 +2025-05-08 14:16:56,649 (11 DALLE-3 ) acc: 44.5; ap: 43.4; r_acc: 76.6; f_acc: 12.3 +2025-05-08 14:20:16,879 (12 GLIDE ) acc: 78.2; ap: 82.1; r_acc: 81.9; f_acc: 74.5 +2025-05-08 14:23:41,885 (13 InSwap ) acc: 43.0; ap: 37.9; r_acc: 81.9; f_acc: 3.3 +2025-05-08 14:27:08,632 (14 FaceSwap ) acc: 50.2; ap: 50.4; r_acc: 82.4; f_acc: 17.4 +2025-05-08 14:30:42,881 (15 StyleSwim ) acc: 81.7; ap: 86.2; r_acc: 76.4; f_acc: 87.0 +2025-05-08 14:33:46,186 (16 ProGAN ) acc: 97.9; ap: 99.8; r_acc: 98.6; f_acc: 97.2 +2025-05-08 14:37:19,908 (17 BlendFace ) acc: 33.3; ap: 33.5; r_acc: 64.3; f_acc: 2.4 +2025-05-08 14:40:46,564 (18 PhotoMaker ) acc: 53.6; ap: 55.1; r_acc: 76.8; f_acc: 30.4 +2025-05-08 14:44:13,963 (19 SD3 ) acc: 75.9; ap: 77.8; r_acc: 79.8; f_acc: 72.1 +2025-05-08 14:47:41,248 (20 Infinite-ID ) acc: 64.9; ap: 67.3; r_acc: 78.0; f_acc: 51.8 +2025-05-08 14:48:34,974 (21 WFIR ) acc: 82.4; ap: 88.9; r_acc: 74.5; f_acc: 90.3 +2025-05-08 14:52:02,233 (22 SimSwap ) acc: 43.5; ap: 38.6; r_acc: 82.2; f_acc: 4.8 +2025-05-08 14:55:29,198 (23 InstantID ) acc: 60.0; ap: 62.2; r_acc: 77.0; f_acc: 43.1 +2025-05-08 14:58:55,388 (24 StyleGAN3 ) acc: 82.1; ap: 84.9; r_acc: 79.4; f_acc: 84.9 +2025-05-08 14:58:55,388 (25 Mean ) acc: 66.5; ap: 68.4; r_acc: 76.9; f_acc: 56.1 +2025-05-08 14:58:55,388 ************************* +2025-04-30 01:48:21,017 Model_path /data/ziqiang/yjz/code/CLIPDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_03_01_49_30/model_epoch_last.pth +2025-04-30 01:49:41,169 jpeg +2025-04-30 01:49:41,170 2025-04-30 01:49:41 +2025-04-30 01:52:34,165 (0 R3GAN ) acc: 53.1; ap: 60.4; r_acc: 92.0; f_acc: 14.2 +2025-04-30 01:55:44,496 (1 IP-Adapter ) acc: 69.7; ap: 83.7; r_acc: 91.8; f_acc: 47.5 +2025-04-30 01:58:10,966 (2 SocialRF ) acc: 50.0; ap: 50.8; r_acc: 69.6; f_acc: 30.3 +2025-04-30 02:02:08,688 (3 CommunityAI ) acc: 62.1; ap: 77.6; r_acc: 95.1; f_acc: 29.1 +2025-04-30 02:05:19,838 (4 StyleGAN-XL ) acc: 78.8; ap: 89.9; r_acc: 91.8; f_acc: 65.8 +2025-04-30 02:07:18,515 (5 Midjourney ) acc: 55.2; ap: 58.3; r_acc: 81.7; f_acc: 28.6 +2025-04-30 02:10:24,972 (6 FLUX1-dev ) acc: 64.2; ap: 77.3; r_acc: 91.9; f_acc: 36.5 +2025-04-30 02:13:34,095 (7 E4S ) acc: 58.9; ap: 67.4; r_acc: 89.0; f_acc: 28.9 +2025-04-30 02:16:39,944 (8 Imagen3 ) acc: 57.3; ap: 69.9; r_acc: 91.4; f_acc: 23.1 +2025-04-30 02:19:52,201 (9 BLIP ) acc: 61.7; ap: 81.2; r_acc: 97.1; f_acc: 26.2 +2025-04-30 02:23:05,665 (10 SDXL ) acc: 66.2; ap: 82.5; r_acc: 93.6; f_acc: 38.9 +2025-04-30 02:25:40,090 (11 DALLE-3 ) acc: 62.3; ap: 76.1; r_acc: 92.4; f_acc: 32.1 +2025-04-30 02:28:22,417 (12 GLIDE ) acc: 48.4; ap: 46.5; r_acc: 94.0; f_acc: 2.7 +2025-04-30 02:31:01,206 (13 InSwap ) acc: 50.4; ap: 50.0; r_acc: 94.4; f_acc: 5.4 +2025-04-30 02:34:00,929 (14 FaceSwap ) acc: 53.2; ap: 58.3; r_acc: 93.4; f_acc: 12.0 +2025-04-30 02:36:51,281 (15 StyleSwim ) acc: 87.1; ap: 94.9; r_acc: 92.1; f_acc: 82.1 +2025-04-30 02:39:26,434 (16 ProGAN ) acc: 65.2; ap: 90.5; r_acc: 99.6; f_acc: 30.8 +2025-04-30 02:41:30,540 (17 BlendFace ) acc: 45.5; ap: 40.7; r_acc: 88.0; f_acc: 3.2 +2025-04-30 02:44:46,290 (18 PhotoMaker ) acc: 58.2; ap: 70.7; r_acc: 92.0; f_acc: 24.4 +2025-04-30 02:46:44,585 (19 SD3 ) acc: 61.6; ap: 78.2; r_acc: 93.6; f_acc: 29.7 +2025-04-30 02:48:30,375 (20 Infinite-ID ) acc: 75.0; ap: 88.0; r_acc: 92.1; f_acc: 58.0 +2025-04-30 02:49:04,046 (21 WFIR ) acc: 70.4; ap: 79.3; r_acc: 80.6; f_acc: 60.2 +2025-04-30 02:50:49,235 (22 SimSwap ) acc: 49.8; ap: 48.7; r_acc: 94.3; f_acc: 5.4 +2025-04-30 02:52:42,827 (23 InstantID ) acc: 84.5; ap: 93.8; r_acc: 91.7; f_acc: 77.3 +2025-04-30 02:54:27,483 (24 StyleGAN3 ) acc: 62.7; ap: 75.2; r_acc: 93.0; f_acc: 32.5 +2025-04-30 02:54:27,484 (25 Mean ) acc: 62.1; ap: 71.6; r_acc: 91.1; f_acc: 33.0 +2025-04-30 02:54:27,484 ************************* +2025-04-30 02:54:27,484 noise +2025-04-30 02:54:27,484 2025-04-30 02:54:27 +2025-04-30 02:56:13,353 (0 R3GAN ) acc: 66.5; ap: 70.8; r_acc: 77.1; f_acc: 56.0 +2025-04-30 02:58:01,027 (1 IP-Adapter ) acc: 81.8; ap: 86.7; r_acc: 77.3; f_acc: 86.3 +2025-04-30 03:12:58,470 (2 SocialRF ) acc: 50.4; ap: 50.8; r_acc: 48.2; f_acc: 52.6 +2025-04-30 03:22:42,675 (3 CommunityAI ) acc: 69.5; ap: 78.6; r_acc: 87.3; f_acc: 51.8 +2025-04-30 03:29:08,456 (4 StyleGAN-XL ) acc: 85.1; ap: 91.7; r_acc: 77.8; f_acc: 92.4 +2025-04-30 03:31:16,030 (5 Midjourney ) acc: 64.2; ap: 62.0; r_acc: 59.6; f_acc: 68.8 +2025-04-30 03:41:05,611 (6 FLUX1-dev ) acc: 77.2; ap: 79.4; r_acc: 78.0; f_acc: 76.5 +2025-04-30 03:46:37,396 (7 E4S ) acc: 54.3; ap: 54.5; r_acc: 73.5; f_acc: 35.1 +2025-04-30 03:54:41,724 (8 Imagen3 ) acc: 74.4; ap: 76.5; r_acc: 77.2; f_acc: 71.5 +2025-04-30 03:58:05,281 (9 BLIP ) acc: 77.9; ap: 88.1; r_acc: 86.3; f_acc: 69.6 +2025-04-30 04:00:52,041 (10 SDXL ) acc: 82.1; ap: 86.0; r_acc: 83.4; f_acc: 80.8 +2025-04-30 04:03:51,670 (11 DALLE-3 ) acc: 73.9; ap: 76.9; r_acc: 79.4; f_acc: 68.4 +2025-04-30 04:07:09,211 (12 GLIDE ) acc: 48.5; ap: 50.5; r_acc: 81.4; f_acc: 15.6 +2025-04-30 04:10:04,818 (13 InSwap ) acc: 43.1; ap: 39.3; r_acc: 81.7; f_acc: 3.7 +2025-04-30 04:13:26,511 (14 FaceSwap ) acc: 50.9; ap: 50.3; r_acc: 81.0; f_acc: 20.2 +2025-04-30 04:16:28,613 (15 StyleSwim ) acc: 86.9; ap: 94.7; r_acc: 78.4; f_acc: 95.4 +2025-04-30 04:18:33,980 (16 ProGAN ) acc: 84.3; ap: 95.9; r_acc: 97.4; f_acc: 71.1 +2025-04-30 04:21:27,027 (17 BlendFace ) acc: 37.2; ap: 35.9; r_acc: 71.2; f_acc: 3.3 +2025-04-30 04:24:41,640 (18 PhotoMaker ) acc: 64.7; ap: 69.8; r_acc: 78.2; f_acc: 51.2 +2025-04-30 04:30:00,479 (19 SD3 ) acc: 80.9; ap: 84.7; r_acc: 83.2; f_acc: 78.6 +2025-04-30 04:34:54,604 (20 Infinite-ID ) acc: 84.8; ap: 89.4; r_acc: 80.2; f_acc: 89.4 +2025-04-30 04:35:37,192 (21 WFIR ) acc: 74.2; ap: 82.9; r_acc: 76.4; f_acc: 72.1 +2025-04-30 04:38:37,529 (22 SimSwap ) acc: 43.4; ap: 39.5; r_acc: 82.2; f_acc: 4.6 +2025-04-30 04:46:05,078 (23 InstantID ) acc: 86.4; ap: 93.6; r_acc: 78.6; f_acc: 94.1 +2025-04-30 04:50:14,414 (24 StyleGAN3 ) acc: 70.6; ap: 77.7; r_acc: 82.8; f_acc: 58.5 +2025-04-30 04:50:14,414 (25 Mean ) acc: 68.5; ap: 72.2; r_acc: 78.3; f_acc: 58.7 +2025-04-30 04:50:14,414 ************************* +2025-04-30 04:50:14,414 sample +2025-04-30 04:50:14,414 2025-04-30 04:50:14 +2025-04-30 04:53:32,035 (0 R3GAN ) acc: 78.6; ap: 82.9; r_acc: 75.7; f_acc: 81.5 +2025-04-30 04:55:56,867 (1 IP-Adapter ) acc: 83.8; ap: 88.3; r_acc: 76.1; f_acc: 91.5 +2025-04-30 04:59:27,143 (2 SocialRF ) acc: 54.4; ap: 54.9; r_acc: 53.7; f_acc: 55.0 +2025-04-30 05:03:49,590 (3 CommunityAI ) acc: 67.1; ap: 75.0; r_acc: 86.1; f_acc: 48.2 +2025-04-30 05:06:34,339 (4 StyleGAN-XL ) acc: 86.1; ap: 93.8; r_acc: 75.9; f_acc: 96.2 +2025-04-30 05:08:47,268 (5 Midjourney ) acc: 63.5; ap: 58.8; r_acc: 51.5; f_acc: 75.5 +2025-04-30 05:11:57,695 (6 FLUX1-dev ) acc: 80.6; ap: 80.5; r_acc: 75.6; f_acc: 85.6 +2025-04-30 05:14:53,327 (7 E4S ) acc: 54.5; ap: 53.5; r_acc: 69.6; f_acc: 39.4 +2025-04-30 05:18:13,175 (8 Imagen3 ) acc: 79.2; ap: 80.0; r_acc: 76.0; f_acc: 82.4 +2025-04-30 05:21:26,007 (9 BLIP ) acc: 88.1; ap: 95.7; r_acc: 89.2; f_acc: 87.0 +2025-04-30 05:24:39,523 (10 SDXL ) acc: 85.9; ap: 88.9; r_acc: 81.5; f_acc: 90.4 +2025-04-30 05:27:35,425 (11 DALLE-3 ) acc: 75.7; ap: 77.0; r_acc: 77.9; f_acc: 73.6 +2025-04-30 05:30:53,824 (12 GLIDE ) acc: 69.4; ap: 73.2; r_acc: 81.6; f_acc: 57.2 +2025-04-30 05:33:56,086 (13 InSwap ) acc: 45.3; ap: 42.6; r_acc: 81.7; f_acc: 8.1 +2025-04-30 05:37:12,919 (14 FaceSwap ) acc: 50.2; ap: 49.5; r_acc: 81.3; f_acc: 18.5 +2025-04-30 05:40:29,989 (15 StyleSwim ) acc: 87.7; ap: 95.9; r_acc: 77.3; f_acc: 98.1 +2025-04-30 05:43:17,343 (16 ProGAN ) acc: 86.6; ap: 98.5; r_acc: 99.1; f_acc: 74.0 +2025-04-30 05:46:29,138 (17 BlendFace ) acc: 35.4; ap: 35.4; r_acc: 67.1; f_acc: 3.6 +2025-04-30 05:49:19,806 (18 PhotoMaker ) acc: 70.5; ap: 73.6; r_acc: 77.2; f_acc: 63.7 +2025-04-30 05:52:17,698 (19 SD3 ) acc: 85.6; ap: 88.3; r_acc: 81.5; f_acc: 89.8 +2025-04-30 05:54:03,889 (20 Infinite-ID ) acc: 85.0; ap: 89.1; r_acc: 78.3; f_acc: 91.8 +2025-04-30 05:54:32,532 (21 WFIR ) acc: 73.5; ap: 81.6; r_acc: 71.8; f_acc: 75.1 +2025-04-30 05:56:18,305 (22 SimSwap ) acc: 43.7; ap: 39.8; r_acc: 81.7; f_acc: 5.7 +2025-04-30 05:58:04,100 (23 InstantID ) acc: 86.8; ap: 93.6; r_acc: 77.3; f_acc: 96.4 +2025-04-30 05:59:49,784 (24 StyleGAN3 ) acc: 78.6; ap: 83.7; r_acc: 79.7; f_acc: 77.5 +2025-04-30 05:59:49,785 (25 Mean ) acc: 71.8; ap: 75.0; r_acc: 77.0; f_acc: 66.6 +2025-04-30 05:59:49,785 ************************* +2025-05-13 01:40:17,753 Model_path /data/ziqiang/yjz/code/CLIPDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-r2025_05_06_16_14_39/model_epoch_last.pth +2025-05-13 01:40:33,157 AIGIBench +2025-05-13 01:40:33,157 2025-05-13 01:40:33 +2025-05-13 01:44:02,413 (0 R3GAN ) acc: 75.5; ap: 85.4; r_acc: 86.8; f_acc: 64.3 +2025-05-13 01:47:31,632 (1 IP-Adapter ) acc: 76.7; ap: 85.4; r_acc: 88.0; f_acc: 65.5 +2025-05-13 01:51:54,222 (2 SocialRF ) acc: 58.6; ap: 63.3; r_acc: 59.9; f_acc: 57.4 +2025-05-13 01:56:29,594 (3 CommunityAI ) acc: 61.7; ap: 65.8; r_acc: 79.7; f_acc: 43.8 +2025-05-13 01:59:58,429 (4 StyleGAN-XL ) acc: 72.2; ap: 82.4; r_acc: 87.3; f_acc: 57.2 +2025-05-13 02:02:28,596 (5 Midjourney ) acc: 77.2; ap: 82.7; r_acc: 78.4; f_acc: 76.0 +2025-05-13 02:05:58,067 (6 FLUX1-dev ) acc: 82.7; ap: 90.1; r_acc: 86.8; f_acc: 78.5 +2025-05-13 02:09:25,606 (7 E4S ) acc: 51.3; ap: 51.7; r_acc: 84.7; f_acc: 17.9 +2025-05-13 02:12:54,661 (8 Imagen3 ) acc: 82.0; ap: 88.8; r_acc: 87.3; f_acc: 76.8 +2025-05-13 02:16:24,978 (9 BLIP ) acc: 78.0; ap: 89.3; r_acc: 92.7; f_acc: 63.3 +2025-05-13 02:19:55,092 (10 SDXL ) acc: 85.7; ap: 93.0; r_acc: 88.4; f_acc: 83.1 +2025-05-13 02:23:01,408 (11 DALLE-3 ) acc: 79.2; ap: 87.5; r_acc: 87.9; f_acc: 70.5 +2025-05-13 02:26:31,445 (12 GLIDE ) acc: 64.0; ap: 74.2; r_acc: 89.1; f_acc: 38.9 +2025-05-13 02:29:59,601 (13 InSwap ) acc: 46.6; ap: 38.7; r_acc: 89.3; f_acc: 2.8 +2025-05-13 02:33:27,157 (14 FaceSwap ) acc: 50.1; ap: 49.0; r_acc: 89.5; f_acc: 9.9 +2025-05-13 02:36:56,331 (15 StyleSwim ) acc: 87.6; ap: 94.2; r_acc: 88.1; f_acc: 87.0 +2025-05-13 02:40:00,044 (16 ProGAN ) acc: 96.3; ap: 99.5; r_acc: 98.2; f_acc: 94.4 +2025-05-13 02:43:36,559 (17 BlendFace ) acc: 42.3; ap: 35.1; r_acc: 83.5; f_acc: 1.2 +2025-05-13 02:47:05,471 (18 PhotoMaker ) acc: 57.7; ap: 65.3; r_acc: 88.0; f_acc: 27.3 +2025-05-13 02:50:35,656 (19 SD3 ) acc: 82.7; ap: 90.7; r_acc: 88.4; f_acc: 77.0 +2025-05-13 02:54:05,500 (20 Infinite-ID ) acc: 77.7; ap: 87.0; r_acc: 87.7; f_acc: 67.7 +2025-05-13 02:55:01,592 (21 WFIR ) acc: 66.6; ap: 74.6; r_acc: 78.1; f_acc: 55.1 +2025-05-13 02:58:30,845 (22 SimSwap ) acc: 46.4; ap: 39.1; r_acc: 89.5; f_acc: 3.3 +2025-05-13 03:01:59,882 (23 InstantID ) acc: 85.1; ap: 92.1; r_acc: 86.3; f_acc: 83.8 +2025-05-13 03:05:29,825 (24 StyleGAN3 ) acc: 79.3; ap: 88.7; r_acc: 88.4; f_acc: 70.3 +2025-05-13 03:05:29,825 (25 Mean ) acc: 70.5; ap: 75.7; r_acc: 86.1; f_acc: 54.9 +2025-05-13 03:05:29,825 ************************* +2025-05-13 07:14:33,849 Model_path /data/ziqiang/yjz/code/CLIPDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-j2025_05_08_14_41_07/model_epoch_last.pth +2025-05-13 07:15:55,889 AIGIBench +2025-05-13 07:15:55,889 2025-05-13 07:15:55 +2025-05-13 07:19:24,838 (0 R3GAN ) acc: 84.6; ap: 92.8; r_acc: 78.5; f_acc: 90.6 +2025-05-13 07:22:53,807 (1 IP-Adapter ) acc: 79.0; ap: 83.1; r_acc: 79.0; f_acc: 79.0 +2025-05-13 07:25:58,572 (2 SocialRF ) acc: 56.3; ap: 56.4; r_acc: 65.1; f_acc: 47.4 +2025-05-13 07:30:33,694 (3 CommunityAI ) acc: 63.3; ap: 70.6; r_acc: 86.2; f_acc: 40.3 +2025-05-13 07:34:02,578 (4 StyleGAN-XL ) acc: 86.7; ap: 93.3; r_acc: 79.0; f_acc: 94.3 +2025-05-13 07:36:32,429 (5 Midjourney ) acc: 65.8; ap: 63.6; r_acc: 63.0; f_acc: 68.7 +2025-05-13 07:40:01,266 (6 FLUX1-dev ) acc: 74.1; ap: 76.3; r_acc: 78.5; f_acc: 69.7 +2025-05-13 07:43:28,566 (7 E4S ) acc: 60.6; ap: 64.6; r_acc: 75.0; f_acc: 46.2 +2025-05-13 07:46:58,242 (8 Imagen3 ) acc: 71.9; ap: 75.2; r_acc: 79.6; f_acc: 64.3 +2025-05-13 07:51:38,546 (9 BLIP ) acc: 82.9; ap: 91.3; r_acc: 87.0; f_acc: 78.9 +2025-05-13 07:59:31,095 (10 SDXL ) acc: 76.1; ap: 81.4; r_acc: 83.0; f_acc: 69.2 +2025-05-13 08:07:16,318 (11 DALLE-3 ) acc: 75.0; ap: 78.2; r_acc: 80.5; f_acc: 69.5 +2025-05-13 08:12:53,674 (12 GLIDE ) acc: 66.1; ap: 71.7; r_acc: 82.6; f_acc: 49.6 +2025-05-13 08:18:27,986 (13 InSwap ) acc: 45.8; ap: 43.0; r_acc: 82.3; f_acc: 8.4 +2025-05-13 08:23:48,647 (14 FaceSwap ) acc: 55.3; ap: 58.0; r_acc: 82.1; f_acc: 27.8 +2025-05-13 08:29:49,498 (15 StyleSwim ) acc: 88.5; ap: 96.8; r_acc: 79.6; f_acc: 97.4 +2025-05-13 08:33:40,619 (16 ProGAN ) acc: 98.1; ap: 99.9; r_acc: 97.5; f_acc: 98.7 +2025-05-13 08:38:40,982 (17 BlendFace ) acc: 39.8; ap: 37.7; r_acc: 72.9; f_acc: 6.7 +2025-05-13 08:44:42,255 (18 PhotoMaker ) acc: 65.5; ap: 70.8; r_acc: 79.7; f_acc: 51.2 +2025-05-13 08:52:36,487 (19 SD3 ) acc: 80.8; ap: 85.4; r_acc: 83.0; f_acc: 78.6 +2025-05-13 08:56:07,442 (20 Infinite-ID ) acc: 82.6; ap: 88.9; r_acc: 80.1; f_acc: 85.0 +2025-05-13 08:58:39,033 (21 WFIR ) acc: 75.6; ap: 86.3; r_acc: 60.7; f_acc: 90.5 +2025-05-13 09:04:11,763 (22 SimSwap ) acc: 46.8; ap: 44.9; r_acc: 82.8; f_acc: 10.8 +2025-05-13 09:17:19,009 (23 InstantID ) acc: 86.5; ap: 93.7; r_acc: 79.1; f_acc: 93.8 +2025-05-13 09:23:44,837 (24 StyleGAN3 ) acc: 78.4; ap: 86.6; r_acc: 80.9; f_acc: 75.9 +2025-05-13 09:23:44,838 (25 Mean ) acc: 71.4; ap: 75.6; r_acc: 79.1; f_acc: 63.7 +2025-05-13 09:23:44,838 ************************* +2025-05-13 10:09:10,237 Model_path /data/ziqiang/yjz/code/CLIPDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-rj2025_05_10_13_01_11/model_epoch_last.pth +2025-05-13 10:39:03,852 AIGIBench +2025-05-13 10:39:03,852 2025-05-13 10:39:03 +2025-05-13 10:44:14,566 (0 R3GAN ) acc: 76.0; ap: 84.1; r_acc: 81.7; f_acc: 70.2 +2025-05-13 10:50:30,504 (1 IP-Adapter ) acc: 76.0; ap: 82.8; r_acc: 82.6; f_acc: 69.3 +2025-05-13 10:56:45,246 (2 SocialRF ) acc: 63.4; ap: 68.9; r_acc: 58.3; f_acc: 68.4 +2025-05-13 11:01:55,222 (3 CommunityAI ) acc: 57.8; ap: 58.2; r_acc: 60.2; f_acc: 55.4 +2025-05-13 11:08:22,452 (4 StyleGAN-XL ) acc: 73.9; ap: 81.7; r_acc: 82.0; f_acc: 65.7 +2025-05-13 11:17:59,709 (5 Midjourney ) acc: 78.5; ap: 85.1; r_acc: 73.6; f_acc: 83.4 +2025-05-13 11:22:17,488 (6 FLUX1-dev ) acc: 82.4; ap: 88.9; r_acc: 82.2; f_acc: 82.6 +2025-05-13 11:26:10,166 (7 E4S ) acc: 56.6; ap: 60.7; r_acc: 80.7; f_acc: 32.5 +2025-05-13 11:31:43,019 (8 Imagen3 ) acc: 81.7; ap: 88.5; r_acc: 81.8; f_acc: 81.5 +2025-05-13 11:36:31,515 (9 BLIP ) acc: 78.7; ap: 87.7; r_acc: 85.8; f_acc: 71.6 +2025-05-13 11:41:18,257 (10 SDXL ) acc: 84.5; ap: 91.9; r_acc: 84.1; f_acc: 84.9 +2025-05-13 11:44:32,507 (11 DALLE-3 ) acc: 82.0; ap: 88.9; r_acc: 82.6; f_acc: 81.4 +2025-05-13 11:48:07,991 (12 GLIDE ) acc: 64.6; ap: 71.0; r_acc: 84.1; f_acc: 45.0 +2025-05-13 11:51:58,031 (13 InSwap ) acc: 47.1; ap: 44.4; r_acc: 84.6; f_acc: 8.8 +2025-05-13 11:55:25,065 (14 FaceSwap ) acc: 53.8; ap: 55.7; r_acc: 84.4; f_acc: 22.5 +2025-05-13 11:58:54,611 (15 StyleSwim ) acc: 86.9; ap: 93.4; r_acc: 83.2; f_acc: 90.6 +2025-05-13 12:01:58,383 (16 ProGAN ) acc: 95.1; ap: 99.2; r_acc: 94.1; f_acc: 96.2 +2025-05-13 12:05:34,853 (17 BlendFace ) acc: 42.3; ap: 38.9; r_acc: 79.0; f_acc: 5.5 +2025-05-13 12:09:04,073 (18 PhotoMaker ) acc: 62.4; ap: 69.4; r_acc: 82.2; f_acc: 42.6 +2025-05-13 12:12:34,353 (19 SD3 ) acc: 83.3; ap: 90.7; r_acc: 84.1; f_acc: 82.6 +2025-05-13 12:16:04,049 (20 Infinite-ID ) acc: 78.4; ap: 86.7; r_acc: 82.7; f_acc: 74.2 +2025-05-13 12:17:00,430 (21 WFIR ) acc: 68.6; ap: 75.0; r_acc: 72.0; f_acc: 65.2 +2025-05-13 12:20:30,235 (22 SimSwap ) acc: 47.2; ap: 44.9; r_acc: 84.7; f_acc: 9.8 +2025-05-13 12:23:59,763 (23 InstantID ) acc: 84.3; ap: 91.0; r_acc: 81.8; f_acc: 86.8 +2025-05-13 12:27:29,628 (24 StyleGAN3 ) acc: 79.8; ap: 87.7; r_acc: 82.6; f_acc: 77.1 +2025-05-13 12:27:29,628 (25 Mean ) acc: 71.4; ap: 76.6; r_acc: 80.6; f_acc: 62.2 +2025-05-13 12:27:29,628 ************************* +2025-05-14 09:24:41,356 Model_path /data/ziqiang/yjz/code/CLIPDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-rjm2025_05_12_11_05_32/model_epoch_last.pth +2025-05-14 09:24:54,232 AIGIBench +2025-05-14 09:24:54,232 2025-05-14 09:24:54 +2025-05-14 09:26:42,288 (0 R3GAN ) acc: 72.9; ap: 80.2; r_acc: 81.0; f_acc: 64.9 +2025-05-14 09:28:59,271 (1 IP-Adapter ) acc: 76.7; ap: 83.8; r_acc: 82.1; f_acc: 71.3 +2025-05-14 09:33:52,396 (2 SocialRF ) acc: 63.3; ap: 68.9; r_acc: 56.5; f_acc: 70.0 +2025-05-14 09:36:15,809 (3 CommunityAI ) acc: 55.8; ap: 54.7; r_acc: 56.7; f_acc: 54.9 +2025-05-14 09:38:13,103 (4 StyleGAN-XL ) acc: 69.5; ap: 76.7; r_acc: 80.2; f_acc: 58.7 +2025-05-14 09:40:02,857 (5 Midjourney ) acc: 80.9; ap: 88.3; r_acc: 74.5; f_acc: 87.3 +2025-05-14 09:42:06,221 (6 FLUX1-dev ) acc: 82.9; ap: 90.4; r_acc: 80.7; f_acc: 85.0 +2025-05-14 09:44:07,582 (7 E4S ) acc: 55.2; ap: 58.7; r_acc: 80.7; f_acc: 29.7 +2025-05-14 09:46:11,793 (8 Imagen3 ) acc: 82.4; ap: 89.9; r_acc: 81.3; f_acc: 83.6 +2025-05-14 09:48:21,572 (9 BLIP ) acc: 77.4; ap: 86.1; r_acc: 84.1; f_acc: 70.6 +2025-05-14 09:51:18,080 (10 SDXL ) acc: 83.9; ap: 91.9; r_acc: 82.7; f_acc: 85.1 +2025-05-14 09:53:45,117 (11 DALLE-3 ) acc: 83.0; ap: 90.4; r_acc: 81.4; f_acc: 84.7 +2025-05-14 09:55:38,105 (12 GLIDE ) acc: 64.3; ap: 70.3; r_acc: 82.7; f_acc: 45.8 +2025-05-14 09:57:43,574 (13 InSwap ) acc: 47.2; ap: 45.7; r_acc: 83.6; f_acc: 10.0 +2025-05-14 09:59:34,448 (14 FaceSwap ) acc: 52.7; ap: 54.7; r_acc: 83.1; f_acc: 21.5 +2025-05-14 10:01:42,926 (15 StyleSwim ) acc: 85.2; ap: 91.4; r_acc: 82.2; f_acc: 88.3 +2025-05-14 10:03:21,137 (16 ProGAN ) acc: 93.5; ap: 98.9; r_acc: 91.0; f_acc: 96.0 +2025-05-14 10:05:51,160 (17 BlendFace ) acc: 42.2; ap: 39.6; r_acc: 78.8; f_acc: 5.5 +2025-05-14 10:08:54,491 (18 PhotoMaker ) acc: 60.2; ap: 66.4; r_acc: 81.6; f_acc: 38.8 +2025-05-14 10:11:44,510 (19 SD3 ) acc: 84.1; ap: 91.9; r_acc: 82.7; f_acc: 85.5 +2025-05-14 10:13:48,667 (20 Infinite-ID ) acc: 77.1; ap: 85.5; r_acc: 81.9; f_acc: 72.2 +2025-05-14 10:14:21,186 (21 WFIR ) acc: 67.0; ap: 73.0; r_acc: 73.2; f_acc: 60.7 +2025-05-14 10:16:06,374 (22 SimSwap ) acc: 47.4; ap: 46.1; r_acc: 83.6; f_acc: 11.2 +2025-05-14 10:17:51,906 (23 InstantID ) acc: 81.9; ap: 89.0; r_acc: 80.9; f_acc: 82.8 +2025-05-14 10:19:37,713 (24 StyleGAN3 ) acc: 75.6; ap: 83.7; r_acc: 82.3; f_acc: 68.9 +2025-05-14 10:19:37,713 (25 Mean ) acc: 70.5; ap: 75.8; r_acc: 79.6; f_acc: 61.3 +2025-05-14 10:19:37,713 ************************* +2025-05-14 10:34:14,562 Model_path /data/ziqiang/yjz/code/CLIPDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-m2025_05_10_01_53_59/model_epoch_last.pth +2025-05-14 10:34:42,012 AIGIBench +2025-05-14 10:34:42,012 2025-05-14 10:34:42 +2025-05-14 10:36:28,811 (0 R3GAN ) acc: 76.5; ap: 87.2; r_acc: 71.7; f_acc: 81.3 +2025-05-14 10:38:15,130 (1 IP-Adapter ) acc: 74.9; ap: 80.7; r_acc: 71.6; f_acc: 78.2 +2025-05-14 10:40:13,144 (2 SocialRF ) acc: 56.7; ap: 57.1; r_acc: 69.0; f_acc: 44.3 +2025-05-14 10:42:31,723 (3 CommunityAI ) acc: 53.4; ap: 58.1; r_acc: 89.6; f_acc: 17.3 +2025-05-14 10:44:50,165 (4 StyleGAN-XL ) acc: 73.1; ap: 81.8; r_acc: 70.9; f_acc: 75.3 +2025-05-14 10:46:38,577 (5 Midjourney ) acc: 53.5; ap: 52.8; r_acc: 59.4; f_acc: 47.6 +2025-05-14 10:48:25,849 (6 FLUX1-dev ) acc: 55.3; ap: 56.1; r_acc: 71.5; f_acc: 39.1 +2025-05-14 10:50:12,798 (7 E4S ) acc: 70.8; ap: 73.9; r_acc: 69.4; f_acc: 72.2 +2025-05-14 10:51:58,130 (8 Imagen3 ) acc: 59.8; ap: 63.5; r_acc: 71.3; f_acc: 48.2 +2025-05-14 10:53:44,266 (9 BLIP ) acc: 63.5; ap: 68.4; r_acc: 76.2; f_acc: 50.8 +2025-05-14 10:55:30,517 (10 SDXL ) acc: 76.2; ap: 83.2; r_acc: 74.8; f_acc: 77.6 +2025-05-14 10:57:04,185 (11 DALLE-3 ) acc: 70.7; ap: 75.2; r_acc: 72.2; f_acc: 69.3 +2025-05-14 10:58:49,696 (12 GLIDE ) acc: 72.0; ap: 77.8; r_acc: 74.9; f_acc: 69.2 +2025-05-14 11:00:34,394 (13 InSwap ) acc: 63.8; ap: 65.7; r_acc: 74.3; f_acc: 53.0 +2025-05-14 11:02:18,538 (14 FaceSwap ) acc: 69.1; ap: 73.6; r_acc: 73.7; f_acc: 64.3 +2025-05-14 11:04:03,816 (15 StyleSwim ) acc: 84.3; ap: 96.6; r_acc: 72.0; f_acc: 96.6 +2025-05-14 11:05:34,973 (16 ProGAN ) acc: 98.3; ap: 99.9; r_acc: 97.7; f_acc: 99.0 +2025-05-14 11:07:26,762 (17 BlendFace ) acc: 54.7; ap: 54.3; r_acc: 67.4; f_acc: 42.0 +2025-05-14 11:09:11,517 (18 PhotoMaker ) acc: 50.2; ap: 50.5; r_acc: 70.2; f_acc: 30.1 +2025-05-14 11:10:57,598 (19 SD3 ) acc: 76.2; ap: 82.4; r_acc: 74.8; f_acc: 77.6 +2025-05-14 11:12:43,479 (20 Infinite-ID ) acc: 73.1; ap: 79.8; r_acc: 71.6; f_acc: 74.7 +2025-05-14 11:13:16,508 (21 WFIR ) acc: 71.0; ap: 83.6; r_acc: 59.8; f_acc: 82.2 +2025-05-14 11:15:01,973 (22 SimSwap ) acc: 61.3; ap: 64.3; r_acc: 74.4; f_acc: 48.3 +2025-05-14 11:16:46,974 (23 InstantID ) acc: 78.4; ap: 86.7; r_acc: 71.2; f_acc: 85.6 +2025-05-14 11:18:33,238 (24 StyleGAN3 ) acc: 74.2; ap: 84.4; r_acc: 70.5; f_acc: 77.9 +2025-05-14 11:18:33,239 (25 Mean ) acc: 68.4; ap: 73.5; r_acc: 72.8; f_acc: 64.1 +2025-05-14 11:18:33,239 ************************* diff --git a/detector_codes/CLIPDetection-main/models/__init__.py b/detector_codes/CLIPDetection-main/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/CLIPDetection-main/models/clip/__init__.py b/detector_codes/CLIPDetection-main/models/clip/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..dcc5619538c0f7c782508bdbd9587259d805e0d9 --- /dev/null +++ b/detector_codes/CLIPDetection-main/models/clip/__init__.py @@ -0,0 +1 @@ +from .clip import * diff --git a/detector_codes/CLIPDetection-main/models/clip/__pycache__/__init__.cpython-310.pyc b/detector_codes/CLIPDetection-main/models/clip/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..432c7bbc639332fd8a9ca8c918e5abf60dc0f6e7 Binary files /dev/null and b/detector_codes/CLIPDetection-main/models/clip/__pycache__/__init__.cpython-310.pyc differ diff --git a/detector_codes/CLIPDetection-main/models/clip/__pycache__/__init__.cpython-38.pyc b/detector_codes/CLIPDetection-main/models/clip/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4ae492c2b6fd66b68c445a183e7628e81d8ae8db Binary files /dev/null and b/detector_codes/CLIPDetection-main/models/clip/__pycache__/__init__.cpython-38.pyc differ diff --git a/detector_codes/CLIPDetection-main/models/clip/__pycache__/__init__.cpython-39.pyc b/detector_codes/CLIPDetection-main/models/clip/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..80b82257be7b759f20b4617035d883f1d5e480cc Binary files /dev/null and b/detector_codes/CLIPDetection-main/models/clip/__pycache__/__init__.cpython-39.pyc differ diff --git a/detector_codes/CLIPDetection-main/models/clip/__pycache__/clip.cpython-310.pyc b/detector_codes/CLIPDetection-main/models/clip/__pycache__/clip.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f839e4303bbe911212f80a5ff27855cfa089f8b Binary files /dev/null and b/detector_codes/CLIPDetection-main/models/clip/__pycache__/clip.cpython-310.pyc differ diff --git a/detector_codes/CLIPDetection-main/models/clip/__pycache__/clip.cpython-38.pyc b/detector_codes/CLIPDetection-main/models/clip/__pycache__/clip.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca320e0dead6a97469f2461fc5c17958c870bbe2 Binary files /dev/null and b/detector_codes/CLIPDetection-main/models/clip/__pycache__/clip.cpython-38.pyc differ diff --git a/detector_codes/CLIPDetection-main/models/clip/__pycache__/clip.cpython-39.pyc b/detector_codes/CLIPDetection-main/models/clip/__pycache__/clip.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..96fa63294d81c0aeb7aec20b132d065b0f06a639 Binary files /dev/null and b/detector_codes/CLIPDetection-main/models/clip/__pycache__/clip.cpython-39.pyc differ diff --git a/detector_codes/CLIPDetection-main/models/clip/__pycache__/model.cpython-310.pyc b/detector_codes/CLIPDetection-main/models/clip/__pycache__/model.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fe5ed8576243c0dd4feb59baaf9af5395fd21fe Binary files /dev/null and b/detector_codes/CLIPDetection-main/models/clip/__pycache__/model.cpython-310.pyc differ diff --git a/detector_codes/CLIPDetection-main/models/clip/__pycache__/model.cpython-38.pyc b/detector_codes/CLIPDetection-main/models/clip/__pycache__/model.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aba70b8957d2a93390b1ed7067ce49b12844435c Binary files /dev/null and b/detector_codes/CLIPDetection-main/models/clip/__pycache__/model.cpython-38.pyc differ diff --git a/detector_codes/CLIPDetection-main/models/clip/__pycache__/model.cpython-39.pyc b/detector_codes/CLIPDetection-main/models/clip/__pycache__/model.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a61bea4fa8af88f406f81ca4e364bbfb84611c68 Binary files /dev/null and b/detector_codes/CLIPDetection-main/models/clip/__pycache__/model.cpython-39.pyc differ diff --git a/detector_codes/CLIPDetection-main/models/clip/__pycache__/simple_tokenizer.cpython-310.pyc b/detector_codes/CLIPDetection-main/models/clip/__pycache__/simple_tokenizer.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e05bfbaf5118749c7a574133c43e3995ef57951a Binary files /dev/null and b/detector_codes/CLIPDetection-main/models/clip/__pycache__/simple_tokenizer.cpython-310.pyc differ diff --git a/detector_codes/CLIPDetection-main/models/clip/__pycache__/simple_tokenizer.cpython-38.pyc b/detector_codes/CLIPDetection-main/models/clip/__pycache__/simple_tokenizer.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..12d465392c9135824049f8f96e41ea511a8a5bbc Binary files /dev/null and b/detector_codes/CLIPDetection-main/models/clip/__pycache__/simple_tokenizer.cpython-38.pyc differ diff --git a/detector_codes/CLIPDetection-main/models/clip/__pycache__/simple_tokenizer.cpython-39.pyc b/detector_codes/CLIPDetection-main/models/clip/__pycache__/simple_tokenizer.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f798ef871ae70e392a436f21a95743b59b10d824 Binary files /dev/null and b/detector_codes/CLIPDetection-main/models/clip/__pycache__/simple_tokenizer.cpython-39.pyc differ diff --git a/detector_codes/CLIPDetection-main/models/clip/bpe_simple_vocab_16e6.txt.gz b/detector_codes/CLIPDetection-main/models/clip/bpe_simple_vocab_16e6.txt.gz new file mode 100644 index 0000000000000000000000000000000000000000..36a15856e00a06a9fbed8cdd34d2393fea4a3113 --- /dev/null +++ b/detector_codes/CLIPDetection-main/models/clip/bpe_simple_vocab_16e6.txt.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:924691ac288e54409236115652ad4aa250f48203de50a9e4722a6ecd48d6804a +size 1356917 diff --git a/detector_codes/CLIPDetection-main/models/clip/clip.py b/detector_codes/CLIPDetection-main/models/clip/clip.py new file mode 100644 index 0000000000000000000000000000000000000000..257511e1d40c120e0d64a0f1562d44b2b8a40a17 --- /dev/null +++ b/detector_codes/CLIPDetection-main/models/clip/clip.py @@ -0,0 +1,237 @@ +import hashlib +import os +import urllib +import warnings +from typing import Any, Union, List +from pkg_resources import packaging + +import torch +from PIL import Image +from torchvision.transforms import Compose, Resize, CenterCrop, ToTensor, Normalize +from tqdm import tqdm + +from .model import build_model +from .simple_tokenizer import SimpleTokenizer as _Tokenizer + +try: + from torchvision.transforms import InterpolationMode + BICUBIC = InterpolationMode.BICUBIC +except ImportError: + BICUBIC = Image.BICUBIC + + +if packaging.version.parse(torch.__version__) < packaging.version.parse("1.7.1"): + warnings.warn("PyTorch version 1.7.1 or higher is recommended") + + +__all__ = ["available_models", "load", "tokenize"] +_tokenizer = _Tokenizer() + +_MODELS = { + "RN50": "https://openaipublic.azureedge.net/clip/models/afeb0e10f9e5a86da6080e35cf09123aca3b358a0c3e3b6c78a7b63bc04b6762/RN50.pt", + "RN101": "https://openaipublic.azureedge.net/clip/models/8fa8567bab74a42d41c5915025a8e4538c3bdbe8804a470a72f30b0d94fab599/RN101.pt", + "RN50x4": "https://openaipublic.azureedge.net/clip/models/7e526bd135e493cef0776de27d5f42653e6b4c8bf9e0f653bb11773263205fdd/RN50x4.pt", + "RN50x16": "https://openaipublic.azureedge.net/clip/models/52378b407f34354e150460fe41077663dd5b39c54cd0bfd2b27167a4a06ec9aa/RN50x16.pt", + "RN50x64": "https://openaipublic.azureedge.net/clip/models/be1cfb55d75a9666199fb2206c106743da0f6468c9d327f3e0d0a543a9919d9c/RN50x64.pt", + "ViT-B/32": "https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt", + "ViT-B/16": "https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt", + "ViT-L/14": "https://openaipublic.azureedge.net/clip/models/b8cca3fd41ae0c99ba7e8951adf17d267cdb84cd88be6f7c2e0eca1737a03836/ViT-L-14.pt", + "ViT-L/14@336px": "https://openaipublic.azureedge.net/clip/models/3035c92b350959924f9f00213499208652fc7ea050643e8b385c2dac08641f02/ViT-L-14-336px.pt", +} + + +def _download(url: str, root: str): + os.makedirs(root, exist_ok=True) + filename = os.path.basename(url) + + expected_sha256 = url.split("/")[-2] + download_target = os.path.join(root, filename) + + if os.path.exists(download_target) and not os.path.isfile(download_target): + raise RuntimeError(f"{download_target} exists and is not a regular file") + + if os.path.isfile(download_target): + if hashlib.sha256(open(download_target, "rb").read()).hexdigest() == expected_sha256: + return download_target + else: + warnings.warn(f"{download_target} exists, but the SHA256 checksum does not match; re-downloading the file") + + with urllib.request.urlopen(url) as source, open(download_target, "wb") as output: + with tqdm(total=int(source.info().get("Content-Length")), ncols=80, unit='iB', unit_scale=True, unit_divisor=1024) as loop: + while True: + buffer = source.read(8192) + if not buffer: + break + + output.write(buffer) + loop.update(len(buffer)) + + if hashlib.sha256(open(download_target, "rb").read()).hexdigest() != expected_sha256: + raise RuntimeError("Model has been downloaded but the SHA256 checksum does not not match") + + return download_target + + +def _convert_image_to_rgb(image): + return image.convert("RGB") + + +def _transform(n_px): + return Compose([ + Resize(n_px, interpolation=BICUBIC), + CenterCrop(n_px), + _convert_image_to_rgb, + ToTensor(), + Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711)), + ]) + + +def available_models() -> List[str]: + """Returns the names of available CLIP models""" + return list(_MODELS.keys()) + + +def load(name: str, device: Union[str, torch.device] = "cuda" if torch.cuda.is_available() else "cpu", jit: bool = False, download_root: str = None): + """Load a CLIP model + + Parameters + ---------- + name : str + A model name listed by `clip.available_models()`, or the path to a model checkpoint containing the state_dict + + device : Union[str, torch.device] + The device to put the loaded model + + jit : bool + Whether to load the optimized JIT model or more hackable non-JIT model (default). + + download_root: str + path to download the model files; by default, it uses "~/.cache/clip" + + Returns + ------- + model : torch.nn.Module + The CLIP model + + preprocess : Callable[[PIL.Image], torch.Tensor] + A torchvision transform that converts a PIL image into a tensor that the returned model can take as its input + """ + if name in _MODELS: + model_path = _download(_MODELS[name], download_root or os.path.expanduser("~/.cache/clip")) + elif os.path.isfile(name): + model_path = name + else: + raise RuntimeError(f"Model {name} not found; available models = {available_models()}") + + with open(model_path, 'rb') as opened_file: + try: + # loading JIT archive + model = torch.jit.load(opened_file, map_location=device if jit else "cpu").eval() + state_dict = None + except RuntimeError: + # loading saved state dict + if jit: + warnings.warn(f"File {model_path} is not a JIT archive. Loading as a state dict instead") + jit = False + state_dict = torch.load(opened_file, map_location="cpu") + + if not jit: + model = build_model(state_dict or model.state_dict()).to(device) + if str(device) == "cpu": + model.float() + return model, _transform(model.visual.input_resolution) + + # patch the device names + device_holder = torch.jit.trace(lambda: torch.ones([]).to(torch.device(device)), example_inputs=[]) + device_node = [n for n in device_holder.graph.findAllNodes("prim::Constant") if "Device" in repr(n)][-1] + + def patch_device(module): + try: + graphs = [module.graph] if hasattr(module, "graph") else [] + except RuntimeError: + graphs = [] + + if hasattr(module, "forward1"): + graphs.append(module.forward1.graph) + + for graph in graphs: + for node in graph.findAllNodes("prim::Constant"): + if "value" in node.attributeNames() and str(node["value"]).startswith("cuda"): + node.copyAttributes(device_node) + + model.apply(patch_device) + patch_device(model.encode_image) + patch_device(model.encode_text) + + # patch dtype to float32 on CPU + if str(device) == "cpu": + float_holder = torch.jit.trace(lambda: torch.ones([]).float(), example_inputs=[]) + float_input = list(float_holder.graph.findNode("aten::to").inputs())[1] + float_node = float_input.node() + + def patch_float(module): + try: + graphs = [module.graph] if hasattr(module, "graph") else [] + except RuntimeError: + graphs = [] + + if hasattr(module, "forward1"): + graphs.append(module.forward1.graph) + + for graph in graphs: + for node in graph.findAllNodes("aten::to"): + inputs = list(node.inputs()) + for i in [1, 2]: # dtype can be the second or third argument to aten::to() + if inputs[i].node()["value"] == 5: + inputs[i].node().copyAttributes(float_node) + + model.apply(patch_float) + patch_float(model.encode_image) + patch_float(model.encode_text) + + model.float() + + return model, _transform(model.input_resolution.item()) + + +def tokenize(texts: Union[str, List[str]], context_length: int = 77, truncate: bool = False) -> Union[torch.IntTensor, torch.LongTensor]: + """ + Returns the tokenized representation of given input string(s) + + Parameters + ---------- + texts : Union[str, List[str]] + An input string or a list of input strings to tokenize + + context_length : int + The context length to use; all CLIP models use 77 as the context length + + truncate: bool + Whether to truncate the text in case its encoding is longer than the context length + + Returns + ------- + A two-dimensional tensor containing the resulting tokens, shape = [number of input strings, context_length]. + We return LongTensor when torch version is <1.8.0, since older index_select requires indices to be long. + """ + if isinstance(texts, str): + texts = [texts] + + sot_token = _tokenizer.encoder["<|startoftext|>"] + eot_token = _tokenizer.encoder["<|endoftext|>"] + all_tokens = [[sot_token] + _tokenizer.encode(text) + [eot_token] for text in texts] + if packaging.version.parse(torch.__version__) < packaging.version.parse("1.8.0"): + result = torch.zeros(len(all_tokens), context_length, dtype=torch.long) + else: + result = torch.zeros(len(all_tokens), context_length, dtype=torch.int) + + for i, tokens in enumerate(all_tokens): + if len(tokens) > context_length: + if truncate: + tokens = tokens[:context_length] + tokens[-1] = eot_token + else: + raise RuntimeError(f"Input {texts[i]} is too long for context length {context_length}") + result[i, :len(tokens)] = torch.tensor(tokens) + + return result diff --git a/detector_codes/CLIPDetection-main/models/clip/model.py b/detector_codes/CLIPDetection-main/models/clip/model.py new file mode 100644 index 0000000000000000000000000000000000000000..c60bda69ab0d35af0b64517d32595d9c03f8721c --- /dev/null +++ b/detector_codes/CLIPDetection-main/models/clip/model.py @@ -0,0 +1,452 @@ +from collections import OrderedDict +from typing import Tuple, Union + +import numpy as np +import torch +import torch.nn.functional as F +from torch import nn + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1): + super().__init__() + + # all conv layers have stride 1. an avgpool is performed after the second convolution when stride > 1 + self.conv1 = nn.Conv2d(inplanes, planes, 1, bias=False) + self.bn1 = nn.BatchNorm2d(planes) + self.relu1 = nn.ReLU(inplace=True) + + self.conv2 = nn.Conv2d(planes, planes, 3, padding=1, bias=False) + self.bn2 = nn.BatchNorm2d(planes) + self.relu2 = nn.ReLU(inplace=True) + + self.avgpool = nn.AvgPool2d(stride) if stride > 1 else nn.Identity() + + self.conv3 = nn.Conv2d(planes, planes * self.expansion, 1, bias=False) + self.bn3 = nn.BatchNorm2d(planes * self.expansion) + self.relu3 = nn.ReLU(inplace=True) + + self.downsample = None + self.stride = stride + + if stride > 1 or inplanes != planes * Bottleneck.expansion: + # downsampling layer is prepended with an avgpool, and the subsequent convolution has stride 1 + self.downsample = nn.Sequential(OrderedDict([ + ("-1", nn.AvgPool2d(stride)), + ("0", nn.Conv2d(inplanes, planes * self.expansion, 1, stride=1, bias=False)), + ("1", nn.BatchNorm2d(planes * self.expansion)) + ])) + + def forward(self, x: torch.Tensor): + identity = x + + out = self.relu1(self.bn1(self.conv1(x))) + out = self.relu2(self.bn2(self.conv2(out))) + out = self.avgpool(out) + out = self.bn3(self.conv3(out)) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu3(out) + return out + + +class AttentionPool2d(nn.Module): + def __init__(self, spacial_dim: int, embed_dim: int, num_heads: int, output_dim: int = None): + super().__init__() + self.positional_embedding = nn.Parameter(torch.randn(spacial_dim ** 2 + 1, embed_dim) / embed_dim ** 0.5) + self.k_proj = nn.Linear(embed_dim, embed_dim) + self.q_proj = nn.Linear(embed_dim, embed_dim) + self.v_proj = nn.Linear(embed_dim, embed_dim) + self.c_proj = nn.Linear(embed_dim, output_dim or embed_dim) + self.num_heads = num_heads + + def forward(self, x): + x = x.flatten(start_dim=2).permute(2, 0, 1) # NCHW -> (HW)NC + x = torch.cat([x.mean(dim=0, keepdim=True), x], dim=0) # (HW+1)NC + x = x + self.positional_embedding[:, None, :].to(x.dtype) # (HW+1)NC + x, _ = F.multi_head_attention_forward( + query=x[:1], key=x, value=x, + embed_dim_to_check=x.shape[-1], + num_heads=self.num_heads, + q_proj_weight=self.q_proj.weight, + k_proj_weight=self.k_proj.weight, + v_proj_weight=self.v_proj.weight, + in_proj_weight=None, + in_proj_bias=torch.cat([self.q_proj.bias, self.k_proj.bias, self.v_proj.bias]), + bias_k=None, + bias_v=None, + add_zero_attn=False, + dropout_p=0, + out_proj_weight=self.c_proj.weight, + out_proj_bias=self.c_proj.bias, + use_separate_proj_weight=True, + training=self.training, + need_weights=False + ) + return x.squeeze(0) + + +class ModifiedResNet(nn.Module): + """ + A ResNet class that is similar to torchvision's but contains the following changes: + - There are now 3 "stem" convolutions as opposed to 1, with an average pool instead of a max pool. + - Performs anti-aliasing strided convolutions, where an avgpool is prepended to convolutions with stride > 1 + - The final pooling layer is a QKV attention instead of an average pool + """ + + def __init__(self, layers, output_dim, heads, input_resolution=224, width=64): + super().__init__() + self.output_dim = output_dim + self.input_resolution = input_resolution + + # the 3-layer stem + self.conv1 = nn.Conv2d(3, width // 2, kernel_size=3, stride=2, padding=1, bias=False) + self.bn1 = nn.BatchNorm2d(width // 2) + self.relu1 = nn.ReLU(inplace=True) + self.conv2 = nn.Conv2d(width // 2, width // 2, kernel_size=3, padding=1, bias=False) + self.bn2 = nn.BatchNorm2d(width // 2) + self.relu2 = nn.ReLU(inplace=True) + self.conv3 = nn.Conv2d(width // 2, width, kernel_size=3, padding=1, bias=False) + self.bn3 = nn.BatchNorm2d(width) + self.relu3 = nn.ReLU(inplace=True) + self.avgpool = nn.AvgPool2d(2) + + # residual layers + self._inplanes = width # this is a *mutable* variable used during construction + self.layer1 = self._make_layer(width, layers[0]) + self.layer2 = self._make_layer(width * 2, layers[1], stride=2) + self.layer3 = self._make_layer(width * 4, layers[2], stride=2) + self.layer4 = self._make_layer(width * 8, layers[3], stride=2) + + embed_dim = width * 32 # the ResNet feature dimension + self.attnpool = AttentionPool2d(input_resolution // 32, embed_dim, heads, output_dim) + + def _make_layer(self, planes, blocks, stride=1): + layers = [Bottleneck(self._inplanes, planes, stride)] + + self._inplanes = planes * Bottleneck.expansion + for _ in range(1, blocks): + layers.append(Bottleneck(self._inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + def stem(x): + x = self.relu1(self.bn1(self.conv1(x))) + x = self.relu2(self.bn2(self.conv2(x))) + x = self.relu3(self.bn3(self.conv3(x))) + x = self.avgpool(x) + return x + + x = x.type(self.conv1.weight.dtype) + x = stem(x) + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + x = self.attnpool(x) + + return x + + +class LayerNorm(nn.LayerNorm): + """Subclass torch's LayerNorm to handle fp16.""" + + def forward(self, x: torch.Tensor): + orig_type = x.dtype + ret = super().forward(x.type(torch.float32)) + return ret.type(orig_type) + + +class QuickGELU(nn.Module): + def forward(self, x: torch.Tensor): + return x * torch.sigmoid(1.702 * x) + + +class ResidualAttentionBlock(nn.Module): + def __init__(self, d_model: int, n_head: int, attn_mask: torch.Tensor = None): + super().__init__() + + self.attn = nn.MultiheadAttention(d_model, n_head) + self.ln_1 = LayerNorm(d_model) + self.mlp = nn.Sequential(OrderedDict([ + ("c_fc", nn.Linear(d_model, d_model * 4)), + ("gelu", QuickGELU()), + ("c_proj", nn.Linear(d_model * 4, d_model)) + ])) + self.ln_2 = LayerNorm(d_model) + self.attn_mask = attn_mask + + def attention(self, x: torch.Tensor): + self.attn_mask = self.attn_mask.to(dtype=x.dtype, device=x.device) if self.attn_mask is not None else None + return self.attn(x, x, x, need_weights=False, attn_mask=self.attn_mask)[0] + + def forward(self, x: torch.Tensor): + x = x + self.attention(self.ln_1(x)) + x = x + self.mlp(self.ln_2(x)) + return x + + +class Transformer(nn.Module): + def __init__(self, width: int, layers: int, heads: int, attn_mask: torch.Tensor = None): + super().__init__() + self.width = width + self.layers = layers + self.resblocks = nn.Sequential(*[ResidualAttentionBlock(width, heads, attn_mask) for _ in range(layers)]) + + def forward(self, x: torch.Tensor): + out = {} + for idx, layer in enumerate(self.resblocks.children()): + x = layer(x) + out['layer'+str(idx)] = x[0] # shape:LND. choose cls token feature + return out, x + + # return self.resblocks(x) # This is the original code + + +class VisionTransformer(nn.Module): + def __init__(self, input_resolution: int, patch_size: int, width: int, layers: int, heads: int, output_dim: int): + super().__init__() + self.input_resolution = input_resolution + self.output_dim = output_dim + self.conv1 = nn.Conv2d(in_channels=3, out_channels=width, kernel_size=patch_size, stride=patch_size, bias=False) + + scale = width ** -0.5 + self.class_embedding = nn.Parameter(scale * torch.randn(width)) + self.positional_embedding = nn.Parameter(scale * torch.randn((input_resolution // patch_size) ** 2 + 1, width)) + self.ln_pre = LayerNorm(width) + + self.transformer = Transformer(width, layers, heads) + + self.ln_post = LayerNorm(width) + self.proj = nn.Parameter(scale * torch.randn(width, output_dim)) + + + + def forward(self, x: torch.Tensor): + x = self.conv1(x) # shape = [*, width, grid, grid] + x = x.reshape(x.shape[0], x.shape[1], -1) # shape = [*, width, grid ** 2] + x = x.permute(0, 2, 1) # shape = [*, grid ** 2, width] + x = torch.cat([self.class_embedding.to(x.dtype) + torch.zeros(x.shape[0], 1, x.shape[-1], dtype=x.dtype, device=x.device), x], dim=1) # shape = [*, grid ** 2 + 1, width] + x = x + self.positional_embedding.to(x.dtype) + x = self.ln_pre(x) + + x = x.permute(1, 0, 2) # NLD -> LND + out, x = self.transformer(x) + x = x.permute(1, 0, 2) # LND -> NLD + + x = self.ln_post(x[:, 0, :]) + + + out['before_projection'] = x + + if self.proj is not None: + x = x @ self.proj + out['after_projection'] = x + + # Return both intermediate features and final clip feature + # return out + + # This only returns CLIP features + return x + + +class CLIP(nn.Module): + def __init__(self, + embed_dim: int, + # vision + image_resolution: int, + vision_layers: Union[Tuple[int, int, int, int], int], + vision_width: int, + vision_patch_size: int, + # text + context_length: int, + vocab_size: int, + transformer_width: int, + transformer_heads: int, + transformer_layers: int + ): + super().__init__() + + self.context_length = context_length + + if isinstance(vision_layers, (tuple, list)): + vision_heads = vision_width * 32 // 64 + self.visual = ModifiedResNet( + layers=vision_layers, + output_dim=embed_dim, + heads=vision_heads, + input_resolution=image_resolution, + width=vision_width + ) + else: + vision_heads = vision_width // 64 + self.visual = VisionTransformer( + input_resolution=image_resolution, + patch_size=vision_patch_size, + width=vision_width, + layers=vision_layers, + heads=vision_heads, + output_dim=embed_dim + ) + + self.transformer = Transformer( + width=transformer_width, + layers=transformer_layers, + heads=transformer_heads, + attn_mask=self.build_attention_mask() + ) + + self.vocab_size = vocab_size + self.token_embedding = nn.Embedding(vocab_size, transformer_width) + self.positional_embedding = nn.Parameter(torch.empty(self.context_length, transformer_width)) + self.ln_final = LayerNorm(transformer_width) + + self.text_projection = nn.Parameter(torch.empty(transformer_width, embed_dim)) + self.logit_scale = nn.Parameter(torch.ones([]) * np.log(1 / 0.07)) + + self.initialize_parameters() + + def initialize_parameters(self): + nn.init.normal_(self.token_embedding.weight, std=0.02) + nn.init.normal_(self.positional_embedding, std=0.01) + + if isinstance(self.visual, ModifiedResNet): + if self.visual.attnpool is not None: + std = self.visual.attnpool.c_proj.in_features ** -0.5 + nn.init.normal_(self.visual.attnpool.q_proj.weight, std=std) + nn.init.normal_(self.visual.attnpool.k_proj.weight, std=std) + nn.init.normal_(self.visual.attnpool.v_proj.weight, std=std) + nn.init.normal_(self.visual.attnpool.c_proj.weight, std=std) + + for resnet_block in [self.visual.layer1, self.visual.layer2, self.visual.layer3, self.visual.layer4]: + for name, param in resnet_block.named_parameters(): + if name.endswith("bn3.weight"): + nn.init.zeros_(param) + + proj_std = (self.transformer.width ** -0.5) * ((2 * self.transformer.layers) ** -0.5) + attn_std = self.transformer.width ** -0.5 + fc_std = (2 * self.transformer.width) ** -0.5 + for block in self.transformer.resblocks: + nn.init.normal_(block.attn.in_proj_weight, std=attn_std) + nn.init.normal_(block.attn.out_proj.weight, std=proj_std) + nn.init.normal_(block.mlp.c_fc.weight, std=fc_std) + nn.init.normal_(block.mlp.c_proj.weight, std=proj_std) + + if self.text_projection is not None: + nn.init.normal_(self.text_projection, std=self.transformer.width ** -0.5) + + def build_attention_mask(self): + # lazily create causal attention mask, with full attention between the vision tokens + # pytorch uses additive attention mask; fill with -inf + mask = torch.empty(self.context_length, self.context_length) + mask.fill_(float("-inf")) + mask.triu_(1) # zero out the lower diagonal + return mask + + @property + def dtype(self): + return self.visual.conv1.weight.dtype + + def encode_image(self, image): + return self.visual(image.type(self.dtype)) + + def encode_text(self, text): + x = self.token_embedding(text).type(self.dtype) # [batch_size, n_ctx, d_model] + + x = x + self.positional_embedding.type(self.dtype) + x = x.permute(1, 0, 2) # NLD -> LND + x = self.transformer(x) + x = x.permute(1, 0, 2) # LND -> NLD + x = self.ln_final(x).type(self.dtype) + + # x.shape = [batch_size, n_ctx, transformer.width] + # take features from the eot embedding (eot_token is the highest number in each sequence) + x = x[torch.arange(x.shape[0]), text.argmax(dim=-1)] @ self.text_projection + + return x + + def forward(self, image, text): + image_features = self.encode_image(image) + text_features = self.encode_text(text) + + # normalized features + image_features = image_features / image_features.norm(dim=1, keepdim=True) + text_features = text_features / text_features.norm(dim=1, keepdim=True) + + # cosine similarity as logits + logit_scale = self.logit_scale.exp() + logits_per_image = logit_scale * image_features @ text_features.t() + logits_per_text = logits_per_image.t() + + # shape = [global_batch_size, global_batch_size] + return logits_per_image, logits_per_text + + +def convert_weights(model: nn.Module): + """Convert applicable model parameters to fp16""" + + def _convert_weights_to_fp16(l): + if isinstance(l, (nn.Conv1d, nn.Conv2d, nn.Linear)): + l.weight.data = l.weight.data.half() + if l.bias is not None: + l.bias.data = l.bias.data.half() + + if isinstance(l, nn.MultiheadAttention): + for attr in [*[f"{s}_proj_weight" for s in ["in", "q", "k", "v"]], "in_proj_bias", "bias_k", "bias_v"]: + tensor = getattr(l, attr) + if tensor is not None: + tensor.data = tensor.data.half() + + for name in ["text_projection", "proj"]: + if hasattr(l, name): + attr = getattr(l, name) + if attr is not None: + attr.data = attr.data.half() + + model.apply(_convert_weights_to_fp16) + + +def build_model(state_dict: dict): + vit = "visual.proj" in state_dict + + if vit: + vision_width = state_dict["visual.conv1.weight"].shape[0] + vision_layers = len([k for k in state_dict.keys() if k.startswith("visual.") and k.endswith(".attn.in_proj_weight")]) + vision_patch_size = state_dict["visual.conv1.weight"].shape[-1] + grid_size = round((state_dict["visual.positional_embedding"].shape[0] - 1) ** 0.5) + image_resolution = vision_patch_size * grid_size + else: + counts: list = [len(set(k.split(".")[2] for k in state_dict if k.startswith(f"visual.layer{b}"))) for b in [1, 2, 3, 4]] + vision_layers = tuple(counts) + vision_width = state_dict["visual.layer1.0.conv1.weight"].shape[0] + output_width = round((state_dict["visual.attnpool.positional_embedding"].shape[0] - 1) ** 0.5) + vision_patch_size = None + assert output_width ** 2 + 1 == state_dict["visual.attnpool.positional_embedding"].shape[0] + image_resolution = output_width * 32 + + embed_dim = state_dict["text_projection"].shape[1] + context_length = state_dict["positional_embedding"].shape[0] + vocab_size = state_dict["token_embedding.weight"].shape[0] + transformer_width = state_dict["ln_final.weight"].shape[0] + transformer_heads = transformer_width // 64 + transformer_layers = len(set(k.split(".")[2] for k in state_dict if k.startswith("transformer.resblocks"))) + + model = CLIP( + embed_dim, + image_resolution, vision_layers, vision_width, vision_patch_size, + context_length, vocab_size, transformer_width, transformer_heads, transformer_layers + ) + + for key in ["input_resolution", "context_length", "vocab_size"]: + if key in state_dict: + del state_dict[key] + + convert_weights(model) + model.load_state_dict(state_dict) + return model.eval() diff --git a/detector_codes/CLIPDetection-main/models/clip/simple_tokenizer.py b/detector_codes/CLIPDetection-main/models/clip/simple_tokenizer.py new file mode 100644 index 0000000000000000000000000000000000000000..0a66286b7d5019c6e221932a813768038f839c91 --- /dev/null +++ b/detector_codes/CLIPDetection-main/models/clip/simple_tokenizer.py @@ -0,0 +1,132 @@ +import gzip +import html +import os +from functools import lru_cache + +import ftfy +import regex as re + + +@lru_cache() +def default_bpe(): + return os.path.join(os.path.dirname(os.path.abspath(__file__)), "bpe_simple_vocab_16e6.txt.gz") + + +@lru_cache() +def bytes_to_unicode(): + """ + Returns list of utf-8 byte and a corresponding list of unicode strings. + The reversible bpe codes work on unicode strings. + This means you need a large # of unicode characters in your vocab if you want to avoid UNKs. + When you're at something like a 10B token dataset you end up needing around 5K for decent coverage. + This is a signficant percentage of your normal, say, 32K bpe vocab. + To avoid that, we want lookup tables between utf-8 bytes and unicode strings. + And avoids mapping to whitespace/control characters the bpe code barfs on. + """ + bs = list(range(ord("!"), ord("~")+1))+list(range(ord("¡"), ord("¬")+1))+list(range(ord("®"), ord("ÿ")+1)) + cs = bs[:] + n = 0 + for b in range(2**8): + if b not in bs: + bs.append(b) + cs.append(2**8+n) + n += 1 + cs = [chr(n) for n in cs] + return dict(zip(bs, cs)) + + +def get_pairs(word): + """Return set of symbol pairs in a word. + Word is represented as tuple of symbols (symbols being variable-length strings). + """ + pairs = set() + prev_char = word[0] + for char in word[1:]: + pairs.add((prev_char, char)) + prev_char = char + return pairs + + +def basic_clean(text): + text = ftfy.fix_text(text) + text = html.unescape(html.unescape(text)) + return text.strip() + + +def whitespace_clean(text): + text = re.sub(r'\s+', ' ', text) + text = text.strip() + return text + + +class SimpleTokenizer(object): + def __init__(self, bpe_path: str = default_bpe()): + self.byte_encoder = bytes_to_unicode() + self.byte_decoder = {v: k for k, v in self.byte_encoder.items()} + merges = gzip.open(bpe_path).read().decode("utf-8").split('\n') + merges = merges[1:49152-256-2+1] + merges = [tuple(merge.split()) for merge in merges] + vocab = list(bytes_to_unicode().values()) + vocab = vocab + [v+'' for v in vocab] + for merge in merges: + vocab.append(''.join(merge)) + vocab.extend(['<|startoftext|>', '<|endoftext|>']) + self.encoder = dict(zip(vocab, range(len(vocab)))) + self.decoder = {v: k for k, v in self.encoder.items()} + self.bpe_ranks = dict(zip(merges, range(len(merges)))) + self.cache = {'<|startoftext|>': '<|startoftext|>', '<|endoftext|>': '<|endoftext|>'} + self.pat = re.compile(r"""<\|startoftext\|>|<\|endoftext\|>|'s|'t|'re|'ve|'m|'ll|'d|[\p{L}]+|[\p{N}]|[^\s\p{L}\p{N}]+""", re.IGNORECASE) + + def bpe(self, token): + if token in self.cache: + return self.cache[token] + word = tuple(token[:-1]) + ( token[-1] + '',) + pairs = get_pairs(word) + + if not pairs: + return token+'' + + while True: + bigram = min(pairs, key = lambda pair: self.bpe_ranks.get(pair, float('inf'))) + if bigram not in self.bpe_ranks: + break + first, second = bigram + new_word = [] + i = 0 + while i < len(word): + try: + j = word.index(first, i) + new_word.extend(word[i:j]) + i = j + except: + new_word.extend(word[i:]) + break + + if word[i] == first and i < len(word)-1 and word[i+1] == second: + new_word.append(first+second) + i += 2 + else: + new_word.append(word[i]) + i += 1 + new_word = tuple(new_word) + word = new_word + if len(word) == 1: + break + else: + pairs = get_pairs(word) + word = ' '.join(word) + self.cache[token] = word + return word + + def encode(self, text): + bpe_tokens = [] + text = whitespace_clean(basic_clean(text)).lower() + for token in re.findall(self.pat, text): + token = ''.join(self.byte_encoder[b] for b in token.encode('utf-8')) + bpe_tokens.extend(self.encoder[bpe_token] for bpe_token in self.bpe(token).split(' ')) + return bpe_tokens + + def decode(self, tokens): + text = ''.join([self.decoder[token] for token in tokens]) + text = bytearray([self.byte_decoder[c] for c in text]).decode('utf-8', errors="replace").replace('', ' ') + return text diff --git a/detector_codes/CLIPDetection-main/models/clip_models.py b/detector_codes/CLIPDetection-main/models/clip_models.py new file mode 100644 index 0000000000000000000000000000000000000000..62c52b9b802bb9f9d60811da23a7d50228d3e0e3 --- /dev/null +++ b/detector_codes/CLIPDetection-main/models/clip_models.py @@ -0,0 +1,19 @@ +from .clip import clip +from PIL import Image +import torch.nn as nn + + +class CLIPModel(nn.Module): + def __init__(self, name="ViT-L/14", num_classes=1): + super(CLIPModel, self).__init__() + + self.model, self.preprocess = clip.load(name, device="cpu") # self.preprecess will not be used during training, which is handled in Dataset class + self.fc = nn.Linear(768, num_classes ) + + + def forward(self, x, return_feature=False): + features = self.model.encode_image(x) + if return_feature: + return features + return self.fc(features) + diff --git a/detector_codes/CLIPDetection-main/networks/__init__.py b/detector_codes/CLIPDetection-main/networks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/CLIPDetection-main/networks/base_model.py b/detector_codes/CLIPDetection-main/networks/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..1e1024d01e417a118ac7047d21a9ffa9f561c82a --- /dev/null +++ b/detector_codes/CLIPDetection-main/networks/base_model.py @@ -0,0 +1,91 @@ +# from pix2pix +import os +import torch +import torch.nn as nn +from torch.nn import init +from torch.optim import lr_scheduler + + +class BaseModel(nn.Module): + def __init__(self, opt): + super(BaseModel, self).__init__() + self.opt = opt + self.total_steps = 0 + self.isTrain = opt.isTrain + self.lr = opt.lr + self.save_dir = os.path.join(opt.checkpoints_dir, opt.name) + self.device = torch.device('cuda:{}'.format(opt.gpu_ids[0])) if opt.gpu_ids else torch.device('cpu') + + def save_networks(self, epoch): + save_filename = 'model_epoch_%s.pth' % epoch + save_path = os.path.join(self.save_dir, save_filename) + + # serialize model and optimizer to dict + # state_dict = { + # 'model': self.model.state_dict(), + # 'optimizer' : self.optimizer.state_dict(), + # 'total_steps' : self.total_steps, + # } + + torch.save(self.model.state_dict(), save_path) + print(f'Saving model {save_path}') + + # load models from the disk + def load_networks(self, epoch): + load_filename = 'model_epoch_%s.pth' % epoch + load_path = os.path.join(self.save_dir, load_filename) + + print('loading the model from %s' % load_path) + # if you are using PyTorch newer than 0.4 (e.g., built from + # GitHub source), you can remove str() on self.device + state_dict = torch.load(load_path, map_location=self.device) + if hasattr(state_dict, '_metadata'): + del state_dict._metadata + + self.model.load_state_dict(state_dict['model']) + self.total_steps = state_dict['total_steps'] + + if self.isTrain and not self.opt.new_optim: + self.optimizer.load_state_dict(state_dict['optimizer']) + ### move optimizer state to GPU + for state in self.optimizer.state.values(): + for k, v in state.items(): + if torch.is_tensor(v): + state[k] = v.to(self.device) + + for g in self.optimizer.param_groups: + g['lr'] = self.opt.lr + + def eval(self): + self.model.eval() + + def train(self): + self.model.train() + + def test(self): + with torch.no_grad(): + self.forward() + + +def init_weights(net, init_type='normal', gain=0.02): + def init_func(m): + classname = m.__class__.__name__ + if hasattr(m, 'weight') and (classname.find('Conv') != -1 or classname.find('Linear') != -1): + if init_type == 'normal': + init.normal_(m.weight.data, 0.0, gain) + elif init_type == 'xavier': + init.xavier_normal_(m.weight.data, gain=gain) + elif init_type == 'kaiming': + init.kaiming_normal_(m.weight.data, a=0, mode='fan_in') + elif init_type == 'orthogonal': + init.orthogonal_(m.weight.data, gain=gain) + else: + raise NotImplementedError('initialization method [%s] is not implemented' % init_type) + if hasattr(m, 'bias') and m.bias is not None: + init.constant_(m.bias.data, 0.0) + elif classname.find('BatchNorm2d') != -1: + init.normal_(m.weight.data, 1.0, gain) + init.constant_(m.bias.data, 0.0) + + print('initialize network with %s' % init_type) + net.apply(init_func) diff --git a/detector_codes/CLIPDetection-main/networks/trainer.py b/detector_codes/CLIPDetection-main/networks/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..3fd5caf6537f645862801245d3b8a3ab319bca93 --- /dev/null +++ b/detector_codes/CLIPDetection-main/networks/trainer.py @@ -0,0 +1,71 @@ +import functools +import torch +import torch.nn as nn +from models.clip_models import CLIPModel +from networks.base_model import BaseModel, init_weights + + +class Trainer(BaseModel): + def name(self): + return 'Trainer' + + def __init__(self, opt): + super(Trainer, self).__init__(opt) + + if self.isTrain and not opt.continue_train: + self.model = CLIPModel() + + if not self.isTrain or opt.continue_train: + self.model = CLIPModel() + + params = [] + for name, p in self.model.named_parameters(): + if name == "fc.weight" or name == "fc.bias": + params.append(p) + else: + p.requires_grad = False + if self.isTrain: + self.loss_fn = nn.BCEWithLogitsLoss() + # initialize optimizers + if opt.optim == 'adam': + self.optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, betas=(opt.beta1, 0.999)) + elif opt.optim == 'sgd': + self.optimizer = torch.optim.SGD(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, momentum=0.0, weight_decay=0) + else: + raise ValueError("optim should be [adam, sgd]") + + if not self.isTrain or opt.continue_train: + self.load_networks(opt.epoch) + self.model.to(opt.gpu_ids[0]) + + def adjust_learning_rate(self, min_lr=1e-6): + for param_group in self.optimizer.param_groups: + param_group['lr'] *= 0.9 + if param_group['lr'] < min_lr: + return False + self.lr = param_group['lr'] + print('*'*25) + print(f'Changing lr from {param_group["lr"]/0.9} to {param_group["lr"]}') + print('*'*25) + return True + + def set_input(self, input): + self.input = input[0].to(self.device) + self.label = input[1].to(self.device).float() + + + def forward(self): + self.output = self.model(self.input) + + def get_loss(self): + return self.loss_fn(self.output.squeeze(1), self.label) + + def optimize_parameters(self): + self.forward() + self.loss = self.loss_fn(self.output.squeeze(1), self.label) + self.optimizer.zero_grad() + self.loss.backward() + self.optimizer.step() + diff --git a/detector_codes/CLIPDetection-main/options/__init__.py b/detector_codes/CLIPDetection-main/options/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/CLIPDetection-main/options/base_options.py b/detector_codes/CLIPDetection-main/options/base_options.py new file mode 100644 index 0000000000000000000000000000000000000000..c2f6b1bba9ff25f64da51e927383224595df9d26 --- /dev/null +++ b/detector_codes/CLIPDetection-main/options/base_options.py @@ -0,0 +1,118 @@ +import argparse +import os +import time +import util +import torch +#import models +#import data + + +class BaseOptions(): + def __init__(self): + self.initialized = False + + def initialize(self, parser): + parser.add_argument('--mode', default='binary') + parser.add_argument('--arch', type=str, default='res50', help='architecture for binary classification') + + # data augmentation + parser.add_argument('--rz_interp', default='bilinear') + parser.add_argument('--blur_prob', type=float, default=0) + parser.add_argument('--blur_sig', default='0.5') + parser.add_argument('--jpg_prob', type=float, default=0) + parser.add_argument('--jpg_method', default='cv2') + parser.add_argument('--jpg_qual', default='75') + + parser.add_argument('--dataroot', default='./dataset/', help='path to images (should have subfolders trainA, trainB, valA, valB, etc)') + parser.add_argument('--classes', default='', help='image classes to train on') + parser.add_argument('--class_bal', action='store_true') + parser.add_argument('--batch_size', type=int, default=256, help='input batch size') + parser.add_argument('--loadSize', type=int, default=256, help='scale images to this size') + parser.add_argument('--cropSize', type=int, default=224, help='then crop to this size') + parser.add_argument('--gpu_ids', type=str, default='1', help='gpu ids: e.g. 0 0,1,2, 0,2. use -1 for CPU') + parser.add_argument('--name', type=str, default='experiment_name', help='name of the experiment. It decides where to store samples and models') + parser.add_argument('--epoch', type=str, default='latest', help='which epoch to load? set to latest to use latest cached model') + parser.add_argument('--num_threads', default=8, type=int, help='# threads for loading data') + parser.add_argument('--checkpoints_dir', type=str, default='./checkpoints', help='models are saved here') + parser.add_argument('--serial_batches', action='store_true', help='if true, takes images in order to make batches, otherwise takes them randomly') + parser.add_argument('--resize_or_crop', type=str, default='scale_and_crop', help='scaling and cropping of images at load time [resize_and_crop|crop|scale_width|scale_width_and_crop|none]') + parser.add_argument('--no_flip', action='store_true', help='if specified, do not flip the images for data augmentation') + parser.add_argument('--init_type', type=str, default='normal', help='network initialization [normal|xavier|kaiming|orthogonal]') + parser.add_argument('--init_gain', type=float, default=0.02, help='scaling factor for normal, xavier and orthogonal.') + parser.add_argument('--suffix', default='', type=str, help='customized suffix: opt.name = opt.name + suffix: e.g., {model}_{netG}_size{loadSize}') + parser.add_argument('--delr_freq', type=int, default=20, help='frequency of changing lr') + + + self.initialized = True + return parser + + def gather_options(self): + # initialize parser with basic options + if not self.initialized: + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser = self.initialize(parser) + + # get the basic options + opt, _ = parser.parse_known_args() + self.parser = parser + + return opt #parser.parse_args() + + def print_options(self, opt): + message = '' + message += '----------------- Options ---------------\n' + for k, v in sorted(vars(opt).items()): + comment = '' + default = self.parser.get_default(k) + if v != default: + comment = '\t[default: %s]' % str(default) + message += '{:>25}: {:<30}{}\n'.format(str(k), str(v), comment) + message += '----------------- End -------------------' + print(message) + + # save to the disk + + expr_dir = os.path.join(opt.checkpoints_dir, opt.name) + util.mkdirs(expr_dir) + file_name = os.path.join(expr_dir, 'opt.txt') + with open(file_name, 'wt') as opt_file: + opt_file.write(message) + opt_file.write('\n') + + def parse(self, print_options=True): + + opt = self.gather_options() + opt.isTrain = self.isTrain # train or test + opt.name = opt.name + time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()) + # process opt.suffix + if opt.suffix: + suffix = ('_' + opt.suffix.format(**vars(opt))) if opt.suffix != '' else '' + opt.name = opt.name + suffix + + if print_options: + self.print_options(opt) + + # set gpu ids + str_ids = opt.gpu_ids.split(',') + opt.gpu_ids = [] + for str_id in str_ids: + id = int(str_id) + if id >= 0: + opt.gpu_ids.append(id) + if len(opt.gpu_ids) > 0: + torch.cuda.set_device(opt.gpu_ids[0]) + + # additional + opt.classes = opt.classes.split(',') + opt.rz_interp = opt.rz_interp.split(',') + opt.blur_sig = [float(s) for s in opt.blur_sig.split(',')] + opt.jpg_method = opt.jpg_method.split(',') + opt.jpg_qual = [int(s) for s in opt.jpg_qual.split(',')] + if len(opt.jpg_qual) == 2: + opt.jpg_qual = list(range(opt.jpg_qual[0], opt.jpg_qual[1] + 1)) + elif len(opt.jpg_qual) > 2: + raise ValueError("Shouldn't have more than 2 values for --jpg_qual.") + + self.opt = opt + return self.opt diff --git a/detector_codes/CLIPDetection-main/options/test_options.py b/detector_codes/CLIPDetection-main/options/test_options.py new file mode 100644 index 0000000000000000000000000000000000000000..1dba350e3cadf758c2dc39e99a55b4e844e7b16d --- /dev/null +++ b/detector_codes/CLIPDetection-main/options/test_options.py @@ -0,0 +1,17 @@ +from .base_options import BaseOptions + + +class TestOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + # parser.add_argument('--dataroot') + parser.add_argument('--model_path') + parser.add_argument('--no_resize', action='store_true') + parser.add_argument('--no_crop', action='store_true') + parser.add_argument('--eval', action='store_true', help='use eval mode during test time.') + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--lr', type=float, default=0.00002, help='initial learning rate for adam') + parser.add_argument('--niter', type=int, default=0, help='# of iter at starting learning rate') + + self.isTrain = False + return parser diff --git a/detector_codes/CLIPDetection-main/options/train_options.py b/detector_codes/CLIPDetection-main/options/train_options.py new file mode 100644 index 0000000000000000000000000000000000000000..54d56505ee2b241fa6380a920beebd0d402e1fce --- /dev/null +++ b/detector_codes/CLIPDetection-main/options/train_options.py @@ -0,0 +1,41 @@ +from .base_options import BaseOptions + + +class TrainOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--data_aug', action='store_true', help='if specified, perform additional data augmentation (photometric, blurring, jpegging)') + parser.add_argument('--optim', type=str, default='adam', help='optim to use [sgd, adam]') + parser.add_argument('--new_optim', action='store_true', help='new optimizer instead of loading the optim state') + parser.add_argument('--loss_freq', type=int, default=1, help='frequency of showing loss on tensorboard') + parser.add_argument('--save_latest_freq', type=int, default=101, help='frequency of saving the latest results') + parser.add_argument('--save_epoch_freq', type=int, default=200, help='frequency of saving checkpoints at the end of epochs') + parser.add_argument('--continue_train', action='store_true', help='continue training: load the latest model') + parser.add_argument('--epoch_count', type=int, default=10, help='the starting epoch count, we save the model by , +, ...') + parser.add_argument('--last_epoch', type=int, default=-1, help='starting epoch count for scheduler intialization') + parser.add_argument('--train_split', type=str, default='train', help='train, val, test, etc') + parser.add_argument('--val_split', type=str, default='val', help='train, val, test, etc') + parser.add_argument('--niter', type=int, default=101, help='total epoches') + parser.add_argument('--beta1', type=float, default=0.9, help='momentum term of adam') + parser.add_argument('--lr', type=float, default=0.0001, help='initial learning rate for adam') + + parser.add_argument("--kd", default=True, type=str2bool) + parser.add_argument("--kd_weight", default=1, type=int) + # parser.add_argument('--model_path') + # parser.add_argument('--no_resize', action='store_true') + # parser.add_argument('--no_crop', action='store_true') + + self.isTrain = True + return parser + + +def str2bool(v: str) -> bool: + if isinstance(v, bool): + return v + elif v.lower() in ("true", "yes", "on", "y", "t", "1"): + return True + elif v.lower() in ("false", "no", "off", "n", "f", "0"): + return False + else: + return bool(v) diff --git a/detector_codes/CLIPDetection-main/requirements.txt b/detector_codes/CLIPDetection-main/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..5229c276fd6097939ede4e2f015a95352cb177ec --- /dev/null +++ b/detector_codes/CLIPDetection-main/requirements.txt @@ -0,0 +1,7 @@ +scipy +scikit-learn +numpy +opencv_python +Pillow +torch>=1.2.0 +torchvision diff --git a/detector_codes/CLIPDetection-main/test.py b/detector_codes/CLIPDetection-main/test.py new file mode 100644 index 0000000000000000000000000000000000000000..999361f26c2519fda8a4f07c208a7514ce9464e5 --- /dev/null +++ b/detector_codes/CLIPDetection-main/test.py @@ -0,0 +1,112 @@ +import logging +import os +import random +import time + +import numpy as np +import torch +from data import create_dataloader +from models.clip_models import CLIPModel +from options.test_options import TestOptions +from util import printSet +from validate import validate + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if you are using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +seed_torch(100) + +DetectionTests = { + # 'AIGIBench': { 'dataroot': '/data/ziqiang/Benchmark', + # 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + # 'no_crop': True, + # }, + 'jpeg': { + 'dataroot': '/data/ziqiang/jpeg', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'noise': { + 'dataroot': '/data/ziqiang/noise', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'sample': { + 'dataroot': '/data/ziqiang/sample', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, +} + +# Set up logging +logging.basicConfig( + filename='log_test.log', level=logging.INFO, format='%(asctime)s %(message)s' +) +logger = logging.getLogger() + +opt = TestOptions().parse(print_options=False) +log_msg = f'Model_path {opt.model_path}' +print(log_msg) +logger.info(log_msg) + +# Get model +model = CLIPModel() +model.load_state_dict( + torch.load(opt.model_path, map_location=torch.device('cuda:0')), strict=True +) +model.cuda() +model.eval() + +for testSet in DetectionTests.keys(): + dataroot = DetectionTests[testSet]['dataroot'] + printSet(testSet) + logger.info(testSet) + + accs = [] + aps = [] + r_accs = [] + f_accs = [] + current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + print(current_time) + logger.info(current_time) + + for v_id, val in enumerate(os.listdir(dataroot)): + opt.dataroot = '{}/{}'.format(dataroot, val) + opt.classes = '' # os.listdir(opt.dataroot) if multiclass[v_id] else [''] + opt.no_resize = DetectionTests[testSet]['no_resize'] + opt.no_crop = DetectionTests[testSet]['no_crop'] + dataloader = create_dataloader(opt) + acc, ap, r_acc, f_acc = validate(model, dataloader) + accs.append(acc) + aps.append(ap) + r_accs.append(r_acc) + f_accs.append(f_acc) + log_msg = ( + '({} {:12}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id, val, acc * 100, ap * 100, r_acc * 100, f_acc * 100 + ) + ) + print(log_msg) + logger.info(log_msg) + + mean_acc = np.array(accs).mean() * 100 + mean_ap = np.array(aps).mean() * 100 + mean_r_acc = np.array(r_accs).mean() * 100 + mean_f_acc = np.array(f_accs).mean() * 100 + log_msg = '({} {:10}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id + 1, 'Mean', mean_acc, mean_ap, mean_r_acc, mean_f_acc + ) + print(log_msg) + logger.info(log_msg) + print('*' * 25) + logger.info('*' * 25) diff --git a/detector_codes/CLIPDetection-main/train.py b/detector_codes/CLIPDetection-main/train.py new file mode 100644 index 0000000000000000000000000000000000000000..13ba76460e1bc9db1c8473c2732ae81afe6eb16f --- /dev/null +++ b/detector_codes/CLIPDetection-main/train.py @@ -0,0 +1,111 @@ +import logging +import os +import random +import sys +import time + +import numpy as np +import torch +from data import create_dataloader +from networks.trainer import Trainer +from options.train_options import TrainOptions +from tensorboardX import SummaryWriter +from validate import validate + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +def get_val_opt(): + val_opt = TrainOptions().parse(print_options=False) + val_opt.isTrain = False + val_opt.no_resize = False + val_opt.no_crop = False + val_opt.serial_batches = True + return val_opt + + +if __name__ == '__main__': + opt = TrainOptions().parse() + seed_torch(100) + opt.dataroot = f'{opt.dataroot}/{opt.train_split}/' + print(' '.join(list(sys.argv))) + val_opt = get_val_opt() + val_opt.dataroot = f'{val_opt.dataroot}/{val_opt.val_split}/' + + data_loader = create_dataloader(opt) + val_loader = create_dataloader(val_opt) + + train_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'train')) + val_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'val')) + + model = Trainer(opt) + model.train() + + # early_stopping = EarlyStopping(patience=opt.earlystop_epoch, delta=-0.001, verbose=True) + + # Configure logger + logging.basicConfig( + level=logging.INFO, # Set logging level + format='%(asctime)s - %(levelname)s - %(message)s', # Log format + datefmt='%Y-%m-%d %H:%M:%S', # Date format without milliseconds + handlers=[ + logging.FileHandler('log.log', mode='w'), # Log file output + logging.StreamHandler(), + ], + ) # Console output + + print(f'cwd: {os.getcwd()}') + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} Length of data loader: {len(data_loader)}' + ) + + for epoch in range(opt.niter): + for i, data in enumerate(data_loader): + model.total_steps += 1 + + # Move data to cuda + model.set_input(data) + # Train + model.optimize_parameters() + + if model.total_steps % opt.loss_freq == 0: + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}' + ) + train_writer.add_scalar('loss', model.loss, model.total_steps) + + if epoch % opt.save_epoch_freq == 0 and epoch != 0: + # if epoch == 0: + # Optionally save model at each epoch + print(f'saving the model at the end of epoch {epoch}') + model.save_networks(epoch) + + if epoch % 10 == 0 and epoch != 0: + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} changing lr at the end of epoch {epoch}, iters {model.total_steps}' + ) + model.adjust_learning_rate() + + # Validation + model.eval() + acc, ap, r_acc, f_acc = validate(model.model, val_loader) + val_writer.add_scalar('accuracy', acc, model.total_steps) + val_writer.add_scalar('ap', ap, model.total_steps) + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} (Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}' + ) + + model.train() + + model.eval() + model.save_networks('last') diff --git a/detector_codes/CLIPDetection-main/util.py b/detector_codes/CLIPDetection-main/util.py new file mode 100644 index 0000000000000000000000000000000000000000..3ae97ef76a1c165cb11f7ddaf90377196428f7ef --- /dev/null +++ b/detector_codes/CLIPDetection-main/util.py @@ -0,0 +1,49 @@ +import os +import sys + +import torch + + +def mkdirs(paths): + if isinstance(paths, list) and not isinstance(paths, str): + for path in paths: + mkdir(path) + else: + mkdir(paths) + + +def mkdir(path): + if not os.path.exists(path): + os.makedirs(path) + + +def unnormalize(tens, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]): + # assume tensor of shape NxCxHxW + return ( + tens * torch.Tensor(std)[None, :, None, None] + + torch.Tensor(mean)[None, :, None, None] + ) + + +class Logger(object): + """Log stdout messages.""" + + def __init__(self, outfile): + self.terminal = sys.stdout + self.log = open(outfile, 'a') + sys.stdout = self + + def write(self, message): + self.terminal.write(message) + self.log.write(message) + + def flush(self): + self.terminal.flush() + + +def printSet(set_str): + set_str = str(set_str) + num = len(set_str) + print('=' * num * 3) + print(' ' * num + set_str) + print('=' * num * 3) diff --git a/detector_codes/CLIPDetection-main/validate.py b/detector_codes/CLIPDetection-main/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..9c8a9c64e7be2a0ce0119baca2fbca77a0be12dc --- /dev/null +++ b/detector_codes/CLIPDetection-main/validate.py @@ -0,0 +1,21 @@ +import numpy as np +import torch +from sklearn.metrics import accuracy_score, average_precision_score + + +def validate(model, val_loader): + # data_loader = create_dataloader(opt) + + with torch.no_grad(): + y_true, y_pred = [], [] + for img, label in val_loader: + in_tens = img.cuda() + y_pred.extend(model(in_tens).sigmoid().flatten().tolist()) + y_true.extend(label.flatten().tolist()) + + y_true, y_pred = np.array(y_true), np.array(y_pred) + r_acc = accuracy_score(y_true[y_true == 0], y_pred[y_true == 0] > 0.5) + f_acc = accuracy_score(y_true[y_true == 1], y_pred[y_true == 1] > 0.5) + acc = accuracy_score(y_true, y_pred > 0.5) + ap = average_precision_score(y_true, y_pred) + return acc, ap, r_acc, f_acc diff --git a/detector_codes/CNNDetection-master/LICENSE.txt b/detector_codes/CNNDetection-master/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..18000632d87af568599da22297ce684e323449d6 --- /dev/null +++ b/detector_codes/CNNDetection-master/LICENSE.txt @@ -0,0 +1,440 @@ +Copyright (c) 2020, Sheng-Yu Wang, Oliver Wang, Richard Zhang, Andrew Owens, Alexei A. Efros. All rights reserved. + + +Attribution-NonCommercial-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International +Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial-ShareAlike 4.0 International Public License +("Public License"). To the extent this Public License may be +interpreted as a contract, You are granted the Licensed Rights in +consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the +Licensor receives from making the Licensed Material available under +these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-NC-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution, NonCommercial, and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. NonCommercial means not primarily intended for or directed towards + commercial advantage or monetary compensation. For purposes of + this Public License, the exchange of the Licensed Material for + other material subject to Copyright and Similar Rights by digital + file-sharing or similar means is NonCommercial provided there is + no payment of monetary compensation in connection with the + exchange. + + l. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + m. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + n. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part, for NonCommercial purposes only; and + + b. produce, reproduce, and Share Adapted Material for + NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-NC-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database for NonCommercial purposes + only; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + including for purposes of Section 3(b); and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/detector_codes/CNNDetection-master/data/__init__.py b/detector_codes/CNNDetection-master/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6096c60fffa429e92c99e7fc310fad07563e4446 --- /dev/null +++ b/detector_codes/CNNDetection-master/data/__init__.py @@ -0,0 +1,40 @@ +import torch +import numpy as np +from torch.utils.data.sampler import WeightedRandomSampler + +from .datasets import dataset_folder + + +def get_dataset(opt): + dset_lst = [] + for cls in opt.classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) + + +def get_bal_sampler(dataset): + targets = [] + for d in dataset.datasets: + targets.extend(d.targets) + + ratio = np.bincount(targets) + w = 1. / torch.tensor(ratio, dtype=torch.float) + sample_weights = w[targets] + sampler = WeightedRandomSampler(weights=sample_weights, + num_samples=len(sample_weights)) + return sampler + + +def create_dataloader(opt): + shuffle = not opt.serial_batches if (opt.isTrain and not opt.class_bal) else False + dataset = get_dataset(opt) + sampler = get_bal_sampler(dataset) if opt.class_bal else None + + data_loader = torch.utils.data.DataLoader(dataset, + batch_size=opt.batch_size, + shuffle=shuffle, + sampler=sampler, + num_workers=int(opt.num_threads)) + return data_loader diff --git a/detector_codes/CNNDetection-master/data/datasets.py b/detector_codes/CNNDetection-master/data/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..0fe3b65af50a212c65d515ebf3f2146e12b32d53 --- /dev/null +++ b/detector_codes/CNNDetection-master/data/datasets.py @@ -0,0 +1,134 @@ +import cv2 +import numpy as np +import torchvision.datasets as datasets +import torchvision.transforms as transforms +import torchvision.transforms.functional as TF +from random import random, choice +from io import BytesIO +from PIL import Image +from PIL import ImageFile +from scipy.ndimage.filters import gaussian_filter + + +ImageFile.LOAD_TRUNCATED_IMAGES = True + +def dataset_folder(opt, root): + if opt.mode == 'binary': + return binary_dataset(opt, root) + if opt.mode == 'filename': + return FileNameDataset(opt, root) + raise ValueError('opt.mode needs to be binary or filename.') + + +def binary_dataset(opt, root): + if opt.isTrain: + crop_func = transforms.RandomCrop(opt.cropSize) + elif opt.no_crop: + crop_func = transforms.Lambda(lambda img: img) + else: + crop_func = transforms.CenterCrop(opt.cropSize) + + if opt.isTrain and not opt.no_flip: + flip_func = transforms.RandomHorizontalFlip() + else: + flip_func = transforms.Lambda(lambda img: img) + if not opt.isTrain and opt.no_resize: + rz_func = transforms.Lambda(lambda img: img) + else: + rz_func = transforms.Lambda(lambda img: custom_resize(img, opt)) + + dset = datasets.ImageFolder( + root, + transforms.Compose([ + rz_func, + transforms.Lambda(lambda img: data_augment(img, opt)), + crop_func, + flip_func, + transforms.ToTensor(), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ])) + return dset + + +class FileNameDataset(datasets.ImageFolder): + def name(self): + return 'FileNameDataset' + + def __init__(self, opt, root): + self.opt = opt + super().__init__(root) + + def __getitem__(self, index): + # Loading sample + path, target = self.samples[index] + return path + + +def data_augment(img, opt): + img = np.array(img) + + if random() < opt.blur_prob: + sig = sample_continuous(opt.blur_sig) + gaussian_blur(img, sig) + + if random() < opt.jpg_prob: + method = sample_discrete(opt.jpg_method) + qual = sample_discrete(opt.jpg_qual) + img = jpeg_from_key(img, qual, method) + + return Image.fromarray(img) + + +def sample_continuous(s): + if len(s) == 1: + return s[0] + if len(s) == 2: + rg = s[1] - s[0] + return random() * rg + s[0] + raise ValueError("Length of iterable s should be 1 or 2.") + + +def sample_discrete(s): + if len(s) == 1: + return s[0] + return choice(s) + + +def gaussian_blur(img, sigma): + gaussian_filter(img[:,:,0], output=img[:,:,0], sigma=sigma) + gaussian_filter(img[:,:,1], output=img[:,:,1], sigma=sigma) + gaussian_filter(img[:,:,2], output=img[:,:,2], sigma=sigma) + + +def cv2_jpg(img, compress_val): + img_cv2 = img[:,:,::-1] + encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), compress_val] + result, encimg = cv2.imencode('.jpg', img_cv2, encode_param) + decimg = cv2.imdecode(encimg, 1) + return decimg[:,:,::-1] + + +def pil_jpg(img, compress_val): + out = BytesIO() + img = Image.fromarray(img) + img.save(out, format='jpeg', quality=compress_val) + img = Image.open(out) + # load from memory before ByteIO closes + img = np.array(img) + out.close() + return img + + +jpeg_dict = {'cv2': cv2_jpg, 'pil': pil_jpg} +def jpeg_from_key(img, compress_val, key): + method = jpeg_dict[key] + return method(img, compress_val) + + +rz_dict = {'bilinear': Image.BILINEAR, + 'bicubic': Image.BICUBIC, + 'lanczos': Image.LANCZOS, + 'nearest': Image.NEAREST} +def custom_resize(img, opt): + interp = sample_discrete(opt.rz_interp) + return TF.resize(img, opt.loadSize, interpolation=rz_dict[interp]) diff --git a/detector_codes/CNNDetection-master/demo.py b/detector_codes/CNNDetection-master/demo.py new file mode 100644 index 0000000000000000000000000000000000000000..775357d63ac30d5ef2eaa9c6df9679f6ec53ce48 --- /dev/null +++ b/detector_codes/CNNDetection-master/demo.py @@ -0,0 +1,59 @@ +import argparse + +import torch +import torch.nn +import torchvision.transforms as transforms +from networks.resnet import resnet50 +from PIL import Image + +parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) +parser.add_argument('-f', '--file', default='examples_realfakedir') +parser.add_argument( + '-m', '--model_path', type=str, default='weights/blur_jpg_prob0.5.pth' +) +parser.add_argument( + '-c', + '--crop', + type=int, + default=None, + help='by default, do not crop. specify crop size', +) +parser.add_argument( + '--use_cpu', action='store_true', help='uses gpu by default, turn on to use cpu' +) + +opt = parser.parse_args() + +model = resnet50(num_classes=1) +state_dict = torch.load(opt.model_path, map_location='cpu') +model.load_state_dict(state_dict['model']) +if not opt.use_cpu: + model.cuda() +model.eval() + +# Transform +trans_init = [] +if opt.crop is not None: + trans_init = [ + transforms.CenterCrop(opt.crop), + ] + print('Cropping to [%i]' % opt.crop) +else: + print('Not cropping') +trans = transforms.Compose( + trans_init + + [ + transforms.ToTensor(), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ] +) + +img = trans(Image.open(opt.file).convert('RGB')) + +with torch.no_grad(): + in_tens = img.unsqueeze(0) + if not opt.use_cpu: + in_tens = in_tens.cuda() + prob = model(in_tens).sigmoid().item() + +print('probability of being synthetic: {:.2f}%'.format(prob * 100)) diff --git a/detector_codes/CNNDetection-master/demo_dir.py b/detector_codes/CNNDetection-master/demo_dir.py new file mode 100644 index 0000000000000000000000000000000000000000..493c12260daf07062e8b92d5ef0ef14772f72555 --- /dev/null +++ b/detector_codes/CNNDetection-master/demo_dir.py @@ -0,0 +1,118 @@ +import argparse + +import numpy as np +import torch +import torch.utils.data +import torchvision.datasets as datasets +import torchvision.transforms as transforms +from networks.resnet import resnet50 +from sklearn.metrics import accuracy_score, average_precision_score +from tqdm import tqdm + +parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) +parser.add_argument('-d', '--dir', nargs='+', type=str, default='examples/realfakedir') +parser.add_argument( + '-m', '--model_path', type=str, default='weights/blur_jpg_prob0.5.pth' +) +parser.add_argument('-b', '--batch_size', type=int, default=32) +parser.add_argument('-j', '--workers', type=int, default=4, help='number of workers') +parser.add_argument( + '-c', + '--crop', + type=int, + default=None, + help='by default, do not crop. specify crop size', +) +parser.add_argument( + '--use_cpu', action='store_true', help='uses gpu by default, turn on to use cpu' +) +parser.add_argument( + '--size_only', action='store_true', help='only look at sizes of images in dataset' +) + +opt = parser.parse_args() + +# Load model +if not opt.size_only: + model = resnet50(num_classes=1) + if opt.model_path is not None: + state_dict = torch.load(opt.model_path, map_location='cpu') + model.load_state_dict(state_dict['model']) + model.eval() + if not opt.use_cpu: + model.cuda() + +# Transform +trans_init = [] +if opt.crop is not None: + trans_init = [ + transforms.CenterCrop(opt.crop), + ] + print('Cropping to [%i]' % opt.crop) +else: + print('Not cropping') +trans = transforms.Compose( + trans_init + + [ + transforms.ToTensor(), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ] +) + +# Dataset loader +if type(opt.dir) == str: + opt.dir = [ + opt.dir, + ] + +print('Loading [%i] datasets' % len(opt.dir)) +data_loaders = [] +for dir in opt.dir: + dataset = datasets.ImageFolder(dir, transform=trans) + data_loaders += [ + torch.utils.data.DataLoader( + dataset, batch_size=opt.batch_size, shuffle=False, num_workers=opt.workers + ), + ] + +y_true, y_pred = [], [] +Hs, Ws = [], [] +with torch.no_grad(): + for data_loader in data_loaders: + for data, label in tqdm(data_loader): + # for data, label in data_loader: + Hs.append(data.shape[2]) + Ws.append(data.shape[3]) + + y_true.extend(label.flatten().tolist()) + if not opt.size_only: + if not opt.use_cpu: + data = data.cuda() + y_pred.extend(model(data).sigmoid().flatten().tolist()) + +Hs, Ws = np.array(Hs), np.array(Ws) +y_true, y_pred = np.array(y_true), np.array(y_pred) + +print( + 'Average sizes: [{:2.2f}+/-{:2.2f}] x [{:2.2f}+/-{:2.2f}] = [{:2.2f}+/-{:2.2f} Mpix]'.format( + np.mean(Hs), + np.std(Hs), + np.mean(Ws), + np.std(Ws), + np.mean(Hs * Ws) / 1e6, + np.std(Hs * Ws) / 1e6, + ) +) +print('Num reals: {}, Num fakes: {}'.format(np.sum(1 - y_true), np.sum(y_true))) + +if not opt.size_only: + r_acc = accuracy_score(y_true[y_true == 0], y_pred[y_true == 0] > 0.5) + f_acc = accuracy_score(y_true[y_true == 1], y_pred[y_true == 1] > 0.5) + acc = accuracy_score(y_true, y_pred > 0.5) + ap = average_precision_score(y_true, y_pred) + + print( + 'AP: {:2.2f}, Acc: {:2.2f}, Acc (real): {:2.2f}, Acc (fake): {:2.2f}'.format( + ap * 100.0, acc * 100.0, r_acc * 100.0, f_acc * 100.0 + ) + ) diff --git a/detector_codes/CNNDetection-master/earlystop.py b/detector_codes/CNNDetection-master/earlystop.py new file mode 100644 index 0000000000000000000000000000000000000000..3852cb9f5f0dfb046defac071faf1e531e32f0e0 --- /dev/null +++ b/detector_codes/CNNDetection-master/earlystop.py @@ -0,0 +1,46 @@ +import numpy as np + + +class EarlyStopping: + """Early stops the training if validation loss doesn't improve after a given patience.""" + + def __init__(self, patience=1, verbose=False, delta=0): + """ + Args: + patience (int): How long to wait after last time validation loss improved. + Default: 7 + verbose (bool): If True, prints a message for each validation loss improvement. + Default: False + delta (float): Minimum change in the monitored quantity to qualify as an improvement. + Default: 0 + """ + self.patience = patience + self.verbose = verbose + self.counter = 0 + self.best_score = None + self.early_stop = False + self.score_max = -np.Inf + self.delta = delta + + def __call__(self, score, model): + if self.best_score is None: + self.best_score = score + self.save_checkpoint(score, model) + elif score < self.best_score - self.delta: + self.counter += 1 + print(f'EarlyStopping counter: {self.counter} out of {self.patience}') + if self.counter >= self.patience: + self.early_stop = True + else: + self.best_score = score + self.save_checkpoint(score, model) + self.counter = 0 + + def save_checkpoint(self, score, model): + """Saves model when validation loss decrease.""" + if self.verbose: + print( + f'Validation accuracy increased ({self.score_max:.6f} --> {score:.6f}). Saving model ...' + ) + model.save_networks('best') + self.score_max = score diff --git a/detector_codes/CNNDetection-master/eval.py b/detector_codes/CNNDetection-master/eval.py new file mode 100644 index 0000000000000000000000000000000000000000..d7a240846f533fbca3ea68c72275f8e259983865 --- /dev/null +++ b/detector_codes/CNNDetection-master/eval.py @@ -0,0 +1,68 @@ +import logging +import os +import time + +import numpy as np +import torch +from eval_config import * +from networks.resnet import resnet50 +from options.test_options import TestOptions +from validate import validate + +logging.basicConfig( + filename='log_test.log', level=logging.INFO, format='%(asctime)s %(message)s' +) +logger = logging.getLogger() + +# Running tests +opt = TestOptions().parse(print_options=False) +model_name = os.path.basename(model_path).replace('.pth', '') +rows = [ + ['{} model testing on...'.format(model_name)], + ['testset', 'accuracy', 'avg precision'], +] + +log_msg = f'Model_path {opt.model_path}' +print(log_msg) +logger.info(log_msg) +print('{} model testing on...'.format(model_name)) +accs = [] +aps = [] +r_accs = [] +f_accs = [] +current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) +print(current_time) +logger.info(current_time) +for v_id, val in enumerate(vals): + opt.dataroot = '{}/{}'.format(dataroot, val) + opt.classes = os.listdir(opt.dataroot) if multiclass[v_id] else [''] + opt.no_resize = True # testing without resizing by default + + model = resnet50(num_classes=1) + state_dict = torch.load(model_path, map_location='cpu') + model.load_state_dict(state_dict['model']) + model.cuda() + model.eval() + + acc, ap, r_acc, f_acc, _, _ = validate(model, opt) + accs.append(acc) + aps.append(ap) + r_accs.append(r_acc) + f_accs.append(f_acc) + log_msg = '({} {:12}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id, val, acc * 100, ap * 100, r_acc * 100, f_acc * 100 + ) + print(log_msg) + logger.info(log_msg) + +mean_acc = np.array(accs).mean() * 100 +mean_ap = np.array(aps).mean() * 100 +mean_r_acc = np.array(r_accs).mean() * 100 +mean_f_acc = np.array(f_accs).mean() * 100 +log_msg = '({} {:10}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id + 1, 'Mean', mean_acc, mean_ap, mean_r_acc, mean_f_acc +) +print(log_msg) +logger.info(log_msg) +print('*' * 25) +logger.info('*' * 25) diff --git a/detector_codes/CNNDetection-master/eval_config.py b/detector_codes/CNNDetection-master/eval_config.py new file mode 100644 index 0000000000000000000000000000000000000000..9cd36bea54cafebdf91dfab48522d44fff1fabac --- /dev/null +++ b/detector_codes/CNNDetection-master/eval_config.py @@ -0,0 +1,44 @@ +from util import mkdir + +# directory to store the results +results_dir = './results/' +mkdir(results_dir) + + +# dataroot = '/data/ziqiang/Benchmark' +# dataroot = '/data/ziqiang/jpeg' +# dataroot = '/data/ziqiang/noise' +dataroot = '/data/ziqiang/sample' + + +vals = [ + 'BlendFace', + 'BLIP', + 'CommunityAI', + 'DALLE-3', + 'E4S', + 'FaceSwap', + 'FLUX1-dev', + 'GLIDE', + 'Imagen3', + 'Infinite-ID', + 'InstantID', + 'InSwap', + 'IP-Adapter', + 'Midjourney', + 'PhotoMaker', + 'ProGAN', + 'R3GAN', + 'SD3', + 'SDXL', + 'SimSwap', + 'SocialRF', + 'StyleGAN-XL', + 'StyleGAN3', + 'StyleSwim', + 'WFIR', +] +multiclass = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + +# model +model_path = '/data/ziqiang/yjz/code/CNNDetection-master/checkpoints/4class-car-cat-chair-horse2025_04_12_14_39_53/model_epoch_best.pth' diff --git a/detector_codes/CNNDetection-master/log_test.log b/detector_codes/CNNDetection-master/log_test.log new file mode 100644 index 0000000000000000000000000000000000000000..43a1a3acd3c509fa5972b54bc02c9fa147b10ac7 --- /dev/null +++ b/detector_codes/CNNDetection-master/log_test.log @@ -0,0 +1,210 @@ +2025-05-09 02:46:47,266 Model_path /data/ziqiang/yjz/code/CNNDetection-master/checkpoints/4class-car-cat-chair-horse2025_04_12_14_39_53/model_epoch_best.pth +2025-05-09 02:46:47,266 2025-05-09 02:46:47 +2025-05-09 02:47:26,536 (0 BlendFace ) acc: 49.3; ap: 34.2; r_acc: 98.5; f_acc: 0.0 +2025-05-09 02:47:49,990 (1 BLIP ) acc: 49.8; ap: 44.7; r_acc: 99.6; f_acc: 0.0 +2025-05-09 02:48:32,934 (2 CommunityAI ) acc: 49.9; ap: 50.5; r_acc: 99.1; f_acc: 0.8 +2025-05-09 02:49:14,336 (3 DALLE-3 ) acc: 50.4; ap: 53.8; r_acc: 99.1; f_acc: 1.7 +2025-05-09 02:49:45,321 (4 E4S ) acc: 49.6; ap: 35.2; r_acc: 99.1; f_acc: 0.0 +2025-05-09 02:50:07,782 (5 FaceSwap ) acc: 50.1; ap: 44.3; r_acc: 99.0; f_acc: 0.0 +2025-05-09 02:50:50,545 (6 FLUX1-dev ) acc: 50.3; ap: 50.3; r_acc: 98.9; f_acc: 1.6 +2025-05-09 02:51:13,370 (7 GLIDE ) acc: 51.5; ap: 67.3; r_acc: 99.4; f_acc: 3.7 +2025-05-09 02:51:58,603 (8 Imagen3 ) acc: 51.0; ap: 50.4; r_acc: 99.2; f_acc: 2.7 +2025-05-09 02:52:46,190 (9 Infinite-ID ) acc: 50.8; ap: 55.8; r_acc: 99.1; f_acc: 2.5 +2025-05-09 02:53:49,904 (10 InstantID ) acc: 50.1; ap: 67.1; r_acc: 99.0; f_acc: 1.2 +2025-05-09 02:54:11,754 (11 InSwap ) acc: 50.1; ap: 44.3; r_acc: 99.1; f_acc: 0.0 +2025-05-09 02:56:05,435 (12 IP-Adapter ) acc: 50.0; ap: 50.9; r_acc: 99.2; f_acc: 0.9 +2025-05-09 03:00:45,299 (13 Midjourney ) acc: 49.9; ap: 39.3; r_acc: 98.2; f_acc: 1.6 +2025-05-09 03:01:33,090 (14 PhotoMaker ) acc: 49.6; ap: 51.5; r_acc: 99.1; f_acc: 0.1 +2025-05-09 03:01:52,728 (15 ProGAN ) acc: 97.9; ap: 99.9; r_acc: 99.9; f_acc: 95.9 +2025-05-09 03:02:22,471 (16 R3GAN ) acc: 49.9; ap: 48.4; r_acc: 99.3; f_acc: 0.5 +2025-05-09 03:03:08,549 (17 SD3 ) acc: 52.8; ap: 66.3; r_acc: 98.7; f_acc: 7.0 +2025-05-09 03:03:51,214 (18 SDXL ) acc: 52.6; ap: 65.5; r_acc: 98.7; f_acc: 6.4 +2025-05-09 03:04:22,823 (19 SimSwap ) acc: 49.7; ap: 45.3; r_acc: 99.2; f_acc: 0.1 +2025-05-09 03:07:00,360 (20 SocialRF ) acc: 50.3; ap: 46.3; r_acc: 97.2; f_acc: 3.4 +2025-05-09 03:07:59,876 (21 StyleGAN-XL ) acc: 49.7; ap: 60.0; r_acc: 99.3; f_acc: 0.2 +2025-05-09 03:09:22,628 (22 StyleGAN3 ) acc: 64.0; ap: 91.6; r_acc: 99.1; f_acc: 29.0 +2025-05-09 03:10:06,964 (23 StyleSwim ) acc: 58.0; ap: 88.9; r_acc: 98.8; f_acc: 17.2 +2025-05-09 03:10:19,355 (24 WFIR ) acc: 62.1; ap: 89.4; r_acc: 99.1; f_acc: 25.0 +2025-05-09 03:10:19,355 (25 Mean ) acc: 53.6; ap: 57.6; r_acc: 99.0; f_acc: 8.1 +2025-05-09 03:10:19,356 ************************* +2025-05-01 06:08:24,566 Model_path /data/ziqiang/yjz/code/CNNDetection-master/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_13_03_19_12/model_epoch_best.pth +2025-05-01 06:08:24,566 2025-05-01 06:08:24 +2025-05-01 06:08:58,215 (0 BlendFace ) acc: 52.4; ap: 73.5; r_acc: 98.7; f_acc: 6.2 +2025-05-01 06:09:14,153 (1 BLIP ) acc: 77.2; ap: 92.9; r_acc: 98.0; f_acc: 56.5 +2025-05-01 06:09:50,673 (2 CommunityAI ) acc: 51.3; ap: 59.1; r_acc: 97.3; f_acc: 5.3 +2025-05-01 06:10:29,941 (3 DALLE-3 ) acc: 53.9; ap: 68.6; r_acc: 98.1; f_acc: 9.8 +2025-05-01 06:10:56,124 (4 E4S ) acc: 51.1; ap: 68.9; r_acc: 98.1; f_acc: 4.1 +2025-05-01 06:11:14,999 (5 FaceSwap ) acc: 50.3; ap: 58.7; r_acc: 98.1; f_acc: 1.4 +2025-05-01 06:11:57,255 (6 FLUX1-dev ) acc: 57.4; ap: 72.3; r_acc: 98.5; f_acc: 16.3 +2025-05-01 06:12:15,800 (7 GLIDE ) acc: 51.1; ap: 60.1; r_acc: 97.6; f_acc: 4.6 +2025-05-01 06:13:00,624 (8 Imagen3 ) acc: 51.2; ap: 57.4; r_acc: 98.2; f_acc: 4.2 +2025-05-01 06:13:45,956 (9 Infinite-ID ) acc: 49.7; ap: 49.5; r_acc: 98.3; f_acc: 1.1 +2025-05-01 06:14:46,879 (10 InstantID ) acc: 53.2; ap: 80.2; r_acc: 98.3; f_acc: 8.1 +2025-05-01 06:15:05,432 (11 InSwap ) acc: 54.5; ap: 77.9; r_acc: 98.3; f_acc: 9.7 +2025-05-01 06:15:51,633 (12 IP-Adapter ) acc: 52.0; ap: 65.8; r_acc: 97.9; f_acc: 6.0 +2025-05-01 06:16:31,610 (13 Midjourney ) acc: 52.3; ap: 59.8; r_acc: 98.9; f_acc: 5.8 +2025-05-01 06:17:19,173 (14 PhotoMaker ) acc: 50.1; ap: 58.2; r_acc: 98.4; f_acc: 1.7 +2025-05-01 06:17:27,364 (15 ProGAN ) acc: 97.6; ap: 99.9; r_acc: 99.9; f_acc: 95.3 +2025-05-01 06:17:49,424 (16 R3GAN ) acc: 50.4; ap: 52.7; r_acc: 98.6; f_acc: 2.3 +2025-05-01 06:18:32,661 (17 SD3 ) acc: 55.8; ap: 73.1; r_acc: 98.4; f_acc: 13.3 +2025-05-01 06:19:14,339 (18 SDXL ) acc: 52.8; ap: 64.2; r_acc: 98.4; f_acc: 7.3 +2025-05-01 06:19:34,077 (19 SimSwap ) acc: 52.1; ap: 70.0; r_acc: 98.0; f_acc: 6.2 +2025-05-01 06:22:53,699 (20 SocialRF ) acc: 51.1; ap: 50.6; r_acc: 94.7; f_acc: 7.5 +2025-05-01 06:23:37,830 (21 StyleGAN-XL ) acc: 49.5; ap: 50.8; r_acc: 98.2; f_acc: 0.7 +2025-05-01 06:24:13,108 (22 StyleGAN3 ) acc: 54.2; ap: 85.2; r_acc: 99.3; f_acc: 9.1 +2025-05-01 06:24:56,085 (23 StyleSwim ) acc: 52.6; ap: 76.5; r_acc: 98.3; f_acc: 6.9 +2025-05-01 06:25:07,817 (24 WFIR ) acc: 49.8; ap: 50.1; r_acc: 99.4; f_acc: 0.2 +2025-05-01 06:25:07,817 (25 Mean ) acc: 54.9; ap: 67.0; r_acc: 98.2; f_acc: 11.6 +2025-05-01 06:25:07,817 ************************* +2025-05-01 06:29:36,623 Model_path /data/ziqiang/yjz/code/CNNDetection-master/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_13_03_19_12/model_epoch_best.pth +2025-05-01 06:29:36,623 2025-05-01 06:29:36 +2025-05-01 06:30:00,711 (0 BlendFace ) acc: 60.4; ap: 75.3; r_acc: 96.5; f_acc: 24.4 +2025-05-01 06:30:27,208 (1 BLIP ) acc: 64.7; ap: 76.4; r_acc: 89.8; f_acc: 39.6 +2025-05-01 06:31:19,860 (2 CommunityAI ) acc: 50.6; ap: 60.8; r_acc: 98.4; f_acc: 2.9 +2025-05-01 06:31:54,979 (3 DALLE-3 ) acc: 54.7; ap: 62.0; r_acc: 93.4; f_acc: 16.0 +2025-05-01 06:32:18,173 (4 E4S ) acc: 64.8; ap: 81.2; r_acc: 96.1; f_acc: 33.4 +2025-05-01 06:32:39,878 (5 FaceSwap ) acc: 55.9; ap: 64.8; r_acc: 92.4; f_acc: 18.5 +2025-05-01 06:33:16,054 (6 FLUX1-dev ) acc: 55.7; ap: 62.7; r_acc: 94.1; f_acc: 17.4 +2025-05-01 06:33:37,789 (7 GLIDE ) acc: 52.5; ap: 59.1; r_acc: 92.3; f_acc: 12.8 +2025-05-01 06:34:15,385 (8 Imagen3 ) acc: 50.0; ap: 48.1; r_acc: 94.1; f_acc: 6.0 +2025-05-01 06:34:53,544 (9 Infinite-ID ) acc: 49.6; ap: 53.8; r_acc: 93.7; f_acc: 5.6 +2025-05-01 06:35:34,517 (10 InstantID ) acc: 53.4; ap: 67.3; r_acc: 93.5; f_acc: 13.4 +2025-05-01 06:35:55,788 (11 InSwap ) acc: 63.0; ap: 75.2; r_acc: 92.3; f_acc: 33.1 +2025-05-01 06:36:30,007 (12 IP-Adapter ) acc: 51.3; ap: 56.8; r_acc: 92.8; f_acc: 9.8 +2025-05-01 06:36:56,183 (13 Midjourney ) acc: 52.6; ap: 59.1; r_acc: 99.0; f_acc: 6.2 +2025-05-01 06:37:32,793 (14 PhotoMaker ) acc: 52.9; ap: 60.3; r_acc: 93.9; f_acc: 11.9 +2025-05-01 06:37:43,155 (15 ProGAN ) acc: 92.4; ap: 98.7; r_acc: 98.8; f_acc: 86.0 +2025-05-01 06:38:05,449 (16 R3GAN ) acc: 56.1; ap: 66.4; r_acc: 93.4; f_acc: 18.8 +2025-05-01 06:38:45,516 (17 SD3 ) acc: 52.2; ap: 58.8; r_acc: 94.5; f_acc: 10.1 +2025-05-01 06:39:22,043 (18 SDXL ) acc: 57.7; ap: 72.5; r_acc: 94.5; f_acc: 21.0 +2025-05-01 06:39:44,423 (19 SimSwap ) acc: 58.5; ap: 67.5; r_acc: 92.4; f_acc: 24.5 +2025-05-01 06:40:50,779 (20 SocialRF ) acc: 50.3; ap: 49.0; r_acc: 92.5; f_acc: 8.0 +2025-05-01 06:41:25,874 (21 StyleGAN-XL ) acc: 47.3; ap: 45.1; r_acc: 93.9; f_acc: 0.7 +2025-05-01 06:41:58,588 (22 StyleGAN3 ) acc: 49.0; ap: 57.7; r_acc: 92.5; f_acc: 5.4 +2025-05-01 06:42:33,333 (23 StyleSwim ) acc: 48.1; ap: 50.4; r_acc: 94.1; f_acc: 2.2 +2025-05-01 06:42:41,196 (24 WFIR ) acc: 51.3; ap: 62.3; r_acc: 99.3; f_acc: 3.3 +2025-05-01 06:42:41,196 (25 Mean ) acc: 55.8; ap: 63.7; r_acc: 94.3; f_acc: 17.2 +2025-05-01 06:42:41,196 ************************* +2025-05-01 06:45:51,496 Model_path /data/ziqiang/yjz/code/CNNDetection-master/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_13_03_19_12/model_epoch_best.pth +2025-05-01 06:45:51,496 2025-05-01 06:45:51 +2025-05-01 06:47:51,089 (0 BlendFace ) acc: 51.3; ap: 63.3; r_acc: 98.7; f_acc: 3.9 +2025-05-01 06:49:28,682 (1 BLIP ) acc: 49.8; ap: 40.8; r_acc: 96.2; f_acc: 3.3 +2025-05-01 06:56:03,034 (2 CommunityAI ) acc: 49.1; ap: 37.3; r_acc: 97.2; f_acc: 1.0 +2025-05-01 07:00:02,481 (3 DALLE-3 ) acc: 50.0; ap: 45.0; r_acc: 97.6; f_acc: 2.5 +2025-05-01 07:02:47,726 (4 E4S ) acc: 50.5; ap: 54.9; r_acc: 98.6; f_acc: 2.4 +2025-05-01 07:04:08,100 (5 FaceSwap ) acc: 50.2; ap: 45.4; r_acc: 97.0; f_acc: 2.3 +2025-05-01 07:08:44,548 (6 FLUX1-dev ) acc: 49.3; ap: 39.5; r_acc: 97.8; f_acc: 0.8 +2025-05-01 07:10:10,663 (7 GLIDE ) acc: 49.2; ap: 44.8; r_acc: 96.7; f_acc: 1.7 +2025-05-01 07:16:59,498 (8 Imagen3 ) acc: 48.8; ap: 35.1; r_acc: 97.4; f_acc: 0.2 +2025-05-01 07:23:32,084 (9 Infinite-ID ) acc: 48.7; ap: 33.0; r_acc: 97.4; f_acc: 0.0 +2025-05-01 07:29:51,555 (10 InstantID ) acc: 48.9; ap: 42.1; r_acc: 97.6; f_acc: 0.3 +2025-05-01 07:31:58,150 (11 InSwap ) acc: 50.8; ap: 51.6; r_acc: 96.8; f_acc: 3.8 +2025-05-01 07:37:42,735 (12 IP-Adapter ) acc: 48.3; ap: 38.3; r_acc: 96.5; f_acc: 0.1 +2025-05-01 07:50:47,399 (13 Midjourney ) acc: 50.6; ap: 57.4; r_acc: 99.9; f_acc: 1.4 +2025-05-01 07:59:50,869 (14 PhotoMaker ) acc: 48.8; ap: 37.3; r_acc: 97.4; f_acc: 0.2 +2025-05-01 08:07:24,440 (15 ProGAN ) acc: 66.0; ap: 94.5; r_acc: 99.9; f_acc: 32.0 +2025-05-01 08:09:21,570 (16 R3GAN ) acc: 48.6; ap: 31.2; r_acc: 97.3; f_acc: 0.0 +2025-05-01 08:15:14,160 (17 SD3 ) acc: 49.3; ap: 39.4; r_acc: 97.7; f_acc: 1.0 +2025-05-01 08:27:32,866 (18 SDXL ) acc: 48.9; ap: 35.4; r_acc: 97.6; f_acc: 0.2 +2025-05-01 08:30:02,996 (19 SimSwap ) acc: 51.0; ap: 52.4; r_acc: 96.9; f_acc: 5.2 +2025-05-01 09:24:36,632 (20 SocialRF ) acc: 49.6; ap: 44.4; r_acc: 97.4; f_acc: 1.8 +2025-05-01 09:29:50,773 (21 StyleGAN-XL ) acc: 48.4; ap: 33.6; r_acc: 96.8; f_acc: 0.0 +2025-05-01 09:35:12,054 (22 StyleGAN3 ) acc: 50.2; ap: 79.1; r_acc: 100.0; f_acc: 0.4 +2025-05-01 09:39:42,806 (23 StyleSwim ) acc: 48.9; ap: 40.1; r_acc: 97.6; f_acc: 0.1 +2025-05-01 09:39:56,356 (24 WFIR ) acc: 50.0; ap: 59.6; r_acc: 99.7; f_acc: 0.2 +2025-05-01 09:39:56,356 (25 Mean ) acc: 50.2; ap: 47.0; r_acc: 97.7; f_acc: 2.6 +2025-05-01 09:39:56,356 ************************* +2025-05-01 10:19:43,246 Model_path /data/ziqiang/yjz/code/CNNDetection-master/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_13_03_19_12/model_epoch_best.pth +2025-05-01 10:19:43,247 2025-05-01 10:19:43 +2025-05-01 10:21:01,713 (0 BlendFace ) acc: 50.3; ap: 57.3; r_acc: 99.9; f_acc: 0.7 +2025-05-01 10:21:57,467 (1 BLIP ) acc: 50.0; ap: 43.6; r_acc: 99.8; f_acc: 0.1 +2025-05-01 10:23:45,458 (2 CommunityAI ) acc: 50.0; ap: 50.7; r_acc: 99.7; f_acc: 0.2 +2025-05-01 10:25:33,704 (3 DALLE-3 ) acc: 50.3; ap: 58.8; r_acc: 99.9; f_acc: 0.7 +2025-05-01 10:26:48,761 (4 E4S ) acc: 50.0; ap: 45.6; r_acc: 100.0; f_acc: 0.1 +2025-05-01 10:27:46,126 (5 FaceSwap ) acc: 50.6; ap: 50.3; r_acc: 99.8; f_acc: 0.2 +2025-05-01 10:29:42,941 (6 FLUX1-dev ) acc: 50.6; ap: 58.1; r_acc: 99.9; f_acc: 1.3 +2025-05-01 10:30:38,527 (7 GLIDE ) acc: 50.4; ap: 45.9; r_acc: 99.8; f_acc: 1.1 +2025-05-01 10:32:22,358 (8 Imagen3 ) acc: 50.0; ap: 43.7; r_acc: 99.8; f_acc: 0.2 +2025-05-01 10:33:54,254 (9 Infinite-ID ) acc: 49.9; ap: 43.5; r_acc: 99.9; f_acc: 0.0 +2025-05-01 10:36:09,891 (10 InstantID ) acc: 50.8; ap: 84.9; r_acc: 99.9; f_acc: 1.8 +2025-05-01 10:37:02,834 (11 InSwap ) acc: 51.1; ap: 67.0; r_acc: 99.8; f_acc: 1.2 +2025-05-01 10:38:40,239 (12 IP-Adapter ) acc: 50.1; ap: 49.2; r_acc: 99.8; f_acc: 0.3 +2025-05-01 10:40:06,786 (13 Midjourney ) acc: 50.1; ap: 53.9; r_acc: 99.9; f_acc: 0.3 +2025-05-01 10:42:00,066 (14 PhotoMaker ) acc: 50.1; ap: 56.6; r_acc: 99.9; f_acc: 0.2 +2025-05-01 10:42:32,730 (15 ProGAN ) acc: 65.7; ap: 96.9; r_acc: 100.0; f_acc: 31.4 +2025-05-01 10:43:32,532 (16 R3GAN ) acc: 50.0; ap: 32.5; r_acc: 99.9; f_acc: 0.0 +2025-05-01 10:45:40,814 (17 SD3 ) acc: 50.3; ap: 57.4; r_acc: 99.6; f_acc: 0.9 +2025-05-01 10:47:42,569 (18 SDXL ) acc: 50.6; ap: 67.6; r_acc: 99.6; f_acc: 1.5 +2025-05-01 10:48:46,549 (19 SimSwap ) acc: 50.1; ap: 49.2; r_acc: 99.9; f_acc: 0.3 +2025-05-01 10:52:36,677 (20 SocialRF ) acc: 49.7; ap: 44.5; r_acc: 99.0; f_acc: 0.4 +2025-05-01 10:54:45,368 (21 StyleGAN-XL ) acc: 49.9; ap: 45.2; r_acc: 99.9; f_acc: 0.0 +2025-05-01 10:56:34,936 (22 StyleGAN3 ) acc: 50.8; ap: 88.4; r_acc: 99.9; f_acc: 1.7 +2025-05-01 10:58:15,731 (23 StyleSwim ) acc: 50.1; ap: 69.0; r_acc: 99.9; f_acc: 0.4 +2025-05-01 10:58:30,694 (24 WFIR ) acc: 50.0; ap: 57.8; r_acc: 100.0; f_acc: 0.0 +2025-05-01 10:58:30,694 (25 Mean ) acc: 50.9; ap: 56.7; r_acc: 99.8; f_acc: 1.8 +2025-05-01 10:58:30,694 ************************* +2025-05-15 05:20:51,257 Model_path /data/ziqiang/yjz/code/CNNDetection-master/checkpoints/4class-car-cat-chair-horse2025_04_12_14_39_53/model_epoch_best.pth +2025-05-15 05:20:51,258 2025-05-15 05:20:51 +2025-05-15 05:23:53,085 (0 BlendFace ) acc: 48.8; ap: 33.3; r_acc: 97.7; f_acc: 0.1 +2025-05-15 05:24:32,055 (1 BLIP ) acc: 49.7; ap: 38.5; r_acc: 99.3; f_acc: 0.0 +2025-05-15 05:27:06,692 (2 CommunityAI ) acc: 50.3; ap: 53.4; r_acc: 97.1; f_acc: 3.6 +2025-05-15 05:29:20,478 (3 DALLE-3 ) acc: 50.5; ap: 52.0; r_acc: 98.3; f_acc: 2.6 +2025-05-15 05:30:30,169 (4 E4S ) acc: 49.3; ap: 34.0; r_acc: 98.5; f_acc: 0.1 +2025-05-15 05:31:04,981 (5 FaceSwap ) acc: 50.1; ap: 42.3; r_acc: 98.7; f_acc: 0.3 +2025-05-15 05:33:21,285 (6 FLUX1-dev ) acc: 50.2; ap: 48.7; r_acc: 98.3; f_acc: 2.0 +2025-05-15 05:35:32,331 (7 GLIDE ) acc: 50.9; ap: 59.8; r_acc: 98.8; f_acc: 2.9 +2025-05-15 05:36:23,418 (8 Imagen3 ) acc: 50.0; ap: 46.6; r_acc: 98.4; f_acc: 1.5 +2025-05-15 05:37:32,990 (9 Infinite-ID ) acc: 51.3; ap: 57.6; r_acc: 98.6; f_acc: 4.3 +2025-05-15 05:39:15,618 (10 InstantID ) acc: 52.2; ap: 73.5; r_acc: 98.6; f_acc: 5.8 +2025-05-15 05:40:42,250 (11 InSwap ) acc: 49.9; ap: 41.2; r_acc: 98.4; f_acc: 0.3 +2025-05-15 05:42:16,124 (12 IP-Adapter ) acc: 49.9; ap: 47.6; r_acc: 98.7; f_acc: 1.1 +2025-05-15 05:43:21,919 (13 Midjourney ) acc: 49.7; ap: 39.0; r_acc: 97.7; f_acc: 1.7 +2025-05-15 05:44:55,473 (14 PhotoMaker ) acc: 49.9; ap: 54.1; r_acc: 98.7; f_acc: 1.1 +2025-05-15 05:45:47,086 (15 ProGAN ) acc: 93.2; ap: 99.1; r_acc: 99.1; f_acc: 87.3 +2025-05-15 05:46:12,179 (16 R3GAN ) acc: 49.2; ap: 37.7; r_acc: 98.2; f_acc: 0.1 +2025-05-15 05:46:52,079 (17 SD3 ) acc: 51.7; ap: 58.5; r_acc: 98.2; f_acc: 5.4 +2025-05-15 05:47:50,034 (18 SDXL ) acc: 52.7; ap: 66.5; r_acc: 98.2; f_acc: 7.4 +2025-05-15 05:48:35,485 (19 SimSwap ) acc: 49.5; ap: 40.4; r_acc: 98.7; f_acc: 0.2 +2025-05-15 05:49:55,681 (20 SocialRF ) acc: 49.0; ap: 44.2; r_acc: 92.6; f_acc: 5.4 +2025-05-15 05:50:47,833 (21 StyleGAN-XL ) acc: 49.5; ap: 55.5; r_acc: 98.6; f_acc: 0.3 +2025-05-15 05:51:11,449 (22 StyleGAN3 ) acc: 58.0; ap: 83.9; r_acc: 98.7; f_acc: 17.3 +2025-05-15 05:51:51,367 (23 StyleSwim ) acc: 53.6; ap: 77.8; r_acc: 98.6; f_acc: 8.7 +2025-05-15 05:51:59,905 (24 WFIR ) acc: 55.8; ap: 75.7; r_acc: 97.8; f_acc: 13.8 +2025-05-15 05:51:59,906 (25 Mean ) acc: 52.6; ap: 54.4; r_acc: 98.2; f_acc: 6.9 +2025-05-15 05:51:59,906 ************************* +2025-05-15 06:00:40,856 Model_path /data/ziqiang/yjz/code/CNNDetection-master/checkpoints/4class-car-cat-chair-horse2025_04_12_14_39_53/model_epoch_best.pth +2025-05-15 06:00:40,856 2025-05-15 06:00:40 +2025-05-15 06:01:06,460 (0 BlendFace ) acc: 49.9; ap: 34.0; r_acc: 99.8; f_acc: 0.0 +2025-05-15 06:01:20,257 (1 BLIP ) acc: 49.9; ap: 35.1; r_acc: 99.8; f_acc: 0.0 +2025-05-15 06:04:40,898 (2 CommunityAI ) acc: 49.8; ap: 43.3; r_acc: 99.1; f_acc: 0.5 +2025-05-15 06:05:18,620 (3 DALLE-3 ) acc: 50.7; ap: 54.6; r_acc: 99.8; f_acc: 1.5 +2025-05-15 06:05:42,954 (4 E4S ) acc: 49.9; ap: 33.2; r_acc: 99.8; f_acc: 0.0 +2025-05-15 06:05:59,397 (5 FaceSwap ) acc: 50.4; ap: 40.4; r_acc: 99.6; f_acc: 0.1 +2025-05-15 06:07:46,327 (6 FLUX1-dev ) acc: 50.2; ap: 46.7; r_acc: 99.5; f_acc: 0.8 +2025-05-15 06:08:02,568 (7 GLIDE ) acc: 50.3; ap: 56.6; r_acc: 99.7; f_acc: 0.8 +2025-05-15 06:09:43,716 (8 Imagen3 ) acc: 50.6; ap: 47.5; r_acc: 99.8; f_acc: 1.4 +2025-05-15 06:10:23,418 (9 Infinite-ID ) acc: 50.6; ap: 48.4; r_acc: 99.7; f_acc: 1.5 +2025-05-15 06:11:17,953 (10 InstantID ) acc: 50.0; ap: 58.7; r_acc: 99.8; f_acc: 0.1 +2025-05-15 06:11:34,158 (11 InSwap ) acc: 50.4; ap: 40.1; r_acc: 99.6; f_acc: 0.1 +2025-05-15 06:14:40,141 (12 IP-Adapter ) acc: 49.9; ap: 41.0; r_acc: 99.7; f_acc: 0.2 +2025-05-15 06:17:47,832 (13 Midjourney ) acc: 50.4; ap: 44.8; r_acc: 99.8; f_acc: 1.1 +2025-05-15 06:18:30,858 (14 PhotoMaker ) acc: 50.8; ap: 56.6; r_acc: 99.6; f_acc: 1.9 +2025-05-15 06:18:39,946 (15 ProGAN ) acc: 90.0; ap: 99.2; r_acc: 99.5; f_acc: 80.6 +2025-05-15 06:20:08,217 (16 R3GAN ) acc: 49.9; ap: 35.0; r_acc: 99.8; f_acc: 0.0 +2025-05-15 06:23:52,189 (17 SD3 ) acc: 51.1; ap: 60.7; r_acc: 99.4; f_acc: 2.9 +2025-05-15 06:27:53,005 (18 SDXL ) acc: 50.5; ap: 52.7; r_acc: 99.3; f_acc: 1.6 +2025-05-15 06:28:52,917 (19 SimSwap ) acc: 49.9; ap: 41.6; r_acc: 99.7; f_acc: 0.0 +2025-05-15 06:39:00,201 (20 SocialRF ) acc: 47.7; ap: 41.3; r_acc: 92.3; f_acc: 3.1 +2025-05-15 06:42:26,727 (21 StyleGAN-XL ) acc: 49.9; ap: 53.9; r_acc: 99.7; f_acc: 0.0 +2025-05-15 06:45:59,235 (22 StyleGAN3 ) acc: 57.6; ap: 90.1; r_acc: 99.5; f_acc: 15.6 +2025-05-15 06:49:44,389 (23 StyleSwim ) acc: 54.3; ap: 86.0; r_acc: 99.7; f_acc: 8.9 +2025-05-15 06:49:55,359 (24 WFIR ) acc: 51.9; ap: 79.2; r_acc: 99.6; f_acc: 4.2 +2025-05-15 06:49:55,359 (25 Mean ) acc: 52.3; ap: 52.8; r_acc: 99.3; f_acc: 5.1 +2025-05-15 06:49:55,359 ************************* +2025-05-15 06:52:47,746 Model_path /data/ziqiang/yjz/code/CNNDetection-master/checkpoints/4class-car-cat-chair-horse2025_04_12_14_39_53/model_epoch_best.pth +2025-05-15 06:52:47,746 2025-05-15 06:52:47 +2025-05-15 06:53:17,054 (0 BlendFace ) acc: 49.7; ap: 33.5; r_acc: 99.4; f_acc: 0.0 +2025-05-15 06:53:39,171 (1 BLIP ) acc: 49.7; ap: 36.0; r_acc: 99.5; f_acc: 0.0 +2025-05-15 06:55:08,969 (2 CommunityAI ) acc: 49.4; ap: 41.4; r_acc: 98.4; f_acc: 0.5 +2025-05-15 06:56:36,974 (3 DALLE-3 ) acc: 50.1; ap: 47.0; r_acc: 99.4; f_acc: 0.7 +2025-05-15 06:57:25,721 (4 E4S ) acc: 49.8; ap: 33.2; r_acc: 99.6; f_acc: 0.0 diff --git a/detector_codes/CNNDetection-master/networks/__init__.py b/detector_codes/CNNDetection-master/networks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/CNNDetection-master/networks/base_model.py b/detector_codes/CNNDetection-master/networks/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..1d08a2e807803e9840a12bd3eeb09507c4b54213 --- /dev/null +++ b/detector_codes/CNNDetection-master/networks/base_model.py @@ -0,0 +1,94 @@ +# from pix2pix +import os + +import torch +import torch.nn as nn +from torch.nn import init + + +class BaseModel(nn.Module): + def __init__(self, opt): + super(BaseModel, self).__init__() + self.opt = opt + self.total_steps = 0 + self.isTrain = opt.isTrain + self.save_dir = os.path.join(opt.checkpoints_dir, opt.name) + self.device = ( + torch.device('cuda:{}'.format(opt.gpu_ids[0])) + if opt.gpu_ids + else torch.device('cpu') + ) + + def save_networks(self, epoch): + save_filename = 'model_epoch_%s.pth' % epoch + save_path = os.path.join(self.save_dir, save_filename) + + # serialize model and optimizer to dict + state_dict = { + 'model': self.model.state_dict(), + 'optimizer': self.optimizer.state_dict(), + 'total_steps': self.total_steps, + } + + torch.save(state_dict, save_path) + + # load models from the disk + def load_networks(self, epoch): + load_filename = 'model_epoch_%s.pth' % epoch + load_path = os.path.join(self.save_dir, load_filename) + + print('loading the model from %s' % load_path) + # if you are using PyTorch newer than 0.4 (e.g., built from + # GitHub source), you can remove str() on self.device + state_dict = torch.load(load_path, map_location=self.device) + if hasattr(state_dict, '_metadata'): + del state_dict._metadata + + self.model.load_state_dict(state_dict['model']) + self.total_steps = state_dict['total_steps'] + + if self.isTrain and not self.opt.new_optim: + self.optimizer.load_state_dict(state_dict['optimizer']) + ### move optimizer state to GPU + for state in self.optimizer.state.values(): + for k, v in state.items(): + if torch.is_tensor(v): + state[k] = v.to(self.device) + + for g in self.optimizer.param_groups: + g['lr'] = self.opt.lr + + def eval(self): + self.model.eval() + + def test(self): + with torch.no_grad(): + self.forward() + + +def init_weights(net, init_type='normal', gain=0.02): + def init_func(m): + classname = m.__class__.__name__ + if hasattr(m, 'weight') and ( + classname.find('Conv') != -1 or classname.find('Linear') != -1 + ): + if init_type == 'normal': + init.normal_(m.weight.data, 0.0, gain) + elif init_type == 'xavier': + init.xavier_normal_(m.weight.data, gain=gain) + elif init_type == 'kaiming': + init.kaiming_normal_(m.weight.data, a=0, mode='fan_in') + elif init_type == 'orthogonal': + init.orthogonal_(m.weight.data, gain=gain) + else: + raise NotImplementedError( + 'initialization method [%s] is not implemented' % init_type + ) + if hasattr(m, 'bias') and m.bias is not None: + init.constant_(m.bias.data, 0.0) + elif classname.find('BatchNorm2d') != -1: + init.normal_(m.weight.data, 1.0, gain) + init.constant_(m.bias.data, 0.0) + + print('initialize network with %s' % init_type) + net.apply(init_func) diff --git a/detector_codes/CNNDetection-master/networks/lpf.py b/detector_codes/CNNDetection-master/networks/lpf.py new file mode 100644 index 0000000000000000000000000000000000000000..fe6a818c9c6f2ee235ec2c4622af3016f41a1259 --- /dev/null +++ b/detector_codes/CNNDetection-master/networks/lpf.py @@ -0,0 +1,147 @@ +# Copyright (c) 2019, Adobe Inc. All rights reserved. +# +# This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike +# 4.0 International Public License. To view a copy of this license, visit +# https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode. + +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.nn.parallel + + +class Downsample(nn.Module): + def __init__( + self, pad_type='reflect', filt_size=3, stride=2, channels=None, pad_off=0 + ): + super(Downsample, self).__init__() + self.filt_size = filt_size + self.pad_off = pad_off + self.pad_sizes = [ + int(1.0 * (filt_size - 1) / 2), + int(np.ceil(1.0 * (filt_size - 1) / 2)), + int(1.0 * (filt_size - 1) / 2), + int(np.ceil(1.0 * (filt_size - 1) / 2)), + ] + self.pad_sizes = [pad_size + pad_off for pad_size in self.pad_sizes] + self.stride = stride + self.off = int((self.stride - 1) / 2.0) + self.channels = channels + + # print('Filter size [%i]'%filt_size) + if self.filt_size == 1: + a = np.array( + [ + 1.0, + ] + ) + elif self.filt_size == 2: + a = np.array([1.0, 1.0]) + elif self.filt_size == 3: + a = np.array([1.0, 2.0, 1.0]) + elif self.filt_size == 4: + a = np.array([1.0, 3.0, 3.0, 1.0]) + elif self.filt_size == 5: + a = np.array([1.0, 4.0, 6.0, 4.0, 1.0]) + elif self.filt_size == 6: + a = np.array([1.0, 5.0, 10.0, 10.0, 5.0, 1.0]) + elif self.filt_size == 7: + a = np.array([1.0, 6.0, 15.0, 20.0, 15.0, 6.0, 1.0]) + + filt = torch.Tensor(a[:, None] * a[None, :]) + filt = filt / torch.sum(filt) + self.register_buffer( + 'filt', filt[None, None, :, :].repeat((self.channels, 1, 1, 1)) + ) + + self.pad = get_pad_layer(pad_type)(self.pad_sizes) + + def forward(self, inp): + if self.filt_size == 1: + if self.pad_off == 0: + return inp[:, :, :: self.stride, :: self.stride] + else: + return self.pad(inp)[:, :, :: self.stride, :: self.stride] + else: + return F.conv2d( + self.pad(inp), self.filt, stride=self.stride, groups=inp.shape[1] + ) + + +def get_pad_layer(pad_type): + if pad_type in ['refl', 'reflect']: + PadLayer = nn.ReflectionPad2d + elif pad_type in ['repl', 'replicate']: + PadLayer = nn.ReplicationPad2d + elif pad_type == 'zero': + PadLayer = nn.ZeroPad2d + else: + print('Pad type [%s] not recognized' % pad_type) + return PadLayer + + +class Downsample1D(nn.Module): + def __init__( + self, pad_type='reflect', filt_size=3, stride=2, channels=None, pad_off=0 + ): + super(Downsample1D, self).__init__() + self.filt_size = filt_size + self.pad_off = pad_off + self.pad_sizes = [ + int(1.0 * (filt_size - 1) / 2), + int(np.ceil(1.0 * (filt_size - 1) / 2)), + ] + self.pad_sizes = [pad_size + pad_off for pad_size in self.pad_sizes] + self.stride = stride + self.off = int((self.stride - 1) / 2.0) + self.channels = channels + + # print('Filter size [%i]' % filt_size) + if self.filt_size == 1: + a = np.array( + [ + 1.0, + ] + ) + elif self.filt_size == 2: + a = np.array([1.0, 1.0]) + elif self.filt_size == 3: + a = np.array([1.0, 2.0, 1.0]) + elif self.filt_size == 4: + a = np.array([1.0, 3.0, 3.0, 1.0]) + elif self.filt_size == 5: + a = np.array([1.0, 4.0, 6.0, 4.0, 1.0]) + elif self.filt_size == 6: + a = np.array([1.0, 5.0, 10.0, 10.0, 5.0, 1.0]) + elif self.filt_size == 7: + a = np.array([1.0, 6.0, 15.0, 20.0, 15.0, 6.0, 1.0]) + + filt = torch.Tensor(a) + filt = filt / torch.sum(filt) + self.register_buffer('filt', filt[None, None, :].repeat((self.channels, 1, 1))) + + self.pad = get_pad_layer_1d(pad_type)(self.pad_sizes) + + def forward(self, inp): + if self.filt_size == 1: + if self.pad_off == 0: + return inp[:, :, :: self.stride] + else: + return self.pad(inp)[:, :, :: self.stride] + else: + return F.conv1d( + self.pad(inp), self.filt, stride=self.stride, groups=inp.shape[1] + ) + + +def get_pad_layer_1d(pad_type): + if pad_type in ['refl', 'reflect']: + PadLayer = nn.ReflectionPad1d + elif pad_type in ['repl', 'replicate']: + PadLayer = nn.ReplicationPad1d + elif pad_type == 'zero': + PadLayer = nn.ZeroPad1d + else: + print('Pad type [%s] not recognized' % pad_type) + return PadLayer diff --git a/detector_codes/CNNDetection-master/networks/resnet.py b/detector_codes/CNNDetection-master/networks/resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..0b09e089416fa0c67de12ff9925eac77dc46cebe --- /dev/null +++ b/detector_codes/CNNDetection-master/networks/resnet.py @@ -0,0 +1,216 @@ +import torch.nn as nn +import torch.utils.model_zoo as model_zoo + +__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', 'resnet152'] + + +model_urls = { + 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', + 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth', + 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth', + 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth', + 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', +} + + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d( + in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False + ) + + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(BasicBlock, self).__init__() + self.conv1 = conv3x3(inplanes, planes, stride) + self.bn1 = nn.BatchNorm2d(planes) + self.relu = nn.ReLU(inplace=True) + self.conv2 = conv3x3(planes, planes) + self.bn2 = nn.BatchNorm2d(planes) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(Bottleneck, self).__init__() + self.conv1 = conv1x1(inplanes, planes) + self.bn1 = nn.BatchNorm2d(planes) + self.conv2 = conv3x3(planes, planes, stride) + self.bn2 = nn.BatchNorm2d(planes) + self.conv3 = conv1x1(planes, planes * self.expansion) + self.bn3 = nn.BatchNorm2d(planes * self.expansion) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class ResNet(nn.Module): + def __init__(self, block, layers, num_classes=1000, zero_init_residual=False): + super(ResNet, self).__init__() + self.inplanes = 64 + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.fc = nn.Linear(512 * block.expansion, num_classes) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, nn.BatchNorm2d): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + + # Zero-initialize the last BN in each residual branch, + # so that the residual branch starts with zeros, and each residual block behaves like an identity. + # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + nn.init.constant_(m.bn3.weight, 0) + elif isinstance(m, BasicBlock): + nn.init.constant_(m.bn2.weight, 0) + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + conv1x1(self.inplanes, planes * block.expansion, stride), + nn.BatchNorm2d(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + +def resnet18(pretrained=False, **kwargs): + """Constructs a ResNet-18 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [2, 2, 2, 2], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet18'])) + return model + + +def resnet34(pretrained=False, **kwargs): + """Constructs a ResNet-34 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet34'])) + return model + + +def resnet50(pretrained=False, **kwargs): + """Constructs a ResNet-50 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet50'])) + return model + + +def resnet101(pretrained=False, **kwargs): + """Constructs a ResNet-101 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 23, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet101'])) + return model + + +def resnet152(pretrained=False, **kwargs): + """Constructs a ResNet-152 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 8, 36, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet152'])) + return model diff --git a/detector_codes/CNNDetection-master/networks/resnet_lpf.py b/detector_codes/CNNDetection-master/networks/resnet_lpf.py new file mode 100644 index 0000000000000000000000000000000000000000..a2588dd6cb09aca38dabca9d26ca26c861a6893f --- /dev/null +++ b/detector_codes/CNNDetection-master/networks/resnet_lpf.py @@ -0,0 +1,470 @@ +# This code is built from the PyTorch examples repository: https://github.com/pytorch/vision/tree/master/torchvision/models. +# Copyright (c) 2017 Torch Contributors. +# The Pytorch examples are available under the BSD 3-Clause License. +# +# ========================================================================================== +# +# Adobe’s modifications are Copyright 2019 Adobe. All rights reserved. +# Adobe’s modifications are licensed under the Creative Commons Attribution-NonCommercial-ShareAlike +# 4.0 International Public License (CC-NC-SA-4.0). To view a copy of the license, visit +# https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode. +# +# ========================================================================================== +# +# BSD-3 License +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# * Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + +import torch.nn as nn +import torch.utils.model_zoo as model_zoo + +from .lpf import * + +__all__ = [ + 'ResNet', + 'resnet18', + 'resnet34', + 'resnet50', + 'resnet101', + 'resnet152', + 'resnext50_32x4d', + 'resnext101_32x8d', +] + + +# model_urls = { +# 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', +# 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth', +# 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth', +# 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth', +# 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', +# } + + +def conv3x3(in_planes, out_planes, stride=1, groups=1): + """3x3 convolution with padding""" + return nn.Conv2d( + in_planes, + out_planes, + kernel_size=3, + stride=stride, + padding=1, + groups=groups, + bias=False, + ) + + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__( + self, + inplanes, + planes, + stride=1, + downsample=None, + groups=1, + norm_layer=None, + filter_size=1, + ): + super(BasicBlock, self).__init__() + if norm_layer is None: + norm_layer = nn.BatchNorm2d + if groups != 1: + raise ValueError('BasicBlock only supports groups=1') + # Both self.conv1 and self.downsample layers downsample the input when stride != 1 + self.conv1 = conv3x3(inplanes, planes) + self.bn1 = norm_layer(planes) + self.relu = nn.ReLU(inplace=True) + if stride == 1: + self.conv2 = conv3x3(planes, planes) + else: + self.conv2 = nn.Sequential( + Downsample(filt_size=filter_size, stride=stride, channels=planes), + conv3x3(planes, planes), + ) + self.bn2 = norm_layer(planes) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__( + self, + inplanes, + planes, + stride=1, + downsample=None, + groups=1, + norm_layer=None, + filter_size=1, + ): + super(Bottleneck, self).__init__() + if norm_layer is None: + norm_layer = nn.BatchNorm2d + # Both self.conv2 and self.downsample layers downsample the input when stride != 1 + self.conv1 = conv1x1(inplanes, planes) + self.bn1 = norm_layer(planes) + self.conv2 = conv3x3(planes, planes, groups) # stride moved + self.bn2 = norm_layer(planes) + if stride == 1: + self.conv3 = conv1x1(planes, planes * self.expansion) + else: + self.conv3 = nn.Sequential( + Downsample(filt_size=filter_size, stride=stride, channels=planes), + conv1x1(planes, planes * self.expansion), + ) + self.bn3 = norm_layer(planes * self.expansion) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class ResNet(nn.Module): + def __init__( + self, + block, + layers, + num_classes=1000, + zero_init_residual=False, + groups=1, + width_per_group=64, + norm_layer=None, + filter_size=1, + pool_only=True, + ): + super(ResNet, self).__init__() + if norm_layer is None: + norm_layer = nn.BatchNorm2d + planes = [int(width_per_group * groups * 2**i) for i in range(4)] + self.inplanes = planes[0] + + if pool_only: + self.conv1 = nn.Conv2d( + 3, planes[0], kernel_size=7, stride=2, padding=3, bias=False + ) + else: + self.conv1 = nn.Conv2d( + 3, planes[0], kernel_size=7, stride=1, padding=3, bias=False + ) + self.bn1 = norm_layer(planes[0]) + self.relu = nn.ReLU(inplace=True) + + if pool_only: + self.maxpool = nn.Sequential( + *[ + nn.MaxPool2d(kernel_size=2, stride=1), + Downsample(filt_size=filter_size, stride=2, channels=planes[0]), + ] + ) + else: + self.maxpool = nn.Sequential( + *[ + Downsample(filt_size=filter_size, stride=2, channels=planes[0]), + nn.MaxPool2d(kernel_size=2, stride=1), + Downsample(filt_size=filter_size, stride=2, channels=planes[0]), + ] + ) + + self.layer1 = self._make_layer( + block, planes[0], layers[0], groups=groups, norm_layer=norm_layer + ) + self.layer2 = self._make_layer( + block, + planes[1], + layers[1], + stride=2, + groups=groups, + norm_layer=norm_layer, + filter_size=filter_size, + ) + self.layer3 = self._make_layer( + block, + planes[2], + layers[2], + stride=2, + groups=groups, + norm_layer=norm_layer, + filter_size=filter_size, + ) + self.layer4 = self._make_layer( + block, + planes[3], + layers[3], + stride=2, + groups=groups, + norm_layer=norm_layer, + filter_size=filter_size, + ) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.fc = nn.Linear(planes[3] * block.expansion, num_classes) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + if ( + m.in_channels != m.out_channels + or m.out_channels != m.groups + or m.bias is not None + ): + # don't want to reinitialize downsample layers, code assuming normal conv layers will not have these characteristics + nn.init.kaiming_normal_( + m.weight, mode='fan_out', nonlinearity='relu' + ) + else: + print('Not initializing') + elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + + # Zero-initialize the last BN in each residual branch, + # so that the residual branch starts with zeros, and each residual block behaves like an identity. + # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + nn.init.constant_(m.bn3.weight, 0) + elif isinstance(m, BasicBlock): + nn.init.constant_(m.bn2.weight, 0) + + def _make_layer( + self, block, planes, blocks, stride=1, groups=1, norm_layer=None, filter_size=1 + ): + if norm_layer is None: + norm_layer = nn.BatchNorm2d + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + # downsample = nn.Sequential( + # conv1x1(self.inplanes, planes * block.expansion, stride, filter_size=filter_size), + # norm_layer(planes * block.expansion), + # ) + + downsample = ( + [ + Downsample( + filt_size=filter_size, stride=stride, channels=self.inplanes + ), + ] + if (stride != 1) + else [] + ) + downsample += [ + conv1x1(self.inplanes, planes * block.expansion, 1), + norm_layer(planes * block.expansion), + ] + # print(downsample) + downsample = nn.Sequential(*downsample) + + layers = [] + layers.append( + block( + self.inplanes, + planes, + stride, + downsample, + groups, + norm_layer, + filter_size=filter_size, + ) + ) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append( + block( + self.inplanes, + planes, + groups=groups, + norm_layer=norm_layer, + filter_size=filter_size, + ) + ) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + +def resnet18(pretrained=False, filter_size=1, pool_only=True, **kwargs): + """Constructs a ResNet-18 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet( + BasicBlock, [2, 2, 2, 2], filter_size=filter_size, pool_only=pool_only, **kwargs + ) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet18'])) + return model + + +def resnet34(pretrained=False, filter_size=1, pool_only=True, **kwargs): + """Constructs a ResNet-34 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet( + BasicBlock, [3, 4, 6, 3], filter_size=filter_size, pool_only=pool_only, **kwargs + ) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet34'])) + return model + + +def resnet50(pretrained=False, filter_size=1, pool_only=True, **kwargs): + """Constructs a ResNet-50 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet( + Bottleneck, [3, 4, 6, 3], filter_size=filter_size, pool_only=pool_only, **kwargs + ) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet50'])) + return model + + +def resnet101(pretrained=False, filter_size=1, pool_only=True, **kwargs): + """Constructs a ResNet-101 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet( + Bottleneck, + [3, 4, 23, 3], + filter_size=filter_size, + pool_only=pool_only, + **kwargs, + ) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet101'])) + return model + + +def resnet152(pretrained=False, filter_size=1, pool_only=True, **kwargs): + """Constructs a ResNet-152 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet( + Bottleneck, + [3, 8, 36, 3], + filter_size=filter_size, + pool_only=pool_only, + **kwargs, + ) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet152'])) + return model + + +def resnext50_32x4d(pretrained=False, filter_size=1, pool_only=True, **kwargs): + model = ResNet( + Bottleneck, + [3, 4, 6, 3], + groups=4, + width_per_group=32, + filter_size=filter_size, + pool_only=pool_only, + **kwargs, + ) + # if pretrained: + # model.load_state_dict(model_zoo.load_url(model_urls['resnet50'])) + return model + + +def resnext101_32x8d(pretrained=False, filter_size=1, pool_only=True, **kwargs): + model = ResNet( + Bottleneck, + [3, 4, 23, 3], + groups=8, + width_per_group=32, + filter_size=filter_size, + pool_only=pool_only, + **kwargs, + ) + # if pretrained: + # model.load_state_dict(model_zoo.load_url(model_urls['resnet50'])) + return model diff --git a/detector_codes/CNNDetection-master/networks/trainer.py b/detector_codes/CNNDetection-master/networks/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..e39f330c5fb4d1d44ee6d4b92a54ba05bbde6e2f --- /dev/null +++ b/detector_codes/CNNDetection-master/networks/trainer.py @@ -0,0 +1,63 @@ +import torch +import torch.nn as nn + +from networks.base_model import BaseModel +from networks.resnet import resnet50 + + +class Trainer(BaseModel): + def name(self): + return 'Trainer' + + def __init__(self, opt): + super(Trainer, self).__init__(opt) + + if self.isTrain and not opt.continue_train: + self.model = resnet50(pretrained=True) + self.model.fc = nn.Linear(2048, 1) + torch.nn.init.normal_(self.model.fc.weight.data, 0.0, opt.init_gain) + + if not self.isTrain or opt.continue_train: + self.model = resnet50(num_classes=1) + + if self.isTrain: + self.loss_fn = nn.BCEWithLogitsLoss() + # initialize optimizers + if opt.optim == 'adam': + self.optimizer = torch.optim.Adam( + self.model.parameters(), lr=opt.lr, betas=(opt.beta1, 0.999) + ) + elif opt.optim == 'sgd': + self.optimizer = torch.optim.SGD( + self.model.parameters(), lr=opt.lr, momentum=0.0, weight_decay=0 + ) + else: + raise ValueError('optim should be [adam, sgd]') + + if not self.isTrain or opt.continue_train: + self.load_networks(opt.epoch) + self.model.to(opt.gpu_ids[0]) + + def adjust_learning_rate(self, min_lr=1e-6): + for param_group in self.optimizer.param_groups: + param_group['lr'] /= 10.0 + if param_group['lr'] < min_lr: + return False + return True + + def set_input(self, input): + self.input = input[0].to(self.device) + self.label = input[1].to(self.device).float() + + def forward(self): + self.output = self.model(self.input) + + def get_loss(self): + return self.loss_fn(self.output.squeeze(1), self.label) + + def optimize_parameters(self): + self.forward() + self.loss = self.loss_fn(self.output.squeeze(1), self.label) + self.optimizer.zero_grad() + self.loss.backward() + self.optimizer.step() diff --git a/detector_codes/CNNDetection-master/options/__init__.py b/detector_codes/CNNDetection-master/options/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/CNNDetection-master/options/base_options.py b/detector_codes/CNNDetection-master/options/base_options.py new file mode 100644 index 0000000000000000000000000000000000000000..284f0313459bd6de8bbda2d30a8f0ce4f83bee32 --- /dev/null +++ b/detector_codes/CNNDetection-master/options/base_options.py @@ -0,0 +1,115 @@ +import argparse +import os +import util +import torch +import time +#import models +#import data + + +class BaseOptions(): + def __init__(self): + self.initialized = False + + def initialize(self, parser): + parser.add_argument('--mode', default='binary') + parser.add_argument('--arch', type=str, default='res50', help='architecture for binary classification') + + # data augmentation + parser.add_argument('--rz_interp', default='bilinear') + parser.add_argument('--blur_prob', type=float, default=0) + parser.add_argument('--blur_sig', default='0.5') + parser.add_argument('--jpg_prob', type=float, default=0) + parser.add_argument('--jpg_method', default='cv2') + parser.add_argument('--jpg_qual', default='75') + + parser.add_argument('--dataroot', default='./dataset/', help='path to images (should have subfolders trainA, trainB, valA, valB, etc)') + parser.add_argument('--classes', default='', help='image classes to train on') + parser.add_argument('--class_bal', action='store_true') + parser.add_argument('--batch_size', type=int, default=128, help='input batch size') + parser.add_argument('--loadSize', type=int, default=256, help='scale images to this size') + parser.add_argument('--cropSize', type=int, default=224, help='then crop to this size') + parser.add_argument('--gpu_ids', type=str, default='1', help='gpu ids: e.g. 0 0,1,2, 0,2. use -1 for CPU') + parser.add_argument('--name', type=str, default='experiment_name', help='name of the experiment. It decides where to store samples and models') + parser.add_argument('--epoch', type=str, default='latest', help='which epoch to load? set to latest to use latest cached model') + parser.add_argument('--num_threads', default=8, type=int, help='# threads for loading data') + parser.add_argument('--checkpoints_dir', type=str, default='./checkpoints', help='models are saved here') + parser.add_argument('--serial_batches', action='store_true', help='if true, takes images in order to make batches, otherwise takes them randomly') + parser.add_argument('--resize_or_crop', type=str, default='scale_and_crop', help='scaling and cropping of images at load time [resize_and_crop|crop|scale_width|scale_width_and_crop|none]') + parser.add_argument('--no_flip', action='store_true', help='if specified, do not flip the images for data augmentation') + parser.add_argument('--init_type', type=str, default='normal', help='network initialization [normal|xavier|kaiming|orthogonal]') + parser.add_argument('--init_gain', type=float, default=0.02, help='scaling factor for normal, xavier and orthogonal.') + parser.add_argument('--suffix', default='', type=str, help='customized suffix: opt.name = opt.name + suffix: e.g., {model}_{netG}_size{loadSize}') + self.initialized = True + return parser + + def gather_options(self): + # initialize parser with basic options + if not self.initialized: + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser = self.initialize(parser) + + # get the basic options + opt, _ = parser.parse_known_args() + self.parser = parser + + return parser.parse_args() + + def print_options(self, opt): + message = '' + message += '----------------- Options ---------------\n' + for k, v in sorted(vars(opt).items()): + comment = '' + default = self.parser.get_default(k) + if v != default: + comment = '\t[default: %s]' % str(default) + message += '{:>25}: {:<30}{}\n'.format(str(k), str(v), comment) + message += '----------------- End -------------------' + print(message) + + # save to the disk + expr_dir = os.path.join(opt.checkpoints_dir, opt.name) + util.mkdirs(expr_dir) + file_name = os.path.join(expr_dir, 'opt.txt') + with open(file_name, 'wt') as opt_file: + opt_file.write(message) + opt_file.write('\n') + + def parse(self, print_options=True): + + opt = self.gather_options() + opt.isTrain = self.isTrain # train or test + opt.name = opt.name + time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()) + + # process opt.suffix + if opt.suffix: + suffix = ('_' + opt.suffix.format(**vars(opt))) if opt.suffix != '' else '' + opt.name = opt.name + suffix + + if print_options: + self.print_options(opt) + + # set gpu ids + str_ids = opt.gpu_ids.split(',') + opt.gpu_ids = [] + for str_id in str_ids: + id = int(str_id) + if id >= 0: + opt.gpu_ids.append(id) + if len(opt.gpu_ids) > 0: + torch.cuda.set_device(opt.gpu_ids[0]) + + # additional + opt.classes = opt.classes.split(',') + opt.rz_interp = opt.rz_interp.split(',') + opt.blur_sig = [float(s) for s in opt.blur_sig.split(',')] + opt.jpg_method = opt.jpg_method.split(',') + opt.jpg_qual = [int(s) for s in opt.jpg_qual.split(',')] + if len(opt.jpg_qual) == 2: + opt.jpg_qual = list(range(opt.jpg_qual[0], opt.jpg_qual[1] + 1)) + elif len(opt.jpg_qual) > 2: + raise ValueError("Shouldn't have more than 2 values for --jpg_qual.") + + self.opt = opt + return self.opt diff --git a/detector_codes/CNNDetection-master/options/test_options.py b/detector_codes/CNNDetection-master/options/test_options.py new file mode 100644 index 0000000000000000000000000000000000000000..f824c7aae81d325bf81e16c5a5e2c1931ccd5b34 --- /dev/null +++ b/detector_codes/CNNDetection-master/options/test_options.py @@ -0,0 +1,13 @@ +from .base_options import BaseOptions + + +class TestOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--model_path') + parser.add_argument('--no_resize', action='store_true') + parser.add_argument('--no_crop', action='store_true') + parser.add_argument('--eval', action='store_true', help='use eval mode during test time.') + + self.isTrain = False + return parser diff --git a/detector_codes/CNNDetection-master/options/train_options.py b/detector_codes/CNNDetection-master/options/train_options.py new file mode 100644 index 0000000000000000000000000000000000000000..cf0c3e16ded55bc8d6e821481a6b505b0adec916 --- /dev/null +++ b/detector_codes/CNNDetection-master/options/train_options.py @@ -0,0 +1,24 @@ +from .base_options import BaseOptions + + +class TrainOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--earlystop_epoch', type=int, default=5) + parser.add_argument('--data_aug', action='store_true', help='if specified, perform additional data augmentation (photometric, blurring, jpegging)') + parser.add_argument('--optim', type=str, default='adam', help='optim to use [sgd, adam]') + parser.add_argument('--new_optim', action='store_true', help='new optimizer instead of loading the optim state') + parser.add_argument('--loss_freq', type=int, default=400, help='frequency of showing loss on tensorboard') + parser.add_argument('--save_latest_freq', type=int, default=2000, help='frequency of saving the latest results') + parser.add_argument('--save_epoch_freq', type=int, default=20, help='frequency of saving checkpoints at the end of epochs') + parser.add_argument('--continue_train', action='store_true', help='continue training: load the latest model') + parser.add_argument('--epoch_count', type=int, default=1, help='the starting epoch count, we save the model by , +, ...') + parser.add_argument('--last_epoch', type=int, default=-1, help='starting epoch count for scheduler intialization') + parser.add_argument('--train_split', type=str, default='train', help='train, val, test, etc') + parser.add_argument('--val_split', type=str, default='val', help='train, val, test, etc') + parser.add_argument('--niter', type=int, default=10000, help='# of iter at starting learning rate') + parser.add_argument('--beta1', type=float, default=0.9, help='momentum term of adam') + parser.add_argument('--lr', type=float, default=0.0001, help='initial learning rate for adam') + + self.isTrain = True + return parser diff --git a/detector_codes/CNNDetection-master/requirements.txt b/detector_codes/CNNDetection-master/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..5229c276fd6097939ede4e2f015a95352cb177ec --- /dev/null +++ b/detector_codes/CNNDetection-master/requirements.txt @@ -0,0 +1,7 @@ +scipy +scikit-learn +numpy +opencv_python +Pillow +torch>=1.2.0 +torchvision diff --git a/detector_codes/CNNDetection-master/train.py b/detector_codes/CNNDetection-master/train.py new file mode 100644 index 0000000000000000000000000000000000000000..82c038d62a0e3c9308a6c0bf9fca4ecd77f2010f --- /dev/null +++ b/detector_codes/CNNDetection-master/train.py @@ -0,0 +1,102 @@ +import os +import time + +from data import create_dataloader +from earlystop import EarlyStopping +from networks.trainer import Trainer +from options.train_options import TrainOptions +from tensorboardX import SummaryWriter +from validate import validate + +"""Currently assumes jpg_prob, blur_prob 0 or 1""" + + +def get_val_opt(): + val_opt = TrainOptions().parse(print_options=False) + val_opt.dataroot = '{}/{}/'.format(val_opt.dataroot, val_opt.val_split) + val_opt.isTrain = False + val_opt.no_resize = False + val_opt.no_crop = False + val_opt.serial_batches = True + val_opt.jpg_method = ['pil'] + if len(val_opt.blur_sig) == 2: + b_sig = val_opt.blur_sig + val_opt.blur_sig = [(b_sig[0] + b_sig[1]) / 2] + if len(val_opt.jpg_qual) != 1: + j_qual = val_opt.jpg_qual + val_opt.jpg_qual = [int((j_qual[0] + j_qual[-1]) / 2)] + + return val_opt + + +if __name__ == '__main__': + opt = TrainOptions().parse() + opt.dataroot = '{}/{}/'.format(opt.dataroot, opt.train_split) + val_opt = get_val_opt() + + data_loader = create_dataloader(opt) + dataset_size = len(data_loader) + print('#training images = %d' % dataset_size) + + train_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'train')) + val_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'val')) + + model = Trainer(opt) + early_stopping = EarlyStopping( + patience=opt.earlystop_epoch, delta=-0.001, verbose=True + ) + for epoch in range(opt.niter): + epoch_start_time = time.time() + iter_data_time = time.time() + epoch_iter = 0 + + for i, data in enumerate(data_loader): + model.total_steps += 1 + epoch_iter += opt.batch_size + + model.set_input(data) + model.optimize_parameters() + + if model.total_steps % opt.loss_freq == 0: + print( + 'Train loss: {} at step: {}'.format(model.loss, model.total_steps) + ) + train_writer.add_scalar('loss', model.loss, model.total_steps) + + if model.total_steps % opt.save_latest_freq == 0: + print( + 'saving the latest model %s (epoch %d, model.total_steps %d)' + % (opt.name, epoch, model.total_steps) + ) + model.save_networks('latest') + + # print("Iter time: %d sec" % (time.time()-iter_data_time)) + # iter_data_time = time.time() + + if epoch % opt.save_epoch_freq == 0: + print( + 'saving the model at the end of epoch %d, iters %d' + % (epoch, model.total_steps) + ) + model.save_networks('latest') + model.save_networks(epoch) + + # Validation + model.eval() + acc, ap = validate(model.model, val_opt)[:2] + val_writer.add_scalar('accuracy', acc, model.total_steps) + val_writer.add_scalar('ap', ap, model.total_steps) + print('(Val @ epoch {}) acc: {}; ap: {}'.format(epoch, acc, ap)) + + early_stopping(acc, model) + if early_stopping.early_stop: + cont_train = model.adjust_learning_rate() + if cont_train: + print('Learning rate dropped by 10, continue training...') + early_stopping = EarlyStopping( + patience=opt.earlystop_epoch, delta=-0.002, verbose=True + ) + else: + print('Early stopping.') + break + model.train() diff --git a/detector_codes/CNNDetection-master/util.py b/detector_codes/CNNDetection-master/util.py new file mode 100644 index 0000000000000000000000000000000000000000..bd07bccf97198984bb650495c0b98c3708f3f1ce --- /dev/null +++ b/detector_codes/CNNDetection-master/util.py @@ -0,0 +1,48 @@ +import os + +import torch + + +def mkdirs(paths): + if isinstance(paths, list) and not isinstance(paths, str): + for path in paths: + mkdir(path) + else: + mkdir(paths) + + +def mkdir(path): + if not os.path.exists(path): + os.makedirs(path) + + +def unnormalize(tens, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]): + # assume tensor of shape NxCxHxW + return ( + tens * torch.Tensor(std)[None, :, None, None] + + torch.Tensor(mean)[None, :, None, None] + ) + + +class Logger(object): + """Log stdout messages.""" + + def __init__(self, outfile): + self.terminal = sys.stdout + self.log = open(outfile, 'a') + sys.stdout = self + + def write(self, message): + self.terminal.write(message) + self.log.write(message) + + def flush(self): + self.terminal.flush() + + +def printSet(set_str): + set_str = str(set_str) + num = len(set_str) + print('=' * num * 3) + print(' ' * num + set_str) + print('=' * num * 3) diff --git a/detector_codes/CNNDetection-master/validate.py b/detector_codes/CNNDetection-master/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..afb8d1b33b9ad2b5510f33840d804c66ecff9712 --- /dev/null +++ b/detector_codes/CNNDetection-master/validate.py @@ -0,0 +1,42 @@ +import numpy as np +import torch +from data import create_dataloader +from networks.resnet import resnet50 +from options.test_options import TestOptions +from sklearn.metrics import accuracy_score, average_precision_score + + +def validate(model, opt): + data_loader = create_dataloader(opt) + + with torch.no_grad(): + y_true, y_pred = [], [] + for img, label in data_loader: + in_tens = img.cuda() + y_pred.extend(model(in_tens).sigmoid().flatten().tolist()) + y_true.extend(label.flatten().tolist()) + + y_true, y_pred = np.array(y_true), np.array(y_pred) + r_acc = accuracy_score(y_true[y_true == 0], y_pred[y_true == 0] > 0.5) + f_acc = accuracy_score(y_true[y_true == 1], y_pred[y_true == 1] > 0.5) + acc = accuracy_score(y_true, y_pred > 0.5) + ap = average_precision_score(y_true, y_pred) + return acc, ap, r_acc, f_acc, y_true, y_pred + + +if __name__ == '__main__': + opt = TestOptions().parse(print_options=False) + + model = resnet50(num_classes=1) + state_dict = torch.load(opt.model_path, map_location='cpu') + model.load_state_dict(state_dict['model']) + model.cuda() + model.eval() + + acc, avg_precision, r_acc, f_acc, y_true, y_pred = validate(model, opt) + + print('accuracy:', acc) + print('average precision:', avg_precision) + + print('accuracy of real images:', r_acc) + print('accuracy of fake images:', f_acc) diff --git a/detector_codes/DFFreq-main/README.md b/detector_codes/DFFreq-main/README.md new file mode 100644 index 0000000000000000000000000000000000000000..792c95d022f729d05b9b2aeaec5858aa0de563a1 --- /dev/null +++ b/detector_codes/DFFreq-main/README.md @@ -0,0 +1,74 @@ +
+
+

Dual Frequency Branch Framework with Reconstructed Sliding Windows Attention for AI-Generated Image Detection

+ +[Jiazhen Yan](https://scholar.google.com/citations?user=QkURh8EAAAAJ&hl=zh-CN)1, [Ziqiang Li](https://scholar.google.com/citations?user=mj5a8WgAAAAJ&hl=zh-CN)1, [Fan Wang](https://scholar.google.com/citations?user=zT1Ad0gAAAAJ&hl=zh-CN)1, [Ziwen He](https://scholar.google.com/citations?user=PjkDK9cAAAAJ&hl=zh-CN)1, [Zhangjie Fu](https://scholar.google.com/citations?user=fO9NmagAAAAJ&hl=zh-CN)1‡ + + +
+

+ Corresponding author +

+
+ +1Nanjing University of Information Science and Technology +

+ + + + + + + + + +

+
+ +## 🔥 News +* [2026-02-07]🎉🎉🎉 DFFreq is accepted by IEEE Transactions on Information Forensics & Security. + +## ⏳ Quick Start +### 1. Installation +``` +conda create -n DFFreq -y python=3.9 +conda activate DFFreq +pip3 install torch torchvision +pip install -r requirements.txt +``` +### 2.Getting datasets +| Datasets | Paper | Url | +|:------: |:---------: |:---------:| +| GANGen-Detection | Frequency-Aware Deepfake Detection: Improving Generalizability through Frequency Space Domain Learning (AAAI 2024) | [Google Drive](https://drive.google.com/drive/folders/11E0Knf9J1qlv2UuTnJSOFUjIIi90czSj) | +| DiffusionForensics| DIRE for Diffusion-Generated Image Detection (ICCV 2023) | [Google Drive](https://drive.google.com/drive/folders/1jZE4hg6SxRvKaPYO_yyMeJN_DOcqGMEf) | +| UniversalFakeDetect| Towards Universal Fake Image Detectors that Generalize Across Generative Models (CVPR 2023) | [Google Drive](https://drive.google.com/drive/folders/1nkCXClC7kFM01_fqmLrVNtnOYEFPtWO-) | +| AIGCDetectBench | PatchCraft: Exploring Texture Patch for Efficient AI-generated Image Detection | [ModelScope](https://modelscope.cn/datasets/aemilia/AIGCDetectionBenchmark/tree/master/AIGCDetectionBenchMark) | +| AIGIBench | Is Artificial Intelligence Generated Image Detection a Solved Problem? (NeurIPS 2025) | [Huggingface](https://huggingface.co/datasets/HorizonTEL/AIGIBench)/[Baidu Netdisk](https://pan.baidu.com/s/1XTwfXlfqkGxAwYLxXuZbfA?pwd=sm6v) | +### 3.Inference +Of course, you need to change [DetectionTests] in test.py when testing. + +We present our inference results in log_test.log. +``` +python test.py --model_path ./checkpoints/model_epoch_last.pth +``` + +## ⏳ Training +The training set uses four classes from CNN-Spot(CNN-generated images are surprisingly easy to spot...for now, CVPR 2020): car, cat, chair, and horse. [Baidu Netdisk](https://pan.baidu.com/s/1l-rXoVhoc8xJDl20Cdwy4Q?pwd=ft8b) +``` +python train.py --name 4class-car-cat-chair-horse --dataroot [training datasets path] --classes car,cat,chair,horse +``` + +## Citation +``` +@article{yan2026dual, + title={Dual Frequency Branch Framework with Reconstructed Sliding Windows Attention for AI-Generated Image Detection}, + author={Yan, Jiazhen and Li, Ziqiang and Wang, Fan and He, Ziwen and Fu, Zhangjie}, + journal={IEEE Transactions on Information Forensics and Security}, + year={2026}, + publisher={IEEE} +} +``` + +## Contact +If you have any question about this project, please feel free to contact 247918horizon@gmail.com + diff --git a/detector_codes/DFFreq-main/data/__init__.py b/detector_codes/DFFreq-main/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..987ebeeae51323c1b8face4155366b11831935d5 --- /dev/null +++ b/detector_codes/DFFreq-main/data/__init__.py @@ -0,0 +1,61 @@ +import torch +import numpy as np +from torch.utils.data.sampler import WeightedRandomSampler + +from .datasets import dataset_folder + +import os + + +# 获取数据集,要根据不同的需求进行修改 +''' +def get_dataset(opt): + dset_lst = [] + for cls in opt.classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) +''' + + +def get_dataset(opt): + classes = os.listdir(opt.dataroot) if len(opt.classes) == 0 else opt.classes + # 如果类文件夹中没有 '0_real' 和 '1_fake',会对每个类单独加载数据集,并将它们合并返回 + # 如果类文件夹中包含 '0_real' 和 '1_fake',则直接对整个根目录加载数据集 + if '0_real' not in classes or '1_fake' not in classes: + dset_lst = [] + for cls in classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) + return dataset_folder(opt, opt.dataroot) + + +def get_bal_sampler(dataset): + targets = [] + for d in dataset.datasets: + targets.extend(d.targets) + + ratio = np.bincount(targets) + w = 1. / torch.tensor(ratio, dtype=torch.float) + sample_weights = w[targets] + sampler = WeightedRandomSampler(weights=sample_weights, + num_samples=len(sample_weights)) + return sampler + + +def create_dataloader(opt): + # 是否打乱数据集 + shuffle = not opt.serial_batches if (opt.isTrain and not opt.class_bal) else False + dataset = get_dataset(opt) + sampler = get_bal_sampler(dataset) if opt.class_bal else None + + data_loader = torch.utils.data.DataLoader(dataset, + batch_size=opt.batch_size, + shuffle=shuffle, + sampler=sampler, + num_workers=int(opt.num_threads), + drop_last=opt.drop_last) + return data_loader diff --git a/detector_codes/DFFreq-main/data/datasets.py b/detector_codes/DFFreq-main/data/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..37eb59dfb5f2176c3fac31fac69cf8604e3b0e4b --- /dev/null +++ b/detector_codes/DFFreq-main/data/datasets.py @@ -0,0 +1,141 @@ +import cv2 +import numpy as np +import torchvision.datasets as datasets +import torchvision.transforms as transforms +import torchvision.transforms.functional as TF +from torch.utils.data import Dataset +from random import random, choice, shuffle +from io import BytesIO +from PIL import Image +from PIL import ImageFile +from scipy.ndimage.filters import gaussian_filter +import pickle +import os + +ImageFile.LOAD_TRUNCATED_IMAGES = True + + +def recursively_read(rootdir, must_contain, exts=["png", "jpg", "JPEG", "jpeg"]): + out = [] + for r, d, f in os.walk(rootdir): + for file in f: + if (file.split('.')[1] in exts) and (must_contain in os.path.join(r, file)): + out.append(os.path.join(r, file)) + return out + + +def get_list(path, must_contain=''): + if ".pickle" in path: + with open(path, 'rb') as f: + image_list = pickle.load(f) + image_list = [ item for item in image_list if must_contain in item ] + else: + image_list = recursively_read(path, must_contain) + return image_list + + +def dataset_folder(opt, root): + if opt.mode == 'binary': + return binary_dataset(opt, root) + if opt.mode == 'filename': + return FileNameDataset(opt, root) + raise ValueError('opt.mode needs to be binary or filename.') + + +def binary_dataset(opt, root): + dset = datasets.ImageFolder( + root, + transforms.Compose([ + transforms.RandomCrop(opt.cropSize) if opt.isTrain else transforms.CenterCrop(opt.cropSize), + transforms.RandomHorizontalFlip() if opt.isTrain and not opt.no_flip else transforms.Lambda(lambda img: img), + transforms.ToTensor(), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ])) + return dset + + +class FileNameDataset(datasets.ImageFolder): + def name(self): + return 'FileNameDataset' + + def __init__(self, opt, root): + self.opt = opt + super().__init__(root) + + def __getitem__(self, index): + # Loading sample + path, target = self.samples[index] + return path + + +def data_augment(img, opt): + img = np.array(img) + if img.ndim == 2: + img = np.expand_dims(img, axis=2) + img = np.repeat(img, 3, axis=2) + + if random() < opt.blur_prob: + sig = sample_continuous(opt.blur_sig) + gaussian_blur(img, sig) + + if random() < opt.jpg_prob: + method = sample_discrete(opt.jpg_method) + qual = sample_discrete(opt.jpg_qual) + img = jpeg_from_key(img, qual, method) + + return Image.fromarray(img) + + +def sample_continuous(s): + if len(s) == 1: + return s[0] + if len(s) == 2: + rg = s[1] - s[0] + return random() * rg + s[0] + raise ValueError("Length of iterable s should be 1 or 2.") + + +def sample_discrete(s): + if len(s) == 1: + return s[0] + return choice(s) + + +def gaussian_blur(img, sigma): + gaussian_filter(img[:,:,0], output=img[:,:,0], sigma=sigma) + gaussian_filter(img[:,:,1], output=img[:,:,1], sigma=sigma) + gaussian_filter(img[:,:,2], output=img[:,:,2], sigma=sigma) + + +def cv2_jpg(img, compress_val): + img_cv2 = img[:,:,::-1] + encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), compress_val] + result, encimg = cv2.imencode('.jpg', img_cv2, encode_param) + decimg = cv2.imdecode(encimg, 1) + return decimg[:,:,::-1] + + +def pil_jpg(img, compress_val): + out = BytesIO() + img = Image.fromarray(img) + img.save(out, format='jpeg', quality=compress_val) + img = Image.open(out) + # load from memory before ByteIO closes + img = np.array(img) + out.close() + return img + + +jpeg_dict = {'cv2': cv2_jpg, 'pil': pil_jpg} +def jpeg_from_key(img, compress_val, key): + method = jpeg_dict[key] + return method(img, compress_val) + + +rz_dict = {'bilinear': Image.BILINEAR, + 'bicubic': Image.BICUBIC, + 'lanczos': Image.LANCZOS, + 'nearest': Image.NEAREST} +def custom_resize(img, opt): + interp = sample_discrete(opt.rz_interp) + return TF.resize(img, opt.loadSize, interpolation=rz_dict[interp]) diff --git a/detector_codes/DFFreq-main/log_test.log b/detector_codes/DFFreq-main/log_test.log new file mode 100644 index 0000000000000000000000000000000000000000..cec412e66019bc5ca72d44c1a25cae7a775e8463 --- /dev/null +++ b/detector_codes/DFFreq-main/log_test.log @@ -0,0 +1,103 @@ +2025-05-17 13:22:11,247 ForenSynths +2025-05-17 13:22:11,247 2025-05-17 13:22:11 +2025-05-17 13:22:20,469 (0 progan ) acc: 99.8; ap: 100.0; r_acc: 100.0; f_acc: 99.6 +2025-05-17 13:23:21,301 (1 seeingdark ) acc: 41.8; ap: 55.1; r_acc: 20.0; f_acc: 93.4 +2025-05-17 13:23:31,975 (2 gaugan ) acc: 85.1; ap: 96.7; r_acc: 70.3; f_acc: 100.0 +2025-05-17 13:23:48,922 (3 stylegan2 ) acc: 99.9; ap: 100.0; r_acc: 100.0; f_acc: 99.8 +2025-05-17 13:23:53,621 (4 whichfaceisreal) acc: 52.2; ap: 46.8; r_acc: 99.9; f_acc: 0.4 +2025-05-17 13:23:58,226 (5 biggan ) acc: 87.1; ap: 95.1; r_acc: 74.8; f_acc: 99.6 +2025-05-17 13:24:10,895 (6 stylegan ) acc: 99.8; ap: 100.0; r_acc: 100.0; f_acc: 99.6 +2025-05-17 13:24:24,537 (7 imle ) acc: 50.0; ap: 68.7; r_acc: 0.8; f_acc: 100.0 +2025-05-17 13:24:27,684 (8 cyclegan ) acc: 97.9; ap: 98.8; r_acc: 96.6; f_acc: 99.4 +2025-05-17 13:24:32,244 (9 stargan ) acc: 94.9; ap: 99.2; r_acc: 91.4; f_acc: 98.5 +2025-05-17 13:24:34,123 (10 san ) acc: 96.4; ap: 99.6; r_acc: 95.9; f_acc: 97.0 +2025-05-17 13:24:47,736 (11 crn ) acc: 50.0; ap: 68.3; r_acc: 0.8; f_acc: 100.0 +2025-05-17 13:24:53,796 (12 deepfake ) acc: 64.2; ap: 71.8; r_acc: 74.6; f_acc: 53.7 +2025-05-17 13:24:53,797 (13 Mean ) acc: 78.4; ap: 84.6; r_acc: 71.2; f_acc: 87.8 +2025-05-17 13:24:53,808 ************************* +2025-05-17 13:24:53,808 GANGen-Detection +2025-05-17 13:24:53,808 2025-05-17 13:24:53 +2025-05-17 13:24:55,833 (0 SNGAN ) acc: 96.8; ap: 99.6; r_acc: 98.8; f_acc: 94.8 +2025-05-17 13:24:57,779 (1 BEGAN ) acc: 98.6; ap: 99.7; r_acc: 97.2; f_acc: 99.9 +2025-05-17 13:25:02,393 (2 AttGAN ) acc: 99.0; ap: 99.8; r_acc: 98.0; f_acc: 100.0 +2025-05-17 13:25:04,340 (3 InfoMaxGAN ) acc: 97.2; ap: 99.7; r_acc: 98.8; f_acc: 95.7 +2025-05-17 13:25:06,280 (4 STGAN ) acc: 99.1; ap: 100.0; r_acc: 99.8; f_acc: 98.5 +2025-05-17 13:25:08,245 (5 CramerGAN ) acc: 98.0; ap: 99.7; r_acc: 98.8; f_acc: 97.2 +2025-05-17 13:25:10,208 (6 MMDGAN ) acc: 98.7; ap: 99.8; r_acc: 98.8; f_acc: 98.7 +2025-05-17 13:25:14,790 (7 S3GAN ) acc: 83.2; ap: 91.1; r_acc: 68.0; f_acc: 98.6 +2025-05-17 13:25:19,403 (8 RelGAN ) acc: 99.0; ap: 99.9; r_acc: 98.0; f_acc: 100.0 +2025-05-17 13:25:19,403 (9 Mean ) acc: 96.6; ap: 98.8; r_acc: 95.1; f_acc: 98.1 +2025-05-17 13:25:19,416 ************************* +2025-05-17 13:25:19,416 DiffusionForensics +2025-05-17 13:25:19,416 2025-05-17 13:25:19 +2025-05-17 13:25:32,012 (0 adm ) acc: 96.0; ap: 99.8; r_acc: 99.7; f_acc: 92.1 +2025-05-17 13:25:34,393 (1 pndm ) acc: 99.2; ap: 100.0; r_acc: 100.0; f_acc: 98.4 +2025-05-17 13:25:37,331 (2 sdv2 ) acc: 99.9; ap: 100.0; r_acc: 100.0; f_acc: 99.8 +2025-05-17 13:25:39,721 (3 iddpm ) acc: 98.5; ap: 100.0; r_acc: 100.0; f_acc: 96.8 +2025-05-17 13:25:42,102 (4 vqdiffusion ) acc: 100.0; ap: 100.0; r_acc: 100.0; f_acc: 100.0 +2025-05-17 13:25:44,497 (5 ldm ) acc: 99.6; ap: 100.0; r_acc: 100.0; f_acc: 99.2 +2025-05-17 13:25:46,491 (6 ddpm ) acc: 99.9; ap: 100.0; r_acc: 100.0; f_acc: 99.6 +2025-05-17 13:26:04,269 (7 sdv1_new ) acc: 97.5; ap: 99.9; r_acc: 99.7; f_acc: 96.3 +2025-05-17 13:26:04,269 (8 Mean ) acc: 98.8; ap: 100.0; r_acc: 99.9; f_acc: 97.8 +2025-05-17 13:26:04,269 ************************* +2025-05-17 13:26:04,269 UniversalFakeDetect +2025-05-17 13:26:04,269 2025-05-17 13:26:04 +2025-05-17 13:26:06,664 (0 glide_50_27 ) acc: 98.0; ap: 99.9; r_acc: 99.4; f_acc: 96.5 +2025-05-17 13:26:09,041 (1 ldm_200_cfg ) acc: 98.9; ap: 99.9; r_acc: 99.4; f_acc: 98.3 +2025-05-17 13:26:11,519 (2 guided ) acc: 95.2; ap: 97.8; r_acc: 94.0; f_acc: 96.5 +2025-05-17 13:26:13,870 (3 glide_100_27) acc: 97.2; ap: 99.7; r_acc: 99.4; f_acc: 94.9 +2025-05-17 13:26:16,236 (4 dalle ) acc: 85.2; ap: 97.1; r_acc: 99.4; f_acc: 69.7 +2025-05-17 13:26:18,661 (5 glide_100_10) acc: 97.7; ap: 99.9; r_acc: 99.4; f_acc: 95.9 +2025-05-17 13:26:21,038 (6 ldm_200 ) acc: 99.5; ap: 100.0; r_acc: 99.4; f_acc: 99.6 +2025-05-17 13:26:23,392 (7 ldm_100 ) acc: 99.4; ap: 100.0; r_acc: 99.4; f_acc: 99.5 +2025-05-17 13:26:23,392 (8 Mean ) acc: 96.4; ap: 99.3; r_acc: 98.7; f_acc: 93.8 +2025-05-17 13:26:23,425 ************************* +2025-05-17 13:26:23,426 Genimage +2025-05-17 13:26:23,426 2025-05-17 13:26:23 +2025-05-17 13:26:36,134 (0 Glide ) acc: 95.2; ap: 98.7; r_acc: 94.2; f_acc: 96.1 +2025-05-17 13:26:40,821 (1 whichfaceisreal) acc: 52.2; ap: 46.8; r_acc: 99.9; f_acc: 0.4 +2025-05-17 13:26:53,667 (2 VQDM ) acc: 96.5; ap: 98.3; r_acc: 94.4; f_acc: 98.7 +2025-05-17 13:27:06,497 (3 wukong ) acc: 93.5; ap: 96.9; r_acc: 94.3; f_acc: 92.7 +2025-05-17 13:27:09,098 (4 DALLE2 ) acc: 96.8; ap: 99.2; r_acc: 96.0; f_acc: 97.7 +2025-05-17 13:27:30,859 (5 Midjourney ) acc: 94.7; ap: 97.8; r_acc: 94.0; f_acc: 95.3 +2025-05-17 13:27:48,010 (6 stable_diffusion_v_1_5) acc: 94.5; ap: 98.0; r_acc: 94.1; f_acc: 95.0 +2025-05-17 13:27:52,622 (7 biggan ) acc: 87.1; ap: 95.1; r_acc: 74.8; f_acc: 99.6 +2025-05-17 13:28:05,676 (8 ADM ) acc: 94.2; ap: 97.3; r_acc: 93.8; f_acc: 94.7 +2025-05-17 13:28:22,576 (9 stylegan2 ) acc: 99.9; ap: 100.0; r_acc: 100.0; f_acc: 99.8 +2025-05-17 13:28:35,734 (10 stable_diffusion_v_1_4) acc: 94.2; ap: 97.6; r_acc: 93.8; f_acc: 94.7 +2025-05-17 13:28:38,960 (11 cyclegan ) acc: 98.0; ap: 98.8; r_acc: 96.6; f_acc: 99.6 +2025-05-17 13:28:49,874 (12 gaugan ) acc: 85.1; ap: 96.7; r_acc: 70.3; f_acc: 100.0 +2025-05-17 13:28:54,567 (13 stargan ) acc: 94.9; ap: 99.2; r_acc: 91.4; f_acc: 98.5 +2025-05-17 13:29:03,312 (14 progan ) acc: 99.8; ap: 100.0; r_acc: 100.0; f_acc: 99.6 +2025-05-17 13:29:16,549 (15 stylegan ) acc: 99.8; ap: 100.0; r_acc: 100.0; f_acc: 99.6 +2025-05-17 13:29:16,549 (16 Mean ) acc: 92.3; ap: 95.0; r_acc: 93.0; f_acc: 91.4 +2025-05-17 13:29:16,564 ************************* +2025-05-17 13:31:07,396 AIGIBench +2025-05-17 13:31:07,396 2025-05-17 13:31:07 +2025-05-17 13:31:29,374 (0 SD3 ) acc: 95.4; ap: 97.6; r_acc: 92.3; f_acc: 98.6 +2025-05-17 13:32:11,322 (1 R3GAN ) acc: 94.6; ap: 94.9; r_acc: 90.6; f_acc: 98.6 +2025-05-17 13:34:13,536 (2 SocialRF ) acc: 60.8; ap: 70.8; r_acc: 98.9; f_acc: 21.1 +2025-05-17 13:35:12,299 (3 BLIP ) acc: 99.2; ap: 99.7; r_acc: 98.6; f_acc: 99.9 +2025-05-17 13:35:49,602 (4 CommunityAI ) acc: 54.6; ap: 66.6; r_acc: 99.1; f_acc: 9.4 +2025-05-17 13:36:31,737 (5 GLIDE ) acc: 94.2; ap: 98.4; r_acc: 92.9; f_acc: 95.6 +2025-05-17 13:37:02,723 (6 E4S ) acc: 45.1; ap: 46.4; r_acc: 84.7; f_acc: 5.2 +2025-05-17 13:38:20,884 (7 Imagen3 ) acc: 93.6; ap: 96.0; r_acc: 90.1; f_acc: 97.1 +2025-05-17 13:39:03,634 (8 InSwap ) acc: 52.1; ap: 63.7; r_acc: 93.4; f_acc: 9.1 +2025-05-17 13:39:23,922 (9 FaceSwap ) acc: 50.8; ap: 66.8; r_acc: 93.0; f_acc: 7.0 +2025-05-17 13:40:49,922 (10 Infinite-ID ) acc: 90.0; ap: 91.0; r_acc: 91.0; f_acc: 89.1 +2025-05-17 13:41:12,808 (11 ProGAN ) acc: 99.8; ap: 100.0; r_acc: 100.0; f_acc: 99.6 +2025-05-17 13:42:28,349 (12 FLUX1-dev ) acc: 93.2; ap: 96.8; r_acc: 89.5; f_acc: 96.8 +2025-05-17 13:43:15,196 (13 StyleSwim ) acc: 94.7; ap: 98.6; r_acc: 89.6; f_acc: 99.8 +2025-05-17 13:44:36,298 (14 SDXL ) acc: 95.9; ap: 98.7; r_acc: 92.3; f_acc: 99.6 +2025-05-17 13:45:20,796 (15 SimSwap ) acc: 48.4; ap: 57.7; r_acc: 93.2; f_acc: 3.2 +2025-05-17 13:46:34,734 (16 IP-Adapter ) acc: 93.3; ap: 96.6; r_acc: 90.0; f_acc: 96.7 +2025-05-17 13:47:29,435 (17 DALLE-3 ) acc: 46.2; ap: 49.0; r_acc: 90.1; f_acc: 1.6 +2025-05-17 13:49:48,305 (18 StyleGAN-XL ) acc: 82.3; ap: 86.4; r_acc: 90.2; f_acc: 74.2 +2025-05-17 13:50:02,557 (19 WFIR ) acc: 52.2; ap: 46.8; r_acc: 99.9; f_acc: 0.4 +2025-05-17 13:52:13,759 (20 StyleGAN3 ) acc: 93.2; ap: 98.2; r_acc: 90.8; f_acc: 95.7 +2025-05-17 13:54:31,089 (21 PhotoMaker ) acc: 92.7; ap: 95.2; r_acc: 89.7; f_acc: 95.7 +2025-05-17 13:56:18,225 (22 Midjourney ) acc: 86.4; ap: 92.7; r_acc: 76.4; f_acc: 96.8 +2025-05-17 13:57:20,305 (23 BlendFace ) acc: 44.1; ap: 44.0; r_acc: 83.9; f_acc: 3.9 +2025-05-17 14:00:03,488 (24 InstantID ) acc: 94.6; ap: 97.7; r_acc: 90.5; f_acc: 98.8 +2025-05-17 14:00:03,488 (25 Mean ) acc: 77.9; ap: 82.0; r_acc: 91.6; f_acc: 63.7 +2025-05-17 14:00:03,522 ************************* diff --git a/detector_codes/DFFreq-main/networks/FreqLC.py b/detector_codes/DFFreq-main/networks/FreqLC.py new file mode 100644 index 0000000000000000000000000000000000000000..52227607883d78bffa3386a404d145ea49ff4f32 --- /dev/null +++ b/detector_codes/DFFreq-main/networks/FreqLC.py @@ -0,0 +1,179 @@ +from einops import rearrange +import numbers +import math +import torch +import torch.nn.functional as F +import torch.nn as nn +from pytorch_wavelets import DWTForward, DWTInverse + + +def d4_to_3d(x): + return rearrange(x, 'b c h w -> b (h w) c') + + +def d3_to_4d(x, h, w): + return rearrange(x, 'b (h w) c -> b c h w', h=h, w=w) + + +def d5_to_3d(x): + return rearrange(x, 'b c s h w -> b (s h w) c') + + +def d3_to_5d(x, s, h, w): + x = rearrange(x, 'b (s h w) c -> b c s h w', s=s, h=h, w=w) + return x + + +class WithBias_LayerNorm(nn.Module): + def __init__(self, normalized_shape, bias, mu_sigma=False): + super(WithBias_LayerNorm, self).__init__() + if isinstance(normalized_shape, numbers.Integral): + normalized_shape = (normalized_shape,) + normalized_shape = torch.Size(normalized_shape) + self.mu_sigma = mu_sigma + assert len(normalized_shape) == 1 + + self.weight = nn.Parameter(torch.ones(normalized_shape)) + self.norm_bias = bias + if bias: + self.bias = nn.Parameter(torch.zeros(normalized_shape)) + self.normalized_shape = normalized_shape + + def forward(self, x): + + mu = x.mean(-1, keepdim=True) + sigma = x.var(-1, keepdim=True, unbiased=False) + if self.norm_bias: + x = (x - mu) / torch.sqrt(sigma+1e-5) * self.weight + self.bias + else: + x = (x - mu) / torch.sqrt(sigma+1e-5) * self.weight + if self.mu_sigma: + return x, mu, sigma + else: + return x + + +class LayerNorm(nn.Module): + def __init__(self, dim, bias=True, mu_sigma=False, out_dir=None): + super(LayerNorm, self).__init__() + self.mu_sigma = mu_sigma + self.body = WithBias_LayerNorm(dim, bias, mu_sigma) + self.out_dir = out_dir + + def forward(self, x): + h, w = x.shape[-2:] + x = d4_to_3d(x) + + if self.mu_sigma: + x, mu, sigma = self.body(x) + return d3_to_4d(x, h, w), d3_to_4d(mu, h, w), d3_to_4d(sigma, h, w) + else: + x = self.body(x) + return d3_to_4d(x, h, w) + + +def check_image_size(x, padder_size, mode='reflect'): + _, _, h, w = x.size() + if isinstance(padder_size, int): + padder_size_h = padder_size + padder_size_w = padder_size + else: + padder_size_h, padder_size_w = padder_size + mod_pad_h = (padder_size_h - h % padder_size_h) % padder_size_h + mod_pad_w = (padder_size_w - w % padder_size_w) % padder_size_w + x = F.pad(x, (0, mod_pad_w, 0, mod_pad_h), mode=mode) + return x + + + +class LocalAttention(nn.Module): + def __init__(self, dim, num_heads, bias, window_size=8, padding_mode='zeros'): + super().__init__() + self.num_heads = num_heads + self.window_size = window_size + + self.mlp = nn.Sequential( + nn.Linear(window_size**2, window_size**2, bias=True), + nn.GELU(), + ) + + self.qkv = nn.Conv2d(dim, dim * 3, kernel_size=1, bias=bias) + + self.qkv_dwconv = nn.Conv2d(dim * 3, dim * 3, kernel_size=3, + stride=1, padding=1, groups=dim * 3, bias=bias, padding_mode=padding_mode) + + self.temperature = nn.Parameter(torch.ones(num_heads, 1, 1) / math.sqrt(dim)) + + self.project_out = nn.Conv2d(dim, dim, kernel_size=1, bias=True) + + def get_attn(self, qkv): + H, W = qkv.shape[-2:] + qkv = check_image_size(qkv, self.window_size) + Hx, Wx = qkv.shape[-2:] + qkv = rearrange(qkv, 'b (z head c) (h1 h) (w1 w) -> z (b h1 w1) head c (h w)', z=3, head=self.num_heads, + h=self.window_size, w=self.window_size) + + q, k, v = qkv[0], qkv[1], qkv[2] + attn = (q @ k.transpose(-2, -1)) * self.temperature + attn = attn.softmax(dim=-1) + out = (attn @ v) + + out = out * self.mlp(v) + out = rearrange(out, '(b h1 w1) head c (h w) -> b (head c) (h1 h) (w1 w)', head=self.num_heads, h1=Hx//self.window_size, + w1=Wx//self.window_size, h=self.window_size, w=self.window_size) + + return out[:, :, :H, :W] + + def forward(self, x): + qkv = self.qkv_dwconv(self.qkv(x)) + out = self.get_attn(qkv) + out = self.project_out(out) + return out + + +class FreqLCBlock(nn.Module): + def __init__(self, dim=32, + num_heads=1, + bias=False, + LayerNorm_type='WithBias', + window_size=8, + ): + super(FreqLCBlock, self).__init__() + + self.dim = dim + self.window_size = window_size + + self.dwt_transform = DWTForward(J=1, wave='haar') + self.idwt_transform = DWTInverse(wave='haar') + + self.norm1 = LayerNorm(dim, LayerNorm_type) + self.dwt_attn = LocalAttention(dim, num_heads, bias, window_size=window_size) + self.fft_attn = LocalAttention(dim, num_heads, bias, window_size=8) + self.fft_scale = nn.Parameter(torch.zeros(1)) + + def forward(self, x): + # DWT + x_dwt_l, x_dwt_h = self.dwt_transform(x) + x_dwt = torch.cat([x_dwt_l.unsqueeze(2), x_dwt_h[0]], dim=2) + bs, _, _, hh, ww = x_dwt.shape + dwt_img = rearrange(x_dwt, 'bs c c1 (h1 h) (w1 w) -> bs c c1 (h1 w1 h w)', h1=hh//2, w1=ww//2, h=2, w=2) + x_attn = self.dwt_attn(self.norm1(dwt_img)) + x_dwt = dwt_img + x_attn + x_dwt = rearrange(x_dwt, 'bs c c1 (h1 w1 h w)-> bs c c1 (h1 h) (w1 w)', h1=hh//2, w1=ww//2, h=2, w=2) + x_idwt = self.idwt_transform((x_dwt[:, :, 0], [x_dwt[:, :, 1:]])) + + # FFT + _, _, H, W = x.shape + x_fft = torch.fft.rfft2(x, norm='backward') + mag = torch.abs(x_fft) + + pha = torch.angle(x_fft) + pha = self.fft_attn(pha) + + real = mag * torch.cos(pha) + imag = mag * torch.sin(pha) + x_fft = torch.complex(real, imag) + x_ifft = torch.fft.irfft2(x_fft, s=(H, W), norm='backward') * self.fft_scale + + x = x_idwt * 0.6 + x_ifft * 0.4 + return x diff --git a/detector_codes/DFFreq-main/networks/__init__.py b/detector_codes/DFFreq-main/networks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/DFFreq-main/networks/base_model.py b/detector_codes/DFFreq-main/networks/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..a43361cbeace9137d78d8dec078758cd462e22a8 --- /dev/null +++ b/detector_codes/DFFreq-main/networks/base_model.py @@ -0,0 +1,87 @@ +import os +import torch +import torch.nn as nn +from torch.nn import init +from torch.optim import lr_scheduler + + +class BaseModel(nn.Module): + def __init__(self, opt): + super(BaseModel, self).__init__() + self.opt = opt + self.total_steps = 0 + self.isTrain = opt.isTrain + self.lr = opt.lr + self.save_dir = os.path.join(opt.checkpoints_dir, opt.name) + self.device = torch.device('cuda:{}'.format(opt.gpu_ids[0])) if opt.gpu_ids else torch.device('cpu') + + def save_networks(self, epoch): + save_filename = 'model_epoch_%s.pth' % epoch + save_path = os.path.join(self.save_dir, save_filename) + + # serialize model and optimizer to dict + state_dict = { + 'model': self.model.state_dict(), + 'optimizer': self.optimizer.state_dict(), + 'total_steps': self.total_steps, + } + + torch.save(self.model.state_dict(), save_path) + print(f'Saving model {save_path}') + + # load models from the disk + def load_networks(self, epoch): + load_filename = 'model_epoch_%s.pth' % epoch + load_path = os.path.join(self.save_dir, load_filename) + + print('loading the model from %s' % load_path) + # if you are using PyTorch newer than 0.4 (e.g., built from + # GitHub source), you can remove str() on self.device + state_dict = torch.load(load_path, map_location=self.device) + if hasattr(state_dict, '_metadata'): + del state_dict._metadata + + self.model.load_state_dict(state_dict['model']) + self.total_steps = state_dict['total_steps'] + + if self.isTrain and not self.opt.new_optim: + self.optimizer.load_state_dict(state_dict['optimizer']) + # move optimizer state to GPU + for state in self.optimizer.state.values(): + for k, v in state.items(): + if torch.is_tensor(v): + state[k] = v.to(self.device) + + for g in self.optimizer.param_groups: + g['lr'] = self.opt.lr + + def eval(self): + self.model.eval() + + def test(self): + with torch.no_grad(): + self.forward() + + +def init_weights(net, init_type='normal', gain=0.02): + def init_func(m): + classname = m.__class__.__name__ + if hasattr(m, 'weight') and (classname.find('Conv') != -1 or classname.find('Linear') != -1): + if init_type == 'normal': + init.normal_(m.weight.data, 0.0, gain) + elif init_type == 'xavier': + init.xavier_normal_(m.weight.data, gain=gain) + elif init_type == 'kaiming': + init.kaiming_normal_(m.weight.data, a=0, mode='fan_in') + elif init_type == 'orthogonal': + init.orthogonal_(m.weight.data, gain=gain) + else: + raise NotImplementedError('initialization method [%s] is not implemented' % init_type) + if hasattr(m, 'bias') and m.bias is not None: + init.constant_(m.bias.data, 0.0) + elif classname.find('BatchNorm2d') != -1: + init.normal_(m.weight.data, 1.0, gain) + init.constant_(m.bias.data, 0.0) + + print('initialize network with %s' % init_type) + net.apply(init_func) diff --git a/detector_codes/DFFreq-main/networks/resnet.py b/detector_codes/DFFreq-main/networks/resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..ffc45a1d4d0e0d33b7050863c0fca437c67368fd --- /dev/null +++ b/detector_codes/DFFreq-main/networks/resnet.py @@ -0,0 +1,227 @@ +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +from torch.nn import functional as F +from pytorch_wavelets import DWTForward, DWTInverse +from .FreqLC import FreqLCBlock + +__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', + 'resnet152'] + + +model_urls = { + 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', + 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth', + 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth', + 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth', + 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', +} + + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=1, bias=False) + + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(BasicBlock, self).__init__() + self.conv1 = conv3x3(inplanes, planes, stride) + self.bn1 = nn.BatchNorm2d(planes) + self.relu = nn.ReLU(inplace=True) + self.conv2 = conv3x3(planes, planes) + self.bn2 = nn.BatchNorm2d(planes) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(Bottleneck, self).__init__() + self.conv1 = conv1x1(inplanes, planes) + self.bn1 = nn.BatchNorm2d(planes) + self.conv2 = conv3x3(planes, planes, stride) + self.bn2 = nn.BatchNorm2d(planes) + self.conv3 = conv1x1(planes, planes * self.expansion) + self.bn3 = nn.BatchNorm2d(planes * self.expansion) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class ResNet(nn.Module): + + def __init__(self, block, layers, num_classes=1, zero_init_residual=False): + super(ResNet, self).__init__() + + self.unfoldSize = 2 + self.unfoldIndex = 0 + assert self.unfoldSize > 1 + assert -1 < self.unfoldIndex and self.unfoldIndex < self.unfoldSize*self.unfoldSize + self.inplanes = 64 + self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1, bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64 , layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + # self.fc1 = nn.Linear(512 * block.expansion, 1) + self.fc1 = nn.Linear(512, num_classes) + self.dwt_transform = DWTForward(J=1, wave='haar') + self.idwt_transform = DWTInverse(wave='haar') + self.FreqLCBlock = FreqLCBlock(3, window_size=4) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, nn.BatchNorm2d): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + + # Zero-initialize the last BN in each residual branch, + # so that the residual branch starts with zeros, and each residual block behaves like an identity. + # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + nn.init.constant_(m.bn3.weight, 0) + elif isinstance(m, BasicBlock): + nn.init.constant_(m.bn2.weight, 0) + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + conv1x1(self.inplanes, planes * block.expansion, stride), + nn.BatchNorm2d(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.FreqLCBlock(x) + + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc1(x) + + return x + + +def resnet18(pretrained=False, **kwargs): + """Constructs a ResNet-18 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [2, 2, 2, 2], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet18'])) + return model + + +def resnet34(pretrained=False, **kwargs): + """Constructs a ResNet-34 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet34'])) + return model + + +def resnet50(pretrained=False, **kwargs): + """Constructs a ResNet-50 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet50'])) + return model + + +def resnet101(pretrained=False, **kwargs): + """Constructs a ResNet-101 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 23, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet101'])) + return model + + +def resnet152(pretrained=False, **kwargs): + """Constructs a ResNet-152 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 8, 36, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet152'])) + return model \ No newline at end of file diff --git a/detector_codes/DFFreq-main/networks/trainer.py b/detector_codes/DFFreq-main/networks/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..61043d4c215d12ace8b2828251a88b4166773b14 --- /dev/null +++ b/detector_codes/DFFreq-main/networks/trainer.py @@ -0,0 +1,64 @@ +import functools +import torch +import torch.nn as nn +from networks.resnet import resnet50 +from networks.base_model import BaseModel, init_weights + + +class Trainer(BaseModel): + def name(self): + return 'Trainer' + + def __init__(self, opt): + super(Trainer, self).__init__(opt) + + if self.isTrain and not opt.continue_train: + self.model = resnet50(pretrained=False, num_classes=1) + + if not self.isTrain or opt.continue_train: + self.model = resnet50(num_classes=1) + + if self.isTrain: + self.loss_fn = nn.BCEWithLogitsLoss() + # initialize optimizers + if opt.optim == 'adam': + self.optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, betas=(opt.beta1, 0.999)) + elif opt.optim == 'sgd': + self.optimizer = torch.optim.SGD(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, momentum=0.0, weight_decay=0) + else: + raise ValueError("optim should be [adam, sgd]") + + if not self.isTrain or opt.continue_train: + self.load_networks(opt.epoch) + self.model.to(opt.gpu_ids[0]) + + def adjust_learning_rate(self, min_lr=1e-6): + for param_group in self.optimizer.param_groups: + param_group['lr'] *= 0.9 + if param_group['lr'] < min_lr: + return False + self.lr = param_group['lr'] + print('*' * 25) + print(f'Changing lr from {param_group["lr"] / 0.9} to {param_group["lr"]}') + print('*' * 25) + return True + + def set_input(self, input): + self.input = input[0].to(self.device) + self.label = input[1].to(self.device).float() + + def forward(self): + self.output = self.model(self.input) + return self.output + + def get_loss(self): + return self.loss_fn(self.output.squeeze(1), self.label) + + def optimize_parameters(self): + self.forward() + self.loss = self.loss_fn(self.output.squeeze(1), self.label) + self.optimizer.zero_grad() + self.loss.backward() + self.optimizer.step() diff --git a/detector_codes/DFFreq-main/options/__init__.py b/detector_codes/DFFreq-main/options/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/DFFreq-main/options/base_options.py b/detector_codes/DFFreq-main/options/base_options.py new file mode 100644 index 0000000000000000000000000000000000000000..20544304e8a60d9d65a3a443935b2eb7e3c58f04 --- /dev/null +++ b/detector_codes/DFFreq-main/options/base_options.py @@ -0,0 +1,116 @@ +import argparse +import os +import util +import torch +import time + + +class BaseOptions(): + def __init__(self): + self.initialized = False + + def initialize(self, parser): + parser.add_argument('--mode', default='binary') + parser.add_argument('--arch', type=str, default='resnet50') + + # data augmentation + parser.add_argument('--rz_interp', default='bilinear') + parser.add_argument('--blur_prob', type=float, default=0.5) + parser.add_argument('--blur_sig', default='0.0,3.0') + parser.add_argument('--jpg_prob', type=float, default=0.5) + parser.add_argument('--jpg_method', default='cv2') + parser.add_argument('--jpg_qual', default='30,100') + + parser.add_argument('--dataroot', default='./dataset/', help='path to images (should have subfolders trainA, trainB, valA, valB, etc)') + parser.add_argument('--classes', default='', help='image classes to train on') + + parser.add_argument('--class_bal', action='store_true') + parser.add_argument('--batch_size', type=int, default=128, help='input batch size') + parser.add_argument('--loadSize', type=int, default=256, help='scale images to this size') + parser.add_argument('--cropSize', type=int, default=256, help='then crop to this size') + parser.add_argument('--drop_last', type=bool, default=True, help='drop the last batchsize') + parser.add_argument('--gpu_ids', type=str, default='0', help='gpu ids: e.g. 0 0,1,2, 0,2. use -1 for CPU') + parser.add_argument('--name', type=str, default='experiment_name', help='name of the experiment. It decides where to store samples and models') + parser.add_argument('--num_threads', default=16, type=int, help='# threads for loading data') + parser.add_argument('--checkpoints_dir', type=str, default='./checkpoints', help='models are saved here') + parser.add_argument('--serial_batches', action='store_true', help='if true, takes images in order to make batches, otherwise takes them randomly') + parser.add_argument('--resize_or_crop', type=str, default='scale_and_crop', help='scaling and cropping of images at load time [resize_and_crop|crop|scale_width|scale_width_and_crop|none]') + parser.add_argument('--no_flip', action='store_true', help='if specified, do not flip the images for data augmentation') + parser.add_argument('--init_type', type=str, default='normal', help='network initialization [normal|xavier|kaiming|orthogonal]') + parser.add_argument('--init_gain', type=float, default=0.02, help='scaling factor for normal, xavier and orthogonal.') + parser.add_argument('--suffix', default='', type=str, help='customized suffix: opt.name = opt.name + suffix: e.g., {model}_{netG}_size{loadSize}') + parser.add_argument('--delr_freq', type=int, default=20, help='frequency of changing lr') + + self.initialized = True + return parser + + def gather_options(self): + # initialize parser with basic options + if not self.initialized: + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser = self.initialize(parser) + + # get the basic options + opt, _ = parser.parse_known_args() + self.parser = parser + + return opt # parser.parse_args() + + def print_options(self, opt): + message = '' + message += '----------------- Options ---------------\n' + for k, v in sorted(vars(opt).items()): + comment = '' + default = self.parser.get_default(k) + if v != default: + comment = '\t[default: %s]' % str(default) + message += '{:>25}: {:<30}{}\n'.format(str(k), str(v), comment) + message += '----------------- End -------------------' + print(message) + + # save to the disk + + expr_dir = os.path.join(opt.checkpoints_dir, opt.name) + util.mkdirs(expr_dir) + file_name = os.path.join(expr_dir, 'opt.txt') + with open(file_name, 'wt') as opt_file: + opt_file.write(message) + opt_file.write('\n') + + def parse(self, print_options=True): + + opt = self.gather_options() + opt.isTrain = self.isTrain # train or test + opt.name = opt.name + time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()) + # process opt.suffix + if opt.suffix: + suffix = ('_' + opt.suffix.format(**vars(opt))) if opt.suffix != '' else '' + opt.name = opt.name + suffix + + if print_options: + self.print_options(opt) + + # set gpu ids + str_ids = opt.gpu_ids.split(',') + opt.gpu_ids = [] + for str_id in str_ids: + id = int(str_id) + if id >= 0: + opt.gpu_ids.append(id) + if len(opt.gpu_ids) > 0: + torch.cuda.set_device(opt.gpu_ids[0]) + + # additional + opt.classes = opt.classes.split(',') + opt.rz_interp = opt.rz_interp.split(',') + opt.blur_sig = [float(s) for s in opt.blur_sig.split(',')] + opt.jpg_method = opt.jpg_method.split(',') + opt.jpg_qual = [int(s) for s in opt.jpg_qual.split(',')] + if len(opt.jpg_qual) == 2: + opt.jpg_qual = list(range(opt.jpg_qual[0], opt.jpg_qual[1] + 1)) + elif len(opt.jpg_qual) > 2: + raise ValueError("Shouldn't have more than 2 values for --jpg_qual.") + + self.opt = opt + return self.opt diff --git a/detector_codes/DFFreq-main/options/test_options.py b/detector_codes/DFFreq-main/options/test_options.py new file mode 100644 index 0000000000000000000000000000000000000000..f78160249f5f93257017004b584b14dc39019b4e --- /dev/null +++ b/detector_codes/DFFreq-main/options/test_options.py @@ -0,0 +1,19 @@ +from .base_options import BaseOptions + + +class TestOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--model_path') + parser.add_argument('--no_resize', action='store_true') + parser.add_argument('--no_crop', action='store_true') + parser.add_argument('--eval', action='store_true', help='use eval mode during test time.') + + parser.add_argument("--kd", default=True) + parser.add_argument("--kd_weight", default=1, type=int) + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--lr', type=float, default=0.00002, help='initial learning rate for adam') + parser.add_argument('--niter', type=int, default=0, help='# of iter at starting learning rate') + + self.isTrain = False + return parser diff --git a/detector_codes/DFFreq-main/options/train_options.py b/detector_codes/DFFreq-main/options/train_options.py new file mode 100644 index 0000000000000000000000000000000000000000..c89dc3ff5b1652ba2328f1a66264349d9915b327 --- /dev/null +++ b/detector_codes/DFFreq-main/options/train_options.py @@ -0,0 +1,41 @@ +from .base_options import BaseOptions + + +class TrainOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--data_aug', action='store_true', help='if specified, perform additional data augmentation (photometric, blurring, jpegging)') + parser.add_argument('--optim', type=str, default='adam', help='optim to use [sgd, adam]') + parser.add_argument('--new_optim', action='store_true', help='new optimizer instead of loading the optim state') + parser.add_argument('--loss_freq', type=int, default=400, help='frequency of showing loss on tensorboard') + parser.add_argument('--save_latest_freq', type=int, default=91, help='frequency of saving the latest results') + parser.add_argument('--save_epoch_freq', type=int, default=10, help='frequency of saving checkpoints at the end of epochs') + parser.add_argument('--continue_train', action='store_true', help='continue training: load the latest model') + parser.add_argument('--epoch_count', type=int, default=10, help='the starting epoch count, we save the model by , +, ...') + parser.add_argument('--last_epoch', type=int, default=-1, help='starting epoch count for scheduler intialization') + parser.add_argument('--train_split', type=str, default='train', help='train, val, test, etc') + parser.add_argument('--val_split', type=str, default='val', help='train, val, test, etc') + parser.add_argument('--niter', type=int, default=101, help='total epoches') + parser.add_argument('--beta1', type=float, default=0.9, help='momentum term of adam') + parser.add_argument('--lr', type=float, default=0.0001, help='initial learning rate for adam') + + parser.add_argument("--kd", default=True, type=str2bool) + parser.add_argument("--kd_weight", default=1, type=int) + # parser.add_argument('--model_path') + # parser.add_argument('--no_resize', action='store_true') + # parser.add_argument('--no_crop', action='store_true') + + self.isTrain = True + return parser + + +def str2bool(v: str) -> bool: + if isinstance(v, bool): + return v + elif v.lower() in ("true", "yes", "on", "y", "t", "1"): + return True + elif v.lower() in ("false", "no", "off", "n", "f", "0"): + return False + else: + return bool(v) diff --git a/detector_codes/DFFreq-main/requirements.txt b/detector_codes/DFFreq-main/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..fbdcb9f4b9ef8ce12eefe67d6185449d96f71c8c --- /dev/null +++ b/detector_codes/DFFreq-main/requirements.txt @@ -0,0 +1,11 @@ +einops==0.8.1 +matplotlib==3.10.3 +numpy==2.2.5 +opencv_python==4.10.0.84 +Pillow==11.2.1 +pytorch_wavelets==1.3.0 +scikit_learn==1.6.1 +scipy==1.15.3 +tensorboardX==2.6.2.2 +torch==2.5.1 +torchvision==0.20.1 diff --git a/detector_codes/DFFreq-main/test.py b/detector_codes/DFFreq-main/test.py new file mode 100644 index 0000000000000000000000000000000000000000..89ad1123f5eea79c0e79d155c4c9e90bdbfa9665 --- /dev/null +++ b/detector_codes/DFFreq-main/test.py @@ -0,0 +1,118 @@ +import sys +import time +import os +import csv +import torch +import logging +from util import Logger, printSet +from validate import validate +from networks.resnet import resnet50 +from options.test_options import TestOptions +import networks.resnet as resnet +from data import create_dataloader +import numpy as np +import random + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if you are using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +seed_torch(100) + + +DetectionTests = { + 'ForenSynths': { + 'dataroot': '/home/HDD/yjz/dataset/ForenSynths/test', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'UniversalFakeDetect': { + 'dataroot': '/home/HDD/yjz/dataset/UniversalFakeDetect', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'Genimage': { + 'dataroot': '/home/HDD/yjz/dataset/Genimage', + 'no_resize': False, + # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'AIGIBench': { + 'dataroot': '/home/HDD/yjz/dataset/AIGIBench', + 'no_resize': False, + # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, +} + +# Set up logging +logging.basicConfig( + filename='log_test.log', level=logging.INFO, format='%(asctime)s %(message)s' +) +logger = logging.getLogger() + +opt = TestOptions().parse(print_options=False) +log_msg = f'Model_path {opt.model_path}' +print(log_msg) +logger.info(log_msg) + +# Get model +model = resnet50(num_classes=1) +model.load_state_dict(torch.load(opt.model_path), strict=True) +model.cuda() +model.eval() + +for testSet in DetectionTests.keys(): + dataroot = DetectionTests[testSet]['dataroot'] + printSet(testSet) + logger.info(testSet) + + accs = [] + aps = [] + r_accs = [] + f_accs = [] + current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + print(current_time) + logger.info(current_time) + + for v_id, val in enumerate(os.listdir(dataroot)): + opt.dataroot = '{}/{}'.format(dataroot, val) + opt.classes = '' # os.listdir(opt.dataroot) if multiclass[v_id] else [''] + opt.no_resize = DetectionTests[testSet]['no_resize'] + opt.no_crop = DetectionTests[testSet]['no_crop'] + dataloader = create_dataloader(opt) + validate(model, dataloader) + acc, ap, r_acc, f_acc = validate(model, dataloader) + accs.append(acc) + aps.append(ap) + r_accs.append(r_acc) + f_accs.append(f_acc) + log_msg = ( + '({} {:12}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id, val, acc * 100, ap * 100, r_acc * 100, f_acc * 100 + ) + ) + print(log_msg) + logger.info(log_msg) + + mean_acc = np.array(accs).mean() * 100 + mean_ap = np.array(aps).mean() * 100 + mean_r_acc = np.array(r_accs).mean() * 100 + mean_f_acc = np.array(f_accs).mean() * 100 + + log_msg = '({} {:10}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f} f_acc: {:.1f}'.format( + v_id + 1, 'Mean', mean_acc, mean_ap, mean_r_acc, mean_f_acc + ) + print(log_msg) + logger.info(log_msg) + print('*' * 25) + logger.info('*' * 25) diff --git a/detector_codes/DFFreq-main/train.py b/detector_codes/DFFreq-main/train.py new file mode 100644 index 0000000000000000000000000000000000000000..80f3729832131f1e24694bee06118cc9af1ff2e4 --- /dev/null +++ b/detector_codes/DFFreq-main/train.py @@ -0,0 +1,130 @@ +import logging +import os +import random +import sys +import time + +import numpy as np +import torch +from data import create_dataloader +from networks.trainer import Trainer +from options.train_options import TrainOptions +from tensorboardX import SummaryWriter +from util import EarlyStopping, Logger +from validate import validate + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +def get_val_opt(): + val_opt = TrainOptions().parse(print_options=False) + val_opt.isTrain = False + val_opt.no_resize = False + val_opt.no_crop = False + val_opt.serial_batches = True + return val_opt + + +if __name__ == '__main__': + opt = TrainOptions().parse() + seed_torch(100) + opt.dataroot = f'{opt.dataroot}/{opt.train_split}/' + Logger(os.path.join(opt.checkpoints_dir, opt.name, 'logging.log')) + print(' '.join(list(sys.argv))) + val_opt = get_val_opt() + val_opt.dataroot = f'{val_opt.dataroot}/{val_opt.val_split}/' + + data_loader = create_dataloader(opt) + val_loader = create_dataloader(val_opt) + + train_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'train')) + val_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'val')) + + model = Trainer(opt) + model.train() + + n_parameters = sum(p.numel() for p in model.parameters() if p.requires_grad) + print('number of params:', n_parameters) + + early_stopping = EarlyStopping( + patience=opt.earlystop_epoch, delta=-0.001, verbose=True + ) + + # Configure logger + logging.basicConfig( + level=logging.INFO, # Set logging level + format='%(asctime)s - %(levelname)s - %(message)s', # Log format + datefmt='%Y-%m-%d %H:%M:%S', # Date format without milliseconds + handlers=[ + logging.FileHandler('log.log', mode='w'), # Log file output + logging.StreamHandler(), + ], + ) # Console output + + logger = logging.getLogger(__name__) + + print(f'cwd: {os.getcwd()}') + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} Length of data loader: {len(data_loader)}' + ) + logger.info(f'Length of data loader: {len(data_loader)}') + + for epoch in range(opt.niter): + for i, data in enumerate(data_loader): + model.total_steps += 1 + + # Move data to cuda + model.set_input(data) + # Train + model.optimize_parameters() + + if model.total_steps % opt.loss_freq == 0: + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}' + ) + logger.info( + f'Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}' + ) + train_writer.add_scalar('loss', model.loss, model.total_steps) + + if epoch % opt.save_epoch_freq == 0 and epoch != 0: + # Optionally save model at each epoch + print(f'saving the model at the end of epoch {epoch}') + logger.info(f'saving the model at the end of epoch {epoch}') + model.save_networks(epoch) + + if epoch % 10 == 0 and epoch != 0: + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} changing lr at the end of epoch {epoch}, iters {model.total_steps}' + ) + logger.info( + f'changing lr at the end of epoch {epoch}, iters {model.total_steps}' + ) + model.adjust_learning_rate() + + # Validation + model.eval() + acc, ap, r_acc, f_acc = validate(model.model, val_loader) + val_writer.add_scalar('accuracy', acc, model.total_steps) + val_writer.add_scalar('ap', ap, model.total_steps) + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} (Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}' + ) + logger.info( + f'(Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}' + ) + + model.train() + + model.eval() + model.save_networks('last') diff --git a/detector_codes/DFFreq-main/util.py b/detector_codes/DFFreq-main/util.py new file mode 100644 index 0000000000000000000000000000000000000000..6ec22936d32d5e96285b2009e3ac9db8905bf385 --- /dev/null +++ b/detector_codes/DFFreq-main/util.py @@ -0,0 +1,97 @@ +import os +import sys + +import numpy as np +import torch + + +def mkdirs(paths): + if isinstance(paths, list) and not isinstance(paths, str): + for path in paths: + mkdir(path) + else: + mkdir(paths) + + +def mkdir(path): + if not os.path.exists(path): + os.makedirs(path) + + +def unnormalize(tens, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]): + # assume tensor of shape NxCxHxW + return ( + tens * torch.Tensor(std)[None, :, None, None] + + torch.Tensor(mean)[None, :, None, None] + ) + + +class Logger(object): + """Log stdout messages.""" + + def __init__(self, outfile): + self.terminal = sys.stdout + self.log = open(outfile, 'a') + sys.stdout = self + + def write(self, message): + self.terminal.write(message) + self.log.write(message) + + def flush(self): + self.terminal.flush() + + +class EarlyStopping: + """Early stops the training if validation loss doesn't improve after a given patience.""" + + def __init__(self, patience=7, verbose=False, delta=0): + """ + Args: + patience (int): How long to wait after last time validation loss improved. + Default: 7 + verbose (bool): If True, prints a message for each validation loss improvement. + Default: False + delta (float): Minimum change in the monitored quantity to qualify as an improvement. + Default: 0 + """ + self.patience = patience + self.verbose = verbose + self.counter = 0 + self.best_score = None + self.early_stop = False + self.val_loss_min = np.inf + self.delta = delta + + def __call__(self, val_loss, model): + + score = -val_loss + + if self.best_score is None: + self.best_score = score + self.save_checkpoint(val_loss, model) + elif score < self.best_score + self.delta: + self.counter += 1 + print(f'EarlyStopping counter: {self.counter} out of {self.patience}') + if self.counter >= self.patience: + self.early_stop = True + else: + self.best_score = score + self.save_checkpoint(val_loss, model) + self.counter = 0 + + def save_checkpoint(self, val_loss, model): + """Saves model when validation loss decrease.""" + if self.verbose: + print( + f'Validation loss decreased ({self.val_loss_min:.6f} --> {val_loss:.6f}). Saving model ...' + ) + self.val_loss_min = val_loss + + +def printSet(set_str): + set_str = str(set_str) + num = len(set_str) + print('=' * num * 3) + print(' ' * num + set_str) + print('=' * num * 3) diff --git a/detector_codes/DFFreq-main/validate.py b/detector_codes/DFFreq-main/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..c27861735e30110369f309f4b43f122908fe3c1c --- /dev/null +++ b/detector_codes/DFFreq-main/validate.py @@ -0,0 +1,21 @@ +import numpy as np +import torch +from sklearn.metrics import accuracy_score, average_precision_score + + +def validate(model, val_loader): + with torch.no_grad(): + y_true, y_pred = [], [] + for img, label in val_loader: + in_tens = img.cuda() + y_pred.extend(model(in_tens).sigmoid().flatten().tolist()) + y_true.extend(label.flatten().tolist()) + + y_true, y_pred = np.array(y_true), np.array(y_pred) + + r_acc = accuracy_score(y_true[y_true == 0], y_pred[y_true == 0] > 0.5) + f_acc = accuracy_score(y_true[y_true == 1], y_pred[y_true == 1] > 0.5) + acc = accuracy_score(y_true, y_pred > 0.5) + ap = average_precision_score(y_true, y_pred) + + return acc, ap, r_acc, f_acc diff --git a/detector_codes/DeForge-AI-main/dataset.py b/detector_codes/DeForge-AI-main/dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..b9fd78cc886204f21e062bbe47fb9ab0824e9a43 --- /dev/null +++ b/detector_codes/DeForge-AI-main/dataset.py @@ -0,0 +1,120 @@ +import torch +import torch.nn as nn +from torch.utils.data import Dataset +from torchvision.transforms import InterpolationMode, v2 +from torchvision.transforms.v2 import functional as tvf + + +class AIGIBenchDataset(Dataset): + def __init__(self, hf_data, transform=None): + self.hf_data = hf_data + self.transform = transform + + def __len__(self): + return len(self.hf_data) + + def __getitem__(self, idx): + item = self.hf_data[idx] + image = item['image'].convert('RGB') + label = item['label'] # 0 for Real, 1 for Fake + + if self.transform: + image = self.transform(image) + + return image, torch.tensor(label, dtype=torch.float32) + + +class RandomDownUpResize(nn.Module): + def __init__(self, scale_range=(0.55, 0.9), p=0.4): + super().__init__() + self.scale_range = scale_range + self.p = p + self.interpolations = [ + InterpolationMode.BILINEAR, + InterpolationMode.BICUBIC, + InterpolationMode.NEAREST_EXACT, + ] + + def forward(self, image): + if torch.rand(1).item() >= self.p: + return image + + height, width = tvf.get_size(image) + scale = torch.empty(1).uniform_(*self.scale_range).item() + down_height = max(32, int(round(height * scale))) + down_width = max(32, int(round(width * scale))) + + down_interpolation = self.interpolations[ + torch.randint(len(self.interpolations), size=()).item() + ] + up_interpolation = self.interpolations[ + torch.randint(len(self.interpolations), size=()).item() + ] + + image = tvf.resize( + image, + [down_height, down_width], + interpolation=down_interpolation, + antialias=False, + ) + return tvf.resize( + image, + [height, width], + interpolation=up_interpolation, + antialias=False, + ) + + +class RandomGaussianNoise(nn.Module): + def __init__(self, sigma_range=(0.002, 0.02), p=0.25): + super().__init__() + self.sigma_range = sigma_range + self.p = p + + def forward(self, image): + if torch.rand(1).item() >= self.p: + return image + + sigma = torch.empty(1).uniform_(*self.sigma_range).item() + noise = torch.randn_like(image) * sigma + return (image + noise).clamp(0.0, 1.0) + + +def get_train_transforms(size=256): + resize_size = max(int(round(size * 1.15)), size) + return v2.Compose( + [ + v2.ToImage(), + v2.Resize(resize_size, antialias=False), + v2.RandomCrop(size), + v2.RandomHorizontalFlip(), + RandomDownUpResize(p=0.1), + v2.RandomApply( + [ + v2.ColorJitter( + brightness=0.2, contrast=0.2, saturation=0.1, hue=0.02 + ) + ], + p=0.25, + ), + v2.RandomApply([v2.GaussianBlur(kernel_size=5, sigma=(0.1, 1.2))], p=0.25), + v2.RandomAdjustSharpness(sharpness_factor=1.5, p=0.15), + v2.RandomApply([v2.JPEG(quality=(40, 95))], p=0.5), + v2.ToDtype(torch.float32, scale=True), + RandomGaussianNoise(p=0.25), + v2.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ] + ) + + +def get_val_transforms(size=256): + resize_size = max(int(round(size * 1.15)), size) + return v2.Compose( + [ + v2.ToImage(), + v2.Resize(resize_size, antialias=False), + v2.CenterCrop(size), + v2.ToDtype(torch.float32, scale=True), + v2.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ] + ) diff --git a/detector_codes/DeForge-AI-main/model.py b/detector_codes/DeForge-AI-main/model.py new file mode 100644 index 0000000000000000000000000000000000000000..aadebf91aba49fde9c557182acb870467600effa --- /dev/null +++ b/detector_codes/DeForge-AI-main/model.py @@ -0,0 +1,240 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from peft import LoraConfig, get_peft_model +from transformers import AutoModel + + +class AttentionPooling(nn.Module): + def __init__(self, dim): + super().__init__() + self.query = nn.Parameter(torch.randn(1, 1, dim)) + self.key = nn.Linear(dim, dim) + self.value = nn.Linear(dim, dim) + self.softmax = nn.Softmax(dim=-1) + + def forward(self, x): + batch_size, _, dim = x.shape + query = self.query.expand(batch_size, -1, -1) + key = self.key(x) + value = self.value(x) + + attention = torch.matmul(query, key.transpose(-2, -1)) / (dim**0.5) + attention = self.softmax(attention) + return torch.matmul(attention, value).squeeze(1) + + +class ForensicBranch(nn.Module): + """Forensic Branch — captures high-frequency artifacts, initialized with SRM filters.""" + + def __init__(self, out_dim=256): + super().__init__() + # 5 SRM filters x 3 channels = 15 output channels + self.conv1 = nn.Conv2d(3, 15, kernel_size=5, padding=2, bias=False, groups=3) + + kernels = torch.tensor( + [ + [ + [0, 0, -1, 0, 0], + [0, -1, -2, -1, 0], + [-1, -2, 16, -2, -1], + [0, -1, -2, -1, 0], + [0, 0, -1, 0, 0], + ], + [ + [0, 0, 0, 0, 0], + [0, 1, -2, 1, 0], + [0, -2, 4, -2, 0], + [0, 1, -2, 1, 0], + [0, 0, 0, 0, 0], + ], + [ + [0, 0, 0, 0, 0], + [0, -1, 2, -1, 0], + [0, 2, -4, 2, 0], + [0, -1, 2, -1, 0], + [0, 0, 0, 0, 0], + ], + [ + [0, 0, -1, 0, 0], + [0, 0, 2, 0, 0], + [0, 0, -1, 0, 0], + [0, 0, 0, 0, 0], + [0, 0, 0, 0, 0], + ], + [ + [0, 0, 0, 0, 0], + [0, 0, 0, 0, 0], + [-1, 2, -1, 0, 0], + [0, 0, 0, 0, 0], + [0, 0, 0, 0, 0], + ], + ], + dtype=torch.float32, + ) + # Initialize conv1 with the SRM kernels (shape 15, 1, 5, 5 for groups=3) + self.conv1.weight.data = kernels.unsqueeze(1).repeat(3, 1, 1, 1) + + self.encoder = nn.Sequential( + nn.Conv2d(15, 32, kernel_size=3, padding=1, bias=False), + nn.BatchNorm2d(32), + nn.GELU(), + nn.Conv2d(32, 64, kernel_size=3, stride=2, padding=1, bias=False), + nn.BatchNorm2d(64), + nn.GELU(), + nn.Conv2d(64, 128, kernel_size=3, stride=2, padding=1, bias=False), + nn.BatchNorm2d(128), + nn.GELU(), + nn.Conv2d(128, out_dim, kernel_size=3, stride=2, padding=1, bias=False), + nn.BatchNorm2d(out_dim), + nn.GELU(), + ) + self.pool = nn.AdaptiveAvgPool2d(1) + + def forward(self, x): + # Residual = image minus low-freq smoothed version + blur = F.avg_pool2d(x, kernel_size=3, stride=1, padding=1) + residual = x - blur + + out = self.conv1(residual) + out = self.encoder(out) + return self.pool(out).flatten(1) + + +def _resolve_attr_path(module, attr_path): + current = module + for attr in attr_path.split('.'): + if not hasattr(current, attr): + return None + current = getattr(current, attr) + return current + + +def _find_transformer_layers(backbone): + candidate_paths = [ + 'encoder.layer', + 'layers', + 'blocks', + 'transformer.layer', + 'transformer.layers', + 'model.encoder.layer', + 'model.layers', + 'backbone.encoder.layer', + 'backbone.layers', + 'backbone.blocks', + ] + for path in candidate_paths: + layers = _resolve_attr_path(backbone, path) + if isinstance(layers, (nn.ModuleList, list, tuple)) and len(layers) > 0: + return list(layers) + + for _, module in backbone.named_modules(): + if isinstance(module, nn.ModuleList) and len(module) > 4: + return list(module) + + return [] + + +class DeForge_AI_Model(nn.Module): + def __init__( + self, + model_name='facebook/dinov3-vitl16-pretrain-lvd1689m', + lora_r=16, + lora_alpha=32, + lora_dropout=0.5, + lora_target_modules=None, + forensic_dim=256, + unfreeze_last_blocks=0, + image_size=256, + hf_token=None, + ): + super().__init__() + + if lora_target_modules is None: + lora_target_modules = [ + 'q_proj', + 'k_proj', + 'v_proj', + 'out_proj', + 'fc1', + 'fc2', + ] + + self.image_size = image_size + self.forensic_dim = forensic_dim + + backbone = AutoModel.from_pretrained( + model_name, trust_remote_code=True, token=hf_token + ) + backbone.requires_grad_(False) + self._unfreeze_last_blocks(backbone, unfreeze_last_blocks) + + lora_config = LoraConfig( + r=lora_r, + lora_alpha=lora_alpha, + target_modules=lora_target_modules, + lora_dropout=lora_dropout, + bias='none', + ) + self.backbone = get_peft_model(backbone, lora_config) + + hidden_size = self.backbone.config.hidden_size + self.attn_pool = AttentionPooling(hidden_size) + self.rgb_proj = nn.Sequential( + nn.Linear(hidden_size * 2, hidden_size), + nn.LayerNorm(hidden_size), + nn.GELU(), + nn.Dropout(0.1), + ) + self.forensic_branch = ForensicBranch(out_dim=forensic_dim) + self.forensic_gate = nn.Parameter(torch.tensor(0.3)) + self.head = nn.Sequential( + nn.Linear(hidden_size + forensic_dim, 512), + nn.LayerNorm(512), + nn.GELU(), + nn.Dropout(0.3), + nn.Linear(512, 128), + nn.GELU(), + nn.Linear(128, 1), + ) + nn.init.zeros_(self.head[-1].weight) + nn.init.zeros_(self.head[-1].bias) + + def _unfreeze_last_blocks(self, backbone, unfreeze_last_blocks): + if unfreeze_last_blocks <= 0: + return + + layers = _find_transformer_layers(backbone) + if not layers: + return + + for block in layers[-unfreeze_last_blocks:]: + block.requires_grad_(True) + + for attr_path in [ + 'layernorm', + 'norm', + 'post_layernorm', + 'ln_post', + 'final_layer_norm', + ]: + module = _resolve_attr_path(backbone, attr_path) + if isinstance(module, nn.Module): + module.requires_grad_(True) + + def forward(self, x): + outputs = self.backbone(x) + last_hidden_state = outputs.last_hidden_state + cls_token = last_hidden_state[:, 0, :] + patch_tokens = last_hidden_state[:, 1:, :] + + token_features = self.attn_pool(patch_tokens) + rgb_features = self.rgb_proj(torch.cat([cls_token, token_features], dim=1)) + forensic_features = self.forensic_branch(x) + return self.head( + torch.cat([rgb_features, self.forensic_gate * forensic_features], dim=1) + ) + + def detect(self, x): + with torch.inference_mode(): + return torch.sigmoid(self.forward(x)).squeeze(1) diff --git a/detector_codes/DeForge-AI-main/train.py b/detector_codes/DeForge-AI-main/train.py new file mode 100644 index 0000000000000000000000000000000000000000..9a16b80f255d247fb3e89235a25504eee012ddfa --- /dev/null +++ b/detector_codes/DeForge-AI-main/train.py @@ -0,0 +1,400 @@ +import argparse +import os +import random +import sys +from contextlib import nullcontext + +import torch +import torch.nn as nn +import torch.optim as optim +from dataset import AIGIBenchDataset, get_train_transforms, get_val_transforms +from datasets import load_dataset +from dotenv import load_dotenv +from model import DeForge_AI_Model +from torch.utils.data import DataLoader +from tqdm import tqdm + +# Add current directory to sys.path +current_dir = os.path.dirname(os.path.abspath(__file__)) +if current_dir not in sys.path: + sys.path.insert(0, current_dir) + + +def seed_everything(seed=123): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + torch.manual_seed(seed) + if torch.cuda.is_available(): + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.benchmark = False + + +def parse_args(): + parser = argparse.ArgumentParser(description='Train DeForge-AI Model') + parser.add_argument('--lr', type=float, default=1e-4) + parser.add_argument('--backbone-lr-scale', type=float, default=0.25) + parser.add_argument('--weight-decay', type=float, default=0.01) + parser.add_argument('--batch-size', type=int, default=16) + parser.add_argument('--epochs', type=int, default=1) + parser.add_argument('--max-steps', type=int, default=10000) + parser.add_argument('--num-workers', type=int, default=8) + parser.add_argument('--seed', type=int, default=123) + parser.add_argument('--image-size', type=int, default=256) + parser.add_argument('--gradient-clip', type=float, default=1.0) + parser.add_argument('--lora-r', type=int, default=16) + parser.add_argument('--lora-alpha', type=int, default=32) + parser.add_argument('--lora-dropout', type=float, default=0.5) + parser.add_argument('--forensic-dim', type=int, default=256) + parser.add_argument('--unfreeze-last-blocks', type=int, default=0) + parser.add_argument( + '--lora-target-modules', + type=str, + default='q_proj,k_proj,v_proj,out_proj,fc1,fc2', + ) + parser.add_argument('--no-val', action='store_true') + parser.add_argument('--val-every', type=int, default=1) + parser.add_argument('--pct-start', type=float, default=0.1) + return parser.parse_args() + + +def get_amp_context(device): + if device.type == 'cuda': + return torch.amp.autocast(device_type='cuda', dtype=torch.float16) + return nullcontext() + + +def count_parameters(model): + total = sum(parameter.numel() for parameter in model.parameters()) + trainable = sum( + parameter.numel() for parameter in model.parameters() if parameter.requires_grad + ) + return trainable, total + + +def build_optimizer(model, args): + backbone_params = [] + fast_params = [] + for name, parameter in model.named_parameters(): + if not parameter.requires_grad: + continue + if name.startswith('backbone') and 'lora_' not in name: + backbone_params.append(parameter) + else: + fast_params.append(parameter) + + parameter_groups = [] + if backbone_params: + parameter_groups.append( + { + 'params': backbone_params, + 'lr': args.lr * args.backbone_lr_scale, + } + ) + if fast_params: + parameter_groups.append({'params': fast_params, 'lr': args.lr}) + + return optim.AdamW( + parameter_groups, + lr=args.lr, + weight_decay=args.weight_decay, + ) + + +def save_checkpoint(path, epoch, global_step, model, optimizer, metrics, args): + torch.save( + { + 'epoch': epoch, + 'global_step': global_step, + 'model_state_dict': model.state_dict(), + 'optimizer_state_dict': optimizer.state_dict(), + 'metrics': metrics, + 'args': vars(args), + }, + path, + ) + + +def run_validation(model, val_loader, criterion, device, epoch): + model.eval() + val_loss = 0.0 + total = 0 + all_preds = [] + all_labels = [] + + print('Running validation...') + with torch.inference_mode(): + for images, labels in tqdm(val_loader, desc='Validating', leave=False): + images = images.to(device, non_blocking=True) + labels = labels.to(device, non_blocking=True).unsqueeze(1) + + with get_amp_context(device): + logits = model(images) + loss = criterion(logits, labels) + + batch_size = labels.size(0) + val_loss += loss.item() * batch_size + total += batch_size + + all_preds.append(torch.sigmoid(logits).cpu()) + all_labels.append(labels.cpu()) + + all_preds = torch.cat(all_preds, dim=0).numpy() + all_labels = torch.cat(all_labels, dim=0).numpy() + + threshold = 0.5 + preds = (all_preds > threshold).astype(float) + acc = (preds == all_labels).mean() + real_mask = all_labels == 0 + fake_mask = all_labels == 1 + real_acc = ( + (preds[real_mask] == all_labels[real_mask]).mean() if real_mask.any() else 0 + ) + fake_acc = ( + (preds[fake_mask] == all_labels[fake_mask]).mean() if fake_mask.any() else 0 + ) + balanced_acc = 0.5 * (real_acc + fake_acc) + + metrics = { + 'val_loss': val_loss / max(total, 1), + 'val_acc': float(acc), + 'val_real_acc': float(real_acc), + 'val_fake_acc': float(fake_acc), + 'val_balanced_acc': float(balanced_acc), + } + + print( + f'Epoch {epoch} | Val Loss: {metrics["val_loss"]:.4f} | ' + f'Val Acc: {metrics["val_acc"]:.4f} | ' + f'Val BAcc: {metrics["val_balanced_acc"]:.4f} | ' + f'Real Acc: {metrics["val_real_acc"]:.4f} | ' + f'Fake Acc: {metrics["val_fake_acc"]:.4f}' + ) + return metrics + + +def train(): + args = parse_args() + seed_everything(args.seed) + + load_dotenv() + hf_token = os.getenv('HF_TOKEN') + + device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + print(f'Using device: {device}') + print( + f'Config: lr={args.lr}, batch_size={args.batch_size}, epochs={args.epochs}, ' + f'max_steps={args.max_steps}, image_size={args.image_size}, ' + f'val={"disabled" if args.no_val else f"every {args.val_every} epoch(s)"}' + ) + + checkpoints_dir = os.path.join(current_dir, 'checkpoints') + os.makedirs(checkpoints_dir, exist_ok=True) + + print('Loading AIGIBench dataset from HuggingFace...') + dataset = load_dataset('TheKernel01/AIGIBench', token=hf_token) + + train_ds = AIGIBenchDataset( + dataset['train'], + transform=get_train_transforms(size=args.image_size), + ) + train_loader = DataLoader( + train_ds, + batch_size=args.batch_size, + shuffle=True, + num_workers=args.num_workers, + pin_memory=device.type == 'cuda', + ) + + val_loader = None + if not args.no_val: + val_ds = AIGIBenchDataset( + dataset['validation'], + transform=get_val_transforms( + size=args.image_size, + ), + ) + val_loader = DataLoader( + val_ds, + batch_size=args.batch_size, + shuffle=False, + num_workers=args.num_workers, + pin_memory=device.type == 'cuda', + ) + + model = DeForge_AI_Model( + lora_r=args.lora_r, + lora_alpha=args.lora_alpha, + lora_dropout=args.lora_dropout, + lora_target_modules=[ + module.strip() + for module in args.lora_target_modules.split(',') + if module.strip() + ], + forensic_dim=args.forensic_dim, + unfreeze_last_blocks=args.unfreeze_last_blocks, + image_size=args.image_size, + ).to(device) + + trainable_params, total_params = count_parameters(model) + print( + f'Trainable params: {trainable_params / 1e6:.2f}M / ' + f'{total_params / 1e6:.2f}M ({100 * trainable_params / max(total_params, 1):.2f}%)' + ) + + optimizer = build_optimizer(model, args) + criterion = nn.BCEWithLogitsLoss() + + scheduler = optim.lr_scheduler.OneCycleLR( + optimizer, + max_lr=[group['lr'] for group in optimizer.param_groups], + total_steps=args.max_steps, + pct_start=args.pct_start, + anneal_strategy='cos', + ) + + scaler = torch.amp.GradScaler('cuda') if device.type == 'cuda' else None + best_balanced_acc = float('-inf') + global_step = 0 + + for epoch in range(1, args.epochs + 1): + model.train() + running_loss = 0.0 + remaining_steps = max(args.max_steps - global_step, 0) + epoch_total = min(len(train_loader), remaining_steps) if remaining_steps else 0 + pbar = tqdm( + train_loader, desc=f'Epoch {epoch}/{args.epochs}', total=epoch_total + ) + + for step_idx, (images, labels) in enumerate(pbar, start=1): + if global_step >= args.max_steps: + break + + images = images.to(device, non_blocking=True) + labels = labels.to(device, non_blocking=True).unsqueeze(1) + + optimizer.zero_grad(set_to_none=True) + + with get_amp_context(device): + logits = model(images) + loss = criterion(logits, labels) + + if scaler is not None: + scaler.scale(loss).backward() + scaler.unscale_(optimizer) + if args.gradient_clip is not None: + torch.nn.utils.clip_grad_norm_( + [p for p in model.parameters() if p.requires_grad], + args.gradient_clip, + ) + scaler.step(optimizer) + scaler.update() + else: + loss.backward() + if args.gradient_clip is not None: + torch.nn.utils.clip_grad_norm_( + [p for p in model.parameters() if p.requires_grad], + args.gradient_clip, + ) + optimizer.step() + + scheduler.step() + global_step += 1 + running_loss += loss.item() + + if global_step % 1000 == 0: + step_checkpoint_path = os.path.join( + checkpoints_dir, f'model_step_{global_step}.pth' + ) + save_checkpoint( + step_checkpoint_path, + epoch, + global_step, + model, + optimizer, + {}, + args, + ) + print(f'Saved periodic checkpoint to {step_checkpoint_path}') + + if step_idx % 10 == 0 or step_idx == 1: + current_lr = max(group['lr'] for group in optimizer.param_groups) + pbar.set_postfix( + { + 'loss': f'{running_loss / step_idx:.4f}', + 'lr': f'{current_lr:.2e}', + } + ) + + metrics = {} + should_validate = ( + not args.no_val and val_loader is not None and epoch % args.val_every == 0 + ) + if should_validate: + metrics = run_validation(model, val_loader, criterion, device, epoch) + + checkpoint_name = ( + f'deforge_ai_epoch_{epoch}_bacc_{metrics["val_balanced_acc"]:.4f}.pth' + if metrics + else f'deforge_ai_epoch_{epoch}_step_{global_step}.pth' + ) + checkpoint_path = os.path.join(checkpoints_dir, checkpoint_name) + save_checkpoint( + checkpoint_path, + epoch, + global_step, + model, + optimizer, + metrics, + args, + ) + print(f'Saved checkpoint to {checkpoint_path}') + + if metrics and metrics['val_balanced_acc'] > best_balanced_acc: + best_balanced_acc = metrics['val_balanced_acc'] + best_path = os.path.join(checkpoints_dir, 'model_epoch_best.pth') + save_checkpoint( + best_path, + epoch, + global_step, + model, + optimizer, + metrics, + args, + ) + print(f'Updated best checkpoint at {best_path}') + elif not metrics: + best_path = os.path.join(checkpoints_dir, 'model_epoch_best.pth') + if not os.path.exists(best_path): + save_checkpoint( + best_path, + epoch, + global_step, + model, + optimizer, + metrics, + args, + ) + print(f'Initialized best checkpoint at {best_path}') + + latest_path = os.path.join(checkpoints_dir, 'model_epoch_last.pth') + save_checkpoint( + latest_path, + epoch, + global_step, + model, + optimizer, + metrics, + args, + ) + + if global_step >= args.max_steps: + print(f'Reached max_steps={args.max_steps}, stopping.') + break + + print('Training complete!') + + +if __name__ == '__main__': + train() diff --git a/detector_codes/Effort-AIGI-Detection/data/__init__.py b/detector_codes/Effort-AIGI-Detection/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..32313036501f1717e98f5e6637068fb7293fa808 --- /dev/null +++ b/detector_codes/Effort-AIGI-Detection/data/__init__.py @@ -0,0 +1,59 @@ +import torch +import numpy as np +from torch.utils.data.sampler import WeightedRandomSampler + +from .datasets import dataset_folder + +''' +def get_dataset(opt): + dset_lst = [] + for cls in opt.classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) +''' + +import os + + +def get_dataset(opt): + # classes = os.listdir(opt.dataroot) if len(opt.classes) == 0 else opt.classes + # if '0_real' not in classes or '1_fake' not in classes: + # dset_lst = [] + # for cls in classes: + # # for dir in os.listdir(opt.dataroot): + # # root = opt.dataroot + '/' + dir + '/' + cls + # # dset = dataset_folder(opt, root) + # # dset_lst.append(dset) + # root = opt.dataroot + '/' + cls + # dset = dataset_folder(opt, root) + # dset_lst.append(dset) + # return torch.utils.data.ConcatDataset(dset_lst) + return dataset_folder(opt, opt.dataroot) + + +def get_bal_sampler(dataset): + targets = [] + for d in dataset.datasets: + targets.extend(d.targets) + + ratio = np.bincount(targets) + w = 1. / torch.tensor(ratio, dtype=torch.float) + sample_weights = w[targets] + sampler = WeightedRandomSampler(weights=sample_weights, + num_samples=len(sample_weights)) + return sampler + + +def create_dataloader(opt): + shuffle = not opt.serial_batches if (opt.isTrain and not opt.class_bal) else False + dataset = get_dataset(opt) + sampler = get_bal_sampler(dataset) if opt.class_bal else None + + data_loader = torch.utils.data.DataLoader(dataset, + batch_size=opt.batch_size, + shuffle=shuffle, + sampler=sampler, + num_workers=int(opt.num_threads)) + return data_loader diff --git a/detector_codes/Effort-AIGI-Detection/data/datasets.py b/detector_codes/Effort-AIGI-Detection/data/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..df07fd1b4c6d259ce46729e1fb00eece8571be55 --- /dev/null +++ b/detector_codes/Effort-AIGI-Detection/data/datasets.py @@ -0,0 +1,140 @@ +import cv2 +import numpy as np +import torchvision.datasets as datasets +import torchvision.transforms as transforms +import torchvision.transforms.functional as TF +from random import random, choice +from io import BytesIO +from PIL import Image +from PIL import ImageFile +from scipy.ndimage.filters import gaussian_filter +from torchvision.transforms import InterpolationMode + +ImageFile.LOAD_TRUNCATED_IMAGES = True + +def dataset_folder(opt, root): + if opt.mode == 'binary': + return binary_dataset(opt, root) + if opt.mode == 'filename': + return FileNameDataset(opt, root) + raise ValueError('opt.mode needs to be binary or filename.') + + +def binary_dataset(opt, root): + if opt.isTrain: + crop_func = transforms.RandomCrop(opt.cropSize) + elif opt.no_crop: + crop_func = transforms.Lambda(lambda img: img) + else: + crop_func = transforms.CenterCrop(opt.cropSize) + + if opt.isTrain and not opt.no_flip: + flip_func = transforms.RandomHorizontalFlip() + else: + flip_func = transforms.Lambda(lambda img: img) + if not opt.isTrain and opt.no_resize: + rz_func = transforms.Lambda(lambda img: img) + else: + # rz_func = transforms.Lambda(lambda img: custom_resize(img, opt)) + rz_func = transforms.Resize((opt.loadSize, opt.loadSize)) + + crop_func = transforms.CenterCrop(opt.cropSize) + dset = datasets.ImageFolder( + root, + transforms.Compose([ + # rz_func, + # transforms.Lambda(lambda img: data_augment(img, opt)), + crop_func, + flip_func, + transforms.ToTensor(), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ])) + return dset + + +class FileNameDataset(datasets.ImageFolder): + def name(self): + return 'FileNameDataset' + + def __init__(self, opt, root): + self.opt = opt + super().__init__(root) + + def __getitem__(self, index): + # Loading sample + path, target = self.samples[index] + return path + + +def data_augment(img, opt): + img = np.array(img) + + if random() < opt.blur_prob: + sig = sample_continuous(opt.blur_sig) + gaussian_blur(img, sig) + + if random() < opt.jpg_prob: + method = sample_discrete(opt.jpg_method) + qual = sample_discrete(opt.jpg_qual) + img = jpeg_from_key(img, qual, method) + + return Image.fromarray(img) + + +def sample_continuous(s): + if len(s) == 1: + return s[0] + if len(s) == 2: + rg = s[1] - s[0] + return random() * rg + s[0] + raise ValueError("Length of iterable s should be 1 or 2.") + + +def sample_discrete(s): + if len(s) == 1: + return s[0] + return choice(s) + + +def gaussian_blur(img, sigma): + gaussian_filter(img[:,:,0], output=img[:,:,0], sigma=sigma) + gaussian_filter(img[:,:,1], output=img[:,:,1], sigma=sigma) + gaussian_filter(img[:,:,2], output=img[:,:,2], sigma=sigma) + + +def cv2_jpg(img, compress_val): + img_cv2 = img[:,:,::-1] + encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), compress_val] + result, encimg = cv2.imencode('.jpg', img_cv2, encode_param) + decimg = cv2.imdecode(encimg, 1) + return decimg[:,:,::-1] + + +def pil_jpg(img, compress_val): + out = BytesIO() + img = Image.fromarray(img) + img.save(out, format='jpeg', quality=compress_val) + img = Image.open(out) + # load from memory before ByteIO closes + img = np.array(img) + out.close() + return img + + +jpeg_dict = {'cv2': cv2_jpg, 'pil': pil_jpg} +def jpeg_from_key(img, compress_val, key): + method = jpeg_dict[key] + return method(img, compress_val) + + +# rz_dict = {'bilinear': Image.BILINEAR, + # 'bicubic': Image.BICUBIC, + # 'lanczos': Image.LANCZOS, + # 'nearest': Image.NEAREST} +rz_dict = {'bilinear': InterpolationMode.BILINEAR, + 'bicubic': InterpolationMode.BICUBIC, + 'lanczos': InterpolationMode.LANCZOS, + 'nearest': InterpolationMode.NEAREST} +def custom_resize(img, opt): + interp = sample_discrete(opt.rz_interp) + return TF.resize(img, (opt.loadSize,opt.loadSize), interpolation=rz_dict[interp]) diff --git a/detector_codes/Effort-AIGI-Detection/models/__init__.py b/detector_codes/Effort-AIGI-Detection/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/Effort-AIGI-Detection/models/clip_models.py b/detector_codes/Effort-AIGI-Detection/models/clip_models.py new file mode 100644 index 0000000000000000000000000000000000000000..b282480409a2dbb80a6e4a8ae6c93177f8d665d3 --- /dev/null +++ b/detector_codes/Effort-AIGI-Detection/models/clip_models.py @@ -0,0 +1,153 @@ +import math +from PIL import Image +import torch +import torch.nn as nn +import torch.nn.functional as F +from transformers import AutoProcessor, CLIPModel, ViTModel, ViTConfig +import loralib as lora + + +class ClipModel(nn.Module): + def __init__(self, name, opt, num_classes=1, hf_token=None): + super(ClipModel, self).__init__() + self.use_svd = opt.use_svd + + if self.use_svd: + self.model = CLIPModel.from_pretrained(name, token=hf_token) + self.model.vision_model = apply_svd_residual_to_self_attn(self.model.vision_model, r=1024-1) + + self.fc = nn.Linear( 1024, num_classes ) + else: + self.model = CLIPModel.from_pretrained(name, token=hf_token) + + self.fc = nn.Linear( 1024, num_classes ) + + def forward(self, x, return_feature=False): + features = self.model.vision_model(x)['pooler_output'] + + if return_feature: + return features + return self.fc(features) + + +class SVDResidualLinear(nn.Module): + def __init__(self, in_features, out_features, r, bias=True, init_weight=None): + super(SVDResidualLinear, self).__init__() + self.in_features = in_features + self.out_features = out_features + self.r = r # Number of top singular values to exclude + + # Main weight (fixed) + self.weight_main = nn.Parameter(torch.Tensor(out_features, in_features), requires_grad=False) + if init_weight is not None: + self.weight_main.data.copy_(init_weight) + else: + nn.init.kaiming_uniform_(self.weight_main, a=math.sqrt(5)) + + # Bias + if bias: + self.bias = nn.Parameter(torch.Tensor(out_features)) + nn.init.zeros_(self.bias) + else: + self.register_parameter('bias', None) + + # SVD components + self.S_r = None + self.U_r = None + self.V_r = None + self.S_residual = None + self.U_residual = None + self.V_residual = None + + def forward(self, x): + if self.S_residual is not None: + # Reconstruct the residual weight + residual_weight = self.U_residual @ torch.diag(self.S_residual) @ self.V_residual + # Total weight is the fixed main weight plus the residual + weight = self.weight_main + residual_weight + else: + # If residual components are not set, use only the main weight + weight = self.weight_main + + return F.linear(x, weight, self.bias) + + +# Function to replace nn.Linear modules within self_attn modules with SVDResidualLinear +def apply_svd_residual_to_self_attn(model, r): + for name, module in model.named_children(): + # if ('self_attn' in name) or ('mlp' in name): + if ('self_attn' in name): + # Replace nn.Linear layers in this module + for sub_name, sub_module in module.named_modules(): + if isinstance(sub_module, nn.Linear): + # Get parent module within self_attn + parent_module = module + sub_module_names = sub_name.split('.') + for module_name in sub_module_names[:-1]: + parent_module = getattr(parent_module, module_name) + setattr(parent_module, sub_module_names[-1], replace_with_svd_residual(sub_module, r)) + else: + # Recursively apply to child modules + apply_svd_residual_to_self_attn(module, r) + # After replacing, set requires_grad for residual components + for param_name, param in model.named_parameters(): + if any(x in param_name for x in ['S_residual', 'U_residual', 'V_residual']): + param.requires_grad = True + else: + param.requires_grad = False + return model + + +# Function to replace a module with SVDResidualLinear +def replace_with_svd_residual(module, r): + if isinstance(module, nn.Linear): + in_features = module.in_features + out_features = module.out_features + bias = module.bias is not None + + # Create SVDResidualLinear module + new_module = SVDResidualLinear(in_features, out_features, r, bias=bias, init_weight=module.weight.data.clone()) + + if bias and module.bias is not None: + new_module.bias.data.copy_(module.bias.data) + + # Calculate the frobenius norm of original weight + new_module.weight_original_fnorm = torch.norm(module.weight.data, p='fro') + + # Perform SVD on the original weight + U, S, Vh = torch.linalg.svd(module.weight.data, full_matrices=False) + + # Determine r based on the rank of the weight matrix + r = min(r, len(S)) # Ensure r does not exceed the number of singular values + + # Keep top r singular components (main weight) + U_r = U[:, :r] # Shape: (out_features, r) + S_r = S[:r] # Shape: (r,) + Vh_r = Vh[:r, :] # Shape: (r, in_features) + + # Reconstruct the main weight (fixed) + weight_main = U_r @ torch.diag(S_r) @ Vh_r + + # Calculate the frobenius norm of main weight + new_module.weight_main_fnorm = torch.norm(weight_main.data, p='fro') + + # Set the main weight + new_module.weight_main.data.copy_(weight_main) + + # Residual components (trainable) + U_residual = U[:, r:] # Shape: (out_features, n - r) + S_residual = S[r:] # Shape: (n - r,) + Vh_residual = Vh[r:, :] # Shape: (n - r, in_features) + + if len(S_residual) > 0: + new_module.S_residual = nn.Parameter(S_residual.clone()) + new_module.U_residual = nn.Parameter(U_residual.clone()) + new_module.V_residual = nn.Parameter(Vh_residual.clone()) + else: + new_module.S_residual = None + new_module.U_residual = None + new_module.V_residual = None + + return new_module + else: + return module diff --git a/detector_codes/Effort-AIGI-Detection/networks/__init__.py b/detector_codes/Effort-AIGI-Detection/networks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/Effort-AIGI-Detection/networks/base_model.py b/detector_codes/Effort-AIGI-Detection/networks/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..1e1024d01e417a118ac7047d21a9ffa9f561c82a --- /dev/null +++ b/detector_codes/Effort-AIGI-Detection/networks/base_model.py @@ -0,0 +1,91 @@ +# from pix2pix +import os +import torch +import torch.nn as nn +from torch.nn import init +from torch.optim import lr_scheduler + + +class BaseModel(nn.Module): + def __init__(self, opt): + super(BaseModel, self).__init__() + self.opt = opt + self.total_steps = 0 + self.isTrain = opt.isTrain + self.lr = opt.lr + self.save_dir = os.path.join(opt.checkpoints_dir, opt.name) + self.device = torch.device('cuda:{}'.format(opt.gpu_ids[0])) if opt.gpu_ids else torch.device('cpu') + + def save_networks(self, epoch): + save_filename = 'model_epoch_%s.pth' % epoch + save_path = os.path.join(self.save_dir, save_filename) + + # serialize model and optimizer to dict + # state_dict = { + # 'model': self.model.state_dict(), + # 'optimizer' : self.optimizer.state_dict(), + # 'total_steps' : self.total_steps, + # } + + torch.save(self.model.state_dict(), save_path) + print(f'Saving model {save_path}') + + # load models from the disk + def load_networks(self, epoch): + load_filename = 'model_epoch_%s.pth' % epoch + load_path = os.path.join(self.save_dir, load_filename) + + print('loading the model from %s' % load_path) + # if you are using PyTorch newer than 0.4 (e.g., built from + # GitHub source), you can remove str() on self.device + state_dict = torch.load(load_path, map_location=self.device) + if hasattr(state_dict, '_metadata'): + del state_dict._metadata + + self.model.load_state_dict(state_dict['model']) + self.total_steps = state_dict['total_steps'] + + if self.isTrain and not self.opt.new_optim: + self.optimizer.load_state_dict(state_dict['optimizer']) + ### move optimizer state to GPU + for state in self.optimizer.state.values(): + for k, v in state.items(): + if torch.is_tensor(v): + state[k] = v.to(self.device) + + for g in self.optimizer.param_groups: + g['lr'] = self.opt.lr + + def eval(self): + self.model.eval() + + def train(self): + self.model.train() + + def test(self): + with torch.no_grad(): + self.forward() + + +def init_weights(net, init_type='normal', gain=0.02): + def init_func(m): + classname = m.__class__.__name__ + if hasattr(m, 'weight') and (classname.find('Conv') != -1 or classname.find('Linear') != -1): + if init_type == 'normal': + init.normal_(m.weight.data, 0.0, gain) + elif init_type == 'xavier': + init.xavier_normal_(m.weight.data, gain=gain) + elif init_type == 'kaiming': + init.kaiming_normal_(m.weight.data, a=0, mode='fan_in') + elif init_type == 'orthogonal': + init.orthogonal_(m.weight.data, gain=gain) + else: + raise NotImplementedError('initialization method [%s] is not implemented' % init_type) + if hasattr(m, 'bias') and m.bias is not None: + init.constant_(m.bias.data, 0.0) + elif classname.find('BatchNorm2d') != -1: + init.normal_(m.weight.data, 1.0, gain) + init.constant_(m.bias.data, 0.0) + + print('initialize network with %s' % init_type) + net.apply(init_func) diff --git a/detector_codes/Effort-AIGI-Detection/networks/trainer.py b/detector_codes/Effort-AIGI-Detection/networks/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..60572fbc694259a21443739cd72c3cc7fc3a636a --- /dev/null +++ b/detector_codes/Effort-AIGI-Detection/networks/trainer.py @@ -0,0 +1,71 @@ +import functools +import torch +import torch.nn as nn +from .base_model import BaseModel, init_weights +import sys +from models.clip_models import ClipModel + + +class Trainer(BaseModel): + def name(self): + return 'Trainer' + + def __init__(self, opt): + super(Trainer, self).__init__(opt) + self.opt = opt + self.model = ClipModel(opt.arch, opt) + self.lr = opt.lr + torch.nn.init.normal_(self.model.fc.weight.data, 0.0, opt.init_gain) + + if opt.fix_backbone: + params = [] + for name, p in self.model.named_parameters(): + if name=="fc.weight" or name=="fc.bias": + params.append(p) + else: + p.requires_grad = False + else: + print("Your backbone is not fixed. Are you sure you want to proceed? If this is a mistake, enable the --fix_backbone command during training and rerun") + # import time + # time.sleep(3) + params = self.model.parameters() + + if opt.optim == 'adam': + self.optimizer = torch.optim.AdamW(params, lr=opt.lr, betas=(opt.beta1, 0.999), weight_decay=opt.weight_decay) + elif opt.optim == 'sgd': + self.optimizer = torch.optim.SGD(params, lr=opt.lr, momentum=0.0, weight_decay=opt.weight_decay) + else: + raise ValueError("optim should be [adam, sgd]") + + self.loss_fn = nn.BCEWithLogitsLoss() + + self.model.to(opt.gpu_ids[0]) + + def adjust_learning_rate(self, min_lr=1e-6): + for param_group in self.optimizer.param_groups: + param_group['lr'] *= 0.8 + self.lr = param_group['lr'] + if param_group['lr'] < min_lr: + return False + return True + + def set_input(self, input): + self.input = input[0].to(self.device) + self.label = input[1].to(self.device).float() + + def forward(self): + self.output = self.model(self.input) + self.output = self.output.view(-1).unsqueeze(1) + + def get_loss(self): + return self.loss_fn(self.output.squeeze(1), self.label) + + def optimize_parameters(self): + self.forward() + self.loss = self.loss_fn(self.output.squeeze(1), self.label) + self.optimizer.zero_grad() + self.loss.backward() + self.optimizer.step() + + + diff --git a/detector_codes/Effort-AIGI-Detection/options/__init__.py b/detector_codes/Effort-AIGI-Detection/options/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/Effort-AIGI-Detection/options/base_options.py b/detector_codes/Effort-AIGI-Detection/options/base_options.py new file mode 100644 index 0000000000000000000000000000000000000000..04b5609e709554f478fdea0087d306b5d41e2bae --- /dev/null +++ b/detector_codes/Effort-AIGI-Detection/options/base_options.py @@ -0,0 +1,122 @@ +import argparse +import os +import time +import util +import torch +#import models +#import data + + +class BaseOptions(): + def __init__(self): + self.initialized = False + + def initialize(self, parser): + parser.add_argument('--mode', default='binary') + parser.add_argument('--arch', type=str, default='res50', help='architecture for binary classification') + parser.add_argument('--fix_backbone', action='store_true') + parser.add_argument('--use_svd', action='store_true') + + # data augmentation + parser.add_argument('--rz_interp', default='bilinear') + parser.add_argument('--blur_prob', type=float, default=0) + parser.add_argument('--blur_sig', default='0.5') + parser.add_argument('--jpg_prob', type=float, default=0) + parser.add_argument('--jpg_method', default='cv2') + parser.add_argument('--jpg_qual', default='75') + + parser.add_argument('--weight_decay', type=float, default=0.0, help='loss weight for l2 reg') + + parser.add_argument('--dataroot', default='./dataset/', help='path to images (should have subfolders trainA, trainB, valA, valB, etc)') + parser.add_argument('--classes', default='', help='image classes to train on') + parser.add_argument('--class_bal', action='store_true') + parser.add_argument('--batch_size', type=int, default=32, help='input batch size') + parser.add_argument('--loadSize', type=int, default=256, help='scale images to this size') + parser.add_argument('--cropSize', type=int, default=224, help='then crop to this size') + parser.add_argument('--gpu_ids', type=str, default='2', help='gpu ids: e.g. 0 0,1,2, 0,2. use -1 for CPU') + parser.add_argument('--name', type=str, default='experiment_name', help='name of the experiment. It decides where to store samples and models') + parser.add_argument('--epoch', type=str, default='latest', help='which epoch to load? set to latest to use latest cached model') + parser.add_argument('--num_threads', default=16, type=int, help='# threads for loading data') + parser.add_argument('--checkpoints_dir', type=str, default='./checkpoints', help='models are saved here') + parser.add_argument('--serial_batches', action='store_true', help='if true, takes images in order to make batches, otherwise takes them randomly') + parser.add_argument('--resize_or_crop', type=str, default='scale_and_crop', help='scaling and cropping of images at load time [resize_and_crop|crop|scale_width|scale_width_and_crop|none]') + parser.add_argument('--no_flip', action='store_true', help='if specified, do not flip the images for data augmentation') + parser.add_argument('--init_type', type=str, default='normal', help='network initialization [normal|xavier|kaiming|orthogonal]') + parser.add_argument('--init_gain', type=float, default=0.02, help='scaling factor for normal, xavier and orthogonal.') + parser.add_argument('--suffix', default='', type=str, help='customized suffix: opt.name = opt.name + suffix: e.g., {model}_{netG}_size{loadSize}') + parser.add_argument('--delr_freq', type=int, default=20, help='frequency of changing lr') + + + self.initialized = True + return parser + + def gather_options(self): + # initialize parser with basic options + if not self.initialized: + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser = self.initialize(parser) + + # get the basic options + opt, _ = parser.parse_known_args() + self.parser = parser + + return opt #parser.parse_args() + + def print_options(self, opt): + message = '' + message += '----------------- Options ---------------\n' + for k, v in sorted(vars(opt).items()): + comment = '' + default = self.parser.get_default(k) + if v != default: + comment = '\t[default: %s]' % str(default) + message += '{:>25}: {:<30}{}\n'.format(str(k), str(v), comment) + message += '----------------- End -------------------' + print(message) + + # save to the disk + + expr_dir = os.path.join(opt.checkpoints_dir, opt.name) + util.mkdirs(expr_dir) + file_name = os.path.join(expr_dir, 'opt.txt') + with open(file_name, 'wt') as opt_file: + opt_file.write(message) + opt_file.write('\n') + + def parse(self, print_options=True): + + opt = self.gather_options() + opt.isTrain = self.isTrain # train or test + opt.name = opt.name + time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()) + # process opt.suffix + if opt.suffix: + suffix = ('_' + opt.suffix.format(**vars(opt))) if opt.suffix != '' else '' + opt.name = opt.name + suffix + + if print_options: + self.print_options(opt) + + # set gpu ids + str_ids = opt.gpu_ids.split(',') + opt.gpu_ids = [] + for str_id in str_ids: + id = int(str_id) + if id >= 0: + opt.gpu_ids.append(id) + if len(opt.gpu_ids) > 0: + torch.cuda.set_device(opt.gpu_ids[0]) + + # additional + opt.classes = opt.classes.split(',') + opt.rz_interp = opt.rz_interp.split(',') + opt.blur_sig = [float(s) for s in opt.blur_sig.split(',')] + opt.jpg_method = opt.jpg_method.split(',') + opt.jpg_qual = [int(s) for s in opt.jpg_qual.split(',')] + if len(opt.jpg_qual) == 2: + opt.jpg_qual = list(range(opt.jpg_qual[0], opt.jpg_qual[1] + 1)) + elif len(opt.jpg_qual) > 2: + raise ValueError("Shouldn't have more than 2 values for --jpg_qual.") + + self.opt = opt + return self.opt diff --git a/detector_codes/Effort-AIGI-Detection/options/test_options.py b/detector_codes/Effort-AIGI-Detection/options/test_options.py new file mode 100644 index 0000000000000000000000000000000000000000..1dba350e3cadf758c2dc39e99a55b4e844e7b16d --- /dev/null +++ b/detector_codes/Effort-AIGI-Detection/options/test_options.py @@ -0,0 +1,17 @@ +from .base_options import BaseOptions + + +class TestOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + # parser.add_argument('--dataroot') + parser.add_argument('--model_path') + parser.add_argument('--no_resize', action='store_true') + parser.add_argument('--no_crop', action='store_true') + parser.add_argument('--eval', action='store_true', help='use eval mode during test time.') + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--lr', type=float, default=0.00002, help='initial learning rate for adam') + parser.add_argument('--niter', type=int, default=0, help='# of iter at starting learning rate') + + self.isTrain = False + return parser diff --git a/detector_codes/Effort-AIGI-Detection/options/train_options.py b/detector_codes/Effort-AIGI-Detection/options/train_options.py new file mode 100644 index 0000000000000000000000000000000000000000..83fc3e1583d21c603bc573a84ab95cf3783eb528 --- /dev/null +++ b/detector_codes/Effort-AIGI-Detection/options/train_options.py @@ -0,0 +1,41 @@ +from .base_options import BaseOptions + + +class TrainOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--data_aug', action='store_true', help='if specified, perform additional data augmentation (photometric, blurring, jpegging)') + parser.add_argument('--optim', type=str, default='adam', help='optim to use [sgd, adam]') + parser.add_argument('--new_optim', action='store_true', help='new optimizer instead of loading the optim state') + parser.add_argument('--loss_freq', type=int, default=400, help='frequency of showing loss on tensorboard') + parser.add_argument('--save_latest_freq', type=int, default=101, help='frequency of saving the latest results') + parser.add_argument('--save_epoch_freq', type=int, default=1, help='frequency of saving checkpoints at the end of epochs') + parser.add_argument('--continue_train', action='store_true', help='continue training: load the latest model') + parser.add_argument('--epoch_count', type=int, default=10, help='the starting epoch count, we save the model by , +, ...') + parser.add_argument('--last_epoch', type=int, default=-1, help='starting epoch count for scheduler intialization') + parser.add_argument('--train_split', type=str, default='train', help='train, val, test, etc') + parser.add_argument('--val_split', type=str, default='val', help='train, val, test, etc') + parser.add_argument('--niter', type=int, default=101, help='total epoches') + parser.add_argument('--beta1', type=float, default=0.9, help='momentum term of adam') + parser.add_argument('--lr', type=float, default=0.0001, help='initial learning rate for adam') + + parser.add_argument("--kd", default=True, type=str2bool) + parser.add_argument("--kd_weight", default=1, type=int) + # parser.add_argument('--model_path') + # parser.add_argument('--no_resize', action='store_true') + # parser.add_argument('--no_crop', action='store_true') + + self.isTrain = True + return parser + + +def str2bool(v: str) -> bool: + if isinstance(v, bool): + return v + elif v.lower() in ("true", "yes", "on", "y", "t", "1"): + return True + elif v.lower() in ("false", "no", "off", "n", "f", "0"): + return False + else: + return bool(v) diff --git a/detector_codes/Effort-AIGI-Detection/test.py b/detector_codes/Effort-AIGI-Detection/test.py new file mode 100644 index 0000000000000000000000000000000000000000..75f5e7deec67441038ca6d7fa15b100da15d41da --- /dev/null +++ b/detector_codes/Effort-AIGI-Detection/test.py @@ -0,0 +1,90 @@ +import sys +import time +import os +import csv +import torch +import logging +from util import Logger, printSet +from validate import validate +from models.clip_models import ClipModel +from options.test_options import TestOptions +from data import create_dataloader +import numpy as np +import random + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if you are using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + +seed_torch(100) + +DetectionTests = { + 'AIGIBench': {'dataroot': '/home/path/AIGIBench', + 'no_resize': False, + # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, +} + +# Set up logging +logging.basicConfig(filename='log_test.log', level=logging.INFO, format='%(asctime)s %(message)s') +logger = logging.getLogger() + +opt = TestOptions().parse(print_options=False) +log_msg = f'Model_path {opt.model_path}' +print(log_msg) +logger.info(log_msg) + +# Get model +model = ClipModel(opt.arch, opt) +model.load_state_dict(torch.load(opt.model_path, map_location="cuda:2"), strict=True) + +model.cuda() +model.eval() + +for testSet in DetectionTests.keys(): + dataroot = DetectionTests[testSet]['dataroot'] + printSet(testSet) + logger.info(testSet) + + accs = [] + aps = [] + r_accs = [] + f_accs = [] + current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + print(current_time) + logger.info(current_time) + + for v_id, val in enumerate(os.listdir(dataroot)): + opt.dataroot = '{}/{}'.format(dataroot, val) + opt.classes = '' # os.listdir(opt.dataroot) if multiclass[v_id] else [''] + opt.no_resize = DetectionTests[testSet]['no_resize'] + opt.no_crop = DetectionTests[testSet]['no_crop'] + dataloader = create_dataloader(opt) + acc, ap, r_acc, f_acc = validate(model, dataloader) + accs.append(acc) + aps.append(ap) + r_accs.append(r_acc) + f_accs.append(f_acc) + log_msg = "({} {:12}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}" \ + .format(v_id, val, acc * 100, ap * 100, r_acc * 100, f_acc * 100) + print(log_msg) + logger.info(log_msg) + + mean_acc = np.array(accs).mean() * 100 + mean_ap = np.array(aps).mean() * 100 + mean_r_acc = np.array(r_accs).mean() * 100 + mean_f_acc = np.array(f_accs).mean() * 100 + log_msg = "({} {:10}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}" \ + .format(v_id + 1, 'Mean', mean_acc, mean_ap, mean_r_acc, mean_f_acc) + print(log_msg) + logger.info(log_msg) + print('*' * 25) + logger.info('*' * 25) diff --git a/detector_codes/Effort-AIGI-Detection/train.py b/detector_codes/Effort-AIGI-Detection/train.py new file mode 100644 index 0000000000000000000000000000000000000000..878d24bb896311f701a22b04413f37cdbe89b6c5 --- /dev/null +++ b/detector_codes/Effort-AIGI-Detection/train.py @@ -0,0 +1,107 @@ +import os +import sys +import time +import torch +from tensorboardX import SummaryWriter +import numpy as np +from validate import validate +from data import create_dataloader +from networks.trainer import Trainer +from options.train_options import TrainOptions +from util import Logger, EarlyStopping +import random +import logging + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +def get_val_opt(): + val_opt = TrainOptions().parse(print_options=False) + val_opt.isTrain = False + val_opt.no_resize = False + val_opt.no_crop = False + val_opt.serial_batches = True + return val_opt + + +if __name__ == '__main__': + opt = TrainOptions().parse() + seed_torch(100) + opt.dataroot = f'{opt.dataroot}/{opt.train_split}' + Logger(os.path.join(opt.checkpoints_dir, opt.name, 'logging.log')) + print(' '.join(list(sys.argv))) + val_opt = get_val_opt() + val_opt.dataroot = f'{val_opt.dataroot}/{val_opt.val_split}' + + data_loader = create_dataloader(opt) + val_loader = create_dataloader(val_opt) + + train_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, "train")) + val_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, "val")) + + model = Trainer(opt) + + model.train() + + early_stopping = EarlyStopping(patience=opt.earlystop_epoch, delta=-0.001, verbose=True) + + # Configure logger + logging.basicConfig(level=logging.INFO, # Set logging level + format='%(asctime)s - %(levelname)s - %(message)s', # Log format + datefmt='%Y-%m-%d %H:%M:%S', # Date format without milliseconds + handlers=[logging.FileHandler('log.log', mode='w'), # Log file output + logging.StreamHandler()]) # Console output + + logger = logging.getLogger(__name__) + + print(f'cwd: {os.getcwd()}') + print(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} Length of data loader: {len(data_loader)}") + logger.info(f"Length of data loader: {len(data_loader)}") + + for epoch in range(opt.niter): + for i, data in enumerate(data_loader): + model.total_steps += 1 + + # Move data to cuda + model.set_input(data) + # Train + model.optimize_parameters() + + if model.total_steps % opt.loss_freq == 0: + print(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}") + logger.info(f"Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}") + train_writer.add_scalar('loss', model.loss, model.total_steps) + + if epoch % opt.save_epoch_freq == 0: + # Optionally save model at each epoch + print(f'saving the model at the end of epoch {epoch}') + logger.info(f'saving the model at the end of epoch {epoch}') + model.save_networks(epoch) + + if epoch % 10 == 0 and epoch != 0: + print(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} changing lr at the end of epoch {epoch}, iters {model.total_steps}") + logger.info(f"changing lr at the end of epoch {epoch}, iters {model.total_steps}") + model.adjust_learning_rate() + + # Validation + model.eval() + acc, ap, r_acc, f_acc = validate(model.model, val_loader) + val_writer.add_scalar('accuracy', acc, model.total_steps) + val_writer.add_scalar('ap', ap, model.total_steps) + print(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} (Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}") + logger.info(f"(Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}") + + model.train() + + model.eval() + model.save_networks('last') diff --git a/detector_codes/Effort-AIGI-Detection/util.py b/detector_codes/Effort-AIGI-Detection/util.py new file mode 100644 index 0000000000000000000000000000000000000000..5d59a729e3753fd5c1acd7b1efcef1f5f0bfa5a7 --- /dev/null +++ b/detector_codes/Effort-AIGI-Detection/util.py @@ -0,0 +1,93 @@ +import sys +import os +import torch +import numpy as np + + +def mkdirs(paths): + if isinstance(paths, list) and not isinstance(paths, str): + for path in paths: + mkdir(path) + else: + mkdir(paths) + + +def mkdir(path): + if not os.path.exists(path): + os.makedirs(path) + + +def unnormalize(tens, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]): + # assume tensor of shape NxCxHxW + return tens * torch.Tensor(std)[None, :, None, None] + torch.Tensor( + mean)[None, :, None, None] + + +# 重定向 sys.stdout 输出到一个指定的文件,同时保持在终端显示 +class Logger(object): + """Log stdout messages.""" + + def __init__(self, outfile): + self.terminal = sys.stdout # 保存当前标准输出流 + self.log = open(outfile, "a") # 打开指定的日志文件 outfile,以追加模式 (a) 打开 + # 将标准输出流重定向到 Logger 实例,这样所有的 print 语句和标准输出内容都会通过 Logger 的 write 方法 + sys.stdout = self + + def write(self, message): + self.terminal.write(message) # 将消息写到终端(标准输出) + self.log.write(message) # 将消息写到日志文件 + + def flush(self): + self.terminal.flush() # 刷新终端的输出缓冲区,确保所有输出都及时显示 + + +class EarlyStopping: + """Early stops the training if validation loss doesn't improve after a given patience.""" + def __init__(self, patience=7, verbose=False, delta=0): + """ + Args: + patience (int): How long to wait after last time validation loss improved. + Default: 7 + verbose (bool): If True, prints a message for each validation loss improvement. + Default: False + delta (float): Minimum change in the monitored quantity to qualify as an improvement. + Default: 0 + """ + self.patience = patience + self.verbose = verbose + self.counter = 0 + self.best_score = None + self.early_stop = False + self.val_loss_min = np.Inf + self.delta = delta + + def __call__(self, val_loss, model): + + score = -val_loss + + if self.best_score is None: + self.best_score = score + self.save_checkpoint(val_loss, model) + elif score < self.best_score + self.delta: + self.counter += 1 + print(f'EarlyStopping counter: {self.counter} out of {self.patience}') + if self.counter >= self.patience: + self.early_stop = True + else: + self.best_score = score + self.save_checkpoint(val_loss, model) + self.counter = 0 + + def save_checkpoint(self, val_loss, model): + '''Saves model when validation loss decrease.''' + if self.verbose: + print(f'Validation loss decreased ({self.val_loss_min:.6f} --> {val_loss:.6f}). Saving model ...') + self.val_loss_min = val_loss + + +def printSet(set_str): + set_str = str(set_str) + num = len(set_str) + print("="*num*3) + print(" "*num + set_str) + print("="*num*3) diff --git a/detector_codes/Effort-AIGI-Detection/validate.py b/detector_codes/Effort-AIGI-Detection/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..b24fdfcc4ca63ec0d5639ff22493f457309a0c9f --- /dev/null +++ b/detector_codes/Effort-AIGI-Detection/validate.py @@ -0,0 +1,23 @@ +import torch +import numpy as np +from sklearn.metrics import average_precision_score, accuracy_score +from options.test_options import TestOptions +from data import create_dataloader + + +def validate(model, val_loader): + # data_loader = create_dataloader(opt) + + with torch.no_grad(): + y_true, y_pred = [], [] + for img, label in val_loader: + in_tens = img.cuda() + y_pred.extend(model(in_tens).sigmoid().flatten().tolist()) + y_true.extend(label.flatten().tolist()) + + y_true, y_pred = np.array(y_true), np.array(y_pred) + r_acc = accuracy_score(y_true[y_true==0], y_pred[y_true==0] > 0.5) + f_acc = accuracy_score(y_true[y_true==1], y_pred[y_true==1] > 0.5) + acc = accuracy_score(y_true, y_pred > 0.5) + ap = average_precision_score(y_true, y_pred) + return acc, ap, r_acc, f_acc diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/data/__init__.py b/detector_codes/FreqNet-DeepfakeDetection-main/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..619f339b4ff96ee93662bcfa947b743ad31f8eed --- /dev/null +++ b/detector_codes/FreqNet-DeepfakeDetection-main/data/__init__.py @@ -0,0 +1,61 @@ +import torch +import numpy as np +from torch.utils.data.sampler import WeightedRandomSampler + +from .datasets import dataset_folder + +import os + + +# 获取数据集,要根据不同的需求进行修改 +''' +def get_dataset(opt): + dset_lst = [] + for cls in opt.classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) +''' + + +def get_dataset(opt): + classes = os.listdir(opt.dataroot) if len(opt.classes) == 0 else opt.classes + # 如果类文件夹中没有 '0_real' 和 '1_fake',会对每个类单独加载数据集,并将它们合并返回 + # 如果类文件夹中包含 '0_real' 和 '1_fake',则直接对整个根目录加载数据集 + if '0_real' not in classes or '1_fake' not in classes: + dset_lst = [] + for cls in classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) + return dataset_folder(opt, opt.dataroot) + + +def get_bal_sampler(dataset): + targets = [] + for d in dataset.datasets: + targets.extend(d.targets) + + ratio = np.bincount(targets) + w = 1. / torch.tensor(ratio, dtype=torch.float) + sample_weights = w[targets] + sampler = WeightedRandomSampler(weights=sample_weights, + num_samples=len(sample_weights)) + return sampler + + +def create_dataloader(opt): + # 是否打乱数据集 + shuffle = not opt.serial_batches if (opt.isTrain and not opt.class_bal) else False + dataset = get_dataset(opt) + sampler = get_bal_sampler(dataset) if opt.class_bal else None + + data_loader = torch.utils.data.DataLoader(dataset, + batch_size=opt.batch_size, + shuffle=shuffle, + sampler=sampler, + num_workers=int(opt.num_threads), + drop_last=opt.drop_last) + return data_loader diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/data/datasets.py b/detector_codes/FreqNet-DeepfakeDetection-main/data/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..55ae5613c7468115e93f8b3466f434666e3046c6 --- /dev/null +++ b/detector_codes/FreqNet-DeepfakeDetection-main/data/datasets.py @@ -0,0 +1,212 @@ +import cv2 +import numpy as np +import torchvision.datasets as datasets +import torchvision.transforms as transforms +import torchvision.transforms.functional as TF +from random import random, choice +from io import BytesIO +from PIL import Image +from PIL import ImageFile +from scipy.ndimage.filters import gaussian_filter +from torchvision.transforms import InterpolationMode +import torch +import random + +ImageFile.LOAD_TRUNCATED_IMAGES = True + +def dataset_folder(opt, root): + if opt.mode == 'binary': + return binary_dataset(opt, root) + if opt.mode == 'filename': + return FileNameDataset(opt, root) + raise ValueError('opt.mode needs to be binary or filename.') + + +class RandomGaussianBlur(): + def __init__(self, kernel_size, sigma=(0.1, 2.0), p=1.0): + self.blur = transforms.GaussianBlur(kernel_size=kernel_size, sigma=sigma) + self.p = p + + def __call__(self, img): + if random.random() < self.p: + return self.blur(img) + return img + + +class RandomMask(object): + def __init__(self, ratio=0.5, patch_size=16, p=0.5): + """ + Args: + ratio (float or tuple of float): If float, the ratio of the image to be masked. + If tuple of float, random sample ratio between the two values. + patch_size (int): the size of the mask (d*d). + """ + if isinstance(ratio, float): + self.fixed_ratio = True + self.ratio = (ratio, ratio) + elif isinstance(ratio, tuple) and len(ratio) == 2 and all(isinstance(r, float) for r in ratio): + self.fixed_ratio = False + self.ratio = ratio + else: + raise ValueError("Ratio must be a float or a tuple of two floats.") + + self.patch_size = patch_size + self.p = p + + def __call__(self, tensor): + + if random.random() > self.p: return tensor + + _, h, w = tensor.shape + mask = torch.ones((h, w), dtype=torch.float32) + + if self.fixed_ratio: + ratio = self.ratio[0] + else: + ratio = random.uniform(self.ratio[0], self.ratio[1]) + + # Calculate the number of masks needed + num_masks = int((h * w * ratio) / (self.patch_size ** 2)) + + # Generate non-overlapping random positions + selected_positions = set() + while len(selected_positions) < num_masks: + top = random.randint(0, (h // self.patch_size) - 1) * self.patch_size + left = random.randint(0, (w // self.patch_size) - 1) * self.patch_size + selected_positions.add((top, left)) + + for (top, left) in selected_positions: + mask[top:top+self.patch_size, left:left+self.patch_size] = 0 + + return tensor * mask.expand_as(tensor) + +def binary_dataset(opt, root): + if opt.isTrain: + crop_func = transforms.RandomCrop(opt.cropSize) + rotation_func = transforms.RandomRotation(180) + jitter_func = transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5) + mask_func = RandomMask(ratio=(0.00, 0.75), patch_size=16, p=0.5) + elif opt.no_crop: + crop_func = transforms.Lambda(lambda img: img) + rotation_func = transforms.Lambda(lambda img: img) + jitter_func = transforms.Lambda(lambda img: img) + mask_func = transforms.Lambda(lambda img: img) + else: + crop_func = transforms.CenterCrop(opt.cropSize) + rotation_func = transforms.Lambda(lambda img: img) + jitter_func = transforms.Lambda(lambda img: img) + mask_func = transforms.Lambda(lambda img: img) + + if opt.isTrain and not opt.no_flip: + flip_func = transforms.RandomHorizontalFlip() + else: + flip_func = transforms.Lambda(lambda img: img) + if not opt.isTrain and opt.no_resize: + rz_func = transforms.Lambda(lambda img: img) + else: + # rz_func = transforms.Lambda(lambda img: custom_resize(img, opt)) + rz_func = transforms.Resize((opt.loadSize, opt.loadSize)) + # rz_func = transforms.CenterCrop(opt.cropSize) + + dset = datasets.ImageFolder( + root, + transforms.Compose([ + rz_func, + # transforms.Lambda(lambda img: data_augment(img, opt)), + crop_func, + flip_func, + # rotation_func, + # jitter_func, + transforms.ToTensor(), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + # mask_func + ])) + return dset + + +class FileNameDataset(datasets.ImageFolder): + def name(self): + return 'FileNameDataset' + + def __init__(self, opt, root): + self.opt = opt + super().__init__(root) + + def __getitem__(self, index): + # Loading sample + path, target = self.samples[index] + return path + + +def data_augment(img, opt): + img = np.array(img) + + if random() < opt.blur_prob: + sig = sample_continuous(opt.blur_sig) + gaussian_blur(img, sig) + + if random() < opt.jpg_prob: + method = sample_discrete(opt.jpg_method) + qual = sample_discrete(opt.jpg_qual) + img = jpeg_from_key(img, qual, method) + + return Image.fromarray(img) + + +def sample_continuous(s): + if len(s) == 1: + return s[0] + if len(s) == 2: + rg = s[1] - s[0] + return random() * rg + s[0] + raise ValueError("Length of iterable s should be 1 or 2.") + + +def sample_discrete(s): + if len(s) == 1: + return s[0] + return choice(s) + + +def gaussian_blur(img, sigma): + gaussian_filter(img[:,:,0], output=img[:,:,0], sigma=sigma) + gaussian_filter(img[:,:,1], output=img[:,:,1], sigma=sigma) + gaussian_filter(img[:,:,2], output=img[:,:,2], sigma=sigma) + + +def cv2_jpg(img, compress_val): + img_cv2 = img[:,:,::-1] + encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), compress_val] + result, encimg = cv2.imencode('.jpg', img_cv2, encode_param) + decimg = cv2.imdecode(encimg, 1) + return decimg[:,:,::-1] + + +def pil_jpg(img, compress_val): + out = BytesIO() + img = Image.fromarray(img) + img.save(out, format='jpeg', quality=compress_val) + img = Image.open(out) + # load from memory before ByteIO closes + img = np.array(img) + out.close() + return img + + +jpeg_dict = {'cv2': cv2_jpg, 'pil': pil_jpg} +def jpeg_from_key(img, compress_val, key): + method = jpeg_dict[key] + return method(img, compress_val) + + +# rz_dict = {'bilinear': Image.BILINEAR, + # 'bicubic': Image.BICUBIC, + # 'lanczos': Image.LANCZOS, + # 'nearest': Image.NEAREST} +rz_dict = {'bilinear': InterpolationMode.BILINEAR, + 'bicubic': InterpolationMode.BICUBIC, + 'lanczos': InterpolationMode.LANCZOS, + 'nearest': InterpolationMode.NEAREST} +def custom_resize(img, opt): + interp = sample_discrete(opt.rz_interp) + return TF.resize(img, (opt.loadSize,opt.loadSize), interpolation=rz_dict[interp]) diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/log_test.log b/detector_codes/FreqNet-DeepfakeDetection-main/log_test.log new file mode 100644 index 0000000000000000000000000000000000000000..7f7cef72d57d9f4aa7cc3ce9350329595b218a50 --- /dev/null +++ b/detector_codes/FreqNet-DeepfakeDetection-main/log_test.log @@ -0,0 +1,446 @@ +2025-04-24 04:10:25,809 Model_path /data/ziqiang/yjz/code/FreqNet-DeepfakeDetection-main/checkpoints/4class-car-cat-chair-horse2025_04_07_04_23_06/model_epoch_100.pth +2025-04-24 04:10:34,243 AIGIBench +2025-04-24 04:10:34,244 2025-04-24 04:10:34 +2025-04-24 04:11:45,943 (0 R3GAN ) acc: 64.9; ap: 67.2; r_acc: 81.2; f_acc: 48.5 +2025-04-24 04:12:53,964 (1 IP-Adapter ) acc: 55.9; ap: 59.5; r_acc: 80.1; f_acc: 31.6 +2025-04-24 04:14:59,381 (2 SocialRF ) acc: 49.6; ap: 48.5; r_acc: 75.5; f_acc: 22.6 +2025-04-24 04:16:26,890 (3 CommunityAI ) acc: 51.7; ap: 48.7; r_acc: 95.1; f_acc: 7.6 +2025-04-24 04:17:34,747 (4 StyleGAN-XL ) acc: 57.1; ap: 59.7; r_acc: 80.2; f_acc: 33.7 +2025-04-24 04:18:23,989 (5 Midjourney ) acc: 57.6; ap: 57.7; r_acc: 71.3; f_acc: 43.4 +2025-04-24 04:19:32,092 (6 FLUX1-dev ) acc: 73.3; ap: 77.9; r_acc: 81.1; f_acc: 65.4 +2025-04-24 04:20:39,034 (7 E4S ) acc: 49.2; ap: 48.9; r_acc: 76.0; f_acc: 22.1 +2025-04-24 04:21:47,137 (8 Imagen3 ) acc: 79.9; ap: 85.6; r_acc: 80.0; f_acc: 79.9 +2025-04-24 04:22:55,312 (9 BLIP ) acc: 59.0; ap: 66.7; r_acc: 86.7; f_acc: 31.1 +2025-04-24 04:24:03,680 (10 SDXL ) acc: 86.4; ap: 93.6; r_acc: 80.2; f_acc: 92.7 +2025-04-24 04:25:04,234 (11 DALLE-3 ) acc: 47.3; ap: 47.0; r_acc: 80.6; f_acc: 13.3 +2025-04-24 04:26:12,130 (12 GLIDE ) acc: 67.8; ap: 75.9; r_acc: 81.9; f_acc: 53.7 +2025-04-24 04:27:18,993 (13 InSwap ) acc: 52.1; ap: 49.5; r_acc: 82.9; f_acc: 20.0 +2025-04-24 04:28:25,855 (14 FaceSwap ) acc: 45.7; ap: 39.3; r_acc: 81.7; f_acc: 8.4 +2025-04-24 04:29:33,917 (15 StyleSwim ) acc: 75.9; ap: 81.6; r_acc: 80.0; f_acc: 71.8 +2025-04-24 04:30:32,243 (16 ProGAN ) acc: 99.7; ap: 100.0; r_acc: 100.0; f_acc: 99.5 +2025-04-24 04:31:43,197 (17 BlendFace ) acc: 45.3; ap: 43.3; r_acc: 75.7; f_acc: 14.7 +2025-04-24 04:32:51,259 (18 PhotoMaker ) acc: 41.9; ap: 36.3; r_acc: 80.9; f_acc: 2.5 +2025-04-24 04:33:59,162 (19 SD3 ) acc: 77.6; ap: 84.0; r_acc: 80.2; f_acc: 75.0 +2025-04-24 04:35:07,059 (20 Infinite-ID ) acc: 43.4; ap: 38.6; r_acc: 80.3; f_acc: 6.2 +2025-04-24 04:35:25,855 (21 WFIR ) acc: 48.0; ap: 46.6; r_acc: 81.1; f_acc: 12.1 +2025-04-24 04:36:33,625 (22 SimSwap ) acc: 49.2; ap: 47.2; r_acc: 83.3; f_acc: 14.8 +2025-04-24 04:37:45,615 (23 InstantID ) acc: 55.3; ap: 58.8; r_acc: 81.4; f_acc: 29.0 +2025-04-24 04:38:53,019 (24 StyleGAN3 ) acc: 71.5; ap: 79.4; r_acc: 76.0; f_acc: 66.9 +2025-04-24 04:38:53,019 (25 Mean ) acc: 60.2; ap: 61.7; r_acc: 81.3; f_acc: 38.7 +2025-04-24 04:38:53,019 ************************* +2025-05-12 06:26:12,239 Model_path /data/ziqiang/yjz/code/FreqNet-DeepfakeDetection-main/checkpoints/4class-car-cat-chair-horse2025_04_07_04_23_06/model_epoch_100.pth +2025-05-12 06:26:13,961 AIGIBench # crop +2025-05-12 06:26:13,961 2025-05-12 06:26:13 +2025-05-12 06:27:06,874 (0 R3GAN ) acc: 70.4; ap: 79.3; r_acc: 90.3; f_acc: 50.2 +2025-05-12 06:28:13,333 (1 IP-Adapter ) acc: 61.7; ap: 73.2; r_acc: 89.6; f_acc: 33.5 +2025-05-12 06:30:04,926 (2 SocialRF ) acc: 59.4; ap: 62.6; r_acc: 84.1; f_acc: 33.8 +2025-05-12 06:31:12,151 (3 CommunityAI ) acc: 33.4; ap: 38.1; r_acc: 31.9; f_acc: 34.9 +2025-05-12 06:32:04,357 (4 StyleGAN-XL ) acc: 66.0; ap: 79.4; r_acc: 90.2; f_acc: 41.5 +2025-05-12 06:32:43,055 (5 Midjourney ) acc: 81.4; ap: 93.4; r_acc: 97.2; f_acc: 65.0 +2025-05-12 06:33:35,690 (6 FLUX1-dev ) acc: 82.7; ap: 90.3; r_acc: 90.0; f_acc: 75.3 +2025-05-12 06:34:27,308 (7 E4S ) acc: 59.0; ap: 65.5; r_acc: 91.5; f_acc: 26.2 +2025-05-12 06:35:19,743 (8 Imagen3 ) acc: 81.0; ap: 88.7; r_acc: 90.3; f_acc: 71.7 +2025-05-12 06:36:12,062 (9 BLIP ) acc: 68.6; ap: 75.7; r_acc: 85.8; f_acc: 51.2 +2025-05-12 06:37:04,455 (10 SDXL ) acc: 80.4; ap: 87.6; r_acc: 86.7; f_acc: 74.0 +2025-05-12 06:37:51,416 (11 DALLE-3 ) acc: 51.5; ap: 53.2; r_acc: 90.5; f_acc: 11.9 +2025-05-12 06:38:44,037 (12 GLIDE ) acc: 71.5; ap: 81.2; r_acc: 88.9; f_acc: 54.0 +2025-05-12 06:39:36,250 (13 InSwap ) acc: 56.5; ap: 57.1; r_acc: 88.6; f_acc: 23.3 +2025-05-12 06:40:27,988 (14 FaceSwap ) acc: 49.6; ap: 44.9; r_acc: 88.5; f_acc: 9.3 +2025-05-12 06:41:20,566 (15 StyleSwim ) acc: 89.0; ap: 94.9; r_acc: 89.3; f_acc: 88.7 +2025-05-12 06:42:05,884 (16 ProGAN ) acc: 99.6; ap: 100.0; r_acc: 99.9; f_acc: 99.4 +2025-05-12 06:43:01,304 (17 BlendFace ) acc: 54.6; ap: 59.2; r_acc: 91.8; f_acc: 17.0 +2025-05-12 06:43:54,003 (18 PhotoMaker ) acc: 60.0; ap: 72.3; r_acc: 89.9; f_acc: 29.8 +2025-05-12 06:44:46,603 (19 SD3 ) acc: 67.6; ap: 76.0; r_acc: 86.7; f_acc: 48.4 +2025-05-12 06:45:39,028 (20 Infinite-ID ) acc: 57.8; ap: 68.8; r_acc: 89.3; f_acc: 26.1 +2025-05-12 06:45:53,805 (21 WFIR ) acc: 51.9; ap: 56.5; r_acc: 99.4; f_acc: 0.2 +2025-05-12 06:46:46,200 (22 SimSwap ) acc: 53.0; ap: 53.5; r_acc: 88.9; f_acc: 16.7 +2025-05-12 06:47:47,581 (23 InstantID ) acc: 73.1; ap: 85.0; r_acc: 90.8; f_acc: 55.2 +2025-05-12 06:48:40,153 (24 StyleGAN3 ) acc: 81.6; ap: 89.5; r_acc: 84.7; f_acc: 78.5 +2025-05-12 06:48:40,153 (25 Mean ) acc: 66.5; ap: 73.0; r_acc: 87.8; f_acc: 44.6 +2025-05-12 06:48:40,154 ************************* +2025-05-14 12:40:10,565 Model_path /data/ziqiang/yjz/code/FreqNet-DeepfakeDetection-main/checkpoints/4class-car-cat-chair-horse2025_04_07_04_23_06/model_epoch_100.pth +2025-05-14 12:40:18,402 jpeg +2025-05-14 12:40:18,402 2025-05-14 12:40:18 +2025-05-14 12:41:42,341 (0 R3GAN ) acc: 61.7; ap: 68.3; r_acc: 88.9; f_acc: 34.2 +2025-05-14 12:43:27,644 (1 IP-Adapter ) acc: 45.4; ap: 46.0; r_acc: 88.4; f_acc: 2.1 +2025-05-14 12:44:38,433 (2 SocialRF ) acc: 48.4; ap: 45.0; r_acc: 88.4; f_acc: 6.9 +2025-05-14 12:46:54,505 (3 CommunityAI ) acc: 48.6; ap: 41.0; r_acc: 94.8; f_acc: 1.8 +2025-05-14 12:48:07,945 (4 StyleGAN-XL ) acc: 44.4; ap: 37.3; r_acc: 88.1; f_acc: 0.3 +2025-05-14 12:49:04,331 (5 Midjourney ) acc: 53.7; ap: 63.6; r_acc: 98.4; f_acc: 7.3 +2025-05-14 12:50:26,066 (6 FLUX1-dev ) acc: 46.3; ap: 47.2; r_acc: 88.1; f_acc: 4.2 +2025-05-14 12:51:41,730 (7 E4S ) acc: 48.5; ap: 39.1; r_acc: 93.6; f_acc: 3.0 +2025-05-14 12:53:08,810 (8 Imagen3 ) acc: 52.4; ap: 55.3; r_acc: 88.8; f_acc: 15.7 +2025-05-14 12:54:41,616 (9 BLIP ) acc: 40.8; ap: 34.3; r_acc: 81.0; f_acc: 0.3 +2025-05-14 12:55:53,553 (10 SDXL ) acc: 46.4; ap: 39.5; r_acc: 90.3; f_acc: 2.4 +2025-05-14 12:58:02,971 (11 DALLE-3 ) acc: 48.5; ap: 51.1; r_acc: 88.2; f_acc: 8.2 +2025-05-14 12:59:40,651 (12 GLIDE ) acc: 57.7; ap: 58.6; r_acc: 87.0; f_acc: 28.2 +2025-05-14 13:01:12,906 (13 InSwap ) acc: 45.4; ap: 34.2; r_acc: 86.4; f_acc: 2.8 +2025-05-14 13:02:49,631 (14 FaceSwap ) acc: 45.1; ap: 34.2; r_acc: 85.9; f_acc: 2.7 +2025-05-14 13:04:08,293 (15 StyleSwim ) acc: 44.4; ap: 36.6; r_acc: 88.2; f_acc: 0.3 +2025-05-14 13:05:15,250 (16 ProGAN ) acc: 50.5; ap: 49.7; r_acc: 66.2; f_acc: 34.5 +2025-05-14 13:07:22,866 (17 BlendFace ) acc: 49.7; ap: 43.0; r_acc: 94.4; f_acc: 4.7 +2025-05-14 13:09:22,856 (18 PhotoMaker ) acc: 44.9; ap: 35.8; r_acc: 88.3; f_acc: 1.1 +2025-05-14 13:11:32,905 (19 SD3 ) acc: 50.2; ap: 54.2; r_acc: 90.3; f_acc: 10.0 +2025-05-14 13:13:53,948 (20 Infinite-ID ) acc: 45.0; ap: 38.8; r_acc: 89.5; f_acc: 0.6 +2025-05-14 13:14:23,459 (21 WFIR ) acc: 51.7; ap: 45.6; r_acc: 99.1; f_acc: 0.1 +2025-05-14 13:15:57,931 (22 SimSwap ) acc: 47.7; ap: 41.8; r_acc: 87.3; f_acc: 7.8 +2025-05-14 13:19:41,805 (23 InstantID ) acc: 45.3; ap: 40.5; r_acc: 88.2; f_acc: 1.9 +2025-05-14 13:21:31,677 (24 StyleGAN3 ) acc: 45.5; ap: 34.8; r_acc: 90.3; f_acc: 0.3 +2025-05-14 13:21:31,678 (25 Mean ) acc: 48.3; ap: 44.6; r_acc: 88.7; f_acc: 7.3 +2025-05-14 13:21:31,678 ************************* +2025-05-14 13:21:31,678 noise +2025-05-14 13:21:31,678 2025-05-14 13:21:31 +2025-05-14 13:22:53,656 (0 R3GAN ) acc: 75.9; ap: 79.9; r_acc: 88.5; f_acc: 63.2 +2025-05-14 13:24:04,715 (1 IP-Adapter ) acc: 45.1; ap: 39.3; r_acc: 88.6; f_acc: 1.2 +2025-05-14 13:44:42,811 (2 SocialRF ) acc: 44.6; ap: 41.0; r_acc: 77.5; f_acc: 10.4 +2025-05-14 13:54:28,022 (3 CommunityAI ) acc: 50.3; ap: 43.3; r_acc: 94.9; f_acc: 4.9 +2025-05-14 13:55:48,889 (4 StyleGAN-XL ) acc: 44.7; ap: 36.3; r_acc: 88.4; f_acc: 0.5 +2025-05-14 13:56:49,885 (5 Midjourney ) acc: 55.0; ap: 64.1; r_acc: 98.3; f_acc: 9.9 +2025-05-14 14:03:30,594 (6 FLUX1-dev ) acc: 46.9; ap: 42.3; r_acc: 88.5; f_acc: 4.9 +2025-05-14 14:05:46,476 (7 E4S ) acc: 61.3; ap: 80.6; r_acc: 93.8; f_acc: 28.5 +2025-05-14 14:10:13,366 (8 Imagen3 ) acc: 56.3; ap: 62.0; r_acc: 89.0; f_acc: 23.3 +2025-05-14 14:11:52,663 (9 BLIP ) acc: 41.8; ap: 36.2; r_acc: 81.7; f_acc: 1.5 +2025-05-14 14:13:11,120 (10 SDXL ) acc: 46.8; ap: 41.8; r_acc: 89.3; f_acc: 3.9 +2025-05-14 14:16:43,412 (11 DALLE-3 ) acc: 49.0; ap: 47.4; r_acc: 89.4; f_acc: 7.9 +2025-05-14 14:18:13,108 (12 GLIDE ) acc: 57.4; ap: 68.6; r_acc: 86.5; f_acc: 28.0 +2025-05-14 14:19:20,822 (13 InSwap ) acc: 52.5; ap: 64.0; r_acc: 86.8; f_acc: 16.9 +2025-05-14 14:20:52,657 (14 FaceSwap ) acc: 54.1; ap: 64.1; r_acc: 86.2; f_acc: 20.6 +2025-05-14 14:22:00,382 (15 StyleSwim ) acc: 45.2; ap: 39.2; r_acc: 88.1; f_acc: 2.0 +2025-05-14 14:22:58,778 (16 ProGAN ) acc: 50.6; ap: 53.6; r_acc: 5.7; f_acc: 96.2 +2025-05-14 14:25:30,963 (17 BlendFace ) acc: 58.4; ap: 79.4; r_acc: 93.8; f_acc: 22.7 +2025-05-14 14:27:29,382 (18 PhotoMaker ) acc: 45.3; ap: 34.9; r_acc: 88.3; f_acc: 2.0 +2025-05-14 14:28:40,248 (19 SD3 ) acc: 55.2; ap: 60.4; r_acc: 89.6; f_acc: 20.4 +2025-05-14 14:34:36,025 (20 Infinite-ID ) acc: 45.0; ap: 34.1; r_acc: 89.2; f_acc: 0.5 +2025-05-14 14:35:05,678 (21 WFIR ) acc: 51.7; ap: 41.5; r_acc: 99.1; f_acc: 0.2 +2025-05-14 14:37:07,863 (22 SimSwap ) acc: 57.9; ap: 68.6; r_acc: 87.4; f_acc: 28.2 +2025-05-14 14:45:59,205 (23 InstantID ) acc: 46.4; ap: 38.3; r_acc: 88.9; f_acc: 3.6 +2025-05-14 15:01:10,458 (24 StyleGAN3 ) acc: 39.0; ap: 38.4; r_acc: 67.3; f_acc: 10.5 +2025-05-14 15:01:10,459 (25 Mean ) acc: 51.1; ap: 52.0; r_acc: 85.0; f_acc: 16.5 +2025-05-14 15:01:10,459 ************************* +2025-05-14 15:01:10,459 sample +2025-05-14 15:01:10,459 2025-05-14 15:01:10 +2025-05-14 15:05:08,693 (0 R3GAN ) acc: 93.1; ap: 99.1; r_acc: 86.3; f_acc: 99.9 +2025-05-14 15:09:59,067 (1 IP-Adapter ) acc: 57.4; ap: 64.3; r_acc: 86.1; f_acc: 28.5 +2025-05-14 15:22:27,312 (2 SocialRF ) acc: 49.5; ap: 48.5; r_acc: 75.9; f_acc: 22.0 +2025-05-14 15:24:39,810 (3 CommunityAI ) acc: 52.1; ap: 50.4; r_acc: 95.7; f_acc: 7.9 +2025-05-14 15:27:48,530 (4 StyleGAN-XL ) acc: 56.8; ap: 62.5; r_acc: 86.1; f_acc: 27.1 +2025-05-14 15:28:48,100 (5 Midjourney ) acc: 59.3; ap: 61.3; r_acc: 75.9; f_acc: 42.1 +2025-05-14 15:30:08,088 (6 FLUX1-dev ) acc: 74.9; ap: 82.2; r_acc: 86.6; f_acc: 63.1 +2025-05-14 15:31:33,295 (7 E4S ) acc: 88.6; ap: 95.9; r_acc: 82.1; f_acc: 95.2 +2025-05-14 15:32:46,446 (8 Imagen3 ) acc: 79.1; ap: 85.8; r_acc: 86.1; f_acc: 72.0 +2025-05-14 15:35:33,459 (9 BLIP ) acc: 56.8; ap: 70.4; r_acc: 92.8; f_acc: 20.4 +2025-05-14 15:36:59,366 (10 SDXL ) acc: 89.4; ap: 95.5; r_acc: 87.3; f_acc: 91.5 +2025-05-14 15:38:36,650 (11 DALLE-3 ) acc: 49.2; ap: 50.2; r_acc: 86.4; f_acc: 11.3 +2025-05-14 15:39:44,522 (12 GLIDE ) acc: 93.1; ap: 98.6; r_acc: 88.3; f_acc: 97.9 +2025-05-14 15:40:51,666 (13 InSwap ) acc: 89.7; ap: 96.0; r_acc: 88.7; f_acc: 90.8 +2025-05-14 15:41:58,723 (14 FaceSwap ) acc: 87.9; ap: 94.5; r_acc: 88.0; f_acc: 87.8 +2025-05-14 15:43:06,521 (15 StyleSwim ) acc: 76.2; ap: 83.6; r_acc: 85.8; f_acc: 66.6 +2025-05-14 15:44:05,317 (16 ProGAN ) acc: 55.9; ap: 57.9; r_acc: 13.4; f_acc: 99.1 +2025-05-14 15:45:14,368 (17 BlendFace ) acc: 86.3; ap: 94.0; r_acc: 81.6; f_acc: 91.1 +2025-05-14 15:46:21,969 (18 PhotoMaker ) acc: 44.6; ap: 37.4; r_acc: 86.7; f_acc: 2.1 +2025-05-14 15:47:29,906 (19 SD3 ) acc: 79.9; ap: 88.1; r_acc: 87.3; f_acc: 72.3 +2025-05-14 15:48:37,688 (20 Infinite-ID ) acc: 46.5; ap: 41.5; r_acc: 86.9; f_acc: 5.8 +2025-05-14 15:48:54,615 (21 WFIR ) acc: 51.2; ap: 43.3; r_acc: 96.8; f_acc: 1.7 +2025-05-14 15:50:02,347 (22 SimSwap ) acc: 92.2; ap: 97.6; r_acc: 88.8; f_acc: 95.6 +2025-05-14 15:51:09,882 (23 InstantID ) acc: 56.0; ap: 61.2; r_acc: 87.2; f_acc: 24.4 +2025-05-14 15:52:17,215 (24 StyleGAN3 ) acc: 58.6; ap: 58.2; r_acc: 49.1; f_acc: 68.3 +2025-05-14 15:52:17,216 (25 Mean ) acc: 69.0; ap: 72.7; r_acc: 82.2; f_acc: 55.4 +2025-05-14 15:52:17,217 ************************* +2025-04-24 05:07:35,786 Model_path /data/ziqiang/yjz/code/FreqNet-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_10_03_46_52/model_epoch_50.pth +2025-04-24 05:07:43,237 AIGIBench +2025-04-24 05:07:43,238 2025-04-24 05:07:43 +2025-04-24 05:08:55,396 (0 R3GAN ) acc: 62.3; ap: 56.8; r_acc: 64.7; f_acc: 59.9 +2025-04-24 05:10:03,261 (1 IP-Adapter ) acc: 78.8; ap: 79.9; r_acc: 65.8; f_acc: 92.0 +2025-04-24 05:12:09,042 (2 SocialRF ) acc: 54.2; ap: 58.1; r_acc: 68.5; f_acc: 39.3 +2025-04-24 05:13:37,111 (3 CommunityAI ) acc: 55.9; ap: 69.7; r_acc: 98.9; f_acc: 12.2 +2025-04-24 05:14:45,394 (4 StyleGAN-XL ) acc: 79.8; ap: 84.1; r_acc: 64.3; f_acc: 95.5 +2025-04-24 05:15:34,931 (5 Midjourney ) acc: 53.9; ap: 55.9; r_acc: 25.3; f_acc: 83.6 +2025-04-24 05:16:43,170 (6 FLUX1-dev ) acc: 78.5; ap: 87.3; r_acc: 64.7; f_acc: 92.4 +2025-04-24 05:17:49,939 (7 E4S ) acc: 25.8; ap: 34.7; r_acc: 50.3; f_acc: 1.1 +2025-04-24 05:18:58,118 (8 Imagen3 ) acc: 73.6; ap: 80.7; r_acc: 65.8; f_acc: 81.5 +2025-04-24 05:20:06,038 (9 BLIP ) acc: 93.8; ap: 99.9; r_acc: 87.7; f_acc: 100.0 +2025-04-24 05:21:14,035 (10 SDXL ) acc: 82.7; ap: 95.2; r_acc: 66.6; f_acc: 98.9 +2025-04-24 05:22:14,684 (11 DALLE-3 ) acc: 66.2; ap: 61.0; r_acc: 64.2; f_acc: 68.2 +2025-04-24 05:23:22,816 (12 GLIDE ) acc: 75.8; ap: 77.4; r_acc: 71.8; f_acc: 79.7 +2025-04-24 05:24:30,137 (13 InSwap ) acc: 37.5; ap: 42.1; r_acc: 72.6; f_acc: 0.9 +2025-04-24 05:25:37,421 (14 FaceSwap ) acc: 40.4; ap: 43.4; r_acc: 73.4; f_acc: 6.2 +2025-04-24 05:26:45,454 (15 StyleSwim ) acc: 80.8; ap: 91.8; r_acc: 64.7; f_acc: 97.1 +2025-04-24 05:27:43,963 (16 ProGAN ) acc: 99.3; ap: 100.0; r_acc: 99.3; f_acc: 99.4 +2025-04-24 05:28:54,979 (17 BlendFace ) acc: 23.3; ap: 34.1; r_acc: 46.2; f_acc: 0.3 +2025-04-24 05:30:02,905 (18 PhotoMaker ) acc: 77.0; ap: 74.9; r_acc: 65.5; f_acc: 88.6 +2025-04-24 05:31:10,908 (19 SD3 ) acc: 77.3; ap: 82.6; r_acc: 66.6; f_acc: 88.1 +2025-04-24 05:32:19,095 (20 Infinite-ID ) acc: 79.0; ap: 74.5; r_acc: 65.4; f_acc: 92.7 +2025-04-24 05:32:37,942 (21 WFIR ) acc: 58.5; ap: 48.9; r_acc: 30.2; f_acc: 89.3 +2025-04-24 05:33:45,841 (22 SimSwap ) acc: 36.5; ap: 41.9; r_acc: 72.0; f_acc: 0.6 +2025-04-24 05:34:58,083 (23 InstantID ) acc: 79.8; ap: 86.3; r_acc: 65.8; f_acc: 93.9 +2025-04-24 05:36:05,566 (24 StyleGAN3 ) acc: 83.0; ap: 92.4; r_acc: 68.0; f_acc: 98.2 +2025-04-24 05:36:05,566 (25 Mean ) acc: 66.2; ap: 70.1; r_acc: 65.9; f_acc: 66.4 +2025-04-24 05:36:05,566 ************************* +2025-05-09 06:59:58,493 Model_path /data/ziqiang/yjz/code/FreqNet-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_10_03_46_52/model_epoch_50.pth +2025-05-09 06:59:59,718 AIGIBench # crop +2025-05-09 06:59:59,718 2025-05-09 06:59:59 +2025-05-09 07:01:01,058 (0 R3GAN ) acc: 75.4; ap: 74.8; r_acc: 82.2; f_acc: 68.5 +2025-05-09 07:02:27,565 (1 IP-Adapter ) acc: 90.4; ap: 96.1; r_acc: 83.0; f_acc: 98.0 +2025-05-09 07:04:27,080 (2 SocialRF ) acc: 57.6; ap: 60.1; r_acc: 97.3; f_acc: 16.3 +2025-05-09 07:05:34,505 (3 CommunityAI ) acc: 53.4; ap: 49.5; r_acc: 96.0; f_acc: 10.1 +2025-05-09 07:06:42,902 (4 StyleGAN-XL ) acc: 83.6; ap: 84.3; r_acc: 82.3; f_acc: 84.9 +2025-05-09 07:08:05,984 (5 Midjourney ) acc: 75.5; ap: 92.4; r_acc: 54.4; f_acc: 97.4 +2025-05-09 07:09:29,934 (6 FLUX1-dev ) acc: 90.3; ap: 98.5; r_acc: 81.6; f_acc: 99.2 +2025-05-09 07:10:27,265 (7 E4S ) acc: 37.1; ap: 41.8; r_acc: 72.6; f_acc: 1.3 +2025-05-09 07:11:20,430 (8 Imagen3 ) acc: 82.1; ap: 82.0; r_acc: 82.2; f_acc: 82.0 +2025-05-09 07:12:12,930 (9 BLIP ) acc: 98.3; ap: 99.9; r_acc: 98.6; f_acc: 97.9 +2025-05-09 07:13:08,829 (10 SDXL ) acc: 92.9; ap: 99.3; r_acc: 86.2; f_acc: 99.8 +2025-05-09 07:14:05,402 (11 DALLE-3 ) acc: 50.4; ap: 54.3; r_acc: 82.2; f_acc: 17.9 +2025-05-09 07:14:57,934 (12 GLIDE ) acc: 85.0; ap: 89.9; r_acc: 88.0; f_acc: 82.0 +2025-05-09 07:15:49,755 (13 InSwap ) acc: 45.6; ap: 56.0; r_acc: 87.8; f_acc: 1.7 +2025-05-09 07:16:42,689 (14 FaceSwap ) acc: 50.6; ap: 58.7; r_acc: 87.9; f_acc: 11.9 +2025-05-09 07:17:35,011 (15 StyleSwim ) acc: 90.3; ap: 97.4; r_acc: 81.4; f_acc: 99.3 +2025-05-09 07:18:19,980 (16 ProGAN ) acc: 98.9; ap: 100.0; r_acc: 98.6; f_acc: 99.2 +2025-05-09 07:19:15,343 (17 BlendFace ) acc: 35.2; ap: 40.9; r_acc: 69.5; f_acc: 0.7 +2025-05-09 07:20:07,774 (18 PhotoMaker ) acc: 90.7; ap: 98.7; r_acc: 81.8; f_acc: 99.8 +2025-05-09 07:21:00,312 (19 SD3 ) acc: 88.3; ap: 93.8; r_acc: 86.2; f_acc: 90.4 +2025-05-09 07:21:52,684 (20 Infinite-ID ) acc: 91.6; ap: 98.8; r_acc: 83.7; f_acc: 99.6 +2025-05-09 07:22:07,775 (21 WFIR ) acc: 69.4; ap: 86.7; r_acc: 98.7; f_acc: 37.5 +2025-05-09 07:23:00,094 (22 SimSwap ) acc: 44.3; ap: 54.3; r_acc: 87.1; f_acc: 1.1 +2025-05-09 07:24:07,539 (23 InstantID ) acc: 91.2; ap: 98.7; r_acc: 82.6; f_acc: 99.9 +2025-05-09 07:25:02,214 (24 StyleGAN3 ) acc: 87.1; ap: 93.5; r_acc: 82.4; f_acc: 91.7 +2025-05-09 07:25:02,214 (25 Mean ) acc: 74.2; ap: 80.0; r_acc: 84.6; f_acc: 63.5 +2025-05-09 07:25:02,214 ************************* +2025-04-30 01:40:31,407 Model_path /data/ziqiang/yjz/code/FreqNet-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_10_03_46_52/model_epoch_50.pth +2025-04-30 01:40:31,687 jpeg +2025-04-30 01:40:31,687 2025-04-30 01:40:31 +2025-04-30 01:41:43,628 (0 R3GAN ) acc: 50.1; ap: 36.4; r_acc: 99.8; f_acc: 0.0 +2025-04-30 01:42:53,966 (1 IP-Adapter ) acc: 51.9; ap: 79.1; r_acc: 99.8; f_acc: 3.5 +2025-04-30 01:45:04,218 (2 SocialRF ) acc: 48.6; ap: 45.1; r_acc: 91.0; f_acc: 4.5 +2025-04-30 01:47:42,244 (3 CommunityAI ) acc: 50.4; ap: 52.4; r_acc: 99.4; f_acc: 0.6 +2025-04-30 01:49:56,080 (4 StyleGAN-XL ) acc: 50.1; ap: 46.9; r_acc: 99.8; f_acc: 0.0 +2025-04-30 01:51:42,129 (5 Midjourney ) acc: 51.3; ap: 64.7; r_acc: 99.7; f_acc: 0.9 +2025-04-30 01:54:16,217 (6 FLUX1-dev ) acc: 50.3; ap: 66.3; r_acc: 99.8; f_acc: 0.3 +2025-04-30 01:56:26,531 (7 E4S ) acc: 50.1; ap: 36.7; r_acc: 99.8; f_acc: 0.0 +2025-04-30 01:58:54,257 (8 Imagen3 ) acc: 50.4; ap: 66.0; r_acc: 99.8; f_acc: 0.6 +2025-04-30 02:01:28,504 (9 BLIP ) acc: 50.2; ap: 32.9; r_acc: 99.9; f_acc: 0.0 +2025-04-30 02:04:05,145 (10 SDXL ) acc: 50.0; ap: 44.3; r_acc: 99.9; f_acc: 0.0 +2025-04-30 02:06:17,453 (11 DALLE-3 ) acc: 52.3; ap: 82.9; r_acc: 99.9; f_acc: 3.9 +2025-04-30 02:08:55,718 (12 GLIDE ) acc: 50.1; ap: 44.1; r_acc: 99.8; f_acc: 0.0 +2025-04-30 02:11:30,437 (13 InSwap ) acc: 50.8; ap: 42.8; r_acc: 99.7; f_acc: 0.0 +2025-04-30 02:13:59,723 (14 FaceSwap ) acc: 50.9; ap: 41.4; r_acc: 99.8; f_acc: 0.0 +2025-04-30 02:16:33,206 (15 StyleSwim ) acc: 50.1; ap: 48.5; r_acc: 99.7; f_acc: 0.0 +2025-04-30 02:18:42,604 (16 ProGAN ) acc: 50.4; ap: 48.2; r_acc: 100.0; f_acc: 0.1 +2025-04-30 02:21:11,949 (17 BlendFace ) acc: 50.0; ap: 38.0; r_acc: 99.8; f_acc: 0.0 +2025-04-30 02:23:40,831 (18 PhotoMaker ) acc: 50.9; ap: 50.0; r_acc: 99.8; f_acc: 1.6 +2025-04-30 02:26:51,805 (19 SD3 ) acc: 50.2; ap: 64.7; r_acc: 99.9; f_acc: 0.4 +2025-04-30 02:29:38,623 (20 Infinite-ID ) acc: 56.3; ap: 85.7; r_acc: 99.8; f_acc: 13.0 +2025-04-30 02:30:23,982 (21 WFIR ) acc: 52.1; ap: 47.8; r_acc: 100.0; f_acc: 0.1 +2025-04-30 02:33:01,133 (22 SimSwap ) acc: 50.1; ap: 44.2; r_acc: 99.8; f_acc: 0.0 +2025-04-30 02:35:57,963 (23 InstantID ) acc: 52.4; ap: 76.3; r_acc: 99.9; f_acc: 4.4 +2025-04-30 02:38:33,992 (24 StyleGAN3 ) acc: 50.2; ap: 39.2; r_acc: 99.9; f_acc: 0.0 +2025-04-30 02:38:33,992 (25 Mean ) acc: 50.8; ap: 53.0; r_acc: 99.5; f_acc: 1.4 +2025-04-30 02:38:33,992 ************************* +2025-04-30 02:38:33,992 noise +2025-04-30 02:38:33,992 2025-04-30 02:38:33 +2025-04-30 02:42:57,529 (0 R3GAN ) acc: 36.2; ap: 48.5; r_acc: 72.0; f_acc: 0.0 +2025-04-30 02:45:14,769 (1 IP-Adapter ) acc: 79.7; ap: 77.5; r_acc: 72.9; f_acc: 86.6 +2025-04-30 03:12:55,117 (2 SocialRF ) acc: 42.7; ap: 42.0; r_acc: 32.0; f_acc: 53.9 +2025-04-30 03:22:38,425 (3 CommunityAI ) acc: 71.0; ap: 96.3; r_acc: 98.9; f_acc: 42.5 +2025-04-30 03:29:04,396 (4 StyleGAN-XL ) acc: 80.2; ap: 74.3; r_acc: 72.4; f_acc: 88.2 +2025-04-30 03:30:31,428 (5 Midjourney ) acc: 43.8; ap: 44.9; r_acc: 23.9; f_acc: 64.5 +2025-04-30 03:41:03,217 (6 FLUX1-dev ) acc: 73.5; ap: 72.1; r_acc: 72.5; f_acc: 74.5 +2025-04-30 03:46:13,374 (7 E4S ) acc: 28.0; ap: 40.5; r_acc: 55.8; f_acc: 0.0 +2025-04-30 03:54:35,998 (8 Imagen3 ) acc: 68.2; ap: 71.7; r_acc: 72.5; f_acc: 63.8 +2025-04-30 03:56:58,826 (9 BLIP ) acc: 88.5; ap: 99.5; r_acc: 99.6; f_acc: 77.4 +2025-04-30 03:59:15,734 (10 SDXL ) acc: 87.1; ap: 86.8; r_acc: 79.3; f_acc: 94.9 +2025-04-30 04:03:45,643 (11 DALLE-3 ) acc: 70.3; ap: 70.8; r_acc: 71.7; f_acc: 68.8 +2025-04-30 04:06:25,153 (12 GLIDE ) acc: 41.1; ap: 55.0; r_acc: 81.7; f_acc: 0.1 +2025-04-30 04:09:05,276 (13 InSwap ) acc: 42.0; ap: 54.7; r_acc: 82.5; f_acc: 0.0 +2025-04-30 04:11:41,954 (14 FaceSwap ) acc: 42.2; ap: 53.8; r_acc: 82.8; f_acc: 0.0 +2025-04-30 04:13:59,951 (15 StyleSwim ) acc: 82.8; ap: 81.7; r_acc: 72.6; f_acc: 93.1 +2025-04-30 04:16:09,964 (16 ProGAN ) acc: 50.2; ap: 47.1; r_acc: 98.8; f_acc: 0.9 +2025-04-30 04:19:36,086 (17 BlendFace ) acc: 24.9; ap: 38.3; r_acc: 49.5; f_acc: 0.0 +2025-04-30 04:24:35,913 (18 PhotoMaker ) acc: 75.9; ap: 77.0; r_acc: 73.4; f_acc: 78.4 +2025-04-30 04:29:56,300 (19 SD3 ) acc: 74.2; ap: 77.0; r_acc: 79.0; f_acc: 69.3 +2025-04-30 04:34:50,414 (20 Infinite-ID ) acc: 83.1; ap: 82.3; r_acc: 75.6; f_acc: 90.8 +2025-04-30 04:35:17,959 (21 WFIR ) acc: 52.0; ap: 46.1; r_acc: 99.0; f_acc: 1.0 +2025-04-30 04:37:56,146 (22 SimSwap ) acc: 41.2; ap: 54.5; r_acc: 82.0; f_acc: 0.0 +2025-04-30 04:46:01,880 (23 InstantID ) acc: 79.2; ap: 85.3; r_acc: 73.1; f_acc: 85.3 +2025-04-30 04:49:49,966 (24 StyleGAN3 ) acc: 73.1; ap: 77.8; r_acc: 67.8; f_acc: 78.4 +2025-04-30 04:49:49,966 (25 Mean ) acc: 61.2; ap: 66.2; r_acc: 73.7; f_acc: 48.5 +2025-04-30 04:49:49,966 ************************* +2025-04-30 04:49:49,966 sample +2025-04-30 04:49:49,966 2025-04-30 04:49:49 +2025-04-30 04:52:13,499 (0 R3GAN ) acc: 65.1; ap: 61.7; r_acc: 73.2; f_acc: 57.0 +2025-04-30 04:54:37,898 (1 IP-Adapter ) acc: 83.8; ap: 82.9; r_acc: 73.5; f_acc: 94.1 +2025-04-30 04:59:07,696 (2 SocialRF ) acc: 54.6; ap: 58.1; r_acc: 68.7; f_acc: 39.9 +2025-04-30 05:02:18,118 (3 CommunityAI ) acc: 56.4; ap: 72.5; r_acc: 99.2; f_acc: 12.9 +2025-04-30 05:04:56,978 (4 StyleGAN-XL ) acc: 84.8; ap: 86.7; r_acc: 73.1; f_acc: 96.7 +2025-04-30 05:06:56,892 (5 Midjourney ) acc: 54.1; ap: 57.3; r_acc: 24.0; f_acc: 85.4 +2025-04-30 05:09:21,305 (6 FLUX1-dev ) acc: 82.8; ap: 89.3; r_acc: 72.4; f_acc: 93.2 +2025-04-30 05:11:52,078 (7 E4S ) acc: 32.5; ap: 40.2; r_acc: 56.4; f_acc: 8.4 +2025-04-30 05:14:41,973 (8 Imagen3 ) acc: 76.7; ap: 81.3; r_acc: 73.4; f_acc: 80.1 +2025-04-30 05:17:05,068 (9 BLIP ) acc: 99.5; ap: 100.0; r_acc: 99.2; f_acc: 99.9 +2025-04-30 05:19:33,455 (10 SDXL ) acc: 89.2; ap: 96.4; r_acc: 79.2; f_acc: 99.3 +2025-04-30 05:21:39,589 (11 DALLE-3 ) acc: 71.8; ap: 65.9; r_acc: 72.6; f_acc: 70.9 +2025-04-30 05:24:06,659 (12 GLIDE ) acc: 64.8; ap: 73.1; r_acc: 82.2; f_acc: 47.2 +2025-04-30 05:26:27,198 (13 InSwap ) acc: 46.4; ap: 56.2; r_acc: 82.5; f_acc: 8.8 +2025-04-30 05:28:48,306 (14 FaceSwap ) acc: 46.8; ap: 55.3; r_acc: 83.0; f_acc: 9.2 +2025-04-30 05:31:11,763 (15 StyleSwim ) acc: 85.3; ap: 92.4; r_acc: 73.0; f_acc: 97.8 +2025-04-30 05:33:20,154 (16 ProGAN ) acc: 87.8; ap: 95.0; r_acc: 81.6; f_acc: 94.1 +2025-04-30 05:35:59,975 (17 BlendFace ) acc: 27.6; ap: 38.0; r_acc: 51.0; f_acc: 4.1 +2025-04-30 05:38:23,267 (18 PhotoMaker ) acc: 83.5; ap: 82.4; r_acc: 73.4; f_acc: 93.6 +2025-04-30 05:40:53,306 (19 SD3 ) acc: 84.9; ap: 86.6; r_acc: 79.2; f_acc: 90.6 +2025-04-30 05:43:23,472 (20 Infinite-ID ) acc: 85.8; ap: 80.2; r_acc: 75.9; f_acc: 95.9 +2025-04-30 05:44:03,993 (21 WFIR ) acc: 51.3; ap: 46.0; r_acc: 96.2; f_acc: 2.5 +2025-04-30 05:46:31,594 (22 SimSwap ) acc: 44.4; ap: 54.7; r_acc: 82.3; f_acc: 6.1 +2025-04-30 05:49:28,273 (23 InstantID ) acc: 84.4; ap: 88.7; r_acc: 73.4; f_acc: 95.5 +2025-04-30 05:51:56,897 (24 StyleGAN3 ) acc: 82.1; ap: 90.0; r_acc: 68.6; f_acc: 95.7 +2025-04-30 05:51:56,897 (25 Mean ) acc: 69.1; ap: 73.2; r_acc: 74.7; f_acc: 63.1 +2025-04-30 05:51:56,897 ************************* +2025-05-09 05:26:09,705 Model_path /data/ziqiang/yjz/code/FreqNet-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-r2025_05_01_11_18_47/model_epoch_50.pth +2025-05-09 05:26:34,208 AIGIBench +2025-05-09 05:26:34,208 2025-05-09 05:26:34 +2025-05-09 05:29:43,616 (0 R3GAN ) acc: 68.0; ap: 70.0; r_acc: 76.4; f_acc: 59.6 +2025-05-09 05:31:34,346 (1 IP-Adapter ) acc: 82.9; ap: 83.5; r_acc: 76.9; f_acc: 88.9 +2025-05-09 05:34:38,266 (2 SocialRF ) acc: 54.6; ap: 58.1; r_acc: 76.8; f_acc: 31.6 +2025-05-09 05:36:05,536 (3 CommunityAI ) acc: 55.0; ap: 66.2; r_acc: 99.3; f_acc: 9.9 +2025-05-09 05:37:13,729 (4 StyleGAN-XL ) acc: 76.0; ap: 81.0; r_acc: 75.4; f_acc: 76.6 +2025-05-09 05:38:05,062 (5 Midjourney ) acc: 64.0; ap: 64.9; r_acc: 52.7; f_acc: 75.7 +2025-05-09 05:39:12,958 (6 FLUX1-dev ) acc: 85.2; ap: 92.2; r_acc: 76.0; f_acc: 94.5 +2025-05-09 05:40:19,707 (7 E4S ) acc: 33.6; ap: 34.3; r_acc: 66.9; f_acc: 0.0 +2025-05-09 05:41:27,604 (8 Imagen3 ) acc: 77.1; ap: 83.3; r_acc: 76.6; f_acc: 77.6 +2025-05-09 05:42:35,285 (9 BLIP ) acc: 94.9; ap: 99.4; r_acc: 90.1; f_acc: 99.7 +2025-05-09 05:43:42,932 (10 SDXL ) acc: 85.5; ap: 91.9; r_acc: 75.8; f_acc: 95.3 +2025-05-09 05:44:43,201 (11 DALLE-3 ) acc: 64.5; ap: 66.6; r_acc: 75.5; f_acc: 53.3 +2025-05-09 05:45:50,911 (12 GLIDE ) acc: 59.3; ap: 65.2; r_acc: 79.6; f_acc: 38.8 +2025-05-09 05:46:57,815 (13 InSwap ) acc: 40.6; ap: 41.2; r_acc: 79.6; f_acc: 0.0 +2025-05-09 05:48:04,963 (14 FaceSwap ) acc: 41.3; ap: 42.0; r_acc: 80.7; f_acc: 0.4 +2025-05-09 05:49:12,821 (15 StyleSwim ) acc: 82.5; ap: 91.5; r_acc: 75.8; f_acc: 89.3 +2025-05-09 05:50:11,152 (16 ProGAN ) acc: 99.3; ap: 100.0; r_acc: 99.3; f_acc: 99.2 +2025-05-09 05:51:22,524 (17 BlendFace ) acc: 32.6; ap: 34.3; r_acc: 64.8; f_acc: 0.1 +2025-05-09 05:52:30,825 (18 PhotoMaker ) acc: 75.8; ap: 80.8; r_acc: 75.8; f_acc: 75.7 +2025-05-09 05:53:38,618 (19 SD3 ) acc: 85.2; ap: 90.5; r_acc: 75.8; f_acc: 94.6 +2025-05-09 05:54:46,304 (20 Infinite-ID ) acc: 78.4; ap: 75.6; r_acc: 76.1; f_acc: 80.7 +2025-05-09 05:55:05,213 (21 WFIR ) acc: 58.5; ap: 53.2; r_acc: 62.8; f_acc: 53.9 +2025-05-09 05:56:12,954 (22 SimSwap ) acc: 40.2; ap: 42.2; r_acc: 79.9; f_acc: 0.1 +2025-05-09 05:57:26,560 (23 InstantID ) acc: 79.9; ap: 87.8; r_acc: 76.1; f_acc: 83.7 +2025-05-09 05:58:33,835 (24 StyleGAN3 ) acc: 84.9; ap: 92.1; r_acc: 77.3; f_acc: 92.6 +2025-05-09 05:58:33,835 (25 Mean ) acc: 68.0; ap: 71.5; r_acc: 76.9; f_acc: 58.9 +2025-05-09 05:58:33,835 ************************* +2025-05-12 11:49:32,743 Model_path /data/ziqiang/yjz/code/FreqNet-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-j2025_05_06_16_14_37/model_epoch_90.pth +2025-05-12 11:49:32,991 AIGIBench +2025-05-12 11:49:32,991 2025-05-12 11:49:32 +2025-05-12 11:50:41,211 (0 R3GAN ) acc: 57.7; ap: 69.4; r_acc: 89.9; f_acc: 25.2 +2025-05-12 11:51:49,260 (1 IP-Adapter ) acc: 74.5; ap: 85.3; r_acc: 89.3; f_acc: 59.6 +2025-05-12 11:53:54,859 (2 SocialRF ) acc: 52.6; ap: 53.0; r_acc: 89.7; f_acc: 14.2 +2025-05-12 11:55:22,480 (3 CommunityAI ) acc: 52.6; ap: 72.9; r_acc: 100.0; f_acc: 4.5 +2025-05-12 11:56:30,285 (4 StyleGAN-XL ) acc: 68.7; ap: 80.4; r_acc: 89.5; f_acc: 47.7 +2025-05-12 11:57:19,595 (5 Midjourney ) acc: 50.0; ap: 49.2; r_acc: 75.4; f_acc: 23.6 +2025-05-12 11:58:27,505 (6 FLUX1-dev ) acc: 66.8; ap: 78.7; r_acc: 89.7; f_acc: 43.8 +2025-05-12 11:59:34,295 (7 E4S ) acc: 47.9; ap: 44.3; r_acc: 84.2; f_acc: 11.3 +2025-05-12 12:00:42,203 (8 Imagen3 ) acc: 54.6; ap: 65.0; r_acc: 90.0; f_acc: 18.8 +2025-05-12 12:01:50,004 (9 BLIP ) acc: 98.6; ap: 100.0; r_acc: 97.2; f_acc: 99.9 +2025-05-12 12:02:57,921 (10 SDXL ) acc: 80.7; ap: 89.9; r_acc: 89.7; f_acc: 71.6 +2025-05-12 12:03:58,411 (11 DALLE-3 ) acc: 60.4; ap: 69.8; r_acc: 89.7; f_acc: 30.6 +2025-05-12 12:05:06,217 (12 GLIDE ) acc: 75.4; ap: 87.3; r_acc: 91.6; f_acc: 59.0 +2025-05-12 12:06:13,040 (13 InSwap ) acc: 50.7; ap: 51.2; r_acc: 91.8; f_acc: 7.9 +2025-05-12 12:07:19,733 (14 FaceSwap ) acc: 47.6; ap: 43.5; r_acc: 92.3; f_acc: 1.2 +2025-05-12 12:08:27,675 (15 StyleSwim ) acc: 82.6; ap: 92.1; r_acc: 89.4; f_acc: 75.8 +2025-05-12 12:09:25,957 (16 ProGAN ) acc: 99.6; ap: 100.0; r_acc: 99.9; f_acc: 99.2 +2025-05-12 12:10:36,634 (17 BlendFace ) acc: 45.3; ap: 41.2; r_acc: 83.6; f_acc: 6.7 +2025-05-12 12:11:44,413 (18 PhotoMaker ) acc: 51.9; ap: 61.0; r_acc: 90.1; f_acc: 13.4 +2025-05-12 12:12:52,273 (19 SD3 ) acc: 60.8; ap: 73.3; r_acc: 89.7; f_acc: 31.7 +2025-05-12 12:14:00,044 (20 Infinite-ID ) acc: 63.8; ap: 75.9; r_acc: 90.0; f_acc: 37.5 +2025-05-12 12:14:18,828 (21 WFIR ) acc: 53.0; ap: 51.6; r_acc: 78.3; f_acc: 25.5 +2025-05-12 12:15:26,406 (22 SimSwap ) acc: 50.5; ap: 52.9; r_acc: 92.2; f_acc: 8.4 +2025-05-12 12:16:38,271 (23 InstantID ) acc: 73.4; ap: 85.4; r_acc: 89.5; f_acc: 57.2 +2025-05-12 12:17:45,484 (24 StyleGAN3 ) acc: 67.5; ap: 80.8; r_acc: 90.2; f_acc: 44.7 +2025-05-12 12:17:45,484 (25 Mean ) acc: 63.5; ap: 70.2; r_acc: 89.7; f_acc: 36.8 +2025-05-12 12:17:45,484 ************************* +2025-05-13 07:13:00,299 Model_path /data/ziqiang/yjz/code/FreqNet-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-m2025_05_09_01_36_25/model_epoch_50.pth +2025-05-13 07:13:01,433 AIGIBench +2025-05-13 07:13:01,433 2025-05-13 07:13:01 +2025-05-13 07:14:12,999 (0 R3GAN ) acc: 50.4; ap: 53.6; r_acc: 73.4; f_acc: 27.1 +2025-05-13 07:15:55,861 (1 IP-Adapter ) acc: 81.5; ap: 84.0; r_acc: 74.3; f_acc: 88.7 +2025-05-13 07:20:28,751 (2 SocialRF ) acc: 54.9; ap: 58.9; r_acc: 79.4; f_acc: 29.4 +2025-05-13 07:22:05,735 (3 CommunityAI ) acc: 55.0; ap: 69.2; r_acc: 99.6; f_acc: 9.8 +2025-05-13 07:23:37,976 (4 StyleGAN-XL ) acc: 81.9; ap: 84.3; r_acc: 73.3; f_acc: 90.4 +2025-05-13 07:25:22,288 (5 Midjourney ) acc: 57.0; ap: 58.2; r_acc: 39.1; f_acc: 75.6 +2025-05-13 07:27:01,316 (6 FLUX1-dev ) acc: 81.6; ap: 88.4; r_acc: 73.3; f_acc: 89.9 +2025-05-13 07:28:25,339 (7 E4S ) acc: 31.1; ap: 34.7; r_acc: 61.4; f_acc: 0.6 +2025-05-13 07:30:18,574 (8 Imagen3 ) acc: 74.3; ap: 82.4; r_acc: 74.0; f_acc: 74.6 +2025-05-13 07:31:28,441 (9 BLIP ) acc: 96.1; ap: 99.9; r_acc: 92.2; f_acc: 99.9 +2025-05-13 07:33:18,565 (10 SDXL ) acc: 86.6; ap: 95.5; r_acc: 75.5; f_acc: 97.7 +2025-05-13 07:35:12,888 (11 DALLE-3 ) acc: 61.4; ap: 60.1; r_acc: 73.1; f_acc: 49.5 +2025-05-13 07:36:22,453 (12 GLIDE ) acc: 71.8; ap: 74.0; r_acc: 79.1; f_acc: 64.5 +2025-05-13 07:37:39,843 (13 InSwap ) acc: 41.0; ap: 42.7; r_acc: 79.8; f_acc: 0.6 +2025-05-13 07:38:51,710 (14 FaceSwap ) acc: 42.6; ap: 44.1; r_acc: 81.0; f_acc: 2.6 +2025-05-13 07:40:58,246 (15 StyleSwim ) acc: 82.3; ap: 89.4; r_acc: 73.7; f_acc: 91.0 +2025-05-13 07:41:58,364 (16 ProGAN ) acc: 99.5; ap: 100.0; r_acc: 99.4; f_acc: 99.5 +2025-05-13 07:45:48,749 (17 BlendFace ) acc: 29.3; ap: 34.3; r_acc: 58.0; f_acc: 0.3 +2025-05-13 07:50:45,851 (18 PhotoMaker ) acc: 71.2; ap: 69.7; r_acc: 72.9; f_acc: 69.5 +2025-05-13 08:06:46,862 (19 SD3 ) acc: 79.9; ap: 85.6; r_acc: 75.5; f_acc: 84.3 +2025-05-13 08:17:21,875 (20 Infinite-ID ) acc: 78.1; ap: 74.5; r_acc: 74.5; f_acc: 81.6 +2025-05-13 08:18:29,713 (21 WFIR ) acc: 57.4; ap: 49.5; r_acc: 45.7; f_acc: 70.2 +2025-05-13 08:21:54,877 (22 SimSwap ) acc: 40.3; ap: 42.0; r_acc: 79.8; f_acc: 0.4 +2025-05-13 08:28:59,047 (23 InstantID ) acc: 82.7; ap: 88.1; r_acc: 74.1; f_acc: 91.3 +2025-05-13 08:32:57,131 (24 StyleGAN3 ) acc: 85.9; ap: 91.5; r_acc: 76.7; f_acc: 95.2 +2025-05-13 08:32:57,131 (25 Mean ) acc: 66.9; ap: 70.2; r_acc: 74.4; f_acc: 59.4 +2025-05-13 08:32:57,131 ************************* +2025-05-13 11:27:51,368 Model_path /data/ziqiang/yjz/code/FreqNet-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-rj2025_05_10_09_49_38/model_epoch_40.pth +2025-05-13 11:29:14,087 AIGIBench +2025-05-13 11:29:14,087 2025-05-13 11:29:14 +2025-05-13 11:30:39,141 (0 R3GAN ) acc: 70.3; ap: 74.4; r_acc: 75.6; f_acc: 64.9 +2025-05-13 11:32:45,651 (1 IP-Adapter ) acc: 76.0; ap: 79.2; r_acc: 75.7; f_acc: 76.4 +2025-05-13 11:34:54,014 (2 SocialRF ) acc: 52.9; ap: 53.8; r_acc: 75.1; f_acc: 29.7 +2025-05-13 11:36:44,693 (3 CommunityAI ) acc: 53.7; ap: 69.7; r_acc: 99.8; f_acc: 6.8 +2025-05-13 11:38:08,424 (4 StyleGAN-XL ) acc: 80.0; ap: 82.3; r_acc: 75.9; f_acc: 84.2 +2025-05-13 11:39:11,529 (5 Midjourney ) acc: 51.6; ap: 51.0; r_acc: 47.9; f_acc: 55.5 +2025-05-13 11:40:34,730 (6 FLUX1-dev ) acc: 73.5; ap: 74.6; r_acc: 76.3; f_acc: 70.7 +2025-05-13 11:41:58,687 (7 E4S ) acc: 33.6; ap: 35.1; r_acc: 65.4; f_acc: 1.5 +2025-05-13 11:43:21,617 (8 Imagen3 ) acc: 62.2; ap: 65.7; r_acc: 76.3; f_acc: 48.0 +2025-05-13 11:44:53,472 (9 BLIP ) acc: 95.4; ap: 99.7; r_acc: 90.9; f_acc: 99.9 +2025-05-13 11:46:35,163 (10 SDXL ) acc: 79.0; ap: 80.2; r_acc: 76.8; f_acc: 81.3 +2025-05-13 11:48:11,220 (11 DALLE-3 ) acc: 64.6; ap: 67.6; r_acc: 74.7; f_acc: 54.3 +2025-05-13 11:49:53,837 (12 GLIDE ) acc: 59.9; ap: 64.3; r_acc: 80.2; f_acc: 39.4 +2025-05-13 11:51:16,133 (13 InSwap ) acc: 42.2; ap: 45.0; r_acc: 80.7; f_acc: 2.3 +2025-05-13 11:52:41,702 (14 FaceSwap ) acc: 43.5; ap: 45.0; r_acc: 81.1; f_acc: 4.4 +2025-05-13 11:54:24,644 (15 StyleSwim ) acc: 82.4; ap: 89.3; r_acc: 75.6; f_acc: 89.4 +2025-05-13 11:55:39,098 (16 ProGAN ) acc: 99.3; ap: 100.0; r_acc: 99.6; f_acc: 99.0 +2025-05-13 11:57:26,233 (17 BlendFace ) acc: 33.2; ap: 36.4; r_acc: 63.8; f_acc: 2.4 +2025-05-13 12:00:09,223 (18 PhotoMaker ) acc: 72.2; ap: 79.1; r_acc: 76.1; f_acc: 68.3 +2025-05-13 12:03:08,734 (19 SD3 ) acc: 76.2; ap: 78.5; r_acc: 76.8; f_acc: 75.5 +2025-05-13 12:06:46,220 (20 Infinite-ID ) acc: 66.2; ap: 70.0; r_acc: 75.7; f_acc: 56.6 +2025-05-13 12:07:16,804 (21 WFIR ) acc: 52.8; ap: 52.0; r_acc: 54.3; f_acc: 51.2 +2025-05-13 12:08:59,169 (22 SimSwap ) acc: 42.8; ap: 45.9; r_acc: 81.5; f_acc: 3.7 +2025-05-13 12:10:53,540 (23 InstantID ) acc: 69.2; ap: 75.7; r_acc: 76.8; f_acc: 61.5 +2025-05-13 12:14:21,196 (24 StyleGAN3 ) acc: 73.0; ap: 78.1; r_acc: 77.0; f_acc: 69.0 +2025-05-13 12:14:21,196 (25 Mean ) acc: 64.2; ap: 67.7; r_acc: 76.4; f_acc: 51.8 +2025-05-13 12:14:21,196 ************************* +2025-05-14 10:20:06,295 Model_path /data/ziqiang/yjz/code/FreqNet-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-rjm2025_05_12_09_18_21/model_epoch_40.pth +2025-05-14 10:20:06,542 AIGIBench +2025-05-14 10:20:06,542 2025-05-14 10:20:06 +2025-05-14 10:21:16,213 (0 R3GAN ) acc: 72.6; ap: 73.7; r_acc: 60.9; f_acc: 84.3 +2025-05-14 10:22:24,499 (1 IP-Adapter ) acc: 75.8; ap: 76.8; r_acc: 61.6; f_acc: 90.0 +2025-05-14 10:24:31,977 (2 SocialRF ) acc: 50.9; ap: 50.6; r_acc: 57.3; f_acc: 44.2 +2025-05-14 10:26:00,373 (3 CommunityAI ) acc: 56.1; ap: 73.0; r_acc: 99.4; f_acc: 12.2 +2025-05-14 10:27:23,189 (4 StyleGAN-XL ) acc: 78.1; ap: 79.8; r_acc: 61.4; f_acc: 94.9 +2025-05-14 10:28:31,948 (5 Midjourney ) acc: 50.5; ap: 48.6; r_acc: 28.5; f_acc: 73.3 +2025-05-14 10:29:41,004 (6 FLUX1-dev ) acc: 71.1; ap: 65.7; r_acc: 61.5; f_acc: 80.7 +2025-05-14 10:30:48,840 (7 E4S ) acc: 25.6; ap: 33.8; r_acc: 48.1; f_acc: 2.8 +2025-05-14 10:31:57,854 (8 Imagen3 ) acc: 65.6; ap: 62.3; r_acc: 62.7; f_acc: 68.6 +2025-05-14 10:33:06,346 (9 BLIP ) acc: 90.3; ap: 99.1; r_acc: 80.6; f_acc: 100.0 +2025-05-14 10:34:15,009 (10 SDXL ) acc: 77.6; ap: 76.3; r_acc: 61.6; f_acc: 93.7 +2025-05-14 10:35:16,355 (11 DALLE-3 ) acc: 65.1; ap: 65.1; r_acc: 60.3; f_acc: 69.9 +2025-05-14 10:36:25,433 (12 GLIDE ) acc: 51.9; ap: 52.0; r_acc: 67.9; f_acc: 35.8 +2025-05-14 10:37:33,848 (13 InSwap ) acc: 36.5; ap: 40.2; r_acc: 66.8; f_acc: 4.9 +2025-05-14 10:38:42,007 (14 FaceSwap ) acc: 39.7; ap: 41.0; r_acc: 68.4; f_acc: 9.9 +2025-05-14 10:39:51,266 (15 StyleSwim ) acc: 78.3; ap: 86.0; r_acc: 61.0; f_acc: 95.8 +2025-05-14 10:40:50,158 (16 ProGAN ) acc: 98.9; ap: 100.0; r_acc: 98.9; f_acc: 98.9 +2025-05-14 10:42:33,167 (17 BlendFace ) acc: 26.1; ap: 34.7; r_acc: 45.9; f_acc: 6.1 +2025-05-14 10:44:30,311 (18 PhotoMaker ) acc: 73.0; ap: 77.0; r_acc: 62.3; f_acc: 83.9 +2025-05-14 10:46:20,419 (19 SD3 ) acc: 74.5; ap: 72.5; r_acc: 61.6; f_acc: 87.5 +2025-05-14 10:47:37,659 (20 Infinite-ID ) acc: 70.5; ap: 73.3; r_acc: 60.8; f_acc: 80.3 +2025-05-14 10:47:56,638 (21 WFIR ) acc: 52.4; ap: 50.1; r_acc: 31.2; f_acc: 75.4 +2025-05-14 10:49:04,796 (22 SimSwap ) acc: 38.2; ap: 42.4; r_acc: 68.2; f_acc: 8.0 +2025-05-14 10:50:19,833 (23 InstantID ) acc: 70.5; ap: 73.2; r_acc: 62.1; f_acc: 78.9 +2025-05-14 10:51:27,435 (24 StyleGAN3 ) acc: 71.7; ap: 72.3; r_acc: 61.8; f_acc: 81.6 +2025-05-14 10:51:27,435 (25 Mean ) acc: 62.4; ap: 64.8; r_acc: 62.4; f_acc: 62.5 +2025-05-14 10:51:27,435 ************************* diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/networks/__init__.py b/detector_codes/FreqNet-DeepfakeDetection-main/networks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/networks/base_model.py b/detector_codes/FreqNet-DeepfakeDetection-main/networks/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..1e1024d01e417a118ac7047d21a9ffa9f561c82a --- /dev/null +++ b/detector_codes/FreqNet-DeepfakeDetection-main/networks/base_model.py @@ -0,0 +1,91 @@ +# from pix2pix +import os +import torch +import torch.nn as nn +from torch.nn import init +from torch.optim import lr_scheduler + + +class BaseModel(nn.Module): + def __init__(self, opt): + super(BaseModel, self).__init__() + self.opt = opt + self.total_steps = 0 + self.isTrain = opt.isTrain + self.lr = opt.lr + self.save_dir = os.path.join(opt.checkpoints_dir, opt.name) + self.device = torch.device('cuda:{}'.format(opt.gpu_ids[0])) if opt.gpu_ids else torch.device('cpu') + + def save_networks(self, epoch): + save_filename = 'model_epoch_%s.pth' % epoch + save_path = os.path.join(self.save_dir, save_filename) + + # serialize model and optimizer to dict + # state_dict = { + # 'model': self.model.state_dict(), + # 'optimizer' : self.optimizer.state_dict(), + # 'total_steps' : self.total_steps, + # } + + torch.save(self.model.state_dict(), save_path) + print(f'Saving model {save_path}') + + # load models from the disk + def load_networks(self, epoch): + load_filename = 'model_epoch_%s.pth' % epoch + load_path = os.path.join(self.save_dir, load_filename) + + print('loading the model from %s' % load_path) + # if you are using PyTorch newer than 0.4 (e.g., built from + # GitHub source), you can remove str() on self.device + state_dict = torch.load(load_path, map_location=self.device) + if hasattr(state_dict, '_metadata'): + del state_dict._metadata + + self.model.load_state_dict(state_dict['model']) + self.total_steps = state_dict['total_steps'] + + if self.isTrain and not self.opt.new_optim: + self.optimizer.load_state_dict(state_dict['optimizer']) + ### move optimizer state to GPU + for state in self.optimizer.state.values(): + for k, v in state.items(): + if torch.is_tensor(v): + state[k] = v.to(self.device) + + for g in self.optimizer.param_groups: + g['lr'] = self.opt.lr + + def eval(self): + self.model.eval() + + def train(self): + self.model.train() + + def test(self): + with torch.no_grad(): + self.forward() + + +def init_weights(net, init_type='normal', gain=0.02): + def init_func(m): + classname = m.__class__.__name__ + if hasattr(m, 'weight') and (classname.find('Conv') != -1 or classname.find('Linear') != -1): + if init_type == 'normal': + init.normal_(m.weight.data, 0.0, gain) + elif init_type == 'xavier': + init.xavier_normal_(m.weight.data, gain=gain) + elif init_type == 'kaiming': + init.kaiming_normal_(m.weight.data, a=0, mode='fan_in') + elif init_type == 'orthogonal': + init.orthogonal_(m.weight.data, gain=gain) + else: + raise NotImplementedError('initialization method [%s] is not implemented' % init_type) + if hasattr(m, 'bias') and m.bias is not None: + init.constant_(m.bias.data, 0.0) + elif classname.find('BatchNorm2d') != -1: + init.normal_(m.weight.data, 1.0, gain) + init.constant_(m.bias.data, 0.0) + + print('initialize network with %s' % init_type) + net.apply(init_func) diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/networks/freqnet.py b/detector_codes/FreqNet-DeepfakeDetection-main/networks/freqnet.py new file mode 100644 index 0000000000000000000000000000000000000000..1fb5d6ed101e93f66c0eee1a6bae7b60fd7747e1 --- /dev/null +++ b/detector_codes/FreqNet-DeepfakeDetection-main/networks/freqnet.py @@ -0,0 +1,264 @@ +import torch.nn as nn +from torch.nn import functional as F +import torch + +__all__ = ['FreqNet, freqnet'] + + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=1, bias=False) + + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(BasicBlock, self).__init__() + self.conv1 = conv3x3(inplanes, planes, stride) + self.bn1 = nn.BatchNorm2d(planes) + self.relu = nn.ReLU(inplace=True) + self.conv2 = conv3x3(planes, planes) + self.bn2 = nn.BatchNorm2d(planes) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(Bottleneck, self).__init__() + self.conv1 = conv1x1(inplanes, planes) + self.bn1 = nn.BatchNorm2d(planes) + self.conv2 = conv3x3(planes, planes, stride) + self.bn2 = nn.BatchNorm2d(planes) + self.conv3 = conv1x1(planes, planes * self.expansion) + self.bn3 = nn.BatchNorm2d(planes * self.expansion) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class FreqNet(nn.Module): + def __init__(self, block=Bottleneck, layers=[3, 4], num_classes=1, zero_init_residual=False): + super(FreqNet, self).__init__() + + self.weight1 = nn.Parameter(torch.randn((64, 3, 1, 1)).cuda()) + self.bias1 = nn.Parameter(torch.randn((64,)).cuda()) + self.realconv1 = conv1x1(64, 64, stride=1) + self.imagconv1 = conv1x1(64, 64, stride=1) + + self.weight2 = nn.Parameter(torch.randn((64, 64, 1, 1)).cuda()) + self.bias2 = nn.Parameter(torch.randn((64,)).cuda()) + self.realconv2 = conv1x1(64, 64, stride=1) + self.imagconv2 = conv1x1(64, 64, stride=1) + + self.weight3 = nn.Parameter(torch.randn((256, 256, 1, 1)).cuda()) + self.bias3 = nn.Parameter(torch.randn((256,)).cuda()) + self.realconv3 = conv1x1(256, 256, stride=1) + self.imagconv3 = conv1x1(256, 256, stride=1) + + self.weight4 = nn.Parameter(torch.randn((256, 256, 1, 1)).cuda()) + self.bias4 = nn.Parameter(torch.randn((256,)).cuda()) + self.realconv4 = conv1x1(256, 256, stride=1) + self.imagconv4 = conv1x1(256, 256, stride=1) + + # ResNet 结构 + self.inplanes = 64 + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0]) # layer1 of resnet50 + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) # layer2 of resnet50 + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.fc1 = nn.Linear(512, 1) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, nn.BatchNorm2d): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + + # Zero-initialize the last BN in each residual branch, + # so that the residual branch starts with zeros, and each residual block behaves like an identity. + # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + nn.init.constant_(m.bn3.weight, 0) + elif isinstance(m, BasicBlock): + nn.init.constant_(m.bn2.weight, 0) + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + conv1x1(self.inplanes, planes * block.expansion, stride), + nn.BatchNorm2d(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + # 多个残差网络 + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes)) + return nn.Sequential(*layers) + + def hfreqWH(self, x, scale): + assert scale>2 + x = torch.fft.fft2(x, norm="ortho")#,norm='forward' + x = torch.fft.fftshift(x, dim=[-2, -1]) + b, c, h, w = x.shape + x[:, :, h // 2 - h // scale: h // 2 + h // scale, w // 2 - w // scale: w // 2 + w // scale] = 0.0 + x = torch.fft.ifftshift(x, dim=[-2, -1]) + x = torch.fft.ifft2(x, norm="ortho") + x = torch.real(x) + x = F.relu(x, inplace=True) + # print(f'output shape: {x.shape}, min: {x.min()}, max: {x.max()}, mean: {x.mean()}') + # print() + return x + + def hfreqC(self, x, scale): + assert scale>2 + # print(f'input shape: {x.shape}, min: {x.min()}, max: {x.max()}, mean: {x.mean()}') + x = torch.fft.fft(x, dim=1, norm="ortho")#,norm='forward' + x = torch.fft.fftshift(x, dim=1) + b,c,h,w = x.shape + + x[:,c//2-c//scale:c//2+c//scale,:,:] = 0.0 + + x = torch.fft.ifftshift(x, dim=1) + x = torch.fft.ifft(x, dim=1, norm="ortho") + x = torch.real(x) + x = F.relu(x, inplace=True) + + # print(f'output shape: {x.shape}, min: {x.min()}, max: {x.max()}, mean: {x.mean()}') + # print() + return x + + def forward(self, x): + # HFRI + x = self.hfreqWH(x, 4) + + x = F.conv2d(x, self.weight1, self.bias1, stride=1, padding=0) + x = F.relu(x, inplace=True) + + # HFRFC + x = self.hfreqC(x, 4) + + # FCL + x = torch.fft.fft2(x, norm="ortho")#,norm='forward' + x = torch.fft.fftshift(x, dim=[-2, -1]) + x = torch.complex(self.realconv1(x.real), self.imagconv1(x.imag)) + x = torch.fft.ifftshift(x, dim=[-2, -1]) + x = torch.fft.ifft2(x, norm="ortho") + x = torch.real(x) + x = F.relu(x, inplace=True) + + # HFRFS + x = self.hfreqWH(x, 4) + x = F.conv2d(x, self.weight2, self.bias2, stride=2, padding=0) + x = F.relu(x, inplace=True) + + # HFRFC + x = self.hfreqC(x, 4) + + # FCL + x = torch.fft.fft2(x, norm="ortho")#,norm='forward' + x = torch.fft.fftshift(x, dim=[-2, -1]) + x = torch.complex(self.realconv2(x.real), self.imagconv2(x.imag)) + x = torch.fft.ifftshift(x, dim=[-2, -1]) + x = torch.fft.ifft2(x, norm="ortho") + x = torch.real(x) + x = F.relu(x, inplace=True) + + x = self.maxpool(x) + x = self.layer1(x) + + # HFRFS + x = self.hfreqWH(x, 4) + x = F.conv2d(x, self.weight3, self.bias3, stride=1, padding=0) + x = F.relu(x, inplace=True) + + # FCL + x = torch.fft.fft2(x, norm="ortho")#,norm='forward' + x = torch.fft.fftshift(x, dim=[-2, -1]) + x = torch.complex(self.realconv3(x.real), self.imagconv3(x.imag)) + x = torch.fft.ifftshift(x, dim=[-2, -1]) + x = torch.fft.ifft2(x, norm="ortho") + x = torch.real(x) + x = F.relu(x, inplace=True) + + # HFRFS + x = self.hfreqWH(x, 4) + x = F.conv2d(x, self.weight4, self.bias4, stride=2, padding=0) + x = F.relu(x, inplace=True) + + # FCL + x = torch.fft.fft2(x, norm="ortho")#,norm='forward' + x = torch.fft.fftshift(x, dim=[-2, -1]) + x = torch.complex(self.realconv4(x.real), self.imagconv4(x.imag)) + x = torch.fft.ifftshift(x, dim=[-2, -1]) + x = torch.fft.ifft2(x, norm="ortho") + x = torch.real(x) + x = F.relu(x, inplace=True) + + x = self.layer2(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc1(x) + return x + + +def freqnet(**kwargs): + + return FreqNet() + diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/networks/trainer.py b/detector_codes/FreqNet-DeepfakeDetection-main/networks/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..98b39432d13598214676fe0bcedad606a671cff9 --- /dev/null +++ b/detector_codes/FreqNet-DeepfakeDetection-main/networks/trainer.py @@ -0,0 +1,60 @@ +import functools +import torch +import torch.nn as nn +from networks.freqnet import freqnet +from networks.base_model import BaseModel, init_weights + + +class Trainer(BaseModel): + def name(self): + return 'Trainer' + + def __init__(self, opt): + super(Trainer, self).__init__(opt) + + self.model = freqnet(num_classes=1) + + if self.isTrain: + self.loss_fn = nn.BCEWithLogitsLoss() + # initialize optimizers + if opt.optim == 'adam': + self.optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, betas=(opt.beta1, 0.999)) + elif opt.optim == 'sgd': + self.optimizer = torch.optim.SGD(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, momentum=0.0, weight_decay=0) + else: + raise ValueError("optim should be [adam, sgd]") + + if not self.isTrain or opt.continue_train: + self.load_networks(opt.epoch) + self.model.to(opt.gpu_ids[0]) + + def adjust_learning_rate(self, min_lr=1e-6): + for param_group in self.optimizer.param_groups: + param_group['lr'] *= 0.9 + if param_group['lr'] < min_lr: + return False + self.lr = param_group['lr'] + print('*' * 25) + print(f'Changing lr from {param_group["lr"] / 0.9} to {param_group["lr"]}') + print('*' * 25) + return True + + def set_input(self, input): + self.input = input[0].to(self.device) + self.label = input[1].to(self.device).float() + + def forward(self): + self.output = self.model(self.input) + return self.output + + def get_loss(self): + return self.loss_fn(self.output.squeeze(1), self.label) + + def optimize_parameters(self): + self.forward() + self.loss = self.loss_fn(self.output.squeeze(1), self.label) + self.optimizer.zero_grad() + self.loss.backward() + self.optimizer.step() diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/options/__init__.py b/detector_codes/FreqNet-DeepfakeDetection-main/options/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/options/base_options.py b/detector_codes/FreqNet-DeepfakeDetection-main/options/base_options.py new file mode 100644 index 0000000000000000000000000000000000000000..5fec0a29f35c63a2cd33bd04fb130bceff7392ae --- /dev/null +++ b/detector_codes/FreqNet-DeepfakeDetection-main/options/base_options.py @@ -0,0 +1,116 @@ +import argparse +import os +import util +import torch +import time + + +class BaseOptions(): + def __init__(self): + self.initialized = False + + def initialize(self, parser): + parser.add_argument('--mode', default='binary') + parser.add_argument('--arch', type=str, default='resnet50') + + # data augmentation + parser.add_argument('--rz_interp', default='bilinear') + parser.add_argument('--blur_prob', type=float, default=0.5) + parser.add_argument('--blur_sig', default='0.0,3.0') + parser.add_argument('--jpg_prob', type=float, default=0.5) + parser.add_argument('--jpg_method', default='cv2') + parser.add_argument('--jpg_qual', default='30,100') + + parser.add_argument('--dataroot', default='./dataset/', help='path to images (should have subfolders trainA, trainB, valA, valB, etc)') + parser.add_argument('--classes', default='', help='image classes to train on') + + parser.add_argument('--class_bal', action='store_true') + parser.add_argument('--batch_size', type=int, default=128, help='input batch size') + parser.add_argument('--loadSize', type=int, default=256, help='scale images to this size') + parser.add_argument('--cropSize', type=int, default=224, help='then crop to this size') + parser.add_argument('--drop_last', type=bool, default=True, help='drop the last batchsize') + parser.add_argument('--gpu_ids', type=str, default='1', help='gpu ids: e.g. 0 0,1,2, 0,2. use -1 for CPU') + parser.add_argument('--name', type=str, default='experiment_name', help='name of the experiment. It decides where to store samples and models') + parser.add_argument('--num_threads', default=8, type=int, help='# threads for loading data') + parser.add_argument('--checkpoints_dir', type=str, default='./checkpoints', help='models are saved here') + parser.add_argument('--serial_batches', action='store_true', help='if true, takes images in order to make batches, otherwise takes them randomly') + parser.add_argument('--resize_or_crop', type=str, default='scale_and_crop', help='scaling and cropping of images at load time [resize_and_crop|crop|scale_width|scale_width_and_crop|none]') + parser.add_argument('--no_flip', action='store_true', help='if specified, do not flip the images for data augmentation') + parser.add_argument('--init_type', type=str, default='normal', help='network initialization [normal|xavier|kaiming|orthogonal]') + parser.add_argument('--init_gain', type=float, default=0.02, help='scaling factor for normal, xavier and orthogonal.') + parser.add_argument('--suffix', default='', type=str, help='customized suffix: opt.name = opt.name + suffix: e.g., {model}_{netG}_size{loadSize}') + parser.add_argument('--delr_freq', type=int, default=20, help='frequency of changing lr') + + self.initialized = True + return parser + + def gather_options(self): + # initialize parser with basic options + if not self.initialized: + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser = self.initialize(parser) + + # get the basic options + opt, _ = parser.parse_known_args() + self.parser = parser + + return opt # parser.parse_args() + + def print_options(self, opt): + message = '' + message += '----------------- Options ---------------\n' + for k, v in sorted(vars(opt).items()): + comment = '' + default = self.parser.get_default(k) + if v != default: + comment = '\t[default: %s]' % str(default) + message += '{:>25}: {:<30}{}\n'.format(str(k), str(v), comment) + message += '----------------- End -------------------' + print(message) + + # save to the disk + + expr_dir = os.path.join(opt.checkpoints_dir, opt.name) + util.mkdirs(expr_dir) + file_name = os.path.join(expr_dir, 'opt.txt') + with open(file_name, 'wt') as opt_file: + opt_file.write(message) + opt_file.write('\n') + + def parse(self, print_options=True): + + opt = self.gather_options() + opt.isTrain = self.isTrain # train or test + opt.name = opt.name + time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()) + # process opt.suffix + if opt.suffix: + suffix = ('_' + opt.suffix.format(**vars(opt))) if opt.suffix != '' else '' + opt.name = opt.name + suffix + + if print_options: + self.print_options(opt) + + # set gpu ids + str_ids = opt.gpu_ids.split(',') + opt.gpu_ids = [] + for str_id in str_ids: + id = int(str_id) + if id >= 0: + opt.gpu_ids.append(id) + if len(opt.gpu_ids) > 0: + torch.cuda.set_device(opt.gpu_ids[0]) + + # additional + opt.classes = opt.classes.split(',') + opt.rz_interp = opt.rz_interp.split(',') + opt.blur_sig = [float(s) for s in opt.blur_sig.split(',')] + opt.jpg_method = opt.jpg_method.split(',') + opt.jpg_qual = [int(s) for s in opt.jpg_qual.split(',')] + if len(opt.jpg_qual) == 2: + opt.jpg_qual = list(range(opt.jpg_qual[0], opt.jpg_qual[1] + 1)) + elif len(opt.jpg_qual) > 2: + raise ValueError("Shouldn't have more than 2 values for --jpg_qual.") + + self.opt = opt + return self.opt diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/options/test_options.py b/detector_codes/FreqNet-DeepfakeDetection-main/options/test_options.py new file mode 100644 index 0000000000000000000000000000000000000000..64d5c9cb28c4ad6e3c17cff9a2e6b668a5be62df --- /dev/null +++ b/detector_codes/FreqNet-DeepfakeDetection-main/options/test_options.py @@ -0,0 +1,19 @@ +from .base_options import BaseOptions + + +class TestOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--model_path') + parser.add_argument('--no_resize', action='store_true') + parser.add_argument('--no_crop', action='store_true') + parser.add_argument('--eval', action='store_true', help='use eval mode during test time.') + + parser.add_argument("--kd", default=True) + parser.add_argument("--kd_weight", default=1, type=int) + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--lr', type=float, default=0.00002, help='initial learning rate for adam') + parser.add_argument('--niter', type=int, default=0, help='# of iter at starting learning rate') + + self.isTrain = False + return parser diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/options/train_options.py b/detector_codes/FreqNet-DeepfakeDetection-main/options/train_options.py new file mode 100644 index 0000000000000000000000000000000000000000..4728077fd97cd7dd74fcdb1af6e09c5e66042a13 --- /dev/null +++ b/detector_codes/FreqNet-DeepfakeDetection-main/options/train_options.py @@ -0,0 +1,41 @@ +from .base_options import BaseOptions + + +class TrainOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--data_aug', action='store_true', help='if specified, perform additional data augmentation (photometric, blurring, jpegging)') + parser.add_argument('--optim', type=str, default='adam', help='optim to use [sgd, adam]') + parser.add_argument('--new_optim', action='store_true', help='new optimizer instead of loading the optim state') + parser.add_argument('--loss_freq', type=int, default=400, help='frequency of showing loss on tensorboard') + parser.add_argument('--save_latest_freq', type=int, default=101, help='frequency of saving the latest results') + parser.add_argument('--save_epoch_freq', type=int, default=5, help='frequency of saving checkpoints at the end of epochs') + parser.add_argument('--continue_train', action='store_true', help='continue training: load the latest model') + parser.add_argument('--epoch_count', type=int, default=10, help='the starting epoch count, we save the model by , +, ...') + parser.add_argument('--last_epoch', type=int, default=-1, help='starting epoch count for scheduler intialization') + parser.add_argument('--train_split', type=str, default='train', help='train, val, test, etc') + parser.add_argument('--val_split', type=str, default='val', help='train, val, test, etc') + parser.add_argument('--niter', type=int, default=101, help='total epoches') + parser.add_argument('--beta1', type=float, default=0.9, help='momentum term of adam') + parser.add_argument('--lr', type=float, default=0.0001, help='initial learning rate for adam') + + parser.add_argument("--kd", default=True, type=str2bool) + parser.add_argument("--kd_weight", default=1, type=int) + # parser.add_argument('--model_path') + # parser.add_argument('--no_resize', action='store_true') + # parser.add_argument('--no_crop', action='store_true') + + self.isTrain = True + return parser + + +def str2bool(v: str) -> bool: + if isinstance(v, bool): + return v + elif v.lower() in ("true", "yes", "on", "y", "t", "1"): + return True + elif v.lower() in ("false", "no", "off", "n", "f", "0"): + return False + else: + return bool(v) diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/requirements.txt b/detector_codes/FreqNet-DeepfakeDetection-main/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..7d44e7e50e2a95ac4f285467d8c61de605a07c79 --- /dev/null +++ b/detector_codes/FreqNet-DeepfakeDetection-main/requirements.txt @@ -0,0 +1,8 @@ +scipy +scikit-learn +numpy +opencv_python +Pillow +torch>=1.2.0 +torchvision +gdown==4.7.1 diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/test.py b/detector_codes/FreqNet-DeepfakeDetection-main/test.py new file mode 100644 index 0000000000000000000000000000000000000000..c95b2d3f4e88c3f242a62f72bb6b8bcadfe7220b --- /dev/null +++ b/detector_codes/FreqNet-DeepfakeDetection-main/test.py @@ -0,0 +1,111 @@ +import logging +import os +import random +import time + +import numpy as np +import torch +from data import create_dataloader +from networks.freqnet import freqnet +from options.test_options import TestOptions +from util import printSet +from validate import validate + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if you are using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +seed_torch(100) + + +DetectionTests = { + # 'AIGIBench': { 'dataroot': '/data/ziqiang/Benchmark', + # 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + # 'no_crop': True, + # }, + 'jpeg': { + 'dataroot': '/data/ziqiang/jpeg', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'noise': { + 'dataroot': '/data/ziqiang/noise', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'sample': { + 'dataroot': '/data/ziqiang/sample', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, +} + +# Set up logging +logging.basicConfig( + filename='log_test.log', level=logging.INFO, format='%(asctime)s %(message)s' +) +logger = logging.getLogger() + +opt = TestOptions().parse(print_options=False) +log_msg = f'Model_path {opt.model_path}' +print(log_msg) +logger.info(log_msg) + +# Get model +model = freqnet(num_classes=1) +model.load_state_dict(torch.load(opt.model_path), strict=True) +model.cuda() +model.eval() + +for testSet in DetectionTests.keys(): + dataroot = DetectionTests[testSet]['dataroot'] + printSet(testSet) + logger.info(testSet) + + accs = [] + aps = [] + r_accs = [] + f_accs = [] + current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + print(current_time) + logger.info(current_time) + + for v_id, val in enumerate(os.listdir(dataroot)): + opt.dataroot = '{}/{}'.format(dataroot, val) + opt.classes = '' # os.listdir(opt.dataroot) if multiclass[v_id] else [''] + opt.no_resize = DetectionTests[testSet]['no_resize'] + opt.no_crop = DetectionTests[testSet]['no_crop'] + dataloader = create_dataloader(opt) + acc, ap, r_acc, f_acc = validate(model, dataloader) + accs.append(acc) + aps.append(ap) + r_accs.append(r_acc) + f_accs.append(f_acc) + log_msg = ( + '({} {:12}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id, val, acc * 100, ap * 100, r_acc * 100, f_acc * 100 + ) + ) + print(log_msg) + logger.info(log_msg) + + mean_acc = np.array(accs).mean() * 100 + mean_ap = np.array(aps).mean() * 100 + mean_r_acc = np.array(r_accs).mean() * 100 + mean_f_acc = np.array(f_accs).mean() * 100 + log_msg = '({} {:10}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id + 1, 'Mean', mean_acc, mean_ap, mean_r_acc, mean_f_acc + ) + print(log_msg) + logger.info(log_msg) + print('*' * 25) + logger.info('*' * 25) diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/train.py b/detector_codes/FreqNet-DeepfakeDetection-main/train.py new file mode 100644 index 0000000000000000000000000000000000000000..0aec098dba943dd5fd40a769fcf9923aaaddd4c6 --- /dev/null +++ b/detector_codes/FreqNet-DeepfakeDetection-main/train.py @@ -0,0 +1,127 @@ +import logging +import os +import random +import sys +import time + +import numpy as np +import torch +from data import create_dataloader +from networks.trainer import Trainer +from options.train_options import TrainOptions +from tensorboardX import SummaryWriter +from util import EarlyStopping, Logger +from validate import validate + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +def get_val_opt(): + val_opt = TrainOptions().parse(print_options=False) + val_opt.isTrain = False + val_opt.no_resize = False + val_opt.no_crop = False + val_opt.serial_batches = True + return val_opt + + +if __name__ == '__main__': + opt = TrainOptions().parse() + seed_torch(100) + opt.dataroot = f'{opt.dataroot}/{opt.train_split}/' + Logger(os.path.join(opt.checkpoints_dir, opt.name, 'logging.log')) + print(' '.join(list(sys.argv))) + val_opt = get_val_opt() + val_opt.dataroot = f'{val_opt.dataroot}/{val_opt.val_split}/' + + data_loader = create_dataloader(opt) + val_loader = create_dataloader(val_opt) + + train_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'train')) + val_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'val')) + + model = Trainer(opt) + model.train() + + early_stopping = EarlyStopping( + patience=opt.earlystop_epoch, delta=-0.001, verbose=True + ) + + # Configure logger + logging.basicConfig( + level=logging.INFO, # Set logging level + format='%(asctime)s - %(levelname)s - %(message)s', # Log format + datefmt='%Y-%m-%d %H:%M:%S', # Date format without milliseconds + handlers=[ + logging.FileHandler('log.log', mode='w'), # Log file output + logging.StreamHandler(), + ], + ) # Console output + + logger = logging.getLogger(__name__) + + print(f'cwd: {os.getcwd()}') + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} Length of data loader: {len(data_loader)}' + ) + logger.info(f'Length of data loader: {len(data_loader)}') + + for epoch in range(opt.niter): + for i, data in enumerate(data_loader): + model.total_steps += 1 + + # Move data to cuda + model.set_input(data) + # Train + model.optimize_parameters() + + if model.total_steps % opt.loss_freq == 0: + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}' + ) + logger.info( + f'Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}' + ) + train_writer.add_scalar('loss', model.loss, model.total_steps) + + if epoch % opt.save_epoch_freq == 0 and epoch != 0: + # Optionally save model at each epoch + print(f'saving the model at the end of epoch {epoch}') + logger.info(f'saving the model at the end of epoch {epoch}') + model.save_networks(epoch) + + if epoch % 10 == 0 and epoch != 0: + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} changing lr at the end of epoch {epoch}, iters {model.total_steps}' + ) + logger.info( + f'changing lr at the end of epoch {epoch}, iters {model.total_steps}' + ) + model.adjust_learning_rate() + + # Validation + model.eval() + acc, ap, r_acc, f_acc = validate(model.model, val_loader) + val_writer.add_scalar('accuracy', acc, model.total_steps) + val_writer.add_scalar('ap', ap, model.total_steps) + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} (Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}' + ) + logger.info( + f'(Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}' + ) + + model.train() + + model.eval() + model.save_networks('last') diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/util.py b/detector_codes/FreqNet-DeepfakeDetection-main/util.py new file mode 100644 index 0000000000000000000000000000000000000000..b95d4808930db595c349671fd62d3ddb0cc214e8 --- /dev/null +++ b/detector_codes/FreqNet-DeepfakeDetection-main/util.py @@ -0,0 +1,99 @@ +import os +import sys + +import numpy as np +import torch + + +def mkdirs(paths): + if isinstance(paths, list) and not isinstance(paths, str): + for path in paths: + mkdir(path) + else: + mkdir(paths) + + +def mkdir(path): + if not os.path.exists(path): + os.makedirs(path) + + +def unnormalize(tens, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]): + # assume tensor of shape NxCxHxW + return ( + tens * torch.Tensor(std)[None, :, None, None] + + torch.Tensor(mean)[None, :, None, None] + ) + + +# 重定向 sys.stdout 输出到一个指定的文件,同时保持在终端显示 +class Logger(object): + """Log stdout messages.""" + + def __init__(self, outfile): + self.terminal = sys.stdout # 保存当前标准输出流 + self.log = open(outfile, 'a') # 打开指定的日志文件 outfile,以追加模式 (a) 打开 + # 将标准输出流重定向到 Logger 实例,这样所有的 print 语句和标准输出内容都会通过 Logger 的 write 方法 + sys.stdout = self + + def write(self, message): + self.terminal.write(message) # 将消息写到终端(标准输出) + self.log.write(message) # 将消息写到日志文件 + + def flush(self): + self.terminal.flush() # 刷新终端的输出缓冲区,确保所有输出都及时显示 + + +class EarlyStopping: + """Early stops the training if validation loss doesn't improve after a given patience.""" + + def __init__(self, patience=7, verbose=False, delta=0): + """ + Args: + patience (int): How long to wait after last time validation loss improved. + Default: 7 + verbose (bool): If True, prints a message for each validation loss improvement. + Default: False + delta (float): Minimum change in the monitored quantity to qualify as an improvement. + Default: 0 + """ + self.patience = patience + self.verbose = verbose + self.counter = 0 + self.best_score = None + self.early_stop = False + self.val_loss_min = np.Inf + self.delta = delta + + def __call__(self, val_loss, model): + + score = -val_loss + + if self.best_score is None: + self.best_score = score + self.save_checkpoint(val_loss, model) + elif score < self.best_score + self.delta: + self.counter += 1 + print(f'EarlyStopping counter: {self.counter} out of {self.patience}') + if self.counter >= self.patience: + self.early_stop = True + else: + self.best_score = score + self.save_checkpoint(val_loss, model) + self.counter = 0 + + def save_checkpoint(self, val_loss, model): + """Saves model when validation loss decrease.""" + if self.verbose: + print( + f'Validation loss decreased ({self.val_loss_min:.6f} --> {val_loss:.6f}). Saving model ...' + ) + self.val_loss_min = val_loss + + +def printSet(set_str): + set_str = str(set_str) + num = len(set_str) + print('=' * num * 3) + print(' ' * num + set_str) + print('=' * num * 3) diff --git a/detector_codes/FreqNet-DeepfakeDetection-main/validate.py b/detector_codes/FreqNet-DeepfakeDetection-main/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..9c8a9c64e7be2a0ce0119baca2fbca77a0be12dc --- /dev/null +++ b/detector_codes/FreqNet-DeepfakeDetection-main/validate.py @@ -0,0 +1,21 @@ +import numpy as np +import torch +from sklearn.metrics import accuracy_score, average_precision_score + + +def validate(model, val_loader): + # data_loader = create_dataloader(opt) + + with torch.no_grad(): + y_true, y_pred = [], [] + for img, label in val_loader: + in_tens = img.cuda() + y_pred.extend(model(in_tens).sigmoid().flatten().tolist()) + y_true.extend(label.flatten().tolist()) + + y_true, y_pred = np.array(y_true), np.array(y_pred) + r_acc = accuracy_score(y_true[y_true == 0], y_pred[y_true == 0] > 0.5) + f_acc = accuracy_score(y_true[y_true == 1], y_pred[y_true == 1] > 0.5) + acc = accuracy_score(y_true, y_pred > 0.5) + ap = average_precision_score(y_true, y_pred) + return acc, ap, r_acc, f_acc diff --git a/detector_codes/Gram-Net-main/data/__init__.py b/detector_codes/Gram-Net-main/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1f861263a4ac3d385446c9db7e7915f5d59870df --- /dev/null +++ b/detector_codes/Gram-Net-main/data/__init__.py @@ -0,0 +1,59 @@ +import torch +import numpy as np +from torch.utils.data.sampler import WeightedRandomSampler + +from .datasets import dataset_folder + +''' +def get_dataset(opt): + dset_lst = [] + for cls in opt.classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) +''' + +import os + + +def get_dataset(opt): + classes = os.listdir(opt.dataroot) if len(opt.classes) == 0 else opt.classes + if '0_real' not in classes or '1_fake' not in classes: + dset_lst = [] + for cls in classes: + # for dir in os.listdir(opt.dataroot): + # root = opt.dataroot + '/' + dir + '/' + cls + # dset = dataset_folder(opt, root) + # dset_lst.append(dset) + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) + return dataset_folder(opt, opt.dataroot) + + +def get_bal_sampler(dataset): + targets = [] + for d in dataset.datasets: + targets.extend(d.targets) + + ratio = np.bincount(targets) + w = 1. / torch.tensor(ratio, dtype=torch.float) + sample_weights = w[targets] + sampler = WeightedRandomSampler(weights=sample_weights, + num_samples=len(sample_weights)) + return sampler + + +def create_dataloader(opt): + shuffle = not opt.serial_batches if (opt.isTrain and not opt.class_bal) else False + dataset = get_dataset(opt) + sampler = get_bal_sampler(dataset) if opt.class_bal else None + + data_loader = torch.utils.data.DataLoader(dataset, + batch_size=opt.batch_size, + shuffle=shuffle, + sampler=sampler, + num_workers=int(opt.num_threads)) + return data_loader diff --git a/detector_codes/Gram-Net-main/data/datasets.py b/detector_codes/Gram-Net-main/data/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..d2d8a9b603abed4287e4d0dd1a7d29f6624d8d74 --- /dev/null +++ b/detector_codes/Gram-Net-main/data/datasets.py @@ -0,0 +1,139 @@ +import cv2 +import numpy as np +import torchvision.datasets as datasets +import torchvision.transforms as transforms +import torchvision.transforms.functional as TF +from random import random, choice +from io import BytesIO +from PIL import Image +from PIL import ImageFile +from scipy.ndimage.filters import gaussian_filter +from torchvision.transforms import InterpolationMode + +ImageFile.LOAD_TRUNCATED_IMAGES = True + +def dataset_folder(opt, root): + if opt.mode == 'binary': + return binary_dataset(opt, root) + if opt.mode == 'filename': + return FileNameDataset(opt, root) + raise ValueError('opt.mode needs to be binary or filename.') + + +def binary_dataset(opt, root): + if opt.isTrain: + crop_func = transforms.RandomCrop(opt.cropSize) + elif opt.no_crop: + crop_func = transforms.Lambda(lambda img: img) + else: + crop_func = transforms.CenterCrop(opt.cropSize) + + if opt.isTrain and not opt.no_flip: + flip_func = transforms.RandomHorizontalFlip() + else: + flip_func = transforms.Lambda(lambda img: img) + if not opt.isTrain and opt.no_resize: + rz_func = transforms.Lambda(lambda img: img) + else: + # rz_func = transforms.Lambda(lambda img: custom_resize(img, opt)) + rz_func = transforms.Resize((opt.loadSize, opt.loadSize)) + + dset = datasets.ImageFolder( + root, + transforms.Compose([ + rz_func, + # transforms.Lambda(lambda img: data_augment(img, opt)), + crop_func, + flip_func, + transforms.ToTensor(), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ])) + return dset + + +class FileNameDataset(datasets.ImageFolder): + def name(self): + return 'FileNameDataset' + + def __init__(self, opt, root): + self.opt = opt + super().__init__(root) + + def __getitem__(self, index): + # Loading sample + path, target = self.samples[index] + return path + + +def data_augment(img, opt): + img = np.array(img) + + if random() < opt.blur_prob: + sig = sample_continuous(opt.blur_sig) + gaussian_blur(img, sig) + + if random() < opt.jpg_prob: + method = sample_discrete(opt.jpg_method) + qual = sample_discrete(opt.jpg_qual) + img = jpeg_from_key(img, qual, method) + + return Image.fromarray(img) + + +def sample_continuous(s): + if len(s) == 1: + return s[0] + if len(s) == 2: + rg = s[1] - s[0] + return random() * rg + s[0] + raise ValueError("Length of iterable s should be 1 or 2.") + + +def sample_discrete(s): + if len(s) == 1: + return s[0] + return choice(s) + + +def gaussian_blur(img, sigma): + gaussian_filter(img[:,:,0], output=img[:,:,0], sigma=sigma) + gaussian_filter(img[:,:,1], output=img[:,:,1], sigma=sigma) + gaussian_filter(img[:,:,2], output=img[:,:,2], sigma=sigma) + + +def cv2_jpg(img, compress_val): + img_cv2 = img[:,:,::-1] + encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), compress_val] + result, encimg = cv2.imencode('.jpg', img_cv2, encode_param) + decimg = cv2.imdecode(encimg, 1) + return decimg[:,:,::-1] + + +def pil_jpg(img, compress_val): + out = BytesIO() + img = Image.fromarray(img) + img.save(out, format='jpeg', quality=compress_val) + img = Image.open(out) + # load from memory before ByteIO closes + img = np.array(img) + out.close() + return img + + +jpeg_dict = {'cv2': cv2_jpg, 'pil': pil_jpg} +def jpeg_from_key(img, compress_val, key): + method = jpeg_dict[key] + return method(img, compress_val) + + +# rz_dict = {'bilinear': Image.BILINEAR, + # 'bicubic': Image.BICUBIC, + # 'lanczos': Image.LANCZOS, + # 'nearest': Image.NEAREST} +rz_dict = {'bilinear': InterpolationMode.BILINEAR, + 'bicubic': InterpolationMode.BICUBIC, + 'lanczos': InterpolationMode.LANCZOS, + 'nearest': InterpolationMode.NEAREST} +def custom_resize(img, opt): + interp = sample_discrete(opt.rz_interp) + return TF.resize(img, (opt.loadSize,opt.loadSize), interpolation=rz_dict[interp]) diff --git a/detector_codes/Gram-Net-main/log_test.log b/detector_codes/Gram-Net-main/log_test.log new file mode 100644 index 0000000000000000000000000000000000000000..39ee9c1404a8d1a7640e2f6a189b853349c966ae --- /dev/null +++ b/detector_codes/Gram-Net-main/log_test.log @@ -0,0 +1,236 @@ +2025-04-24 05:08:25,270 Model_path /data/ziqiang/yjz/code/Gram-Net-main/checkpoints/4class-car-cat-chair-horse2025_03_31_07_04_42/model_epoch_50.pth +2025-04-24 05:08:36,203 AIGIBench +2025-04-24 05:08:36,203 2025-04-24 05:08:36 +2025-04-24 05:09:14,458 (0 R3GAN ) acc: 71.4; ap: 77.3; r_acc: 78.8; f_acc: 64.0 +2025-04-24 05:10:04,022 (1 IP-Adapter ) acc: 44.0; ap: 41.4; r_acc: 79.5; f_acc: 8.4 +2025-04-24 05:12:09,451 (2 SocialRF ) acc: 51.9; ap: 52.6; r_acc: 88.1; f_acc: 15.6 +2025-04-24 05:13:00,389 (3 CommunityAI ) acc: 51.4; ap: 54.0; r_acc: 96.4; f_acc: 6.5 +2025-04-24 05:13:48,409 (4 StyleGAN-XL ) acc: 70.0; ap: 74.3; r_acc: 79.8; f_acc: 60.3 +2025-04-24 05:14:29,482 (5 Midjourney ) acc: 43.9; ap: 44.0; r_acc: 64.0; f_acc: 23.8 +2025-04-24 05:15:14,625 (6 FLUX1-dev ) acc: 49.7; ap: 50.5; r_acc: 79.1; f_acc: 20.3 +2025-04-24 05:15:56,312 (7 E4S ) acc: 38.0; ap: 35.2; r_acc: 74.3; f_acc: 1.7 +2025-04-24 05:16:43,740 (8 Imagen3 ) acc: 55.1; ap: 57.2; r_acc: 79.0; f_acc: 31.2 +2025-04-24 05:17:18,373 (9 BLIP ) acc: 55.9; ap: 61.5; r_acc: 88.2; f_acc: 23.5 +2025-04-24 05:18:03,350 (10 SDXL ) acc: 59.8; ap: 65.9; r_acc: 80.8; f_acc: 38.9 +2025-04-24 05:18:45,903 (11 DALLE-3 ) acc: 47.7; ap: 46.6; r_acc: 79.9; f_acc: 15.4 +2025-04-24 05:19:20,438 (12 GLIDE ) acc: 51.2; ap: 51.4; r_acc: 82.6; f_acc: 19.8 +2025-04-24 05:19:54,768 (13 InSwap ) acc: 46.0; ap: 43.8; r_acc: 83.2; f_acc: 7.8 +2025-04-24 05:20:29,047 (14 FaceSwap ) acc: 43.4; ap: 39.1; r_acc: 82.2; f_acc: 3.8 +2025-04-24 05:21:15,303 (15 StyleSwim ) acc: 72.8; ap: 79.1; r_acc: 78.2; f_acc: 67.4 +2025-04-24 05:21:44,147 (16 ProGAN ) acc: 95.6; ap: 99.5; r_acc: 98.8; f_acc: 92.4 +2025-04-24 05:22:28,060 (17 BlendFace ) acc: 38.1; ap: 36.6; r_acc: 72.6; f_acc: 3.6 +2025-04-24 05:23:16,758 (18 PhotoMaker ) acc: 46.8; ap: 45.5; r_acc: 79.3; f_acc: 14.2 +2025-04-24 05:24:04,202 (19 SD3 ) acc: 48.5; ap: 47.8; r_acc: 80.8; f_acc: 16.3 +2025-04-24 05:24:53,578 (20 Infinite-ID ) acc: 47.3; ap: 49.6; r_acc: 80.7; f_acc: 13.9 +2025-04-24 05:25:07,360 (21 WFIR ) acc: 61.3; ap: 62.6; r_acc: 65.3; f_acc: 57.3 +2025-04-24 05:25:42,008 (22 SimSwap ) acc: 44.8; ap: 44.1; r_acc: 82.5; f_acc: 7.1 +2025-04-24 05:26:46,790 (23 InstantID ) acc: 50.5; ap: 51.0; r_acc: 80.2; f_acc: 20.9 +2025-04-24 05:27:24,569 (24 StyleGAN3 ) acc: 73.8; ap: 81.6; r_acc: 80.4; f_acc: 67.1 +2025-04-24 05:27:24,569 (25 Mean ) acc: 54.4; ap: 55.7; r_acc: 80.6; f_acc: 28.1 +2025-04-24 05:27:24,569 ************************* +2025-05-14 14:44:42,882 Model_path /data/ziqiang/yjz/code/Gram-Net-main/checkpoints/4class-car-cat-chair-horse2025_03_31_07_04_42/model_epoch_50.pth +2025-05-14 14:44:58,153 jpeg +2025-05-14 14:44:58,153 2025-05-14 14:44:58 +2025-05-14 14:45:57,209 (0 R3GAN ) acc: 49.0; ap: 41.3; r_acc: 98.0; f_acc: 0.1 +2025-05-14 14:48:27,479 (1 IP-Adapter ) acc: 49.9; ap: 52.9; r_acc: 98.1; f_acc: 1.6 +2025-05-14 14:50:56,594 (2 SocialRF ) acc: 50.8; ap: 50.6; r_acc: 94.9; f_acc: 6.7 +2025-05-14 14:53:18,072 (3 CommunityAI ) acc: 50.0; ap: 48.9; r_acc: 98.8; f_acc: 1.4 +2025-05-14 14:55:31,027 (4 StyleGAN-XL ) acc: 50.4; ap: 61.2; r_acc: 98.1; f_acc: 2.8 +2025-05-14 14:56:51,846 (5 Midjourney ) acc: 50.2; ap: 48.7; r_acc: 95.6; f_acc: 4.8 +2025-05-14 14:59:02,146 (6 FLUX1-dev ) acc: 50.8; ap: 55.6; r_acc: 98.2; f_acc: 3.4 +2025-05-14 15:00:17,033 (7 E4S ) acc: 48.6; ap: 41.4; r_acc: 97.0; f_acc: 0.2 +2025-05-14 15:02:29,986 (8 Imagen3 ) acc: 52.2; ap: 61.5; r_acc: 98.1; f_acc: 6.3 +2025-05-14 15:04:06,689 (9 BLIP ) acc: 49.7; ap: 43.1; r_acc: 99.3; f_acc: 0.0 +2025-05-14 15:05:48,462 (10 SDXL ) acc: 50.8; ap: 59.0; r_acc: 98.1; f_acc: 3.8 +2025-05-14 15:07:37,085 (11 DALLE-3 ) acc: 52.3; ap: 63.1; r_acc: 98.3; f_acc: 6.3 +2025-05-14 15:08:50,294 (12 GLIDE ) acc: 49.9; ap: 49.7; r_acc: 98.6; f_acc: 1.1 +2025-05-14 15:09:56,019 (13 InSwap ) acc: 50.5; ap: 55.7; r_acc: 98.8; f_acc: 1.1 +2025-05-14 15:12:12,917 (14 FaceSwap ) acc: 50.2; ap: 50.8; r_acc: 98.5; f_acc: 0.8 +2025-05-14 15:14:19,945 (15 StyleSwim ) acc: 53.9; ap: 73.3; r_acc: 97.7; f_acc: 10.2 +2025-05-14 15:14:59,177 (16 ProGAN ) acc: 55.1; ap: 76.1; r_acc: 99.3; f_acc: 10.9 +2025-05-14 15:16:16,868 (17 BlendFace ) acc: 48.8; ap: 43.1; r_acc: 97.1; f_acc: 0.6 +2025-05-14 15:18:44,515 (18 PhotoMaker ) acc: 50.3; ap: 53.1; r_acc: 98.1; f_acc: 2.6 +2025-05-14 15:21:04,188 (19 SD3 ) acc: 51.3; ap: 55.2; r_acc: 98.1; f_acc: 4.7 +2025-05-14 15:22:51,213 (20 Infinite-ID ) acc: 51.1; ap: 70.8; r_acc: 98.5; f_acc: 4.0 +2025-05-14 15:23:14,587 (21 WFIR ) acc: 49.5; ap: 52.2; r_acc: 95.1; f_acc: 3.9 +2025-05-14 15:24:12,947 (22 SimSwap ) acc: 49.8; ap: 55.2; r_acc: 98.6; f_acc: 1.0 +2025-05-14 15:26:14,802 (23 InstantID ) acc: 51.5; ap: 58.3; r_acc: 98.4; f_acc: 4.6 +2025-05-14 15:27:48,877 (24 StyleGAN3 ) acc: 52.1; ap: 66.6; r_acc: 98.5; f_acc: 5.7 +2025-05-14 15:27:48,878 (25 Mean ) acc: 50.8; ap: 55.5; r_acc: 97.9; f_acc: 3.5 +2025-05-14 15:27:48,878 ************************* +2025-05-14 15:27:48,878 noise +2025-05-14 15:27:48,878 2025-05-14 15:27:48 +2025-05-14 15:30:44,965 (0 R3GAN ) acc: 44.7; ap: 42.9; r_acc: 87.8; f_acc: 1.6 +2025-05-14 15:36:46,008 (1 IP-Adapter ) acc: 47.3; ap: 49.5; r_acc: 87.6; f_acc: 6.9 +2025-05-14 15:45:06,948 (2 SocialRF ) acc: 50.8; ap: 50.9; r_acc: 86.7; f_acc: 14.9 +2025-05-14 15:49:18,778 (3 CommunityAI ) acc: 51.3; ap: 53.8; r_acc: 96.7; f_acc: 5.9 +2025-05-14 15:51:49,959 (4 StyleGAN-XL ) acc: 69.5; ap: 78.3; r_acc: 87.8; f_acc: 51.2 +2025-05-14 15:55:23,679 (5 Midjourney ) acc: 44.4; ap: 43.6; r_acc: 69.3; f_acc: 19.6 +2025-05-14 15:59:16,083 (6 FLUX1-dev ) acc: 52.5; ap: 57.9; r_acc: 87.1; f_acc: 18.0 +2025-05-14 16:01:33,966 (7 E4S ) acc: 40.9; ap: 36.8; r_acc: 81.4; f_acc: 0.3 +2025-05-14 16:06:21,043 (8 Imagen3 ) acc: 58.0; ap: 65.8; r_acc: 86.7; f_acc: 29.4 +2025-05-14 16:07:58,721 (9 BLIP ) acc: 51.9; ap: 69.6; r_acc: 97.8; f_acc: 6.0 +2025-05-14 16:12:05,420 (10 SDXL ) acc: 61.7; ap: 72.8; r_acc: 89.7; f_acc: 33.6 +2025-05-14 16:15:53,139 (11 DALLE-3 ) acc: 50.9; ap: 54.9; r_acc: 87.5; f_acc: 14.3 +2025-05-14 16:17:07,369 (12 GLIDE ) acc: 47.4; ap: 45.5; r_acc: 90.9; f_acc: 3.8 +2025-05-14 16:18:30,006 (13 InSwap ) acc: 47.7; ap: 51.2; r_acc: 91.4; f_acc: 3.0 +2025-05-14 16:19:54,650 (14 FaceSwap ) acc: 46.8; ap: 45.9; r_acc: 91.1; f_acc: 1.5 +2025-05-14 16:23:53,827 (15 StyleSwim ) acc: 75.0; ap: 83.7; r_acc: 87.0; f_acc: 63.0 +2025-05-14 16:24:42,233 (16 ProGAN ) acc: 72.9; ap: 92.1; r_acc: 96.9; f_acc: 48.8 +2025-05-14 16:26:53,566 (17 BlendFace ) acc: 40.2; ap: 38.1; r_acc: 78.6; f_acc: 1.7 +2025-05-14 16:31:13,397 (18 PhotoMaker ) acc: 49.6; ap: 53.5; r_acc: 87.5; f_acc: 11.8 +2025-05-14 16:35:33,021 (19 SD3 ) acc: 52.0; ap: 55.4; r_acc: 89.7; f_acc: 14.3 +2025-05-14 16:40:00,818 (20 Infinite-ID ) acc: 50.2; ap: 59.2; r_acc: 88.6; f_acc: 11.8 +2025-05-14 16:40:17,281 (21 WFIR ) acc: 52.1; ap: 56.9; r_acc: 84.6; f_acc: 19.7 +2025-05-14 16:41:43,424 (22 SimSwap ) acc: 47.3; ap: 52.5; r_acc: 90.8; f_acc: 3.9 +2025-05-14 16:47:22,392 (23 InstantID ) acc: 53.4; ap: 59.4; r_acc: 87.9; f_acc: 18.9 +2025-05-14 16:51:05,020 (24 StyleGAN3 ) acc: 70.9; ap: 80.5; r_acc: 86.4; f_acc: 55.4 +2025-05-14 16:51:05,020 (25 Mean ) acc: 53.2; ap: 58.0; r_acc: 87.9; f_acc: 18.4 +2025-05-14 16:51:05,020 ************************* +2025-05-14 16:51:05,020 sample +2025-05-14 16:51:05,020 2025-05-14 16:51:05 +2025-05-14 16:51:47,364 (0 R3GAN ) acc: 69.5; ap: 77.8; r_acc: 85.6; f_acc: 53.4 +2025-05-14 16:53:11,045 (1 IP-Adapter ) acc: 46.9; ap: 48.8; r_acc: 85.5; f_acc: 8.3 +2025-05-14 16:55:58,464 (2 SocialRF ) acc: 51.7; ap: 52.5; r_acc: 88.0; f_acc: 15.5 +2025-05-14 16:57:40,442 (3 CommunityAI ) acc: 51.3; ap: 53.9; r_acc: 96.3; f_acc: 6.3 +2025-05-14 16:59:28,722 (4 StyleGAN-XL ) acc: 73.2; ap: 79.9; r_acc: 86.1; f_acc: 60.4 +2025-05-14 17:01:01,157 (5 Midjourney ) acc: 44.2; ap: 44.4; r_acc: 64.7; f_acc: 23.8 +2025-05-14 17:02:26,173 (6 FLUX1-dev ) acc: 53.0; ap: 58.1; r_acc: 85.6; f_acc: 20.4 +2025-05-14 17:03:15,472 (7 E4S ) acc: 40.4; ap: 38.1; r_acc: 79.0; f_acc: 1.8 +2025-05-14 17:04:40,443 (8 Imagen3 ) acc: 58.2; ap: 64.7; r_acc: 85.4; f_acc: 31.1 +2025-05-14 17:05:02,792 (9 BLIP ) acc: 59.7; ap: 81.6; r_acc: 97.3; f_acc: 22.2 +2025-05-14 17:06:06,729 (10 SDXL ) acc: 63.3; ap: 73.9; r_acc: 87.8; f_acc: 38.8 +2025-05-14 17:07:09,456 (11 DALLE-3 ) acc: 50.8; ap: 53.9; r_acc: 86.1; f_acc: 15.5 +2025-05-14 17:07:48,395 (12 GLIDE ) acc: 55.5; ap: 62.3; r_acc: 89.7; f_acc: 21.3 +2025-05-14 17:08:21,466 (13 InSwap ) acc: 49.7; ap: 54.7; r_acc: 90.4; f_acc: 8.0 +2025-05-14 17:08:45,746 (14 FaceSwap ) acc: 47.3; ap: 48.0; r_acc: 89.8; f_acc: 3.8 +2025-05-14 17:09:40,039 (15 StyleSwim ) acc: 76.0; ap: 83.6; r_acc: 84.4; f_acc: 67.6 +2025-05-14 17:09:54,998 (16 ProGAN ) acc: 95.6; ap: 99.5; r_acc: 98.9; f_acc: 92.3 +2025-05-14 17:10:45,362 (17 BlendFace ) acc: 39.9; ap: 39.1; r_acc: 76.3; f_acc: 3.5 +2025-05-14 17:11:22,288 (18 PhotoMaker ) acc: 49.9; ap: 53.6; r_acc: 85.7; f_acc: 14.1 +2025-05-14 17:12:35,030 (19 SD3 ) acc: 52.0; ap: 55.4; r_acc: 87.8; f_acc: 16.3 +2025-05-14 17:13:34,927 (20 Infinite-ID ) acc: 50.6; ap: 58.7; r_acc: 87.4; f_acc: 13.8 +2025-05-14 17:13:44,195 (21 WFIR ) acc: 54.9; ap: 57.7; r_acc: 82.4; f_acc: 27.3 +2025-05-14 17:14:19,893 (22 SimSwap ) acc: 48.3; ap: 54.5; r_acc: 89.4; f_acc: 7.2 +2025-05-14 17:15:01,400 (23 InstantID ) acc: 53.6; ap: 58.6; r_acc: 86.4; f_acc: 20.9 +2025-05-14 17:15:27,888 (24 StyleGAN3 ) acc: 74.6; ap: 82.4; r_acc: 81.9; f_acc: 67.3 +2025-05-14 17:15:27,888 (25 Mean ) acc: 56.4; ap: 61.4; r_acc: 86.3; f_acc: 26.4 +2025-05-14 17:15:27,888 ************************* +2025-04-24 07:29:43,837 Model_path /data/ziqiang/yjz/code/Gram-Net-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_05_01_38_10/model_epoch_80.pth +2025-04-24 07:29:54,160 AIGIBench +2025-04-24 07:29:54,160 2025-04-24 07:29:54 +2025-04-24 07:30:32,570 (0 R3GAN ) acc: 47.9; ap: 52.5; r_acc: 89.6; f_acc: 6.1 +2025-04-24 07:31:21,561 (1 IP-Adapter ) acc: 54.5; ap: 64.2; r_acc: 90.4; f_acc: 18.7 +2025-04-24 07:33:25,855 (2 SocialRF ) acc: 52.1; ap: 53.0; r_acc: 92.6; f_acc: 11.5 +2025-04-24 07:34:16,881 (3 CommunityAI ) acc: 52.6; ap: 66.1; r_acc: 99.0; f_acc: 6.2 +2025-04-24 07:35:04,602 (4 StyleGAN-XL ) acc: 72.9; ap: 83.7; r_acc: 89.8; f_acc: 56.0 +2025-04-24 07:35:45,597 (5 Midjourney ) acc: 43.9; ap: 41.6; r_acc: 78.2; f_acc: 9.6 +2025-04-24 07:36:30,144 (6 FLUX1-dev ) acc: 64.5; ap: 75.1; r_acc: 89.9; f_acc: 39.0 +2025-04-24 07:37:11,802 (7 E4S ) acc: 42.5; ap: 32.5; r_acc: 85.0; f_acc: 0.0 +2025-04-24 07:37:59,090 (8 Imagen3 ) acc: 50.6; ap: 54.7; r_acc: 90.7; f_acc: 10.5 +2025-04-24 07:38:33,427 (9 BLIP ) acc: 98.6; ap: 99.9; r_acc: 98.0; f_acc: 99.2 +2025-04-24 07:39:18,035 (10 SDXL ) acc: 63.8; ap: 76.9; r_acc: 91.0; f_acc: 36.6 +2025-04-24 07:40:00,462 (11 DALLE-3 ) acc: 53.5; ap: 61.1; r_acc: 90.5; f_acc: 16.4 +2025-04-24 07:40:35,063 (12 GLIDE ) acc: 71.6; ap: 84.3; r_acc: 92.3; f_acc: 50.8 +2025-04-24 07:41:09,360 (13 InSwap ) acc: 47.1; ap: 38.0; r_acc: 92.9; f_acc: 0.3 +2025-04-24 07:41:43,554 (14 FaceSwap ) acc: 47.0; ap: 34.6; r_acc: 93.0; f_acc: 0.0 +2025-04-24 07:42:29,419 (15 StyleSwim ) acc: 75.5; ap: 86.0; r_acc: 90.3; f_acc: 60.7 +2025-04-24 07:42:58,205 (16 ProGAN ) acc: 98.5; ap: 100.0; r_acc: 99.8; f_acc: 97.2 +2025-04-24 07:43:42,214 (17 BlendFace ) acc: 42.3; ap: 33.3; r_acc: 84.6; f_acc: 0.0 +2025-04-24 07:44:30,550 (18 PhotoMaker ) acc: 50.1; ap: 58.6; r_acc: 90.1; f_acc: 10.0 +2025-04-24 07:45:17,703 (19 SD3 ) acc: 52.5; ap: 60.7; r_acc: 91.0; f_acc: 14.0 +2025-04-24 07:46:07,177 (20 Infinite-ID ) acc: 50.6; ap: 60.1; r_acc: 90.7; f_acc: 10.6 +2025-04-24 07:46:20,882 (21 WFIR ) acc: 44.5; ap: 43.9; r_acc: 78.4; f_acc: 10.7 +2025-04-24 07:46:55,302 (22 SimSwap ) acc: 46.7; ap: 36.4; r_acc: 93.3; f_acc: 0.1 +2025-04-24 07:47:59,376 (23 InstantID ) acc: 75.1; ap: 85.7; r_acc: 90.6; f_acc: 59.6 +2025-04-24 07:48:37,187 (24 StyleGAN3 ) acc: 65.6; ap: 77.9; r_acc: 91.1; f_acc: 40.1 +2025-04-24 07:48:37,187 (25 Mean ) acc: 58.6; ap: 62.4; r_acc: 90.5; f_acc: 26.6 +2025-04-24 07:48:37,188 ************************* +2025-04-30 14:18:05,138 Model_path /data/ziqiang/yjz/code/Gram-Net-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_05_01_38_10/model_epoch_80.pth +2025-04-30 14:18:06,146 jpeg +2025-04-30 14:18:06,146 2025-04-30 14:18:06 +2025-04-30 14:18:32,849 (0 R3GAN ) acc: 49.9; ap: 34.6; r_acc: 99.7; f_acc: 0.0 +2025-04-30 14:19:08,664 (1 IP-Adapter ) acc: 51.7; ap: 77.6; r_acc: 99.7; f_acc: 3.6 +2025-04-30 14:20:14,537 (2 SocialRF ) acc: 49.5; ap: 45.7; r_acc: 96.9; f_acc: 2.1 +2025-04-30 14:21:08,380 (3 CommunityAI ) acc: 50.4; ap: 62.4; r_acc: 99.7; f_acc: 1.1 +2025-04-30 14:21:44,814 (4 StyleGAN-XL ) acc: 50.0; ap: 60.3; r_acc: 99.7; f_acc: 0.3 +2025-04-30 14:22:12,072 (5 Midjourney ) acc: 50.2; ap: 52.0; r_acc: 99.4; f_acc: 1.0 +2025-04-30 14:22:49,348 (6 FLUX1-dev ) acc: 50.2; ap: 64.9; r_acc: 99.8; f_acc: 0.5 +2025-04-30 14:23:21,051 (7 E4S ) acc: 49.8; ap: 33.3; r_acc: 99.7; f_acc: 0.0 +2025-04-30 14:24:45,588 (8 Imagen3 ) acc: 50.1; ap: 56.7; r_acc: 99.8; f_acc: 0.5 +2025-04-30 14:25:25,903 (9 BLIP ) acc: 50.0; ap: 68.5; r_acc: 99.8; f_acc: 0.1 +2025-04-30 14:26:48,795 (10 SDXL ) acc: 50.0; ap: 53.4; r_acc: 99.8; f_acc: 0.3 +2025-04-30 14:28:30,149 (11 DALLE-3 ) acc: 51.9; ap: 82.2; r_acc: 99.8; f_acc: 3.9 +2025-04-30 14:29:45,928 (12 GLIDE ) acc: 50.0; ap: 42.3; r_acc: 99.8; f_acc: 0.1 +2025-04-30 14:30:57,334 (13 InSwap ) acc: 50.4; ap: 39.2; r_acc: 99.8; f_acc: 0.0 +2025-04-30 14:32:00,855 (14 FaceSwap ) acc: 50.4; ap: 37.4; r_acc: 99.8; f_acc: 0.0 +2025-04-30 14:33:44,726 (15 StyleSwim ) acc: 49.9; ap: 58.8; r_acc: 99.6; f_acc: 0.2 +2025-04-30 14:34:41,229 (16 ProGAN ) acc: 50.0; ap: 50.1; r_acc: 100.0; f_acc: 0.0 +2025-04-30 14:35:43,166 (17 BlendFace ) acc: 49.8; ap: 33.6; r_acc: 99.7; f_acc: 0.0 +2025-04-30 14:38:02,651 (18 PhotoMaker ) acc: 50.5; ap: 65.3; r_acc: 99.8; f_acc: 1.3 +2025-04-30 14:40:28,821 (19 SD3 ) acc: 50.2; ap: 66.8; r_acc: 99.8; f_acc: 0.7 +2025-04-30 14:42:25,727 (20 Infinite-ID ) acc: 51.1; ap: 83.5; r_acc: 99.8; f_acc: 2.7 +2025-04-30 14:43:07,024 (21 WFIR ) acc: 50.0; ap: 49.0; r_acc: 99.7; f_acc: 0.3 +2025-04-30 14:44:25,778 (22 SimSwap ) acc: 49.9; ap: 40.1; r_acc: 99.9; f_acc: 0.0 +2025-04-30 14:46:29,169 (23 InstantID ) acc: 55.8; ap: 84.6; r_acc: 99.8; f_acc: 11.8 +2025-04-30 14:48:15,687 (24 StyleGAN3 ) acc: 50.0; ap: 51.5; r_acc: 99.9; f_acc: 0.1 +2025-04-30 14:48:15,688 (25 Mean ) acc: 50.5; ap: 55.8; r_acc: 99.6; f_acc: 1.2 +2025-04-30 14:48:15,688 ************************* +2025-04-30 14:48:15,688 noise +2025-04-30 14:48:15,688 2025-04-30 14:48:15 +2025-04-30 14:51:20,266 (0 R3GAN ) acc: 47.5; ap: 40.2; r_acc: 95.0; f_acc: 0.0 +2025-04-30 14:58:34,270 (1 IP-Adapter ) acc: 53.8; ap: 71.1; r_acc: 95.3; f_acc: 12.2 +2025-04-30 15:23:59,159 (2 SocialRF ) acc: 49.5; ap: 45.6; r_acc: 90.0; f_acc: 9.0 +2025-04-30 15:27:28,246 (3 CommunityAI ) acc: 52.9; ap: 76.4; r_acc: 98.9; f_acc: 6.8 +2025-04-30 15:30:45,588 (4 StyleGAN-XL ) acc: 62.0; ap: 81.3; r_acc: 94.9; f_acc: 29.1 +2025-04-30 15:33:49,422 (5 Midjourney ) acc: 46.3; ap: 40.6; r_acc: 88.8; f_acc: 3.7 +2025-04-30 15:37:08,584 (6 FLUX1-dev ) acc: 53.0; ap: 70.2; r_acc: 95.4; f_acc: 10.6 +2025-04-30 15:38:55,896 (7 E4S ) acc: 46.6; ap: 35.0; r_acc: 93.1; f_acc: 0.0 +2025-04-30 15:43:16,578 (8 Imagen3 ) acc: 49.2; ap: 55.7; r_acc: 95.7; f_acc: 2.7 +2025-04-30 15:44:48,320 (9 BLIP ) acc: 75.5; ap: 98.5; r_acc: 99.6; f_acc: 51.4 +2025-04-30 15:48:36,897 (10 SDXL ) acc: 53.9; ap: 75.6; r_acc: 95.8; f_acc: 12.0 +2025-04-30 15:51:53,317 (11 DALLE-3 ) acc: 53.6; ap: 70.2; r_acc: 95.7; f_acc: 11.4 +2025-04-30 15:52:58,305 (12 GLIDE ) acc: 49.0; ap: 47.9; r_acc: 96.8; f_acc: 1.2 +2025-04-30 15:54:04,295 (13 InSwap ) acc: 48.9; ap: 43.2; r_acc: 96.8; f_acc: 0.0 +2025-04-30 15:55:11,845 (14 FaceSwap ) acc: 48.9; ap: 41.9; r_acc: 96.6; f_acc: 0.0 +2025-04-30 15:58:37,344 (15 StyleSwim ) acc: 59.5; ap: 80.2; r_acc: 95.5; f_acc: 23.5 +2025-04-30 15:59:16,209 (16 ProGAN ) acc: 50.2; ap: 50.4; r_acc: 99.0; f_acc: 1.4 +2025-04-30 16:01:13,767 (17 BlendFace ) acc: 46.0; ap: 34.7; r_acc: 91.9; f_acc: 0.1 +2025-04-30 16:04:39,753 (18 PhotoMaker ) acc: 53.6; ap: 71.4; r_acc: 95.5; f_acc: 11.7 +2025-04-30 16:08:16,762 (19 SD3 ) acc: 50.8; ap: 65.9; r_acc: 95.9; f_acc: 5.7 +2025-04-30 16:11:35,840 (20 Infinite-ID ) acc: 52.1; ap: 70.5; r_acc: 95.8; f_acc: 8.5 +2025-04-30 16:11:46,737 (21 WFIR ) acc: 49.2; ap: 49.5; r_acc: 96.1; f_acc: 2.4 +2025-04-30 16:12:49,848 (22 SimSwap ) acc: 48.6; ap: 44.2; r_acc: 97.1; f_acc: 0.1 +2025-04-30 16:17:29,000 (23 InstantID ) acc: 74.5; ap: 91.1; r_acc: 95.4; f_acc: 53.5 +2025-04-30 16:20:33,879 (24 StyleGAN3 ) acc: 51.0; ap: 61.6; r_acc: 95.0; f_acc: 7.0 +2025-04-30 16:20:33,880 (25 Mean ) acc: 53.0; ap: 60.5; r_acc: 95.4; f_acc: 10.6 +2025-04-30 16:20:33,880 ************************* +2025-04-30 16:20:33,880 sample +2025-04-30 16:20:33,880 2025-04-30 16:20:33 +2025-04-30 16:21:18,456 (0 R3GAN ) acc: 45.0; ap: 43.5; r_acc: 90.0; f_acc: 0.0 +2025-04-30 16:22:31,266 (1 IP-Adapter ) acc: 56.0; ap: 69.2; r_acc: 90.0; f_acc: 22.1 +2025-04-30 16:25:03,905 (2 SocialRF ) acc: 51.9; ap: 52.8; r_acc: 92.4; f_acc: 11.5 +2025-04-30 16:26:17,276 (3 CommunityAI ) acc: 53.0; ap: 68.8; r_acc: 99.2; f_acc: 6.8 +2025-04-30 16:27:37,369 (4 StyleGAN-XL ) acc: 75.0; ap: 85.9; r_acc: 90.2; f_acc: 59.9 +2025-04-30 16:28:42,027 (5 Midjourney ) acc: 43.4; ap: 42.1; r_acc: 74.8; f_acc: 11.9 +2025-04-30 16:29:55,681 (6 FLUX1-dev ) acc: 67.1; ap: 79.4; r_acc: 90.0; f_acc: 44.1 +2025-04-30 16:30:45,217 (7 E4S ) acc: 42.2; ap: 34.1; r_acc: 84.4; f_acc: 0.0 +2025-04-30 16:32:13,303 (8 Imagen3 ) acc: 51.4; ap: 61.2; r_acc: 90.8; f_acc: 12.0 +2025-04-30 16:32:51,645 (9 BLIP ) acc: 97.5; ap: 99.9; r_acc: 99.4; f_acc: 95.6 +2025-04-30 16:34:05,987 (10 SDXL ) acc: 66.1; ap: 81.3; r_acc: 92.1; f_acc: 40.1 +2025-04-30 16:35:18,371 (11 DALLE-3 ) acc: 56.5; ap: 68.0; r_acc: 90.8; f_acc: 22.1 +2025-04-30 16:35:57,848 (12 GLIDE ) acc: 48.6; ap: 55.4; r_acc: 93.0; f_acc: 4.1 +2025-04-30 16:36:37,447 (13 InSwap ) acc: 47.2; ap: 41.2; r_acc: 93.4; f_acc: 0.0 +2025-04-30 16:37:16,994 (14 FaceSwap ) acc: 47.3; ap: 40.4; r_acc: 93.5; f_acc: 0.0 +2025-04-30 16:38:29,833 (15 StyleSwim ) acc: 77.8; ap: 88.5; r_acc: 90.1; f_acc: 65.5 +2025-04-30 16:38:58,892 (16 ProGAN ) acc: 91.7; ap: 99.8; r_acc: 99.9; f_acc: 83.5 +2025-04-30 16:39:52,378 (17 BlendFace ) acc: 41.7; ap: 33.7; r_acc: 83.5; f_acc: 0.0 +2025-04-30 16:41:18,133 (18 PhotoMaker ) acc: 53.5; ap: 66.9; r_acc: 90.4; f_acc: 16.5 +2025-04-30 16:42:42,273 (19 SD3 ) acc: 54.6; ap: 68.9; r_acc: 92.1; f_acc: 17.1 +2025-04-30 16:44:03,436 (20 Infinite-ID ) acc: 52.1; ap: 66.2; r_acc: 91.5; f_acc: 12.7 +2025-04-30 16:44:13,506 (21 WFIR ) acc: 49.5; ap: 48.2; r_acc: 94.5; f_acc: 4.6 +2025-04-30 16:44:53,638 (22 SimSwap ) acc: 47.0; ap: 40.9; r_acc: 94.0; f_acc: 0.0 +2025-04-30 16:46:39,322 (23 InstantID ) acc: 77.2; ap: 87.4; r_acc: 90.6; f_acc: 63.7 +2025-04-30 16:47:50,517 (24 StyleGAN3 ) acc: 62.2; ap: 74.1; r_acc: 89.9; f_acc: 34.5 +2025-04-30 16:47:50,518 (25 Mean ) acc: 58.2; ap: 63.9; r_acc: 91.2; f_acc: 25.1 +2025-04-30 16:47:50,518 ************************* diff --git a/detector_codes/Gram-Net-main/networks/__init__.py b/detector_codes/Gram-Net-main/networks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/Gram-Net-main/networks/base_model.py b/detector_codes/Gram-Net-main/networks/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..1e1024d01e417a118ac7047d21a9ffa9f561c82a --- /dev/null +++ b/detector_codes/Gram-Net-main/networks/base_model.py @@ -0,0 +1,91 @@ +# from pix2pix +import os +import torch +import torch.nn as nn +from torch.nn import init +from torch.optim import lr_scheduler + + +class BaseModel(nn.Module): + def __init__(self, opt): + super(BaseModel, self).__init__() + self.opt = opt + self.total_steps = 0 + self.isTrain = opt.isTrain + self.lr = opt.lr + self.save_dir = os.path.join(opt.checkpoints_dir, opt.name) + self.device = torch.device('cuda:{}'.format(opt.gpu_ids[0])) if opt.gpu_ids else torch.device('cpu') + + def save_networks(self, epoch): + save_filename = 'model_epoch_%s.pth' % epoch + save_path = os.path.join(self.save_dir, save_filename) + + # serialize model and optimizer to dict + # state_dict = { + # 'model': self.model.state_dict(), + # 'optimizer' : self.optimizer.state_dict(), + # 'total_steps' : self.total_steps, + # } + + torch.save(self.model.state_dict(), save_path) + print(f'Saving model {save_path}') + + # load models from the disk + def load_networks(self, epoch): + load_filename = 'model_epoch_%s.pth' % epoch + load_path = os.path.join(self.save_dir, load_filename) + + print('loading the model from %s' % load_path) + # if you are using PyTorch newer than 0.4 (e.g., built from + # GitHub source), you can remove str() on self.device + state_dict = torch.load(load_path, map_location=self.device) + if hasattr(state_dict, '_metadata'): + del state_dict._metadata + + self.model.load_state_dict(state_dict['model']) + self.total_steps = state_dict['total_steps'] + + if self.isTrain and not self.opt.new_optim: + self.optimizer.load_state_dict(state_dict['optimizer']) + ### move optimizer state to GPU + for state in self.optimizer.state.values(): + for k, v in state.items(): + if torch.is_tensor(v): + state[k] = v.to(self.device) + + for g in self.optimizer.param_groups: + g['lr'] = self.opt.lr + + def eval(self): + self.model.eval() + + def train(self): + self.model.train() + + def test(self): + with torch.no_grad(): + self.forward() + + +def init_weights(net, init_type='normal', gain=0.02): + def init_func(m): + classname = m.__class__.__name__ + if hasattr(m, 'weight') and (classname.find('Conv') != -1 or classname.find('Linear') != -1): + if init_type == 'normal': + init.normal_(m.weight.data, 0.0, gain) + elif init_type == 'xavier': + init.xavier_normal_(m.weight.data, gain=gain) + elif init_type == 'kaiming': + init.kaiming_normal_(m.weight.data, a=0, mode='fan_in') + elif init_type == 'orthogonal': + init.orthogonal_(m.weight.data, gain=gain) + else: + raise NotImplementedError('initialization method [%s] is not implemented' % init_type) + if hasattr(m, 'bias') and m.bias is not None: + init.constant_(m.bias.data, 0.0) + elif classname.find('BatchNorm2d') != -1: + init.normal_(m.weight.data, 1.0, gain) + init.constant_(m.bias.data, 0.0) + + print('initialize network with %s' % init_type) + net.apply(init_func) diff --git a/detector_codes/Gram-Net-main/networks/resnet.py b/detector_codes/Gram-Net-main/networks/resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..d03c479a5e248609b43c822d129aee036f9c81f6 --- /dev/null +++ b/detector_codes/Gram-Net-main/networks/resnet.py @@ -0,0 +1,446 @@ +import torch +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +import torch.nn.functional as F + +import numpy as np +__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', + 'resnet152', 'resnext50_32x4d', 'resnext101_32x8d'] + + +model_urls = { + 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', + 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth', + 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth', + 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth', + 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', +} + + +def conv3x3(in_planes, out_planes, stride=1, groups=1, dilation=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=dilation, groups=groups, bias=False, dilation=dilation) + + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1, + base_width=64, dilation=1, norm_layer=None): + super(BasicBlock, self).__init__() + if norm_layer is None: + norm_layer = nn.BatchNorm2d + if groups != 1 or base_width != 64: + raise ValueError('BasicBlock only supports groups=1 and base_width=64') + if dilation > 1: + raise NotImplementedError("Dilation > 1 not supported in BasicBlock") + # Both self.conv1 and self.downsample layers downsample the input when stride != 1 + self.conv1 = conv3x3(inplanes, planes, stride) + self.bn1 = norm_layer(planes) + self.relu = nn.ReLU(inplace=True) + self.conv2 = conv3x3(planes, planes) + self.bn2 = norm_layer(planes) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + +class GramMatrix(nn.Module): + + def forward(self, input): + a, b, c, d = input.size() # a=batch size(=1) + # b=number of feature maps + # (c,d)=dimensions of a f. map (N=c*d) + + features = input.view(a, b, c * d) # resise F_XL into \hat F_XL + #print (features.size(),features.transpose(1,2).size()) + #G = torch.bmm(features, features.transpose(1,2)) # compute the gram product + a= features.transpose(1,2) + G = torch.bmm(features, a) + #print (G.size) + # we 'normalize' the values of the gram matrix + # by dividing by the number of element in each feature maps. + G=G.unsqueeze(1) + return G.div(b* c * d) +class ScaleLayer(nn.Module): + + def __init__(self, init_value=1): + super().__init__() + self.scale = nn.Parameter(torch.FloatTensor([init_value])) + + def forward(self, input): + return input * self.scale + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1, + base_width=64, dilation=1, norm_layer=None): + super(Bottleneck, self).__init__() + if norm_layer is None: + norm_layer = nn.BatchNorm2d + width = int(planes * (base_width / 64.)) * groups + # Both self.conv2 and self.downsample layers downsample the input when stride != 1 + self.conv1 = conv1x1(inplanes, width) + self.bn1 = norm_layer(width) + self.conv2 = conv3x3(width, width, stride, groups, dilation) + self.bn2 = norm_layer(width) + self.conv3 = conv1x1(width, planes * self.expansion) + self.bn3 = norm_layer(planes * self.expansion) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class ResNet(nn.Module): + + def __init__(self, block, layers, num_classes=1000, zero_init_residual=False, + groups=1, width_per_group=64, replace_stride_with_dilation=None, + norm_layer=None): + super(ResNet, self).__init__() + if norm_layer is None: + norm_layer = nn.BatchNorm2d + self._norm_layer = norm_layer + + self.inplanes = 64 + self.dilation = 1 + if replace_stride_with_dilation is None: + # each element in the tuple indicates if we should replace + # the 2x2 stride with a dilated convolution instead + replace_stride_with_dilation = [False, False, False] + if len(replace_stride_with_dilation) != 3: + raise ValueError("replace_stride_with_dilation should be None " + "or a 3-element tuple, got {}".format(replace_stride_with_dilation)) + self.groups = groups + self.base_width = width_per_group + self.conv1 = nn.Conv2d(3, self.inplanes, kernel_size=7, stride=2, padding=3, + bias=False) + self.bn1 = norm_layer(self.inplanes) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2, + dilate=replace_stride_with_dilation[0]) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2, + dilate=replace_stride_with_dilation[1]) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2, + dilate=replace_stride_with_dilation[2]) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + #self.fc = nn.Linear(512 * block.expansion, num_classes) + self.gram = GramMatrix() + self.scale=ScaleLayer() + self.fcnewr = nn.Sequential(nn.Linear(704, 512), + nn.ReLU(), + nn.Dropout(0.5), + nn.Linear(512, 1) + ) + + + self.conv_interi_0 = nn.Sequential(nn.Conv2d(3,32, kernel_size=3, stride=1, padding=1, + bias=False),nn.BatchNorm2d(32),nn.ReLU(inplace=True)) + + self.conv_inter0_0 = nn.Sequential(nn.Conv2d(64,32, kernel_size=3, stride=1, padding=1, + bias=False),nn.BatchNorm2d(32),nn.ReLU(inplace=True)) + + + + self.conv_inter1_0 = nn.Sequential(nn.Conv2d(64,32, kernel_size=3, stride=1, padding=1, + bias=False),nn.BatchNorm2d(32),nn.ReLU(inplace=True)) + + + + self.conv_inter2_0 = nn.Sequential(nn.Conv2d(64,32, kernel_size=3, stride=1, padding=1, + bias=False),nn.BatchNorm2d(32),nn.ReLU(inplace=True)) + + self.conv_inter3_0 = nn.Sequential(nn.Conv2d(128,32, kernel_size=3, stride=1, padding=1, + bias=False),nn.BatchNorm2d(32),nn.ReLU(inplace=True)) + + + self.conv_inter4_0 = nn.Sequential(nn.Conv2d(256,32, kernel_size=3, stride=1, padding=1, + bias=False),nn.BatchNorm2d(32),nn.ReLU(inplace=True)) + + + + self.gi_fc1 = nn.Sequential(nn.Conv2d(1, 16, kernel_size=3, stride=2, padding=1, + bias=False),nn.BatchNorm2d(16), nn.ReLU()) + self.gi_fc2 = nn.Sequential(nn.Conv2d(16, 32, kernel_size=3, stride=2, padding=1, + bias=False),nn.BatchNorm2d(32), nn.ReLU()) + + self.g0_fc1 = nn.Sequential(nn.Conv2d(1, 16, kernel_size=3, stride=2, padding=1, + bias=False),nn.BatchNorm2d(16), nn.ReLU()) + self.g0_fc2 = nn.Sequential(nn.Conv2d(16, 32, kernel_size=3, stride=2, padding=1, + bias=False),nn.BatchNorm2d(32), nn.ReLU()) + + self.g_fc1r = nn.Sequential(nn.Conv2d(1,16, kernel_size=3, stride=2, padding=1, + bias=False),nn.BatchNorm2d(16), nn.ReLU()) + self.g_fc2r = nn.Sequential(nn.Conv2d(16, 32, kernel_size=3, stride=2, padding=1, + bias=False), nn.BatchNorm2d(32),nn.ReLU()) + + + self.g2_fc1 = nn.Sequential(nn.Conv2d(1, 16, kernel_size=3, stride=2, padding=1, + bias=False),nn.BatchNorm2d(16), nn.ReLU()) + self.g2_fc2 = nn.Sequential(nn.Conv2d(16, 32, kernel_size=3, stride=2, padding=1, + bias=False),nn.BatchNorm2d(32), nn.ReLU()) + + self.g3_fc1 = nn.Sequential(nn.Conv2d(1, 16, kernel_size=3, stride=2, padding=1, + bias=False),nn.BatchNorm2d(16), nn.ReLU()) + self.g3_fc2 = nn.Sequential(nn.Conv2d(16, 32, kernel_size=3, stride=2, padding=1, + bias=False),nn.BatchNorm2d(32), nn.ReLU()) + + self.g4_fc1 = nn.Sequential(nn.Conv2d(1, 16, kernel_size=3, stride=2, padding=1, + bias=False),nn.BatchNorm2d(16), nn.ReLU()) + self.g4_fc2 = nn.Sequential(nn.Conv2d(16, 32, kernel_size=3, stride=2, padding=1, + bias=False),nn.BatchNorm2d(32), nn.ReLU()) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + + # Zero-initialize the last BN in each residual branch, + # so that the residual branch starts with zeros, and each residual block behaves like an identity. + # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + nn.init.constant_(m.bn3.weight, 0) + elif isinstance(m, BasicBlock): + nn.init.constant_(m.bn2.weight, 0) + + def _make_layer(self, block, planes, blocks, stride=1, dilate=False): + norm_layer = self._norm_layer + downsample = None + previous_dilation = self.dilation + if dilate: + self.dilation *= stride + stride = 1 + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + conv1x1(self.inplanes, planes * block.expansion, stride), + norm_layer(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample, self.groups, + self.base_width, previous_dilation, norm_layer)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes, groups=self.groups, + base_width=self.base_width, dilation=self.dilation, + norm_layer=norm_layer)) + + return nn.Sequential(*layers) + + def forward(self, x): + x3=x + x = self.conv1(x3) + x = self.bn1(x) + x4 = self.relu(x) + x5 = self.maxpool(x4) + + + x6 = self.layer1(x5) + x7 = self.layer2(x6) + x8 = self.layer3(x7) + x = self.layer4(x8) + + + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + + + gi=self.conv_interi_0(x3) + + gi=self.gram(gi) + + gi=self.gi_fc1(gi) + gi=self.gi_fc2(gi) + gi = self.avgpool(gi) + gi = gi.view(gi.size(0), -1) + + g0=self.conv_inter0_0(x4) + + g0=self.gram(g0) + + g0=self.g0_fc1(g0) + g0=self.g0_fc2(g0) + g0 = self.avgpool(g0) + g0 = g0.view(g0.size(0), -1) + g1=self.conv_inter1_0(x5) + + g1=self.gram(g1) + + g1=self.g_fc1r(g1) + g1=self.g_fc2r(g1) + g1 = self.avgpool(g1) + g1 = g1.view(g1.size(0), -1) + + g2=self.conv_inter2_0(x6) + + g2=self.gram(g2) + + g2=self.g2_fc1(g2) + g2=self.g2_fc2(g2) + g2 = self.avgpool(g2) + g2 = g2.view(g2.size(0), -1) + g3=self.conv_inter3_0(x7) + + g3=self.gram(g3) + + g3=self.g3_fc1(g3) + g3=self.g3_fc2(g3) + g3 = self.avgpool(g3) + g3 = g3.view(g3.size(0), -1) + g4=self.conv_inter4_0(x8) + + g4=self.gram(g4) + + g4=self.g4_fc1(g4) + g4=self.g4_fc2(g4) + g4 = self.avgpool(g4) + g4 = g4.view(g4.size(0), -1) + gi=self.scale(gi) + g0=self.scale(g0) + g1=self.scale(g1) + g2=self.scale(g2) + g3=self.scale(g3) + g4=self.scale(g4) + '''a=np.unique(x.cpu().detach().numpy()) + b=np.unique(gi.cpu().detach().numpy()) + c=np.unique(g0.cpu().detach().numpy()) + d=np.unique(g1.cpu().detach().numpy()) + e=np.unique(g2.cpu().detach().numpy()) + f=np.unique(g3.cpu().detach().numpy()) + g=np.unique(g4.cpu().detach().numpy()) + print (a,b,c,d,e,f,g) + exit()''' + + x=torch.cat((x,gi,g0,g1,g2,g3,g4),1) + x = self.fcnewr(x) + return x + + +def resnet18(pretrained=False, **kwargs): + """Constructs a ResNet-18 model. + + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [2, 2, 2, 2], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet18']),strict=False) + return model + + +def resnet34(pretrained=False, **kwargs): + """Constructs a ResNet-34 model. + + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet34'])) + return model + + +def resnet50(pretrained=False, **kwargs): + """Constructs a ResNet-50 model. + + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet50'])) + return model + + +def resnet101(pretrained=False, **kwargs): + """Constructs a ResNet-101 model. + + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 23, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet101'])) + return model + + +def resnet152(pretrained=False, **kwargs): + """Constructs a ResNet-152 model. + + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 8, 36, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet152'])) + return model + + +def resnext50_32x4d(pretrained=False, **kwargs): + model = ResNet(Bottleneck, [3, 4, 6, 3], groups=32, width_per_group=4, **kwargs) + # if pretrained: + # model.load_state_dict(model_zoo.load_url(model_urls['resnext50_32x4d'])) + return model + + +def resnext101_32x8d(pretrained=False, **kwargs): + model = ResNet(Bottleneck, [3, 4, 23, 3], groups=32, width_per_group=8, **kwargs) + # if pretrained: + # model.load_state_dict(model_zoo.load_url(model_urls['resnext101_32x8d'])) + return model + +if __name__=='__main__': + net = resnet18() + x = torch.rand(10,3,224,224) + net(x) \ No newline at end of file diff --git a/detector_codes/Gram-Net-main/networks/trainer.py b/detector_codes/Gram-Net-main/networks/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..a362b2e955e4b794943d747b97dc409e5741d630 --- /dev/null +++ b/detector_codes/Gram-Net-main/networks/trainer.py @@ -0,0 +1,65 @@ +import functools +import torch +import torch.nn as nn +from networks.resnet import resnet18 +from networks.base_model import BaseModel, init_weights + + +class Trainer(BaseModel): + def name(self): + return 'Trainer' + + def __init__(self, opt): + super(Trainer, self).__init__(opt) + + if self.isTrain and not opt.continue_train: + self.model = resnet18(pretrained=False, num_classes=1) + + if not self.isTrain or opt.continue_train: + self.model = resnet18(num_classes=1) + + if self.isTrain: + self.loss_fn = nn.BCEWithLogitsLoss() + # initialize optimizers + if opt.optim == 'adam': + self.optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, betas=(opt.beta1, 0.999)) + elif opt.optim == 'sgd': + self.optimizer = torch.optim.SGD(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, momentum=0.0, weight_decay=0) + else: + raise ValueError("optim should be [adam, sgd]") + + if not self.isTrain or opt.continue_train: + self.load_networks(opt.epoch) + self.model.to(opt.gpu_ids[0]) + + def adjust_learning_rate(self, min_lr=1e-6): + for param_group in self.optimizer.param_groups: + param_group['lr'] *= 0.9 + if param_group['lr'] < min_lr: + return False + self.lr = param_group['lr'] + print('*'*25) + print(f'Changing lr from {param_group["lr"]/0.9} to {param_group["lr"]}') + print('*'*25) + return True + + def set_input(self, input): + self.input = input[0].to(self.device) + self.label = input[1].to(self.device).float() + + + def forward(self): + self.output = self.model(self.input) + + def get_loss(self): + return self.loss_fn(self.output.squeeze(1), self.label) + + def optimize_parameters(self): + self.forward() + self.loss = self.loss_fn(self.output.squeeze(1), self.label) + self.optimizer.zero_grad() + self.loss.backward() + self.optimizer.step() + diff --git a/detector_codes/Gram-Net-main/options/__init__.py b/detector_codes/Gram-Net-main/options/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/Gram-Net-main/options/base_options.py b/detector_codes/Gram-Net-main/options/base_options.py new file mode 100644 index 0000000000000000000000000000000000000000..b3acdd97cdc1a470d404d5c8fd36be03fbf08219 --- /dev/null +++ b/detector_codes/Gram-Net-main/options/base_options.py @@ -0,0 +1,118 @@ +import argparse +import os +import time +import util +import torch +#import models +#import data + + +class BaseOptions(): + def __init__(self): + self.initialized = False + + def initialize(self, parser): + parser.add_argument('--mode', default='binary') + parser.add_argument('--arch', type=str, default='res50', help='architecture for binary classification') + + # data augmentation + parser.add_argument('--rz_interp', default='bilinear') + parser.add_argument('--blur_prob', type=float, default=0) + parser.add_argument('--blur_sig', default='0.5') + parser.add_argument('--jpg_prob', type=float, default=0) + parser.add_argument('--jpg_method', default='cv2') + parser.add_argument('--jpg_qual', default='75') + + parser.add_argument('--dataroot', default='./dataset/', help='path to images (should have subfolders trainA, trainB, valA, valB, etc)') + parser.add_argument('--classes', default='', help='image classes to train on') + parser.add_argument('--class_bal', action='store_true') + parser.add_argument('--batch_size', type=int, default=128, help='input batch size') + parser.add_argument('--loadSize', type=int, default=256, help='scale images to this size') + parser.add_argument('--cropSize', type=int, default=224, help='then crop to this size') + parser.add_argument('--gpu_ids', type=str, default='2', help='gpu ids: e.g. 0 0,1,2, 0,2. use -1 for CPU') + parser.add_argument('--name', type=str, default='experiment_name', help='name of the experiment. It decides where to store samples and models') + parser.add_argument('--epoch', type=str, default='latest', help='which epoch to load? set to latest to use latest cached model') + parser.add_argument('--num_threads', default=8, type=int, help='# threads for loading data') + parser.add_argument('--checkpoints_dir', type=str, default='./checkpoints', help='models are saved here') + parser.add_argument('--serial_batches', action='store_true', help='if true, takes images in order to make batches, otherwise takes them randomly') + parser.add_argument('--resize_or_crop', type=str, default='scale_and_crop', help='scaling and cropping of images at load time [resize_and_crop|crop|scale_width|scale_width_and_crop|none]') + parser.add_argument('--no_flip', action='store_true', help='if specified, do not flip the images for data augmentation') + parser.add_argument('--init_type', type=str, default='normal', help='network initialization [normal|xavier|kaiming|orthogonal]') + parser.add_argument('--init_gain', type=float, default=0.02, help='scaling factor for normal, xavier and orthogonal.') + parser.add_argument('--suffix', default='', type=str, help='customized suffix: opt.name = opt.name + suffix: e.g., {model}_{netG}_size{loadSize}') + parser.add_argument('--delr_freq', type=int, default=20, help='frequency of changing lr') + + + self.initialized = True + return parser + + def gather_options(self): + # initialize parser with basic options + if not self.initialized: + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser = self.initialize(parser) + + # get the basic options + opt, _ = parser.parse_known_args() + self.parser = parser + + return opt #parser.parse_args() + + def print_options(self, opt): + message = '' + message += '----------------- Options ---------------\n' + for k, v in sorted(vars(opt).items()): + comment = '' + default = self.parser.get_default(k) + if v != default: + comment = '\t[default: %s]' % str(default) + message += '{:>25}: {:<30}{}\n'.format(str(k), str(v), comment) + message += '----------------- End -------------------' + print(message) + + # save to the disk + + expr_dir = os.path.join(opt.checkpoints_dir, opt.name) + util.mkdirs(expr_dir) + file_name = os.path.join(expr_dir, 'opt.txt') + with open(file_name, 'wt') as opt_file: + opt_file.write(message) + opt_file.write('\n') + + def parse(self, print_options=True): + + opt = self.gather_options() + opt.isTrain = self.isTrain # train or test + opt.name = opt.name + time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()) + # process opt.suffix + if opt.suffix: + suffix = ('_' + opt.suffix.format(**vars(opt))) if opt.suffix != '' else '' + opt.name = opt.name + suffix + + if print_options: + self.print_options(opt) + + # set gpu ids + str_ids = opt.gpu_ids.split(',') + opt.gpu_ids = [] + for str_id in str_ids: + id = int(str_id) + if id >= 0: + opt.gpu_ids.append(id) + if len(opt.gpu_ids) > 0: + torch.cuda.set_device(opt.gpu_ids[0]) + + # additional + opt.classes = opt.classes.split(',') + opt.rz_interp = opt.rz_interp.split(',') + opt.blur_sig = [float(s) for s in opt.blur_sig.split(',')] + opt.jpg_method = opt.jpg_method.split(',') + opt.jpg_qual = [int(s) for s in opt.jpg_qual.split(',')] + if len(opt.jpg_qual) == 2: + opt.jpg_qual = list(range(opt.jpg_qual[0], opt.jpg_qual[1] + 1)) + elif len(opt.jpg_qual) > 2: + raise ValueError("Shouldn't have more than 2 values for --jpg_qual.") + + self.opt = opt + return self.opt diff --git a/detector_codes/Gram-Net-main/options/test_options.py b/detector_codes/Gram-Net-main/options/test_options.py new file mode 100644 index 0000000000000000000000000000000000000000..1dba350e3cadf758c2dc39e99a55b4e844e7b16d --- /dev/null +++ b/detector_codes/Gram-Net-main/options/test_options.py @@ -0,0 +1,17 @@ +from .base_options import BaseOptions + + +class TestOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + # parser.add_argument('--dataroot') + parser.add_argument('--model_path') + parser.add_argument('--no_resize', action='store_true') + parser.add_argument('--no_crop', action='store_true') + parser.add_argument('--eval', action='store_true', help='use eval mode during test time.') + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--lr', type=float, default=0.00002, help='initial learning rate for adam') + parser.add_argument('--niter', type=int, default=0, help='# of iter at starting learning rate') + + self.isTrain = False + return parser diff --git a/detector_codes/Gram-Net-main/options/train_options.py b/detector_codes/Gram-Net-main/options/train_options.py new file mode 100644 index 0000000000000000000000000000000000000000..005ab53d0728cc31d60c0501b4320f7dadf7205a --- /dev/null +++ b/detector_codes/Gram-Net-main/options/train_options.py @@ -0,0 +1,26 @@ +from .base_options import BaseOptions + + +class TrainOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--data_aug', action='store_true', help='if specified, perform additional data augmentation (photometric, blurring, jpegging)') + parser.add_argument('--optim', type=str, default='adam', help='optim to use [sgd, adam]') + parser.add_argument('--new_optim', action='store_true', help='new optimizer instead of loading the optim state') + parser.add_argument('--loss_freq', type=int, default=400, help='frequency of showing loss on tensorboard') + parser.add_argument('--save_latest_freq', type=int, default=2000, help='frequency of saving the latest results') + parser.add_argument('--save_epoch_freq', type=int, default=5, help='frequency of saving checkpoints at the end of epochs') + parser.add_argument('--continue_train', action='store_true', help='continue training: load the latest model') + parser.add_argument('--epoch_count', type=int, default=1, help='the starting epoch count, we save the model by , +, ...') + parser.add_argument('--last_epoch', type=int, default=-1, help='starting epoch count for scheduler intialization') + parser.add_argument('--train_split', type=str, default='train', help='train, val, test, etc') + parser.add_argument('--val_split', type=str, default='val', help='train, val, test, etc') + parser.add_argument('--niter', type=int, default=101, help='# of iter at starting learning rate') + parser.add_argument('--beta1', type=float, default=0.9, help='momentum term of adam') + parser.add_argument('--lr', type=float, default=0.0001, help='initial learning rate for adam') + # parser.add_argument('--model_path') + # parser.add_argument('--no_resize', action='store_true') + # parser.add_argument('--no_crop', action='store_true') + self.isTrain = True + return parser diff --git a/detector_codes/Gram-Net-main/requirements.txt b/detector_codes/Gram-Net-main/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..5229c276fd6097939ede4e2f015a95352cb177ec --- /dev/null +++ b/detector_codes/Gram-Net-main/requirements.txt @@ -0,0 +1,7 @@ +scipy +scikit-learn +numpy +opencv_python +Pillow +torch>=1.2.0 +torchvision diff --git a/detector_codes/Gram-Net-main/test.py b/detector_codes/Gram-Net-main/test.py new file mode 100644 index 0000000000000000000000000000000000000000..ad69bd49ca47dba22f436775c98e92b8d6d6f08e --- /dev/null +++ b/detector_codes/Gram-Net-main/test.py @@ -0,0 +1,112 @@ +import logging +import os +import random +import time + +import numpy as np +import torch +from data import create_dataloader +from networks.resnet import resnet18 +from options.test_options import TestOptions +from util import printSet +from validate import validate + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if you are using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +seed_torch(100) + +DetectionTests = { + # 'AIGIBench': { 'dataroot': '/data/ziqiang/Benchmark', + # 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + # 'no_crop': True, + # }, + 'jpeg': { + 'dataroot': '/data/ziqiang/jpeg', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'noise': { + 'dataroot': '/data/ziqiang/noise', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'sample': { + 'dataroot': '/data/ziqiang/sample', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, +} + +# Set up logging +logging.basicConfig( + filename='log_test.log', level=logging.INFO, format='%(asctime)s %(message)s' +) +logger = logging.getLogger() + +opt = TestOptions().parse(print_options=False) +log_msg = f'Model_path {opt.model_path}' +print(log_msg) +logger.info(log_msg) + +# Get model +model = resnet18(num_classes=1) +model.load_state_dict( + torch.load(opt.model_path, map_location=torch.device('cuda:2')), strict=True +) +model.cuda() +model.eval() + +for testSet in DetectionTests.keys(): + dataroot = DetectionTests[testSet]['dataroot'] + printSet(testSet) + logger.info(testSet) + + accs = [] + aps = [] + r_accs = [] + f_accs = [] + current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + print(current_time) + logger.info(current_time) + + for v_id, val in enumerate(os.listdir(dataroot)): + opt.dataroot = '{}/{}'.format(dataroot, val) + opt.classes = '' # os.listdir(opt.dataroot) if multiclass[v_id] else [''] + opt.no_resize = DetectionTests[testSet]['no_resize'] + opt.no_crop = DetectionTests[testSet]['no_crop'] + dataloader = create_dataloader(opt) + acc, ap, r_acc, f_acc = validate(model, dataloader) + accs.append(acc) + aps.append(ap) + r_accs.append(r_acc) + f_accs.append(f_acc) + log_msg = ( + '({} {:12}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id, val, acc * 100, ap * 100, r_acc * 100, f_acc * 100 + ) + ) + print(log_msg) + logger.info(log_msg) + + mean_acc = np.array(accs).mean() * 100 + mean_ap = np.array(aps).mean() * 100 + mean_r_acc = np.array(r_accs).mean() * 100 + mean_f_acc = np.array(f_accs).mean() * 100 + log_msg = '({} {:10}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id + 1, 'Mean', mean_acc, mean_ap, mean_r_acc, mean_f_acc + ) + print(log_msg) + logger.info(log_msg) + print('*' * 25) + logger.info('*' * 25) diff --git a/detector_codes/Gram-Net-main/train.py b/detector_codes/Gram-Net-main/train.py new file mode 100644 index 0000000000000000000000000000000000000000..216638a2c177eaf58639760bd328380d4754524f --- /dev/null +++ b/detector_codes/Gram-Net-main/train.py @@ -0,0 +1,124 @@ +import logging +import os +import random +import sys +import time + +import numpy as np +import torch +from data import create_dataloader +from networks.trainer import Trainer +from options.train_options import TrainOptions +from tensorboardX import SummaryWriter +from util import Logger +from validate import validate + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +def get_val_opt(): + val_opt = TrainOptions().parse(print_options=False) + val_opt.isTrain = False + val_opt.no_resize = False + val_opt.no_crop = False + val_opt.serial_batches = True + return val_opt + + +if __name__ == '__main__': + opt = TrainOptions().parse() + seed_torch(100) + opt.dataroot = f'{opt.dataroot}/{opt.train_split}/' + Logger(os.path.join(opt.checkpoints_dir, opt.name, 'logging.log')) + print(' '.join(list(sys.argv))) + val_opt = get_val_opt() + val_opt.dataroot = f'{val_opt.dataroot}/{val_opt.val_split}/' + + data_loader = create_dataloader(opt) + val_loader = create_dataloader(val_opt) + + train_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'train')) + val_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'val')) + + model = Trainer(opt) + model.train() + + # early_stopping = EarlyStopping(patience=opt.earlystop_epoch, delta=-0.001, verbose=True) + + # Configure logger + logging.basicConfig( + level=logging.INFO, # Set logging level + format='%(asctime)s - %(levelname)s - %(message)s', # Log format + datefmt='%Y-%m-%d %H:%M:%S', # Date format without milliseconds + handlers=[ + logging.FileHandler('log.log', mode='w'), # Log file output + logging.StreamHandler(), + ], + ) # Console output + + logger = logging.getLogger(__name__) + + print(f'cwd: {os.getcwd()}') + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} Length of data loader: {len(data_loader)}' + ) + logger.info(f'Length of data loader: {len(data_loader)}') + + for epoch in range(opt.niter): + for i, data in enumerate(data_loader): + model.total_steps += 1 + + # Move data to cuda + model.set_input(data) + # Train + model.optimize_parameters() + + if model.total_steps % opt.loss_freq == 0: + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}' + ) + logger.info( + f'Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}' + ) + train_writer.add_scalar('loss', model.loss, model.total_steps) + + if epoch % opt.save_epoch_freq == 0 and epoch != 0: + # Optionally save model at each epoch + print(f'saving the model at the end of epoch {epoch}') + logger.info(f'saving the model at the end of epoch {epoch}') + model.save_networks(epoch) + + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} changing lr at the end of epoch {epoch}, iters {model.total_steps}' + ) + logger.info( + f'changing lr at the end of epoch {epoch}, iters {model.total_steps}' + ) + model.adjust_learning_rate() + + # Validation + model.eval() + acc, ap, r_acc, f_acc = validate(model.model, val_loader) + val_writer.add_scalar('accuracy', acc, model.total_steps) + val_writer.add_scalar('ap', ap, model.total_steps) + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} (Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}' + ) + logger.info( + f'(Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}' + ) + + model.train() + + model.eval() + model.save_networks('last') diff --git a/detector_codes/Gram-Net-main/util.py b/detector_codes/Gram-Net-main/util.py new file mode 100644 index 0000000000000000000000000000000000000000..3ae97ef76a1c165cb11f7ddaf90377196428f7ef --- /dev/null +++ b/detector_codes/Gram-Net-main/util.py @@ -0,0 +1,49 @@ +import os +import sys + +import torch + + +def mkdirs(paths): + if isinstance(paths, list) and not isinstance(paths, str): + for path in paths: + mkdir(path) + else: + mkdir(paths) + + +def mkdir(path): + if not os.path.exists(path): + os.makedirs(path) + + +def unnormalize(tens, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]): + # assume tensor of shape NxCxHxW + return ( + tens * torch.Tensor(std)[None, :, None, None] + + torch.Tensor(mean)[None, :, None, None] + ) + + +class Logger(object): + """Log stdout messages.""" + + def __init__(self, outfile): + self.terminal = sys.stdout + self.log = open(outfile, 'a') + sys.stdout = self + + def write(self, message): + self.terminal.write(message) + self.log.write(message) + + def flush(self): + self.terminal.flush() + + +def printSet(set_str): + set_str = str(set_str) + num = len(set_str) + print('=' * num * 3) + print(' ' * num + set_str) + print('=' * num * 3) diff --git a/detector_codes/Gram-Net-main/validate.py b/detector_codes/Gram-Net-main/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..9c8a9c64e7be2a0ce0119baca2fbca77a0be12dc --- /dev/null +++ b/detector_codes/Gram-Net-main/validate.py @@ -0,0 +1,21 @@ +import numpy as np +import torch +from sklearn.metrics import accuracy_score, average_precision_score + + +def validate(model, val_loader): + # data_loader = create_dataloader(opt) + + with torch.no_grad(): + y_true, y_pred = [], [] + for img, label in val_loader: + in_tens = img.cuda() + y_pred.extend(model(in_tens).sigmoid().flatten().tolist()) + y_true.extend(label.flatten().tolist()) + + y_true, y_pred = np.array(y_true), np.array(y_pred) + r_acc = accuracy_score(y_true[y_true == 0], y_pred[y_true == 0] > 0.5) + f_acc = accuracy_score(y_true[y_true == 1], y_pred[y_true == 1] > 0.5) + acc = accuracy_score(y_true, y_pred > 0.5) + ap = average_precision_score(y_true, y_pred) + return acc, ap, r_acc, f_acc diff --git a/detector_codes/LGrad-master/CNNDetection/data/__init__.py b/detector_codes/LGrad-master/CNNDetection/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..619f339b4ff96ee93662bcfa947b743ad31f8eed --- /dev/null +++ b/detector_codes/LGrad-master/CNNDetection/data/__init__.py @@ -0,0 +1,61 @@ +import torch +import numpy as np +from torch.utils.data.sampler import WeightedRandomSampler + +from .datasets import dataset_folder + +import os + + +# 获取数据集,要根据不同的需求进行修改 +''' +def get_dataset(opt): + dset_lst = [] + for cls in opt.classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) +''' + + +def get_dataset(opt): + classes = os.listdir(opt.dataroot) if len(opt.classes) == 0 else opt.classes + # 如果类文件夹中没有 '0_real' 和 '1_fake',会对每个类单独加载数据集,并将它们合并返回 + # 如果类文件夹中包含 '0_real' 和 '1_fake',则直接对整个根目录加载数据集 + if '0_real' not in classes or '1_fake' not in classes: + dset_lst = [] + for cls in classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) + return dataset_folder(opt, opt.dataroot) + + +def get_bal_sampler(dataset): + targets = [] + for d in dataset.datasets: + targets.extend(d.targets) + + ratio = np.bincount(targets) + w = 1. / torch.tensor(ratio, dtype=torch.float) + sample_weights = w[targets] + sampler = WeightedRandomSampler(weights=sample_weights, + num_samples=len(sample_weights)) + return sampler + + +def create_dataloader(opt): + # 是否打乱数据集 + shuffle = not opt.serial_batches if (opt.isTrain and not opt.class_bal) else False + dataset = get_dataset(opt) + sampler = get_bal_sampler(dataset) if opt.class_bal else None + + data_loader = torch.utils.data.DataLoader(dataset, + batch_size=opt.batch_size, + shuffle=shuffle, + sampler=sampler, + num_workers=int(opt.num_threads), + drop_last=opt.drop_last) + return data_loader diff --git a/detector_codes/LGrad-master/CNNDetection/data/datasets.py b/detector_codes/LGrad-master/CNNDetection/data/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..8230d87faac540791651f4bd632124923203e1ad --- /dev/null +++ b/detector_codes/LGrad-master/CNNDetection/data/datasets.py @@ -0,0 +1,163 @@ +import cv2 +import numpy as np +import torchvision.datasets as datasets +import torchvision.transforms as transforms +import torchvision.transforms.functional as TF +from torch.utils.data import Dataset +from random import random, choice, shuffle +from io import BytesIO +from PIL import Image +from PIL import ImageFile +from scipy.ndimage.filters import gaussian_filter +import pickle +import os + +ImageFile.LOAD_TRUNCATED_IMAGES = True + + +def recursively_read(rootdir, must_contain, exts=["png", "jpg", "JPEG", "jpeg"]): + out = [] + for r, d, f in os.walk(rootdir): + for file in f: + if (file.split('.')[1] in exts) and (must_contain in os.path.join(r, file)): + out.append(os.path.join(r, file)) + return out + + +def get_list(path, must_contain=''): + if ".pickle" in path: + with open(path, 'rb') as f: + image_list = pickle.load(f) + image_list = [ item for item in image_list if must_contain in item ] + else: + image_list = recursively_read(path, must_contain) + return image_list + + +def dataset_folder(opt, root): + # 是否为二分类任务 + if opt.mode == 'binary': + return binary_dataset(opt, root) + if opt.mode == 'filename': + return FileNameDataset(opt, root) + raise ValueError('opt.mode needs to be binary or filename.') + + +def binary_dataset(opt, root): + if opt.isTrain: # 训练集 + crop_func = transforms.RandomCrop(opt.cropSize) # 随机裁剪到指定尺寸 + elif opt.no_crop: # 测试集且不裁剪 + crop_func = transforms.Lambda(lambda img: img) # 保留原图像 + else: # 测试集且裁剪 + crop_func = transforms.CenterCrop(opt.cropSize) # 中心裁剪到指定尺寸 + + if opt.isTrain and not opt.no_flip: # 训练且允许翻转 + flip_func = transforms.RandomHorizontalFlip() # 随机水平翻转图像,增加数据多样性 + else: + flip_func = transforms.Lambda(lambda img: img) # 不变 + if not opt.isTrain and opt.no_resize: # 测试集且不调整大小 + rz_func = transforms.Lambda(lambda img: img) + else: + # rz_func = transforms.Lambda(lambda img: custom_resize(img, opt)) + # rz_func = transforms.Resize((opt.loadSize, opt.loadSize)) # 调整大小 + rz_func = transforms.CenterCrop(opt.cropSize) + + # ImageFolder会读取root下所有文件,并把子文件夹1设置为0标签,子文件2设置为1标签 + dset = datasets.ImageFolder( + root, + transforms.Compose([ + rz_func, + # transforms.Lambda(lambda img: data_augment(img, opt)), + crop_func, + flip_func, + transforms.ToTensor(), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ])) + return dset + + +class FileNameDataset(datasets.ImageFolder): + def name(self): + return 'FileNameDataset' + + def __init__(self, opt, root): + self.opt = opt + super().__init__(root) + + def __getitem__(self, index): + # Loading sample + path, target = self.samples[index] + return path + + +def data_augment(img, opt): + img = np.array(img) + if img.ndim == 2: + img = np.expand_dims(img, axis=2) + img = np.repeat(img, 3, axis=2) + + if random() < opt.blur_prob: + sig = sample_continuous(opt.blur_sig) + gaussian_blur(img, sig) + + if random() < opt.jpg_prob: + method = sample_discrete(opt.jpg_method) + qual = sample_discrete(opt.jpg_qual) + img = jpeg_from_key(img, qual, method) + + return Image.fromarray(img) + + +def sample_continuous(s): + if len(s) == 1: + return s[0] + if len(s) == 2: + rg = s[1] - s[0] + return random() * rg + s[0] + raise ValueError("Length of iterable s should be 1 or 2.") + + +def sample_discrete(s): + if len(s) == 1: + return s[0] + return choice(s) + + +def gaussian_blur(img, sigma): + gaussian_filter(img[:,:,0], output=img[:,:,0], sigma=sigma) + gaussian_filter(img[:,:,1], output=img[:,:,1], sigma=sigma) + gaussian_filter(img[:,:,2], output=img[:,:,2], sigma=sigma) + + +def cv2_jpg(img, compress_val): + img_cv2 = img[:,:,::-1] + encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), compress_val] + result, encimg = cv2.imencode('.jpg', img_cv2, encode_param) + decimg = cv2.imdecode(encimg, 1) + return decimg[:,:,::-1] + + +def pil_jpg(img, compress_val): + out = BytesIO() + img = Image.fromarray(img) + img.save(out, format='jpeg', quality=compress_val) + img = Image.open(out) + # load from memory before ByteIO closes + img = np.array(img) + out.close() + return img + + +jpeg_dict = {'cv2': cv2_jpg, 'pil': pil_jpg} +def jpeg_from_key(img, compress_val, key): + method = jpeg_dict[key] + return method(img, compress_val) + + +rz_dict = {'bilinear': Image.BILINEAR, + 'bicubic': Image.BICUBIC, + 'lanczos': Image.LANCZOS, + 'nearest': Image.NEAREST} +def custom_resize(img, opt): + interp = sample_discrete(opt.rz_interp) + return TF.resize(img, opt.loadSize, interpolation=rz_dict[interp]) diff --git a/detector_codes/LGrad-master/CNNDetection/log_test.log b/detector_codes/LGrad-master/CNNDetection/log_test.log new file mode 100644 index 0000000000000000000000000000000000000000..8c4ba2fb03bb35cbe0f28e283857a5a9971935fa --- /dev/null +++ b/detector_codes/LGrad-master/CNNDetection/log_test.log @@ -0,0 +1,236 @@ +2025-04-30 09:48:07,046 Model_path /data/ziqiang/yjz/code/LGrad-master/CNNDetection/checkpoints/4class-car-cat-chair-horse2025_04_13_12_11_30/model_epoch_80.pth +2025-04-30 09:48:25,914 AIGIBench +2025-04-30 09:48:25,914 2025-04-30 09:48:25 +2025-04-30 09:52:02,670 (0 R3GAN ) acc: 65.6; ap: 69.1; r_acc: 49.6; f_acc: 81.7 +2025-04-30 09:52:39,731 (1 IP-Adapter ) acc: 45.5; ap: 46.3; r_acc: 50.3; f_acc: 40.7 +2025-04-30 09:53:29,689 (2 SocialRF ) acc: 49.6; ap: 49.3; r_acc: 60.5; f_acc: 38.3 +2025-04-30 09:55:12,530 (3 CommunityAI ) acc: 56.4; ap: 63.0; r_acc: 95.4; f_acc: 16.7 +2025-04-30 10:03:42,952 (4 StyleGAN-XL ) acc: 61.2; ap: 62.8; r_acc: 49.3; f_acc: 73.2 +2025-04-30 10:08:42,286 (5 Midjourney ) acc: 59.2; ap: 62.1; r_acc: 55.6; f_acc: 62.9 +2025-04-30 10:12:19,006 (6 FLUX1-dev ) acc: 64.6; ap: 70.0; r_acc: 50.4; f_acc: 79.1 +2025-04-30 10:13:53,424 (7 E4S ) acc: 39.2; ap: 39.4; r_acc: 54.9; f_acc: 23.4 +2025-04-30 10:18:33,836 (8 Imagen3 ) acc: 61.4; ap: 66.9; r_acc: 49.4; f_acc: 73.4 +2025-04-30 10:25:51,792 (9 BLIP ) acc: 56.4; ap: 57.8; r_acc: 43.8; f_acc: 69.2 +2025-04-30 10:27:40,370 (10 SDXL ) acc: 64.0; ap: 66.3; r_acc: 54.2; f_acc: 73.8 +2025-04-30 10:28:51,641 (11 DALLE-3 ) acc: 49.5; ap: 48.6; r_acc: 50.2; f_acc: 48.8 +2025-04-30 10:29:51,535 (12 GLIDE ) acc: 56.7; ap: 66.2; r_acc: 49.0; f_acc: 64.4 +2025-04-30 10:30:49,940 (13 InSwap ) acc: 37.7; ap: 38.5; r_acc: 48.2; f_acc: 26.7 +2025-04-30 10:31:54,257 (14 FaceSwap ) acc: 28.2; ap: 33.3; r_acc: 48.1; f_acc: 7.5 +2025-04-30 10:38:44,900 (15 StyleSwim ) acc: 68.1; ap: 75.0; r_acc: 49.6; f_acc: 86.9 +2025-04-30 10:42:40,730 (16 ProGAN ) acc: 98.0; ap: 99.9; r_acc: 99.3; f_acc: 96.7 +2025-04-30 10:45:37,387 (17 BlendFace ) acc: 38.6; ap: 39.4; r_acc: 55.3; f_acc: 21.8 +2025-04-30 10:47:30,384 (18 PhotoMaker ) acc: 32.0; ap: 35.8; r_acc: 49.3; f_acc: 14.6 +2025-04-30 10:52:25,180 (19 SD3 ) acc: 66.2; ap: 71.4; r_acc: 54.2; f_acc: 78.3 +2025-04-30 10:55:11,506 (20 Infinite-ID ) acc: 31.3; ap: 34.4; r_acc: 53.8; f_acc: 8.8 +2025-04-30 10:55:48,632 (21 WFIR ) acc: 55.6; ap: 53.1; r_acc: 66.2; f_acc: 44.1 +2025-04-30 10:57:13,401 (22 SimSwap ) acc: 36.1; ap: 38.1; r_acc: 47.8; f_acc: 24.2 +2025-04-30 10:58:26,713 (23 InstantID ) acc: 53.9; ap: 54.8; r_acc: 49.9; f_acc: 57.9 +2025-04-30 10:59:19,070 (24 StyleGAN3 ) acc: 59.9; ap: 64.3; r_acc: 54.4; f_acc: 65.4 +2025-04-30 10:59:19,070 (25 Mean ) acc: 53.4; ap: 56.2; r_acc: 55.5; f_acc: 51.1 +2025-04-30 10:59:19,070 ************************* +2025-05-14 14:47:13,111 Model_path /data/ziqiang/yjz/code/LGrad-master/CNNDetection/checkpoints/4class-car-cat-chair-horse2025_04_13_12_11_30/model_epoch_80.pth +2025-05-14 14:47:33,879 jpeg +2025-05-14 14:47:33,880 2025-05-14 14:47:33 +2025-05-14 14:54:26,543 (0 R3GAN ) acc: 65.2; ap: 68.0; r_acc: 59.5; f_acc: 71.0 +2025-05-14 14:58:40,255 (1 IP-Adapter ) acc: 41.2; ap: 41.0; r_acc: 58.9; f_acc: 23.4 +2025-05-14 15:01:12,240 (2 SocialRF ) acc: 48.9; ap: 46.7; r_acc: 74.5; f_acc: 22.4 +2025-05-14 15:08:49,916 (3 CommunityAI ) acc: 52.9; ap: 64.8; r_acc: 98.9; f_acc: 6.1 +2025-05-14 15:12:22,728 (4 StyleGAN-XL ) acc: 61.4; ap: 57.0; r_acc: 58.1; f_acc: 64.8 +2025-05-14 15:15:26,559 (5 Midjourney ) acc: 48.9; ap: 50.2; r_acc: 53.2; f_acc: 44.4 +2025-05-14 15:17:27,990 (6 FLUX1-dev ) acc: 45.6; ap: 44.2; r_acc: 59.0; f_acc: 32.0 +2025-05-14 15:19:03,234 (7 E4S ) acc: 63.6; ap: 68.0; r_acc: 60.5; f_acc: 66.7 +2025-05-14 15:20:58,645 (8 Imagen3 ) acc: 49.3; ap: 47.8; r_acc: 58.6; f_acc: 39.8 +2025-05-14 15:22:26,710 (9 BLIP ) acc: 30.7; ap: 34.3; r_acc: 57.6; f_acc: 3.6 +2025-05-14 15:24:07,459 (10 SDXL ) acc: 68.3; ap: 66.9; r_acc: 66.9; f_acc: 69.7 +2025-05-14 15:25:09,673 (11 DALLE-3 ) acc: 52.8; ap: 49.9; r_acc: 58.7; f_acc: 46.8 +2025-05-14 15:26:30,762 (12 GLIDE ) acc: 52.1; ap: 53.7; r_acc: 60.3; f_acc: 43.9 +2025-05-14 15:27:47,835 (13 InSwap ) acc: 62.7; ap: 61.5; r_acc: 60.3; f_acc: 65.3 +2025-05-14 15:32:32,071 (14 FaceSwap ) acc: 63.9; ap: 63.6; r_acc: 60.4; f_acc: 67.6 +2025-05-14 15:36:16,042 (15 StyleSwim ) acc: 62.7; ap: 59.9; r_acc: 59.6; f_acc: 65.9 +2025-05-14 15:36:52,701 (16 ProGAN ) acc: 54.3; ap: 54.6; r_acc: 49.3; f_acc: 59.4 +2025-05-14 15:40:51,212 (17 BlendFace ) acc: 58.0; ap: 60.7; r_acc: 59.4; f_acc: 56.7 +2025-05-14 15:44:03,272 (18 PhotoMaker ) acc: 60.0; ap: 56.7; r_acc: 60.0; f_acc: 60.1 +2025-05-14 15:44:39,557 (19 SD3 ) acc: 59.5; ap: 58.0; r_acc: 66.9; f_acc: 52.2 +2025-05-14 15:45:06,421 (20 Infinite-ID ) acc: 43.4; ap: 42.3; r_acc: 63.3; f_acc: 23.5 +2025-05-14 15:45:14,495 (21 WFIR ) acc: 55.4; ap: 52.6; r_acc: 53.0; f_acc: 57.9 +2025-05-14 15:47:21,932 (22 SimSwap ) acc: 60.0; ap: 58.4; r_acc: 61.1; f_acc: 58.9 +2025-05-14 15:48:56,643 (23 InstantID ) acc: 37.1; ap: 38.7; r_acc: 59.1; f_acc: 14.9 +2025-05-14 15:49:20,537 (24 StyleGAN3 ) acc: 51.0; ap: 48.8; r_acc: 64.3; f_acc: 37.7 +2025-05-14 15:49:20,538 (25 Mean ) acc: 54.0; ap: 53.9; r_acc: 61.6; f_acc: 46.2 +2025-05-14 15:49:20,538 ************************* +2025-05-14 15:49:20,538 noise +2025-05-14 15:49:20,538 2025-05-14 15:49:20 +2025-05-14 15:50:33,204 (0 R3GAN ) acc: 34.1; ap: 34.2; r_acc: 60.2; f_acc: 7.8 +2025-05-14 15:51:42,069 (1 IP-Adapter ) acc: 47.8; ap: 48.0; r_acc: 60.6; f_acc: 34.8 +2025-05-14 15:52:59,179 (2 SocialRF ) acc: 46.8; ap: 46.0; r_acc: 46.2; f_acc: 47.4 +2025-05-14 15:55:28,337 (3 CommunityAI ) acc: 63.6; ap: 73.2; r_acc: 90.2; f_acc: 36.6 +2025-05-14 15:58:59,203 (4 StyleGAN-XL ) acc: 57.8; ap: 58.3; r_acc: 58.8; f_acc: 56.7 +2025-05-14 15:59:22,039 (5 Midjourney ) acc: 54.0; ap: 54.7; r_acc: 54.8; f_acc: 53.3 +2025-05-14 16:01:21,142 (6 FLUX1-dev ) acc: 66.2; ap: 69.5; r_acc: 61.3; f_acc: 71.2 +2025-05-14 16:02:59,093 (7 E4S ) acc: 33.3; ap: 32.7; r_acc: 61.4; f_acc: 5.0 +2025-05-14 16:05:11,154 (8 Imagen3 ) acc: 62.3; ap: 67.2; r_acc: 59.1; f_acc: 65.5 +2025-05-14 16:06:21,612 (9 BLIP ) acc: 42.9; ap: 42.7; r_acc: 60.2; f_acc: 25.5 +2025-05-14 16:09:46,470 (10 SDXL ) acc: 56.4; ap: 57.4; r_acc: 64.0; f_acc: 48.9 +2025-05-14 16:12:04,669 (11 DALLE-3 ) acc: 51.9; ap: 51.5; r_acc: 60.6; f_acc: 43.0 +2025-05-14 16:15:44,515 (12 GLIDE ) acc: 39.3; ap: 39.0; r_acc: 61.1; f_acc: 17.2 +2025-05-14 16:17:07,093 (13 InSwap ) acc: 34.1; ap: 31.8; r_acc: 61.6; f_acc: 5.5 +2025-05-14 16:18:29,199 (14 FaceSwap ) acc: 33.4; ap: 31.8; r_acc: 60.9; f_acc: 4.9 +2025-05-14 16:19:58,802 (15 StyleSwim ) acc: 69.4; ap: 75.5; r_acc: 60.3; f_acc: 78.6 +2025-05-14 16:23:36,488 (16 ProGAN ) acc: 56.6; ap: 59.1; r_acc: 81.5; f_acc: 31.3 +2025-05-14 16:24:43,208 (17 BlendFace ) acc: 39.2; ap: 38.1; r_acc: 58.9; f_acc: 19.4 +2025-05-14 16:27:03,789 (18 PhotoMaker ) acc: 34.5; ap: 36.0; r_acc: 60.6; f_acc: 8.1 +2025-05-14 16:30:44,071 (19 SD3 ) acc: 65.1; ap: 69.4; r_acc: 63.7; f_acc: 66.5 +2025-05-14 16:32:31,499 (20 Infinite-ID ) acc: 35.5; ap: 35.2; r_acc: 63.0; f_acc: 8.0 +2025-05-14 16:34:47,092 (21 WFIR ) acc: 48.3; ap: 45.3; r_acc: 69.0; f_acc: 25.9 +2025-05-14 16:35:35,438 (22 SimSwap ) acc: 39.3; ap: 38.2; r_acc: 59.7; f_acc: 18.8 +2025-05-14 16:39:29,957 (23 InstantID ) acc: 54.8; ap: 55.0; r_acc: 60.3; f_acc: 49.3 +2025-05-14 16:39:59,920 (24 StyleGAN3 ) acc: 51.8; ap: 52.6; r_acc: 68.3; f_acc: 35.2 +2025-05-14 16:39:59,921 (25 Mean ) acc: 48.7; ap: 49.7; r_acc: 62.7; f_acc: 34.6 +2025-05-14 16:39:59,921 ************************* +2025-05-14 16:39:59,921 sample +2025-05-14 16:39:59,921 2025-05-14 16:39:59 +2025-05-14 16:41:23,947 (0 R3GAN ) acc: 66.7; ap: 65.2; r_acc: 50.1; f_acc: 83.5 +2025-05-14 16:44:31,054 (1 IP-Adapter ) acc: 44.1; ap: 42.4; r_acc: 50.0; f_acc: 38.2 +2025-05-14 16:46:35,167 (2 SocialRF ) acc: 49.2; ap: 49.1; r_acc: 60.3; f_acc: 37.6 +2025-05-14 16:47:09,577 (3 CommunityAI ) acc: 56.7; ap: 64.4; r_acc: 96.4; f_acc: 16.3 +2025-05-14 16:47:57,885 (4 StyleGAN-XL ) acc: 59.1; ap: 53.0; r_acc: 48.7; f_acc: 69.6 +2025-05-14 16:50:47,874 (5 Midjourney ) acc: 58.9; ap: 60.7; r_acc: 58.3; f_acc: 59.5 +2025-05-14 16:51:07,838 (6 FLUX1-dev ) acc: 63.4; ap: 58.3; r_acc: 49.9; f_acc: 77.0 +2025-05-14 16:51:30,253 (7 E4S ) acc: 65.6; ap: 62.2; r_acc: 59.3; f_acc: 71.9 +2025-05-14 16:52:51,212 (8 Imagen3 ) acc: 59.4; ap: 54.6; r_acc: 50.0; f_acc: 68.9 +2025-05-14 16:53:12,805 (9 BLIP ) acc: 53.5; ap: 44.5; r_acc: 38.2; f_acc: 68.9 +2025-05-14 16:53:36,697 (10 SDXL ) acc: 64.9; ap: 58.9; r_acc: 58.8; f_acc: 71.0 +2025-05-14 16:53:54,472 (11 DALLE-3 ) acc: 48.4; ap: 44.2; r_acc: 49.5; f_acc: 47.3 +2025-05-14 16:54:15,332 (12 GLIDE ) acc: 72.1; ap: 72.9; r_acc: 47.8; f_acc: 96.6 +2025-05-14 16:54:34,368 (13 InSwap ) acc: 68.0; ap: 61.2; r_acc: 47.1; f_acc: 89.7 +2025-05-14 16:54:54,521 (14 FaceSwap ) acc: 67.6; ap: 60.0; r_acc: 47.0; f_acc: 89.1 +2025-05-14 16:55:33,315 (15 StyleSwim ) acc: 67.1; ap: 63.1; r_acc: 49.5; f_acc: 84.8 +2025-05-14 16:55:53,299 (16 ProGAN ) acc: 56.2; ap: 61.6; r_acc: 43.3; f_acc: 69.3 +2025-05-14 16:56:46,384 (17 BlendFace ) acc: 72.9; ap: 71.2; r_acc: 59.2; f_acc: 86.6 +2025-05-14 16:57:33,942 (18 PhotoMaker ) acc: 31.0; ap: 36.0; r_acc: 49.4; f_acc: 12.5 +2025-05-14 16:58:14,842 (19 SD3 ) acc: 66.8; ap: 63.1; r_acc: 58.7; f_acc: 75.0 +2025-05-14 16:59:15,602 (20 Infinite-ID ) acc: 31.7; ap: 35.2; r_acc: 54.3; f_acc: 9.1 +2025-05-14 16:59:27,530 (21 WFIR ) acc: 53.8; ap: 53.0; r_acc: 66.3; f_acc: 40.2 +2025-05-14 17:00:16,807 (22 SimSwap ) acc: 66.4; ap: 58.3; r_acc: 47.0; f_acc: 86.0 +2025-05-14 17:01:35,003 (23 InstantID ) acc: 54.3; ap: 49.4; r_acc: 48.6; f_acc: 60.2 +2025-05-14 17:02:24,840 (24 StyleGAN3 ) acc: 61.8; ap: 64.6; r_acc: 58.6; f_acc: 65.0 +2025-05-14 17:02:24,840 (25 Mean ) acc: 58.4; ap: 56.3; r_acc: 53.8; f_acc: 63.0 +2025-05-14 17:02:24,840 ************************* +2025-05-03 01:54:19,936 Model_path /data/ziqiang/yjz/code/LGrad-master/CNNDetection/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_30_06_48_01/model_epoch_90.pth +2025-05-03 01:55:00,384 AIGIBench +2025-05-03 01:55:00,385 2025-05-03 01:55:00 +2025-05-03 01:57:00,192 (0 R3GAN ) acc: 54.4; ap: 58.7; r_acc: 84.8; f_acc: 23.6 +2025-05-03 01:58:12,403 (1 IP-Adapter ) acc: 70.3; ap: 78.3; r_acc: 85.5; f_acc: 54.9 +2025-05-03 01:59:17,505 (2 SocialRF ) acc: 53.5; ap: 54.9; r_acc: 83.7; f_acc: 22.2 +2025-05-03 02:01:20,551 (3 CommunityAI ) acc: 55.5; ap: 69.4; r_acc: 98.9; f_acc: 11.4 +2025-05-03 02:02:22,220 (4 StyleGAN-XL ) acc: 65.7; ap: 74.6; r_acc: 84.1; f_acc: 47.1 +2025-05-03 02:02:44,263 (5 Midjourney ) acc: 60.4; ap: 64.5; r_acc: 78.7; f_acc: 41.5 +2025-05-03 02:03:31,764 (6 FLUX1-dev ) acc: 80.4; ap: 88.1; r_acc: 84.1; f_acc: 76.6 +2025-05-03 02:04:33,198 (7 E4S ) acc: 41.5; ap: 32.8; r_acc: 82.1; f_acc: 0.5 +2025-05-03 02:05:58,215 (8 Imagen3 ) acc: 62.2; ap: 69.7; r_acc: 83.9; f_acc: 40.2 +2025-05-03 02:06:45,808 (9 BLIP ) acc: 93.0; ap: 97.4; r_acc: 89.4; f_acc: 96.6 +2025-05-03 02:07:47,120 (10 SDXL ) acc: 73.6; ap: 82.8; r_acc: 84.4; f_acc: 62.7 +2025-05-03 02:08:55,620 (11 DALLE-3 ) acc: 57.2; ap: 62.7; r_acc: 84.3; f_acc: 29.7 +2025-05-03 02:10:04,495 (12 GLIDE ) acc: 82.4; ap: 91.0; r_acc: 85.9; f_acc: 78.9 +2025-05-03 02:11:02,933 (13 InSwap ) acc: 44.6; ap: 35.0; r_acc: 86.2; f_acc: 1.3 +2025-05-03 02:12:05,995 (14 FaceSwap ) acc: 45.3; ap: 37.5; r_acc: 86.4; f_acc: 2.5 +2025-05-03 02:12:58,963 (15 StyleSwim ) acc: 81.3; ap: 90.0; r_acc: 85.6; f_acc: 77.0 +2025-05-03 02:13:38,528 (16 ProGAN ) acc: 96.6; ap: 99.8; r_acc: 99.2; f_acc: 94.1 +2025-05-03 02:14:41,410 (17 BlendFace ) acc: 41.8; ap: 34.9; r_acc: 80.9; f_acc: 2.4 +2025-05-03 02:15:49,592 (18 PhotoMaker ) acc: 59.9; ap: 67.2; r_acc: 85.0; f_acc: 34.6 +2025-05-03 02:17:12,556 (19 SD3 ) acc: 63.4; ap: 72.1; r_acc: 84.4; f_acc: 42.4 +2025-05-03 02:18:47,161 (20 Infinite-ID ) acc: 50.9; ap: 54.6; r_acc: 84.8; f_acc: 17.0 +2025-05-03 02:19:07,680 (21 WFIR ) acc: 51.7; ap: 49.4; r_acc: 83.4; f_acc: 17.2 +2025-05-03 02:19:50,652 (22 SimSwap ) acc: 44.2; ap: 37.6; r_acc: 85.8; f_acc: 2.3 +2025-05-03 02:20:43,358 (23 InstantID ) acc: 72.6; ap: 81.5; r_acc: 84.0; f_acc: 61.0 +2025-05-03 02:21:34,166 (24 StyleGAN3 ) acc: 70.5; ap: 80.5; r_acc: 88.2; f_acc: 52.6 +2025-05-03 02:21:34,166 (25 Mean ) acc: 62.9; ap: 66.6; r_acc: 85.8; f_acc: 39.6 +2025-05-03 02:21:34,166 ************************* +2025-05-04 05:22:14,426 Model_path /data/ziqiang/yjz/code/LGrad-master/CNNDetection/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_30_06_48_01/model_epoch_90.pth +2025-05-04 05:22:19,709 jpeg +2025-05-04 05:22:19,709 2025-05-04 05:22:19 +2025-05-04 05:22:56,515 (0 R3GAN ) acc: 48.5; ap: 37.7; r_acc: 96.2; f_acc: 0.2 +2025-05-04 05:23:32,842 (1 IP-Adapter ) acc: 56.6; ap: 71.5; r_acc: 95.9; f_acc: 16.9 +2025-05-04 05:23:57,401 (2 SocialRF ) acc: 51.9; ap: 52.1; r_acc: 93.6; f_acc: 8.4 +2025-05-04 05:24:45,811 (3 CommunityAI ) acc: 51.2; ap: 63.4; r_acc: 99.8; f_acc: 1.7 +2025-05-04 05:25:22,287 (4 StyleGAN-XL ) acc: 51.8; ap: 61.6; r_acc: 95.8; f_acc: 7.5 +2025-05-04 05:25:46,710 (5 Midjourney ) acc: 52.5; ap: 52.5; r_acc: 90.7; f_acc: 12.8 +2025-05-04 05:26:23,233 (6 FLUX1-dev ) acc: 53.2; ap: 65.5; r_acc: 96.0; f_acc: 10.1 +2025-05-04 05:26:59,944 (7 E4S ) acc: 47.2; ap: 32.6; r_acc: 93.9; f_acc: 0.0 +2025-05-04 05:27:36,489 (8 Imagen3 ) acc: 52.3; ap: 64.0; r_acc: 96.1; f_acc: 8.1 +2025-05-04 05:28:13,063 (9 BLIP ) acc: 50.4; ap: 59.4; r_acc: 99.0; f_acc: 1.3 +2025-05-04 05:28:49,362 (10 SDXL ) acc: 53.5; ap: 63.8; r_acc: 96.7; f_acc: 10.3 +2025-05-04 05:29:21,582 (11 DALLE-3 ) acc: 61.9; ap: 80.0; r_acc: 95.6; f_acc: 27.6 +2025-05-04 05:29:58,235 (12 GLIDE ) acc: 49.3; ap: 38.2; r_acc: 97.0; f_acc: 1.3 +2025-05-04 05:30:34,065 (13 InSwap ) acc: 49.5; ap: 33.9; r_acc: 97.0; f_acc: 0.0 +2025-05-04 05:31:09,910 (14 FaceSwap ) acc: 49.4; ap: 33.7; r_acc: 96.9; f_acc: 0.0 +2025-05-04 05:31:46,702 (15 StyleSwim ) acc: 54.0; ap: 68.1; r_acc: 96.1; f_acc: 11.5 +2025-05-04 05:32:19,927 (16 ProGAN ) acc: 50.5; ap: 50.4; r_acc: 98.4; f_acc: 1.9 +2025-05-04 05:32:56,410 (17 BlendFace ) acc: 47.5; ap: 33.7; r_acc: 94.5; f_acc: 0.3 +2025-05-04 05:33:32,652 (18 PhotoMaker ) acc: 52.7; ap: 60.0; r_acc: 96.1; f_acc: 8.8 +2025-05-04 05:34:09,771 (19 SD3 ) acc: 55.2; ap: 73.1; r_acc: 96.7; f_acc: 13.7 +2025-05-04 05:34:46,324 (20 Infinite-ID ) acc: 58.6; ap: 79.2; r_acc: 96.0; f_acc: 21.4 +2025-05-04 05:34:55,482 (21 WFIR ) acc: 51.5; ap: 49.3; r_acc: 89.5; f_acc: 10.1 +2025-05-04 05:35:31,541 (22 SimSwap ) acc: 49.0; ap: 37.7; r_acc: 97.2; f_acc: 0.3 +2025-05-04 05:36:07,984 (23 InstantID ) acc: 51.1; ap: 51.3; r_acc: 96.3; f_acc: 5.6 +2025-05-04 05:36:44,385 (24 StyleGAN3 ) acc: 50.1; ap: 53.3; r_acc: 96.5; f_acc: 3.3 +2025-05-04 05:36:44,385 (25 Mean ) acc: 52.0; ap: 54.6; r_acc: 95.9; f_acc: 7.3 +2025-05-04 05:36:44,386 ************************* +2025-05-04 05:36:44,386 noise +2025-05-04 05:36:44,386 2025-05-04 05:36:44 +2025-05-04 05:37:20,673 (0 R3GAN ) acc: 46.7; ap: 34.3; r_acc: 92.9; f_acc: 0.2 +2025-05-04 05:37:57,543 (1 IP-Adapter ) acc: 61.0; ap: 76.1; r_acc: 92.7; f_acc: 29.0 +2025-05-04 05:38:21,686 (2 SocialRF ) acc: 46.3; ap: 44.2; r_acc: 62.2; f_acc: 29.8 +2025-05-04 05:39:09,221 (3 CommunityAI ) acc: 61.0; ap: 88.4; r_acc: 98.8; f_acc: 22.6 +2025-05-04 05:39:42,711 (4 StyleGAN-XL ) acc: 56.0; ap: 68.4; r_acc: 92.6; f_acc: 19.0 +2025-05-04 05:40:05,866 (5 Midjourney ) acc: 53.2; ap: 54.6; r_acc: 83.3; f_acc: 21.8 +2025-05-04 05:40:41,757 (6 FLUX1-dev ) acc: 67.2; ap: 82.4; r_acc: 92.7; f_acc: 41.5 +2025-05-04 05:41:18,532 (7 E4S ) acc: 44.9; ap: 32.6; r_acc: 89.2; f_acc: 0.1 +2025-05-04 05:41:54,733 (8 Imagen3 ) acc: 58.7; ap: 72.8; r_acc: 92.5; f_acc: 24.6 +2025-05-04 05:42:31,907 (9 BLIP ) acc: 58.1; ap: 83.4; r_acc: 98.2; f_acc: 17.7 +2025-05-04 05:43:08,991 (10 SDXL ) acc: 58.5; ap: 74.6; r_acc: 93.6; f_acc: 23.3 +2025-05-04 05:43:41,660 (11 DALLE-3 ) acc: 59.7; ap: 74.1; r_acc: 92.8; f_acc: 25.9 +2025-05-04 05:44:18,677 (12 GLIDE ) acc: 48.3; ap: 39.1; r_acc: 95.3; f_acc: 0.9 +2025-05-04 05:44:54,806 (13 InSwap ) acc: 48.3; ap: 34.1; r_acc: 94.7; f_acc: 0.1 +2025-05-04 05:45:30,465 (14 FaceSwap ) acc: 48.7; ap: 33.7; r_acc: 95.4; f_acc: 0.1 +2025-05-04 05:46:05,898 (15 StyleSwim ) acc: 77.8; ap: 88.9; r_acc: 92.9; f_acc: 62.6 +2025-05-04 05:46:38,723 (16 ProGAN ) acc: 50.6; ap: 51.4; r_acc: 99.1; f_acc: 1.3 +2025-05-04 05:47:14,824 (17 BlendFace ) acc: 44.5; ap: 33.5; r_acc: 88.4; f_acc: 0.5 +2025-05-04 05:47:51,551 (18 PhotoMaker ) acc: 58.2; ap: 71.2; r_acc: 93.2; f_acc: 22.8 +2025-05-04 05:48:27,743 (19 SD3 ) acc: 56.3; ap: 71.6; r_acc: 93.8; f_acc: 18.8 +2025-05-04 05:49:05,075 (20 Infinite-ID ) acc: 51.9; ap: 62.2; r_acc: 93.2; f_acc: 10.6 +2025-05-04 05:49:13,143 (21 WFIR ) acc: 50.9; ap: 49.0; r_acc: 92.1; f_acc: 6.2 +2025-05-04 05:49:49,313 (22 SimSwap ) acc: 47.6; ap: 36.5; r_acc: 94.2; f_acc: 0.6 +2025-05-04 05:50:25,641 (23 InstantID ) acc: 67.2; ap: 82.4; r_acc: 92.7; f_acc: 41.5 +2025-05-04 05:51:01,876 (24 StyleGAN3 ) acc: 53.5; ap: 59.5; r_acc: 90.6; f_acc: 16.1 +2025-05-04 05:51:01,877 (25 Mean ) acc: 55.0; ap: 60.0; r_acc: 91.9; f_acc: 17.5 +2025-05-04 05:51:01,877 ************************* +2025-05-04 05:51:01,877 sample +2025-05-04 05:51:01,877 2025-05-04 05:51:01 +2025-05-04 05:51:37,289 (0 R3GAN ) acc: 94.7; ap: 99.2; r_acc: 89.8; f_acc: 99.6 +2025-05-04 05:52:12,622 (1 IP-Adapter ) acc: 74.4; ap: 85.2; r_acc: 89.1; f_acc: 59.6 +2025-05-04 05:52:36,062 (2 SocialRF ) acc: 53.9; ap: 55.4; r_acc: 84.2; f_acc: 22.3 +2025-05-04 05:53:23,951 (3 CommunityAI ) acc: 55.5; ap: 70.5; r_acc: 98.9; f_acc: 11.4 +2025-05-04 05:53:59,351 (4 StyleGAN-XL ) acc: 70.1; ap: 82.1; r_acc: 89.3; f_acc: 50.8 +2025-05-04 05:54:22,816 (5 Midjourney ) acc: 58.5; ap: 61.9; r_acc: 76.8; f_acc: 39.4 +2025-05-04 05:54:58,344 (6 FLUX1-dev ) acc: 81.7; ap: 90.6; r_acc: 89.9; f_acc: 73.5 +2025-05-04 05:55:33,863 (7 E4S ) acc: 73.6; ap: 83.6; r_acc: 85.3; f_acc: 61.8 +2025-05-04 05:56:09,302 (8 Imagen3 ) acc: 64.6; ap: 77.2; r_acc: 89.7; f_acc: 39.3 +2025-05-04 05:56:45,376 (9 BLIP ) acc: 90.9; ap: 98.2; r_acc: 96.7; f_acc: 85.1 +2025-05-04 05:57:20,757 (10 SDXL ) acc: 77.4; ap: 88.8; r_acc: 90.6; f_acc: 64.3 +2025-05-04 05:57:52,173 (11 DALLE-3 ) acc: 60.1; ap: 70.3; r_acc: 88.9; f_acc: 30.8 +2025-05-04 05:58:27,864 (12 GLIDE ) acc: 88.2; ap: 95.8; r_acc: 92.2; f_acc: 84.2 +2025-05-04 05:59:02,781 (13 InSwap ) acc: 83.8; ap: 93.2; r_acc: 92.2; f_acc: 75.0 +2025-05-04 05:59:37,702 (14 FaceSwap ) acc: 82.9; ap: 92.2; r_acc: 92.8; f_acc: 72.6 +2025-05-04 06:00:13,222 (15 StyleSwim ) acc: 84.7; ap: 93.7; r_acc: 89.9; f_acc: 79.4 +2025-05-04 06:00:44,699 (16 ProGAN ) acc: 66.1; ap: 68.8; r_acc: 34.5; f_acc: 98.1 +2025-05-04 06:01:21,067 (17 BlendFace ) acc: 78.2; ap: 87.6; r_acc: 83.5; f_acc: 72.8 +2025-05-04 06:01:56,695 (18 PhotoMaker ) acc: 64.4; ap: 76.3; r_acc: 90.3; f_acc: 38.3 +2025-05-04 06:02:32,157 (19 SD3 ) acc: 68.1; ap: 81.3; r_acc: 90.6; f_acc: 45.6 +2025-05-04 06:03:07,496 (20 Infinite-ID ) acc: 56.9; ap: 68.4; r_acc: 90.8; f_acc: 23.0 +2025-05-04 06:03:15,540 (21 WFIR ) acc: 51.9; ap: 50.5; r_acc: 87.1; f_acc: 13.6 +2025-05-04 06:03:51,128 (22 SimSwap ) acc: 85.5; ap: 94.2; r_acc: 92.0; f_acc: 78.9 +2025-05-04 06:04:26,542 (23 InstantID ) acc: 77.2; ap: 87.6; r_acc: 89.7; f_acc: 64.6 +2025-05-04 06:05:02,073 (24 StyleGAN3 ) acc: 55.7; ap: 53.8; r_acc: 66.7; f_acc: 44.6 +2025-05-04 06:05:02,074 (25 Mean ) acc: 72.0; ap: 80.3; r_acc: 86.5; f_acc: 57.2 +2025-05-04 06:05:02,074 ************************* diff --git a/detector_codes/LGrad-master/CNNDetection/networks/__init__.py b/detector_codes/LGrad-master/CNNDetection/networks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/LGrad-master/CNNDetection/networks/base_model.py b/detector_codes/LGrad-master/CNNDetection/networks/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..ab3b24f321faf879b249165627f0f440d393d2c9 --- /dev/null +++ b/detector_codes/LGrad-master/CNNDetection/networks/base_model.py @@ -0,0 +1,87 @@ +import os +import torch +import torch.nn as nn +from torch.nn import init +from torch.optim import lr_scheduler + + +class BaseModel(nn.Module): + def __init__(self, opt): + super(BaseModel, self).__init__() + self.opt = opt + self.total_steps = 0 + self.isTrain = opt.isTrain + self.lr = opt.lr + self.save_dir = os.path.join(opt.checkpoints_dir, opt.name) + self.device = torch.device('cuda:{}'.format(opt.gpu_ids[0])) if opt.gpu_ids else torch.device('cpu') + + def save_networks(self, epoch): + save_filename = 'model_epoch_%s.pth' % epoch + save_path = os.path.join(self.save_dir, save_filename) + + # serialize model and optimizer to dict + state_dict = { + 'model': self.model.state_dict(), + 'optimizer': self.optimizer.state_dict(), + 'total_steps': self.total_steps, + } + + torch.save(self.model.state_dict(), save_path) + print(f'Saving model {save_path}') + + # load models from the disk + def load_networks(self, epoch): + load_filename = 'model_epoch_%s.pth' % epoch + load_path = os.path.join(self.save_dir, load_filename) + + print('loading the model from %s' % load_path) + # if you are using PyTorch newer than 0.4 (e.g., built from + # GitHub source), you can remove str() on self.device + state_dict = torch.load(load_path, map_location=self.device) + if hasattr(state_dict, '_metadata'): + del state_dict._metadata + + self.model.load_state_dict(state_dict['model']) + self.total_steps = state_dict['total_steps'] + + if self.isTrain and not self.opt.new_optim: + self.optimizer.load_state_dict(state_dict['optimizer']) + # move optimizer state to GPU + for state in self.optimizer.state.values(): + for k, v in state.items(): + if torch.is_tensor(v): + state[k] = v.to(self.device) + + for g in self.optimizer.param_groups: + g['lr'] = self.opt.lr + + def eval(self): + self.model.eval() + + def test(self): + with torch.no_grad(): + self.forward() + + +def init_weights(net, init_type='normal', gain=0.02): + def init_func(m): + classname = m.__class__.__name__ + if hasattr(m, 'weight') and (classname.find('Conv') != -1 or classname.find('Linear') != -1): + if init_type == 'normal': + init.normal_(m.weight.data, 0.0, gain) + elif init_type == 'xavier': + init.xavier_normal_(m.weight.data, gain=gain) + elif init_type == 'kaiming': + init.kaiming_normal_(m.weight.data, a=0, mode='fan_in') + elif init_type == 'orthogonal': + init.orthogonal_(m.weight.data, gain=gain) + else: + raise NotImplementedError('initialization method [%s] is not implemented' % init_type) + if hasattr(m, 'bias') and m.bias is not None: + init.constant_(m.bias.data, 0.0) + elif classname.find('BatchNorm2d') != -1: + init.normal_(m.weight.data, 1.0, gain) + init.constant_(m.bias.data, 0.0) + + print('initialize network with %s' % init_type) + net.apply(init_func) diff --git a/detector_codes/LGrad-master/CNNDetection/networks/resnet.py b/detector_codes/LGrad-master/CNNDetection/networks/resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..24b7da07dd566c374c4d17f5875eb02946d0ec48 --- /dev/null +++ b/detector_codes/LGrad-master/CNNDetection/networks/resnet.py @@ -0,0 +1,219 @@ +import torch.nn as nn +import torch.utils.model_zoo as model_zoo + + +__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', + 'resnet152'] + + +model_urls = { + 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', + 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth', + 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth', + 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth', + 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', +} + + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=1, bias=False) + + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(BasicBlock, self).__init__() + self.conv1 = conv3x3(inplanes, planes, stride) + self.bn1 = nn.BatchNorm2d(planes) + self.relu = nn.ReLU(inplace=True) + self.conv2 = conv3x3(planes, planes) + self.bn2 = nn.BatchNorm2d(planes) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(Bottleneck, self).__init__() + self.conv1 = conv1x1(inplanes, planes) + self.bn1 = nn.BatchNorm2d(planes) + self.conv2 = conv3x3(planes, planes, stride) + self.bn2 = nn.BatchNorm2d(planes) + self.conv3 = conv1x1(planes, planes * self.expansion) + self.bn3 = nn.BatchNorm2d(planes * self.expansion) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class ResNet(nn.Module): + + def __init__(self, block, layers, num_classes=1000, zero_init_residual=False): + super(ResNet, self).__init__() + self.inplanes = 64 + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, + bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.fc = nn.Linear(512 * block.expansion, num_classes) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, nn.BatchNorm2d): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + + # Zero-initialize the last BN in each residual branch, + # so that the residual branch starts with zeros, and each residual block behaves like an identity. + # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + nn.init.constant_(m.bn3.weight, 0) + elif isinstance(m, BasicBlock): + nn.init.constant_(m.bn2.weight, 0) + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + conv1x1(self.inplanes, planes * block.expansion, stride), + nn.BatchNorm2d(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + + +def resnet18(pretrained=False, **kwargs): + """Constructs a ResNet-18 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [2, 2, 2, 2], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet18'])) + return model + + +def resnet34(pretrained=False, **kwargs): + """Constructs a ResNet-34 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet34'])) + return model + + +def resnet50(pretrained=False, **kwargs): + """Constructs a ResNet-50 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet50'])) + return model + + +def resnet101(pretrained=False, **kwargs): + """Constructs a ResNet-101 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 23, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet101'])) + return model + + +def resnet152(pretrained=False, **kwargs): + """Constructs a ResNet-152 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 8, 36, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet152'])) + return model diff --git a/detector_codes/LGrad-master/CNNDetection/networks/trainer.py b/detector_codes/LGrad-master/CNNDetection/networks/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..f83fb9b8d602f35f4b09205c98f0df293b45b007 --- /dev/null +++ b/detector_codes/LGrad-master/CNNDetection/networks/trainer.py @@ -0,0 +1,64 @@ +import functools +import torch +import torch.nn as nn +from networks.resnet import resnet50 +from networks.base_model import BaseModel, init_weights + + +class Trainer(BaseModel): + def name(self): + return 'Trainer' + + def __init__(self, opt): + super(Trainer, self).__init__(opt) + + if self.isTrain and not opt.continue_train: + self.model = resnet50(pretrained=False, num_classes=1) + + if not self.isTrain or opt.continue_train: + self.model = resnet50(num_classes=1) + + if self.isTrain: + self.loss_fn = nn.BCEWithLogitsLoss() + # initialize optimizers + if opt.optim == 'adam': + self.optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, betas=(opt.beta1, 0.999)) + elif opt.optim == 'sgd': + self.optimizer = torch.optim.SGD(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, momentum=0.0, weight_decay=0) + else: + raise ValueError("optim should be [adam, sgd]") + + if not self.isTrain or opt.continue_train: + self.load_networks(opt.epoch) + self.model.to(opt.gpu_ids[0]) + + def adjust_learning_rate(self, min_lr=1e-6): + for param_group in self.optimizer.param_groups: + param_group['lr'] *= 0.9 + if param_group['lr'] < min_lr: + return False + self.lr = param_group['lr'] + print('*' * 25) + print(f'Changing lr from {param_group["lr"] / 0.9} to {param_group["lr"]}') + print('*' * 25) + return True + + def set_input(self, input): + self.input = input[0].to(self.device) + self.label = input[1].to(self.device).float() + + def forward(self): + self.output = self.model(self.input) + return self.output + + def get_loss(self): + return self.loss_fn(self.output.squeeze(1), self.label) + + def optimize_parameters(self): + self.forward() + self.loss = self.loss_fn(self.output.squeeze(1), self.label) + self.optimizer.zero_grad() + self.loss.backward() + self.optimizer.step() diff --git a/detector_codes/LGrad-master/CNNDetection/options/__init__.py b/detector_codes/LGrad-master/CNNDetection/options/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/LGrad-master/CNNDetection/options/base_options.py b/detector_codes/LGrad-master/CNNDetection/options/base_options.py new file mode 100644 index 0000000000000000000000000000000000000000..a5a025d04568971444b82edc494f954ab22c2f0a --- /dev/null +++ b/detector_codes/LGrad-master/CNNDetection/options/base_options.py @@ -0,0 +1,116 @@ +import argparse +import os +import util +import torch +import time + + +class BaseOptions(): + def __init__(self): + self.initialized = False + + def initialize(self, parser): + parser.add_argument('--mode', default='binary') + parser.add_argument('--arch', type=str, default='resnet50') + + # data augmentation + parser.add_argument('--rz_interp', default='bilinear') + parser.add_argument('--blur_prob', type=float, default=0.5) + parser.add_argument('--blur_sig', default='0.0,3.0') + parser.add_argument('--jpg_prob', type=float, default=0.5) + parser.add_argument('--jpg_method', default='cv2') + parser.add_argument('--jpg_qual', default='30,100') + + parser.add_argument('--dataroot', default='./dataset/', help='path to images (should have subfolders trainA, trainB, valA, valB, etc)') + parser.add_argument('--classes', default='', help='image classes to train on') + + parser.add_argument('--class_bal', action='store_true') + parser.add_argument('--batch_size', type=int, default=128, help='input batch size') + parser.add_argument('--loadSize', type=int, default=256, help='scale images to this size') + parser.add_argument('--cropSize', type=int, default=224, help='then crop to this size') + parser.add_argument('--drop_last', type=bool, default=True, help='drop the last batchsize') + parser.add_argument('--gpu_ids', type=str, default='2', help='gpu ids: e.g. 0 0,1,2, 0,2. use -1 for CPU') + parser.add_argument('--name', type=str, default='experiment_name', help='name of the experiment. It decides where to store samples and models') + parser.add_argument('--num_threads', default=8, type=int, help='# threads for loading data') + parser.add_argument('--checkpoints_dir', type=str, default='./checkpoints', help='models are saved here') + parser.add_argument('--serial_batches', action='store_true', help='if true, takes images in order to make batches, otherwise takes them randomly') + parser.add_argument('--resize_or_crop', type=str, default='scale_and_crop', help='scaling and cropping of images at load time [resize_and_crop|crop|scale_width|scale_width_and_crop|none]') + parser.add_argument('--no_flip', action='store_true', help='if specified, do not flip the images for data augmentation') + parser.add_argument('--init_type', type=str, default='normal', help='network initialization [normal|xavier|kaiming|orthogonal]') + parser.add_argument('--init_gain', type=float, default=0.02, help='scaling factor for normal, xavier and orthogonal.') + parser.add_argument('--suffix', default='', type=str, help='customized suffix: opt.name = opt.name + suffix: e.g., {model}_{netG}_size{loadSize}') + parser.add_argument('--delr_freq', type=int, default=20, help='frequency of changing lr') + + self.initialized = True + return parser + + def gather_options(self): + # initialize parser with basic options + if not self.initialized: + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser = self.initialize(parser) + + # get the basic options + opt, _ = parser.parse_known_args() + self.parser = parser + + return opt # parser.parse_args() + + def print_options(self, opt): + message = '' + message += '----------------- Options ---------------\n' + for k, v in sorted(vars(opt).items()): + comment = '' + default = self.parser.get_default(k) + if v != default: + comment = '\t[default: %s]' % str(default) + message += '{:>25}: {:<30}{}\n'.format(str(k), str(v), comment) + message += '----------------- End -------------------' + print(message) + + # save to the disk + + expr_dir = os.path.join(opt.checkpoints_dir, opt.name) + util.mkdirs(expr_dir) + file_name = os.path.join(expr_dir, 'opt.txt') + with open(file_name, 'wt') as opt_file: + opt_file.write(message) + opt_file.write('\n') + + def parse(self, print_options=True): + + opt = self.gather_options() + opt.isTrain = self.isTrain # train or test + opt.name = opt.name + time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()) + # process opt.suffix + if opt.suffix: + suffix = ('_' + opt.suffix.format(**vars(opt))) if opt.suffix != '' else '' + opt.name = opt.name + suffix + + if print_options: + self.print_options(opt) + + # set gpu ids + str_ids = opt.gpu_ids.split(',') + opt.gpu_ids = [] + for str_id in str_ids: + id = int(str_id) + if id >= 0: + opt.gpu_ids.append(id) + if len(opt.gpu_ids) > 0: + torch.cuda.set_device(opt.gpu_ids[0]) + + # additional + opt.classes = opt.classes.split(',') + opt.rz_interp = opt.rz_interp.split(',') + opt.blur_sig = [float(s) for s in opt.blur_sig.split(',')] + opt.jpg_method = opt.jpg_method.split(',') + opt.jpg_qual = [int(s) for s in opt.jpg_qual.split(',')] + if len(opt.jpg_qual) == 2: + opt.jpg_qual = list(range(opt.jpg_qual[0], opt.jpg_qual[1] + 1)) + elif len(opt.jpg_qual) > 2: + raise ValueError("Shouldn't have more than 2 values for --jpg_qual.") + + self.opt = opt + return self.opt diff --git a/detector_codes/LGrad-master/CNNDetection/options/test_options.py b/detector_codes/LGrad-master/CNNDetection/options/test_options.py new file mode 100644 index 0000000000000000000000000000000000000000..64d5c9cb28c4ad6e3c17cff9a2e6b668a5be62df --- /dev/null +++ b/detector_codes/LGrad-master/CNNDetection/options/test_options.py @@ -0,0 +1,19 @@ +from .base_options import BaseOptions + + +class TestOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--model_path') + parser.add_argument('--no_resize', action='store_true') + parser.add_argument('--no_crop', action='store_true') + parser.add_argument('--eval', action='store_true', help='use eval mode during test time.') + + parser.add_argument("--kd", default=True) + parser.add_argument("--kd_weight", default=1, type=int) + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--lr', type=float, default=0.00002, help='initial learning rate for adam') + parser.add_argument('--niter', type=int, default=0, help='# of iter at starting learning rate') + + self.isTrain = False + return parser diff --git a/detector_codes/LGrad-master/CNNDetection/options/train_options.py b/detector_codes/LGrad-master/CNNDetection/options/train_options.py new file mode 100644 index 0000000000000000000000000000000000000000..4728077fd97cd7dd74fcdb1af6e09c5e66042a13 --- /dev/null +++ b/detector_codes/LGrad-master/CNNDetection/options/train_options.py @@ -0,0 +1,41 @@ +from .base_options import BaseOptions + + +class TrainOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--data_aug', action='store_true', help='if specified, perform additional data augmentation (photometric, blurring, jpegging)') + parser.add_argument('--optim', type=str, default='adam', help='optim to use [sgd, adam]') + parser.add_argument('--new_optim', action='store_true', help='new optimizer instead of loading the optim state') + parser.add_argument('--loss_freq', type=int, default=400, help='frequency of showing loss on tensorboard') + parser.add_argument('--save_latest_freq', type=int, default=101, help='frequency of saving the latest results') + parser.add_argument('--save_epoch_freq', type=int, default=5, help='frequency of saving checkpoints at the end of epochs') + parser.add_argument('--continue_train', action='store_true', help='continue training: load the latest model') + parser.add_argument('--epoch_count', type=int, default=10, help='the starting epoch count, we save the model by , +, ...') + parser.add_argument('--last_epoch', type=int, default=-1, help='starting epoch count for scheduler intialization') + parser.add_argument('--train_split', type=str, default='train', help='train, val, test, etc') + parser.add_argument('--val_split', type=str, default='val', help='train, val, test, etc') + parser.add_argument('--niter', type=int, default=101, help='total epoches') + parser.add_argument('--beta1', type=float, default=0.9, help='momentum term of adam') + parser.add_argument('--lr', type=float, default=0.0001, help='initial learning rate for adam') + + parser.add_argument("--kd", default=True, type=str2bool) + parser.add_argument("--kd_weight", default=1, type=int) + # parser.add_argument('--model_path') + # parser.add_argument('--no_resize', action='store_true') + # parser.add_argument('--no_crop', action='store_true') + + self.isTrain = True + return parser + + +def str2bool(v: str) -> bool: + if isinstance(v, bool): + return v + elif v.lower() in ("true", "yes", "on", "y", "t", "1"): + return True + elif v.lower() in ("false", "no", "off", "n", "f", "0"): + return False + else: + return bool(v) diff --git a/detector_codes/LGrad-master/CNNDetection/test.py b/detector_codes/LGrad-master/CNNDetection/test.py new file mode 100644 index 0000000000000000000000000000000000000000..f39e1172db23accd311928fcd1feae1f5f6e1261 --- /dev/null +++ b/detector_codes/LGrad-master/CNNDetection/test.py @@ -0,0 +1,101 @@ +import sys +import time +import os +import csv +import torch +import logging +from util import Logger, printSet +from validate import validate +from networks.resnet import resnet50 +from options.test_options import TestOptions +import networks.resnet as resnet +from data import create_dataloader +import numpy as np +import random + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if you are using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + +seed_torch(100) + +DetectionTests = { + # 'AIGIBench': { 'dataroot': '/data/ziqiang/Benchmark-LGrad', + # 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + # 'no_crop': True, + # }, + 'jpeg': { 'dataroot': '/data/ziqiang/jpeg-LGrad', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'noise': { 'dataroot': '/data/ziqiang/noise-LGrad', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'sample': { 'dataroot': '/data/ziqiang/sample-LGrad', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, +} + +# Set up logging +logging.basicConfig(filename='log_test.log', level=logging.INFO, format='%(asctime)s %(message)s') +logger = logging.getLogger() + +opt = TestOptions().parse(print_options=False) +log_msg = f'Model_path {opt.model_path}' +print(log_msg) +logger.info(log_msg) + +# Get model +model = resnet50(num_classes=1) +model.load_state_dict(torch.load(opt.model_path, map_location=torch.device('cuda:2')), strict=True) +model.cuda() +model.eval() + +for testSet in DetectionTests.keys(): + dataroot = DetectionTests[testSet]['dataroot'] + printSet(testSet) + logger.info(testSet) + + accs = [] + aps = [] + r_accs = [] + f_accs = [] + current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + print(current_time) + logger.info(current_time) + + for v_id, val in enumerate(os.listdir(dataroot)): + opt.dataroot = '{}/{}'.format(dataroot, val) + opt.classes = '' # os.listdir(opt.dataroot) if multiclass[v_id] else [''] + opt.no_resize = DetectionTests[testSet]['no_resize'] + opt.no_crop = DetectionTests[testSet]['no_crop'] + dataloader = create_dataloader(opt) + acc, ap, r_acc, f_acc = validate(model, dataloader) + accs.append(acc) + aps.append(ap) + r_accs.append(r_acc) + f_accs.append(f_acc) + log_msg = "({} {:12}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}" \ + .format(v_id, val, acc * 100, ap * 100, r_acc * 100, f_acc * 100) + print(log_msg) + logger.info(log_msg) + + mean_acc = np.array(accs).mean() * 100 + mean_ap = np.array(aps).mean() * 100 + mean_r_acc = np.array(r_accs).mean() * 100 + mean_f_acc = np.array(f_accs).mean() * 100 + log_msg = "({} {:10}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}" \ + .format(v_id + 1, 'Mean', mean_acc, mean_ap, mean_r_acc, mean_f_acc) + print(log_msg) + logger.info(log_msg) + print('*' * 25) + logger.info('*' * 25) diff --git a/detector_codes/LGrad-master/CNNDetection/train.py b/detector_codes/LGrad-master/CNNDetection/train.py new file mode 100644 index 0000000000000000000000000000000000000000..b75fad493fe3b99e7a4bc099478e2959b6470368 --- /dev/null +++ b/detector_codes/LGrad-master/CNNDetection/train.py @@ -0,0 +1,107 @@ +import os +import sys +import time +import torch +from tensorboardX import SummaryWriter +import numpy as np +from validate import validate +from data import create_dataloader +from networks.trainer import Trainer +from options.train_options import TrainOptions +from util import Logger, EarlyStopping +import random +import logging + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +def get_val_opt(): + val_opt = TrainOptions().parse(print_options=False) + val_opt.isTrain = False + val_opt.no_resize = False + val_opt.no_crop = False + val_opt.serial_batches = True + return val_opt + + +if __name__ == '__main__': + opt = TrainOptions().parse() + seed_torch(100) + opt.dataroot = f'{opt.dataroot}/{opt.train_split}/' + Logger(os.path.join(opt.checkpoints_dir, opt.name, 'logging.log')) + print(' '.join(list(sys.argv))) + val_opt = get_val_opt() + val_opt.dataroot = f'{val_opt.dataroot}/{val_opt.val_split}/' + + data_loader = create_dataloader(opt) + val_loader = create_dataloader(val_opt) + + train_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, "train")) + val_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, "val")) + + model = Trainer(opt) + model.train() + + early_stopping = EarlyStopping(patience=opt.earlystop_epoch, delta=-0.001, verbose=True) + + # Configure logger + logging.basicConfig(level=logging.INFO, # Set logging level + format='%(asctime)s - %(levelname)s - %(message)s', # Log format + datefmt='%Y-%m-%d %H:%M:%S', # Date format without milliseconds + handlers=[logging.FileHandler('log.log', mode='w'), # Log file output + logging.StreamHandler()]) # Console output + + logger = logging.getLogger(__name__) + + print(f'cwd: {os.getcwd()}') + print(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} Length of data loader: {len(data_loader)}") + logger.info(f"Length of data loader: {len(data_loader)}") + + for epoch in range(opt.niter): + for i, data in enumerate(data_loader): + model.total_steps += 1 + + # Move data to cuda + model.set_input(data) + # Train + model.optimize_parameters() + + if model.total_steps % opt.loss_freq == 0: + print(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}") + logger.info(f"Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}") + train_writer.add_scalar('loss', model.loss, model.total_steps) + + if epoch % opt.save_epoch_freq == 0 and epoch != 0: + # Optionally save model at each epoch + print(f'saving the model at the end of epoch {epoch}') + logger.info(f'saving the model at the end of epoch {epoch}') + model.save_networks(epoch) + + if epoch % 10 == 0 and epoch != 0: + print(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} changing lr at the end of epoch {epoch}, iters {model.total_steps}") + logger.info(f"changing lr at the end of epoch {epoch}, iters {model.total_steps}") + model.adjust_learning_rate() + + # Validation + model.eval() + acc, ap, r_acc, f_acc = validate(model.model, val_loader) + val_writer.add_scalar('accuracy', acc, model.total_steps) + val_writer.add_scalar('ap', ap, model.total_steps) + print(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} (Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}") + logger.info(f"(Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}") + + model.train() + + model.eval() + model.save_networks('last') + diff --git a/detector_codes/LGrad-master/CNNDetection/util.py b/detector_codes/LGrad-master/CNNDetection/util.py new file mode 100644 index 0000000000000000000000000000000000000000..5d59a729e3753fd5c1acd7b1efcef1f5f0bfa5a7 --- /dev/null +++ b/detector_codes/LGrad-master/CNNDetection/util.py @@ -0,0 +1,93 @@ +import sys +import os +import torch +import numpy as np + + +def mkdirs(paths): + if isinstance(paths, list) and not isinstance(paths, str): + for path in paths: + mkdir(path) + else: + mkdir(paths) + + +def mkdir(path): + if not os.path.exists(path): + os.makedirs(path) + + +def unnormalize(tens, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]): + # assume tensor of shape NxCxHxW + return tens * torch.Tensor(std)[None, :, None, None] + torch.Tensor( + mean)[None, :, None, None] + + +# 重定向 sys.stdout 输出到一个指定的文件,同时保持在终端显示 +class Logger(object): + """Log stdout messages.""" + + def __init__(self, outfile): + self.terminal = sys.stdout # 保存当前标准输出流 + self.log = open(outfile, "a") # 打开指定的日志文件 outfile,以追加模式 (a) 打开 + # 将标准输出流重定向到 Logger 实例,这样所有的 print 语句和标准输出内容都会通过 Logger 的 write 方法 + sys.stdout = self + + def write(self, message): + self.terminal.write(message) # 将消息写到终端(标准输出) + self.log.write(message) # 将消息写到日志文件 + + def flush(self): + self.terminal.flush() # 刷新终端的输出缓冲区,确保所有输出都及时显示 + + +class EarlyStopping: + """Early stops the training if validation loss doesn't improve after a given patience.""" + def __init__(self, patience=7, verbose=False, delta=0): + """ + Args: + patience (int): How long to wait after last time validation loss improved. + Default: 7 + verbose (bool): If True, prints a message for each validation loss improvement. + Default: False + delta (float): Minimum change in the monitored quantity to qualify as an improvement. + Default: 0 + """ + self.patience = patience + self.verbose = verbose + self.counter = 0 + self.best_score = None + self.early_stop = False + self.val_loss_min = np.Inf + self.delta = delta + + def __call__(self, val_loss, model): + + score = -val_loss + + if self.best_score is None: + self.best_score = score + self.save_checkpoint(val_loss, model) + elif score < self.best_score + self.delta: + self.counter += 1 + print(f'EarlyStopping counter: {self.counter} out of {self.patience}') + if self.counter >= self.patience: + self.early_stop = True + else: + self.best_score = score + self.save_checkpoint(val_loss, model) + self.counter = 0 + + def save_checkpoint(self, val_loss, model): + '''Saves model when validation loss decrease.''' + if self.verbose: + print(f'Validation loss decreased ({self.val_loss_min:.6f} --> {val_loss:.6f}). Saving model ...') + self.val_loss_min = val_loss + + +def printSet(set_str): + set_str = str(set_str) + num = len(set_str) + print("="*num*3) + print(" "*num + set_str) + print("="*num*3) diff --git a/detector_codes/LGrad-master/CNNDetection/validate.py b/detector_codes/LGrad-master/CNNDetection/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..b24fdfcc4ca63ec0d5639ff22493f457309a0c9f --- /dev/null +++ b/detector_codes/LGrad-master/CNNDetection/validate.py @@ -0,0 +1,23 @@ +import torch +import numpy as np +from sklearn.metrics import average_precision_score, accuracy_score +from options.test_options import TestOptions +from data import create_dataloader + + +def validate(model, val_loader): + # data_loader = create_dataloader(opt) + + with torch.no_grad(): + y_true, y_pred = [], [] + for img, label in val_loader: + in_tens = img.cuda() + y_pred.extend(model(in_tens).sigmoid().flatten().tolist()) + y_true.extend(label.flatten().tolist()) + + y_true, y_pred = np.array(y_true), np.array(y_pred) + r_acc = accuracy_score(y_true[y_true==0], y_pred[y_true==0] > 0.5) + f_acc = accuracy_score(y_true[y_true==1], y_pred[y_true==1] > 0.5) + acc = accuracy_score(y_true, y_pred > 0.5) + ap = average_precision_score(y_true, y_pred) + return acc, ap, r_acc, f_acc diff --git a/detector_codes/LGrad-master/img2gad_pytorch/README.md b/detector_codes/LGrad-master/img2gad_pytorch/README.md new file mode 100644 index 0000000000000000000000000000000000000000..94236f848ec4cd7980321927f543d08809338fe8 --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/README.md @@ -0,0 +1,17 @@ + +# Model Converters +We convert pre-trained tensorflow model to pytorch model, using [Converter](https://github.com/genforce/genforce/tree/master/converters) of [enforce](https://github.com/genforce/genforce). + +## Usage + +The script to transform image to gradients using pytorch model: + +```shell +wget https://lid-1302259812.cos.ap-nanjing.myqcloud.com/tmp/karras2019stylegan-bedrooms-256x256_discriminator.pth -O karras2019stylegan-bedrooms-256x256_discriminator.pth + +sh ./transform_img2grad_pytorch.sh 1 /home/nas/yanjiazhen/dataset/2_upsample/ForenSynths /home/nas/yanjiazhen/dataset/img2gad_pytorch/test_up +``` + + + + diff --git a/detector_codes/LGrad-master/img2gad_pytorch/gen_imggrad.py b/detector_codes/LGrad-master/img2gad_pytorch/gen_imggrad.py new file mode 100644 index 0000000000000000000000000000000000000000..15a4b29ec08357bea208085940e990323712c495 --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/gen_imggrad.py @@ -0,0 +1,141 @@ +import os +import sys +from glob import glob + +import cv2 +import PIL.Image +import torch +from models import build_model +from torchvision import transforms + +processimg = transforms.Compose( + [ + transforms.Resize((256, 256)), + transforms.ToTensor(), + transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]), + # transforms.Normalize(mean=[0.485, 0.456, 0.406], + # std=[0.229, 0.224, 0.225]) + ] +) + + +def read_batchimg(imgpath_list): + img_list = [] + for imgpath in imgpath_list: + # torch.unsqueeze(..., 0) 在第0维度上增加一个维度,使图像张量从[C, H, W] 变为[1, C, H, W] + img_list.append( + torch.unsqueeze(processimg(PIL.Image.open(imgpath).convert('RGB')), 0) + ) + # 在第0维度上将所有图像张量拼接起来,形成一个批处理张量,形状为 [N, C, H, W],其中 N 是图像数量 + return torch.cat(img_list, 0) + + +def normlize_np(img): + img -= img.min() + if img.max() != 0: + img /= img.max() + return img * 255.0 + + +# 获取图片地址 +def get_imglist(path): + ext = [ + '.jpg', + '.bmp', + '.png', + '.jpeg', + '.webp', + '.JPEG', + '.PNG', + ] # Add image formats here + files = [] + # [files.extend(glob(os.path.join(path, f'*{e}'))) for e in ext] + for e in ext: + pattern = os.path.join(path, f'*{e}') + matched_files = glob(pattern) + # Convert backslashes to forward slashes + matched_files = [f.replace('\\', '/') for f in matched_files] + files.extend(matched_files) + return sorted(files) + + +# 生成梯度图片 +def generate_images(): + # 运行参数 + imgdir = sys.argv[1] + outdir = sys.argv[2] + modelpath = sys.argv[3] + batch_size = int(sys.argv[4]) if len(sys.argv) > 4 else 1 + print(f'Transform {imgdir} to {outdir}') + os.makedirs(outdir, exist_ok=True) + # 预训练模型 + model = build_model( + gan_type='stylegan', + module='discriminator', + resolution=256, + label_size=0, + # minibatch_std_group_size = 1, + image_channels=3, + ) + model.load_state_dict(torch.load(modelpath), strict=True) + + model.cuda() + model.eval() + + imgnames_list = get_imglist(imgdir) + if len(imgnames_list) == 0: + exit() + + num_items = len(imgnames_list) + print(f'From {imgdir} read {num_items} Img') + minibatch_size = int(batch_size) + numnow = 0 + + for mb_begin in range(0, num_items, minibatch_size): + # 这是minibatch_size个图片的切片组 + imgname_list = imgnames_list[ + mb_begin : min(mb_begin + minibatch_size, num_items) + ] + # 将图片组变成tensor的[N, C, H, W]类型 + imgs_np = read_batchimg(imgname_list) + tmpminibatch = len(imgname_list) + img_cuda = imgs_np.cuda().to(torch.float32) + img_cuda.requires_grad = True + pre = model(img_cuda) + model.zero_grad() + # 计算输入图像的梯度 + # pre.sum()是求和,也就是pre的标量值,就是输出值,img_cuda是输入值,(就是y是ore.sum(), x是img_cuda,dydx) + # create_graph=True:创建一个计算图,以便进一步计算高阶梯度 + # retain_graph=True:保留计算图,以便在同一个批次中多次使用 + # allow_unused=False:如果某些变量没有被使用,抛出错误 + grad = torch.autograd.grad( + pre.sum(), + img_cuda, + create_graph=True, + retain_graph=True, + allow_unused=False, + )[0] + for idx in range(tmpminibatch): + numnow += 1 + # permute(1, 2, 0) 将张量的维度从 (C, H, W) 转换为 (H, W, C) + # .detach() 用于分离计算图,以防止对其进行进一步的操作会影响梯度计算和反向传播 + img = normlize_np(grad[idx].permute(1, 2, 0).cpu().detach().numpy()) + print( + f'Gen grad to {os.path.join(outdir, imgname_list[idx].split("/")[-1])}, bs:{minibatch_size} {numnow}/{num_items}', + end='\r', + ) + cv2.imwrite( + os.path.join( + outdir, imgname_list[idx].split('/')[-1].split('.')[0] + '.png' + ), + img[..., ::-1], + ) + print() + + +# ---------------------------------------------------------------------------- + +if __name__ == '__main__': + generate_images() # pylint: disable=no-value-for-parameter + +# ---------------------------------------------------------------------------- diff --git a/detector_codes/LGrad-master/img2gad_pytorch/models/__init__.py b/detector_codes/LGrad-master/img2gad_pytorch/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..28f3a2a9bad488c124ad93592ef8b2bb0b1b05ac --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/models/__init__.py @@ -0,0 +1,131 @@ +# python3.7 +"""Collects all available models together.""" + +from .model_zoo import MODEL_ZOO +from .pggan_generator import PGGANGenerator +from .pggan_discriminator import PGGANDiscriminator +from .stylegan_generator import StyleGANGenerator +from .stylegan_discriminator import StyleGANDiscriminator +from .stylegan2_generator import StyleGAN2Generator +from .stylegan2_discriminator import StyleGAN2Discriminator +from .encoder import EncoderNet +from .perceptual_model import PerceptualModel + +__all__ = [ + 'MODEL_ZOO', 'PGGANGenerator', 'PGGANDiscriminator', 'StyleGANGenerator', + 'StyleGANDiscriminator', 'StyleGAN2Generator', 'StyleGAN2Discriminator', + 'EncoderNet', 'PerceptualModel', 'build_generator', 'build_discriminator', + 'build_encoder', 'build_perceptual', 'build_model' +] + +_GAN_TYPES_ALLOWED = ['pggan', 'stylegan', 'stylegan2'] +_MODULES_ALLOWED = ['generator', 'discriminator', 'encoder', 'perceptual'] + + +def build_generator(gan_type, resolution, **kwargs): + """Builds generator by GAN type. + + Args: + gan_type: GAN type to which the generator belong. + resolution: Synthesis resolution. + **kwargs: Additional arguments to build the generator. + + Raises: + ValueError: If the `gan_type` is not supported. + NotImplementedError: If the `gan_type` is not implemented. + """ + if gan_type not in _GAN_TYPES_ALLOWED: + raise ValueError(f'Invalid GAN type: `{gan_type}`!\n' + f'Types allowed: {_GAN_TYPES_ALLOWED}.') + + if gan_type == 'pggan': + return PGGANGenerator(resolution, **kwargs) + if gan_type == 'stylegan': + return StyleGANGenerator(resolution, **kwargs) + if gan_type == 'stylegan2': + return StyleGAN2Generator(resolution, **kwargs) + raise NotImplementedError(f'Unsupported GAN type `{gan_type}`!') + + +def build_discriminator(gan_type, resolution, **kwargs): + """Builds discriminator by GAN type. + + Args: + gan_type: GAN type to which the discriminator belong. + resolution: Synthesis resolution. + **kwargs: Additional arguments to build the discriminator. + + Raises: + ValueError: If the `gan_type` is not supported. + NotImplementedError: If the `gan_type` is not implemented. + """ + if gan_type not in _GAN_TYPES_ALLOWED: + raise ValueError(f'Invalid GAN type: `{gan_type}`!\n' + f'Types allowed: {_GAN_TYPES_ALLOWED}.') + + if gan_type == 'pggan': + return PGGANDiscriminator(resolution, **kwargs) + if gan_type == 'stylegan': + return StyleGANDiscriminator(resolution, **kwargs) + if gan_type == 'stylegan2': + return StyleGAN2Discriminator(resolution, **kwargs) + raise NotImplementedError(f'Unsupported GAN type `{gan_type}`!') + + +def build_encoder(gan_type, resolution, **kwargs): + """Builds encoder by GAN type. + + Args: + gan_type: GAN type to which the encoder belong. + resolution: Input resolution for encoder. + **kwargs: Additional arguments to build the encoder. + + Raises: + ValueError: If the `gan_type` is not supported. + NotImplementedError: If the `gan_type` is not implemented. + """ + if gan_type not in _GAN_TYPES_ALLOWED: + raise ValueError(f'Invalid GAN type: `{gan_type}`!\n' + f'Types allowed: {_GAN_TYPES_ALLOWED}.') + + if gan_type in ['stylegan', 'stylegan2']: + return EncoderNet(resolution, **kwargs) + + raise NotImplementedError(f'Unsupported GAN type `{gan_type}` for encoder!') + + +def build_perceptual(**kwargs): + """Builds perceptual model. + + Args: + **kwargs: Additional arguments to build the encoder. + """ + return PerceptualModel(**kwargs) + + +def build_model(gan_type, module, resolution, **kwargs): + """Builds a GAN module (generator/discriminator/etc). + + Args: + gan_type: GAN type to which the model belong. + module: GAN module to build, such as generator or discrimiantor. + resolution: Synthesis resolution. + **kwargs: Additional arguments to build the discriminator. + + Raises: + ValueError: If the `module` is not supported. + NotImplementedError: If the `module` is not implemented. + """ + if module not in _MODULES_ALLOWED: + raise ValueError(f'Invalid module: `{module}`!\n' + f'Modules allowed: {_MODULES_ALLOWED}.') + + if module == 'generator': + return build_generator(gan_type, resolution, **kwargs) + if module == 'discriminator': + return build_discriminator(gan_type, resolution, **kwargs) + if module == 'encoder': + return build_encoder(gan_type, resolution, **kwargs) + if module == 'perceptual': + return build_perceptual(**kwargs) + raise NotImplementedError(f'Unsupported module `{module}`!') diff --git a/detector_codes/LGrad-master/img2gad_pytorch/models/encoder.py b/detector_codes/LGrad-master/img2gad_pytorch/models/encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..6527ab37ed3854832a6b2ee0f949519ee39cd91f --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/models/encoder.py @@ -0,0 +1,538 @@ +# python 3.7 +"""Contains the implementation of encoder network for GAN inversion. + +The network structure is primarily based on ResNet. The implementation is +modified from `torchvision.models.resnet`. +""" + +import numpy as np + +import torch +import torch.nn as nn +import torch.nn.functional as F + +__all__ = ['EncoderNet'] + +# Resolutions allowed. +_RESOLUTIONS_ALLOWED = [8, 16, 32, 64, 128, 256, 512, 1024] + +# Final resolution. +_FINAL_RES = 4 + +class BasicBlock(nn.Module): + """Implementation of ResNet BasicBlock.""" + + expansion = 1 + + def __init__(self, + inplanes, + planes, + base_width=64, + stride=1, + groups=1, + dilation=1, + norm_layer=None, + downsample=None): + super().__init__() + if base_width != 64: + raise ValueError(f'BasicBlock of ResNet only supports ' + f'`base_width=64`, but {base_width} received!') + if stride not in [1, 2]: + raise ValueError(f'BasicBlock of ResNet only supports `stride=1` ' + f'and `stride=2`, but {stride} received!') + if groups != 1: + raise ValueError(f'BasicBlock of ResNet only supports `groups=1`, ' + f'but {groups} received!') + if dilation != 1: + raise ValueError(f'BasicBlock of ResNet only supports ' + f'`dilation=1`, but {dilation} received!') + + self.stride = stride + if norm_layer is None: + norm_layer = nn.BatchNorm2d + self.conv1 = nn.Conv2d(in_channels=inplanes, + out_channels=planes, + kernel_size=3, + stride=stride, + padding=1, + groups=1, + dilation=1, + bias=False) + self.bn1 = norm_layer(planes) + self.relu = nn.ReLU(inplace=True) + self.conv2 = nn.Conv2d(in_channels=planes, + out_channels=planes, + kernel_size=3, + stride=1, + padding=1, + groups=1, + dilation=1, + bias=False) + self.bn2 = norm_layer(planes) + self.downsample = downsample + + def forward(self, x): + identity = self.downsample(x) if self.downsample is not None else x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out + identity) + + return out + + +class Bottleneck(nn.Module): + """Implementation of ResNet Bottleneck.""" + + expansion = 4 + + def __init__(self, + inplanes, + planes, + base_width=64, + stride=1, + groups=1, + dilation=1, + norm_layer=None, + downsample=None): + super().__init__() + if stride not in [1, 2]: + raise ValueError(f'Bottlenet of ResNet only supports `stride=1` ' + f'and `stride=2`, but {stride} received!') + + width = int(planes * (base_width / 64)) * groups + self.stride = stride + if norm_layer is None: + norm_layer = nn.BatchNorm2d + self.conv1 = nn.Conv2d(in_channels=inplanes, + out_channels=width, + kernel_size=1, + stride=1, + padding=0, + dilation=1, + groups=1, + bias=False) + self.bn1 = norm_layer(width) + self.conv2 = nn.Conv2d(in_channels=width, + out_channels=width, + kernel_size=3, + stride=stride, + padding=dilation, + groups=groups, + dilation=dilation, + bias=False) + self.bn2 = norm_layer(width) + self.conv3 = nn.Conv2d(in_channels=width, + out_channels=planes * self.expansion, + kernel_size=1, + stride=1, + padding=0, + dilation=1, + groups=1, + bias=False) + self.bn3 = norm_layer(planes * self.expansion) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + + def forward(self, x): + identity = self.downsample(x) if self.downsample is not None else x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + out = self.relu(out + identity) + + return out + + +class FPN(nn.Module): + """Implementation of Feature Pyramid Network (FPN). + + The input of this module is a pyramid of features with reducing resolutions. + Then, this module fuses these multi-level features from `top_level` to + `bottom_level`. In particular, starting from the `top_level`, each feature + is convoluted, upsampled, and fused into its previous feature (which is also + convoluted). + + Args: + pyramid_channels: A list of integers, each of which indicates the number + of channels of the feature from a particular level. + out_channels: Number of channels for each output. + + Returns: + A list of feature maps, each of which has `out_channels` channels. + """ + + def __init__(self, pyramid_channels, out_channels): + super().__init__() + assert isinstance(pyramid_channels, (list, tuple)) + self.num_levels = len(pyramid_channels) + + self.lateral_conv_list = nn.ModuleList() + self.feature_conv_list = nn.ModuleList() + for i in range(self.num_levels): + in_channels = pyramid_channels[i] + self.lateral_conv_list.append(nn.Conv2d(in_channels=in_channels, + out_channels=out_channels, + kernel_size=3, + padding=1, + bias=True)) + self.feature_conv_list.append(nn.Conv2d(in_channels=out_channels, + out_channels=out_channels, + kernel_size=3, + padding=1, + bias=True)) + + def forward(self, inputs): + if len(inputs) != self.num_levels: + raise ValueError('Number of inputs and `num_levels` mismatch!') + + # Project all related features to `out_channels`. + laterals = [] + for i in range(self.num_levels): + laterals.append(self.lateral_conv_list[i](inputs[i])) + + # Fusion, starting from `top_level`. + for i in range(self.num_levels - 1, 0, -1): + scale_factor = laterals[i - 1].shape[2] // laterals[i].shape[2] + laterals[i - 1] = (laterals[i - 1] + + F.interpolate(laterals[i], + mode='nearest', + scale_factor=scale_factor)) + + # Get outputs. + outputs = [] + for i, lateral in enumerate(laterals): + outputs.append(self.feature_conv_list[i](lateral)) + + return outputs + + +class SAM(nn.Module): + """Implementation of Spatial Alignment Module (SAM). + + The input of this module is a pyramid of features with reducing resolutions. + Then this module downsamples all levels of feature to the minimum resolution + and fuses it with the smallest feature map. + + Args: + pyramid_channels: A list of integers, each of which indicates the number + of channels of the feature from a particular level. + out_channels: Number of channels for each output. + + Returns: + A list of feature maps, each of which has `out_channels` channels. + """ + + def __init__(self, pyramid_channels, out_channels): + super().__init__() + assert isinstance(pyramid_channels, (list, tuple)) + self.num_levels = len(pyramid_channels) + + self.fusion_conv_list = nn.ModuleList() + for i in range(self.num_levels): + in_channels = pyramid_channels[i] + self.fusion_conv_list.append(nn.Conv2d(in_channels=in_channels, + out_channels=out_channels, + kernel_size=3, + padding=1, + bias=True)) + + def forward(self, inputs): + if len(inputs) != self.num_levels: + raise ValueError('Number of inputs and `num_levels` mismatch!') + + output_res = inputs[-1].shape[2:] + for i in range(self.num_levels - 1, -1, -1): + if i != self.num_levels - 1: + inputs[i] = F.adaptive_avg_pool2d(inputs[i], output_res) + inputs[i] = self.fusion_conv_list[i](inputs[i]) + if i != self.num_levels - 1: + inputs[i] = inputs[i] + inputs[-1] + + return inputs + + +class CodeHead(nn.Module): + """Implementation of the task-head to produce inverted codes.""" + + def __init__(self, in_channels, out_channels, norm_layer=nn.BatchNorm2d): + super().__init__() + self.fc = nn.Linear(in_channels, out_channels, bias=True) + if norm_layer is None: + self.norm = nn.Identity() + else: + self.norm = norm_layer(out_channels) + + def forward(self, x): + if x.ndim > 2: + x = x.flatten(start_dim=1) + latent = self.fc(x) + latent = latent.unsqueeze(2).unsqueeze(3) + latent = self.norm(latent) + + return latent.flatten(start_dim=1) + +class EncoderNet(nn.Module): + """Define the ResNet-based encoder network for GAN inversion. + + On top of the backbone, there are several task-heads to produce inverted + codes. Please use `latent_dim` and `num_latents_per_head` to define the + structure. + + Settings for the encoder network: + + (1) resolution: The resolution of the output image. + (2) latent_dim: Dimension of the latent space. A number (one code will be + produced), or a list of numbers regarding layer-wise latent codes. + (3) num_latents_per_head: Number of latents that is produced by each head. + (4) image_channels: Number of channels of the output image. (default: 3) + + ResNet-related settings: + + (1) network_depth: Depth of the network, like 18 for ResNet18. (default: 18) + (2) inplanes: Number of channels of the first convolutional layer. + (default: 64) + (3) groups: Groups of the convolution, used in ResNet. (default: 1) + (4) width_per_group: Number of channels per group, used in ResNet. + (default: 64) + (5) replace_stride_with_dilation: Wether to replace stride with dilation, + used in ResNet. (default: None) + (6) norm_layer: Normalization layer used in the encoder. + (default: nn.BatchNorm2d) + (7) max_channels: Maximum number of channels in each layer. (default: 512) + + Task-head related settings: + + (1) use_fpn: Whether to use Feature Pyramid Network (FPN) before outputing + the latent code. (default: True) + (2) fpn_channels: Number of channels used in FPN. (default: 512) + (3) use_sam: Whether to use Spatial Alignment Module (SAM) before outputing + the latent code. (default: True) + (4) sam_channels: Number of channels used in SAM. (default: 512) + """ + + arch_settings = { + 18: (BasicBlock, [2, 2, 2, 2]), + 34: (BasicBlock, [3, 4, 6, 3]), + 50: (Bottleneck, [3, 4, 6, 3]), + 101: (Bottleneck, [3, 4, 23, 3]), + 152: (Bottleneck, [3, 8, 36, 3]) + } + + def __init__(self, + resolution, + latent_dim, + num_latents_per_head, + image_channels=3, + network_depth=18, + inplanes=64, + groups=1, + width_per_group=64, + replace_stride_with_dilation=None, + norm_layer=nn.BatchNorm2d, + max_channels=512, + use_fpn=True, + fpn_channels=512, + use_sam=True, + sam_channels=512): + super().__init__() + + if resolution not in _RESOLUTIONS_ALLOWED: + raise ValueError(f'Invalid resolution: `{resolution}`!\n' + f'Resolutions allowed: {_RESOLUTIONS_ALLOWED}.') + if network_depth not in self.arch_settings: + raise ValueError(f'Invalid network depth: `{network_depth}`!\n' + f'Options allowed: ' + f'{list(self.arch_settings.keys())}.') + if isinstance(latent_dim, int): + latent_dim = [latent_dim] + assert isinstance(latent_dim, (list, tuple)) + assert isinstance(num_latents_per_head, (list, tuple)) + assert sum(num_latents_per_head) == len(latent_dim) + + self.resolution = resolution + self.latent_dim = latent_dim + self.num_latents_per_head = num_latents_per_head + self.num_heads = len(self.num_latents_per_head) + self.image_channels = image_channels + self.inplanes = inplanes + self.network_depth = network_depth + self.groups = groups + self.dilation = 1 + self.base_width = width_per_group + self.replace_stride_with_dilation = replace_stride_with_dilation + if norm_layer is None or norm_layer == nn.BatchNorm2d: + norm_layer = nn.SyncBatchNorm + self.norm_layer = norm_layer + self.max_channels = max_channels + self.use_fpn = use_fpn + self.fpn_channels = fpn_channels + self.use_sam = use_sam + self.sam_channels = sam_channels + + block_fn, num_blocks_per_stage = self.arch_settings[network_depth] + + self.num_stages = int(np.log2(resolution // _FINAL_RES)) - 1 + for i in range(4, self.num_stages): + num_blocks_per_stage.append(1) + if replace_stride_with_dilation is None: + replace_stride_with_dilation = [False] * self.num_stages + + # Backbone. + self.conv1 = nn.Conv2d(in_channels=self.image_channels, + out_channels=self.inplanes, + kernel_size=7, + stride=2, + padding=3, + bias=False) + self.bn1 = norm_layer(self.inplanes) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + + self.stage_channels = [self.inplanes] + for i in range(1, self.num_stages + 1): + channels = min(self.max_channels, self.inplanes * (2 ** (i - 1))) + num_blocks = num_blocks_per_stage[i - 1] + stride = 1 if i == 1 else 2 + dilate = replace_stride_with_dilation[i - 1] + self.add_module(f'layer{i}', + self._make_stage(block_fn=block_fn, + planes=channels, + num_blocks=num_blocks, + stride=stride, + dilate=dilate)) + self.stage_channels.append(channels) + + if self.num_heads > len(self.stage_channels): + raise ValueError(f'Number of task heads is larger than number of ' + f'stages! Please reduce the number of heads.') + + # Task-head. + if self.num_heads == 1: + self.use_fpn = False + self.use_sam = False + + if self.use_fpn: + fpn_pyramid_channels = self.stage_channels[-self.num_heads:] + self.fpn = FPN(pyramid_channels=fpn_pyramid_channels, + out_channels=self.fpn_channels) + if self.use_sam: + if use_fpn: + sam_pyramid_channels = [self.fpn_channels] * self.num_heads + else: + sam_pyramid_channels = self.stage_channels[-self.num_heads:] + self.sam = SAM(pyramid_channels=sam_pyramid_channels, + out_channels=self.sam_channels) + + self.head_list = nn.ModuleList() + for head_idx in range(self.num_heads): + # Parse in_channels. + if self.use_sam: + in_channels = self.sam_channels + elif self.use_fpn: + in_channels = self.fpn_channels + else: + in_channels = self.stage_channels[head_idx - self.num_heads] + in_channels = in_channels * _FINAL_RES * _FINAL_RES + + # Parse out_channels. + start_latent_idx = sum(self.num_latents_per_head[:head_idx]) + end_latent_idx = sum(self.num_latents_per_head[:head_idx + 1]) + out_channels = sum(self.latent_dim[start_latent_idx:end_latent_idx]) + + self.head_list.append(CodeHead(in_channels=in_channels, + out_channels=out_channels, + norm_layer=self.norm_layer)) + + def _make_stage(self, block_fn, planes, num_blocks, stride=1, dilate=False): + norm_layer = self.norm_layer + downsample = None + previous_dilation = self.dilation + if dilate: + self.dilation *= stride + stride = 1 + if stride != 1 or self.inplanes != planes * block_fn.expansion: + downsample = nn.Sequential( + nn.Conv2d(in_channels=self.inplanes, + out_channels=planes * block_fn.expansion, + kernel_size=1, + stride=stride, + padding=0, + dilation=1, + groups=1, + bias=False), + norm_layer(planes * block_fn.expansion), + ) + + blocks = [] + blocks.append(block_fn(inplanes=self.inplanes, + planes=planes, + base_width=self.base_width, + stride=stride, + groups=self.groups, + dilation=previous_dilation, + norm_layer=norm_layer, + downsample=downsample)) + self.inplanes = planes * block_fn.expansion + for _ in range(1, num_blocks): + blocks.append(block_fn(inplanes=self.inplanes, + planes=planes, + base_width=self.base_width, + stride=1, + groups=self.groups, + dilation=self.dilation, + norm_layer=norm_layer, + downsample=None)) + + return nn.Sequential(*blocks) + + def _forward_impl(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + + features = [x] + for i in range(1, self.num_stages + 1): + x = getattr(self, f'layer{i}')(x) + features.append(x) + features = features[-self.num_heads:] + + if self.use_fpn: + features = self.fpn(features) + if self.use_sam: + features = self.sam(features) + else: + final_size = features[-1].shape[2:] + for i in range(self.num_heads - 1): + features[i] = F.adaptive_avg_pool2d(features[i], final_size) + + outputs = [] + for head_idx in range(self.num_heads): + codes = self.head_list[head_idx](features[head_idx]) + start_latent_idx = sum(self.num_latents_per_head[:head_idx]) + end_latent_idx = sum(self.num_latents_per_head[:head_idx + 1]) + split_size = self.latent_dim[start_latent_idx:end_latent_idx] + outputs.extend(torch.split(codes, split_size, dim=1)) + max_dim = max(self.latent_dim) + for i, dim in enumerate(self.latent_dim): + if dim < max_dim: + outputs[i] = F.pad(outputs[i], (0, max_dim - dim)) + outputs[i] = outputs[i].unsqueeze(1) + + return torch.cat(outputs, dim=1) + + def forward(self, x): + return self._forward_impl(x) diff --git a/detector_codes/LGrad-master/img2gad_pytorch/models/model_zoo.py b/detector_codes/LGrad-master/img2gad_pytorch/models/model_zoo.py new file mode 100644 index 0000000000000000000000000000000000000000..fc5d57a8c1189072df73745a24e0f4c1c2447b4b --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/models/model_zoo.py @@ -0,0 +1,303 @@ +# python3.7 +"""Model zoo.""" + +# pylint: disable=line-too-long + +MODEL_ZOO = { + # PGGAN official. + 'pggan_celebahq1024': dict( + gan_type='pggan', + resolution=1024, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EW_3jQ6E7xlKvCSHYrbmkQQBAB8tgIv5W5evdT6-GuXiWw?e=gRifVa&download=1', + ), + 'pggan_bedroom256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EUZQWGz2GT5Bh_GJLalP63IBvCsXDTOxDFIC_ZBsmoEacA?e=VNXiDb&download=1', + ), + 'pggan_livingroom256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/Efzh6qQv6QtCm0YN1lulH-YByqdE3AqlI-E6US_hXMuiig?e=ppdyB2&download=1', + ), + 'pggan_diningroom256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EcLb3_hGUkdClompZo27xk0BNmotgbFqdIeu-ZOGJsBMRg?e=xjYpN3&download=1', + ), + 'pggan_kitchen256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/ESCyg6hpNn1LlHVX_un1wLsBZAORUNkW9MO2kU1X5kafAQ?e=09TbGC&download=1', + ), + 'pggan_church256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EQ8cKujs2TVGjCL_j6bsnk8BqD9REF2ME2lBnpbTPsqIvA?e=zH55fT&download=1', + ), + 'pggan_tower256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EeyBJvgRVGJClKr1KKYDF_cBT1FDepRU1-GLqYNh8W9-fQ?e=nrpa5N&download=1', + ), + 'pggan_bridge256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EZ2QScfPy19PiDERLJQ3gPMBP4WmvZHwhNFLzfaP2YD8hQ?e=bef1U9&download=1', + ), + 'pggan_restaurant256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/ERvJ4pz8jgtMrcuJXUfcOQEBDugZ099_TetCQs-9-ILCVg?e=qYsVdQ&download=1', + ), + 'pggan_classroom256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EUU9SCOPUxhMoUS4Ceo9kl0BQkVK7d69lA-JeOP-zOWvXw?e=YIB4no&download=1', + ), + 'pggan_conferenceroom256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EX8AF0_6NoJAl5vKFewHWnsBk0r4PK4WsqsMrJyj84TrqQ?e=oNQIZS&download=1', + ), + 'pggan_person256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EWu4SqR42YpCoqsVJOcM2cMBcdfXA0j5wZ2hno9X0R9ydQ?e=KuDRns&download=1', + ), + 'pggan_cat256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EQdveyUNOMtAue52n6BxoHoB6Yup5-PTvBDmyfUn7Un4Hw?e=7acGbT&download=1', + ), + 'pggan_dog256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/ESaKyXA5fGlOvXJYDDFbT2kB9c0HlXh9n_wnyhiP05nhow?e=d4aKDV&download=1', + ), + 'pggan_bird256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/Ef2p4Pd3AKVCmSm00YikCIABhylh2dLPaFjPfPVn3RiTXA?e=9bRitp&download=1', + ), + 'pggan_horse256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EXwCPdv6XqJFtuvFFoswRScBmLJbhKzaC5D_iovl1GFOTw?e=WDdD77&download=1', + ), + 'pggan_sheep256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/ER6J5EKjAUNFtm9VwLf-uUsBZ5dnqxeKsPxY9ijiPtMhcQ?e=OKtfva&download=1', + ), + 'pggan_cow256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/ERZLxw7N7xJPm72FyePTbpcByzrr0pH-Fg7qyLt5tYGXwQ?e=ovIPCl&download=1', + ), + 'pggan_car256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EfGc2we47aFDtAY1548pRvsByIju-uXRbkZEFpJotuPKZw?e=DQqVj8&download=1', + ), + 'pggan_bicycle256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/Ed1dN_FgwmdBgeNWhaRUry8BgwT88-n2ppicSDPx-f7f_Q?e=bxTxnf&download=1', + ), + 'pggan_motorbike256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EV3yQdeJXIdPjZbMO0mp2-MBJbKuuBdypzBL4gnedO57Dw?e=tXdvtD&download=1', + ), + 'pggan_bus256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/Ed7-OYLnq0RCqRlM8qK8wZ8B87dz_NUxIKBrvyFUwRCEbg?e=VP5bmX&download=1', + ), + 'pggan_train256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EedE2cozKOVAkhvbdLd4SfwBknFW8vWZnKiqgeIBbAvCCA?e=BrLpTl&download=1', + ), + 'pggan_boat256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/Eb39waqQFr9Bp4wO0rC5NHwB0Vz2NGCuqbRPucguBIkDrg?e=lddSyL&download=1', + ), + 'pggan_airplane256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/Ee6FzIx3KjNDhxrS5mDvpCEB3iQ7TgErmKhbwbV-eF07iw?e=xflPXa&download=1', + ), + 'pggan_bottle256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EWhoy2AFCTZGtEG1UoayWjcB9Kdc_wreJ8p4RlBB93nbNg?e=DMZceU&download=1', + ), + 'pggan_chair256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EbQRTfwdostBhXG30Uacn7ABsEUFa-tEW3oxiM5zDYQbRw?e=FkB7T0&download=1', + ), + 'pggan_pottedplant256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EWg7hnoGATBOuJvXWr4m7CQBJL9o7nqnD6nOMRhtH2SKXg?e=Zi3hjD&download=1', + ), + 'pggan_tvmonitor256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EVXwttoJVtBMuhHNDdK3cMwBdMiZARJV38PMTsL6whnFlA?e=RbG0ru&download=1', + ), + 'pggan_diningtable256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EXVzBkbmTCVImMtuHLCTBeMBXZmv0RWyx5KXQQAe7-7D5w?e=6RYSnm&download=1', + ), + 'pggan_sofa256': dict( + gan_type='pggan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EaADQYDXwY9NrzbiUFcRYRgBOu1GdJMG8YgNZZmbNjbn-Q?e=DqKrXG&download=1', + ), + + # StyleGAN official. + 'stylegan_ffhq1024': dict( + gan_type='stylegan', + resolution=1024, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EdfMxgb0hU9BoXwiR3dqYDEBowCSEF1IcsW3n4kwfoZ9OQ?e=VwIV58&download=1', + ), + 'stylegan_celebahq1024': dict( + gan_type='stylegan', + resolution=1024, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EcCdXHddE7FOvyfmqeOyc9ABqVuWh8PQYFnV6JM1CXvFig?e=1nUYZ5&download=1', + ), + 'stylegan_bedroom256': dict( + gan_type='stylegan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/Ea6RBPddjcRNoFMXm8AyEBcBUHdlRNtjtclNKFe89amjBw?e=Og8Vff&download=1', + ), + 'stylegan_cat256': dict( + gan_type='stylegan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EVjX8u9HuehLip3z0hRfIHcB7QtoFkTB7NiRDb8nrKOl2w?e=lHcp1B&download=1', + ), + 'stylegan_car512': dict( + gan_type='stylegan', + resolution=512, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EcRJNNzzUzJGjI2X53S9HjkBhXkKT5JRd6Q3IIhCY1AyRw?e=FvMRNj&download=1', + ), + + # StyleGAN ours. + 'stylegan_celeba_partial256': dict( + gan_type='stylegan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/ET2etKNzMS9JmHj5j60fqMcBRJfQfYNvqUrujaIXxCvKDQ?e=QReLE6&download=1', + ), + 'stylegan_ffhq256': dict( + gan_type='stylegan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/ES-NAUCC2qdHg87BftvlBiQBVpbJ8-005Q4TNr5KrOxQEw?e=00AnWt&download=1', + ), + 'stylegan_ffhq512': dict( + gan_type='stylegan', + resolution=512, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EZYrrwOiEgVOg-PfGv7QTegBzFQ9yq2v7o1WxNq5JJ9KNA?e=SZU8PI&download=1', + ), + 'stylegan_livingroom256': dict( + gan_type='stylegan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EfFCYLHjqbFDmjOvCCFJgDcBZ1QYgETfZJxp4ZTHjLxZBg?e=InVd0n&download=1', + ), + 'stylegan_diningroom256': dict( + gan_type='stylegan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/ERsUza_hSFRIm4iZCag7P0kBQ9EIdfQKByw4QYt_ay97lg?e=Cimh7S&download=1', + ), + 'stylegan_kitchen256': dict( + gan_type='stylegan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/ERcYvoingQNKix35lUs0vUkBQQkAZMp1rtDxjwNlOJAoaA?e=a1Tcwr&download=1', + ), + 'stylegan_apartment256': dict( + gan_type='stylegan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EfurPNSB2BRFtXdqGkmDD6YBwyKN8YK2v7nKwnJQdsbf6A?e=w3oYa4&download=1', + ), + 'stylegan_church256': dict( + gan_type='stylegan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/ETMgG1_d06tAlbUkJD1qA9IBaLZ9zJKPkG2kO-4jxhVV5w?e=Dbkb7o&download=1', + ), + 'stylegan_tower256': dict( + gan_type='stylegan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/Ebm9QMgqB2VDqyIE5rFhreEBgZ_RyKcRf8bQ333K453u3w?e=if8sDj&download=1', + ), + 'stylegan_bridge256': dict( + gan_type='stylegan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/Ed9QM6OP9sVHnazSp4cqPSEBb-ALfBPXRxP1hD7FsTYh8w?e=3vv06p&download=1', + ), + 'stylegan_restaurant256': dict( + gan_type='stylegan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/ESDhYr01WtlEvBNFrVpFezcB2l9lF1rBYuHFoeNpBr5B7A?e=uFWFNh&download=1', + ), + 'stylegan_classroom256': dict( + gan_type='stylegan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EbWnI3oto9NPk-lxwZlWqPQB2atWpGiTWMIT59MzF9ij9Q?e=KvcNBg&download=1', + ), + 'stylegan_conferenceroom256': dict( + gan_type='stylegan', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/Eb1gVi3pGa9PgJ4XYYu_6yABQZ0ZcGDak4FEHaTHaeYFzw?e=0BeE8t&download=1', + ), + + # StyleGAN third-party. + 'stylegan_animeface512': dict( + gan_type='stylegan', + resolution=512, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EWDWflY6lBpGgX0CGQpd2Z4B5wTEVamTOA9JRYne7zdCvA?e=tOzgYA&download=1', + ), + 'stylegan_animeportrait512': dict( + gan_type='stylegan', + resolution=512, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EXBvhTBi-v5NsnQtrxhFEKsBin4xg-Dud9Jr62AEwFTIxg?e=bMGK7r&download=1', + ), + 'stylegan_artface512': dict( + gan_type='stylegan', + resolution=512, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/Eca0OiGqhyZMmoPbKahSBWQBWvcAH4q2CE3zdZJflp2jkQ?e=h4rWAm&download=1', + ), + + # StyleGAN2 official. + 'stylegan2_ffhq1024': dict( + gan_type='stylegan2', + resolution=1024, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EX0DNWiBvl5FuOQTF4oMPBYBNSalcxTK0AbLwBn9Y3vfgg?e=Q0sZit&download=1', + ), + 'stylegan2_church256': dict( + gan_type='stylegan2', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EQzDtJUdQ4ROunMGn2sZouEBmNeFX4QWvxjermVE5cZvNA?e=tQ7r9r&download=1', + ), + 'stylegan2_cat256': dict( + gan_type='stylegan2', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EUKXeBwUUbZJr6kup7PW4ekBx2-vmTp8FjcGb10v8bgJxQ?e=nkerMF&download=1', + ), + 'stylegan2_horse256': dict( + gan_type='stylegan2', + resolution=256, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EconoT6tb69OuAIqfXRtGlsBZz4vBx01UmmFO-JAS356Jg?e=bcSCC4&download=1', + ), + 'stylegan2_car512': dict( + gan_type='stylegan2', + resolution=512, + url='https://mycuhk-my.sharepoint.com/:u:/g/personal/1155082926_link_cuhk_edu_hk/EYSnUsxU8KJFuMHhZm-JLWoB0nHxdlbrLHNZ_Qkoe3b9LA?e=Ycjp5A&download=1', + ), +} + +# pylint: enable=line-too-long diff --git a/detector_codes/LGrad-master/img2gad_pytorch/models/perceptual_model.py b/detector_codes/LGrad-master/img2gad_pytorch/models/perceptual_model.py new file mode 100644 index 0000000000000000000000000000000000000000..1f21496f7b52dbf102a197fda2a12b8e3770a87e --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/models/perceptual_model.py @@ -0,0 +1,148 @@ +# python 3.7 +"""Contains the VGG16 model for perceptual feature extraction. + +This file is particularly used for computing perceptual loss and hence is highly +recommended to use with pre-trained weights. + +The PyTorch weights can be downloaded from + +https://drive.google.com/file/d/1qQ-r7MYZ8ZcjQQFe17eQfJbOAuE3eS0y/view?usp=sharing + +which is converted from the Keras model + +https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5 + +The variable mapping is shown below + +pth_to_tf_var_mapping = { + 'layer0.weight': 'block1_conv1_W_1:0', # [64, 3, 3, 3] + 'layer0.bias': 'block1_conv1_b_1:0', # [64] + 'layer2.weight': 'block1_conv2_W_1:0', # [64, 64, 3, 3] + 'layer2.bias': 'block1_conv2_b_1:0', # [64] + 'layer5.weight': 'block2_conv1_W_1:0', # [128, 64, 3, 3] + 'layer5.bias': 'block2_conv1_b_1:0', # [128] + 'layer7.weight': 'block2_conv2_W_1:0', # [128, 128, 3, 3] + 'layer7.bias': 'block2_conv2_b_1:0', # [128] + 'layer10.weight': 'block3_conv1_W_1:0', # [256, 128, 3, 3] + 'layer10.bias': 'block3_conv1_b_1:0', # [256] + 'layer12.weight': 'block3_conv2_W_1:0', # [256, 256, 3, 3] + 'layer12.bias': 'block3_conv2_b_1:0', # [256] + 'layer14.weight': 'block3_conv3_W_1:0', # [256, 256, 3, 3] + 'layer14.bias': 'block3_conv3_b_1:0', # [256] + 'layer17.weight': 'block4_conv1_W_1:0', # [512, 256, 3, 3] + 'layer17.bias': 'block4_conv1_b_1:0', # [512] + 'layer19.weight': 'block4_conv2_W_1:0', # [512, 512, 3, 3] + 'layer19.bias': 'block4_conv2_b_1:0', # [512] + 'layer21.weight': 'block4_conv3_W_1:0', # [512, 512, 3, 3] + 'layer21.bias': 'block4_conv3_b_1:0', # [512] + 'layer24.weight': 'block5_conv1_W_1:0', # [512, 512, 3, 3] + 'layer24.bias': 'block5_conv1_b_1:0', # [512] + 'layer26.weight': 'block5_conv2_W_1:0', # [512, 512, 3, 3] + 'layer26.bias': 'block5_conv2_b_1:0', # [512] + 'layer28.weight': 'block5_conv3_W_1:0', # [512, 512, 3, 3] + 'layer28.bias': 'block5_conv3_b_1:0', # [512] +} +""" + +import os +import warnings +from collections import OrderedDict +import numpy as np + +import torch +import torch.nn as nn + +__all__ = ['PerceptualModel'] + +_MEAN_STATS = (103.939, 116.779, 123.68) + + +class PerceptualModel(nn.Module): + """Defines the VGG16 structure as the perceptual network. + + This model takes `RGB` images with data format `NCHW` as the raw inputs, and + outputs the perceptual feature. This following operations will be performed + to preprocess the inputs to match the preprocessing during the model + training: + (1) Shift pixel range to [0, 255]. + (2) Change channel order to `BGR`. + (3) Subtract the statistical mean. + + NOTE: The three fully connected layers on top of the model are dropped. + """ + + def __init__(self, + output_layer_idx=23, + min_val=-1.0, + max_val=1.0, + pretrained_weight_path=None): + """Defines the network structure. + + Args: + output_layer_idx: Index of layer whose output will be used as the + perceptual feature. (default: 23, which is the `block4_conv3` + layer activated by `ReLU` function) + min_val: Minimum value of the raw input. (default: -1.0) + max_val: Maximum value of the raw input. (default: 1.0) + pretrained_weight_path: Path to the pretrained weights. + (default: None) + """ + super().__init__() + self.vgg16 = nn.Sequential(OrderedDict({ + 'layer0': nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1), + 'layer1': nn.ReLU(inplace=True), + 'layer2': nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=1), + 'layer3': nn.ReLU(inplace=True), + 'layer4': nn.MaxPool2d(kernel_size=2, stride=2), + 'layer5': nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1), + 'layer6': nn.ReLU(inplace=True), + 'layer7': nn.Conv2d(128, 128, kernel_size=3, stride=1, padding=1), + 'layer8': nn.ReLU(inplace=True), + 'layer9': nn.MaxPool2d(kernel_size=2, stride=2), + 'layer10': nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1), + 'layer11': nn.ReLU(inplace=True), + 'layer12': nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1), + 'layer13': nn.ReLU(inplace=True), + 'layer14': nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1), + 'layer15': nn.ReLU(inplace=True), + 'layer16': nn.MaxPool2d(kernel_size=2, stride=2), + 'layer17': nn.Conv2d(256, 512, kernel_size=3, stride=1, padding=1), + 'layer18': nn.ReLU(inplace=True), + 'layer19': nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1), + 'layer20': nn.ReLU(inplace=True), + 'layer21': nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1), + 'layer22': nn.ReLU(inplace=True), + 'layer23': nn.MaxPool2d(kernel_size=2, stride=2), + 'layer24': nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1), + 'layer25': nn.ReLU(inplace=True), + 'layer26': nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1), + 'layer27': nn.ReLU(inplace=True), + 'layer28': nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1), + 'layer29': nn.ReLU(inplace=True), + 'layer30': nn.MaxPool2d(kernel_size=2, stride=2), + })) + self.output_layer_idx = output_layer_idx + self.min_val = min_val + self.max_val = max_val + self.mean = torch.from_numpy(np.array(_MEAN_STATS)).view(1, 3, 1, 1) + self.mean = self.mean.type(torch.FloatTensor) + + self.pretrained_weight_path = pretrained_weight_path + if os.path.isfile(self.pretrained_weight_path): + self.vgg16.load_state_dict( + torch.load(self.pretrained_weight_path, map_location='cpu')) + else: + warnings.warn('No pre-trained weights found for perceptual model!') + + def forward(self, x): + x = (x - self.min_val) * 255.0 / (self.max_val - self.min_val) + x = x.flip(1) # RGB to BGR + x = x - self.mean.to(x) + # TODO: Resize image? + for idx, layer in enumerate(self.vgg16.children()): + if idx == self.output_layer_idx: + break + x = layer(x) + # x = x.permute(0, 2, 3, 1) + x = x.flatten(start_dim=1) + return x diff --git a/detector_codes/LGrad-master/img2gad_pytorch/models/pggan_discriminator.py b/detector_codes/LGrad-master/img2gad_pytorch/models/pggan_discriminator.py new file mode 100644 index 0000000000000000000000000000000000000000..c1bc97fa513eb3075d0b6bd1df775236cacf396a --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/models/pggan_discriminator.py @@ -0,0 +1,402 @@ +# python3.7 +"""Contains the implementation of discriminator described in PGGAN. + +Paper: https://arxiv.org/pdf/1710.10196.pdf + +Official TensorFlow implementation: +https://github.com/tkarras/progressive_growing_of_gans +""" + +import numpy as np + +import torch +import torch.nn as nn +import torch.nn.functional as F + +__all__ = ['PGGANDiscriminator'] + +# Resolutions allowed. +_RESOLUTIONS_ALLOWED = [8, 16, 32, 64, 128, 256, 512, 1024] + +# Initial resolution. +_INIT_RES = 4 + +# Default gain factor for weight scaling. +_WSCALE_GAIN = np.sqrt(2.0) + + +class PGGANDiscriminator(nn.Module): + """Defines the discriminator network in PGGAN. + + NOTE: The discriminator takes images with `RGB` channel order and pixel + range [-1, 1] as inputs. + + Settings for the network: + + (1) resolution: The resolution of the input image. + (2) image_channels: Number of channels of the input image. (default: 3) + (3) label_size: Size of the additional label for conditional generation. + (default: 0) + (4) fused_scale: Whether to fused `conv2d` and `downsample` together, + resulting in `conv2d` with strides. (default: False) + (5) use_wscale: Whether to use weight scaling. (default: True) + (6) minibatch_std_group_size: Group size for the minibatch standard + deviation layer. 0 means disable. (default: 16) + (7) fmaps_base: Factor to control number of feature maps for each layer. + (default: 16 << 10) + (8) fmaps_max: Maximum number of feature maps in each layer. (default: 512) + """ + + def __init__(self, + resolution, + image_channels=3, + label_size=0, + fused_scale=False, + use_wscale=True, + minibatch_std_group_size=16, + fmaps_base=16 << 10, + fmaps_max=512): + """Initializes with basic settings. + + Raises: + ValueError: If the `resolution` is not supported. + """ + super().__init__() + + if resolution not in _RESOLUTIONS_ALLOWED: + raise ValueError(f'Invalid resolution: `{resolution}`!\n' + f'Resolutions allowed: {_RESOLUTIONS_ALLOWED}.') + + self.init_res = _INIT_RES + self.init_res_log2 = int(np.log2(self.init_res)) + self.resolution = resolution + self.final_res_log2 = int(np.log2(self.resolution)) + self.image_channels = image_channels + self.label_size = label_size + self.fused_scale = fused_scale + self.use_wscale = use_wscale + self.minibatch_std_group_size = minibatch_std_group_size + self.fmaps_base = fmaps_base + self.fmaps_max = fmaps_max + + # Level of detail (used for progressive training). + self.register_buffer('lod', torch.zeros(())) + self.pth_to_tf_var_mapping = {'lod': 'lod'} + + for res_log2 in range(self.final_res_log2, self.init_res_log2 - 1, -1): + res = 2 ** res_log2 + block_idx = self.final_res_log2 - res_log2 + + # Input convolution layer for each resolution. + self.add_module( + f'input{block_idx}', + ConvBlock(in_channels=self.image_channels, + out_channels=self.get_nf(res), + kernel_size=1, + padding=0, + use_wscale=self.use_wscale)) + self.pth_to_tf_var_mapping[f'input{block_idx}.weight'] = ( + f'FromRGB_lod{block_idx}/weight') + self.pth_to_tf_var_mapping[f'input{block_idx}.bias'] = ( + f'FromRGB_lod{block_idx}/bias') + + # Convolution block for each resolution (except the last one). + if res != self.init_res: + self.add_module( + f'layer{2 * block_idx}', + ConvBlock(in_channels=self.get_nf(res), + out_channels=self.get_nf(res), + use_wscale=self.use_wscale)) + tf_layer0_name = 'Conv0' + self.add_module( + f'layer{2 * block_idx + 1}', + ConvBlock(in_channels=self.get_nf(res), + out_channels=self.get_nf(res // 2), + downsample=True, + fused_scale=self.fused_scale, + use_wscale=self.use_wscale)) + tf_layer1_name = 'Conv1_down' if self.fused_scale else 'Conv1' + + # Convolution block for last resolution. + else: + self.add_module( + f'layer{2 * block_idx}', + ConvBlock( + in_channels=self.get_nf(res), + out_channels=self.get_nf(res), + use_wscale=self.use_wscale, + minibatch_std_group_size=self.minibatch_std_group_size)) + tf_layer0_name = 'Conv' + self.add_module( + f'layer{2 * block_idx + 1}', + DenseBlock(in_channels=self.get_nf(res) * res * res, + out_channels=self.get_nf(res // 2), + use_wscale=self.use_wscale)) + tf_layer1_name = 'Dense0' + + self.pth_to_tf_var_mapping[f'layer{2 * block_idx}.weight'] = ( + f'{res}x{res}/{tf_layer0_name}/weight') + self.pth_to_tf_var_mapping[f'layer{2 * block_idx}.bias'] = ( + f'{res}x{res}/{tf_layer0_name}/bias') + self.pth_to_tf_var_mapping[f'layer{2 * block_idx + 1}.weight'] = ( + f'{res}x{res}/{tf_layer1_name}/weight') + self.pth_to_tf_var_mapping[f'layer{2 * block_idx + 1}.bias'] = ( + f'{res}x{res}/{tf_layer1_name}/bias') + + # Final dense block. + self.add_module( + f'layer{2 * block_idx + 2}', + DenseBlock(in_channels=self.get_nf(res // 2), + out_channels=1 + self.label_size, + use_wscale=self.use_wscale, + wscale_gain=1.0, + activation_type='linear')) + self.pth_to_tf_var_mapping[f'layer{2 * block_idx + 2}.weight'] = ( + f'{res}x{res}/Dense1/weight') + self.pth_to_tf_var_mapping[f'layer{2 * block_idx + 2}.bias'] = ( + f'{res}x{res}/Dense1/bias') + + self.downsample = DownsamplingLayer() + + def get_nf(self, res): + """Gets number of feature maps according to current resolution.""" + return min(self.fmaps_base // res, self.fmaps_max) + + def forward(self, image, lod=None, **_unused_kwargs): + expected_shape = (self.image_channels, self.resolution, self.resolution) + if image.ndim != 4 or image.shape[1:] != expected_shape: + raise ValueError(f'The input tensor should be with shape ' + f'[batch_size, channel, height, width], where ' + f'`channel` equals to {self.image_channels}, ' + f'`height`, `width` equal to {self.resolution}!\n' + f'But `{image.shape}` is received!') + + lod = self.lod.cpu().tolist() if lod is None else lod + if lod + self.init_res_log2 > self.final_res_log2: + raise ValueError(f'Maximum level-of-detail (lod) is ' + f'{self.final_res_log2 - self.init_res_log2}, ' + f'but `{lod}` is received!') + + lod = self.lod.cpu().tolist() + for res_log2 in range(self.final_res_log2, self.init_res_log2 - 1, -1): + block_idx = current_lod = self.final_res_log2 - res_log2 + if current_lod <= lod < current_lod + 1: + x = self.__getattr__(f'input{block_idx}')(image) + elif current_lod - 1 < lod < current_lod: + alpha = lod - np.floor(lod) + x = (self.__getattr__(f'input{block_idx}')(image) * alpha + + x * (1 - alpha)) + if lod < current_lod + 1: + x = self.__getattr__(f'layer{2 * block_idx}')(x) + x = self.__getattr__(f'layer{2 * block_idx + 1}')(x) + if lod > current_lod: + image = self.downsample(image) + x = self.__getattr__(f'layer{2 * block_idx + 2}')(x) + return x + + +class MiniBatchSTDLayer(nn.Module): + """Implements the minibatch standard deviation layer.""" + + def __init__(self, group_size=16, epsilon=1e-8): + super().__init__() + self.group_size = group_size + self.epsilon = epsilon + + def forward(self, x): + if self.group_size <= 1: + return x + group_size = min(self.group_size, x.shape[0]) # [NCHW] + y = x.view(group_size, -1, x.shape[1], x.shape[2], x.shape[3]) # [GMCHW] + y = y - torch.mean(y, dim=0, keepdim=True) # [GMCHW] + y = torch.mean(y ** 2, dim=0) # [MCHW] + y = torch.sqrt(y + self.epsilon) # [MCHW] + y = torch.mean(y, dim=[1, 2, 3], keepdim=True) # [M111] + y = y.repeat(group_size, 1, x.shape[2], x.shape[3]) # [N1HW] + return torch.cat([x, y], dim=1) + + +class DownsamplingLayer(nn.Module): + """Implements the downsampling layer. + + Basically, this layer can be used to downsample feature maps with average + pooling. + """ + + def __init__(self, scale_factor=2): + super().__init__() + self.scale_factor = scale_factor + + def forward(self, x): + if self.scale_factor <= 1: + return x + return F.avg_pool2d(x, + kernel_size=self.scale_factor, + stride=self.scale_factor, + padding=0) + + +class ConvBlock(nn.Module): + """Implements the convolutional block. + + Basically, this block executes minibatch standard deviation layer (if + needed), convolutional layer, activation layer, and downsampling layer ( + if needed) in sequence. + """ + + def __init__(self, + in_channels, + out_channels, + kernel_size=3, + stride=1, + padding=1, + add_bias=True, + downsample=False, + fused_scale=False, + use_wscale=True, + wscale_gain=_WSCALE_GAIN, + activation_type='lrelu', + minibatch_std_group_size=0): + """Initializes with block settings. + + Args: + in_channels: Number of channels of the input tensor. + out_channels: Number of channels of the output tensor. + kernel_size: Size of the convolutional kernels. (default: 3) + stride: Stride parameter for convolution operation. (default: 1) + padding: Padding parameter for convolution operation. (default: 1) + add_bias: Whether to add bias onto the convolutional result. + (default: True) + downsample: Whether to downsample the result after convolution. + (default: False) + fused_scale: Whether to fused `conv2d` and `downsample` together, + resulting in `conv2d` with strides. (default: False) + use_wscale: Whether to use weight scaling. (default: True) + wscale_gain: Gain factor for weight scaling. (default: _WSCALE_GAIN) + activation_type: Type of activation. Support `linear` and `lrelu`. + (default: `lrelu`) + minibatch_std_group_size: Group size for the minibatch standard + deviation layer. 0 means disable. (default: 0) + + Raises: + NotImplementedError: If the `activation_type` is not supported. + """ + super().__init__() + + if minibatch_std_group_size > 1: + in_channels = in_channels + 1 + self.mbstd = MiniBatchSTDLayer(group_size=minibatch_std_group_size) + else: + self.mbstd = nn.Identity() + + if downsample and not fused_scale: + self.downsample = DownsamplingLayer() + else: + self.downsample = nn.Identity() + + if downsample and fused_scale: + self.use_stride = True + self.stride = 2 + self.padding = 1 + else: + self.use_stride = False + self.stride = stride + self.padding = padding + + weight_shape = (out_channels, in_channels, kernel_size, kernel_size) + fan_in = kernel_size * kernel_size * in_channels + wscale = wscale_gain / np.sqrt(fan_in) + if use_wscale: + self.weight = nn.Parameter(torch.randn(*weight_shape)) + self.wscale = wscale + else: + self.weight = nn.Parameter(torch.randn(*weight_shape) * wscale) + self.wscale = 1.0 + + if add_bias: + self.bias = nn.Parameter(torch.zeros(out_channels)) + else: + self.bias = None + + if activation_type == 'linear': + self.activate = nn.Identity() + elif activation_type == 'lrelu': + self.activate = nn.LeakyReLU(negative_slope=0.2, inplace=True) + else: + raise NotImplementedError(f'Not implemented activation function: ' + f'`{activation_type}`!') + + def forward(self, x): + x = self.mbstd(x) + weight = self.weight * self.wscale + if self.use_stride: + weight = F.pad(weight, (1, 1, 1, 1, 0, 0, 0, 0), 'constant', 0.0) + weight = (weight[:, :, 1:, 1:] + weight[:, :, :-1, 1:] + + weight[:, :, 1:, :-1] + weight[:, :, :-1, :-1]) * 0.25 + x = F.conv2d(x, + weight=weight, + bias=self.bias, + stride=self.stride, + padding=self.padding) + x = self.activate(x) + x = self.downsample(x) + return x + + +class DenseBlock(nn.Module): + """Implements the dense block. + + Basically, this block executes fully-connected layer, and activation layer. + """ + + def __init__(self, + in_channels, + out_channels, + add_bias=True, + use_wscale=True, + wscale_gain=_WSCALE_GAIN, + activation_type='lrelu'): + """Initializes with block settings. + + Args: + in_channels: Number of channels of the input tensor. + out_channels: Number of channels of the output tensor. + add_bias: Whether to add bias onto the fully-connected result. + (default: True) + use_wscale: Whether to use weight scaling. (default: True) + wscale_gain: Gain factor for weight scaling. (default: _WSCALE_GAIN) + activation_type: Type of activation. Support `linear` and `lrelu`. + (default: `lrelu`) + + Raises: + NotImplementedError: If the `activation_type` is not supported. + """ + super().__init__() + weight_shape = (out_channels, in_channels) + wscale = wscale_gain / np.sqrt(in_channels) + if use_wscale: + self.weight = nn.Parameter(torch.randn(*weight_shape)) + self.wscale = wscale + else: + self.weight = nn.Parameter(torch.randn(*weight_shape) * wscale) + self.wscale = 1.0 + + if add_bias: + self.bias = nn.Parameter(torch.zeros(out_channels)) + else: + self.bias = None + + if activation_type == 'linear': + self.activate = nn.Identity() + elif activation_type == 'lrelu': + self.activate = nn.LeakyReLU(negative_slope=0.2, inplace=True) + else: + raise NotImplementedError(f'Not implemented activation function: ' + f'`{activation_type}`!') + + def forward(self, x): + if x.ndim != 2: + x = x.view(x.shape[0], -1) + x = F.linear(x, weight=self.weight * self.wscale, bias=self.bias) + x = self.activate(x) + return x diff --git a/detector_codes/LGrad-master/img2gad_pytorch/models/pggan_generator.py b/detector_codes/LGrad-master/img2gad_pytorch/models/pggan_generator.py new file mode 100644 index 0000000000000000000000000000000000000000..2abe0cb564e8e18ff6caa29602510686c6f8486c --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/models/pggan_generator.py @@ -0,0 +1,338 @@ +# python3.7 +"""Contains the implementation of generator described in PGGAN. + +Paper: https://arxiv.org/pdf/1710.10196.pdf + +Official TensorFlow implementation: +https://github.com/tkarras/progressive_growing_of_gans +""" + +import numpy as np + +import torch +import torch.nn as nn +import torch.nn.functional as F + +__all__ = ['PGGANGenerator'] + +# Resolutions allowed. +_RESOLUTIONS_ALLOWED = [8, 16, 32, 64, 128, 256, 512, 1024] + +# Initial resolution. +_INIT_RES = 4 + +# Default gain factor for weight scaling. +_WSCALE_GAIN = np.sqrt(2.0) + + +class PGGANGenerator(nn.Module): + """Defines the generator network in PGGAN. + + NOTE: The synthesized images are with `RGB` channel order and pixel range + [-1, 1]. + + Settings for the network: + + (1) resolution: The resolution of the output image. + (2) z_space_dim: The dimension of the latent space, Z. (default: 512) + (3) image_channels: Number of channels of the output image. (default: 3) + (4) final_tanh: Whether to use `tanh` to control the final pixel range. + (default: False) + (5) label_size: Size of the additional label for conditional generation. + (default: 0) + (6) fused_scale: Whether to fused `upsample` and `conv2d` together, + resulting in `conv2d_transpose`. (default: False) + (7) use_wscale: Whether to use weight scaling. (default: True) + (8) fmaps_base: Factor to control number of feature maps for each layer. + (default: 16 << 10) + (9) fmaps_max: Maximum number of feature maps in each layer. (default: 512) + """ + + def __init__(self, + resolution, + z_space_dim=512, + image_channels=3, + final_tanh=False, + label_size=0, + fused_scale=False, + use_wscale=True, + fmaps_base=16 << 10, + fmaps_max=512): + """Initializes with basic settings. + + Raises: + ValueError: If the `resolution` is not supported. + """ + super().__init__() + + if resolution not in _RESOLUTIONS_ALLOWED: + raise ValueError(f'Invalid resolution: `{resolution}`!\n' + f'Resolutions allowed: {_RESOLUTIONS_ALLOWED}.') + + self.init_res = _INIT_RES + self.init_res_log2 = int(np.log2(self.init_res)) + self.resolution = resolution + self.final_res_log2 = int(np.log2(self.resolution)) + self.z_space_dim = z_space_dim + self.image_channels = image_channels + self.final_tanh = final_tanh + self.label_size = label_size + self.fused_scale = fused_scale + self.use_wscale = use_wscale + self.fmaps_base = fmaps_base + self.fmaps_max = fmaps_max + + # Number of convolutional layers. + self.num_layers = (self.final_res_log2 - self.init_res_log2 + 1) * 2 + + # Level of detail (used for progressive training). + self.register_buffer('lod', torch.zeros(())) + self.pth_to_tf_var_mapping = {'lod': 'lod'} + + for res_log2 in range(self.init_res_log2, self.final_res_log2 + 1): + res = 2 ** res_log2 + block_idx = res_log2 - self.init_res_log2 + + # First convolution layer for each resolution. + if res == self.init_res: + self.add_module( + f'layer{2 * block_idx}', + ConvBlock(in_channels=self.z_space_dim + self.label_size, + out_channels=self.get_nf(res), + kernel_size=self.init_res, + padding=self.init_res - 1, + use_wscale=self.use_wscale)) + tf_layer_name = 'Dense' + else: + self.add_module( + f'layer{2 * block_idx}', + ConvBlock(in_channels=self.get_nf(res // 2), + out_channels=self.get_nf(res), + upsample=True, + fused_scale=self.fused_scale, + use_wscale=self.use_wscale)) + tf_layer_name = 'Conv0_up' if self.fused_scale else 'Conv0' + self.pth_to_tf_var_mapping[f'layer{2 * block_idx}.weight'] = ( + f'{res}x{res}/{tf_layer_name}/weight') + self.pth_to_tf_var_mapping[f'layer{2 * block_idx}.bias'] = ( + f'{res}x{res}/{tf_layer_name}/bias') + + # Second convolution layer for each resolution. + self.add_module( + f'layer{2 * block_idx + 1}', + ConvBlock(in_channels=self.get_nf(res), + out_channels=self.get_nf(res), + use_wscale=self.use_wscale)) + tf_layer_name = 'Conv' if res == self.init_res else 'Conv1' + self.pth_to_tf_var_mapping[f'layer{2 * block_idx + 1}.weight'] = ( + f'{res}x{res}/{tf_layer_name}/weight') + self.pth_to_tf_var_mapping[f'layer{2 * block_idx + 1}.bias'] = ( + f'{res}x{res}/{tf_layer_name}/bias') + + # Output convolution layer for each resolution. + self.add_module( + f'output{block_idx}', + ConvBlock(in_channels=self.get_nf(res), + out_channels=self.image_channels, + kernel_size=1, + padding=0, + use_wscale=self.use_wscale, + wscale_gain=1.0, + activation_type='linear')) + self.pth_to_tf_var_mapping[f'output{block_idx}.weight'] = ( + f'ToRGB_lod{self.final_res_log2 - res_log2}/weight') + self.pth_to_tf_var_mapping[f'output{block_idx}.bias'] = ( + f'ToRGB_lod{self.final_res_log2 - res_log2}/bias') + + self.upsample = UpsamplingLayer() + self.final_activate = nn.Tanh() if self.final_tanh else nn.Identity() + + def get_nf(self, res): + """Gets number of feature maps according to current resolution.""" + return min(self.fmaps_base // res, self.fmaps_max) + + def forward(self, z, label=None, lod=None, **_unused_kwargs): + if z.ndim != 2 or z.shape[1] != self.z_space_dim: + raise ValueError(f'Input latent code should be with shape ' + f'[batch_size, latent_dim], where ' + f'`latent_dim` equals to {self.z_space_dim}!\n' + f'But `{z.shape}` is received!') + z = self.layer0.pixel_norm(z) + if self.label_size: + if label is None: + raise ValueError(f'Model requires an additional label ' + f'(with size {self.label_size}) as input, ' + f'but no label is received!') + if label.ndim != 2 or label.shape != (z.shape[0], self.label_size): + raise ValueError(f'Input label should be with shape ' + f'[batch_size, label_size], where ' + f'`batch_size` equals to that of ' + f'latent codes ({z.shape[0]}) and ' + f'`label_size` equals to {self.label_size}!\n' + f'But `{label.shape}` is received!') + z = torch.cat((z, label), dim=1) + + lod = self.lod.cpu().tolist() if lod is None else lod + if lod + self.init_res_log2 > self.final_res_log2: + raise ValueError(f'Maximum level-of-detail (lod) is ' + f'{self.final_res_log2 - self.init_res_log2}, ' + f'but `{lod}` is received!') + + x = z.view(z.shape[0], self.z_space_dim + self.label_size, 1, 1) + for res_log2 in range(self.init_res_log2, self.final_res_log2 + 1): + current_lod = self.final_res_log2 - res_log2 + if lod < current_lod + 1: + block_idx = res_log2 - self.init_res_log2 + x = self.__getattr__(f'layer{2 * block_idx}')(x) + x = self.__getattr__(f'layer{2 * block_idx + 1}')(x) + if current_lod - 1 < lod <= current_lod: + image = self.__getattr__(f'output{block_idx}')(x) + elif current_lod < lod < current_lod + 1: + alpha = np.ceil(lod) - lod + image = (self.__getattr__(f'output{block_idx}')(x) * alpha + + self.upsample(image) * (1 - alpha)) + elif lod >= current_lod + 1: + image = self.upsample(image) + image = self.final_activate(image) + + results = { + 'z': z, + 'label': label, + 'image': image, + } + return results + + +class PixelNormLayer(nn.Module): + """Implements pixel-wise feature vector normalization layer.""" + + def __init__(self, epsilon=1e-8): + super().__init__() + self.eps = epsilon + + def forward(self, x): + norm = torch.sqrt(torch.mean(x ** 2, dim=1, keepdim=True) + self.eps) + return x / norm + + +class UpsamplingLayer(nn.Module): + """Implements the upsampling layer. + + Basically, this layer can be used to upsample feature maps with nearest + neighbor interpolation. + """ + + def __init__(self, scale_factor=2): + super().__init__() + self.scale_factor = scale_factor + + def forward(self, x): + if self.scale_factor <= 1: + return x + return F.interpolate(x, scale_factor=self.scale_factor, mode='nearest') + + +class ConvBlock(nn.Module): + """Implements the convolutional block. + + Basically, this block executes pixel-wise normalization layer, upsampling + layer (if needed), convolutional layer, and activation layer in sequence. + """ + + def __init__(self, + in_channels, + out_channels, + kernel_size=3, + stride=1, + padding=1, + add_bias=True, + upsample=False, + fused_scale=False, + use_wscale=True, + wscale_gain=_WSCALE_GAIN, + activation_type='lrelu'): + """Initializes with block settings. + + Args: + in_channels: Number of channels of the input tensor. + out_channels: Number of channels of the output tensor. + kernel_size: Size of the convolutional kernels. (default: 3) + stride: Stride parameter for convolution operation. (default: 1) + padding: Padding parameter for convolution operation. (default: 1) + add_bias: Whether to add bias onto the convolutional result. + (default: True) + upsample: Whether to upsample the input tensor before convolution. + (default: False) + fused_scale: Whether to fused `upsample` and `conv2d` together, + resulting in `conv2d_transpose`. (default: False) + use_wscale: Whether to use weight scaling. (default: True) + wscale_gain: Gain factor for weight scaling. (default: _WSCALE_GAIN) + activation_type: Type of activation. Support `linear` and `lrelu`. + (default: `lrelu`) + + Raises: + NotImplementedError: If the `activation_type` is not supported. + """ + super().__init__() + + self.pixel_norm = PixelNormLayer() + + if upsample and not fused_scale: + self.upsample = UpsamplingLayer() + else: + self.upsample = nn.Identity() + + if upsample and fused_scale: + self.use_conv2d_transpose = True + weight_shape = (in_channels, out_channels, kernel_size, kernel_size) + self.stride = 2 + self.padding = 1 + else: + self.use_conv2d_transpose = False + weight_shape = (out_channels, in_channels, kernel_size, kernel_size) + self.stride = stride + self.padding = padding + + fan_in = kernel_size * kernel_size * in_channels + wscale = wscale_gain / np.sqrt(fan_in) + if use_wscale: + self.weight = nn.Parameter(torch.randn(*weight_shape)) + self.wscale = wscale + else: + self.weight = nn.Parameter(torch.randn(*weight_shape) * wscale) + self.wscale = 1.0 + + if add_bias: + self.bias = nn.Parameter(torch.zeros(out_channels)) + else: + self.bias = None + + if activation_type == 'linear': + self.activate = nn.Identity() + elif activation_type == 'lrelu': + self.activate = nn.LeakyReLU(negative_slope=0.2, inplace=True) + else: + raise NotImplementedError(f'Not implemented activation function: ' + f'`{activation_type}`!') + + def forward(self, x): + x = self.pixel_norm(x) + x = self.upsample(x) + weight = self.weight * self.wscale + if self.use_conv2d_transpose: + weight = F.pad(weight, (1, 1, 1, 1, 0, 0, 0, 0), 'constant', 0.0) + weight = (weight[:, :, 1:, 1:] + weight[:, :, :-1, 1:] + + weight[:, :, 1:, :-1] + weight[:, :, :-1, :-1]) + x = F.conv_transpose2d(x, + weight=weight, + bias=self.bias, + stride=self.stride, + padding=self.padding) + else: + x = F.conv2d(x, + weight=weight, + bias=self.bias, + stride=self.stride, + padding=self.padding) + x = self.activate(x) + return x diff --git a/detector_codes/LGrad-master/img2gad_pytorch/models/stylegan2_discriminator.py b/detector_codes/LGrad-master/img2gad_pytorch/models/stylegan2_discriminator.py new file mode 100644 index 0000000000000000000000000000000000000000..9f5e43104f40f46ff0220df36164cdbae9fcff32 --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/models/stylegan2_discriminator.py @@ -0,0 +1,468 @@ +# python3.7 +"""Contains the implementation of discriminator described in StyleGAN2. + +Compared to that of StyleGAN, the discriminator in StyleGAN2 mainly adds skip +connections, increases model size and disables progressive growth. This script +ONLY supports config F in the original paper. + +Paper: https://arxiv.org/pdf/1912.04958.pdf + +Official TensorFlow implementation: https://github.com/NVlabs/stylegan2 +""" + +import numpy as np + +import torch +import torch.nn as nn +import torch.nn.functional as F + +__all__ = ['StyleGAN2Discriminator'] + +# Resolutions allowed. +_RESOLUTIONS_ALLOWED = [8, 16, 32, 64, 128, 256, 512, 1024] + +# Initial resolution. +_INIT_RES = 4 + +# Architectures allowed. +_ARCHITECTURES_ALLOWED = ['resnet', 'skip', 'origin'] + +# Default gain factor for weight scaling. +_WSCALE_GAIN = 1.0 + + +class StyleGAN2Discriminator(nn.Module): + """Defines the discriminator network in StyleGAN2. + + NOTE: The discriminator takes images with `RGB` channel order and pixel + range [-1, 1] as inputs. + + Settings for the network: + + (1) resolution: The resolution of the input image. + (2) image_channels: Number of channels of the input image. (default: 3) + (3) label_size: Size of the additional label for conditional generation. + (default: 0) + (4) architecture: Type of architecture. Support `origin`, `skip`, and + `resnet`. (default: `resnet`) + (5) use_wscale: Whether to use weight scaling. (default: True) + (6) minibatch_std_group_size: Group size for the minibatch standard + deviation layer. 0 means disable. (default: 4) + (7) minibatch_std_channels: Number of new channels after the minibatch + standard deviation layer. (default: 1) + (8) fmaps_base: Factor to control number of feature maps for each layer. + (default: 32 << 10) + (9) fmaps_max: Maximum number of feature maps in each layer. (default: 512) + """ + + def __init__(self, + resolution, + image_channels=3, + label_size=0, + architecture='resnet', + use_wscale=True, + minibatch_std_group_size=4, + minibatch_std_channels=1, + fmaps_base=32 << 10, + fmaps_max=512): + """Initializes with basic settings. + + Raises: + ValueError: If the `resolution` is not supported, or `architecture` + is not supported. + """ + super().__init__() + + if resolution not in _RESOLUTIONS_ALLOWED: + raise ValueError(f'Invalid resolution: `{resolution}`!\n' + f'Resolutions allowed: {_RESOLUTIONS_ALLOWED}.') + if architecture not in _ARCHITECTURES_ALLOWED: + raise ValueError(f'Invalid architecture: `{architecture}`!\n' + f'Architectures allowed: ' + f'{_ARCHITECTURES_ALLOWED}.') + + self.init_res = _INIT_RES + self.init_res_log2 = int(np.log2(self.init_res)) + self.resolution = resolution + self.final_res_log2 = int(np.log2(self.resolution)) + self.image_channels = image_channels + self.label_size = label_size + self.architecture = architecture + self.use_wscale = use_wscale + self.minibatch_std_group_size = minibatch_std_group_size + self.minibatch_std_channels = minibatch_std_channels + self.fmaps_base = fmaps_base + self.fmaps_max = fmaps_max + + self.pth_to_tf_var_mapping = {} + for res_log2 in range(self.final_res_log2, self.init_res_log2 - 1, -1): + res = 2 ** res_log2 + block_idx = self.final_res_log2 - res_log2 + + # Input convolution layer for each resolution (if needed). + if res_log2 == self.final_res_log2 or self.architecture == 'skip': + self.add_module( + f'input{block_idx}', + ConvBlock(in_channels=self.image_channels, + out_channels=self.get_nf(res), + kernel_size=1, + use_wscale=self.use_wscale)) + self.pth_to_tf_var_mapping[f'input{block_idx}.weight'] = ( + f'{res}x{res}/FromRGB/weight') + self.pth_to_tf_var_mapping[f'input{block_idx}.bias'] = ( + f'{res}x{res}/FromRGB/bias') + + # Convolution block for each resolution (except the last one). + if res != self.init_res: + self.add_module( + f'layer{2 * block_idx}', + ConvBlock(in_channels=self.get_nf(res), + out_channels=self.get_nf(res), + use_wscale=self.use_wscale)) + tf_layer0_name = 'Conv0' + self.add_module( + f'layer{2 * block_idx + 1}', + ConvBlock(in_channels=self.get_nf(res), + out_channels=self.get_nf(res // 2), + scale_factor=2, + use_wscale=self.use_wscale)) + tf_layer1_name = 'Conv1_down' + + if self.architecture == 'resnet': + layer_name = f'skip_layer{block_idx}' + self.add_module( + layer_name, + ConvBlock(in_channels=self.get_nf(res), + out_channels=self.get_nf(res // 2), + kernel_size=1, + add_bias=False, + scale_factor=2, + use_wscale=self.use_wscale, + activation_type='linear')) + self.pth_to_tf_var_mapping[f'{layer_name}.weight'] = ( + f'{res}x{res}/Skip/weight') + + # Convolution block for last resolution. + else: + self.add_module( + f'layer{2 * block_idx}', + ConvBlock(in_channels=self.get_nf(res), + out_channels=self.get_nf(res), + use_wscale=self.use_wscale, + minibatch_std_group_size=minibatch_std_group_size, + minibatch_std_channels=minibatch_std_channels)) + tf_layer0_name = 'Conv' + self.add_module( + f'layer{2 * block_idx + 1}', + DenseBlock(in_channels=self.get_nf(res) * res * res, + out_channels=self.get_nf(res // 2), + use_wscale=self.use_wscale)) + tf_layer1_name = 'Dense0' + + self.pth_to_tf_var_mapping[f'layer{2 * block_idx}.weight'] = ( + f'{res}x{res}/{tf_layer0_name}/weight') + self.pth_to_tf_var_mapping[f'layer{2 * block_idx}.bias'] = ( + f'{res}x{res}/{tf_layer0_name}/bias') + self.pth_to_tf_var_mapping[f'layer{2 * block_idx + 1}.weight'] = ( + f'{res}x{res}/{tf_layer1_name}/weight') + self.pth_to_tf_var_mapping[f'layer{2 * block_idx + 1}.bias'] = ( + f'{res}x{res}/{tf_layer1_name}/bias') + + # Final dense block. + self.add_module( + f'layer{2 * block_idx + 2}', + DenseBlock(in_channels=self.get_nf(res // 2), + out_channels=max(self.label_size, 1), + use_wscale=self.use_wscale, + activation_type='linear')) + self.pth_to_tf_var_mapping[f'layer{2 * block_idx + 2}.weight'] = ( + f'Output/weight') + self.pth_to_tf_var_mapping[f'layer{2 * block_idx + 2}.bias'] = ( + f'Output/bias') + + if self.architecture == 'skip': + self.downsample = DownsamplingLayer() + + def get_nf(self, res): + """Gets number of feature maps according to current resolution.""" + return min(self.fmaps_base // res, self.fmaps_max) + + def forward(self, image, label=None, **_unused_kwargs): + expected_shape = (self.image_channels, self.resolution, self.resolution) + if image.ndim != 4 or image.shape[1:] != expected_shape: + raise ValueError(f'The input tensor should be with shape ' + f'[batch_size, channel, height, width], where ' + f'`channel` equals to {self.image_channels}, ' + f'`height`, `width` equal to {self.resolution}!\n' + f'But `{image.shape}` is received!') + if self.label_size: + if label is None: + raise ValueError(f'Model requires an additional label ' + f'(with size {self.label_size}) as inputs, ' + f'but no label is received!') + batch_size = image.shape[0] + if label.ndim != 2 or label.shape != (batch_size, self.label_size): + raise ValueError(f'Input label should be with shape ' + f'[batch_size, label_size], where ' + f'`batch_size` equals to that of ' + f'images ({image.shape[0]}) and ' + f'`label_size` equals to {self.label_size}!\n' + f'But `{label.shape}` is received!') + + x = self.input0(image) + for res_log2 in range(self.final_res_log2, self.init_res_log2 - 1, -1): + block_idx = self.final_res_log2 - res_log2 + if self.architecture == 'skip' and block_idx > 0: + image = self.downsample(image) + x = x + self.__getattr__(f'input{block_idx}')(image) + if self.architecture == 'resnet' and res_log2 != self.init_res_log2: + residual = self.__getattr__(f'skip_layer{block_idx}')(x) + x = self.__getattr__(f'layer{2 * block_idx}')(x) + x = self.__getattr__(f'layer{2 * block_idx + 1}')(x) + if self.architecture == 'resnet' and res_log2 != self.init_res_log2: + x = (x + residual) / np.sqrt(2.0) + x = self.__getattr__(f'layer{2 * block_idx + 2}')(x) + + if self.label_size: + x = torch.sum(x * label, dim=1, keepdim=True) + return x + + +class MiniBatchSTDLayer(nn.Module): + """Implements the minibatch standard deviation layer.""" + + def __init__(self, group_size=4, new_channels=1, epsilon=1e-8): + super().__init__() + self.group_size = group_size + self.new_channels = new_channels + self.epsilon = epsilon + + def forward(self, x): + if self.group_size <= 1: + return x + ng = min(self.group_size, x.shape[0]) + nc = self.new_channels + temp_c = x.shape[1] // nc # [NCHW] + y = x.view(ng, -1, nc, temp_c, x.shape[2], x.shape[3]) # [GMncHW] + y = y - torch.mean(y, dim=0, keepdim=True) # [GMncHW] + y = torch.mean(y ** 2, dim=0) # [MncHW] + y = torch.sqrt(y + self.epsilon) # [MncHW] + y = torch.mean(y, dim=[2, 3, 4], keepdim=True) # [Mn111] + y = torch.mean(y, dim=2) # [Mn11] + y = y.repeat(ng, 1, x.shape[2], x.shape[3]) # [NnHW] + return torch.cat([x, y], dim=1) + + +class DownsamplingLayer(nn.Module): + """Implements the downsampling layer. + + This layer can also be used as filtering by setting `scale_factor` as 1. + """ + + def __init__(self, scale_factor=2, kernel=(1, 3, 3, 1), extra_padding=0): + super().__init__() + assert scale_factor >= 1 + self.scale_factor = scale_factor + + if extra_padding != 0: + assert scale_factor == 1 + + if kernel is None: + kernel = np.ones((scale_factor), dtype=np.float32) + else: + kernel = np.array(kernel, dtype=np.float32) + assert kernel.ndim == 1 + kernel = np.outer(kernel, kernel) + kernel = kernel / np.sum(kernel) + assert kernel.ndim == 2 + assert kernel.shape[0] == kernel.shape[1] + kernel = kernel[np.newaxis, np.newaxis] + self.register_buffer('kernel', torch.from_numpy(kernel)) + self.kernel = self.kernel.flip(0, 1) + padding = kernel.shape[2] - scale_factor + extra_padding + self.padding = ((padding + 1) // 2, padding // 2, + (padding + 1) // 2, padding // 2) + + def forward(self, x): + assert x.ndim == 4 + channels = x.shape[1] + x = x.view(-1, 1, x.shape[2], x.shape[3]) + x = F.pad(x, self.padding, mode='constant', value=0) + x = F.conv2d(x, self.kernel, stride=self.scale_factor) + x = x.view(-1, channels, x.shape[2], x.shape[3]) + return x + + +class ConvBlock(nn.Module): + """Implements the convolutional block. + + Basically, this block executes minibatch standard deviation layer (if + needed), filtering layer (if needed), convolutional layer, and activation + layer in sequence. + """ + + def __init__(self, + in_channels, + out_channels, + kernel_size=3, + add_bias=True, + scale_factor=1, + filtering_kernel=(1, 3, 3, 1), + use_wscale=True, + wscale_gain=_WSCALE_GAIN, + lr_mul=1.0, + activation_type='lrelu', + minibatch_std_group_size=0, + minibatch_std_channels=1): + """Initializes with block settings. + + Args: + in_channels: Number of channels of the input tensor. + out_channels: Number of channels of the output tensor. + kernel_size: Size of the convolutional kernels. (default: 3) + add_bias: Whether to add bias onto the convolutional result. + (default: True) + scale_factor: Scale factor for downsampling. `1` means skip + downsampling. (default: 1) + filtering_kernel: Kernel used for filtering before downsampling. + (default: (1, 3, 3, 1)) + use_wscale: Whether to use weight scaling. (default: True) + wscale_gain: Gain factor for weight scaling. (default: _WSCALE_GAIN) + lr_mul: Learning multiplier for both weight and bias. (default: 1.0) + activation_type: Type of activation. Support `linear` and `lrelu`. + (default: `lrelu`) + minibatch_std_group_size: Group size for the minibatch standard + deviation layer. 0 means disable. (default: 0) + minibatch_std_channels: Number of new channels after the minibatch + standard deviation layer. (default: 1) + + Raises: + NotImplementedError: If the `activation_type` is not supported. + """ + super().__init__() + + if minibatch_std_group_size > 1: + in_channels = in_channels + minibatch_std_channels + self.mbstd = MiniBatchSTDLayer(group_size=minibatch_std_group_size, + new_channels=minibatch_std_channels) + else: + self.mbstd = nn.Identity() + + if scale_factor > 1: + extra_padding = kernel_size - scale_factor + self.filter = DownsamplingLayer(scale_factor=1, + kernel=filtering_kernel, + extra_padding=extra_padding) + self.stride = scale_factor + self.padding = 0 # Padding is done in `DownsamplingLayer`. + else: + self.filter = nn.Identity() + assert kernel_size % 2 == 1 + self.stride = 1 + self.padding = kernel_size // 2 + + weight_shape = (out_channels, in_channels, kernel_size, kernel_size) + fan_in = kernel_size * kernel_size * in_channels + wscale = wscale_gain / np.sqrt(fan_in) + if use_wscale: + self.weight = nn.Parameter(torch.randn(*weight_shape) / lr_mul) + self.wscale = wscale * lr_mul + else: + self.weight = nn.Parameter( + torch.randn(*weight_shape) * wscale / lr_mul) + self.wscale = lr_mul + + if add_bias: + self.bias = nn.Parameter(torch.zeros(out_channels)) + else: + self.bias = None + self.bscale = lr_mul + + if activation_type == 'linear': + self.activate = nn.Identity() + self.activate_scale = 1.0 + elif activation_type == 'lrelu': + self.activate = nn.LeakyReLU(negative_slope=0.2, inplace=True) + self.activate_scale = np.sqrt(2.0) + else: + raise NotImplementedError(f'Not implemented activation function: ' + f'`{activation_type}`!') + + def forward(self, x): + x = self.mbstd(x) + x = self.filter(x) + weight = self.weight * self.wscale + bias = self.bias * self.bscale if self.bias is not None else None + x = F.conv2d(x, + weight=weight, + bias=bias, + stride=self.stride, + padding=self.padding) + x = self.activate(x) * self.activate_scale + return x + + +class DenseBlock(nn.Module): + """Implements the dense block. + + Basically, this block executes fully-connected layer and activation layer. + """ + + def __init__(self, + in_channels, + out_channels, + add_bias=True, + use_wscale=True, + wscale_gain=_WSCALE_GAIN, + lr_mul=1.0, + activation_type='lrelu'): + """Initializes with block settings. + + Args: + in_channels: Number of channels of the input tensor. + out_channels: Number of channels of the output tensor. + add_bias: Whether to add bias onto the fully-connected result. + (default: True) + use_wscale: Whether to use weight scaling. (default: True) + wscale_gain: Gain factor for weight scaling. (default: _WSCALE_GAIN) + lr_mul: Learning multiplier for both weight and bias. (default: 1.0) + activation_type: Type of activation. Support `linear` and `lrelu`. + (default: `lrelu`) + + Raises: + NotImplementedError: If the `activation_type` is not supported. + """ + super().__init__() + weight_shape = (out_channels, in_channels) + wscale = wscale_gain / np.sqrt(in_channels) + if use_wscale: + self.weight = nn.Parameter(torch.randn(*weight_shape) / lr_mul) + self.wscale = wscale * lr_mul + else: + self.weight = nn.Parameter( + torch.randn(*weight_shape) * wscale / lr_mul) + self.wscale = lr_mul + + if add_bias: + self.bias = nn.Parameter(torch.zeros(out_channels)) + else: + self.bias = None + self.bscale = lr_mul + + if activation_type == 'linear': + self.activate = nn.Identity() + self.activate_scale = 1.0 + elif activation_type == 'lrelu': + self.activate = nn.LeakyReLU(negative_slope=0.2, inplace=True) + self.activate_scale = np.sqrt(2.0) + else: + raise NotImplementedError(f'Not implemented activation function: ' + f'`{activation_type}`!') + + def forward(self, x): + if x.ndim != 2: + x = x.view(x.shape[0], -1) + bias = self.bias * self.bscale if self.bias is not None else None + x = F.linear(x, weight=self.weight * self.wscale, bias=bias) + x = self.activate(x) * self.activate_scale + return x diff --git a/detector_codes/LGrad-master/img2gad_pytorch/models/stylegan2_generator.py b/detector_codes/LGrad-master/img2gad_pytorch/models/stylegan2_generator.py new file mode 100644 index 0000000000000000000000000000000000000000..6ca40651195299b836979a60904328ee93cc00c0 --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/models/stylegan2_generator.py @@ -0,0 +1,1063 @@ +# python3.7 +"""Contains the implementation of generator described in StyleGAN2. + +Compared to that of StyleGAN, the generator in StyleGAN2 mainly introduces style +demodulation, adds skip connections, increases model size, and disables +progressive growth. This script ONLY supports config F in the original paper. + +Paper: https://arxiv.org/pdf/1912.04958.pdf + +Official TensorFlow implementation: https://github.com/NVlabs/stylegan2 +""" + +import numpy as np + +import torch +import torch.nn as nn +import torch.nn.functional as F + +from .sync_op import all_gather + +__all__ = ['StyleGAN2Generator'] + +# Resolutions allowed. +_RESOLUTIONS_ALLOWED = [8, 16, 32, 64, 128, 256, 512, 1024] + +# Initial resolution. +_INIT_RES = 4 + +# Architectures allowed. +_ARCHITECTURES_ALLOWED = ['resnet', 'skip', 'origin'] + +# Default gain factor for weight scaling. +_WSCALE_GAIN = 1.0 + + +class StyleGAN2Generator(nn.Module): + """Defines the generator network in StyleGAN2. + + NOTE: The synthesized images are with `RGB` channel order and pixel range + [-1, 1]. + + Settings for the mapping network: + + (1) z_space_dim: Dimension of the input latent space, Z. (default: 512) + (2) w_space_dim: Dimension of the outout latent space, W. (default: 512) + (3) label_size: Size of the additional label for conditional generation. + (default: 0) + (4)mapping_layers: Number of layers of the mapping network. (default: 8) + (5) mapping_fmaps: Number of hidden channels of the mapping network. + (default: 512) + (6) mapping_lr_mul: Learning rate multiplier for the mapping network. + (default: 0.01) + (7) repeat_w: Repeat w-code for different layers. + + Settings for the synthesis network: + + (1) resolution: The resolution of the output image. + (2) image_channels: Number of channels of the output image. (default: 3) + (3) final_tanh: Whether to use `tanh` to control the final pixel range. + (default: False) + (4) const_input: Whether to use a constant in the first convolutional layer. + (default: True) + (5) architecture: Type of architecture. Support `origin`, `skip`, and + `resnet`. (default: `resnet`) + (6) fused_modulate: Whether to fuse `style_modulate` and `conv2d` together. + (default: True) + (7) demodulate: Whether to perform style demodulation. (default: True) + (8) use_wscale: Whether to use weight scaling. (default: True) + (9) noise_type: Type of noise added to the convolutional results at each + layer. (default: `spatial`) + (10) fmaps_base: Factor to control number of feature maps for each layer. + (default: 32 << 10) + (11) fmaps_max: Maximum number of feature maps in each layer. (default: 512) + """ + + def __init__(self, + resolution, + z_space_dim=512, + w_space_dim=512, + label_size=0, + mapping_layers=8, + mapping_fmaps=512, + mapping_lr_mul=0.01, + repeat_w=True, + image_channels=3, + final_tanh=False, + const_input=True, + architecture='skip', + fused_modulate=True, + demodulate=True, + use_wscale=True, + noise_type='spatial', + fmaps_base=32 << 10, + fmaps_max=512): + """Initializes with basic settings. + + Raises: + ValueError: If the `resolution` is not supported, or `architecture` + is not supported. + """ + super().__init__() + + if resolution not in _RESOLUTIONS_ALLOWED: + raise ValueError(f'Invalid resolution: `{resolution}`!\n' + f'Resolutions allowed: {_RESOLUTIONS_ALLOWED}.') + if architecture not in _ARCHITECTURES_ALLOWED: + raise ValueError(f'Invalid architecture: `{architecture}`!\n' + f'Architectures allowed: ' + f'{_ARCHITECTURES_ALLOWED}.') + + self.init_res = _INIT_RES + self.resolution = resolution + self.z_space_dim = z_space_dim + self.w_space_dim = w_space_dim + self.label_size = label_size + self.mapping_layers = mapping_layers + self.mapping_fmaps = mapping_fmaps + self.mapping_lr_mul = mapping_lr_mul + self.repeat_w = repeat_w + self.image_channels = image_channels + self.final_tanh = final_tanh + self.const_input = const_input + self.architecture = architecture + self.fused_modulate = fused_modulate + self.demodulate = demodulate + self.use_wscale = use_wscale + self.noise_type = noise_type + self.fmaps_base = fmaps_base + self.fmaps_max = fmaps_max + + self.num_layers = int(np.log2(self.resolution // self.init_res * 2)) * 2 + + if self.repeat_w: + self.mapping_space_dim = self.w_space_dim + else: + self.mapping_space_dim = self.w_space_dim * self.num_layers + self.mapping = MappingModule(input_space_dim=self.z_space_dim, + hidden_space_dim=self.mapping_fmaps, + final_space_dim=self.mapping_space_dim, + label_size=self.label_size, + num_layers=self.mapping_layers, + use_wscale=self.use_wscale, + lr_mul=self.mapping_lr_mul) + + self.truncation = TruncationModule(w_space_dim=self.w_space_dim, + num_layers=self.num_layers, + repeat_w=self.repeat_w) + + self.synthesis = SynthesisModule(resolution=self.resolution, + init_resolution=self.init_res, + w_space_dim=self.w_space_dim, + image_channels=self.image_channels, + final_tanh=self.final_tanh, + const_input=self.const_input, + architecture=self.architecture, + fused_modulate=self.fused_modulate, + demodulate=self.demodulate, + use_wscale=self.use_wscale, + noise_type=self.noise_type, + fmaps_base=self.fmaps_base, + fmaps_max=self.fmaps_max) + + self.pth_to_tf_var_mapping = {} + for key, val in self.mapping.pth_to_tf_var_mapping.items(): + self.pth_to_tf_var_mapping[f'mapping.{key}'] = val + for key, val in self.truncation.pth_to_tf_var_mapping.items(): + self.pth_to_tf_var_mapping[f'truncation.{key}'] = val + for key, val in self.synthesis.pth_to_tf_var_mapping.items(): + self.pth_to_tf_var_mapping[f'synthesis.{key}'] = val + + def set_space_of_latent(self, space_of_latent='w'): + """Sets the space to which the latent code belong. + + This function is particually used for choosing how to inject the latent + code into the convolutional layers. The original generator will take a + W-Space code and apply it for style modulation after an affine + transformation. But, sometimes, it may need to directly feed an already + affine-transformed code into the convolutional layer, e.g., when + training an encoder for GAN inversion. We term the transformed space as + Style Space (or Y-Space). This function is designed to tell the + convolutional layers how to use the input code. + + Args: + space_of_latent: The space to which the latent code belong. Case + insensitive. (default: 'w') + """ + for module in self.modules(): + if isinstance(module, ModulateConvBlock): + setattr(module, 'space_of_latent', space_of_latent) + + def forward(self, + z, + label=None, + w_moving_decay=0.995, + style_mixing_prob=0.9, + trunc_psi=None, + trunc_layers=None, + randomize_noise=False, + **_unused_kwargs): + mapping_results = self.mapping(z, label) + w = mapping_results['w'] + + if self.training and w_moving_decay < 1: + batch_w_avg = all_gather(w).mean(dim=0) + self.truncation.w_avg.copy_( + self.truncation.w_avg * w_moving_decay + + batch_w_avg * (1 - w_moving_decay)) + + if self.training and style_mixing_prob > 0: + new_z = torch.randn_like(z) + new_w = self.mapping(new_z, label)['w'] + if np.random.uniform() < style_mixing_prob: + mixing_cutoff = np.random.randint(1, self.num_layers) + w = self.truncation(w) + new_w = self.truncation(new_w) + w[:, :mixing_cutoff] = new_w[:, :mixing_cutoff] + + wp = self.truncation(w, trunc_psi, trunc_layers) + synthesis_results = self.synthesis(wp, randomize_noise) + + return {**mapping_results, **synthesis_results} + + +class MappingModule(nn.Module): + """Implements the latent space mapping module. + + Basically, this module executes several dense layers in sequence. + """ + + def __init__(self, + input_space_dim=512, + hidden_space_dim=512, + final_space_dim=512, + label_size=0, + num_layers=8, + normalize_input=True, + use_wscale=True, + lr_mul=0.01): + super().__init__() + + self.input_space_dim = input_space_dim + self.hidden_space_dim = hidden_space_dim + self.final_space_dim = final_space_dim + self.label_size = label_size + self.num_layers = num_layers + self.normalize_input = normalize_input + self.use_wscale = use_wscale + self.lr_mul = lr_mul + + self.norm = PixelNormLayer() if self.normalize_input else nn.Identity() + + self.pth_to_tf_var_mapping = {} + for i in range(num_layers): + dim_mul = 2 if label_size else 1 + in_channels = (input_space_dim * dim_mul if i == 0 else + hidden_space_dim) + out_channels = (final_space_dim if i == (num_layers - 1) else + hidden_space_dim) + self.add_module(f'dense{i}', + DenseBlock(in_channels=in_channels, + out_channels=out_channels, + use_wscale=self.use_wscale, + lr_mul=self.lr_mul)) + self.pth_to_tf_var_mapping[f'dense{i}.weight'] = f'Dense{i}/weight' + self.pth_to_tf_var_mapping[f'dense{i}.bias'] = f'Dense{i}/bias' + if label_size: + self.label_weight = nn.Parameter( + torch.randn(label_size, input_space_dim)) + self.pth_to_tf_var_mapping[f'label_weight'] = f'LabelConcat/weight' + + def forward(self, z, label=None): + if z.ndim != 2 or z.shape[1] != self.input_space_dim: + raise ValueError(f'Input latent code should be with shape ' + f'[batch_size, input_dim], where ' + f'`input_dim` equals to {self.input_space_dim}!\n' + f'But `{z.shape}` is received!') + if self.label_size: + if label is None: + raise ValueError(f'Model requires an additional label ' + f'(with size {self.label_size}) as input, ' + f'but no label is received!') + if label.ndim != 2 or label.shape != (z.shape[0], self.label_size): + raise ValueError(f'Input label should be with shape ' + f'[batch_size, label_size], where ' + f'`batch_size` equals to that of ' + f'latent codes ({z.shape[0]}) and ' + f'`label_size` equals to {self.label_size}!\n' + f'But `{label.shape}` is received!') + embedding = torch.matmul(label, self.label_weight) + z = torch.cat((z, embedding), dim=1) + + z = self.norm(z) + w = z + for i in range(self.num_layers): + w = self.__getattr__(f'dense{i}')(w) + results = { + 'z': z, + 'label': label, + 'w': w, + } + if self.label_size: + results['embedding'] = embedding + return results + + +class TruncationModule(nn.Module): + """Implements the truncation module. + + Truncation is executed as follows: + + For layers in range [0, truncation_layers), the truncated w-code is computed + as + + w_new = w_avg + (w - w_avg) * truncation_psi + + To disable truncation, please set + (1) truncation_psi = 1.0 (None) OR + (2) truncation_layers = 0 (None) + + NOTE: The returned tensor is layer-wise style codes. + """ + + def __init__(self, w_space_dim, num_layers, repeat_w=True): + super().__init__() + + self.num_layers = num_layers + self.w_space_dim = w_space_dim + self.repeat_w = repeat_w + + if self.repeat_w: + self.register_buffer('w_avg', torch.zeros(w_space_dim)) + else: + self.register_buffer('w_avg', torch.zeros(num_layers * w_space_dim)) + self.pth_to_tf_var_mapping = {'w_avg': 'dlatent_avg'} + + def forward(self, w, trunc_psi=None, trunc_layers=None): + if w.ndim == 2: + if self.repeat_w and w.shape[1] == self.w_space_dim: + w = w.view(-1, 1, self.w_space_dim) + wp = w.repeat(1, self.num_layers, 1) + else: + assert w.shape[1] == self.w_space_dim * self.num_layers + wp = w.view(-1, self.num_layers, self.w_space_dim) + else: + wp = w + assert wp.ndim == 3 + assert wp.shape[1:] == (self.num_layers, self.w_space_dim) + + trunc_psi = 1.0 if trunc_psi is None else trunc_psi + trunc_layers = 0 if trunc_layers is None else trunc_layers + if trunc_psi < 1.0 and trunc_layers > 0: + layer_idx = np.arange(self.num_layers).reshape(1, -1, 1) + coefs = np.ones_like(layer_idx, dtype=np.float32) + coefs[layer_idx < trunc_layers] *= trunc_psi + coefs = torch.from_numpy(coefs).to(wp) + w_avg = self.w_avg.view(1, -1, self.w_space_dim) + wp = w_avg + (wp - w_avg) * coefs + return wp + + +class SynthesisModule(nn.Module): + """Implements the image synthesis module. + + Basically, this module executes several convolutional layers in sequence. + """ + + def __init__(self, + resolution=1024, + init_resolution=4, + w_space_dim=512, + image_channels=3, + final_tanh=False, + const_input=True, + architecture='skip', + fused_modulate=True, + demodulate=True, + use_wscale=True, + noise_type='spatial', + fmaps_base=32 << 10, + fmaps_max=512): + super().__init__() + + self.init_res = init_resolution + self.init_res_log2 = int(np.log2(self.init_res)) + self.resolution = resolution + self.final_res_log2 = int(np.log2(self.resolution)) + self.w_space_dim = w_space_dim + self.image_channels = image_channels + self.final_tanh = final_tanh + self.const_input = const_input + self.architecture = architecture + self.fused_modulate = fused_modulate + self.demodulate = demodulate + self.use_wscale = use_wscale + self.noise_type = noise_type + self.fmaps_base = fmaps_base + self.fmaps_max = fmaps_max + + self.num_layers = (self.final_res_log2 - self.init_res_log2 + 1) * 2 + + self.pth_to_tf_var_mapping = {} + for res_log2 in range(self.init_res_log2, self.final_res_log2 + 1): + res = 2 ** res_log2 + block_idx = res_log2 - self.init_res_log2 + + # First convolution layer for each resolution. + if res == self.init_res: + if self.const_input: + self.add_module(f'early_layer', + InputBlock(init_resolution=self.init_res, + channels=self.get_nf(res))) + self.pth_to_tf_var_mapping[f'early_layer.const'] = ( + f'{res}x{res}/Const/const') + else: + self.add_module(f'early_layer', + DenseBlock(in_channels=self.w_space_dim, + out_channels=self.get_nf(res), + use_wscale=self.use_wscale)) + self.pth_to_tf_var_mapping[f'early_layer.weight'] = ( + f'{res}x{res}/Dense/weight') + self.pth_to_tf_var_mapping[f'early_layer.bias'] = ( + f'{res}x{res}/Dense/bias') + else: + layer_name = f'layer{2 * block_idx - 1}' + self.add_module( + layer_name, + ModulateConvBlock(in_channels=self.get_nf(res // 2), + out_channels=self.get_nf(res), + resolution=res, + w_space_dim=self.w_space_dim, + scale_factor=2, + fused_modulate=self.fused_modulate, + demodulate=self.demodulate, + use_wscale=self.use_wscale, + noise_type=self.noise_type)) + self.pth_to_tf_var_mapping[f'{layer_name}.weight'] = ( + f'{res}x{res}/Conv0_up/weight') + self.pth_to_tf_var_mapping[f'{layer_name}.bias'] = ( + f'{res}x{res}/Conv0_up/bias') + self.pth_to_tf_var_mapping[f'{layer_name}.style.weight'] = ( + f'{res}x{res}/Conv0_up/mod_weight') + self.pth_to_tf_var_mapping[f'{layer_name}.style.bias'] = ( + f'{res}x{res}/Conv0_up/mod_bias') + self.pth_to_tf_var_mapping[f'{layer_name}.noise_strength'] = ( + f'{res}x{res}/Conv0_up/noise_strength') + self.pth_to_tf_var_mapping[f'{layer_name}.noise'] = ( + f'noise{2 * block_idx - 1}') + + if self.architecture == 'resnet': + layer_name = f'layer{2 * block_idx - 1}' + self.add_module( + layer_name, + ConvBlock(in_channels=self.get_nf(res // 2), + out_channels=self.get_nf(res), + kernel_size=1, + add_bias=False, + scale_factor=2, + use_wscale=self.use_wscale, + activation_type='linear')) + self.pth_to_tf_var_mapping[f'{layer_name}.weight'] = ( + f'{res}x{res}/Skip/weight') + + # Second convolution layer for each resolution. + layer_name = f'layer{2 * block_idx}' + self.add_module( + layer_name, + ModulateConvBlock(in_channels=self.get_nf(res), + out_channels=self.get_nf(res), + resolution=res, + w_space_dim=self.w_space_dim, + fused_modulate=self.fused_modulate, + demodulate=self.demodulate, + use_wscale=self.use_wscale, + noise_type=self.noise_type)) + tf_layer_name = 'Conv' if res == self.init_res else 'Conv1' + self.pth_to_tf_var_mapping[f'{layer_name}.weight'] = ( + f'{res}x{res}/{tf_layer_name}/weight') + self.pth_to_tf_var_mapping[f'{layer_name}.bias'] = ( + f'{res}x{res}/{tf_layer_name}/bias') + self.pth_to_tf_var_mapping[f'{layer_name}.style.weight'] = ( + f'{res}x{res}/{tf_layer_name}/mod_weight') + self.pth_to_tf_var_mapping[f'{layer_name}.style.bias'] = ( + f'{res}x{res}/{tf_layer_name}/mod_bias') + self.pth_to_tf_var_mapping[f'{layer_name}.noise_strength'] = ( + f'{res}x{res}/{tf_layer_name}/noise_strength') + self.pth_to_tf_var_mapping[f'{layer_name}.noise'] = ( + f'noise{2 * block_idx}') + + # Output convolution layer for each resolution (if needed). + if res_log2 == self.final_res_log2 or self.architecture == 'skip': + layer_name = f'output{block_idx}' + self.add_module( + layer_name, + ModulateConvBlock(in_channels=self.get_nf(res), + out_channels=image_channels, + resolution=res, + w_space_dim=self.w_space_dim, + kernel_size=1, + fused_modulate=self.fused_modulate, + demodulate=False, + use_wscale=self.use_wscale, + add_noise=False, + activation_type='linear')) + self.pth_to_tf_var_mapping[f'{layer_name}.weight'] = ( + f'{res}x{res}/ToRGB/weight') + self.pth_to_tf_var_mapping[f'{layer_name}.bias'] = ( + f'{res}x{res}/ToRGB/bias') + self.pth_to_tf_var_mapping[f'{layer_name}.style.weight'] = ( + f'{res}x{res}/ToRGB/mod_weight') + self.pth_to_tf_var_mapping[f'{layer_name}.style.bias'] = ( + f'{res}x{res}/ToRGB/mod_bias') + + if self.architecture == 'skip': + self.upsample = UpsamplingLayer() + self.final_activate = nn.Tanh() if final_tanh else nn.Identity() + + def get_nf(self, res): + """Gets number of feature maps according to current resolution.""" + return min(self.fmaps_base // res, self.fmaps_max) + + def forward(self, wp, randomize_noise=False): + results = {'wp': wp} + x = self.early_layer(wp[:, 0]) + if self.architecture == 'origin': + for layer_idx in range(self.num_layers - 1): + x, style = self.__getattr__(f'layer{layer_idx}')( + x, wp[:, layer_idx], randomize_noise) + results[f'style{layer_idx:02d}'] = style + image, style = self.__getattr__(f'output{layer_idx // 2}')( + x, wp[:, layer_idx + 1]) + results[f'output_style{layer_idx // 2}'] = style + elif self.architecture == 'skip': + for layer_idx in range(self.num_layers - 1): + x, style = self.__getattr__(f'layer{layer_idx}')( + x, wp[:, layer_idx], randomize_noise) + results[f'style{layer_idx:02d}'] = style + if layer_idx % 2 == 0: + temp, style = self.__getattr__(f'output{layer_idx // 2}')( + x, wp[:, layer_idx + 1]) + results[f'output_style{layer_idx // 2}'] = style + if layer_idx == 0: + image = temp + else: + image = temp + self.upsample(image) + elif self.architecture == 'resnet': + x, style = self.layer0(x) + results[f'style00'] = style + for layer_idx in range(1, self.num_layers - 1, 2): + residual = self.__getattr__(f'skip_layer{layer_idx // 2}')(x) + x, style = self.__getattr__(f'layer{layer_idx}')( + x, wp[:, layer_idx], randomize_noise) + results[f'style{layer_idx:02d}'] = style + x, style = self.__getattr__(f'layer{layer_idx + 1}')( + x, wp[:, layer_idx + 1], randomize_noise) + results[f'style{layer_idx + 1:02d}'] = style + x = (x + residual) / np.sqrt(2.0) + image, style = self.__getattr__(f'output{layer_idx // 2 + 1}')( + x, wp[:, layer_idx + 2]) + results[f'output_style{layer_idx // 2}'] = style + results['image'] = self.final_activate(image) + return results + + +class PixelNormLayer(nn.Module): + """Implements pixel-wise feature vector normalization layer.""" + + def __init__(self, dim=1, epsilon=1e-8): + super().__init__() + self.dim = dim + self.eps = epsilon + + def forward(self, x): + norm = torch.sqrt( + torch.mean(x ** 2, dim=self.dim, keepdim=True) + self.eps) + return x / norm + + +class UpsamplingLayer(nn.Module): + """Implements the upsampling layer. + + This layer can also be used as filtering by setting `scale_factor` as 1. + """ + + def __init__(self, + scale_factor=2, + kernel=(1, 3, 3, 1), + extra_padding=0, + kernel_gain=None): + super().__init__() + assert scale_factor >= 1 + self.scale_factor = scale_factor + + if extra_padding != 0: + assert scale_factor == 1 + + if kernel is None: + kernel = np.ones((scale_factor), dtype=np.float32) + else: + kernel = np.array(kernel, dtype=np.float32) + assert kernel.ndim == 1 + kernel = np.outer(kernel, kernel) + kernel = kernel / np.sum(kernel) + if kernel_gain is None: + kernel = kernel * (scale_factor ** 2) + else: + assert kernel_gain > 0 + kernel = kernel * (kernel_gain ** 2) + assert kernel.ndim == 2 + assert kernel.shape[0] == kernel.shape[1] + kernel = kernel[np.newaxis, np.newaxis] + self.register_buffer('kernel', torch.from_numpy(kernel)) + self.kernel = self.kernel.flip(0, 1) + + self.upsample_padding = (0, scale_factor - 1, # Width padding. + 0, 0, # Width. + 0, scale_factor - 1, # Height padding. + 0, 0, # Height. + 0, 0, # Channel. + 0, 0) # Batch size. + + padding = kernel.shape[2] - scale_factor + extra_padding + self.padding = ((padding + 1) // 2 + scale_factor - 1, padding // 2, + (padding + 1) // 2 + scale_factor - 1, padding // 2) + + def forward(self, x): + assert x.ndim == 4 + channels = x.shape[1] + if self.scale_factor > 1: + x = x.view(-1, channels, x.shape[2], 1, x.shape[3], 1) + x = F.pad(x, self.upsample_padding, mode='constant', value=0) + x = x.view(-1, channels, x.shape[2] * self.scale_factor, + x.shape[4] * self.scale_factor) + x = x.view(-1, 1, x.shape[2], x.shape[3]) + x = F.pad(x, self.padding, mode='constant', value=0) + x = F.conv2d(x, self.kernel, stride=1) + x = x.view(-1, channels, x.shape[2], x.shape[3]) + return x + + +class InputBlock(nn.Module): + """Implements the input block. + + Basically, this block starts from a const input, which is with shape + `(channels, init_resolution, init_resolution)`. + """ + + def __init__(self, init_resolution, channels): + super().__init__() + self.const = nn.Parameter( + torch.randn(1, channels, init_resolution, init_resolution)) + + def forward(self, w): + x = self.const.repeat(w.shape[0], 1, 1, 1) + return x + + +class ConvBlock(nn.Module): + """Implements the convolutional block (no style modulation). + + Basically, this block executes, convolutional layer, filtering layer (if + needed), and activation layer in sequence. + + NOTE: This block is particularly used for skip-connection branch in the + `resnet` structure. + """ + + def __init__(self, + in_channels, + out_channels, + kernel_size=3, + add_bias=True, + scale_factor=1, + filtering_kernel=(1, 3, 3, 1), + use_wscale=True, + wscale_gain=_WSCALE_GAIN, + lr_mul=1.0, + activation_type='lrelu'): + """Initializes with block settings. + + Args: + in_channels: Number of channels of the input tensor. + out_channels: Number of channels of the output tensor. + kernel_size: Size of the convolutional kernels. (default: 3) + add_bias: Whether to add bias onto the convolutional result. + (default: True) + scale_factor: Scale factor for upsampling. `1` means skip + upsampling. (default: 1) + filtering_kernel: Kernel used for filtering after upsampling. + (default: (1, 3, 3, 1)) + use_wscale: Whether to use weight scaling. (default: True) + wscale_gain: Gain factor for weight scaling. (default: _WSCALE_GAIN) + lr_mul: Learning multiplier for both weight and bias. (default: 1.0) + activation_type: Type of activation. Support `linear` and `lrelu`. + (default: `lrelu`) + + Raises: + NotImplementedError: If the `activation_type` is not supported. + """ + super().__init__() + + if scale_factor > 1: + self.use_conv2d_transpose = True + extra_padding = scale_factor - kernel_size + self.filter = UpsamplingLayer(scale_factor=1, + kernel=filtering_kernel, + extra_padding=extra_padding, + kernel_gain=scale_factor) + self.stride = scale_factor + self.padding = 0 # Padding is done in `UpsamplingLayer`. + else: + self.use_conv2d_transpose = False + assert kernel_size % 2 == 1 + self.stride = 1 + self.padding = kernel_size // 2 + + weight_shape = (out_channels, in_channels, kernel_size, kernel_size) + fan_in = kernel_size * kernel_size * in_channels + wscale = wscale_gain / np.sqrt(fan_in) + if use_wscale: + self.weight = nn.Parameter(torch.randn(*weight_shape) / lr_mul) + self.wscale = wscale * lr_mul + else: + self.weight = nn.Parameter( + torch.randn(*weight_shape) * wscale / lr_mul) + self.wscale = lr_mul + + if add_bias: + self.bias = nn.Parameter(torch.zeros(out_channels)) + else: + self.bias = None + self.bscale = lr_mul + + if activation_type == 'linear': + self.activate = nn.Identity() + self.activate_scale = 1.0 + elif activation_type == 'lrelu': + self.activate = nn.LeakyReLU(negative_slope=0.2, inplace=True) + self.activate_scale = np.sqrt(2.0) + else: + raise NotImplementedError(f'Not implemented activation function: ' + f'`{activation_type}`!') + + def forward(self, x): + weight = self.weight * self.wscale + bias = self.bias * self.bscale if self.bias is not None else None + if self.use_conv2d_transpose: + weight = weight.permute(1, 0, 2, 3).flip(2, 3) + x = F.conv_transpose2d(x, + weight=weight, + bias=bias, + stride=self.scale_factor, + padding=self.padding) + x = self.filter(x) + else: + x = F.conv2d(x, + weight=weight, + bias=bias, + stride=self.stride, + padding=self.padding) + x = self.activate(x) * self.activate_scale + return x + + +class ModulateConvBlock(nn.Module): + """Implements the convolutional block with style modulation.""" + + def __init__(self, + in_channels, + out_channels, + resolution, + w_space_dim, + kernel_size=3, + add_bias=True, + scale_factor=1, + filtering_kernel=(1, 3, 3, 1), + fused_modulate=True, + demodulate=True, + use_wscale=True, + wscale_gain=_WSCALE_GAIN, + lr_mul=1.0, + add_noise=True, + noise_type='spatial', + activation_type='lrelu', + epsilon=1e-8): + """Initializes with block settings. + + Args: + in_channels: Number of channels of the input tensor. + out_channels: Number of channels of the output tensor. + resolution: Resolution of the output tensor. + w_space_dim: Dimension of W space for style modulation. + kernel_size: Size of the convolutional kernels. (default: 3) + add_bias: Whether to add bias onto the convolutional result. + (default: True) + scale_factor: Scale factor for upsampling. `1` means skip + upsampling. (default: 1) + filtering_kernel: Kernel used for filtering after upsampling. + (default: (1, 3, 3, 1)) + fused_modulate: Whether to fuse `style_modulate` and `conv2d` + together. (default: True) + demodulate: Whether to perform style demodulation. (default: True) + use_wscale: Whether to use weight scaling. (default: True) + wscale_gain: Gain factor for weight scaling. (default: _WSCALE_GAIN) + lr_mul: Learning multiplier for both weight and bias. (default: 1.0) + add_noise: Whether to add noise onto the output tensor. (default: + True) + noise_type: Type of noise added to the feature map after the + convolution (if needed). Support `spatial` and `channel`. + (default: `spatial`) + activation_type: Type of activation. Support `linear` and `lrelu`. + (default: `lrelu`) + epsilon: Small number to avoid `divide by zero`. (default: 1e-8) + + Raises: + NotImplementedError: If the `activation_type` is not supported. + """ + super().__init__() + + self.in_c = in_channels + self.out_c = out_channels + self.res = resolution + self.w_space_dim = w_space_dim + self.ksize = kernel_size + self.eps = epsilon + self.space_of_latent = 'w' + + if scale_factor > 1: + self.use_conv2d_transpose = True + extra_padding = scale_factor - kernel_size + self.filter = UpsamplingLayer(scale_factor=1, + kernel=filtering_kernel, + extra_padding=extra_padding, + kernel_gain=scale_factor) + self.stride = scale_factor + self.padding = 0 # Padding is done in `UpsamplingLayer`. + else: + self.use_conv2d_transpose = False + assert kernel_size % 2 == 1 + self.stride = 1 + self.padding = kernel_size // 2 + + weight_shape = (out_channels, in_channels, kernel_size, kernel_size) + fan_in = kernel_size * kernel_size * in_channels + wscale = wscale_gain / np.sqrt(fan_in) + if use_wscale: + self.weight = nn.Parameter(torch.randn(*weight_shape) / lr_mul) + self.wscale = wscale * lr_mul + else: + self.weight = nn.Parameter( + torch.randn(*weight_shape) * wscale / lr_mul) + self.wscale = lr_mul + + self.style = DenseBlock(in_channels=w_space_dim, + out_channels=in_channels, + additional_bias=1.0, + use_wscale=use_wscale, + activation_type='linear') + + self.fused_modulate = fused_modulate + self.demodulate = demodulate + + if add_bias: + self.bias = nn.Parameter(torch.zeros(out_channels)) + else: + self.bias = None + self.bscale = lr_mul + + if activation_type == 'linear': + self.activate = nn.Identity() + self.activate_scale = 1.0 + elif activation_type == 'lrelu': + self.activate = nn.LeakyReLU(negative_slope=0.2, inplace=True) + self.activate_scale = np.sqrt(2.0) + else: + raise NotImplementedError(f'Not implemented activation function: ' + f'`{activation_type}`!') + + self.add_noise = add_noise + if self.add_noise: + self.noise_type = noise_type.lower() + if self.noise_type == 'spatial': + self.register_buffer('noise', + torch.randn(1, 1, self.res, self.res)) + elif self.noise_type == 'channel': + self.register_buffer('noise', + torch.randn(1, self.channels, 1, 1)) + else: + raise NotImplementedError(f'Not implemented noise type: ' + f'`{self.noise_type}`!') + self.noise_strength = nn.Parameter(torch.zeros(())) + + def forward_style(self, w): + """Gets style code from the given input. + + More specifically, if the input is from W-Space, it will be projected by + an affine transformation. If it is from the Style Space (Y-Space), no + operation is required. + + NOTE: For codes from Y-Space, we use slicing to make sure the dimension + is correct, in case that the code is padded before fed into this layer. + """ + if self.space_of_latent == 'w': + if w.ndim != 2 or w.shape[1] != self.w_space_dim: + raise ValueError(f'The input tensor should be with shape ' + f'[batch_size, w_space_dim], where ' + f'`w_space_dim` equals to ' + f'{self.w_space_dim}!\n' + f'But `{w.shape}` is received!') + style = self.style(w) + elif self.space_of_latent == 'y': + if w.ndim != 2 or w.shape[1] < self.in_c: + raise ValueError(f'The input tensor should be with shape ' + f'[batch_size, y_space_dim], where ' + f'`y_space_dim` equals to {self.in_c}!\n' + f'But `{w.shape}` is received!') + style = w[:, :self.in_c] + return style + + def forward(self, x, w, randomize_noise=False): + batch = x.shape[0] + + weight = self.weight * self.wscale + weight = weight.permute(2, 3, 1, 0) + + # Style modulation. + style = self.forward_style(w) + _weight = weight.view(1, self.ksize, self.ksize, self.in_c, self.out_c) + _weight = _weight * style.view(batch, 1, 1, self.in_c, 1) + + # Style demodulation. + if self.demodulate: + _weight_norm = torch.sqrt( + torch.sum(_weight ** 2, dim=[1, 2, 3]) + self.eps) + _weight = _weight / _weight_norm.view(batch, 1, 1, 1, self.out_c) + + if self.fused_modulate: + x = x.view(1, batch * self.in_c, x.shape[2], x.shape[3]) + weight = _weight.permute(1, 2, 3, 0, 4).reshape( + self.ksize, self.ksize, self.in_c, batch * self.out_c) + else: + x = x * style.view(batch, self.in_c, 1, 1) + + if self.use_conv2d_transpose: + weight = weight.flip(0, 1) + if self.fused_modulate: + weight = weight.view( + self.ksize, self.ksize, self.in_c, batch, self.out_c) + weight = weight.permute(0, 1, 4, 3, 2) + weight = weight.reshape( + self.ksize, self.ksize, self.out_c, batch * self.in_c) + weight = weight.permute(3, 2, 0, 1) + else: + weight = weight.permute(2, 3, 0, 1) + x = F.conv_transpose2d(x, + weight=weight, + bias=None, + stride=self.stride, + padding=self.padding, + groups=(batch if self.fused_modulate else 1)) + x = self.filter(x) + else: + weight = weight.permute(3, 2, 0, 1) + x = F.conv2d(x, + weight=weight, + bias=None, + stride=self.stride, + padding=self.padding, + groups=(batch if self.fused_modulate else 1)) + + if self.fused_modulate: + x = x.view(batch, self.out_c, self.res, self.res) + elif self.demodulate: + x = x / _weight_norm.view(batch, self.out_c, 1, 1) + + if self.add_noise: + if randomize_noise: + if self.noise_type == 'spatial': + noise = torch.randn(x.shape[0], 1, self.res, self.res).to(x) + elif self.noise_type == 'channel': + noise = torch.randn(x.shape[0], self.channels, 1, 1).to(x) + else: + noise = self.noise + x = x + noise * self.noise_strength.view(1, 1, 1, 1) + + bias = self.bias * self.bscale if self.bias is not None else None + if bias is not None: + x = x + bias.view(1, -1, 1, 1) + x = self.activate(x) * self.activate_scale + return x, style + + +class DenseBlock(nn.Module): + """Implements the dense block. + + Basically, this block executes fully-connected layer and activation layer. + + NOTE: This layer supports adding an additional bias beyond the trainable + bias parameter. This is specially used for the mapping from the w code to + the style code. + """ + + def __init__(self, + in_channels, + out_channels, + add_bias=True, + additional_bias=0, + use_wscale=True, + wscale_gain=_WSCALE_GAIN, + lr_mul=1.0, + activation_type='lrelu'): + """Initializes with block settings. + + Args: + in_channels: Number of channels of the input tensor. + out_channels: Number of channels of the output tensor. + add_bias: Whether to add bias onto the fully-connected result. + (default: True) + additional_bias: The additional bias, which is independent from the + bias parameter. (default: 0.0) + use_wscale: Whether to use weight scaling. (default: True) + wscale_gain: Gain factor for weight scaling. (default: _WSCALE_GAIN) + lr_mul: Learning multiplier for both weight and bias. (default: 1.0) + activation_type: Type of activation. Support `linear` and `lrelu`. + (default: `lrelu`) + + Raises: + NotImplementedError: If the `activation_type` is not supported. + """ + super().__init__() + weight_shape = (out_channels, in_channels) + wscale = wscale_gain / np.sqrt(in_channels) + if use_wscale: + self.weight = nn.Parameter(torch.randn(*weight_shape) / lr_mul) + self.wscale = wscale * lr_mul + else: + self.weight = nn.Parameter( + torch.randn(*weight_shape) * wscale / lr_mul) + self.wscale = lr_mul + + if add_bias: + self.bias = nn.Parameter(torch.zeros(out_channels)) + else: + self.bias = None + self.bscale = lr_mul + self.additional_bias = additional_bias + + if activation_type == 'linear': + self.activate = nn.Identity() + self.activate_scale = 1.0 + elif activation_type == 'lrelu': + self.activate = nn.LeakyReLU(negative_slope=0.2, inplace=True) + self.activate_scale = np.sqrt(2.0) + else: + raise NotImplementedError(f'Not implemented activation function: ' + f'`{activation_type}`!') + + def forward(self, x): + if x.ndim != 2: + x = x.view(x.shape[0], -1) + bias = self.bias * self.bscale if self.bias is not None else None + x = F.linear(x, weight=self.weight * self.wscale, bias=bias) + x = self.activate(x + self.additional_bias) * self.activate_scale + return x diff --git a/detector_codes/LGrad-master/img2gad_pytorch/models/stylegan_discriminator.py b/detector_codes/LGrad-master/img2gad_pytorch/models/stylegan_discriminator.py new file mode 100644 index 0000000000000000000000000000000000000000..7fb95b59b9e2bbd8fd7b1dfaa661ef94fdf5ce8b --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/models/stylegan_discriminator.py @@ -0,0 +1,530 @@ +# python3.7 +"""Contains the implementation of discriminator described in StyleGAN. + +Paper: https://arxiv.org/pdf/1812.04948.pdf + +Official TensorFlow implementation: https://github.com/NVlabs/stylegan +""" + +import numpy as np + +import torch +import torch.nn as nn +import torch.nn.functional as F + +__all__ = ['StyleGANDiscriminator'] + +# Resolutions allowed. +_RESOLUTIONS_ALLOWED = [8, 16, 32, 64, 128, 256, 512, 1024] + +# Initial resolution. +_INIT_RES = 4 + +# Fused-scale options allowed. +_FUSED_SCALE_ALLOWED = [True, False, 'auto'] + +# Minimal resolution for `auto` fused-scale strategy. +_AUTO_FUSED_SCALE_MIN_RES = 128 + +# Default gain factor for weight scaling. +_WSCALE_GAIN = np.sqrt(2.0) + + +class StyleGANDiscriminator(nn.Module): + """Defines the discriminator network in StyleGAN. + + NOTE: The discriminator takes images with `RGB` channel order and pixel + range [-1, 1] as inputs. + + Settings for the network: + + (1) resolution: The resolution of the input image. + (2) image_channels: Number of channels of the input image. (default: 3) + (3) label_size: Size of the additional label for conditional generation. + (default: 0) + (4) fused_scale: Whether to fused `conv2d` and `downsample` together, + resulting in `conv2d` with strides. (default: `auto`) + (5) use_wscale: Whether to use weight scaling. (default: True) + (6) minibatch_std_group_size: Group size for the minibatch standard + deviation layer. 0 means disable. (default: 4) + (7) minibatch_std_channels: Number of new channels after the minibatch + standard deviation layer. (default: 1) + (8) fmaps_base: Factor to control number of feature maps for each layer. + (default: 16 << 10) + (9) fmaps_max: Maximum number of feature maps in each layer. (default: 512) + """ + + def __init__(self, + resolution, + image_channels=3, + label_size=0, + fused_scale='auto', + use_wscale=True, + minibatch_std_group_size=4, + minibatch_std_channels=1, + fmaps_base=16 << 10, + fmaps_max=512): + """Initializes with basic settings. + + Raises: + ValueError: If the `resolution` is not supported, or `fused_scale` + is not supported. + """ + super().__init__() + + if resolution not in _RESOLUTIONS_ALLOWED: + raise ValueError(f'Invalid resolution: `{resolution}`!\n' + f'Resolutions allowed: {_RESOLUTIONS_ALLOWED}.') + if fused_scale not in _FUSED_SCALE_ALLOWED: + raise ValueError(f'Invalid fused-scale option: `{fused_scale}`!\n' + f'Options allowed: {_FUSED_SCALE_ALLOWED}.') + + self.init_res = _INIT_RES + self.init_res_log2 = int(np.log2(self.init_res)) + self.resolution = resolution + self.final_res_log2 = int(np.log2(self.resolution)) + self.image_channels = image_channels + self.label_size = label_size + self.fused_scale = fused_scale + self.use_wscale = use_wscale + self.minibatch_std_group_size = minibatch_std_group_size + self.minibatch_std_channels = minibatch_std_channels + self.fmaps_base = fmaps_base + self.fmaps_max = fmaps_max + + # Level of detail (used for progressive training). + self.register_buffer('lod', torch.zeros(())) + self.pth_to_tf_var_mapping = {'lod': 'lod'} + + for res_log2 in range(self.final_res_log2, self.init_res_log2 - 1, -1): + res = 2 ** res_log2 + block_idx = self.final_res_log2 - res_log2 + + # Input convolution layer for each resolution. + self.add_module( + f'input{block_idx}', + ConvBlock(in_channels=self.image_channels, + out_channels=self.get_nf(res), + kernel_size=1, + padding=0, + use_wscale=self.use_wscale)) + self.pth_to_tf_var_mapping[f'input{block_idx}.weight'] = ( + f'FromRGB_lod{block_idx}/weight') + self.pth_to_tf_var_mapping[f'input{block_idx}.bias'] = ( + f'FromRGB_lod{block_idx}/bias') + + # Convolution block for each resolution (except the last one). + if res != self.init_res: + if self.fused_scale == 'auto': + fused_scale = (res >= _AUTO_FUSED_SCALE_MIN_RES) + else: + fused_scale = self.fused_scale + self.add_module( + f'layer{2 * block_idx}', + ConvBlock(in_channels=self.get_nf(res), + out_channels=self.get_nf(res), + use_wscale=self.use_wscale)) + tf_layer0_name = 'Conv0' + self.add_module( + f'layer{2 * block_idx + 1}', + ConvBlock(in_channels=self.get_nf(res), + out_channels=self.get_nf(res // 2), + downsample=True, + fused_scale=fused_scale, + use_wscale=self.use_wscale)) + tf_layer1_name = 'Conv1_down' + + # Convolution block for last resolution. + else: + self.add_module( + f'layer{2 * block_idx}', + ConvBlock(in_channels=self.get_nf(res), + out_channels=self.get_nf(res), + use_wscale=self.use_wscale, + minibatch_std_group_size=minibatch_std_group_size, + minibatch_std_channels=minibatch_std_channels)) + tf_layer0_name = 'Conv' + self.add_module( + f'layer{2 * block_idx + 1}', + DenseBlock(in_channels=self.get_nf(res) * res * res, + out_channels=self.get_nf(res // 2), + use_wscale=self.use_wscale)) + tf_layer1_name = 'Dense0' + + self.pth_to_tf_var_mapping[f'layer{2 * block_idx}.weight'] = ( + f'{res}x{res}/{tf_layer0_name}/weight') + self.pth_to_tf_var_mapping[f'layer{2 * block_idx}.bias'] = ( + f'{res}x{res}/{tf_layer0_name}/bias') + self.pth_to_tf_var_mapping[f'layer{2 * block_idx + 1}.weight'] = ( + f'{res}x{res}/{tf_layer1_name}/weight') + self.pth_to_tf_var_mapping[f'layer{2 * block_idx + 1}.bias'] = ( + f'{res}x{res}/{tf_layer1_name}/bias') + + # Final dense block. + self.add_module( + f'layer{2 * block_idx + 2}', + DenseBlock(in_channels=self.get_nf(res // 2), + out_channels=max(self.label_size, 1), + use_wscale=self.use_wscale, + wscale_gain=1.0, + activation_type='linear')) + self.pth_to_tf_var_mapping[f'layer{2 * block_idx + 2}.weight'] = ( + f'{res}x{res}/Dense1/weight') + self.pth_to_tf_var_mapping[f'layer{2 * block_idx + 2}.bias'] = ( + f'{res}x{res}/Dense1/bias') + + self.downsample = DownsamplingLayer() + + def get_nf(self, res): + """Gets number of feature maps according to current resolution.""" + return min(self.fmaps_base // res, self.fmaps_max) + + def forward(self, image, label=None, lod=None, **_unused_kwargs): + expected_shape = (self.image_channels, self.resolution, self.resolution) + if image.ndim != 4 or image.shape[1:] != expected_shape: + raise ValueError(f'The input tensor should be with shape ' + f'[batch_size, channel, height, width], where ' + f'`channel` equals to {self.image_channels}, ' + f'`height`, `width` equal to {self.resolution}!\n' + f'But `{image.shape}` is received!') + + lod = self.lod.cpu().tolist() if lod is None else lod + if lod + self.init_res_log2 > self.final_res_log2: + raise ValueError(f'Maximum level-of-detail (lod) is ' + f'{self.final_res_log2 - self.init_res_log2}, ' + f'but `{lod}` is received!') + + if self.label_size: + if label is None: + raise ValueError(f'Model requires an additional label ' + f'(with size {self.label_size}) as input, ' + f'but no label is received!') + batch_size = image.shape[0] + if label.ndim != 2 or label.shape != (batch_size, self.label_size): + raise ValueError(f'Input label should be with shape ' + f'[batch_size, label_size], where ' + f'`batch_size` equals to that of ' + f'images ({image.shape[0]}) and ' + f'`label_size` equals to {self.label_size}!\n' + f'But `{label.shape}` is received!') + + for res_log2 in range(self.final_res_log2, self.init_res_log2 - 1, -1): + block_idx = current_lod = self.final_res_log2 - res_log2 + if current_lod <= lod < current_lod + 1: + x = self.__getattr__(f'input{block_idx}')(image) + elif current_lod - 1 < lod < current_lod: + alpha = lod - np.floor(lod) + x = (self.__getattr__(f'input{block_idx}')(image) * alpha + + x * (1 - alpha)) + if lod < current_lod + 1: + x = self.__getattr__(f'layer{2 * block_idx}')(x) + x = self.__getattr__(f'layer{2 * block_idx + 1}')(x) + if lod > current_lod: + image = self.downsample(image) + x = self.__getattr__(f'layer{2 * block_idx + 2}')(x) + + if self.label_size: + x = torch.sum(x * label, dim=1, keepdim=True) + + return x + + +class MiniBatchSTDLayer(nn.Module): + """Implements the minibatch standard deviation layer.""" + + def __init__(self, group_size=4, new_channels=1, epsilon=1e-8): + super().__init__() + self.group_size = group_size + self.new_channels = new_channels + self.epsilon = epsilon + + def forward(self, x): + if self.group_size <= 1: + return x + ng = min(self.group_size, x.shape[0]) + nc = self.new_channels + temp_c = x.shape[1] // nc # [NCHW] + y = x.view(ng, -1, nc, temp_c, x.shape[2], x.shape[3]) # [GMncHW] + y = y - torch.mean(y, dim=0, keepdim=True) # [GMncHW] + y = torch.mean(y ** 2, dim=0) # [MncHW] + y = torch.sqrt(y + self.epsilon) # [MncHW] + y = torch.mean(y, dim=[2, 3, 4], keepdim=True) # [Mn111] + y = torch.mean(y, dim=2) # [Mn11] + y = y.repeat(ng, 1, x.shape[2], x.shape[3]) # [NnHW] + return torch.cat([x, y], dim=1) + + +class DownsamplingLayer(nn.Module): + """Implements the downsampling layer. + + Basically, this layer can be used to downsample feature maps with average + pooling. + """ + + def __init__(self, scale_factor=2): + super().__init__() + self.scale_factor = scale_factor + + def forward(self, x): + if self.scale_factor <= 1: + return x + return F.avg_pool2d(x, + kernel_size=self.scale_factor, + stride=self.scale_factor, + padding=0) + + +class Blur(torch.autograd.Function): + """Defines blur operation with customized gradient computation.""" + + @staticmethod + def forward(ctx, x, kernel): + ctx.save_for_backward(kernel) + y = F.conv2d(input=x, + weight=kernel, + bias=None, + stride=1, + padding=1, + groups=x.shape[1]) + return y + + @staticmethod + def backward(ctx, dy): + kernel, = ctx.saved_tensors + dx = BlurBackPropagation.apply(dy, kernel) + return dx, None, None + + +class BlurBackPropagation(torch.autograd.Function): + """Defines the back propagation of blur operation. + + NOTE: This is used to speed up the backward of gradient penalty. + """ + + @staticmethod + def forward(ctx, dy, kernel): + ctx.save_for_backward(kernel) + dx = F.conv2d(input=dy, + weight=kernel.flip((2, 3)), + bias=None, + stride=1, + padding=1, + groups=dy.shape[1]) + return dx + + @staticmethod + def backward(ctx, ddx): + kernel, = ctx.saved_tensors + ddy = F.conv2d(input=ddx, + weight=kernel, + bias=None, + stride=1, + padding=1, + groups=ddx.shape[1]) + return ddy, None, None + + +class BlurLayer(nn.Module): + """Implements the blur layer.""" + + def __init__(self, + channels, + kernel=(1, 2, 1), + normalize=True): + super().__init__() + kernel = np.array(kernel, dtype=np.float32).reshape(1, -1) + kernel = kernel.T.dot(kernel) + if normalize: + kernel = kernel / np.sum(kernel) + kernel = kernel[np.newaxis, np.newaxis] + kernel = np.tile(kernel, [channels, 1, 1, 1]) + self.register_buffer('kernel', torch.from_numpy(kernel)) + + def forward(self, x): + return Blur.apply(x, self.kernel) + + +class ConvBlock(nn.Module): + """Implements the convolutional block. + + Basically, this block executes minibatch standard deviation layer (if + needed), convolutional layer, activation layer, and downsampling layer ( + if needed) in sequence. + """ + + def __init__(self, + in_channels, + out_channels, + kernel_size=3, + stride=1, + padding=1, + add_bias=True, + downsample=False, + fused_scale=False, + use_wscale=True, + wscale_gain=_WSCALE_GAIN, + lr_mul=1.0, + activation_type='lrelu', + minibatch_std_group_size=0, + minibatch_std_channels=1): + """Initializes with block settings. + + Args: + in_channels: Number of channels of the input tensor. + out_channels: Number of channels of the output tensor. + kernel_size: Size of the convolutional kernels. (default: 3) + stride: Stride parameter for convolution operation. (default: 1) + padding: Padding parameter for convolution operation. (default: 1) + add_bias: Whether to add bias onto the convolutional result. + (default: True) + downsample: Whether to downsample the result after convolution. + (default: False) + fused_scale: Whether to fused `conv2d` and `downsample` together, + resulting in `conv2d` with strides. (default: False) + use_wscale: Whether to use weight scaling. (default: True) + wscale_gain: Gain factor for weight scaling. (default: _WSCALE_GAIN) + lr_mul: Learning multiplier for both weight and bias. (default: 1.0) + activation_type: Type of activation. Support `linear` and `lrelu`. + (default: `lrelu`) + minibatch_std_group_size: Group size for the minibatch standard + deviation layer. 0 means disable. (default: 0) + minibatch_std_channels: Number of new channels after the minibatch + standard deviation layer. (default: 1) + + Raises: + NotImplementedError: If the `activation_type` is not supported. + """ + super().__init__() + + if minibatch_std_group_size > 1: + in_channels = in_channels + minibatch_std_channels + self.mbstd = MiniBatchSTDLayer(group_size=minibatch_std_group_size, + new_channels=minibatch_std_channels) + else: + self.mbstd = nn.Identity() + + if downsample: + self.blur = BlurLayer(channels=in_channels) + else: + self.blur = nn.Identity() + + if downsample and not fused_scale: + self.downsample = DownsamplingLayer() + else: + self.downsample = nn.Identity() + + if downsample and fused_scale: + self.use_stride = True + self.stride = 2 + self.padding = 1 + else: + self.use_stride = False + self.stride = stride + self.padding = padding + + weight_shape = (out_channels, in_channels, kernel_size, kernel_size) + fan_in = kernel_size * kernel_size * in_channels + wscale = wscale_gain / np.sqrt(fan_in) + if use_wscale: + self.weight = nn.Parameter(torch.randn(*weight_shape) / lr_mul) + self.wscale = wscale * lr_mul + else: + self.weight = nn.Parameter( + torch.randn(*weight_shape) * wscale / lr_mul) + self.wscale = lr_mul + + if add_bias: + self.bias = nn.Parameter(torch.zeros(out_channels)) + self.bscale = lr_mul + else: + self.bias = None + + if activation_type == 'linear': + self.activate = nn.Identity() + elif activation_type == 'lrelu': + self.activate = nn.LeakyReLU(negative_slope=0.2, inplace=True) + else: + raise NotImplementedError(f'Not implemented activation function: ' + f'`{activation_type}`!') + + def forward(self, x): + x = self.mbstd(x) + x = self.blur(x) + weight = self.weight * self.wscale + bias = self.bias * self.bscale if self.bias is not None else None + if self.use_stride: + weight = F.pad(weight, (1, 1, 1, 1, 0, 0, 0, 0), 'constant', 0.0) + weight = (weight[:, :, 1:, 1:] + weight[:, :, :-1, 1:] + + weight[:, :, 1:, :-1] + weight[:, :, :-1, :-1]) * 0.25 + x = F.conv2d(x, + weight=weight, + bias=bias, + stride=self.stride, + padding=self.padding) + x = self.downsample(x) + x = self.activate(x) + return x + + +class DenseBlock(nn.Module): + """Implements the dense block. + + Basically, this block executes fully-connected layer and activation layer. + """ + + def __init__(self, + in_channels, + out_channels, + add_bias=True, + use_wscale=True, + wscale_gain=_WSCALE_GAIN, + lr_mul=1.0, + activation_type='lrelu'): + """Initializes with block settings. + + Args: + in_channels: Number of channels of the input tensor. + out_channels: Number of channels of the output tensor. + add_bias: Whether to add bias onto the fully-connected result. + (default: True) + use_wscale: Whether to use weight scaling. (default: True) + wscale_gain: Gain factor for weight scaling. (default: _WSCALE_GAIN) + lr_mul: Learning multiplier for both weight and bias. (default: 1.0) + activation_type: Type of activation. Support `linear` and `lrelu`. + (default: `lrelu`) + + Raises: + NotImplementedError: If the `activation_type` is not supported. + """ + super().__init__() + weight_shape = (out_channels, in_channels) + wscale = wscale_gain / np.sqrt(in_channels) + if use_wscale: + self.weight = nn.Parameter(torch.randn(*weight_shape) / lr_mul) + self.wscale = wscale * lr_mul + else: + self.weight = nn.Parameter( + torch.randn(*weight_shape) * wscale / lr_mul) + self.wscale = lr_mul + + if add_bias: + self.bias = nn.Parameter(torch.zeros(out_channels)) + self.bscale = lr_mul + else: + self.bias = None + + if activation_type == 'linear': + self.activate = nn.Identity() + elif activation_type == 'lrelu': + self.activate = nn.LeakyReLU(negative_slope=0.2, inplace=True) + else: + raise NotImplementedError(f'Not implemented activation function: ' + f'`{activation_type}`!') + + def forward(self, x): + if x.ndim != 2: + x = x.view(x.shape[0], -1) + bias = self.bias * self.bscale if self.bias is not None else None + x = F.linear(x, weight=self.weight * self.wscale, bias=bias) + x = self.activate(x) + return x diff --git a/detector_codes/LGrad-master/img2gad_pytorch/models/stylegan_generator.py b/detector_codes/LGrad-master/img2gad_pytorch/models/stylegan_generator.py new file mode 100644 index 0000000000000000000000000000000000000000..7842a6c5b7e6f26d7841d93a57e37debf0b7a98b --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/models/stylegan_generator.py @@ -0,0 +1,941 @@ +# python3.7 +"""Contains the implementation of generator described in StyleGAN. + +Paper: https://arxiv.org/pdf/1812.04948.pdf + +Official TensorFlow implementation: https://github.com/NVlabs/stylegan +""" + +import numpy as np + +import torch +import torch.nn as nn +import torch.nn.functional as F + +from .sync_op import all_gather + +__all__ = ['StyleGANGenerator'] + +# Resolutions allowed. +_RESOLUTIONS_ALLOWED = [8, 16, 32, 64, 128, 256, 512, 1024] + +# Initial resolution. +_INIT_RES = 4 + +# Fused-scale options allowed. +_FUSED_SCALE_ALLOWED = [True, False, 'auto'] + +# Minimal resolution for `auto` fused-scale strategy. +_AUTO_FUSED_SCALE_MIN_RES = 128 + +# Default gain factor for weight scaling. +_WSCALE_GAIN = np.sqrt(2.0) +_STYLEMOD_WSCALE_GAIN = 1.0 + + +class StyleGANGenerator(nn.Module): + """Defines the generator network in StyleGAN. + + NOTE: The synthesized images are with `RGB` channel order and pixel range + [-1, 1]. + + Settings for the mapping network: + + (1) z_space_dim: Dimension of the input latent space, Z. (default: 512) + (2) w_space_dim: Dimension of the outout latent space, W. (default: 512) + (3) label_size: Size of the additional label for conditional generation. + (default: 0) + (4)mapping_layers: Number of layers of the mapping network. (default: 8) + (5) mapping_fmaps: Number of hidden channels of the mapping network. + (default: 512) + (6) mapping_lr_mul: Learning rate multiplier for the mapping network. + (default: 0.01) + (7) repeat_w: Repeat w-code for different layers. + + Settings for the synthesis network: + + (1) resolution: The resolution of the output image. + (2) image_channels: Number of channels of the output image. (default: 3) + (3) final_tanh: Whether to use `tanh` to control the final pixel range. + (default: False) + (4) const_input: Whether to use a constant in the first convolutional layer. + (default: True) + (5) fused_scale: Whether to fused `upsample` and `conv2d` together, + resulting in `conv2d_transpose`. (default: `auto`) + (6) use_wscale: Whether to use weight scaling. (default: True) + (7) noise_type: Type of noise added to the convolutional results at each + layer. (default: `spatial`) + (8) fmaps_base: Factor to control number of feature maps for each layer. + (default: 16 << 10) + (9) fmaps_max: Maximum number of feature maps in each layer. (default: 512) + """ + + def __init__(self, + resolution, + z_space_dim=512, + w_space_dim=512, + label_size=0, + mapping_layers=8, + mapping_fmaps=512, + mapping_lr_mul=0.01, + repeat_w=True, + image_channels=3, + final_tanh=False, + const_input=True, + fused_scale='auto', + use_wscale=True, + noise_type='spatial', + fmaps_base=16 << 10, + fmaps_max=512): + """Initializes with basic settings. + + Raises: + ValueError: If the `resolution` is not supported, or `fused_scale` + is not supported. + """ + super().__init__() + + if resolution not in _RESOLUTIONS_ALLOWED: + raise ValueError(f'Invalid resolution: `{resolution}`!\n' + f'Resolutions allowed: {_RESOLUTIONS_ALLOWED}.') + if fused_scale not in _FUSED_SCALE_ALLOWED: + raise ValueError(f'Invalid fused-scale option: `{fused_scale}`!\n' + f'Options allowed: {_FUSED_SCALE_ALLOWED}.') + + self.init_res = _INIT_RES + self.resolution = resolution + self.z_space_dim = z_space_dim + self.w_space_dim = w_space_dim + self.label_size = label_size + self.mapping_layers = mapping_layers + self.mapping_fmaps = mapping_fmaps + self.mapping_lr_mul = mapping_lr_mul + self.repeat_w = repeat_w + self.image_channels = image_channels + self.final_tanh = final_tanh + self.const_input = const_input + self.fused_scale = fused_scale + self.use_wscale = use_wscale + self.noise_type = noise_type + self.fmaps_base = fmaps_base + self.fmaps_max = fmaps_max + + self.num_layers = int(np.log2(self.resolution // self.init_res * 2)) * 2 + + if self.repeat_w: + self.mapping_space_dim = self.w_space_dim + else: + self.mapping_space_dim = self.w_space_dim * self.num_layers + self.mapping = MappingModule(input_space_dim=self.z_space_dim, + hidden_space_dim=self.mapping_fmaps, + final_space_dim=self.mapping_space_dim, + label_size=self.label_size, + num_layers=self.mapping_layers, + use_wscale=self.use_wscale, + lr_mul=self.mapping_lr_mul) + + self.truncation = TruncationModule(w_space_dim=self.w_space_dim, + num_layers=self.num_layers, + repeat_w=self.repeat_w) + + self.synthesis = SynthesisModule(resolution=self.resolution, + init_resolution=self.init_res, + w_space_dim=self.w_space_dim, + image_channels=self.image_channels, + final_tanh=self.final_tanh, + const_input=self.const_input, + fused_scale=self.fused_scale, + use_wscale=self.use_wscale, + noise_type=self.noise_type, + fmaps_base=self.fmaps_base, + fmaps_max=self.fmaps_max) + + self.pth_to_tf_var_mapping = {} + for key, val in self.mapping.pth_to_tf_var_mapping.items(): + self.pth_to_tf_var_mapping[f'mapping.{key}'] = val + for key, val in self.truncation.pth_to_tf_var_mapping.items(): + self.pth_to_tf_var_mapping[f'truncation.{key}'] = val + for key, val in self.synthesis.pth_to_tf_var_mapping.items(): + self.pth_to_tf_var_mapping[f'synthesis.{key}'] = val + + def set_space_of_latent(self, space_of_latent='w'): + """Sets the space to which the latent code belong. + + This function is particually used for choosing how to inject the latent + code into the convolutional layers. The original generator will take a + W-Space code and apply it for style modulation after an affine + transformation. But, sometimes, it may need to directly feed an already + affine-transformed code into the convolutional layer, e.g., when + training an encoder for GAN inversion. We term the transformed space as + Style Space (or Y-Space). This function is designed to tell the + convolutional layers how to use the input code. + + Args: + space_of_latent: The space to which the latent code belong. Case + insensitive. (default: 'w') + """ + for module in self.modules(): + if isinstance(module, StyleModLayer): + setattr(module, 'space_of_latent', space_of_latent) + + def forward(self, + z, + label=None, + lod=None, + w_moving_decay=0.995, + style_mixing_prob=0.9, + trunc_psi=None, + trunc_layers=None, + randomize_noise=False, + **_unused_kwargs): + mapping_results = self.mapping(z, label) + w = mapping_results['w'] + + if self.training and w_moving_decay < 1: + batch_w_avg = all_gather(w).mean(dim=0) + self.truncation.w_avg.copy_( + self.truncation.w_avg * w_moving_decay + + batch_w_avg * (1 - w_moving_decay)) + + if self.training and style_mixing_prob > 0: + new_z = torch.randn_like(z) + new_w = self.mapping(new_z, label)['w'] + lod = self.synthesis.lod.cpu().tolist() if lod is None else lod + current_layers = self.num_layers - int(lod) * 2 + if np.random.uniform() < style_mixing_prob: + mixing_cutoff = np.random.randint(1, current_layers) + w = self.truncation(w) + new_w = self.truncation(new_w) + w[:, mixing_cutoff:] = new_w[:, mixing_cutoff:] + + wp = self.truncation(w, trunc_psi, trunc_layers) + synthesis_results = self.synthesis(wp, lod, randomize_noise) + + return {**mapping_results, **synthesis_results} + + +class MappingModule(nn.Module): + """Implements the latent space mapping module. + + Basically, this module executes several dense layers in sequence. + """ + + def __init__(self, + input_space_dim=512, + hidden_space_dim=512, + final_space_dim=512, + label_size=0, + num_layers=8, + normalize_input=True, + use_wscale=True, + lr_mul=0.01): + super().__init__() + + self.input_space_dim = input_space_dim + self.hidden_space_dim = hidden_space_dim + self.final_space_dim = final_space_dim + self.label_size = label_size + self.num_layers = num_layers + self.normalize_input = normalize_input + self.use_wscale = use_wscale + self.lr_mul = lr_mul + + self.norm = PixelNormLayer() if self.normalize_input else nn.Identity() + + self.pth_to_tf_var_mapping = {} + for i in range(num_layers): + dim_mul = 2 if label_size else 1 + in_channels = (input_space_dim * dim_mul if i == 0 else + hidden_space_dim) + out_channels = (final_space_dim if i == (num_layers - 1) else + hidden_space_dim) + self.add_module(f'dense{i}', + DenseBlock(in_channels=in_channels, + out_channels=out_channels, + use_wscale=self.use_wscale, + lr_mul=self.lr_mul)) + self.pth_to_tf_var_mapping[f'dense{i}.weight'] = f'Dense{i}/weight' + self.pth_to_tf_var_mapping[f'dense{i}.bias'] = f'Dense{i}/bias' + if label_size: + self.label_weight = nn.Parameter( + torch.randn(label_size, input_space_dim)) + self.pth_to_tf_var_mapping[f'label_weight'] = f'LabelConcat/weight' + + def forward(self, z, label=None): + if z.ndim != 2 or z.shape[1] != self.input_space_dim: + raise ValueError(f'Input latent code should be with shape ' + f'[batch_size, input_dim], where ' + f'`input_dim` equals to {self.input_space_dim}!\n' + f'But `{z.shape}` is received!') + if self.label_size: + if label is None: + raise ValueError(f'Model requires an additional label ' + f'(with size {self.label_size}) as input, ' + f'but no label is received!') + if label.ndim != 2 or label.shape != (z.shape[0], self.label_size): + raise ValueError(f'Input label should be with shape ' + f'[batch_size, label_size], where ' + f'`batch_size` equals to that of ' + f'latent codes ({z.shape[0]}) and ' + f'`label_size` equals to {self.label_size}!\n' + f'But `{label.shape}` is received!') + embedding = torch.matmul(label, self.label_weight) + z = torch.cat((z, embedding), dim=1) + + z = self.norm(z) + w = z + for i in range(self.num_layers): + w = self.__getattr__(f'dense{i}')(w) + results = { + 'z': z, + 'label': label, + 'w': w, + } + if self.label_size: + results['embedding'] = embedding + return results + + +class TruncationModule(nn.Module): + """Implements the truncation module. + + Truncation is executed as follows: + + For layers in range [0, truncation_layers), the truncated w-code is computed + as + + w_new = w_avg + (w - w_avg) * truncation_psi + + To disable truncation, please set + (1) truncation_psi = 1.0 (None) OR + (2) truncation_layers = 0 (None) + + NOTE: The returned tensor is layer-wise style codes. + """ + + def __init__(self, w_space_dim, num_layers, repeat_w=True): + super().__init__() + + self.num_layers = num_layers + self.w_space_dim = w_space_dim + self.repeat_w = repeat_w + + if self.repeat_w: + self.register_buffer('w_avg', torch.zeros(w_space_dim)) + else: + self.register_buffer('w_avg', torch.zeros(num_layers * w_space_dim)) + self.pth_to_tf_var_mapping = {'w_avg': 'dlatent_avg'} + + def forward(self, w, trunc_psi=None, trunc_layers=None): + if w.ndim == 2: + if self.repeat_w and w.shape[1] == self.w_space_dim: + w = w.view(-1, 1, self.w_space_dim) + wp = w.repeat(1, self.num_layers, 1) + else: + assert w.shape[1] == self.w_space_dim * self.num_layers + wp = w.view(-1, self.num_layers, self.w_space_dim) + else: + wp = w + assert wp.ndim == 3 + assert wp.shape[1:] == (self.num_layers, self.w_space_dim) + + trunc_psi = 1.0 if trunc_psi is None else trunc_psi + trunc_layers = 0 if trunc_layers is None else trunc_layers + if trunc_psi < 1.0 and trunc_layers > 0: + layer_idx = np.arange(self.num_layers).reshape(1, -1, 1) + coefs = np.ones_like(layer_idx, dtype=np.float32) + coefs[layer_idx < trunc_layers] *= trunc_psi + coefs = torch.from_numpy(coefs).to(wp) + w_avg = self.w_avg.view(1, -1, self.w_space_dim) + wp = w_avg + (wp - w_avg) * coefs + return wp + + +class SynthesisModule(nn.Module): + """Implements the image synthesis module. + + Basically, this module executes several convolutional layers in sequence. + """ + + def __init__(self, + resolution=1024, + init_resolution=4, + w_space_dim=512, + image_channels=3, + final_tanh=False, + const_input=True, + fused_scale='auto', + use_wscale=True, + noise_type='spatial', + fmaps_base=16 << 10, + fmaps_max=512): + super().__init__() + + self.init_res = init_resolution + self.init_res_log2 = int(np.log2(self.init_res)) + self.resolution = resolution + self.final_res_log2 = int(np.log2(self.resolution)) + self.w_space_dim = w_space_dim + self.image_channels = image_channels + self.final_tanh = final_tanh + self.const_input = const_input + self.fused_scale = fused_scale + self.use_wscale = use_wscale + self.noise_type = noise_type + self.fmaps_base = fmaps_base + self.fmaps_max = fmaps_max + + self.num_layers = (self.final_res_log2 - self.init_res_log2 + 1) * 2 + + # Level of detail (used for progressive training). + self.register_buffer('lod', torch.zeros(())) + self.pth_to_tf_var_mapping = {'lod': 'lod'} + + for res_log2 in range(self.init_res_log2, self.final_res_log2 + 1): + res = 2 ** res_log2 + block_idx = res_log2 - self.init_res_log2 + + # First convolution layer for each resolution. + layer_name = f'layer{2 * block_idx}' + if res == self.init_res: + if self.const_input: + self.add_module(layer_name, + ConvBlock(in_channels=self.get_nf(res), + out_channels=self.get_nf(res), + resolution=self.init_res, + w_space_dim=self.w_space_dim, + position='const_init', + use_wscale=self.use_wscale, + noise_type=self.noise_type)) + tf_layer_name = 'Const' + self.pth_to_tf_var_mapping[f'{layer_name}.const'] = ( + f'{res}x{res}/{tf_layer_name}/const') + else: + self.add_module(layer_name, + ConvBlock(in_channels=self.w_space_dim, + out_channels=self.get_nf(res), + resolution=self.init_res, + w_space_dim=self.w_space_dim, + kernel_size=self.init_res, + padding=self.init_res - 1, + use_wscale=self.use_wscale, + noise_type=self.noise_type)) + tf_layer_name = 'Dense' + self.pth_to_tf_var_mapping[f'{layer_name}.weight'] = ( + f'{res}x{res}/{tf_layer_name}/weight') + else: + if self.fused_scale == 'auto': + fused_scale = (res >= _AUTO_FUSED_SCALE_MIN_RES) + else: + fused_scale = self.fused_scale + self.add_module(layer_name, + ConvBlock(in_channels=self.get_nf(res // 2), + out_channels=self.get_nf(res), + resolution=res, + w_space_dim=self.w_space_dim, + upsample=True, + fused_scale=fused_scale, + use_wscale=self.use_wscale, + noise_type=self.noise_type)) + tf_layer_name = 'Conv0_up' + self.pth_to_tf_var_mapping[f'{layer_name}.weight'] = ( + f'{res}x{res}/{tf_layer_name}/weight') + self.pth_to_tf_var_mapping[f'{layer_name}.bias'] = ( + f'{res}x{res}/{tf_layer_name}/bias') + self.pth_to_tf_var_mapping[f'{layer_name}.style.weight'] = ( + f'{res}x{res}/{tf_layer_name}/StyleMod/weight') + self.pth_to_tf_var_mapping[f'{layer_name}.style.bias'] = ( + f'{res}x{res}/{tf_layer_name}/StyleMod/bias') + self.pth_to_tf_var_mapping[f'{layer_name}.apply_noise.weight'] = ( + f'{res}x{res}/{tf_layer_name}/Noise/weight') + self.pth_to_tf_var_mapping[f'{layer_name}.apply_noise.noise'] = ( + f'noise{2 * block_idx}') + + # Second convolution layer for each resolution. + layer_name = f'layer{2 * block_idx + 1}' + self.add_module(layer_name, + ConvBlock(in_channels=self.get_nf(res), + out_channels=self.get_nf(res), + resolution=res, + w_space_dim=self.w_space_dim, + use_wscale=self.use_wscale, + noise_type=self.noise_type)) + tf_layer_name = 'Conv' if res == self.init_res else 'Conv1' + self.pth_to_tf_var_mapping[f'{layer_name}.weight'] = ( + f'{res}x{res}/{tf_layer_name}/weight') + self.pth_to_tf_var_mapping[f'{layer_name}.bias'] = ( + f'{res}x{res}/{tf_layer_name}/bias') + self.pth_to_tf_var_mapping[f'{layer_name}.style.weight'] = ( + f'{res}x{res}/{tf_layer_name}/StyleMod/weight') + self.pth_to_tf_var_mapping[f'{layer_name}.style.bias'] = ( + f'{res}x{res}/{tf_layer_name}/StyleMod/bias') + self.pth_to_tf_var_mapping[f'{layer_name}.apply_noise.weight'] = ( + f'{res}x{res}/{tf_layer_name}/Noise/weight') + self.pth_to_tf_var_mapping[f'{layer_name}.apply_noise.noise'] = ( + f'noise{2 * block_idx + 1}') + + # Output convolution layer for each resolution. + self.add_module(f'output{block_idx}', + ConvBlock(in_channels=self.get_nf(res), + out_channels=self.image_channels, + resolution=res, + w_space_dim=self.w_space_dim, + position='last', + kernel_size=1, + padding=0, + use_wscale=self.use_wscale, + wscale_gain=1.0, + activation_type='linear')) + self.pth_to_tf_var_mapping[f'output{block_idx}.weight'] = ( + f'ToRGB_lod{self.final_res_log2 - res_log2}/weight') + self.pth_to_tf_var_mapping[f'output{block_idx}.bias'] = ( + f'ToRGB_lod{self.final_res_log2 - res_log2}/bias') + + self.upsample = UpsamplingLayer() + self.final_activate = nn.Tanh() if final_tanh else nn.Identity() + + def get_nf(self, res): + """Gets number of feature maps according to current resolution.""" + return min(self.fmaps_base // res, self.fmaps_max) + + def forward(self, wp, lod=None, randomize_noise=False): + lod = self.lod.cpu().tolist() if lod is None else lod + if lod + self.init_res_log2 > self.final_res_log2: + raise ValueError(f'Maximum level-of-detail (lod) is ' + f'{self.final_res_log2 - self.init_res_log2}, ' + f'but `{lod}` is received!') + + results = {'wp': wp} + for res_log2 in range(self.init_res_log2, self.final_res_log2 + 1): + current_lod = self.final_res_log2 - res_log2 + if lod < current_lod + 1: + block_idx = res_log2 - self.init_res_log2 + if block_idx == 0: + if self.const_input: + x, style = self.layer0(None, wp[:, 0], randomize_noise) + else: + x = wp[:, 0].view(-1, self.w_space_dim, 1, 1) + x, style = self.layer0(x, wp[:, 0], randomize_noise) + else: + x, style = self.__getattr__(f'layer{2 * block_idx}')( + x, wp[:, 2 * block_idx], randomize_noise) + results[f'style{2 * block_idx:02d}'] = style + x, style = self.__getattr__(f'layer{2 * block_idx + 1}')( + x, wp[:, 2 * block_idx + 1], randomize_noise) + results[f'style{2 * block_idx + 1:02d}'] = style + if current_lod - 1 < lod <= current_lod: + image = self.__getattr__(f'output{block_idx}')(x, None) + elif current_lod < lod < current_lod + 1: + alpha = np.ceil(lod) - lod + image = (self.__getattr__(f'output{block_idx}')(x, None) * alpha + + self.upsample(image) * (1 - alpha)) + elif lod >= current_lod + 1: + image = self.upsample(image) + results['image'] = self.final_activate(image) + return results + + +class PixelNormLayer(nn.Module): + """Implements pixel-wise feature vector normalization layer.""" + + def __init__(self, epsilon=1e-8): + super().__init__() + self.eps = epsilon + + def forward(self, x): + norm = torch.sqrt(torch.mean(x ** 2, dim=1, keepdim=True) + self.eps) + return x / norm + + +class InstanceNormLayer(nn.Module): + """Implements instance normalization layer.""" + + def __init__(self, epsilon=1e-8): + super().__init__() + self.eps = epsilon + + def forward(self, x): + if x.ndim != 4: + raise ValueError(f'The input tensor should be with shape ' + f'[batch_size, channel, height, width], ' + f'but `{x.shape}` is received!') + x = x - torch.mean(x, dim=[2, 3], keepdim=True) + norm = torch.sqrt( + torch.mean(x ** 2, dim=[2, 3], keepdim=True) + self.eps) + return x / norm + + +class UpsamplingLayer(nn.Module): + """Implements the upsampling layer. + + Basically, this layer can be used to upsample feature maps with nearest + neighbor interpolation. + """ + + def __init__(self, scale_factor=2): + super().__init__() + self.scale_factor = scale_factor + + def forward(self, x): + if self.scale_factor <= 1: + return x + return F.interpolate(x, scale_factor=self.scale_factor, mode='nearest') + + +class Blur(torch.autograd.Function): + """Defines blur operation with customized gradient computation.""" + + @staticmethod + def forward(ctx, x, kernel): + ctx.save_for_backward(kernel) + y = F.conv2d(input=x, + weight=kernel, + bias=None, + stride=1, + padding=1, + groups=x.shape[1]) + return y + + @staticmethod + def backward(ctx, dy): + kernel, = ctx.saved_tensors + dx = F.conv2d(input=dy, + weight=kernel.flip((2, 3)), + bias=None, + stride=1, + padding=1, + groups=dy.shape[1]) + return dx, None, None + + +class BlurLayer(nn.Module): + """Implements the blur layer.""" + + def __init__(self, + channels, + kernel=(1, 2, 1), + normalize=True): + super().__init__() + kernel = np.array(kernel, dtype=np.float32).reshape(1, -1) + kernel = kernel.T.dot(kernel) + if normalize: + kernel /= np.sum(kernel) + kernel = kernel[np.newaxis, np.newaxis] + kernel = np.tile(kernel, [channels, 1, 1, 1]) + self.register_buffer('kernel', torch.from_numpy(kernel)) + + def forward(self, x): + return Blur.apply(x, self.kernel) + + +class NoiseApplyingLayer(nn.Module): + """Implements the noise applying layer.""" + + def __init__(self, resolution, channels, noise_type='spatial'): + super().__init__() + self.noise_type = noise_type.lower() + self.res = resolution + self.channels = channels + if self.noise_type == 'spatial': + self.register_buffer('noise', torch.randn(1, 1, self.res, self.res)) + self.weight = nn.Parameter(torch.zeros(self.channels)) + elif self.noise_type == 'channel': + self.register_buffer('noise', torch.randn(1, self.channels, 1, 1)) + self.weight = nn.Parameter(torch.zeros(self.res, self.res)) + else: + raise NotImplementedError(f'Not implemented noise type: ' + f'`{self.noise_type}`!') + + def forward(self, x, randomize_noise=False): + if x.ndim != 4: + raise ValueError(f'The input tensor should be with shape ' + f'[batch_size, channel, height, width], ' + f'but `{x.shape}` is received!') + if randomize_noise: + if self.noise_type == 'spatial': + noise = torch.randn(x.shape[0], 1, self.res, self.res).to(x) + elif self.noise_type == 'channel': + noise = torch.randn(x.shape[0], self.channels, 1, 1).to(x) + else: + noise = self.noise + + if self.noise_type == 'spatial': + x = x + noise * self.weight.view(1, self.channels, 1, 1) + elif self.noise_type == 'channel': + x = x + noise * self.weight.view(1, 1, self.res, self.res) + return x + + +class StyleModLayer(nn.Module): + """Implements the style modulation layer.""" + + def __init__(self, + w_space_dim, + out_channels, + use_wscale=True): + super().__init__() + self.w_space_dim = w_space_dim + self.out_channels = out_channels + + weight_shape = (self.out_channels * 2, self.w_space_dim) + wscale = _STYLEMOD_WSCALE_GAIN / np.sqrt(self.w_space_dim) + if use_wscale: + self.weight = nn.Parameter(torch.randn(*weight_shape)) + self.wscale = wscale + else: + self.weight = nn.Parameter(torch.randn(*weight_shape) * wscale) + self.wscale = 1.0 + + self.bias = nn.Parameter(torch.zeros(self.out_channels * 2)) + self.space_of_latent = 'w' + + def forward_style(self, w): + """Gets style code from the given input. + + More specifically, if the input is from W-Space, it will be projected by + an affine transformation. If it is from the Style Space (Y-Space), no + operation is required. + + NOTE: For codes from Y-Space, we use slicing to make sure the dimension + is correct, in case that the code is padded before fed into this layer. + """ + if self.space_of_latent == 'w': + if w.ndim != 2 or w.shape[1] != self.w_space_dim: + raise ValueError(f'The input tensor should be with shape ' + f'[batch_size, w_space_dim], where ' + f'`w_space_dim` equals to ' + f'{self.w_space_dim}!\n' + f'But `{w.shape}` is received!') + style = F.linear(w, + weight=self.weight * self.wscale, + bias=self.bias) + elif self.space_of_latent == 'y': + if w.ndim != 2 or w.shape[1] < 2 * self.out_channels: + raise ValueError(f'The input tensor should be with shape ' + f'[batch_size, y_space_dim], where ' + f'`y_space_dim` equals to ' + f'{2 * self.out_channels}!\n' + f'But `{w.shape}` is received!') + style = w[:, :2 * self.out_channels] + return style + + def forward(self, x, w): + style = self.forward_style(w) + style_split = style.view(-1, 2, self.out_channels, 1, 1) + x = x * (style_split[:, 0] + 1) + style_split[:, 1] + return x, style + + +class ConvBlock(nn.Module): + """Implements the normal convolutional block. + + Basically, this block executes upsampling layer (if needed), convolutional + layer, blurring layer, noise applying layer, activation layer, instance + normalization layer, and style modulation layer in sequence. + """ + + def __init__(self, + in_channels, + out_channels, + resolution, + w_space_dim, + position=None, + kernel_size=3, + stride=1, + padding=1, + add_bias=True, + upsample=False, + fused_scale=False, + use_wscale=True, + wscale_gain=_WSCALE_GAIN, + lr_mul=1.0, + activation_type='lrelu', + noise_type='spatial'): + """Initializes with block settings. + + Args: + in_channels: Number of channels of the input tensor. + out_channels: Number of channels of the output tensor. + resolution: Resolution of the output tensor. + w_space_dim: Dimension of W space for style modulation. + position: Position of the layer. `const_init`, `last` would lead to + different behavior. (default: None) + kernel_size: Size of the convolutional kernels. (default: 3) + stride: Stride parameter for convolution operation. (default: 1) + padding: Padding parameter for convolution operation. (default: 1) + add_bias: Whether to add bias onto the convolutional result. + (default: True) + upsample: Whether to upsample the input tensor before convolution. + (default: False) + fused_scale: Whether to fused `upsample` and `conv2d` together, + resulting in `conv2d_transpose`. (default: False) + use_wscale: Whether to use weight scaling. (default: True) + wscale_gain: Gain factor for weight scaling. (default: _WSCALE_GAIN) + lr_mul: Learning multiplier for both weight and bias. (default: 1.0) + activation_type: Type of activation. Support `linear` and `lrelu`. + (default: `lrelu`) + noise_type: Type of noise added to the feature map after the + convolution (if needed). Support `spatial` and `channel`. + (default: `spatial`) + + Raises: + NotImplementedError: If the `activation_type` is not supported. + """ + super().__init__() + + self.position = position + + if add_bias: + self.bias = nn.Parameter(torch.zeros(out_channels)) + self.bscale = lr_mul + else: + self.bias = None + + if activation_type == 'linear': + self.activate = nn.Identity() + elif activation_type == 'lrelu': + self.activate = nn.LeakyReLU(negative_slope=0.2, inplace=True) + else: + raise NotImplementedError(f'Not implemented activation function: ' + f'`{activation_type}`!') + + if self.position != 'last': + self.apply_noise = NoiseApplyingLayer( + resolution, out_channels, noise_type=noise_type) + self.normalize = InstanceNormLayer() + self.style = StyleModLayer(w_space_dim, out_channels, use_wscale) + + if self.position == 'const_init': + self.const = nn.Parameter( + torch.ones(1, in_channels, resolution, resolution)) + return + + self.blur = BlurLayer(out_channels) if upsample else nn.Identity() + + if upsample and not fused_scale: + self.upsample = UpsamplingLayer() + else: + self.upsample = nn.Identity() + + if upsample and fused_scale: + self.use_conv2d_transpose = True + self.stride = 2 + self.padding = 1 + else: + self.use_conv2d_transpose = False + self.stride = stride + self.padding = padding + + weight_shape = (out_channels, in_channels, kernel_size, kernel_size) + fan_in = kernel_size * kernel_size * in_channels + wscale = wscale_gain / np.sqrt(fan_in) + if use_wscale: + self.weight = nn.Parameter(torch.randn(*weight_shape) / lr_mul) + self.wscale = wscale * lr_mul + else: + self.weight = nn.Parameter( + torch.randn(*weight_shape) * wscale / lr_mul) + self.wscale = lr_mul + + def forward(self, x, w, randomize_noise=False): + if self.position != 'const_init': + x = self.upsample(x) + weight = self.weight * self.wscale + if self.use_conv2d_transpose: + weight = F.pad(weight, (1, 1, 1, 1, 0, 0, 0, 0), 'constant', 0) + weight = (weight[:, :, 1:, 1:] + weight[:, :, :-1, 1:] + + weight[:, :, 1:, :-1] + weight[:, :, :-1, :-1]) + weight = weight.permute(1, 0, 2, 3) + x = F.conv_transpose2d(x, + weight=weight, + bias=None, + stride=self.stride, + padding=self.padding) + else: + x = F.conv2d(x, + weight=weight, + bias=None, + stride=self.stride, + padding=self.padding) + x = self.blur(x) + else: + x = self.const.repeat(w.shape[0], 1, 1, 1) + + bias = self.bias * self.bscale if self.bias is not None else None + + if self.position == 'last': + if bias is not None: + x = x + bias.view(1, -1, 1, 1) + return x + + x = self.apply_noise(x, randomize_noise) + if bias is not None: + x = x + bias.view(1, -1, 1, 1) + x = self.activate(x) + x = self.normalize(x) + x, style = self.style(x, w) + return x, style + + +class DenseBlock(nn.Module): + """Implements the dense block. + + Basically, this block executes fully-connected layer and activation layer. + """ + + def __init__(self, + in_channels, + out_channels, + add_bias=True, + use_wscale=True, + wscale_gain=_WSCALE_GAIN, + lr_mul=1.0, + activation_type='lrelu'): + """Initializes with block settings. + + Args: + in_channels: Number of channels of the input tensor. + out_channels: Number of channels of the output tensor. + add_bias: Whether to add bias onto the fully-connected result. + (default: True) + use_wscale: Whether to use weight scaling. (default: True) + wscale_gain: Gain factor for weight scaling. (default: _WSCALE_GAIN) + lr_mul: Learning multiplier for both weight and bias. (default: 1.0) + activation_type: Type of activation. Support `linear` and `lrelu`. + (default: `lrelu`) + + Raises: + NotImplementedError: If the `activation_type` is not supported. + """ + super().__init__() + weight_shape = (out_channels, in_channels) + wscale = wscale_gain / np.sqrt(in_channels) + if use_wscale: + self.weight = nn.Parameter(torch.randn(*weight_shape) / lr_mul) + self.wscale = wscale * lr_mul + else: + self.weight = nn.Parameter( + torch.randn(*weight_shape) * wscale / lr_mul) + self.wscale = lr_mul + + if add_bias: + self.bias = nn.Parameter(torch.zeros(out_channels)) + self.bscale = lr_mul + else: + self.bias = None + + if activation_type == 'linear': + self.activate = nn.Identity() + elif activation_type == 'lrelu': + self.activate = nn.LeakyReLU(negative_slope=0.2, inplace=True) + else: + raise NotImplementedError(f'Not implemented activation function: ' + f'`{activation_type}`!') + + def forward(self, x): + if x.ndim != 2: + x = x.view(x.shape[0], -1) + bias = self.bias * self.bscale if self.bias is not None else None + x = F.linear(x, weight=self.weight * self.wscale, bias=bias) + x = self.activate(x) + return x diff --git a/detector_codes/LGrad-master/img2gad_pytorch/models/sync_op.py b/detector_codes/LGrad-master/img2gad_pytorch/models/sync_op.py new file mode 100644 index 0000000000000000000000000000000000000000..ce9eaaa186a5b52c65ea85b64f9fcd5346279e49 --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/models/sync_op.py @@ -0,0 +1,19 @@ +# python3.7 +"""Contains the synchronizing operator.""" + +import torch +import torch.distributed as dist + +__all__ = ['all_gather'] + + +# 用于在所有设备上收集张量并进行平均 +def all_gather(tensor): + """Gathers tensor from all devices and does averaging.""" + if not dist.is_initialized(): + return tensor + + world_size = dist.get_world_size() + tensor_list = [torch.ones_like(tensor) for _ in range(world_size)] + dist.all_gather(tensor_list, tensor, async_op=False) + return torch.mean(torch.stack(tensor_list, dim=0), dim=0) diff --git a/detector_codes/LGrad-master/img2gad_pytorch/run.py b/detector_codes/LGrad-master/img2gad_pytorch/run.py new file mode 100644 index 0000000000000000000000000000000000000000..60b221f4d70d4f3e853c8351fc612dad4e8462f5 --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/run.py @@ -0,0 +1,97 @@ +import os +import subprocess + +import torch + +# 设置类和模型路径 +classes = ['0_real', '1_fake'] +gan_model_path = 'E:/learning/Deepfake/LGrad-master/img2gad_pytorch' +img_root_dir = 'E:/learning/Deepfake/dataset/CNN_data' +save_root_dir = 'E:/learning/Deepfake/dataset/img2gad_pytorch/Grad_dataset' + +# 激活conda环境 +subprocess.run(['conda', 'activate', 'pytorch'], shell=True) + +# 初始化CUDA上下文 +if torch.cuda.is_available(): + torch.tensor(1.0, device='cuda') + + +# 定义处理函数 +def process_data(data_list, data_root_dir, save_dir): + for data in data_list: + for cls in classes: + img_dir = os.path.join(data, cls) + img_dir_path = os.path.join(data_root_dir, img_dir) + save_dir_path = os.path.join(save_dir, img_dir + '_grad') + command = ( + f'conda activate pytorch && ' + f'python {os.path.join(gan_model_path, "gen_imggrad.py")} ' + f'{img_dir_path} {save_dir_path} ' + f'./karras2019stylegan-bedrooms-256x256_discriminator.pth 1' + ) + subprocess.run(command, shell=True, check=True) + + +# 设置验证数据 +val_datas = ['horse', 'car', 'cat', 'chair'] +val_root_dir = os.path.join(img_root_dir, 'val') +save_dir = os.path.join(save_root_dir, 'val') + +# 处理验证数据 +process_data(val_datas, val_root_dir, save_dir) + +# 设置训练数据 +train_datas = ['horse', 'car', 'cat', 'chair'] +train_root_dir = os.path.join(img_root_dir, 'train') +save_dir = os.path.join(save_root_dir, 'train') + +# 处理训练数据 +process_data(train_datas, train_root_dir, save_dir) + +# 设置测试数据 +test_datas = [ + 'biggan', + 'deepfake', + 'gaugan', + 'stargan', + 'cyclegan/apple', + 'cyclegan/horse', + 'cyclegan/orange', + 'cyclegan/summer', + 'cyclegan/winter', + 'cyclegan/zebra', + 'progan/airplane', + 'progan/bicycle', + 'progan/bird', + 'progan/boat', + 'progan/bottle', + 'progan/bus', + 'progan/car', + 'progan/cat', + 'progan/chair', + 'progan/cow', + 'progan/diningtable', + 'progan/dog', + 'progan/horse', + 'progan/motorbike', + 'progan/person', + 'progan/pottedplant', + 'progan/sheep', + 'progan/sofa', + 'progan/train', + 'progan/tvmonitor', + 'stylegan/bedroom', + 'stylegan/car', + 'stylegan/cat', + 'stylegan2/car', + 'stylegan2/cat', + 'stylegan2/church', + 'stylegan2/horse', +] + +test_root_dir = os.path.join(img_root_dir, 'test') +save_dir = os.path.join(save_root_dir, 'test') + +# 处理测试数据 +process_data(test_datas, test_root_dir, save_dir) diff --git a/detector_codes/LGrad-master/img2gad_pytorch/transform_img2grad.sh b/detector_codes/LGrad-master/img2gad_pytorch/transform_img2grad.sh new file mode 100644 index 0000000000000000000000000000000000000000..33898cbaa7e2fa0ce9c0875456eb80ee61bfce45 --- /dev/null +++ b/detector_codes/LGrad-master/img2gad_pytorch/transform_img2grad.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +GANmodelpath=$(cd $(dirname $0); pwd)/ +Imgrootdir=$2 +Saverootdir=$3 +Classes='0_real 1_fake' + +# Valdatas='sdv1.4' # airplane bicycle bird boat bottle bus car cat chair cow diningtable dog horse motorbike person pottedplant sheep sofa train tvmonitor +# Valrootdir=${Imgrootdir}/val/ +# Savedir=$Saverootdir/val/ + +# for Valdata in $Valdatas +# do +# for Class in $Classes +# do +# Imgdir=${Valdata}/${Class} +# CUDA_VISIBLE_DEVICES=$1 python $GANmodelpath/gen_imggrad.py \ +# ${Valrootdir}${Imgdir} \ +# ${Savedir}${Imgdir} \ +# ./karras2019stylegan-bedrooms-256x256_discriminator.pth \ +# 1 +# done +# done + + +# Traindatas='sdv1.4' # horse car cat chair +# Trainrootdir=${Imgrootdir}/train/ +# Savedir=$Saverootdir/train/ +# for Traindata in $Traindatas +# do +# for Class in $Classes +# do +# Imgdir=${Traindata}/${Class} +# CUDA_VISIBLE_DEVICES=$1 python $GANmodelpath/gen_imggrad.py \ +# ${Trainrootdir}${Imgdir} \ +# ${Savedir}${Imgdir} \ +# ./karras2019stylegan-bedrooms-256x256_discriminator.pth \ +# 1 +# done +# done + +Testdatas='BlendFace BLIP CommunityAI DALLE-3 E4S FaceSwap FLUX1-dev GLIDE Imagen3 Infinite-ID InstantID InSwap IP-Adapter Midjourney PhotoMaker ProGAN R3GAN SD3 SDXL SimSwap SocialRF StyleGAN-XL StyleGAN3 StyleSwim WFIR' +Testrootdir=${Imgrootdir} +Savedir=$Saverootdir + +for Testdata in $Testdatas +do + for Class in $Classes + do + Imgdir=${Testdata}/${Class} + CUDA_VISIBLE_DEVICES=$1 python $GANmodelpath/gen_imggrad.py \ + ${Testrootdir}${Imgdir} \ + ${Savedir}${Imgdir} \ + ./karras2019stylegan-bedrooms-256x256_discriminator.pth \ + 1 + done +done \ No newline at end of file diff --git a/detector_codes/LGrad-master/requirements.txt b/detector_codes/LGrad-master/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..5229c276fd6097939ede4e2f015a95352cb177ec --- /dev/null +++ b/detector_codes/LGrad-master/requirements.txt @@ -0,0 +1,7 @@ +scipy +scikit-learn +numpy +opencv_python +Pillow +torch>=1.2.0 +torchvision diff --git a/detector_codes/LGrad-master/train-detector.sh b/detector_codes/LGrad-master/train-detector.sh new file mode 100644 index 0000000000000000000000000000000000000000..fa1b4d89f9020db7a5af32244f9eca39422546b2 --- /dev/null +++ b/detector_codes/LGrad-master/train-detector.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +pwd=$(cd $(dirname $0); pwd) +cd ${pwd}/CNNDetection/ + +#${pwd}/img2gad/stylegan/Grad_dataset + +CUDA_VISIBLE_DEVICES=$1 python train.py --name 1class-resnet-horse --dataroot $2 --classes horse --batch_size 16 --delr_freq 10 --lr 0.0005 --niter 100 + +CUDA_VISIBLE_DEVICES=$1 python train.py --name 2class-resnet-chair-horse --dataroot $2 --classes chair,horse --batch_size 16 --delr_freq 10 --lr 0.0005 --niter 100 + +CUDA_VISIBLE_DEVICES=$1 python train.py --name 4class-resnet-car-cat-chair-horse --dataroot $2 --classes car,cat,chair,horse --batch_size 16 --delr_freq 10 --lr 0.0005 --niter 100 + diff --git a/detector_codes/LGrad-master/transform_img2grad.sh b/detector_codes/LGrad-master/transform_img2grad.sh new file mode 100644 index 0000000000000000000000000000000000000000..ea962ed3078ed67c1a2dfaf6bda31dcbc89118b3 --- /dev/null +++ b/detector_codes/LGrad-master/transform_img2grad.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +#./transform_img2grad.sh 0 /root/ img2gad/stylegan/Grad_dataset/ +Classes='0_real 1_fake' +GANmodelpath=$(cd $(dirname $0); pwd)/img2gad_pytorch/ +Model=karras2019stylegan-bedrooms-256x256.pkl +Imgrootdir=$2 +Saverootdir=$3 + + +# Valdatas='airplane bicycle bird boat bottle bus car cat chair cow diningtable dog horse motorbike person pottedplant sheep sofa train tvmonitor' +Valdatas='horse car cat chair' +Valrootdir=${Imgrootdir}/val/ +Savedir=$Saverootdir/val/ + +for Valdata in $Valdatas +do + for Class in $Classes + do + Imgdir=${Valdata}/${Class} + CUDA_VISIBLE_DEVICES=$1 python $GANmodelpath/gen_imggrad.py 1\ + ${Valrootdir}${Imgdir} \ + ${Savedir}${Imgdir}_grad \ + ${GANmodelpath}networks/${Model} \ + 1 + done +done + + +Traindatas='horse car cat chair' +Trainrootdir=${Imgrootdir}/train/ +Savedir=$Saverootdir/train/ +for Traindata in $Traindatas +do + for Class in $Classes + do + Imgdir=${Traindata}/${Class} + CUDA_VISIBLE_DEVICES=$1 python $GANmodelpath/gen_imggrad.py 1\ + ${Trainrootdir}${Imgdir} \ + ${Savedir}${Imgdir}_grad \ + ${GANmodelpath}networks/${Model} \ + 1 + done +done + + +# Testdatas='biggan deepfake gaugan stargan cyclegan/apple cyclegan/horse cyclegan/orange cyclegan/summer cyclegan/winter cyclegan/zebra progan/airplane progan/bicycle progan/bird progan/boat progan/bottle progan/bus progan/car progan/cat progan/chair progan/cow progan/diningtable progan/dog progan/horse progan/motorbike progan/person progan/pottedplant progan/sheep progan/sofa progan/train progan/tvmonitor stylegan/bedroom stylegan/car stylegan/cat stylegan2/car stylegan2/cat stylegan2/church stylegan2/horse' +# Testrootdir=${Imgrootdir}/test/ +# Savedir=$Saverootdir/test/ + +# for Testdata in $Testdatas +# do +# for Class in $Classes +# do +# Imgdir=${Testdata}/${Class} +# CUDA_VISIBLE_DEVICES=$1 python $GANmodelpath/gen_imggrad.py 1\ +# ${Testrootdir}${Imgdir} \ +# ${Savedir}${Imgdir}_grad \ +# ${GANmodelpath}networks/${Model} \ +# 1 +# done +# done + diff --git a/detector_codes/NPR-DeepfakeDetection-main/data/__init__.py b/detector_codes/NPR-DeepfakeDetection-main/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..664e6eeaa752b54f53bdaf076766094a5dd86c1f --- /dev/null +++ b/detector_codes/NPR-DeepfakeDetection-main/data/__init__.py @@ -0,0 +1,52 @@ +import torch +import numpy as np +from torch.utils.data.sampler import WeightedRandomSampler + +from .datasets import dataset_folder + +''' +def get_dataset(opt): + dset_lst = [] + for cls in opt.classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) +''' + +import os +def get_dataset(opt): + classes = os.listdir(opt.dataroot) if len(opt.classes) == 0 else opt.classes + if '0_real' not in classes or '1_fake' not in classes: + dset_lst = [] + for cls in classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) + return dataset_folder(opt, opt.dataroot) + +def get_bal_sampler(dataset): + targets = [] + for d in dataset.datasets: + targets.extend(d.targets) + + ratio = np.bincount(targets) + w = 1. / torch.tensor(ratio, dtype=torch.float) + sample_weights = w[targets] + sampler = WeightedRandomSampler(weights=sample_weights, + num_samples=len(sample_weights)) + return sampler + + +def create_dataloader(opt): + shuffle = not opt.serial_batches if (opt.isTrain and not opt.class_bal) else False + dataset = get_dataset(opt) + sampler = get_bal_sampler(dataset) if opt.class_bal else None + + data_loader = torch.utils.data.DataLoader(dataset, + batch_size=opt.batch_size, + shuffle=shuffle, + sampler=sampler, + num_workers=int(opt.num_threads)) + return data_loader diff --git a/detector_codes/NPR-DeepfakeDetection-main/data/datasets.py b/detector_codes/NPR-DeepfakeDetection-main/data/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..a78c575545172ccf9fea02a072cc18d5066b4cec --- /dev/null +++ b/detector_codes/NPR-DeepfakeDetection-main/data/datasets.py @@ -0,0 +1,212 @@ +import cv2 +import numpy as np +import torchvision.datasets as datasets +import torchvision.transforms as transforms +import torchvision.transforms.functional as TF +from random import random, choice +from io import BytesIO +from PIL import Image +from PIL import ImageFile +from scipy.ndimage.filters import gaussian_filter +from torchvision.transforms import InterpolationMode +import random +import torch + +ImageFile.LOAD_TRUNCATED_IMAGES = True + +def dataset_folder(opt, root): + if opt.mode == 'binary': + return binary_dataset(opt, root) + if opt.mode == 'filename': + return FileNameDataset(opt, root) + raise ValueError('opt.mode needs to be binary or filename.') + + +class RandomGaussianBlur(): + def __init__(self, kernel_size, sigma=(0.1, 2.0), p=1.0): + self.blur = transforms.GaussianBlur(kernel_size=kernel_size, sigma=sigma) + self.p = p + + def __call__(self, img): + if random.random() < self.p: + return self.blur(img) + return img + + +class RandomMask(object): + def __init__(self, ratio=0.5, patch_size=16, p=0.5): + """ + Args: + ratio (float or tuple of float): If float, the ratio of the image to be masked. + If tuple of float, random sample ratio between the two values. + patch_size (int): the size of the mask (d*d). + """ + if isinstance(ratio, float): + self.fixed_ratio = True + self.ratio = (ratio, ratio) + elif isinstance(ratio, tuple) and len(ratio) == 2 and all(isinstance(r, float) for r in ratio): + self.fixed_ratio = False + self.ratio = ratio + else: + raise ValueError("Ratio must be a float or a tuple of two floats.") + + self.patch_size = patch_size + self.p = p + + def __call__(self, tensor): + + if random.random() > self.p: return tensor + + _, h, w = tensor.shape + mask = torch.ones((h, w), dtype=torch.float32) + + if self.fixed_ratio: + ratio = self.ratio[0] + else: + ratio = random.uniform(self.ratio[0], self.ratio[1]) + + # Calculate the number of masks needed + num_masks = int((h * w * ratio) / (self.patch_size ** 2)) + + # Generate non-overlapping random positions + selected_positions = set() + while len(selected_positions) < num_masks: + top = random.randint(0, (h // self.patch_size) - 1) * self.patch_size + left = random.randint(0, (w // self.patch_size) - 1) * self.patch_size + selected_positions.add((top, left)) + + for (top, left) in selected_positions: + mask[top:top+self.patch_size, left:left+self.patch_size] = 0 + + return tensor * mask.expand_as(tensor) + +def binary_dataset(opt, root): + if opt.isTrain: + crop_func = transforms.RandomCrop(opt.cropSize) + rotation_func = transforms.RandomRotation(180) + jitter_func = transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5) + mask_func = RandomMask(ratio=(0.00, 0.75), patch_size=16, p=0.5) + elif opt.no_crop: + crop_func = transforms.Lambda(lambda img: img) + rotation_func = transforms.Lambda(lambda img: img) + jitter_func = transforms.Lambda(lambda img: img) + mask_func = transforms.Lambda(lambda img: img) + else: + crop_func = transforms.CenterCrop(opt.cropSize) + rotation_func = transforms.Lambda(lambda img: img) + jitter_func = transforms.Lambda(lambda img: img) + mask_func = transforms.Lambda(lambda img: img) + + if opt.isTrain and not opt.no_flip: + flip_func = transforms.RandomHorizontalFlip() + else: + flip_func = transforms.Lambda(lambda img: img) + if not opt.isTrain and opt.no_resize: + rz_func = transforms.Lambda(lambda img: img) + else: + # rz_func = transforms.Lambda(lambda img: custom_resize(img, opt)) + rz_func = transforms.Resize((opt.loadSize, opt.loadSize)) + # rz_func = transforms.CenterCrop(opt.cropSize) + + dset = datasets.ImageFolder( + root, + transforms.Compose([ + rz_func, + # transforms.Lambda(lambda img: data_augment(img, opt)), + crop_func, + flip_func, + rotation_func, + jitter_func, + transforms.ToTensor(), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + mask_func + ])) + return dset + + +class FileNameDataset(datasets.ImageFolder): + def name(self): + return 'FileNameDataset' + + def __init__(self, opt, root): + self.opt = opt + super().__init__(root) + + def __getitem__(self, index): + # Loading sample + path, target = self.samples[index] + return path + + +def data_augment(img, opt): + img = np.array(img) + + if random() < opt.blur_prob: + sig = sample_continuous(opt.blur_sig) + gaussian_blur(img, sig) + + if random() < opt.jpg_prob: + method = sample_discrete(opt.jpg_method) + qual = sample_discrete(opt.jpg_qual) + img = jpeg_from_key(img, qual, method) + + return Image.fromarray(img) + + +def sample_continuous(s): + if len(s) == 1: + return s[0] + if len(s) == 2: + rg = s[1] - s[0] + return random() * rg + s[0] + raise ValueError("Length of iterable s should be 1 or 2.") + + +def sample_discrete(s): + if len(s) == 1: + return s[0] + return choice(s) + + +def gaussian_blur(img, sigma): + gaussian_filter(img[:,:,0], output=img[:,:,0], sigma=sigma) + gaussian_filter(img[:,:,1], output=img[:,:,1], sigma=sigma) + gaussian_filter(img[:,:,2], output=img[:,:,2], sigma=sigma) + + +def cv2_jpg(img, compress_val): + img_cv2 = img[:,:,::-1] + encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), compress_val] + result, encimg = cv2.imencode('.jpg', img_cv2, encode_param) + decimg = cv2.imdecode(encimg, 1) + return decimg[:,:,::-1] + + +def pil_jpg(img, compress_val): + out = BytesIO() + img = Image.fromarray(img) + img.save(out, format='jpeg', quality=compress_val) + img = Image.open(out) + # load from memory before ByteIO closes + img = np.array(img) + out.close() + return img + + +jpeg_dict = {'cv2': cv2_jpg, 'pil': pil_jpg} +def jpeg_from_key(img, compress_val, key): + method = jpeg_dict[key] + return method(img, compress_val) + + +# rz_dict = {'bilinear': Image.BILINEAR, + # 'bicubic': Image.BICUBIC, + # 'lanczos': Image.LANCZOS, + # 'nearest': Image.NEAREST} +rz_dict = {'bilinear': InterpolationMode.BILINEAR, + 'bicubic': InterpolationMode.BICUBIC, + 'lanczos': InterpolationMode.LANCZOS, + 'nearest': InterpolationMode.NEAREST} +def custom_resize(img, opt): + interp = sample_discrete(opt.rz_interp) + return TF.resize(img, (opt.loadSize,opt.loadSize), interpolation=rz_dict[interp]) diff --git a/detector_codes/NPR-DeepfakeDetection-main/log_test.log b/detector_codes/NPR-DeepfakeDetection-main/log_test.log new file mode 100644 index 0000000000000000000000000000000000000000..9c8ae9d9653f16c10a743ced53a9c422e8ff2b4c --- /dev/null +++ b/detector_codes/NPR-DeepfakeDetection-main/log_test.log @@ -0,0 +1,446 @@ +2025-04-24 03:48:29,032 Model_path /data/ziqiang/yjz/code/NPR-DeepfakeDetection-main/checkpoints/4class-car-cat-chair-horse2025_04_23_11_55_08/model_epoch_80.pth +2025-04-24 03:48:30,829 AIGIBench +2025-04-24 03:48:30,829 2025-04-24 03:48:30 +2025-04-24 03:48:58,161 (0 R3GAN ) acc: 80.8; ap: 75.6; r_acc: 77.0; f_acc: 84.6 +2025-04-24 03:49:46,568 (1 IP-Adapter ) acc: 79.0; ap: 81.1; r_acc: 76.9; f_acc: 81.2 +2025-04-24 03:51:51,470 (2 SocialRF ) acc: 54.5; ap: 58.4; r_acc: 83.0; f_acc: 26.1 +2025-04-24 03:52:31,896 (3 CommunityAI ) acc: 54.4; ap: 60.0; r_acc: 99.9; f_acc: 8.9 +2025-04-24 03:53:18,404 (4 StyleGAN-XL ) acc: 74.5; ap: 75.9; r_acc: 76.5; f_acc: 72.4 +2025-04-24 03:53:57,708 (5 Midjourney ) acc: 69.7; ap: 71.1; r_acc: 55.3; f_acc: 84.1 +2025-04-24 03:54:42,056 (6 FLUX1-dev ) acc: 87.2; ap: 93.6; r_acc: 75.8; f_acc: 98.5 +2025-04-24 03:55:12,148 (7 E4S ) acc: 34.0; ap: 34.4; r_acc: 67.9; f_acc: 0.1 +2025-04-24 03:55:59,054 (8 Imagen3 ) acc: 84.6; ap: 91.0; r_acc: 77.2; f_acc: 92.1 +2025-04-24 03:56:16,307 (9 BLIP ) acc: 94.0; ap: 97.0; r_acc: 89.3; f_acc: 98.7 +2025-04-24 03:56:59,679 (10 SDXL ) acc: 87.0; ap: 93.7; r_acc: 75.9; f_acc: 98.1 +2025-04-24 03:58:20,874 (11 DALLE-3 ) acc: 57.6; ap: 61.9; r_acc: 76.6; f_acc: 38.6 +2025-04-24 03:58:52,373 (12 GLIDE ) acc: 78.2; ap: 85.2; r_acc: 80.1; f_acc: 76.4 +2025-04-24 03:59:25,116 (13 InSwap ) acc: 41.0; ap: 36.9; r_acc: 80.9; f_acc: 0.2 +2025-04-24 03:59:54,895 (14 FaceSwap ) acc: 41.1; ap: 39.5; r_acc: 80.9; f_acc: 0.3 +2025-04-24 04:00:40,409 (15 StyleSwim ) acc: 84.7; ap: 91.7; r_acc: 76.6; f_acc: 92.8 +2025-04-24 04:00:51,897 (16 ProGAN ) acc: 99.8; ap: 100.0; r_acc: 99.9; f_acc: 99.7 +2025-04-24 04:01:46,399 (17 BlendFace ) acc: 33.9; ap: 33.3; r_acc: 67.6; f_acc: 0.1 +2025-04-24 04:03:30,156 (18 PhotoMaker ) acc: 46.4; ap: 52.0; r_acc: 76.4; f_acc: 16.3 +2025-04-24 04:05:05,008 (19 SD3 ) acc: 86.4; ap: 93.5; r_acc: 75.9; f_acc: 96.9 +2025-04-24 04:07:09,404 (20 Infinite-ID ) acc: 62.9; ap: 62.8; r_acc: 76.1; f_acc: 49.6 +2025-04-24 04:07:21,510 (21 WFIR ) acc: 77.8; ap: 77.0; r_acc: 76.8; f_acc: 78.9 +2025-04-24 04:07:56,308 (22 SimSwap ) acc: 40.5; ap: 38.5; r_acc: 80.9; f_acc: 0.1 +2025-04-24 04:10:38,073 (23 InstantID ) acc: 71.3; ap: 75.9; r_acc: 77.8; f_acc: 64.8 +2025-04-24 04:11:58,658 (24 StyleGAN3 ) acc: 84.1; ap: 89.4; r_acc: 77.2; f_acc: 90.9 +2025-04-24 04:11:58,659 (25 Mean ) acc: 68.2; ap: 70.8; r_acc: 78.3; f_acc: 58.0 +2025-04-24 04:11:58,659 ************************* +2025-05-12 07:08:08,991 Model_path /data/ziqiang/yjz/code/NPR-DeepfakeDetection-main/checkpoints/4class-car-cat-chair-horse2025_04_23_11_55_08/model_epoch_80.pth +2025-05-12 07:08:09,493 AIGIBench # crop +2025-05-12 07:08:09,493 2025-05-12 07:08:09 +2025-05-12 07:08:41,994 (0 R3GAN ) acc: 89.9; ap: 96.7; r_acc: 97.1; f_acc: 82.7 +2025-05-12 07:09:58,874 (1 IP-Adapter ) acc: 59.6; ap: 83.3; r_acc: 97.1; f_acc: 22.1 +2025-05-12 07:12:06,769 (2 SocialRF ) acc: 55.8; ap: 66.8; r_acc: 99.4; f_acc: 12.1 +2025-05-12 07:13:04,383 (3 CommunityAI ) acc: 52.5; ap: 48.7; r_acc: 100.0; f_acc: 4.9 +2025-05-12 07:13:46,607 (4 StyleGAN-XL ) acc: 95.1; ap: 98.0; r_acc: 97.4; f_acc: 92.8 +2025-05-12 07:14:36,324 (5 Midjourney ) acc: 79.7; ap: 91.4; r_acc: 94.8; f_acc: 64.5 +2025-05-12 07:16:00,195 (6 FLUX1-dev ) acc: 92.1; ap: 97.7; r_acc: 97.2; f_acc: 87.1 +2025-05-12 07:17:03,690 (7 E4S ) acc: 48.2; ap: 36.6; r_acc: 96.2; f_acc: 0.2 +2025-05-12 07:19:15,313 (8 Imagen3 ) acc: 83.5; ap: 95.9; r_acc: 97.0; f_acc: 70.1 +2025-05-12 07:20:36,711 (9 BLIP ) acc: 82.9; ap: 97.1; r_acc: 98.4; f_acc: 67.3 +2025-05-12 07:23:58,863 (10 SDXL ) acc: 75.5; ap: 92.2; r_acc: 96.8; f_acc: 54.2 +2025-05-12 07:27:08,293 (11 DALLE-3 ) acc: 50.8; ap: 53.7; r_acc: 97.2; f_acc: 4.4 +2025-05-12 07:27:59,022 (12 GLIDE ) acc: 86.4; ap: 97.2; r_acc: 97.6; f_acc: 75.2 +2025-05-12 07:28:52,152 (13 InSwap ) acc: 49.6; ap: 44.3; r_acc: 97.8; f_acc: 0.4 +2025-05-12 07:29:18,397 (14 FaceSwap ) acc: 49.6; ap: 49.7; r_acc: 97.8; f_acc: 0.4 +2025-05-12 07:30:36,541 (15 StyleSwim ) acc: 96.3; ap: 99.3; r_acc: 97.1; f_acc: 95.6 +2025-05-12 07:30:49,884 (16 ProGAN ) acc: 99.7; ap: 100.0; r_acc: 99.9; f_acc: 99.5 +2025-05-12 07:31:32,547 (17 BlendFace ) acc: 48.1; ap: 39.1; r_acc: 96.0; f_acc: 0.2 +2025-05-12 07:34:23,060 (18 PhotoMaker ) acc: 50.4; ap: 68.3; r_acc: 97.1; f_acc: 3.6 +2025-05-12 07:37:53,176 (19 SD3 ) acc: 88.6; ap: 97.1; r_acc: 96.8; f_acc: 80.4 +2025-05-12 07:41:32,072 (20 Infinite-ID ) acc: 49.9; ap: 70.1; r_acc: 97.0; f_acc: 2.8 +2025-05-12 07:41:45,248 (21 WFIR ) acc: 51.2; ap: 92.6; r_acc: 100.0; f_acc: 2.5 +2025-05-12 07:42:35,499 (22 SimSwap ) acc: 48.9; ap: 47.3; r_acc: 97.6; f_acc: 0.2 +2025-05-12 07:45:25,522 (23 InstantID ) acc: 57.4; ap: 82.5; r_acc: 97.4; f_acc: 17.4 +2025-05-12 07:46:48,299 (24 StyleGAN3 ) acc: 93.9; ap: 98.8; r_acc: 97.5; f_acc: 90.3 +2025-05-12 07:46:48,299 (25 Mean ) acc: 69.4; ap: 77.8; r_acc: 97.5; f_acc: 41.2 +2025-05-12 07:46:48,299 ************************* +2025-05-14 06:17:13,015 Model_path /data/ziqiang/yjz/code/NPR-DeepfakeDetection-main/checkpoints/4class-car-cat-chair-horse2025_04_23_11_55_08/model_epoch_80.pth +2025-05-14 06:17:16,180 jpeg +2025-05-14 06:17:16,180 2025-05-14 06:17:16 +2025-05-14 06:17:36,007 (0 R3GAN ) acc: 50.0; ap: 40.8; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:17:59,673 (1 IP-Adapter ) acc: 50.1; ap: 67.4; r_acc: 100.0; f_acc: 0.2 +2025-05-14 06:19:29,139 (2 SocialRF ) acc: 48.5; ap: 48.7; r_acc: 96.7; f_acc: 0.4 +2025-05-14 06:20:29,351 (3 CommunityAI ) acc: 50.0; ap: 48.9; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:20:57,201 (4 StyleGAN-XL ) acc: 50.0; ap: 77.4; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:21:26,566 (5 Midjourney ) acc: 50.0; ap: 53.5; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:21:58,054 (6 FLUX1-dev ) acc: 50.1; ap: 75.9; r_acc: 100.0; f_acc: 0.1 +2025-05-14 06:22:23,909 (7 E4S ) acc: 50.0; ap: 39.9; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:22:57,216 (8 Imagen3 ) acc: 50.1; ap: 64.5; r_acc: 100.0; f_acc: 0.2 +2025-05-14 06:23:31,057 (9 BLIP ) acc: 50.0; ap: 39.7; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:23:57,533 (10 SDXL ) acc: 49.9; ap: 70.0; r_acc: 100.0; f_acc: 0.1 +2025-05-14 06:24:45,143 (11 DALLE-3 ) acc: 50.1; ap: 74.6; r_acc: 100.0; f_acc: 0.2 +2025-05-14 06:25:10,148 (12 GLIDE ) acc: 50.0; ap: 58.7; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:25:25,600 (13 InSwap ) acc: 50.6; ap: 48.5; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:25:59,933 (14 FaceSwap ) acc: 50.6; ap: 46.4; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:26:26,458 (15 StyleSwim ) acc: 50.0; ap: 85.0; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:26:50,347 (16 ProGAN ) acc: 50.0; ap: 53.5; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:27:14,067 (17 BlendFace ) acc: 49.9; ap: 38.3; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:27:50,397 (18 PhotoMaker ) acc: 50.0; ap: 64.5; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:28:23,480 (19 SD3 ) acc: 49.9; ap: 64.8; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:28:46,811 (20 Infinite-ID ) acc: 49.9; ap: 82.2; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:28:59,607 (21 WFIR ) acc: 50.0; ap: 46.4; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:29:25,433 (22 SimSwap ) acc: 50.0; ap: 42.8; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:30:05,290 (23 InstantID ) acc: 50.3; ap: 54.9; r_acc: 100.0; f_acc: 0.6 +2025-05-14 06:30:24,775 (24 StyleGAN3 ) acc: 50.0; ap: 79.1; r_acc: 100.0; f_acc: 0.0 +2025-05-14 06:30:24,775 (25 Mean ) acc: 50.0; ap: 58.7; r_acc: 99.9; f_acc: 0.1 +2025-05-14 06:30:24,775 ************************* +2025-05-14 06:30:24,775 noise +2025-05-14 06:30:24,775 2025-05-14 06:30:24 +2025-05-14 06:31:08,906 (0 R3GAN ) acc: 45.2; ap: 52.6; r_acc: 90.4; f_acc: 0.0 +2025-05-14 06:38:38,375 (1 IP-Adapter ) acc: 52.0; ap: 66.0; r_acc: 91.2; f_acc: 12.7 +2025-05-14 07:04:42,641 (2 SocialRF ) acc: 43.7; ap: 45.0; r_acc: 55.9; f_acc: 31.6 +2025-05-14 07:13:32,325 (3 CommunityAI ) acc: 55.0; ap: 98.9; r_acc: 99.9; f_acc: 10.1 +2025-05-14 07:19:51,099 (4 StyleGAN-XL ) acc: 56.2; ap: 72.2; r_acc: 91.2; f_acc: 21.3 +2025-05-14 07:26:26,903 (5 Midjourney ) acc: 61.4; ap: 67.7; r_acc: 73.9; f_acc: 48.9 +2025-05-14 07:33:36,936 (6 FLUX1-dev ) acc: 63.2; ap: 78.3; r_acc: 91.0; f_acc: 35.5 +2025-05-14 07:37:40,493 (7 E4S ) acc: 43.1; ap: 42.8; r_acc: 86.2; f_acc: 0.0 +2025-05-14 07:45:30,880 (8 Imagen3 ) acc: 69.8; ap: 84.0; r_acc: 90.9; f_acc: 48.7 +2025-05-14 07:49:02,627 (9 BLIP ) acc: 67.2; ap: 99.7; r_acc: 99.9; f_acc: 34.6 +2025-05-14 07:55:36,244 (10 SDXL ) acc: 59.2; ap: 77.8; r_acc: 93.1; f_acc: 25.4 +2025-05-14 07:58:30,886 (11 DALLE-3 ) acc: 66.8; ap: 81.9; r_acc: 91.2; f_acc: 42.3 +2025-05-14 07:59:57,859 (12 GLIDE ) acc: 47.0; ap: 60.7; r_acc: 94.0; f_acc: 0.0 +2025-05-14 08:00:33,820 (13 InSwap ) acc: 48.0; ap: 60.3; r_acc: 95.0; f_acc: 0.0 +2025-05-14 08:01:01,075 (14 FaceSwap ) acc: 47.7; ap: 59.9; r_acc: 94.3; f_acc: 0.0 +2025-05-14 08:01:45,447 (15 StyleSwim ) acc: 56.1; ap: 70.8; r_acc: 90.7; f_acc: 21.5 +2025-05-14 08:02:04,256 (16 ProGAN ) acc: 49.9; ap: 49.5; r_acc: 98.6; f_acc: 1.1 +2025-05-14 08:02:35,582 (17 BlendFace ) acc: 42.1; ap: 40.0; r_acc: 84.3; f_acc: 0.0 +2025-05-14 08:03:19,842 (18 PhotoMaker ) acc: 62.4; ap: 78.9; r_acc: 91.1; f_acc: 33.7 +2025-05-14 08:04:02,163 (19 SD3 ) acc: 72.6; ap: 87.9; r_acc: 92.8; f_acc: 52.4 +2025-05-14 08:09:22,259 (20 Infinite-ID ) acc: 52.9; ap: 69.5; r_acc: 91.9; f_acc: 13.9 +2025-05-14 08:09:39,040 (21 WFIR ) acc: 50.0; ap: 46.2; r_acc: 100.0; f_acc: 0.0 +2025-05-14 08:11:52,128 (22 SimSwap ) acc: 47.3; ap: 60.4; r_acc: 94.5; f_acc: 0.0 +2025-05-14 08:18:41,622 (23 InstantID ) acc: 65.9; ap: 80.6; r_acc: 91.7; f_acc: 40.1 +2025-05-14 08:23:36,894 (24 StyleGAN3 ) acc: 61.2; ap: 69.8; r_acc: 79.9; f_acc: 42.5 +2025-05-14 08:23:36,894 (25 Mean ) acc: 55.4; ap: 68.1; r_acc: 90.1; f_acc: 20.7 +2025-05-14 08:23:36,894 ************************* +2025-05-14 08:23:36,894 sample +2025-05-14 08:23:36,894 2025-05-14 08:23:36 +2025-05-14 08:25:18,424 (0 R3GAN ) acc: 42.7; ap: 79.5; r_acc: 85.3; f_acc: 0.0 +2025-05-14 08:26:35,166 (1 IP-Adapter ) acc: 82.9; ap: 86.0; r_acc: 85.3; f_acc: 80.5 +2025-05-14 08:29:06,267 (2 SocialRF ) acc: 54.1; ap: 58.2; r_acc: 83.1; f_acc: 25.0 +2025-05-14 08:30:20,237 (3 CommunityAI ) acc: 54.5; ap: 60.5; r_acc: 99.9; f_acc: 9.0 +2025-05-14 08:31:38,784 (4 StyleGAN-XL ) acc: 77.8; ap: 82.1; r_acc: 84.8; f_acc: 70.8 +2025-05-14 08:32:10,936 (5 Midjourney ) acc: 70.7; ap: 71.4; r_acc: 57.7; f_acc: 83.6 +2025-05-14 08:32:40,412 (6 FLUX1-dev ) acc: 91.5; ap: 95.6; r_acc: 84.4; f_acc: 98.6 +2025-05-14 08:33:09,940 (7 E4S ) acc: 38.0; ap: 70.4; r_acc: 76.0; f_acc: 0.0 +2025-05-14 08:33:40,347 (8 Imagen3 ) acc: 87.1; ap: 91.8; r_acc: 84.8; f_acc: 89.3 +2025-05-14 08:34:06,890 (9 BLIP ) acc: 94.5; ap: 99.9; r_acc: 99.9; f_acc: 89.2 +2025-05-14 08:34:37,202 (10 SDXL ) acc: 93.2; ap: 96.3; r_acc: 88.3; f_acc: 98.1 +2025-05-14 08:35:05,085 (11 DALLE-3 ) acc: 62.8; ap: 71.0; r_acc: 84.8; f_acc: 40.8 +2025-05-14 08:35:31,850 (12 GLIDE ) acc: 44.8; ap: 85.2; r_acc: 89.5; f_acc: 0.0 +2025-05-14 08:35:58,340 (13 InSwap ) acc: 46.0; ap: 85.6; r_acc: 91.0; f_acc: 0.0 +2025-05-14 08:36:24,616 (14 FaceSwap ) acc: 45.6; ap: 84.9; r_acc: 90.3; f_acc: 0.0 +2025-05-14 08:36:54,837 (15 StyleSwim ) acc: 88.4; ap: 93.7; r_acc: 84.4; f_acc: 92.5 +2025-05-14 08:37:06,332 (16 ProGAN ) acc: 50.0; ap: 50.0; r_acc: 100.0; f_acc: 0.0 +2025-05-14 08:37:33,581 (17 BlendFace ) acc: 36.8; ap: 67.7; r_acc: 73.6; f_acc: 0.0 +2025-05-14 08:38:05,170 (18 PhotoMaker ) acc: 52.0; ap: 63.1; r_acc: 85.3; f_acc: 18.8 +2025-05-14 08:38:35,773 (19 SD3 ) acc: 92.6; ap: 96.2; r_acc: 88.3; f_acc: 97.0 +2025-05-14 08:39:08,705 (20 Infinite-ID ) acc: 68.2; ap: 74.1; r_acc: 86.6; f_acc: 49.9 +2025-05-14 08:39:15,917 (21 WFIR ) acc: 50.0; ap: 48.1; r_acc: 100.0; f_acc: 0.1 +2025-05-14 08:39:36,999 (22 SimSwap ) acc: 44.9; ap: 85.3; r_acc: 89.8; f_acc: 0.0 +2025-05-14 08:40:18,930 (23 InstantID ) acc: 74.5; ap: 81.6; r_acc: 85.8; f_acc: 63.2 +2025-05-14 08:40:44,030 (24 StyleGAN3 ) acc: 84.3; ap: 90.1; r_acc: 78.3; f_acc: 90.3 +2025-05-14 08:40:44,030 (25 Mean ) acc: 65.1; ap: 78.7; r_acc: 86.3; f_acc: 43.9 +2025-05-14 08:40:44,030 ************************* +2025-04-24 04:17:58,741 Model_path /data/ziqiang/yjz/code/NPR-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_05_01_39_58/model_epoch_80.pth +2025-04-24 04:18:01,908 AIGIBench +2025-04-24 04:18:01,908 2025-04-24 04:18:01 +2025-04-24 04:18:30,114 (0 R3GAN ) acc: 50.8; ap: 61.1; r_acc: 93.2; f_acc: 8.4 +2025-04-24 04:19:19,072 (1 IP-Adapter ) acc: 82.4; ap: 91.7; r_acc: 93.1; f_acc: 71.8 +2025-04-24 04:21:24,541 (2 SocialRF ) acc: 59.1; ap: 68.4; r_acc: 96.3; f_acc: 21.9 +2025-04-24 04:22:05,006 (3 CommunityAI ) acc: 54.0; ap: 62.9; r_acc: 99.9; f_acc: 8.2 +2025-04-24 04:22:51,355 (4 StyleGAN-XL ) acc: 60.3; ap: 75.3; r_acc: 92.4; f_acc: 28.2 +2025-04-24 04:23:30,758 (5 Midjourney ) acc: 68.8; ap: 76.9; r_acc: 83.9; f_acc: 53.8 +2025-04-24 04:24:15,232 (6 FLUX1-dev ) acc: 95.2; ap: 99.0; r_acc: 93.3; f_acc: 97.2 +2025-04-24 04:24:45,275 (7 E4S ) acc: 45.0; ap: 34.4; r_acc: 89.9; f_acc: 0.0 +2025-04-24 04:25:32,269 (8 Imagen3 ) acc: 85.9; ap: 94.4; r_acc: 93.5; f_acc: 78.2 +2025-04-24 04:25:49,514 (9 BLIP ) acc: 99.2; ap: 100.0; r_acc: 98.4; f_acc: 99.9 +2025-04-24 04:26:33,223 (10 SDXL ) acc: 86.6; ap: 94.4; r_acc: 94.2; f_acc: 79.0 +2025-04-24 04:27:15,029 (11 DALLE-3 ) acc: 57.1; ap: 70.0; r_acc: 93.0; f_acc: 21.2 +2025-04-24 04:27:36,749 (12 GLIDE ) acc: 82.5; ap: 94.3; r_acc: 94.8; f_acc: 70.3 +2025-04-24 04:27:58,346 (13 InSwap ) acc: 47.8; ap: 40.7; r_acc: 94.6; f_acc: 0.0 +2025-04-24 04:28:20,127 (14 FaceSwap ) acc: 48.1; ap: 43.6; r_acc: 95.0; f_acc: 0.0 +2025-04-24 04:29:05,521 (15 StyleSwim ) acc: 85.7; ap: 94.9; r_acc: 93.7; f_acc: 77.7 +2025-04-24 04:29:17,089 (16 ProGAN ) acc: 99.4; ap: 100.0; r_acc: 100.0; f_acc: 98.9 +2025-04-24 04:29:50,082 (17 BlendFace ) acc: 44.5; ap: 34.7; r_acc: 89.0; f_acc: 0.0 +2025-04-24 04:30:38,103 (18 PhotoMaker ) acc: 48.1; ap: 53.4; r_acc: 92.6; f_acc: 3.6 +2025-04-24 04:31:23,970 (19 SD3 ) acc: 91.9; ap: 97.2; r_acc: 94.2; f_acc: 89.7 +2025-04-24 04:32:11,649 (20 Infinite-ID ) acc: 63.9; ap: 80.4; r_acc: 93.1; f_acc: 34.6 +2025-04-24 04:32:23,650 (21 WFIR ) acc: 51.6; ap: 65.5; r_acc: 95.3; f_acc: 7.9 +2025-04-24 04:32:45,449 (22 SimSwap ) acc: 47.4; ap: 42.7; r_acc: 94.8; f_acc: 0.0 +2025-04-24 04:33:49,722 (23 InstantID ) acc: 63.8; ap: 79.2; r_acc: 93.5; f_acc: 34.1 +2025-04-24 04:34:27,311 (24 StyleGAN3 ) acc: 78.4; ap: 91.7; r_acc: 93.2; f_acc: 63.6 +2025-04-24 04:34:27,311 (25 Mean ) acc: 67.9; ap: 73.9; r_acc: 93.8; f_acc: 41.9 +2025-04-24 04:34:27,312 ************************* +2025-05-08 13:15:45,728 Model_path /data/ziqiang/yjz/code/NPR-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_05_01_39_58/model_epoch_80.pth # crop +2025-05-08 13:15:46,325 AIGIBench +2025-05-08 13:15:46,326 2025-05-08 13:15:46 +2025-05-08 13:16:13,262 (0 R3GAN ) acc: 53.6; ap: 86.1; r_acc: 99.1; f_acc: 8.1 +2025-05-08 13:16:56,559 (1 IP-Adapter ) acc: 70.7; ap: 95.5; r_acc: 99.3; f_acc: 42.1 +2025-05-08 13:19:00,293 (2 SocialRF ) acc: 55.3; ap: 67.5; r_acc: 99.8; f_acc: 10.8 +2025-05-08 13:19:41,486 (3 CommunityAI ) acc: 52.6; ap: 51.5; r_acc: 99.9; f_acc: 5.4 +2025-05-08 13:20:23,366 (4 StyleGAN-XL ) acc: 71.2; ap: 96.9; r_acc: 99.0; f_acc: 43.5 +2025-05-08 13:20:58,989 (5 Midjourney ) acc: 76.0; ap: 93.7; r_acc: 97.7; f_acc: 54.2 +2025-05-08 13:21:37,861 (6 FLUX1-dev ) acc: 96.7; ap: 99.8; r_acc: 99.1; f_acc: 94.4 +2025-05-08 13:22:09,118 (7 E4S ) acc: 49.5; ap: 38.7; r_acc: 99.0; f_acc: 0.0 +2025-05-08 13:22:50,403 (8 Imagen3 ) acc: 64.6; ap: 96.2; r_acc: 99.2; f_acc: 30.0 +2025-05-08 13:23:11,816 (9 BLIP ) acc: 95.8; ap: 99.9; r_acc: 99.8; f_acc: 91.7 +2025-05-08 13:23:51,889 (10 SDXL ) acc: 86.2; ap: 98.8; r_acc: 99.4; f_acc: 73.0 +2025-05-08 13:24:28,872 (11 DALLE-3 ) acc: 49.9; ap: 57.4; r_acc: 99.4; f_acc: 0.4 +2025-05-08 13:25:00,042 (12 GLIDE ) acc: 85.4; ap: 98.7; r_acc: 99.4; f_acc: 71.5 +2025-05-08 13:25:30,429 (13 InSwap ) acc: 50.4; ap: 48.1; r_acc: 99.6; f_acc: 0.0 +2025-05-08 13:26:00,754 (14 FaceSwap ) acc: 50.4; ap: 58.1; r_acc: 99.6; f_acc: 0.0 +2025-05-08 13:26:41,089 (15 StyleSwim ) acc: 95.3; ap: 99.7; r_acc: 99.1; f_acc: 91.6 +2025-05-08 13:27:06,465 (16 ProGAN ) acc: 99.3; ap: 100.0; r_acc: 100.0; f_acc: 98.7 +2025-05-08 13:27:45,509 (17 BlendFace ) acc: 49.5; ap: 42.5; r_acc: 98.9; f_acc: 0.0 +2025-05-08 13:28:28,408 (18 PhotoMaker ) acc: 59.7; ap: 89.3; r_acc: 99.2; f_acc: 20.1 +2025-05-08 13:29:10,035 (19 SD3 ) acc: 80.0; ap: 98.0; r_acc: 99.4; f_acc: 60.7 +2025-05-08 13:29:53,658 (20 Infinite-ID ) acc: 58.8; ap: 91.5; r_acc: 99.2; f_acc: 18.4 +2025-05-08 13:30:05,626 (21 WFIR ) acc: 50.0; ap: 92.2; r_acc: 100.0; f_acc: 0.0 +2025-05-08 13:30:36,468 (22 SimSwap ) acc: 49.7; ap: 53.3; r_acc: 99.4; f_acc: 0.0 +2025-05-08 13:31:34,473 (23 InstantID ) acc: 72.2; ap: 95.9; r_acc: 99.2; f_acc: 45.1 +2025-05-08 13:32:07,557 (24 StyleGAN3 ) acc: 81.6; ap: 97.4; r_acc: 99.1; f_acc: 64.0 +2025-05-08 13:32:07,557 (25 Mean ) acc: 68.2; ap: 81.9; r_acc: 99.3; f_acc: 36.9 +2025-05-08 13:32:07,557 ************************* +2025-04-30 08:25:30,320 Model_path /data/ziqiang/yjz/code/NPR-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_05_01_39_58/model_epoch_80.pth +2025-04-30 08:25:36,154 jpeg +2025-04-30 08:25:36,154 2025-04-30 08:25:36 +2025-04-30 08:25:55,751 (0 R3GAN ) acc: 50.0; ap: 34.6; r_acc: 100.0; f_acc: 0.0 +2025-04-30 08:27:36,416 (1 IP-Adapter ) acc: 50.2; ap: 84.7; r_acc: 100.0; f_acc: 0.4 +2025-04-30 08:33:39,749 (2 SocialRF ) acc: 50.2; ap: 55.0; r_acc: 99.5; f_acc: 1.0 +2025-04-30 08:37:17,086 (3 CommunityAI ) acc: 50.0; ap: 47.8; r_acc: 99.9; f_acc: 0.1 +2025-04-30 08:40:35,410 (4 StyleGAN-XL ) acc: 50.0; ap: 54.5; r_acc: 100.0; f_acc: 0.0 +2025-04-30 08:43:16,298 (5 Midjourney ) acc: 50.1; ap: 80.7; r_acc: 100.0; f_acc: 0.3 +2025-04-30 08:46:47,403 (6 FLUX1-dev ) acc: 50.0; ap: 89.2; r_acc: 100.0; f_acc: 0.0 +2025-04-30 08:48:30,293 (7 E4S ) acc: 50.0; ap: 33.2; r_acc: 100.0; f_acc: 0.0 +2025-04-30 08:52:33,775 (8 Imagen3 ) acc: 50.0; ap: 76.3; r_acc: 100.0; f_acc: 0.0 +2025-04-30 08:54:50,712 (9 BLIP ) acc: 50.0; ap: 51.2; r_acc: 100.0; f_acc: 0.0 +2025-04-30 08:58:44,084 (10 SDXL ) acc: 49.9; ap: 67.0; r_acc: 100.0; f_acc: 0.0 +2025-04-30 09:02:31,348 (11 DALLE-3 ) acc: 50.3; ap: 87.5; r_acc: 100.0; f_acc: 0.7 +2025-04-30 09:05:30,791 (12 GLIDE ) acc: 50.0; ap: 59.1; r_acc: 100.0; f_acc: 0.0 +2025-04-30 09:07:37,563 (13 InSwap ) acc: 50.6; ap: 37.5; r_acc: 100.0; f_acc: 0.0 +2025-04-30 09:09:12,053 (14 FaceSwap ) acc: 50.6; ap: 37.0; r_acc: 100.0; f_acc: 0.0 +2025-04-30 09:13:08,792 (15 StyleSwim ) acc: 50.0; ap: 63.8; r_acc: 100.0; f_acc: 0.0 +2025-04-30 09:14:44,546 (16 ProGAN ) acc: 50.0; ap: 51.0; r_acc: 100.0; f_acc: 0.0 +2025-04-30 09:17:18,077 (17 BlendFace ) acc: 49.9; ap: 33.7; r_acc: 100.0; f_acc: 0.0 +2025-04-30 09:20:42,701 (18 PhotoMaker ) acc: 50.0; ap: 55.9; r_acc: 100.0; f_acc: 0.0 +2025-04-30 09:25:12,001 (19 SD3 ) acc: 49.9; ap: 80.8; r_acc: 100.0; f_acc: 0.0 +2025-04-30 09:30:50,878 (20 Infinite-ID ) acc: 50.6; ap: 91.6; r_acc: 100.0; f_acc: 1.4 +2025-04-30 09:31:34,772 (21 WFIR ) acc: 50.0; ap: 46.0; r_acc: 100.0; f_acc: 0.0 +2025-04-30 09:33:11,397 (22 SimSwap ) acc: 50.0; ap: 38.6; r_acc: 100.0; f_acc: 0.0 +2025-04-30 09:35:53,678 (23 InstantID ) acc: 50.1; ap: 60.8; r_acc: 100.0; f_acc: 0.2 +2025-04-30 09:40:08,092 (24 StyleGAN3 ) acc: 50.0; ap: 62.2; r_acc: 100.0; f_acc: 0.0 +2025-04-30 09:40:08,092 (25 Mean ) acc: 50.1; ap: 59.2; r_acc: 100.0; f_acc: 0.2 +2025-04-30 09:40:08,092 ************************* +2025-04-30 09:40:08,092 noise +2025-04-30 09:40:08,092 2025-04-30 09:40:08 +2025-04-30 09:46:13,796 (0 R3GAN ) acc: 49.5; ap: 51.8; r_acc: 98.9; f_acc: 0.0 +2025-04-30 09:46:57,377 (1 IP-Adapter ) acc: 57.9; ap: 84.4; r_acc: 98.8; f_acc: 17.0 +2025-04-30 10:32:53,018 (2 SocialRF ) acc: 51.9; ap: 51.1; r_acc: 85.6; f_acc: 18.2 +2025-04-30 10:49:20,955 (3 CommunityAI ) acc: 51.5; ap: 95.8; r_acc: 99.9; f_acc: 3.2 +2025-04-30 10:59:22,554 (4 StyleGAN-XL ) acc: 49.8; ap: 63.5; r_acc: 99.0; f_acc: 0.6 +2025-04-30 11:13:51,452 (5 Midjourney ) acc: 52.6; ap: 56.3; r_acc: 97.0; f_acc: 8.2 +2025-04-30 11:20:43,455 (6 FLUX1-dev ) acc: 51.9; ap: 74.3; r_acc: 98.9; f_acc: 4.9 +2025-04-30 11:24:11,446 (7 E4S ) acc: 49.2; ap: 42.5; r_acc: 98.4; f_acc: 0.0 +2025-04-30 11:35:55,974 (8 Imagen3 ) acc: 54.0; ap: 79.4; r_acc: 98.9; f_acc: 9.1 +2025-04-30 11:38:56,490 (9 BLIP ) acc: 55.3; ap: 99.6; r_acc: 100.0; f_acc: 10.5 +2025-04-30 11:40:53,225 (10 SDXL ) acc: 50.4; ap: 72.5; r_acc: 99.3; f_acc: 1.5 +2025-04-30 11:45:09,002 (11 DALLE-3 ) acc: 59.4; ap: 85.5; r_acc: 99.0; f_acc: 19.9 +2025-04-30 11:46:38,763 (12 GLIDE ) acc: 49.6; ap: 60.4; r_acc: 99.2; f_acc: 0.0 +2025-04-30 11:48:13,730 (13 InSwap ) acc: 50.2; ap: 59.8; r_acc: 99.3; f_acc: 0.0 +2025-04-30 11:49:51,158 (14 FaceSwap ) acc: 50.3; ap: 59.3; r_acc: 99.4; f_acc: 0.0 +2025-04-30 11:50:29,021 (15 StyleSwim ) acc: 51.2; ap: 74.5; r_acc: 98.9; f_acc: 3.5 +2025-04-30 11:51:32,026 (16 ProGAN ) acc: 50.0; ap: 46.7; r_acc: 100.0; f_acc: 0.0 +2025-04-30 11:54:37,800 (17 BlendFace ) acc: 49.0; ap: 39.7; r_acc: 98.0; f_acc: 0.0 +2025-04-30 12:00:19,037 (18 PhotoMaker ) acc: 51.9; ap: 78.8; r_acc: 98.7; f_acc: 5.0 +2025-04-30 12:07:32,280 (19 SD3 ) acc: 53.5; ap: 82.8; r_acc: 99.1; f_acc: 7.9 +2025-04-30 12:11:25,760 (20 Infinite-ID ) acc: 60.1; ap: 88.8; r_acc: 99.0; f_acc: 21.2 +2025-04-30 12:11:37,440 (21 WFIR ) acc: 50.0; ap: 50.9; r_acc: 100.0; f_acc: 0.0 +2025-04-30 12:12:31,834 (22 SimSwap ) acc: 49.6; ap: 59.2; r_acc: 99.2; f_acc: 0.0 +2025-04-30 12:17:19,310 (23 InstantID ) acc: 57.1; ap: 82.8; r_acc: 99.0; f_acc: 15.2 +2025-04-30 12:19:50,835 (24 StyleGAN3 ) acc: 53.3; ap: 71.8; r_acc: 98.7; f_acc: 7.9 +2025-04-30 12:19:50,836 (25 Mean ) acc: 52.4; ap: 68.5; r_acc: 98.5; f_acc: 6.2 +2025-04-30 12:19:50,836 ************************* +2025-04-30 12:19:50,836 sample +2025-04-30 12:19:50,836 2025-04-30 12:19:50 +2025-04-30 12:20:37,975 (0 R3GAN ) acc: 47.1; ap: 80.1; r_acc: 94.1; f_acc: 0.0 +2025-04-30 12:21:56,051 (1 IP-Adapter ) acc: 85.5; ap: 94.0; r_acc: 94.3; f_acc: 76.6 +2025-04-30 12:24:38,339 (2 SocialRF ) acc: 58.9; ap: 68.4; r_acc: 96.2; f_acc: 21.5 +2025-04-30 12:25:53,165 (3 CommunityAI ) acc: 53.9; ap: 63.5; r_acc: 99.9; f_acc: 7.9 +2025-04-30 12:27:17,668 (4 StyleGAN-XL ) acc: 62.4; ap: 81.2; r_acc: 93.8; f_acc: 30.9 +2025-04-30 12:28:28,399 (5 Midjourney ) acc: 68.5; ap: 76.6; r_acc: 83.9; f_acc: 53.1 +2025-04-30 12:29:47,737 (6 FLUX1-dev ) acc: 95.7; ap: 99.2; r_acc: 94.1; f_acc: 97.3 +2025-04-30 12:30:40,134 (7 E4S ) acc: 45.1; ap: 71.1; r_acc: 90.3; f_acc: 0.0 +2025-04-30 12:32:14,748 (8 Imagen3 ) acc: 78.1; ap: 91.8; r_acc: 94.1; f_acc: 62.1 +2025-04-30 12:32:56,693 (9 BLIP ) acc: 98.4; ap: 100.0; r_acc: 100.0; f_acc: 96.7 +2025-04-30 12:34:18,724 (10 SDXL ) acc: 88.1; ap: 96.2; r_acc: 95.5; f_acc: 80.8 +2025-04-30 12:35:41,822 (11 DALLE-3 ) acc: 59.0; ap: 76.5; r_acc: 94.0; f_acc: 24.0 +2025-04-30 12:36:24,258 (12 GLIDE ) acc: 48.0; ap: 85.4; r_acc: 96.0; f_acc: 0.0 +2025-04-30 12:37:08,231 (13 InSwap ) acc: 48.4; ap: 85.9; r_acc: 95.7; f_acc: 0.0 +2025-04-30 12:37:48,481 (14 FaceSwap ) acc: 48.7; ap: 85.3; r_acc: 96.2; f_acc: 0.0 +2025-04-30 12:39:08,223 (15 StyleSwim ) acc: 86.6; ap: 96.2; r_acc: 94.1; f_acc: 79.2 +2025-04-30 12:39:37,260 (16 ProGAN ) acc: 50.0; ap: 50.0; r_acc: 100.0; f_acc: 0.0 +2025-04-30 12:40:37,069 (17 BlendFace ) acc: 44.9; ap: 68.6; r_acc: 89.9; f_acc: 0.0 +2025-04-30 12:42:07,127 (18 PhotoMaker ) acc: 50.2; ap: 64.3; r_acc: 94.0; f_acc: 6.4 +2025-04-30 12:43:38,361 (19 SD3 ) acc: 92.3; ap: 97.8; r_acc: 95.5; f_acc: 89.1 +2025-04-30 12:45:04,690 (20 Infinite-ID ) acc: 67.4; ap: 85.4; r_acc: 94.6; f_acc: 40.2 +2025-04-30 12:45:15,656 (21 WFIR ) acc: 50.0; ap: 48.3; r_acc: 100.0; f_acc: 0.0 +2025-04-30 12:45:56,859 (22 SimSwap ) acc: 48.2; ap: 85.6; r_acc: 96.3; f_acc: 0.0 +2025-04-30 12:47:51,317 (23 InstantID ) acc: 65.3; ap: 83.7; r_acc: 93.7; f_acc: 36.8 +2025-04-30 12:49:09,458 (24 StyleGAN3 ) acc: 74.5; ap: 89.3; r_acc: 93.0; f_acc: 55.9 +2025-04-30 12:49:09,458 (25 Mean ) acc: 64.6; ap: 81.0; r_acc: 94.8; f_acc: 34.3 +2025-04-30 12:49:09,458 ************************* +2025-05-03 07:55:22,764 Model_path /data/ziqiang/yjz/code/NPR-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-r2025_05_01_08_30_31/model_epoch_80.pth +2025-05-03 07:55:23,290 AIGIBench +2025-05-03 07:55:23,291 2025-05-03 07:55:23 +2025-05-03 07:55:53,426 (0 R3GAN ) acc: 56.7; ap: 72.7; r_acc: 92.7; f_acc: 20.6 +2025-05-03 07:56:52,949 (1 IP-Adapter ) acc: 86.0; ap: 92.2; r_acc: 92.7; f_acc: 79.3 +2025-05-03 07:59:31,176 (2 SocialRF ) acc: 58.0; ap: 66.1; r_acc: 96.5; f_acc: 19.5 +2025-05-03 08:00:27,552 (3 CommunityAI ) acc: 54.1; ap: 58.0; r_acc: 100.0; f_acc: 8.3 +2025-05-03 08:01:25,045 (4 StyleGAN-XL ) acc: 67.4; ap: 81.9; r_acc: 92.2; f_acc: 42.7 +2025-05-03 08:02:11,445 (5 Midjourney ) acc: 70.6; ap: 76.6; r_acc: 82.9; f_acc: 58.3 +2025-05-03 08:03:44,802 (6 FLUX1-dev ) acc: 95.6; ap: 99.0; r_acc: 92.5; f_acc: 98.8 +2025-05-03 08:04:40,024 (7 E4S ) acc: 44.9; ap: 36.2; r_acc: 89.8; f_acc: 0.0 +2025-05-03 08:06:48,913 (8 Imagen3 ) acc: 87.1; ap: 94.8; r_acc: 92.6; f_acc: 81.6 +2025-05-03 08:07:39,813 (9 BLIP ) acc: 99.2; ap: 99.9; r_acc: 98.4; f_acc: 100.0 +2025-05-03 08:10:05,292 (10 SDXL ) acc: 90.9; ap: 94.8; r_acc: 93.0; f_acc: 88.8 +2025-05-03 08:12:09,546 (11 DALLE-3 ) acc: 52.9; ap: 63.8; r_acc: 92.4; f_acc: 13.3 +2025-05-03 08:13:05,408 (12 GLIDE ) acc: 86.7; ap: 95.2; r_acc: 93.6; f_acc: 79.8 +2025-05-03 08:13:58,664 (13 InSwap ) acc: 47.6; ap: 39.6; r_acc: 94.2; f_acc: 0.0 +2025-05-03 08:14:34,451 (14 FaceSwap ) acc: 47.8; ap: 42.6; r_acc: 94.5; f_acc: 0.0 +2025-05-03 08:16:19,871 (15 StyleSwim ) acc: 87.5; ap: 95.3; r_acc: 92.9; f_acc: 82.0 +2025-05-03 08:16:34,749 (16 ProGAN ) acc: 99.8; ap: 100.0; r_acc: 100.0; f_acc: 99.5 +2025-05-03 08:17:46,008 (17 BlendFace ) acc: 44.5; ap: 34.5; r_acc: 89.0; f_acc: 0.0 +2025-05-03 08:20:02,957 (18 PhotoMaker ) acc: 48.2; ap: 58.1; r_acc: 92.4; f_acc: 4.0 +2025-05-03 08:22:29,252 (19 SD3 ) acc: 92.1; ap: 96.7; r_acc: 93.0; f_acc: 91.2 +2025-05-03 08:25:12,980 (20 Infinite-ID ) acc: 52.7; ap: 71.6; r_acc: 92.5; f_acc: 12.9 +2025-05-03 08:25:31,477 (21 WFIR ) acc: 53.6; ap: 73.0; r_acc: 95.5; f_acc: 11.8 +2025-05-03 08:26:16,852 (22 SimSwap ) acc: 47.0; ap: 41.7; r_acc: 93.9; f_acc: 0.0 +2025-05-03 08:30:18,098 (23 InstantID ) acc: 59.0; ap: 73.3; r_acc: 92.5; f_acc: 25.5 +2025-05-03 08:33:13,272 (24 StyleGAN3 ) acc: 87.6; ap: 94.5; r_acc: 92.9; f_acc: 82.2 +2025-05-03 08:33:13,272 (25 Mean ) acc: 68.7; ap: 74.1; r_acc: 93.3; f_acc: 44.0 +2025-05-03 08:33:13,272 ************************* +2025-05-05 08:37:28,386 Model_path /data/ziqiang/yjz/code/NPR-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-rj2025_05_03_09_33_45/model_epoch_50.pth +2025-05-05 08:37:29,465 AIGIBench +2025-05-05 08:37:29,465 2025-05-05 08:37:29 +2025-05-05 08:37:55,462 (0 R3GAN ) acc: 49.6; ap: 57.1; r_acc: 93.6; f_acc: 5.5 +2025-05-05 08:39:28,109 (1 IP-Adapter ) acc: 81.6; ap: 92.2; r_acc: 93.8; f_acc: 69.4 +2025-05-05 08:43:29,404 (2 SocialRF ) acc: 57.4; ap: 65.4; r_acc: 95.6; f_acc: 19.2 +2025-05-05 08:45:19,815 (3 CommunityAI ) acc: 52.9; ap: 56.0; r_acc: 100.0; f_acc: 5.8 +2025-05-05 08:46:10,761 (4 StyleGAN-XL ) acc: 56.5; ap: 71.5; r_acc: 93.5; f_acc: 19.6 +2025-05-05 08:46:57,840 (5 Midjourney ) acc: 62.3; ap: 71.8; r_acc: 88.2; f_acc: 36.5 +2025-05-05 08:47:42,588 (6 FLUX1-dev ) acc: 91.1; ap: 96.5; r_acc: 93.7; f_acc: 88.4 +2025-05-05 08:48:19,544 (7 E4S ) acc: 45.9; ap: 31.4; r_acc: 91.8; f_acc: 0.0 +2025-05-05 08:49:06,764 (8 Imagen3 ) acc: 72.6; ap: 87.6; r_acc: 93.9; f_acc: 51.3 +2025-05-05 08:49:33,835 (9 BLIP ) acc: 98.7; ap: 100.0; r_acc: 97.6; f_acc: 99.8 +2025-05-05 08:50:18,539 (10 SDXL ) acc: 82.2; ap: 93.0; r_acc: 93.6; f_acc: 70.8 +2025-05-05 08:51:00,811 (11 DALLE-3 ) acc: 60.3; ap: 73.4; r_acc: 93.7; f_acc: 26.9 +2025-05-05 08:51:29,405 (12 GLIDE ) acc: 81.5; ap: 92.7; r_acc: 94.3; f_acc: 68.7 +2025-05-05 08:51:58,089 (13 InSwap ) acc: 47.9; ap: 34.0; r_acc: 94.6; f_acc: 0.0 +2025-05-05 08:52:26,763 (14 FaceSwap ) acc: 47.9; ap: 37.3; r_acc: 94.8; f_acc: 0.0 +2025-05-05 08:53:12,608 (15 StyleSwim ) acc: 81.6; ap: 91.6; r_acc: 94.0; f_acc: 69.2 +2025-05-05 08:53:34,814 (16 ProGAN ) acc: 99.8; ap: 100.0; r_acc: 100.0; f_acc: 99.7 +2025-05-05 08:54:14,235 (17 BlendFace ) acc: 45.7; ap: 32.5; r_acc: 91.4; f_acc: 0.0 +2025-05-05 08:55:02,949 (18 PhotoMaker ) acc: 49.4; ap: 52.5; r_acc: 93.7; f_acc: 5.1 +2025-05-05 08:55:50,035 (19 SD3 ) acc: 84.5; ap: 94.1; r_acc: 93.6; f_acc: 75.3 +2025-05-05 08:56:38,991 (20 Infinite-ID ) acc: 58.7; ap: 75.9; r_acc: 93.9; f_acc: 23.4 +2025-05-05 08:56:52,067 (21 WFIR ) acc: 49.9; ap: 56.1; r_acc: 94.8; f_acc: 5.0 +2025-05-05 08:57:20,521 (22 SimSwap ) acc: 47.5; ap: 35.3; r_acc: 95.0; f_acc: 0.0 +2025-05-05 08:58:25,759 (23 InstantID ) acc: 62.1; ap: 78.0; r_acc: 93.9; f_acc: 30.3 +2025-05-05 08:59:16,305 (24 StyleGAN3 ) acc: 72.7; ap: 88.4; r_acc: 94.8; f_acc: 50.5 +2025-05-05 08:59:16,305 (25 Mean ) acc: 65.6; ap: 70.6; r_acc: 94.3; f_acc: 36.8 +2025-05-05 08:59:16,305 ************************* +2025-05-07 01:09:04,651 Model_path /data/ziqiang/yjz/code/NPR-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-j2025_05_05_10_38_57/model_epoch_60.pth +2025-05-07 01:09:04,950 AIGIBench +2025-05-07 01:09:04,950 2025-05-07 01:09:04 +2025-05-07 01:09:50,710 (0 R3GAN ) acc: 51.3; ap: 62.5; r_acc: 92.3; f_acc: 10.3 +2025-05-07 01:11:16,644 (1 IP-Adapter ) acc: 85.9; ap: 92.2; r_acc: 92.2; f_acc: 79.6 +2025-05-07 01:21:34,818 (2 SocialRF ) acc: 57.9; ap: 66.3; r_acc: 95.0; f_acc: 20.9 +2025-05-07 01:22:21,395 (3 CommunityAI ) acc: 52.7; ap: 68.4; r_acc: 100.0; f_acc: 5.4 +2025-05-07 01:26:27,401 (4 StyleGAN-XL ) acc: 57.4; ap: 71.5; r_acc: 91.4; f_acc: 23.3 +2025-05-07 01:27:07,799 (5 Midjourney ) acc: 57.8; ap: 63.1; r_acc: 81.9; f_acc: 33.8 +2025-05-07 01:29:12,414 (6 FLUX1-dev ) acc: 90.7; ap: 96.1; r_acc: 92.4; f_acc: 88.9 +2025-05-07 01:30:29,256 (7 E4S ) acc: 44.1; ap: 32.3; r_acc: 88.2; f_acc: 0.0 +2025-05-07 01:31:16,973 (8 Imagen3 ) acc: 75.6; ap: 87.4; r_acc: 92.2; f_acc: 58.9 +2025-05-07 01:32:42,794 (9 BLIP ) acc: 99.1; ap: 100.0; r_acc: 98.2; f_acc: 100.0 +2025-05-07 01:34:39,919 (10 SDXL ) acc: 80.0; ap: 89.9; r_acc: 92.4; f_acc: 67.6 +2025-05-07 01:37:59,123 (11 DALLE-3 ) acc: 57.4; ap: 69.0; r_acc: 91.3; f_acc: 23.5 +2025-05-07 01:39:00,769 (12 GLIDE ) acc: 84.5; ap: 94.4; r_acc: 93.4; f_acc: 75.6 +2025-05-07 01:40:47,925 (13 InSwap ) acc: 47.5; ap: 37.0; r_acc: 94.0; f_acc: 0.0 +2025-05-07 01:41:35,385 (14 FaceSwap ) acc: 47.7; ap: 39.6; r_acc: 94.2; f_acc: 0.0 +2025-05-07 01:45:24,097 (15 StyleSwim ) acc: 83.7; ap: 93.6; r_acc: 92.1; f_acc: 75.3 +2025-05-07 01:45:45,972 (16 ProGAN ) acc: 99.8; ap: 100.0; r_acc: 100.0; f_acc: 99.7 +2025-05-07 01:46:53,112 (17 BlendFace ) acc: 44.4; ap: 34.0; r_acc: 88.8; f_acc: 0.0 +2025-05-07 01:48:24,524 (18 PhotoMaker ) acc: 46.6; ap: 47.7; r_acc: 92.3; f_acc: 0.8 +2025-05-07 01:49:43,911 (19 SD3 ) acc: 83.8; ap: 92.5; r_acc: 92.4; f_acc: 75.1 +2025-05-07 01:51:29,113 (20 Infinite-ID ) acc: 69.3; ap: 82.1; r_acc: 92.3; f_acc: 46.2 +2025-05-07 01:51:42,200 (21 WFIR ) acc: 49.9; ap: 58.5; r_acc: 91.8; f_acc: 7.9 +2025-05-07 01:52:17,596 (22 SimSwap ) acc: 46.8; ap: 39.3; r_acc: 93.7; f_acc: 0.0 +2025-05-07 01:53:38,950 (23 InstantID ) acc: 54.4; ap: 66.3; r_acc: 92.7; f_acc: 16.1 +2025-05-07 01:54:17,337 (24 StyleGAN3 ) acc: 72.6; ap: 87.2; r_acc: 92.5; f_acc: 52.6 +2025-05-07 01:54:17,337 (25 Mean ) acc: 65.6; ap: 70.8; r_acc: 92.7; f_acc: 38.5 +2025-05-07 01:54:17,337 ************************* +2025-05-08 04:45:09,513 Model_path /data/ziqiang/yjz/code/NPR-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-m2025_05_06_12_14_08/model_epoch_60.pth +2025-05-08 04:45:18,064 AIGIBench +2025-05-08 04:45:18,064 2025-05-08 04:45:18 +2025-05-08 04:45:50,007 (0 R3GAN ) acc: 50.4; ap: 62.0; r_acc: 95.8; f_acc: 4.9 +2025-05-08 04:46:42,243 (1 IP-Adapter ) acc: 72.5; ap: 89.9; r_acc: 95.7; f_acc: 49.2 +2025-05-08 04:49:02,792 (2 SocialRF ) acc: 58.1; ap: 66.9; r_acc: 98.2; f_acc: 17.9 +2025-05-08 04:49:55,902 (3 CommunityAI ) acc: 53.4; ap: 55.4; r_acc: 99.9; f_acc: 6.9 +2025-05-08 04:50:46,776 (4 StyleGAN-XL ) acc: 58.1; ap: 75.2; r_acc: 95.7; f_acc: 20.6 +2025-05-08 04:51:32,259 (5 Midjourney ) acc: 66.8; ap: 78.9; r_acc: 90.5; f_acc: 43.2 +2025-05-08 04:52:42,445 (6 FLUX1-dev ) acc: 96.4; ap: 99.1; r_acc: 96.1; f_acc: 96.6 +2025-05-08 04:53:20,674 (7 E4S ) acc: 47.2; ap: 34.3; r_acc: 94.4; f_acc: 0.0 +2025-05-08 04:54:44,606 (8 Imagen3 ) acc: 89.3; ap: 96.9; r_acc: 96.2; f_acc: 82.4 +2025-05-08 04:55:09,990 (9 BLIP ) acc: 99.5; ap: 100.0; r_acc: 99.3; f_acc: 99.8 +2025-05-08 04:55:58,239 (10 SDXL ) acc: 86.2; ap: 95.5; r_acc: 96.0; f_acc: 76.3 +2025-05-08 04:56:42,676 (11 DALLE-3 ) acc: 54.7; ap: 71.2; r_acc: 95.7; f_acc: 13.8 +2025-05-08 04:57:11,680 (12 GLIDE ) acc: 74.5; ap: 92.0; r_acc: 96.7; f_acc: 52.3 +2025-05-08 04:57:41,172 (13 InSwap ) acc: 48.9; ap: 38.6; r_acc: 96.7; f_acc: 0.0 +2025-05-08 04:58:09,270 (14 FaceSwap ) acc: 49.2; ap: 41.6; r_acc: 97.2; f_acc: 0.0 +2025-05-08 04:58:57,752 (15 StyleSwim ) acc: 86.8; ap: 95.6; r_acc: 96.1; f_acc: 77.6 +2025-05-08 04:59:19,204 (16 ProGAN ) acc: 99.8; ap: 100.0; r_acc: 100.0; f_acc: 99.6 +2025-05-08 04:59:59,534 (17 BlendFace ) acc: 46.7; ap: 34.0; r_acc: 93.4; f_acc: 0.0 +2025-05-08 05:00:47,910 (18 PhotoMaker ) acc: 48.8; ap: 53.2; r_acc: 95.7; f_acc: 1.9 +2025-05-08 05:01:36,419 (19 SD3 ) acc: 93.6; ap: 98.1; r_acc: 96.0; f_acc: 91.1 +2025-05-08 05:03:12,190 (20 Infinite-ID ) acc: 53.7; ap: 76.5; r_acc: 96.0; f_acc: 11.4 +2025-05-08 05:03:25,844 (21 WFIR ) acc: 50.0; ap: 67.4; r_acc: 99.3; f_acc: 0.7 +2025-05-08 05:03:55,451 (22 SimSwap ) acc: 48.5; ap: 40.1; r_acc: 97.0; f_acc: 0.0 +2025-05-08 05:05:42,012 (23 InstantID ) acc: 55.0; ap: 72.8; r_acc: 95.8; f_acc: 14.2 +2025-05-08 05:06:43,650 (24 StyleGAN3 ) acc: 80.4; ap: 94.5; r_acc: 95.5; f_acc: 65.2 +2025-05-08 05:06:43,650 (25 Mean ) acc: 66.7; ap: 73.2; r_acc: 96.4; f_acc: 37.0 +2025-05-08 05:06:43,650 ************************* +2025-05-10 01:08:35,305 Model_path /data/ziqiang/yjz/code/NPR-DeepfakeDetection-main/checkpoints/5class-car-cat-chair-horse-sdv1.4-rjm2025_05_08_02_08_14/model_epoch_70.pth +2025-05-10 01:08:36,098 AIGIBench +2025-05-10 01:08:36,098 2025-05-10 01:08:36 +2025-05-10 01:09:02,732 (0 R3GAN ) acc: 55.4; ap: 86.6; r_acc: 97.7; f_acc: 13.2 +2025-05-10 01:09:45,361 (1 IP-Adapter ) acc: 50.5; ap: 68.8; r_acc: 98.0; f_acc: 3.1 +2025-05-10 01:11:36,596 (2 SocialRF ) acc: 55.8; ap: 57.4; r_acc: 99.7; f_acc: 11.9 +2025-05-10 01:12:15,535 (3 CommunityAI ) acc: 51.8; ap: 56.0; r_acc: 100.0; f_acc: 3.7 +2025-05-10 01:12:56,477 (4 StyleGAN-XL ) acc: 70.8; ap: 94.9; r_acc: 97.8; f_acc: 43.7 +2025-05-10 01:13:31,611 (5 Midjourney ) acc: 73.6; ap: 89.3; r_acc: 95.0; f_acc: 52.1 +2025-05-10 01:14:10,173 (6 FLUX1-dev ) acc: 90.9; ap: 98.6; r_acc: 97.7; f_acc: 84.0 +2025-05-10 01:14:41,225 (7 E4S ) acc: 48.6; ap: 36.0; r_acc: 97.2; f_acc: 0.0 +2025-05-10 01:15:22,326 (8 Imagen3 ) acc: 90.5; ap: 98.7; r_acc: 97.8; f_acc: 83.2 +2025-05-10 01:15:43,840 (9 BLIP ) acc: 98.8; ap: 100.0; r_acc: 99.6; f_acc: 97.9 +2025-05-10 01:16:21,911 (10 SDXL ) acc: 58.5; ap: 84.1; r_acc: 97.7; f_acc: 19.2 +2025-05-10 01:16:58,644 (11 DALLE-3 ) acc: 49.2; ap: 48.5; r_acc: 98.0; f_acc: 0.3 +2025-05-10 01:17:22,392 (12 GLIDE ) acc: 83.4; ap: 97.2; r_acc: 98.0; f_acc: 68.9 +2025-05-10 01:17:45,937 (13 InSwap ) acc: 50.0; ap: 46.1; r_acc: 98.8; f_acc: 0.0 +2025-05-10 01:18:09,707 (14 FaceSwap ) acc: 49.8; ap: 51.8; r_acc: 98.5; f_acc: 0.0 +2025-05-10 01:18:49,351 (15 StyleSwim ) acc: 85.7; ap: 97.7; r_acc: 97.8; f_acc: 73.7 +2025-05-10 01:19:07,214 (16 ProGAN ) acc: 99.9; ap: 100.0; r_acc: 100.0; f_acc: 99.9 +2025-05-10 01:19:40,751 (17 BlendFace ) acc: 48.4; ap: 40.7; r_acc: 96.8; f_acc: 0.0 +2025-05-10 01:20:22,887 (18 PhotoMaker ) acc: 53.1; ap: 69.6; r_acc: 97.6; f_acc: 8.6 +2025-05-10 01:21:03,542 (19 SD3 ) acc: 82.2; ap: 97.1; r_acc: 97.7; f_acc: 66.8 +2025-05-10 01:21:45,926 (20 Infinite-ID ) acc: 50.1; ap: 61.2; r_acc: 97.9; f_acc: 2.3 +2025-05-10 01:21:56,774 (21 WFIR ) acc: 51.4; ap: 88.9; r_acc: 100.0; f_acc: 2.8 +2025-05-10 01:22:20,156 (22 SimSwap ) acc: 49.3; ap: 47.0; r_acc: 98.6; f_acc: 0.0 +2025-05-10 01:23:16,902 (23 InstantID ) acc: 54.5; ap: 76.5; r_acc: 98.0; f_acc: 11.0 +2025-05-10 01:23:49,551 (24 StyleGAN3 ) acc: 81.3; ap: 96.6; r_acc: 97.6; f_acc: 65.0 +2025-05-10 01:23:49,551 (25 Mean ) acc: 65.3; ap: 75.6; r_acc: 98.1; f_acc: 32.5 +2025-05-10 01:23:49,551 ************************* diff --git a/detector_codes/NPR-DeepfakeDetection-main/networks/__init__.py b/detector_codes/NPR-DeepfakeDetection-main/networks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/NPR-DeepfakeDetection-main/networks/base_model.py b/detector_codes/NPR-DeepfakeDetection-main/networks/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..1e1024d01e417a118ac7047d21a9ffa9f561c82a --- /dev/null +++ b/detector_codes/NPR-DeepfakeDetection-main/networks/base_model.py @@ -0,0 +1,91 @@ +# from pix2pix +import os +import torch +import torch.nn as nn +from torch.nn import init +from torch.optim import lr_scheduler + + +class BaseModel(nn.Module): + def __init__(self, opt): + super(BaseModel, self).__init__() + self.opt = opt + self.total_steps = 0 + self.isTrain = opt.isTrain + self.lr = opt.lr + self.save_dir = os.path.join(opt.checkpoints_dir, opt.name) + self.device = torch.device('cuda:{}'.format(opt.gpu_ids[0])) if opt.gpu_ids else torch.device('cpu') + + def save_networks(self, epoch): + save_filename = 'model_epoch_%s.pth' % epoch + save_path = os.path.join(self.save_dir, save_filename) + + # serialize model and optimizer to dict + # state_dict = { + # 'model': self.model.state_dict(), + # 'optimizer' : self.optimizer.state_dict(), + # 'total_steps' : self.total_steps, + # } + + torch.save(self.model.state_dict(), save_path) + print(f'Saving model {save_path}') + + # load models from the disk + def load_networks(self, epoch): + load_filename = 'model_epoch_%s.pth' % epoch + load_path = os.path.join(self.save_dir, load_filename) + + print('loading the model from %s' % load_path) + # if you are using PyTorch newer than 0.4 (e.g., built from + # GitHub source), you can remove str() on self.device + state_dict = torch.load(load_path, map_location=self.device) + if hasattr(state_dict, '_metadata'): + del state_dict._metadata + + self.model.load_state_dict(state_dict['model']) + self.total_steps = state_dict['total_steps'] + + if self.isTrain and not self.opt.new_optim: + self.optimizer.load_state_dict(state_dict['optimizer']) + ### move optimizer state to GPU + for state in self.optimizer.state.values(): + for k, v in state.items(): + if torch.is_tensor(v): + state[k] = v.to(self.device) + + for g in self.optimizer.param_groups: + g['lr'] = self.opt.lr + + def eval(self): + self.model.eval() + + def train(self): + self.model.train() + + def test(self): + with torch.no_grad(): + self.forward() + + +def init_weights(net, init_type='normal', gain=0.02): + def init_func(m): + classname = m.__class__.__name__ + if hasattr(m, 'weight') and (classname.find('Conv') != -1 or classname.find('Linear') != -1): + if init_type == 'normal': + init.normal_(m.weight.data, 0.0, gain) + elif init_type == 'xavier': + init.xavier_normal_(m.weight.data, gain=gain) + elif init_type == 'kaiming': + init.kaiming_normal_(m.weight.data, a=0, mode='fan_in') + elif init_type == 'orthogonal': + init.orthogonal_(m.weight.data, gain=gain) + else: + raise NotImplementedError('initialization method [%s] is not implemented' % init_type) + if hasattr(m, 'bias') and m.bias is not None: + init.constant_(m.bias.data, 0.0) + elif classname.find('BatchNorm2d') != -1: + init.normal_(m.weight.data, 1.0, gain) + init.constant_(m.bias.data, 0.0) + + print('initialize network with %s' % init_type) + net.apply(init_func) diff --git a/detector_codes/NPR-DeepfakeDetection-main/networks/resnet.py b/detector_codes/NPR-DeepfakeDetection-main/networks/resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..2a5f40ae344bb6e292c89cfb265dbf059829e5b4 --- /dev/null +++ b/detector_codes/NPR-DeepfakeDetection-main/networks/resnet.py @@ -0,0 +1,235 @@ +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +from torch.nn import functional as F +from typing import Any, cast, Dict, List, Optional, Union +import numpy as np + +__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', + 'resnet152'] + + +model_urls = { + 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', + 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth', + 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth', + 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth', + 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', +} + + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=1, bias=False) + + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(BasicBlock, self).__init__() + self.conv1 = conv3x3(inplanes, planes, stride) + self.bn1 = nn.BatchNorm2d(planes) + self.relu = nn.ReLU(inplace=True) + self.conv2 = conv3x3(planes, planes) + self.bn2 = nn.BatchNorm2d(planes) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(Bottleneck, self).__init__() + self.conv1 = conv1x1(inplanes, planes) + self.bn1 = nn.BatchNorm2d(planes) + self.conv2 = conv3x3(planes, planes, stride) + self.bn2 = nn.BatchNorm2d(planes) + self.conv3 = conv1x1(planes, planes * self.expansion) + self.bn3 = nn.BatchNorm2d(planes * self.expansion) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class ResNet(nn.Module): + + def __init__(self, block, layers, num_classes=1, zero_init_residual=False): + super(ResNet, self).__init__() + + self.unfoldSize = 2 + self.unfoldIndex = 0 + assert self.unfoldSize > 1 + assert -1 < self.unfoldIndex and self.unfoldIndex < self.unfoldSize*self.unfoldSize + self.inplanes = 64 + self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1, bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64 , layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + # self.fc1 = nn.Linear(512 * block.expansion, 1) + self.fc1 = nn.Linear(512, num_classes) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, nn.BatchNorm2d): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + + # Zero-initialize the last BN in each residual branch, + # so that the residual branch starts with zeros, and each residual block behaves like an identity. + # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + nn.init.constant_(m.bn3.weight, 0) + elif isinstance(m, BasicBlock): + nn.init.constant_(m.bn2.weight, 0) + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + conv1x1(self.inplanes, planes * block.expansion, stride), + nn.BatchNorm2d(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes)) + + return nn.Sequential(*layers) + def interpolate(self, img, factor): + return F.interpolate(F.interpolate(img, scale_factor=factor, mode='nearest', recompute_scale_factor=True), scale_factor=1/factor, mode='nearest', recompute_scale_factor=True) + def forward(self, x): + # n,c,w,h = x.shape + # if -1*w%2 != 0: x = x[:,:,:w%2*-1,: ] + # if -1*h%2 != 0: x = x[:,:,: ,:h%2*-1] + # factor = 0.5 + # x_half = F.interpolate(x, scale_factor=factor, mode='nearest', recompute_scale_factor=True) + # x_re = F.interpolate(x_half, scale_factor=1/factor, mode='nearest', recompute_scale_factor=True) + # NPR = x - x_re + # n,c,w,h = x.shape + # if w%2 == 1 : x = x[:,:,:-1,:] + # if h%2 == 1 : x = x[:,:,:,:-1] + NPR = x - self.interpolate(x, 0.5) + + x = self.conv1(NPR*2.0/3.0) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc1(x) + + return x + + +def resnet18(pretrained=False, **kwargs): + """Constructs a ResNet-18 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [2, 2, 2, 2], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet18'])) + return model + + +def resnet34(pretrained=False, **kwargs): + """Constructs a ResNet-34 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet34'])) + return model + + +def resnet50(pretrained=False, **kwargs): + """Constructs a ResNet-50 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet50'])) + return model + + +def resnet101(pretrained=False, **kwargs): + """Constructs a ResNet-101 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 23, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet101'])) + return model + + +def resnet152(pretrained=False, **kwargs): + """Constructs a ResNet-152 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 8, 36, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet152'])) + return model diff --git a/detector_codes/NPR-DeepfakeDetection-main/networks/trainer.py b/detector_codes/NPR-DeepfakeDetection-main/networks/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..217006e9e9b02b558bffa04600ab446c28d0e93e --- /dev/null +++ b/detector_codes/NPR-DeepfakeDetection-main/networks/trainer.py @@ -0,0 +1,66 @@ +import functools +import torch +import torch.nn as nn +from networks.resnet import resnet50 +from networks.base_model import BaseModel, init_weights + + +class Trainer(BaseModel): + def name(self): + return 'Trainer' + + def __init__(self, opt): + super(Trainer, self).__init__(opt) + + if self.isTrain and not opt.continue_train: + self.model = resnet50(pretrained=False, num_classes=1) + + if not self.isTrain or opt.continue_train: + self.model = resnet50(num_classes=1) + + if self.isTrain: + self.loss_fn = nn.BCEWithLogitsLoss() + # initialize optimizers + if opt.optim == 'adam': + self.optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, betas=(opt.beta1, 0.999)) + elif opt.optim == 'sgd': + self.optimizer = torch.optim.SGD(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, momentum=0.0, weight_decay=0) + else: + raise ValueError("optim should be [adam, sgd]") + + if not self.isTrain or opt.continue_train: + self.load_networks(opt.epoch) + self.model.to(opt.gpu_ids[0]) + + + def adjust_learning_rate(self, min_lr=1e-6): + for param_group in self.optimizer.param_groups: + param_group['lr'] *= 0.9 + if param_group['lr'] < min_lr: + return False + self.lr = param_group['lr'] + print('*'*25) + print(f'Changing lr from {param_group["lr"]/0.9} to {param_group["lr"]}') + print('*'*25) + return True + + def set_input(self, input): + self.input = input[0].to(self.device) + self.label = input[1].to(self.device).float() + + + def forward(self): + self.output = self.model(self.input) + + def get_loss(self): + return self.loss_fn(self.output.squeeze(1), self.label) + + def optimize_parameters(self): + self.forward() + self.loss = self.loss_fn(self.output.squeeze(1), self.label) + self.optimizer.zero_grad() + self.loss.backward() + self.optimizer.step() + diff --git a/detector_codes/NPR-DeepfakeDetection-main/options/__init__.py b/detector_codes/NPR-DeepfakeDetection-main/options/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/NPR-DeepfakeDetection-main/options/base_options.py b/detector_codes/NPR-DeepfakeDetection-main/options/base_options.py new file mode 100644 index 0000000000000000000000000000000000000000..950f9b776552341dc458ccceea400d729435fc43 --- /dev/null +++ b/detector_codes/NPR-DeepfakeDetection-main/options/base_options.py @@ -0,0 +1,118 @@ +import argparse +import os +import time +import util +import torch +#import models +#import data + + +class BaseOptions(): + def __init__(self): + self.initialized = False + + def initialize(self, parser): + parser.add_argument('--mode', default='binary') + parser.add_argument('--arch', type=str, default='res50', help='architecture for binary classification') + + # data augmentation + parser.add_argument('--rz_interp', default='bilinear') + parser.add_argument('--blur_prob', type=float, default=0) + parser.add_argument('--blur_sig', default='0.5') + parser.add_argument('--jpg_prob', type=float, default=0) + parser.add_argument('--jpg_method', default='cv2') + parser.add_argument('--jpg_qual', default='75') + + parser.add_argument('--dataroot', default='./dataset/', help='path to images (should have subfolders trainA, trainB, valA, valB, etc)') + parser.add_argument('--classes', default='', help='image classes to train on') + parser.add_argument('--class_bal', action='store_true') + parser.add_argument('--batch_size', type=int, default=128, help='input batch size') + parser.add_argument('--loadSize', type=int, default=256, help='scale images to this size') + parser.add_argument('--cropSize', type=int, default=224, help='then crop to this size') + parser.add_argument('--gpu_ids', type=str, default='2', help='gpu ids: e.g. 0 0,1,2, 0,2. use -1 for CPU') + parser.add_argument('--name', type=str, default='experiment_name', help='name of the experiment. It decides where to store samples and models') + parser.add_argument('--epoch', type=str, default='latest', help='which epoch to load? set to latest to use latest cached model') + parser.add_argument('--num_threads', default=8, type=int, help='# threads for loading data') + parser.add_argument('--checkpoints_dir', type=str, default='./checkpoints', help='models are saved here') + parser.add_argument('--serial_batches', action='store_true', help='if true, takes images in order to make batches, otherwise takes them randomly') + parser.add_argument('--resize_or_crop', type=str, default='scale_and_crop', help='scaling and cropping of images at load time [resize_and_crop|crop|scale_width|scale_width_and_crop|none]') + parser.add_argument('--no_flip', action='store_true', help='if specified, do not flip the images for data augmentation') + parser.add_argument('--init_type', type=str, default='normal', help='network initialization [normal|xavier|kaiming|orthogonal]') + parser.add_argument('--init_gain', type=float, default=0.02, help='scaling factor for normal, xavier and orthogonal.') + parser.add_argument('--suffix', default='', type=str, help='customized suffix: opt.name = opt.name + suffix: e.g., {model}_{netG}_size{loadSize}') + parser.add_argument('--delr_freq', type=int, default=10, help='frequency of changing lr') + + + self.initialized = True + return parser + + def gather_options(self): + # initialize parser with basic options + if not self.initialized: + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser = self.initialize(parser) + + # get the basic options + opt, _ = parser.parse_known_args() + self.parser = parser + + return opt #parser.parse_args() + + def print_options(self, opt): + message = '' + message += '----------------- Options ---------------\n' + for k, v in sorted(vars(opt).items()): + comment = '' + default = self.parser.get_default(k) + if v != default: + comment = '\t[default: %s]' % str(default) + message += '{:>25}: {:<30}{}\n'.format(str(k), str(v), comment) + message += '----------------- End -------------------' + print(message) + + # save to the disk + + expr_dir = os.path.join(opt.checkpoints_dir, opt.name) + util.mkdirs(expr_dir) + file_name = os.path.join(expr_dir, 'opt.txt') + with open(file_name, 'wt') as opt_file: + opt_file.write(message) + opt_file.write('\n') + + def parse(self, print_options=True): + + opt = self.gather_options() + opt.isTrain = self.isTrain # train or test + opt.name = opt.name + time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()) + # process opt.suffix + if opt.suffix: + suffix = ('_' + opt.suffix.format(**vars(opt))) if opt.suffix != '' else '' + opt.name = opt.name + suffix + + if print_options: + self.print_options(opt) + + # set gpu ids + str_ids = opt.gpu_ids.split(',') + opt.gpu_ids = [] + for str_id in str_ids: + id = int(str_id) + if id >= 0: + opt.gpu_ids.append(id) + if len(opt.gpu_ids) > 0: + torch.cuda.set_device(opt.gpu_ids[0]) + + # additional + opt.classes = opt.classes.split(',') + opt.rz_interp = opt.rz_interp.split(',') + opt.blur_sig = [float(s) for s in opt.blur_sig.split(',')] + opt.jpg_method = opt.jpg_method.split(',') + opt.jpg_qual = [int(s) for s in opt.jpg_qual.split(',')] + if len(opt.jpg_qual) == 2: + opt.jpg_qual = list(range(opt.jpg_qual[0], opt.jpg_qual[1] + 1)) + elif len(opt.jpg_qual) > 2: + raise ValueError("Shouldn't have more than 2 values for --jpg_qual.") + + self.opt = opt + return self.opt diff --git a/detector_codes/NPR-DeepfakeDetection-main/options/test_options.py b/detector_codes/NPR-DeepfakeDetection-main/options/test_options.py new file mode 100644 index 0000000000000000000000000000000000000000..1dba350e3cadf758c2dc39e99a55b4e844e7b16d --- /dev/null +++ b/detector_codes/NPR-DeepfakeDetection-main/options/test_options.py @@ -0,0 +1,17 @@ +from .base_options import BaseOptions + + +class TestOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + # parser.add_argument('--dataroot') + parser.add_argument('--model_path') + parser.add_argument('--no_resize', action='store_true') + parser.add_argument('--no_crop', action='store_true') + parser.add_argument('--eval', action='store_true', help='use eval mode during test time.') + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--lr', type=float, default=0.00002, help='initial learning rate for adam') + parser.add_argument('--niter', type=int, default=0, help='# of iter at starting learning rate') + + self.isTrain = False + return parser diff --git a/detector_codes/NPR-DeepfakeDetection-main/options/train_options.py b/detector_codes/NPR-DeepfakeDetection-main/options/train_options.py new file mode 100644 index 0000000000000000000000000000000000000000..f26a0ecc8067113cc12f815a57f8b060a9ffcb99 --- /dev/null +++ b/detector_codes/NPR-DeepfakeDetection-main/options/train_options.py @@ -0,0 +1,26 @@ +from .base_options import BaseOptions + + +class TrainOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--data_aug', action='store_true', help='if specified, perform additional data augmentation (photometric, blurring, jpegging)') + parser.add_argument('--optim', type=str, default='adam', help='optim to use [sgd, adam]') + parser.add_argument('--new_optim', action='store_true', help='new optimizer instead of loading the optim state') + parser.add_argument('--loss_freq', type=int, default=400, help='frequency of showing loss on tensorboard') + parser.add_argument('--save_latest_freq', type=int, default=2000, help='frequency of saving the latest results') + parser.add_argument('--save_epoch_freq', type=int, default=10, help='frequency of saving checkpoints at the end of epochs') + parser.add_argument('--continue_train', action='store_true', help='continue training: load the latest model') + parser.add_argument('--epoch_count', type=int, default=1, help='the starting epoch count, we save the model by , +, ...') + parser.add_argument('--last_epoch', type=int, default=-1, help='starting epoch count for scheduler intialization') + parser.add_argument('--train_split', type=str, default='train', help='train, val, test, etc') + parser.add_argument('--val_split', type=str, default='val', help='train, val, test, etc') + parser.add_argument('--niter', type=int, default=101, help='# of iter at starting learning rate') + parser.add_argument('--beta1', type=float, default=0.9, help='momentum term of adam') + parser.add_argument('--lr', type=float, default=0.0002, help='initial learning rate for adam') + # parser.add_argument('--model_path') + # parser.add_argument('--no_resize', action='store_true') + # parser.add_argument('--no_crop', action='store_true') + self.isTrain = True + return parser diff --git a/detector_codes/NPR-DeepfakeDetection-main/requirements.txt b/detector_codes/NPR-DeepfakeDetection-main/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..5229c276fd6097939ede4e2f015a95352cb177ec --- /dev/null +++ b/detector_codes/NPR-DeepfakeDetection-main/requirements.txt @@ -0,0 +1,7 @@ +scipy +scikit-learn +numpy +opencv_python +Pillow +torch>=1.2.0 +torchvision diff --git a/detector_codes/NPR-DeepfakeDetection-main/test.py b/detector_codes/NPR-DeepfakeDetection-main/test.py new file mode 100644 index 0000000000000000000000000000000000000000..885a74ca4def38293924f4e021b15ea73298104f --- /dev/null +++ b/detector_codes/NPR-DeepfakeDetection-main/test.py @@ -0,0 +1,111 @@ +import logging +import os +import random +import time + +import numpy as np +import torch +from data import create_dataloader +from networks.resnet import resnet50 +from options.test_options import TestOptions +from util import printSet +from validate import validate + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if you are using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +seed_torch(100) + +DetectionTests = { + # 'AIGIBench': { 'dataroot': '/data/ziqiang/Benchmark', + # 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + # 'no_crop': True, + # }, + 'jpeg': { + 'dataroot': '/data/ziqiang/jpeg', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'noise': { + 'dataroot': '/data/ziqiang/noise', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'sample': { + 'dataroot': '/data/ziqiang/sample', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, +} + + +# Set up logging +logging.basicConfig( + filename='log_test.log', level=logging.INFO, format='%(asctime)s %(message)s' +) +logger = logging.getLogger() + +opt = TestOptions().parse(print_options=False) +log_msg = f'Model_path {opt.model_path}' +print(log_msg) +logger.info(log_msg) + +# Get model +model = resnet50(num_classes=1) +model.load_state_dict(torch.load(opt.model_path), strict=True) +model.cuda() +model.eval() + +for testSet in DetectionTests.keys(): + dataroot = DetectionTests[testSet]['dataroot'] + printSet(testSet) + logger.info(testSet) + + accs = [] + aps = [] + r_accs = [] + f_accs = [] + current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + print(current_time) + logger.info(current_time) + + for v_id, val in enumerate(os.listdir(dataroot)): + opt.dataroot = '{}/{}'.format(dataroot, val) + opt.classes = '' # os.listdir(opt.dataroot) if multiclass[v_id] else [''] + opt.no_resize = DetectionTests[testSet]['no_resize'] + opt.no_crop = DetectionTests[testSet]['no_crop'] + dataloader = create_dataloader(opt) + acc, ap, r_acc, f_acc, _, _ = validate(model, dataloader) + accs.append(acc) + aps.append(ap) + r_accs.append(r_acc) + f_accs.append(f_acc) + log_msg = ( + '({} {:12}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id, val, acc * 100, ap * 100, r_acc * 100, f_acc * 100 + ) + ) + print(log_msg) + logger.info(log_msg) + + mean_acc = np.array(accs).mean() * 100 + mean_ap = np.array(aps).mean() * 100 + mean_r_acc = np.array(r_accs).mean() * 100 + mean_f_acc = np.array(f_accs).mean() * 100 + log_msg = '({} {:10}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id + 1, 'Mean', mean_acc, mean_ap, mean_r_acc, mean_f_acc + ) + print(log_msg) + logger.info(log_msg) + print('*' * 25) + logger.info('*' * 25) diff --git a/detector_codes/NPR-DeepfakeDetection-main/train.py b/detector_codes/NPR-DeepfakeDetection-main/train.py new file mode 100644 index 0000000000000000000000000000000000000000..d7c7c58c6462c20b2f18017efafe3258b50dab38 --- /dev/null +++ b/detector_codes/NPR-DeepfakeDetection-main/train.py @@ -0,0 +1,124 @@ +import logging +import os +import random +import sys +import time + +import numpy as np +import torch +from data import create_dataloader +from networks.trainer import Trainer +from options.train_options import TrainOptions +from tensorboardX import SummaryWriter +from util import Logger +from validate import validate + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +def get_val_opt(): + val_opt = TrainOptions().parse(print_options=False) + val_opt.isTrain = False + val_opt.no_resize = False + val_opt.no_crop = False + val_opt.serial_batches = True + return val_opt + + +if __name__ == '__main__': + opt = TrainOptions().parse() + seed_torch(100) + opt.dataroot = f'{opt.dataroot}/{opt.train_split}/' + Logger(os.path.join(opt.checkpoints_dir, opt.name, 'logging.log')) + print(' '.join(list(sys.argv))) + val_opt = get_val_opt() + val_opt.dataroot = f'{val_opt.dataroot}/{val_opt.val_split}/' + + data_loader = create_dataloader(opt) + val_loader = create_dataloader(val_opt) + + train_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'train')) + val_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'val')) + + model = Trainer(opt) + model.train() + + # Configure logger + logging.basicConfig( + level=logging.INFO, # Set logging level + format='%(asctime)s - %(levelname)s - %(message)s', # Log format + datefmt='%Y-%m-%d %H:%M:%S', # Date format without milliseconds + handlers=[ + logging.FileHandler('log.log', mode='w'), # Log file output + logging.StreamHandler(), + ], + ) # Console output + + logger = logging.getLogger(__name__) + + print(f'cwd: {os.getcwd()}') + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} Length of data loader: {len(data_loader)}' + ) + logger.info(f'Length of data loader: {len(data_loader)}') + + for epoch in range(opt.niter): + for i, data in enumerate(data_loader): + model.total_steps += 1 + + # Move data to cuda + model.set_input(data) + # Train + model.optimize_parameters() + + if model.total_steps % opt.loss_freq == 0: + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}' + ) + logger.info( + f'Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}' + ) + train_writer.add_scalar('loss', model.loss, model.total_steps) + + if epoch == 0 or epoch % opt.save_epoch_freq == 0: + # if epoch == 0: + # Optionally save model at each epoch + print(f'saving the model at the end of epoch {epoch}') + logger.info(f'saving the model at the end of epoch {epoch}') + model.save_networks(epoch) + + if epoch % 10 == 0 and epoch != 0: + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} changing lr at the end of epoch {epoch}, iters {model.total_steps}' + ) + logger.info( + f'changing lr at the end of epoch {epoch}, iters {model.total_steps}' + ) + model.adjust_learning_rate() + + # Validation + model.eval() + acc, ap, r_acc, f_acc, _, _ = validate(model.model, val_loader) + val_writer.add_scalar('accuracy', acc, model.total_steps) + val_writer.add_scalar('ap', ap, model.total_steps) + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} (Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}' + ) + logger.info( + f'(Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}' + ) + + model.train() + + model.eval() + model.save_networks('last') diff --git a/detector_codes/NPR-DeepfakeDetection-main/util.py b/detector_codes/NPR-DeepfakeDetection-main/util.py new file mode 100644 index 0000000000000000000000000000000000000000..3ae97ef76a1c165cb11f7ddaf90377196428f7ef --- /dev/null +++ b/detector_codes/NPR-DeepfakeDetection-main/util.py @@ -0,0 +1,49 @@ +import os +import sys + +import torch + + +def mkdirs(paths): + if isinstance(paths, list) and not isinstance(paths, str): + for path in paths: + mkdir(path) + else: + mkdir(paths) + + +def mkdir(path): + if not os.path.exists(path): + os.makedirs(path) + + +def unnormalize(tens, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]): + # assume tensor of shape NxCxHxW + return ( + tens * torch.Tensor(std)[None, :, None, None] + + torch.Tensor(mean)[None, :, None, None] + ) + + +class Logger(object): + """Log stdout messages.""" + + def __init__(self, outfile): + self.terminal = sys.stdout + self.log = open(outfile, 'a') + sys.stdout = self + + def write(self, message): + self.terminal.write(message) + self.log.write(message) + + def flush(self): + self.terminal.flush() + + +def printSet(set_str): + set_str = str(set_str) + num = len(set_str) + print('=' * num * 3) + print(' ' * num + set_str) + print('=' * num * 3) diff --git a/detector_codes/NPR-DeepfakeDetection-main/validate.py b/detector_codes/NPR-DeepfakeDetection-main/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..55e4a8bdab25a5669cdb3945ca65d5aa03d21519 --- /dev/null +++ b/detector_codes/NPR-DeepfakeDetection-main/validate.py @@ -0,0 +1,41 @@ +import numpy as np +import torch +from networks.resnet import resnet50 +from options.test_options import TestOptions +from sklearn.metrics import accuracy_score, average_precision_score + + +def validate(model, data_loader): + # data_loader = create_dataloader(opt) + + with torch.no_grad(): + y_true, y_pred = [], [] + for img, label in data_loader: + in_tens = img.cuda() + y_pred.extend(model(in_tens).sigmoid().flatten().tolist()) + y_true.extend(label.flatten().tolist()) + + y_true, y_pred = np.array(y_true), np.array(y_pred) + r_acc = accuracy_score(y_true[y_true == 0], y_pred[y_true == 0] > 0.5) + f_acc = accuracy_score(y_true[y_true == 1], y_pred[y_true == 1] > 0.5) + acc = accuracy_score(y_true, y_pred > 0.5) + ap = average_precision_score(y_true, y_pred) + return acc, ap, r_acc, f_acc, y_true, y_pred + + +if __name__ == '__main__': + opt = TestOptions().parse(print_options=False) + + model = resnet50(num_classes=1) + state_dict = torch.load(opt.model_path, map_location='cpu') + model.load_state_dict(state_dict['model']) + model.cuda() + model.eval() + + acc, avg_precision, r_acc, f_acc, y_true, y_pred = validate(model, opt) + + print('accuracy:', acc) + print('average precision:', avg_precision) + + print('accuracy of real images:', r_acc) + print('accuracy of fake images:', f_acc) diff --git a/detector_codes/README.md b/detector_codes/README.md new file mode 100644 index 0000000000000000000000000000000000000000..ef79942f2ada5c4a801d0cfc663e49990cd29680 --- /dev/null +++ b/detector_codes/README.md @@ -0,0 +1,46 @@ +## Setup +``` +conda create -n AIGIBench -y python=3.9 +conda activate AIGIBench +# install pytorch +pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124 +``` +There is a corresponding requirements.txt under each code, so you only need to use the following command after installing pytorch and other environments +``` +pip install -r requirements.txt +``` +## Train & Test +### a. CNNDetection-master +You need to change [dataroot] and [model_path] in eval_config.py when testing. +``` +train: nohup python train.py --name 5class-car-cat-chair-horse-sdv1.4 --blur_prob 0.1 --blur_sig 0.0,3.0 --jpg_prob 0.1 --jpg_method cv2,pil --jpg_qual 30,100 --dataroot [training datasets path] --classes car,cat,chair,horse,sdv1.4 > nohup.out 2>&1 & +test: python eval.py +``` + +### b. AIDE-main +You need to change [RESUME_PATH] and [eval_datasets] in eval_config.py when testing. +``` +train: nohup python main_finetune.py --model AIDE --batch_size 32 --blr 1e-4 --epochs 25 --data_path [training datasets path] --eval_data_path [evaling datasets path] > nohup.out 2>&1 & +test: bash scripts/eval.sh +``` + +### c. SAFE-main +You need to change [RESUME_PATH] and [eval_datasets] in scripts/eval.sh when testing. +``` +train: nohup python main_finetune.py --model SAFE --data_path [training datasets path] --eval_data_path [evaling datasets path] --epochs 20 > nohup.out 2>&1 & +test: bash scripts/eval.sh +``` + +### d. Effort-AIGI-Detection +You need to change [CLIPModel_Path] in models/clip_models.py and [DetectionTests] in test.py when testing. +``` +train: nohup python train.py --name 5class-car-cat-chair-horse-sdv1.4 --dataroot [training datasets path] --classes car,cat,chair,horse,sdv1.4 --use_svd > nohup.out 2>&1 & +test: python test.py --model_path [training checkpoints path] --use_svd +``` + +### e. Others +All other methods work the same way. You need to change [DetectionTests] in test.py when testing. +``` +train: nohup python train.py --name 5class-car-cat-chair-horse-sdv1.4 --dataroot [training datasets path] --classes car,cat,chair,horse,sdv1.4 > nohup.out 2>&1 & +test: python test.py --model_path [training checkpoints path] +``` diff --git a/detector_codes/RIGID-main/rigid_detector.py b/detector_codes/RIGID-main/rigid_detector.py new file mode 100644 index 0000000000000000000000000000000000000000..9f0c9f9ef827e2793ea1e666472fe00ea7682bf4 --- /dev/null +++ b/detector_codes/RIGID-main/rigid_detector.py @@ -0,0 +1,24 @@ +import torch +import torch.nn.functional as F + +class RIGID_Detector: + def __init__(self, lamb=0.05): + self.lamb = lamb + self.model = torch.hub.load('facebookresearch/dinov2', 'dinov2_vitl14') + self.model.eval() + + @torch.no_grad() + def calculate_sim(self, data): + features = self.model(data) + noise = torch.randn_like(data).to(data.device) + trans_data = data + noise * self.lamb + trans_features = self.model(trans_data) + sim_feat = F.cosine_similarity(features, trans_features, dim=-1) + return sim_feat + + @torch.no_grad() + def detect(self, data): + sim = self.calculate_sim(data) + # Higher similarity means more "real" (stable under noise) + # We return 1 - sim so that high = fake, to align with evaluate_detectors.py + return 1.0 - sim diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/LICENSE b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..dd86c032c16e4d2ecf6a3a8beea139d0b0e85ae2 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/LICENSE @@ -0,0 +1,154 @@ +SOFTWARE RESEARCH LICENSE + + +I. DEFINITIONS. + +"Licensee" means You and any other party that has entered into and has +in effect a version of this License. + +"Modifications" means any (a) change or addition to the Technology or +(b) new source or object code implementing any portion of the Technology. + +"Yissum" means Yissum Research Development Company Of The Hebrew University of Jerusalem Ltd., +its successors and assignees. + +"Research Use" means research, evaluation, or development for the +purpose of advancing knowledge, teaching, learning, or customizing the +Technology or Modifications for personal use. Research Use expressly +excludes use or distribution for direct or indirect commercial +(including strategic) gain or advantage. + +"Technology" means the source code, object code and specifications of +the technology made available by Yissum pursuant to this License. + +"Technology Site" means the website designated for accessing the Technology. + +"You" means the individual executing this License or the legal entity or +entities represented by the individual executing this License. + +II. PURPOSE. + +Yissum is licensing the Technology under this Software Research License (the "License") +to promote research, education, innovation, and development using the Technology. + +COMMERCIAL USE AND DISTRIBUTION OF TECHNOLOGY AND MODIFICATIONS IS +PERMITTED ONLY UNDER A YISSUM COMMERCIAL LICENSE. + +III. RESEARCH USE RIGHTS. + +A. License Grant. Subject to the conditions contained herein, Yissum +grants to You a non-exclusive, non-transferable, worldwide, and +royalty-free license to do the following for Your Research Use only: + +1. Reproduce, create Modifications of, and use the Technology alone, +or with Modifications; + +2. Share source code of the Technology alone, or with Modifications, +with other Licensees; and + +3. Distribute object code of the Technology, alone, or with +Modifications, to any third parties for Research Use only, under a +license of Your choice that is consistent with this License; and publish +papers and books discussing the Technology which may include relevant +excerpts that do not in the aggregate constitute a significant portion +of the Technology. + +B. Residual Rights. You may use any information in intangible form +that you remember after accessing the Technology, except when such use +violates Yissum's copyrights or patent rights. + +C. No Implied Licenses. Other than the rights granted herein, Yissum +retains all rights, title, and interest in Technology, and You retain +all rights, title, and interest in Your Modifications and associated +specifications, subject to the terms of this License. + +D. Open Source Licenses. Portions of the Technology may be provided +with notices and open source licenses from open source communities and +third parties that govern the use of those portions, and any licenses +granted hereunder do not alter any rights and obligations you may have +under such open source licenses, however, the disclaimer of warranty and +limitation of liability provisions in this License will apply to all +Technology in this distribution. + +IV. INTELLECTUAL PROPERTY REQUIREMENTS + +As a condition to Your License, You agree to comply with the following +restrictions and responsibilities: + +A. License and Copyright Notices. You must include a copy of this +Software Research License in a Readme file for any Technology or +Modifications you distribute. You must also include the following +statement, "Use and distribution of this technology is subject to the +Software Research License included herein", (a) once prominently in the +source code tree and/or specifications for Your source code +distributions, and (b) once in the same file as Your copyright or +proprietary notices for Your binary code distributions. You must cause +any files containing Your Modification to carry prominent notice stating +that You changed the files. You must not remove or alter any copyright +or other proprietary notices in the Technology. + +B. Licensee Exchanges. Any Technology and Modifications You +receive from any Licensee are governed by this License. + +V. GENERAL TERMS. + +A. Disclaimer Of Warranties. + +THE TECHNOLOGY IS PROVIDED "AS IS", WITHOUT WARRANTIES OF ANY KIND, +EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT +THE TECHNOLOGY IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR +PURPOSE, OR NON-INFRINGING OF THIRD PARTY RIGHTS. YOU AGREE THAT YOU +BEAR THE ENTIRE RISK IN CONNECTION WITH YOUR USE AND DISTRIBUTION OF ANY +AND ALL TECHNOLOGY UNDER THIS LICENSE. + +B. Infringement; Limitation Of Liability. + +1. If any portion of, or functionality implemented by, the Technology +becomes the subject of a claim or threatened claim of infringement +("Affected Materials"), Yissum may, in its unrestricted discretion, suspend +Your rights to use and distribute the Affected Materials under this +License. Such suspension of rights will be effective immediately upon +the posting of notice of suspension on the Technology Site. + +2. IN NO EVENT WILL YISSUM BE LIABLE FOR ANY DIRECT, INDIRECT, PUNITIVE, +SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH OR +ARISING OUT OF THIS LICENSE (INCLUDING, WITHOUT LIMITATION, LOSS OF +PROFITS, USE, DATA, OR ECONOMIC ADVANTAGE OF ANY SORT), HOWEVER IT +ARISES AND ON ANY THEORY OF LIABILITY (including negligence), WHETHER OR +NOT YISSUM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. LIABILITY +UNDER THIS SECTION V.B.2 SHALL BE SO LIMITED AND EXCLUDED, +NOTWITHSTANDING FAILURE OF THE ESSENTIAL PURPOSE OF ANY REMEDY. + +C. Termination. + +1. You may terminate this License at any time by notifying Yissum in writing. + +2. All Your rights will terminate under this License if You fail to +comply with any of its material terms or conditions and do not cure such +failure within thirty (30) days after becoming aware of such noncompliance. + +3. Upon termination, You must discontinue all uses and distribution +of the Technology, and all provisions of this Section V ("General Terms") +shall survive termination. + +D. Miscellaneous. + +1. Use of Names. Except as expressly provided in this License, +You may not use the names of Yissum or the Hebrew University of Jerusalem +except for the limited purpose of identifying the source of the Technology. + +2. Integration. This License represents the complete agreement of +the parties concerning the subject matter hereof. + +3. Severability. If any provision of this License is held +unenforceable, such provision shall be reformed to the extent necessary +to make it enforceable unless to do so would defeat the intent of the +parties, in which case, this License shall terminate. + +4. Governing Law. This License is governed by the laws of the +State of Israel as applied to contracts entered into and performed in +Israel between Israeli residents. In no event shall this License +be construed against the drafter. + +5. Export Control. You agree to comply with all relevant export controls +and trade laws that apply to Technology and Modifications. diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/data/__init__.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..52734baf0216da4832c2dc9e1ca62af4a6b50dc4 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/data/__init__.py @@ -0,0 +1,43 @@ +import torch +import numpy as np +from torch.utils.data.sampler import WeightedRandomSampler + +from .datasets import dataset_folder + + +def get_dataset(opt): + dset_lst, all_paths = [], [] + for cls in opt.classes: + root = opt.dataroot + '/' + cls + dset, paths = dataset_folder(opt, root) + dset_lst.append(dset) + all_paths.extend(paths) + return torch.utils.data.ConcatDataset(dset_lst), all_paths + + + +def get_bal_sampler(dataset): + targets = [] + for d in dataset.datasets: + targets.extend(d.targets) + + ratio = np.bincount(targets) + w = 1. / torch.tensor(ratio, dtype=torch.float) + sample_weights = w[targets] + sampler = WeightedRandomSampler(weights=sample_weights, + num_samples=len(sample_weights)) + return sampler + + +def create_dataloader(opt): + shuffle = not opt.serial_batches if (opt.isTrain and not opt.class_bal) else False + dataset, all_paths = get_dataset(opt) + sampler = get_bal_sampler(dataset) if opt.class_bal else None + + data_loader = torch.utils.data.DataLoader(dataset, + batch_size=opt.batch_size, + shuffle=shuffle, + sampler=sampler, + num_workers=int(opt.num_threads)) + + return data_loader, all_paths diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/data/datasets.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/data/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..30c1ac9bcc6b4b6ec7b7a1d99984fb440231e40d --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/data/datasets.py @@ -0,0 +1,212 @@ +import cv2 +import numpy as np +import torchvision.datasets as datasets +import torchvision.transforms as transforms +import torchvision.transforms.functional as TF +from random import random, choice +from io import BytesIO +from PIL import Image +from PIL import ImageFile +from scipy.ndimage.filters import gaussian_filter +from torchvision.transforms import InterpolationMode +import torch +import torch.nn.functional as F +import PIL +import random +import torch + +ImageFile.LOAD_TRUNCATED_IMAGES = True + +def dataset_folder(opt, root): + if opt.mode == 'binary': + return binary_dataset(opt, root) + if opt.mode == 'filename': + return FileNameDataset(opt, root) + raise ValueError('opt.mode needs to be binary or filename.') + +class RandomMask(object): + def __init__(self, ratio=0.5, patch_size=16, p=0.5): + """ + Args: + ratio (float or tuple of float): If float, the ratio of the image to be masked. + If tuple of float, random sample ratio between the two values. + patch_size (int): the size of the mask (d*d). + """ + if isinstance(ratio, float): + self.fixed_ratio = True + self.ratio = (ratio, ratio) + elif isinstance(ratio, tuple) and len(ratio) == 2 and all(isinstance(r, float) for r in ratio): + self.fixed_ratio = False + self.ratio = ratio + else: + raise ValueError("Ratio must be a float or a tuple of two floats.") + + self.patch_size = patch_size + self.p = p + + def __call__(self, tensor): + + if random.random() > self.p: return tensor + + _, h, w = tensor.shape + mask = torch.ones((h, w), dtype=torch.float32) + + if self.fixed_ratio: + ratio = self.ratio[0] + else: + ratio = random.uniform(self.ratio[0], self.ratio[1]) + + # Calculate the number of masks needed + num_masks = int((h * w * ratio) / (self.patch_size ** 2)) + + # Generate non-overlapping random positions + selected_positions = set() + while len(selected_positions) < num_masks: + top = random.randint(0, (h // self.patch_size) - 1) * self.patch_size + left = random.randint(0, (w // self.patch_size) - 1) * self.patch_size + selected_positions.add((top, left)) + + for (top, left) in selected_positions: + mask[top:top+self.patch_size, left:left+self.patch_size] = 0 + + return tensor * mask.expand_as(tensor) + +def binary_dataset(opt, root): + if opt.isTrain: + crop_func = transforms.RandomCrop(opt.cropSize) + rotation_func = transforms.RandomRotation(180) + jitter_func = transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5) + mask_func = RandomMask(ratio=(0.00, 0.75), patch_size=16, p=0.5) + elif opt.no_crop: + crop_func = transforms.Lambda(lambda img: img) + rotation_func = transforms.Lambda(lambda img: img) + jitter_func = transforms.Lambda(lambda img: img) + mask_func = transforms.Lambda(lambda img: img) + else: + crop_func = transforms.CenterCrop(opt.cropSize) + rotation_func = transforms.Lambda(lambda img: img) + jitter_func = transforms.Lambda(lambda img: img) + mask_func = transforms.Lambda(lambda img: img) + + if opt.isTrain and not opt.no_flip: + flip_func = transforms.RandomHorizontalFlip() + else: + flip_func = transforms.Lambda(lambda img: img) + if not opt.isTrain and opt.no_resize: + rz_func = transforms.Lambda(lambda img: img) + else: + rz_func = transforms.Resize((opt.loadSize, opt.loadSize)) + # rz_func = transforms.CenterCrop(opt.cropSize) + if opt.is_aug: + print("aug in train") + aug_func = transforms.Lambda(lambda img: data_augment(img, opt)) + else: + print("NO aug") + aug_func = transforms.Lambda(lambda img: img) + + dset = datasets.ImageFolder( + root, + transforms.Compose([ + rz_func, + crop_func, + flip_func, + # rotation_func, + # jitter_func, + transforms.ToTensor(), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + # mask_func + ]), is_valid_file=is_valid_file_func) + + print(f"the dataset len is: {len(dset)}") + paths = [sample[0] for sample in dset.samples] + return dset, paths + + +def is_valid_file_func(filename): + extensions = (".jpg", ".jpeg", ".png", ".ppm", ".bmp", ".pgm", ".tif", ".tiff", ".webp", ".jfif") + return filename.lower().endswith(extensions if isinstance(extensions, str) else tuple(extensions)) + + + +class FileNameDataset(datasets.ImageFolder): + def name(self): + return 'FileNameDataset' + + def __init__(self, opt, root): + self.opt = opt + super().__init__(root) + + def __getitem__(self, index): + # Loading sample + path, target = self.samples[index] + return path + + +def data_augment(img, opt): + img = np.array(img) + + if random() < opt.blur_prob: + sig = sample_continuous(opt.blur_sig) + gaussian_blur(img, sig) + + if random() < opt.jpg_prob: + method = sample_discrete(opt.jpg_method) + qual = sample_discrete(opt.jpg_qual) + img = jpeg_from_key(img, qual, method) + + return Image.fromarray(img) + + +def sample_continuous(s): + if len(s) == 1: + return s[0] + if len(s) == 2: + rg = s[1] - s[0] + return random() * rg + s[0] + raise ValueError("Length of iterable s should be 1 or 2.") + + +def sample_discrete(s): + if len(s) == 1: + return s[0] + return choice(s) + + +def gaussian_blur(img, sigma): + gaussian_filter(img[:,:,0], output=img[:,:,0], sigma=sigma) + gaussian_filter(img[:,:,1], output=img[:,:,1], sigma=sigma) + gaussian_filter(img[:,:,2], output=img[:,:,2], sigma=sigma) + + +def cv2_jpg(img, compress_val): + img_cv2 = img[:,:,::-1] + encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), compress_val] + result, encimg = cv2.imencode('.jpg', img_cv2, encode_param) + decimg = cv2.imdecode(encimg, 1) + return decimg[:,:,::-1] + + +def pil_jpg(img, compress_val): + out = BytesIO() + img = Image.fromarray(img) + img.save(out, format='jpeg', quality=compress_val) + img = Image.open(out) + # load from memory before ByteIO closes + img = np.array(img) + out.close() + return img + + +jpeg_dict = {'cv2': cv2_jpg, 'pil': pil_jpg} +def jpeg_from_key(img, compress_val, key): + method = jpeg_dict[key] + return method(img, compress_val) + + +rz_dict = {'bilinear': InterpolationMode.BILINEAR, + 'bicubic': InterpolationMode.BICUBIC, + 'lanczos': InterpolationMode.LANCZOS, + 'nearest': InterpolationMode.NEAREST} +def custom_resize(img, opt): + interp = sample_discrete(opt.rz_interp) + return TF.resize(img, (opt.loadSize,opt.loadSize), interpolation=rz_dict[interp]) diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/earlystop.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/earlystop.py new file mode 100644 index 0000000000000000000000000000000000000000..3852cb9f5f0dfb046defac071faf1e531e32f0e0 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/earlystop.py @@ -0,0 +1,46 @@ +import numpy as np + + +class EarlyStopping: + """Early stops the training if validation loss doesn't improve after a given patience.""" + + def __init__(self, patience=1, verbose=False, delta=0): + """ + Args: + patience (int): How long to wait after last time validation loss improved. + Default: 7 + verbose (bool): If True, prints a message for each validation loss improvement. + Default: False + delta (float): Minimum change in the monitored quantity to qualify as an improvement. + Default: 0 + """ + self.patience = patience + self.verbose = verbose + self.counter = 0 + self.best_score = None + self.early_stop = False + self.score_max = -np.Inf + self.delta = delta + + def __call__(self, score, model): + if self.best_score is None: + self.best_score = score + self.save_checkpoint(score, model) + elif score < self.best_score - self.delta: + self.counter += 1 + print(f'EarlyStopping counter: {self.counter} out of {self.patience}') + if self.counter >= self.patience: + self.early_stop = True + else: + self.best_score = score + self.save_checkpoint(score, model) + self.counter = 0 + + def save_checkpoint(self, score, model): + """Saves model when validation loss decrease.""" + if self.verbose: + print( + f'Validation accuracy increased ({self.score_max:.6f} --> {score:.6f}). Saving model ...' + ) + model.save_networks('best') + self.score_max = score diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/extract_patches.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/extract_patches.py new file mode 100644 index 0000000000000000000000000000000000000000..e48df1ac0c3fecf786598ed29172719e34bd7258 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/extract_patches.py @@ -0,0 +1,138 @@ +import numpy as np +import torch +import torch.nn +import torch.nn as nn +from data import create_dataloader +from networks.LaDeDa import LaDeDa9 +from options.train_options import TrainOptions + + +def get_val_opt(): + val_opt = TrainOptions().parse(print_options=False) + val_opt.dataroot = '{}/{}'.format(val_opt.dataroot, val_opt.val_split) + val_opt.isTrain = False + val_opt.no_resize = False + val_opt.no_crop = False + val_opt.serial_batches = True + + return val_opt + + +def get_avg_logits(model, x): + x = model.conv1(x) + x = model.conv2(x) + x = model.bn1(x) + x = model.relu(x) + + x = model.layer1(x) + x = model.layer2(x) + x = model.layer3(x) + x = model.layer4(x) + if model.pool: + x = nn.AvgPool2d(x.size()[2], stride=1)(x) + x = x.view(x.size(0), -1) + x = model.fc(x) + else: + x = x.permute(0, 2, 3, 1) + x = model.fc(x) + + return x + + +def get_patches_logits(image, patchsize, teacher, preprocess): + npr_img = model.preprocess(image, preprocess) + teacher_patches = npr_img.permute(0, 2, 3, 1) + teacher_patches = teacher_patches.unfold(1, patchsize, patchsize - 1).unfold( + 2, patchsize, patchsize - 1 + ) + teacher_patches = teacher_patches.contiguous().view((-1, 3, patchsize, patchsize)) + + og_patches = image.permute(0, 2, 3, 1) + og_patches = og_patches.unfold(1, patch_size + 1, patchsize - 1).unfold( + 2, patchsize + 1, patch_size - 1 + ) + og_patches = og_patches.contiguous().view((-1, 3, patchsize + 1, patchsize + 1)) + + # getting the teacher logits + teacher_logits = get_avg_logits(teacher, teacher_patches) + + return og_patches.detach().cpu(), teacher_logits.detach().cpu() + + +def get_model(model_path, features_dim): + model = LaDeDa9(pretrained=False, num_classes=1) + model.fc = nn.Linear(features_dim, 1) + from collections import OrderedDict + from copy import deepcopy + + state_dict = torch.load(model_path, map_location='cpu') + pretrained_dict = OrderedDict() + for ki in state_dict.keys(): + pretrained_dict[ki] = deepcopy(state_dict[ki]) + model.load_state_dict(pretrained_dict, strict=True) + print('LaDeDa has loaded') + model.eval() + model.cuda() + model.to(0) + return model + + +def extract_patches_logits(data_loader, model): + distilled_set = {'real': [], 'fake': []} + for i, data in enumerate(data_loader): + img, label = data + img_input = img.cuda() + patches, logits = get_patches_logits(img_input, patchsize=9, teacer=model) + to_save = {'patches': patches, 'logits': logits, 'label': label.item()} + # saving the real patches + if label.item() == 0: + distilled_set['real'].append(to_save) + + # saving the fake patches + elif label.item() == 1: + distilled_set['fake'].append(to_save) + return distilled_set + + +if __name__ == '__main__': + opt = TrainOptions().parse() + # no flipping the image, as we extract patches logits. + opt.no_flip = True + opt.dataroot = '{}/{}'.format(opt.dataroot, opt.train_split) + data_loader, paths = create_dataloader(opt) + + # getting pre-trained LaDeDa teacher + model_path = 'PATH_TO_TRAINED_LADEDA.pth' + model = get_model(model_path, features_dim=2048) + torch.multiprocessing.set_sharing_strategy('file_system') + distilled_train = {'real': [], 'fake': []} + for i, data in enumerate(data_loader): + img, label = data + img_input = img.cuda() + patches, logits = get_patches_logits( + img_input, patchsize=9, teacer=model, preprocess=opt.preprocess + ) + to_save = {'patches': patches, 'logits': logits, 'label': label.item()} + # saving the real patches + if label.item() == 0: + distilled_train['real'].append(to_save) + + # saving the fake patches + elif label.item() == 1: + distilled_train['fake'].append(to_save) + + # saving the train set + distilled_train = extract_patches_logits(data_loader, model) + print('======================================') + print("saving Tiny-LaDeDa's train set") + print('======================================') + np.savez('./patches_logits_train_set.npz', **distilled_train) + + # saving the validation set + val_opt = get_val_opt() + data_loader, paths = create_dataloader(val_opt) + distilled_val = extract_patches_logits(data_loader, model) + print('======================================') + print("saving Tiny-LaDeDa's validation set") + print('======================================') + np.savez('./patches_logits_val_set.npz', **distilled_val) diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/log_test.log b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/log_test.log new file mode 100644 index 0000000000000000000000000000000000000000..7e4517255a6a7aee84cba4bb8fb1cf2ecb4f2338 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/log_test.log @@ -0,0 +1,290 @@ +2025-04-23 05:47:50,674 Model_path /data/ziqiang/yjz/code/RealTime-DeepfakeDetection-in-the-RealWorld-main/checkpoints/4class-car-cat-chair-horse2025_04_10_11_12_56/model_epoch_best.pth +2025-04-23 05:47:50,674 2025-04-23 05:47:50 +2025-04-23 05:48:33,907 (0 BlendFace ) acc: 28.2; ap: 38.0; r_acc: 56.4; f_acc: 0.0 +2025-04-23 05:49:10,138 (1 BLIP ) acc: 93.4; ap: 96.7; r_acc: 86.9; f_acc: 100.0 +2025-04-23 05:50:07,611 (2 CommunityAI ) acc: 54.8; ap: 55.9; r_acc: 99.6; f_acc: 10.0 +2025-04-23 05:50:49,974 (3 DALLE-3 ) acc: 39.2; ap: 46.3; r_acc: 70.1; f_acc: 8.3 +2025-04-23 05:51:30,928 (4 E4S ) acc: 29.0; ap: 42.4; r_acc: 58.0; f_acc: 0.0 +2025-04-23 05:52:07,702 (5 FaceSwap ) acc: 41.2; ap: 40.2; r_acc: 75.3; f_acc: 6.3 +2025-04-23 05:52:52,795 (6 FLUX1-dev ) acc: 84.2; ap: 88.0; r_acc: 69.7; f_acc: 98.8 +2025-04-23 05:53:29,996 (7 GLIDE ) acc: 86.4; ap: 89.4; r_acc: 75.3; f_acc: 97.5 +2025-04-23 05:54:17,510 (8 Imagen3 ) acc: 81.1; ap: 84.6; r_acc: 70.3; f_acc: 91.9 +2025-04-23 05:55:04,991 (9 Infinite-ID ) acc: 79.0; ap: 67.5; r_acc: 69.3; f_acc: 88.7 +2025-04-23 05:56:07,005 (10 InstantID ) acc: 81.0; ap: 81.8; r_acc: 70.9; f_acc: 91.2 +2025-04-23 05:56:43,779 (11 InSwap ) acc: 38.3; ap: 41.8; r_acc: 75.6; f_acc: 0.0 +2025-04-23 05:58:07,571 (12 IP-Adapter ) acc: 82.3; ap: 82.2; r_acc: 70.0; f_acc: 94.6 +2025-04-23 05:58:47,185 (13 Midjourney ) acc: 67.0; ap: 68.0; r_acc: 41.0; f_acc: 93.0 +2025-04-23 05:59:35,786 (14 PhotoMaker ) acc: 69.3; ap: 66.6; r_acc: 70.4; f_acc: 68.1 +2025-04-23 06:00:07,109 (15 ProGAN ) acc: 100.0; ap: 100.0; r_acc: 100.0; f_acc: 99.9 +2025-04-23 06:01:03,902 (16 R3GAN ) acc: 72.9; ap: 69.2; r_acc: 70.0; f_acc: 75.8 +2025-04-23 06:02:11,904 (17 SD3 ) acc: 83.6; ap: 87.6; r_acc: 68.8; f_acc: 98.4 +2025-04-23 06:05:20,282 (18 SDXL ) acc: 83.1; ap: 88.0; r_acc: 68.8; f_acc: 97.3 +2025-04-23 06:05:57,432 (19 SimSwap ) acc: 37.3; ap: 39.6; r_acc: 74.5; f_acc: 0.1 +2025-04-23 06:10:59,631 (20 SocialRF ) acc: 56.2; ap: 61.7; r_acc: 84.4; f_acc: 28.1 +2025-04-23 06:14:31,447 (21 StyleGAN-XL ) acc: 82.1; ap: 84.2; r_acc: 70.2; f_acc: 94.0 +2025-04-23 06:16:28,826 (22 StyleGAN3 ) acc: 83.7; ap: 86.3; r_acc: 71.9; f_acc: 95.5 +2025-04-23 06:18:35,052 (23 StyleSwim ) acc: 82.6; ap: 86.4; r_acc: 69.6; f_acc: 95.5 +2025-04-23 06:18:48,508 (24 WFIR ) acc: 84.5; ap: 91.3; r_acc: 75.5; f_acc: 93.5 +2025-04-23 06:18:48,508 (25 Mean ) acc: 68.8; ap: 71.3; r_acc: 72.5; f_acc: 65.1 +2025-04-23 06:18:48,520 ************************* +2025-05-12 08:58:19,618 Model_path /data/ziqiang/yjz/code/RealTime-DeepfakeDetection-in-the-RealWorld-main/checkpoints/4class-car-cat-chair-horse2025_04_10_11_12_56/model_epoch_best.pth +2025-05-12 08:58:19,618 2025-05-12 08:58:19 # crop +2025-05-12 08:59:19,638 (0 BlendFace ) acc: 48.9; ap: 43.2; r_acc: 97.7; f_acc: 0.0 +2025-05-12 09:00:18,517 (1 BLIP ) acc: 94.3; ap: 100.0; r_acc: 100.0; f_acc: 88.6 +2025-05-12 09:01:35,180 (2 CommunityAI ) acc: 53.9; ap: 54.4; r_acc: 100.0; f_acc: 7.8 +2025-05-12 09:02:27,169 (3 DALLE-3 ) acc: 49.3; ap: 51.6; r_acc: 98.6; f_acc: 0.0 +2025-05-12 09:03:25,491 (4 E4S ) acc: 49.0; ap: 49.4; r_acc: 98.0; f_acc: 0.0 +2025-05-12 09:04:23,123 (5 FaceSwap ) acc: 50.2; ap: 54.1; r_acc: 99.3; f_acc: 0.0 +2025-05-12 09:05:21,255 (6 FLUX1-dev ) acc: 97.1; ap: 99.8; r_acc: 98.6; f_acc: 95.6 +2025-05-12 09:06:19,607 (7 GLIDE ) acc: 90.5; ap: 99.4; r_acc: 99.2; f_acc: 81.9 +2025-05-12 09:07:18,144 (8 Imagen3 ) acc: 75.8; ap: 97.3; r_acc: 98.6; f_acc: 53.0 +2025-05-12 09:08:16,405 (9 Infinite-ID ) acc: 99.0; ap: 100.0; r_acc: 98.9; f_acc: 99.1 +2025-05-12 09:09:20,807 (10 InstantID ) acc: 99.4; ap: 100.0; r_acc: 98.8; f_acc: 100.0 +2025-05-12 09:10:18,481 (11 InSwap ) acc: 50.2; ap: 47.3; r_acc: 99.4; f_acc: 0.0 +2025-05-12 09:12:02,327 (12 IP-Adapter ) acc: 99.2; ap: 99.9; r_acc: 98.9; f_acc: 99.4 +2025-05-12 09:12:43,508 (13 Midjourney ) acc: 90.2; ap: 97.9; r_acc: 96.7; f_acc: 83.8 +2025-05-12 09:13:41,977 (14 PhotoMaker ) acc: 99.3; ap: 99.9; r_acc: 98.6; f_acc: 100.0 +2025-05-12 09:14:33,315 (15 ProGAN ) acc: 99.8; ap: 100.0; r_acc: 100.0; f_acc: 99.7 +2025-05-12 09:15:40,172 (16 R3GAN ) acc: 57.7; ap: 93.3; r_acc: 98.8; f_acc: 16.6 +2025-05-12 09:16:38,564 (17 SD3 ) acc: 86.3; ap: 99.0; r_acc: 99.2; f_acc: 73.4 +2025-05-12 09:17:37,387 (18 SDXL ) acc: 99.5; ap: 100.0; r_acc: 99.2; f_acc: 99.8 +2025-05-12 09:18:36,060 (19 SimSwap ) acc: 49.6; ap: 45.5; r_acc: 99.3; f_acc: 0.0 +2025-05-12 09:24:51,118 (20 SocialRF ) acc: 56.9; ap: 65.0; r_acc: 99.7; f_acc: 14.1 +2025-05-12 09:27:09,973 (21 StyleGAN-XL ) acc: 98.9; ap: 99.9; r_acc: 98.8; f_acc: 99.0 +2025-05-12 09:28:08,526 (22 StyleGAN3 ) acc: 94.0; ap: 99.5; r_acc: 98.5; f_acc: 89.5 +2025-05-12 09:30:07,320 (23 StyleSwim ) acc: 99.4; ap: 100.0; r_acc: 98.9; f_acc: 100.0 +2025-05-12 09:30:22,371 (24 WFIR ) acc: 50.0; ap: 66.1; r_acc: 100.0; f_acc: 0.0 +2025-05-12 09:30:22,371 (25 Mean ) acc: 77.5; ap: 82.5; r_acc: 98.9; f_acc: 56.1 +2025-05-12 09:30:22,371 ************************* +2025-05-14 11:19:38,504 Model_path /data/ziqiang/yjz/code/RealTime-DeepfakeDetection-in-the-RealWorld-main/checkpoints/4class-car-cat-chair-horse2025_04_10_11_12_56/model_epoch_best.pth +2025-05-14 11:19:38,504 2025-05-14 11:19:38 +2025-05-14 11:20:20,203 (0 BlendFace ) acc: 49.9; ap: 36.8; r_acc: 100.0; f_acc: 0.0 +2025-05-14 11:21:05,763 (1 BLIP ) acc: 50.0; ap: 89.2; r_acc: 100.0; f_acc: 0.1 +2025-05-14 11:22:44,570 (2 CommunityAI ) acc: 50.0; ap: 45.5; r_acc: 100.0; f_acc: 0.0 +2025-05-14 11:23:23,218 (3 DALLE-3 ) acc: 50.3; ap: 79.0; r_acc: 99.9; f_acc: 0.7 +2025-05-14 11:24:01,730 (4 E4S ) acc: 50.0; ap: 36.5; r_acc: 100.0; f_acc: 0.0 +2025-05-14 11:24:39,098 (5 FaceSwap ) acc: 50.6; ap: 38.8; r_acc: 100.0; f_acc: 0.0 +2025-05-14 11:25:19,063 (6 FLUX1-dev ) acc: 50.2; ap: 78.3; r_acc: 100.0; f_acc: 0.4 +2025-05-14 11:25:57,361 (7 GLIDE ) acc: 50.0; ap: 55.5; r_acc: 100.0; f_acc: 0.0 +2025-05-14 11:26:38,424 (8 Imagen3 ) acc: 50.3; ap: 73.0; r_acc: 100.0; f_acc: 0.7 +2025-05-14 11:27:17,781 (9 Infinite-ID ) acc: 49.9; ap: 87.2; r_acc: 100.0; f_acc: 0.1 +2025-05-14 11:28:01,947 (10 InstantID ) acc: 50.0; ap: 48.2; r_acc: 100.0; f_acc: 0.0 +2025-05-14 11:28:39,223 (11 InSwap ) acc: 50.6; ap: 39.2; r_acc: 100.0; f_acc: 0.0 +2025-05-14 11:29:16,778 (12 IP-Adapter ) acc: 50.0; ap: 80.5; r_acc: 100.0; f_acc: 0.1 +2025-05-14 11:29:43,477 (13 Midjourney ) acc: 50.0; ap: 59.1; r_acc: 99.9; f_acc: 0.1 +2025-05-14 11:30:24,940 (14 PhotoMaker ) acc: 50.0; ap: 70.6; r_acc: 100.0; f_acc: 0.0 +2025-05-14 11:30:57,327 (15 ProGAN ) acc: 50.0; ap: 49.8; r_acc: 100.0; f_acc: 0.0 +2025-05-14 11:31:35,193 (16 R3GAN ) acc: 50.0; ap: 37.0; r_acc: 100.0; f_acc: 0.0 +2025-05-14 11:32:18,608 (17 SD3 ) acc: 49.9; ap: 74.0; r_acc: 99.9; f_acc: 0.2 +2025-05-14 11:32:58,468 (18 SDXL ) acc: 49.9; ap: 68.1; r_acc: 99.9; f_acc: 0.1 +2025-05-14 11:33:36,292 (19 SimSwap ) acc: 50.0; ap: 38.2; r_acc: 100.0; f_acc: 0.0 +2025-05-14 11:34:46,708 (20 SocialRF ) acc: 49.7; ap: 56.0; r_acc: 99.1; f_acc: 0.3 +2025-05-14 11:35:24,754 (21 StyleGAN-XL ) acc: 50.0; ap: 73.1; r_acc: 100.0; f_acc: 0.0 +2025-05-14 11:36:01,547 (22 StyleGAN3 ) acc: 50.1; ap: 82.9; r_acc: 100.0; f_acc: 0.2 +2025-05-14 11:36:40,753 (23 StyleSwim ) acc: 50.0; ap: 76.1; r_acc: 100.0; f_acc: 0.0 +2025-05-14 11:36:50,618 (24 WFIR ) acc: 49.9; ap: 49.9; r_acc: 99.8; f_acc: 0.0 +2025-05-14 11:36:50,618 (25 Mean ) acc: 50.1; ap: 60.9; r_acc: 99.9; f_acc: 0.1 +2025-05-14 11:36:50,618 ************************* +2025-05-14 12:23:06,717 Model_path /data/ziqiang/yjz/code/RealTime-DeepfakeDetection-in-the-RealWorld-main/checkpoints/4class-car-cat-chair-horse2025_04_10_11_12_56/model_epoch_best.pth +2025-05-14 12:23:06,717 2025-05-14 12:23:06 +2025-05-14 12:25:17,791 (0 BlendFace ) acc: 41.3; ap: 56.5; r_acc: 82.5; f_acc: 0.1 +2025-05-14 12:26:52,113 (1 BLIP ) acc: 77.9; ap: 98.9; r_acc: 99.6; f_acc: 56.2 +2025-05-14 12:30:31,001 (2 CommunityAI ) acc: 63.5; ap: 95.6; r_acc: 99.5; f_acc: 27.5 +2025-05-14 12:34:06,456 (3 DALLE-3 ) acc: 55.4; ap: 70.7; r_acc: 89.9; f_acc: 20.9 +2025-05-14 12:36:05,697 (4 E4S ) acc: 42.4; ap: 61.0; r_acc: 84.7; f_acc: 0.1 +2025-05-14 12:37:23,676 (5 FaceSwap ) acc: 47.4; ap: 76.2; r_acc: 93.8; f_acc: 0.0 +2025-05-14 12:41:09,400 (6 FLUX1-dev ) acc: 58.5; ap: 72.4; r_acc: 90.1; f_acc: 26.9 +2025-05-14 12:42:44,165 (7 GLIDE ) acc: 46.5; ap: 76.2; r_acc: 93.1; f_acc: 0.0 +2025-05-14 12:48:21,677 (8 Imagen3 ) acc: 65.9; ap: 80.3; r_acc: 90.9; f_acc: 40.8 +2025-05-14 12:51:57,028 (9 Infinite-ID ) acc: 72.1; ap: 82.1; r_acc: 91.0; f_acc: 53.2 +2025-05-14 12:58:20,516 (10 InstantID ) acc: 78.4; ap: 90.0; r_acc: 90.6; f_acc: 66.2 +2025-05-14 12:59:54,194 (11 InSwap ) acc: 47.2; ap: 76.0; r_acc: 93.4; f_acc: 0.0 +2025-05-14 13:03:54,495 (12 IP-Adapter ) acc: 62.3; ap: 75.8; r_acc: 90.4; f_acc: 34.1 +2025-05-14 13:09:27,452 (13 Midjourney ) acc: 63.0; ap: 69.7; r_acc: 73.0; f_acc: 53.0 +2025-05-14 13:15:18,943 (14 PhotoMaker ) acc: 66.1; ap: 81.6; r_acc: 90.6; f_acc: 41.7 +2025-05-14 13:18:24,231 (15 ProGAN ) acc: 49.8; ap: 47.4; r_acc: 99.3; f_acc: 0.2 +2025-05-14 13:21:13,497 (16 R3GAN ) acc: 45.5; ap: 71.4; r_acc: 90.9; f_acc: 0.0 +2025-05-14 13:29:23,745 (17 SD3 ) acc: 73.9; ap: 88.4; r_acc: 92.4; f_acc: 55.4 +2025-05-14 13:39:36,981 (18 SDXL ) acc: 67.7; ap: 84.7; r_acc: 92.6; f_acc: 42.8 +2025-05-14 13:42:40,327 (19 SimSwap ) acc: 46.9; ap: 75.6; r_acc: 93.7; f_acc: 0.0 +2025-05-14 13:45:00,857 (20 SocialRF ) acc: 40.1; ap: 42.2; r_acc: 45.3; f_acc: 35.0 +2025-05-14 13:52:03,882 (21 StyleGAN-XL ) acc: 58.6; ap: 73.9; r_acc: 90.4; f_acc: 26.8 +2025-05-14 13:55:56,349 (22 StyleGAN3 ) acc: 60.7; ap: 64.5; r_acc: 68.6; f_acc: 52.7 +2025-05-14 14:03:15,939 (23 StyleSwim ) acc: 60.5; ap: 75.0; r_acc: 90.3; f_acc: 30.6 +2025-05-14 14:03:31,231 (24 WFIR ) acc: 50.2; ap: 59.1; r_acc: 99.5; f_acc: 1.0 +2025-05-14 14:03:31,231 (25 Mean ) acc: 57.7; ap: 73.8; r_acc: 88.6; f_acc: 26.6 +2025-05-14 14:03:31,231 ************************* +2025-05-14 14:29:21,254 Model_path /data/ziqiang/yjz/code/RealTime-DeepfakeDetection-in-the-RealWorld-main/checkpoints/4class-car-cat-chair-horse2025_04_10_11_12_56/model_epoch_best.pth +2025-05-14 14:29:21,254 2025-05-14 14:29:21 +2025-05-14 14:31:57,410 (0 BlendFace ) acc: 30.7; ap: 71.2; r_acc: 61.5; f_acc: 0.0 +2025-05-14 14:33:57,052 (1 BLIP ) acc: 99.2; ap: 100.0; r_acc: 99.4; f_acc: 99.0 +2025-05-14 14:36:01,354 (2 CommunityAI ) acc: 54.7; ap: 55.4; r_acc: 99.6; f_acc: 9.8 +2025-05-14 14:38:50,188 (3 DALLE-3 ) acc: 44.5; ap: 54.7; r_acc: 78.5; f_acc: 10.5 +2025-05-14 14:41:30,907 (4 E4S ) acc: 32.7; ap: 73.2; r_acc: 65.4; f_acc: 0.0 +2025-05-14 14:42:55,219 (5 FaceSwap ) acc: 43.5; ap: 86.8; r_acc: 86.1; f_acc: 0.0 +2025-05-14 14:45:29,104 (6 FLUX1-dev ) acc: 88.6; ap: 89.9; r_acc: 78.2; f_acc: 99.0 +2025-05-14 14:47:22,878 (7 GLIDE ) acc: 42.9; ap: 87.1; r_acc: 85.8; f_acc: 0.0 +2025-05-14 14:53:37,710 (8 Imagen3 ) acc: 85.5; ap: 86.5; r_acc: 79.2; f_acc: 91.7 +2025-05-14 14:59:56,119 (9 Infinite-ID ) acc: 85.1; ap: 75.2; r_acc: 80.9; f_acc: 89.4 +2025-05-14 15:05:56,114 (10 InstantID ) acc: 85.0; ap: 84.4; r_acc: 79.4; f_acc: 90.5 +2025-05-14 15:08:41,834 (11 InSwap ) acc: 43.8; ap: 87.3; r_acc: 86.5; f_acc: 0.0 +2025-05-14 15:09:58,055 (12 IP-Adapter ) acc: 86.7; ap: 85.2; r_acc: 79.0; f_acc: 94.5 +2025-05-14 15:14:14,114 (13 Midjourney ) acc: 65.9; ap: 66.7; r_acc: 40.3; f_acc: 91.4 +2025-05-14 15:14:50,356 (14 PhotoMaker ) acc: 75.7; ap: 73.7; r_acc: 79.0; f_acc: 72.3 +2025-05-14 15:15:28,147 (15 ProGAN ) acc: 50.0; ap: 50.0; r_acc: 100.0; f_acc: 0.0 +2025-05-14 15:16:08,425 (16 R3GAN ) acc: 39.6; ap: 82.0; r_acc: 79.1; f_acc: 0.0 +2025-05-14 15:19:46,774 (17 SD3 ) acc: 91.0; ap: 91.1; r_acc: 83.6; f_acc: 98.4 +2025-05-14 15:23:05,304 (18 SDXL ) acc: 90.6; ap: 91.4; r_acc: 83.6; f_acc: 97.6 +2025-05-14 15:24:37,385 (19 SimSwap ) acc: 42.9; ap: 86.9; r_acc: 85.8; f_acc: 0.0 +2025-05-14 15:26:19,381 (20 SocialRF ) acc: 56.2; ap: 60.8; r_acc: 85.6; f_acc: 26.7 +2025-05-14 15:27:47,529 (21 StyleGAN-XL ) acc: 86.9; ap: 86.9; r_acc: 79.1; f_acc: 94.8 +2025-05-14 15:30:54,392 (22 StyleGAN3 ) acc: 84.7; ap: 86.3; r_acc: 73.7; f_acc: 95.6 +2025-05-14 15:36:20,119 (23 StyleSwim ) acc: 86.8; ap: 88.3; r_acc: 78.0; f_acc: 95.5 +2025-05-14 15:36:41,019 (24 WFIR ) acc: 51.6; ap: 69.9; r_acc: 99.8; f_acc: 3.5 +2025-05-14 15:36:41,020 (25 Mean ) acc: 65.8; ap: 78.8; r_acc: 81.1; f_acc: 50.4 +2025-05-14 15:36:41,020 ************************* +2025-04-23 06:49:52,534 Model_path /data/ziqiang/yjz/code/RealTime-DeepfakeDetection-in-the-RealWorld-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_13_11_24_49/model_epoch_best.pth +2025-04-23 06:49:52,534 2025-04-23 06:49:52 +2025-04-23 06:50:40,001 (0 BlendFace ) acc: 42.4; ap: 42.1; r_acc: 84.8; f_acc: 0.0 +2025-04-23 06:51:19,767 (1 BLIP ) acc: 99.0; ap: 99.9; r_acc: 98.1; f_acc: 100.0 +2025-04-23 06:52:33,285 (2 CommunityAI ) acc: 54.5; ap: 56.3; r_acc: 100.0; f_acc: 9.0 +2025-04-23 06:53:38,216 (3 DALLE-3 ) acc: 50.1; ap: 59.8; r_acc: 90.5; f_acc: 9.7 +2025-04-23 06:54:45,138 (4 E4S ) acc: 42.9; ap: 49.3; r_acc: 85.9; f_acc: 0.0 +2025-04-23 06:55:23,033 (5 FaceSwap ) acc: 47.1; ap: 40.9; r_acc: 93.2; f_acc: 0.0 +2025-04-23 06:57:26,269 (6 FLUX1-dev ) acc: 94.6; ap: 98.7; r_acc: 90.0; f_acc: 99.3 +2025-04-23 06:58:13,028 (7 GLIDE ) acc: 87.1; ap: 95.0; r_acc: 92.4; f_acc: 81.8 +2025-04-23 07:00:46,679 (8 Imagen3 ) acc: 91.6; ap: 97.2; r_acc: 90.5; f_acc: 92.6 +2025-04-23 07:02:01,061 (9 Infinite-ID ) acc: 61.5; ap: 76.9; r_acc: 90.8; f_acc: 32.2 +2025-04-23 07:03:19,095 (10 InstantID ) acc: 86.5; ap: 90.4; r_acc: 90.7; f_acc: 82.4 +2025-04-23 07:04:36,437 (11 InSwap ) acc: 47.0; ap: 47.4; r_acc: 93.0; f_acc: 0.0 +2025-04-23 07:06:09,042 (12 IP-Adapter ) acc: 90.8; ap: 94.3; r_acc: 91.0; f_acc: 90.6 +2025-04-23 07:07:31,631 (13 Midjourney ) acc: 80.3; ap: 86.9; r_acc: 77.2; f_acc: 83.4 +2025-04-23 07:09:17,684 (14 PhotoMaker ) acc: 78.4; ap: 90.7; r_acc: 90.2; f_acc: 66.7 +2025-04-23 07:10:24,137 (15 ProGAN ) acc: 99.8; ap: 100.0; r_acc: 100.0; f_acc: 99.7 +2025-04-23 07:11:46,798 (16 R3GAN ) acc: 54.8; ap: 72.6; r_acc: 90.2; f_acc: 19.5 +2025-04-23 07:13:49,920 (17 SD3 ) acc: 95.1; ap: 98.7; r_acc: 91.1; f_acc: 99.0 +2025-04-23 07:15:46,276 (18 SDXL ) acc: 94.7; ap: 98.5; r_acc: 91.1; f_acc: 98.3 +2025-04-23 07:17:01,538 (19 SimSwap ) acc: 46.3; ap: 42.3; r_acc: 92.6; f_acc: 0.0 +2025-04-23 07:19:49,046 (20 SocialRF ) acc: 58.6; ap: 68.3; r_acc: 97.8; f_acc: 19.4 +2025-04-23 07:22:16,100 (21 StyleGAN-XL ) acc: 85.5; ap: 93.1; r_acc: 90.5; f_acc: 80.5 +2025-04-23 07:23:16,685 (22 StyleGAN3 ) acc: 92.4; ap: 96.9; r_acc: 91.6; f_acc: 93.2 +2025-04-23 07:25:22,879 (23 StyleSwim ) acc: 94.0; ap: 98.5; r_acc: 90.8; f_acc: 97.3 +2025-04-23 07:25:36,423 (24 WFIR ) acc: 58.5; ap: 86.9; r_acc: 97.8; f_acc: 19.2 +2025-04-23 07:25:36,424 (25 Mean ) acc: 73.4; ap: 79.3; r_acc: 91.7; f_acc: 54.9 +2025-04-23 07:25:36,424 ************************* +2025-05-09 01:45:24,706 Model_path /data/ziqiang/yjz/code/RealTime-DeepfakeDetection-in-the-RealWorld-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_13_11_24_49/model_epoch_best.pth +2025-05-09 01:45:24,711 2025-05-09 01:45:24 # crop +2025-05-09 01:46:22,146 (0 BlendFace ) acc: 48.9; ap: 43.2; r_acc: 97.7; f_acc: 0.0 +2025-05-09 01:47:18,035 (1 BLIP ) acc: 94.3; ap: 100.0; r_acc: 100.0; f_acc: 88.6 +2025-05-09 01:48:31,583 (2 CommunityAI ) acc: 53.9; ap: 54.4; r_acc: 100.0; f_acc: 7.8 +2025-05-09 01:49:18,893 (3 DALLE-3 ) acc: 49.3; ap: 51.6; r_acc: 98.6; f_acc: 0.0 +2025-05-09 01:50:10,950 (4 E4S ) acc: 49.0; ap: 49.4; r_acc: 98.0; f_acc: 0.0 +2025-05-09 01:51:06,167 (5 FaceSwap ) acc: 50.2; ap: 54.1; r_acc: 99.3; f_acc: 0.0 +2025-05-09 01:52:02,251 (6 FLUX1-dev ) acc: 97.1; ap: 99.8; r_acc: 98.6; f_acc: 95.6 +2025-05-09 01:52:58,202 (7 GLIDE ) acc: 90.5; ap: 99.4; r_acc: 99.2; f_acc: 81.9 +2025-05-09 01:53:54,154 (8 Imagen3 ) acc: 75.8; ap: 97.3; r_acc: 98.6; f_acc: 53.0 +2025-05-09 01:54:50,284 (9 Infinite-ID ) acc: 99.0; ap: 100.0; r_acc: 98.9; f_acc: 99.1 +2025-05-09 01:55:53,735 (10 InstantID ) acc: 99.4; ap: 100.0; r_acc: 98.8; f_acc: 100.0 +2025-05-09 01:56:49,198 (11 InSwap ) acc: 50.2; ap: 47.3; r_acc: 99.4; f_acc: 0.0 +2025-05-09 01:57:45,751 (12 IP-Adapter ) acc: 99.2; ap: 99.9; r_acc: 98.9; f_acc: 99.4 +2025-05-09 01:58:25,472 (13 Midjourney ) acc: 90.2; ap: 97.9; r_acc: 96.7; f_acc: 83.8 +2025-05-09 01:59:21,669 (14 PhotoMaker ) acc: 99.3; ap: 99.9; r_acc: 98.6; f_acc: 100.0 +2025-05-09 02:00:10,810 (15 ProGAN ) acc: 99.8; ap: 100.0; r_acc: 100.0; f_acc: 99.7 +2025-05-09 02:01:06,724 (16 R3GAN ) acc: 57.7; ap: 93.3; r_acc: 98.8; f_acc: 16.6 +2025-05-09 02:02:02,872 (17 SD3 ) acc: 86.3; ap: 99.0; r_acc: 99.2; f_acc: 73.4 +2025-05-09 02:02:58,996 (18 SDXL ) acc: 99.5; ap: 100.0; r_acc: 99.2; f_acc: 99.8 +2025-05-09 02:03:55,075 (19 SimSwap ) acc: 49.6; ap: 45.5; r_acc: 99.3; f_acc: 0.0 +2025-05-09 02:05:44,875 (20 SocialRF ) acc: 56.9; ap: 65.0; r_acc: 99.7; f_acc: 14.1 +2025-05-09 02:06:40,809 (21 StyleGAN-XL ) acc: 98.9; ap: 99.9; r_acc: 98.8; f_acc: 99.0 +2025-05-09 02:07:36,762 (22 StyleGAN3 ) acc: 94.0; ap: 99.5; r_acc: 98.5; f_acc: 89.5 +2025-05-09 02:08:32,802 (23 StyleSwim ) acc: 99.4; ap: 100.0; r_acc: 98.9; f_acc: 100.0 +2025-05-09 02:08:47,177 (24 WFIR ) acc: 50.0; ap: 66.1; r_acc: 100.0; f_acc: 0.0 +2025-05-09 02:08:47,178 (25 Mean ) acc: 77.5; ap: 82.5; r_acc: 98.9; f_acc: 56.1 +2025-05-09 02:08:47,178 ************************* +2025-04-28 09:07:25,706 Model_path /data/ziqiang/yjz/code/RealTime-DeepfakeDetection-in-the-RealWorld-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_13_11_24_49/model_epoch_best.pth +2025-04-28 09:07:25,707 2025-04-28 09:07:25 +2025-04-28 09:08:02,509 (0 BlendFace ) acc: 49.9; ap: 47.0; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:08:38,627 (1 BLIP ) acc: 50.0; ap: 63.5; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:09:27,673 (2 CommunityAI ) acc: 50.0; ap: 46.4; r_acc: 99.9; f_acc: 0.0 +2025-04-28 09:10:00,164 (3 DALLE-3 ) acc: 50.1; ap: 86.3; r_acc: 100.0; f_acc: 0.2 +2025-04-28 09:11:17,221 (4 E4S ) acc: 50.0; ap: 49.3; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:14:09,807 (5 FaceSwap ) acc: 50.6; ap: 48.9; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:14:58,868 (6 FLUX1-dev ) acc: 50.0; ap: 88.2; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:16:41,504 (7 GLIDE ) acc: 50.0; ap: 52.2; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:19:53,539 (8 Imagen3 ) acc: 50.0; ap: 71.4; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:23:03,186 (9 Infinite-ID ) acc: 49.9; ap: 92.8; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:25:14,011 (10 InstantID ) acc: 50.0; ap: 48.2; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:25:49,634 (11 InSwap ) acc: 50.6; ap: 48.6; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:26:25,846 (12 IP-Adapter ) acc: 50.0; ap: 85.6; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:26:50,658 (13 Midjourney ) acc: 50.0; ap: 71.4; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:28:33,291 (14 PhotoMaker ) acc: 50.0; ap: 58.9; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:29:13,929 (15 ProGAN ) acc: 50.0; ap: 48.6; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:29:54,657 (16 R3GAN ) acc: 50.0; ap: 46.7; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:32:00,490 (17 SD3 ) acc: 49.9; ap: 82.8; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:33:38,022 (18 SDXL ) acc: 49.9; ap: 62.1; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:34:39,691 (19 SimSwap ) acc: 50.0; ap: 47.4; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:36:26,919 (20 SocialRF ) acc: 50.0; ap: 56.5; r_acc: 99.9; f_acc: 0.1 +2025-04-28 09:37:30,906 (21 StyleGAN-XL ) acc: 50.0; ap: 62.6; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:38:22,448 (22 StyleGAN3 ) acc: 50.0; ap: 55.9; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:39:29,614 (23 StyleSwim ) acc: 50.0; ap: 70.9; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:40:03,643 (24 WFIR ) acc: 50.0; ap: 48.3; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:40:03,643 (25 Mean ) acc: 50.0; ap: 61.6; r_acc: 100.0; f_acc: 0.0 +2025-04-28 09:40:03,643 ************************* +2025-04-30 01:43:58,970 Model_path /data/ziqiang/yjz/code/RealTime-DeepfakeDetection-in-the-RealWorld-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_13_11_24_49/model_epoch_best.pth +2025-04-30 01:43:58,970 2025-04-30 01:43:58 +2025-04-30 01:47:31,279 (0 BlendFace ) acc: 49.8; ap: 39.3; r_acc: 99.6; f_acc: 0.0 +2025-04-30 01:50:33,686 (1 BLIP ) acc: 50.2; ap: 99.6; r_acc: 100.0; f_acc: 0.4 +2025-04-30 01:57:09,687 (2 CommunityAI ) acc: 51.2; ap: 98.2; r_acc: 100.0; f_acc: 2.4 +2025-04-30 02:02:37,426 (3 DALLE-3 ) acc: 51.0; ap: 72.4; r_acc: 99.8; f_acc: 2.2 +2025-04-30 02:05:43,409 (4 E4S ) acc: 49.9; ap: 41.6; r_acc: 99.9; f_acc: 0.0 +2025-04-30 02:07:36,774 (5 FaceSwap ) acc: 50.5; ap: 57.2; r_acc: 99.9; f_acc: 0.0 +2025-04-30 02:12:50,538 (6 FLUX1-dev ) acc: 50.8; ap: 76.5; r_acc: 99.8; f_acc: 1.7 +2025-04-30 02:14:39,656 (7 GLIDE ) acc: 50.0; ap: 57.8; r_acc: 100.0; f_acc: 0.0 +2025-04-30 02:21:17,208 (8 Imagen3 ) acc: 52.2; ap: 81.3; r_acc: 99.9; f_acc: 4.5 +2025-04-30 02:27:44,077 (9 Infinite-ID ) acc: 50.1; ap: 64.3; r_acc: 99.9; f_acc: 0.3 +2025-04-30 02:35:48,890 (10 InstantID ) acc: 53.6; ap: 87.4; r_acc: 99.8; f_acc: 7.4 +2025-04-30 02:38:05,344 (11 InSwap ) acc: 50.5; ap: 57.7; r_acc: 99.8; f_acc: 0.0 +2025-04-30 02:44:00,020 (12 IP-Adapter ) acc: 51.8; ap: 84.5; r_acc: 99.8; f_acc: 3.8 +2025-04-30 02:50:23,068 (13 Midjourney ) acc: 51.6; ap: 56.1; r_acc: 99.5; f_acc: 3.6 +2025-04-30 03:00:40,345 (14 PhotoMaker ) acc: 51.1; ap: 82.5; r_acc: 99.7; f_acc: 2.4 +2025-04-30 03:04:14,748 (15 ProGAN ) acc: 50.0; ap: 46.6; r_acc: 100.0; f_acc: 0.0 +2025-04-30 03:04:51,610 (16 R3GAN ) acc: 49.9; ap: 50.4; r_acc: 99.8; f_acc: 0.0 +2025-04-30 03:14:12,377 (17 SD3 ) acc: 53.9; ap: 89.0; r_acc: 99.8; f_acc: 8.0 +2025-04-30 03:25:16,525 (18 SDXL ) acc: 50.0; ap: 72.4; r_acc: 99.7; f_acc: 0.4 +2025-04-30 03:28:55,103 (19 SimSwap ) acc: 49.9; ap: 57.4; r_acc: 99.8; f_acc: 0.0 +2025-04-30 03:31:04,790 (20 SocialRF ) acc: 44.3; ap: 42.4; r_acc: 73.4; f_acc: 15.2 +2025-04-30 03:31:47,772 (21 StyleGAN-XL ) acc: 50.0; ap: 74.8; r_acc: 99.7; f_acc: 0.2 +2025-04-30 03:41:01,995 (22 StyleGAN3 ) acc: 52.4; ap: 74.7; r_acc: 99.7; f_acc: 5.2 +2025-04-30 03:51:44,715 (23 StyleSwim ) acc: 53.1; ap: 89.5; r_acc: 99.6; f_acc: 6.5 +2025-04-30 03:52:33,112 (24 WFIR ) acc: 50.0; ap: 58.2; r_acc: 100.0; f_acc: 0.0 +2025-04-30 03:52:33,112 (25 Mean ) acc: 50.7; ap: 68.5; r_acc: 98.8; f_acc: 2.6 +2025-04-30 03:52:33,113 ************************* +2025-04-28 13:01:08,846 Model_path /data/ziqiang/yjz/code/RealTime-DeepfakeDetection-in-the-RealWorld-main/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_13_11_24_49/model_epoch_best.pth +2025-04-28 13:01:08,846 2025-04-28 13:01:08 +2025-04-28 13:01:45,933 (0 BlendFace ) acc: 42.2; ap: 72.9; r_acc: 84.4; f_acc: 0.0 +2025-04-28 13:02:22,172 (1 BLIP ) acc: 99.5; ap: 100.0; r_acc: 100.0; f_acc: 99.1 +2025-04-28 13:03:09,688 (2 CommunityAI ) acc: 54.4; ap: 56.3; r_acc: 100.0; f_acc: 8.9 +2025-04-28 13:03:42,011 (3 DALLE-3 ) acc: 52.5; ap: 67.8; r_acc: 90.8; f_acc: 14.3 +2025-04-28 13:04:18,347 (4 E4S ) acc: 43.1; ap: 75.4; r_acc: 86.1; f_acc: 0.0 +2025-04-28 13:04:54,105 (5 FaceSwap ) acc: 47.6; ap: 88.1; r_acc: 94.1; f_acc: 0.0 +2025-04-28 13:05:30,331 (6 FLUX1-dev ) acc: 95.0; ap: 99.0; r_acc: 90.7; f_acc: 99.3 +2025-04-28 13:06:06,570 (7 GLIDE ) acc: 47.1; ap: 88.4; r_acc: 94.1; f_acc: 0.0 +2025-04-28 13:06:42,852 (8 Imagen3 ) acc: 86.8; ap: 94.8; r_acc: 90.6; f_acc: 83.0 +2025-04-28 13:07:19,379 (9 Infinite-ID ) acc: 65.4; ap: 82.1; r_acc: 92.1; f_acc: 38.8 +2025-04-28 13:08:03,732 (10 InstantID ) acc: 87.8; ap: 91.9; r_acc: 90.9; f_acc: 84.7 +2025-04-28 13:08:39,460 (11 InSwap ) acc: 47.6; ap: 88.5; r_acc: 94.1; f_acc: 0.0 +2025-04-28 13:09:15,714 (12 IP-Adapter ) acc: 91.9; ap: 95.3; r_acc: 91.7; f_acc: 92.1 +2025-04-28 13:09:41,621 (13 Midjourney ) acc: 78.8; ap: 86.2; r_acc: 74.7; f_acc: 83.0 +2025-04-28 13:10:46,759 (14 PhotoMaker ) acc: 83.6; ap: 93.3; r_acc: 90.7; f_acc: 76.5 +2025-04-28 13:11:17,863 (15 ProGAN ) acc: 50.0; ap: 50.0; r_acc: 100.0; f_acc: 0.0 +2025-04-28 13:11:53,968 (16 R3GAN ) acc: 45.5; ap: 83.3; r_acc: 91.1; f_acc: 0.0 +2025-04-28 13:14:13,854 (17 SD3 ) acc: 95.9; ap: 98.9; r_acc: 93.1; f_acc: 98.6 +2025-04-28 13:17:09,778 (18 SDXL ) acc: 96.0; ap: 99.0; r_acc: 93.1; f_acc: 98.8 +2025-04-28 13:18:24,687 (19 SimSwap ) acc: 46.9; ap: 88.2; r_acc: 93.8; f_acc: 0.0 +2025-04-28 13:24:36,175 (20 SocialRF ) acc: 58.3; ap: 68.1; r_acc: 98.0; f_acc: 18.5 +2025-04-28 13:26:53,733 (21 StyleGAN-XL ) acc: 87.6; ap: 94.2; r_acc: 91.0; f_acc: 84.2 +2025-04-28 13:28:15,888 (22 StyleGAN3 ) acc: 89.2; ap: 96.0; r_acc: 90.0; f_acc: 88.3 +2025-04-28 13:31:39,952 (23 StyleSwim ) acc: 94.1; ap: 98.7; r_acc: 90.7; f_acc: 97.4 +2025-04-28 13:31:57,270 (24 WFIR ) acc: 50.0; ap: 57.1; r_acc: 100.0; f_acc: 0.0 +2025-04-28 13:31:57,270 (25 Mean ) acc: 69.5; ap: 84.5; r_acc: 92.2; f_acc: 46.6 +2025-04-28 13:31:57,270 ************************* diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/LaDeDa.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/LaDeDa.py new file mode 100644 index 0000000000000000000000000000000000000000..6fca458fb9610167a36b230736d8bf9e2ad9ac2e --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/LaDeDa.py @@ -0,0 +1,173 @@ +import torch.nn as nn +import math +import torch +from collections import OrderedDict +from torch.nn import functional as F +import os + +dir_path = os.path.dirname(os.path.realpath(__file__)) + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None, kernel_size=1): + super(Bottleneck, self).__init__() + # print('Creating bottleneck with kernel size {} and stride {} with padding {}'.format(kernel_size, stride, (kernel_size - 1) // 2)) + self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) + self.bn1 = nn.BatchNorm2d(planes) + self.conv2 = nn.Conv2d(planes, planes, kernel_size=kernel_size, stride=stride, + padding=0, bias=False) # changed padding from (kernel_size - 1) // 2 + self.bn2 = nn.BatchNorm2d(planes) + self.conv3 = nn.Conv2d(planes, planes * 4, kernel_size=1, bias=False) + self.bn3 = nn.BatchNorm2d(planes * 4) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x, **kwargs): + residual = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + residual = self.downsample(x) + + if residual.size(-1) != out.size(-1): + diff = residual.size(-1) - out.size(-1) + residual = residual[:, :, :-diff, :-diff] + + out += residual + out = self.relu(out) + + return out + + +class LaDeDa(nn.Module): + + def __init__(self, block, layers, strides=[1, 2, 2, 2], kernel3=[0, 0, 0, 0], preprocess_type="NPR", num_classes=1, pool=True): + self.inplanes = 64 + super(LaDeDa, self).__init__() + self.conv1 = nn.Conv2d(3, 64, kernel_size=1, stride=1, padding=0, bias=False) + self.conv2 = nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=0, + bias=False) + self.bn1 = nn.BatchNorm2d(64, momentum=0.001) + self.relu = nn.ReLU(inplace=True) + self.layer1 = self._make_layer(block, 64, layers[0], stride=strides[0], kernel3=kernel3[0], prefix='layer1') + self.layer2 = self._make_layer(block, 128, layers[1], stride=strides[1], kernel3=kernel3[1], prefix='layer2') + self.layer3 = self._make_layer(block, 256, layers[2], stride=strides[2], kernel3=kernel3[2], prefix='layer3') + self.layer4 = self._make_layer(block, 512, layers[3], stride=strides[3], kernel3=kernel3[3], prefix='layer4') + self.avgpool = nn.AvgPool2d(1, stride=1) + self.fc = nn.Linear(512 * block.expansion, num_classes) + self.pool = pool + self.block = block + self.preprocess_type = preprocess_type + for m in self.modules(): + if isinstance(m, nn.Conv2d): + n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels + m.weight.data.normal_(0, math.sqrt(2. / n)) + elif isinstance(m, nn.BatchNorm2d): + m.weight.data.fill_(1) + m.bias.data.zero_() + + def _make_layer(self, block, planes, blocks, stride=1, kernel3=0, prefix=''): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + nn.Conv2d(self.inplanes, planes * block.expansion, + kernel_size=1, stride=stride, bias=False), + nn.BatchNorm2d(planes * block.expansion), + ) + + layers = [] + kernel = 1 if kernel3 == 0 else 3 + layers.append(block(self.inplanes, planes, stride, downsample, kernel_size=kernel)) + self.inplanes = planes * block.expansion + for i in range(1, blocks): + kernel = 1 if kernel3 <= i else 3 + layers.append(block(self.inplanes, planes, kernel_size=kernel)) + + return nn.Sequential(*layers) + + def interpolate(self, img, factor): + return F.interpolate(F.interpolate(img, scale_factor=factor, mode='nearest', recompute_scale_factor=True), + scale_factor=1 / factor, mode='nearest', recompute_scale_factor=True) + + def preprocess(self, x, grad_type): + if grad_type == "raw": + return x + if grad_type == "NPR": + return x - self.interpolate(x, 0.5) + grad_kernel = None + # Define kernels for gradients in x, y, and diagonal directions + if grad_type == "x_grad": + grad_kernel = torch.tensor([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]], dtype=torch.float32,device=x.device).unsqueeze(0).unsqueeze(0).repeat(3, 1, 1, 1) + + if grad_type == "y_grad": + grad_kernel = torch.tensor([[-1, -2, -1], [0, 0, 0], [1, 2, 1]], dtype=torch.float32, device=x.device).unsqueeze(0).unsqueeze(0).repeat(3, 1, 1, 1) + + if grad_type == "left_diag": + grad_kernel = torch.tensor([[0, 1, 2], [-1, 0, 1], [-2, -1, 0]], dtype=torch.float32, + device=x.device).unsqueeze(0).unsqueeze(0).repeat(3, 1, 1, 1) + + if grad_type == "right_diag": + grad_kernel = torch.tensor([[-2, -1, 0], [-1, 0, 1], [0, 1, 2]], dtype=torch.float32, + device=x.device).unsqueeze(0).unsqueeze(0).repeat(3, 1, 1, 1) + + + + grad_representation = F.conv2d(x, grad_kernel, groups=3, padding="same") + return grad_representation + + def forward(self, x): + x = self.preprocess(x, self.preprocess_type) + x = self.conv1(x) + x = self.conv2(x) + x = self.bn1(x) + x = self.relu(x) + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + # in case you want to return image-level deepfake score + if self.pool: + x = nn.AvgPool2d(x.size()[2], stride=1)(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + # in case you want to return patch-wise deepfake scores + else: + x = x.permute(0, 2, 3, 1) + x = self.fc(x) + x = x.permute(0, 3, 1, 2) + return x + + +def LaDeDa33(strides=[2, 2, 2, 1], **kwargs): + model = LaDeDa(Bottleneck, [3, 4, 6, 3], strides=strides, kernel3=[1, 1, 1, 1], **kwargs) + return model + + +def LaDeDa17(strides=[2, 2, 2, 1], **kwargs): + model = LaDeDa(Bottleneck, [3, 4, 6, 3], strides=strides, kernel3=[1, 1, 1, 0], **kwargs) + return model + + +def LaDeDa9(strides=[2, 2, 2, 1], **kwargs): + model = LaDeDa(Bottleneck, [3, 4, 6, 3], strides=strides, kernel3=[1, 1, 0, 0], **kwargs) + return model + +def LaDeDa5(strides=[2, 2, 2, 1], **kwargs): + model = LaDeDa(Bottleneck, [3, 4, 6, 3], strides=strides, kernel3=[1, 0, 0, 0], **kwargs) + return model + diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/Tiny_LaDeDa.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/Tiny_LaDeDa.py new file mode 100644 index 0000000000000000000000000000000000000000..92fa4b8709a87d40201767af84765a03135d8a1c --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/Tiny_LaDeDa.py @@ -0,0 +1,116 @@ +import torch.nn as nn +import math +import torch +from collections import OrderedDict +from torch.utils import model_zoo +from torch.nn import functional as F +import os + +dir_path = os.path.dirname(os.path.realpath(__file__)) +class Bottleneck(nn.Module): + expansion = 4 + def __init__(self, inplanes, planes, stride=1, kernel_size=1): + super(Bottleneck, self).__init__() + self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) + self.bn1 = nn.BatchNorm2d(planes) + self.conv2 = nn.Conv2d(planes, planes, kernel_size=kernel_size, stride=stride, + padding=0, bias=False) + self.bn2 = nn.BatchNorm2d(planes) + self.relu = nn.ReLU(inplace=True) + + def forward(self, x, **kwargs): + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + return out + +class TinyLaDeDa(nn.Module): + def __init__(self, block, layer, stride, kernel, preprocess_type, num_classes=1, pool=True): + self.inplanes = 8 + super(TinyLaDeDa, self).__init__() + self.conv1 = nn.Conv2d(3, 8, kernel_size=1, stride=1, padding=0, bias=False) + self.conv2 = nn.Conv2d(8, 8, kernel_size=3, stride=1, padding=0, + bias=False) + self.bn1 = nn.BatchNorm2d(8, momentum=0.001) + self.relu = nn.ReLU(inplace=True) + self.layer1 = self._make_layer(block, 8, blocks=layer, stride=stride, kernel3=kernel, prefix='layer1') + self.avgpool = nn.AvgPool2d(1, stride=1) + self.fc = nn.Linear(8 * block.expansion, num_classes) + self.pool = pool + self.block = block + self.preprocess_type = preprocess_type + for m in self.modules(): + if isinstance(m, nn.Conv2d): + n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels + m.weight.data.normal_(0, math.sqrt(2. / n)) + elif isinstance(m, nn.BatchNorm2d): + m.weight.data.fill_(1) + m.bias.data.zero_() + + def _make_layer(self, block, planes, blocks, stride=1, kernel3=0, prefix=''): + layers = [] + kernel = 1 if kernel3 == 0 else 3 + layers.append(block(self.inplanes, planes, stride, kernel_size=kernel)) + self.inplanes = planes * block.expansion + + return nn.Sequential(*layers) + + def interpolate(self, img, factor): + return F.interpolate(F.interpolate(img, scale_factor=factor, mode='nearest', recompute_scale_factor=True), + scale_factor=1 / factor, mode='nearest', recompute_scale_factor=True) + + def preprocess(self, x, preprocess_type): + if preprocess_type == "raw": + return x + if preprocess_type == "NPR": + return x - self.interpolate(x, 0.5) + grad_kernel = None + # Define kernels for gradients in x, y, and diagonal directions + if preprocess_type == "x_grad": + grad_kernel = torch.tensor([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]], dtype=torch.float32,device=x.device).unsqueeze(0).unsqueeze(0).repeat(3, 1, 1, 1) + + if preprocess_type == "y_grad": + grad_kernel = torch.tensor([[-1, -2, -1], [0, 0, 0], [1, 2, 1]], dtype=torch.float32, device=x.device).unsqueeze(0).unsqueeze(0).repeat(3, 1, 1, 1) + + if preprocess_type == "left_diag": + grad_kernel = torch.tensor([[0, 1, 2], [-1, 0, 1], [-2, -1, 0]], dtype=torch.float32, + device=x.device).unsqueeze(0).unsqueeze(0).repeat(3, 1, 1, 1) + + if preprocess_type == "right_diag": + grad_kernel = torch.tensor([[-2, -1, 0], [-1, 0, 1], [0, 1, 2]], dtype=torch.float32, + device=x.device).unsqueeze(0).unsqueeze(0).repeat(3, 1, 1, 1) + + + + grad_representation = F.conv2d(x, grad_kernel, groups=3, padding="same") + return grad_representation + + + + def forward(self, x): + x = self.preprocess(x, self.preprocess_type) + x = self.conv1(x) + x = self.conv2(x) + x = self.bn1(x) + x = self.relu(x) + # 2 conv layers + x = self.layer1(x) + if self.pool: + x = nn.AvgPool2d(x.size()[2], stride=1)(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + else: + x = x.permute(0, 2, 3, 1) + x = self.fc(x) + x = x.permute(0, 3, 1, 2) + return x + + +def tiny_ladeda(preprocess_type, **kwargs): + model = TinyLaDeDa(Bottleneck, layer=1, stride=2, kernel=1, preprocess_type=preprocess_type, **kwargs) + return model + + diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/__init__.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/base_model.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..fce4e9a10f22a90c3d1c4085ed2ddc11940e49dd --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/base_model.py @@ -0,0 +1,92 @@ +# from pix2pix +import os +import torch +import torch.nn as nn +from torch.nn import init +from torch.optim import lr_scheduler + + +class BaseModel(nn.Module): + def __init__(self, opt): + super(BaseModel, self).__init__() + self.opt = opt + self.total_steps = 0 + self.isTrain = opt.isTrain + self.lr = opt.lr + self.save_dir = os.path.join(opt.checkpoints_dir, opt.name) + self.device = torch.device('cuda:{}'.format(opt.gpu_ids[0])) if opt.gpu_ids else torch.device('cpu') + # self.device = 'cpu' + + def save_networks(self, epoch): + save_filename = 'model_epoch_%s.pth' % epoch + save_path = os.path.join(self.save_dir, save_filename) + + # serialize model and optimizer to dict + # state_dict = { + # 'model': self.model.state_dict(), + # 'optimizer' : self.optimizer.state_dict(), + # 'total_steps' : self.total_steps, + # } + + torch.save(self.model.state_dict(), save_path) + print(f'Saving model {save_path}') + + # load models from the disk + def load_networks(self, epoch): + load_filename = 'model_epoch_%s.pth' % epoch + load_path = os.path.join(self.save_dir, load_filename) + + print('loading the model from %s' % load_path) + # if you are using PyTorch newer than 0.4 (e.g., built from + # GitHub source), you can remove str() on self.device + state_dict = torch.load(load_path, map_location=self.device) + if hasattr(state_dict, '_metadata'): + del state_dict._metadata + + self.model.load_state_dict(state_dict['model']) + self.total_steps = state_dict['total_steps'] + + if self.isTrain and not self.opt.new_optim: + self.optimizer.load_state_dict(state_dict['optimizer']) + ### move optimizer state to GPU + for state in self.optimizer.state.values(): + for k, v in state.items(): + if torch.is_tensor(v): + state[k] = v.to(self.device) + + for g in self.optimizer.param_groups: + g['lr'] = self.opt.lr + + def eval(self): + self.model.eval() + + def train(self): + self.model.train() + + def test(self): + with torch.no_grad(): + self.forward() + + +def init_weights(net, init_type='normal', gain=0.02): + def init_func(m): + classname = m.__class__.__name__ + if hasattr(m, 'weight') and (classname.find('Conv') != -1 or classname.find('Linear') != -1): + if init_type == 'normal': + init.normal_(m.weight.data, 0.0, gain) + elif init_type == 'xavier': + init.xavier_normal_(m.weight.data, gain=gain) + elif init_type == 'kaiming': + init.kaiming_normal_(m.weight.data, a=0, mode='fan_in') + elif init_type == 'orthogonal': + init.orthogonal_(m.weight.data, gain=gain) + else: + raise NotImplementedError('initialization method [%s] is not implemented' % init_type) + if hasattr(m, 'bias') and m.bias is not None: + init.constant_(m.bias.data, 0.0) + elif classname.find('BatchNorm2d') != -1: + init.normal_(m.weight.data, 1.0, gain) + init.constant_(m.bias.data, 0.0) + + print('initialize network with %s' % init_type) + net.apply(init_func) diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/tiny_trainer.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/tiny_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..6db919120047e9e28094396f4254cc39870f15c7 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/tiny_trainer.py @@ -0,0 +1,53 @@ +import torch +import torch.nn as nn +import torch.optim as optim +import torch.nn.functional as F +from torch.utils.data import TensorDataset, DataLoader +from networks.Tiny_LaDeDa import tiny_ladeda +from networks.base_model import BaseModel, init_weights +from options.train_options import TrainOptions +import random + + +class TinyLaDeDaTrainer(BaseModel): + def name(self): + return 'Trainer' + + def __init__(self, opt, n_classes): + super(TinyLaDeDaTrainer, self).__init__(opt) + self.model = tiny_ladeda(pretrained=False, preprocess_type=opt.tiny_preprocess, num_classes=n_classes) + self.model.fc = nn.Linear(opt.features_dim, n_classes) + torch.nn.init.normal_(self.model.fc.weight.data, 0.0, opt.init_gain) + self.loss_fn = nn.MSELoss() + # initialize optimizers + self.optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=0.0002, betas=(0.9, 0.999)) + self.model.to(opt.gpu_ids[0]) + + def adjust_learning_rate(self, min_lr=1e-6): + for param_group in self.optimizer.param_groups: + param_group['lr'] *= 0.9 + if param_group['lr'] < min_lr: + return False + self.lr = param_group['lr'] + print('*' * 25) + print(f'Changing lr from {param_group["lr"] / 0.9} to {param_group["lr"]}') + print('*' * 25) + return True + + def set_input(self, input): + self.input = input[0].to(self.device) + self.label = input[1].to(self.device).float() + + def forward(self): + self.output = self.model(self.input) + + def get_loss(self): + return self.loss_fn(self.output.squeeze(1), self.label) + + def optimize_parameters(self): + self.forward() + self.loss = self.loss_fn(self.output.squeeze(1), self.label) + self.optimizer.zero_grad() + self.loss.backward() + self.optimizer.step() \ No newline at end of file diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/trainer.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..de48b0f6db3e947f64c9227d968e2ac43ea7ebc2 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/networks/trainer.py @@ -0,0 +1,70 @@ + +import functools +import torch +import torch.nn as nn +from networks.LaDeDa import LaDeDa9 +from networks.base_model import BaseModel, init_weights + + +class Trainer(BaseModel): + def name(self): + return 'Trainer' + + def __init__(self, opt): + super(Trainer, self).__init__(opt) + + if self.isTrain and not opt.continue_train: + self.model = LaDeDa9(num_classes=1) + self.model.fc = nn.Linear(2048, 1) + torch.nn.init.normal_(self.model.fc.weight.data, 0.0, opt.init_gain) + if not self.isTrain or opt.continue_train: + self.model = LaDeDa9(pretrained=False, num_classes=1) + + if self.isTrain: + self.loss_fn = nn.BCEWithLogitsLoss() + # initialize optimizers + if opt.optim == "adam_cosine": + self.optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.max_lr, betas=(opt.beta1, 0.999)) + self.scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(self.optimizer, T_max=opt.niter, eta_min=opt.min_lr) + elif opt.optim == 'adam': + self.optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, betas=(opt.beta1, 0.999)) + elif opt.optim == 'sgd': + self.optimizer = torch.optim.SGD(filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, momentum=0.0, weight_decay=0) + else: + raise ValueError("optim should be [adam, sgd]") + + if not self.isTrain or opt.continue_train: + self.load_networks(opt.epoch) + self.model.to(opt.gpu_ids[0]) + + def adjust_learning_rate(self, min_lr=1e-6): + for param_group in self.optimizer.param_groups: + param_group['lr'] *= 0.9 + if param_group['lr'] < min_lr: + return False + self.lr = param_group['lr'] + print('*' * 25) + print(f'Changing lr from {param_group["lr"] / 0.9} to {param_group["lr"]}') + print('*' * 25) + return True + + + def set_input(self, input): + self.input = input[0].to(self.device) + self.label = input[1].to(self.device).float() + + def forward(self): + self.output = self.model(self.input) + + def get_loss(self): + return self.loss_fn(self.output.squeeze(1), self.label) + + def optimize_parameters(self): + self.forward() + self.loss = self.loss_fn(self.output.squeeze(1), self.label) + self.optimizer.zero_grad() + self.loss.backward() + self.optimizer.step() diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/options/__init__.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/options/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/options/base_options.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/options/base_options.py new file mode 100644 index 0000000000000000000000000000000000000000..09a92dc7f35aecb32efef8ed455ea7a3975e4763 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/options/base_options.py @@ -0,0 +1,135 @@ +import argparse +import os +import time +import util +import torch +#import models +#import data + + +class BaseOptions(): + def __init__(self): + self.initialized = False + + def initialize(self, parser): + parser.add_argument('--mode', default='binary') + parser.add_argument('--arch', type=str, default='res50', help='architecture for binary classification') + + # data augmentation + parser.add_argument('--rz_interp', default='bilinear') + parser.add_argument('--blur_prob', type=float, default=0) + parser.add_argument('--blur_sig', default='0.5') + parser.add_argument('--jpg_prob', type=float, default=0) + parser.add_argument('--jpg_method', default='cv2') + parser.add_argument('--jpg_qual', default='75') + + parser.add_argument('--dataroot', default='./dataset/', help='path to images (should have subfolders trainA, trainB, valA, valB, etc)') + parser.add_argument('--classes', default='', help='image classes to train on') + parser.add_argument('--class_bal', action='store_true') + parser.add_argument('--batch_size', type=int, default=64, help='input batch size') + parser.add_argument('--loadSize', type=int, default=256, help='scale images to this size') + parser.add_argument('--cropSize', type=int, default=224, help='then crop to this size') + parser.add_argument('--gpu_ids', type=str, default='1', help='gpu ids: e.g. 0 0,1,2, 0,2. use -1 for CPU') + parser.add_argument('--name', type=str, default='experiment_name', help='name of the experiment. It decides where to store samples and models') + parser.add_argument('--epoch', type=str, default='latest', help='which epoch to load? set to latest to use latest cached model') + parser.add_argument('--num_threads', default=8, type=int, help='# threads for loading data') + parser.add_argument('--checkpoints_dir', type=str, default='./checkpoints', help='models are saved here') + parser.add_argument('--serial_batches', action='store_true', help='if true, takes images in order to make batches, otherwise takes them randomly') + parser.add_argument('--resize_or_crop', type=str, default='scale_and_crop', help='scaling and cropping of images at load time [resize_and_crop|crop|scale_width|scale_width_and_crop|none]') + parser.add_argument('--no_flip', action='store_true', help='if specified, do not flip the images for data augmentation') + parser.add_argument('--init_type', type=str, default='normal', help='network initialization [normal|xavier|kaiming|orthogonal]') + parser.add_argument('--init_gain', type=float, default=0.02, help='scaling factor for normal, xavier and orthogonal.') + parser.add_argument('--suffix', default='', type=str, help='customized suffix: opt.name = opt.name + suffix: e.g., {model}_{netG}_size{loadSize}') + parser.add_argument('--delr_freq', type=int, default=10, help='frequency of changing lr') + parser.add_argument('--tiny_preprocess', type=str, default="right_diag", help='image preprocess type used') + parser.add_argument('--features_dim', type=int, default=2048, help='nn.Linear(features_dim, num_of_classes)') + parser.add_argument('--ladeda_preprocess', type=str, default="NPR", help='image preprocess type used') + parser.add_argument('--preprocess', type=str, default="NPR", help='image preprocess type used') + parser.add_argument('--model', type=str, default="LaDeDa", help='image preprocess type used') + + + self.initialized = True + return parser + + def gather_options(self): + # initialize parser with basic options + if not self.initialized: + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser = self.initialize(parser) + + # get the basic options + opt, _ = parser.parse_known_args() + self.parser = parser + + return opt #parser.parse_args() + + def print_options(self, opt): + message = '' + message += '----------------- Options ---------------\n' + for k, v in sorted(vars(opt).items()): + comment = '' + default = self.parser.get_default(k) + if v != default: + comment = '\t[default: %s]' % str(default) + message += '{:>25}: {:<30}{}\n'.format(str(k), str(v), comment) + message += '----------------- End -------------------' + print(message) + + # save to the disk + + expr_dir = os.path.join(opt.checkpoints_dir, opt.name) + util.mkdirs(expr_dir) + file_name = os.path.join(expr_dir, 'opt.txt') + with open(file_name, 'wt') as opt_file: + opt_file.write(message) + opt_file.write('\n') + + def parse(self, print_options=True): + + opt = self.gather_options() + opt.isTrain = self.isTrain # train or test + opt.name = opt.name + time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()) + # process opt.suffix + if opt.suffix: + suffix = ('_' + opt.suffix.format(**vars(opt))) if opt.suffix != '' else '' + opt.name = opt.name + suffix + + # Conditional settings based on --model + if opt.model in ['LaDeDa', 'ladeda']: + opt.features_dim = 2048 + opt.preprocess = opt.ladeda_preprocess + elif opt.model in ['Tiny', 'tiny']: + opt.features_dim = 8 + opt.preprocess = opt.tiny_preprocess + else: + raise ValueError("Model type should be LaDeDa\ladeda or tiny\Tiny") + + + + if print_options: + self.print_options(opt) + + # set gpu ids + str_ids = opt.gpu_ids.split(',') + opt.gpu_ids = [] + for str_id in str_ids: + id = int(str_id) + if id >= 0: + opt.gpu_ids.append(id) + if len(opt.gpu_ids) > 0: + torch.cuda.set_device(opt.gpu_ids[0]) + + # additional + opt.classes = opt.classes.split(',') + opt.rz_interp = opt.rz_interp.split(',') + opt.blur_sig = [float(s) for s in opt.blur_sig.split(',')] + opt.jpg_method = opt.jpg_method.split(',') + opt.jpg_qual = [int(s) for s in opt.jpg_qual.split(',')] + if len(opt.jpg_qual) == 2: + opt.jpg_qual = list(range(opt.jpg_qual[0], opt.jpg_qual[1] + 1)) + elif len(opt.jpg_qual) > 2: + raise ValueError("Shouldn't have more than 2 values for --jpg_qual.") + + self.opt = opt + return self.opt diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/options/test_options.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/options/test_options.py new file mode 100644 index 0000000000000000000000000000000000000000..69d39a1064d1cc2834f6552ce8d799a5c97b92d3 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/options/test_options.py @@ -0,0 +1,18 @@ +from .base_options import BaseOptions + + +class TestOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + # parser.add_argument('--dataroot') + parser.add_argument('--model_path') + parser.add_argument('--no_resize', action='store_true') + parser.add_argument('--no_crop', action='store_true') + parser.add_argument('--eval', action='store_true', help='use eval mode during test time.') + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--lr', type=float, default=0.00002, help='initial learning rate for adam') + parser.add_argument('--niter', type=int, default=0, help='# of iter at starting learning rate') + parser.add_argument('--is_aug', action='store_true') + + self.isTrain = False + return parser diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/options/train_options.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/options/train_options.py new file mode 100644 index 0000000000000000000000000000000000000000..c14797b9f901ed28e30732b139f4f57d2364aa85 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/options/train_options.py @@ -0,0 +1,29 @@ +from .base_options import BaseOptions + + +class TrainOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument('--data_aug', action='store_true', help='if specified, perform additional data augmentation (photometric, blurring, jpegging)') + parser.add_argument('--optim', type=str, default='adam', help='optim to use [sgd, adam]') + parser.add_argument('--new_optim', action='store_true', help='new optimizer instead of loading the optim state') + parser.add_argument('--loss_freq', type=int, default=800, help='frequency of showing loss on tensorboard') + parser.add_argument('--save_latest_freq', type=int, default=2000, help='frequency of saving the latest results') + parser.add_argument('--save_epoch_freq', type=int, default=5, help='frequency of saving checkpoints at the end of epochs') + parser.add_argument('--continue_train', action='store_true', help='continue training: load the latest model') + parser.add_argument('--epoch_count', type=int, default=1, help='the starting epoch count, we save the model by , +, ...') + parser.add_argument('--last_epoch', type=int, default=-1, help='starting epoch count for scheduler intialization') + + parser.add_argument('--train_split', type=str, default='train', help='train, val, test, etc') + parser.add_argument('--val_split', type=str, default='val', help='train, val, test, etc') + + parser.add_argument('--niter', type=int, default=101, help='# of iter at starting learning rate') + parser.add_argument('--beta1', type=float, default=0.9, help='momentum term of adam') + parser.add_argument('--lr', type=float, default=0.0002, help='initial learning rate for adam') + parser.add_argument('--is_aug', action='store_true') + # parser.add_argument('--model_path') + # parser.add_argument('--no_resize', action='store_true') + # parser.add_argument('--no_crop', action='store_true') + self.isTrain = True + return parser diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/requirements.txt b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..31507a459fa86e82b11884f5cc0e5f7a7fdb8104 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/requirements.txt @@ -0,0 +1,75 @@ +albumentations==1.4.0 +appdirs==1.4.4 +bagnets==0.1 +certifi==2024.2.2 +charset-normalizer==3.3.2 +click==8.1.7 +contourpy==1.2.0 +cycler==0.12.1 +docker-pycreds==0.4.0 +faiss-gpu==1.7.2 +filelock==3.13.1 +fonttools==4.48.1 +fsspec==2024.2.0 +gitdb==4.0.11 +GitPython==3.1.41 +idna==3.6 +imageio==2.33.1 +importlib-resources==6.1.1 +Jinja2==3.1.3 +joblib==1.3.2 +kiwisolver==1.4.5 +lazy-loader==0.3 +MarkupSafe==2.1.5 +matplotlib==3.8.2 +mpmath==1.3.0 +networkx==3.2.1 +numpy==1.26.4 +nvidia-cublas-cu12==12.1.3.1 +nvidia-cuda-cupti-cu12==12.1.105 +nvidia-cuda-nvrtc-cu12==12.1.105 +nvidia-cuda-runtime-cu12==12.1.105 +nvidia-cudnn-cu12==8.9.2.26 +nvidia-cufft-cu12==11.0.2.54 +nvidia-curand-cu12==10.3.2.106 +nvidia-cusolver-cu12==11.4.5.107 +nvidia-cusparse-cu12==12.1.0.106 +nvidia-nccl-cu12==2.19.3 +nvidia-nvjitlink-cu12==12.3.101 +nvidia-nvtx-cu12==12.1.105 +opencv-python==4.9.0.80 +opencv-python-headless==4.9.0.80 +packaging==23.2 +pandas==2.2.2 +pillow==10.2.0 +protobuf==4.25.2 +psutil==5.9.8 +pyparsing==3.1.1 +python-dateutil==2.8.2 +pytz==2024.1 +PyYAML==6.0.1 +qudida==0.0.4 +requests==2.31.0 +scikit-image==0.22.0 +scikit-learn==1.4.0 +scipy==1.12.0 +seaborn==0.13.2 +sentry-sdk==1.40.1 +setproctitle==1.3.3 +six==1.16.0 +smmap==5.0.1 +sympy==1.12 +tensorboardX==2.6.2.2 +thop==0.1.1.post2209072238 +threadpoolctl==3.2.0 +tifffile==2024.1.30 +torch==2.2.0 +torchvision==0.17.0 +tqdm==4.66.2 +triton==2.2.0 +typing-extensions==4.9.0 +tzdata==2024.1 +urllib3==2.2.0 +wandb==0.16.3 +xgboost==2.0.3 +zipp==3.17.0 diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/test.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/test.py new file mode 100644 index 0000000000000000000000000000000000000000..8d90e18c15d590f0238fd567c1735494cd76babd --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/test.py @@ -0,0 +1,97 @@ +import logging +import os +import random +import time + +import numpy as np +import torch +import torch.nn +from networks.LaDeDa import LaDeDa9 +from options.test_options import TestOptions +from test_config import * +from validate import validate + + +def set_seed(seed=42): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + print(f'seed: {seed}') + + +def test_model(model): + logging.basicConfig( + filename='log_test.log', level=logging.INFO, format='%(asctime)s %(message)s' + ) + logger = logging.getLogger() + + opt = TestOptions().parse(print_options=False) + log_msg = f'Model_path {opt.model_path}' + print(log_msg) + logger.info(log_msg) + + accs, aps, r_accs, f_accs = [], [], [], [] + current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + print(current_time) + logger.info(current_time) + for v_id, val in enumerate(vals): + print(f'eval on {val}') + Testopt.dataroot = '{}/{}'.format(Testdataroot, val) + Testopt.classes = os.listdir(Testopt.dataroot) if multiclass[v_id] else [''] + Testopt.no_resize = False + Testopt.no_crop = True + Testopt.is_aug = False + acc, ap, r_acc, f_acc = validate(model, Testopt) + accs.append(acc) + aps.append(ap) + r_accs.append(r_acc) + f_accs.append(f_acc) + log_msg = ( + '({} {:12}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id, val, acc * 100, ap * 100, r_acc * 100, f_acc * 100 + ) + ) + print(log_msg) + logger.info(log_msg) + + mean_acc = np.array(accs).mean() * 100 + mean_ap = np.array(aps).mean() * 100 + mean_r_acc = np.array(r_accs).mean() * 100 + mean_f_acc = np.array(f_accs).mean() * 100 + log_msg = '({} {:10}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id + 1, 'Mean', mean_acc, mean_ap, mean_r_acc, mean_f_acc + ) + print(log_msg) + logger.info(log_msg) + print('*' * 25) + logger.info('*' * 25) + + +def get_model(model_path, features_dim): + model = LaDeDa9(num_classes=1) + model.fc = torch.nn.Linear(features_dim, 1) + from collections import OrderedDict + from copy import deepcopy + + state_dict = torch.load(model_path, map_location='cpu') + pretrained_dict = OrderedDict() + for ki in state_dict.keys(): + pretrained_dict[ki] = deepcopy(state_dict[ki]) + model.load_state_dict(pretrained_dict, strict=True) + print('model has loaded') + model.eval() + model.cuda() + model.to(1) + return model + + +if __name__ == '__main__': + set_seed(42) + Testopt = TestOptions().parse(print_options=False) + # evaluate model + # LaDeDa's features_dim = 2048 + # Tiny-LaDeDa's features_dim = 8 + model = get_model(model_path, features_dim=Testopt.features_dim) + test_model(model) diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/test_config.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/test_config.py new file mode 100644 index 0000000000000000000000000000000000000000..1c5ec8c6d3922aa0e2882a55e251e7ff750c62f5 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/test_config.py @@ -0,0 +1,55 @@ +# root to the testsets +# Testdataroot = '/data/ziqiang/yjz/dataset/ForenSynths/test' +# Testdataroot = '/data/ziqiang/yjz/dataset/DiffusionForensics' +# Testdataroot = '/data/ziqiang/yjz/dataset/UniversalFakeDetect' +# Testdataroot = '/data/ziqiang/yjz/dataset/Genimage' +Testdataroot = '/data/ziqiang/Benchmark' +# Testdataroot = '/data/ziqiang/jpeg' +# Testdataroot = '/data/ziqiang/noise' +# Testdataroot = '/data/ziqiang/sample' + +# list of synthesis algorithms +# vals = ['progan', 'stylegan', 'biggan', 'cyclegan', 'stargan', 'gaugan', +# 'crn', 'imle', 'seeingdark', 'san', 'deepfake', 'stylegan2', 'whichfaceisreal'] +# multiclass = [1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0] + +# vals = ['adm', 'ddpm', 'iddpm', 'ldm', 'pndm', 'sdv1_new', 'sdv2', 'vqdiffusion'] +# multiclass = [1, 1, 1, 1, 1, 1, 1, 1] + +# vals = ['dalle', 'glide_50_27', 'glide_100_10', 'glide_100_27', 'guided', 'ldm_100', 'ldm_200', 'ldm_200_cfg'] +# multiclass = [0, 0, 0, 0, 0, 0, 0, 0] + +# vals = ['ADM', 'DALLE2', 'Glide', 'Midjourney', 'stable_diffusion_v_1_4', 'stable_diffusion_v_1_5', 'VQDM', 'wukong'] +# multiclass = [0, 0, 0, 0, 0, 0, 0, 0] + +vals = [ + 'BlendFace', + 'BLIP', + 'CommunityAI', + 'DALLE-3', + 'E4S', + 'FaceSwap', + 'FLUX1-dev', + 'GLIDE', + 'Imagen3', + 'Infinite-ID', + 'InstantID', + 'InSwap', + 'IP-Adapter', + 'Midjourney', + 'PhotoMaker', + 'ProGAN', + 'R3GAN', + 'SD3', + 'SDXL', + 'SimSwap', + 'SocialRF', + 'StyleGAN-XL', + 'StyleGAN3', + 'StyleSwim', + 'WFIR', +] +multiclass = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + +# model +model_path = '/data/ziqiang/yjz/code/RealTime-DeepfakeDetection-in-the-RealWorld-main/checkpoints/4class-car-cat-chair-horse2025_04_10_11_12_56/model_epoch_best.pth' diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/train.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/train.py new file mode 100644 index 0000000000000000000000000000000000000000..1d47afb4a53b3fb63458494c5eb6ad1fc6170684 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/train.py @@ -0,0 +1,145 @@ +import logging +import os +import random +import sys +import time + +import numpy as np +import torch +import torch.nn +from data import create_dataloader +from earlystop import EarlyStopping +from networks.trainer import Trainer +from options.test_options import TestOptions +from options.train_options import TrainOptions +from tensorboardX import SummaryWriter +from util import Logger +from validate import validate + + +def set_seed(seed=42): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + print(f'seed: {seed}') + + +# use when training without aug +def get_val_opt(): + val_opt = TrainOptions().parse(print_options=False) + val_opt.dataroot = '{}/{}'.format(val_opt.dataroot, val_opt.val_split) + val_opt.isTrain = False + val_opt.no_resize = False + val_opt.no_crop = False + val_opt.serial_batches = True + + return val_opt + + +if __name__ == '__main__': + opt = TrainOptions().parse() + set_seed() + Testdataroot = os.path.join(opt.dataroot, 'test') + opt.dataroot = '{}/{}'.format(opt.dataroot, opt.train_split) + Logger(os.path.join(opt.checkpoints_dir, opt.name, 'log.log')) + print(' '.join(list(sys.argv))) + val_opt = get_val_opt() + Testopt = TestOptions().parse(print_options=False) + train_data_loader, train_paths = create_dataloader(opt) + dataset_size = len(train_data_loader) + print('#training images = %d' % dataset_size) + + train_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'train')) + val_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'val')) + # initializing the model + model = Trainer(opt) + net_params = sum(map(lambda x: x.numel(), model.parameters())) + print(f'Model parameters {net_params:,d}') + + # Configure logger + logging.basicConfig( + level=logging.INFO, # Set logging level + format='%(asctime)s - %(levelname)s - %(message)s', # Log format + datefmt='%Y-%m-%d %H:%M:%S', # Date format without milliseconds + handlers=[ + logging.FileHandler('log.log', mode='w'), # Log file output + logging.StreamHandler(), + ], + ) # Console output + + logger = logging.getLogger(__name__) + + # initializing stopping criteria + early_stopping = EarlyStopping( + patience=opt.earlystop_epoch, delta=-0.001, verbose=True + ) + + print(f'cwd: {os.getcwd()}') + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} Length of data loader: {len(train_data_loader)}' + ) + logger.info(f'Length of data loader: {len(train_data_loader)}') + # training loop + for epoch in range(opt.niter): + model.train() + epoch_start_time = time.time() + iter_data_time = time.time() + epoch_iter = 0 + + for i, data in enumerate(train_data_loader): + model.total_steps += 1 + epoch_iter += opt.batch_size + model.set_input(data) + model.optimize_parameters() + + if model.total_steps % opt.loss_freq == 0: + print( + time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime()), + 'Train loss: {} at step: {} lr {}'.format( + model.loss, model.total_steps, model.lr + ), + ) + logger.info( + f'Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}' + ) + train_writer.add_scalar('loss', model.loss, model.total_steps) + + if epoch % opt.save_epoch_freq == 0: + print( + 'saving the model at the end of epoch %d, iters %d' + % (epoch, model.total_steps) + ) + logger.info(f'saving the model at the end of epoch {epoch}') + model.save_networks('latest') + model.save_networks(epoch) + + # Validation + model.eval() + acc, ap, r_acc, f_acc = validate(model.model, val_opt) + val_writer.add_scalar('accuracy', acc, model.total_steps) + val_writer.add_scalar('ap', ap, model.total_steps) + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} (Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}' + ) + logger.info( + f'(Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}' + ) + model.train() + early_stopping(acc, model) + if early_stopping.early_stop: + cont_train = model.adjust_learning_rate() + if cont_train: + print('Learning rate dropped by 10, continue training...') + logger.info( + f'changing lr at the end of epoch {epoch}, iters {model.total_steps}' + ) + early_stopping = EarlyStopping( + patience=opt.earlystop_epoch, delta=-0.002, verbose=True + ) + else: + print('Early stopping.') + break + + model.save_networks('last') diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/train_Tiny_LaDeDa.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/train_Tiny_LaDeDa.py new file mode 100644 index 0000000000000000000000000000000000000000..ed900a7d297a6ae18a5611538bcbb275994067a3 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/train_Tiny_LaDeDa.py @@ -0,0 +1,145 @@ +import os +import random + +import numpy as np +import torch +from networks.tiny_trainer import TinyLaDeDaTrainer +from options.train_options import TrainOptions +from sklearn.metrics import accuracy_score +from torch.utils.data import DataLoader, TensorDataset + + +def seed_torch(seed=42): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + print(f'seed: {seed}') + + +def get_info(dataset, type): + X_patches, y_logits, y_img_labels = [], [], [] + label = 0 if type == 'real' else 1 + for img_info in dataset: + patches = img_info[ + 'patches' + ] # [num of 9x9 patches in a given image, patch values] + deepfake_scores = img_info[ + 'logits' + ] # [num of 9x9 patches in a given image, deepfake score] + X_patches.extend(patches) + y_logits.extend(deepfake_scores.flatten()) + + y_img_labels.append(label) + + X_patches, y_logits, y_img_labels = ( + np.array(X_patches), + np.array(y_logits), + np.array(y_img_labels), + ) + return X_patches, y_logits, y_img_labels + + +def get_X_Y(dataset): + X_real_patches, y_real_logits, y_real_labels = get_info(dataset['real'], 'real') + X_fake_patches, y_fake_logits, y_fake_labels = get_info(dataset['fake'], 'fake') + X = np.concatenate((X_real_patches, X_fake_patches), axis=0) + Y = np.concatenate((y_real_logits, y_fake_logits), axis=0) + labels = np.concatenate((y_real_labels, y_fake_labels), axis=0) + return X, Y, labels + + +def load_data(path): + loaded_data = np.load(path, allow_pickle=True) + loaded_data = {key: loaded_data[key].tolist() for key in loaded_data.files} + return loaded_data + + +def load_train_val(path): + loaded_data = np.load(path, allow_pickle=True) + patches = loaded_data['patches'] + logits = loaded_data['logits'] + return patches, logits + + +def train(X_train, y_train, X_val, y_val, val_img_labels): + train_dataset = TensorDataset( + torch.from_numpy(X_train).float(), torch.from_numpy(y_train).float() + ) + train_loader = DataLoader(train_dataset, batch_size=729, shuffle=True) + opt = TrainOptions().parse() + model = TinyLaDeDaTrainer(opt, n_classes=1) + net_params = sum(map(lambda x: x.numel(), model.parameters())) + print(f'Model parameters {net_params:,d}') + val_dataset = TensorDataset( + torch.from_numpy(X_val).float(), torch.from_numpy(y_val).float() + ) + val_loader = DataLoader(val_dataset, batch_size=729, shuffle=False) + early_stopping = EarlyStopping( + patience=opt.earlystop_epoch, delta=-0.001, verbose=True + ) + print(f'len train loader: {len(train_loader)}') + print(f'len val loader: {len(val_loader)}') + num_epochs = 100 + for epoch in range(num_epochs): + model.train() + for i, data in enumerate(train_loader): + model.set_input(data) + model.optimize_parameters() + + if epoch % opt.save_epoch_freq == 0: + print( + 'saving the model at the end of epoch %d, iters %d' + % (epoch, model.total_steps) + ) + model.save_networks('latest') + model.save_networks(epoch) + # Validation + model.eval() + val_logits = [] + with torch.no_grad(): + for patches, logits in val_loader: + val_outputs = ( + model.model(patches.cuda()).squeeze().detach().cpu().numpy() + ) + # getting img deepfake score + img_logit = val_outputs.mean() + val_logits.extend( + torch.sigmoid(torch.tensor(img_logit)).flatten().tolist() + ) + + val_logits = np.array(val_logits) + acc = accuracy_score(val_img_labels, val_logits) + wandb.log({'accuracy': acc, 'ap': ap}, commit=False) + wandb.log({'epoch': epoch}) + early_stopping(acc, model) + if early_stopping.early_stop: + cont_train = model.adjust_learning_rate() + if cont_train: + print('Learning rate dropped by 10, continue training...') + early_stopping = EarlyStopping( + patience=opt.earlystop_epoch, delta=-0.002, verbose=True + ) + else: + print('Early stopping.') + break + model.train() + + +if __name__ == '__main__': + seed_torch(seed=42) + + # the distillation training and validation sets + train_path = 'patches_logits_train_set.npz' + val_path = 'patches_logits_val_set.npz' + + print('loading train') + train_data = load_data(train_path) + X_train, y_train, train_img_labels = get_X_Y(train_data) + + print('loading validation') + val_data = load_data(val_path) + X_val, y_val, val_img_labels = get_X_Y(val_data) + + train(X_train, y_train, X_val, y_val, val_img_labels) diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/util.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/util.py new file mode 100644 index 0000000000000000000000000000000000000000..3d417d9e0e36f91221c51367d6434a0548674138 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/util.py @@ -0,0 +1,41 @@ +import os +import sys + +import torch + + +def mkdirs(paths): + if isinstance(paths, list) and not isinstance(paths, str): + for path in paths: + mkdir(path) + else: + mkdir(paths) + + +def mkdir(path): + if not os.path.exists(path): + os.makedirs(path) + + +def unnormalize(tens, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]): + # assume tensor of shape NxCxHxW + return ( + tens * torch.Tensor(std)[None, :, None, None] + + torch.Tensor(mean)[None, :, None, None] + ) + + +class Logger(object): + """Log stdout messages.""" + + def __init__(self, outfile): + self.terminal = sys.stdout + self.log = open(outfile, 'a') + sys.stdout = self + + def write(self, message): + self.terminal.write(message) + self.log.write(message) + + def flush(self): + self.terminal.flush() diff --git a/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/validate.py b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..cc333a5e5fa1d59cd8984c3c9daa0d2d7600ba82 --- /dev/null +++ b/detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main/validate.py @@ -0,0 +1,46 @@ +import numpy as np +import torch +from data import create_dataloader +from sklearn.metrics import ( + accuracy_score, + average_precision_score, + precision_score, + recall_score, + roc_auc_score, +) + + +def validate(model, opt): + data_loader, _ = create_dataloader(opt) + with torch.no_grad(): + y_true, y_pred = [], [] + for img, label in data_loader: + img_input = img.cuda() + y_pred.extend(model(img_input).sigmoid().flatten().tolist()) + y_true.extend(label.flatten().tolist()) + + y_true, y_pred = np.array(y_true), np.array(y_pred) + r_acc = accuracy_score(y_true[y_true == 0], y_pred[y_true == 0] > 0.5) + f_acc = accuracy_score(y_true[y_true == 1], y_pred[y_true == 1] > 0.5) + acc = accuracy_score(y_true, y_pred > 0.5) + ap = average_precision_score(y_true, y_pred) + auc = roc_auc_score(y_true, y_pred) + precision = precision_score(y_true, y_pred > 0.5) + recall = recall_score(y_true, y_pred > 0.5) + return acc, ap, r_acc, f_acc + + +if __name__ == '__main__': + opt = TestOptions().parse(print_options=False) + model = LaDeDa(num_classes=1) + state_dict = torch.load(opt.model_path, map_location='cpu') + model.load_state_dict(state_dict['model']) + model.cuda() + model.eval() + + acc, ap, r_acc, f_acc, auc, precision, recall = validate(model, opt) + + print('accuracy:', acc) + print('average precision:', avg_precision) + print('accuracy of real images:', r_acc) + print('accuracy of fake images:', f_acc) diff --git a/detector_codes/Resnet50-main/data/__init__.py b/detector_codes/Resnet50-main/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..664e6eeaa752b54f53bdaf076766094a5dd86c1f --- /dev/null +++ b/detector_codes/Resnet50-main/data/__init__.py @@ -0,0 +1,52 @@ +import torch +import numpy as np +from torch.utils.data.sampler import WeightedRandomSampler + +from .datasets import dataset_folder + +''' +def get_dataset(opt): + dset_lst = [] + for cls in opt.classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) +''' + +import os +def get_dataset(opt): + classes = os.listdir(opt.dataroot) if len(opt.classes) == 0 else opt.classes + if '0_real' not in classes or '1_fake' not in classes: + dset_lst = [] + for cls in classes: + root = opt.dataroot + '/' + cls + dset = dataset_folder(opt, root) + dset_lst.append(dset) + return torch.utils.data.ConcatDataset(dset_lst) + return dataset_folder(opt, opt.dataroot) + +def get_bal_sampler(dataset): + targets = [] + for d in dataset.datasets: + targets.extend(d.targets) + + ratio = np.bincount(targets) + w = 1. / torch.tensor(ratio, dtype=torch.float) + sample_weights = w[targets] + sampler = WeightedRandomSampler(weights=sample_weights, + num_samples=len(sample_weights)) + return sampler + + +def create_dataloader(opt): + shuffle = not opt.serial_batches if (opt.isTrain and not opt.class_bal) else False + dataset = get_dataset(opt) + sampler = get_bal_sampler(dataset) if opt.class_bal else None + + data_loader = torch.utils.data.DataLoader(dataset, + batch_size=opt.batch_size, + shuffle=shuffle, + sampler=sampler, + num_workers=int(opt.num_threads)) + return data_loader diff --git a/detector_codes/Resnet50-main/data/datasets.py b/detector_codes/Resnet50-main/data/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..d2d8a9b603abed4287e4d0dd1a7d29f6624d8d74 --- /dev/null +++ b/detector_codes/Resnet50-main/data/datasets.py @@ -0,0 +1,139 @@ +import cv2 +import numpy as np +import torchvision.datasets as datasets +import torchvision.transforms as transforms +import torchvision.transforms.functional as TF +from random import random, choice +from io import BytesIO +from PIL import Image +from PIL import ImageFile +from scipy.ndimage.filters import gaussian_filter +from torchvision.transforms import InterpolationMode + +ImageFile.LOAD_TRUNCATED_IMAGES = True + +def dataset_folder(opt, root): + if opt.mode == 'binary': + return binary_dataset(opt, root) + if opt.mode == 'filename': + return FileNameDataset(opt, root) + raise ValueError('opt.mode needs to be binary or filename.') + + +def binary_dataset(opt, root): + if opt.isTrain: + crop_func = transforms.RandomCrop(opt.cropSize) + elif opt.no_crop: + crop_func = transforms.Lambda(lambda img: img) + else: + crop_func = transforms.CenterCrop(opt.cropSize) + + if opt.isTrain and not opt.no_flip: + flip_func = transforms.RandomHorizontalFlip() + else: + flip_func = transforms.Lambda(lambda img: img) + if not opt.isTrain and opt.no_resize: + rz_func = transforms.Lambda(lambda img: img) + else: + # rz_func = transforms.Lambda(lambda img: custom_resize(img, opt)) + rz_func = transforms.Resize((opt.loadSize, opt.loadSize)) + + dset = datasets.ImageFolder( + root, + transforms.Compose([ + rz_func, + # transforms.Lambda(lambda img: data_augment(img, opt)), + crop_func, + flip_func, + transforms.ToTensor(), + transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ])) + return dset + + +class FileNameDataset(datasets.ImageFolder): + def name(self): + return 'FileNameDataset' + + def __init__(self, opt, root): + self.opt = opt + super().__init__(root) + + def __getitem__(self, index): + # Loading sample + path, target = self.samples[index] + return path + + +def data_augment(img, opt): + img = np.array(img) + + if random() < opt.blur_prob: + sig = sample_continuous(opt.blur_sig) + gaussian_blur(img, sig) + + if random() < opt.jpg_prob: + method = sample_discrete(opt.jpg_method) + qual = sample_discrete(opt.jpg_qual) + img = jpeg_from_key(img, qual, method) + + return Image.fromarray(img) + + +def sample_continuous(s): + if len(s) == 1: + return s[0] + if len(s) == 2: + rg = s[1] - s[0] + return random() * rg + s[0] + raise ValueError("Length of iterable s should be 1 or 2.") + + +def sample_discrete(s): + if len(s) == 1: + return s[0] + return choice(s) + + +def gaussian_blur(img, sigma): + gaussian_filter(img[:,:,0], output=img[:,:,0], sigma=sigma) + gaussian_filter(img[:,:,1], output=img[:,:,1], sigma=sigma) + gaussian_filter(img[:,:,2], output=img[:,:,2], sigma=sigma) + + +def cv2_jpg(img, compress_val): + img_cv2 = img[:,:,::-1] + encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), compress_val] + result, encimg = cv2.imencode('.jpg', img_cv2, encode_param) + decimg = cv2.imdecode(encimg, 1) + return decimg[:,:,::-1] + + +def pil_jpg(img, compress_val): + out = BytesIO() + img = Image.fromarray(img) + img.save(out, format='jpeg', quality=compress_val) + img = Image.open(out) + # load from memory before ByteIO closes + img = np.array(img) + out.close() + return img + + +jpeg_dict = {'cv2': cv2_jpg, 'pil': pil_jpg} +def jpeg_from_key(img, compress_val, key): + method = jpeg_dict[key] + return method(img, compress_val) + + +# rz_dict = {'bilinear': Image.BILINEAR, + # 'bicubic': Image.BICUBIC, + # 'lanczos': Image.LANCZOS, + # 'nearest': Image.NEAREST} +rz_dict = {'bilinear': InterpolationMode.BILINEAR, + 'bicubic': InterpolationMode.BICUBIC, + 'lanczos': InterpolationMode.LANCZOS, + 'nearest': InterpolationMode.NEAREST} +def custom_resize(img, opt): + interp = sample_discrete(opt.rz_interp) + return TF.resize(img, (opt.loadSize,opt.loadSize), interpolation=rz_dict[interp]) diff --git a/detector_codes/Resnet50-main/log_test.log b/detector_codes/Resnet50-main/log_test.log new file mode 100644 index 0000000000000000000000000000000000000000..17c3d6ef34949e0a2026a974491feb7008533a53 --- /dev/null +++ b/detector_codes/Resnet50-main/log_test.log @@ -0,0 +1,236 @@ +2025-04-28 04:47:50,042 Model_path /data/ziqiang/yjz/code/Resnet50/checkpoints/4class-car-cat-chair-horse2025_04_24_10_12_23/model_epoch_80.pth +2025-04-28 04:47:52,448 AIGIBench +2025-04-28 04:47:52,448 2025-04-28 04:47:52 +2025-04-28 04:49:56,103 (0 R3GAN ) acc: 73.6; ap: 72.1; r_acc: 64.0; f_acc: 83.2 +2025-04-28 04:54:09,048 (1 IP-Adapter ) acc: 61.7; ap: 59.3; r_acc: 64.4; f_acc: 59.0 +2025-04-28 05:13:07,130 (2 SocialRF ) acc: 48.5; ap: 49.9; r_acc: 69.0; f_acc: 28.0 +2025-04-28 05:17:48,495 (3 CommunityAI ) acc: 54.9; ap: 68.4; r_acc: 99.8; f_acc: 10.1 +2025-04-28 05:22:45,740 (4 StyleGAN-XL ) acc: 77.7; ap: 82.0; r_acc: 64.3; f_acc: 91.0 +2025-04-28 05:32:50,077 (5 Midjourney ) acc: 47.5; ap: 50.2; r_acc: 31.4; f_acc: 63.7 +2025-04-28 05:37:20,590 (6 FLUX1-dev ) acc: 64.7; ap: 67.3; r_acc: 63.6; f_acc: 65.8 +2025-04-28 05:40:49,165 (7 E4S ) acc: 25.8; ap: 32.6; r_acc: 51.5; f_acc: 0.0 +2025-04-28 05:47:07,420 (8 Imagen3 ) acc: 58.7; ap: 61.7; r_acc: 65.0; f_acc: 52.4 +2025-04-28 05:51:18,278 (9 BLIP ) acc: 91.0; ap: 94.7; r_acc: 84.4; f_acc: 97.6 +2025-04-28 05:58:02,904 (10 SDXL ) acc: 76.1; ap: 81.9; r_acc: 64.6; f_acc: 87.6 +2025-04-28 06:03:14,660 (11 DALLE-3 ) acc: 61.8; ap: 63.9; r_acc: 65.8; f_acc: 57.8 +2025-04-28 06:04:56,346 (12 GLIDE ) acc: 58.7; ap: 60.3; r_acc: 70.5; f_acc: 47.0 +2025-04-28 06:07:43,724 (13 InSwap ) acc: 36.5; ap: 37.4; r_acc: 71.4; f_acc: 0.7 +2025-04-28 06:09:37,383 (14 FaceSwap ) acc: 35.5; ap: 35.9; r_acc: 70.2; f_acc: 0.1 +2025-04-28 06:12:52,981 (15 StyleSwim ) acc: 77.3; ap: 82.5; r_acc: 63.7; f_acc: 90.8 +2025-04-28 06:13:48,617 (16 ProGAN ) acc: 99.3; ap: 100.0; r_acc: 99.9; f_acc: 98.6 +2025-04-28 06:18:10,176 (17 BlendFace ) acc: 24.8; ap: 33.0; r_acc: 49.4; f_acc: 0.2 +2025-04-28 06:24:56,608 (18 PhotoMaker ) acc: 43.7; ap: 44.8; r_acc: 65.4; f_acc: 22.1 +2025-04-28 06:37:06,312 (19 SD3 ) acc: 58.3; ap: 60.6; r_acc: 64.6; f_acc: 52.0 +2025-04-28 06:43:53,002 (20 Infinite-ID ) acc: 59.7; ap: 62.8; r_acc: 64.1; f_acc: 55.3 +2025-04-28 06:44:17,477 (21 WFIR ) acc: 62.2; ap: 66.3; r_acc: 33.4; f_acc: 90.9 +2025-04-28 06:47:35,966 (22 SimSwap ) acc: 35.1; ap: 37.1; r_acc: 69.9; f_acc: 0.4 +2025-04-28 06:57:09,994 (23 InstantID ) acc: 72.5; ap: 77.9; r_acc: 64.8; f_acc: 80.1 +2025-04-28 07:00:36,210 (24 StyleGAN3 ) acc: 73.6; ap: 80.6; r_acc: 64.7; f_acc: 82.6 +2025-04-28 07:00:36,211 (25 Mean ) acc: 59.2; ap: 62.5; r_acc: 65.6; f_acc: 52.7 +2025-04-28 07:00:36,211 ************************* +2025-05-15 04:10:31,045 Model_path /data/ziqiang/yjz/code/Resnet50/checkpoints/4class-car-cat-chair-horse2025_04_24_10_12_23/model_epoch_80.pth +2025-05-15 04:10:31,247 jpeg +2025-05-15 04:10:31,247 2025-05-15 04:10:31 +2025-05-15 04:10:56,413 (0 R3GAN ) acc: 50.0; ap: 39.0; r_acc: 99.9; f_acc: 0.0 +2025-05-15 04:11:31,277 (1 IP-Adapter ) acc: 50.5; ap: 76.5; r_acc: 100.0; f_acc: 1.1 +2025-05-15 04:12:39,120 (2 SocialRF ) acc: 46.4; ap: 41.2; r_acc: 89.7; f_acc: 3.0 +2025-05-15 04:13:31,919 (3 CommunityAI ) acc: 50.1; ap: 57.0; r_acc: 100.0; f_acc: 0.3 +2025-05-15 04:14:08,239 (4 StyleGAN-XL ) acc: 50.0; ap: 50.3; r_acc: 100.0; f_acc: 0.0 +2025-05-15 04:14:34,769 (5 Midjourney ) acc: 50.2; ap: 58.9; r_acc: 99.9; f_acc: 0.5 +2025-05-15 04:15:11,963 (6 FLUX1-dev ) acc: 50.0; ap: 69.5; r_acc: 99.9; f_acc: 0.1 +2025-05-15 04:15:38,777 (7 E4S ) acc: 49.9; ap: 46.6; r_acc: 99.8; f_acc: 0.0 +2025-05-15 04:16:14,296 (8 Imagen3 ) acc: 50.0; ap: 58.4; r_acc: 100.0; f_acc: 0.1 +2025-05-15 04:16:40,356 (9 BLIP ) acc: 50.0; ap: 42.4; r_acc: 100.0; f_acc: 0.0 +2025-05-15 04:17:17,599 (10 SDXL ) acc: 49.9; ap: 40.2; r_acc: 99.9; f_acc: 0.1 +2025-05-15 04:17:52,570 (11 DALLE-3 ) acc: 51.2; ap: 80.5; r_acc: 100.0; f_acc: 2.4 +2025-05-15 04:18:16,772 (12 GLIDE ) acc: 50.0; ap: 57.5; r_acc: 100.0; f_acc: 0.0 +2025-05-15 04:18:37,580 (13 InSwap ) acc: 50.5; ap: 59.2; r_acc: 100.0; f_acc: 0.0 +2025-05-15 04:19:01,842 (14 FaceSwap ) acc: 50.5; ap: 53.1; r_acc: 99.9; f_acc: 0.0 +2025-05-15 04:19:38,379 (15 StyleSwim ) acc: 50.1; ap: 55.4; r_acc: 99.9; f_acc: 0.2 +2025-05-15 04:19:50,481 (16 ProGAN ) acc: 50.0; ap: 50.3; r_acc: 100.0; f_acc: 0.0 +2025-05-15 04:20:18,164 (17 BlendFace ) acc: 49.9; ap: 49.2; r_acc: 99.9; f_acc: 0.0 +2025-05-15 04:20:57,943 (18 PhotoMaker ) acc: 50.2; ap: 44.7; r_acc: 99.9; f_acc: 0.4 +2025-05-15 04:21:41,197 (19 SD3 ) acc: 50.0; ap: 66.4; r_acc: 99.9; f_acc: 0.3 +2025-05-15 04:22:20,632 (20 Infinite-ID ) acc: 51.1; ap: 81.2; r_acc: 99.9; f_acc: 2.7 +2025-05-15 04:22:28,757 (21 WFIR ) acc: 50.0; ap: 49.1; r_acc: 99.8; f_acc: 0.1 +2025-05-15 04:22:54,767 (22 SimSwap ) acc: 50.0; ap: 55.0; r_acc: 100.0; f_acc: 0.0 +2025-05-15 04:23:39,016 (23 InstantID ) acc: 53.8; ap: 79.5; r_acc: 100.0; f_acc: 7.7 +2025-05-15 04:24:09,200 (24 StyleGAN3 ) acc: 50.0; ap: 44.1; r_acc: 99.9; f_acc: 0.0 +2025-05-15 04:24:09,200 (25 Mean ) acc: 50.2; ap: 56.2; r_acc: 99.5; f_acc: 0.8 +2025-05-15 04:24:09,200 ************************* +2025-05-15 04:24:09,200 noise +2025-05-15 04:24:09,200 2025-05-15 04:24:09 +2025-05-15 04:25:26,573 (0 R3GAN ) acc: 38.6; ap: 50.7; r_acc: 77.1; f_acc: 0.0 +2025-05-15 04:28:18,203 (1 IP-Adapter ) acc: 65.2; ap: 67.3; r_acc: 76.9; f_acc: 53.6 +2025-05-15 04:37:51,004 (2 SocialRF ) acc: 44.3; ap: 45.5; r_acc: 53.5; f_acc: 35.0 +2025-05-15 04:41:26,662 (3 CommunityAI ) acc: 57.3; ap: 87.3; r_acc: 99.7; f_acc: 14.9 +2025-05-15 04:45:00,815 (4 StyleGAN-XL ) acc: 80.3; ap: 81.8; r_acc: 77.4; f_acc: 83.3 +2025-05-15 04:48:19,326 (5 Midjourney ) acc: 45.5; ap: 48.9; r_acc: 36.4; f_acc: 54.6 +2025-05-15 04:51:58,143 (6 FLUX1-dev ) acc: 67.5; ap: 69.9; r_acc: 77.0; f_acc: 57.9 +2025-05-15 04:53:53,861 (7 E4S ) acc: 32.1; ap: 42.6; r_acc: 64.1; f_acc: 0.0 +2025-05-15 04:58:26,364 (8 Imagen3 ) acc: 60.3; ap: 66.7; r_acc: 77.2; f_acc: 43.4 +2025-05-15 05:00:14,012 (9 BLIP ) acc: 75.3; ap: 98.1; r_acc: 99.3; f_acc: 51.4 +2025-05-15 05:04:35,139 (10 SDXL ) acc: 81.6; ap: 85.9; r_acc: 83.0; f_acc: 80.3 +2025-05-15 05:08:27,825 (11 DALLE-3 ) acc: 69.0; ap: 75.2; r_acc: 78.1; f_acc: 60.0 +2025-05-15 05:09:44,791 (12 GLIDE ) acc: 42.6; ap: 58.4; r_acc: 84.5; f_acc: 0.6 +2025-05-15 05:10:49,972 (13 InSwap ) acc: 43.5; ap: 59.8; r_acc: 85.6; f_acc: 0.4 +2025-05-15 05:12:16,209 (14 FaceSwap ) acc: 43.0; ap: 58.7; r_acc: 84.8; f_acc: 0.2 +2025-05-15 05:16:30,258 (15 StyleSwim ) acc: 80.3; ap: 81.1; r_acc: 77.1; f_acc: 83.5 +2025-05-15 05:17:26,410 (16 ProGAN ) acc: 51.2; ap: 58.8; r_acc: 96.8; f_acc: 5.7 +2025-05-15 05:19:46,536 (17 BlendFace ) acc: 30.2; ap: 40.2; r_acc: 60.2; f_acc: 0.3 +2025-05-15 05:24:32,244 (18 PhotoMaker ) acc: 51.0; ap: 58.6; r_acc: 77.6; f_acc: 24.4 +2025-05-15 05:30:50,980 (19 SD3 ) acc: 66.5; ap: 73.5; r_acc: 82.6; f_acc: 50.5 +2025-05-15 05:36:15,231 (20 Infinite-ID ) acc: 65.0; ap: 72.7; r_acc: 80.0; f_acc: 50.0 +2025-05-15 05:36:27,815 (21 WFIR ) acc: 50.8; ap: 54.1; r_acc: 93.7; f_acc: 8.0 +2025-05-15 05:37:34,735 (22 SimSwap ) acc: 42.5; ap: 57.7; r_acc: 84.6; f_acc: 0.3 +2025-05-15 05:42:29,253 (23 InstantID ) acc: 77.8; ap: 85.0; r_acc: 78.2; f_acc: 77.3 +2025-05-15 05:44:54,978 (24 StyleGAN3 ) acc: 62.8; ap: 65.1; r_acc: 68.5; f_acc: 57.1 +2025-05-15 05:44:54,978 (25 Mean ) acc: 57.0; ap: 65.7; r_acc: 78.2; f_acc: 35.7 +2025-05-15 05:44:54,978 ************************* +2025-05-15 05:44:54,978 sample +2025-05-15 05:44:54,978 2025-05-15 05:44:54 +2025-05-15 05:45:46,692 (0 R3GAN ) acc: 73.6; ap: 71.7; r_acc: 75.7; f_acc: 71.4 +2025-05-15 05:47:01,678 (1 IP-Adapter ) acc: 67.3; ap: 66.8; r_acc: 75.5; f_acc: 59.1 +2025-05-15 05:49:55,721 (2 SocialRF ) acc: 48.5; ap: 49.9; r_acc: 69.2; f_acc: 27.8 +2025-05-15 05:50:57,896 (3 CommunityAI ) acc: 54.8; ap: 70.0; r_acc: 99.8; f_acc: 9.8 +2025-05-15 05:52:01,006 (4 StyleGAN-XL ) acc: 83.6; ap: 85.6; r_acc: 76.2; f_acc: 91.0 +2025-05-15 05:52:34,075 (5 Midjourney ) acc: 48.5; ap: 51.0; r_acc: 32.5; f_acc: 64.4 +2025-05-15 05:53:16,431 (6 FLUX1-dev ) acc: 71.1; ap: 74.5; r_acc: 75.2; f_acc: 66.9 +2025-05-15 05:53:38,431 (7 E4S ) acc: 30.8; ap: 35.7; r_acc: 61.6; f_acc: 0.0 +2025-05-15 05:54:07,828 (8 Imagen3 ) acc: 64.8; ap: 69.5; r_acc: 76.0; f_acc: 53.5 +2025-05-15 05:54:22,244 (9 BLIP ) acc: 98.2; ap: 99.9; r_acc: 98.9; f_acc: 97.6 +2025-05-15 05:54:51,548 (10 SDXL ) acc: 84.8; ap: 87.5; r_acc: 82.0; f_acc: 87.6 +2025-05-15 05:55:19,115 (11 DALLE-3 ) acc: 67.3; ap: 71.7; r_acc: 76.3; f_acc: 58.2 +2025-05-15 05:55:36,134 (12 GLIDE ) acc: 67.6; ap: 73.3; r_acc: 83.9; f_acc: 51.2 +2025-05-15 05:55:53,019 (13 InSwap ) acc: 43.0; ap: 47.5; r_acc: 84.7; f_acc: 0.4 +2025-05-15 05:56:10,156 (14 FaceSwap ) acc: 42.6; ap: 45.0; r_acc: 84.2; f_acc: 0.1 +2025-05-15 05:56:39,812 (15 StyleSwim ) acc: 83.6; ap: 86.9; r_acc: 75.2; f_acc: 92.0 +2025-05-15 05:56:58,486 (16 ProGAN ) acc: 99.2; ap: 100.0; r_acc: 99.9; f_acc: 98.5 +2025-05-15 05:57:22,207 (17 BlendFace ) acc: 29.0; ap: 35.5; r_acc: 57.9; f_acc: 0.0 +2025-05-15 05:58:23,199 (18 PhotoMaker ) acc: 49.2; ap: 55.0; r_acc: 76.4; f_acc: 22.0 +2025-05-15 05:58:57,196 (19 SD3 ) acc: 67.4; ap: 73.3; r_acc: 82.0; f_acc: 52.7 +2025-05-15 05:59:28,478 (20 Infinite-ID ) acc: 67.1; ap: 72.9; r_acc: 78.8; f_acc: 55.4 +2025-05-15 05:59:35,399 (21 WFIR ) acc: 52.5; ap: 56.0; r_acc: 92.6; f_acc: 12.5 +2025-05-15 05:59:52,329 (22 SimSwap ) acc: 42.0; ap: 46.4; r_acc: 83.9; f_acc: 0.1 +2025-05-15 06:00:34,154 (23 InstantID ) acc: 78.2; ap: 83.0; r_acc: 76.2; f_acc: 80.2 +2025-05-15 06:00:59,017 (24 StyleGAN3 ) acc: 74.6; ap: 81.5; r_acc: 66.5; f_acc: 82.6 +2025-05-15 06:00:59,018 (25 Mean ) acc: 63.6; ap: 67.6; r_acc: 77.6; f_acc: 49.4 +2025-05-15 06:00:59,018 ************************* +2025-04-28 09:51:08,584 Model_path /data/ziqiang/yjz/code/Resnet50/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_25_13_59_12/model_epoch_80.pth +2025-04-28 09:51:19,143 AIGIBench +2025-04-28 09:51:19,143 2025-04-28 09:51:19 +2025-04-28 09:53:47,426 (0 R3GAN ) acc: 48.5; ap: 53.7; r_acc: 95.1; f_acc: 2.0 +2025-04-28 10:02:36,143 (1 IP-Adapter ) acc: 62.8; ap: 83.1; r_acc: 95.5; f_acc: 30.2 +2025-04-28 10:42:20,073 (2 SocialRF ) acc: 55.3; ap: 61.5; r_acc: 97.2; f_acc: 13.4 +2025-04-28 10:54:20,408 (3 CommunityAI ) acc: 52.5; ap: 64.2; r_acc: 100.0; f_acc: 5.1 +2025-04-28 10:59:14,570 (4 StyleGAN-XL ) acc: 60.0; ap: 76.7; r_acc: 95.0; f_acc: 25.1 +2025-04-28 11:12:40,692 (5 Midjourney ) acc: 52.5; ap: 57.4; r_acc: 89.5; f_acc: 15.5 +2025-04-28 11:20:18,203 (6 FLUX1-dev ) acc: 82.3; ap: 93.6; r_acc: 95.6; f_acc: 69.1 +2025-04-28 11:25:24,036 (7 E4S ) acc: 46.7; ap: 32.9; r_acc: 93.4; f_acc: 0.0 +2025-04-28 11:35:58,771 (8 Imagen3 ) acc: 61.9; ap: 78.6; r_acc: 95.8; f_acc: 27.9 +2025-04-28 11:41:15,189 (9 BLIP ) acc: 99.5; ap: 100.0; r_acc: 99.2; f_acc: 99.8 +2025-04-28 11:47:43,738 (10 SDXL ) acc: 72.8; ap: 89.8; r_acc: 95.3; f_acc: 50.4 +2025-04-28 11:53:29,103 (11 DALLE-3 ) acc: 53.7; ap: 68.4; r_acc: 95.5; f_acc: 11.8 +2025-04-28 11:57:41,532 (12 GLIDE ) acc: 79.3; ap: 93.4; r_acc: 96.2; f_acc: 62.4 +2025-04-28 12:01:35,807 (13 InSwap ) acc: 48.8; ap: 39.7; r_acc: 96.6; f_acc: 0.0 +2025-04-28 12:04:39,815 (14 FaceSwap ) acc: 48.8; ap: 39.8; r_acc: 96.5; f_acc: 0.0 +2025-04-28 12:09:09,682 (15 StyleSwim ) acc: 83.2; ap: 93.7; r_acc: 95.7; f_acc: 70.7 +2025-04-28 12:09:55,065 (16 ProGAN ) acc: 99.1; ap: 99.9; r_acc: 100.0; f_acc: 98.1 +2025-04-28 12:14:59,540 (17 BlendFace ) acc: 46.4; ap: 34.3; r_acc: 92.7; f_acc: 0.0 +2025-04-28 12:18:45,169 (18 PhotoMaker ) acc: 49.1; ap: 58.7; r_acc: 95.4; f_acc: 2.7 +2025-04-28 12:22:16,094 (19 SD3 ) acc: 64.2; ap: 83.7; r_acc: 95.3; f_acc: 33.1 +2025-04-28 12:25:10,868 (20 Infinite-ID ) acc: 49.9; ap: 62.6; r_acc: 95.7; f_acc: 4.0 +2025-04-28 12:26:24,364 (21 WFIR ) acc: 49.5; ap: 56.8; r_acc: 95.4; f_acc: 3.6 +2025-04-28 12:30:34,893 (22 SimSwap ) acc: 48.1; ap: 40.3; r_acc: 96.2; f_acc: 0.0 +2025-04-28 12:38:31,182 (23 InstantID ) acc: 61.0; ap: 80.7; r_acc: 95.3; f_acc: 26.8 +2025-04-28 12:44:19,059 (24 StyleGAN3 ) acc: 70.8; ap: 88.3; r_acc: 95.3; f_acc: 46.3 +2025-04-28 12:44:19,059 (25 Mean ) acc: 61.9; ap: 69.3; r_acc: 95.7; f_acc: 27.9 +2025-04-28 12:44:19,059 ************************* +2025-05-01 01:19:19,735 Model_path /data/ziqiang/yjz/code/Resnet50/checkpoints/5class-car-cat-chair-horse-sdv1.42025_04_25_13_59_12/model_epoch_80.pth +2025-05-01 01:19:20,197 jpeg +2025-05-01 01:19:20,197 2025-05-01 01:19:20 +2025-05-01 01:19:42,226 (0 R3GAN ) acc: 50.0; ap: 39.6; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:20:17,322 (1 IP-Adapter ) acc: 50.2; ap: 74.6; r_acc: 100.0; f_acc: 0.4 +2025-05-01 01:21:25,115 (2 SocialRF ) acc: 50.0; ap: 49.5; r_acc: 99.4; f_acc: 0.6 +2025-05-01 01:22:16,111 (3 CommunityAI ) acc: 50.0; ap: 50.0; r_acc: 100.0; f_acc: 0.1 +2025-05-01 01:22:51,817 (4 StyleGAN-XL ) acc: 50.0; ap: 46.0; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:23:18,252 (5 Midjourney ) acc: 50.0; ap: 65.7; r_acc: 100.0; f_acc: 0.1 +2025-05-01 01:23:54,113 (6 FLUX1-dev ) acc: 50.0; ap: 69.3; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:24:20,478 (7 E4S ) acc: 50.0; ap: 61.4; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:24:58,532 (8 Imagen3 ) acc: 50.0; ap: 61.2; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:25:25,523 (9 BLIP ) acc: 50.0; ap: 61.2; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:26:02,352 (10 SDXL ) acc: 49.9; ap: 42.0; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:26:36,928 (11 DALLE-3 ) acc: 50.6; ap: 81.7; r_acc: 100.0; f_acc: 1.2 +2025-05-01 01:27:00,468 (12 GLIDE ) acc: 50.0; ap: 62.2; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:27:24,424 (13 InSwap ) acc: 50.6; ap: 72.6; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:27:48,234 (14 FaceSwap ) acc: 50.6; ap: 67.0; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:28:24,502 (15 StyleSwim ) acc: 50.0; ap: 52.1; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:28:36,684 (16 ProGAN ) acc: 50.0; ap: 49.2; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:29:03,695 (17 BlendFace ) acc: 49.9; ap: 69.9; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:29:41,774 (18 PhotoMaker ) acc: 50.0; ap: 51.3; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:30:21,875 (19 SD3 ) acc: 49.9; ap: 66.7; r_acc: 100.0; f_acc: 0.1 +2025-05-01 01:31:00,245 (20 Infinite-ID ) acc: 50.0; ap: 80.1; r_acc: 100.0; f_acc: 0.3 +2025-05-01 01:31:08,013 (21 WFIR ) acc: 50.0; ap: 44.9; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:31:31,876 (22 SimSwap ) acc: 50.0; ap: 70.2; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:32:13,638 (23 InstantID ) acc: 50.3; ap: 65.8; r_acc: 100.0; f_acc: 0.6 +2025-05-01 01:32:47,284 (24 StyleGAN3 ) acc: 50.0; ap: 49.6; r_acc: 100.0; f_acc: 0.0 +2025-05-01 01:32:47,284 (25 Mean ) acc: 50.1; ap: 60.1; r_acc: 100.0; f_acc: 0.1 +2025-05-01 01:32:47,284 ************************* +2025-05-01 01:32:47,284 noise +2025-05-01 01:32:47,284 2025-05-01 01:32:47 +2025-05-01 01:34:06,277 (0 R3GAN ) acc: 49.6; ap: 46.0; r_acc: 99.2; f_acc: 0.0 +2025-05-01 01:37:09,689 (1 IP-Adapter ) acc: 54.9; ap: 85.1; r_acc: 99.0; f_acc: 10.9 +2025-05-01 01:47:14,955 (2 SocialRF ) acc: 49.9; ap: 47.1; r_acc: 90.2; f_acc: 9.6 +2025-05-01 01:50:35,220 (3 CommunityAI ) acc: 51.5; ap: 93.9; r_acc: 100.0; f_acc: 2.9 +2025-05-01 01:53:52,073 (4 StyleGAN-XL ) acc: 50.3; ap: 71.6; r_acc: 99.1; f_acc: 1.5 +2025-05-01 01:56:54,153 (5 Midjourney ) acc: 50.1; ap: 49.6; r_acc: 97.9; f_acc: 2.4 +2025-05-01 02:00:10,331 (6 FLUX1-dev ) acc: 52.8; ap: 81.5; r_acc: 99.1; f_acc: 6.5 +2025-05-01 02:01:55,188 (7 E4S ) acc: 49.3; ap: 38.0; r_acc: 98.6; f_acc: 0.0 +2025-05-01 02:06:07,987 (8 Imagen3 ) acc: 50.1; ap: 65.9; r_acc: 99.1; f_acc: 1.1 +2025-05-01 02:07:47,870 (9 BLIP ) acc: 57.6; ap: 99.3; r_acc: 100.0; f_acc: 15.2 +2025-05-01 02:11:41,802 (10 SDXL ) acc: 51.3; ap: 82.6; r_acc: 99.3; f_acc: 3.3 +2025-05-01 02:15:15,302 (11 DALLE-3 ) acc: 54.2; ap: 81.2; r_acc: 99.1; f_acc: 9.2 +2025-05-01 02:16:30,497 (12 GLIDE ) acc: 49.9; ap: 56.1; r_acc: 99.4; f_acc: 0.4 +2025-05-01 02:17:39,388 (13 InSwap ) acc: 50.3; ap: 50.9; r_acc: 99.6; f_acc: 0.0 +2025-05-01 02:18:58,129 (14 FaceSwap ) acc: 50.3; ap: 49.0; r_acc: 99.4; f_acc: 0.0 +2025-05-01 02:22:28,755 (15 StyleSwim ) acc: 53.2; ap: 82.1; r_acc: 99.3; f_acc: 7.1 +2025-05-01 02:23:13,737 (16 ProGAN ) acc: 49.9; ap: 45.9; r_acc: 99.9; f_acc: 0.0 +2025-05-01 02:25:30,538 (17 BlendFace ) acc: 49.2; ap: 37.6; r_acc: 98.4; f_acc: 0.0 +2025-05-01 02:29:01,704 (18 PhotoMaker ) acc: 52.0; ap: 80.7; r_acc: 99.0; f_acc: 5.0 +2025-05-01 02:32:42,050 (19 SD3 ) acc: 51.1; ap: 79.7; r_acc: 99.4; f_acc: 2.9 +2025-05-01 02:36:21,909 (20 Infinite-ID ) acc: 51.1; ap: 74.3; r_acc: 99.1; f_acc: 3.1 +2025-05-01 02:36:31,885 (21 WFIR ) acc: 50.0; ap: 46.5; r_acc: 99.9; f_acc: 0.0 +2025-05-01 02:37:37,867 (22 SimSwap ) acc: 49.7; ap: 52.6; r_acc: 99.4; f_acc: 0.0 +2025-05-01 02:42:44,551 (23 InstantID ) acc: 61.2; ap: 90.5; r_acc: 99.3; f_acc: 23.2 +2025-05-01 02:45:52,812 (24 StyleGAN3 ) acc: 50.3; ap: 64.4; r_acc: 98.8; f_acc: 1.8 +2025-05-01 02:45:52,812 (25 Mean ) acc: 51.6; ap: 66.1; r_acc: 98.8; f_acc: 4.2 +2025-05-01 02:45:52,812 ************************* +2025-05-01 02:45:52,812 sample +2025-05-01 02:45:52,812 2025-05-01 02:45:52 +2025-05-01 02:46:38,735 (0 R3GAN ) acc: 48.6; ap: 52.9; r_acc: 96.0; f_acc: 1.2 +2025-05-01 02:47:51,231 (1 IP-Adapter ) acc: 64.6; ap: 86.4; r_acc: 95.9; f_acc: 33.3 +2025-05-01 02:50:21,884 (2 SocialRF ) acc: 55.3; ap: 61.5; r_acc: 97.2; f_acc: 13.3 +2025-05-01 02:51:36,538 (3 CommunityAI ) acc: 52.6; ap: 66.3; r_acc: 100.0; f_acc: 5.2 +2025-05-01 02:52:55,218 (4 StyleGAN-XL ) acc: 61.4; ap: 81.3; r_acc: 95.6; f_acc: 27.2 +2025-05-01 02:53:59,615 (5 Midjourney ) acc: 53.0; ap: 57.5; r_acc: 88.9; f_acc: 17.2 +2025-05-01 02:55:12,241 (6 FLUX1-dev ) acc: 84.4; ap: 95.3; r_acc: 96.1; f_acc: 72.8 +2025-05-01 02:56:01,231 (7 E4S ) acc: 46.7; ap: 35.6; r_acc: 93.5; f_acc: 0.0 +2025-05-01 02:57:28,526 (8 Imagen3 ) acc: 58.5; ap: 79.4; r_acc: 95.8; f_acc: 21.3 +2025-05-01 02:58:11,257 (9 BLIP ) acc: 98.9; ap: 100.0; r_acc: 100.0; f_acc: 97.9 +2025-05-01 02:59:24,464 (10 SDXL ) acc: 74.6; ap: 92.6; r_acc: 96.6; f_acc: 52.6 +2025-05-01 03:00:36,820 (11 DALLE-3 ) acc: 55.2; ap: 74.8; r_acc: 95.6; f_acc: 14.8 +2025-05-01 03:01:15,502 (12 GLIDE ) acc: 67.1; ap: 87.7; r_acc: 97.0; f_acc: 37.1 +2025-05-01 03:01:54,675 (13 InSwap ) acc: 49.1; ap: 47.4; r_acc: 97.1; f_acc: 0.0 +2025-05-01 03:02:33,139 (14 FaceSwap ) acc: 48.9; ap: 45.9; r_acc: 96.8; f_acc: 0.0 +2025-05-01 03:03:45,801 (15 StyleSwim ) acc: 83.8; ap: 95.0; r_acc: 95.8; f_acc: 71.7 +2025-05-01 03:04:13,890 (16 ProGAN ) acc: 88.1; ap: 99.8; r_acc: 100.0; f_acc: 76.2 +2025-05-01 03:05:07,665 (17 BlendFace ) acc: 46.3; ap: 36.0; r_acc: 92.5; f_acc: 0.0 +2025-05-01 03:06:32,018 (18 PhotoMaker ) acc: 50.0; ap: 68.2; r_acc: 95.5; f_acc: 4.5 +2025-05-01 03:07:56,368 (19 SD3 ) acc: 66.6; ap: 89.1; r_acc: 96.6; f_acc: 36.6 +2025-05-01 03:09:16,975 (20 Infinite-ID ) acc: 50.6; ap: 70.5; r_acc: 96.3; f_acc: 4.8 +2025-05-01 03:09:26,472 (21 WFIR ) acc: 50.0; ap: 45.3; r_acc: 100.0; f_acc: 0.0 +2025-05-01 03:10:06,386 (22 SimSwap ) acc: 48.4; ap: 46.0; r_acc: 96.8; f_acc: 0.0 +2025-05-01 03:11:54,637 (23 InstantID ) acc: 62.3; ap: 84.4; r_acc: 95.7; f_acc: 28.9 +2025-05-01 03:13:07,446 (24 StyleGAN3 ) acc: 70.2; ap: 87.7; r_acc: 95.1; f_acc: 45.2 +2025-05-01 03:13:07,447 (25 Mean ) acc: 61.4; ap: 71.5; r_acc: 96.3; f_acc: 26.5 +2025-05-01 03:13:07,447 ************************* diff --git a/detector_codes/Resnet50-main/networks/__init__.py b/detector_codes/Resnet50-main/networks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/Resnet50-main/networks/base_model.py b/detector_codes/Resnet50-main/networks/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..997779b78162ea8d17b4d03c24db27062e0a031e --- /dev/null +++ b/detector_codes/Resnet50-main/networks/base_model.py @@ -0,0 +1,99 @@ +# from pix2pix +import os + +import torch +import torch.nn as nn +from torch.nn import init + + +class BaseModel(nn.Module): + def __init__(self, opt): + super(BaseModel, self).__init__() + self.opt = opt + self.total_steps = 0 + self.isTrain = opt.isTrain + self.lr = opt.lr + self.save_dir = os.path.join(opt.checkpoints_dir, opt.name) + self.device = ( + torch.device('cuda:{}'.format(opt.gpu_ids[0])) + if opt.gpu_ids + else torch.device('cpu') + ) + + def save_networks(self, epoch): + save_filename = 'model_epoch_%s.pth' % epoch + save_path = os.path.join(self.save_dir, save_filename) + + # serialize model and optimizer to dict + # state_dict = { + # 'model': self.model.state_dict(), + # 'optimizer' : self.optimizer.state_dict(), + # 'total_steps' : self.total_steps, + # } + + torch.save(self.model.state_dict(), save_path) + print(f'Saving model {save_path}') + + # load models from the disk + def load_networks(self, epoch): + load_filename = 'model_epoch_%s.pth' % epoch + load_path = os.path.join(self.save_dir, load_filename) + + print('loading the model from %s' % load_path) + # if you are using PyTorch newer than 0.4 (e.g., built from + # GitHub source), you can remove str() on self.device + state_dict = torch.load(load_path, map_location=self.device) + if hasattr(state_dict, '_metadata'): + del state_dict._metadata + + self.model.load_state_dict(state_dict['model']) + self.total_steps = state_dict['total_steps'] + + if self.isTrain and not self.opt.new_optim: + self.optimizer.load_state_dict(state_dict['optimizer']) + ### move optimizer state to GPU + for state in self.optimizer.state.values(): + for k, v in state.items(): + if torch.is_tensor(v): + state[k] = v.to(self.device) + + for g in self.optimizer.param_groups: + g['lr'] = self.opt.lr + + def eval(self): + self.model.eval() + + def train(self): + self.model.train() + + def test(self): + with torch.no_grad(): + self.forward() + + +def init_weights(net, init_type='normal', gain=0.02): + def init_func(m): + classname = m.__class__.__name__ + if hasattr(m, 'weight') and ( + classname.find('Conv') != -1 or classname.find('Linear') != -1 + ): + if init_type == 'normal': + init.normal_(m.weight.data, 0.0, gain) + elif init_type == 'xavier': + init.xavier_normal_(m.weight.data, gain=gain) + elif init_type == 'kaiming': + init.kaiming_normal_(m.weight.data, a=0, mode='fan_in') + elif init_type == 'orthogonal': + init.orthogonal_(m.weight.data, gain=gain) + else: + raise NotImplementedError( + 'initialization method [%s] is not implemented' % init_type + ) + if hasattr(m, 'bias') and m.bias is not None: + init.constant_(m.bias.data, 0.0) + elif classname.find('BatchNorm2d') != -1: + init.normal_(m.weight.data, 1.0, gain) + init.constant_(m.bias.data, 0.0) + + print('initialize network with %s' % init_type) + net.apply(init_func) diff --git a/detector_codes/Resnet50-main/networks/resnet.py b/detector_codes/Resnet50-main/networks/resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..175dd4a1e24abdab8d557a52125a750e6f8d36d4 --- /dev/null +++ b/detector_codes/Resnet50-main/networks/resnet.py @@ -0,0 +1,221 @@ +import torch.nn as nn +import torch.utils.model_zoo as model_zoo + +__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', 'resnet152'] + + +model_urls = { + 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', + 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth', + 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth', + 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth', + 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', +} + + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d( + in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False + ) + + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(BasicBlock, self).__init__() + self.conv1 = conv3x3(inplanes, planes, stride) + self.bn1 = nn.BatchNorm2d(planes) + self.relu = nn.ReLU(inplace=True) + self.conv2 = conv3x3(planes, planes) + self.bn2 = nn.BatchNorm2d(planes) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(Bottleneck, self).__init__() + self.conv1 = conv1x1(inplanes, planes) + self.bn1 = nn.BatchNorm2d(planes) + self.conv2 = conv3x3(planes, planes, stride) + self.bn2 = nn.BatchNorm2d(planes) + self.conv3 = conv1x1(planes, planes * self.expansion) + self.bn3 = nn.BatchNorm2d(planes * self.expansion) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class ResNet(nn.Module): + def __init__(self, block, layers, num_classes=1, zero_init_residual=False): + super(ResNet, self).__init__() + + self.unfoldSize = 2 + self.unfoldIndex = 0 + assert self.unfoldSize > 1 + assert ( + -1 < self.unfoldIndex + and self.unfoldIndex < self.unfoldSize * self.unfoldSize + ) + self.inplanes = 64 + self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1, bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + # self.fc1 = nn.Linear(512 * block.expansion, 1) + self.fc1 = nn.Linear(512, num_classes) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, nn.BatchNorm2d): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + + # Zero-initialize the last BN in each residual branch, + # so that the residual branch starts with zeros, and each residual block behaves like an identity. + # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + nn.init.constant_(m.bn3.weight, 0) + elif isinstance(m, BasicBlock): + nn.init.constant_(m.bn2.weight, 0) + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + conv1x1(self.inplanes, planes * block.expansion, stride), + nn.BatchNorm2d(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc1(x) + + return x + + +def resnet18(pretrained=False, **kwargs): + """Constructs a ResNet-18 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [2, 2, 2, 2], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet18'])) + return model + + +def resnet34(pretrained=False, **kwargs): + """Constructs a ResNet-34 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet34'])) + return model + + +def resnet50(pretrained=False, **kwargs): + """Constructs a ResNet-50 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet50'])) + return model + + +def resnet101(pretrained=False, **kwargs): + """Constructs a ResNet-101 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 23, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet101'])) + return model + + +def resnet152(pretrained=False, **kwargs): + """Constructs a ResNet-152 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 8, 36, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet152'])) + return model diff --git a/detector_codes/Resnet50-main/networks/trainer.py b/detector_codes/Resnet50-main/networks/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..80cf7571116ff297e70aa3390234ee1ae5fac521 --- /dev/null +++ b/detector_codes/Resnet50-main/networks/trainer.py @@ -0,0 +1,70 @@ +import torch +import torch.nn as nn + +from networks.base_model import BaseModel +from networks.resnet import resnet50 + + +class Trainer(BaseModel): + def name(self): + return 'Trainer' + + def __init__(self, opt): + super(Trainer, self).__init__(opt) + + if self.isTrain and not opt.continue_train: + self.model = resnet50(pretrained=False, num_classes=1) + + if not self.isTrain or opt.continue_train: + self.model = resnet50(num_classes=1) + + if self.isTrain: + self.loss_fn = nn.BCEWithLogitsLoss() + # initialize optimizers + if opt.optim == 'adam': + self.optimizer = torch.optim.Adam( + filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, + betas=(opt.beta1, 0.999), + ) + elif opt.optim == 'sgd': + self.optimizer = torch.optim.SGD( + filter(lambda p: p.requires_grad, self.model.parameters()), + lr=opt.lr, + momentum=0.0, + weight_decay=0, + ) + else: + raise ValueError('optim should be [adam, sgd]') + + if not self.isTrain or opt.continue_train: + self.load_networks(opt.epoch) + self.model.to(opt.gpu_ids[0]) + + def adjust_learning_rate(self, min_lr=1e-6): + for param_group in self.optimizer.param_groups: + param_group['lr'] *= 0.9 + if param_group['lr'] < min_lr: + return False + self.lr = param_group['lr'] + print('*' * 25) + print(f'Changing lr from {param_group["lr"] / 0.9} to {param_group["lr"]}') + print('*' * 25) + return True + + def set_input(self, input): + self.input = input[0].to(self.device) + self.label = input[1].to(self.device).float() + + def forward(self): + self.output = self.model(self.input) + + def get_loss(self): + return self.loss_fn(self.output.squeeze(1), self.label) + + def optimize_parameters(self): + self.forward() + self.loss = self.loss_fn(self.output.squeeze(1), self.label) + self.optimizer.zero_grad() + self.loss.backward() + self.optimizer.step() diff --git a/detector_codes/Resnet50-main/options/__init__.py b/detector_codes/Resnet50-main/options/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/Resnet50-main/options/base_options.py b/detector_codes/Resnet50-main/options/base_options.py new file mode 100644 index 0000000000000000000000000000000000000000..d20ed23c4c86681adc5bfdde47f614c41e723a3f --- /dev/null +++ b/detector_codes/Resnet50-main/options/base_options.py @@ -0,0 +1,187 @@ +import argparse +import os +import time + +import torch +import util + +# import models +# import data + + +class BaseOptions: + def __init__(self): + self.initialized = False + + def initialize(self, parser): + parser.add_argument('--mode', default='binary') + parser.add_argument( + '--arch', + type=str, + default='res50', + help='architecture for binary classification', + ) + + # data augmentation + parser.add_argument('--rz_interp', default='bilinear') + parser.add_argument('--blur_prob', type=float, default=0) + parser.add_argument('--blur_sig', default='0.5') + parser.add_argument('--jpg_prob', type=float, default=0) + parser.add_argument('--jpg_method', default='cv2') + parser.add_argument('--jpg_qual', default='75') + + parser.add_argument( + '--dataroot', + default='./dataset/', + help='path to images (should have subfolders trainA, trainB, valA, valB, etc)', + ) + parser.add_argument('--classes', default='', help='image classes to train on') + parser.add_argument('--class_bal', action='store_true') + parser.add_argument( + '--batch_size', type=int, default=128, help='input batch size' + ) + parser.add_argument( + '--loadSize', type=int, default=256, help='scale images to this size' + ) + parser.add_argument( + '--cropSize', type=int, default=224, help='then crop to this size' + ) + parser.add_argument( + '--gpu_ids', + type=str, + default='0', + help='gpu ids: e.g. 0 0,1,2, 0,2. use -1 for CPU', + ) + parser.add_argument( + '--name', + type=str, + default='experiment_name', + help='name of the experiment. It decides where to store samples and models', + ) + parser.add_argument( + '--epoch', + type=str, + default='latest', + help='which epoch to load? set to latest to use latest cached model', + ) + parser.add_argument( + '--num_threads', default=8, type=int, help='# threads for loading data' + ) + parser.add_argument( + '--checkpoints_dir', + type=str, + default='./checkpoints', + help='models are saved here', + ) + parser.add_argument( + '--serial_batches', + action='store_true', + help='if true, takes images in order to make batches, otherwise takes them randomly', + ) + parser.add_argument( + '--resize_or_crop', + type=str, + default='scale_and_crop', + help='scaling and cropping of images at load time [resize_and_crop|crop|scale_width|scale_width_and_crop|none]', + ) + parser.add_argument( + '--no_flip', + action='store_true', + help='if specified, do not flip the images for data augmentation', + ) + parser.add_argument( + '--init_type', + type=str, + default='normal', + help='network initialization [normal|xavier|kaiming|orthogonal]', + ) + parser.add_argument( + '--init_gain', + type=float, + default=0.02, + help='scaling factor for normal, xavier and orthogonal.', + ) + parser.add_argument( + '--suffix', + default='', + type=str, + help='customized suffix: opt.name = opt.name + suffix: e.g., {model}_{netG}_size{loadSize}', + ) + parser.add_argument( + '--delr_freq', type=int, default=10, help='frequency of changing lr' + ) + + self.initialized = True + return parser + + def gather_options(self): + # initialize parser with basic options + if not self.initialized: + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) + parser = self.initialize(parser) + + # get the basic options + opt, _ = parser.parse_known_args() + self.parser = parser + + return opt # parser.parse_args() + + def print_options(self, opt): + message = '' + message += '----------------- Options ---------------\n' + for k, v in sorted(vars(opt).items()): + comment = '' + default = self.parser.get_default(k) + if v != default: + comment = '\t[default: %s]' % str(default) + message += '{:>25}: {:<30}{}\n'.format(str(k), str(v), comment) + message += '----------------- End -------------------' + print(message) + + # save to the disk + + expr_dir = os.path.join(opt.checkpoints_dir, opt.name) + util.mkdirs(expr_dir) + file_name = os.path.join(expr_dir, 'opt.txt') + with open(file_name, 'wt') as opt_file: + opt_file.write(message) + opt_file.write('\n') + + def parse(self, print_options=True): + + opt = self.gather_options() + opt.isTrain = self.isTrain # train or test + opt.name = opt.name + time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime()) + # process opt.suffix + if opt.suffix: + suffix = ('_' + opt.suffix.format(**vars(opt))) if opt.suffix != '' else '' + opt.name = opt.name + suffix + + if print_options: + self.print_options(opt) + + # set gpu ids + str_ids = opt.gpu_ids.split(',') + opt.gpu_ids = [] + for str_id in str_ids: + id = int(str_id) + if id >= 0: + opt.gpu_ids.append(id) + if len(opt.gpu_ids) > 0: + torch.cuda.set_device(opt.gpu_ids[0]) + + # additional + opt.classes = opt.classes.split(',') + opt.rz_interp = opt.rz_interp.split(',') + opt.blur_sig = [float(s) for s in opt.blur_sig.split(',')] + opt.jpg_method = opt.jpg_method.split(',') + opt.jpg_qual = [int(s) for s in opt.jpg_qual.split(',')] + if len(opt.jpg_qual) == 2: + opt.jpg_qual = list(range(opt.jpg_qual[0], opt.jpg_qual[1] + 1)) + elif len(opt.jpg_qual) > 2: + raise ValueError("Shouldn't have more than 2 values for --jpg_qual.") + + self.opt = opt + return self.opt diff --git a/detector_codes/Resnet50-main/options/test_options.py b/detector_codes/Resnet50-main/options/test_options.py new file mode 100644 index 0000000000000000000000000000000000000000..ed2e8622e1cf148df3eadab6c6530f8a3a4a02ff --- /dev/null +++ b/detector_codes/Resnet50-main/options/test_options.py @@ -0,0 +1,23 @@ +from .base_options import BaseOptions + + +class TestOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + # parser.add_argument('--dataroot') + parser.add_argument('--model_path') + parser.add_argument('--no_resize', action='store_true') + parser.add_argument('--no_crop', action='store_true') + parser.add_argument( + '--eval', action='store_true', help='use eval mode during test time.' + ) + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument( + '--lr', type=float, default=0.00002, help='initial learning rate for adam' + ) + parser.add_argument( + '--niter', type=int, default=0, help='# of iter at starting learning rate' + ) + + self.isTrain = False + return parser diff --git a/detector_codes/Resnet50-main/options/train_options.py b/detector_codes/Resnet50-main/options/train_options.py new file mode 100644 index 0000000000000000000000000000000000000000..c77e3e033efc668172c62939bf51cd0a986c0128 --- /dev/null +++ b/detector_codes/Resnet50-main/options/train_options.py @@ -0,0 +1,75 @@ +from .base_options import BaseOptions + + +class TrainOptions(BaseOptions): + def initialize(self, parser): + parser = BaseOptions.initialize(self, parser) + parser.add_argument('--earlystop_epoch', type=int, default=15) + parser.add_argument( + '--data_aug', + action='store_true', + help='if specified, perform additional data augmentation (photometric, blurring, jpegging)', + ) + parser.add_argument( + '--optim', type=str, default='adam', help='optim to use [sgd, adam]' + ) + parser.add_argument( + '--new_optim', + action='store_true', + help='new optimizer instead of loading the optim state', + ) + parser.add_argument( + '--loss_freq', + type=int, + default=400, + help='frequency of showing loss on tensorboard', + ) + parser.add_argument( + '--save_latest_freq', + type=int, + default=2000, + help='frequency of saving the latest results', + ) + parser.add_argument( + '--save_epoch_freq', + type=int, + default=5, + help='frequency of saving checkpoints at the end of epochs', + ) + parser.add_argument( + '--continue_train', + action='store_true', + help='continue training: load the latest model', + ) + parser.add_argument( + '--epoch_count', + type=int, + default=1, + help='the starting epoch count, we save the model by , +, ...', + ) + parser.add_argument( + '--last_epoch', + type=int, + default=-1, + help='starting epoch count for scheduler intialization', + ) + parser.add_argument( + '--train_split', type=str, default='train', help='train, val, test, etc' + ) + parser.add_argument( + '--val_split', type=str, default='val', help='train, val, test, etc' + ) + parser.add_argument( + '--niter', type=int, default=101, help='# of iter at starting learning rate' + ) + parser.add_argument( + '--beta1', type=float, default=0.9, help='momentum term of adam' + ) + parser.add_argument( + '--lr', type=float, default=0.0002, help='initial learning rate for adam' + ) + # parser.add_argument('--model_path') + # parser.add_argument('--no_resize', action='store_true') + # parser.add_argument('--no_crop', action='store_true') + self.isTrain = True + return parser diff --git a/detector_codes/Resnet50-main/requirements.txt b/detector_codes/Resnet50-main/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..5229c276fd6097939ede4e2f015a95352cb177ec --- /dev/null +++ b/detector_codes/Resnet50-main/requirements.txt @@ -0,0 +1,7 @@ +scipy +scikit-learn +numpy +opencv_python +Pillow +torch>=1.2.0 +torchvision diff --git a/detector_codes/Resnet50-main/test.py b/detector_codes/Resnet50-main/test.py new file mode 100644 index 0000000000000000000000000000000000000000..734e7ef4e24d38dca7ad59897d94f98c3968ad12 --- /dev/null +++ b/detector_codes/Resnet50-main/test.py @@ -0,0 +1,111 @@ +import logging +import os +import random +import time + +import numpy as np +import torch +from data import create_dataloader +from networks.resnet import resnet50 +from options.test_options import TestOptions +from util import printSet +from validate import validate + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if you are using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +seed_torch(100) + +DetectionTests = { + # 'AIGIBench': { 'dataroot': '/data/ziqiang/Benchmark', + # 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + # 'no_crop': True, + # }, + 'jpeg': { + 'dataroot': '/data/ziqiang/jpeg', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'noise': { + 'dataroot': '/data/ziqiang/noise', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, + 'sample': { + 'dataroot': '/data/ziqiang/sample', + 'no_resize': False, # Due to the different shapes of images in the dataset, resizing is required during batch detection. + 'no_crop': True, + }, +} + + +# Set up logging +logging.basicConfig( + filename='log_test.log', level=logging.INFO, format='%(asctime)s %(message)s' +) +logger = logging.getLogger() + +opt = TestOptions().parse(print_options=False) +log_msg = f'Model_path {opt.model_path}' +print(log_msg) +logger.info(log_msg) + +# Get model +model = resnet50(num_classes=1) +model.load_state_dict(torch.load(opt.model_path), strict=True) +model.cuda() +model.eval() + +for testSet in DetectionTests.keys(): + dataroot = DetectionTests[testSet]['dataroot'] + printSet(testSet) + logger.info(testSet) + + accs = [] + aps = [] + r_accs = [] + f_accs = [] + current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + print(current_time) + logger.info(current_time) + + for v_id, val in enumerate(os.listdir(dataroot)): + opt.dataroot = '{}/{}'.format(dataroot, val) + opt.classes = '' # os.listdir(opt.dataroot) if multiclass[v_id] else [''] + opt.no_resize = DetectionTests[testSet]['no_resize'] + opt.no_crop = DetectionTests[testSet]['no_crop'] + dataloader = create_dataloader(opt) + acc, ap, r_acc, f_acc, _, _ = validate(model, dataloader) + accs.append(acc) + aps.append(ap) + r_accs.append(r_acc) + f_accs.append(f_acc) + log_msg = ( + '({} {:12}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id, val, acc * 100, ap * 100, r_acc * 100, f_acc * 100 + ) + ) + print(log_msg) + logger.info(log_msg) + + mean_acc = np.array(accs).mean() * 100 + mean_ap = np.array(aps).mean() * 100 + mean_r_acc = np.array(r_accs).mean() * 100 + mean_f_acc = np.array(f_accs).mean() * 100 + log_msg = '({} {:10}) acc: {:.1f}; ap: {:.1f}; r_acc: {:.1f}; f_acc: {:.1f}'.format( + v_id + 1, 'Mean', mean_acc, mean_ap, mean_r_acc, mean_f_acc + ) + print(log_msg) + logger.info(log_msg) + print('*' * 25) + logger.info('*' * 25) diff --git a/detector_codes/Resnet50-main/train.py b/detector_codes/Resnet50-main/train.py new file mode 100644 index 0000000000000000000000000000000000000000..d7c7c58c6462c20b2f18017efafe3258b50dab38 --- /dev/null +++ b/detector_codes/Resnet50-main/train.py @@ -0,0 +1,124 @@ +import logging +import os +import random +import sys +import time + +import numpy as np +import torch +from data import create_dataloader +from networks.trainer import Trainer +from options.train_options import TrainOptions +from tensorboardX import SummaryWriter +from util import Logger +from validate import validate + + +def seed_torch(seed=1029): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # if using multi-GPU. + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.enabled = False + + +def get_val_opt(): + val_opt = TrainOptions().parse(print_options=False) + val_opt.isTrain = False + val_opt.no_resize = False + val_opt.no_crop = False + val_opt.serial_batches = True + return val_opt + + +if __name__ == '__main__': + opt = TrainOptions().parse() + seed_torch(100) + opt.dataroot = f'{opt.dataroot}/{opt.train_split}/' + Logger(os.path.join(opt.checkpoints_dir, opt.name, 'logging.log')) + print(' '.join(list(sys.argv))) + val_opt = get_val_opt() + val_opt.dataroot = f'{val_opt.dataroot}/{val_opt.val_split}/' + + data_loader = create_dataloader(opt) + val_loader = create_dataloader(val_opt) + + train_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'train')) + val_writer = SummaryWriter(os.path.join(opt.checkpoints_dir, opt.name, 'val')) + + model = Trainer(opt) + model.train() + + # Configure logger + logging.basicConfig( + level=logging.INFO, # Set logging level + format='%(asctime)s - %(levelname)s - %(message)s', # Log format + datefmt='%Y-%m-%d %H:%M:%S', # Date format without milliseconds + handlers=[ + logging.FileHandler('log.log', mode='w'), # Log file output + logging.StreamHandler(), + ], + ) # Console output + + logger = logging.getLogger(__name__) + + print(f'cwd: {os.getcwd()}') + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} Length of data loader: {len(data_loader)}' + ) + logger.info(f'Length of data loader: {len(data_loader)}') + + for epoch in range(opt.niter): + for i, data in enumerate(data_loader): + model.total_steps += 1 + + # Move data to cuda + model.set_input(data) + # Train + model.optimize_parameters() + + if model.total_steps % opt.loss_freq == 0: + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}' + ) + logger.info( + f'Train loss: {model.loss} at step: {model.total_steps} lr {model.lr}' + ) + train_writer.add_scalar('loss', model.loss, model.total_steps) + + if epoch == 0 or epoch % opt.save_epoch_freq == 0: + # if epoch == 0: + # Optionally save model at each epoch + print(f'saving the model at the end of epoch {epoch}') + logger.info(f'saving the model at the end of epoch {epoch}') + model.save_networks(epoch) + + if epoch % 10 == 0 and epoch != 0: + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} changing lr at the end of epoch {epoch}, iters {model.total_steps}' + ) + logger.info( + f'changing lr at the end of epoch {epoch}, iters {model.total_steps}' + ) + model.adjust_learning_rate() + + # Validation + model.eval() + acc, ap, r_acc, f_acc, _, _ = validate(model.model, val_loader) + val_writer.add_scalar('accuracy', acc, model.total_steps) + val_writer.add_scalar('ap', ap, model.total_steps) + print( + f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} (Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}' + ) + logger.info( + f'(Val @ epoch {epoch}) acc: {acc}; ap: {ap} r_acc: {r_acc}; f_acc: {f_acc}' + ) + + model.train() + + model.eval() + model.save_networks('last') diff --git a/detector_codes/Resnet50-main/util.py b/detector_codes/Resnet50-main/util.py new file mode 100644 index 0000000000000000000000000000000000000000..3ae97ef76a1c165cb11f7ddaf90377196428f7ef --- /dev/null +++ b/detector_codes/Resnet50-main/util.py @@ -0,0 +1,49 @@ +import os +import sys + +import torch + + +def mkdirs(paths): + if isinstance(paths, list) and not isinstance(paths, str): + for path in paths: + mkdir(path) + else: + mkdir(paths) + + +def mkdir(path): + if not os.path.exists(path): + os.makedirs(path) + + +def unnormalize(tens, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]): + # assume tensor of shape NxCxHxW + return ( + tens * torch.Tensor(std)[None, :, None, None] + + torch.Tensor(mean)[None, :, None, None] + ) + + +class Logger(object): + """Log stdout messages.""" + + def __init__(self, outfile): + self.terminal = sys.stdout + self.log = open(outfile, 'a') + sys.stdout = self + + def write(self, message): + self.terminal.write(message) + self.log.write(message) + + def flush(self): + self.terminal.flush() + + +def printSet(set_str): + set_str = str(set_str) + num = len(set_str) + print('=' * num * 3) + print(' ' * num + set_str) + print('=' * num * 3) diff --git a/detector_codes/Resnet50-main/validate.py b/detector_codes/Resnet50-main/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..55e4a8bdab25a5669cdb3945ca65d5aa03d21519 --- /dev/null +++ b/detector_codes/Resnet50-main/validate.py @@ -0,0 +1,41 @@ +import numpy as np +import torch +from networks.resnet import resnet50 +from options.test_options import TestOptions +from sklearn.metrics import accuracy_score, average_precision_score + + +def validate(model, data_loader): + # data_loader = create_dataloader(opt) + + with torch.no_grad(): + y_true, y_pred = [], [] + for img, label in data_loader: + in_tens = img.cuda() + y_pred.extend(model(in_tens).sigmoid().flatten().tolist()) + y_true.extend(label.flatten().tolist()) + + y_true, y_pred = np.array(y_true), np.array(y_pred) + r_acc = accuracy_score(y_true[y_true == 0], y_pred[y_true == 0] > 0.5) + f_acc = accuracy_score(y_true[y_true == 1], y_pred[y_true == 1] > 0.5) + acc = accuracy_score(y_true, y_pred > 0.5) + ap = average_precision_score(y_true, y_pred) + return acc, ap, r_acc, f_acc, y_true, y_pred + + +if __name__ == '__main__': + opt = TestOptions().parse(print_options=False) + + model = resnet50(num_classes=1) + state_dict = torch.load(opt.model_path, map_location='cpu') + model.load_state_dict(state_dict['model']) + model.cuda() + model.eval() + + acc, avg_precision, r_acc, f_acc, y_true, y_pred = validate(model, opt) + + print('accuracy:', acc) + print('average precision:', avg_precision) + + print('accuracy of real images:', r_acc) + print('accuracy of fake images:', f_acc) diff --git a/detector_codes/SAFE-main/LICENSE b/detector_codes/SAFE-main/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..29f81d812f3e768fa89638d1f72920dbfd1413a8 --- /dev/null +++ b/detector_codes/SAFE-main/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/detector_codes/SAFE-main/data/datasets.py b/detector_codes/SAFE-main/data/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..01a04f04a4a96de6a1a7254e017c98041200dba8 --- /dev/null +++ b/detector_codes/SAFE-main/data/datasets.py @@ -0,0 +1,227 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. + +# All rights reserved. + +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import io, os, pdb +import cv2, math, random +import numpy as np + +import torch +from PIL import Image, ImageFile +from torch.utils.data import Dataset +from torchvision import transforms +from torchvision.transforms import functional as F +from torchvision.transforms import InterpolationMode + +ImageFile.LOAD_TRUNCATED_IMAGES = True + + +class RandomJPEG(): + def __init__(self, quality=95, interval=1, p=0.1): + if isinstance(quality, tuple): + self.quality = [i for i in range(quality[0], quality[1]) if i % interval == 0] + else: + self.quality = quality + self.p = p + + def __call__(self, img): + if random.random() < self.p: + if isinstance(self.quality, list): + quality = random.choice(self.quality) + else: + quality = self.quality + buffer = io.BytesIO() + img.save(buffer, format='JPEG', quality=quality) + buffer.seek(0) + img = Image.open(buffer) + return img + + +class RandomGaussianBlur(): + def __init__(self, kernel_size, sigma=(0.1, 2.0), p=1.0): + self.blur = transforms.GaussianBlur(kernel_size=kernel_size, sigma=sigma) + self.p = p + + def __call__(self, img): + if random.random() < self.p: + return self.blur(img) + return img + + +class RandomMask(object): + def __init__(self, ratio=0.5, patch_size=16, p=0.5): + """ + Args: + ratio (float or tuple of float): If float, the ratio of the image to be masked. + If tuple of float, random sample ratio between the two values. + patch_size (int): the size of the mask (d*d). + """ + if isinstance(ratio, float): + self.fixed_ratio = True + self.ratio = (ratio, ratio) + elif isinstance(ratio, tuple) and len(ratio) == 2 and all(isinstance(r, float) for r in ratio): + self.fixed_ratio = False + self.ratio = ratio + else: + raise ValueError("Ratio must be a float or a tuple of two floats.") + + self.patch_size = patch_size + self.p = p + + def __call__(self, tensor): + + if random.random() > self.p: return tensor + + _, h, w = tensor.shape + mask = torch.ones((h, w), dtype=torch.float32) + + if self.fixed_ratio: + ratio = self.ratio[0] + else: + ratio = random.uniform(self.ratio[0], self.ratio[1]) + + # Calculate the number of masks needed + num_masks = int((h * w * ratio) / (self.patch_size ** 2)) + + # Generate non-overlapping random positions + selected_positions = set() + while len(selected_positions) < num_masks: + top = random.randint(0, (h // self.patch_size) - 1) * self.patch_size + left = random.randint(0, (w // self.patch_size) - 1) * self.patch_size + selected_positions.add((top, left)) + + for (top, left) in selected_positions: + mask[top:top+self.patch_size, left:left+self.patch_size] = 0 + + return tensor * mask.expand_as(tensor) + + +def Get_Transforms(args): + + size = args.input_size + + TRANSFORM_DICT = { + 'resize_BILINEAR': { + 'train': [ + transforms.RandomResizedCrop([size, size], interpolation=InterpolationMode.BILINEAR), + ], + 'eval': [ + transforms.Resize([size, size], interpolation=InterpolationMode.BILINEAR), + ], + }, + + 'resize_NEAREST': { + 'train': [ + transforms.RandomResizedCrop([size, size], interpolation=InterpolationMode.NEAREST), + ], + 'eval': [ + transforms.Resize([size, size], interpolation=InterpolationMode.NEAREST), + ], + }, + + 'crop': { + 'train': [ + transforms.RandomCrop([size, size], pad_if_needed=True), + ], + 'eval': [ + transforms.CenterCrop([size, size]), + ], + }, + + 'source': { + 'train': [ + transforms.RandomCrop([size, size], pad_if_needed=True), + ], + 'eval': [ + ], + }, + } + + # region [Augmentations] + transform_train, transform_eval = TRANSFORM_DICT[args.transform_mode]['train'], TRANSFORM_DICT[args.transform_mode]['eval'] + + transform_train.extend([ + transforms.RandomHorizontalFlip(p=0.5), + # transforms.RandomHorizontalFlip(), + transforms.RandomRotation(180), + transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5), + transforms.ToTensor(), + RandomMask(ratio=(0.00, 0.75), patch_size=16, p=0.5), + ]) + + transform_eval.append(transforms.ToTensor()) + # endregion + + # region [Perturbatiocns in Testing] + if args.jpeg_factor is not None: + transform_eval.insert(0, RandomJPEG(quality=args.jpeg_factor, p=1.0)) + if args.blur_sigma is not None: + transform_eval.insert(0, transforms.GaussianBlur(kernel_size=5, sigma=args.blur_sigma)) + if args.mask_ratio is not None and args.mask_patch_size is not None: + transform_eval.append(RandomMask(ratio=args.mask_ratio, patch_size=args.mask_patch_size, p=1.0)) + # endregion + + return transforms.Compose(transform_train), transforms.Compose(transform_eval) + + +class TrainDataset(Dataset): + + def __init__(self, is_train, args): + + TRANSFORM = Get_Transforms(args) + self.transform = TRANSFORM[0] if is_train else TRANSFORM[1] + root = args.data_path if is_train else args.eval_data_path + + dataset_list = root.replace(' ', '').split(',') + num_datasets = len(dataset_list) + + if num_datasets == 1: + real_list, fake_list = self.get_real_and_fake_lists(dataset_list[0]) + if is_train and args.num_train is not None: + self.data_list = real_list[:args.num_train//2] + fake_list[:args.num_train//2] + else: + self.data_list = real_list + fake_list + else: + assert args.num_train is not None + self.data_list = [] + for dataset in dataset_list: + real_list, fake_list = self.get_real_and_fake_lists(dataset) + self.data_list.extend(real_list[:args.num_train//(2 * num_datasets)] + fake_list[:args.num_train//(2 * num_datasets)]) + + def get_image_paths(self, dir_path): + image_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp') + image_paths = [] + for root, dirs, files in sorted(os.walk(dir_path)): + for file in sorted(files): + if file.lower().endswith(image_extensions): + image_paths.append(os.path.join(root, file)) + return image_paths + + def get_real_and_fake_lists(self, folder_path): + real_list, fake_list = [], [] + for root, dirs, files in sorted(os.walk(folder_path, followlinks=True)): + for dir_name in sorted(dirs): + if dir_name == "0_real": + real_dir_path = os.path.join(root, dir_name) + real_list.extend([{"image_path": image_path, "label" : 0} for image_path in self.get_image_paths(real_dir_path)]) + elif dir_name == "1_fake": + fake_dir_path = os.path.join(root, dir_name) + fake_list.extend([{"image_path": image_path, "label" : 1} for image_path in self.get_image_paths(fake_dir_path)]) + return real_list, fake_list + + def __len__(self): + + return len(self.data_list) + + def __getitem__(self, index): + + sample = self.data_list[index] + image_path, targets = sample['image_path'], sample['label'] + image = Image.open(image_path).convert('RGB') + image = self.transform(image) + + return image, torch.tensor(int(targets)) + diff --git a/detector_codes/SAFE-main/data/generation.py b/detector_codes/SAFE-main/data/generation.py new file mode 100644 index 0000000000000000000000000000000000000000..2caebf7f2e894f11cf6e3520171c73a796da095a --- /dev/null +++ b/detector_codes/SAFE-main/data/generation.py @@ -0,0 +1,95 @@ +import os, pdb +import torch +import argparse +import pandas as pd +from diffusers import FluxPipeline, PixArtSigmaPipeline, StableDiffusion3Pipeline + +''' +pip install diffusers sentencepiece +pip install --upgrade transformers + +CUDA_VISIBLE_DEVICES=0 python generation.py \ + --model_path "black-forest-labs/FLUX.1-schnell" \ + --num_images 5000 \ + --batch_size 5 + +CUDA_VISIBLE_DEVICES=0 python generation.py \ + --model_path "PixArt-alpha/PixArt-Sigma-XL-2-1024-MS" \ + --num_images 5000 \ + --batch_size 5 + +CUDA_VISIBLE_DEVICES=1 python generation.py \ + --model_path "stabilityai/stable-diffusion-3-medium-diffusers" \ + --num_images 5000 \ + --batch_size 5 +''' + +# Argument parsing +def parse_args(): + parser = argparse.ArgumentParser(description="Generate images using FluxPipeline.") + parser.add_argument('--model_path', type=str, default="", help='Path to the pre-trained model.') + parser.add_argument('--num_images', type=int, default=1000, help='Number of images to generate.') + parser.add_argument('--batch_size', type=int, default=10, help='Batch size for image generation.') + parser.add_argument('--seed', type=int, default=2025, help='Random seed for image generation.') + parser.add_argument('--output_dir', type=str, default=None, help='Directory to save generated images.') + return parser.parse_args() + +# Main function to generate images +def main(args): + + assert args.num_images <= 30000 + defined_prompts = pd.read_csv("mscoco.csv").sort_values(by='image_id')['text'].tolist()[:args.num_images] + + output_dir = os.path.join("images", args.model_path.split('/')[-1]) if args.output_dir is None else args.output_dir + os.makedirs(output_dir, exist_ok=True) + + # Initialize the pipeline with a variable model path + if "FLUX" in args.model_path: + pipe = FluxPipeline.from_pretrained(args.model_path, torch_dtype=torch.bfloat16, safety_checker=None).to('cuda') + elif "PixArt" in args.model_path: + pipe = PixArtSigmaPipeline.from_pretrained(args.model_path, torch_dtype=torch.bfloat16, use_safetensors=True, safety_checker=None).to('cuda') + elif "stable-diffusion-3" in args.model_path: + pipe = StableDiffusion3Pipeline.from_pretrained(args.model_path, torch_dtype=torch.float16, safety_checker=None).to('cuda') + + # Set random seed + generator = torch.Generator("cuda").manual_seed(args.seed) + + # Generate images in batches + for i in range(args.num_images // args.batch_size): + + # Check if all images for this batch already exist + if all(os.path.exists(os.path.join(output_dir, f"fake_{i * args.batch_size + j:04d}.png")) for j in range(args.batch_size)): continue + + if "FLUX" in args.model_path: + images = pipe( + defined_prompts[i * args.batch_size: (i + 1) * args.batch_size], + guidance_scale=0.0, + num_inference_steps=4, + max_sequence_length=256, + num_images_per_prompt=1, + generator=generator, + ).images + elif "PixArt" in args.model_path: + images = pipe( + defined_prompts[i * args.batch_size: (i + 1) * args.batch_size], + num_images_per_prompt=1, + generator=generator, + ).images + elif "stable-diffusion-3" in args.model_path: + images = pipe( + defined_prompts[i * args.batch_size: (i + 1) * args.batch_size], + negative_prompt="", + guidance_scale=7.0, + num_inference_steps=28, + num_images_per_prompt=1, + generator=generator, + ).images + + # Save images + for j, img in enumerate(images): + img.save(os.path.join(output_dir, f"fake_{i * args.batch_size + j:04d}.png")) + +# Run the script +if __name__ == "__main__": + args = parse_args() + main(args) \ No newline at end of file diff --git a/detector_codes/SAFE-main/data/mscoco.csv b/detector_codes/SAFE-main/data/mscoco.csv new file mode 100644 index 0000000000000000000000000000000000000000..8b0ca81c411e156a7bda1400d1d9811968e19234 --- /dev/null +++ b/detector_codes/SAFE-main/data/mscoco.csv @@ -0,0 +1,30100 @@ +image_id,text +521669,Someone is holding a phone while watching a video on it. +116361,so many people using laptops at a meeting +118113,this is a very dark picture of a room with a shelf +440094,A wooden bed with a brown dog sleeping on top of it. +313428,a bed sits under neath a glass fish tank +503200,A shower has a removable shower head and a glass door. +126065,The two figurines and bells are under the clock. +47010,A pond of water with three giraffe walking in the dirt. +134722,Fast commuter train moving past an outdoor platform. +527086,The police officers are sitting together and eating food. +233638,A laptop and a cell phone on a table. +145544,A black dog in a bathroom drinking out of the toilet. +368193,Three people on horse back at a rural road intersection. +68852,An old car in a parking lot with a surfboard strapped to the top +313130,a silver fridge sits in a room next to a microwave +308856,tree is a female tennis player that is playing on the court +429582,A baby next to a stuffed bear of some sort. +106912,A young boy riding a skateboard across a parking lot. +197125,A desk with computers and monitors and books. +52290,A black and white cat sniffs a laptop computer. +304240,A red traffic light at a street side. +351127,people on a lake holding onto parachutes as they surf the water +60179,A man on skies with a parachute attempting to ski with it. +114770,"A green military jeep, and motorcycle on display." +127668,A large truck drives up to an airplane. +196594,Three clocks are displaying times from different time zones. +248051,A man riding a skateboard on top of a sidewalk. +135486,A man fixes a kite as he stands with his friend on the beach. +474039,A baby sitting in between to large stuffed animals. +553162,Brown bear walking on a path in the woods. +451533,A left hand golding a Samsung flip phone from Sprint +201418,A young man standing in front of a luggage carousel at an airport. +167510,A stop sign at the intersection of Lyndon Ave and South. +487685,A group of people standing on floor mats at an event. +227590,The passenger train is painted brown and white. +467578,A box of donuts with a coffee in front of it. +379476,A long tunnel with a long table with lots of seats and candles next to wine glasses. +35206,a tennis player crouching down near the net +173208,A plate of food has some sesame seed bagels. +416059,Two people walk through the snow behind a dog. +350278,A zebra standing on top of a dirt field. +277831,A glass of alcohol next to an open laptop computer. +146742,A beautiful young lady laying on top of a park bench. +570579,A baby boy sits in a high chair next to a green and white cake. +117988,A woman wearing red top and black skirt holding umbrella +151005,a wooden bench with some yellow and green leaves +143224,An airplane on the tarmac and the glass passageway leading to its door +294853,"A man in a red cap, green shirt and white shorts holds a tennis racket under his arm." +323552,A young girl with glasses appears to be waiting with luggage at the baggage center. +185181,A giraffe on display in a glass enclosure. +43850,A man standing over his dog on a beach while holding a surfboard next to the ocean. +351369,A landing jet airplane kicking up spray on a wet runway. +558661,A woman that is standing in the grass with a frisbee. +119516,A beautiful woman standing on the side of a rad next to a street. +89790,A man in a parking lot talking to the driver of an army green pickup truck. +310998,A man on a snowboard that is in the snow. +477698,A herd of zebra standing on sandy area with rocks. +375317,A black stove top oven sitting next to a window. +169539,A man standing up against a wall with his hands clasped together. +141887,A woman riding a surfboard on a wave in the ocean. +466263,A silver fire hydrant by a manmade path and lake +203878,a tennis player wearing red and white swinging at the ball +487534,Two zebras nuzzle together in a wooded area. +204611,Several airplanes sitting on the tarmac being unloaded. +411564,A man sitting in a window ledge with a cell phone in his hand. +149890,A giraffe and two zebras are standing in the grass. +170651,A pair of trains parked at a station. +201928,A counter topped with containers of foods and a roll. +311206,A statue of a bear in an enclosure. +480951,Cars and traffic signals light up the streets at night around a busy intersection. +270474,A little girl holding a baseball bat on grass. +581402,A calico cat curls up inside a bowl to sleep. +458137,A dining room table surrounded by wooden chairs. +193424,A view of a traffic street filled with cars and motorcycles. +487551,A red stop sign sitting next to a green street sign. +294162,A laptop computer sits on a black surface next to a wireless mouse. +383533,A man and woman dragging surf boards through the water +192168,A man wearing a coat standing in a field using his smart phone. +416968,a red and white sign and a tree water and a building +474881,Horned mountain goats enjoying green grass next to the snow +479078,A brown horse being jumped over a fence rail in a competition. +38438,a close up of a cat on a rug on the ground +281598,A kitten peeking out from behind a tablecloth on a chair. +568846,A man giving a little boy a hair cut. +176362,A baseball player taking a swing at a ball +14781,A news paper sitting on a floor next to a toilet. +441147,Two antique suitcases sit stacked one on top of the other. +518255,a bony horse bending down to look at a duck +28998,A kid in a field with a muffin. +9478,A giraffe standing in a field of grass. +330140,A round picture of a train station with a tall building across the street. +74603,There are people who are getting their food. +300962,a baseball player swinging a bat at a ball +254379,A person holding a remote in their hand. +104751,A man taking a selfie in front of a mirror. +282037,A baseball player pitching a ball on top of a field. +3690,"An individual pizza with cheese, pineapple and sauce." +459809,A shot of the blue water with people flying a kite. +189376,a room filled desks and computers a man and woman sitting listening and anther man with a camera +6040,A blue and white train is moving on the rails. +45367,A woman in red pajamas is hugging a cute dog. +262161,Large motorcycle sitting on a grassy area in a line. +143927,A ceramic coffee cup inside of a silver microwave oven. +507427,a man sitting on a surf board in the water +243775,A clock on side of building with skyline in background. +256787,A dog wearing a tuxedo sitting at a table witha piece of cake with a lit candle. +431693,there is a male tennis player trying to hit the ball +315565,Two aging gentlemen of religious persuasion smile kindly. +34500,A tennis player is on a blue and green court. +297520,"Hot dogs, buns and croissants on a BBQ grill " +279407,A young child holding a baseball in their right hand. +386134,a close up of a foam box of food +6417,A surfer curls to balance on his board atop the foamy white crest of a wave +573033,A wooden bench that is overlooking a body of water. +573770,Two people skiing down a snow covered hillside. +210050,A red car traveling down a road under construction. +432906,A cat sitting on top of a laptop computer. +417265,a building sits in front of a parking meter +554348,a woman is standing on a set of train tracks +68300,A plate of spaghetti with red sauce and broccoli. +298372,a white and green plane is in the sky +169045,A golden plate topped with strawberries covered in sauce. +84241,A group of women in kitchen next to pot. +92081,The bike appears to be chained to the railing. +237558,This aerial shot shows a person crossing the street with an umbrella over their head. +109612,A hand holding a piece of cake with a bite out of it in front of a black and white cat. +426172,a display of items for sale on a shelf +334309,A man takes a picture of himself eating food. +227884,A pianist in a suit and glasses playing a keyboard. +425573,A big zebra and a small zebra are standing in a grassy field. +135158,A cat laying on a couch with a remote. +341775,A single elephant that is walking in an enclosure. +350975,THREE BLUE UTILITY SINKS AND TWO WHITE REGULAR SINKS +161397,Several displays of flowers are on a table. +419774,A pitcher throws the ball towards the batter while other players watch. +164,A small kitchen with low a ceiling +216235,Couple of cows outside eating at the grass +313240,"a desk with a computer, books, paperwork and shelves with DVDs " +554114,A woman kneeling down in front of a parking meter. +55241,The cows are standing on the hay in a meadow. +572790,"Avery long hot dog with ketchup, mustard and onions." +574415,Two an a half donuts on white plates. +10694,A cat stares from behind a large TV. +498061,a smiling man sitting in a fancy restaurant +416827,A train traveling down railroad tracks through a countryside. +65948,Two people sit together in a restaurant at a wooden table. +92248,A clock at the top of a tower with a statue in front. +402096,A traffic sign has been vandalized to look like a scary face. +105974,A person that is catching a frisbee in a gym. +140197,A number of people riding bicycles in a metropolitan area. +570039,A woman brushing the teeth of a toddler. +338592,The infamous Big Ben clock tower sitting under a cloudy blue sky. +291458,A clock tower gives the time in a city square. +344094,A curved bamboo next to a flower vase +394460,A group of kids playing a video game system. +141651,A woman that is sitting on the back of a horse. +137830,Some food is sitting on a stove top in a kitchen area. +485494,a cat playing with a toy on a sofa +345160,Two women and children are on a motorcycle. +353518,A fleet of ships docked on a sandy beach. +233365,A man holding a tennis racquet on top of a tennis court. +343524,A man holding a tennis racket and ball as if to start a serve. +97967,A crowd of people standing in front of a window. +88815,a man on a sail board rides through the water +110683,Two big giraffes walking in a grassy area with a baby giraffe. +226579,A woman holds the arms of a young boy on a soccer field. +389503,a man is surfing down a narrow river +381971,A horse drawn carriage is near a fire hydrant by a curb. +468457,A pizza sitting inside of a cardboard box covered in toppings. +127313,A woman standing around a group of dogs. +372294,A brown and white dog sitting in a black leather chair. +90626,ranodm bus pulled over on the side of the road +45478,The Big Ben clock tower towering over a city at night. +110961,A motorcycle is parked in a bushy field. +497626,a made bed with four pillows and lamp on a table +281853,A bedroom that has a lamp on either side of the bed. +469877,"A truck, largely covered in graffiti, is parked near a stop sign on a hill." +250619,A woman sits under the shade of an umbrella at the beach. +213785,Two people who are diving for a Frisbee. +114119,The cat is sleeping underneath the clock. +573363,a man in glasses and a tie stand on concrete +328601,A tennis players concentrates as he prepares to smack the ball. +380993,A black and white photo of a man running across the street. +110434,A man in an elevator listening to music on his iPhone. +97146,A dark city street lined with stone buildings +429443,Three brown cows grazing on a muddy grass field. +342295,A white toilet sitting next to a bath tub filled with paintings. +475586,A man wearing a purple tie holding his hand up to his face. +431136,there are many people standing ion a field playing frisbee +458755,Young woman with sheep on straw covered floor. +163728,A cat laying on top of a desk next to a mouse. +241503,There is a dog sleeping on a futon. +473673,A tall giraffe stands alone close to woods. +509416,A bag with a hot dog inside of it. +41671,A slice of layer cake on a plate that is garnished +19313,a person swinging a tennis racket hitting a tennis ball +70744,A group of people sitting at tables next to each other. +277051,two little sparrows standing on a table by a knife +288042,A gentleman walking in the rain along a river. +329827,A person on skis skiing down a mountain. +518604,A large bird sitting on top of a tree. +433652,A small teddy bear is on a strange chair. +313034,A man in a green shirt stands by a girl holding a piece of cake on a plate. +254454,A child stops after taking a bite of a slice of pizza. +463961,A bowl of carrots and green beans with a spoon. +235203,A cat sitting on top of a mans lap next to a keyboard. +143737,A couple of motorcycle cops driving down a street. +278175,A large brown bear walking through a forest. +227187,a table that has some bananas on it +233426,A photo of some flowers in a ceramic vase. +456662,A child standing completely upright in front of a refrigerator. +257046,A boy in a pitchers pose then pitching a baseball. +396687,Three women that are finishing a skiing tournament +115088,Tall green pine trees in back of large grassy field. +395975,"A living area with a fireplace, television and couch." +48924,A dirt bike parked near a tent in the woods. +102411,Two people riding a motorcycle to the beach. +344003,A kid playing with a bat and ball on a beach. +429802,A red fire hydrant placed near a building +21503,Crackers with spread on table with remote in background +74583,A cat laying on a cushion on top of a table. +185621,a person in a field throwing a frisbee +93686,A young boy wearing a tie while using a cell phone. +493753,An office desk holding multiple computers and various supplies. +560893,Benches surround a pond in a park in autumn. +175024,A person sits on top of a motorcycle with a stuffed toy. +196371,A cat sitting on top of an old abandoned car. +576084,A man milking a cow during the day. +133750,A zebra in a zoo pin looking down at the ground. +420059,A suitcase that is on the ground with some shoes. +352491,A train sitting idle in an empty train station +283147,Some old buildings have street signs next to them. +368528,A man riding skis on a snow covered ski slope. +572182,A girl hitching a ride with her Dad on a skateboard +553129,The organized kitchen of a busy family in a suburban home +178795,a table top with some plates of food on it +119939,Some young skateboarders are riding down the sidewalk. +124940,A blue cutting board with a piece of toast that includes peanut butter and jam. +380609,A surfer laying on a surf board and paddling with her hands and feet. +12209,A baseball player holding a baseball bat during a baseball game. +491130,A man riding a snowboard on top of a snow covered slope. +283441,A section of a yard being dug up next to a building. +309872,A dog lying on a couch in a house. +340329,A small train traveling past a building surrounded by a fence. +432534,a close up of a vase with many flowers +27390,A picture of a plane that is in the air. +336340,The wooden bench is near a busy stream. +221543,A clock displaying the time in a passenger bus. +340069,A young man cuts a clown shaped cake. +419789,Two skiiers are riding on a ski lift +431281,a group of people on a field with a large kite +520996,The elephant stands in the dirt and extends its snout over the fence. +447770,an image of a child playing on a toy laptop +133237,A large elephant standing next to a small elephant. +289392,A man sitting at a table working on his laptop. +331097,three big elephants walking across a wide river +154590,"A dinner table with wine, glasses, and bread. " +74058,A sidewalk next to the outdoor sitting area of a restaurant. +73039,a purse a pair of shoes and a horse behind a display glass +507575,A computer desk with electronics on it and other desk accessories +474253,A man riding on the back of a horse through a river. +312552,A woman holding a plate and eating pizza. +95161,A lot of blue and yellow umbrellas sitting under a clock. +71756,Two black bears captured together in night vision. +354254,A man prepares to bite into his sandwich. +58569,two public transit buses on a city street +208132,A plate of food and ketchup bottle are on a table. +231450,A kitchen with a freezer refrigerator next to counters. +221524,A boy swims through the water using a board. +307048,a chihuahua sitting in a chair at the table in front of a plate of food +532686,A white bathroom with a walk in shower and a toilet. +463588,A small group of horses graze in an open field. +237316,The tiny white bathroom has a toilet and pedestal sink. +199492,A double red bus parked on a street. +511453,A pizza with french fries on it on a table. +215691,A small kitchen featuring an under the counter washing machine. +421169,A red and yellow trimmed plane sitting on tarmac. +560623,An airport filled with planes sitting on tarmacs. +414676,A very tall brick clock tower with a clock on each of it's sides. +549242,A couple of men riding waves on surfboards. +247536,Two pizzas sit next to each other on metal grates. +295693,A woman sitting on a couch using a laptop computer. +386967,A row of empty benches alongside a road. +490275,Air force jet in a take off position above the tree line. +104982,A man holding a smart phone in his right hand. +295491,Military personal serving themselves food at an event. +135578,A store selling lots of vegetables and fruits. +153392,Many of the kites ascend high into the clouds. +531512,A person holds a machine to a cow's udders. +192296,A COUPLE OF PEOPLE AT A TABLE NEAR A POOL OUTSIDE ON THEIR PHONES +581749,there are many pieces of broccoli and vegetables here +132690,A cat that is laying in a basket. +383175,A train in a station with a person in yellow clothes nearby +547144,"A laptop next to two computers, keyboards and some mouses." +537297,a woman stands with a small child +326079,Three giraffes standing amongst a copse of trees. +214244,A young woman riding skis down a ski slope while holding ski poles. +134575,A couple of people flying a kite on top of a sandy beach. +34524,A bed is scattered with papers and a remote control. +465324,A herd of elephants grazing on a lush green field. +44590,A group of motorcycles parked on the side of a road. +394449,People sitting on a bench at the train station. +459645,A person performing a jump on a snowboard. +465675,A beach with two boats and a tractor. +245320,A man performing on a skateboard ramp jump. +311327,Several people in a canoe with oars on the river. +373848,A red smart phone sitting on top of a wooden table. +552945,a girl stands by an elephant near some trees +104313,"A box of donuts, some that are jelly filled, coconut, frosted, and have sprinkles." +47781,A bedroom with a full size bed and wooden headboard with matching drawers on the side. +176330,"A view of a kitchen sink, knives, hanging cups, and wine glasses." +205594,Athletes on field during sanctioned tournament at night. +527440,A man doing farm work on a tractor in a field. +281365,A metal sink and a row of white urinals +361621,A cat sitting in a bathroom sink under a faucet. +518188,A lamp in the window of a house. +462840,A dog in the back of a pick up truck. +119785,a nice sandwich and a nice salad onn a plate +110449,A man standing next to another man wearing headphones. +423396,A clock adorned with angel sculptures mounted below a bright double lamp. +202944,Some asian cuisine is shown with vegetables and noodles. +124279,A man sitting at a table in front of a laptop computer. +557556,A woman catching a frisbee on a beach. +227218,A black and white cat is near a little dead bird on the sidewalk. +465973,A man is riding a horse in a dirt enclosure. +287396,A blue double decker bus that says Garage on it. +41990,A group of people on snow shoes posing for a photo. +309573,a man windsurfing and another man hanging onto a parachute +167271,A young person playing a Nintendo ds while laying on a bed. +386764,A boy in blue shirt standing with a baseball bat. +233298,A large commercial airliner is flying through the sky. +403020,A giraffe lying on the ground in a zoo pin. +416787,The pastry has a substance in the middle of it +32391,A sign sitting above a store front entrance. +53457,A cat sitting on top of a television. +179642,a tennis player sitting in a chair shirtless +328745,Two brown bears sitting on top of a black and white checkered bed. +513555,A couple of men sailing on a sailboat out in the harbor. +45099,A woman's reflection of her taking a picture of a sink and toilet. +110081,A group of people on mopeds in a busy street. +423892,One adult and three kids standing at a table singing happy birthday. +68380,Bananas are on sale for 47 cents per pound in the produce section. +553954,The two sumo wrestlers are facing each other with the ref between them. +281972,A boy in a green and yellow jersey holding a baseball bat. +345536,a living room with a table chairs and a couch +205239,A clock tower surrounded by blowing snow in a city. +484229,The people walk down the street holding umbrellas. +444515,THERE IS A NUT AND A ORANGE YOGURT AND AN APPLE +250901,A group of people getting their food from a bag. +232453,A large green and yellow truck parked next to a similar green and yellow truck. +164005,A baby is sitting on a bed playing with a laptop computer. +241986,two tags one with an elephant on one and a dog on the other +222009,A vase filled with purple and red flowers sitting on a counter. +2299,Many small children are posing together in the black and white photo. +369986,A lady staring lovingly into her pizza. +568276,A close up of pizzas resting on serving trays on a table. +139077,A young boy holding a Nintendo Wii game controller. +167443,a lit up counter with two fancy sinks on it +121849,A very cute child sitting on the commode with his pants on +373140,a yellow and blue cart is parked on a street +540159,A very nice looking living room with a couch. +95707,A table topped with a train styled cake. +353295,Images of 3 unusually long hot dogs sticking out of their buns. +172137,There are four fruits balanced on the neck of the bottle. +157635,"The view of a living room couch, windows, fireplace, and television set." +291589,Colorful vases with flowers on a table with overhanging paper lantern +159500,The narrow corridor of a restroom for men with stalls and urinals. +328890,A knife and a pizza cut into slices on the plate +180411,A large Air Force jet taking off of a runway. +144784,A hand with finger on a blender filled with liquid. +186177,A pair of zebras in their natural habitat. +70588,A zebra and its foal eating hay from a basket. +46551,A group of people in a bar playing Wii +456833,A silver passenger train with an aids walk poster on it's side. +75083,a close up of street signs with buildings in the background +500826,A pole with three road signs stands in front of a building. +88634,A kitchen with a black stove top oven. +339965,A group of children standing around a candle filled cake. +397640,A man on horseback herds cattle on yellow grass. +564197,"Two plates of food that include beans, guacamole and rice." +455414,A young skier is attempting to go down the hill. +482021,A group of teenage girls are walking a dog on the grass. +60610,A large silver double decker bus driving down a street. +448117,A group of people carrying ski equipment while walking on snow covered ground. +127153,A couple of women that are holding umbrellas. +364266,a grey king-cab truck is parked in a driveway +65981,A large train is coming down the track between a beautiful mountain. +301799,"A sandwich, carrots and strawberries in a lunch box." +566189,"A bathroom filled with rotten,crap filled, destroyed toilets sitting in a row in a destroyed bathroom." +167993,THERE IS A GOAT STANDING IN THE YARD +359043,A delivery truck parked next to a blue crane. +396768,Big clock decorates the outside of a brick wall +240259,"Two monkeys, one with a banana at a tourist stop" +444887,a person holding up a plate with a slice of pizza +555582,A woman carrying an inside out umbrella past a wall covered in graffiti. +146986,A large jet flying over some small foothills. +6871,An adult polar bear is swimming in the water. +77591,People holding racquets playing tennis on a court. +108094,Two people on motorbike passing by a clock facade. +373655,a teal bed and a smaller pet bed sit on a red carpet. +559778,there is a german sherpard sitting on the floor with a stuffed bear +55272,A bird floating on top of a body of water. +283070,some oranges that are sitting on some wood +90052,Two young people holding tennis racquets on a tennis court. +387223,a bunch of sheep are standing in a snowy field +324595,A couple of young men playing a game of frisbee. +216677,A white plate with a cut in half sandwich. +17867,A dinner table with candles and vases of flowers. +414109,A giraffe looking at something in some bush. +574095,There are two slices of pizza in front of the rest of the pizza. +230008,a traffic motorcycle cop waits to give a ticket +185838,A man riding a skateboard up the side of a ramp. +151808,a train is passing a lake by a mountain +506310,A room with an empty and open refrigerator and a shelf of bottles. +26799,A couple of giraffe standing next to each other. +364297,There is a cat laying down on a keyboard. +75234,A man swinging a tennis racket at a tennis ball. +238141,A street sign for Davis St. and Third Ave. with a skyscraper behind. +145209,A counter containing two silver vases with colorful flowers. +417727,An open laptop computer next to two other open laptops. +204432,A man and woman pose for a picture together +206417,A man sitting on the beach with a dog holding a yellow frisbee. +155154,The bathroom is small and white and gray. +453341,The living room in a house with many figurines on the shelf +368671,some snow skiers and some snow and trees +453390,A yellow and red fire hydrant in grassy area next to a street. +53802,"Some people sitting around at various tables, with a railing dividing them" +94619,A young man skateboarding while listening to music. +407945,Someone picks up a slice of fresh pizza with one hand. +44823,A man riding on the back of a horse near a plane. +32284,A motorcycle parked behind a truck on a green field. +84073,A refrigerator that has been fitted with a tap and a thermometer. +29593,A train is going down a hill through a town +283190,A kitchen with a white stove and oven. +244184,A green street sign next to a road surrounded by a forest. +63619,The person is riding a bike on the road +324419,Two boys in a living room playing a game with a Nintendo Wii controller. +392717,A brown teddy bear sitting in the middle of a road. +414374,A group of cows have shadows on the grass. +94360,a couple of people are standing outside with umbrellas +193622,A man sits with a traditionally decorated cow +567922,A blue and yellow train pulling up to a station on a sunny day. +528364,A train in a station with people walking towards and off of it. +328959,"A bathroom with a toilet, shower and an hanging chain to flush the toilet. " +305545,a close up of a woman wearing jewelry and a boat in the background +41773,A road sign on the side of a road. +134133,A group of people sitting on top of a white blanket next to a bar of chocolate. +541486,A man on a tandem bicycle stopped while checking his cellphone. +512337,A bird perched on top of a leaf filled tree. +240417,A bird sitting on top of a green lily pad. +234370,An elephant in a field touches its nose to its mouth. +280976,A kneeling down on a baseball field next to grass. +163601,A trio of clocks are attached to the semi-circular frame by wires. +494679,Two giraffe and a zebra standing in a enclosure. +505891,A domestic cat lounges on a quilt covering a bed. +213739,Five sheep peeking out of a wall and eating hay on the ground. +279331,a small dog on a leash with a racket +205300,A person on a motor bike on a road. +203003,A young man holding a plate of food while sitting on a couch +23019,a few big buildings with roads next to them +432547,A man at a table rolling out wrapping paper. +426754,A man wearing goggles and standing in the snow. +137057,A dog holding a pink Frisbee in it's mouth. +78026,a grey cat biting into a frosted donuts +50778,People putting luggage onto a bus outside beside a building +446058,"A balding man with glasses, standing near a bridge." +401403,This man is sitting on a bench next to a tree. +391187,A picture of a red bus waiting for passengers. +161557,A German shepherd resting its head on the floor. +332653,A man stands next to a motorbike on some pavement. +76896,a laptop besides an alarm clock maroon in color +457133,A red stop sign sitting on the side of a pole. +558633,People are sitting at a table and eating dinner. +58146,a close up of many toy sheeps on a table +524962,"Surfer is on rollerblades, holding a surf board." +277518,A boat sitting next to a beach in the ocean covered with birds. +57359,A room filled with clutter and a laptop computer. +8065,A baseball player swinging a baseball bat during a game. +6460,a person riding a surf board on a wave +360329,Some bananas are hanging from a banana tree. +133928,A yellow duck boat floating on top of a lake. +80613,A hipster carrying an umbrella and a white hat. +32932,A group of people standing around a kitchen next to appliances. +435387,Two individuals wearing the same thing sitting on a bench. +383001,a person walking down a street while holding an umbrella +319579,"Several people sitting around a table in a small room with a laptop, books and papers. " +165527,A group of people gathered in a town square with an individual doing a stunt on the pavement and umbrellas strewn around. +332351,so many people on the sea skating and swimming +301421,"Computer desk setup with monitor, wireless keyboard, and other electronic devices. " +430867,A girl uses a phone next to a dog +427113,A couple of older men sitting on top of a bench. +501062,A big shiny metal pan filled with some tasty looking food. +341678,A man on a tennis court holding a tennis racket hitting a tennis ball. +561539,There are a lot if friends playing in the ski slope +40036,A person jumping a horse over a box. +538934,A view of a kitchen with a bunch of cleaning supplies around it. +41633,"A burgundy low-rider show-quality, hot rod Chevy truck." +384333,A small elephant standing next to a bush. +211141,A black and white image of a lady on her cell phone while sitting down. +404702,Stuffed animals on the beach one with a bucket over its head. +54355,A white table topped with two pans of pizza and a black paper plate topped with a slice of pizza. +414216,A woman and child that are inside of the water. +120535,Two television that are sitting on stands in a room. +41945,a small boat in a body of water near building +255665,Vintage bathroom with sink and toilet with toiletries +281722,A blue and white boat floating on top of water. +531415,A clock sitting on top of a wooden desk. +374567,A yellow and green train on a train track. +64048,People riding an elephant through crops next to an odd shaped mountain. +159103,A bedroom with clothes on top of the bed and a clothes drawer. +133631,"The old, adult elephant stands near a wire fence." +305993,They are holding a frisbee together while hugging each other. +50924,A pan filled with broccoli and onions with oil. +548296,a close up of a giraffe and a zebra in a field near trees +77628,A group of people on motorbikes sit at a crosswalk. +3711,A black cat sitting on top of the hood of a car. +530461,A clock on a post standing outside of a building. +542910,An woman pulls a suitcase while another watches. +331268,A kitchen filled with plants and lots of clutter. +6019,A red bicycle is parked near a red fire hydrant. +392981,a tennis player swinging a racket on a court +168260,a yellow lifeguard truck sitting on the beach +170077,A young boy wearing a colorful umbrella hat. +300472,A woman sitting at a table with a plate of food in front of her. +391179,A woman swinging at a tennis ball on the court +413616,A small dog running on a field with a Frisbee. +368602,A man is water skiing behind a motorboat. +236599,People hold flying kites in the air by the water +429718,A train with steam coming out is on the tracks. +2972,Two colorful passenger trains passing near a platform. +122199,A man with a beard riding skis while holding ski poles. +333538,A woman wearing a fur coat sitting on a wooden bench. +410019,A boy does tricks on a scooter. +310035,A young woman reading while laying down on a park bench. +473849,A white tiled bathroom with black counter top. +208002,A horse and colt in tall grass near a house. +130234,Two trains sitting on parallel tracks waiting at a station. +329940,Two large concrete trucks parked near a large building. +424196,a snowboarder in a red hat is bending over +71495,Young girl holding a cupcake up to the camera. +182334,A man sitting in front of a microphone at a table. +533493,Three men celebrating some kind of personal victory. +462756,A grey motorcycle on dirt road next to a building. +568961,a subway train with one passenger waiting to board +34662,A couple of sheep sitting on top of a lush green grass covered hill. +396404,A picture of a shaded walk way and benches. +2255,The elephant has a large white spot on its abdomen. +53990,A child eating a piece of cheese pizza. +515303,a horse and buggy that is on a grassy field +341309,A woman wearing a white sweater standing next to a man in a jacket. +157876,A plate with meat and fruit next to a bowl of salad. +343455,The featured dish contains several unusual fresh ingredients. +228746,A cat is dressed like santa with a meme put together. +410573,A dog watches a cat intently while they both relax on an armchair. +96048,A little kid standing in front of a paper plate with pizza. +227855,An Olympic snow boarder performing a trick. +372471,"A left turn signal, stoplight and street sign are hanging on a pole." +465556,A man cutting a piece of pizza with a knife and fork. +513775,A slice of pizza sitting on a plate on top of a box. +555239,A hotdog with fries and a red cup of beer. +316782,A group of men standing on the deck of ship next to three small boats filled with men. +294865,A silver miniature train with trees in background. +568202,A couple of women sitting at a dinner table. +76029,A woman sitting next to a man holding an umbrella. +573993,A claw foot bathtub stands in the middle of a pristine white bathroom. +52161,A woman riding a red motorcycle wearign a helmet +439481,A group of people near some people riding horses. +147915,A stop sign that has some graffiti on it. +260994,A chef is holding a hot dog in a container. +395324,a bluish motorcycle parked on sidewalk in park +69914,a couple of people that are in a kitchen +446637,A lot of birds on logs floating in the water. +113801,Airplane with vintage bus in front of air plane hangar +320627,A large long train on a steel track near a barn. +502402,A group of people getting onto a bus. +129420,Three men wearing black and ties stand and smile at something out of the frame. +196458,a closeup of a boy at a beach who is about to throw a frisbee +527445,A bunch of glasses of wine sitting in front of a camera. +19974,two calfs walk side by side in a pen on a sunny day +102672,many horses st a horse stable with people walking by +560108,A young boy with safety gear on a skate board in his backyard +452312,A table topped with sandwiches and a salad. +307074,A traffic light hanging over a road at a cross walk. +167593,A person is walking on the beach carrying a surfboard. +574216,A person holding up a paper with a red stop sign on it. +526028,A fancy dish on a white plate at a restaurant. +471789,people on a gold course enjoy a few games +487702,The street sign is across from an electronic sign of a restaurant. +369322,A man in pajama pants carries a lime green suitcase. +439173,A bright green bus is driving in traffic down a road. +404781,A red stop light across from a brick building +315846,A street sign in the city giving directions to several intercity areas. +375484,An office desk with a laptop and a phone on it. +458485,"A hot dog covered in ketchup, mustard, chili and french fries." +461123,The airplane is taking off the runway at the airport. +489842,All of the children are gathered around Santa Claus. +362714,A bicycle carriage riding down a crowded street. +436676,A person and a black cat are on a brown couch with a colorful blanket. +215627,A group of people sitting around a table with a cake on it. +196007,A man wearing orange swinging a bat in the snow. +531581,Three young children who appear to be impoverished stand together in the street. +121041,A black duck floating in a wavy pond. +288799,A train car riding the railroad in a city. +159742,a giraffe is standing by a tree line +123053,Red and white fire hydrant sitting on the side of a city street. +496554,A giraffe in the wild all alone +268745,A woman waiting on the subway to disperse +300214,A man in a suit and tie is sitting on a bench. +494810,A photograph of a sandwich and fries at a restaurant. +444672,A very dirty looking rest room with two toilets. +109216,A red kitchen with metallic appliances and paintings on the wall. +301755,Skateboarder riding his board on a half pike. +439525,A man and a woman cutting up a small white cake. +90432,A pile of oranges with a pile of apples on top of them . +28174,A skateboarder doing tricks by a statue at night +387696,A group of people standing around a kitchen preparing food. +549224,A pizza sitting on top of a table with slices missing. +378727,Person on motorbike with speed detector showing 26. +537506,A person is holding two apples on a plate at sum sort of celebration. +514773,A desktop computer sitting on top of a wooden desk. +489313,A snow boarder in mid trick with the Hilton in the background +141102,"Hot dog with bun and sauces, along with fries and sauce." +178317,Two ladies standing on skis besides a chair lift. +120234,A man riding on top of a wave on a surfboard. +302089,A red fire hydrant next to a h sign +550521,The reflection of a man in barbers chair getting a trim +314495,A bull looking out of a wooden fence. +408221,A very big elephant that is keeping an eye on the photographer. +480105,A herd of zebra standing on top of a lush green field. +227845,A giraffe standing next to a tree in front of another giraffe. +120007,Baby cow eating apple from hand with wood fence +203455,Morning breakfast sits on the comforter of a pretty country bedroom. +21284,A person surfing in the middle of a wave. +48133,a bunch of people on skis going through the snow +237628,A news caster sitting in front of a screen. +129957,there is a bus going down the street and many cars going behind it +358302,A woman gathers the trash in her kitchen. +434958,A man is in a car holding a black cat. +441686,A couple of horses running across a lush green field. +504046,A young woman is holding a video game steering wheel. +546029,A baby sitting on a bed holding a remote control. +43693,a vintage photo of man standing in the middle of some waves +274651,A pile of delicious veggies and meat on a hoagie bun +85162,A cow standing inside of a red brick house peeking out a small window. +32817,A man climbing on a toilet bowl in a closet +53082,A hand holding a piece of cinnamon roll +143119,A woman tennis player in a blue skirt holding a tennis racquet in one hand and touching the wall with her other hand. +3192,A pizza covered in veggies on a white plate sitting on a table. +357081,A photograph of two cows grazing on a green pasture. +79261,A man in blue shirt wading in water with building in the background. +243148,A woman is helping a child put on skis. +378605,"A table with a napkin, doughnut on a plate, and a cup of coffee." +43678,A very large commercial plane flying in blue skies. +144874,a woman surfing as a man comes to join her +50159,A man and a woman cross country skiing on a snow covered trail with mountain peaks in the background. +386165,A man in a wheel chair is walking his dog. +576955,A rider takes their horse through some water at speed. +412464,This sandwich has a side of salad on the plate +516416,A woman with a racket stands on a court. +271820,"A living room with sofa, lamp and tv in it." +205647,A semi truck pulling a chain of three trailers. +390017,a motorcycle is sitting off the side of the road +306524,A beautiful tower building with a big clock on it. +434316,Night scene of an on ramp with traffic light and assorted street lights. +227221,A man flying through the air while riding a skateboard. +42837,This is a computer generated image that depicts a surfer riding a wave. +45075,a couple of buildings grouped together next to some power lines +42953,A group of people standing on top of a snow covered ski slope. +88784,Two dogs are playing on the beach catching a Frisbee. +376684,Two giraffes standing near each other in the zoo. +519611,a close up of a polar bear on a rock formation +347648,A hand carved vase sitting on a blue cloth. +179151,People are standing in a shopping district with stores. +251717,Cattle grazing in a grassy field filled with trees. +553985,A man is holding up a tennis racket +25191,there are two elephants that are walking in the wild together +335181,A white small trash truck sitting on top of a parking lot. +62703,a female in a green top and a laptop +104221,A MAN IS PLAYING ON THE BEACH WITH A FRIEND +556516,A picture of a combination of a living room dining room area. +285681,A commercial airplane either landing or preparing for take off. +60507,A batter at a game playing in a baseball game. +105547,a toilet and a microwave sitting out for the trash +229765,Three young men playing a game of frisbee on a sandy beach. +41635,Three cows standing on a grass field under a cloudy sky. +492246,A man with purple hair and braces laughing +406403,A person skis with mountains in the background. +386912,a person sitting at a desk with a keyboard and monitor +388601,A woman sleeping on a giant piece of pizza. +165639,"A trash can filled with a hot dog, a banana and other garbage." +208995,A man is working at a desk on his laptop. +511299,A man standing on a red boat in the water. +528984,A group of people skiing down a ski slope. +7913,a shops table filled with apples oranges and other fruits +224012,The lunch plate includes both meat and vegetable choices. +32056,A man making the live long and prosper sign from star trek. +141426,Two bulls laying in hay with various people standing around. +338826,A fire station with a flag pole in front of it. +233348,A baseball player strikes a ball with his bat. +453622,A living room filled with furniture and lamps. +20906,"A banana, peanut butter and turkey sandwich sitting in a container." +490320,Three people show their opened keyboard style cell phones. +316762,A small apartment has some framed pictures and posters +42276,A toilet sitting in a room surrounded by personal items. +84694,A group of people seated at a table in a large cellar +555299,some people are walking up a trail and some are on horses +423410,Two small white dogs looking out small windows of a building. +386457,Cat wedged between two large oak doors trying to get out. +487631,Photo taken from inside a car showing lamb in the street. +162692,A monument of a lion that is in a wall. +400117,A man with a tennis racquet and a referee in the background. +559665,Black and white photograph of two men on motorcycles. +277614,A train pulling past a church with a large clock tower. +421535,People on skis are entering a snow tunnel. +69077,A brown dog sits in the snow near a red table and black chairs. +197279,A clock sitting on top of a sidewalk. +199855,Two yellowish green vases sitting on a counter. +233119,A person pulls a suitcase across an urban intersection. +127119,A motorcycle parked outside in a parking lot near the beach. +540694,A giraffe standing in a lot filled with cars. +391132,A bowl of peeled oranges sitting on a white bowl on a kitchen counter. +218204,A wooden table topped with glasses with plants. +167859,A large bed with white sheets is unmade. +264686,A small apartment living room on a sunny day. +401327,"A desk with black keyboard, mouse and computer monitor." +292103,"A person sitting at a table with two plates of food, silverware and a cup on it." +577036,a big bus is parked as a some people ride by in a cart +290959,Crowd of people in front of Amtrak train with bench +308504,A white table topped with different colored vegetables. +511058,A giraffe with a mouth full of grass in front of a forest. +331282,A large clock tower attached to a church next to a rocky mountain. +479938,A man sitting on a horse drawn wagon. +541108,Female tennis player about to hit the ball +454810,Cluttered sink and countertop in an institutional kitchen. +539883,A big screen TV and a Wii gaming console on a rooftop. +84492,A skateboarder grinds down a railing in front of buildings. +180447,A close up of a zebra foraging on some grass +579325,a big airplane with the cargo section open +401820,a giraffe is standing on some grass and some trees +190595,A little boy brushes his teeth and looks at the camera. +335529,A wooden bench sitting next to a large body of water. +306952,An enclose in a building with a giraffe in the background. +71021,A couple of little girls sitting in front of laptop computers. +542594,A small girl holding a remote control next to an adult. +460460,a home bar with assorted alcohol bottles and strings of lights. +107375,A dog carrying a water bottle that is empty. +240379,Group of skiiers in the large mountains walking towards ski lift +451102,The sheep are grazing in a herd in the field. +92768,A man sitting on a bench holding a wooden guitar. +527887,A woman with a coffee cup talking on the phone. +72852,A dilapidated bicycle frame underneath a Pedestrian Zone Sign. +186413,A cow laying on a green field next to it's baby. +307423,Cat laying on top of a dog on a leash. +525619,A kite is flying in the air at a park. +170072,There's a crossing sign that shows you can't make left turns +388157,A tree with a bunch of unripe bananas hanging from it. +394322,A crowd of young children sitting next to each other. +295055,A sidewalk next to a brown brick building. +273698,A stack of pan cakes sitting on top of a plate. +104150,"A cat is curled up, asleep, on a chair. " +497106,A young girl in a fairy dress under an umbrella +121611,"A living area with table, chairs and a sofa." +351057,A glass dish filled with a banana split. +154804,A big white plate filled with some sort of food item. +574297,A man in a helmet is riding a horse across a dirt road +376233,A girl eating a sandwich in a public place. +571596,"The view through the door of a small, tiled bathroom." +512206,A bunch of butterfly's sitting on a basket. +90040,some boats are in the water buildings and a person +27871,Four people compete on horseback playing playing polo. +57107,some giraffes rocks plants trees and a building +296657,A group of men enthusiastically caught in mid air at the same time. +181383,"Several people stand on a narrow, long pier on the water." +359066,a woman in an equestrian outfit riding a white horse +147375,A young boy using a computer on a kitchen table. +378538,People that are walking with skateboards in hand. +447927,A picture of an elephant standing on top of a boat. +419560,Two giraffes near a tree in the wild. +196009,"A spoon, a large carrot, a medium carrot and a small carrot, on blue-green speckled surface" +470513,A man is walking along the beach holding a surfboard and a fishing pole. +388422,a close up of a person kneeling holding a rugby ball +210098,A sky view looking at a large parachute in the sky. +316503,A man using a pair of scissors to cut a pizza +528956,A bedroom with a lamp and television on +350023,A city street show cars going up and down the hill. +57904,A couple of slices of a cinnamon roll on a white plate. +33683,Two people flying a kite in a green grass covered field. +73326,An open refrigerator including bottles of various food. +179094,Many umbrellas waiting for any downpour from the next storm. +383289,A security officer using a segway as a footrest +15850,"A wooden counter with broccoli, onions and chicken on it" +502327,The man holding a backpack is next to a man wearing a business suit. +298726,A group of men play a game of tennis together on a grass tennis court. +283186,A helmeted and goggled skier leans to get around an obstacle. +334642,A lane closed traffic sign sitting next to a no right turn sign. +541158,a cat that is sitting under a umbrella +449950,A basket of flowers on the counter of a bathroom. +395752,The trolley is picking up passengers along the road. +199995,"A skier on a downhill slope, with a ski resort in the distance." +245013,A large white teddy bear sitting on top of an SUV. +267861,A red motorcycle with a back seat parked on the side of a road. +199940,A black cat rubbing up against a bottle of wine. +18148,A herd of sheep standing on a grass covered hillside. +429580,People playing Frisbee with a drown and white dog. +487583,A white toilet and cup in a room. +534271,Several different pots place on a stone floor. +425227,There is no image to describe for this question. +89930,A Wii remote is in s hand with a thumb on a button +267351,A large clock tower is yellow and white. +475995,A man sitting next to two large dogs wearing bandannas. +131335,historical buildings and people walking in the streets +249952,A small cat standing underneath an umbrella on a table. +78200,"A mini-fridge stands open, with bottles visible inside." +534565,A very big group of skiers on a big snowy hill. +100203,a child cutting a soccer themed cake on a table +89271,A cat wearing a hat while resting it's paws on top of a chair. +464831,People are in a circle at a table on laptops. +247714,a man standint by a little fence for a bus stop +489873,"Breakfast for four with omelets, fried eggs, bacon, ham, french toast and pancakes." +316015,A cat is sitting on a desk next to a computer. +209773,A man with sunglasses under a blue striped umbrella. +135748,A tiny dog in a doggy bed covered with a blanket. +258472,A group of people walking across a bridge over a river. +48791,A giraffe leans over a fence to eat from a happy woman's hand. +148730,a boat is sitting next to a dock +229020,a computer is on a desk next to a lamp +131800,A man taking a large bite from a sausage sandwich. +228604,A young girl washing her hands at a sink while someone watches. +460682,a horse that is laying down in a field +227985,Two sandwiches cut in half sitting on top of a white plate. +500784,A large fire place sitting next to a doorway. +573223,A little girl in a public bathroom for kids. +503311,The kite surfer is walking on the beach holding the kite. +446917,A person riding a racing bicycle with a banana and sunscreen in their back pocket. +380459,A person standing in front of a plate of food. +127596,Person looking at video on cell phone in crowded area. +13127,An locomotive blowing out a cloud of steam. +138995,A boy is dressed up in a tie and is holding a stick. +339823,A young woman in an orange dress holds a black umbrella +520108,A big screen TV in a fancy looking Hotel room +402971,A pitcher in the middle of delivering a pitch. +482172,A man in a wetsuit on a surfboard in the ocean. +290875,A group of men on a field playing baseball. +526827,a couple of scissors resting next to each other on a mouse pad +491872,A person pouring water into a drain from a bowl. +315986,Man brushing his teeth and woman curling her hair +253835,A woman and a small child watch a train as it passes. +105482,this is an image of a man playing tennis. +107596,A group of friends sitting around a table eating pizza. +107226,Two men being drug on buggies by dogs. +38828,A woman riding a horse while it eats grass +436551,two black birds are swimming in some water +27569,Three people standing next to each other holding ski equipment. +87718,A dog's head pokes over the foot board of a bed. +144878,People around a purple truck loaded with a vehicle. +467386,You will not get anywhere if you open these doors and try to pass through. +92658,A couple of soldiers standing on top of a boat. +297933,a man standing on a skate board on the top of a ramp +263014,Two zebra walking down a small rural road. +460294,A group of women walking across a parking lot with umbrellas. +127873,A group of children standing around a table together. +321107,A woman rides a bicycle on a road next to the median. +315824,A bear is sitting in the grass with a cub. +541909,A man leaning on his hands on a tennis court. +425462,A baseball player captured while throwing a ball. +310121,"A baby, an old lady, a woman, and a man prepare for turkey" +496571,"A person is eating at a table with plates, a fork, knife, spoon, cup, and cell phone on it." +390954,A piece of chocolate cake with three different colored icing drops on it. +347163,Traffic stop sign with dilapidated building behind it. +163575,A man and two dogs laying on top of a bed. +547798,A batter standing in the batter's box waiting to hit the baseball. +256941,a bicycle with a basket and a blue and pink umbrella +310597,A man is in position to play on a tennis court. +474437,A tennis player wears a headset while taking a break. +415536,A bus is driving on a wet road with many green trees on the roadside. +334118,"A wooden table topped with bowls, baskets and dishes filled with food." +252008,A zebra standing on top of a lush green field. +174989,A man sitting next to a woman while they both talk on cell phones. +63922,The little boy on the skateboard is wearing a helmet. +154358,A person setting in a chair in a living room with a fireplace and windows. +146504,A person holding a computer mouse next to a keyboard. +203639,A girl in a dress and shirt standing in a field. +155317,A cake sitting on top of a white plate. +560266,Two brown bears swimming together in the water. +448599,"Three zebras stand side-by-side, drinking water from a river" +331875,A group of school children pose for a class picture. +436636,A group of surfers in the water trying to catch a wave +337275,A man laying on a chair feeding a cat. +458221,The electronic light has many tiny green dots. +217846,a taillight is in a rear view mirror and some cars +335532,A little girl eating food while sitting down. +131557,A pizza sitting on top of a plate on a table. +509116,A herd of sheep walking across a snow covered field. +494144,This kite is flying in the air while three people are watching. +379869,a couple of cats that are sitting on a fence +259336,ON THE DESK THERE IS A DESK TOP COMPUTER WITH A MOUSE +89032,A man with an umbrella is standing in front of a shop. +368220,A man swinging a tennis racquet towards a tennis ball. +557059,"Cauliflower, carrots, and broccoli are arranged in a vegetable bowl." +446461,A man playing drums while making a creepy face. +56713,Lone zebra as seen through narrow opening in enclosed area. +385042,A black and white fire hydrant stands on a brick sidewalk. +130599,A man punching an innocent giraffe in the side of it's head. +189248,The young children are on the water learning to surf. +486576,A man who is playing a video game. +383594,A white plate with a fried chicken sandwich. +11374,A branch stretches in the air while an airplane flies in the distance. +292206,A group of spectators watching a woman drag her luggage. +213547,A woman holding a small cake with lit candles. +75786,A brown bear cub walking in a forest area next to a rock. +177953,A man and woman are singing and playing music. +141518,Two insects on a tree that look similar to peeled bananas. +278509,a motorcycle sitting on the sidewalk in the shade +203635,A brown bear licking the ear of another brown bear. +319350,A woman with glasses drinking a glass of wine. +108130,The young man is catching a Frisbee over his back. +561853,A truck parked in a forest surrounded by trees. +494427,A laptop computer sitting on top of a wooden table. +32708,The man is sitting down on the floor playing a video game. +271402,two little girls in tennis uniforms standing next to a scooter +572861,A brown horse pulling a carriage down a street. +374352,A luggage cart stacked with a very tall pile of luggage. +282591,A cat wears a green tie and stares straight ahead. +284535,A bird with a fish in its hand on a beach. +227952,An empty modern kitchen is lit at night +203732,A white toilet seat in some lavatory somewhere. +117223,A baby sitting on a bed between two laptop computers. +212927,A Woman sitting on top of a bed while using a laptop computer. +63394,A man riding a surfboard while flying a kite. +173832,a cat laying down while playing with a computer mouse +404517,A woman is playing a frisbee with a dog. +413822,Man in period costume rides vintage motorcycle with German flag on back +63715,Comical picture messages are on the restroom wall. +309935,A vase sitting on top of a table filled with flowers. +324308,A small cluster of bananas growing near a fence +496800,Two trains pass each other near some buildings. +409119,A large plane with people alighting at the airport +374576,A room with a bed and some windows in it +576483,A bouquet of flowers in a clear glass. +5477,large mustard yellow commercial airplane parked in the airport +470364,A woman sitting at a table with a cup of coffee and two donuts. +518324,A two color cat laying on a desk near a laptop. +567535,Several calves graze and wander around a snowy field. +245764,A cat sits on the edge of a toilet. +361472,Small children with protective gear playing in a park. +483667,a man wearing a top hat and a red tie +322567,A wooden bench surrounded by weeds has a dedication plaque +358296,Snowboard rack at bottom of ski hill near building. +226408,Child laying down with arms extended in the air. +112698,A male professional tennis player engaged in a match. +473323,A man holding a baseball bat on a baseball field. +159981,A sandwich on a napkin next to a drink +83097,A microwave oven sitting on top of a blue table. +569960,This pizza is square and has pepperoni and mushrooms. +451087,the batter is ready to hit the ball +122969,two zebras are standing together in the woods +92749,A scene from the zoo with giraffes in an enclosure +451151,Two giraffe are standing close to many trees and shrubs. +352748,A train with brown cars on train tracks. +538319,a man on skis holds onto the hands of a small girl on skis +438907,A man is doing a trick on a skateboard. +84158,A bear standing at the border between the shade and the sunshine. +427111,A boat pulling two water skiers in a body of water. +315018,A woman takes a selfie picture with a giraffe in the background. +280865,"an open sandwich with meat, onion and egg slices " +146509,The front of a business that sells teddy bears. +175244,A white trunk parked next to a stop sign. +507318,"Grapes, banana, and kiwi are displayed on a plate." +236010,A red bus parked in front of a building on the side of a street. +402077,Two young boys sitting and eating very large carrots. +21470,A baseball player is waiting his turn to catch the ball. +344816,The train engine is followed by a line of open cars. +315384,A skateboarder turning around on a half pipe. +33243,A bathroom with a white bath tub and two sinks. +530162,Several people standing on a sidewalk under an umbrella. +347265,A person skiing through a snowy forest with tall trees. +30213,A kitchen filled with a stove top oven and a refrigerator. +92478,people standing on a beach with a kite flying in the air +452767,Six women pose together with a couple of tennis rackets. +384952,a kitchen with a table a stove and a sink +365305,Two small pepperoni pizzas served on a white plate +268717,a red and blue fire hydrant and people walking in the rain +544519,An Asian child brushes their teeth with a blue toothbrush. +335374,A poster of a professional baseball player with another person's head superimposed on top. +403065,A beach patrol vehicle thats performing his duties on the beach. +193717,a fire hyrdant sitting on the sidewalk next to the road +162643,A bathroom stall that has very dirty walls. +149375,A young person riding a skateboard at a skate park. +5037,A passenger bus pulling up to the side of a street. +447569,Passengers prepare to get on the city bus +306914,people in a field lfying many kites flying in the sky +187585,a young man is on his skateboard doing a trick +356490,A person is paddling on the surfboard on the beach. +139785,A pie is sitting on the ground outdoors. +79878,The interior of a bathroom with crumpled and torn toilet paper on the floor along with a toilet roll that has been pulled. +258209,there is a man wearing a suit sitting on a street bench +142698,"A man with earrings, a nose ring, a beard and a grey tank top with a bunch of bananas in his hand." +62251,Firefighters are riding in the back of a fire truck. +65357,a black red and green train engine on a track +508541,A motorcycle parked in front of building next to a umbrella covered table. +387470,A pile of luggage sitting next to a lamp. +543300,A boat sits on the side of the dock. +374593,A man and woman standing over a table with wine. +39420,a couple of doughnuts are wrapped in paper +518249,Downtown intersection of large city with pedestrians and vehicles. +112128,Two sheep are bent down grazing on grass. +21240,Person surfing on surfboard with waves and trees +238449,A kid standing next to a globe in a room. +138022,"A red van with a surfboard strapped to the top, parked on a street." +186240,An elephant standing next to a bail of hay. +560598,A lady frowning into the camera over dessert and wine +127475,A cow standing in the shade of a tree. +377595,A gigantic pastry held together by a bag and skewers +511349,Two cows in a small penned area standing together +418944,a young girl in the bathroom using a hairdryer +235833,A toilet is shown against a wall with wires. +283785,In a library children look on as costumed characters give a presentation +18781,A hot dog on a plate with sauerkraut and some small green pickles +192834,"A bed, a table, a chair, a TV and a bean bag in a room." +47775,a bathroom with two sinks two mirrors and a bath tub +182245,Man sitting at a small table behind a pizza. +186412,A garage with the door open to show a group of people sitting in chairs and a dog. +379475,A couple of laptop computers sitting on top of a desk. +303264,people in a terminal with suitcases taking some pictures +3093,A blue bowl sitting on a table with a banana in it. +455735,A group of people sitting around dinner tables. +100977,Two women each feeding a giraffe at their enclosure. +438186,A man doing a one handed push up while eating. +400290,A couple of people riding skis down a snow filled trail. +324436,An elephant eats leaves off of a tree. +6854,A poster that indicates the letter S stands for sandwich. +221659,a pizza with broccoli on it on the table +487299,A city street with traffic lights flooded by water. +544198,A kitchen has dark counters and wood cabinets. +404027,A man holding a tennis racquet while on a tennis court. +467528,A person putting mashed potatoes in a hot dog but on a wood cutting board. +82150,A male holding video game accessories in front of his face. +534942,A black cat has a white bow tie on. +44294,A black refrigerator freezer sitting next to a dishwasher. +296604,a microwave on a kitchen counter above a dishwasher +201190,A woman with a braid holds her dog in her lap. +454161,there is a small white slice of pizza on a white plate +216198,Two men who are standing in the grass near a soccer ball. +403087,A young boy riding a skateboard across a brick street. +571544,a black cat is standing on a small desk +465692,Person in jacket riding a bicycle on a street. +421569,A brown and white dog on street next to a blue car. +291394,assorted cars and buses sitting in a parking lot +454776,A person in short shorts walking up a do not enter bridge. +304159,an old fashioned table holding onto some suitcases +368679,various food dishes laid out on the floor. +477974,"2 people take a stroll, as a stop sign looms in the foreground." +24243,The girl is sitting inside the broken fridge on the side of the road. +282066,People are flying kites at a field in mid day +412019,A large airplane flying through a blue sky. +356937,A cross country skier traveling past many evergreen trees. +312870,A city street filled with lots of traffic and tall buildings. +577949,a street pole with some signs sitting on them +441553,A crows of people standing outside of a train. +254983,A man swings a baseball bat while another man watches. +425324,A man running towards a kick ball on a field. +184974,a body of water that has some boats in it +431208,A picture of a man in a blue baseball uniform pitching for his team. +209145,a kitchen table and countertop with backsplash behind it +580248,Two surfers with their heads disguised at Joe Biden and President Obama hold a surfboard +17869,A man is standing on the beach playing with a Frisbee +152740,A herd of animals grazing on a dry grass field. +355660,A woman in a bikini top carries a surf board near the water. +226419,A random plane in the sky flying alone +322987,a stuffed teddy bear in a pink dress holding a stuffed bouquet of roses +192871,A glass bowl filled with oranges on a table. +31050,A vase with various flowers in it on a display case. +118929,a close up of a cat on the ground near a chair +361022,A man kneeling down on a sidewalk to hug his two dogs. +361819,A couple of people racing down the side of a ski slope. +307073,A person standing on a stage with a dog flying through the air catching a frisbee. +310999,Green bananas are growing on a banana tree. +466118,Bathroom designed to look like a caveman's den. +219514,some street signs sitting on a pole next to a street light +534274,"A hot dog with tomato, lettuce, and pickles." +199257,a green sign on a pole with a street light +480000,The plates of food are ready to serve. +184762,A gold clock with ornate iron hands keeps time on a large clock with roman numerals. +314331,A three-tier wedding cake with a tree decoration. +124128,A street and the buildings on it and some construction. +205676,A group of people walking on a street by some cars. +250917,There are two people sitting in a restaurant looking at cell phones. +80462,some lightening is striking off in the distance +522406,A red stop sign mounted to the top of a metal pole. +385194,"A baseball players stands at home plate, waiting for the next pitch." +430533,A foam container filled with a hot dog and a piece of water melon. +159170,An orange cat is laying on the couch. +320461,a guy doing tricks on a skateboard on a skateboard ramp covered in graffitti +262686,A man pointing at some food on a trey. +534121,A couch and a chair in a small room. +494913,Residential living room with fireplace and large television. +393811,A grey duck flowing in water next to branches. +302555,A plate of food next to a cup of black coffee. +514518,A skiier skis down a slope covered in ski tracks. +556703,A small pizza is displayed on a small plate. +377911,three sheep standing next to each other in a field +285114,very many planes being offloaded at the airport +149669,An elephant walking down a street next to a crowd of people. +44263,The room has many potted plants in the window. +258588,A boy holding a tennis racquet on a tennis court. +64313,A group of giraffes next to a fence. +476903,Two men playing a game of frisbee on a lush green field. +172658,assorted veggies sitting on a table with a pamphlet +362090,The man is sitting on the bench on the side of the building. +105960,A man kite boarding in the ocean next to a sandy beach. +385473,A close up of a front end of a motorcycle and tire. +145567,The dog is swimming in the lake on a sunny day. +347675,"A person holds a small, rather stumpy banana." +541631,A empty street with a crosswalk at night. +358209,A donut on a plate in the microwave +306444,A bathroom scene with focus on the toilet. +426238,A group of three people splashing on top of a wave. +468505,a guy at a table with 6 plates of food around him +44151,A bottle of water sits on an empty bench. +467821,A man standing on top of a skateboard ramp. +272080,A very tall building with a clock mounted to it's side. +346185,A man holding a Nintendo Wii controller in front of a TV. +395363,A person on a court with a tennis racket. +99054,some planes on an air port run way +43625,A man on the side of the road holding a frisbee. +484636,A stuffed bear and baskets of food in front of a market. +43289,A cat looks at the camera while sitting on the laptop. +132796,Group of people riding on seats on top of elephants. +500814,A little girl that is walking in the road. +23660,A lot of people that have some animals. +534161,A young boy eating a big slice of pizza. +330845,A man riding a boat on top of a swimming pool. +505371,A brown bear walking in white and black boots. +352127,A group of chefs preparing food inside of a kitchen. +522032,A giraffe standing in an open field next to some rocks. +564865,A yellow fire hydrant is standing alone in a parking garage. +428847,A bike parked next to a red door on the front of a house. +321089,An apple tree filled with lots of apples +217005,a large amount of plants growing in a forest +166527,an empty train station has very nice clocks. +419080,"A sign sitting next to a sidewalk with a garbage can, traffic cone, and several fire hydrants on it." +428562,a small sheep is standing in a pin +136250,A cat is standing on a board game +70434,"The bathroom has a sink, toilet, and glass shower." +433714,Two people riding on the back of an elephant through a lake. +19221,A raw piece of broccoli with something growing from it. +580847,A young lady holding a tennis racquet in her hands. +293027,a black and white cat hugging a handbag +350688,the man is leaning over taking a picture of another man +293749,A scene of a park with a plane in the sky in the background. +299349,A hand holds a collection of orange and blue scissors. +108904,"French fries, two hot dogs, a pickle, and cup on a table." +172718,A little boy wearing a white shirt and tie. +234328,An open refrigerator with food and condiments inside of it. +509536,Two people are looking in a mirror near a traffic light and fire hydrant. +359,A traffic light over a street surrounded by tall buildings. +21644,A parking lot filled with buses parked next to each other. +495388,Two hot dogs sitting on top of a foam container. +168686,A lot of food that are in some baskets. +87204,A cake is shown decorated with icing and fondant. +82787,Two buses passing each other by while traveling under a bridge. +293505,A person on a motor bike next to a cow. +414510,A few people sitting by a busy street +367953,a woman in the street holding a large opened umbrella +431557,There are three giraffes and a goat inside the wire fence. +62865,three giraffe stretching there necks to reach high leaves +507065,A little boy sitting on a wooden bench eating half a sandwich. +17260,A large group of birds in the water. +513789,A bed sitting in a bedroom under a window. +418251,A painting of a yellow train car sitting on train tracks. +400010,a woman is sitting at a small table +56646,A black cat laying on top of a brown piece of luggage. +431026,a street sign on a city street near some tall bushes +166340,A man flying a kite while standing next to his small white dog on a beach. +460183,A person slicing up a bunt cake on top of a table. +426687,An elephant is seen wandering around on a sunny day. +232679,Laptop and extra computer screen on top of desk. +136795,A plate of Italian food with vegetables sitting next to a fork +547759,A lunch of two chili dogs and a grape soda. +355569,A bunch of people in turbans at a parade. +133291,a couple of guys that are eating some food +75090,A bear with a flat head stands in an enclosure. +63521,Twin baby girls wearing hats eat ice cream. +334530,A man riding a surfboard inside of a wave. +350111,A group of people at the beach windsurfing. +283028,A small cat is standing near the computer keyboard. +130527,a group of cows grazing in a green grass wire fenced pasture. +241868,An adult zebra and a child zebra walking through a lake. +516318,A man surfing beside a bird on a cloudy day +369667,A young woman riding a pink surfboard on a wave in the ocean. +505471,A man holding a cow while standing in a forest. +329455,A very large pizza on a wooden table . +446358,There is a snow boarder doing a trick in the air +572349,A group of street signs casting a shadow on a white wall. +61315,A little boy sits in front of several tortilla pizzas. +205332,A man in a cat holding a green frisbee. +198247,Many boats are docked across from a city. +544237,A woman preparing food at a restaurant for customers. +306404,An man taking a picture of a sink through a mirror. +303566,A bunch of boxes that have fruit inside of them. +378968,A couple of cows on a grassy field. +65057,A man with a football being chased by another man. +32258,A man sitting on top of a toilet with a toy on his lap. +120544,a boy skating very high on the walking steps +67867,A zodiac for the coast gaurs about to launch into water +488832,A large sandwich sitting on top of a table. +479379,A young man with a skateboard on the road +125656,two women sitting and looking at a cell phone +255232,A bike parked in front of a wooden structure. +161202,Motorcycles parked curbside in front of a run down repair shop. +354533,A motorcycle sits parked across from a herd of livestock. +402778,A brown dog running with a yellow frisbee in it's mouth. +413126,Someone sitting down with their finger on an ipad. +385377,three women and one man drinking wine and having a good time +254919,There are many cars parked next to the ship. +174420,A red train driving on a train train track next to an elevated stone sidewalk. +513181,A ship sitting at port on the water front. +287559,The wing of a plane located in the sky above a sea and city. +300353,A man in uniform talking on a cell phone in a living room. +545749,There are three semi-trucks in this hangar two facing in and one facing out. +215622,A beautiful woman sitting in front of a laptop computer. +507719,A man that is standing near a horse. +514402,A clock mounted with chains outside a building +43165,Two zebra standing next to each other on a field. +269419,a tall monument with clocks on all four sides +332074,Young boys on skis gathered in a group at the top of a hill. +405365,A person in a ski gear standing on a snowy mountain. +169048,A man sitting next to a little girl on a wooden floor. +395514,Black and white photo of a family with a dog and females holding tennis rackets. +132689,Park full of trees with a table and umbrella in the middle. +357,A group of men playing a game of baseball on top of a baseball field. +352949,A hipster emo woman with very large breast. +79047,A statue of a bear sitting in the middle of a sidewalk. +185373,A row of parked motorcycles sitting along side of a street. +518006,A room filled with two pieced of brown luggage and a mannequin wearing a shirt. +399129,Surfer heads to the sea with his surfboard +447789,A red do not enter sign under a green street sign. +520892,The woman is eating a hotdog with a very long wiener. +343708,A parking lot outside of an extremely large building. +293548,a couple of people are having a conversation in a busy place +482742,Man on bike on street corner with buildings and stoplight +306936,A close up of a plane with several people around it on the ground. +106935,A lone zebra standing near some leaves in the grass. +194208,A messy living room and kitchen area of an efficiency apartment. +440830,A young woman is grabbing a pile of luggage. +219690,A baseball player is getting ready to hit a ball. +574424,a person watching another person doing something on a computer +375691,A white refrigerator covered in lots of magnets and calendars. +384010,White plate with blue rim featuring seafood with vegetables and rice. +392392,Men and women are riding on motorcycles on the street +328512,The head and neck of a giraffe with bare tree branches behind it. +450719,A giraffe drinking water from a pond with it's legs spread +171678,A red stop sign in front of a small house surrounded by palm trees. +51095,A black cat standing inside of a piece of luggage. +405534,A couple of children sitting down on a white wall. +248148,A red train traveling past a train station with red cars. +341752,A brown and white cow standing on a dirt road. +109673,A man standing in front of plates of food on a white counter. +134703,A person on some skis in the snow. +261744,A couple of men standing on top of a beach flying a kite. +206068,"Grapes, kiwi, bananas and tangerines are sliced in a pile." +257236,A man sitting on a bench on top of a pier. +500422,A tall giraffe standing next to a herd of deer. +571728,A dog laying down with a Wii Remote between his paws. +418110,A dog that is in front of an open refrigerator. +39900,A couple of men riding on the back of a horse drawn carriage. +352729,A person is using a surfboard on a wave. +300913,A cat looking forward while laying down on a green cushion. +419816,A young woman is laying in bed with a phone. +27438,Two sheep one with a bell tied to its neck walking in a green field. +187451,Three men are standing on a beach in front of their surfboards. +91318,A guy with a scissors cutting the cast off the arm of another guy. +69106,Three zebras standing in front of a wall. +343053,An older man sitting at a wooden table with a plate and a drink. +284043,This quaint backyard has a shed and a bench +437514,a wood bench is next to a tree +146981,A black and white cat laying on top of a bench. +394715,a wooden desk with radio equipment in a room +275015,a man is flying a kite in a field +377235,a man is sitting under a red umbrella outside +436555,Person holding an umbrella in the shape of a frog. +64746,A giraffe that is standing in the grass. +119961,Five cows graze in front of a two store white building. +241668,There are two people enjoying a wedding reception +171201,a couple cutting a wedding cake in front of them +238062,a close up of bread a plate of asparagus on a wooden surface +418604,A baby sleeping on its stomach on a bed. +443605,Doughnuts sitting on a brown bag on a table. +222825,A kitchen with a stove top oven next to a white fridge. +510651,A young couple smile as they sit in a nice restaurant. +183437,Three Asian people are riding on top of an elephant. +170955,PRESIDENT BARACK OBAMA WALKING NEAR A WHITE BUILDING. +456519,A tennis player playing a game of tennis. +5965,A big teddy bear on a black motorcycle. +561745,A baseball player taking a swing at a ball +28114,A bicyclist is riding past a bus that is parked. +484893,A couple of kids petting sheep inside of a corral +372844,two men playing frisbee while on a camping trip +80395,"A picture of an alter holding bananas, skeletons, candles and flowers." +530466,A passenger train that has some graffiti on it. +517674,A cross walk crossing a street with lots of traffic. +240273,A pile of green yellowish banana sitting in a basket. +579070,A group of people sitting around a table. +388398,A girl and boy are sitting together on a bench +119547,Two well dressed men amongst a group of people watching and carrying microphones. +412690,The boat is in the middle of a huge strom +337497,A herd of elephants at the watering hole. +71682,lemons and limes in baskets in the produce section +550084,A green sign says Thruway one fourth mile. +408624,Boats are parked by the pier under the moon. +94823,A brown dog laying next to a bottle of wine +456768,A stop sign stand next to the branches of a tree. +470801,A girl flying a red kite high in the air. +78843,A young man kissing the top of a young woman's head. +451573,Group of young men standing in fenced area with skateboards. +417074,The parade features these people riding or even standing atop elephants +472316,A group of people ski over snowy ground. +490871,"Various foods on a table that include bananas, an apple and an orange." +335578,A tennis player hits a ball in an indoor area. +217400,A silver and green train pulling into a train station. +462687,People are sitting and eating various foods in front of a blue building. +308295,A dark room with a man at a desk that has a laptop and an projector image on the wall. +350794,The panda bear is relaxing on the cool rocks. +428698,a living room that has some furniture in it +17282,a large gray elephant standing next to a crowd of people. +163296,A close up image of a green plant that looks like lettuce. +560757,a person riding a surf board on a small wave +431404,A man sitting in a bar wearing a hat and white tie. +167205,a big white plate of some kind of food +384718,An elephant is standing outside of the water while the others are inside. +498709,A motorcycle parked on the side of a road near a city. +296222,A man wearing sunglasses while holding a plate of pizza. +235692,Closeup of two red-haired bulls with long horns +529159,A very old picture of a women posing. +32941,A street that has all the traffic stopped at a traffic light. +492678,A man licking a tie by a group of ties. +338878,Closeup of an orange stuck between a tree an its branch. +27609,There is a plate of vegetables that have been cooked +182834,A living room filled with lots of furniture and a red stair case. +10440,a helicopter is flying upwards in the sky +327401,A parrot is eating some food from his own claw +575577,A woman skiing down the side of a snow covered ski slope. +557595,"Lower body shot of man in dark cloths, walking away in cross walk area, holding skate board." +469755,A group of surf boarders surfing in the water. +549109,Black and white dog sitting on a futon near a TV. +247543,There is a yellow and green train seen riding on the tracks +477143,a giraffe leaning over so it can drink some water +409251,A man and woman are playing a video game +313491,A metal toilet with a blue seat in a bathroom. +215287,A red bus stopped at a bus stop near a building. +363325,A cute cat sticking its head in a box of pizza. +182233,A aqua colored truck carrying a wide load down the street. +317656,A piece of pizza is placed on a plate between a fork and a knife. +344171,A row of umbrellas next to trees with buildings in background. +31749,A demonic looking chucky like doll standing next to a white clock. +435475,Different foods are neatly arranged in a bowl ready to eat. +297249,Man throwing frisbee in elaborate fashion in field +210795,A girl sitting on a sofa in front of a laptop. +427521,"A bowl of prepared food including rice, meat and broccoli." +201717,A box of wrapped apples on a table. +230175,A family is grouped on a sun porch for a photo. +15908,a kid is riding a skateboard on a ramp +564572,A woman is typing on the keyboard of her computer. +368980,A little girl standing in a room with no shoes on. +162887,A hand holding a bunch of different types of clock sand watches. +404801,Many brown cows are seen walking in a grassy field. +282553,a person standing talking on a cell phone +217153,a number of people in uniform using cell phones +324139,A group of pigeons sitting on a park bench. +210458,A small zebra walking across a dirt field. +418435,A parking meter sitting on a sidewalk next to a parked red car. +85956,A yellow double decker bus driving under a bridge. +64510,A group of jets sitting on top of an airport tarmac. +230585,A large group of people running after a frisbee +66761,A bunch of cellphones that are on a table. +382728,A train with many cars driving on rail road tracks. +116244,These are a few animals out in a field. +174482,a blue bike parked on a side walk +53635,The young man is practicing on his skateboard. +48555,A group of people on horses racing together. +448024,An orange cat laying in front of a green wooden bench. +132116,The two bowls have a salad in them. +59660,A busy street covered in various traffic signs and advertisements. +381051,A little girl sits on a chair holding a teddy bear. +404738,A ceramic pot is laying in the grass +259465,A litte girl in a blue jacket holding a carrot. +482071,Furry bear walking in a thick grassy area. +391834,A man is walking while holding a racket on a tennis court. +137844,a skateboarder in a black shirt is doing a trick +149150,A beautiful woman looking over a mans shoulder in front of a computer. +467966,A small white plane sitting on top of the ocean. +548592,A young child running while flying a kite. +520933,A black and white cat sleeping on top of a bed. +275175,Fruits and vegetables are on the cutting board +224862,A white bus sitting on top of a grass field. +424247,Many people are dining at a public restaurant. +470417,Two men riding surfboards on a wave in the ocean. +229139,A cat is laying inside a suitcase with a blue interior that is sitting on top of a bed +191580,The meal of fish has a side of broccoli. +148392,A man with safety equipment next to a fallen tree and red fire hydrant. +81390,A couple of giraffe standing next to each other. +107389,A woman playing tennis and leaning back with her racket to hit a ball. +92134,A beach area with several chairs and umbrellas. +168491,People in public playing with video game controllers. +192247,A herd of animals walking along a lush green field. +337563,Two girls sitting on a bed eating bananas together. +261082,A dog laying on the beach in the sand +27017,A zebra standing behind a fence in dirt. +395452,"A plate with a starch, vegetable and meat on it." +19042,A large bird that is standing on some rocks by a river. +453799,A man sits on top of a motorbike. +275034,A person kneels a bit as they race down a special ski path +524011,two large air planes on a run way +13639,A young woman wearing a suite and hat holding a cell phone. +336579,The view of a traffic light through a car windshield. +526342,A Pepsi refrigerator sitting outside of a Mini Market. +236985,Large group of baked goods sitting on display next to each other. +459103,People are walking around outside a huge church. +564276,A man standing next to a parked bus and various people riding bicycles down a street together and one person holding a sign. +71072,Two girls in a room playing a Nintendo Wii. +440562,Several people sit around a table in front of a large window and many bowls are filled with food. +475295,A plate of glazed donuts and pieces of a braided glazed donut. +364589,A couple of zebra walking next to a giraffe on a lush green field. +4576,A crowd of people standing around a pile of bikes. +320905,The sign is warning people not to feed the animals. +330974,A b=very large robust giraffe eating leaves from trees +472643,Children cover a parking meter in a red knitted garment. +468471,A man jumping onto a bed sitting next to a table. +121112,two cats in an office space looking at the camera +245965,an umbrella in a field of flowers +132223,a man is playing video games on a screen +504948,A blue motorcycle parked outside of a building. +185292,A man riding a wave on top of a surfboard. +433971,The Samsung building on the corner of La Brea Ave. +314613,A sailboat with a dragon on it and the word Tolkien +174893,A young girl cutting paper into tiny pieces. +158133,A skier leaping into the air as an onlooker watches. +332153,A green train traveling through a forest with trees. +199943,Two black bears sitting in the dirt eating. +132510,A person in winter gear riding a snowboard. +85145,An airplane flying in a blue sky with it's landing gear down. +143305,A man riding a board through the air under a blue cloudy sky. +268044,Giraffes have a very long tongue to go with their long neck. +367398,A man with a remote in a small room. +50965,A large red brick clock tower with a clock on each of it's sides. +87354,A set of train tracks with a street sign next to them that reads 34th Street. +146831,A person is riding a skateboard on a curved ramp. +421915,A couple cuddle together in the cab of a lovingly restored flat bed Ford +551338,A woman standing in a park holding a yellow frisbee. +517315,Collection of books scattered all over a bed. +25467,A person sitting on a sled at the top of a hill. +291962,a kid running with a kite in his hand outside +420840,A female toddler who just finished eating with a bow in her hair +161124,Two skiers sliding down the hill on the pathway. +341469,A man standing next to suitcases and bags. +283380,an orange motor cycle sitting by the water +69923,Three people on the beach standing with surfboards. +147300,A sign in the grass stating the next highway. +398628,A group of giraffes hang around in the zoo. +526555,"A group of people some with designed clothing, some with plain clothing on." +569674,Two zebras grazing in the high brown and green grass on the Savannah +116786,Commode in brightly lit area of old building. +467848,A man standing behind a truck with a red trailer sitting in front of a building. +229324,A chandelier hangs in the foreground of a picture of a kitchen. +176312,A woman scanning a tour map with her smartphone. +498806,A mini train about to go through a tunnel. +384496,A couple of large brown horses pulling a cart behind them. +240279,The stalk of bananas is still very green. +97946,A group of men using poles to push themselves on skateboards. +416837,A cow grazing on the side of a hill. +232563,A man standing in the street with a umbrella. +313420,A large black bear sitting on to of a stuffed animal. +483754,A man standing in a field flying a kite. +55545,A blue and white train parked next to a loading platform. +105220,A man and woman hold hands as they are skiing. +45195,"A break room has a table, phone, lamp, sink and other appliances." +274593,The white van is driving past the red fire hydrant. +296859,A full view of a teddy bear sitting on the small chair. +573759,Guy riding in his boat with thee dogs +398537,A man in black jacket holding a kite in front of another person. +176017,Three women smiling and eating some food in bowls. +91517,Two street signs are seen on a small street. +332300,A clock mounted on the side of a tall building under a blue sky. +323810,A RED BIRD PERCHED ON A BRANCH IN A TREE. +318056,A tall yellow double decker bus parked next to another bus. +107004,A young boy standing in front of a parking meter. +284860,a traffic light on a side walk near a street +364126,A man in shorts surfing in the ocean +398158,a guy unwraping a big screen tv in his living room +6783,A boarder is jumping high into the air with a sail. +157084,A bathroom with a walk in shower next to a toilet. +351577,A man sitting on a white chair on top of a tennis court. +560880,Two horses plowing the land as a man directs them +497488,A cluttered bedroom with an unmade bed and books everywhere +166664,A big elephant makes its way across the road with onlookers in the car. +143974,A cow walking across a river as a boat approaches on the water. +441445,A giraffe running across a desert plain at a high speed. +6874,A group of giraffes and a couple of deer stand in the dust. +311909,A public transportation bus near a curb with a bicycle rack. +209388,A train engine carrying carts down a track. +181677,A skateboarder in mid air during a stunt +393478,The green and yellow train is rounding the bend of a track. +129864,A man sits in a car with a cat in his lap. +551517,a bird standing close to a parked car +417374,a man on skies is coming down a snowy slope +183287,"Jar of fruit salad, featuring peaches and berries." +402992,Cattle lie in the grass to chew their cud. +227479,a maroon train traveling down a train track next to trees +416931,A stuffed animal laying on top of a blue bed. +117222,A man on bicycle carrying bunches of bananas through street. +492605,A baseball player pitching a ball towards a hitter. +29224,a toilet sits in front of a bath tub +297578,A man walking down a street smoking a cigarette. +412813,a big umbrella sitting on the beach +330110,Hot dogs on a portable grill at the beach +347664,A herd of cattle walking across a sandy beach near the ocean. +214698,A red stop sign leaning over on it's side. +424712,Three people on a park bench look at the phone of the person in the middle. +47916,A white dog carrying a red frisbee in it's mouth. +454509,A person catching a wave on a surf board. +70201,A couple cutting their red and white wedding cake +324161,A large tall tower with a clock on the top. +237464,A group of people flying kites over a beach next to the ocean. +350309,Commuter buses parked in a lot outside an apartment complex. +472704,there is a white toilet and a sink in this bathroom +111547,Several vehicles wait for a toll arm to be raised. +246535,A man standing on a tennis court holding a tennis racquet. +124004,A kitchen area is shown with a bar. +71807,A cake sitting on top of a table with a cake clock on top of it. +375530,A horse standing in the middle of a street. +510942,A small black airplane sitting on top of a runway. +542755,The tennis player looks upset about the game. +191069,A smart phone being held up in front of a lap top. +451463,A young woman riding a skateboard at a skate park. +511929,Wetsuit clad surfer carrying board out into waves. +350485,two cats in a window near a tree +485489,A group of three dogs standing on the lawn +341318,Kids playing in the water with surfboards +21614,Mixed assortment of fish rice and vegetables with carrots. +105689,a closeup of a slice of pizza covered with various ingredients +530600,A group of stuffed animals piled on top of each other. +428125,four scenes with each showing a smiley face doll +173033,A replica of a bear and her cub in a glass case in an exhibit. +357899,A commercial airplane at the gate being serviced +388829,Woman and her dog tends to the herd of sheep +143560,A dark street with a bicycle near a tree on the side of a building. +133149,Sea faring bird flapping wings while standing on wooden railing at beach. +485972,A chocolate dessert cake ready on a plate with a fork +113333,there is a side of a building with many pictures on it +127474,A couple of kids standing around a red fire hydrant. +493286,an old car in front of an old air plane +578385,Three metal pans filled with different types of food. +461435,A person in bicycling gears looks at bananas growing on a tree. +411943,a toilet sitting in a tile covered floor in a single room +332545,An empty intersection of a colorful urban area. +233311,A bowl of oranges sitting on top of a wooden table. +268058,A baby boy putting his hands in a strawberry covered cake. +502630,A Giraffe standing in green grass with a house in the background. +147545,Large sized kitchen with a dining room section. +568630,a little girl hold a bundle of bananas +260774,A brown dog laying on a pillow on the floor. +541053,A large cat is laying belly up on the bed +223496,a small boat on a beat near a body of water +169858,A beautiful girl holding a giant banana in her hands. +188766,a paper design of a castle with numbers and silver designs on it +208560,A group of kids sitting at a wooden table around tree. +504621,A girl with pale skin wearing a hoodie holds up a toothbrush. +453860,A couple of pieces of very nice looking luggage. +117527,A bunch of men smiling for a camera at a crowded table. +433460,A herd of zebras standing around on the dirt. +299457,A man eating candy on a white stick. +507951,A carrot cake is decorated with fresh flowers. +181278,A young boy throwing a baseball during a baseball game. +60992,A man holding a racquet on top of a tennis court. +55109,Flowers are in flower pots as a lace table cloth covers a small table. +300479,an old black and white photo of a train +496722,A post office box is on the side of a busy street. +543528,A big plane flying low on a cloudy sky +154222,A mans reflection in a side view mirror. +192453,a kitchen with a brown oven and wooden cabinetry +458728,A herd of cows are grazing on short grass. +247474,A woman sitting next to a child on a large grey teddy bear. +554347,Young snowboarder being guided on slope by adult. +336961,A man with a orange headband is playing tennis. +524656,A photo of a kitchen with focus on the oven. +526459,"That is a picture of an outside locale. +" +260927,A tall building with a large white statue. +478528,An old bedroom filled with very old furniture. +113403,Three teddy bears laying in bed under the covers. +289337,Giraffe with large trees grazing in gray sky +170779,A man wearing a black water suit surfs through the water +224610,four coach buses parked in a parking lot +409856,A train traveling down train tracks next to two buildings. +337561,A odd looking bike sitting under a purple tent next to a fountain. +221753,A refrigerator freezer sitting inside of a kitchen next to a window. +417716,a red traffic light sitting next to a brick wall. +288776,a cat on a window sill with a bag +297017,A mother duck with her ducklings in a pond. +290165,A large elephant standing on top of a grass covered field. +19402,A COUPLE WEARING HEAVY COATS LAUGHING WHILE EATING PIZZA. +366225,"Apple desktop computer with white keyboard, mouse and monitor on a desk." +193405,a young boy standing next to a sink dressed like a pirate +33073,A bus traveling across a bridge next to a white fence. +31151,Three demonic looking dummies standing next to each other on a snow covered slope. +272311,A group of men standing next to brown horses. +400317,The tennis player perferms in front of a crowd +349525,A small toaster oven sitting on top of a wooden table. +243861,A man riding across a snow covered slope. +288316,An animal biting a yellow frisbee next to another man. +90778,Old man in a dress white shirt and black bow tie. +108548,Two toilets are in a restroom with a vanity with dual sinks. +6845,Two cows standing in water next to a grassy field. +29059,A little girl is holding a large loaf of bread. +442942,A miniature train in a park full of people. +154883,a large cow stairs across the snowy fields +353275,A close up image of a pepperoni broccoli and cucumber pizza. +385005,A kitchen with two microwaves and a toaster. +542042,A grey and white bus parked on the grass. +309852,A cat is looking at the camera while lying down on the chair +363207,A newly married couple sharing a piece of there wedding cake. +189226,A red and silver fire hydrant sitting on top of a sidewalk. +715,A pile of oranges in crates topped with yellow bananas. +19304,A cat and dog walk alongside each other. +533368,The child is standing in the snow near another group of young skiers. +413779,A old train station with trains on the tracks. +447842,A stoplight that is green on the street. +101059,A vase with colorful flowers is sitting on a glass table. +518574,A city street has cars and buses with a green traffic light near a street sign. +22596,a cow standing by a tree and looking at other cows +31339,Their are cars under an over pass at a red light +521838,A red train engine traveling down tracks near a forest. +361860,A snowboarder in mid-air on a yellow board +537513,A bed sitting in a bedroom next to a lamp. +120810,A variety of old motorcycles on display in a shop +578871,A young child standing in front of a table with plates of food. +185697, a person siting on a hill talking on a cell phone +110460,A girl putting her hands in the water spraying from a fire hydrant +151267,A red fire engine truck on the street in a parade. +475923,A black and white dog sleeps in front of a blue door. +280238,a truck on a city street near a light pole +5278,A train sitting in a train station next to a loading platform. +148855,A man that is standing on a tennis court with a racquet. +279806,A dirt bike rider doing a stunt jump in the air +181805,A woman riding a surfboard while in the ocean. +197685,A white boat in the water cruising past a group of people. +4243,There is a boy sitting near many baskets. +109146,A couple of brown horses standing in front of a building. +530337,A young woman hitting a tennis ball with a tennis racquet. +401061,The dog is hanging out of the window. +158127,An orange cat laying on the black shoes of a person standing. +46962,Several sheep are standing beside a road while one walks on it. +3134,A bus turning a corner on a city street. +210564,An open area with numerous bags and moving trucks. +20837,Two adult zebras near a baby zebra eating grass. +211775,A young lady in a dress shirt and a blue tie smiling while having a seat. +30353,A passenger train is coming down the tracks +466575,An old and weathered suitcase sits on the street. +381895,a teddy bear next to a picture of a woman +101088,A group of people standing outside of a small airplane. +6393,A silver colored necklace with a pair of mini scissors on it. +419144,a group of elephants standing around with some people sitting on their backs +489815,A large clock tower with two clocks mounted on it's sides. +447553,A woman flying a kite on the beach while a man standing next to her watches. +91267,"A room with a couch, chair and television." +343629,A brown and white cow lying in a green pasture. +121503,People get on a bus on a street next to a building. +295076,An airplane settled on a runway near water. +104612,A plate is filled with broccoli and noodles. +39152,Children sitting on the floor decorating and putting together kites. +103017,A bedroom with a giant clock hanging in the wall. +405334,A freshly baked pizza setting on a counter +265001,"A couple of birds sitting on a tree, with a blurry background." +53952,Two children sit at the kitchen bar waiting for their meal. +289572,A young girl in a red dress is smiling. +465664,A 787 Jet Airplane sitting on a runway at an airport. +335785,A man holding a Nintendo Wii controller next to a pretty young girl holding another Nintendo Wii controller. +316359,a giraffe standing on grass crooks its neck +16237,A man holding the bridles of a horse. +386436,A couple of cows sanding on top of a grass field. +246233,A massive wooden ship beached on snow covered ground. +577946,Some pots and pans that are in a room. +63290,a hotdog on a bun with a pickle and brown mustard +419828,"A woman with large breast, sitting next to a fedora hat." +116589,A group of zebras stay close to each other near a log. +562622,Fans watching a baseball game on the field outside. +248007,A man riding a surfboard on top of a wave. +579872,A small gray and white furry horse near brush +31118,Christmas decorations surrounding a clock tower in a town square. +344059,Two tall giraffes standing next to each other by trees. +150013,A park bench overlooks the ocean in the snow. +24845,A bathroom with tan walls and fake tiled flooring. +322145,The man walks through a snow trail wearing skis. +253002,Closeup of a logo on a blue and red bus. +223747,a man sleeping with his cat next to him +538231,A wall mounted oven inside of a kitchen with a large entrance. +100434,Mounted horseback riders going down a street in a parade. +345029,a female tennis player in a black top playing tennis +548423,A desktop computer monitor sitting on top of a desk. +492758,An older person sitting in a living room chair near a walker. +229311,A stainless steel kitchen sink on a black granite countertop. +433279,A woman is a green plate on top of her head with company in the house. +473153,a building with some trees surrounding it +533462,A person is sleeping on one side of the bed. +133002,A man riding a motorcycle with a woman on the back. +214046,A picture of an older man cutting a turkey on the counter. +432657,The view of a professional baseball game through a mesh net. +79070,A young male sitting and eating next to a skateboard. +335288,A dog wrapping its leg around a stuffed bear. +322307,A mama elephant standing next to a baby elephant in a cage at a zoo. +89293,Person on skis on a snow covered path. +451284,Some hot chocolate is in front of a computer. +383518,Three men on a kayak paddling on a body of water. +384666,A group of young children riding skis down a snow covered mountain. +154854,"A view of a street, with a church in the horizon." +249550,A spare bedroom with a bed with a flowered blanket. +245540,A big pile of pastries with powder stacked on top of one another. +220215,A bunch of people are rowing in some row boats. +87419,a red truck is parked in a lot +578878,A man sitting down at a table holding a cell phone. +474667,A person holding a black cat next to their face. +404602,A dog laying on top of a bed next to a window. +428231,a living room with a pair of coaches and a big table +431058,A man flying through the air while riding a snow board. +291115,A remote controller packed in a case of some sort. +141524,A small brown dog sitting next to a rabbit eating a carrot. +116255,A plane is flying through a clear sky +547336,The woman sits on the curb writing on a notepad near a fire hydrant. +234366,A clock tower in the middle of a town square. +147675,A flock of birds floating on top of a boat. +292971,A person holds glasses above a pizza with other people. +113493,An adult poses with a young child on the sidewalk for a picture. +225700,A group of people meeting at the public farmers market. +519945,a small boats in a body of water +66336,A woman holding a pink umbrella over her left shoulder. +115075,a person walking down a sidewalk holding a colorful umbrella +352206,a bunch of people are taking a photo together +323327,Three kids having fun on their toy cell phones. +254074,Two dogs play in a dammed up river. +89285,Girl tennis player getting ready to serve ball. +298526,A man doing a skateboard jump trick in front of spectators. +358136,A couple of dogs lying on a bed in a trailer. +51403,Two pictures of a dog sitting next to a wooden chair. +135023,A parking meter on the side of a road. +371058,A guy and some friends standing around with longboards. +549167,A modest plate with grains and broccoli and almonds +270785,"A photo of an outdoor with many things in the scene. +" +149364,A yellow moving truck on a snow covered street. +157170,Four mountain goats standing on a hill in front of the country side. +441577,Open Cingular cell phone with message that says I love this phone +179711,A boy standing in tall grass flying a kite. +386638,Beach goers enjoying a sunny day in the sand and surf. +528714,an image of a man that is on the tennis court +138890,A boy wearing helmet and uniform swinging a baseball bat. +276284,A motorcycle is parked in a parking lot. +421673,The intersection of spring st and 6th avenue. +528458,A bunch of jockeys riding their horses around a track. +26371,A person playing with a dog with a frisbee. +79992,a basket with a few things of fruit in it +79544,A women who is holding a small child in a room with lots of luggage. +248396,there is a bus that is stopped and is very dark +188631,A cluttered desk with several computers on it +138227,A group of orange slices sitting on top of a table. +529981,Many horses stand in a field and eat grass +243495,a toilet with writing under the lid +422517,a man sitting on a bench talking on his cell phone +310059,A television playing Battlestar Galactica with pizza on a plate on the floor. +285967,A man with a racquet that is standing on a tennis court. +544365,a living room with a tv on top of a stand with a guitars sitting next to +579902,A person riding a motorcycle down a street. +117492,A group of families with lots of children in a park. +561366,There is a phone on top of a calculator +540760,A couple of zebra standing in a grass field. +417465,An adult black bear let's his long tongue protrude. +497907,A person on a snowboard in the snow. +303253,A large brown dog laying on top of a raft. +170278,Dog smiles while sleeping in a bed room. +421009,A giraffe is standing erect on a dirt path and grass and trees are in the background. +487897,Two people sitting at a table with a cake in front of them. +187822,A person riding a skateboard on the side of an empty pool. +373577,A man that is holding a tray with vegetables inside of it. +64902,A couple of people who are standing in the street. +219329,Tall tower with a clock in the front near a sunny sky. +404616,A large bear is walking through its space at the zoo. +489358,A food truck is parked in front of other cars on the street. +463048,a couple of red light and a green light +482774,A close up of a computer keyboard that has only buttons +515876,A fire hydrant on the side of the road. +575006,A man holding a foil wrap in his hand near a stove. +517821,a gray and white teddy bear with a flower on its head +240727,Two children are sitting at a table eating food. +111244,"Edward, the number 6 baseball player, waiting to bat." +290827,A train pulls up to an empty platform. +572517,a polar bear following a big winged bird +62109,Three young men prepare to race bicycles back in the early nineteenth century as a crowd of mean watch. +99543,A small dog sitting next to a chew toy that looks like a lion. +304409,a big bathroom with colorful tile walls and fancy lights above the sink +207041,"Room with a couch, tv, dining table surrounded by chairs and two doors " +62817,A person holding a cell phone in their hand with three other phones around. +327872,A small flock of grazing sheep in a very large grassland. +186730,A person standing next to a TV outside of a building. +303908,A bench outside near a body of water during the day. +298697,Horses are standing in an open field in the grass. +386755,We are looking at the floor between the toilet and the wall. +3580,A man sitting on a touch holding a game controller. +91349,A group of baseball players standing on top of a field. +331280,A couple of women and one man kneeling down before two horses. +234413,A white toilet sitting in a bathroom stall next to a TP dispenser. +60128,A white bus driving down a street next to power line. +391140,A man makes a face while holding a video game controller. +173490,A white toilet sitting below a bathroom window. +12827,a girl looking closely at her cell phone holding her cat +435384,Several glasses of wine are sitting corked and are used for the wine tasting. +362506,A man is doing a trick with a skate board. +27917,A road sign next to a car in a city +293733,Man riding a horse in a foreign country. +166565,A computer desk topped with a desktop computer and a scanner. +159044,a surfer wearing a wet suit is surfing on a sunny day +324614,"Young lady, wearing a black dress, brushing her teeth." +525665,A herd of cattle walking around on a beach. +533097,A cut pizza and a glass on a table. +51143,A teddy bear sitting in between a display of books on a table. +339703,A person riding a skateboard on top of a piece of metal. +455720,Some people gathered at a very big table with a big cake. +289229,A man wearing a white lab coat holding a bone saw. +91080,A white refrigerator freezer sitting next to a stove top oven. +13220,A family sitting at a dinner table with bowls of soup. +268478,A kitchen in a restaurant with several hot dogs on a grill with some buns. +327149,a fire hydrant on a sidewalk near a street +49006,A couch that is sitting near a window. +153428,Two cows standing close to one another near a wire. +449903,a woman on a tennis court getting ready to hit a ball with her racket +562419,Large ornamental white clock sitting on a building. +575348,A woman is covering her ears as the train passes by. +202658,An old toilet with a hello kitty cover top. +232091,Several antelope and zebras graze while in a grassy area +397403,a bird standing on a tree limb next to its nest +356950,A man is pointing at something in a living room scene. +214224,"a home bar with different drink ingredients under a large decorative sign saying, ""PUB""." +407235,A group of animals such as sheeps are walking together on the grass +312890,A couple of zebras are walking through a field. +48907,A flock of sheep graze on a hillside. +23575,A computer and keyboard sitting on a cluttered desk. +199358,Luggage sitting on a bed in a hotel room. +334609,A woman dressed in black standing on a sidewalk. +87890,"A table with carrots, peppers, radishes, broccoli, pears and an orange." +95939,This cake is decorated with a graph on it. +181643,A railing next to a dock with a warning post and life preserve available. +324857,A cat is laying in an empty suitcase with a fluffy tail hanging over. +464526,A woman in a black tank top holds a white remote. +279561,There is a white and black desk with shelves and a computer +390348,A motorcycle parked on a walkway next to a dog. +372233,"A person is doing something by itself and interesting. +" +80328,a number of animals in a field of grass near one another +322719,a person riding a skate board at a skate park +118097,A man thinks as he stands in front of a sign. +147165,A chef scooping out a blender into a pot. +270381,A empty bench in a grassy field with yellow flowers surrounding it and a lake and mountains in the background. +334148,A man wearing a motorcycle helmet and a neck tie. +146785,A red frisbee flying past a tree in a park. +550426,A vase filled with red and white flowers on top of a table. +540006,A woman is preparing food as two young boys stand by and watch. +509811,A library filled with wooden tables with apple laptop computers on them. +217593,A little boy in a baseball uniform wearing a mitt. +1647,A piece of bread with wrapping around it with scissors. +560256,A market area with boxes of fruit that includes bananas and pineapples. +206757,A city plaza with people walking through it. +144228,Two children sit on a couch holding toy wheels. +152192,Large open field in the middle of a stormy area. +279159,A large orange cat laying on top of a blanket. +158563,A man standing next to a yellow fire hydrant. +230976,A chalk sign is placed outside on a wall advertising a restaurant. +25984,A boy holding a red frisbee with bushes in the background. +151135,A train sitting on a track in a field near a bridge. +61983,A beautiful blond woman laying in bed with a laptop. +172851,A large passenger jet taking off from an airport. +282768,A man on a skateboard with a dog on the sidewalk +540614,A man flying through the air while riding a skateboard. +8594,older man standing in his kitchen reads book. +383053,A person with a mask and other cover with umbrellas +16382,A man sitting down at a table having a sandwich. +547941,A man surfing on a large wave in the ocean. +217936,Women are playing tennis on a blue court. +222299,A floor filled with the contents of a woman's bag. +30549,a few drag queens make some cake and eat it +153578,A woman walking down a street topless holding an umbrella. +459428,The cords of the computer and it's peripherals are jumbled up. +37325,A person at a skatepark in mid air on a skate board +353964,A Virgin Airlines plane and an American Airlines plane. +443426,A guy in a suit and tie is posing for the camera. +235057,A giraffe extends its tongue to drink water +415885,A man on a tennis court who has just returned a hit +561698,Floral arrangement in small glass vase on table outdoors. +321683,A man on a horse behind two cows in a field. +306140,two legs a toilet a stall door and white tile +553942,A man on a skateboard in front of a camera that has been set up. +262505,A busy city street with many different vehicles. +133078,A cow walking through the middle of a crowded sidewalk. +436392,A bathroom with a frame on wall and sink +420389,This microwave is sitting on top of a box. +490939,Two men with glasses sitting at a table using laptops +36409,Different kinds of food rest on a plate. +471955,A remote that is being pointed at a television. +330018,A pretty bird is sitting on a tree branch. +274063,A eggy casserole is shown from the inside. +341828,a man talking on a cellphone sitting at a table. +195275,Tennis player and white outfit holding up a racket and a ball. +136596,A few people are participating in water sports and some are in a boat. +196516,A skateboarder leaps low above his board in a concrete area. +208044,A man is straightening his tie in front of a mirror. +3694,A man is doing a trick on a skateboard +453029,a steam locomotive on a narrow gauge track +134386,A lady in a shop with a piece of cake with lit candles. +70294,a blue bus is coming down a road +103491,The man is skiing alone on the snow +50392,An antique stove is standing in a kitchen. +270753,A deep dish pizza sitting on top of a table next to a spatula. +322594,A series of photographs depicting bathroom before and after minor changes. +256906,A red bus traveling down the road while people walk by +180479,A large pizza sitting on top of a pizza pan. +527486,A female tennis player holding a ball and a racquet +508167,A young boy holding a Wii game controller. +306108,A kitchen filled with wooden cabinets and a white refrigerator. +423058,Vet supplies laying on the floor of a room. +430047,Black and white photograph of a living room's large television +418143,A group of four people riding skis while holding ski poles. +462241,A costumed mascot with a floppy ears and a tail holding up a disc in a sports arena. +166840,a person riding a skate board at a skate park +571931,A group of three young men holding an umbrella. +456969,a table filled with some laptops and some pizza +516173,A woman in a wet suit carrying a surfboard into the ocean. +310545,A man is smoking a cigarette and giving a thumbs up +362640,There are people that are flying kites in the air +415413,The Big Ben clock tower towering over the city of London. +298290,Several beer bottles lined up on a refrigerator shelf. +247037,A person's hand with blood on the tip of the thumb. +451214,a man putting some cheese on top of his pizza slice +15968,A man sitting on a couch in a black suit and tie looking impatient. +207108,three males are dishing out some pizza from a white plate +60596,A man waits in bed while watching television and holding something. +483375, a large body of water with boats floating within it +63552,A cat that is standing looking through a glass. +44732,Two birds sitting on top of a branch on a tree. +82920,A person standing in a field next to trees flying a kite. +534983,two orange gray and black birds sitting in a tree +493472,A young father holding his baby while the baby is holding a frisbee. +62483,A young soldier has his picture taken with a young lady with an open jacket and brazier showing. +282229,an airplane is being towed away from the jet bridge +2529,The clock on the corner of the sidewalk reads 4:38. +554459,A man and two women are standing beside an airplane. +290177,A person sitting in front of a desktop computer. +160447,a couple of giraffes walk next to a stone wall +306127,Group of people sitting in auditorium with a screen. +294621,A man and woman play tennis on public courts. +498960,A couple of giraffe standing next to each other. +210520,A table with plates of food that include corn and fruit. +328596,A young girl with a piece of pizza on a white plate +286556,A man spraying the side of a van with spray paint. +423619,A skateboarder is riding along a blue pipe. +544638,A marina with several boats tied up to the docks +191845,A crowd of people with umbrellas on a street. +288579,A frisbee is flying over the dog's head. +54358,"A empty living room area with a mat on the floor, and balloons." +384188,A couple of suitcases at a station with a train. +251874,Four people playing in the shallow sea waters +355214,Man arranging stuffed bear in a chair watching a TV in a desert. +178980,A laptop computer on a desk with a lamp and office supplies. +187624,A person and young girl with a frog umbrella standing next to water. +398450,Many people flying kites at the mall in Washington DC +488522,There is a knife cutting into a cake. +403515,a woman in black walking down a sidewalk by herself +389458,A person that has some food in her hands. +169250,"A simple apartment living area, with a couch and a television." +561386,Baseball batter gets ready for the pitch during the game. +151334,A red truck driving down a rural country dirt road. +382115,A pole with traffic signs and street signs. +31736,"A field filled full of sheep, grazing and eating in the pasture." +190907,People standing in front of a large sign in front of a building. +367275,A bunch of people standing in the street near the Whitehouse +311497,A woman walking on the tennis court with her racket. +51961,a wall with a bunch of graffiti on it +129579,A very large clock tower sitting above a street light. +419604,Bears sitting in the water in a fenced in enclosure. +249482,A large passenger jet taking off from an airport runway. +570528,A large orange cat sitting in a white glass bowl. +360101,a plate of food with two sandwiches +111840,a group of children standing in front of a cage +261665,A train traveling down railroad tracks next to a grassy hillside +266889,Women run on a soccer pitch during a game. +370090,A blue toilet bowl in a bathroom that says rabies +525666,A sailboat in the middle of the ocean with people on the shore. +405223,An man playing tennis about to hit a ball that is coming toward him. +330536,A white sink and toilet in a small bathroom. +346377,Two boats pulled ashore in the sand on a river bank. +22759,A large calico cat resting on a pillow. +145665,A smiling young man laying in a parking spot. +496198,Several people and a fire truck parked in front of a building. +383780,two hairy dogs lying on a bed cover looking +187924,A truck with beer advertisement parked by a curb +391588,A small pizza split into six slices with one missing. +203690,A person walking across a beach holding a surfboard. +230232,A picture of a group of fighter jets flying together. +572426,Two different looking trains on the train track. +294431,there are several street signs on the same pole +347453,all the vehicles in this town are red +246968,A young woman standing in the kitchen pours from a large measuring cup. +459050,The living room has been decorated with many bright colors. +408534,a man in the ocean surfing holding on to a kite. +440508,A long orange train traveling through a rural green countryside. +501498,A black cat is sitting on a suitcase looking up. +21839,a person walking across the street with a traffic light above +46048,A little girl sitting on top of a bed next to a lamp. +478490,A nicely appointed country kitchen with no one in the room +485613,a close up of a person holding a tiny cat being fed with a bottle +364636,A mixed breed dog in a red collar pants in the heat outdoors. +160607,A boy throwing an orange frisbee in a park. +143010,A red rose sticking out of a glass vase. +246530,Two giraffes looking in opposite directions and crossing necks. +94231,A tall giraffe standing next to a Barron tree in a forest. +278121,Computer on the desk at nighttime in front of a window. +245227,Adults and children engage in winter sports on a snowy day. +562308,the man is holding up to his face food +239194,A group of zebras next to each other with two giraffes in the distance. +534373,Young women playing a game of softball in the hot sun. +10104,A group of men riding on the back of a motorcycle. +359843,A fire hydrant in the grass near the curb with the remnants of melting snow +521052,A decorated truck is parked at a curb near a building. +398580,A very tall giraffe walks through the trees. +320872,A large cooked pizza on a dining table. +322574,A sandwich sitting on top of a pile of fries. +364444,A computer desk holding 3 monitors and a laptop. +359020,A man and child that have a kite. +295316,some people are riding surfboards on a wave +89362,a baseball player holding a bat on the field +234766,a very young man flying very high when skating +9450,A little kid playing second base at a baseball game. +151589,A blue snowboard sitting on top of a snow covered slope. +120162,a man walking out of the water with his surfboard +148843,a man on a dirt bike next to some vehicles +50238,An old red fire truck parked at a car show with on lookers. +329014,A small wooden cutting board and knife with a cut apple. +545006,poles wires street signs and a Chinese restaurant +339759,A little black colored bird stands gazing at a statue on a sunny day. +538879,some fog traffic lights street lights and buildings +242365,a woman is standing at a sink in a kitchen +23584,A tennis player in an orange skirt walks off the court. +397729,A young child swinging a baseball bat during a baseball game. +396167,Two men holding baseball bats on a field. +333899,A woman sitting at a table while using a laptop. +205378,A cat sitting behind storage containers and a computer. +18046,The side of a chartered bus painted with a red horse. +561679,A big orange sign about street maintenance near a street. +532055,A woman running through a green field while flying a kite. +552564,People with a camera have toothbrushes in their mouths. +285968,A cat with a tiny hat on top of its head. +28874,An adorable dog resting in a chair on a furry mat. +504827,"A full perspective of a restroom view with a few things. +" +398756,A bunch of birds that are standing on a pier. +436791,The man in the dark jacket is using his cell phone. +457262,A table topped with bananas next to a coin. +313145,This is an image of a skier that has fallen in the snow. +414522,A snowboarder looks at the camera while on the slopes. +566823,a double bus driving through a parking lot +90284,a woman is striking a ball with a racket +561491,A woman holding up a pregnancy test near a plate of food. +533625,"There is something captured here in this photo. +" +185530,A lush green hillside covered in cows grazing. +508605,Boy rides skateboard and does trick over stairs. +20349,A pile of broccoli sitting on display in a grocery store. +143554,A young man doing tricks with his frisbee. +312237,People are having fun on a crowded beach. +392961,"A desk with a chair, laptop and printer." +200116,A beautiful kitchen with lots of windows and wooden cabinets. +260627,A commuter train traveling down train track next to a rural road. +160004,Double decker buses pass Big Ben in London. +125412,Three brown bears walking and standing near a snowy mountain. +48320,a young girl is on her phone outside +438955,a bunch of people that are skiing on some snow +86483,There is a sign in front of a brick house. +326542,there is a male skier going down a hill +229553,A man sitting on top of a skateboard on a street. +169169,"A banner in a metropolitan area reading ""spring in the city""." +223777,A train car pulling away from a train station next to a forest. +267933,Group of white horses walking next to a river. +14681,A dog running along a stone wall next to a beach. +369685,A man and a woman sitting at a table with a child. +550013,A man walking around with his dog and sheep. +440840,A man riding a snowboard down a snow covered slope. +361177,A big black dog sitting next to a laptop computer. +365220,A young man skating on a slope as a crowd watch +288639,A calico cat drinking water from a running tap in a bathroom. +283505,A bike parked next to a cat leaning up against a stone wall. +464682,a plate with a sandwich that has a toothpick in it. +52853,A small cow is walking down a path with an adult cow while a man in a red shirt watches. +156324,A woman takes a selfie in front of a bathroom mirror. +577712,Three people stand in front of the giraffe zoo section. +458950,A very skinny red fire hydrant with silver top and sides. +395550,a cat laying nestled up into a bowl with its head on top of a remote +119845,A yellow train passing by a train station's loading area. +241948,A train sitting on train tracks next to a small rural road. +81248,A ground in front of a monument where many people have gathered to visit it. +62060,Some people stand together near a lake. +175331,There are people standing at the top of this building. +493254,A pile of stuffed and plush toy laying on a dirty field. +517596,A blue electric train traveling down train tracks. +421762,A broccoli dish with meat and potatoes on a plate. +225032,Tall large headed giraffe looking out past some trees. +384531,A baseball game where the pitcher has just thrown the ball. +520301,A brown dog hanging it's head out of a car window. +101053,a big bus that has some people by it +71596,Two guys standing and leaning playing a video game. +307438,A close up of the green light on a traffic light +275025,Horse standing in open field staring at camera. +338203,The parrot is perched on a tree limb. +52689,a bunch of people that are skiing down a hill +529515,A man watching a baseball go by while holding a bat. +360529,a bunch of items on a store shelf +286253,A herd of cows crossing an empty road. +34757,A plate topped with rolls next to a bowl of food. +577640,A man riding on the back of an ATV. +387042,A man swinging a tennis racquet on top of a tennis court. +165937,Two green and white jetliners sitting on top of an airport runway. +348087,A black and white clock on a street with people walking by. +312191,There are many birds flying above the water. +186009,A brown sheep standing on top of a lush green field. +323930,a young baseball player holding a bat +378139,There is a water shuttle going down a canal. +89355,Black and white picture of two blond women walking on beach with surf board. +427956,A rusty fire hydrant sitting on a city sidewalk. +432605,A bathroom with an open door and a sink beneath a mirror. +485773,Large clock tower lit up at night with an American flag at the top. +498327,Two boys walking along a wall in the dark with skate boards in their hands. +10526,a kid riding his skate board on the edge of a concrete wall +23201,Two men are riding horses down a city street. +329139,A long table of bananas is passed by runners. +348631,a male surfer in a yellow top on a white board +563603,A herd of giraffe standing next to each other next to a pond. +578292,A little boy is holding on to a stop sign. +497875,a number of small planes behind a fence +252354,A person laying down holding a teddy bear +334947,Two hot dogs covered in toppings on a blue tray. +96001,"A table topped with a book, umbrella and other items." +149329,A train on a track on a sunny day. +323799,A group of people standing next to each other on a field. +330880,A man sits in front of an elevated pizza. +451345,a lady sitting on a concrete picnic table +117127,An individual holding a surf board near the shoreline. +240742,"Grilled toast piled with lettuce, a cup of black coffee and a glass of water are on a counter. " +143111,"A two wet mangos surrounded by yello, wet bananas." +463360,A room i dimly lit and decorated with anime. +211206,"A woman holding a baby by the zoo, showing a picture of a giraffe, with real giraffe's behind the picture." +452201,A baseball player is holding a bat and is standing +65350,Kids are skateboarding at a skate park and one them has fallen down. +376371,A herd of sheep grazing on a lush green hillside. +116132,A room filled with desk and laptop computers. +66038,The father and daughter are under an umbrella on the beach. +226170,a close up of a plate of food like peas and broccoli +526133,A snowboard sits on the ground partially covered in powder. +219014,A stop light on a oriental city street. +384794,A large clock sitting in the middle of a shopping center. +39053,A couple of plates with eggs and folded pancakes are sitting on a table. +465267,A cat is sitting in front of a tv looking at a similar cat on screen. +481928,Yellow and red trolleys with people standing about. +556157,A kite is being flown in the blue sky. +146701,A picture of a yellow Cam-am three wheel motorcycle. +166056,A picture of water with an intersection as a backdrop. +43947,A close up of a street pole with no parking signs. +452158,Sheep grazing on the side of a country road +176288,a soccer goalie a net and some grass and a ball +279388,A giraffe is eating from a leafy tree. +524742,A wall covered in graffiti next to a sidewalk. +354425,Two men play video games holding wii remotes. +528098,A man wearing a straw hat and playing the guitar. +188747,"A cabinet with various boxes, pens and mirror." +86559,A herd of giraffe standing around a lush green tree. +172627,A yellow smiley face cat sitting on a white plate. +38479,A picture of a lone clock tower standing in a school yard. +528604,A man holding a child with a toothbrush in its mouth. +134618,A man talking in front of a crowd of people. +26622,A mother zebra letting her baby feed from her. +547079,A group of people standing in a kitchen making pizza. +199387,A photo of a man standing on snow skis and holding snow skis +348931,An elephant is walking in an open area with a log on the ground behind him. +109992,A person riding a snow board down a snow covered slope. +434622,"A lady and a little girl are on the beach, flying a kite. " +427643,Two sheep in a muddy area with a wall in the background. +191314,A group of people standing around an airport. +308339,A young woman with her laptop in bed. +202981,Group of people standing on a Snowmountain with skis on. +236714,Styrofoam coffee cup laying on an metal bench. +405032,A large panda bear hanging off the side of a tree. +174371,A woman in camouflage showing a device to young women. +525927,A large bridge and some houses on the water. +110672,"The dinner table has grilled hamburgers, steaks, and hotdogs on it." +387906,A white bowl filled with pasta on a plate with vegetables. +232627,A bunch of very green broccoli cut into spears. +251716,A dog in a bandana and Harley Davidson gear. +477500,Two people who are sitting on mopeds in the street. +190111,An advertisement from A Christmas Wonderland store with several GE products. +449466,A man prepares food in a restaurant kitchen. +284296,Three giraffe's leaning over to get a sip of water. +251856,A man floating on top of waves in the ocean holding a surfboard. +210915,A man riding a surfboard on a wave in the ocean. +22446,A plate of Asian meat next to a bowl of white rice and a cup of tea. +205193,A coffee pot filled with tea sitting in front of a toaster oven. +146813,a close up of a bed with pillows and sheets +93314,A street scene looking down at cars and motorcycles parked. +246452,A couple of birds having sex on top of a river. +240681,A man in green shoes stands next to a red motorcycle. +82718,A man is kite surfing in the ocean. +25595,a woman is cooking some food outside on a grill +409156,A woman is making her way out of a rather large suitcase. +517388,a man in a white shirt and his luggage +304076,There is a bus driving along the road. +212080,Women are smiling and taking a photograph of something. +278437,Two black and white cows resting in a field next to body of water. +56430,A knife is sitting on a plate of food +557720,A large clock shadow on the side of a building. +379108,an image of a man in a boat with a dog +270908,A man laying on top of a tennis court while holding a tennis racquet. +475330,The stuffed bears are dress as a turkey and a pumpkin. +533628,A person in a wet suit while riding a wave on a surfboard. +493846,A man riding a bike down a street past a young man. +295059,Stuffed bears are gathered together in a display for christmas. +91304,A living room has a couch and a rustic chest for a coffee table. +452263,A bear peaks out behind the grass in the woods. +225617,A bed with lots of pillows and a blanket. +142941,A bird reaches into a cup to take a drink. +575815,A pepperoni pizza sitting on top of a wooden cutting board. +247519,A person sitting with a cup on a luggage buggy in a waiting area. +270708,A woman bending over while holding a racquet. +431355,A toilet is shown with a black ruck. +21879,there are many surfers that are in the water +476298,A guy with glasses is biting the box for an Apple computer. +20147,A mother zebra with a baby zebra as it nurses off her tit. +169273,A clock on an old stone building next to a window +321522,"Outside view of a cafe', and shot of old oven and fridge" +153520,A man is playing with a Frisbee on a balcony. +250953,A large crowd of people standing in the grass near a monument. +519683,Crust topped with meat and vegetables on a stone pizza board. +286018,Small child on a skateboard watches another skateboarder. +159736,A woman grabbing a piece of cake off the top of a plate. +242423,A green lizard is eating a brussel sprout. +164568,Four cows standing in the grass near mountains. +314876,A guy lunges as he hits a tennis ball. +452727,A table and a clock in a small room. +430652,A bunch of statues that are standing on the ground. +138196,A train is driving down the tracks in front of a building. +301735,The big bird is on the beach and the dog is barking at it. +563261,A cupcake sitting on top of a of a table with a blue umbrella. +262522,A building with a clock on the front and side of it near other buildings +47566,A man shaves a sheep on pavement near a fence. +554582,Three men are sitting outside on a bench. +497825,"A man smiling in a suit and tie, wearing a hat." +218310,Two multicolored birds perched on a wooden branch. +91612,The woman is holding the dog between her legs. +464719,Three people in the water together with surfboards. +109425,Traffic sign on W 28 St with photo of bicycle in the top. +250240,"A mirror, sink, towel, toilet paper, mop and toilet sitting in a bathroom." +464359,A skateboarder in the background doing a trick. +352937,A baby holding a toothbrush in it's mouth. +89603,A evil little doll hovering over a pile of small pumpkins. +341969,A man holding a smart phone inside of his pocket. +60641,Four boxes of pizza are opened on the table +422836,A man walking down the street carrying a suitcase. +445014,a group of people standing next to a wooden fence and looking at a giraffe +54955,A small boy leaning up against a window on a train +205670,A MAN ON A SURF BOARD IN THE WATER WITH HILLS AND RV'S IN THE BACKGROUND +342632,some brown black and white horses in their pen and some water +509459,a man standing by a fence while throwing a frisbee +273967,A woman walking in ocean next to a white surfboard. +21905,A man on a snowboard flying through the air +190760,A person offering a donut to a cat. +57353,"Bananas, Coconuts, and other fruits at a market stand." +538122,A skateboarder is performing an aerial manuever during a competition. +411043,And elephant eating grass at the zoo with other elephants behind him. +224364,A group of giraffe standing next to a forest with lots of trees. +208690,A small sandwich is sitting on the wrapper on the table. +32375,Two teddy bears on a couch with a pillow +182611,A man making his plate with a table full of food. +482735,A man in a wet suit riding a wave on a surfboard. +436696,A man with a skateboard poses near an outdoor stairwell. +333845,A basket fill with different types of fruit. +130465,An old church building with clocks built into the tower and an arched doorway. +258433,A woman sitting on a bench holding a cookie in front of her face. +90429,"A thing is in the outline and it shows up like something +" +237230,A couple vases of flowers on a counter next to a bar. +260182,A window that looks out onto an intersection with several shops. +456015,People are riding horses down a beach next to the water. +13904,Several shots of a man in various positions with a tennis racquet. +222146,The two cats are looking for something good to eat. +376450,While in a restaurant a young man is playing with his phone. +74013,"A cat, trying on its owner's high-heeled shoes." +214241,a horse with a long mane looking at the camera +163782,Four kids playing in the leaves on a fall day. +129592,A red fire hydrant sitting in the middle of the grass. +178415,a close up of a plate of food on a table +22775,An orange carved to look like a jack-o-lantern is next to a knife. +363991,Person holding a surfboard while walking along the beach. +400794,A man sitting at a table eating food from a plate. +505385,A man is in a black and white public restroom. +182840,A woman sitting in a chair using a cell phone. +503938,A cat in a room with a rug and a backpack. +6673,A vase filled with a large yellow and black sunflower and other flowers. +261185,Vintage furniture and a Christmas tree decorate a living room. +99961,A boat parked in a field with long green grass. +472364,A woman playing a game with some remote controllers. +355234,A dog chasing two sheep on top of a lush green field. +235163,Girlfriend surfers paddling out on their surfboards +415179,This person is frying her bananas on the stove. +88854,Two cross country skiers heading onto the trail +477216,four zebras in a field with a tree in the background +323919,a close up ofa small stuffed animal on the grill of a car +581726,An elephant is standing in a fenced area. +191158,A young girl riding skis on top of a snow covered ground. +212351,A large passenger jet flying through a cloudy sky. +153231,A woman is sitting at a table and eating with two children. +549635,a outside produce market with different fruit and vegetables +96183,"A kitchen with a stove, sink, microwave and various other items." +434804,Four giraffes are standing inside a pen with the gate open +418152,Elevated bridge runs alongside the railroad tracks and over land. +383950,"A green and white street sign reading ""flaming lips alley.""" +189364,A zebra standing next to a giant rock. +486912,An old double decker bus painted red and white. +527631,A cut in half sandwich and fries on a plate. +443343,Two people are kissing as they sit on a bench. +232592,A young boy climbing into a surfboard in the water. +315209,A sign advertising a cosmetology school on the side of a road. +71986,Skiers waiting for their turn to make a run on a slope. +506471,two motorcyclist driving on an empty road near evergreen trees +162763,A bike parked on top of a cement floor. +238836,A car is stopped at a red light +360128,A dog that is standing up with a frisbee. +2434,A coupe of laptop computers with a cell phone +7722,A cat lying in a white sink in the bathroom. +424776,a grey colored jet plane flying over a snowy mountain range. +202339,A man carrying a sign walking past buses. +172315,A young man sitting on the windowsill of a store front talking on his phone. +426253,A plate of food being heated in a microwave. +526956,three cupcakes with small umbrellas near one another +88102,"A picture of a rock, a book, and a pair of scissors." +568426,a person at a table with a sandwich and a drink +210032,Two birds preparing to eat food off of a plate that was left on a table outside by the ocean. +202622,A tall building with a large clock mounted to it's side. +204887,A city bus is shown with a bike in front. +115241,A colorful pizza sits on a wooden cutting board +213434,A baseball player running on a field during a game. +151558,A traffic light hanging from the side of a wooden pole. +160828,there is a woman that is riding a surf board in the water +119502,A young boy reaching into a bowl sitting on the ground. +312803,a couple of men that are on some motor cycles +24931,a man with a jacket and tie with his arms spread out +420313,A cake made to look like a white pimp hat. +369482,a traffic light hanging over a city street +302030,A picture of a cluttered home office desk. +190406,A double decker bus and two cars on a street at night. +32888,The living room is decked out with various types of black leather. +345595,People holding small soccer balls in their hands. +222724,A highway scene with focus on an exit sign. +53569,this modern urban kitchen has white painted accessories +48104,A person riding on top of an elephant near a tree. +231408,there is a cat that is standing near the water +51928,Two small children holding onto teddy bears in the grass +210230,a bunch of women serving hot dogs +47181,A group of girls play frisbee outside together +302380,Man holding up a yellow cake with candles on the top of it. +574350,different groups of people walking and holding opened umbrellas +97080,A train traveling down tracks next to a train station. +405192,A table topped with two plates of food. +488697,A couple of young men playing a game of frisbee. +42070,A very big city bus on a big street. +75344,There are a lot of trees and plants beside the house. +345980,A bridge stands over a river before a city sky line. +292663,A white and red bus driving down a street. +303177,"Two elephants standing near each other in a grassy area. + " +574316,A group of cows standing on a grass field. +90374,The woman is playing tennis on the court. +320843,a man holding a surf board at the beach +525903,a bowl of food on a table near other plates +125815,A long train parked in front of a train station next to a loading platform. +420532,A group of people standing next to each other. +511204,A person riding an elephant and carrying gas cylinders +273855,A boy in white shirt and boy in red shirt at table with cereal. +313557,A zebra walking in a grassy plains are with another animal in the background +230040,Some people who are walking on a beach. +105052,A group of dressed up people pose in front of a building. +391829,People sit on the curb as two large horses pull a carriage down the street. +443240,A couch on the side of the street with a television on it. +248400,A man opens pizza box and stares at the camera. +350855,A woman covers her mouth as she is presented a birthday cake. +327130,a train carries people over wooden tracks in a jungle +58636,A large wooden pole with a green street sign hanging from it. +435751,Benches on a beach being washed over by waves. +9721,a close up view of a keyboard and a mouse +12700,A living room is furnished with old furniture +490842,a half eaten pizza on a tray +297233,a table set for three with food and wine +9214,A zebra grazing on a lush green field. +180729,A plate sits on a table in front of a woman. +292505,A motorcycle parked next to a group of electrical boxes. +323576,People swimming and reclining in chairs under umbrellas on a beach. +265628,A white toilet filled with urine next to a white wall. +2621,a street light with the walk symbol on +509319,A table with a large assortment of scissors. +361140,there is a man sitting in a chair in the living room +549171,A young woman is curling her long hair. +160186,a man in black opening a fridge smiling +309933,A microwave is sitting idly in the kitchen. +275898,A couple of stuffed teddy bears sitting next to each other. +22667,A light house on an island surrounded by sail boats. +156466,White wooden bench next to reddish orange bricked wall. +486,An industrial kitchen with a strainer on the counter. +514376,A trolley is going down the street while a car passes it. +304342,People sitting down for a meal in a restaurant. +482720,a teddy bear sitting by some blocks like he's playing with them +508811,A man holding a tennis racquet reaching into the sky. +16931,A snowy city street with a french stop sign. +334769,A man holding a tennis racquet no a tennis court. +38753,A young boy eating mushrooms near a pizza. +442894,Two giraffe in front of a painting of the outdoors at a zoo. +247473,A man with wide eyes eating a muffin. +163242, a small child holding a tennis racket with two hands +207093,a cat laying on part of a suitcase +214295,A pay phone sits on a wet sidewalk on a gloomy day. +353808,A grilled sandwich including vegetables is arranged on a long plate. +559380,A person is sitting on a bed in a bedroom. +109482,A large living room with yellow curtains and couches +361750,"A fancy toilet, including a sink on the back and controls on the side." +552454,A small white toilet sitting in a bathroom in a restroom. +197796,A white sink sitting under a bathroom window. +334542,A flock of sheep grazing in an open field. +402473,there are two cats that are laying with each other +206135,A herd of cattle sitting in front of a church with a steeple. +275761,A fighter jet is flying through the air. +354368,A couple of trucks parked under palm trees. +384822,A pizza sitting on top of a pizza pan with a couple of slices missing. +348584,Two parking meters buried in snow with only their fronts showing. +29397,A person wearing orange pants standing on a bench +285160,A few people at a store near a clock tower. +254638,A skater is balancing his board on a half pipe. +518027,two giraffes near one another near many trees +104495,"A table with wine glasses, and plates filled with pastries." +67587,Three giraffes are sitting on the ground. +109486,A man sitting on a box on a walkway in a busy city. +224916,A group of small exotic birds standing on a large bamboo stick. +403975,A baby is sitting on the floor with a small cake in front of him. +168334,"Two men playing Ultimate Frisbee, with one holding the disc upside down." +417946,A lone zebra is grazing in the large open field. +488645,A brown plate topped with a fruit covered piece of cake. +581415,"A living room with sofa, loveseat, chair, coffee table and television set." +1149,Several men in suits and military gear standing near a table. +532812,A man is shirtless attempting a skateboarding trick. +38666,A young boy holding a teddy bear by it's ears. +432035,a small pizza that is on a red plate +454209,A type of oven in an unfinished room. +175440,"a large blue bowl of almonds, bananas and walnuts" +290221,Man flying a kite while on a snowboard. +422755,A woman riding on the back of a brown horse. +290282,A woman throws a tennis ball to hit it on a court. +132860,a number of items laying on a surface near one another +333130,this is trains passing each other on the tracks +309474,A large ship driving behind a smaller ship. +203239,A skateboarder doing a trick in the air. +546928,A close up view of a cheesy pizza in front of a person. +42260,A group of people sitting on top of a sandy beach. +304012,some yellow signs attached to a building wall +190041,A man riding a skateboard down a brick sidewalk. +238090,A bathroom with an enclosed shower door next to a toilet. +92543,A little girl standing beside a dirty fire hyrdrant +218844,A coffee maker and microwave in a room. +480490,A man standing on a snow covered slope holding a board. +133195,a very tall building with a city clock on it +431799,A girl is holding her hand out with a kite in it as storm clouds hover over her. +89281,a close up of a person cleaning a toilet +240295,A man playing a baseball game on the field playing a game +361572,The person in an apron is arranging boxes of fruit. +269867,A tall yellow vase stands before a pink pillar. +470173,A female statue in a sea of green grass next to plant +511159,A man is standing in front of a book shelf filled with books. +403013,A narrow kitchen filled with appliances and cooking utensils. +416523,A person standing over a bike next to a store. +391499,This smiling skateboarder performs tricks in the skateboard park. +531036,the driver of a double decked bus standing outside +135756,a little girl touching the nose of a horse +31446,four fighter jets flying through the air in formation +448849,A boat filled with people floating down a canal. +540101,A clock tower is seen in the distance on a busy city street. +198645,A man sitting on a green bench in the park +371365,People behind a barricade watch a man ride a motorcycle. +250655,A tennis court with a person with racket in foreground and someone running behind. +73533,Two young boys sitting on a bench texting on their cell phones. +80367,"A white plate topped with meat, rice and veggies." +351345,A woman standing in a room with a remote. +64116,a large field full of sheep out in the outdoors +217303,Two tennis players have a match near a large audience. +424601,a number of people on a beach with a kite flying above +293611,"A kitchen with a sink, bottles, jars and a dishwasher." +184827,A woman in black jacket holding a white cellphone. +445048,A person is snow skiing and is in the middle of a jump. +296759,A brown teddy bear wearing a Hawaiian shirt next to another teddy bear. +532773,"An old, run down truck that is rusted and parked in a grassy area." +234719,A dog wearing a Santa Claus hat. +472216,A lady skiing with other ladies on a snowy hill. +164555,Many different objects are placed on the beach. +483135,A group of people playing with a Wii together. +144200,broccoli being sauteed in a pan with a wooden spoon +194532,A lady in a motel room is jumping onto a bed. +254589,A man mixing food in a bowl behind a girl who is reaching into another bowl in a kitchen. +423093,a woman standing around some tables with a bunch of crabs on them +235274,A brown and white cat resting in someones shoe +121349,There are two men that are out playing baseball. +298978,A woman is putting her seat belt on in the car. +163033,A woman giving the finger while holding a smart phone. +267802,A group of people riding mopeds in a busy street. +195510,A busy street is full of cars and a bus. +500965,"A little girl cutting a piece of cake, in a picture." +103747,A man riding skis on top of a snow covered slope. +159260,A train that is sitting on the tracks. +388818,A security guard standing next to a no right turn sign. +273708,A woman stands with outreached hands waiting to catch a ring. +406534,"Several people looking at a television screen, one of whom holds a camera." +162579,A crew of workers performing work on a train. +252745,"A woman in a wheelchair on the beach, with a man and a dog standing beside her." +460199,A man riding a wave on top of a surfboard. +256365,A table topped with multiple cup cakes. covered in frosting. +235296,A beautiful woman sitting on a bench next to a body of water. +6033,A boy that is standing next to an animal. +113678,A dog that is wearing a red hat. +408288,A man riding a board on top of a foamy wave. +559348,PEOPLE ARE SITTING IN THE STANDS WATCHING A BASEBALL GAME +442019,A professional baseball player hits the ball. +168146,A cat that is laying on a bed looking at the wall. +203466,A man sitting on a tennis court wearing a green backwards hat. +177893,a red and white passenger bus with a 'final destination 5' billboard on the side of it +573667,A group of skiers with a small child in the snow +345211,Two people playing tennis with a referee and another man watching. +344125,A man riding on the back of a motorcycle down a street. +450452,An old clock bordered by a tire in front of a rusted door. +242189,The reflection of a woman carrying a bag over each shoulder in a mirror. +259761,A young girl surround by other young people and looking at a cake. +181745,A surfer is riding the waves in the water. +259049,a bus traveling down the street next to tree lined sidewalk +506441,An order of fries to along with a sloppy joe and a pickle. +447169,A crowded kitchen that is cluttered and messy. +80932,A child taking a bite of a pizza slice on a plate. +456044,A line of lawn chairs sitting on a sandy beach. +534336,A flock of sheep walking down a road with a man and young girl. +251794,a child blowing the candles out on a cake +475667,a giraffe in a field with another in the background +111211,A television sits on the counter in a small room. +374083,A man and a girl standing next to two cakes in the kitchen. +205238,A lady in a black and orange Halloween costume. +129707,A person holding an old phone showing it to the camera. +50679,A close-up of an orange on the side of the road. +116712,A man riding a motorcycle on top of a race track. +130118,A group of hot women laying in a white bed. +76593,Two women and a man share drinks together. +448259,A man is sitting beside a walk way with a beverage beside him looking at his phone. +476412,A group of young children playing soccer on a field. +564127,Toilet with a black lid and rolls of toilet tissue in a bathroom +375566,Lady walking through a parking lot with an umbrella over her head. +546622,A cat laying on top of a chair as it sleeps. +8188,An old photo of an umbrella and chairs at the beach +243204,A person is holding a spatula near slices of bread on a stove. +69584,An airplane is flying against a partly cloudy sky. +540912,There is a computer pad on the desk with a person hand on it +542035,"A bedroom with a bed, rug, lamp and pillows. " +256192,A yellow BMW touring motorcycle parked in the street as people look on from behind a steel rail on the sidewalk. +378673,A man riding a skateboard down the side of a ramp. +388325,A tall two story gray house sitting in front of a street sign that readsd Nirvana Dr. +292227,A man skateboards on the rim of a skate pipe in front of a crowd. +540207,The cross country skier is working very hard. +138070,A living room filled with furniture and a flat screen TV. +153040,A wooden shelf with lots of books on top of it. +301991,A bride is eating steak at a table. +247984,Several pieces of luggage with extendable handles deployed. +5706,a bird with a long beak flying low over the ocean. +402109,a young person at a desk operating a computer +507766,Three immature gulls are wading in shallow water. +158182,People loll inside and outside of a small blue boat docked to a pier. +157886,A group of zebras drink from a watering hole. +534122,A man in white swim trunks preparing to go in the water. +561500,A storage room full with wooden furniture and bikes. +350068,Blue and white passenger train sitting in a storage yard. +327436,A beautiful woman with red hair sitting at a table. +515885,A beer bottle with flowers sticking out of it on a log. +491008,A man and a woman holding up a pizza in a seating area. +441286,A person on a surf board riding a wave. +385320,a baby girl with a tooth brush in her mouth +69911,A pair of sneakers hang in the background at this street corner. +192944,Someone going down a hill on ski's . +534918,A blender has a clear glass measure container. +369461,A man in a blue pinstripe shirt and a tie is posing +363119,A man on a cell phone with a glass. +365121,A slice of pizza sitting on top of a white plate. +16228,There is a white horse pulling a trolley behind it. +272131,A train driving along the train tracks in the day. +388056,A baseball player holding a bat and getting ready for the pitch. +5934,a close up of a baseball and a glove +1292,The woman is looking at the tennis racket +190951,People holding umbrellas with a blue light in back. +539310,A traffic light sitting above a street with vehicles. +168425,A cat that is laying on top of a bed. +123213,a baseball player on a field with a bat +568554,A green bus driving down a street next to a traffic light. +483737,A small lake with horses on grass and buildings. +191138,A large boat in a harbor with a bridge behind it. +54123,The zebras are standing around and grazing in the pasture. +180878,A table topped with a smart phone next to a white bag. +342186,A closeup of a pizza on a plate. +281123,A picture of a living room in a house. +553912,LOTS OF PEOPLE AND VEHICLES ON A BUSY CITY STREET +206933,"lots of sheep grazing on a hillside, with people in background" +22802,a beach with people and sand with a view of the water +431855,A horse is standing by a wire fence. +324710,A couch and table sits outside with fake sheep. +285633,A woman and child at table with a cake. +250564,Two elephants walking through a lush green field. +474410,Four jets flying in formation in a blue sky. +38294,a small gray and black raccoon and some broccoli +306173,A kitten sleep on top of papers. +549943,A view of cars and trucks parked along side a street. +484978,A woman sitting at a table while eating food. +131504,A BRICK TOWER WITH A BIG CLOCK IN THE MIDDLE OF IT. +405146,a kitchen counter covered with cleaning supplies and other items +360600,a plate with some pizza slices on it +430467,a bus moving down the street next to a corner +433774,A parking meter sitting next to a tall tree. +235124,A stone and sand area leading to a slope with stone and grass terrain. +257036,there is a cat sitting on a table next to a bike wheel +109118,A group of men standing and sitting next to each other. +354229,A bus all lite up inside and out with diffrent colors . +32038,A large cheese pizza being served to customers. +1342,Open book with images of various airplane models and shapes +220685,a big old stove that is attached to the wall +185865,A sequential shot of a tennis player slamming a ball. +432176,A wooden bench sitting next to an entrance. +346716,Double decker buses driving down the main road. +560349,Black and white photograph of boys in living room. +53431,A man wearing a beret while using a laptop computer. +492905,Many images form a picture of a computer monitor on a desk. +85584,A man kite surfing while riding a wave in the ocean. +295769,a tiled bathroom with a tub inside of it +243171,A young adult male in shorts and tennis shoes is playing tennis. +267664,A cat standing next to a red chair in a living room. +574250,A closet filled with clothing next to a white bed. +508748,"Corn, broccoli, and meat is on a plate. " +144985,A street scene with a trucking going by. +196793,A full view of a bathroom with the shower and sink. +265648,Modern looking living room with white flooring and furnishings +429386,A green street sign next to peoples houses. +185512,A small blue and white bathroom with a toiler and sink. +54796,there is a young girl running and playing tennis +81561,A large point tower towering over a traffic light. +425484,A row of colorful tents sitting on top of a beach. +502896,A man is doing a trick on a snowboard. +522418,A woman wearing a net on her head cutting a cake. +390475,A tennis player jumps and swats at the ball +308101,A lady with glasses biting a big sandwich. +569825,A catcher at a baseball game who removed his mask. +473942,a stuffed animal tied to something with a chain on the ground +258581,A hand holding a phone next to a woman in a room. +439868,A man on a skateboard in a skate park +561589,a man is sitting in front of some food +446812,A woman putting a turkey into a refrigerator. +208955,The pitcher throws the ball as the batter waits to swing while the catcher and umpire watch. +34015,A man walks with his head and racket down as he crosses a tennis court. +261050,A man sitting on top of a hair next to a woman. +434867,An orange and grey trolley on street next to a building. +34691,A boy and a dog in a necktie +413358,A person holding a sausage on a bun with peppers. +313182,A purple and white bus driving down a street. +31000,Many oranges have been placed inside a bowl. +293751,A large group of elephants on a grassy field. +571504,A stoplight and utility lines with a brick building. +212675,"A street sign for Battery Plaza, and a One Way street sign. " +414340,A large clock tower next to a small white church. +121570,A man standing on a surfboard with a paddle. +343561,there are many bike riders racing in a street race +447237,A man riding on top of a board on a wave. +189766,Two skiers race up a hill while people look on. +468885,A white toilet under a window next to a sink. +191390,Giraffes are walking together on a very dry terrain. +351130,a baseball player swings his bat at a ball +387725,Woman sitting at an outdoor table working on a black laptop. +434358,A woman holding a tennis racquet on top of a tennis court. +514982,A couple of white sinks and a mirror in a room. +568358,A silver vat of donuts cooking in oil +173204,Two skiers race while a crowd looks on. +332096,A man captured in every aspect of delivering a baseball from a mound. +338560,A blue fire hydrant posed on a street corner in a city. +538925,The bed has a brown and white blanket at the end of the bed +52925,a small cat stands on some snowy plank +482160,A boy in grey shirt and tie standing next to a door and wall with stickers on it. +298586,a boy that is snowboarding through the snow +445999,A woman brushes her teeth with foamy toothpaste. +469924,A desk containing a camera with an extra lens. +14549,A man looking at a cell phone he is holding. +127496,This is an aerial view of the nearly-finished bathroom in a house still under construction. +168713,Man putting on a giraffe patterned neck tie at an outdoor event +409500,A bathroom with the toilet tank high up on the wall. +342682,A zebra is focused on a photographer to give a face front view. +580986,A woman with a tennis racket is tying her shoes. +540581,A young boy who is laying on a skateboard. +366655,A man in a blue jersey swinging a baseball bat. +491464,Kid poses for a picture in a baseball uniform holding a bat +106166,The car is traveling down the road while the dog watches. +566249,A black motor cycle parked on a cobblestone street +557559,A steam locamotive passes by some houses on a track. +23895,A man at a skate park showing a trick on his skateboard +80066,a bed room with a bed with a canopy +389174,Some people that are sitting on a bench. +121152,A red and white bus parked under an over pass. +571038,A woman holding a tray with a pizza on it. +195648,A park bench surrounded by a green forest of trees. +499940,Two kids out in the field where kites are being flown +55126,People and a dog riding a decorative boat on a waterway. +501142,there is a cow standing in the water by a boat +298452,"A bathroom with a white toilet, tub, and tile floor." +402619,A group of giraffes in a grassy area by fences. +119748,cars wait at red light at an intersection by mountains +132578,A cat laying on a bed by a window. +162589,Small white toilet with a small window above it. +571531,A bench and trees on top of a hill. +426166,A light blue bicycle chained to a pole on the sidewalk in front of a red building. +7977,A young man performing tricks on a skateboard. +465087,A man standing next to a table filled with bottles of wine. +286480,A dog is lying down in a living room +432453,A man walking on a field with a baseball bat. +9647,there are many men preparing to cut a red ribbon +127854,there are two cats that are laying inside of a tub +315702,A bathroom sink with toiletries on the counter. +119232,The sleek fighter jet is flying sideways through the air. +139475,A piece of wood that is on top of a block. +115927,The Sun Valley Market on the corner of 10th Ave and Irving. +302823,A plate with some food on it next to some condiments. +200168,A kid standing in the snow on skis. +370478,some luggage and a back back sitting on teh ground next to a lap top +358268,Two men standing with Nintendo Wii controllers in their hands. +181574,The man smiles as someone is cutting a pizza. +368268,a pole is above a couple of skies +389123,Two boaters are white water rafting through rough currents. +453862,A small object that has two antennas coming out of it. +466763,a woman in glasses with a blow dryer +304379,"A man sitting in a passenger seat of a vehicle, wearing a dress shirt and tie." +166557,A large orange hanging in an orange tree. +298600,A plate with a hot meat and cheese sandwich. +157767,A group of men standing around a table of food in wooden room. +4256,A table set for two with salad and bread +452759,the batter taking a low swing at the ball +501420,Two tennis players consulting each other at center court net. +144633,A basket full of broccoli sitting next to other fruits and vegetables. +323847,"A bird stands on a rock, gazing out over the water." +81287,A green and beige bus traveling down a busy city street. +460407,A few cows grazing on a shore near some tropical water and boats. +274156,A discarded white refrigerator sitting on the street. +218424,A group of zebra standing next to each other. +481422,A man sitting up on a chair with a umbrella. +305873,A little girl holding a red black dotted umbrella. +245315,four people around a table with various plates of food +53503,A view of a vase with purple flowers in it. +180296,a doll sitting on top of an open suitcase +261603,An older gentleman is taking a ride on his motorcycle. +578836,a girl wearing a bathing suit playing tennis +479805,Street lights over a dark street and a bright sun in the sky. +23051,A red and white train with graffiti on it. +70254,A green and yellow train traveling past a platform. +253576,Person standing in waist high snow area alone. +431671,A desk area covered with pop cans and food +329475,A counter filled with fried donuts line up in rows. +58350,a young woman with a slice of pizza in her mouth +180135,A man holding a microphone in one hand while he holds a skateboard in the other. +273918,A train that is sitting on the rails next to a pole. +457575,A kid playing a game of frisbee with his dog in the snow. +378940,A professional tennis player with an orange shirt and grey shorts. +44677,very delicious looking food and a man and woman are eating. +570077,Two dogs are playing with a frisbee in the grass. +359465,A pair of skis in the open water. +193031,A wooden table topped with a pizza and a glass of beer. +99219,a person swinging a baseball bat at a baseball +220732,THERE ARE CITY BUSES THAT ARE LINED ON THE STREET IN FRONT OF THE BUILDING +344268,obama delivers a speech photoshopped with the ussr flag +537376,A man and a woman in formal clothes look at each other. +231097,A nearly empty plate containing broccoli and brown sauce. +195437,Four people are sitting on the dock near boats. +361321,a coin meter that is next to a parking spot +132336,A bus with no roof has lots of seats in back. +71241,"A kitchen with a refrigerator, stove, and microwave. " +186705,A man smiles as he raises a goblet to his lips. +219737,A man is playing tennis on a blue court. +385641,a small laptop is sitting on a desk +146498,A green street sign next to a dirt field by a playground. +379314,A bunch of table with unbrellas outside of a building . +89071,A man on skis poses for a picture while on the snow +183701,Three giraffes are feeding from white buckets that are hanging from a fence. +154721,a man rides a motor cycle across a field +490008,People boarding a bus at a bus stop. +494629,A man sits on a toilet while working on his computer at his desk. +160872,a little locomotive in a museum all shined up +14723,A picture of man in the air on a snowboard. +209420,A two way street sign picture from a piece camera film +241291,A large group of people on bikes on a road. +252383,A group of three men riding snowboards on a snow covered slope. +93329,A man standing in a living room with a woman and a child. +91495,Baseballs players sliding to base and jumping during the game. +392010,a small girl chasing a white kite in the air +440123,A white plate that has two small pizzas cut in half and a glass of wine next to it. +331075,a dog that's been playing in the water +510734,People are sitting on benches that line a street. +104422,A man wearing a tie and suspenders is standing with his hands in his pockets. +492608,A surfer catches a wave in the ocean. +390147,A man playing Frisbee near a walking trail. +157019,A person walking across a street in the rain. +397322,A fridge is open and showing the food inside +39988,A low shot of a man on a snow board. +413522,Two people flying a kite in the snow near a snow covered mountain. +197941,Bench and window with shutters with bricked wall +66011,a vase with some drooping flowers in it +352481,A bus stopped in front of a tall red building. +394535,A group of people getting onto a bush carrying surfboards. +395801,A street lined with cones with people up and down the sidewalk. +38875,A living room with a small television and a fireplace. +71281,some black and white sheep a fence dirt and grass +282658,Two people going through belongings from the truck of a car. +113387,a close up of a plate of food on a wooden table +529592,Two men in yellow shirts in a Frisbee competition. +173553,A man wearing a yellow bandanna holding a tennis racquet. +299288,A picture of a person talking on a phone. +530494,A group of doughnuts that are on a conveyor. +477118,A metal pole covered in different street signs. +211047,A wood bench sitting in front of a tree. +179322,A person is holding something next to an open microwave. +269879,a lady taking a bite from a slice of pizza +210766,A red sign posted to a pole in front of a tall building. +127911,A road with two people walking with umbrellas. +52700,A group of people standing around a table with plates of food. +404718,In the foreground of the picture there are couples riding on motorcycles on a city street +73560,A young girl sitting at a table that has two pizzas and a pepsi beverage glass on it. +427070,A blue van parked in a desert field under a kite. +229304,The catcher and batter are looking for the ball. +342204,A couple of women together who are eating. +102641,Apples sitting in front of a hookah pipe. +132210,An old fire truck with an old sign in the back of the truck bed. +51549,A man leans back while riding on an elephant in deep water. +443429,A little boy is playing in the water at the beach. +477273,A pile of assorted fruits and vegetables on a counter. +487266,A group photo of a tennis team on the court. +50352,"A piece of art that has been cordoned off, that looks like a baseball player." +549746,a kid sitting in a bathtub while holding onto a toothbrush +146871,A woman using a laptop in the dark on a bed +572886,A group of zebras are seen behind a fence. +559388,A man lays on his bed with two cats and a laptop. +305540,A giant pair of steel scissors in front of a tall building. +160089,An elderly couple view the trees from a bench by the lake. +185305,A man with roller blades that is jumping in the air. +499810,some people waiting for their luggage and one is wearing tennis shoes +231747,Baseball memorabilia is displayed in glass stacked casings. +185276,A bathroom with two toilets look in very bad shape. +226173,A man that is standing on a surfboard. +408610,A travel guide taking a photo as the tour bus arrives +26413,A baseball player standing at home base with a bat. +550514,A group of people standing on top of a snow covered ski slope. +439522,She is cross-country skiing for the exercise it provides for her. +94376,A large black and brown dog sitting in a dog bead. +330734,A colorful kite flying over a rocky hill. +269866,A microwave oven with a tray on the bottom +199876,"An individual is in the open view in the picture. +" +83573,several people on the top of a mountain with skis +65443,a dog with spots on a bed and a stuffed animal +373713,Three men sit at a conference discussing a topic +567898,Three round plates filled with artistically presented food. +300705,"A wooden table topped with slices of toast, soup and OJ>" +574138,A chef preparing food in a kitchen on a platter. +18412,a child is brushing her hair in the mirror +48050,A cake sitting on a kitchen counter next to two stuffed animals. +12860,A vase filled with pink flowers on top of a table. +496541,A large white sheep and two baby black sheep in barn +228721,One zebra is front of the other zebra. +243694,A long boat filled with people sitting on top of a body of water. +466346,A double deck tour bus parked at a stop. +466766,An overhead view of a group of people at an event +173004,A half eaten slice of pizza is on a plate with a knife and fork. +516540,Twin fire plugs are planted just a few feet apart on the grassy strip +539298,A very tall clock tower with clocks on every side. +176374,A building with a tall clock tower with a green top. +421455,Guy takes a picture of his dog in the backseat through his side mirror. +555267,a train that is on a large rail way +94174,A toddler in a yellow jumper is holding a teddy bear. +170017,A stop sign has been bombarded with bumper stickers. +395124,A bathroom with a decorated shower curtain. +422706,People watching off the side of a cruise ship as a life boat is lowered. +215650,An old black and white photo of an intersection. +491836,A large body of water with a boat on it. +378825,"A train traveling down a track, with a man hanging off it." +478286,The train is traveling across the high bridge. +363048,There are two people riding on a motorcycle together +310479,a close up of a child and an adult +386633,A stop sign is hanging from a metal post. +75655,a man is standing in front of a table +472569,A train sits on the tracks under an overcast sky. +486694,A train on a railroad track parked at a station +349896,Elephants stand in a large expanse of grass. +551510,A small boat on a lake in the evening. +451943,A made bed in a room with the lights left on. +387478,There is a black and white photo of a cat behind a fence +214975,A green truck cake sitting on top of a table. +407225,A women riding a bike with an umbrella. +368676,A group of people are walking dogs on a large sidewalk. +105120,a split screen image of two cats playing together +91921,A zebra standing next to a zebra laying on the ground. +340704,A woman holding a sandwich up to her mouth. +373440,Several teddy bears are sitting on a shelf. +269172,A group of men standing behind a man in a wheel chair. +113235,A hand is holding a carrot for a llama to chew. +162144,A couple of people with ski's standing in the snow. +326541,A couple of people holding up cell phones side by side. +73521,A few pieces of luggage sitting on top of a chair in an airport. +219487,a couple of men are playing with a frisbee +565389,a bunch of people at a table with food +219647,Organized baseball game with young players and an adult pitcher on a dirt field. +559315,A black and white photograph of people at a bus stop. +553547,Two cats sleeping on top of a bed next to pillows. +241645,A black stove top oven sitting in a kitchen. +235672,a group of people sitting down with umbrellas +247839,A group of men and women raising their glasses in a toast +510138,A man with a laptop and headphones at a table. +370401,A woman in red sitting on a park bench. +287667,a wooden cutting board a knife some carrots and onions +336166,A boy standing on his skateboard on a road. +464176, a sink and a bathtub and shower with a mirror above the sink +114183,A woman sitting on top of a red bench next to a man on a bike. +149304,A bathroom with both a toilet and a urinal in it. +17365,Two people on skis in snowy area next to a barn. +340781,A floodway sign sitting on the side of a road in a field. +562870,A smart phone sitting on top of a wooden table. +205344,Man and young boy on a couch in a living room. +215675,A small bathroom is pictured in this image. +505269,One of the two large hot dogs has been half eaten. +24027,A kite flying over a city park on a windy day. +192529,A bus stop and bench on a street corner. +575978,"A white sink with a duck, booth paste and necklace on top of it." +509270,There are two kites flying in the wind. +83656,A lone brown cow stands on an empty beach. +399966,A airplane is on display behind an enclosure with snow on the ground +455480,A blue and white boat with an umbrella on pier. +424349,A man placing a pizza pie in the oven +315338,Young man with backpack holding skateboard going down escalator. +173826,A person holding a Nintendo Wii controller in front of a small TV screen. +122825,An animal standing on the side of a grass covered field. +142790,Two snow boarders during a snowy day at the hill. +54618,A train is passing another train sitting on a track. +131019,Two zebras and two monkeys walking on the grass. +79975,The skateboarders practiced their jumps on the road. +288633,An old image of the Railway Station in toowoomba. +400507,a number of large air planes at terminals +78707,A guy squatting and holding a baseball bat at home plate. +523245,A man is riding on a cart led by two cattle. +309071,A man bending down next to a bicycle. +185598,there is a female surfer that is riding a wave +29504,"An oriental meal of rice, meat and vegetables in black boxes." +89745,An old clock with Roman numerals in a tower. +247438,A woman jumps with a tennis racket on a tennis court. +151081,A man is plowing the field in preparation. +379977,A brown horse is walking around in the grassy mountain. +447647,a pair of scissors and other knitting supplies are on a table +264032,Extra hands would be a help for this messy kitchen. +209290,A kid sitting at a table with a metal plate filled with food. +56724,People are riding horses and a woman is on a cellphone. +251736,A sign on top of a restaurant next to a traffic light. +74789,A silver train passing under high beams and trees. +159463,A lark dog sitting on wood floors in a living room. +507966,Many chairs and umbrellas lined up on a beach. +472860,A boy is soaking wet yet still jumping high for a frisbee catch. +481563,A large gray stone bridge spanning a river. +401163,"The dog lies on the ground, while the two men talk to each other." +82835,A man and dog that is sitting in a ski lift. +156458,A black lab waits at a picnic table for it's master. +573209,A crowd of people holding up white umbrellas. +364341,A young man tossing a baseball bat on a field. +408894,Several street signs are mounted in an urban neighborhood. +458932,A man riding a wave on top of a surfboard. +67823,a close up of a scooter parked indoors +252940,A woman holding an umbrella over another man. +301107,A cat is playing in a plant on the side of a house. +389381,a bowl of different kinds of food on it +433822,A man is holding a magnifying glass in front of him to get a better look at the object in his hand. +215812,A lot of urinels that are in a bathroom. +188852,Two skiers standing near a sign in the snow. +474609,A man with glasses cooking food on a stove top in a kitchen. +436738,An intersection with antique cars and a bus at it. +35435,a room that has a red couch and a t.v.v +215826,An empty park bench next to a park under a blue sky. +494328,A black cat sits in front of a TV screen. +193875,Some people are sitting on a car that's been wrapped in plastic +193006,Skateboarder in white t-shirt stopping in the road to adjust eyeglasses. +558642,a bowl of fruit and pastry on a table +533548,A man wearing a red jacket sitting at a desk. +23359,A man flying through the air while riding a snowboard. +162774,A man on a skateboard is trying to jump over a wall. +186449,An elderly woman sits on a bench with a crowd behind her. +383607,A green arrow sign pointing up next to a stop sign. +271364,A surfer clings to his surfboard beneath a large wave. +374743,An orange cutting knife on top of a black case. +50962,Two people in a speed boat on a body of water. +12552,A baseball player swinging a bat at a ball. +104980,A man wearing a demonic joker shirt using a smart phone. +92554,A red street sign hanging off the side of a building. +527846,A farmers market fulled of fresh fruits and vegetables. +560718,A man riding a wave on top of a surfboard. +202860,A woman holding a vintage teddy bear in her hands. +562708,The back of a bus riding on the street in traffic +34196,Two desktop computer monitors sitting on a desk with a keyboard and mouse. +466752,A toddler laying in a bed with their head on the pillow. +498010,Three red stoplights against the background of a sunset.. +261026,A large white clock tower sitting in the middle of a city. +93735,A bunch of kids skateboarding off of various objects in a skate park. +19028,Small kitchen with white cabinets and white appliances with a city view. +224740,A modern furnished living room with large fireplace. +34222,A person riding a motorcycle down the street. +176408,A small black dog laying on top of a rug. +174258,a kitchen with some missing appliances in it. +85787,A child holding an umbrella in the rain. +168562,Small brown bears by a large log in their zoo enclosure +480407,A delicious pizza is shown here with some broccoli. +253699,A piece of cake sitting on top of a plate covered in marshmallow with a lit candle sticking out of it. +547212,Guy looking down girls shirt while holding cell phone. +104381,A car stopped at a traffic light with it's brake lights on. +540544,A lady in red is playing the Wii. +316237,A beautiful young woman talking on a phone. +275219,a gray cat is seen laying on top of a blue tube +216510,there is a little boy eating chocolate off a stick from a cake +205729,A group of people that are skiing down a mountain. +489475,There is a group of zebras all standing together. +326517,a cargo plane being loaded by a scissor jack truck +7278,there is a male surfer that is riding in the wave +168250,A cook book for making donuts with donuts and coffee pictures on it's cover. +189939,A black and white cat sits in a white sink. +131804,A man with oil changing items next to a motorcycle. +294783,A living room with a mat on a floor and a book shelf filled with books. +265518,A white and black plate topped with food next to a cup of coffee. +366179,A bus stop that has buses under cover. +577028,A cute cat laying on a rock in the woods. +482998,A young man is handing a slice of pizza to a woman outdoors with people standing in line close to several buildings and trees. +66263,"A stop sign out in the middle of nowhere with large, rolling hills." +189845,a women that is walking down a sidwalk +398746,A man is standing with a group of elephants. +82462,An Oscar Mayer truck is parked at a festival. +457348,A large bus is stopped at a red stoplight. +263346,A large jetliner sitting on top of an airport runway. +571384,a small group of people that are in front of a bus +521849,A grey and blue fire hydrant on a sidewalk. +58232,A man at a restaurant is waiting to serve customers. +289415,this is a pizza that is sliced up in pieces +279994,Dog resting it's head on the arm of a couch. +166037,A large tiger cat sitting on top of a pair of shoes. +531134,A traffic light with a sad face on the red light. +125257,a person walking on a snow covered field. +53642,A bloody unconscious man being looked after in a hospital. +315524,A snowboard sitting on a hard wood floor. +482187,a group of men staring at a cellphone image +208166,A photo of doughnuts being served on racks. +28456,"A pitcher, a catcher, and a man up to bat. " +397693,some bananas with some stickers and red ends +111968,Two law enforcement officers patrol a street on horses. +38539,A wall containing many different types of clocks. +118034,Person plying video of female athlete on handheld tablet. +491623,A queen size bed with a painting over it +284749,Kites being flown by a crowd of young children on a cloudy day. +459467,A small wheeled airplane on an open runway. +27620,A laptop sitting on a desk next to a chair and another computer. +512139,a girl is holding a tennis racket on a court +434463,A slice of pizza topped with green leaves. +208971,A bad that is very white and clean in a room. +526414,An upstairs living room is decorated nicely and holds a sewing machine. +261155,A herd of cattle grazing on lush green grass. +106849,Two men standing around a table with bottles of wine. +362189,A basket filled with ripe bananas on top of a table. +231125,a person putting some pastries into a bag +148898,A plate of food including bread and vegetables. +25316,a plate of ripe bananas and red apples +255912,Two plates full of food sitting on a table next to a bottle. +262376,Many brightly colored umbrellas hanging downward from a domed ceiling. +436162,A white van parked in a parking lot next to a forest of trees. +188718,two zebras on some dirt and one is eating +295765,An airplane flying through the air on a clear day. +349324,A full view of a long train traveling on the railroad. +140501,A military jet with a bomb on the runway. +492110,A man looking at a laptop with a confused look +570381,A group of women are smiling while toasting with wine glasses. +141587,A distant airplane flying between two large buildings. +240119,an red and white fire truck and a red truck and buildings +256504,Two people sitting on a bed working on Mac laptops +176226,"Zebras, an elephant and some giraffes stand together in the grass." +407521,there is a man riding a skateboard over a ramp +188733,A public bathroom with a white sink and sign regarding dirty hands. +547202,"A bicycle signal sign, in front of a road." +75742,The cat is sitting underneath the parked car. +580255,Two big dogs ride beside one another on the same vehicle seat. +4988,A public bus parked at a bus stop +413811,People at a beach playing in the water or carrying water boards. +324250,A stuffed bear is mounted on a metal pole +512722,A man holding a doughnut with pink icing and sprinkles. +535536,A female surfer rides the waves in the ocean. +96420,Brown horse pulling a white and red cart on a street. +331648,Woman holding umbrella walking on paved roadway next to wall. +188906,A dessert dish includes sprigs for garnish on this banana dish. +439410,A tennis player hitting a tennis ball while the referee looked on. +161195,A large cow laying on the ground in the woods. +242779,A person standing in the stands at a baseball game +248445,A group of men skiing across snow covered ground. +39115,A man is jumping over a hole in the sidewalk. +283217,A group of people with an umbrella leaving from stormy skies. +136077,Two zebra feasting on a dead animal in a dry grass field.. +185550,A black and white dog is catching a red frisbee. +6497,A stone statue of an elephant near a large vase. +397994,Parachutes fly through the sky above the ocean. +238199,A young man jumping off a staircase while riding a skate board. +159740,A group of jets sitting on top of an airport runway. +245432,Multiple people waiting on a boarding dock to get on the train. +539419,Many small bags are laid out on the floor next to an open suitcase. +146099,"A view of a sheep staring at the camera, its flock is behind it." +472501,Public bus driving on a street in Hong Kong. +241726,A clock is standing in the middle of the grass in the middle of the afternoon. +236925,The zebra is looking in the window of that car. +457037,A bedroom with green and white walls and a small TV. +121014,The baseball player is trying to throw the ball. +6471,A baseball player holding a bat next to a base. +13420,A harbor with many boats and city in the background. +427438,A herd of zebras are in a dirt area near scrub brush. +512070,a person holding onto a silver cell phone +142484,A cat rolling around a chair on it's back. +27842,A dual sink vanity with mirrors above the sinks. +240605,Here is a scale weighing a tan piece of luggage. +548795,A semi-outdoor living area with a sofa chairs and coffee table. +403378,A crying woman looking at herself in a mirror. +398067,"a bathroom with a toilet, tub and window" +524627,a person at a table eating pizza +289741,A giant cruise ship next to another giant cruise ship next to a long pier. +242852,A train traveling down a train track next to a big tree +50493,a couple of people walking with their surfboards at the beach +370637,A woman standing on a tennis court holding a racquet. +341950,Two very pretty zebras playing near a fence. +6818,a couple of buckets in a white room +419867,A store with a display with lots of yellow bananas. +14635,"A woman wearing a coat, sitting down next to a table. " +27440,A giraffe standing outside of a building next to a tree. +257685,A clean counter top with flowers and a sink. +211825,A man blowing out candles on a cake. +361259,The clock is hanging from the side of a building. +180983,A person that is snowboarding in the snow. +573750,A group of young people walking across a snow covered field. +511906,A hand holding a sandwich with pickles and cilantro. +331569,A fruit smoothie is on display on a plate with two strawberries for garnish. +552842,A pitcher spins as the ball flies by. +122588,A wooden table topped with a computer monitor and two keyboards. +331162,This is a room full of laptop computers. +433883,A group of people eating on a long table +125318,A tray of doughnuts is sitting next to a fryer. +185432,A black piece of luggage with a gray and white cat laying inside of it. +358345,A water hydrant on the side of the road . +143101,A guy on a surfboard riding a wave in the ocean. +503668,A shaggy dog lying on a green and blue blanket. +546160,"An elderly woman wrapped in a shawl walks by, gripping the shoulder strap of her bag." +262386,a white bathroom with a toilet and a roll of toilet paper +156195,Sheep graze in a large field with trees behind them. +479836,"A tray with bread, cheese, fruits and vegetables." +527994,White towels are placed on twin beds with red bedspreads. +385856,A black and brown dog laying on the ground. +374043,A kitchen that has a stove and refrigerator in it. +512339,A table topped with bunches of ripe bananas. +211063,A humming bird mid flight preparing to land on a tree +331366,A man riding a bicycle down a sidewalk. +462304,A cat on a shelf sitting next to some bananas. +321861,A dead bird being dangled in front of a cat +335589,A bed that has different objects on it. +187888,"A plate has chicken, waffles, quiche and pineapple." +402313,a red stop sign is hanging on a pole +109648,A row of white urinals mounted to a restroom wall. +339019,so many people at the beach relaxing and swimming +44802,a person is holding a tennis racket on a court +308947,THERE ARE SEVERAL FIRE TRUCS THAT ARER LINE UP ON A STREET +227808,a young woman holding a cell phone in her right hand +251888,A ship in the water sailing past the city in the background +518899,A kitchen with a large white refrigerator freezer covered in paper and magnets. +252927,Person sitting in chair next to table with large pizza on serving tray. +33798,The living room is clean and empty of people/ +485413,A person on a horse jumping over a rail. +110877,Two men can be seen out in the water and one is on a surf board. +15074,A laptop that is sitting near a desktop. +355123,a frying pan with an egg that has a double yolk +43128,An elephant picks up an object with its trunk +184030,A woman is paddle boarding through the ocean. +27982,A small bathroom with marble tiles and counter. +173400,A woman sitting in bed with a small dog. +484066,A zebra riding on the back of a giraffe on a field. +390134,A white cake decorated with flowers containing a slice of cake and a fork. +200217,A baby nursing from its mother in the grass. +477820,a large church with two clocks above an entry door +3865,A man wind surfs along an empty beach. +314704,A black and white photo of a baseball game. +383445,A glazed donut hanging from a metal rod. +458045,Little boys playing on a baseball field in baseball uniforms. +298738,A panda bear sitting and eating a plant. +502090,A kite flying through a blue sky with a long tail. +228477,A man stands in the doorway of a bus watching a man ride down the street on a white horse. +126429,Several bottles of wine on a display table. +186833,A person that is standing up on a paddle board in water. +296224,A city bus is parked on the curb waiting for people +350230,a tiled kitchen with some appliances inside of it +319534,A man wearing a t-shirt stands in the door way of a white bus. +40686,A small room with wooden cabinets and two beds. +569450,A white stove top oven sitting in a kitchen. +301082,A woman brushes her teeth over the sink while sitting in her bed. +24061,A picture of a bathroom with a sink and tolet. +26051,Three men are packing fruit in containers in the middle of a factory. +200212,Several trams are parked with electric lines above them. +250790,A person gets ready to indulge in drinking a shake and eating a slice of cheesecake. +289172,There are woman playing a video game together. +234164,A train is moving on tracks beside a sidewalk. +534035,A box that says Banana Bread and has a big banana on it. +206512,THERE IS A MAN THAT IS PLAYING TENNIS ON THE COURT +262758,A yellow cat standing inside a box with tissue paper. +65258,A makeshift tent is constructed at a camp site. +452695,A view of kitchen with two microwaves in it. +185156,A man walking a dog on a leash in a parking space. +105683,a kitchen with a refrigerator a stove and a window +420110,two men in a kitchen making stuffed potatoes +85940,This is an RV kitchen area next to a tv. +572260,A wooden shelf filled with stuffed teddy bears and treats. +403107,An open laptop computer sitting on top of a desk. +335929,Two roosters standing next to a wooden fence. +550117,An older woman sitting at a table in front of a pizza. +199883,"A car, a moped, and a bike rider are stopped at an intersection." +532338,"An airplane flies in the sky amid blue sky and big, puffy, white clouds." +411642,A baseball player swinging at a baseball during a baseball game. +249838,A sexy young blonde woman holding a tennis racquet. +542771,a maid standing in a living room while looking at some thing in her hands +402658,a plate of food that is on a table +254711,A baseball player swinging a bat during a baseball game. +164366,A black and white cow standing on a train car. +500765,A freshly baked pie with an animal and star design on the top crust +165643,A woman is sitting on a horse next to the steps +411093,A red car sitting on to of a black boat. +3125,The white van is parked beside the sidewalk near a cone. +321973,"A meat wrapped, pineapple and banana on a table" +532159,A red stop sign next to a street in front of a green street sign. +392612,A man flying through the air while riding a skateboard. +185639,black and white image of a kid doing skate board tricks on street in front of a fence +32812,A tennis player aims for her return on a blue tennis court. +5076,Large tree with wooden picnic bench in wilderness area +89210,a man and woman and some people looking at them +568281,A television sits in an empty studio apartment. +349622,A man is skateboarding up a ramp in a skatepark. +469169,a woman tennis player standing on the court smiling +213809,There are different types of Italian food in the picture. +307206,A couple of cows sitting inside a wooded fence. +280734,A person sitting at a table where a pizza is sitting. +250766,Meat and a salad with knife and fork on a plate. +33144,There s a van with grafting on thevoutsidevif the van +109454,A young man holding up a green bottle as he drinks +274528,A blue truck with a large poster on it's side. +4157,A wall click with decorations hanging below it. +198367,A close up of a bowl of fruit containing bananas and peaches on a decorative cloth. +411872,Decorated bedroom ready for clean sheets and new guests +373255,A herd of animals in the middle of a grassy field. +10393,a man is riding a white bike down the street +14108,A small black dog watching an animal on a TV screen. +175597,A restaurant kitchen under construction in a building. +61836,A bird standing alone in the water looking +279145,A cat in front of a wooden bench in a garden. +13465,Two people doing a skateboard trick above a concrete set of stairs. +34167,A young child is flying a kite in a spacious field. +125886,A white clock mounted to a white wall next to a curtain. +414397,Cow lays in a straw bed during a convention. +546475,A man holding a baby while standing in front of a mirror. +266107,A person that is looking at some people. +469235,A man unloading a basket filled with lots of oranges. +350607,A bench on a road side with a quilt covering it. +442539,A bunch of sheep are standing in a field +95841,A young man swinging a baseball bat over a base. +233140,"Bedroom with a bed, dresser, and small picture hanging on the wall. " +542605,A guy on a motorcycle riding down a street lined with motorcycles. +131497,A dog laying down with its bed on its head . +474465,A guy reaches for a Frisbee at a beach. +294437,A computer sits on in front of a television set. +418292,A man getting some food in an army uniform. +237764,A cat leaning on top of a wooden table. +546577,"A man stands with his hands up, while using an interactive video controller." +421681,A couple of suit cases sitting on top of a wooden block. +154497,a close up of two people sitting near one another +456394,"BLUE MOTORCYCLE ON DISPLAY, SURROUNDED BY OTHER VEHICLES" +416384,A woman sitting in a chair with a towel over the back of it. +65427,A pizza sitting inside of a card board box. +265879,Man sitting at yellow covered table at outdoor eating area. +144379,A guy is standing in an airport with several bags of luggage. +259408,a laptop on a table with some stickers on it +324789,A paper plate with coleslaw and a half sandwich with red onions and a fork. +385912,A brown dog rides in a boat as a girl in a yellow life jacket rows. +101787,An airplane flies high above in the sky with telephone lines in the picture as well. +422391,A HORSE TRAILER WITH THE HORSE AND JOCKEY PICTURED ON IT +329498,A lady in a black wet suit carrying a surfboard. +239445,A man holding a frisbee in one hand and some balls in another. +426815,A man riding his horse in some deep water. +515755,The huge stuffed bear is lying on a couch. +384849,A blue van is parked next to a broken fire hydrant. +72536,A person is taking a slice of pizza inside. +109916,Twp cake pans sitting and cooling on the stove +307871,A closeup of a pepperoni pizza in dark area. +277048,Some taxi cabs parked along the side of a road. +569917,A small bathroom has a sink and a storage rack over the toilet. +73020,A ted sitting in a room next to a heater and a window. +128417,a toy holding a paper umbrella on a tight rope. +502979,two children sitting at a table with plates of food +165572,Small cars move to pass around a London bus. +151857,a black and white photo of a train +529631,Group in darklit room talking and looking at their cell phones holding wine glasses +303520,A woman cutting up a large chocolate sheet cake. +482236,a man that is flying some kind of kite +314370,A kitchen filled with clutter all over it's counter. +184590,Multiple types of vegetables sitting in a card board box. +281315,A group of people that are standing in the grass. +174721,A traffic light with a busy city street behind it. +84667,A woman walking down a street at night holding a red sheep umbrella. +421195,A combination of black and white sheep grazing in a meadow +188460,A young man sitting with a laptop computer on his lap. +416072,a snow skier doing a high jump into the air +185850,A man with a black top hat and suit is staring at the viewer. +150834,Adults with pickup truck next to field with sunflowers. +454382,The blue dump truck rides down the street next to the houses. +181601,an image of a bird perched in a tree +118256,A group of children with teddy bears lined up for a photo. +221547,a couple on a subway looks at each other +514483,Two boys in red uniforms playing baseball at park. +156620,A woman is admiring a mans little dog. +69224,A man and a woman eat doughnuts from a box. +228551,Two toothbrushes sit inside a cup next to tooth paste. +543672,A shelf of various cups and glasses mounted to the wall. +172327,A person swimming in the waves of a body of water. +98284,a young child holding a ball and a catchers mitt. +370591,A group of solders cutting up a sheet cake. +525170,Woman enjoying plate of food with glass of wine. +16733,A pizza next to two calzone's in boxes on a table. +277587,this is a room with a white bed in it +202843,a man with a hat throwing a baseball +418799,A small kitten is walking on a computer keyboard. +277329,a country farmland half covered in the shade of a cloud in front of a mountain +283261,A black teddy bear holding an automatic pistol pointing at a stuffed toy sheep. +164512,A person holding a tennis racket and a tennis ball +291028,A fire hydrant next to an old brick building. +319687,Two vases with intricate paintings on them on a wooden bench. +167479,Zebra and giraffe roaming through a forest of trees. +443640,A young boy kneeling beside a toilet in rubber gloves. +262119,A man flying through the air on a skateboard. +189868,A brown horse standing next to a metal fence. +162358,A small green sign for a state line by the road. +487931,a group of kids playing a game of soccer +334782,A woman hitting a tennis ball on a tennis court. +478071,A vase with flowers that is standing on a stand. +184830,"A room with a couch, foot stool and a mirror. " +346641,Two cows standing on a dirt road next to wild green brush. +15050,A man riding skis down a snow covered slope. +426840,Two airplanes on a landing strip next to green field and wired fence. +62410,A vase of flowers displayed at the front windows of a store. +489739,A little girl is sitting in an IKEA kart enjoying a snack. +71602,A group of people are standing in the snow on skis. +358923,A woman with an umbrella hat talks on her cell phone. +67569,a small air plane on a run way +41265,A white cat is laying by some tennis shoes. +214386,A couple of young girls sitting next to each other playing a game on the Nintendo Wii. +443278,Three zebras roam a field together side by side. +93483,A person relaxes with a laptop on a balcony overlooking a street. +524387,A white plate holding a piece of cake and frosting. +563882,an image of a person on their cellular phone +461016,A boat sitting on top of a body of water next to tall buildings. +543631,A bed in a small and empty white room +437206,A bird is standing in what seems to be an apple tree. +573823,a laptop computer on a desk and a tv +374886,A United States air plane taking off . +377361,A woman smiling while standing next to a giraffe. +491064,Businessmen listening to a military man speaking in a hangar +73120,Bunch of people out on the small hill flying kites +462026,Several beautiful vintage racing motorcycles on public display. +193332,A bride and a groom cutting a slice of wedding cake at a reception. +447765,This wedding cakes has three layers and pink roses. +207926,A black and white shot of people standing in the rain in front of a castle structure. +545550,A little kid eating a slice of cheesy pizza. +162092,The woman is eating a piece of cake. +515854,A group of people boarding a passenger jet up stairs. +323399,A square piece of pizza on top of a plate. +75753,People are on surfboards near the shore in the water. +394533,A man that is riding a skateboard up a ramp. +426342,A man is smiling behind a large dog. +295051,a close up of a cat on a desk near stuffed animals +281929,A man dressed in a suit standing next to his bicycle. +248112,A man playing tennis is getting ready to swing at the ball. +520561,A pizza topped with sliced of veggies and sauce. +489793,A laptop computer keyboard and icons on a computer screen. +268049,A retail sign is hanging above a stop sign alert for added effect. +572592,Two people flying a kite on a cloudy day. +532671,A blue motorcycle parked on street next to hill. +327983,A pink colored bedroom with very colorful bedding. +379837,A girl with her hands up with excitement as a woman brings a cake. +196168,"Doorway view of a bathroom with sink, toilet and bidet. " +661,A chicken sandwich in a wrapper near a cell phone. +515422,A black and white image of a plane flying over treetops. +517061,A man riding down the side of a snow covered slope. +458572,Three adult giraffe stand at a grove of trees. +365289,A young girl is holding a stuffed animal. +535608,some people sitting and standing on the beach +477906,A snowboarder in a plaid black jacket it catching air. +413096,A plane on the runway is being led by a tow cart +191096,A baseball player holding a bat while standing in a field. +60959,Two zebras running on a path next to trees. +404655,The people are walking the the street and some are wearing ties. +420090,Two people with hats on riding horses in the grass near a hill. +495513,A woman holding a stick with lots of wieners on it. +539565,Small boy on a skateboard riding down the street way. +408120,A little girl that is standing with an umbrella. +250592,A red and white boat sitting next to a peer. +150872,A man flying a kite on the beach. +367771,A box filled with different flavored donuts on a table. +300008,A cow seems disfigured and injured on the beach. +498541,"The pitcher is lurching toward the batter, the ball is en-route to the plate, the batter is ready to swing, as the outfielders and umpires look on." +290416,A skier flies and crosses his skis during a jump +488206,A cat sits on a bench next to another bench. +387850,People wait at a public transport station in Thailand. +581205,some food is laying out on some plates +279083,A baseball player pitching a ball on top of a field. +358994,A man on a snowy hill during the day. +173783,Cell phones in a circle around kernel corn. +141143,A flock of birds flying over a beach near the ocean. +395113,A green and light blue bus traveling down a highway. +302107,A man swinging a baseball bat during a baseball game. +398748,A bird sitting on a sandy beach next to the ocean. +175863,A man standing on a skateboard in the middle of the street +418757,A building with a clock on the front and other buildings in front of it. +32524,A woman combing her hair with a brush outside at night +181359,A group of elephants are walking on a dirt road. +492878,A bathroom sink and its reflection in the mirror. +516601,People are skiing and snowboarding on a high mountain. +402712,A piece of cake sitting on top of a bowl next to a fork. +315622,A polar bear is playing with a large chunk of ice. +259112,A bald cat sleeping on a blanket on top of a bed. +303197,a red fire hydrant in the middle of a green field. +193380,Many boats are docked at the harbor of a large city. +148911,A black and white picture of a young boy on a skateboard. +44068,A brown teddy bear sitting in a red chair. +93985,a young child in glasses is wearing a baseball glove +301148,A family gathers around a birthday cake and poses for picture. +46378,A cat eating a bird it has caught. +342649,Two birds sitting on top of a wooden table near tinfoil. +168543,A very cute cat sitting on a toilet. +298225,A man wearing a hat riding a motorcycle. +165133,A young man poses with a surfboard next to water. +117093,A very nice looking motorcycle parked near some bushes. +8045,Tub and shower on platform in modern tiled bathroom. +429109,A street filled with buses and a white van. +199540,A women holding up a very large pair of scissors . +181013,Two men are playing frisbee with one man on the offense and another guarding. +456816,A cream puff sitting on top of a small white plate. +368080,A metal advertisement sign with a red and white clock. +372087,A green and yellow railroad train pulling into the station +286089,A woman holding a tennis racquet near a ball. +75032,Two men using poles to push skateboards up a hill. +519055,A man throwing a baseball while people watch from chairs behind him. +217546,A group of friends sits in their living room while playing video games. +25165,A hand holding a remote control next to a bottle of pills. +197462,A fire hydrant that has some writing on it. +209995,A woman with blonde hair standing next to a bar making drinks. +155192,A man riding a skateboard up the side of a ramp. +515403,The horse is in the water with a man. +433924,A woman holding a scissor close to her hair +153783,"Dog statue wearing a hat, sunglasses and stars and strips bunting." +176527,birds on pillars in a body of water +342650,A man cutting a pizza in a home kitchen. +8899,A red brick building with a graffiti covered front. +227359,Picture of a person that is reading a book. +551959,A man is feeding a griaffe off of the stand +511594,A statue of a cow is seated on the out side of a store +117525,A man in front of a Christmas tree with his dog. +499093,a bunch of people slying kites on a beach +3938,A woman is playing with a Nintendo Wii. +31542,A man flying through the air on top of a pair of skis. +106896,An elephant in the river holding something with its trunk +347612,A red stop sign sitting next to a tree. +157067,A white gazebo surrounded by landscaping and trees. +85288,A GIRAFFE IS NURSING ITS YOUNG IN THE ZOO +121959,A group of people that are at the beach hanging out. +134811,A pizza that is laying down on a plate. +414481,A black and white cat sleeps next to a stuffed bear. +427476,A little girl that is standing near a toilet. +229132,A pile of containers filled with lots of apple juice. +549817,The toilet is in a room with exposed pipes. +148243,A man standing next to a woman in a room. +382563,A young man kneeling down to luggage filled with sound equipment. +177173,a double decker red bus stopped outside of a brick building +189136,a little girl eating pizza and playing with a fake aquarium +410885,A person on a surfboard in the water. +427256,A man holding a baseball bat while standing next to home plate. +208311,Small skateboarder taking a jump on top of his board. +183843,A man riding a snowboard across snow covered ground. +352196,A cat that is playing on the ground with a door. +497348,A street sign posted to a pole that reads no through road. +521655,A person on some skis in the snow. +489014,A dog that is standing on the side of a boat. +345930,"A view of a cloudy sky beyond a street lamp. +" +61515,Two bears standing on a grassy hill facing each other. +328110,A black and white photograph of a woman taking care of a child on a park bench. +140743,a person smiling eating a piece of pizza +93201,A dog with a hat on top of his head. +230619,a dog with blue eyes standing in front of an oven +542699,"Four different photographs of soups, rice and fish." +512183,A dog with tags laying on a couch. +441995,A smiling woman shows a hard shelled case. +268693,A sign on a pole signifying a no parking zone. +257275,A skier flying down a snow covered hill into a pool. +543644,A person jumping on a rail on a skateboard. +8981,A man riding a wave on top of a surfboard. +346259,A black motorcycle sits on a paved surface. +204640,Two brown bears embracing each other on top of a a dirt ground. +287560,A toilet in a bathroom next to a plaque on a wall. +253988,A beautiful black and white dog catching a frisbee in midair +332625,A man sitting on a plane in back of a seat with a monitor on it. +541897,A man that is standing near a bike. +63958,A young zebra is sniffing the ground in a dusty area. +530383,A man in a mask is holding a cell phone. +205253,Adults enjoying time at sandy beach with sun and shade. +427223,A young blond woman swinging a tennis racquet at a ball. +147537,A fire hydrant on a cart with a hose attached to it. +388439,A man doing a trick on a skateboard on a ramp. +104624,A person holding a computer mouse next to a computer keyboard. +393093,A silver and green train crossing over the tracks +525705,a man that has a baseball bat in his hand +286778,A baby boy standing inside of a wooden crib. +467468,The bench with shade in the courtyard is empty. +492677,a man that is standing up with a cell phone +46316,A cat laying on top of a wooden bench. +124462,A orange tabby cat laying down on a black car +89697,The man is sitting on the arm of a bench near a woman. +410583,Oriental woman preparing to put a toothbrush into her mouth. +154213,Scissors are next to a pie crust in a dish. +391343,Two people standing next to a motorcycle on a brick path. +42834,a woman sitting before a plate of ham slices and a camera. +288170,A city street with antique cars and pedestrians. +344624,A black bird perched on a wire next to a tree. +117744,A young girl in a white top poses with a yellow tennis racket. +114453,Caucasian girl talking on a cell phone in public. +248252,A person with an umbrella on a boat. +233187,A little girl is reaching for something a boy is holding. +567644,A stop sign and a one way sign are on the corner of a town block. +354460,A group of people cutting a ceremonial ribbon with great delight. +390350,there is a young boy sitting on the floor using a phone +339253,A woman flying a kite in a blue sky. +567693,A bucket that is on top of a table. +446920,A couple of baseball players standing on top of a field. +382530,An orange truck with some people in back +297299,A man with a drink and novelty tie sits on the grass. +548524,The person is surfing through the long wave in the ocean. +136533,A desktop computer sitting on a desk next to big speakers. +118069,A group of young girls kicking around a soccer ball. +261073,A refrigerator that has many pictures and magnets on it. +311303,A cup with soda in front of a panini with a side of greens. +294209,A woman is putting on make up in front of several mirrors. +361046,Man knelling on a surf board on a wave. +262227,A computer monitor sitting on top of a desk. +245971,A small tablet that is made into a computer. +408535,A guy with a white shirt and jeans riding a skateboard. +451679,An off white smoker being tended to by a guy and people with their back turned in the background. +242452,A baseball player holding a bat next to home plate. +254392,A cat is sitting under a purple umbrella. +97892,A white demon hovering next to a red stop sign under a one way street sign. +225784,this is a white bike with a light on it +557552,Several motor scooters parked in a row on the side of a street. +504670,a black television is sitting on a table +354027,an orange and white double decker bus and a woman and child crossing the street +459182,Two people are holding their surf boards on the beach as they walk through the water. +457877,A group of schoolboys in jackets and ties poses for a picture outside a building. +72338,a tree surrounded by a little bench with someone sitting on it +249356,"A bathroom with a toilet, shower stall and a mirror." +219897,A stop sign mounted on a pole with a street sign with a forest in the background. +140664,A mixture of vegetables are cooking in a pan. +315660,a tennis player pacing on the court waiting for a ball +313372,a couple of people play a game of tennis on a grass surface +161079,A black and white photo of a woman standing next to a cows rear +49091,A city lined with tall buildings covered in hanging letters. +315668,a number of sheep in a field next to a truck +489764,A woman and a man playing a video game in the living room +359574,A white and orange cat laying on top of a bed. +443868,A large bus and a car on a street. +240210,a white and black bus is driving down the street +165225,Room of people sitting at long tables with an overhead projector in front. +462341,An older building with birds flying near it. +546674,A plant is rooted in rock filled vase +250680,A large bird standing on top of a wooden post. +157807,a cat that is standing on a toilet and next to a sink +321062,A plate topped with lots of different kinds of fruit. +312216,A little girl smiling widely for the camera +581781,"A store display filled with ripe, unripe bananas and other fruit." +187240,there is a service truck that is behind a bus +577169,A giant clock tower window is looked through by many. +464153,A person on a red and black moped on a sidewalk. +366440,A water foul near the shore in a body of water with an island in the middle of it. +138838,A boy laying on the beach behind a man flying a kite. +296303,A grasshopper in a cage eating a slice of carrot. +163608,Several pieces of food on a wood table including several apples. +321476,Woman eating on park bench pigeons around her +456908,A wooden table holding a black tray of meat and rice. +181747,Sandwich triangles on a plate next to a mug. +78288,A man standing next to a parked motorcycle. +398727,There are some sandwiches and some seafood sitting on a table. +486040,Two desktop computers sitting on top of a desk. +331753,A bunch of toilets sit on display with green tags. +542257,A two car train is coming around the bend. +463151,Crowds of people have lined a street to watch a parade. +273825,A Caucasian man looks up while talking on a cell phone outside. +458156,A bright red fire hydrant is in the grass. +572399,A toilet in a bathroom suspended in the air +186038,A woman brushing her teeth in a dull light room. +513054,A woman is flying a kite with two boys. +573391,A bear walking in the forest in the early morning +139281,A black and white panda playing with a rusted sink. +536195,A group of sheep in grassy area next to a fence. +300221,"A display in a store filled with carrots, cauliflower and greens." +275197,A daytime view of a messy kitchen corner. +390137,A man on a bike near people on a bench +286813,A child in a cart behind small pony on race track. +205308,A table topped with plates of food and a glass of wine. +94299,Child wearing a helmet and holding a tennis racket. +141673,A woman pours a man in a suit a glass of wine from behind a temporary bar. +326911,Two small dogs on a sidewalk near a bicycle. +479829,A woman sitting on a bed while holding a book. +252968,One train riding on the multiple train tracks side by side. +435481,A group of people standing at a station by a train. +385580,Men on phones standing in white room with lights +110857,A bedroom with a white bed on a frame next to a window. +501047,An elephant standing under a tree in a field. +92765,A bunch of bananas are sitting on table at the market. +143946,A stop sign in the middle of the road +402559,A large giraffe is standing in the wilderness. +322122,A white toilet bowl with a cleaner thing in it +378859,A plane makes a landing at an airport. +546556,A group of sheep that are in the grass. +486501,Large adult cat lying in white sink in residential bathroom. +58655,There is a clock right outside of the tall building. +22004,A man balancing on a skateboard in front of a graffiti covered wall. +150685,two gray stove burners and a wooden bowl with four apples +136911,"The large platter has a bagel, fruit, butter and sour cream." +339096,The pizza on the table is half eaten. +29136,A sweating man hits a tennis ball with a racquet. +110392,"A woman walking on a city sidewalk, talking on a cell phone." +320974,A dog in the grass next to a water dish. +128110,A sign directs people towards four waiting lanes ahead. +561088,A reflection of a woman in a mirror with a camera. +553248,A slice of pizza sitting in a persons hand. +210980,A large elephant carrying a man down the street +198563,A cat sitting on a toilet seat while the cover is up. +360328,A older woman is on the phone in a kitchen. +370798,A couple of horses standing next to each other. +100661,Some zebras are seen grazing in the field. +385598,a man on skis showing a young child how to ski +86323,A bedroom trashed and filled with clutter and junk. +50496,A red train traveling through a rural countryside. +449279,Three birthday candles stand lit on a cake. +468022,A woman holding a white tray topped with a large cake. +119460,Many appliances on the shell of a store with containers +291834,a person jumping over a ramp with a skateboard +466939,A MOTORCYCLE DRIVER SPEEDING AROUND THE RACE RAMP +193889,A couple of zebra standing next to each other. +100582,There are meats and vegetables on a flatbread +386500,A dog that is laying down on a couch. +160836,A pizza covered in lots of cheese and toppings. +181386,A train coming out of a bridge next to a river. +533171,A single horse that has been tied to a tree. +338428,An older pickup truck with decorative murals painted on. +110359,Commercial jet passing overhead on bright cloudless sky. +499802,A parade with police officers riding police motorcycles +153104,A woman is holding a hot dog up to a man's mouth. +283717,A microwave sitting on top of a wooden shelf. +413235,Very cute cat laying on couch holding the remote control +240915,a close up of an open umbrella on a a fence +28110,A giraffe walking through the forest in the wild. +162818,A person approaching a public transportation bus through the snow. +450439,a patriotic kite flying through the clear blue sky. +290026,A black and red bus turning on street next to a building. +298067,A photo of beer is cropped next to a photo of food. +538891,A female tennis player is on the court playing. +10496,A couple of people sitting and standing in a field flying a kite. +106757,A actress standing near an elephant on a sunny day. +382743,Many kites can be seen in the air through umbrellas. +324421,A flock of pink flamingos stand with their heads resting on their backs. +565715,A white vase with red roses on it contains purple flowers. +111811,a large train station with several trains docked +89556,A couple of silver cars parked around a fire hydrant. +317479,Groups of people standing under umbrellas next to the truck +127865,A woman looking at a picture on a computer +348494,A brown cat bathing on a mat in the sun. +410339,A woman walking down a flight of stairs. +305004,A young man riding a white surfboard on top of a wave. +116289,Two giraffe standing next to each other around a tree. +163412,people riding bikes near a beach and others swimming +35401,A parking lot filled with cars next to a large traffic light. +357748,A pink city bus at a bus stop. +24480,A black cow with horns standing on a field. +494808,Several water bottles grouped together on a wooden table. +300848,Men playing soccer in a green field while the coach looks on. +108495,Cute girl sitting on a skateboard in the driveway +90935,A room filled with a metal rack with white pieces of cloth resting on it. +523955,A man riding a snowboard down a snow covered slope. +357322,a woman is laying down with several puppies +325153,a group of green luggage sitting together in a living room +61720,A giraffe eating the bark off of a tree. +263268,A modern bathroom with a toilet and shower. +435179,Some men find a ship wreaked on the beach. +164372,A truck is going down a windy mountain road. +412676,cars parked near a all black corner store +66502,A group of women on various color surfboards in water. +66959,A train carrying army trucks with men standing on it. +247264,Two men in wetsuits with one man carrying a surfboard. +361721,a blue and white three wheeler truck and two men +472211,A woman flying a red kite on top of a lush green field. +513971,A cat is sitting outside on the ledge of a window. +82697,A tall clock tower sitting next to a restaurant. +217872,Woman snow boarding off of a cliff in the air. +240185,a person wearing a gorilla costume and a suit and tie +293545,A blue sink is in a corner cut out. +533026,a bathroom with a cat underneath a bath tub +448810,A street sign with six different locations on it. +542024,A baseball player holding a bat towards a ball. +145101,A living room filled with furniture and two windows. +487530,A traffic light at a intersection with vehicles. +154155,"Several pieces of fruit including: a pineapple, apples and pears." +72397,a yellow and blue fire hydrant by the curb +62985,a couple of people are flying kites in the snow +131531,The park has a outside clock displayed. +474711,A red fire hydrant sitting next to a wooden wall. +230166,A herd of sheep grazing on a green grass covered piece of land next to a forest. +50672,A person wearing a wetsuit with a surfboard under one arm. +56437,The man in the tie is looking away from the camera. +12947,A man standing on the side of a commuter train. +504000,An airplane is vintage and is on display. +139457,A large gathering of people is sitting around a wooden table. +385346,"An orange, white and blue bus on a street." +533129,A living room filled with furniture and a wall mounted clock covered in white stars. +500663,A herd of cattle grazing on a lush green field. +161622,A man in white jacket rowing a yellow surfboard on water. +10400,A large clock tower over a church next to trees. +68435,A woman and man dance while smiling. +178025,A man laying in bed holding a baby. +260247,A man sitting in a chair under an umbrella. +527464,A picture of a very clean living room. +459999,A large brick building with a clock at the top. +509379,"The suitcases are setting on one of the beds in the hotel room. +" +381385,A mother and baby zebra standing in their enclosure. +208347,A youn ggirl playing a game on the Nintendo Wii. +490125,White birds are gathered around a water puddle. +526418,A teddy bear sits among a stereo system and a number of records. +168812,A dog sniffing a plate of bread with figs on it. +196185,A jetliner taking off from an airport runway. +254869,The woman playing a video game stands near a man holding a wine glass. +43202,A large fount sitting in the middle of a city. +79566,The side of a train showing the entrance and two doors. +455203,a cat laying on a laptop and looking like it has glowing eyes +431742,A man standing on a tennis court holding a racquet. +142940,A man standing in a field holding a frisbee. +246966,A different variety of foods in plastic bags. +39390,a couple of zebras are standing in a field +254022,"A bed with lamps, night stands, a clock and a phone." +18750,Artistic photograph of architecture and frost-laden trees at dawn +566027,A very cute black dog by a yellow fire hydrant. +556873,A cake that is sitting in the grass. +524392,A kitchen scene with focus on the refrigerator. +539251,A person taking a selfie in a bathroom mirror. +16590,A woman is standing in front of a stove +42147,a white plane is going low to make a landing +559364,A man stands with a flag-decked statue depicting a child with piles of luggage. +430656,A young man holding a Nintendo Wii game controller. +382211,Giraffe holding it's head mid way with a wooden gate behind it. +175619,The legs of a man watching TV and drinking a beer. +323827,A modern digital clock in a town square. +104563,A boy jumping his skateboard over a tilted iron post. +91610,A bird with a long neck sitting in a tree filled with leaves. +87889,Two people walking through the snow on skies. +512830,a couple of soldiers are sitting on a plane +53120,Four horses with people riding them in the water. +32887,A man holding a stick standing next to a green hillside. +339870,A tall church tower sitting on the side of a road. +258311,A train traveling through a town next to a blue and white building. +94113,"The bathroom is multi-colored containing black, white, and green. +" +114920,some people and kids riding on a small train by some trees +134075,A table that has menus and glasses sitting on it. +241319,A bathroom sink with two toothbrushes facing each other. +453565,"A display of broccoli, rice patties, bread, and carrots. " +145019,A group of people are looking at a plane being removed from a field by a bulldozer. +491856,A living room with a fire place and lots of furniture. +356828,A computer keyboard sitting on top of a desk. +200231,A bench with a bunch of stuffed animals and other items on it +453328,Modern bed placed next to clear glass night stand. +301333,A train coming down the tracks in a city. +519569,a kitchen with a refrigerator a counter with chairs +493923,Two young children playing baseball on a dirt mound. +198349,A pair of umbrellas sitting on a beach near the ocean. +465295,A blurry cat sits on top of a bright television. +460812,A bathroom scene with focus on the toilet and the sink +431456,Long view of tennis match with man diving for ball in match +565031,A group of bikers parked in a parking lot under large lights. +527961,a purple bus standing outside the building and a woman coming out +159223,A couple of men standing next to a blue truck. +264730,A clock on display on a wall in the city. +468012,A kid sitting on the beach with a surfboard. +25743,Two elephants in a dirt area next to concrete walls. +360393,"A thing is in the outline and it shows up like something +" +379077,A brown dog looks up at the camera as he stands in the snow. +171805,A young man standing in front of a zebra in an enclosure. +326344,there are three oranges next to a paper towel on the counter +563665,A red passenger train at an underground platform. +330932,A group of young men playing a game of baseball. +437347,Two men playing a game of catch on a street. +576305,"A little girl lies on a wooden bench, eating snacks from a bag." +78941,A cat sitting next to a row of shoes. +248069,A little girl standing in front of a green fence. +366199,A cat hides underneath the cover of blankets. +314965,"A cake with dark frosting, six purple candles and floral decorations." +358765,A brown songbird perched on the handlebars of a bicycle. +168231,A man standing on top of a snow covered ski slope. +412419,A baseball player hits a ball during a game. +353948,There are two zebras grazing side by side. +500859,A cat laying down on a wooden table in a park. +573930,A cross walk with pedestrians and a delivery truck. +418711,A person looking at another person with bananas on a bike. +402234,An elephant and gazelle standing at the edge of the woods. +277625,Many people riding horses about to do battle +405574,A woman is walking through the park while birds fly +30447,a bunch of bowls of soup sit next to a bowl of fruit +112897,there is a very tall tower that has a clock on it +264180,A couple of cows standing inside of an animal pen. +202913,Half of a white cake with coconuts on top. +62443,A brick building with an open window next to a few colorful bushes. +154830,Car waits as person on bike crosses the road +275668,Two large beds in a hotel room next to a desk. +125556,A man standing next to a woman inside of a room. +396519,some people are on some grass playing frisbee +300179,Two giraffes standing side by side at a zoo in front of a large city. +217522,A woman holding a hotdog and reaching for ketchup at a food cart. +146240,A man riding skateboard into the air. +65267,"A clean, orderly living room with high ceilings and with many windows." +309553,A bed with a laptop computer sitting on top of it. +428067,The grazing sheep don't notice the truck in the field. +233848,A man in a field works to get a kite off the ground. +226957,A brown and white cat on carpet with wall in background. +196924,Living room with furniture with garage door at one end. +404504,trucks on one side of a road with cars on the other side +561570,A big city street at night with the ghost of a taxi driving through an intersection. +184425,Two people are sitting at a table drinking wine. +355826,Large grey truck on display at auto show. +539971,A black and white cat slightly opens its eyes on a red blanket in a bed. +255158,The person is riding her bicycle down the road. +547106,a tall clock tower with a sky background +377003,a chair and a couch in a room with art on the wall +422383,a bunch of tents set up on a beach +137822,A group of trains parked next to each other. +303089,an older man is brushing his teeth at home +279677,A person with a hat on flying a kite by a plane flying in the sky. +124991,A road work sign stands near a curb on a residential street. +407355,A foot stool sitting in a room under a mirror. +576743,A tube of cream sitting on top of a bathroom sink. +313063,"A bathroom with a sink, toilet, tub and mirror." +422328,A horse standing in the snow with a wagon behind it. +251181,The yellow mustang car is sitting on the side of the sign. +193369,A bench that sits in the grass with rocks cemented to the ground +406676,A man wearing a visor holding a neon frisbee. +495252,A man on a skateboard riding on a street. +153734,A brown cow walking along side of a man. +443949,Cooking utensils in a glass next to an oven. +213905,Two women walking on top of a tennis court holding tennis racquets. +93034,Woman holding a purse and walking a dog passing in front of a big building. +432519,four people sitting nad standing eating and drinking +432820,A baseball player swinging a bat on to of a field. +534664,A close up photo of suitcases and luggage +165681,This is an image of a row of scooters +150616,A white tub sitting underneath a couple of windows. +412036,A glass container with different compartments filled with food. +218646,A herd of animals laying at the foot of a stone mountain. +379552,A hand in a bowl full of broccoli. +28194,A pretty lady riding a surfboard while wearing a tight wetsuit. +124979,A man laying on top of a wall next to a bike. +224991,A surfer is wind surfing on some choppy waves. +337247,Two bananas and an apple are next to an Amazon box. +189588,A man holding a game controller for the Nintendo Wii. +361587,A man riding a wave on top of a surfboard. +263969,Man and woman holding a knife up to a small cake. +229387,An unhappy cat wearing a puffy pink beanie +552074,"A dirty bathroom features a toilet with a blue seat, a tub and a waste paper basket." +146127,A fork full of food including carrots and tomato is being held up to the camera. +128939,a car is stopped in the street for people to cross +489305,A person shows two bowls full of different fruits +54010,A woman and man playing a game with Nintendo Wii controllers. +352694,A man in a white shirt and black shorts jumps near a soccer ball. +251537,There is a carrot next to some greens on the red cutting board. +78404,Three women sitting on a park bench next to each other. +137271,A color kite flying over a large body of water. +496954,A slice of cake sitting top of a white plate. +209808,Sloppy Joe mix on a toasted bun on a plate +147958,A person sitting on a wooden bench outside. +30062,A person using a mouse on a laptop. +230450,there is a large building under construction and many parking meters +123677,A group of people holding up wine glasses. +383443,"A bathroom with a tub, sinks, lights and a television." +279395,A boat floating past a bridge on a river. +365129,A sunset behind a hill with a bay of boats in the foreground. +452566,"There is a rugged mountain past the stop sign," +323263,A group of people standing around a blue building. +331311,a umbrella that has some candles around it +106048,A white bus driving past a tall building. +249180,Two men passing each other on the stair.s +398758,A tiger cat sitting on the arm of a sofa in a living room. +492016,"Two black plastic containers filled with meat, gravy and veggies." +570659,A stove and a sink in a room. +11703,Inside a tram waiting to go out the door. +467959,Two zebras that are eating grass in a field. +537954,A black and white image of a farmer with small children. +156100,Two pizzas are sitting in boxes with only one slice missing. +25216,Waffles on a plate have a gravy on them as they sit near a spoon. +43261,A white table with various plates and dishes of food. +426377,a refrigerator with drinks inside next to two tables and chairs +23272,A Calico cat laying on the hood of a Mercedes. +204360,A view of people riding bicycles and unicycles in the street from a front bus window. +827,a zeebra running on a grass feild in a park +334810,"Noodle soup with meat slices, in white bowl." +302608,A room with a bed with black floral sheets and a night stand. +36492,A large jetliner parked an airport near a passenger loading terminal. +203931,A baseball player at home plate preparing to swing. +364642,A large square shaped pizza covered in melted cheese and veggies. +295441,A young person who is going to hit a ball with a bat. +196742,A man holding a microphone while sitting down. +484842,A whole cake and a piece in a plate by a person. +566931,A surfer gains her balance on a small wave near her friends +519673,A big locomotive stopped in a train station +228415,A tall wooden pole with two street signs hanging from it. +536467,"A view of a a pizza sitting on a table, with a person taking it off the tray." +27297,Two white teddy bears sitting next to each other wearing crowns. +315162,A man is surfing on a small wave. +115521,two men playing a video game with controllers +129800,A white pick up truck parked in a parking lot. +549885,Thick crust pizza with vegetables displayed on wooden table. +204906,Two men riding motorcycles down a curvy road. +549384,a white toilet an cabinet in a bathroom +221502,A park bench surrounded by floral arrangements on either side. +495348,some zebras a giraffe and other animals and some bushes and trees +26185,A man with a surfboard walking on the shore near an ocean. +369757,A set of three pizzas in a display case.next to desserts. +333156,A piece of partially-eaten cake sits on a paper plate. +143217,A yellow and blue train traveling along tracks. +11276,Different assortment of noodles and vegetables sitting in a pot and tray. +134413,A tray of food on a dining table. +565929,A tower with clocks on the walls at the top is standing in the garden. +396110,People sitting at a bar looking at a map +273711,"A table topped with plates, bowls and containers of food." +481115,A skater prepares to drop in from the top of a ramp. +3103,A man riding a skateboard up the side of a wooden ramp. +416159,A group of people on a street next to a bus. +19129,A man and a woman floating on a surfboard in the ocean. +438038,A couple of black birds are standing on a tree branch. +71226,Two dogs and a cat sleeping on their human's bed +567751,Two horses grazing on grass in the mountains. +88951,A man and his dog sit at the park. +427802,A close up of dozens of of oranges stacked. +319469,A couple of brown and white cows standing on a field of grass. +297610,Skateboarder on top of small structure with mosaic tiles. +62878,A baseball player in uniform holding a baseball bat. +37734,There are lots of suitcases in a single room +525420,A bathtub is beneath a torn down wall. +371322,A river with men riding paddle and surf boards on top of it. +202865,A donut that has powdered sugar and chocolate filling. +14592,A monkey that is holding a banana and a bottle. +304760,Black cat laying on a chair's cushion staring at something. +573008,A large Colgate clock is by the water. +39322,A man prepares to fly a kite in a grassy area. +412807,A cat sitting on a wooden bench outside. +202886,"A plate topped with meat, potatoes and broccoli." +79754,A woman standing in front of a counter with a plate of food. +538092,A man standing in a kitchen while closing a cupboard door. +263884,A large group of trains parked next to each other on railroad tracks. +239959,A white toilet sitting next to a walk in shower. +269006,A red double decker bus driving past very tall buildings. +359676,a number of people with luggage bags outside of a building +102637,An airliner is descending over the water to an airport. +473210,two people taking apart their wii controllers to replace batteries +46847,a number of birds on a beach near the water +211042,there is a cat that is drinking out of the toilet +532426,A dog attached to a motor cycle by a leash. +92050,A tall building sitting next to a cathedral. +26518,someone that is standing on top of a skateboard +459219,"A white colored vanity area with a mirror, sink and double light on the wall above the mirror." +344762,A building with a grey hound road sign on it +383163,A parked tow truck truck carrying heavy equipment. +556862,A smiling woman holding up a black laptop. +86008,a cup that has a pair of scissors pens and markers in it +70675,a person using a remote control next to a cup +466602,A snow skier is standing on the snow. +286458,Two images of open suitecases full of toiletries. +74446,A man washing an elephant in a body of water. +196311,Image of a living room showing couches facing each other. +100000,"A cat sitting next to a wii controller, upside down." +26507,Two men playing a game of frisbee on top of a green field. +64183,A person in the street carrying a cart and an umbrella. +194746,A pizza covered in cheese dripping down onto the bottom of an oven burning. +180779,An overhead view of a city cross walk on a rainy day features an array of colorful umbrellas. +485027,A tennis player is serving a tennis ball. +161222,A table topped with plates of food and wine glasses.. +210276,A cat in a suitcase during a sunny day. +316917,a sandwich with grilled meat covered by salad greens +141574,A group of people in the ocean on surf boards. +382797,A shirtless man in a hat making luch +430259,A man talking on a phone standing in front of a building. +262093,A counter filled with lots of clutter in a kitchen. +93331,A white toilet sitting next to a window in a bathroom. +270001,A hot dog on a bun next to a pile of tater tots. +344045,A person on a surfboard in the water. +544334,A man on a surfboard in the water. +67002,A store filled with merchandise with workers and customers standing inside of it. +324914,A computer keyboard sitting on top of a desk. +139436,The elephant is standing on the grass in the clearing. +262576,a laptop that is sitting on top of a bed +96402,a white living room with blue furniture and decorations +478567,there are several people on the field playing soccer together +374266,A brown horse standing behind a chain link fence on green grass. +8589,A group of men riding skateboards on top of cement. +20175,a couple of people are standing around a fridge +144429,A zebra walking on the dirt with trees in the background +350668,A man riding a snowboard down a snow covered slope. +62023,A man is surfing down a waterway in front of a stone bridge as a crowd watches from above. +67896,A clock displays a time for the public to see. +335041,A man cross-country skiing on a snowy city street +54301,A group of men on a field playing baseball. +348648,A fire hydrant sitting on the side of a road near a building. +481035,A large white bed with a wooden headboard. +488,A man getting ready to bunt the baseball +31049,A large brown dog laying on top of a couch. +295340,A bus and truck driving down a busy city street. +260105,A white plate topped with eggs and potatoes +434858,A red vase with an assortment of flowers in it +223466,A bus yard filled with yellow school buses parked side by side. +83364,"Street view with cars going by and people walking around," +505953,A computer key board sitting next to a computer mouse with mouse pad. +2923,A marsh area with egrets and shrimp boats +407861,A toilet is on a tile floor in a bathroom. +148766,some white and blue porcelain designer toilet bowls +526800,Two baseball players with bats in their hands. +134503,"A canoe in water, with one person swimming." +206783,A large elephant standing next to a stone wall. +561578,a brick clock tower in the middle of a street +243896,A skier standing behind a difficulty level sign on the slope +545309,A train travels down the tracks of a covered bridge. +94157,Large clock tower sitting in front of a park. +517619,A person snowboard on a snow covered ground +50882,A fat man is playing golf on the Wii. +425221,A plane is flying away from the airport +505492,There is a tree near the tall clock. +365098,An empty boat in the water near a tree +53788,Black and white picture of a man carrying a surf board. +537081,A white plate topped with two slices of pizza. +465069,A refrigerator with a lot of stains on it. +142890,A black cat sitting in front of a desktop computer monitor. +183364,Two laptops next to each other with monitors turned on. +449793,The two traffic lights are placed on a pole on the road. +81691,A boy ollies his skateboard at an outdoor skate-park. +409100,The man in a black tie sits in a chair with his shirt sleeves rolled up. +175604,a close up of a doughnut near a drink +20629,two mid size police vehicle parked with two man standing outside them +88412,A baseball player swinging a bat during a game. +286723,A woman that is standing up with a racquet. +562737,I stop sign that has another sign below it warning that traffic doesn't stop. +152298,a brown wood counter with sink in a bathroom +405657,A couple of men sitting at a table using laptop computer. +45603,A brown cat is sitting in front of a mirror. +144635,A bed with pillows in a small room. +424002,Two young men standing next to two dogs. +923,a green train is coming down the tracks +472101,A traffic light surrounded by trees near a tall building. +478664,This is an image of man playing wii. +36460,A man pushing a cart filled with lots of ripe bananas. +237618,Two men riding horses along the body of water. +18319,A tennis racquet next to a pair of boots +402328,two men on different styles of motorcycles +384808,A man taking his picture in a bathroom mirror. +277498,"Two zebras standing around, one is eating grass" +61108,A dog sits in the basket of a bicycle leaning against bleachers. +105757,Bathroom sink has a long counter space and 3 piece mirror. +194153,a women that has a umbrella in her hand +36331,a jacket sits on a bench in a park +409667,A couple of baseball players in uniform standing in a field. +298251,Several zebras stand in a field and graze. +11570,The white horses are pulling the trailer for the farmers. +103358,Various bouquet of flowers in a vase outside. +256903,A group of men riding a snowboard down a snow covered slope. +463699,a girl is on a phone standing near a sign +210144,A wet dog with very short legs licks his tongue out as the picture is taken. +261333,A black cat with its head in a blue cup. +251910,Two people walking under an umbrella and another group of people walking down a city sidewalk. +246064,A man with three cows on road next to trees. +297444,A birthday cake with candles on it. +372300,A man wearing a polo and a tie posing. +296231,A television and some books in a room. +340503,A giant man standing under large colorful kites. +154053,A man walking a dog across a wet street. +557396,Man in blue hat and black shirt grinding on a skateboard. +185941,A telephone booth and a red bus on the side of the street. +425848,A prepared dinner on a plate sits on a table. +291597,The wooden kitchen has a small child's plastic table in it. +363134,A man standing outside of a green train. +4125,A few bags laying around in a living room. +260547,A blonde lady holding a smart phone laughing. +188866,A girl sitting down with a donut in her hand. +291588,A woman laying in a hospital bed with a broken arm. +373396,A white and black dog standing on wooden floor by a cake. +1563,A woman carrying two skis and a couple of poles. +299023,a man uses a blender to chop up some food +294284,a herd of elephants walking down a desert road +37403,A man on skies going through the woods. +207003,"Two people on the ground with large balloons of an orange and white fish and a crab, floating in the sky." +237566,Two black cows grazing in a grassy field +395745,"A sandwich with meat, vegetables and dressing is sitting on a plate." +240137,A man tossing a frisbee to a brown dog. +16689,A large brick building is sitting behind a tree. +492067,An airplane flying over a man standing in the ocean. +243867,a bus and a car on a city street +121031,"A group of men traveling on horses in the water," +318671,"A horse drawn trolly on a track, the trolly is full of people." +118614,A man on a surf board riding the waves in the ocean. +107939,A stop and street sign on the side of the street. +504293,A woman and dog sitting in a large chair posing for a picture. +322029,A couple of cops riding on the back of brown horses. +435309,A broken red smart phone sitting on a table. +488945,A cat rests on a sofa next to the remote in front of a laptop in a living area. +209142,Green salad with broccoli and peas with fork and bowl +53016,The giraffe are walking through a wooded park trail. +389445,A bathroom showing a necklace rack and toiletries grouped on the sink +279140,A white and blue bus passing a street intersection. +303867,A hotel room with a large bed and a tv +429530,Four vases with purple flower in it. There are two different shapes and sizes. +13473,The man in the brown suit is holding a coffee mug. +109945,A bowl of granola with raspberries and honey on top with a spoon. +381106,two kids play at the beach with their kite +181753,A living room with a loveseat and chairs surrounding a table. +95482,Large tower with clock on the front of it. +524459,A man using his laptop at his desk +248364,A group of women who are laying on a beach. +471483,A woman trying to take a frisbee from her dog. +389109,Pizza on a table at an outdoor restaurant at night +546804,A silver passenger train traveling past another train. +442143,Two tall giraffes eating while in a zoo. +358653,The inside of a kitchen with different appliances +141576,a man on a board in the ocean water +316553,A dog jumps to a fence to look at a horse. +263073,A person on a snow board high up in the air. +427001,A very nice looking train by a plat form. +105040,A half a sandwich sitting on top of a plate. +138730,A truck kicking up dust from driving on the desert. People standing near the road waving. +26730,A dog sitting in the sidecar of a motorcycle. +39628,The view from a platform at a train station. +175096,The man playing tennis makes a backhanded move. +497187,A view of a keyboard from up close and on the side. +514685,Dog with a bright pink frisbee type disc in his mouth. +169996,Men on bikes riding alongside a car on the street +556478,A picture of two different types of pizzas on separate pans. +118343,A person who is taking a picture of something with his phone. +427135,A man kicking a soccer ball on a field. +195685,A green truck with a crane on it's back next to a emergency worker. +305695,Zebras are grazing on grass by a car. +279887,A group of motorcycles are on display at a museum. +315899,A man that is standing up holding a cellphone. +504103,a red open sign is by a curb +547338,A herd of wooly sheep graze on short grass. +483767,a air plane that is a model conected to a pole. +558976,An old clock on a wall with the title Correos. +389429,A wine bottle and glass sit on a table in front of a couch. +418959,A duck standing on a pile of debris in water +491683,There is only one horse in the grassy field. +384995,A young boy riding skis on top of a snow covered slope. +569850,A road sign warning of Resident Permit Parking Only. +211560,A big black bear laying on rock looking right at the camera +397617,Two women walking together in the rain with umbrellas. +25457,A very cluttered area with several books and tools. +389315,Altered photograph of a case full of paperback novels +483447,A can laying in a sink drinking water from the tap. +473468,An elephant and its baby are walking in the tall grass +431201,A person playing tennis stands surrounded by strawberries. +484279,two men standing between a blue motorcycle and a wall +139871,Someone has crawled under the plane to check that everything is operational. +223020,The large crowd watches as a baseball batter gets ready to swing. +146601,a conveyer belt full of doughnuts rolling down the machine +471521,Two large dogs sitting on a carpet on the ground in front of the door. +460156,A street sign showing what roads go which ways. +159440,THERE IS A MAN ON A RACE HORSE JUMPING OVER A FENCE +324927,A plate of two slices of pizza and a cup of juice. +216516,A man that is standing on ski's in the snow. +578553,An open laptop sitting in an open suitcase. +382345,The man is flying a kite at the beach. +179218,"A dark green and yellow striped train that says ""Duke of Edinburgh"" on a train track while a lady takes a photo with her camera. " +17534,Two men are playing tennis one of them is serving the ball. +169602,A woman riding on top of a wave on a surfboard. +280325,Graffiti decorates the wall in front of a parking meter. +473118,a skateboarder in a blue jacket is doing a trick +156687,a large pizza is in a cardboard box +268992,"A cluttered home office with a computer workstation, books, and a three-legged stool." +488693,A man standing over a white bucket on top of a sandy beach. +553776,A man rides a large motorcycle on a freeway. +385757,A picture taken from the driver seat of car at a stop sign. +185633,"A bathroom has a bathtub, sink and window in it." +504824,A baby laying on a chair with two brown teddy bears. +99875,Siblings playing with toys on the floor of a living room +89225,A pole with a speed limit traffic sign posted on it. +230015,A crowd of people standing on a subway platform. +381246,a pizza on a wooden pan with a person sitting across from it +377832,A huge crowd is walking down one side of a street. +273728,A man is smiling while sitting on a horse. +252610,an all white and marble bathroom with a toilet and a sink in frame +126502,Two birds going up the back of a giraffe. +355183,a dog looking at a frisbee in the air on a green sports field +310879,A group of birds stand on partially water covered ground. +476628,an oven with the door open and a closed pot on the iside +307967,A little boy in mid swing at a baseball +233963,A stop sign that is right by a road. +20760,a close up of a bath room counter with items +51309,Small horse standing behind a large group of horses eating. +300066,A jumbo jet airplane parked with a person checking it. +512785,a few chairs sitting under an umbrella on the beach +351711,A motorcycle parked next to a bunch more with a plastic sign in front of it. +573536,A man with a shaved head talking to a woman. +371497,A man riding a surfboard on a wave in the ocean. +526091,a black and white photo of a male tennis player +245667,People on a mountain snowboarding in a group. +204749,a truck in the reflection on a car mirror +70048,a table that has some food on top of it +93391,Two zebras and two wildebeests stand next to a watering hole. +100344,some people standing around a line of tennis courts +264209,An old clock hangs on a white wall with a window nearby. +69842,A train's door is open for its oncoming passengers. +359838,A couple of horses standing in a river next to an island. +383112,a street sign some buses and people walking down the sidewalk +564151,A bathroom with a large white sink and a door. +250954,a couple of people are standing around a table +43561,People walking in the dirt where buses and vehicles are parked. +351149,Two toilets in small bathroom stalls with two sinks in a bathroom. +444073,Two sheep that are standing in the grass. +508165,A yellow bus driving down a road under a tall structure. +7888,A pedestal clock strikes 6:55 in a rainy sky. +353989,A man falls down while skating on a slope +23448,A hotdog is smothered in cheese and mustard and sitting next to onion rings. +318209,A plate of food and a drink on a surface. +566155,A bathroom area with a crate full of water and an in-floor urinal. +215608,a beach crowded with people and many different colored umbrellas +66271,A large black cat laying on top of a pink piece of luggage. +192095,A man pitching a baseball on top of a field. +221003,Two giraffes standing in front of their stables. +104166,A tennis player stands on the court in an empty stadium. +80096,A yellow train traveling down tracks surrounded by large bushes. +58133,A white bathroom mirror mounted to it's wall. +233223,Two young kids holding a frisbee while seated on a bed +431464,A plate of carrots and cranberry sauce are the focal points on this table. +213695,A man doing tricks on a skateboard with onlookers watching +250758,A zebra standing on a grass covered field. +161752,A room with kites hanging from it's ceiling. +400123,Bathroom decorated in blues and greens with a mirror over the vanity. +56455,A man sitting at a desk with a computer holding a cell phone. +150016,Many cows are fenced into the green plains. +12764,A cat and a dog or playing with a ball. +457147,there is a male baseball player that is at the base +365485,A city with lots of tall buildings and a massive blue clock tower. +356091,A lamp above a sign on a building with flowers. +464857,The man is sticking his tongue out at the camera. +38118,A man on his skis on a snowy slope. +158160,Six uncooked doughnuts sit on a baking tray. +310008,A person on a field gets ready to throw a ball. +315303,There are people in a boat near the water. +198799,A group of young men holding skateboards while talking. +563696,A person sitting in front of a laptop computer on a desk. +451496,A motorcycle near a curb with a building in its mirror. +328433,A bird perched on the back of a white bench. +256945,A couple of sandwiches sitting on a paper plate. +400044,A person riding a snowboard into the air next to a tall building. +516422,A man and a lady sitting on a bench reading their newspapers with a dog tied to the bench. +413146,Two people parasailing in the ocean while onlookers watch from the beach. +516867,A bed that has pillows and blankets on it. +20161,A man holding a book while sitting down. +381318,Hotdogs in baskets with variety of toppings surrounding french fries in baskets on a table. +145693,"A man at a baseball field, dressed in team uniform, holding a bat." +227736,Three people sit on a bench looking out over the water. +368905,A black dog comfortably sits atop an easy chair sitting in the bed of a pickup truck. +34892,a big body of water with a freeze be next to it +974,An elephant with a man and three children on its back drinking water in the jungle. +406681,The dogs are looking like they are interested in the game. +502311,Two giraffe standing next to each other at a zoo. +407520,A fridge sits closed in a neutral room. +311891,"A girl looks at her cell phone, befuddled. " +60792,A grey and black cat next to keyboard and monitor. +543742,The man is smiling and inspecting the pepperoni pizza. +499402,A view from the window of a plane in the sky. +381504,A bus next to a rest stop area featuring a clock on the roof. +297260,Sandwich and loaded french fries on a diner bar. +8787,A man holding a brown dog and a video camera. +542145,A toilet and a sink in small bathroom. +463557,A little boy sitting on a couch with a plate of food. +281056,The man is taking a photo with his cel phone. +292997,A snowy ladnscape with a car crashed into a pole +178748,A pan filled with food sitting on a stove top. +152795,Bananas sitting on a green fence with gourds. +94025,Bullet holes in a stop sign in a rule area +138124,A bathroom has a light above the toilet. +537701,A man with wearing glasses and a red and white tie is smiling. +435807,A group of friends sitting inside their living room. +330079,Blue and grey fighter jet flying in a clear blue sky. +519475,A sandwich filled with cheese and meat on a wrapper. +384040,A white plate with food next to another plate with food. +496239,a small child is playing with a game controller +4975,A group of people holding umbrellas in the middle of a graduation. +335861,An old boat sitting in th emiddle of a field +25144,The tennis player is extending his reach to hit the racket. +528731,A fire hydrant sitting on the side of the road. +29675,A plate topped with three hot dogs on top of a table. +522639,A group of young men standing next to each other in front of a white wall. +90724,A grocery basket full if fruit and vegetables walking in a store +69494,A white toilet and towel in a room. +277888,A group of stuffed animals and guinea pig sitting on a couch. +434787,A boy eating from a meat pizza at a restaurant table with other people at other tables. +578418,Two large salads on white plates with a slice of bread. +149550,"A bathroom area with sink, mirror and various toiletries." +23981,"A full view of an outdoor space with many things to see. +" +161169,A row of smart phones sitting on top of a wooden desk. +429159,A man with a chef outfit is talking on the phone. +51476,A series of images of pots filled with chocolate and desert. +470117,A group of young and old are playing frisbee. +75187,A woman sitting on top of a bench looking beautiful. +114503,A brown teddy bear standing next to bottles of honey. +419312,Full course dinner served on large plate including drinks and dessert. +443597,Four pieces of dessert on a styrofoam plate +277479,A young baby standing in front of a refrigerator. +393682,A piece of strawberry cheese cake with a fork on a plate. +411938,A person holding a huge teddy bear while riding a bike in the street. +111259,A group of people riding a raft down a rapid river. +341857,Two men and a woman posing for a picture. +298809,An arrangement of a fruit skin and flowers is displayed. +559416,A man and two sheep stand on green grass with a castle in the background. +214349,A group of young women eating pizza together. +482970,A laptop computer sitting on a desk with a speaker. +334075,A baseball game as a batter stands ready to swing. +56874,a man in a chefs outfit standing by a big donut +506577,A green mountain bike sitting next to a bridge as a train passes by. +29984,A group of people wading around a large body of water. +419106,a couple of signs are hanging on a white pole +260765,A young colt is running beside an adult horse. +512248,A clock is shown on the side of a sign. +18444,Man on a beach holding a red and yellow surfboard. +402774,A woman holding an umbrella while walking in the rain. +15994,a lady that is laying down on a blanket +289120,Two ladies enjoying dessert at a roadside stand. +257943,a girl that has a baseball bat in her hands +447663,A man surfing on a blue green wave +311902,A woman preparing food while standing in a kitchen. +221737,A long empty road way surrounded by wild plants. +337133,A man riding a horse through a field. +9772,A person is taking a picture of a hotel bathroom. +156809,A yellow fire hydrant sitting in a patch of green grass. +205513,A bowl filled with a cake topped with vegetables. +386204,Woman with a backpack on sits on the curb moving her skateboard +338256,a person in red is riding a horse +243442,A man with a hat getting food from the refrigerator +68715,"A street sign with the name of a street on it, and next to it is a post with various names up and down the post." +455325,Rows of sitting benches in old looking church +468902,A dog playing with a calf in the grass. +325356,A tiger cat sitting in a bathroom sink next to a tub. +357096,A young child plunging a toilet with a plunger. +285314,a person riding a skate board down a hill +257896,a close up of a person wearing a suit and tie +78243,A group of elephants in a grassy area next to a tree. +174284,There is a white Vigrin Atlantic Plane on a runway +102466,A boat going through the water in a canal. +402823,A man jumping a horse over a blue rail. +328181,A small ferry approaching a pier with people waiting in it. +578675,a man is kneeling taking a picture of a man on the phone +9170,A cat drinking out of a white toilet bowl. +96215,A group of women standing next to each other in an office. +75527,A man touching bread sitting on top of a counter. +427193,A large range of mountains stretch across the sky. +124873,two children on a field of grass playing frisbee +243946,People fly kites and relax at a crowded sunlit beach. +4754,Zebras stand amongst bison in a large meadow +239657,A small white boat floating on a blue body of water. +485822,Yellow motorcycle parked on a lot with other motorcycles. +393942,A railroad crossing sign next to railroad tracks with someone walking on the tracks. +553442,A woman embracing a child carrying a bag of luggage. +233915,a woman is getting ready to strike a tennis ball +243222,A man holding a tennis racquet near a tennis ball on a court. +325838,The woman is using a laptop that sits on a stack of other laptops. +134594,A close up of a black and white cow with three cows in the background. +487076,A red stop sign sitting on the side of a road. +471175,Little dog in a shirt sitting next to owner's feet +270603,a dark living room with some light from the long windows and lights on the mantle +557459,A man riding a wave on a surfboard in the ocean. +244586,People standing in front of a counter with pastries on it. +174866,A bed is neatly made with green sheets and a nearby table. +325277,A baseball player standing next to home plate. +26803,A cat sitting on a window sill near a window. +7816,A person on a motor bike travels around a sharp corner. +297440,Cat lying in bathroom sink with assorted grooming supplies on edge. +471756,a small boy is riding a wave on a green yellow and black body board +290113,a person riding skis on a snowy surface +341567,A large black bird flying over a snow covered mountain. +278353,A small sheep is standing under a wooden fence post. +375063,A hipster carrying a black bag of luggage on grass. +185901,A bowl full of lemons sitting on to of a counter. +24499,A single street sign with information regarding parking. +50753,"A kitchen with an oven, stove , sink, microwave and refrigerator." +382671,Animals crossing beach with cloudy blue sky and lake in background +543577,A group of young men standing outside of a subway train. +102912,A couple of gray elephants standing next to each other in a wire cage. +315696,A man is on the corner on a city street. +36333,tree is a male skateboarder that is riding a ramp +541879,Two double decker buses sit parked as tourists walk nearby. +251140,A book about understanding and maintaining a ten-speed bicycle. +442097,"A long haired girl laying on her back with her legs crossed, on a bed." +115636,A man riding a horse while other men look on. +125997,A big billboard is painted onto the side of a brick building. +445019,A man with a baseball bat that is on a field. +566687,A pile of different types of vegetables on top of each other. +20276,A man riding a wave on to of a surfboard. +288955,Shaggy dog gets dinner served on a plate. +54593,The action in an organized youth baseball game. +540117,Cars and buses seen through the reflection of a window +200961,A man holding a white frisbee walking on top of a green grass covered field. +226588,a person riding skis on a snowy slope +48299,a photo of a stampede of cows in the street +119233,A cat sprawled out over the top of a laptop computer keyboard. +183970,A man in a tie and dress shirt taking a picture with a cell phone. +214539,A crowd is watching the two teams play soccer. +226171,A computer monitor sitting above a computer keyboard. +497640,A dark train terminal has interesting overhead lighting. +228013,The laptop is on the wooden desk near the man +182423,A photograph of street sign and traffic light. +440124,A plane on the tarmac with airport personnel. +576654,A person in a dry area with a sail high in the sky +503135,A man riding on the back of a motorcycle down a street. +372613,"A livign area with a sofa, chairs and a coffee table." +77123,"The side of an airplane that is parked, and an Air China sign on the side of the plane." +329932,Dude grinding on the edge of the ramp with his skateboard +295092,A man riding skis down a snow covered ski slope. +513060,A person showing off the inside of two doughnuts +491689,A WOMAN WAITING IN A BAGGAGE LINE WITH LUGGAGE +549674,Two computer monitors are turned on on a computer desk. +568633,A view looking down in to a bathroom stall. +53542,People standing around a two story build with a clock on top of it. +449675,A plate of food and fork on a table. +178715,A hand pressing buttons to play a game on a flip phone. +69795,A purple flower is in a watering can on the window sill. +171613,A tall giraffe standing next to a tree in a field. +88695,A picture of a man with old style tie and glasses. +455384,A delivery truck with an advertisement for Entourage. +290768,"A kitchen with a counter, window, stove and cutlery. " +161128,A curse word written on a traffic sign. +282600,A black bird eating an apple on the ground in the woods. +248918,A bed covered in a blanket next to a window. +248980,A blue plate with a green salad on top of it. +58141,People walk through the street with umbrellas to shade the sun. +141709,Each of the three bathroom stalls have trash cans beside the toilets. +505144,a close up of a person standing next to a luggage bag +533553,a boat that is parked up on the land +469294,A floppy disk sitting in a pile of oranges. +209925,A baseball player about to throw a pitch. +395928,A wooden bench sitting next to a fence near a forest. +89021,A small parking meter between two gold plated pieces of metal. +542537,an image of a man doing tricks with a frisbee +509020,A man wearing glasses on the lap top. +98895,"A room with a toilet, a door and shoes in it. " +351967,The image is a large building with many clock along the front. +294541,Kite boarder at the beach during low tide. +247285,A couple protecting their young baby with a sun umbrella and cloth +350148,A man taking a picture of plates of food. +515077,a lady playing with a wii on a large screen +183693,a building with a clock on the top of it +206411,A hand spraying water into a white toilet bowl. +20912,A collection of several items that are placed near each other. +122161,The people are walking through snow in a wooded area. +485509,People are cross country skiing through a field. +401040,A baby giraffe standing next to an adult giraffe. +550707,A couple of women sitting next to each other in frotn of a cake. +510593,A woman lays on a bed with a cat and a dog with a restraining collar. +518133,A GROUP OF PEOPLE ARE PLAYING WII +122203,Lots of cows eating grass on a large field. +237723,A white bath tub sitting under a window next to a toilet. +482007,Trees sitting gin vases next to a marble wall. +166805,A piece of pie and a fork sit on a white saucer. +1668,Men on a baseball field with the batter holding the bat sideways. +117530,"A room with a chair, a piano, and a laptop." +1532,A street scene with focus on the street signs on an overpass. +385238,A group of people standing next to each other. +307342,A group of people riding up a ski lift. +453009,Teddy bear and ornamental duck sitting on a wooden deck +454329,Silver clocks sit on posts along a walkway. +29160,A white bird walking through a shallow area of water. +224222,a group of people that is surfing on some water +191169,A beautiful young woman bending over while holding a back cat. +303863,A train is traveling down the rail road tracks. +578713,A back ho that is next to a pile of dirt. +369771,Arrows show what to do with the bowls of food. +359626,A five way stop sign on a street corner lined with trees +403333,The dessert includes a decadent chocolate cake on top. +157192,A hand holding a bunch of ripe nearly rotten bananas. +99996,A large black dog sitting on the sandy with a ball. +550273,three people holding wine glasses in the air before them while seated at a dining table. +565571,a young man on a tennis court swinging a racket +7394,A man walking down a street holding an umbrella. +333434,A beach next to the ocean covered in umbrella seating. +211386,A passenger bus is parked on the side of a road. +306553,The two people sit on a bench overlooking the park +173044,A very tall clock tower sitting next to a tall glass building. +111347,A toddler smiles in front of a toy train set on a table. +438628,A very cute black cat laying by a keyboard. +50407,A woman standing on a tennis court holding a racquet. +52066,A man wearing a backpack waits for a train. +504152,A concrete wall that has various types of tools hanging from it. +153864,A man riding a wave on a white surfboard in the ocean. +28957,a black bear holding onto a tree as he reaches for a coconut with his mouth +577219,"Two individuals, each on a horse, leading four other horses." +241129,Two hot women laying in bed together next to pillows. +254828,a box of apples sits in a marketplace +226380,a woman walks down the street holding a umbrella +85195,A white plate topped with an icing and sauce covered dessert. +261471,A city street with many different cars driving. +532212,A glass vase with flowers in it next to a pair of computer speakers. +175774,a small brown and white bird sitting on a branch +340529,this is fresh fruit sitting in a pile +187384,A red bowl in the center of a plate with olives and lemons on the outer plate. +290819,Plates on a table filled with breakfast foods and cups of coffee and orange juice. +55150,Two children smiling on top of luggage in parking lot +134863,A couple of traffic lights hanging over a city street. +202582,A view of a beach that has some people sitting on it. +455847,A woman and a child with red ski gear and a helmet wearing skis. +120776,A small group of people stand at the side of the sidewalk by a metal statue +487774,A silver computer mouse on a table next to a keyboard. +328030,the teddy bear is holding a hockey stick +457097,A large brown horse eating a glob of leaves. +328780,A cat is sleeping on a computer desk. +574725,A giraffe trying to cross a dirt road quickly. +392364,a statue of a person riding a horse in front of a building +174771,Front end of a white vehicle in a parking lot +330388,Two zebras grazing on an open field while the third watches +37456,A man and woman standing in a living room. +329789,A man with a slice of pizza in his mouth. +318063,A young man is riding the giant waves on his board. +575356,A door stands in front of a refrigerator with a microwave on top. +185464,A fire hydrant sitting in a front yard next to a sign. +302318,People are sitting on the sidewalk and relaxing by the river. +87864,A woman is holding a piece of food up. +200143,a group of zebras all pile around a bunch of grass +249158,Unique blue sign hanging from a light post. +367843,A traffic light with four signals sitting next to a tall building. +105432,A folk of birds flying over a military ship. +347930,A blue dog sitting on a striped couch +170393,An old Mustang sits parked next to a parking meter with a sign on it. +425672,A bulldog looks at himself in a mirror. +268831,"A bathroom with blue walls, black and white checkered floor, toilet, urinal and bathtub." +77270,A vase full of flowers and knitted rabbits. +122007,Two giraffe standing next to each other in a field. +225913,A couple of people standing at a counter with some food. +70426,Adult woman with yellow surfboard standing in water. +81552,A cat sitting and curled up on a red couch +428658,A child standing in the grass with a colorful kite. +45655,Cars drive on a busy street around a rear view mirror. +306361,A woman in a wedding dress is next to her cake. +110389,The freight train is passing underneath the bridge. +283210,Two brown dogs in grassy area biting each other. +139660,A painted sign of a blue bird in a tree in the woods. +356742,A stack of books sitting on top of a table. +341838,a car driving on a road with decorations avobe +244633,a laptop in use and a glass of lemon +38179,A boat floating on a river next to a city. +450559,A teenager doing skateboard tricks at a skate park +399839,A young girl eating a very tasty looking slice of pizza. +238691,A person laying on top of a luggage carousel. +465199,A tennis player contorts his body to hold his racket far back on the court. +136870,The skier has a red coat on that makes him visible. +516503,A man and a woman standing next to each other holding Nintendo Wii Controllers. +141509,A small boy wearing wading boots poses with his Winnie the Pooh doll. +74967,A man and woman cutting the umbilical cord of a baby. +560613,Two people walking over a bridge while holding umbrellas. +208377,A man on the beach carrying a surfboard with a sail. +562171,A giraffe standing on top of a grass covered field. +246436,an image of a man slicing a small pizza +337533,A woman dressed in black using the phone +434415,A smiling man in a hat sitting in a car. +535403,a bathroom that has a sink and a toilet in it +448690,A group of people standing behind a Military cargo plane. +50230,there is a cutting knife and cut up foods on the cutting board +495975,A pile of nearly ripe bananas sitting next to each other. +464092,Several benches next to each other in front of bushes. +75600,a purple red and white bus a man walking and some buildings +30954,A group of four bowls sitting on top of a wooden table. +540740,A boy jumping a skateboard ramp jump in front of others. +504585,a man in uniform and glasses on flying on the air +112066,A sexy young woman holding a tennis racquet on a tennis court. +111030,A street corner flanked by a display board. +73696,An old tower-like building made of wood hosts many decorations. +512194,A white pitcher holding flowers in a window sill. +528962,A dump truck passing a gentleman on a bicycle loaded with wood benches. +219192,A girl walking with a tennis ball balanced on a tennis racquet. +139873,The bird is perched on a dying flower outside. +104025,Person riding on the back of a horse on a gravel road. +270571,a woman in a white shirt is near a table +361386,A motorcycle is in a parking lot with a helmet on top. +147745,Two trucks parked next to each other on a dirt road. +133279,"A car parked on the dirt, with a bunch of airplanes behind it." +72860,A red and white tug boat drifting in the water. +100132,"Portion of eggs, bread, and vegetables sitting on a plate. " +490923,A young girl brushing her teeth with a tooth brush. +97334,A family of grey elephants walking through a lush green field. +515531,An airplane flying over a big harvest moon +25433,A street scene with two buses and a car. +198768,A man with a tennis ball in one hand and a tennis racket in the other. +2525,A clerk stands amid an ornate cupcake display. +24430,A boat sitting on someone's lawn near an abandoned brick house. +387079,A group of young women playing a game of soccer. +151670,A white toilet sitting in front of a brick wall. +35966,The large blue truck is old with rusted parts. +580555,Some seafood and a lemon on a plate +347848,A young man riding through the air on a skateboard. +469398,Someone using a cell phone to take a picture of a baby. +414343,People play Wii while wearing colorful clothing and posing for the camera. +296433,A bed in a bedroom with a piece of luggage against a wall. +257359,A train is stopped in front of an industrial area. +48692,"A stand features several fresh fruits in baskets, and hanging." +417249,A woman is carrying many packages in an office building +454449,A large adorable owl standing on top of a green grass covered park. +306467,The four men are performing in costumes. +501531,A building with a steep sloping roof and five windows. +327890,There are some benches arranged together in an open park +186083,A man is holding a camera on a rig while skateboarding in a parking lot. +221966,"That is something being here taken in the picture. +" +416088,A building with a large front space with people on it. +401613,A young woman holding a tennis racquet on a court. +579673,An umbrella sitting over a tray of food. +579453,Beautiful yellow flowers with orange centers in a blue vase. +430052,a vase on top of a table with a weird looking flower in it. +256630,a building that has some umbrellas in front +143696,A group of boats parked on a small body of water. +532408,a white bed in a large hotel room +405213,A skyscraper reflecting the blue sky near a street lamp +581183,Several elephants standing on stools during a circus act. +566103,A sign calls out public parking beneath a street marker. +34754,A baseball player swinging a bat over home plate. +29906,A single broccoli floret in a larger garden. +460208,a kitchen scene with a refrigerator that has magnets and a black oven on the wall +321333,a couple of young kids are sitting together +23666,A toilet and bathtub in a dark room with abnormal plumbing. +387909,A well made up bed with lamps above and around it. +72764,this is two men in a soccer match +12062,A large white sheep standing next to other sheep. +575964,Several young boys sitting in the library using laptops. +209286,A close up of a dog eating something on its bed. +93965,Two zebras made of Lego stand in a field. +466835,A grouping of bananas hanging in a tree next to grassy area. +78499,Horses standing and laying down in the grass on a hill above a lake. +388026,Light poles in the snow with yellow traffic lights mounted on them. +20273,a bus that is parked next to a street +248314,A plate of food placed next to a computer. +274035,a tennis player getting in position to hit a tennis ball +402615,A woman holding a tennis racquet on a tennis court. +267225,Many trucks with satellites are lined up on the curb. +80172,A little boy that is sitting on a toilet using a toothbrush. +29886,Two people sitting at a table having a conversation. +247141,A young boy standing on top of a surfboard. +34471,Two men standing in a living room playing video game with remotes. +503051,A woman smiling while standing with a luggage carrier. +48014,A man walking a down down a sidewalk. +306733,"Bathroom with sink, shower, towels, curtain, and more with window" +275843,A double decker bus stopped at an intersection. +26378,An older man takes a pizza out of the oven. +185015,a beautiful woman sitting on a plane holding a bag of food. +519691,A very big truck with a bunch of stuff in the back. +169226,A busy city street with dimly lit trees at night. +578807,A person sitting outdoors with a Frisbee in front of their face. +456730,"This is a view inside the cabin of the high speed train, showing relection of the light." +459437,"A person feeding sheep behind a white picket fence," +158122,A cell phone and a smart phone lying side by side. +489407,Two women with glasses are by their laptops. +371135,A woman hitting a tennis ball on a court. +51976,A man on a surfboard riding a wave in the ocean. +181256,A person riding on the back of an elephant. +485212,A man riding on top of a surfboard in the ocean. +465795,Blurry color photo of people enjoying a ski resort area +551660,A bowl of broccoli and apples with a utensil. +115776,A lemon piece of pie sitting on top of a blue and white plate. +382640,A no parking sign sitting on a sidewalk in front of a building. +293324,A group of large passenger jets parked in front of an airport. +121673,a person riding a surf board on a wave +484681,A little boy smiles at the camera while pulling a backpack. +189209,Someone is holding a pair of green handled scissors. +242678,A horse and rider jumping over a bar on a track. +567863,A mother and baby giraffe leaning against a wall +266847,A boy throws a pitch in a baseball game. +22382,A clock tower is in the middle of the city with clocks +192192,A park with many trees and benches at night. +156511,A girl rared back with her racquet on a court. +168225,A picture of large glass door trimmed in white and a large beige structure beside it. +475723,a room with a desk and some book shelves in it +286202,a small plane is flying in the sky +94922,an image of a man with a dog on his back +174457,A black bear in a grassy and flowery field. +31601,I am unable to see the image above. +546792,A brown dog sleeping on several large books. +336046,A person cutting some material on a table +142108,some people are standing around a table with bananas +36563,A group of women are standing together on the wall in the background while a man stands alone near them. +65024,Panda bear chewing on bamboo in a forest. +475613,A man holding a pizza on top of a pan covered in toppings. +66485,A group of young men catching a frisbee. +99039,Plates of food and glasses of wine sitting on a table +398005,A group of zebra standing on top of a dry grass field. +423529,A man standing behind a white frisbee on a green field. +406451,A brown horse pulling a white carriage down a street. +367029,People crossing the street of a busy city street. +426376,A man riding a snowboard down the side of a snow covered slope. +10432,A display in a store filled with ripe bananas. +179397,A factory with a large smoke stack next to a train. +46508,A man riding an elephant down a dirt road. +245660,A man riding a skateboard under a cloudy sky. +359128,A desk that has a laptop computer on it. +8267,A small white toilet sitting in a bathroom. +463226,There are crafts and craft supplies on a table +158922,A woman holding a colorful kite on top of a green field. +513319,A group of beautiful young women sitting in a living room all looking alike. +438535,An analog clock on a post in a city. +137370,A man standing next to a pile of luggage at an airport. +353595,A man drinking some wine using a wineglass +67218,A group of people riding snow boards on top of a slope. +448463,A man about to hit a tennis ball on a concrete court. +218947,A photograph of a cross country skier in a greenish tint light. +372466,A computer mouse is beside a notebook computer. +70626,A small pizza on a plate with a fork beside it on a table. +500432,A half eaten hot dog is next to a whole hot dog on a piece of paper. +267076,a small child watching an elephant behind a fence +480591,A group of men and women playing a game on the Nintendo Wii. +101588,A clock sitting below Trump Tower in Manhattan. +311789,The black cat with white patches is sleeping on a computer keyboard. +370043,A large gray elephant standing on top of a grass covered field. +287402,A man throwing a Frisbee disc in a park. +405226,a small bear resting in between two bare trees +223174,A close up view of a zebra near trees. +115749,A herd of elephants walking down a dirt road. +281725,A man riding a snowboard over a snow covered slope. +56624,A wooden bench with snow in a forest. +641,A bus that is sitting in the street. +273118,An elephant can be seen through a barbed wire fence +558587,a woman riding a little pink motorcycle by a car +159399,A person in a field flying a kite in the sky. +151524,People on a beach fly colorful kites on a sunny day. +249246,Lots of people are surfing and swimming in the ocean. +57091,An open suitcase on the floor next to a cell phone. +81299,"Plates with blue leaves hold many food dishes including peas, noodles, broccoli and other things." +342831,A man and two women sitting on a bed and one woman with a guitar. +204650,A large air plane smoking and parked in the snow . +276841,"A woman holding two halves of a donut, one in each hand." +268469,A red motorcycle parked next to a woman sitting down. +455229,A giraffe stands next to a pole in a habitat. +15559,A woman standing on ice holding skis in flip flops. +548126,a big school bus drives down the street +517133,A man holds a box of donuts while eating one. +251395,A man holding a tennis ball and a tennis racquet. +293625,The women are playing a video game together. +576946,Two adults preparing to cook several prepackaged pizzas. +371005,A motorcycle parked in a parking next next to a car. +152120,A man in a jean jacket riding a motorcycle on a road. +208,A toy dinosaur standing on a sink next to a running faucet. +297681,A car that is trying to drive through a flood. +317254,"Someone is on their motorcycle, in his gear. " +373111,"A living area with wooden table, chairs and a television." +465179,a close up of a person brushing her teeth in the bathroom +77792,A large truck on the side of a street. +232185,The small boy is ready at bat in the indoor batting cage. +408201,A man on a cellphone near two other men. +301928,An equestrian in riding clothes jumps a horse over a post +566998,A cat holding a remote control while laying on a couch. +64499,Thin-striped zebras huddle near the wall of their zoo enclosure +192616,A living room filled with furniture and large persian rug. +270386,The black street pole has three different signs on it. +280623,A man wearing glasses and a blue sweater. +3014,Three-quarters of a meat-lovers pizza with mushrooms with drink +250368,Woman taking a selfie while sticking banana in her mouth +543047,A scene of an apartment with a dining table and a couple of couches. +412286,A man swinging a tennis racquet towards a tennis ball. +529691,A row of park benches on the side of a green grassy hill. +511572,a bowl with some noodles inside of it +307943,A man jumping in the air on a skateboard. +22208,A flat screen TV next to a fire place in a living room. +150089,A couple of trees beside a roar with some cars. +192701,A guy rides a bike in a race and has fun +76292,A dark skinned child getting ready to be pushed on a swing. +267112,A group of motorcycle riders on the road. +38769,A cat perched on a car dashboard travelling on a street. +90631,A colorful fighter jet flying through a blue sky. +105367,Cows crossing a paved road in the fog +161736,A dog laying on the floor under a pile of hats. +360943,An orange cat sitting in front of a door to a house. +324258,Adults playing in living room using remote controllers. +68203,A giraffe stands with several birds resting on it's neck. +524245,a person with a dog in a back pack +219622,The man jumps high in the air to catch the Frisbee. +382315,a cow eating some hay over a gate +196415,Old motor bike sitting on display in a museum. +39551,A woman that is standing on a tennis court with a racquet. +327656,a man with a backpack sitting in front of a semi +552545,A person laying on a pillow with a remote in their hand. +211119,A couple of people sitting on top of a wooden bench. +125707,A man preparing food in a restaurant kitchen. +135666,Three motorcycles stop at an intersection at an oriental restaurant. +536366,A red stop sign sitting under a green street sign. +269873,Group of people crossing the street behind trolly. +171942,A variety of desserts arranged in a row. +424374,A person in wind breaker pants holding a pillow and suit case. +89273,A series of photos of bowls filled with cake mixes. +12236,A crowd of people standing next to each other. +327306,"Skateboarder and his shadow, performing the same trick" +280560,A man standing on a tennis court holding a tennis racquet. +450709,a snowboarder in a white jacket making way down the hill +139277,A close up of a very small teddy bear. +207561,Four surfers ride the waves in the ocean with other people visible further out to sea +313665,a cat is watching some other cats on a television +215808,A close up picture of chocolate cake and icing. +229329,a man holding onto a skateboard at the skate park +208688,"Large bed with white comforter, sheets, chair and tables." +227741,A man with a racket plays on a court. +265066,A young lady riding skis on a snow covered slope. +408903,A kid sitting on a snow pile next to a Morningside Ct. street sign. +100853,A bathroom that has a toilet and a trash can in it. +425898,A fire hydrant and a car parked near a house. +129187,A dog tied to a white fire hydrant on a sidewalk. +248014,a couple of chairs are in a room +254994,A man in a red shirt holding a drink glass. +357659,a man with a surfboard standing in the ocean looking at the waves +563185,a picture of a science fiction character in a bathroom +184700,A white sink sitting under a bathroom mirror. +91654,An orange bowl filled with lots of noodles and beef. +384335,A cellphone is in front of a purse. +94052,an oven and a small table in a home kitchen +133042,A pitcher in black looking at the opposing teammate on third base. +532493,A surfer on a white board riding a small wave. +299734,Two guys are playing Frisbee in the park. +574411,A bronze statue with a neck tie around its neck +192437,A young boy gets ready to hit a baseball. +268375,A herd of gray elephants standing next to each other on a block of cement. +537145,A close up of a pile of paper clips on a home office desk. +528046,a close up of a child holding a closed umbrella +46919,A man walking up the side of a snow covered ski slope while wearing skis. +472146,A blueberry bagel rests on a plain plate. +40842,A computer monitor sitting on top of a desk. +412285,A person riding a surfboard in the waves. +423810,A few Zebras are standing in the wild together. +96288,Three back packers with heavy packs and a dog hiking on a hill side. +533074,A marble-look bathroom with a bath enclosure and white sink on a long counter. +131920,A kitchen counter with a blender of ground gingersnaps. +184172,A bunch of people at the ocean about to surf. +78915,A tennis player hits a high ball in front of an audience. +486164,A small bulding is lit up in the dark night. +390190,"A bathroom with sinks, a toilet and a mirror." +344194,A village with a picturesque mountain side view behind it. +271429,A male baseball player is taking his swing while others look on. +103035,Four officer are riding motorcycles with giant letters on them. +15947,A room filled with furniture and hardwood floors. +73946,A couple of men standing on either side of a surfboard. +515765,A clock sitting in the middle of a parking lot. +178618,A dust cloud has formed in front of an elephant. +15032,Two boys with glove and helmet playing baseball +14321,A crowd stands around motorcycles parked beside each other. +475732,A yellow cat is wearing a blue plastic baseball hat. +18462,a man waiting for a bus at a stop on a corner +54092,A container filled with different types of food. +220367,many people are having fun in an event. +84735,A New York Yankees player swings at a pitch +28826,A bench partially buried in sand on a beach near the ocean. +197997,Old blue bus with bicycles parked on roadway near green space. +261888,a couple of people that are biking down a road +93476,A clock is near a light post on a street. +405062,A person with ripped jeans on riding on a skateboard. +142537,A motorcycle parked at a store parking lot. +363431,a cat standing in a purple litter box with green litter and lots of poop +314504,An orange and white cat sitting on top of a blue chair. +94261,A white cow standing in front of a pink building. +292394,A road in front of a shaded building on which it is written Feed Barn +161047,A great shot of a full kitchen and partially a table. +342442,A couple of pieces of luggage sitting on the ground. +510864,A person in a wet suit is surfing +29074,A view of a bedroom with a very nice setup. +355124,Closeup of a black hair dryer on a chair. +243401,A next of bird feeders filled with lots of birds. +31519,A group of rescue workers helping an overturned car +459301,A man holding two ski poles and two skis. +394444,this is a foot and a skateboard in the ground +548942,A man looks surprised while taking a photo in the mirror. +304063,A picture of a green airplane with propellers. +428015,A young boy riding in the street on a skateboard. +50952,Two boats floating on top of a river next to a rock mountain +477112,A man standing in front of a flat screen TV. +281609,A table and floor topped with bear themed items. +340654,The traffic light and street signs sit by a red fire hydrant. +220266,a grey cat sitting by a round mirror +354126,Two dogs sleeping on a small dog bed. The bed has many toys on it. +197492,A baseball player pitching a baseball during a game. +232610,"Smiling girl wearing glasses, with a cellphone up to her ear." +120527,A young boy wearing a yellow shirt holding a bat. +68128,A subway terminal with passengers and luggage traveling. +190391,a hot dog in a bun covered with mustard sitting in a small container +107068,A man swinging a baseball bat during a baseball game. +358024,A man and a young boy pull luggage next to each other. +376959,A baby in a high chair with paper on the table in front of her +496604,A couple of toilets sitting in a bathroom. +114398,An adult elephant and two baby elephants are in a lake. +177567,A young man riding a skateboard on the side of a wall. +350959,People walking in a field surrounded by a stone wall near a cow. +39697,A pizza is shown in a box uncovered and cooked. +372819,Four smaller dogs are running away from the women on the bench. +410482,Old vase with red and white decorations on it. +419265,A man sitting on the ground and working on a motorcycle. +567944,A couple of people that are sitting on mopeds. +362434,a box full of stuffed animals and other children items +248771,an image of a street scene with traffic lights +302159,Two bathroom sinks under two mirrors next to paper towel dispenser. +72514,A couple of cows tied to a fence in a city area. +252659,"A group of tennis players at a professional tennis game, its nobles." +297084,A young woman licks her lips while eating breakfast. +211756,"Red hot water cooker, bowl of fruit, bananas, cereal and a sliced orange sit on a white tile kitchen counter tip. " +210708,A large elephant standing next to a small elephant playing in the water. +50360,A black fence guarding a building next to a trash can. +292082,an old photo of a little girl sitting on her dads lap +248167,"A bedroom complete with a bed, dresser and ceiling fan." +68838,A blue road sign with arrows and the words Atlas Rd Pretoria. +503483,"A picture of an open air zone that looks incredible. +" +464312,A man holding a bat while standing near home base. +344611,A yellow hazard sign sitting on the side of a road. +105975,an elephant using its trunk to blow the dirt off its face +334416,A child standing in a room with various paintings and a bed. +12085,A man that is laying down underneath a cat. +467484,A red fire hydrant with two red poles beside it. +108748,A tennis player swinging his racket a low ball. +490160,A bear walking through a field by some moss and trees. +361147,A tennis player shows controlled excitement while a crowd watches. +42944,A woman riding waves in the ocean on a surf board +535668,A baseball player bending over to hit a ball. +61647,a teddy bear shaped cake resting on a cutting board +197335,A red traffic light sitting next to tall buildings. +420181,A group of people gather underneath some umbrellas. +476754,a pole that has a sign attached to it +343976,A city street lit up in a night scene with cars in the background. +240340,A man leaning on his motorcycle along the roadside. +185559,A bride and groom are cutting their wedding cake. +25346,A train with cars going down the tracks in the country. +475566,"A bathroom showing sink, toilet and shower " +232148,A green road sign with a bike painted on it. +274671,blue berry doughnuts are on display in a bakery. +70478,A group of men and women standing around a TV. +342013,Person wake boarding in a black wet suit. +305634,Street corner signs above a red stop sign. +19032,A guy holding a horse while a little girl pets it. +193112,A man riding a skateboard next to a yellow building. +271248,A long bus being loaded onto a large tow truck. +289889,A whole bunch of traffic stop signs huddled together. +558845,A man standing in the middle of a dirt field. +178283,a woman in a tankini riding a surfboard +237797,Two elephants in a herd playing with each other. +290881,A girl riding a brown horse and green grass with trees +371854,A man and woman cutting a cake together +360960,"Several people walking on a sidewalk, with one man holding an umbrella." +208901,A large passenger jet flying through a gray sky. +456192,A group of elephants are standing under a roof cover. +64196,A woman standing at a table preparing food. +231685,A bird walking along a beach with a rock it its mouth. +119345,a train sitting on a train track next to some trees +529798,A group of sheep being led around the water. +450845,A man in blue shirt and shorts swinging a baseball bat. +228290,A mother bird and her offspring walk in a meadow. +264737,some little goats and sheep standing next to a larger goat +192817,A view from a window high up in the sky. +52257,this is a table in the middle of a room +248341,Which of the four desserts would you choose? +148197,A black tray with various plants and flowers in it. +161861,A woman standing on a tennis court holding a racquet. +268641,The orange fire hydrant is on a sidewalk in front of a brick building. +149165,A group of men washing a baby elephant in a river. +58001,A dog asleep on the couch with its paw on the remote +321674,A mom and her baby are laying on the couch. +397303,Two men sell ties at an outdoor market. +217154,A woman standing at a bar preparing drink mix. +185327,A group of cows on street next to building and bus. +7107,"A tray of a variety of donuts with glaze, sprinkles and coconut. " +123410,A close up of an elephant's orange eye. +172922,Three men in suits posing together for a picture. +316054,A train traveling through a rural country side covered in grass. +53754,A boy walks along the beach carrying his surfboard. +468379,Clothes piled in to a suitcase on a bed +121632,A pizza is being eaten with a knife and fork. +89643,Many blowup kits being flown at a beach +571636,A man is in a truck open on the sides. +244496,A person with a tie and a suit. +228914,Two jockeys race their horses down a track. +163260,Two people pose for a picture while holding up their skis. +125051,A young man standing near a picture frame. +70079,Giraffe standing in the shade of a tall covering +32510,A young woman taking a selfie in front of a bathroom mirror. +300786,A woman in a shop painting a vase with decorative flowers. +39513,A woman wearing a white shirt and neck tie. +541223,a glass building with a plane coming out of it +212309,A couple of young men standing on top of a baseball field. +321385,Two dogs sitting at a dinner table enjoy food in bowls. +506614,A large sleigh bed in a hotel room. +9891,The man is loading luggage suitcases onto the cart in the parking lot. +26465,A laptop computer sitting on a desk next to a smart phone. +182483,There is a large tower with a clock in the middle of it +579815,A man with glasses holding up a broken umbrella. +66561,Couple of sheep relaxing in a fielder brown +369185,"A living room has a couch, a chair, and a wood stove." +117310,two people sitting on a couch playing nintendo wii +45108,A couple of cats taking a nap on top of a bed. +418109,A woman standing next to statues of giraffes. +260738,a dog in a doorway above bunches of unripe bananas +254609,A wet dog running on a beach with a neon green Frisbee in it's mouth. +244215,A couple of dogs sitting in front of a metal structure. +428858,a very tall giraffe standing in the wilderness +231140,A herd of zebra standing in front of a building. +22158,A kitchen with white appliances and a window. +222842,Partially consumed slices of cake at a restaurant table. +277659,multiple vases with different designs and shapes displayed on tables +465963,A man standing next to a woman on top of a sandy beach. +121006,A boy kneeling down by his skateboard and holding up his arm cast. +83246,A mirror on top of a pole on the street +326248,Two tennis players consult with the referee during a tennis match. +544395,The group of elephants are in an area with green grass. +144959,A big pizza and some other assorted food items. +173350,Two dogs are looking up while they stand near the toilet in the bathroom. +463787,Four black and white zebras standing next to each other. +173081,Multiple beds stand on hardwood floors in a simple room. +21671,There is a broken pink fire hydrant on a sidewalk +415746,Muffins and other pastries on display ground and purchase +440110,A woman walking down a street pulling a piece of luggage behind her. +410221,A jet liner flying above in the clear blue sky. +242757,one zebra standing on some dirt with trees in the background +325840,there are many young boys playing soccer together +396369,a bunch of people sit around a wooden table +523292,A multi colored cat standing over a white laptop. +349642,A woman is sitting on a bench with a dog behind her. +7690,"Three items of luggage of color blue, black, and red +" +128461,The plane is flying high in the sky. +551910,A man flying a kite in a cloudy blue sky. +530317,Two air boats driving next to each other on the water +580108,A couple browsing the motorcycles for sale outside +114187, A computer and miscellaneous items on a wooden desk +436172,A stop sign is in a rural setting by grass. +417804,a close up of a keyboard and a mouse on a desk +197193,"A view of a pizza from a table, with a man behind it." +110559,"A tiled bathroom containing a vanity sink, toilet and bathtub." +524638,A young boy standing next to a green frisbee. +173984,A bird that is sitting on top of a bird feeder. +269099,A couple of long buses stopped at a bus stop next to a bridge. +294423,Two giraffes are in a background of tall trees. +383979,Plates of seafood on a table in small servings +419116,A stuffed teddy bear sits on a tree branch. +151651,A bathroom with a row of wall mounted sinks. +14961,A picture of a man that is posing for a picture. +204091,A boy is walking on a tennis court and is carrying a tennis racquet. +423172,A set of three park benches sitting next to a park. +502275,A brown cat is sitting on a plastic bag. +404145,Mail tennis player very excited during a match +328238,A man wearing a blue shirt catching a white frisbee. +17714,Food on a train with a pie and some vegetable +466635,a cow standing by the fence as it looks towards the camera +524665,A woman standing next to a dog wearing a backpack on a beach. +561599,A black and white cat with a concerned look sitting on a chair. +142454,a close up of two cats on a bath room sink +575487,a male in a black shirt an oven pots and pans +40937,A car with a wheel lock on its wheel next to a parking meter. +347953,A bird is flying away from the person +15345,Man and two boys sitting in a corner booth of a restaurant. +34080,A small pair of scissors sitting next to a penny. +457394,A white plate filled with lots of pasta. +577539,"A bowl of banana's, sprinkels, chocolate chips, and marshmellows." +310669,Two big brown horses pulling a cart filled with people. +580698,A brown bear swimming in a body of water. +436617,THERE IS A GROUP OF PEOPLE SITTING AT A TABLE +77811,A mini car mouse is sitting on a mousepad with the headlights on. +527427,a female is talking on the phone and a laptop on a table +341957,A teddy bear is on the pillow and a jacket is on the bed. +84460,Girl siting on a bench in the woods in the fall. +535748,"Cupcakes with brown, yellow and green frosting sit on a shelf and they have colored wrappers." +486778,"A photo of London, Big Ben in the background" +508996,Train track running alongside a mountain with an orange train car in distance. +523297,A bathroom with a toilet bowl and shower. +69236,a wooden and metal bench near a over grown bush +505899,A white plate topped with two donuts on a wooden table. +220819,A bench outside against a wall with several flower pots in front of it. +543041,Six donuts of varies flavors in a box +364187,A large plate is adorned with broccoli and a rather small piece of meat. +483999,A group of people at a dining table talking to each other. +560178,A person holding a bit vegetable in their left hand. +239537,a man swinging a tennis racket and hitting a ball on a tennis court. +172021,A yellow train parked at a train station next to a platform. +13201,"A young man with long hair, wearing all black, doing stunts on a skateboard." +85814,A woman and boy playing a game with remote controllers. +18737,A motorcycle parked near a fence by a beach. +122208,A Boston Red Sox player up to bat. +187055,An older man catching a fast moving tennis ball. +6720,A table with a light on over it. +417830,A cake with an American flag motif in the layers. +160652,A guy standing underneath an umbrella on a rainy day. +358494,Three horses in their pasture on a farm. +172083,Counter top inside a house designed with different colors. +558101,A herd of sheep walking through a grass covered field. +286010,A busted fire hydrand pouring out water onto the street. +266727,A woman in a short skirt holding a tennis racquet. +97646,Two men walking through a forest on a trail. +322783,A white sink sits on a beige vanity in this uninspiring bathroom. +362331,A dog standing in front of a chocolate cake. +267182,A painting of green apples next to a bunch of bananas. +337525,Wet black and grey dog retrieving an orange ball. +223764,A woman brushing her teeth while wearing a towel on her head. +111548,Two dogs relaxing out on the dirt road +283054,A fire hydrant placed in the street just off the curb. +127494,A white plate of food tha includes meat and vegetables. +239198,A cow standing in shallow water next to a wooded forest. +486008,a bathroom with multiple stalls with doors and toilets +535242,a red stop sign is by a road outside +217654,A man flies high in the air while windsurfing. +359945,A apple with a face carved into it. +42204,Many people are walking along a crowded market place. +225352,A close up of a laptop sitting on a wooden table. +344773,"A grey, white and black duck next to water." +157405,A cay laying on top of an open laptop computer. +428079,A vase sitting on a table near a plant. +172439,Many people are gathered to watch a motorcycle race. +26908,A dog lies in the road chewing on a toy or a donut. +107257,An old stove and trash bags sit on the curb. +53616,A crowd of teddy bears link a wall and on top of a surface. +356906,"A toilet in front of a window, and next to the shower are shown" +278760,A large jetliner flying over a tall building in the sky. +536990,A vase on a table next to two candles. +369647,A man with a suit and tie about to speak +262487,The man is trying to hit the baseball during the game. +381851,many skis and snow boards on a snowy surface +400907,A person carries a surfboard in from the water. +576831,Five glasses of different kinds of wine on a table. +16897,a man is on his laptop and so are others +74132,A bathroom with a large bathtub and sink under a large mirror. +8532,A man that has glasses and a hat. +279209,A skier pauses at a fork in a forest trail covered in snow. +283187,A group of young guys playing frisbee in a field. +213951,A brown horse walking up the side of a hill. +356544,A dog with a hat strapped to its head. +11169,A large cow walks over a fox in the grass. +507171,A man riding a surfboard in the ocean. +124102,Two pictures of streets with cars on them. +69906,"Dinner plate with pork chop, pasta and vegetables on it." +41908,A couple of zebra standing next to eachother +399296,Someone roasting hot dogs in a fire outside +533276,A little boy dressed up like he is on a safari. +385001,A white sink sitting under a bathroom window. +156071,A group of people standing around at a rodeo. +425578,A shack with a floor covered with dirt and straws. +216014,"A small dog on TV behind the words "" What Did I Do Wrong?'." +164856,a truck with a small cabin built on the back of it +496525,A TV sitting on top of a wooden TV stand. +165141,A large bear laying on the side of a rocky +71850,A view from the street of two traffic lights and a building. +298773,A toilet with a hammer on it in a small room. +550713,A brown dog standing on top of a bed +435185,a collection of green tinted glass with some flowers in the vase +405047,A large bus is parked outside a building. +169598,"A bathroom shower, toilet and mirror that is decorated in tan tile." +462728,A man in the ocean with a dog on a surfboard. +456046,A train covered in graffiti sitting on top of train tracks. +110330,a crowd of people getting on a tour bus +49371,A woman riding a biek down a sidewalk. +242342,Two horses running in a grassy field together +5879,Two bicycle riders riding in the city at night. +525616,A group of people in a room with remotes. +422725,A man standing on one leg on a tennis court. +272870,A tview of a living room with fold out bed. +450959,A drawer full of cell phones and walkie talkies +310622,"Corner of Broadway, West 32nd Street, and Korea Way." +352901,A field full of green plants and fruit. +209102,A boat traverses the ocean in the midst of fog. +338219,A couple of motorcycles parked next to each other. +78266,Kitchen utensils and appliances have been left unattended +248111,This basic kitchen has tools sitting on the floor +478157,Two people eating corn dogs with two small dogs between them. +166645,a person standing next to a barrel of food +407386,A black and white cat in front of a laptop and a monitor. +539413,A group of people standing in the rain under some umbrella's. +1442,A polar bear walking over rocks in its enclosure +440522,A man is sitting in front of a stuffed bear +41180,A large bull with long horns sitting on a beach. +97661,Two men jump off the ground while enjoying a game of soccer. +267946,A blue sign giving directions to a public toilet. +334161,"A bathroom with a toilet, a sink and a mirror." +574592,a small vase with flowers inside of it +83476,A cat curls up on a soft and comfortable bed. +181763,A black and white dog wearing a white hat. +466222,"Doughnuts, which are labeled accidentally vegan, sit on a box." +491294,A close up view of a pink flower inside a tall clear vase. +506950,a group of people are moving along a pathway while on skis. +104544,There are two elephants standing near the water. +306073,A boy and two females standing in a circle playing tennis. +287151,View of a narrow bathroom with white vanity and commode with brown tile +422240,a man is holding a baseball bat in front of a banner +513397,A collection of teddy bears sits on a shelf. +410016,a close up photo of a shaggy dog in a car +50782,a woman tosses a frisbee in a public park +270222,Several small clocks are all connected with human-like ornaments. +278226,A man looking at a child holding a brightly colored computer. +220160,A close-up of the streetlamp showing to red street signs. +211425,A little girl wearing a pink jacket holding two ski poles. +454623,This tower features a clock at the top but it is small. +42752,a man sitting down and facing a big window +374858,A man sitting on a bench with a book and a bag. +412604,A man holding a half eaten chocolate donut +443784,Fans and players watch as woman on the court plays a game of tennis +184241,A tennis player seated on a bench with a bag while holding two rackets +139192,Four elephants standing in an open area surrounded by brush. +131493,People on the shore as boats sit in the water. +286660,A girl holding a stuffed teddy bear that has large teeth to her face. +534829,The bottom view of people's body and a puppy on a leash. +433075,An orange and white cat laying inside of a black pot. +167178,A person talking on a phone next to a statue. +239274,A yacht with people is near a pier on clear water. +546424,a black and white photo of a person in a suit and a person in a dress +188862,Two boys are playing soccer on the grass. +578238,A couple of giraffe standing next to each other. +402867,A white plate topped with different breakfast foods. +11034,A father and son play Wii in the living room. +579648,A person sitting on a couch using a laptop. +11182,People walking outside of a red brick building. +86448,Woman in green jacket holding up a bicycle in a park. +34866,A picture of a person on the side of the road. +236338,Many elephants being paraded through an area of spectators. +200752,A small herd of elephants are standing around each other. +449403,A city bus moving along a road with many trees. +571275,A woman holding a Nintendo Wii controller in her right hand. +7444,a corner of a James Smith & Sons store with various umbrellas lined up in the window +327263,A wooden park bench between two floral arrangements. +427094,A street sign in front of a tall building with lots of windows. +177529,God looking at orange cat that is standing on a stool. +553795,A dalmation sits on a red couch with two striped pillows. +38259,Plane in window with cloudy sky and chairs +132373,A clock sits on top of a stand in the middle of the station. +473869,A man looking at camera preparing food in kitchen +483330,a bowl of pasta that has brocolli and cheese on it +348829,A stop sign is the focal point of an intersection that is covered in snow during the winter. +354929,A group of people that are sitting on bikes in the street. +54712,a guy gliding down the road on a skateboard +379085,A boat that has blue covers sitting on the side of the water +579666,Three people standing next to each other and a computer. +183004,Two giraffe standing next to each other in a field next to a tree. +141616,A mechanical street light and a traffic sign in the street next to a moving car. +160220,A group of elephants standing next to a cement tower on a dirt field. +27377,a zebra that is standing around in a field +256094,A white toilet sitting in a bathroom next to a wall. +457754,Four men are photographed signing important documents at work. +434886,A little boy holding a baseball bat on a field. +409268,A stuffed teddy bear covered in dirt on the ground. +144062,A white toilet sitting next to a window in a bathroom. +153607,A wide blue vase is holding an orange daisy. +189193,A woman is skateboarding down a hill with a hat on. +180817,A female soldier sitting on top of a teddy bear. +203478,A street scene with a double-decker bus on the side of the road. +188798,a herd of cows standing next to each other. +156282,A woman standing in a field flying a kite. +348887,a kid in an ocean swimming besides the ocean +323291,there is a cupcake and a piece o cake on a plate +450100,A cupcake with pink frosting topped with a candy yellow star. +47552,A red train is going past a station marked with signage. +13774,A person standing in shore of beach with a frisbee in the sky. +39504,A man dressed in mostly all black riding on a black motorcycle. +445365,Two giraffes are shown standing in a grassy field. +198352,a man sits on a motor cycle next to a gas pump +275744,two yellow red and silver trains on their tracks +232488,Two young men are looking at a computer screen. +235784,A women who is walking in the snow on skis. +190950,A group of people playing frisbee against each other. +494846,A man grins as he takes a doughnut from a plate +313162,A pizza is shown on a plate on a table. +578632,A cat sitting on the hood of a car. +162275,Some onion and mushroom pizza baking in oven. +59225,a young man on skis glances at a frozen parking meter dispenser +331535,A kitchen with lots of metal appliances and a large metal table. +306303,A city traffic light is red with a large billow of smoke in the background. +74096,There stoplight in front of the buildings is green. +46155,this is a tennis player about to hit a tennis ball +21994,A large elephant standing on the side of a lake. +447596,"A clean, organized bathroom with accessories in it." +167696,A black and white zebra looks like it's made of legos. +400046,A couple of brown cows walking across a green field. +386777,The green and white city bus is parked a the curb. +391285,A couple of men standing next to each other. +290592,A cluster of black and white sheep hang out by a fence. +209548,a person cutting a pink cake with pink roses +32538,an old man petting a black and white cow +512511,A tall tower with a clock on a large building. +307057,A man serving a tennis ball on top of a tennis court. +84410,an odd looking blender with three serving glasses +40926,A very close shot of what seems to be three birds on a Giraffe. +379800,An orange train engine moves down the track with one train car behind it. +449490,"An aerial shot shows tropical foliage, surrounding an upscale home, a sea inlet and a train rushing under a tunnel that goes beneath the foliage. " +438531,a child on a couch using a laptop +56541,a close up of a cat laying on the ground with something on its head +69944,"a red, blue and tour bus with people standing outside of them" +398063,Two people kissing at a park holding an umbrella. +563641,There is a blue and yellow train stopped at a train stop +332940,Two humanoid figures made of cardboard boxes sit together on a sofa with a remote control. +171850,Two tennis players chat while a man in red stands by the score board. +433066,A blue trunk sitting on top of a wooden surface. +79213,A picture of a person and another person laying down. +134042,A passenger jet aircraft flying in the sky. +162677,A white toilet in a bathroom next to a white sink. +146276,a purple towel is hanging in in a white bathroom +382717,"Two dogs on a truck with frame that reads ""cockleburs galore.""" +153527,A row of wooden benches sitting on the side of a road. +23995,A locomotive is on the tracks along side some trees. +451305,a small zebra on dirt ground near a tree +551815,An orange cat laying on a white and brown cat in a bed. +289586,A giraffe points its head towards the sky +450500,People are waiting on a corner to cross a street. +478769,A hummingbird sitting on a plant preparing to flap its wings. +299550,A white ceramic sink next to a toilet. +494085,A kitchen counter with a clock and notepad on it. +293057,A person is on a snowboard on a ramp. +206049,Someone putting a fork into food sitting on a towel. +509028,A group of people standing around a green train car. +207860,A billboard of two Zebras on a snowy mountain and a parking lot. +409009,High speed train stopped at the train station. +274083,A double decker bus driving down a street next to tall buildings. +10615,a track without a door near an ocean +539124,A young girl riding a skateboard next to two guys. +332499,A lamp that is on sitting on a table. +381123,A group of small colorful boats sitting on a beach next to the ocean. +468161,A man sitting at a table with plate full of food. +349152,Several boxes of doughnuts in a line on a table. +159451,a large dump truck on a dirt road +552302,A man standing next to an airplane on a runway. +8922,A couple of chairs and a counter in a room. +544201,a man in a burgundy collar shirt and gold vest putting on his tie +253263,Desktop and laptop computers on a desk with a printer. +514525,fruit and vegetables in a container with separate sections +413955,"A baseball player swinging his bat during a game. +" +166524,A private parking sign under a bridge with writing. +465095,Two zebras are standing next to each other in an enclosure. +316323,Pulling out a white partition on a small device. +500079,The sign is clearly visible for all of us to see. +440895,A white horse looking through the window of a tall brick building. +242610,A man standing next to a blue and brown bed. +223241,A man holding a baby in a chair. +261982,A man flying through the air while riding a skateboard. +150235,An orange cat sitting on the ground next to a purse. +560626,A woman standing outside by a tree +371151,A lit fireplace with decorative items on the mantle and a portrait above it. +325114,A table with a plate of food and a urinal basin +148957,A box contains six donuts with varying types of glazes and toppings. +179187,A sign posted on the side of a highway. +135914,A stuffed bear is sitting next to a computer monitor. +36077,A person drives a bus on a busy road. +100111,Two young girls at a table using a laptop +459575,A white polar bear standing on top of a rocky mountain. +479213,A couple of women holding up a cake together. +135620,Large white yacht in the sea with windsurfers nearby. +183991,A few boys appear to be playing Frisbee near a fountain. +86250,"A man in living room with sofa, windows and a fan." +466652,A white bus parked on the side of a road. +253749,An empty bench next to a potted tree up against a brick wall. +137130,A baby laying in bed next to a brown teddy bear. +532976,a park with food trucks park out front +146757,A person riding a skateboard up the side of a ramp. +135872,A desk with both a laptop computer and a desktop computer. +34830,A white urinal in a small red tiled bathroom. +571847,A tray with a donut and coffee on it +238355,a mirror that has a big white sink on it +472530,A cat that is laying down on a refrigerator. +188817,People getting on and off the bus parked by the curb. +358617,A man walking along a beach holding a surfboard. +424432,Dog watching a guinea pig on a bed sheet. +574454,There are parasailers out enjoying the beach today. +434494,A bulldozer and fresh asphalt next to various people. +360182,The small boy is holding a hair brush. +260363,A man riding a white horse in a fenced in location. +72810,A bicycle parked next to a snow covered park bench. +54039,Several motorcycles and cars parked on a city street. +162539,A western square sign on top of two wooden poles. +567432,A colorful plane flying over head and telephone wires +164883,A man holding his face up to a TV with a video game on display. +80131,A group of people sitting around a table in the kitchen. +472253,A group of people in a conference room watching a televisions. +177842,A dog that is sitting in the front seat of a vehicle. +236512,A man with a blindfold holding a wine glass +213592,A group of people on some horses in the grass. +26522,Extremely modern bathroom renovation with wood and porcelain +268018,the man is holding a phone next to his ear +504902,A truck is shown with a group of dogs laying down. +409581,A boy carrying a surfboard on a busy sidewalk. +331959,Two men playing frisbee on teams at a public park. +380552,A young woman sits on a horse on a dirt road. +207239,A professional tennis player serving on a tennis court. +180366,A man in brown jacket holding a footlong hotdog. +63525,A smiling man is on a white laptop computer. +453026,A plate topped with three chocolate cup cakes. +295728,A clock has four faces on each side of an information booth. +4688,this is a man playing in a field +503207,A brown bear walking across a snow covered field. +264420,A elephant that is stepping on to the road. +303361,Two zebra standing closely next to each other. +391290,Two women playing with a Frisbee in a field. +548523,Some steel counters that have various items on them. +14056,A group of people playing in the water next to a beach. +517687,a close up of two cell phones near one another +230432,A surfer is riding back side on a wave. +277094,Two cops standing in front of a street on a cross walk. +199055,A person on skateboard skating on the pavement. +267135,A modern style wooden kitchen with multi layered counters. +399968,A man standing on a tennis court holding a racquet. +506942,A couple of multi-colored lawn chairs sitting on a beach. +489719,Two elephants playing by the water hole. +227491,Woman skier taking a break and enjoying a snack +57550,A lady with green hair and red boots sitting in the grass near a horse. +133000,A city view of an E-train on a track +65074,A view of a bedroom with the bed unmade. +208417,A star hangs upon a canopied bed in a bedroom. +124594,a room that has some cabinets and a window in it +315072,cars riding down a lit street with a bright light post +166391,A large and wide street covered in lots of traffic lights. +62726,The bus stop is lined up with buses and people walking on the sidewalk. +138204,A couch with a small dog sitting on top of it. +433919,Many packages of toilet paper are unwrapped next to the toilet in a messy bathroom. +569452,A young boy doing a trick on his skate board. +164635,A pizza on a wooden cutting board being cut with scissors. +443818,A chihuahua. leaning its front paws on a dog bed +79836,A red traffic light sitting over the top of a street. +74209,A counter in a kitchen line with black metal stools. +352113,Group of horsed tied to line while standing in grassy area. +135613,A nice spacious bathroom with light brown tile. +299254,A man holding a snowboard on top of a snow covered hill. +145408,A time lapsed image of a skater doing a jump trick. +299200,A man riding a skateboard on a wooden ramp. +292990,Baseball players on a field and near empty stadium. +114759,A man holding a tennis racket while playing a game of tennis. +348140,An intracately designed boat on a river bank. +525058,A group of people walking across a street near tall buildings. +258382,a woman walking down the road while holding onto some bags and an umbrella +495357,A dog sitting on top of a motorcycle in an intersection. +9572,a couple of giraffes that are knick knacks +515565,One of the oldest buildings in this town. +112798,A cat is on papers on a computer desk. +429415,A man's open hand with tiny bananas with sand as the background. +147346,"A man in a trench coat, hat, and carrying an umbrella pointing to the shirt collar of another man." +210002,A person holding a white plate topped with a sandwich. +43670,a baseball player with a bat on the field +355785,A woman running while holding a baseball bat. +234463,Sepia photograph of a stop sign next to row of mailboxes. +234387,Three donuts in a box that is open and on a bike. +247880,Group of surfing equipment sitting next to a beach. +85007,Two females throwing a Frisbee in a grass area. +465911,A young boy riding a skateboard in front of a driveway to a garage. +110769,A person in blue jacket falling on hill with a snowboard. +151739,A man riding a wind sail over water. +540830,Closeup of a yellow teddy bear with a red shirt. +548095,Two white cattle standing in water next to some ducks. +112572,A hand holding up a cell phone that is taking a picture. +388298,A white toilet sitting next to a wall outdoors. +529105,A brown horse laying in a field of lush vegetation. +13637,MAN WITH GLASSES KNEELING IN FRONT OF A FIRE HYDRANT +90011,A woman cutting a young mans hair on the deck. +337506,A look out of the window of a train on the tracks. +69194,A person swinging at bat at a ball on a baseball field. +10040,A group of soldiers standing next to a bench. +287829,A red bathroom mirror sitting next to a white toilet. +571364,A man in a dress shirt holding a baby. +14892,A man holding his song while he brushes his teeth. +235857,Some cows eat grass together in a field. +526021,A man holding a tennis racquet over a grass covered field. +392998,A surfer falling backwards off a surfboard on a little wave. +519399,A man holding a surfboard while watching the waves. +248752,A person on a field with a baseball bat. +290698,These people are about to eat a large bowl of food. +518770,Some kids standing up playing wii with each other +168805,Two people play tennis at night on a tennis court. +512966,A white toilet sitting next to a sink in a bathroom. +142238,A group of young people playing a game of soccer. +377670,Teddy bears are re-enacting soldiers on the beach with others looking on. +469777,Several people standing around a watering hole taking photos of elephants. +233919,A young baby sitting in front of a laptop. +330098,a bike sitting in front of colorful signs +411840,"Two tennis players, walking in opposite directions in between plays." +293782,A Stop sign is at the corner of a grassy area. +348447,A cook in a restaurant kitchen poses with food. +248382,A woman in orange sari on a park bench. +387074,A man riding a surfboard on a small wave in the ocean. +56036,A big white book shelf that is tipped on one end. +427083,A stack of folded clothing on the edge of a table. +284488,A black and white cat on its hind legs looking at a television. +483234,A person is standing in the snow near a tree with skis and snowboards. +20333,A young child squats down in front of a bowl. +203081,Two trains passing by each other during the day time. +91839,A man in black tie sitting next to a brown dog. +111367,A close-up of two cows standing in the dirt. +312388,An orange cat sleeping inside of a piece of luggage. +446136,There are many people sitting at the table eating together +448974,Someone holding a smart phone in their left hand. +236604,A elegant and spacious living room in white. +274804,A white paper plate topped with orange slices. +191054,People are sitting at a counter in a busy restaurant. +324891,A man swinging a baseball bat on top of a field. +245162,A road with cars and buses near a building. +92801,A large brown and beige cat is lying down in a suitcase. +410932,A red stop sign sitting on the side of a road. +174198,"A green, orange and white train in a train station." +498630,A baseball player with a bat in his hand being watched by a crowd of people. +258136,A train traveling down train tracks near a building. +427518,Professional athletes conversing on field inside stadium area. +301415,A woman holding up a carrot while wearing a scarf. +406848,A pizza with a lot of vegetables on top. +229270,A man with a scarf is next to a suitcase. +283168,A large sandwich in a styrofoam container with a fork. +187194,baby in pajama's sitting on the bed playing with an object +228558,The vehicles are travelling down the road together. +265096,A large elephant is tied up next to some tree. +256505,A woman riding a bike while wearing really short shorts. +365217,two tennis players on the court being watched by spectators +150638,A table holding a variety of beverages at an outdoor party. +479630,A man on a surfboard on the water. +332407,A young man holding a baseball bat next to an older man. +486203,Two cows are in an open field in front of a mountain range. +508931,Bicyclist sign attached to a wall beside a window. +244218,A refrigerator sitting in front of a vandalized wall. +494870,A gray cat laying next to a brown pot filled with plants. +145208,two men one is surfing and the other is giving him a signal to go right +91615,A very clean kitchen has stainless steel appliances. +228771,Street signs on a pole painted in the colors of the Italian flag. +365611,Multiple lane road in large city on sunny day. +284354,A tall white clock tower sitting next to a parking garage. +116521,A large cheese pizza coming out of an oven. +422416,A ladder sitting against a bathroom wall next to a toilet. +131282,A person is organizing food on to platters +445603,An Ox standing in a street while a person rides by on a bike. +279558,A man standing next to a woman on top of a beach. +141910,A white toilet sitting under a window next to a sink. +86582,A cloth bag is on the keyboard of a laptop. +263929,Several cows in a field on a sunny day. +429063,A woman standing in front of a bench covered in luggage. +122745,A stop sign is lit up in the dark of night. +355297,A surfer in the middle of a jump in the ocean +365655,Ice explorer bus on a road near mountains. +41438,close up of three bananas on top of a bowl of fruit +226820,a green and black train on a track with smoke coming from the top +478420,Two woman leaning against a wall wearing baby slings. +16327,A man with a surfboard is in a crowd by a tent. +532994,A horse drawn fire truck traveling across a field. +73429,A couple of men standing next to each other near surfboards. +177419,A bright blue fire hydrant is on a brick sidewalk. +576871,A gang of bikers driving down a rural country road. +92738,A young boy looks in the fridge with mom and grandma +111180,a single black bear standing beside some shrubs +420914,A long haired dog walking through the grass in the back yard. +438226,A sandwich on a plate cutin half next to pasta. +212895,a single giraffe standing in the middle of a field +137586,A man riding on the back of a blue motorcycle. +248956,A young man riding a skate board while airborne. +281977,a dog walking on his hind legs carrying a Frisbee +333034,A lawn chair sitting on a beach under an umbrella. +535689,A person that is on their phone doing something. +578131,A woman jumping a brown horse over a jump in a field. +397958,A black and white cow standing next to a barbed wire fence. +122239,A small boy with blonde hair eats an apple +227599,A group of friends is posing on the beach with their surfboards. +557812,A couple of people that are standing on ski's in the snow. +275585,A magazine that is laying near a keyboard. +414133,A sign on small post in grass corner of residential parking lot. +278973,A man with long hair wearing a red suit surfing. +343954,A family watching a girl run with a pink kite. +159372,A man is riding on a street on his skate board. +70190,Photo taking in a building looking at a staircase. +32190,A horse figurine that is used as a key chain. +77151,A beige wall has a light switch on it. +77345,a person skateboards down the street near hay +459825,A crowded work desk placed against a brick wall. +156236,A young man holding a racquet on a tennis court. +515147,A view of a bed and a crib in the middle of a room. +431615,A couple of men riding on the back of a boat. +275393,A tennis player prepares to hit a forehand shot in a tennis match. +384468,A group of people riding a large gray elephant. +561517,Chicken cordon blue and fries with a garnish +208517,A woman with a suitcase holding a phone +458992,a woman poses in front of a giant pizza +203747,A man in a mask holding a sign +505967,An intersection on the strip in Las Vegas. +17482,A baseball player swings through the pitch while the catcher awaits the ball. +95959,A man and woman with surfboards on the sandy beach near an ocean. +579484,a jet that is parked on a runway +372717,A smart phone sitting on a table next to a yellow donut. +9172,A clock and a lamp post on the street with a bridge in the background. +7867,This pizza is laying inside of a steel pizza pan. +29430,a close up of a pot with a cell phone +184698,Two giraffes rubbing their heads and necks together. +220699,"A phone, battery, and charger laying on fabric." +208808,A boy in the air as he does a trick on a skateboard from a ramp. +384827,A parking sign with an angry birds face. +188434,A view of a living room with an Christmas tree on the left. +190776,There are four sheep in the grassy field. +262746,Man in blue and grey jacket on skis in front of a mountain. +475365,a close up of an the front of an amtrak train +500829,A large truck next to some trees outside. +450774,A blue helicopter flying upside down in the sky. +381393,A bathroom counter lined with lots of metal sinks. +437129,A skateboarder goes off the edge of a ramp in a skate park. +180798,a cellphone sitting on a blue mesh blanket +562496,A dark bedroom with an unmade bed and a turned on bedside lamp. +556101,A person standing in front of a bus on a street. +574507,A man riding a snowboard through the air above a snow covered field. +216790,An intersection with cars is pictured in this image. +514464,Are there holes punched in the wall of the room? +467599,A tennis player playing some tennis on the court. +440027,A baseball player standing next to home plate. +213475,A street scene in the evening with a lone car and traffic light showing red. +25005,A male competitive speed skier coming around a curve. +257586,a train with open doors at a terminal. +353830,An Italian dish is presented on a white plate. +490081,Two white horses pulling a man on a wagon down a dirt road. +333504,A tall white and red light house sitting on a green hill. +322724,a man that is skiing down a snowy field +155687,A park filled with lots of people standing under trees. +140294,Two large red blanket covered beds in a bedroom. +18136,A boat traveling down a canal with a blurred background. +405740,A man with a cup of coffee in his hand looking at a laptop. +101022,Two signs that are on a pole in the snow. +391728,A woman standing next to a white horse in an arena. +499210,a teen holding onto a brown teddy bear +30611,A dog is looking out the door to the outside +167700,a silver toilet and some toilet paper and a green switch +530384,"A kitchen area with bar, stove and refrigerator." +3244,Camera and computers set up on a desk +243031,A yellow book bus driving down a street. +410105,The living room has a large display case in it. +442250,The man is coaching the kids on how to play soccer. +460160,a white bird some sand water rocks and grass +93333,A cowboy leads a cow through a paddock. +281601,A man in a hat eating food with chopsticks. +468545,A man riding a skateboard up the side of a ramp. +13783,A man at a table with two pairs of scisors +524282,A women's tennis doubles match on a professional court +160239,A large inflatable whale sitting on top of a beach. +378117,A bowl of vegetable soup on a plate with a spoon placed in the bowl. +419556,A very pretty young lady doing some shopping. +135076,A bird is sitting on a berry bush. +121663,City bus on an empty city street near a STOP sign. +371283,Woman sitting on a horse in a field. +380057,Many posters are placed on a wall near a busy street. +484982,A living room with chairs a fireplace and mirror +105876,There are several differently colored train cars shown. +112956,"A red, grey and white airplane passes overhead." +22167,The front of a house is next to some trees. +274494,A white sink and shower in a small bathroom. +236000,A street scene with a large truck turning a corner. +184388,A youngster is flying a kite on the beach. +87740,People riding on elephants that are walking through a river. +556193,One guy is showing another guy the intricacies of the Wii. +77181,Young person practicing first aid technique with others on grassy area. +470553,a close up of a cake with candy near by +440226,An American flag is waving in the air +58851,The bench is empty at night in the park +155341,The street is blocked by a truck and a crane. +125404,Two black children wearing baseball hats and holding bats. +574856,this is a train coming down a set of rails +137246,A woman holding a hot dog on the street. +274491,The pizza is full of chopped tomatoes and there is a salad on the side. +297944,A building with a red hand rail sitting next to a street. +475990,this is a cupcake and fork on a white plate +580711,A car with people on it during a parade +479099,A tree standing in the middle of a grass circle. +60569,A smiling woman looks to be playing a Wii. +145747,A large lake filled with small white boats near a forest. +294370,A street sign sitting below a very tall building. +114341,A living room filled with furniture both in the day and the night. +51461,A man holding a skateboard in front of a sun setting. +267844,It is a small kitchen with standard appliances. +281683,A bathroom with black and white tiles all around it. +482927,A train is in a station and is in black and white. +430218,a yellow train parked at a platfrom with a bright light +13597,A piece of chocolate cake on a plate. +174018,Two teddy bears with one wearing a lrge pink shirt. +538153,Three mass transit trains underneath an overpass at a train stop. +192200,a group of young people playing soccer in a field +368541,A picture of some people about to board a plane. +267164,There is a red fire hydrant partially covered in ash. +245431,A black bird sitting in grass by water +180575,Clothes and a teddy bear are on a small mattress. +337843,A boy on a skateboard is jumping over a red obstacle. +129645,A man flying over a set of steps near a hill. +281429,A person that is skateboarding down a hill. +157184,A man holding a giant pair of black scissors. +558242,A child in baseball uniform prepares to pitch a ball. +44061,A train rounds the bend in a lush green mountain setting. +392365,A team of baseball players stand in a field and visit and wait. +410496,A man plays tennis during a competition while a crowd looks on. +387362,A bathroom sink shapped like a glass bowl. +292324,a neatly put away living room with plush furniture and contemporary art +334244,An ancient building has people around it and a clock on the outside. +463459,four white urinals against a green wall with lines +455188,A microwave and a refrigerator in a room. +92124,A bathroom with a white toilet and a sink net to a shower. +350160,A boy lying a cross his bed with the lap top +173500,Two women walking down the street holding umbrellas. +244613,A desk with a desktop computer and a couple of monitors. +423395,A man holding a bottle and a group of people near an umbrella. +128201,A wooden floored room with various chairs around it. +545250,There are refrigerators lined up to be trashed +225715,The room was clean with the bed neatly made. +61624,There is a very large white plane at the airport +575194,A baseball player hugging another player as lovers do. +117725,A view of a building with two clocks on it. +467250,An older man drinking white wine from a glass. +64718,there is a male tennis player about to hit the ball +473915,a plate with some fruits and a bread +520910,A lady is standing in pastel colored bathroom in front of the bathtub and there are christmas lights hanging up outside of the doorway. +556420,A beautiful sandy beach with a grass umbrella next to crystal blue water. +231512,A clock tower is presented with several lights. +320482,A transit bus sitting at one of its stops on the side of a street. +22969,Giraffes in their wood and grass zoo enclosure +370701,A man and his little dog outside protesting Petland +115823,Two men are playing together in a park. +198811,a big red fire hydrant on the side of a building. +531092,a sandwich on wheat bread sits on a plate +378276,A group of men standing in a large kitchen. +381925,A woman sits on a bench with her hand up. +107548,Lots of boats tied together sit in the water. +535808,A bicycle sits parked in front of a bookstore. +128654,Man in mid air reaching between his legs to reach a frisbee. +148077,A plane just having taken off from the ground +217440,"A woman with her legs crossed, shielding her eyes while looking up, reclines on a couch." +289194,A baseball game is being played in a city park. +416739,a white framed bed with no mattress in a small room +209682,A white toilet in a bathroom next to a white sink. +234614,some oranges and a banana and some vegetables +580704,A group of people on motorbikes ride on a path. +314907,"Cars going down the road, someone on their bicycle, and people walking" +236730,A zebra staring blankly near a watering hole. +333000,Small boys are playing a softball game on grass. +499480,A white refrigerator next to a counter top. +42622,A person riding the waves on surf board. +242060,a plate of pastry on a wood table and a glass of drink +59108,This photo shows four copies of the same fire hydrant. +358976,A cat laying on top of a couch. +101959,A mother elephant leading a baby elephant on a clear day. +507421,Two stuffed bears seated at a table for a meal. +172935,A person flying through the air whale riding skis. +72376,A man gets ready to throw a frisbee. +314294,An elephant standing under the shade of a tree. +194903,A female tennis player waits for the ball on a clay court. +214832,Line of black cows eating hay from a hay bale. +290836,A large elephant in deep pool of water. +246963,A group of men riding on the back of motorcycles. +386092,A metal juicer sitting on top of a table next to veggies. +235564,A white plate topped with food next to a fork and drink. +454750,A larger zebra resting its head on a smaller zebra. +52340,A man flying a kite over the ocean on a beach. +257971,A man playing Wii with two other men sitting on a couch watching +152749,A case is sitting on top of a bed. +464522,A brown and white dog standing next to another dog. +483182,Multiple jet airliners in runway next to an airport at night. +382668,Two adorable chubby dogs sleeping next to each other. +476770,A group of men playing a game of baseball on a field. +386116,A man laying on his back in a field of grass while holding onto a parachute style kite that is flying in the sky above him. +518615,A large brick church with a clock mounted on it's side. +501443,A group of boats that are sitting in the water. +540180,A street signal with a smiling face for the green light. +401010,A bed that has four pillows on it. +536028,A man on a surfboard in the middle of body of water. +123070,A herd of elephants walking along a lush green field. +338220,Train on tracks inside of a brick station. +154644,Woman listening on her phone while smoking a cigarette. +454751,Two people playing a WII game at an event +81056,"A black and white photo of a camera, on a bench." +152000,A round swimming pool has privacy trees around it. +225850,a woman sitting on a picnic table on her cell phone +404273,A giraffe walking close to a pool of water. +43288,A cheesy hot dog with a large green pickle next to an iPhone. +343059,A green school bus drives down the road with bikes on top. +523871,An older woman sitting on a chair looking at a phone +58223,A giraffe sticking it's head in a van. +368556,Shot through a clear umbrella showing a person with a red umbrella. +229134,Coast gaurs approaching a sail boat with big city behind +314430,A red fire hydrant sitting in a parking lot next to a metal post. +44494,A big blue two level bus at a bus stop with people. +118966,A couple of people in a room with a Frisbee. +104320,A close up of a blackberry cell phone. +481325,Someone walking down the street and street lights and a one way street sign +257629,a number of books and magazines near a laptop +112573,three adult brown bears standing around staring at something +123125,Blow drier and brush sitting on top of newspaper. +413008,A large pastry has been decorated with cherries and yellow icing. +97579,There is a woman holding a remote control and a man looking at it. +206231,A woman lugging a bag of luggage down an alley behind her. +298443,A group of people sitting at a long table having food and drinks. +235319,A person walking towards the ocean with a surfboard +110369,A tow truck driving past a very old stop sign. +359314,A construction vehicle loading another vehicle onto a flatbed. +423962,Many kids are on the field playing soccer as the adults look on. +112329,A traffic signal and signs attached to a pole. +570060,"A guy is skiing there is a lot of snow . +" +491481,A large giraffe is standing in a vast green field. +491366,A couple of men in front of a television with a remote. +68434,A glass vase filled with lots of flowers. +150361,Two people playing tennis on a blue court. +332461,The trunk is filled with equipment to ski. +558510,People in red and white shirts at a tennis court holding rackets. +369820,A very rusty old car near some pretty flowers. +294763,a close up of a toilet in a bath room +289318,a woman and a child holding umbrellas and smiling +224247,Three passenger airplanes parked on a airport runway. +251044,A piece of red luggage sitting next to a bench. +381527,a man skating in a skate park with a large crowd watchin him +346645,A steak on a plate served with green garnish +576667,A bare bathroom has a window over the toilet. +127161,there is a small white pizza that is on a small plate +182681,there is a young woman playing tennis on the court +269942,Vehicles on a street near a green traffic light. +513283,A small toy sits on a plate with pizza and crusts. +20001,A man holding a bat to hit an incoming baseball during a game. +501762,A man on a beach holding a frisbee at sunset. +429281,a table full of bananas being sold outside +205035,A man with his dog out near a lake. +115924,A man on a surfboard riding a wave. +390718,a group of baseball players playing baseball at a field +121586,Office space with cat on the television and work. +24260,"A couple of horse, zebra mutants standing in a field of grass surrounded by a crowd." +31606,Two refrigerators sitting next to each other in a kitchen with items stored on top of them. +247394,A large jetliner taking off from an airport runway. +321885,A chair and table with two monitor screens +192992,A person wearing a stocking cap brushing their teeth +34874,A man and a woman standing next to each other. +355106,A table with portable cook stove and other objects on it. +129139,The two cats are sitting on the blue chair. +447613,A woman in tight pants looking at her cell phone in the rain. +89395,Decorative pedestal water fountain located near the beach. +6921,A young boy hunched over a laptop computer. +303101,A crowd of people standing along a fence near an airport. +338948,A boy is jumping over a hurdle on his skateboard. +401614,A cat crawling into a white toilet seat. +42694,a number of people washing an elephant +116341,A group of children sitting at a table eating pieces of cake. +346337,A black dog lying down on a black couch. +72989,The clock for sale has birds displayed on it. +321242,A microwave oven sitting between wooden shelves over a wall. +453959,A pitcher throwing a ball of his mound +199442,A man riding a wave on top of a surfboard. +408336,A zebra looking alertly at the camera while in the field. +299986,A man sitting on a bench listening to headphones. +347766,"A computer desk has two monitors, mice, keyboards, cell phone, speakers, and webcam." +201163,Three men sitting on motorcycles on a sidewalk. +384670,Two people on a blue and green tennis court. +556537,A young man jumping into the air on top of a soccer field. +297380,a female in a black top and a child in a green shirt +283277,A bright street at night with several cars passing by. +391891,Plate of food sitting on a table while female sits at other end. +369309,A small computer upon a tan desk with a arm lamp nearby. +77050,A man holding a plate standing inside of a kitchen. +298440,A large jetliner flying through a blue sky with two engines. +217919,Clock tower of dark grey bricks with 1853 and 1989 on face of clock. +578776,A large herd of sheep crossing over a dirt roadway. +455044,Heavy snow covers a picnic bench next to a tree. +393004,A women playing tennis on a blue tennis court. +564142,Two giraffe are standing close together in wet sand. +42810,A woman in a white shirt and pink skirt playing tennis. +484938,A young boy stands in a room holding up a bat. +278295,view of a mountain top and clouds from a very high angle +44795,a baseball player hitting a baseball with a wooden bat +398097,A fire hydrant that is red on top and says to open. +291712,a small boat in a body of water +315492,A girl is playing with a teddy bear in a bathroom. +479448,Belgium waffle loaded with bananas topped with powdered sugar with syrup and more fruit as a garnish. +274959,An airplane parked on a dirty field next to a chain fence. +495533,A few men talking to one another around a table. +504711,A fork rests on a plate next to a piece of cake. +502663,Food truck with customers ordering them with friends. +64399,A female toddler in a flowered dress feeding herself some pastry +143908,A person on a motorcycle doing a burnout. +577512,A nighttime view of a clock tower across a river. +51272,A cat is sleeping on the couch cushion +346089,A young girl slicing up a cake on a wooden table. +56821,A street light and some trees on a street. +129699,Upward view of street sign and traffic light in front of office building. +416476,a polar bear near rock formations in an enclosed area +18928,A young girl eats a pastry in front of a mural of Paris. +102903,A person in a gray parka sitting in the snow +364596,A man standing on the side of a road holding a protest. +216449,Mom and her daughters are having dinner together. +82765,A bed and window in a small room. +292170,A grocery store display filled with lots of apples. +159374,A red building standing against a grey sky. +559454,a female wearing short shorts and cutting a cake with a knife +533449,A couple of young beautiful women sitting at a table covered in plates. +234914,A grey picnic table with umbrella is placed in front of a row of food trucks. +211189,A group of motorcycle riders racing down a track. +362293,a horse and buggy that is going down a road +397636,A pizza pan with a slice of pizza on it. +129690,A lady in pink sitting on a bench next to a man standing in a beige suit. +378403,Large Labrador dog laying across a pile of blankets. +296192,A dark bird is sitting on a rock eating seed in the sun. +34445,A woman unpacks a box in a kitchen. +363736,A living room with a white wall and a beige couch. +223090,A white plate topped with dicked up lettuce next to carrots. +160858,A black and white striped zebra grazing on grass next to a pond. +238389,A small empty bathroom with brown painted walls +127279,A large collection of boats parked in the waters of the dock. +250210,A crock pot on top of a microwave on top of a refrigerator. +197683,man with long thick gray beard riding a motorcycle +371395,a wood bench sitting in a park with three people sitting on it +432397,A black and white photograph of a plane with many admirers. +555346,A tugboat in the water has two occupants. +324553,A man with camera watching a group of giraffes +200567,A baseball player holding a bat standing on a field. +398237,A small child is holding onto lawn decorations. +292456,A man and a woman on a blue motorbike are picking up a piece of luggage from a man. +282942,The woman is pointing at a big cake. +281602,A person with a black and white umbrella is in a doorway. +157358,The people are roller skating down the road. +93717,a collage of a skateboarders trick on his skateboard +206391,a sign that is next to some trees +399284,A man on a surfboard riding a wave. +414324,Sinks in a public restroom with exposed brick and plumbing. +80153,A person riding skis on top of a snow covered slope near a dog. +328940,A dog and a girl asleep together on a sofa. +303219,Two young women standing in a living room holding Wii game controllers. +402720,A trio of men drinking wine at a restaurant table +424039,Two zebra standing next to each other on a dry grass field. +424333,Many street signs are located within close vicinity of each other +468501,A group of women playing video games together +130849,Even old people with knee injuries can enjoy a nice game of tennis. +316161,A small gray bird perched on a tree limb eating the fruit. +225693,a bed sitting inside of a bedroom on a wooden floor. +493805,Two giraffes in a zoo look at their surroundings +504020,a pack of zebra underneath a shaded tree +142879,an arrangement of different types of bread at the table. +426546,"a plate with a sandwich, fires, and coleslaw sitting side by side" +571823,A little girl walking a black dog across a field. +184358,Someone wearing a pink snow suit stands on a snowboard. +296012,A small green car has a plaque with writing in front of it. +262228,"Bikes lined up at a bike stop with an advertisement near by that says ""your butts"" +" +497878,A small airplane sitting on top of a runway. +435205,A pregnant with writing on her stomach while holding a brown teddy bear. +405762,A man holding a football on a grassy field +472904,A table with a fall arrangement sits in a large room. +119061,a fruit market with bananas hanging above head hieght +296521,A passenger train passes a freight train traveling in opposite directions +379892,A vase with several different species of flower sits on a glass table. +539326,Cattle grazing on a green grass covered field. +37729,"A cat behind flowers in a vase, small pumpkins, a wine bottle and a glass of wine." +413709,Looking up at a stone and brick clock tower +404839,A couple standing together holding Wii controllers next to a building. +462342,there is a train and a person walking on rail road tracks +66771,A woman holding a smart phone at a table. +258702,A rainy day at the bus station in the old section of town. +472375,A small black and brown dog sitting next to a motorcycle. +401028,A person that threw a frisbee in the air. +92462,A herd of cows walking down the street. +68740,A very cute small fire hydrant by a small road. +451944,A blue and white bus with two bicycles and people by it. +405660,A park bench that is sitting in the grass. +228541,a little yellow fire hydrogen that is out in the open +200023,A big dog sticking its head out a car window. +66973,an image of a parking meter with colorful designs +209788,A red traffic light sitting at the corner of a building. +199149,A man riding skis down a snow covered mountain. +476787,There is a homemade pizza on a cutting board. +305684,A black and white dog is looking out of a window from inside a house. +425805,A pizza and beer sit next to a finished painting. +528062,Several people in a living room sitting on different sides of the room +326937,A small black dog watching a flat screen TV. +213171,a boy dressed in a baseball uniform standing in a field. +147393,a female skier wearing a backpack skiing over the snow +404249,A kid in a camo shirt riding a skateboard down the street. +222322,A group of people walking along a beach covered in umbrellas. +581736,A beautiful young lady standing in front of a bathroom mirror. +368727,Post with numerous traffic signs in large city setting. +36522,A white bus parked in a parking lot next to a car. +201859,A few cars waiting for their turn to drive around the corner. +182541,two people sailing down a stream in a blue canoe. +233005,A tiger striped cat being petted on a wooden bench. +311553,a plate of vegetables amongst bowls of rice +356387,A row of parked motorcycles sitting in front of a tall building. +354559,A teddy bear is sitting on a woman's neck. +121210,A white plate full of food with meat and veggies. +142592,"A clock sitting in the middle of the city, in front of a building." +471861,the table has different foods and drinks on it +13546,A young man riding a skateboard on a stone wall. +551170,Some roll down doors at a building painted with graffiti. +479057,A largge polar bear smelling the grass looking for food. +491017,Several men in leather lingerie walking and one holding an umbrella. +164835,A guy on a snow board in a snowy hill. +72770,A young man playing with frisbee on a sunny day +174544,a train approaching a station with people waiting to board +357916,a young man is about to throw a ball. +136400,The Stop sign has been hit and is leaning to the side. +18837,A green utility truck is parked on a street while a man climbs inside. +14756,A sinister SOB smoking a cigarette holding a blood soaked baseball bat in a dark demonic oom. +560819,A man with a tennis racket on a court. +417023,A couple that is eating some food together. +559950,An adorable dog looking out the side of a car door window. +226762,A man in a suit talking on a cell phone while sitting on a train. +196430,A young boy holding a baseball bat next to a green field. +362812,some people stand up on a subway train +354121,A small bird standing on top of a sidewalk. +549361,a man leans against a brick wall while he talks on his cell phone. +500478,A baseball player is winding up for the pitch. +222094,Road is littered with old cars and some wrecked trucks with a lone red and white stop sign at a grassy lot +519565,Two adults and a baby sit on a bench. +389464,A young boy taking a toothbrush off the store shelf. +300124,"A love seat, microwave and table on sidewalk." +530630,A sandwich on a plate with a bowl of soup with a pickle next to it. +44621,A man wearing glasses standing next to a black cow. +433483,Black and white picture with a stop light at tree line level. +58849,A dog with a blue frisbee in it's mouth. +113097,A wall full of pictures in frames of various subject matters. +315805,The two filaments of matter have been separated from each other. +183965,"A tray holding a sandwich and cappuccino, next to the pastry." +525155,A man in black carrying a sheep on his shoulders. +328255,a sink in a bathroom with a shaver and personal hygeine items on the counter top +423731,A horse grazes on grass in the shadow of a mountain. +142056,A tennis player in action on the court. +90864,a little boy is on the beach sitting on a board +124039,a stuffed teddy bear sitting on a stool +124796,A boy at the beach rinses off a Frisbee in the water. +522778,A woman videos a man cutting the cement around a street pole. +85157,A group of people are seated around a dining table. +414212,A guy gives a thumbs up while holding a toothbrush. +381563,A metal table with white plate holding food that includes chicken and cauliflower. +443038,"A red, black and silver locomotive sitting on a railroad track." +354424,Cat outline in darkness with white stripe background +61684,A man holding out two hands as if pulling on something +576564,a couple of cows stand on some grass +37513,An adorable little girl riding on the back of a brown horse. +406217,a school advertising on its store front window +518262,a small dog and a big dog both on leashes +354584,There is a woman bending down with a racket playing tennis. +517135,The boy stands next to the baby elephant on the sidewalk. +18461,"A refrigerator filled with food and almond milk. +" +296032,A cat sits on a window sill behind the blinds. +581356,A trolley in a populated downtown area with people. +435820,a couple of men stand by a glass window +356293,a young female throwing a red Frisbee in a grassy area +271852,A baseball batter up at the plate that just hit a ball +502936,A man hitting a tennis ball with a racket. +58139,A cat laying on top of a pillow on a bed. +38630,A white toilet sitting in a bathroom next to a wall. +274352,A large group of women are at a dining table. +81035,"A woman with a red sweater, seated and holding a small dog over a railing while looking into a body of water." +49559,A person with a flying kite on a beach. +521804,A lush green field with animals grazing on top of it under a snow covered mountain range. +290115,A man does a grind on the curb with his rollerblades +372246,A road sign giving directions and a Stop sign on a roadside +569862,A boy has one foot on the skateboard and another on the ground. +295006,A baseball player with a bat in his hands on a field. +301262,a stop sign and a bus stop sign +555390,A traffic light with a picture of a coffee cup underneath it. +446260,A guy wearing a white shirt and striped tie. +78982,A city street with delivery trucks and a bus. +138871,a room with a bed and multiple items in it +577912,A bathroom that has a sink in a window sill. +547875,A plate of BBQ and French Fries sit on a plate on the table. +550073,A baby sitting on the floor examining a toy. +160233,A couple of double deck tour buses parked at a street side. +179374,"An individual is in the open view in the picture. +" +186345,4 different colored sea horses flying with 4 birds. +194559,A bed with several items of cloth arranged as hearts on top. +289388,A man that has his near a toilet seat. +403255,A small white boat in the open water. +220344,Zebra stripes very up close and very perfect. +123843,A white bathroom has a white shower curtain. +383384,A baseball player holding a bat next to home plate. +366510,An open refrigerator has food stacked in it. +163012,A car's lights on a traffic sign at night. +13177,a man is working on a hub cap on the ground +260330,The kitchen has two refrigerators and a stove in it. +212559,A stable full of lambs standing and laying around. +58927,A public restroom in a state of disrepair. +449039,Two people on horses walk down the middle of a street +397842,A small dog running to catch a frisbee in the air. +39480,a woman walking on a tennis court holding a tennis racket. +326058,A man riding on the back of a brown horse. +528886,A field with a boundary line across it and some cattle in the background. +558585,A group of ducks floating on top of a lake. +141671,Horses are racing next to motorcycles on a dirt track. +575465,A group of men standing on top of a baseball field playing a game of baseball. +183104,an image of two giraffes in a crate +476349,A man riding a snowboard down the side of a snow covered slope. +117098,A red motorcycle on display at a show. +92355,A clock mounted on a stove top oven. +95155,Four picture collage of a snowboarder wearing a red jacket and brown pants going down a snowy mountain side. +363577,A young girl who is looking at a birthday cake. +389811,A speed limit sign mounted beneath a green street sign. +7297,The large clock tower can be seen down the street. +154057,A cat that is sitting down on a porch. +400985,Two donuts sitting on top of a paper bag on a dinner table. +327919,A bus loading and unloading passengers in front of a Pizza Hut +98443,a clock tower with many buildings in the back ground +438850,A roman numeral clock above a door to a building. +39009,A group of people holding some hot dogs in his hand. +105611,A dog draped in a blue blanket on a boat. +80260,Three people on a motorcycle in the middle of a city. +42551,A clock sitting on top of a wooden table next to a window. +358658,the fully furnished basement looks clean and orderly +102820,Young girls sitting on wooden decking with decorated cake. +421131,Two men sit on boxes with their motorcycle on the side of the road. +16875,A man wearing glasses lays in bed next to a cat. +46099,A stop sign that looks likes it made of crinkled paper. +574783,There are some people sitting in a snowy area. +520077,A stack of books sitting on a desk with a bottle of beer. +479378,A parked motorcycle sitting on the side of the road. +506444,A floor covered in food and office supplies. +176852,Man about to enjoy a piece of pizza at a ball game +250301,A group of people carrying surfboards on top of a beach. +397352,A baseball player pitching a ball on top of a field. +31345,a large light brown and gray cat sleeping with a television remote +131980,A clean kitchen with pans hanging from the ceiling. +155216,A stoplight on yellow during a snowy day. +188109,"Small bedroom with a bed, lamp, dresser, and a small chair. " +416960,A sheet cake with a farm scene on top of it. +271795,A laptop computer sitting on top of a wooden desk. +556892,man in wet suit rolled down to waist lying in sand by water's edge +129886,A top of a ski resort and lift with people going down the hill. +35826,A train sitting in front of a tin building and a dry grass field. +160501,A man and a woman pose next to a small dog which is wearing a life jacket. +319721,A brown horse standing next to a woman in front of a house. +239656,A man sitting on top of a black box on a sidewalk. +17244,A man riding a bike next to a bus down a street. +536274,a horror themed double tier cake with a bloody knife and an arm reaching into the cake +284885,Train traveling on tracks through city near glass buildings. +293218,An airplane flies low to the ground near a mountain range. +492282,A man who is riding a horse down a brick street. +566042,Six giraffe are standing looking in the same direction. +85803,A simple but fully stocked and well designed kitchen +126272,A luggage cart sitting inside of a brick building. +194704,Girl in black jacket holding up skis in front of a lodge. +575403,Some sheep sit in the grass of a field. +269026,Two horses in a field next to a fence. +112160,A lady walks down a street with an umbrella. +538661,A hot dog on a stick is shown by a campfire. +53410,A man sitting down at a table using a computer. +47498,A man standing on a tennis court holding a tennis racquet. +70527,A table topped with white plates covered in food. +43542,A vase filled with lots of white flowers. +252393,A boy in a baseball cap holding baseball mitt. +445812,This bathroom has a toilet that sits back in a small niche and a shower with sliding glass doors. +14392,A man in blue hat pointing towards a street. +5992,A small group of sheep standing together next to a building. +123321,A bowl of broccoli with sauce over it. +437392,A toilet that is decorated like a pink stuffed animal +459665,A shot from behind home plate of children playing baseball. +213276,A man standing near an intersection with street lights. +109291,a dog surrounded by a bunch of papers and books +555023,"The giraffe is sticking out its long tongue, perhaps tasting the fence rail." +128586,A woman sitting on a bench next to a child in a stroller. +238377,A dog laying in some hay on the ground. +516022,A group of elephants standing near the water +326959,a brown couch a coffee table a lamp window and television set +183949,A panda is eating bamboo on the ground. +486788,"A chandelier, made of baseballs and bats, hangs from a metal roof." +29558,A man and boy in grassy area with a kite. +223444,Two laptops on the same table in a white office. +83483,A group of ducks swimming on top of a lake. +75179,A person doing tricks on a bench with a skateboard +60989,A man riding a skateboard into the air. +493641,Two men are riding on horses in the middle of a field. +493020,a person riding a skate board down the street +79837,The moon shining down on a harbor full of ships. +521689,A man is pulling a suitcase in the street. +508418,People walking around in the field in front of the Lincoln Memorial. +275999,A picture of some flowers that are on a table. +415135,Three men sitting on a ski lift at ski resort. +384993,A set of four pastry sitting on top of a table. +52947,A box filled with all types of different types of donuts. +240903,A elephant that is standing in the dirt. +326128,The man is posing for a picture with his snowboard. +311068,"A green and white street sign that reads ""pee wee reese rd.""" +562805,A modern transportation building with busses lined up for passengers. +162459,A group of people that are walking down by the ocean. +272188,Three zebras standing around looking while in the grass. +288603,A donkey leads a herd of sheep down a busy street. +421833,a number of people on a beach with a frisbee +179765,A black Honda motorcycle parked in front of a garage. +122166,a person riding on a bicycle on the street in front of some cars +344903,A tray topped with three tin trays filled with food. +271359,there is a cow and people in the street +310553,A man riding on the back of a motorcycle with a woman. +5690,A long passenger train traveling through rural countryside. +407115,A long counter holding an assortment of coffee related items. +215914,Adults play in the snow with balls and over sized mallets. +88848,a couple of pictures that have some people and some fire hyrdons +488720,The man snowboarding down the mountain side. +575595,A man is standing near a canopy bed. +520964,A group of people walking around a slum with dirt roads. +295426,A train is coming down the track near some trees. +130619,a giraffe with a man sitting in front of the girraffe +555772,A humorous stop sign is pictured in this image. +354174,A tennis player looking up for the ball preparing to hit it. +404243,A display case in a sandwich shop filled with sandwiches. +95520,A sign siting next to a parking meter near a parked car. +336602,a male wearing a blue jacket sliding down snow on a snowboard +9628,A man riding a board over the top of a wave. +162393,A man that is standing on the court with a racquet. +388795,Two desks rigged to look like the drivers seats of race cars are at the foot of a bed. +80303,A large green truck parked on top of a desert field. +470005,A baby putting his finger on the keys of a laptop +22118,A sandy beach filled with lots of people standing on top of it. +54750,A man kiteboarding over waves in the ocean. +82933,A brown cow standing on a field with long horns. +483328,A flat screen TV mounted to a wall next to a doorway. +227879,The baseball player is up to bat and ready to hit a homerun +352478,A table full of green vegetables that are for sale +391895,A man with a red helmet on a small moped on a dirt road. +424392,A closeup of two zebras standing near one another +68162,A living room filled with furniture and a window. +412876,A person that is swinging a baseball bat. +320370,A man throws a Frisbee on a green lawn at dusk. +399702,A hamburger and french fries on a plate near two glasses. +538976,An eagle is posted on a thin rail. +499755,A woman is playing tennis on a tennis court. +14562,A tennis playing reaching to hit a tennis ball. +256973,A cup sitting next to a donut on top of a table. +577853,Cream of wheat and milk in a blue bowl with sliced bananas as a topping. +127573,A cat stares at a television from close up. +304036,a couple of helicopters are in the sky +364125,Two people behind umbrellas stand facing a body of water. +93140,A kitchen filled with hard wood flooring and appliances. +227265,A group of people walking near some skis. +405674,A group of people enjoying pizza and wine. +560637,There is a horse standing by some grass. +22819,The man is surfing on the water with his yellow board +264957,A large convex mirror mounted to a brick wall. +435671,A grey brown bird perched in a pine tree +74434,A white airplane is parked on a green runway. +76918,A grey bird on beach with water and pier in the background. +275933,Two teams compete for the ball during a soccer game. +211192,A pristine doctors examining room waiting for the next patient. +400922,A sign hanging of the side of a building on top of a clock. +575776,A zebra and a rhino interacting in the wild. +24458,a brown horse with a mask behind a fence +534127,A man in a field ducking from a frisbee +10766,a little girl holding onto a teddy bear tight +335045,A statue of an elephant on the ground. +278853,Man jumps aloft while balanced on a snowboard. +397857,A man without a shirt holding a smart phone. +429924,A boat is parked alongside a row of parked bicycles. +581401,A group of people on motorcycles riding down the street +104486,The man is pushing a cart with his suitcases on it. +107770,A tray has a cup and a plate with fries and a hotdog on it. +539422,A giraffe cocks it's head towards a noise +467803,A small bamboo plant inside of a vase. +559261,A tennis player reaches for a tennis ball. +37038,A man on water skis prepares to jump the pole +275111,Two women on a park bench while a man on a cell phone walks down the sidewalk. +382288,A woman riding a red surfboard waiting for a wave. +110972,A large black bear walking across a field. +416331,Train wreck fallen down into a body of water. +262101,Two people at a party hugging each other. +549728,a remote control on a carpet area +462466,a lady lighting candles on a birthday cake +521181,A large bed covered in a comforter in a bedroom. +410194,A little elephant who is standing with to larger elephants. +122172,a baby elephant walk next to some adult elephants +474675,a small black clock is next to a white plate +270918,A sharp steeple on a building is lit in the sky. +34826,A clock hanging from the ceiling of a building. +508972,A little girl staring at her cell phone. +205435,"The red plate holds rice, tofu, broccoli and water chestnuts." +297537,A single giraffee standing in a dried field. +84113,A windsurfer riding on top of a wave. +408863,A train is pulling up towards the empty station. +440729,An orange fire hydrant sitting next to a stone wall. +494473,A street intersection with a stop and street signs. +186497,A woman feeding a giraffe under a tent. +139973,The crowd is enjoying the late baseball game. +282719,The woman in black pants stands holding a video game remote. +236505,a guy trying to fly a kite outside +316320,A gentleman standing in the vicinity of other men +351887,A group of people sitting under an umbrella around a table filled with cups and silverware. +345329,A jet airplane flying above the clouds in the distance. +227463,a man sitting on a bench with a backpack and a cane +34900,A man has stopped in the middle of the street and his hands are full. +183187,A yellow bench sitting in a field next to trees and a shrub wall. +400166,a mouse and keyboard in front of a computer +219291,A table topped with different types of foods. +247306,A person looking over the water at large boats. +347018,A baseball player holding a baseball bat standing on home plate. +196681,An airplane flying in the sky above a mountain. +380101,"A person silhouetted against a cloudy sky, holding an umbrella." +317798,A half a sandwich sitting on top of a table. +293666,A set of statues on top of a really large clock. +428357,A large United States Air Force plane sitting on a tarmac at an airport. +332489,A close up of the back of a stop sign and two street names. +170411,A birthday cake with candles sits on a table. +504297,A hot dog sitting on top of a white paper in a bun. +95620,A plate of food with a cream sauce on it +208648,A white and yellow train traveling through a rural country side. +233383,A group of horses gathered in a pasture. +295114,A man is surfing a large wave towards the shore. +392020,A sandwich that is sitting on a napkin on a plate. +418701,A white car is parked next to a telephone booth. +551358,A bed in a redroom next to a door with windows. +557357,some veggies and other foods are mixed together +77178,Several pieces of ancient pottery painted with designs. +458175,A person on a horse jumping over some poles. +164469,A skateboarder practicing a jump at night under lights +461339,Two zebras and a giraffe in a zoo enclosure. +131390,A herd of oxen lounging in a field. +125071,A young man riding a skateboard up a black ramp. +257407,A wet road with lots of cars driving over it. +23821,A red motorcycle is parked in between white lines. +73733,A box of glazed doughnuts with a year on them +322864,A yellow taxi cab sitting below tall buildings. +281188,The blender is mixing several different fresh ingredients. +550051,people on the street near a sea with waters +364145,A plane on a runway in an airport +170739,a couple of elephants are standing behind a fence +522262,A close up of several pikes locked on a gate. +147140,A woman riding skis on top of snow covered ground. +105885,A busted fire hydrant spewing water out onto a street. +570516,Semi truck parked on the street in front of a building. +156555,A pizza sitting in a pizza box topped with pepperoni. +426523,Three young kids are playing with Wiffle bats in the yard. +130826,Two men sitting next to each other on a wooden bench. +145048,A black and white photo of an old locomotive. +278576,An old blue truck drives down a dirt road. +431848,A man is doing a trick on a sidewalk curb. +98599,a guy falling backwards during a jump on a skateboard +423894,Playing tennis and going for a difficult shot. +118846,A young man poses for a photo with his mouth open. +99518,A mean leaning against a metal rail next to an airport. +150989,A group of people standing on the side of a beach. +360449,A stoplight on a busy city street in the evening +553862,Small group with a folding table next to a decorative old bus. +137412,A cat is laying in front of a laptop and a monitor. +228552,A row of parked cars next to a pile of snow. +296243,A white compact car parked on a sandy dirt road. +465357,The apples on the table are being peeled. +115266,A public transit train on the train tracks. +234963,A rural city has some food trucks on the corner. +58785,A cow eating a mix of vegetables on a piece of paper next to a bird. +283748,Dog standing on an empty beach in front of some birds. +102532,Some kids are playing in a baseball game +199215,A man is sitting on the back of a truck with other objects. +363280,A bathroom with several urinals lined up next to each other. +449312,A very nice cake dish with some pastries in it. +505789,Two children standing near wrought iron fence near brick building. +375816,Bunch of cows walking through the grass behind a car +569969,Several different boys on skateboards on a ramp. +278290,To men in cloaks ride skateboards down the sidewalk. +322174,A table with different vases next to a lake. +306395,A dog and a cat laying together in a pet bed. +191919,A group of cows are grazing on the grass. +558350,aerial view of dog on lap next to laptop computer +308156,"A living room consisting of windows, rugs, chairs, and a coffee table." +444770,Two smart phones sitting on a table next to each other. +133377,Two zebra standing next to each other next to a building. +312343,A busted red fire hydrant spewing water all over a street creating a rainbow. +261783,A series of four clocks mounted to a wall. +209180,A group of baseball players playing a game of baseball. +168340,A man riding skis down a snow covered slope. +408008,The dog is laying in the green grass with a red frisbee. +420589,Two trains traveling down tracks in a station. +567886,A white teddy bear laying on top of a blue rug. +347568,A banana sitting on top of a counter next to glass pots. +80010,The men are working on the yellow fire hydrant. +371326,A large green leafy plant with a flower. +543872,"A white refrigerator with a double doors and an ice-maker has papers, cards and magnets on the surface, " +289752,A white boat on water with seagulls and umbrella in the foreground. +134010,A passenger train traveling through rural mountain countryside. +284106,A plate of chicken and vegetables sits next to a bowl of rice. +16606,"A mouse sitting on book, with a Microsoft logo on it." +551794,A man riding a motorcycle on the side of a road. +350075,A few kittens in a bowl in a white void +463802,A teddy bear watching a man with a tennis racket. +457636,a couple of hockey players are on the ice +105552,A Jet2 airplane parked out on the edge of the tarmac +487450,A man riding a motorcycle with a child on the back of it. +489920,a bench with a wall and pavement +31041,A newly married couple cutting their wedding cake. +556648,A smart phone sitting on display in a case. +137369,A silver motorcycle parked next to a forest filled with lots of trees. +8832,A small girl with face paint in front of a table of decorated cakes. +83161,A white plate topped with salad and onions. +525354,A man wearing glasses and a stripped tie. +443204,A person on a tennis court swinging to hit a tennis ball. +138527,a long train going along the train tracks +418578,Group of teddy bears with holiday clothes on a red carpet. +423484,A man walking down a road in front of a double decker bus. +183391,A man holding a tennis racquet on top of a tennis court. +98674,A bird is standing on the small branch outside. +80274,Two elephants that are standing next to each other. +333402,A man standing in front of the open door of a bus. +151662,a giraffe behind a fence eating grass from a feeder +212122,A boat sitting out on an island surrounded by water. +249352,A black and white toilet with a plunger. +165713,A rusted silver fire hydrant next to two poles. +396178,"A KEYBOARD, MOUSE, AND MOUSE PAD SITTING ON A DESK" +518873,The hotel room is cluttered with personal items. +361623,A young man tossing a frisbee in a forest. +562803,people carrying a machine outside a wooden house +311746,A field filled with purple flowers and green plants. +321085,a boat with some people in it going down the river in front of some high rises +170992,A group of people sitting on yellow benches next to a tall building. +305821,A giraffe grazing on a tree in the wilderness with other wildlife +445722,some people are sitting on a trolly outside +550281,A book that is open laying in front of a keyboard. +579814,This airplane is taking off in the air near other airplanes. +78979,That aircraft is for display not for riding. +178835,a vendor is selling items in the street +372654,There is a group of people that are sitting at the table eating food +99990,A couple of women standing on a tennis court holding racquets. +223130,A giraffe standing under a leaf filled tree. +127971,Volunteer firemen with their truck shooting out a jet of water +61507,People enjoying a nice day in the park. +386291,Fuzzy cat sitting outside on the window sill +221829,A single serve cup cake in a white dish. +306264,An old ornamental building features many beautiful windows and a clock. +388258,"There is a bike that is parked by a bench, and an airplane that is high in the sky" +266852,A group of flamingos standing next to each other in water. +249785,a man riding skis down a snow covered slope. +284028,A bedroom with an old bedspread and a very cluttered wooden night stand. +393271,The image shows a series of a snowboarder's descent down the slope. +137321,A man draped over his bed with his head hung low. +309033,A large kitchen with a stove and a sink. +42182,"A kitchen that has different types of pots, and pans on a stove." +577377,a kitchen with a refrigerator a sink and a stove +129659,A woman is seen eating at an outdoor table with a bowl of soup and a roll and a beer in the foreground in front of her. +172913,A group of children sitting in a field flying kites. +293785,A white truck parked in front of a store with lots of windows. +513659,a carriage and a horse in front of a building +317070,A person jumping up in the air on a surfboard. +529494,The clock has different bird pictures in place of the numbers. +451972,A red fire truck with a bunch of Christmas decorations on back of it. +490413,The airplane has landed behind a fence with barbed wire +549182,The baby elephant is walking along the side of the bigger elephant. +489924,A girl on top of skate board on a street. +575867,two stuffed bears one big and one small sitting in front of each other on a table +511662,A large cruise ship sailing next to a sandy beach. +72105,A woman works the counter at a bakery. +405214,Four plates with stacks of hot dogs on them +471205,A group of people walking horses across a mountainous field. +147494,A train traveling on a snow covered track. +511294,A gray horse standing next to a crowd of people. +76384,Winter breakfast meal ready for one person at a cafe +232865,A plate with a slice of cake on top of it next to a fork. +457708,A large street direction sign in Tokyo Japan. +15180,A table is neatly made with whine glasses. +398339,A closeup of a broccoli floret in bloom +208163,A green and yellow truck is driving on the road. +553852,A young man riding on top of a skateboard. +115162,A fire burns while a person rides a green motorcycle and several motorcycles are flipping in the air. +298622,An old radio with a computer keyboard and mouse +171062,A cat sits on a table and watches television +518203,A large passenger jet taking off from an airport runway. +252701,a man on a blue surfboard on top of some rough water +87383,THERE IS A PLATE WITH FRUITS ON THE PLATE ON THE TABLE +28676,People are throwing a frisbee in the grass near houses. +78113,a fire truck on a city street +296353,"A white bus has the words, crosstown, on the front while a man walks near the side of the bus which is front of a brick building." +412355,A small bird is perched on an empty bird feeder. +417606,A stop sign in the middle of two streets. +152628,Two women in wetsuits pose with a surfboard. +359458,"Zebra and other wildlife standing together in an outdoor area that has tall grass, trees and bushes." +156999,A giraffe is bending its neck over a wood log. +335839,A man near a red fire-hydrant during the day. +872,A couple of baseball player standing on a field. +202225,"A couch, chair, dining room table and television sitting in a room." +174329,A yellow train traveling down tracks next to a lush green field. +571835,A grey tabby kitten inside a black suit case. +331196,A female Tennis player is trying to take her best hit. +113945,A couple of teddy bears sitting on top of a red heart cake. +581542,Men in sombreros are behind a man with a phone. +543118,a library with rounded walls full of books +457322,A man on a motorcycle outside in a black and white photo +441921,A bus with passengers traveling down a dusty road. +63970,An orange cat looks at a green light shining on a bag. +14629,A woman is enjoying a sip of wine while cooking dinner. +565438,A man that is jumping in the air with a skateboard. +250629,Two people sitting under an umbrella and smiling. +105601,A metallic refrigerator freezer sitting inside of a kitchen. +538595,a group of horses graze on some grass +376368,A scene of a waterway with several boats. +575441,A boat sits in the harbor along side other boats. +133251,Black and white dog laying down on bed. +545913,A close up shot of what appears to be an air plane. +334305,A hot dog and bun with mustard is served on a plate. +178587,A man holding two ski poles while standing in the snow. +188850,Two pizzas covered in veggies sitting on a table. +359039,A group of young children sitting on a bench +391029,A bird is sitting on a bench in the grass. +572889,a busy street with a lot of cars on it +485724,Brown baskets filled with lots of oranges on display at a grocery store. +339974,A traffic signal sitting next to a street at night. +345580,A zebra standing on a sandy piece of land. +514914,a fancy bathroom with some tile walls +169972,a close up of a person riding a motorcycle +333106,A park bench on rocks next to a grassy field. +506717,A group of baseball players standing on top of a field. +66190,A young male skateboarder practicing a ramp stunt. +200365,A plate with two hot dogs and a cup of coke on a table next to a bike. +42805,An empty street is lined with large umbrellas. +75783,A person on a surfboard rides on a wave. +465346,A burger and a bunch of fries on a plate. +49445,The contents of a bag placed out on a blanket. +42628,Snow piled high around pipes with people walking in background +252629,A person holding a plate with strawberry cake on it. +381368,A bird is perched on the back of a horned animal. +473050,Cars have stopped for a red light at the top of a hill. +51167,There is a blue and yellow transit bus stopped to pick up passengers. +242103,A small plastic dish with food in it +391837,A man sitting on a motorcycle posing in front of a bay. +26735,A bed suspended over a pile of luggage. +578974,A woman's face sitting in front of an oven that has a pan of food in it. +19579, a partially eaten sandwich and a soda +692,A women holding a baby brushing its teeth. +103161,a plate holding a sandwich on a bun next to some short little french fries +234676,A group of people sitting and standing on top of a sandy beach. +218736,A hot dog and soda on a table with a mushroom +493652,Living room decorated for Christmas with gifts galore +535626,A plate with a cake on top of it next to a fork. +562557,Four surfers stand on the beach watching the water. +396966,Two people flying a kite with blue sky in the background. +499109,A plate of food that includes pickles and a sandwich. +341230,A man is loading oranges onto the bed of a truck. +215709,A lot of thought went into decorating this rustic bathroom. +315948,The small bathroom has an old bathtub in it. +179392,Cat sitting on a desk with a computer behind him. +284375,An open laptop computer sitting on a wooden desk. +481267,There are two boats sailing through the water. +425727,The person stands in a field flying a yellow kite. +468935,A city street sign near some very big palm trees. +288882,Two large giraffes inside a fenced area interact with one another +99604,A person standing on the curb by a skate board. +415798,A man standing on a paddle boat with his dog on the front end of it. +560851,Three people and two surfboards on the beach +6527,A clock mounted near a city light on the road +152004,A tall glass vase on a balcony. +388486,A picture of a person that is about to throw a frisbee. +546823,a small pony a with two smaller ponies standing in front of it +322263,A motorcycle parked on a lush green field. +304330,a man that is petting a big giraffe +154877,Two people holding each other while at dinner +271970,A small white church with a clock on the side of it's tower sitting on the end of a street +526654,The man is trying to eat three hot dogs are the same time. +463785,some people umbrellas and two boats on some water +102978,A metal plate holding a pizza with cheese and vegetables. +494578,Wood post lined up in the water with birds perched on them. +452308,A traffic light on green with several traffic signs surrounding it +355325,A pile of food sitting on top of a table next to a glass of wine. +1841,Woman in a red hat covering half her face and tie. +40515,A couple of people are preparing to water ski. +259136,A large metal fork sticking out of a lake next to a boat. +427034,a person and their dog are browsing on the mac book +415714,Two signs that are attached to a metal pole. +150649,Different views of a man who is skateboarding. +158798,A cat laying on a wooden table under a umbrella. +383513,Team of rowers in a specially designed boat in swamp +326308,A pink flower and some other small flowers in a decorative mug +265550,a man riding a wave on top of a surfboard. +196650,A giraffe standing next to another animal in a field. +554749,Bathroom with a large marble tub and marble floor. +572427,A red stop sign sitting next to country road. +403639,A black cat sit among a mess of electronic devices on the bed. +476838,A man cutting a very large pizza with fruit. +1153,A banana that is sitting in a bowl on the table. +568675,A box is full of many types of donuts. +280480,A bird is sitting on a branch among unfocused trees +103697,A boy does a skateboard trick in front of street art. +527784,Two plates that have food on a counter. +492025,A statue that is wearing a knit cap and holding a teddy bear. +379343,A wooden table topped with the contents of a woman's purse. +406155,A glass vase made to look like a plant. +444682,A messy desk is shown with a laptop computer. +545162,A sink and a show with a cream tile and red painted wall. +178606,THERE ARE A LOT OF PEOPLE WALKING AROUND WITH KITES +104619,a baby giraffe walking away from the shady area +295960,"A bathroom with purple walls, and a white sink, toilet, and cabinet." +60515,Someone props their feet up on a foot rest in a messy living room. +321578,the back end of a cow at a feeding station +151393,numerous signs attached to a post with bald trees behind them +327845,there is a small dog sitting on the floor playing with a toy +49942,A man in shirt and tie holding an umbrella. +429706,Several people walking through an airport near luggage. +284772,A dog swimming in a poop with a Frisbee. +295589,A man standing on a baseball field holding a catchers mitt. +144938,A baseball player wearing a catchers mitt on top of a baseball field. +191013,A large clock on the side of a building above cars on the street. +193504,A man in a wetsuit on the beach with a white surfboard. +147590,A glass of wine on a wooden table. +59152,There are stop signs and one way signs at this intersection. +277984,A decorated living room with two green chairs. +357254,The clock has pictures of different birds on the numbers. +243817,"An open field with sand, grass, and trash cans." +124327,Two kids in blue shirts playing a game of baseball. +75905,A group of people posing together at a party. +340511,A kitchen filled with pots and pans under a microwave. +68525,A man holding a snowboard next to two ski poles. +271076,A weather vane with a clock near a body of water. +397089,Pastry baking in a black cast iron skillet. +196518,A couple of black bears standing next to two trees. +178516,Woman waiting at end of curb for train to open its doors. +505709,Empty bar or lounge before or after business hours. +347377,Five white umbrellas stand in a patch of water +170638,Several horses hold their heads down toward water in a pond. +19451,A road where cars and motorcycle are parked at the side. +400983,An outdoor meeting with car in the parking lot and banners. +95476,A couple of skiers racing on a snow covered hill. +143556,A group of bikers riding motorcycles across a bridge. +83036,A group of people sitting around a wooden table in front of a projection screen. +48268,A herd of antelope next to some zebra's grazing in a field. +149284,Some type of bread that is cut in half +242566,A silver train sitting on top of train tracks. +254986,A laptop with a mouse next to a stack of books. +291655,An arrangement of flowers in a clear glass canning jar haging on a wall. +76625,A train with headlights traveling on a track past pedestrians. +531585,A group of people hanging out around a truck. +579970,The room is situated on the dark side of the house. +317087,A red fire hydrant sitting on a slab of cement in a patch of grass. +577744,the reflection of a car in the window of a building +282940,A white bus parked next to a lush green park. +296404,A couple of giraffe standing by a tree in the grass. +404607,A man flying on the back of a boy while holding a white frisbee. +190018,A man and woman sitting on top of a boat. +178747,A bus drives over a muddy road with trees on the side of it. +361400,A traffic light is showing a green arrow. +568337,Two little white boxes are on a mat. +529917,A bunch of people wearing the same things are standing in line. +226268,A smart phone sitting inside of a red pouch. +534736,People and bicycles in a crowded street in China. +193449,The bed covered in many sheets and blankets is the only furniture in the room. +564404,A man who looks like two face with a creepy smirk on his face. +241373,A man sitting on a park bench reading a book. +68387,"The baseball player is participating in an intense game," +254555,A water buffalo grazes on tall grass while an egret stands by. +513220,A chili cheese dog with french fries on a plate. +233305,a male snow skier in a black jacket snow and trees +171548,Guys on motorcycles rides along side cars and behind a truck filled with people in the back. +141779,A man sitting between a group of surfboards. +38701,A large golden cake is on a cooling rack. +326913,A couple of animals that are walking around the street. +25997,The little boy is practicing riding a surfboard at the carnival. +212759,An empty side walk with in a city +125208,A man in a brown shirt is playing a video game. +96075,Lots of boats anchored in a harbor. +567077,some signs buildings trees bushes a green and white sign +320706,A blending mixer sitting on a kitchen counter. +69009,Two children look at a large black bear in a zoo. +296858,Two zebras forage on the ground for food in a wildlife exhibit. +42091,A woman in sunglasses and hat standing by plant. +581615,A picture of a white toilet in the rest room. +458750,some people on some grass playing frisbee and trees +8128,A blue and white giraffe reaching for food up in a tall tree. +527219,Pizza with various topping on a table with wine. +57542,A woman sitting at a table with others using laptops. +159832,A man falling off a surfboard on top of a foamy wave. +570756,A group of people flying kites at the beach +409964,A man holding a tennis racquet on a tennis court. +518375,A miniature white pizza cradled in a plate +60102,Two opponents are playing during a soccor game. +138096,A child on a sidewalk rising a skateboard. +504541,"A grocery haul of bananas, bread, onions, potatoes, milk, cream and more." +333114,a couple of people holding a umbrella on a bridge +35726,A long tour cruise boat with potted plants on the windows +565405,THERE IS A COMPUTER ON THE DESK WITH A MOUSE +275754,A small child in pajamas is holding bananas. +459320,A couple of little girls standing in front of a metal fence. +397903,A woman taking a picture of her rear view mirror with a dog sitting next to her. +124157,Several stacks of individual bananas in aluminum trays. +192755,The windows of a railroad train photographed against a cloudy background. +155743,A zebra in captivity grazing in its exhibit. +421146,A baseball batter holds his bat above his head. +320171,Old cars are parked on the street in a city. +458313,On the table was a box of various donuts. +239857,A woman is about to throw a frisbee in the dirt. +461973,People on a platform watch a train go by +367313,Closeup of a hand holding a black cellphone. +281660,The view out a train window passing along a wall. +472445,The lights are on above the mirror of the bathroom sink. +237041,A snowboard is left vacant in view of large snow capped mountains. +476029,A couple of women preparing food inside of a kitchen. +434509,A man and woman ride horses through hilly terrain. +4554,Several people snowboarding and one skiing in the snow. +31296,A group of older people around a long restaurant table. +167477,A white toilet in a bathroom next to a white sink. +367509,Vehicles on a road near zebras and gazelle. +571834,A sign hanging from the side of a sushi restaurant. +474293,A full view of a beautiful store in a town. +503585,A man with a brown bag and blue jacket stands by a train that is moving. +334915,A couple of people standing next to each other with food. +366529,A man in white jacket and red tie and a woman in a white headdress. +355869,a guy that is on a surfboard flying in the sky +560841,"a plate with bananas, peanut butter and a drink" +18699,A group if oeople gathered together to take a picture in the office +88970,A man serving a tennis ball on top of a tennis court. +522021,Three Zebras standing with their heads beside one another. +191585,A group of people walking on street with suitcases. +446984,A giant pair of scissors hangs over the heads of the bicyclists. +41859,A painting of a person walking along a field holding a kite. +476444,A small TV on the hard wood floor of a building +109860,A toilet in the ground next to a trash can. +4509,a woman with blonde hair posing with rope on a bed +50975,People playing and people watching a game of basketball. +369817,A cat wearing a bow tie standing on a blue rug. +209441,a tub of apples and a box of bananas +421361,a person laying in a field of grass with a frisbee near by +417596,A couple of wooden benches sitting across from each other. +301467,a few deer and a zebra on a grass field +166424,A group of people standing on top of a snow covered ski slope. +429985,a female sitting at a table next to a cake with candles in it +132686,A sky filled with lots of colorful flying kites. +159402,Several people helping to load luggage onto a train. +363581,A couple of women sitting in front of a deep dish pizza. +110196,a freeway traffic sign writtien in an asian language +557644,A row of parked bicycles sitting on a side walk. +115571,A group of three men standing in front of a double decker bus. +61925,There are clothes all over a desk and a bed. +120478,Street sign on overhanging post displayed above roadway. +425555,A woman in a wheel chair sitting next to a red fire hydrant. +41923,A cut in half sandwich sitting next to a pile of fries. +492366,A group of people that are standing next to a horse and cart. +266021,Two men holding a red its with people standing in the distance. +309000,A person in boat on water with island in distance. +429836,Spectators are watching a baseball game in the stands. +355777,A street with busses and cars next to a bus stop. +125655,Several parked bikes sitting in the grass near a tree. +390585,a small girl with sunglasses is hitting a tennis ball +290477,A wooden alter displaying a potted plant and some candles. +174503,The woman has her cellphone strapped to her head using a rubber band. +370325,A large passenger jet flying through a blue sky. +346107,A railroad train letting off a big black smokecloud +314986,A black and white photo of a bicyclist. +192001,A yellow and black train sitting next to a loading platform. +429754,"A pile of hair, scissors, razor, hand mirror and larger mirror." +397459,"an image of a kitchen setting with ceramic backsplash +" +284698,The image of a man holding a camera is in this motorcycle side mirror. +417980,Costumed friends walking down the street arm in arm in a parade +298331,a woman wearing a white shirt and shorts playing soccer +514366,a man is flipping a skateboard in the air outside +328337,A little boy wearing a red shirt holding a white frisbee. +46526,The two yellow trains are coming down from the mountain. +342387,A group of people preparing food in a kitchen. +62790,six different shots of horses and people standing on the street +485844,a lady that has a bowl in her hand +206541,A couple of zebra standing on a lush green field. +485129,A man that is on a surfboard in the water. +304578,A young woman sitting in a field next to a cow. +82921,A traffic light in South Venice with road signs +104589,A table topped with sliced brisket next to salad and sauce. +289967,A couple of white sculptures sitting under a red umbrella. +288824,A city street with a firetruck driving down it +503667,A double decker bus parked in front of a tall building. +351530,People seated on wooden chairs and a bicycle parked nearby. +31984,A model standing next to a scooter in the middle of a room of people +130076,A man playing a game in the living room. +31176,a black and gray spotted cat is sitting on a windows sill +365945,A bed with a red flowery blanket in a bedroom topped with pillows. +559837,A little girl sitting on the side of a fence. +38449,A couple of people carrying bags of luggage. +17909,Well stocked refrigerator with food and beverage items. +481404,A church with a stain glassed window of the virgin mary. +347650,A dog is laying in a chair in front of a book shelf. +63478,A bathroom vanity sink with person products around it. +126107,A bird that is flying over the sand. +137330,Black and white photo of a boat full of rowers. +199610,Three sheep standing inside a fenced in area. +226917,a small girl in a pink top is laying on a couches arm +190014,the young man is set to snowboard at this skiing location. +33909,"This is a bathroom with a toilet and a tub with a clear shower curtain," +33208,The entrance for a subway on a city street. +397613,A person holding a phone and a lcd screen dial. +65993,A sandwich on a bun with a pickle on the side. +456178,a pole with a clock on the top of it +302531,a giraffe stands looking over a watering hole +211491,An older woman sits in a sweater at the beach. +266409,A man in a blue coat skiing through a snowy field. +557150,A couple of goats and a goose in a green field moving about. +491102,A giraffe leaned over a rail sipping some water. +355971,A multicolored stuffed teddy bear in a santa suit. +367511,A green train pulling into a train station. +347087,A person serving putting red wine to a glass +340843,Two baseball players are trying to catch a ball. +89648,A crowd of people sitting down next to each other. +68059,some oranges are stacked up in a bowl +140651,A man that is sitting on a motorcycle. +97379,A group of people standing around a woman flying a kite. +203539,people that have their face painted holding a cell phone +517600,Two toilets sit near each other in the same room. +338041,Two young boys enjoying the action at a local skate park. +111864,Two men standing on street next to a tree and building. +513096,two men standing by a display of military items +85348,A brick oven with two serving trays and a stack of logs. +67178,A street scene with a double decker bus. +209930,Sky view of a baseball field and scoreboard. +520437,THERE IS A DUMM IN THE SUIT CASE +167906,A toy action figure holding a plastic mini teddy bear and a cocktail glass decoration on the snow. +2212,Two dogs curled up asleep on a couch. +327005,A man standing on surf board holding a paddle in a harbor. +141416,A yellow motorcycle passing by people behind a barrier. +362289,A grey cat starring at a hand with a donut. +361901,Food items in basket with wine glass on table. +473929,A herd of zebra standing next to each other on a grass covered field. +229997,A bear sitting in the grass surrounded by five vultures. +414156,A kitchen with wooden counter tops and a stove top oven. +445298,A black and white cow standing on to of a lush green hillside. +85674,A woman preparing food at a cart next to the street. +122251,THERE IS A BOAT THAT IS IN THE WATER +355168,A tennis player is taking a swing at a ball near an audience. +218637,A motorcycle parked in front of a house. +499672,a white horse sniffing the hand of a person in front of them +353067,A man riding a skateboard through the air at a skate park. +346954,A train is stopped at a station beside a traffic signal. +140542,A cowgirl rounding up a steer in a competition. +67131,A three wheeled motorcycle parked with some other old vehicles. +541664,A laptop computer sitting on top of a lego desk. +308003,There is faded green paint on a wooden step +294958,Two men playing with a disc in a field. +32688,A pair of giraffes and standing with a skyline in the background. +21979,a snowboarder and a snow skier are posing for a picture +334826,A close shot of a fully cooked pizza. +309843,a couple of surfboards placed in the sand with dogs +444236,A double deck tour bus riding through a street. +258132,a person jumping a skate board in the air +187475,A person holding a hot dog with lots of fixings on it. +153563,A group of men in suits sitting at a table using laptop computers. +449198,time shot of cars driving down Asian highway +237928,"This kitchen has a black stove, stainless steel refrigerator and white cupboards." +403657,Red bus passing by a famous clock tower. +343229,A large red bag on the ground in a room. +204805,A large boat filled with mean on wheels. +495377,The people are sitting around the benches outside. +115885,"A brown, white and black cat looking at a laptop." +409475,Two people standing next to each other on a ski slope. +124601,A kitchen that has a counter with a laptop on it. +578813,A person with a backpack riding a snowboard down a mountain side. +330736,A man in a suit is walking with a woman carrying an umbrella. +222340,A passenger bus traveling down a street behind a red car. +56405,A girl holds a teddy bear while an adult stands behind her. +133567,A person looking at a train going by. +239145,A box with a cheeseburger and fries and a container with a hot dog +347253,A plane is boarded with maintenance trucks alongside cargo trailers. +308753,an animal laying down on top of some rocks. +139530,A group of men standing around a pile of luggage. +442456,A man sits on the tires of a car that rests on the ground. +336232,A city street filled with lots of traffic and people. +397377,Three women who are sitting on surfboards on a beach. +439715,A man riding a brown horse in uniform next to tall green trees. +113126,A table topped with different types of tools. +422783,A microwave sitting on a brown shelf. +238410,A group of people sitting around a table next to each other. +416765,A group of cows grazing near a beach as one cow looks up. +56108,A room with a kitchen table and lots of wooden chairs. +358750,A blue and white double decker bus parked in a parking lot. +441974,A cat sleeping on top of a stereo by a plastic clock +496768,A young man flying a kite over a sandy beach. +491223,A man holding a remote control in his mouth. +306667,The girl is about to kick a soccer ball. +243849,A bun with an egg and cheese and bacon +24553,a couple of players are out in a baseball field +376295,Little girl blowing out a candle on a fancy dessert. +191474,A car is stopped for a red light at an intersection. +52413,"A child holding a pink toy cell phone with ""Princess Aurora"" inside it." +317015,Six teens playing frisbee in a field of grass +221303,A group of friends playing a game on the Nintendo Wii. +439710,Man setting fire to a wooden dugout boat +85292,Red train on the rails in a train yard. +416345,A cat sitting in a black office chair. +357402,The woman has swung her tennis racket behind her back. +162711,Cattle grazing on grasslands beneath a power tower. +389205,A field full of baseball players playing a game of baseball. +393710,A little boy flying a kite in a sunny field +242095,A park full of people flying kites on a sunny day.. +507958,A kitchen with oak cabinetry and white appliances +187286,an image of two bikers at a cross walk +53450,A bus that is sitting on a sidewalk. +557998,A person sits at an outdoor bar with a piece of paper. +319127,A snowy scene of trees and a road. +138644,a woman with short hair eating a banana +246252,Two young men are snowboarding down a hill. +514604,A toilet in a bathroom next to a amp. +420827,A group of firefighters near fire engines parked on a street. +357041,"A lone, blue and orange bird sits on a bare tree." +222500,A kitchen with lots of wooden cabinetry and a stove top oven. +394199,A woman sitting on top of a red motorcycle. +44022,a brown and white cat hanging of of a bed +171483,Small cheese pizza sitting on a white plate on a table. +463037,A plane site on a grassy country runway. +230888,A bird soaring over a lush green park. +389340,A trash can made to look like a soup can. +459680,"woman in long, light red dress with orange umbrella." +497444,A man getting ready to toast a wine glass. +155087,A small white bird standing on top of a dirt field. +351840,A dog is sitting in the passenger seat of a car. +207763,Two women play frisbee in a park. +55295,a person in front of a tv with a gun +261999,Two people standing beside a motorcycle are kissing. +310516,A flock of birds flying over a body of water. +441701,a man is on a court playing tennis +381323,A cat sits on the edge of a bathroom sink. +438364,A red double decker bus driving down a city street. +81315,A kitchen which looks like its been updated recently. +210442,A train speeds by a field in a black and white photo. +318386,A plate holds dinner including green beans and potatoes. +312544,A couple of small birds sitting on a metal rail. +392687,A little girl standing next to a man on top of a park. +112298,The man holds a ping pong paddle under the shelf on a wall. +499950,A car and a traffic light on a street. +350966,A train inside a station moving at a regular speed. +157883,A pizza sitting on top of a pan under a glass counter. +146774,A clock hanging from a white wall in a kitchen. +46263,A church with grey clouds and cars moving down the street +218357,A very bright light shining down on some signs at night. +97465,A person holding up a smart phone in their hands. +520528,A child holding a baseball on a baseball field +536158,A man paddling a kayak down a river. +133380,A small orange bird standing on a collection of rocks. +107542,A dog is walking past a row of park benches. +423201,Small black dog with paw on man's knee. +448410,A train parked at a train stop next to another train. +437556,A kitten eating food out of a dish on the kitchen floor. +285742,Black and white photograph of cars parked along a curb in the city +254225,A sandwich sitting on a piece of tinfoil next to plastic cups of mustard. +448278,A pond with various birds and ducks swimming. +365766,"A kitchen area with a stove, sink and microwave." +341010,A man in orange garb carrying a umbrella and cell phone. +498610,A group of giraffe standing next to each other. +235278,Two old men laughing at a dinner table in suits. +174987,A train is being doodled with green and blue. +436848,A black and white of a small bathroom. +230661,A colorful truck parked outside at a parking meter +148329,A man holding a tooth brush up to his face. +460131,A big pile of assorted fresh produce close together. +566456,A person on a motor bike on a city street. +324203,A kitchen counter with plates of beans and hot dogs. +223157,A child on a skateboard is performing a trick on a slab. +229234,A clock mounted on top of a building in the city +108224,A red bus on side of street next to a building. +97264,"A sandwich with tater tots, ketchup, vegetables and a spoon." +526197,Donuts on display behind a glass with its name by the donut. +196490,A man is riding a motorcycle in a race. +504690,"A group of zebras and wildebeest grazing in a field. +" +333888,a living room with blue chairs and a book shelf +328430,A tennis ball and a woman with a racket on a tennis court. +335340,Man in red jacket and red tie walking in a crowd. +50943,A person riding a wave on top of a surfboard. +351017,A group of people sitting at a table in a bar working on paper work. +289938,A hot dog cart across from the Radio City Music Hall. +118615,A warning sign among the tall evergreen trees. +256672,A crowd of people standing below a gray cloudy sky. +433963,A big red bus parked on the street near a city +484760,A statue of the virgin Mary holding an orb of light. +246053,a guy standing next to magician statue using his cell phone +557785,A young child riding skis across snow covered ground. +454478,A woman laying on a bed pointing at a pony picture on a pillow. +434634,A pizza topped with cheese and pepperoni with veggies. +452836,a woman holding an umbrella while talking to someone. +290896,A yellow bus in parking lot with power lines above. +5412,a light brown bathroom with drawers sink and toilet +266124,Three people standing near a fence and a horse. +160927,A large boat floating down a river next to a walkway. +38678,A woman in striped shirt holding a plate with a bagel on it. +246863,A little baby sitting inside of a dog bed. +247838,A small herd of buffalo resting on the ither side of the stream. +486112,A man is spraying an elephant with a water hose. +468934,a plate with some food and chop sticks on it +225686,A man with a bicycle with tanks for holding a liquid mounted on it. +326640,a black and white clock on a pole a building and a flag +556901,A plane with water skies for landing gear coming in for a landing at a lake. +488463,A man is standing next to a big cow. +37615,Two men waiting for something cooking in an oven. +444209,there are many motorcycles that are parked by each other +518182,A guy playing with a disc on the beach. +163444,A metallic freezer refrigerator in a kitchen next to wooden cabinets. +505619,A woman is stirring a Cappuccino with a dessert in an outdoor setting. +441411,A cat standing next to a brown stuffed teddy bear. +16848,A filled plate of Chinese food with broccoli +195842,A person playing the Nintendo Wii in their messy living room +221700,A pair of red scissors sitting on a newspaper. +24223,A large pepperoni and mushroom pizza being cut +277289,A living room filled with furniture and a window. +132408,"Two draft horses pulling plow, color, under cloudy skies with trees and other horses in background." +367128,A pregnant women takes a selfie wearing a black tank top. +565012,a digitally manipulated image of cars on a highway at night in the city +532503,Man and woman on an ice covered bridge. +179611,A toilet sitting in a bathroom on top of a tiled floor. +477598,A dog trying to rip a frizzebee out of his owners hand. +17350,a couple of dogs that are sitting in a boat +488004,A black cat laying on top of a metal pan. +135436,A hot dog on a bun with pickle and tomato. +233236,A large green couch sitting on top of a wooden floor. +341712,These two people are using the phones at a parade +578788,A young man riding a skateboard on a hand rail +108452,A group of horses about to gallop in the grassy field. +142574,A group of people that are around a elephant. +324872,A rail yard may not be the most attractive place to skateboard. +48153,A foot wearing a pointy pink flat shoe rested upon a bench. +275542,Three dogs bite at a frisbee while at a park. +300303,A locomotive crossing on a street with the arm down to stop traffic as the train is passing through. +310278,A young man riding a bike past a car while talking on a cell phone. +57827,some baseball players playing baseball on a field +557977,A baseball player standing next to home plate. +216417,a person that is skiing through some snow +428064,A girl in a park area flies a multi-colored kite. +42499,A train on some tracks with power lines above it. +469840,A man and child on a red and black motorcycle. +312384,A city street with cars and a bus on it. +161022,A sky full of a flock of birds on a cloudy day. +194780,A picture of a plane taking off from miles away from the airport. +151842,A truck pulled over on the side of the road. +494345,a cat is climbing from a window sill on top of a toilet seat +33958,a person on skis doing a backflip high in the air. +94852,A mother looks after a baby elephant in the wild. +349579,A snow covered sign sitting below a very tall building. +531917,People sit together on benches in a park. +7730,A cat peers out of an open suitcase. +292301,A table with a coffee and a salad on it. +168650,A women who is laying in bed with her laptop. +318754,A kid with a baseball glove in a field. +544857,A man riding a snowboard down the side of a ski slope. +91994,A man who is sitting in an office chair next to a laptop computer. +29524,A girl in a soccer uniform playing a soccer game. +504586,Several beds and a mirror in a room. +88183,Two guys sitting on couches in a living room +312167,A flower that is in a vase with water. +434723,A rusted out dairy truck sitting in a field with an old rubber tire leaning up against it. +353347,A woman holding onto a man while standing in a living room. +361111,A man standing in front of a hello kitty tv with a cat sleeping on top of it. +281317,A picture of a busy road at night +399873,A woman is cutting a sheet with scissors. +493815,a man is standing by a sign post +348083,a room with some couches and a table inside of it +115846,A small glass filled with alcohol sitting on a table. +464265,A woman standing inside of a farmers market. +4916,Two small young girls hold hands as they look into a bedroom. +160330,The computer screen of a laptop open to a website PRU13 +438539,Multiple images overlaid of several women playing frisbee. +455422,"A close shot of a hot dog, burger, and fries. " +54643,A brown dog standing next to a white rabbit. +469618,A group of people sitting around a lunch table. +187695,a person is holding a hotdog with toppings +173545,People are sitting under umbrellas while riding elephants. +164453,A computer desk with a laptop computer on top of it. +416489,A woman standing on a tennis court holding a racquet. +438221,Two Mallards float and drink water in a shallow pool. +520009,There is traffic passing by a large building +315467,A living room with a black cat on top of a hard wood floor. +228135,A man talking on a phone while holding ski poles. +201305,A young girl standing on a red carpet with her leg up in the air. +424483,A tennis player holding a racket and a tennis ball. +408805,A kitchen with a microwave oven next to a stove top oven. +147309,A plate that has a piece of cake and ice cream on it. +1374,A purple and yellow train traveling down train tracks. +550103,People standing around while someone flies a kit +532580,a train on a train track with trees in the background +506187,A banana with a face drawn on it. +1244, A man sitting under an umbrella next to a body of water. +362348,two people behind a stand with many bananas +464196,A large projector screen above a table covered on laptop computers. +431479,A group of open umbrellas laying on a city sidewalk in front of a store. +359659,A white toilet sitting in a bathroom on a wooden floor. +526103,A small elephant walks up to the fence in a zoo. +140263,a guy siting down in a chair eating +246066,a woman sitting on a wooden park bench smiling at the camera +165697,A yellow and red train traveling down train tracks. +342100,three horses standing next to each other in a field of grass +538359,A public bathroom sink and hand drying area. +353298,A vase filled with lots of pink flowers. +547903,A street sign located just below two large high rise hotels. +463842,A small bed with lots of bottles underneath +70158,Three adult zebras walk calmly along close together. +385322,a long wooden dock having a bench and some people on it +422326,A modified motorcycle parked with other motorcycles on the pavement. +155546,The living room has a leather couch near a dining table. +463203,A white car with chrome rims parked next to an older lady. +127530,A man in blue shirt and white shorts playing tennis. +327165,there is a barber cutting a small boys hair +421431,there is a an standing on top of a mountain +385796,Old cars parked on a street in front of two buildings. +264968,A man with blue jersey holding a baseball bat. +390583,A white toilet sitting next to a bathroom sink. +187329,Mattress with covers sitting on rocking frame in empty room. +290093,A young man is doing something in his small room. +149500,An old man is trying to use his cell phone. +181739,The cat is standing on top of the desk. +390087,Luggage sitting on and around airline luggage carts on the tarmac +523938,Group of people skating on ice in a park during the day. +317024,A zebra is next to fences standing on white ground. +252829,"A bathroom with white counters, wooden cabinets and a toilet." +258113,A pack unzipped with a banana siting inside of it. +392637,Two pieces of fried chicken and a side of macaroni and cheese arranged on a table. +429323,"Bathroom view, brightly lit, blue square basin, commode on right, shower curtain on left and heater and window on far end." +253838,A baseball player pitching a ball on a field. +94427,A person riding skis across snow covered ground. +81860,A group of business people pose for a picture. +392493,A large flag pole with a flag hanging off of it's side. +498100,A glass vase that is sitting on a table. +485951,A kitchen with marble counter tops and black appliances +499200,A surfer is in the middle of riding a wave. +67608,A large jet flying through a cloudy blue sky. +325385,Office scene showing frosted glass cubicles and a computer screen on. +143120,A man holding a cookie or doughnut next to his mouth. +398505,A man and two children paddle on top of a surfboard. +230220,A cat eating food out of a bowl. +289343,A man is riding a large bike through the park. +317330,A man looking over his glasses with a tie and suspenders on. +424135,Very complex design clock on the side of a building. +132644,A cook in a restaurant kitchen putting chopped vegetables in a bow. +265596,A wooden table with a white plate containing cake and a cup of coffee. +517056,Two women handing out cake on plates on a dining table. +338624,a man is walking his dog through the city +20774,A group of people with umbrellas walking down the street +316365,"A person working at an airport, outside of an airplane." +133051,A large brick tower with a clock on the two showing sides. +442084,A person surfing a wave on a yellow surf board in the ocean. +470984,Man skiers make their way down a snowy ski hill. +35368,Some green bananas are hanging from a metal bowl. +137826,A red double decker tourist bus goes around town +45648,Man walking across the empty beach holding his surfboard +449073,A pile or oranges sitting in a wooden crate. +308194,Two people walking through park holding umbrellas. +140840,many kites with different shapes all laying on the ground +383676,A giraffe and its pack standing in an enclosure. +244151,a person riding a skate board on a city street +539555,A man flying through the air holding a yellow frisbee. +553280,"A small bathroom with a toilet, sink and window." +167802,A cat eating a birthday cake on top of the table. +559113,A trolley driving down a street lined with tall buildings. +192714,A street light at an intersection in a small town. +404367,A women who is holding a tennis racket trying to hit a tennis ball. +120248,a large white boat floating in the middle of a lake. +158628,A group of people walking across a sandy beach. +413247,A laptop and a computer mouse on a desk. +429996,A Zebra is walking alone in the green gas. +571585,Two pictures of refrigerators one with the door closed the other with the door opened. +491131,Wooden and black bench on the side of the road. +130524,a table covered wtih two taptops and a phone and assorted accessories +391794,A person sits at a desk in front of a computer and keyboard. +383389,A multi colored bus with people loading it +355871,These people are eating a slice of pizza. +496548,The skier is wearing a blue snowsuit and the person behind her is wearing red. +549390,A woman in business attire riding a bicycle. +90659,a blonde cat is standing by a laptop +316672,a train on a train track near many trees +226404,A man riding a skateboard on top of a cement planter. +242615,Two neatly made beds with matching walls in a room. +576652,Man in white and maroon uniform pitching a baseball. +77102,Several types of houseplants sitting on a window ledge to receive light from the sun. +508538,A group of people are meeting to discuss future plans about their skateboarding. +195306,"A bathroom with a toilet, sink and bathtub." +95805,Digital painting of a tabby cat and large dog touching noses. +260808,This unique cake is made to look like a tree stump turned picnic table. +518818,two colorful pillows on a made bed with a backboard +162189,Baseball players standing at home plate making a play at a ball. +179191,A group of ties that are on a blanket. +101860,A group of men on a field playing baseball. +125062,A row of white teddy bears on shelf next to DVDs. +490741,Seven giraffe are standing around a bush in a field. +185922,A row of motorcycles parked next to each other. +218924,an image of a cat in a toilet with the water +378048,People sitting and some standing on the grass with a kite flying and palm trees in the background near buildings. +58462,A refrigerator filled with lots of soft drinks. +152158,A pitcher in baseball throws the ball to the hitter. +540107,A herd of elephants at the edge of a river and in the bushy land nearby. +77402,A white plate topped with food and eating utensils. +46905,a dog and a cat sit on chairs near each other +331405,A plane sitting on top of an airport tarmac. +89781,A plate of food with a bite taken out of the hamburger. +579593,A giraffe walking through dead bushes and grass. +117328,A persons foot standing next to a dogs foot. +396580,"Very artistic photograph of a house, a lake and a wooden boat" +51249,A long train moves down the tracks on a cloudy day +545363,There is a black and white photo with a bench falling over. +554255,A group of tennis players on the court +66817,A white plate topped with meat veggies and rice with sauce. +52575,Looking in to a straw lined pen of cows +451990,"A plate with two doughnuts, strawberries, and coffee." +430529,A large body of water with a small sailboat red and white mast +486093,A group of people swimming out in the ocean. +283881,a stuffed animal sitting on top of a bed +66412,A young boy holding a snow board and a pair of shoes. +269682,A traffic light over a street with a sign that reads K. +89638,A small red bowl with ingredients in it +256852,A bus pulls up to a group of people and a sidewalk. +387482,"A bedroom with a bed, desk and a television." +205206,"A trolley drives down Main Street in Memphis, Tennessee." +577526,A black and white cat is laying on a green pillow on top of a desk. +111207,Two pictures of a guy with a black shirt and hat on with a skateboard. +514690,"A horse standing by a bucket, in the entrance way to a stone tunnel." +205811,Several people are sitting down eating eating a lunch. +283772,two guys outside playing tennis on a tennis court +386613,An older floor light sits deserted in an abandoned hospital. +578383,A brown cow standing on top of a dry grass covered field. +153697,An ornate wood clock with carvings on the face. +32549,Pedestrian with rolling suitcase heading towards busses in urban setting. +480624,A group of kids sitting at a table with some food. +348091,A bedroom with a bed next to a closet. +314074,A man is slicing a large white cake +433515,a large kite on a field of green grass +62889,Many sheep are inside a wire fence near a large hill. +265743,A square white plate topped with meat and veggies. +403710,A man standing on beach with a red surfboard under his arm. +176271,A glass bowl filled with oranges on top of a table. +270883,A woman in lingerie is laying on a soft bed. +567740,A couple of snow skiers are casting a shadow on the snow. +306893,A long train traveling down a city street with tall buildings. +51054,A woman with a concerned look talking on a cell phone. +97159,a compact kitchen with stainless-steel cabinets behind glass blocks +76082,People walking down a side walk in the middle of a city. +562581,A man swinging a tennis racquet on a tennis court. +225546,a small bathroom with a mirror and sink +214961,a man doing a jump in a swimming pool with his skateboard +52017,A yellow and blue plant flying in a gray sky. +435358,a man is skiing in a snowy hill +337011,A bike parked in front of a store with a basket. +207264,HERD OF ELEPHANTS IN THE WILD GRAZING AMONG THE TREES +85568,Picnic tables on the shore of an ocean +101647,A bathroom with a run down looking shower next to a sink. +73470,A man making donuts at a grocery store +213445,a big cat sitting in a little bowl +131714,Dogs drinking water next to a statue of a dog. +83235,a large airplane that is parked in a runway +282143,A plate of pizza with a fork and a cup next to it +579759,several horses are standing together on a beach +506458,A group of men cutting a sheet cake on top of a table. +48668,Man laying on bed with shirt open looking into device for picture. +262738,A beautiful blonde girl holding a Nintendo Wii controller next to a man . +451872,Several elephants are in a habitat as heads are in the foreground. +127660,A girl with a black eye and pig tails sits in a suitcase. +351868,two little girls in white holding two umbrellas. +575473,A white toilet sitting inside of a bathroom. +306230,A gas station on the corner of a street next to a traffic light. +12464,a small cake decorated with birds on top +33216,a pizza is on a silver serving tray on a table +259976,A tray covered in chocolate donuts on top of a table. +471601,A man on a surf board riding a small wave in the ocean. +579655,A woman holding a phone in one hand up to her ear. +374505,A woman holding a pair of scissors up to her face. +360877,A store with lots of unripe bananas and other products. +82293,a kite flying high above in the sky +275253,A pile of dirty clothing stacked on top of the floor. +419790,a number of people on bikes under a traffic light +523527,A zebra standing at the edge of a pond. +261948,An old suitcase made into a fabric covered bench +543681,A clock displays the time outside of a bank. +52322,A hummingbird sits perched alone on a branch. +383777,A man in hipster clothes straddling a bicycle on the sidewalk. +279940,A man loosing his skateboard from the back. +391222,Two female skiers are standing in the snow wearing purple attire. +528069,A distant view from high up in the sky in a window. +525860,An open oven with various casseroles and food in it. +52425,"A young woman walks in the rain, smiling and holding an umbrella." +201756,A close up of two birds on a tray with bananas peels. +93553,A lady with a flower in her hair taking of picture of herself in a mirror. +235399,a white dog is sitting in the back of a truck and a mattress +518440,Hot dogs in buns with fruit salad on a plate +268233,A pork roast in a glass dish surrounded by potatoes and carrots. +60835,A dog in a a cage with a bed and bowl +331236,Some prize items one might win in a contest or competition. +113058,A young man laying on a sofa using a laptop. +52155,A couple of large giraffe in the tall grass. +177065,Children and an adult on a tennis court. +509735,A family of giraffes by a few zebras and a gazelle. +500583,a horse drawn carriage with people in the cariage +231984,a sign out side a very tall building. +43305,A baseball player is in mid air jumping toward a base. +187235,A small boat unattended in a bay near a sailboat. +490701,A dessert with vanilla ice cream and chocolate fudge. +379048,A baseball jersey that is sitting next to a bat and plaque. +385586,A large boat traveling slowly trough a harbor. +287347,A woman prepares a pizza while a man watches. +219485,Cat in window sill of colored panes on building +340272,Three sheep are grazing in the field next to the water. +208748,A group at a set table enjoying a meal. +386279,"A yellow bench by a mosaic brick road with an adult standing and bending over a bicycle, with cars, a tree and a building in background." +289486,a number of giraffes in a field near trees +565203,There is a man swinging a tennis racket on a court +461898,a lady wearing glasses playing a video game +520289,A man standing on top of a boat holding an ore. +469795,A walk in shower next to a tub in a bathroom. +279824,A boy sits on a rock in a hat as he holds a trumpet near an old barn and some farm animals. +384482,A cheese pizza with green herbs on top. +257448,A cop car parked in front of a white fire hydrant. +350416,A man standing in a field flying a kite. +90208,The picture of three buses on a lot. +50638,A boy carries a stuffed animal as he walks beside some flowers. +228011,A brown and white cow walking down a busy street. +569893,A horse attached to a carriage on a street. +430546,Man on blue and white motorcycle riding on one wheel. +77460,Many people standing in a field flying kites. +402514,A picture of a man playing a violin in a kitchen. +330676,A herd of sheep standing on a dry grass field behind a white fence. +122232,The bottom half of a tennis player holding a racket. +372260,A car parked by a clock and some flowers. +544782,We are looking at a comfortable looking living room. +136780,A white toilet sitting underneath a window next to a tub. +571990,A large pile of a variety of donuts seen from above +575916,"A plate of fruit containing oranges, apples and bananas." +283438,A TV inside of a bathroom mirror next to a light. +219848,A man and woman riding on the back of a blue boat. +317480,A black cat rest comfortably on a wooden chair next to a green plant. +327780,A fork cutting into a piece of cake +478858,A bicycle chained to a pole in the city +414201,A very happy older couple cutting a cake together. +441245,A row of motorcycles are parked in a parking garage. +329138,Three horses eat grass on a pasture and drink from a water trough. +378844,a yellow and red train on its track +149115,A baseball player warms up with his bat before he is up to hit. +151130,A person holding birds in an aquarium full of spectators. +262810,Man and woman preparing to cut through a cake in front of onlookers. +224020,A young boy beside a donut with white frosting and sprinkles. +384111,A blue race car bed sitting next to a fake fuel pump. +61259,an airport with one plane flying away and the other sitting on the runway +41246,A clock that is on the side of a tower. +287033,this is a cat on a chair with a hat +268885,a cat lays down next to a key board +82085,a train that is on a rail road track +296802,A large cut pizza on a tray on a table. +308564,A plate of spaghetti with broccoli and mushrooms +1103,A lot if birds are standing at the beach shore +425000,women in black coats walk along the sidewalk +342849,A little girl holding a donut in her hand. +272955,A boy sitting down in a park with a skateboard. +75285,"A desk with a keyboard, mouse and computer monitor." +90839,A living room with a brown sofa and large window +508370,A bicycle parked on top of a baby dolls head. +369294,The pitcher beings to throw the baseball from the mound +271035,a cat laying inside of a bathroom sink +500219,a plate of food with broccoli beans and milk +51712,A man skiing down the side of a snow covered mountain. +22492,A plate with a sandwich with an egg and French fries. +192838,A woman in a wet suit riding her surf board. +363321,A little girl is feeding a giraffe at the zoo. +422785,a kitchen filled with lots of counter top space and cooking utensils. +7506,A giraffe spreads its legs in order to get its head closer to the ground. +124018,A sky view looking at the clock tower of a building. +30478,A train in a trainstation with many people nearby. +327186,A large green airplane has it's landing gear down. +401550,A bike sitting In a glass window in a building +512468,a zebra and some other animals on a trail +322620,a teddy bear laying on a turned down hotel bed with chocolates +55780,A little girl holding a dog on a leash. +344415,Trains leave a station in a city setting. +349590,Women taking picture of themselves while brushing their teeth. +481670,Two skiers are traveling down a snowy mountain. +89445,Hamburger with lettuce and tomato on a plate. +60548,A man sitting on a couch in a hotel room that also has a bed and desk. +375765,A group of giraffe standing next to each other. +105923,Elephant displayed in window of city building near roadway. +93534,A woman holding a birthday cake with lit candles. +555387,the carrots are laying next to a plate +577417,there is a treat sign says alameda street +199127,A white bus passing street next to a fence. +108353,A small bird sitting on a tree branch. +273317,A woman wearing a mask on her face purchasing vegetables +160341,A person holding skis standing in front of a cabin +538586,A black cat sitting on top of a desk. +251590,A very big pretty green vase with some flowers. +188386,Antique black and white photograph of two men sitting in a field +414576,a male baseball pitcher in the middle of the field throwing a ball +356949,A close up of a zebra's back with its neighbor's mane in the background. +470924,Three men and one woman sit at a table eating pizza. +155245,a person at a table with a pan of food +255096,A large jetliner sitting on top of an airport tarmac. +367142,A woman in white shirt standing in kitchen area. +184746,A person and a table of sandwiches and other food. +443313,A man in white shirt and shorts playing a game of tennis. +393145,A bird sitting on the back of a giraffe next to a tree. +83283,Three kids are trying to fly their kites. +4175,A tennis player winds up to hit a serve to her opponent. +385036,Fresh fruit and vegetables have been gathered from the market +580117,Several snow skiers are posing for a picture. +141807,The simple white shelving unit is against the white wall. +122390,a cat laying down stretched out near a laptop +363308,Cooling trays holding various colored cookies and cakes. +340472,There are a lot of sailboats anchored in the water today. +526728,A man and a woman on a sidewalk standing in front of several suitcases. +8457,A sickly cow and her calf grazing in a yard. +206027,A slice of pizza that is on top of a napkin. +461130,A couple of young people standing on a beach next to the water. +100990,A group of people standing next to a portable golf course. +91751,A man in a uniform kicking a soccer ball on a green field. +324390,Some meat and vegetables are arranged on a white plate. +125072,Cattle grazing on grass near a lake surrounded by mountain.. +216096,A person falling off of a surfboard while other surfers watch. +232574,Someone has taken a picture of the rear end of this elephant. +241867,A orange and cream colored bus parked outside a small market. +283131,"Doorway view into bathroom area with sink, toilet and tub." +293895,A two story white building with lots of umbrellas over them. +178370,"A social occasion of people are uncovered before the open day. +" +260618,A pizza that is sitting on a wooden board. +381615,A window in a kitchen filled with green plants. +114173,"The bathroom has white and green tiles on the wall, and green tiles on the floor, along with a white porcelain toilette, and a white garden style tub with a shower hook up." +500019,A woman with her pants pulled down on the toilet. +540783,Double Decker trolley stopped by sidewalk in city. +317130,Road signs litter the side of a road. +291606,A woman standing outside of a metallic bus parked. +539775,a little boat coming towards the shore +560677,"A male tennis player in blue shirt and tan shorts on the court, looking down, with his tennis racket rested on his hip. " +226631,A cruise ship rests in front of a dock with buildings in the background. +273878,A person holding a phone in their hand with a boat on it +414435,A male doll has a striped shirt on with a tie along with a pair of jeans. +467176,A group of friends playing a motion controlled video game +223554,Some very cute big birds by the water. +516641,a small cup of oats revolution oatmeal with apples +384850,A bathroom with a shower curtain that has four palm trees on it and a white tile floor. +575610,A crowd of people walking across a cross walk. +323525,A baseball player swinging at the pitch from the mound. +493799,"A plate topped with vegetables, meat and fruit." +144486,A fried and breaded sandwich is topped with preserves. +109900,A group of people who are standing outside by a plane and a car. +246883,Two men holding their surfboards near an ocean. +518551,A group of elephants are taking it easy in their environment. +19109,Many small motorbikes are parked along the street. +286353,The silhouette of a man checks his cellphone. +371054,A long blue classic truck parked in a parking lot. +34701,A white toilet sitting next to a white sink in a bathroom. +436795,A man eating a hotdog in a kitchen +427341,Two people wearing hats that double as umbrellas. +38210,a skier is prepared to go down a mountain. +121875,A man is sitting in a bathtub cowering and naked. +281028,A train filled with lots of sets next to windows. +115314,He does have control of the motorcycle while pulling a wheelie. +118778,A blue and white train passing by other trains and buildings. +200745,A man reaching for a soccer ball on a soccer field. +478517,a man and a woman are walking dogs +470350,a male in a brown shirt is playing tennis +273930,A cat resting on the bed with a bedroom +224138,A red plate topped with a chocolate pastry. +27932,A catchers mitt sitting inside of a blue baseball hat. +375892,The police have several motorcycles parked together outside. +200058,A person on a snowboard in the snow. +484145,A man standing with a glass in his hand. +380142,A couple of brown horses laying on top of a grass field. +255358,Luggage waiting to be claimed in the baggage claim area. +60177,A bicycle with a covered cart in the front +431165,A baby elephant standing in front of a brick building. +466156,The striped cat is sitting on top of the car. +148977,a bear that is sitting on a table +82518,Tennis player wearing white outfit slinging the ball. +43795,a person in a field flying a kite in the sky +360767,some people riding some bikes right by some boats +514254,A woman laying on her stomach in a short skirt on her stomache +284552,A green rail bridge spanning over the width of a river. +12733,A person taking a picture of a decorated tree with a cellphone. +245462,A man in a gray jacket standing in a kitchen next to a black dog. +396338,A couple of cars on a city street. +279596,A stop light that is green that also has various other street markers on it. +21088,Sheep grazing in large grassy field near hillsides. +407943,A man walking in front of an open umbrella. +377626,A neon sign sitting on top of a building with a giant clock. +535682,A woman lounging on a beach chair holding two phones. +49862,A black and white photograph of luggage lined up on a sidewalk. +516998,Two men standing next to a busted fire hydrant. +120806,A large large floating out in the water with an airplane flying over it. +192607,A man standing next to a truck near a forest hillside. +145214,an old keyboard sits next to some headphones and a mouse +169648,A pretty young lady tossing a blue frisbee. +144365,a window shoing a man standing alone on a train platform +17178,Horses communing with each other on a shady street. +310858,A person using a skateboard on a ramp near a beach. +413432,A man holding a tennis racquet up to the side of his face. +129632,A close up of a zebra grazing in the leaves. +170267,a bunch of people posing for a picture +95113,A skier stands posing on a flat area in front of the lodge. +392850,A banana and some fruit on a table. +374051,A woman standing on a tennis court raising her racket +501229,A brown cat lies down on a brown carpet. +579818,A train driving over a small bridge on a green hillside. +159151,A bathroom has a large mirror and black wall. +450543,A young man on a skateboard doing tricks. +435909,A sandwich cut in half and onion rings arranged on a plate. +164170,A desktop computer sitting on top of a wooden desk. +177938,A man standing next to a parked motorcycle. +562381,a tennis player serving the tennis ball to an opponent +463522,A horse pulling carriage travels through a busy area in a city +223751,A surfer looks back as another surfer catches a wave. +105670,Looking at the back end of a zebra while it's walking. +294350,A man preparing food in a restaurant kitchen. +210228,Two small planes flying with each other in the sky +216603,A white plate with two fried eggs and greens. +292622,An empty park bench covered in graffiti with an old homeless man sleeping on it. +446894,You can mash food together so that no one will know what it is. +17095,The older woman is admiring the peacock walk. +303704,A child's train sitting on top of snow near a building. +111817,a cake with some cup cakes around it +503144,Two brown horses standing side by side behind a wooden fence. +398440,A herd of cattle and a dog hanging around on a hay covered ground. +337814,A woman and a man playing a game with remote controllers. +436273,a man sitting at the end of a counter using a couple of tablets +274939,The corner of an intersection with a trash bin and clock. +278961,There is more than one roll of toilet paper for this toilet. +246199,A table topped with baskets filled with ripe bananas. +201072,A tennis player prepares to react during a match. +536343,A bath tub in a small bathroom with towels hanging over it. +134882,A cat laying on a bed in front of a book shelf. +163117,A large group of people in a field with kites. +15600,A little girl putting a carrot in her mouth. +577926,Three giraffes are next to a cage of green food. +35599,Cafe tables with table cloths and orange umbrellas over them. +295472,A group of people sitting around a large wooden desk. +575367,A simple kitchen with wooden counters and stove. +303204,A little boy sits at a breakfast table pointing at the camera. +343552,A cat on a table with a computer mouse. +287550,A man wearing glasses and a half looking at his cell phone. +245448,A man standing with his motorcycle outside of a repair shop. +124442,A man gets ready to launch a colorful kite on the beach. +497838,A pitcher throws a baseball across the field. +89258,a vase that has some flowers in it +128833,A bus that is sitting by a car in the street. +98683,A lush green field with people flying kites over it. +489209,A group of black bears together in an enclosure +576085,A little boy walking down a street next to young men skateboarding on it. +343903,food on a white plate with a colored place mat and pink table cloth +484751,Three computer screens showing a panoramic beach scene. +224257,A man stands with a yellow stick near a kneeling woman. +448779,some horses are running and a man is riding in front +171603,A person sitting in front of a laptop computer. +431896,A yellow and red train traveling down train tracks. +548561,Two kids sitting at a red childs table. +423204,An older man sitting at a table with a birthday cake in front of him with candles on it. +116252,"A small tablet attached to a key board, with a mouse." +440959,A person on a skateboard standing in front of a wall with graffiti. +540763,A restroom has a toilet and a decorative sun wall plaque. +197226,An airplane landing at a new airport. +79588,Some people standing in front of a large building. +400347,A half of a chicken with bread slices next to a wine glass. +41899,a young child on a skate board indoors +23741,The motorcycle is tilting as he turns through a cave. +113890,"The hands, shirt, red necktie and jacket of a man" +234965,School buses parked along the curb of a city street. +245898,A woman holding a Nintendo Wii controller in her hands. +285,A big burly grizzly bear is show with grass in the background. +218911,Collage of a clay cow in a paper boat in a music sheet sky +428168,A long train is driving away from a nuclear power plant. +417957,An empty brown bench standing in a field next to a wooded area. +416311,A group of men playing baseball with people watching. +466561,Young man batting during a sunny baseball game. +243825,Woman riding a bicycle on the road in the city. +180013,A STREET WITH CARS AND CONSTRUCTION WORKERS WORKING. +324818,a couple of birds are standing on a branch +163065,The steam boat is docked next to a three story building. +409364,A woman riding a skateboard at a skateboard park. +127920,A brown horse standing in the middle of a forest. +177149,There is a garbage truck surrounded by people on a road +10012,a vintage photo of a baseball player +394801,The bushels of bananas on display are purple. +464134,A baseball field; young children are the batter and the catcher while the umpire and the pitcher are grown men. +516508,Brown and golden clock sitting below a large window. +408808,Two toothbrushes and toothpaste in cardboard and plastic packaging +522108,A stainless steel refrigerator sitting on cardboard in a kitchen +278535,A stop sign with a truck leaving a business establishment. +343534,Posed doll holding hands with two teddy bears +176778,A cat standing next to a white toilet near a bath tub. +388399,a cat lays on the ground playing with a toy +556765,A baby elephant having fun playing in a river. +29308,A bed in a bedroom next to a slide glass door. +381914,Two elephants stand next to each other in a field +55524,A large clock that is in between two pillars. +533464,allot of plants surrounded by concrete with a building that has a clock in the background. +497145,a large horse is pulling a cart with a person in it +365339,A group of people standing on a bitch flying large kites. +294712,Two young child skiers are headed down a small slope. +7784,This is a large kite flying high in the sky. +478723,A kid on a skate board at the top of a ramp. +388082,Some sunscreen that is sitting on the table. +223857,a woman with purple hair is taking a picture of herself +287035,A desk with a lamp and a computer sitting on it. +285275,"A large, wooden bed with intricate details on the headboard." +483965,a close up of a person eating a hot dog +88031,A composting toilet is shown for sale at a store. +453792,A woman standing next to a black snowboard. +189446,a container seperated by two compartments having fruits and veggies +539079,A skier in green pants heading down the slope +537389,a road that has a big red stop sign by it +302193,A long post with a clock atop it with several torches blazing behind it +177810,A couple of teddy bears sitting on either side of a Christmas Tree. +540784,A red brick tower with narrow windows and a clock. +137294,A man reaching into a freezer while standing next to a woman in a park. +551199,A red bus driving past a group of passengers. +504470,A pair of personalized stuffed plush teddy bears +469300,A man standing behind a car topped with wine glasses. +11347,An Aer Lingus plane touches down on an airport runway. +230936,A small boat in the water and a person. +396200,A person on a skateboard on a street. +254892,a giraffe that is standing in a field. +300147,Three zebras gathered together in a field looking at something. +132132,BLACK AND WHITE PHOTO WITH THREE MEN AROUND A PRODUCE STAND AND PRODUCE IS IN COLOR +66027,Several zebras from behind standing on grass plain with distant trees. +119075,A woman petting a horse in a enclosure. +74000,a tower with some clocks on the top of it +181816,A statue is sitting on a street bench. +255315,Pregnant mother and daughter playing with Nintendo wii controllers. +205523,A blurred cat sitting in front of a screen. +389168,A large living room has many items thrown around it. +90365,The image is a closeup of a computer keyboard. +427649,A small white boat sits on some calm water under a snow capped mountain. +193798,An up close picture of a computer mouse on a desk +340263,A group of men on a field playing baseball. +74951,A group of young children playing with a soccer ball. +477470,A red traffic light with vehicles passing by too fast to capture. +364274,"A clock shines brightly on a dark, cloudy evening. " +55467,A group of teddy bears sitting around a table sharing drinks. +199449,A living room with hard wood floors filled with furniture. +565941,A man serving a small chocolate cake on a white table. +574633,A woman is taking a picture of the singer on stage. +86800,A woman in a blue dress holding an artistic vase. +350961,Group of books sitting in front of a white couch. +133090,A tennis player lunges on a tennis court. +178331,a couple of buildings near a busy street +492990,A man standing in a room holding a drink and a game controller. +551669,A truck driving down a dirt road next to parked boats. +432276,A dog sitting in the back of a truck under a blue umbrella. +104647,A group of bikers riding on the back of motorcycles. +61831,A pair of parking meters with a coffee cup between them +459923,A man with a surfboard walking into the ocean. +111970,Cat lying on ground between pair of parked bicycles +60125,A man riding skis down a snow covered slope. +255592,A group of children are sitting together wearing dresses and suits and ties. +251531,Many people prefer a rare steak when eating out. +499957,"Patches of cloth, cotton, and scissors sitting on a table." +45435,A person is holding a cell phone sideways in their hand. +425100,A group of men standing on top of a grass covered field. +1340,A clear vase with flowers sitting a little table. +332923,The person holding a colorful umbrella is in a black and white scenery. +162732,THERE ARE PEOPLE PLAYING A SOCCER GAME ON THE FIELD +510230,a street sign with a stop sign below it +28842,A young person riding a skateboard in an empty water channel. +26348,A very large double door refrigerator in a kitchen. +18149,A dog in a cage looking out of the cage. +197528,A cat sitting on a window sill behind mini blinds. +458613,Two cars driving down a street next to a green bus. +383018,A train moving overhead at a train station behind a tree. +325237,a black and white photo of a building and two people with an umbrella +117404,A little girl sitting on her dads back. +480643,A man walks while a large number of sheep follow. +38817,an image of a tourbus picking up passengers +343914,"A baby that is pressing on a small, black suitcase." +195281,A man pointing to something in the refrigerator +24755,I am unable to see an image above. +557135,A large empty bathroom with a walk in shower tub. +300206,a person surfing down a river on a surf board +475779,There is an elephant standing near a tree. +498638,A boy serving a tennis ball on the court +39914,A woman and small child are trying to fly a kite. +72776,A large jetliner sitting on top of a tarmac. +158887,A man and child wearing skis in the snow. +106140,A large passenger airplane flying through the air. +542934,"Cabinets, a sink, a dishwasher and a microwave in a kitchen." +311378,There is a man with long hair with a pizza in front of him on the tablr +564132,A bicycle on a road with a motor bike at the front +455005,A baseball player swinging a bat during a game. +8042,A boy and girl playing a game with remote controllers. +269632,A bright yellow transit bus is making it's way down a street in the dark. +37846,A woman wearing skis holding two ski poles. +449259,The giraffe is eating amongst the tall trees. +460632,Someone riding waves on their surf board in the ocean. +22599,an athletic dog playing with a frisbee in a grassy field +47071,A herd of giraffe standing on top of a grass covered field. +152962,A man standing on top of a blue tennis court. +347823,Two young children sitting side by side while eating food. +272323,A man is trying to pull off a skateboarding trick on his ramp. +350334,Street signs for 92nd and Bayview in front of utility wires against the sky. +115626,A man that is sitting on a motorcycle. +372641,A laptop computer sitting on top of a white desk. +102461,There are several horses getting ready to race. +53229,Street signs at an intersection of roads in front of a brick building. +380906,A bench sitting next to the ocean with purple bows on it. +398525,Stop sign at the intersection of Adams and Idaho streets. +99260,A man wearing sunglasses and eating a pastry. +563697,A young Asian child holds a teddy bear. +407072,A red fire hydrant along the curb at night. +285597,The shelve has a lot of donuts on it +549754,Black and white action photograph of a snowboard competitor +296459,The man is sitting in front of a laptop with his hands over it. +119773,A black and white photo of a man holding his child in the water. +165464,A man cutting a cake with a knife. +353405,Two chairs are next to a vase with a dried plant in it. +470521,A fuzzy cat is sitting in a black purse. +38296,a person standing up in the living room playing an interactive video game +231879,A woman holding a birthday cake with one candle near a man with a baby in his lap. +481130,A long row of nice looking chairs in the sand. +231942,A group of zebras drinking water from a pond next to trees. +491062,Tow bread items and a red sauce sit on a plate. +543686,A cat that is standing over a bowl. +580983,there is a man on a skate board doing a trick +540834,A man on a surfboard in the water. +177015,A man using his laptop computer while a cat sits on his lap. +518937,Tow umbrellas that are side by side above chairs. +544272,A man wearing goggles and a helmet driving on a motorcycle. +501858,A rectangular pizza with an egg on top. +61181,This shot is of a crowded highway full of traffic +170595,"A plate with a peanut butter sandwich, ham, and tomatoes. " +507684,A historical church has an ornate clock face. +91909,A police vehicle is driving on a city street. +401892,A young boy trying to get his striped kite to fly. +26942,A gray tiger cat sitting at a wooden table on a chair. +302520,The cupcakes are covered with small toy beach scenes. +378147,a person in front of a projection with music notes +37109,A piece of cheesecake and 2 pieces of an English muffin. +408439,Cliffs rise on the edge of a placid lake. +73045,A pile of assorted donuts and pastries for sale +281259,A young boy holding a baseball bat on top of a cement area. +350171,"The people is playing a tennis game. +" +326919,two red white purple and blue jets and buildings +381792,A bath tub sitting next to a white toilet. +412639,Two people are standing and talking to each other with a bus in the background. +210761,a person opening a fridge to get some food out +366714,A truck parked in a parking lot with a blue sky background. +517855,a tennis court that has a man with a racket +354948,Boys and men are lined up for a group photo. +260657,A worn and a new sign for the same Mexican food restaurant. +442979,Three sheep standing in the brush near a small tree. +190923,"An urban street with a streetlight, one way sign, and people walking." +269089,A sandwich cut in half served with coffee +170311,People are watching a performance by the clock tower. +573926,a close up of two luggage bags on a counter +158254,a number of small birds on a body of water +35778,A zebra statue in front of a business sign. +579247,A street sign mounted to the side of a traffic light. +52949,A sign warning drivers that there are children at play. +10793,a red train parked in front of a train station. +546782,Traffic mirror reflecting the intersection at Race Street. +512974,A wii computer game system on a desk with computer in background. +146997,A flower vase that is very colorful. +292330,A dog sniffs a baseball bat on a baseball field. +19631,Two trucks parked on the side of the road near each other. +237814,A baseball batter up to plate about to hit the ball. +367205,A bus on a divided street near a stop light. +374487,A professional motorcycle driver riding his bike on the track. +362483,A brown teddy bear laying on top of a dry grass covered ground. +447354,A person smiling next to a whole pizza. +8548,A silver airplane flying low in the sky. +199908,A person in a wet suit on a surfboard riding a wave. +403345,A bunch of bananas on a leafy stalk. +352334,A bathtub with candles lit up around it and a stool next to it. +410375,A green wallet on top of a folded t-shirt and an assortment of other items on a night stand table. +576827,A beach scene with chairs and an umbrella. +329323,A group of people who are standing together. +17115,Two zebras are standing together next to the fence. +533488,a person riding a skate board in a pool +263177,A busy intersection in a city has many tall buildings and advertisements. +431570,"A person riding a baby blue motorcycle near haystacks +" +98029,a table with many plates on it with a bread basket +288000,A cup filled with umbrellas and canes next to a white wall. +312889,A man leaning against a desk wearing a business suit. +443453,A woman in a blue outfit holding a tennis racquet. +400916,a guitar an amp a desk a keyboard and a monitor +340884,a elephant walking in a dusty and rocky area +198486,The reflection of a woman in a rear view mirror standing next to a bus taking a picture +524799,A young child riding skis down a snow covered slope. +6789,An electric tower in front of buildings on the road. +361085,A marina full of boats nearby a seaside town +532827,The craft table has several pair of scissors. +201463,A man with a beard standing next to a man with a tooth brush. +512118,Two dogs are fighting over a toy banana +62210,a bath room with a toilet a bath tub and a sink +292480,A small containers filled with fried chocolate food. +33405,A woman is walking her two dogs on the beach. +423694,A man sitting on a chair on a boat dock. +574509,A piece of chocolate cake that is on a glass plate. +93154,Signs along a street on a rainy day. +571200,A bus that is very rusted and damaged. +76619,a funny cat in front of a tv monitor +63973,A couple of sheep standing in the tall grass. +203317,A red and white bicycle next to a building and door. +574208,A brown and black dog is holding a red frisbee. +508373,"A skier is about to start a race. +" +516798,A red pick up truck parked on a field next to another truck. +198752,a five layer cake made from different shapes +268944,A couple of airplanes sitting on top of a runway. +548706,A bathroom sink and towels hanging on the door. +322894,Two birds that are standing on rocks near the water. +325357,Metallic looking container sitting in front of a brick wall. +457848,A line of parked motorcycles with the edges of image blurred. +566105,A machine that is making glazed donuts that are falling into a pan. +486162,this stop sign has many stickers on it +94865,A man swings a tennis racket and falls onto the grass. +381721,A man and two cats sit on a bench beside a body of water. +182469,A stop sign sitting above a road barricade. +168337,Two people outside of a stone building near a red fire hydrant. +126110,The dog is perched on the seat of the car looking out the window +435270,A tray topped with breakfast muffin sandwiches on a table . +458549,A picture of a clean living room. +397351,A man holding up a bunch of root vegetables for sale. +449433,A small cake on a table with a sparkling candle. +158641,A blender sitting on a kitchen counter top. +464339,A brick fire place with a painting on top of it. +325064,A cat sitting in a living room watching an animated cat on television. +229848,A game room full of electronics and video games. +345782,The couple is enjoying the video game with the controllers.. +329903,Many small stuffed teddy bears have hearts on their feet. +560794,A bathroom with a sink under a mirror. +405222,Black and white photograph of battle reenactment with men on horses +444722,Two sailing boats sit without sails in a shallow river. +367442,A kitchen table with chairs and a space heater. +303260,"Two men, one dressed as a Roman warrior and using the phone, standing outside." +184121,"Four male subjects, young and old, that are enjoying winter sports." +183895,People watching a plane take off from a runway. +565635,two lines of motorcycles driving down the road while a crowd watches +117759,A woman is seen in the mirror drying her hair. +180718,A man holding a knife while standing over a sink. +80000,Two young sexy women holding tennis racquets and tennis balls. +219271,Large group of people surrounding a truck on a mountain. +434219,A catcher and player holding a baseball bat near home plate. +35795,A man with glasses holding a donut while seated on a desk +146112,A man standing next to a bike inside of a building. +157052,A white plate topped with two hot dogs covered in ketchup. +198154,Some food that are in some bowls on a table. +221713,A curly haired man standing on the side of the street. +37814,A pair of red scissors sitting on top of a piece of paper. +166586,A bunch of people in a big field filled with bananas. +55002,A metallic toilet sitting in a small bathroom. +469202,A bald man in a bathroom brushing his teeth. +304396,A very tall pink and white clock tower. +214494,Someone who is applying some chocolate on a cake. +573626,Wild animals standing in a forest next to a river. +186797,A decorated street sign for Queen Street with two blue signs below. +155270,A police officer rides a motorcycle next to a beach. +193194,A small room has a bed and desk with a laptop. +103603,people at a ski lodge walking around in the snow +114291,"Men in a park with frisbee, with trees, portable toilets, fence, bags, and other people in background." +500716,A guy holding a pair of metal scissors in front of his eye. +97679,A car with a snowboard on it's ski rack parked in a foggy parking lot next to two cars with empty ski racks. +455299,There are two keyboards and a desk top computer an also a mouse that is lit up with blue lights. +404608,A white wall mounted toilet in a bathroom. +249453,A woman cooking on a stove on the side of a building. +35148,there are cars coming down the street to a green light +529166,"A man in tiny, red shorts lifts his leg as a yellow Frisbee hovers near him." +21361,a stuffed animal sitting on a chair in front of a laptop +112117,A black and white picture of accessories in a store. +548962,A flat screen TV sitting in a living room. +282804,Cows standing next to a brick wall on top of straw. +242222,a red motorcycle parked on some gravel next to grass +211690,Two girls in a library seated at a table cutting large brown paper. +4211,A woman wearing a green dress walking across a field. +623,A woman on a bench is hugging a giant teddy bear. +528905,A GROUP OF PEOPLE PLAYING FRISBEE IN A GRASSY FIELD +426101,a cat lays down next to a glass with a straw in it +570169,a brown teddy bear and some wooden block toys +527995,Four skiers stop and turn to pose for a photo +241528,A small sink inside of a very clean and white bathroom. +572028,The two zebra are surrounded by a herd of deer. +279343,A group of fighter jets sitting on an airport tarmac. +261178,A clock tower looms underneath a clear sky. +236148,An older man backing up a truck with a bicycle in it's flat bed. +377738,A plate of food with a hot dog and a carton of milk. +182785,A man in a purple shirt riding a skateboard up a wooden ramp. +115245,A table topped with bags of luggage and purses. +534659,A kitchen with a metallic refrigerator and stove top oven. +309813,A white plate filled with pasta. and a fork. +415073,"A man smiling wearing a suit jacket, dress shirt and red tie with polka dots with a table and beer in the background." +299952,A desk holds a computer and leftover food containers. +304964,The woman is sitting and looking at something on her mobile phone. +278435,A man riding a red scooter down the street. +199510,A row of red and blue luggage sitting at an airport. +394133,A bedroom with a bed and chair along with a nightstand with lamp on top of it. +209989,a bunch of people that are on a bunch of snow +316107,A baseball player poses on a baseball card. +329850,To chili hot dogs and fries sitting on top of a white plate. +537827,Two baseball players stand near the baseball field. +536400,A black and white dog sitting on the edge of a patio. +34180,A person wearing a banana headdress and necklace +529069,A bathroom toilet with a light fixture overhead +108051,A pizza sitting on top of a cutting board on a counter. +364973,A table with many pieces of cut up broccoli. +297146,Table with a platter of pizza and a plate with a slice. +88269,A plate holding a grilled cheese sandwich and bowl of soup. +410278,A vase that has some yellow flowers in it. +89174,A man is smiling while holding the baseball bat. +489588,Several white sheep grazing on grass and clover. +391539,A woman stands next to a fridge that has several glasses on top. +127136,An airplane sitting on the tarmac in front of a hanger. +375324,A skateboarder is trying to do a trick. +304917,a dump truck carrying a car a building and a street +521221,A numbered Dirt bike next to a box truck +83736,A man with umbrella is exiting a triple-decker bus. +302110,A cat laying on a rug next to a sliding glass door. +99583,Skateboarder performing trick on side of ramp while his shirts off +516224,there is a yellow and silver train at the train station +121897,A man standing on top of a field holding a bat. +51339,four plants being grown outside in a planter +528351,A white expensive car parked on top of a cement slab. +164885,A man riding skis down a snow covered path. +22816,A little boy that is standing in the dirt next to a basket. +165547,An eating area with a table and a few chairs. +263068,A man in dark clothing is on a cement step doing a trick with his skateboard. +329653,Group of chocolate covered strawberries on square plate. +169679,A group of people standing on top of a snow covered slope. +62706,Two girls are posing outdoors under an umbrella for a photo. +26430,A beach blanket is set up near an umbrella and a stroller +499592,a big bed sits inside of a room +399567,A train car sitting underneath a enclosure near a pole.. +282427,A big boat anchored next to a big dock. +293378,An elephant walking on a dry flat land. +170545,A pay phone sitting on the side of a street. +283163,The airplane is majestic as it takes off into the air. +106206,A young man standing on the tip of a surfboard. +397354,A group of friends hanging out in a kitchen together. +278401,a truck is parked at the end of a street +267408,A few people looking at a television that's next to a laptop. +416911,"A person on a horse that has a decorated hat on its head and covering it's ears, with another horse next to it that has a mask covering it's eyes." +191533,Two sheep grazing in a green field with trees in the background. +454762,A truck filled with a pile of yellow bananas. +555322,A table and television in a small room. +111789,"A large elephants reflection in a cars side view mirror, with other elephants in the distance." +157592,A man hits a tennis ball during a tennis game. +133244,A man holding a tennis racquet on a tennis court. +171932,Skateboarders in a permanent park near a waterfront. +260525,A man is holding a flying disk over his face. +342025,The bathroom has a towel rack on the sink counter below the large mirror. +545101,A kitchen that is ready to have appliances put into it. +203292,Outside a window of an old large house +225312,A batter mixer beside a microwave on a counter +4092,The woman holding the video game remote looks shocked. +516185,Passengers are waiting on a green double decker bus +69926,Traffic jam at a busy hotel parking lot. +386739,A man sitting next to a woman while wearing a suit. +100090,A plate holds pasta and broccoli in a light sauce. +171382,A young man doing a flip on a skateboard in the middle of a busy street. +572620,A man riding a skateboard on top of a ramp. +570573,A remote controller made by Sony with a disclaimer on it. +514248,A toy horse is sitting on a sidewalk next a fire hydrant. +455483,A bathroom with two sinks and a shower. +313916,As two skiers make their way downhill a pair of skis are left vacant in the back. +529065,A man riding a skateboard down a metal hang rail. +24629,A red stop sign sitting on the side of a street. +364113,Two people riding different colored horses down a dirty road. +210883,A couple of men herding sheep down a road. +410097,All of these sheep have coats that are ready for shearing. +386821,A hitter swings at the baseball and misses. +312421,Several middle eastern looking stickers decorate a black briefcase. +195870,A boy raising his arm with a video game controller. +435034,A train traveling down train tracks next to a train yard. +395378,Two little birds with white chests sit on barbed wire. +466921,A street with market door openings is empty. +524002,an image of a couple that are on the couch +254516,A baseball player holding a bat next to a dugout. +95770,a kid is doing a skateboard trick down some stairs +134815,A kitchen that has wooden cabinets and lots of pots and pans. +160703,A table topped with two pizzas covered in sauce and toppings. +434511,A man sitting at a table using a laptop computer. +274233,A street sign at an intersection with tropical trees in the background. +144251,a public transit bus on a city street +134285,A man on skis gliding through the snow. +184972,A man who is wearing a tie with some words on it. +85747,Three boys are looking over the middle kids cellphone. +332141,A boat is parked near a dock on a lake outside a building. +432131,A person holding ski poles standing on a snow covered slope. +73729,A cat lying between a computer keyboard and monitor. +250912,A man walking on the beach flying a kite. +57703,A man and two women walking their dogs and hiking in the woods. +452931,A cose of a restaurant meal consisting of steak potatoes and broccoli +337375,A man riding a skateboard down a ramp. +150413,Two dogs survey the framing of a house addition +191721,A beautiful young woman holding a tennis racquet on a tennis court. +461248,The crowd is waiting for the event to begin. +320150,a man taking a picture of prizes in a claw machine game +398076,Here is a woman lying on a bed pointing her finger. +139858,A bird flying solo over a large body of water. +227134,"A red stop sign hanging from a pole with "" Never "" and "" Loving "" painted on it." +3779,A table topped with six glasses of booze. +459954,A woman peaking around a pile of old refrigerators. +178911,a public transit train on a train track with trees in the background +430519,A yellow and blue bus driving down a curvy road. +34873,A kitchen with a counter and a table with chairs. +457204,a group of people that are standing up on a tennis court +145620,a black and white photo of a person riding a dirt bike +572499,A group of baseball players playing a game of baseball. +329900,A double level bus on a street driving through a construction area. +267300,a dog laying down licking food off of a plate +248761,A person hangs off the side of a passenger train. +575032,A square white sink beneath an elegant mirror +118073,An image of a bedroom with a bed in the middle if the room +142346,An adult skier towing a small child by a ski pole. +143154,A little girl sitting at a table with lots of food. +561187,A horse is saddled up while a cowboy checks out a hoof. +236166,A man holding a small white dog while wearing a black hat. +442667,A large bus and a truck on a street. +383073,a large flat pizza that is odd shaped +114414,Men playing baseball with the batter swinging the bat +109445,A white paper topped with square slices of pizza. +270721,"Bathroom with white fixtures, tiles and corner shower." +127775,A large gray elephant with huge white tusk. +10580,Three giraffes are standing tall as their necks stretch up to the tree line. +118406,The soccer player jumps to hit the ball with his head. +284851,A small kitten sitting on a chair next to a small dog. +533329,A bowl filled with lots of fresh fruit piled on top of each other. +567290,A store is filled with chandeliers hanging form the ceiling and various furniture. +176563,a field that has some snow and a man skiing in it +118544,A man is looking at his laptop screen reading live posts. +501382,A person wearing sandels standing in front of a cat. +399942,A row of parked motorcycles sitting next to a tall building. +278449,There is a thin crust pizza on the counter +106712,Pot of different colored flowers on a wooden table. +357578,A fire/rescue truck in line in traffic +66008,A person riding a surfboard in the ocean. +325102,A man sitting on a couch with a plate of food. +28758,A giraffe and a zebra are in a grassy field. +493395,A rose blooms next to a train track. +575896,An airplane sitting on top of an airport runway. +208050,a group of people that are standing up drinking something +528936,Many boys sit in a group as a coach swings at a t-ball stand. +337488,a person riding a skate board on a skate park +219578,A dog and cat lying together on an orange couch. +261072,Two smart phones sit side by side both are turned on. +171809,a close up of a cat laying on a bench +147195,A picture of a busy downtown intersection with a tuning bus. +159662,A person on a court with a tennis racket. +15687,A man holding a tennis racquet as a tennis ball approaches him. +544883,a large and old brick building with a clock on it +94326,A white statue holding open a newspaper while sitting on a bench. +170654,A stove with the top unit with ehating elements removed +134290,A girl is blow drying her long hair. +458941,A vase with flowers and water in it sitting near blinds. +394458,Two baby gray elephants standing in front of each other. +96618,A dog sitting in front of an open door looking outside. +171733,A large blue tow truck towing a large tractor. +310445,There are people sitting at the table eating food +359833,A young boy reaching up to grab a red apple. +138648,An underground sign stands nearby the Big Ben tower in London. +175612,A figurine is standing on the pavement and carrying a skateboard. +98853,A man playing a game of tennis on a tennis court. +54300,Brown dog holding up a teddy bear in its mouth on the floor. +345401,The toilet is in a separate area away from the sink. +351598,A glass vase with flowers on a table +93411,A plane parked on the tarmac with with a connection for loading attached to it. +417857,A baseball player holding a bat while standing next to other players. +456756,A giraffe leaning up to a tree to chew on a branch. +510169,An orange and blue bus parked on the side of a road. +400567,A kitchen area with dining table and refrigerator. +43345,A very cute dog sitting by a bright monitor. +506656,a guy standing in front of a few horses. +412764,A crowd of people standing around a field. +386035,A woman in vintage hat holding a tan suitcase. +432843,A metal street pole with a street sign hanging off the side of it. +328306,A boy holding a tennis racquet standing on a court. +248678,A banana peal on a piece of board. +369511,An old picture back in the 60's or 70's of a group of men and woman. +235808,Several people stand on a sidewalk by a train next to a cart stacked with materials. +371869,A crowd of people crossing a cross walk. +254479,a little bear standing between a couple of tree branches +404464, Persons skating in the ice skating rink on the skateboard. +313811,An adorable baby under a blanket in a crib. +534268,A living room filled with furniture and a stair case. +410446,A group of people on a city street. +326938,The man has three grills outside to cook food. +114907,A lady explains the process of milking a cow. +52703,A woman sitting down at a table to a couple of pizzas. +545564,"A modern living room space containing a couch, and several chairs." +381639,A little girl walking along a row of orange cones. +265069,A guy on a motorcycle on a road. +90793,some people playing with some kites on a quiet beach +333746,Red stoplights that are next to a train. +563381,A couple of sheep walking across a lush green field. +182874,a pair of buses going down a divided road +64103,a couple of birds swimming in a lake +541202,A group of baseball players standing around a baseball field. +431988,A young boy riding a skateboard up a wooden ramp. +434513,Baked dessert item with fruit served on plate alongside beverage. +252292,"A city street with cabs, people and traffic lights" +510579,two surfers looking at the dark stormy looking sky +305030,A large clock sitting above a red Samuel Cooper sign. +264385,A laptop with a drawing of a person on it. +516879,A cat laying on top of a wooden cutting board next to a knife. +390068,People walk on the side of the street past a bus. +214200,"A red stop sign that reads "" Eating Animals "" below it." +547839,a photo of a train heading down the tracks +170629,A yellow bus is parked near people on the side of the road. +248786,Group of people in restaurant enjoying others and pizza +6306,A pool next to a dock lined with lots of boats. +179690,a dog that is sitting at a keyboard +109532,An adorable husky dog sleeping in a dog bed next to a fan. +103837,a person riding a horse on a track +533721,A table topped with a bottle of alcohol and a plastic cup. +1029,A large jet flying through a cloudy sky. +51181,Adult lying obscurely on park bench in wide open area. +348905,A guy in a jet ski goes fast in a curve. +123570,A man and woman under an umbrella on a sidewalk at night. +5569,Self photo in mirror of male with brown vest and jeans +469158,A boy riding a skateboard on his knees. The child is very young. +130566,A yellow train on the tracks with several cars +144481,a couple of vases that are on some kind of mat +173340,a female in a gray top is holding a cellphone +162114,A motorcycle is parked on the sidewalk outside a tattoo shop. +107851,A group of people walking through a field under the sun. +519112,An animal eating something on the ground +213773,a close up of a woman wearing a shirt and tie +363645,A huge crowd of young people has girls taking pictures. +442031,A bed sitting between two tables next to a large window. +183914,A man with a camera has a smoke in his mouth. +464814,"a living room filled with couches, chairs, tv, and windows" +519132,A blanket covered with various teddy bears and stuffed animals. +57760,many people on a beach with a kite flying in the sky +451391,A pile of leafy greens sitting on top of a table. +97857,A busy street with lots of car traffic. +197280,A teenager riding a skateboard on a half pipe. +537631,A young girl standing on top of a tennis court. +200739,A photo with many buildings off of a street with trucks parked in front. +489879,A person cutting a slice of pizza with a fork and knife. +160456,A woman standing next to two parked motorcycles and a child. +394009,A bathroom with a tub and toilet. +329687,A dog and a couple sitting on a wood bench. +221693,A husky dog has an orange frisbee in it's mouth. +62020,Giraffes standing next to zebras on a lush green field. +364009,a man standing next to a pink bus in front of a building +563271,These young skateboarders are enjoying an outdoor session +22420,A library or store is full of books. +224368,A man on a snowboard grinding a rail. +520956,A tall building with a massive clock on it's face. +43486,a traffic light on the same pole as a street light +222494,A traffic light with a smile green light above a red sign. +336300,two kids standing on twin bed playing with toys +97434,A person on a street next to a motor bike. +141517,THERE ARE ANIMALS THAT ARE GRASSING IN THE FIELD +425361,"An individual is capture in the stillness of the picture. +" +148830,The plate with many compartments has two orange bowls with food in them. +222833,A little boy is on a state board on the cement. +262938,Two stuffed animal dogs reading a picture book about dogs. +309510,A man riding skis down the side of a snow covered mountain. +507436,Someone holding out a bag of donuts with Japanese writing on it. +303744,A person flying a kite next to a lake and trees +518584,A large brown dog eating food out of a box. +407298,A kid with a glove and a ball. +533506,A woman taking a picture of a bottle with her phone. +325992,A laptop sitting on a cluttered office desk. +304481,A large white polar bear laying on top of snow. +17927,A group of five people holding tennis rackets with a tennis ball. +479939,A man coming down the hill on ski's. +543239,A large bear laying on it's back in water. +352576,A giraffe is standing outside in the woods. +156754,A small bathroom with a striped tile floor. +302094,a very nice draw showing a vase with flowers +379101,A teddy bear holding onto a Nikon camera. +442225,A smiling man in a brown shirt sitting in a table. +166704,Hands that are holding a piece of cake. +370103,A high clock tower standing in the sunlight. +43838,A small stove is shown with pots and pans. +309484,A dog having his teeth brushed with a novelty electric toothbrush. +99553,A large truck stops on an infrequently traveled wooded road. +152609,"A living room with tv and speakers, sofa and coffee table" +536006,Two guys one wearing a white shirt the other red trying to catch a Frisbee. +273155,female tennis player running to intercept the ball +77891,A group of people standing around a store selling kites. +37322,An orange motorcycle is parked next to a car. +202507,a lot of buckets of fruits including red and green apples +132587,A young man sitting on top of a white bench. +311190,A dog wearing a hat while in a car. +86317,A WOMAN STOPS HER CAR ON TH SIDE OF THE ROAD TO FEED A HORSE +155125,A man holding a slice of pizza at a wooden table. +169097,The parking meters are posted beside a cement wall. +219525,a woman walking holding a pink umbrella near a train +295420,A blue truck drives down a narrow street. +322194,A person stands under an umbrella looking out over a waterway. +362831,A desert dish has powdered sugar on it. +358195,A little girl wearing pajamas is riding on a skateboard. +578654,A living room with a blue and white wall paper surround a purple and white couch. +493205,"A white toilet with its seat up, and a roll of toilet paper" +319055,A woman is walking her dog across the street. +281163,A picture of a hot dog with ketchup and a drink. +51094,A herd of cattle that are grazing on some grass. +44952,three men dressed like cowboys riding on horses +107247,The double decker bus is heading south through the mountainous region of California. +501652,A child in a vehicle holding some toys. +463283,An alcoholic beverage with an orange slice in it. +4551,Dinosaur statue in a park with various kites flying through the air. +49761,A herd of cattle and zebra standing next to each other on a field. +46252,A batter ready to swing at home plate with an umpire and catcher behind him +288161,a kitchen with an electonic device above the sink +485943,A surfer in a wetsuit riding a wave. +235119,Close up view of a fresh baked cake with nuts topping +372764,Batter looking on at player at home base preparing to swing at ball. +121157,A desktop computer that is sitting on a desk. +506279,a close up of a glass of wine on a table +79634,A white plate topped with a sandwich and a bowl soup. +383293,"Close up of a brown horse looking into the camera, with a green field and mountain scenic as a backdrop." +522137,Three Mercedes Benz on the top of a train as cargo +507750,A person riding skis into a pool of water down a ski slope. +547102,A group of flowers in a vase sitting on a well varnished table. +577866,An old black and white picture of a bus and homes in the background. +262275,A young girl in a bright dress rides a horse. +440991,A display of vegetables is set up in front of a pickup. +364699,A blue and red vase on a table top. +551129,Heart shaped hot dogs and some pizzas on a big tray. +327592,A woman with glasses eating a piece of cake. +405249,a child blows out the candles on a birthday cake. +502358,A baseball player holding a bat on a field. +246532,A skier travelling down a snowy slope surrounded by mountains +189714,Two people that are in the air while snow skiing. +276066,A giraffe standing in dirt field next to trees. +173908,Woman interacting with giraffe at fence in zoo. +100187,A well lit living room with sofas and coffee table. +332205,A massive truck with giant tires sitting on a parking lot. +532007,Three people riding horses on a beach next to the ocean.. +230615,A man riding down the street in a horse and carriage +271666,There are two riders on motorcycles and mountains in the distance. +212688,A white polar bear laying on top of a pool of water. +540133,A boy in yellow shirt playing a game with a Nintendo Wii controller. +446459,there is a zebra that seems to be walking down a dirt road +125211,A zebra standing on top of a grass covered field. +49667,A large clock mounted to a brick wall. +246576,A young man brushing his teeth in front of a mirror. +398153,Someone is going thumbs-up to a fresh chocolate cake. +36226,Professional tennis players in a match beginning a point. +278966,this is a woman cleaning a public restroom +565230,two airplanes sitting on the air field another going down the runway +278829,A crowd sits in the stands as baseball players are on the field. +426631,"A man crouches down and extends his hand, as he anticipates catching a flying disc." +295409,Two friends are playing the Nintendo Wii in the living room +103509,A young man seems to be holding a Wii remote near the flower. +337366,A group of three children sitting at a table in front of a birthday cake. +450343,There is a white plate with a green vegetable on it +111109,A boy wearing a white dress shirt and sweater with shorts +3799,A street sign pointing the way to Jordan +84442,a big plate of food that has some bread on it +552829,A dog laying on a floor with a blue ball. +455448,A cupcake being decorated with frosted and non pareils. +193946,A group of monks standing on a street holding an umbrella. +171622,The person is riding their snowboard down the hill. +199438,a man and woman in a canoe with a young child holding oars +453162,a woman holding an umbrella and walking next to a graffitti wall +169562,Desk sits in corner next to the couch with a computer monitor and keyboard on top. +103306,A bathroom with a shower and a sink. +281868,A bathroom with a raised sink and a mirror. +361586,several people are purchasing tickets at a bus station +220255,A large commercial airplane sitting on the runway. +519874,A large brown bear swimming in a lake of water. +303738,A person rides an ATV with other ATVS +145335,a person riding a snow board on a snowy surface +135116,A furry long haired dog standing near a car +326222,A white plate topped with chicken friend pork. +359149,"two people with ,two umbrellas walking along a pavement." +26024,"A baseball player swinging his bat while his team watches," +550995,a man in a santa suit holding onto a wii mote next to another man holding a wiimote as well +356725,Three urinals in a row in a bathroom. +552364,A group of people sitting on top of a beach near the ocean. +569972,A para sailor with his board with sail in the surf. +320901,A person with a safety vest in front of a bus. +102614,A light colored sheep looking ahead in a road. +102159,a cow walking next to a person on a city street +226130,Two cooked hot dogs on a plate with parsley. +28115,A train with lights on riding down a track in front of buildings. +499779,A tray full of just bakes mini cupcakes. +542694,THERE IS A STUFF ANIMAL TOY WITH DIFFERENT PARTS +415856,A couple is walking three horses through a river. +408501,A blue and yellow train going down the train track +278166,A glass elephant figurines sitting on a plate. +391269,a room with a desk some couches a table and chairs +7072,A man doing tricks with a frisbee in front of a young lady. +42563,Railway car on snow covered tracks approaching urban area. +302077,"This kitchen is cluttered, cabinet and drawers are not shut all the way, and there is paper taped to the floor." +436130,A small kitchen cluttered with a variety of kitchen items. +261805,Several people are at an airport with their luggage. +35897,A sloping street in a small mountain community. +483432,a kitchen with white appliances and tiled floors. +74037,a couple of people that are dressed in red +191546,London is visible on a foggy day. +481064,Two men standing on a lush green field playing a game of frisbee. +373571,A woman standing next to a child holding a cell phone. +298405,A gentleman putting something into a pizza box in a restaurant. +15839,A twin door refrigerator in a kitchen next to cabinets. +456420,on the street showing a sign on the road +140963,A woman orders food from an outdoor vendor. +318080,two different bears fight with each other behind a log +344832,a little boy that is standing at home plate +540869,A man riding on the back of a red motorcycle. +483311,A crowded beach with many kites flying +470932,An elephant is standing and raising it's trunk on a raised wooden floor as people watch in the background. +12897,The people are at the airport with their bags +15818,A person that is holding a surfboard in their hands. +539793,A young man riding a skateboard up the side of a ramp. +454232,A red stop sign sitting under a couple of street signs. +307614,A living room with a table with a mirror above it. +519153,Two empty seats on a vehicle are in front of a window +205089,The interior of a studio apartment decorated with various pieces of furniture. +131203,An open laptop computer sitting on top of a table. +555685,Two pizzas that are sitting on metal platters. +213309,a pink toilet in a small flower patterned bathroom stall +10643,A bathroom sink sitting underneath a mirror in a bathroom. +264615,A herd of cattle grazing on a grassy field. +288501,A herd of brown cows standing in a field behind a wire fence. +308441,A woman holding a tennis racquet on top of a tennis court. +153973,A herd of cattle standing on top of a grass covered field. +374087,A box filled with fresh fruit and vegetables. +552973,A man riding a skateboard down the side of a ramp. +72839,A person who is playing piano under an umbrella. +215901,a big bowl of different kinds of fruit inside +511463,A woman and her dog taking a walk down a path in the woods. +206684,The man is sitting on the bench close to the asian section. +560700,A bottle sitting on top of a white shelf under a metal shelf. +562370,Two small brown and black dogs standing next to each other. +504248,A bathroom with a tub next to a toilet and a sink. +303653,two ladies riding horses there's a reflection of one of them in a mirror +115043,A man riding a white surfboard on a wave in the ocean. +221222,a herd of cows stand on some tiled dirt +509404,A train traveling past a brick wall near a tank. +90366,A dog sitting on the grass looking at a fake cow that is lit up at night. +183456,A person sitting at a table with two pizzas on pizza pans. +398948,A sandwich with meat in a wrapper on wooden counter. +6213,A shower curtain sits open in an empty and clean bathroom. +235964,A woman taking a selfie in front of a large mirror. +122602,A table with scissors and a bottle of podge next to a cutting board. +6949,A white bowl filled with salad and plastic eating utensils. +157159,A couple of teddy bears sitting on top of a table. +510735,An adorable little girl standing next to a brown teddy bear wearing glasses and a sweater. +21217,Two apples and a bowl and jar of applesauce on a cloth. +154230,There is a toy owl sitting next to books on a shelf. +53994,A pretty red white and blue parking meter by some shrubs. +497476,A group of people who are posing for a picture. +541351,A woman on a tennis court with a racket in one hand and a ball in the other. +39866,A little girl that is in the grass with an umbrella. +474471,Two different giraffes standing around doing nothing. +193261,A sign up on a post at an intersection in a city. +176168,a close up of a bowl with wood and screws inside +97964,Laptop and desktop computers next to each other on a desk. +88913,A lady making a funny face in a restaurant. +422221,A large gray elephant standing under a blue covering. +91716,An open window overlooking a city in a bedroom. +207969,A man standing in a kitchen next to a woman. +392022,A woman riding skis down a snow covered slope. +84693,A white train sitting in a train station next to a Bologna sign. +162952,A young lady is on her phone as a lady in the background looks on. +369323,A woman holding a tennis racquet on top of a tennis court. +304696,A group of people who are serving a cake. +488030,"Two Zebras are standing side by side, eating grass. " +376706,a bag with scissors with a zip on a table +216837,A bedroom with twinkly lights and a laptop open on the bed. +470784,A person carries a stack of boxes while people with umbrellas walk around the street. +478225,A train traveling past a group of tall residential buildings. +323668,A group of people standing on a hill tossing a boomarang +103863,A refrigerator and a stove in a small kitchen. +565485,A red bench and a person in a train station. +196483,A young woman standing next to another young woman. +400401,A competitive skier leans on their skis while going downhill +161567,A woman standing next to a man in a kitchen. +38710,A small kid reaching by a very big plate of food. +157516,A man sitting at a table holding a baby. +124983,A metal pole with four different street signs hanging on it's side. +351557,Man holding a rainbow colored kite in front of people. +109434,A bathroom with a large mirror above a white sink. +119752,"Cups, fruit and a person in a white t shirt" +3832,A white boat floating on a lake under mountains. +552832,A couple of people sitting on top of a brown couch in front of a TV. +436138,A small house with a wooden door and a wooden balcony. +188136,Table with water pitchers and bowls of fruit against the wall in huge kitchen +28714,A bicycle resting outside of a building door +324435,A man in a market surrounded by goods for sale +9941,A guy on a skateboard and pushing a stroller on the sidewalk. +60203,A hot tub sitting under a window in a room. +134167,Zebra sleeping on the ground next to standing zebra. +142999,a green blanket a white bed red pillows and pictures +317033,A man walking next to an elephant near an umbrella. +156696,a train on train tracks at a train station +435783,an elephant standing in a field of grass surrounded by trees +8204,A couple of trucks on a city street. +20913,A couple of hotdogs are on a plate +212801,Several small arc shaped kites flying above an ocean +460188,Many people skiing and snowboarding in the snow. +6658,The torso of a man who is holding a knife. +507893,The bathroom is white and looks very clean. +532989,The giraffe is resting while waiting for food to be served. +178512,A fleet of ship floating on a lake next to a shore. +453321,A zebra standing on a dirt road next to a fence. +406426,a close up of many different vegetables on a table +137699,Woman walking on a sidewalk in front of a street with a black vehicle. +115700,Two people sitting at a table eating food +355450,A table with a large vase holding flowers on top +147482,Little girl observing three octopus kites being flown +449909,A young boy standing on a field next to a giraffe. +97240,A stove top oven sitting next to a tiled wall. +501243,Three zebra standing next to each other on a dirt ground. +50322,a herd of zebras stand on some green grass +549965,a close up of a bench on a city street +193407,a person that is holding a umbrella +141468,A bear is taking a walk through the forest. +398652,A lot of potted plants sitting on a glass table. +236370,A crowd of people sitting in a room on to of a wooden floor. +471488,Two motorcyclists driving on a street with parked vehicles. +190680,Two signs are shown up above a street. +357176,Two riders on horses kicking up dust while training. +503790,three different motorcycle couples riding down a road +282672,A beautiful young lady with a flower in her hair talking on a cell phone. +229383,A group of people on public transportation stare at their phones. +158964,A couple are taking a ride on the horse and bug-gee. +259422,"A plate with pizza slices, chips, and cole slaw." +535889,A person with a robe on is fixing something on the ceiling. +124629,An older woman standing next to two children. +119513,a kid is in the air on a skateboard +297300,A white plate topped with a slice of apple and a fork. +493503,There is a one way street at the corner of Henry St. and Love La. +128034,Late night food carts are open for business. +168031,A ca teating green stuff off the floor +314667,A man with a racket plays on a court. +430273,Two trains riding side by side on two tracks +276693,A large brown dog walking in front of a woman holding two ski poles. +378962,An urban farmers' market with produce stalls and crowds of shoppers. +517082,Two young girls in sundresses under an umbrella. +464737,A pack of zebra standing in a field next to an ostrich. +444879,A small train traveling down the railroad tracks. +317560,A man wearing a hat and necklace made of bananas. +534300,A toilet has several toilet paper roll dispensers. +546444,There are some people relaxing and watching TV +311887,a bathroom with a toilet and a bath tub +454102,A group of people that are standing in the grass flying kites. +143671,A bunch of fresh carrots still covered with dirt in a basket. +84674,A little boy is being held on a lap while eating. +194434,An alcove in a room containing a couch and lots of pillows. +458168,A cow wades into a stream in front of a shack. +367082,A black and tan dog sits in an easy chair near a window with a polka dot shade. +133,A loft bed with a dresser underneath it. +569849,A goat stands in front of a man poorly dressed. +7108,A herd of elephants walking away from a watering hole. +376891,Woman selling doughnuts with doughnut stock in the background. +171192,A woman pouring glasses of wine sitting on top of a table. +285773,An open menu and bottles of wine sit on a restaurant table. +153013,A boy touches a frog on an orange Frisbee. +269020,an image of zebras playing in the snow +83142,Zebras crossing a bitumen road in the savannah +51594,A plate of colorful vegetables and a cut of meat. +293026,There are several boats docked in a harbor. +377183,An L shaped desk fits well in the window space. +182820,A man is riding a bicycle and flying a kite. +83766,Several bags are grouped together in a waiting area. +414698,a male tennis player volleying a tennis ball at a match +253036,A van driving down a street past tall buildings. +540172,A table set out with a plate of sandwiches and a cup of coffee. +82731,City neon signs at dusk with a lot of those signs in Chinese. +514097,A pretty young lady talking on a phone. +263679,A man standing on top of a sandy beach near a colorful kite. +79472,Office space with office equipment on desk top. +194216,An outdoor area with a large bear and two smaller bears facing the wooded tree area. +70943,a person is holding up a small child +167792,The skateboarder is trying his trick in the garage. +303016,a tractor trailer parked in a parking lot +91500,The two teens are playing video games in the rec center. +571182,A green tour bus in a city and a group of people walking around with umbrellas. +136334,A person skiing next to blue check points. +496102,A clock tower stands above an old building. +484280,A bowl of soup with broccoli next to a fork. +256769,A man sitting at a game eating a hot dog. +68411,Blueberry stuffed beanie teddy bear sitting on a table. +273551,Several motorcycles that are parked on the side of the street. +466273,"A view of Big Ben from over the water, during the day." +339678,A man holding an umbrella next to a frozen over fire hydrant. +4286,a giraffe in a field with a person near trees +342515,A long row of motorcycles parked side by side next to a garage. +236874,A young man wearing a catchers mitt on top of a baseball field. +45229,A kitchen filled with a wooden cabinet and a large window. +423984,A white plate topped with pasta and vegetables surrounded by garlic bread. +245311,The donut robot machine is mechanically making donuts. +274091,"A street with brick lined buildings, British flags and a clock tower." +334194,A large black bear standing up to reach something +368820,A man that is holding two suitcases over his head. +321971,A man and woman in a vineyard with bottles and glasses around them. +289949,Old cars and horse drawn carriage on a tropical city street. +164440,The tennis player wearing white is swinging his racket. +147453,A bunch of very pretty umbrellas very close together. +183614,A street sign on the edge of a street. +248235,A woman sitting at a table with birthday decorations. +437494,a man and his dog are standing on his paddle board +492647,A herd of zebra walking across a field. +416569,Glass shelves on a display with tags on items. +304387,A person kiteboarding over the ocean on top of waves. +205866,A woman and a dog stand on the ocean shore near some boats. +135037,A zebra and boar running through a field. +500200,Several glass vases on a counter holding flower arrangements. +409247,a cat is outside looking at a computer screen +367558,"3 slices of pizza with bell pepper, olives, and avocado" +385119,A couple of elephants standing next to each other. +256590,"A head-on shot of a stone building labelled ""Scalextric Palau"" " +335473,The microwave and the television were set at the street for recycling. +115796,a male in a black shirt playing frisbee on some grass +344231,Two kids are playing soccer out in the sun. +225945,There are two people standing in the snow getting ready to ski. +462814,Two women shake hands during the tennis match. +408950,A red double stacked bus traveling down the road. +370138,A kitchen with a wooden counter next to an oven with a stove. +181403,A jean skirt has a bottom on it made of ties. +327225,A locomotive train sitting on display at a museum. +214447,this image has no pictures displayed to describe +526767,A bathroom with a stall shower and a white sink basin. +516341,A person is completing a task while on a laptop. +470832,A baseball player holding a bat over a base. +1955,A person that is flying a kite in the air. +571584,A bus is driving down a narrow street. +549427,A young man in glasses is eating a carrot. +232309,A man standing on a beach flying a kite. +510152,A man flying off the side of a cliff on a snowboard. +146929,A plate with a hot dog and french fries on it. +311518,A small green boat in a pond outside an office building. +217269,a curved desk with keyboard and monitor on it +285799,Person pulling a sled through a trail of snow. +10256,a red fire hidrent with red leaves everywhere surrounding it +328301,Car parked in the parking lot next to the pier +289883,A very long blue and white bus pulling out of a parking lot. +359278,An airplane on a large field stand on the ground. +422916,A bathroom with a tiled floor and a sink. +131418,Three people walking down a sidewalk while holding umbrellas. +372252,The zebras are eating grass in the fence. +437119,a small dog is laying on a bed +307989,A couple of kittens standing around metal bowls on a tray. +555217,A man walking through a lobby pushing a luggage cart. +144300,A motorcycle and people looking a travel vehicles. +399573,A clock sitting below a city street and a second tier of a store. +561128,The yellow refrigerator and stove both have eyes painted on them. +365511,The street sign is clearly visible for all to see. +86946,A large umbrella and a chair on a street. +198139,A car is parked next to an old fashioned parking meter. +232760,A man with a surfboard is walking along the beach. +175356,A team is playing baseball in a field. +164759,a living room with a long couch in it +184401,A teddy bear laying in bed with a blanket over it. +452321,A large bus on the side of the road. +319654,A man in apink shirt passing an old shop in a market +41147,Three white flowers in a vase with flower images on it. +133503,A double decker bus driving while it snows. +188696,A parking meter sitting on the side of a road. +564355,a man is out in the snow with skis +185789,A red and yellow train moves past a modern building. +25252,An old church building in an urban environment +271943,A large cat sitting on a wooden bench next to a building. +379190,A street sign is underneath a concrete overpass. +165422,A large brick tower with a massive clock on it's side. +361933,A red stand with various baskets of fruits next to bar. +224010,A toilet is used for outdoor decoration beside a log cabin building. +162249,A flat screen TV sitting on top of a step in a bathroom. +454957,A man stretches to hit the tennis ball. +371241,there are a few kids on snowboards on the snow +57198,A partially eaten banana face down on cement about to be stepped on by a shoe. +471415,White sheep grazing in a grass pasture near stone walls. +548894,Hey man inspecting another man's tie in a social gathering +474741,A man in a pink shirt wearing a tie holding a bag. +123598,A small bird sitting on a beach next to the ocean. +128372,People loading onto a orange and silver metro bus. +530631,A man works on a motorcycle inside a motorcycle repair garage +112240,THERE IS A BOAT IN THE WATER UNDER THE SKY +409099,A delicious looking bunt cake on a table next to fruit. +534038,Black and white photo of a man pulling a boat on a beach. +156397,A herd of sheep grazing closely together in a field. +485307,A little girl sitting on the couch playing Wii. +72752,A dining room table and four wood chairs. +330741,Two green and yellow trains parked near a train station. +40497,a street with some vehicle on it pass in front of a market +95843,A double decker bus is shown that is not in service. +161983,A white bowl sitting on top of a table. +564166,A baseball player standing next to home plate. +463601,Man in khaki shorts and green shirt holding a blue kite. +455608,A very cute plate with some tasty looking treat. +12231,A plate of food that includes meat and broccoli. +573709,A group of boats parked on the dock. +480122,A bowl of bananas sitting on the kitchen table. +171915,Two red buses are passing on the street. +318721,A woman looking at a polar bear through glass. +260172,A display case filled with bakes goods in front of a store. +448113,A man eats as he sits at a table of appetizers. +243189,A large clock on top of the face of a building with statue adorned on top of it. +168330,An old clock is illuminated at night on a street corner. +73668,A young person posing for a picture while on skis. +188804,Lady standing at a computer screen that's sitting on a table. +80949,A KITTEN NAPPING ON THE KEYBOARD OF A LAPTOP. +535094,A person holds a bottle toward a brown and white baby cow. +17207,A bus stuck in traffic on a busy highway. +113556,A shelf in a room full of books +256552,A large pillar with a stop sign on top +50767,A man smokes a cigarette outside on a building. +100624,A woman walking down a street talking on a cell phone. +548090,A person skiing down a snowy mountain side. +359232,A baseball player holding a bat standing next to home plate. +326555,A woman riding skis down a snow covered slope. +74430,A beach with dining tables and huge straw umbrellas. +85826,"A baby sits on a bed, laughing, with a laptop computer open." +346175,A boy rides a skateboard down a street with his arms outstretched. +423215,The large freight train is pulling many cars of cargo. +16523,"Doorway view into a bathroom with a sink, toilet and mirror." +398438,A person cutting a multi layer cake with a knife. +219771,Man in trench coat enjoying food item on skewer in office setting. +449546,We are looking up at a street sign with a building in the background. +366406,a sink and an oven in a kitchen +216277,A table topped with a half eaten apple next to a smart phone. +127270,A woman holding a tennis racket in her hand +432503,A person riding a skateboard over the cement and flags. +205333,A pair of skiers on the top of a ski slope with clouds and large mountain in the background. +184400,A train as it travels down the tracks over a bridge. +147422,A group of people riding surfboards in the ocean. +531086,"A kitchen area with a refrigerator, dishwasher and cabinets." +564419,The animals are in the cages hanging from the wire. +365745,A black bomb squad truck driving down a road. +301634,a group of vehicles parked next to a firehydrant +128224,"A brioche, cantaloupe and cup of tea on a table. " +27564,A couple of young ladies sitting next to each other. +160057,A while plate holds a large sandwich and pickle. +574413,Three people standing on the back of an elephant. +411596,A view of person in a mask holding up a tooth brush. +145383,A small airplane flying over a field over crops. +262873,A snow boarder is going down an indoor slope. +259814,Four people on horses race inside an enclosed area +68878,A cat that is sitting on the hood of a car. +519688,A woman wearing a blue coat holds a furry animal in her arms +570539,An older man is sitting on the bus above a movie advertisement. +521288,A baby elephant following its mother's and grabbing her tail. +400573,A man biting into a doughnut with a sly look. +351588,A YOUNG LADY IS ON THE COURT PLAYING TENNIS +409496,A man carrying a surfboard across a field. +497096,A small red airplane on the runway at the airport. +131869,A man that is standing on a tennis court. +539678,There is a bear sitting by itself on the grass. +99592,A man with a skateboard flying a kite. +181265,a bride and groom prepare to cut the wedding cake +516404,A black dog sleeping on top of a bed. +328098,A traffic sign is displayed on a freeway. +20947,An old rusty truck is parked on a grass field. +509403,A family outside in a yard playing frisbee with their dog. +17756,A swan is floating down the river by the boat. +28978,A partial close up of a computer keyboard and some electronics. +49740,A child baseball player tries to hit the ball +486770,people gathered around a table getting slices of pizza. +51437,A female surfer lying on her surf board in the water as a wave pushes her +105150,Several small blue boats side by side out in the open. +543178,A kitchen with a black stove top oven. +5352,A piece of pizza that is on a plate. +402115,The young man is eating a hamburger with a pizza folded into it. +57283,A young girl holding a piece of food and her hand over her mouth. +58705,A man wearing a helmet while holding a banana next to a woman wearing a helmet. +101656,A young man standing next to a bike +483656,Giraffe walking through a field next to a forest. +42757,A black and white picture showing small children in a dormitory setting. +450399,a man is standing behind a glass counter +397742,Two pieces of food sitting on top of a white plate next to a fork. +49648,A young man kicking around a soccer ball on a field. +304305,A mother and son elephant walking through a green grass field. +484346,A doll on a bed with the book Goody Two Shoes. +528496,A plate filled with a cut in half sandwich on top of a black table. +240434,A peep hole view in to a nice looking room. +325736,A person skiing and somersaulting on snow clad mountains. +126538,A young person kneeling down on a grassy park. +263355,Four people skiing down a side of a snow covered slope. +187278,a person showing another person how to surf +279784,A picture of some food on a table. +547000,A man walking across a field covered in white snow. +492254,Clock with Roman numerals atop a tower on a street corner. +11525,A metal plane flying through a blue cloudy sky. +300732,A black cat standing over a glass bowl. +33835,A beautiful woman standing next to a man holding a Nintendo Wii controller. +312524,A tall cake is decorated with flowers and white icing. +18687,A group of people standing around a lake. +78803,A woman with an umbrella walking beside a stone wall. +574525,There are two people playing a video game together +393971,a picture of a girl with a cat on a laptop screen +498319,A refrigerator is in a room next to a bookshelf and a microwave. +372249,A black bird sitting on top of a wooden fence. +404923,A baseball player holding a baseball bat is getting filmed by a camera man. +504024,The Giraffes are almost camouflaged in the terrain behind them. +82259,a couple of men are standing on a snowy mountain +146627,Two kids playing in a room with a beach ball. +327807,A small group of people standing outside of a train next to small shops selling fruit. +187434,A couple of zebra standing on top of a lush green field. +136720,A dog is in a bathroom with chewed toilet paper. +12147,A guy performs a skateboard trick in the air. +38332,A single elephant standing in a large grassy field +199575,A puppy is looking at a paper bag in the kitchen. +229478,An opened fire hydrant spills water onto a busy street. +60704,Two people resting beneath a tree near several green street signs. +19158,A bus driving down a road next to a park. +19904,A group of motorcycle cops riding down a street. +516316,An antilope is eating grass in between two zebra. +492084,A young girl brushing a woman's teeth on a couch. +134691,"A dirty bathroom consisting of a toilet, bath tub and sink. " +300012,A person on a skateboard does a trick on stairs. +334417,A man looks on as he finishes his meal +73588,A naked little girl holding a cell phone. +239492,A man sitting at a bus stop on a green bench +345275,A traffic light with a misty mountain in the backdrop. +450324,A train signal sitting on the side of train tracks. +529539,A tennis player is hitting the tennis ball. +284954,Two bicycles that are parked on either side of a fire hydrant. +280073,A rider on a horse in a green field. +252857,A bathroom filled with a toilet next to a tub and a sink. +392534,A number of signs pointing to different businesses. +371883,a bathroom with a toilet with a sink +141197,a woman is standing in a room taking a picture of herslf +248924,A person on a snowboard is in the air preparing to land on a snowy slope. +104406,A guy in a white t-shirt rides on his skateboard. +355424,A pizza with many toppings is on a plate. +570834,Bikes are being transported in a subway car. +157021,A large jet flying through a gray sky with four engines. +554296,A person with an umbrella next to a street. +305472,A very tall building has a clock on the front of it. +120046,Two zebras are sitting on the ground. +358247,A bunch of bananas bundles together with a lady taking pictures +327565,A collection of photos of an old motorcycle and parts. +427471,A giraffe standing next to a pile of dead wood. +189842,The room with the yellow walls is empty. +570688,Several colorful kites in the sky by several persons in the ground. +34915,"An open refrigerator containing various fruits, vegetables and jars." +333683,A kitchen with a metallic refrigerator freezer next to a sink. +102848,Many people with skateboards on a large sidewalk. +194184,A couple of cars and some watermelons on a street.. +480551,close up of the edges of a pizza and words printed on the plate its sitting on +130352,A school bus and pedestrians crossing a bridge in a city. +90645,Cluttered apartment with packing being done with clothes +152214,"A man in a suit smiling at the camera +" +31825,A skier coming to a stop in white powdery snow. +118638,A baseball player swinging a bat at a ball. +134689,there is a very tall giraffe standing in the wild +298994,The vegetable are laid out neatly at the table. +187821,Two adults watch as a young baby holds a tennis racket. +282366,a city bus drives down a street next to a building +218093,A man in glasses drinking from a wine glass +86738,A catcher is returning the ball to the pitcher while the batter waits. +308545,A little child riding on top of a white horse. +210388,Some people are walking in the snow and having fun. +540774,a dog with its head out of the window +219170,"A laptop, keyboard, monitor and speakers on a hardwood floor." +395364,Several people riding on a motorcycle with an umbrella open. +33345,A room with marble floors and the door open. +268943,A lake filled with water and a kite flying over itl +561412,A clock tower is featured against a cloudy blue sky. +88040,Multiple plates of different types of food on a table. +22215,A large blue train on a steel track. +425790,A row of skis sitting up against a fence. +62824,A metal pole with two blue street signs mounted two the top of it. +271588,A small dog sitting inside of a piece of luggage. +164091,a creepy doll sits in a yellow basket +76522,A black and white cat laying on top of a couch. +535151,a close up of two plates on food on a table +553306,A white clock tower sitting next to a large body of water. +29406,A bench sits in the a garden park. +392670,a large air plane on a run way +5601,A large body of water sitting below a mountain range. +84980,a dog is herding some sheep and some people are watching +333737,A man with a white umbrella posing with some foliage. +23320,A large cake shaped like a cup covered in coco powder sitting on a white cutting board. +314034,A herd of cattle is feeding at the river's edge. +455751,People milling about a bunch of flags on display. +300876,A woman with two children sitting at a table with plates of food. +404479,A large jetliner sitting on top of an airport runway. +560298,A white bath tub sitting under a window next to a sink. +255279,A motorcycle parked in a parking lot next to a car. +322163,A group of three chefs preparing food in a kitchen. +422870,Two motorcycles sitting in a trailer that's being pulled behind an RV. +107360,The man is wearing coveralls and holding a snow board. +436111,"This is a small bathroom with a toilet, a shower, and a dirty floor. " +476710,A brown horse in a grassy field with trees behind. +343413,A man flying a colorful kite in a cloudy blue sky. +275515,A truck driving through a lush green field. +73182,The people are riding motor cycles down the street. +453731,A large brown dog laying net to brown wooden barrels. +532548,Two skewers of vegetables and broccoli on a plate +558235,red and yellow train stopped at a station +460683,A man wearing a blue tie with the ten commandments on it. +464296,A christmas wreath is hanging from the door +402858,A teddy bear is staring at a laptop. +312051,A person and a large elephant standing together. +213935,"A pile of oranges, apples and pears next to each other." +176606,"A goat alongside a house, trying to go through the bushes" +331339,"A plate topped with waffles, bacon and banana slices." +495291,The giraffes are spending a lot of time in the forest. +341424,A break room with a sink and a microwave. +439215,Looking down at a cup of hot chocolate in a saucer with spoon +51495,The wing of an airplane flying above a beach. +9466,A brown and white cat sitting next to a pile of shoes. +162902,A group of four people standing next to each other in the snow. +512320,A man with a backpack on one ski at the top of a ski lift. +462324,a male skateboarder in a white shirt is doing a trick +576327,A zebra standing in a tree filled forest. +431401,A vase sitting on top of a counter. +233888,A boy with a baseball bat is in front of a TV. +266712,a street sign with a sky in the background +514990,A little boy eats pizza beside the water in a restaurant on board a ship. +314356,A man tossing a frisbee in the air. +246435,A cop riding on the back of a motorcycle next to another cop car. +98717,A collage of boys dressed as baseball fans. +305879,A man who is holding an umbrella out of a window. +422655,A cat walking under a black open umbrella. +46269,A man riding a skateboard across a street. +313359,A couple riding on the back of a horse drawn carriage. +498975,"Street signs at an intersection, silhouetted against trees and a blue sky" +459566,A woman's shoes as she holds a dog on a leash with a shirt around its waist. +569415,A large grey elephant walking through a dry grass field. +232538,A yellow and blue train is next to an overhang. +444382,A wooden kitchen table and bench on wooden floor. +489088,Racing horse being guided by an asian man. +102668,A large white bus drives through an intersection. +571564,A tennis player is holding his racket and waiting for the ball. +458275,A man with a tie and hat on standing in the grass. +247808,A person holding a tennis racket and jumping into the air. +137300,A man flying a kite on a lush green field. +35160,A couple of women standing next to each other. +261175,Wide shot of a kitchen and a kitchen table with a plaid tablecloth. +430302,A man riding on top of a surfboard next to a woman in the ocean. +406129,A person hitting a tennis ball with a racquet. +243134,A living room with two couches and several chairs. +262617,"Several full pizzas are in the window, ready to be purchased. " +448928,A computer chair that is in front of two computers. +27530,A small sport utility vehicle that is loaded down with a bunch of luggage. +13985,A man with eyeglasses working on a laptop computer +7155,Someone's suitcase left outside against the wall opened up +552947,The man in a costume suit is talking on a cell phone. +310980,A person looks at a very big computer monitor. +536708,a plate filled with sausages sitting on an outdoor table +469329,A grilled hot dot on a bun sitting on a plate next to corn chips. +509824,a couch in a living room with three pillows +469896,A lady laying on a bed reading a book. +33652,A pizza sitting on top of a pizza pan. +380525,A cat that is looking at a pastry. +38488,City skyline showing a tall lighted building that has a clock and the name of the company on it. +147488,A woman with outstretched hands and an umbrella above her head. +411303,A lot of people that are sitting around together. +544140,people gathered around standing and sitting on a yellow and blue looking box +168801,A DAD IS WITH HIS SON HAVING FUN +300324,A white and black checkered floor in a kitchen. +494580,the plate has a piece of fish on the side of it +114246,Three furry calves standing in a fenced area. +546987,A women who is taking a picture of herself with a cell phone. +24040,Three cross country skiers make their way across a snowy field. +84982,A red and white street sign mounted on a red pole with a pedestrian traffic light. +93620,A group of women and children walking across a street. +506595,a large vase next to a smaller vase on the ground +33815,A motor bike on a road with people seated on the roadside +49777,A group of travelers are about to board a bus. +50125,A silver and red bus in parking lot next to cars. +70280,Several birds stand and lay near the water. +434247,A group of people riding horses on top of a sandy beach. +142360,A man riding a skateboard through the air next to a palm tree. +72238,A man that has a happy new year hat on. +506449,A BOY IS ON A SKATE BOARD IN THE COURT +129989,A fighter jet flying through a sky above water. +567825,The sandwich is decorated in a very unusual way. +519815,The small bathroom has a bathtub without a shower. +553931,A display case filled with lots of different kinds of donuts. +475685,The skier is in position to make a jump. +406050,"A street corner showing University Street, Gerard Schwarz Pl and 3rd Avenue, with a building in the background" +548164,A train docked at a train station. +489528,An outside doorway to a restroom showing a destroyed wall and damaged floor. +429044,a person attempting to surf through a wave +83452,Closeup of a computer dashboard with flashing lights and numbers. +572784,A giraffe is looking at the camera with a smirk on it's face. +190323,A very tall building with a plaque hanging off of it's side. +364399,Four bowls filled with different types of food. +92115,A train sitting next to a platform in a tunnel. +114055,A man is doing a trick at the skatepark. +301937,A woman rides a horse in the middle of a street. +92519,A table of desserts that include cakes and pastries. +575643,And animal that is standing under a tree. +335065,Adults and children gathered at large family meal. +564830,A television that is on a wooden stand. +402626,A dog chasing several sheep through a pasture. +5225,A little baby eating food on a table with a bear on it. +447733,Man on a skateboard riding a cement wall. +574703,Mississippi paddle boats still make their way on the river. +179273,A plate topped with different kinds of foods on a table. +411707,A man hitting a tennis ball on the court +371194,A couple of small horses walking across a field. +35062,a sleeping child in a bed with a black and white cover +76155,A hairy brown cow laying on top of a field. +3771,A brown cow laying on top of a lush green field. +334809,Blue and white plate with meat and brussel sprouts. +513149,A couple of signs mounted to the sides of a building. +69328,Woman throwing a rope towards horse at rodeo +181446,A man scowling while looking in a refrigerator +402808,A picture of two Zebras nuzzling along the ground. +79011,Three giraffe standing next to each other on a field. +310310,Two photos of two people looking at each other. +401901,A pair of children kick a ball together. +254745,"An office desk with three laptops, a computer monitor and keyboard." +378701,A row of up right surfboards inside of a building. +92145,Some very pretty brown cows eating near a fence. +42492,A kitchen with a center stove top island. +343149,People stand outside of a series of stores. +577524,a couple of giraffes are standing in a pin +40016,a man in red is skiing in the snow +464911,A picture of a barbeque sandwich with lettuce on a bun. +148067,A red plate sitting on top of a table with food on it. +365540,Statue artwork carrying red umbrella in man made pond. +467776,A mother and it's calf standing in a field. +520941,A group of people shopping inside a foreign market +274957,a street sign on a pole against the sky +248206,A woman riding a surfboard with her large dog. +142697,A man flying through the air while riding a surfboard. +369791,this motorcycle rider is wearing the same colors as his bike +551581,A man using a laptop computer on top of a wooden table. +504487,A couple of giraffe standing around a tree. +108272,"A policeman, cameraman, and reporter stand near a police checkpoint." +554084,A bear that is sitting down with a red hat. +271457, A bench sitting on to of a field of tall grass near water. +473015,A duck swims in some water near some vegetation. +507833,A large semi truck with a advertisement on the side of it. +227044,A black and white cat standing in a white bathroom sink. +130432,A woman is leaning against a stop sign next to a road way. +63648,A young child standing next to a large box. +175205,Two bento boxes with a variety of healthy foods. +99927,a clock that is sitting on top of a table +464706,A fighter jet flying in the sky leaving smoke trails. +421433,A large man is sleeping in his bed. +194756,A man driving a boat down a river next to shore. +137927,A toilet that is on the ground in a bathroom. +98721,a group of people sit on top of a grassy hill +229599,A crystal bowl filled with oranges on top of a table. +452700,A busy city street with several double decker buses in traffic +524436,Black and white picture of guy and girl in an embrace on a park bench. +553869,A girl standing on the sidewalk holding a blue umbrella. +29994,"Three metal containers of food, one with meat and pasta, one with fruit and one with bread and dates." +327892,People using their laptops in the backseat of a car. +502776,A woman playing tennis swings a racket overhead. +145628,A red stop sign topped with street signs. +367860,A large giraffe is looking at a person from the other side of the vehicle. +378134,People standing on the grass playing frisbee together. +484721,"Peanut butter, mustard an ketchup by two microwave ovens." +255974,A humming bird flying next to a red bird feeder. +574804,A woman that is standing up with skis. +521605,"A plate topped with meat, eggs and potatoes." +139004,A kitchen with canisters on the neat counter +440434,A set of three vases filled with green plants. +247986,A hand that is holding a cell phone with a picture on it. +23899,Three young men playing Wii on a projection television. +428739,A sandwich is on a long bun in paper wrapping. +176730,A young swimmer walks across surf boards being held. +12809,Two men are walking towards the ocean with their surfboards. +562150,A little girl holding a kitten next to a blue fence. +411630,A couple of jetliner sitting on top of an airport runway. +7050,a woman in glasses and hat paddles a canoe +247764,a large leafy plant coming up out of the soil +396209,A chair that is placed in an alley way. +51304,A large brown bull with long horns standing on a grass covered field.. +209803,A cheesy pizza covered in topping sitting on top of a pan. +576886,A group of people outside on snow skis. +90572,The girl was on a court playing tennis with her mom. +473299,A man riding a snowboard on top of a snow covered slope. +204757,A close up of a person's hand with a scissors cutting something wet. +3761,a woman wearing a cowboy hat face to face with a horse +52435,People sit in the sand or take boards out into the water on a small beach. +446958,A cake that has a bear on the top of it. +531532,Two women are standing next to each other. +147806,a man getting a hair cut takes a photo of himself +286849,A group of three giraffe standing next to each other behind a rock. +194288,A bathroom filled with a messy toilet and a sink. +69535,Two halves of an orange sit on wood. +199927,A woman eating a half an orange slice. +466787,A stack of banana's sitting next to a pear and a pile of apples. +498666,Many planes are parked on a plane run way +535506,She just finished chopping vegetables with the knife. +371256,A dark blue parrot holding a gray lizard in its mouth. +102349,A child on a horse riding down a busy city street. +309418,A woman is brushing her teeth with a white and yellow toothbrush. +149155,a bunch of people are in the water at the beach +166190,A skateboarder catches major air during this stunt. +408568,Yellow taxi parked on the side of the road with a meter in front of it. +404618,a black and yellow fire hydrant is near the street +290868,A grandmother standing next to a child in a kitchen. +66064, A set of three vases filled with water and flowers. +320350,THERE ARE PEOPLE THAT ARE ON THE SKIS WITH HIS DOG +504732,A woman with her face painted like a cat is talking on her cell phone +423161,Boats floating down a river going through a small town. +92196,Trio of roses ascending from a white table top canvass +426917,A red double decker bus on the street next to a car. +383450,three pieces of art made in white with gold details. +333480,A cheeseburger is pictured on a tray next to a cup. +12020,A man in a red shirt doing a trick on a skateboard. +108758,Two toothbrushes in packages with a mans face on them +341620,A woman with a child flying a kite in a field. +64240,Four identical motorcyclists viewed from the back as they look over their shoulders. +211837,A large number of zebras running in the wild. +505157,A young man riding a skateboard at a skate park. +49133,A stuffed animal in bed with the remote control. +53907,Three zebras are running out on the plain +433192,A laptop that is sitting on a bed. +246197,there is a white plate with food and a juice on the side +198658,A woman is using a laptop on the couch as a black and white cat lays on the keyboard. +271844,A woman walks down an alley with an umbrella. +440793,Lots of skiers ski down a hill while others ride a ski lift in the background. +422833,Two people that are looking at a laptop together. +84163,Large brown and white horse standing on dirt path +571012,A woman in white jacket on skateboard in a building. +44579,A man holding a phone up to his ear. +170293,A cruise ship in the harbor with mountains in the background. +392212,A zookeeper brushes an elephant within its enclosure. +172553,a small girl and two giraffes and some trees +69873,An old monumental building with a clock and a statue on its wall. +30828,"A person with an orange blanket covering them, sleeping on a wooden park bench." +120070,A man sits at a desk with two computers. +528972,A container is standing on a loading dock. +292697,The baseball player is prominent in all the featured pictures. +394002,Five dirt bikes are in the garage before the race begins. +111706,The vases are displayed in the glass case. +229601,A baseball player who is running on a baseball field. +561979,A dog sits on the beach between two large boats. +383229,A bunch of horses with jockeys in a race on a track. +279047,An open room with a tile floor and wooden cabinet +232262,an image of a cars driving on the highway +119779,Two white bird sitting on top of a street light. +444270,A person is in a bathroom and is taking a photo of himself in a mirrors reflection. +28532,A soldier hanging form the side of an army transport truck. +246270,A street filled with red buses next to tall buildings. +301575,Text written on a photo of a cat shutting in front of a television +78312,Looking up at the steel struts in the ceiling of a train station +488201,A wooden desk topped with a desktop monitor. +466392,A close-up of a calico cat wearing a tie. +165257,A large black counter top sitting next to a sink. +427091,City traffic and pedestrians are headed in multiple directions on the street. +329604,A woman walking through a forest holding a blue umbrella. +246069,A cutting board with an assortment of vegetables +271117,"The desk has a potted plant near a remote, books, and a cell phone." +157370,A woman on a ski slope wearing her skis +151184,A stuffed pink teddy bear laying next to a doll in a dress. +387761,Several buses and animals pulling carts on a road. +378795,"A picture of jell filled donuts, chocolate covered donuts and donuts with sprinkles." +89761,A toilet seat behind a tree in the open outdoor. +130399,bedroom of a girl and her dog laying on bed +312868,A desk with two laptops and a computer monitor with keyboard. +58472,"A bathroom with blue walls, a white commode and a contemporary white sink without faucets." +149444,ALL THE DELICIOUS TREATS DISPLAYED IN THE DELI. +550452,red and yellow train on a train track +478689,A hamburger and a salad sitting on top of a table. +348708,The banana is laying next to an almost empty bowl. +112634,A giraffe walking around in a fenced area in a zoo. +460049,A train moving on a remote area with a river flowing next to the railway. +452676,A man riding skis on top of a snow covered slope. +370839,A man with remote standing in a room. +418535,A man wearing a suit and tie and carrying something walkling down the street. +184778,A fire hydrant that has been painted many colors in a tropical area. +430762,A black pen is laying on top of a red pair of scissors. +404257,Woman standing in a dark wooded kitchen with a carton in her hands. +54959,A group of three microwaves sitting on a counter top. +224051,A bike is perched on a concrete girder on the road. +507714,Three zebras grazing in a grassy field next to shadow. +526143,a large giraffe eating something off of a branch. +47589,A flower in a tree that is blooming. +38963,A kitchen with lots of clutter a door with a large window. +124766,A man wearing a blue bow tie and a fedora hat in a car. +169682,"The hot dog, side, and drink are sitting on the table." +303937,Apples and oranges sitting next to each other on a shelf. +264441,A cat laying on top of a black office chair. +501665,A group of people are around a dining table. +285361,A man riding water skis while being towed by a wire. +500018,A person standing in front of an elephant that is laying down. +409842,A shower door with a white towel hanging from it. +114420,a yellow white and black bird and a bird feeder +21604,A man in a suit is wearing a lit up tie. +245642,Someones hand holding on to their bike while beside a road with a bunch of sheep +287570,A young girl is skiing as others are far down the slope. +559159,A kitchen with a wooden floor and white cabinets. +3716,there is a woman sitting on a bed using a lap top +33650,A bedroom area with a draped bed and a desk. +130508,A blue train rides down a wooded track. +253342,A large long train on a steel track. +225847,A white sink in a bathroom under a window. +328802,A zebra is in a shady tree lined enclosure. +312204,A large gray elephant walking through a lush green forest. +44801,A city street filled with traffic and buses. +548930,A church with a clock under it's pointy roof above a window. +471785,Two women eating hot dogs with mustard and buns. +434829,A row of clocks display the time for international travelers. +39961,A man dressed as a nun rides a skateboard on the sidewalk. +232993,A boy eats a slice of pizza at the dinner table. +535313,A white table holding various trays of food and fruit. +232692,a person riding a wake board on a body of water +232931,A room with lots of seats next to an entrance. +162675,Sugar donuts sitting in a white paper bag. +102654,Two giraffes are looking at each other in a wooden room. +173544,A PLANE IS HIGH IN THE SKY ON A VERY CLOUDY DAY +343315,A red fire hydrant sitting on a patch of green grass. +503106,A man riding a red surfboard on a wave in the ocean. +484026,Two black birds sit on a log bench near the ocean. +520012,A tray topped with lots of breakfast foods. +94614,A person in a green jacket skiing down a slope +350340,A tray with a hot dog next to fries and a drink. +71687,A cat sitting on top of a pile of white towels. +127914,A person rests his skateboard on his toe. +474862,A lake is flooded over its banks several inches and people are sitting on benches. +456077,A surfing simulator with actual water in the city. +500100,The dog is pulling a woman on a skateboard. +333167,A person holding a microphone near a sailor who is talking to a woman. +127135,Small black and white pig on wheeled cart with protest sign. +406152,Some women who are walking while holding red umbrellas. +459887,A group of slightly bruised banana's in a bowl. +164637,A picture of pink bathroom sink and a mirror. +550784,A four post bed in a spacious room with an ottoman +347144,A group of men cutting a white sheet cake with a sword. +514249,A white fire hydrant sitting next to news paper dispensers at night. +250299,there are many glasses of whine sitting at a bar +47204,A green fire hydrant on a city sidewalk. +438811,A motorcycle drives on the street beside a city bus. +553081,A family of giraffes stand together beside a wood fence. +470288,A group of people is holding their cell phones up to the sky. +327527,A large crowd of people huddling under umbrellas. +439015,This is a close up of a zebra's face. +538344,a little girl is sitting outside in the snow +479596,a bunch of fruit sit on sale for the public +325919,A train engine carrying carts down a track. +503005,A man riding a horse with trees and buildings in background. +549937,A boy in a white shirt does a skate board jump. +35395,"A long table set with a variety fruits, vegetables and baked goods." +479953,A soccer playing getting ready to kick a ball during a game. +359310,"A man on a motorcycle with a passenger car attached, parked on the side of the street." +5124,A soccer player trying to score a goal. +175831,Two people on mopeds passing in front of a building. +145025,A man sits with his bike on the beach +188132,A tall castle like building has a clock over the window +445435,A smiling woman dressed in black holding a hot dog. +475398,A woman standing next to a table holding a sheet cake. +391648,A white clock tower next to a brown building at night. +472595,a small microwave oven that is supposed to be installed in a wall but sitting on the floor +552320,Two smiling men posing with a tasty looking pizza. +215787,A couple of women preparing food inside of a kitchen. +298680,A bowl with carrots and a spoon sitting on a plate. +114616,a close up of two sheep laying on hay +26025,An old Acme factory that is by a stop light. +49151,A couple of people sitting in a living room in pink chairs. +313990,A large clock tower towering above a city with clocks on every side. +446206,There is a train and bus in the cityscape. +48185,A clean bathroom with black marble counter top. +383435,a white cat sitting next to a pair of white hi top sneakers. +34877,Half eaten pizza sitting on a small white plate. +264201,A yellow fire hydrant sitting next to two trash cans. +131280,a group of pictures with baseball players in it +179114,Several people ride elephants through the water in the jungle while others ride a raft. +481793,A surfer rides the wave as it crashes down. +378712,Dishes of food have doll figures in them. +156370,A street sign near many cars at a stop. +382801,A man riding a snowboard down the side of a snow covered ski slope. +57415,A green and yellow train sitting under a metal structure. +416101,A male tennis player holds balls and the racket +401926,A young boy is dressed up in a black pinstriped suit and hat. +308793,Two skiers heading up the side of a mountain +345979,A close up of a person wearing a bow tie posing for a photo. +482707,Two nice motorcycles are parked in the grass +203085,a man sits on a toilet as he plays on a computer +444491,A man riding up the side of an empty swimming pool. +213132,A baseball player standing on a baseball field. +9105,A man in suit and tie standing by a white wall. +44478,A kite shaped like a jet flys through the air. +345711,A street sign depicting the corner of TUDOR CITY PLACE and E 42 ST. +79495,A man riding a wave on top of a surfboard. +156375,A woman in a white coat in the snow wearing skis. +5728,Several views of mean playing with a white disc on grass. +442822,Several rows of boats docked on a body of water. +290163,A little girl puts her hand in a pasta dish. +173471,A living room filled with furniture and a fire place. +378667,a person in orange is standing in skies +340665,A woman holding an umbrella standing next to a black wall. +19981,"A plate containing servings of meat, broccoli and beans." +508482,The open doors looking into a subway from the station. +436883,"A green bus traveling down the street, in a city." +566518,A skier is high in the air performing a jump while under a canopy of a dark grey sky. +513646,"A road with traffic lights, street lights and cars " +360064,A row of vintage cars in a grassy field. +258290,A marble tabletop that has a coffee cup and saucer one one side and two plates of food on the other sides. +45110,A woman on a small motorcycle waits in traffic. +357312,A skier is going down a snow covered hill. +103536,A woman is in action on the tennis court. +508731,A group of baby elephants standing next to each other. +392905,A single elephant standing in the sun in front of fence. +129784,a man that is typing on his laptop +248381,A white kitten standing in front of a water bowl. +353909,A blue surfboard sticking out of the green grass covered ground. +411330,a sausage pizza a butter knife and a black platter and plate +120874,The dog is standing on the boat deck. +14135,A man skate bording going up on a ramp. +97561,"A hotel room complete with a bed, desk and television." +493022,the woman is standing in the ocean with a hat +532693,A dog that is laying next to a book. +329806,A stoplight in a city with trees in background +247484,Two men sitting next to each other while holding a child. +462327,A plate of food and a cup on a table. +529355,Two women that are sitting on a bus. +142665,A baseball player waits for a pitch while an umpire looks on. +118320,a couple of cows are laying in a field +432239,A baseball player holding a bat on top of a field. +246221,A very close up look at a tasty looking pastry. +256566,a sleeping baby wearing gray red and black +256031,A surfer is depicted riding a wave on a surf board. +295614,A sandwich sitting with other food on a plate. +439777,A tall brown brick building with a clock. +20671,a man sits in a trunk while petting a dog +299409,An orange road sign sitting next to a black truck. +497297,A woman with dyed hair and wearing a tie poses for a selfie. +388009,An orange and white cat laying on top of a brown shoe. +395388,some people and some white sheep in their pens +24133,A guy is windsurfing on a cloudy day. +112702,A green bus is parked near a city curb. +397041,a close up of food on a plate on a table +94046,a baseball player getting ready to run to first base +173183,"Street signs, corner of Lynn and Bigelow.taken 11.01.2009 23:58." +500514,A large group of different people standing together. +337160,there is a baseball game on and many people watching it +229267,A few rows of tables with umbrellas on top of them. +68375,A white sail boat sailing towards a desert island. +39656,A close-up of a woman's high heels and legs and the suitcase. +142323,A blue street sign next to a power pole. +129765,People walk through a buffet line of bottled water and fruit. +482158,A street full of confetti and streamers with a building in the background. +362391,A group of red trains parked in a train lot next to a mountain. +1404,A boy sitting on a black couch with teddy bears. +577796,Three urinals mounted to a wall with white little dividers. +330387,A baby sitting on top of a surf board on the beach. +299716,a sign on a wall with a clock in the background +263412,A street traveling past red brick homes with trees. +404262,A giraffe walking in a sandy enclosure +374564,a dog carrying a bird in its mouth +196313,A group of people sitting and eating together. +324291,A little girl riding a pony and man holding the pony's reins. +91079,A modern formal dining room looks out glass doors to woods and ornamental grass. +9927,The two men are looking at the upright surfboard. +566758,A school bus is parked on the side of the street. +547783,Some very pretty giraffes in a big grassy field. +63650,two people riding skate boards on a city street +125698,a close up of a person operating a cell phone +399560,a small kitten inside of a laptop on the floor +497568,A commercial plane being serviced by two people. +529151,A table with several dishes of Asian food +350444,A group of children playing a game of soccer. +517570,a couple of boats are sitting in the water +488386,The cat fell asleep on the laptop's keyboard. +191000,A kid on a skateboard on the street. +175251,A toddler in the bathroom brushing his teeth +287535,A street crossing with a street sign for Mulholland and a no-U-turn sign. +320600,a close up of a cat in an opened hand bag +441471,A man with three different electronic devices on the table. +284509,three people riding skis on a snowy surface +26768,Two cats are sitting on a laptop computer. +257870,A man is eating hot dogs in his mouth +3947,Many sheep are grazing in the green field. +45070,A girl in white and pink shirt riding on a horse. +133485,Tall flower arrangement in a pitcher by a window. +326550,Black and white photograph of a person holding a surfboard by water. +526132,Several Zebra are together through the fence. +285106,A woman walking in the rain while holding an umbrella +466449,A street sign and traffic light on a pole. +311392,A black and white cow at market in her stall. +305871,Several street signs posted together on a poll. +30796,A double decker bus at night on a London street. +376939,a little boy in shallow water on a surf board +49683,A black and yellow bike making a turn on the track +511251,A stack of black bags sitting on top of an airport floor. +212553,A large living room with a kitchen in the background +278771,there is a baseball player practicing his swing +106344,a man in a hat is in a crowd +302260,A black and white dog wearing a Santa Claus hat lying on the floor. +425609,Three mini cupcakes are displayed with two forks. +314515,A car is carrying several bikes on a bike rack. +243158,A picture of someones living room with two sofas and a coffee table with a blue flower vase on it. +471097,A white car parked next to a parking meter in front of a parking garage. +315257,A bird with outstretched blue wings is sitting on some bird feeder. +406103,a scene of old cars possibly from the nineteen fifties and an old fire hydrant +219873,A train traveling very close to houses next to a street. +414487,A cat laying in a leather chair near a wall. +498758,A man riding on the back of a motorcycle down a street. +441862,Man playing WII while and infant and dog interact. +303893,A beautiful little girl sitting next to a little boy sharing a meal. +143247,A living room with a green chair next to the window. +60332,A pizza cutter shaped like a spaceship ready to cut a pizza. +106661,a number of motorcycles in a lot +328499,A brown bear cub and a raccoon eating berries in the woods. +333406,The woman smiles while posing with a big cat in her arms. +351166,A little girl laying in bed with a tray of breakfast foods. +426075,A baby zebra nursing off the mother zebra. +102400,A brightly colored red and green bus is parked. +252559,People walking by a building with a unique drainpipe. +44054,Group of people watching something with man recording in room +255966,A white plate topped with a fruit-pancake sandwich. +431190,A group of people are lined up skiing. +138503,a policeman on a motorcycling driving on the road smiling +348306,A bike leaning against a sign in Scotland. +118366,A person that is laying down on a surfboard in the water. +168032,A stack of plates on a counter next to a pan of vegetables. +434371,A TV set sitting on top of a shelf next to movies. +60409,a roman numeral clock with extra hands showing +429593,"A den with a television, compact discs, dvds and a couch." +418175,a kitchen that makes food has pots and pans. +207937,A person with an umbrella walking down a rainy road. +252269,A pizza topped with flowers on a pizza pan sitting on a wooden table. +570781,The woman is jumping in the air to catch the frisbee. +225869,THREE PEOPLE OUT SURFING THE WAVES UNDER A CLEAR SKY +168353,a couple of people that are cutting cake +30851,A beautiful young lady taking a selfie in a mirror. +517938,A baseball player hitting a pitch with catcher and umpire behind him. +227478,"two women sitting on a park bench, one looking over her shoulder" +295270,A white and brown bench sitting on a sidewalk. +147818,A half bitten doughnut next to several baskets of strawberries. +235239,Two zebra waling across a dry grass field. +60886,A group of baseball players cluster together while wearing blue and white uniforms. +401860,Vegetable and cheese slice of pizza on white plate. +142340,A white toilet with a blue seat on a display platform. +230964,A person riding a skateboard up the side of a wall. +344758,A ceramic bowl full of a variety of fresh fruit +305368,View of a clock on the top of a building. +143098,A baseball player swinging a baseball bat during a baseball game. +313166,A man in a yellow and black ski suit skiing down a mountain. +236290,A man carrying a blue piece of luggage near an escalator. +382263,A man with a Santa Clause beard kicking a soccer ball. +118911,A zebra eating some grass in some open area. +450400,A man is dressed in all black has on a black hat and glasses +521717,A woman on a tennis court is swinging a racquet. +402922,vendors standing at fruit stands at outdoor market. +248276,A hand holding a donut covered in coconut. +487435,A woman riding skis down a snow covered slope. +545317,A bathroom with a vanity mirror next to a white toilet. +476652,A couple of giraffes that are standing in the dirt. +388395,A row of buses sitting next to each other in front of a tall building. +434693,"A close up of a fire hydrant, near a house." +458778,"A small room with a sink, microwave, and dishwasher." +288874,A mirror reflecting a clock next to a shelf in a kitchen. +65231,A brick clock tower with an ornate clock. +40839,A woman holding a white and purple umbrella. +368611,a large passenger sitting next to a loading doc at an airport. +451668,Coats hanging on hangers on a dock +496575,A group of people riding skis while holding ski poles. +242619,A white plate topped with sauced covered food next to broccoli. +49269,A horse in a pasture of tall grass observing an energetic dog. +531126,A young pretty lady kicking a soccer ball on a field. +145781,A dog licking the top of a beer bottle +273859,"A kitchen area with stove, shoveling and a dishwasher." +496980,Someone about to ride a skateboard on a ramp. +389453,A young woman poses by a giraffe statue which appears to give her a kiss. +374982,A young girl standing in front of a pizza. +473623,"A white porcelain toilet with the lid down, in a bathroom." +204162,A young man riding a skateboard on top of a skate park. +300989,A clock tower rises above the Port of San Francisco building. +442428,A large white bathroom with large sink and windows. +484397,Person on a motorcycle driving on a paved course. +364079,Two people on a motorcycle driving up a street. +86357,A large bird flying underneath a cloud blue sky. +551550,A closeup shot of a two different kinds of plants. +190738,A baseball player standing on home plate holding a bat. +87483,Sheep grazing on a grass covered field side by side. +535934,There is no image here to provide a caption for. +195817,A larger dog and a smaller dog play with a frisbee. +437269,Two people wearing ski equipment standing on top of a ski slope. +481573,Boy standing on a skate board as seen from under the board. +29252,A red pole with multiple street signs hanging from it's sides. +375786,Kites being flown along the coast line in the morning +59949,a white cat covering itself with an umbrella +138054,A baseball game is being played on a bright day. +276323,A red motorcycle parked next to a beach near the ocean. +342929,A man riding a wave on top of a white surfboard. +71136,A pizza on a metal pan with people sitting around a table. +437651,A group of women stand in front of a table covered in small plastic cups. +57323,People riding down the street on their bikes. +53364,A group of girls all colorfully dressed dress with umbrellas. +169152,People on different parts of the beach flying kites. +156643,Person cutting cake at a theme restaurant characters in background. +450075,A person helping a woman put on a tie. +168832,a living room with a couch a table and chairs +502055,There is a desktop computer with a monitor and keyboard. +543025,A man with a bat in his hand and another man has a musical instrument. +111867,A group of boats floating on a body of water next to shore. +270148,A cat is curled up into a ball near some teddy bears +58253,A colorful umbrella sitting under a blue sky. +322031,A group of people looking at an elephant. +22191,A single toilet on black and white tiles. +276638,People riding snowboards down a snow covered road. +510898,A bunch of yellow and red apples are shining. +221610,A living room with a floral area rug and a fire place. +397268,I am unable to see the image above. +249884,Flatbread pizzas baking over an open flame on a grill. +538828,A traffic light sitting next to a tree near a sign. +77351,A green commuter bus pulling into the bus station +14257,Two men walk down the street in a city. +118432,A crowd of people flying kites on top of a field. +459342,A parking sign hanging from the side of a building. +458052,a cat that is eating some kind of banana +409369,a buffalo and a giraffe are in a field +20111,A man surfs outside in the rushing rapids. +152702,A woman standing next to a white horse on a lush green field. +391620,A WOMAN IS STANDIGN NEXT TO A WHITE HORSE +236721,The meal is ready on the tray to be eaten. +429160,A small employee break room with a table and microwave. +481582,a group of people are with a horse in a stable +9699,a couple of red and white planes are on a runway +231088,6 open umbrellas of various colors hanging on a line +334321,A large white dog is sitting on a bench beside an elderly man. +528600,Young Asian people sit on the street texting +335631,A view of a bunch of sheep lined up with a man behind them. +504224,A young man crafting something on the lawn outside. +265256,A man that is standing in the grass with a kite. +190218,A group of people stand next to a baby elephant. +107094,A man riding skis on top of snow covered ground. +42534,"""Head shot"" of a zebra against a stark background." +101620,A bunch of very cute signs hanging by a business. +195561,A bronze statue holding an open black umbrella. +390704,a person riding a snow board on a snowy surface +517777,A bottle of champagne with two glasses next to a single rose. +442614,Two giraffe standing next to each other on a dirt field. +74092,A woman hitting a tennis ball with a racquet. +6864,there is a man walking threw a hallway with his luggage +447602,A small child riding a toy tractor near sheep. +502854,Several white vases have puffy flowers in it. +441814,a group of young people pay nintendo wii +546658,A man in camouflage snow suit next to snowboard on ice. +492075,Two giraffes eat grass out of a cage hanging from the ceiling. +19292,A group of skiers on a snow covered hill. +328785,A red stop sign and a person on a street. +554978,A couple of elephants walking across a river. +17859,A fire hydrant sitting on the side of a street. +376469,A plastic cup and food sitting on a tray. +242907,A small bathroom stall with a toilet and seat covers +324785,A group of cages stacked on top of each other near a body of water. +251892,A tray is overloaded with a food assortment. +497375,People in a kitchen are preparing food with plastic gloves on. +348838,a little kid is standing in a kitchen +183502,The businessman has his boxing gloves on whikle he waits. +405998,A cake with animals and candles on it +274599,A group of various farm animals together in front of a barn. +490860,A baby elephant panting on a white canvas. +290595,A simple wooden bench is in the woods. +566096,Antique black and white photograph of people skiing +362482,A toaster over with an innocent stuffed animal with a smile roasting into it's demise. +189694,A woman stands in the kitchen using a microwave. +511321,there are two large boats that are in the water +98054,"A plate with chicken,carrots and mashed potatoes with silverware." +364743,A train traveling along a loading platform at a train station. +281820,two boxes covered with random photos of women +526360,this is a man with two computers on a tablwe +569976,A group of people stare up at something out of the frame. +563542,A car that is sitting next to a building. +343068,a bed that is in a room with brick walls +434217,A couple of people playing frisbee in the grass. +288890,A group of people sitting next to each other in a room. +504561,A woman holding a pink jacket next to a man wearing a tie. +347772,A batter is waiting for a pitch at home plate. +472803,A box of donuts are sitting on a desk. +288336,Many potted plants sit on the side of a road with a no parking sign. +271215,a close up of a hot dog on a plate near french fries +480036,many bikes parked in a parking lot very close to each other +337666,Graffiti marks the side of a green train that waits on its tracks. +297314,A pitcher winds up to throw a ball. +60340,A zebra in front of a group of large rocks standing next to a tree. +285352,a very small bathroom with a dirty toilet and scrub brush near by +475529,"Firetruck driving through city with lights on, fast." +225405,Two boys are playing with a soccer ball. +299067,"A room that has a couch, chair, and table in it." +359164,A couple of dogs walking next to a couple of chairs. +343198,A car wheel is flanked by a red suitcase and a triangular leaf mat. +375285,A group of men standing on top of a sandy beach. +38357,Two busses on street next to cars with buildings in the background. +297078,there is a male skier that is going down hill in bad weather +302958,A woman on a surfboard is about to fall in thew ater +140797,A plate of food with rice and a banana on it. +431370,A closeup of vegetables that include broccoli and onion. +231236,A beige tiled bathroom with white fixtures and a mirror. +283152,three brown black and white dogs are sleeping on a bed +146272,A man riding a snow board on top of a snow covered slope. +130262,a man on a surf board riding a small wave +362023,The small bird is standing on the back of a metallic chair. +168010,Luggage sitting on the ground on a dirty and grass field. +242422,A kitchen sink with a basket of vegetables and knives beside it. +522194,A man in a tie standing in a white room. +577373,Two people run across the field while playing with a Frisbee. +436044,A bird is perched a top a branch over a river +388643,an aerial view from a planes window of clouds and a sunset +572561,A photo of two youth soccer teams competing. +252177,Hard plastic chairs in a dimly lit room. +534988,Two zebras grazing in wooded fenced area and grass +398220,A yellow box truck with graffiti on its side. +535519,A large number of motorcycles parked along side each other in a row. +119194,A clock sits by itself in front of trees +308677,A young man riding a bike through a trail in the woods. +71857,a fire hydrant with a hose inside of it +168953,Man sitting at a table looking at silver cell phones in a circle. +131942,there is a young boy eating a candy and taking a picture +112928,A water hydrant is seen on the footpath. +307773,A small grey refrigerator on wheels and a sand fan +62510,A small kitchen has a stove and a blender. +329375,Several goats wearing bell collars standing in a field. +575355,A chair and a table in a small room. +397151,A girl is carrying a bird kite under her arm. +35076,A woman holding a blue umbrella while she walks beside other two women. +158846,A man serving the ball to the opponent in a tennis match. +208516,there is a glass of beer sitting next to a laptop +315403,"A crowd of individuals are gathering up and doing something. +" +75183,A room full of a group of people and their laptops. +333303,The blender is set on the refrigerator near two baskets. +173229,a man in a wet suit stands on top of a rocky hill +417779,A grey and orange fire hydrant next to a street. +205601,A person tends to stir fry in a kitchen while another person watches. +56326,a food platter with white rice carrots and some pieces of pork +382122,A large church building with a massive clock tower. +521587,A bathroom filled with a white toilet next to a sink. +221036,The baseball player has connected with the ball. +485139,a close up of a cat laying on a laptop +202799,A man flying through the air while riding a skateboard. +52166,Professional skier performing tricks for a group of people at a ski resort. +1436,Young man wearing glasses lounging on a sofa with three white laptop computers on his lap. +375278,An hand pets a cat in a suitcase. +537695,A cow has a ring in its nose near two men. +215072,A couple of people sitting in chairs under an umbrella. +166731,Signs posted on poles on a sidewalk next to a street. +192440,A clean bathroom is seen in this image. +502848,A man standing on a grass tennis court and holding a tennis racket in his hand. +76460,A baby and adult elephant walk around their pen. +578175,A train that is sitting on the tracks. +350447,A woman on a court with a tennis racket. +521141,A shot of a road in a city with a no peddling sign. +45040,A dog running past the waves into the ocean. +58737,A train parked at a train station next to another train. +538533,Street sign at the corner of SW 6th and Spencer +473208,Donuts and pies sit in a display case. +410319,Three woman with their backs turned in a kitchen. +78176,People standing behind a clock in a clock tower filled with massive golden bells. +545114,A man dressed in a helmet and goggles indoors has a goofy smile on and his hand raised. +421564,An infant is sitting in a highchair with a small cake placed on the tray. +274291,A man standing next to a black bag of luggage. +173302,A restaurant with red stools next to a bar and a blue table. +545581,The sturdy bridge serves as a train trestle +501023,Image of a street approaching California 138 with stop sign ahead. +321935,A black and gold street light in the middle of the street +296388,This is the side of an intersection with a red sign +152398,"A bed with blankets, and pillows on it." +550691,A red double decker bus on a street. +87885,A little boy playing a Wii game in his living room. +42296,a polar bear partially submerged in a body of water +123642,there are two sandwiches that are on two white plates +95383,A woman takes a picture of herself in a mirror placed on her bed. +192782,A lady on a tennis court swinging her racket. +212363,A dish of food including tomatoes and pickles and something on flat-bread. +160761,a close up of a person brushing his teeth +339468,A guy with a backpack looking at the ground to his left. +350051,A small horse is standing next to a water trough +377080,a cabin cruiser going down the canal toward a bridge +160661,A bird on top of a large clock. +309539,A slice of pizza on a white plate on a wooden table. +307442,A bus that is driving on the street. +562632,A group of men is standing on a sidewalk with buses nearby. +87617,two people standing near one another on a city street +17311,A cop on brown horse on sidewalk next to truck. +324383,Cat laying in luggage on bed with white walls +226874,A pizza topped with large tomatoes and cheese with ham. +258661,"A bowl of stew, and several plates of English Muffins and bread." +447978,A man in a wetsuit waterskiing on a lake. +424744,a bench in the middle of a field with trees near by +190734,A kitchen with a washer sitting next to a metal sink. +394259,A pot that has food inside of it. +115300,A fenced area with an attached sign housing a zebra. +174072,A man is holding a baby with a toothbrush in its mouth. +257660,A toilet with a light blue cover next to a shower. +318346,A partially eaten burrito in foil wrapping on a desk. +295574,A man taking pics in a bathroom with a cellphone +36528,The airplane is about ready to get take off from the runway. +79084,a woman playing tennis with many people watching +574487,A group of people on a field flying some kites in the sky. +409303,A person is standing on top of ski resort with the sun behind them. +239455,a boat in a marina tied to other boats +137211,Several large trucks parked outside among many tree's. +128812,An white oven with cookies being baked inside. +32193,Three giraffe standing next to two zebra on a lush green field. +361964,A man is sitting on his motorcycle and ready to go. +110765,A person is making a pattern on the floor with tape. +212704,Four girls who are looking at a computer. +537611,a very used and dirty harley davidson motorcycle +43758,a couple of sheep graze on some grass +203546,The bear is inside of the river stream. +427901,four people playing tennis on a tennis court. +128528,A dog wearing a red bag on his shoulder runs in the snow. +357044,An exotic horse kicks up its hind legs at another horse. +366157,A herd of sheep passing by people behind barriers. +424192,An uncomfortable looking bed situated in an alcove. +3849,There are several street signs in the highway +447233,A fried egg with broccoli and black mushrooms. +286606,a girl holding a frisbee in a pretty dress in the grass +139883,The animal food tray and cage is empty. +157220,A group of people launching and flying kites. +239306,Three blue and white vase on a shelf against a patterned background. +180982,A group of trains passing by each other on a track. +141492,a woman swinging a tennis racquet on a tennis court +581717,An adorable cat hiding out in luggage that is left open. +524637,there is a white toilet and tile floors in the bathroom +495090,Food has been plated on two separate small trays. +237324,A taxi cab that is sitting in the street. +140307,A group of people sitting around a table under an umbrella. +230593,many black and white ducks are walking on a road +439651,A cup of coffee sitting next to a computer keyboard. +33647,Benches line the sidewalk of a city park in autumn. +212112,a green truck that is parked in a parking lot +16599,A large tall tower with a clock on the top. +333190,A group of people riding swings in the snow. +556278,A street intersection at night with no vehicles on the road. +295713,A statue is sitting on a bench and a woman sits on a cement block. +369122,A group of people sitting around out doors sharing a meal together. +388974,A little girl holding a hot dog and a drink. +140454,a big sail boat in the sea with other boats +147653,A man flying through the air while riding a skateboard. +31569,"Two zebra stand near an elephant, and a herd of water buffalo." +422982,A couple uses a knife to cut the cake. +388599,A small dog playing tug of war with his owner. +89589,a boy and girl are eating doughnuts in bed +400472,"PASSENGER TRAIN WITH SMOKE BILLOWING IN THE WIND,TRAVELING THROUGH THE TREES" +274931,a bunch of cars parked on the side of a street +410265,A large herd of cattle crossing a country road. +300121,An ornate clock stands amidst a structure of scaffolding. +95039,Players at home plate during major baseball game. +279846,A pizza sitting on a white plag with a fried egg on top of it. +53420,A young male baseball player is about to swing for the ball. +431901,an image of a lone zebra eating grass +145369,A herd of elephants walking among the grass. +393243,A small child is eating a donut fed by another hand. +152340,A small round table with half eaten sandwiches and drinks. +84567,A statue sitting on top of an old stone hill. +393674,A baseball player pictured running on the field +59743,People holding surfboards while standing in the ocean. +119120,A man throws a frisbee to his wild dog +88265,A horse drawn carriage driving down a small road. +32577,A woman standing on a tennis court holding a racquet. +436691,The green train is parked at the platform. +372874,A brown and white dog on a skateboard next to group of people. +513507,Sail boats are on a lake as a storm approaches. +161161,A yellow train traveling down tracks next to a green field. +94336,A large cat sitting in a bathroom sink under a mirror. +247639,a man with white swim trunks is surfing +237568,Person on a motorcycle coming up to a stop sign on the street. +60623,A young girl inhales with the intent of blowing out a candle. +390685,A close up of a stop sign on a public street. +14845,A river with boats docked and houses in the background. +499268,A woman on a bench reading a book +421978,Horses pulling a carriage and a subway car in the background. +392174,The man wears a nice watch and a colorful tie and cufflinks to complete his dapper look. +542527,Two toilets adjacent in a restroom with tile +343934,A blue motorcycle is parked in a corner covered in graffiti. +75576,A cat that is laying near a pair of slippers. +187641,A brown horse with flowing blond hair standing on top of a field. +431199,A phone that is laying next to a stocking cap. +461774,A herd of zebra walking across a lush green field. +158993,A large clock on a wall in a building. +326075,People are walking around at a technology convention. +373997,A donkey walks near the edge of a cliff. +178469,An open laptop computer sitting on top of a wooden table. +482626,Several giraffes walking through a dry grass landscape by a hill +464328,A cow walking across a river near lush green grass. +483027,People are eating at an outdoors restaurant in a black and white photo. +40946,Sheep are in a field near a fence and on a tractor. +205105,A man holding a tennis racquet on a tennis court. +525568,Zebra leaning on another zebra in the middle of a field. +148737,A cat sitting on a hard wood floor in front of a large library of books. +52386,A giraffe grazing in pen next to a tree trunk. +128830,The shirtless man with a skateboard has a shirt wrapped around his head. +31255,Three horses are standing outside in the show. +414934,Black and white photograph of people with surfboards next to a car. +526044,cow at the waters edge wading in the water +485288,Three white plates topped with pizza on an orange table. +103114,Two male chefs cooking in a kitchen while another staff member uses a mobile phone. +230056,A flock of birds walking along a beach near water. +489029,"two little tray of food- one with fruit and chocolate, the other with veggies " +201555,A sign is displayed next to piles of sand. +466332,a bench in front of a house with bushes +263251,A performer balancing a ball on top of an umbrella +337443,"An orange street sign that reads ""obstruction"" and has a directional arrow." +248224,A man standing on a green field throwing a white frisbee. +10205,The man is playing video games in the living room +150378,A metal container catching doughnuts as they fall. +229960,a man with a plate of pizza and drink in hand +285646,Apples on a tree that need longer to ripen. +208844,Several stuffed animals handing from a metal rail. +106392,A kitchen with a washing machine under the counter +175212,A bathroom with a low roof diagonally located above it +413551,there are many plates of different foods on this table +262993,A goat standing in front of a store next to a metal hook. +553034,A group of giraffes that are standing in the grass. +266385,A golden block sitting in a room on red carpeting. +17778,a hummingbird flying above a bunch of small red and white flowers +246145,A large golden clock on top of a wooden table. +264718,A row of parking meters sitting along side of a street. +541783,Blurred image of motorized scooters on a wooded road. +2290,A sailboat docked beside a pier and other boats. +268239,The man is taking a pizza out of the small brick oven. +372147,A group of women are sitting on a bed. +140785,A young man riding a wave on a surfboard. +374641,A snowy landscape through a sunny window with a bed in the foreground +531896,A man with his children pushes his luggage on a cart. +581177,A kitchen is shown with wooden cabinets and a wooden celling. +327917,A para-sailor on the water one sunny day. +326428,A stop sign is leaning to its side at an intersection. +118839,A woman laying on a bed without sheets. +14352,A modern bathroom design with a skylight above the toilet. +176314,Two large horses stand nose to nose in an open field. +259614,A lone zebra standing near some water and bushes. +416818,A ceiling with lots of multi colored umbrellas hanging from it. +276146,a pan of pizza on a table next to wine +525050, A sidewalk with street sings next to a road. +78741,A grey and white cat sitting next to keyboard and computer monitor. +144935,A crowd of people at the beach flying kites. +95736,A house's address is visible through a cracked windshield. +358795,This is a picture of a post with several street signs attached. +364725,A cat looking down at a book. It appears to be reading it. +9175,A woman holding a tiger kite with people standing around watching and talking. +525119,A little boy is excited to eat his lunch. +125286,A street sign sitting on top of a snow covered traffic lights. +249524,A person is on a bench near a grassy field. +487428,A bus and motorcycle driving down the road. +172995,The eater enjoys the hot dog decorated with the pickle. +271825,A group of yacht boats in a shallow body of water. +254237,A clear vase with pink flowers on a patio table. +223545,The Queen Mary ship sitting in a harbor in Long Beach. +66650,A woman eating a plate of food at a table. +196841,A couple of young hot women standing on a wave covered beach. +65358,A dirty kitchen floor with soot on the tiles. +194331,A bunch of vehicles that are in the street. +330818,A young man is working behind a counter. +521231,A polar bear standing by rocks in a grassy habitat. +388284,"A restroom with urinals, sinks, and a mirror." +331386,A double sized transit bus followed by a double deck bus. +405348,Several buildings right next to each other on a stet with a lot of people on it. +68864,A group of people sitting next to each other in front of a TV. +267363,A man sitting in the driver seat of a truck on a cell phone. +382729,A man standing on a blue tennis court holding a racquet. +55066,A view of a kitchen with a burner top stove. +18366,Several buses and cars driving down a busy street. +377723,A blue bus picking up a load of people. +516026,A zebra and giraffe that is in the dirt. +144610,a man standing on a surfboard in the ocean +119476,a man talking to a group of people and standing in front of a screen +386786,A white toilet sitting under a bathroom sink. +60448,A man flying into the air over a bed. +290948,Two people on a ski slope with snow boards on their feet. +213978,Someone taking a slefie with a large camera in a large mirror. +298362,A man in red shirt playing on beach with a frisbee. +452218,A group of young people playing a game of soccer. +503292,Commercial airliner over runway at airport on smoggy day. +155465,A women is cutting into what it appears to be snails. +159030,A living room with a large stone fire place and furniture. +351081,This is a gas station with a lot of trucks. +261461,One giraffe laying by a rock while another giraffe looks on. +548538,A black train car with a group of men standing on the back of it. +549462,Someone jumping in the air on their snowboard at the ski slope. +61025,a wireless computer mouse on a wooden table +112493,a tennis player standing on a tennis court +527616,A television screen in an open space at a political function. +555597,Many cars parked on a city street with tall buildings in the background. +51887,A pole with a sign explaining the traffic signs. +416451,Two men in living room playing a game with a Nintendo Wii controller. +139740,A train engine at a station with vehicles beside it. +102904,The living room has two couches and an easy chair. +445087,There is a city bus that is yellow parked on the street +345154,A man tossing a white frisbee on a lush green field. +58174,A blue bus sitting in the middle of a street. +389753,Kitchen scene showing a black counter on top of white counters. +283653,A train traveling down tracks next to maintenance workers. +237783,A young woman standing on top of a field about to catch a frisbee. +518222,A young male is riding his skateboard on the ramp. +246955,there are many appliances put out in the street +372220,A man with white hair and a beard wearing priestly robes. +350988,A group of seats are placed on steps. +441541,"Several root vegetables, garlic, ginger and chicken broth." +468954,A man with glasses on playing wii with a wii remote in his hand. +512112,A young girl on a bed with many stuffed animals. +299785,"A picture shows old computers, mouse and keyboards." +89356,A white horse standing in an open field. +441287,A couple of men walking with a large elephant. +473888,A small dog laying down in a pet bed. +468332,The man is holding the child and lighting the candle. +202118,A man standing on a tennis court holding a racquet. +369812,"Various street signs including one that reads ""Newlon Hale Village.""" +446990,A stuffed animal dog birching out in front of people at the beach +295668,A pizza with several toppings sliced and ready to eat. +42069,A person wrestles with an inside-out umbrella on a roof. +50354,An old iron square steam train pulling gray passenger cars down a track past a bicyclist. +506454,A park bench that is sitting in grass under a tree. +438615,a quilted bedspread lies on a bed with pillows +347113,A kitchen with a wooden table with a cat sleeping on top of it. +301282,A little girl about to eat something off of a spoon. +309571,A blue street sign attached to a pole. +450404,A huge dump truck is fenced in in front of a neighborhood. +293044,A plastic dish with the food sectioned off. +232807,A green double decker bus pulling into a parking lot. +14567,A small propeller airplane flying through a cloudy sky. +293570,Coming ashore through the surf on a board. +502229,View of a city skyline and train yard at dusk. +266922,A man and two children are skiing in the snow. +141211,A brown teddybear sitting next to a christmas tree. +171413,A cluttered bathroom with a toilet and sink. +346788,A young woman in makeup is holding a sandwich. +137961,Gray cat lying on a chair looking at the camera. +310325,A refrigerator with an ice machine and two vertical doors stands on a tile floor next to a door. +104965,A stop sign and a cart on the side of the road. +510340,A red motorcycle is on the sidewalk in front of a business with ads on the windows. +219792,A herd of elephants walking through a shallow river. +286671,A bridge in a city on an overcast day. +309279,"A close shot of some treats, including a donut. " +331083,A man falling off a surfboard while riding a wave. +447854,A couple stands with small hatchets poised above a cake. +240817,A person that is on ski's standing in the snow. +114673,There are Christmas decorations strung up over the street. +568367,Three cell phones lying next to each other on a wooden table. +132024,A woman standing on top of a ski slope covered in snow. +214701,A giraffe and a gazelle that are grazing together in a zoo. +310618,A cow attempting to get water from a leaking pipe. +408578,Closeup of a cellphone with a keyboard and a computer keyboard in the background. +118507,A hallway with yellow painted walls and a light mounted on a wall. +10138,a man sits at the table an leans over to blow out the two candles on a cake +222625,A young boy who is formally dressed is smiling for the camera. +333095,A large group of people eating at a table. +523400,"A bathroom with double sinks, mirrors, toilet and towel racks." +413446,The ship is sailing on the water as the people swim. +184359,a bunch of airplanes that are inside of a building +512451,A man folding a giant paper airplane on the floor. +554735,A person grabbing a slice of pizza from a pizza box. +449400,Woman wearing a black coat holding up a red cellphone. +120747,"a living room with hardwood foors , a tv and table" +414516,Crowd of people watching people guide elephant by standing on them. +269344,A medium sized dog jumping into the air to catch a toy. +324158,A man is skate boarding down a path and a dog is running by his side. +15272,A red light is a wonderful contrast to the pink leaves on trees +235839,A man taking a picture of himself in front of three huge beer bottles +115772,A flat screen TV with an image of a baseball player holding a baseball bat. +473573,A view of an umbrella near a nice house. +318911,Several sheep are grazing on grass outside in a fenced in area. +16761,Two adorable dogs side on opposite sides of a pot filled with beautiful flowers. +246878,A young man riding a skateboard up the side of a ramp. +107741,there is no picture in this particular one. +484695,A roof with a white air conditioner on top of it. +445512,a man riding among a large herd of horses +517623,Three red two deck buses along a city street. +488673,A couple of people at a table in a kitchen. +31322,A flock of swans swims in a bay. +140420,A motorcycle is parked on a dirt road in a forest. +389624,a kitchen with white counter tops and cabinets. +487722,A bunch of luggage that is in front of a truck. +440709,A see through container filled with lots of oranges. +269445,A ladder leading up to a loft filled with Christmas decorations and teddy bears. +419882,a lot of trains that are parked next to each other +71023,a view into a kitchen with counter tops and wooden floors +244181,A plate holding a sandwich on a blue mat. +569618,Half of a pizza covered in veggies and various meats. +527215,A man flying a kite on a beach with people standing around. +5282,a boat floating on a lake through a brick bridge +45729,A snow covered forest on the side of a mountain. +377588,Professional baseball players in the middle of a game. +424220,A black cat sitting under an umbrella sitting on a table. +451431,A woman cleaning out an open blue refrigerator. +571635,"A bathroom with a toilet, sink, and shower." +449895,A man fixing a traffic light while on a cherry picker. +159233,Man taking a photograph of a black and silver motorcycle. +505862,A pretty young woman holding a paper plate with a pizza on it. +420826,a couple in black and white walking down a rainy street +356570,Three people are at a kitchen bar using their laptops. +344621,A living room filled with furniture and set of glass doors. +246562,A man on a horse watching another man wrestle a cow. +355441,Buses and cars stopped at a traffic light. +42661,A man riding a snowboard down a snow covered slope. +70761,A wake boarder getting major air on a very sunny day. +215633,A man dressed up and posing for a picture +130839,A man pulls a rolling suitcase and is wearing a suit. +86951,"Three computer monitors, a phone and a key board sit on a desk." +162530,A woman walking down a street past a doorway. +359589,A woman sits alone reading a book on a metal bench outside. +107541,A man standing on a snow covered field holding skis. +27565,A kid standing with a glove by a fence. +402027,A giraffe standing next to some trees in a field. +96505,Wild bird standing out at the water's edge +96493,A boy draped in a blanket holds a remote control on a couch +554021,A man in holding a tube next to a shirt. +90616,This intersection has more pedestrians than vehicles near it. +111096,A passenger train is going across a bridge +531697,A laptop computer sitting on a wooden table. +71361,a young boy playing with an elephant while a baby elephant watches +284099,Two students are playing games at a party +4438,A man jumping up into the air on a sidewalk. +482848,A young boy holding an umbrella while standing on a wooden deck. +387551,a row of boats are lined up in the water +216051,A young woman sitting on a wooden bench with a dog. +179327,A woman standing in front of an open refrigerator in a kitchen. +295440,A woman pouring wine into glasses on a wooden table. +172279,A tall green and blue sculpture sitting in a park next to a skateboarder. +506803,"The laptop on the desk is near a tablet PC, and a cell phone. " +203754,A living room filled with furniture and a bookshelf. +162855,A young woman holding a white frisbee while standing on a grass field. +423740,A man and a boy who has a black and brown baseball mitt. +346934,a female in a white shirt is playing tennis +405068,A living room area with some couches and a television +376322,A group of people are reading a menu at the table +3425,An empty bed in a bedroom in front of a small TV. +531703,A plate of food with noodles and broccoli on it. +193245,A crowd of people standing on a field flying kites. +27146,A very long kitchen looks kind of messy. +251798,there is a man holding up a blow dryer +258920,a sausage sandwich in a bun with ketchup on top +433124,"A blue, orange and white double decker bus on a road." +265677,There are a lot of people flying their kites together in the field. +382438,A large bathroom with a row of white sinks in it +348973,"A small girl smiles at her pizza creation, which looks like a smiley face." +450125,A sink is under a mirror with bottles of soap and lotion. +290532,A desk topped with a desktop computer monitor behind a keyboard. +156232,Two people in yellow vests and helmets riding horses. +111629,A man preparing food on top of a table. +30448,A pickup truck towing a boat on a trailer. +374734,A man crosses his water skis while parasailing. +118579,An elephant with a large trunk sitting on top of a ground. +522935,A bordered photograph of a woman sitting on a love seat with a book in her lap and a phone facing the camera. +80614,A skier that just made a jump several feet up in the air. +181886,Women on a tennis court playing tennis. +41271,Two cats eating food from bowls on a black and white checkered tile floor. +314541,A large green field with a bench in the foreground. +434576,A grey and white tabby cat and pair of brown shoes +208543,A guy making a small jump on a ski slope. +118970,A couple of red motorcycles parked next to each other. +167067,a close up of a person wearing a bow tie +215565,"A hotdog wrapped in tinfoil, with toppings all over it." +493544, a man with a hat skiing on the snow towards a building +315773,A man in skis pulls a load behind him. +274331,A giraffe standing in a park next to a rock. +416930,A woman sitting under a hair dryer in a salon. +253810,four ripe bananas hanging on a banana tree stand +491765,A plate of fried fish over a bed of french fries with some sauce in a can. +172856,a stop sign and two brown and white street signs +287882,A man is holding a tennis racket while on the court. +434806,a person that is standing on a court that has a racket +439709,A few porcelain plates with birds Hand-painted on them. +499989,Giraffe in its natural habitat snacking on a tree +369243,An old ornate clock face set in a brick building. +136227,A large pizza with topping served on a wooden board +373768,Two young boys playing Wii games on the television. +113045,A wooden spatula in a bowl with shredded carrot. +375426,A meat covered sandwich on top of a spatula being held by a chefs hand. +397045,A cat sitting on the back of a bench while looking upward. +113590,Chef preparing meals doe guests at restaurant or oriental foods. +4700,A group of boys playing soccer on a field. +400886,"A person riding downhill on skis on a snowy hill, with large mountains in the background. " +274606,A red and black train traveling through a grass covered countryside. +464251,A small red bird perched by a wooden flower box +312682,A donut covered in chocolate sitting on top of a paper bag. +309964,The people are sitting outside under a large umbrella. +511111,A glass of Orange juice next to a juicer +507782,A woman in tech support teaches computer skills. +316258,A body of water with boats floating on top of it. +58933,"A mountain area with rocks and grass, and a large ram standing in the grass." +400489,A dog and a cat are playing in a field +570952,A blurry photo of a cat and a grandfather clock. +341128,Several hoofed animals much on hay in the stable. +163118,two people jumping up to try to catch a frisbee +26879,a close up of a street sign on a street corner +97806,a plate with some veggies and meats on it +258509,a chair with many things for a child +238573,A big brown horse near a fence in the snow. +346875,two zebras in a field near one another +79501,two zebras some dirt brown grass and trees +724,A stop sign is mounted upside-down on it's post. +327771,A bed is sitting on a wooden frame. +232849,A couple stands smiling next to a sitting older couple. +27768,A bus which is part of the Metropolitan Transit System. +153343,two big stuffed bears sitting behind a chained fenced +65530,Two men in room playing a game with Nintendo Wii controllers. +182339,A young product representative gives out Frisbees at a show +548361,A baseball player is squatting down with his mitt raised. +275027,A row of palm trees and a traffic night in a rainstorm. +116017,Two well dressed standing together while on writes a note. +275979,A cat standing on a couch in a cluttered living room. +336182,A woman sitting on a bed brushing her teeth. +201148,A train traveling down tracks next to a brick building. +200668,"An individual is in the open view in the picture. +" +117201,A group of skiers is headed towards the slope +76956,The baseball pitcher has wound up his arm to pitch that ball. +20904,A group of people walking down a sidewalk holing umbrellas. +328818,The woman is tying her shoe on a bench next to a parked bicycle. +126340,A young boy with a bowl haircut holding a Nintendo Wii controller. +44910,A group of boats are perched on dry docks. +508730,Two naked babies on training toilets in a bathroom +43611,GUY SKATE BOARDING DOWN THE STREET IN THE DARK +544322,An outdoor setting is lined with tables and chairs. +542959,A collage of photos showing a house and some of its rooms. +275332,A man does tricks on his skateboard while people look at the scenery. +453755,A table topped with piles of dishes under a window. +317725,Two sugar doughnuts with sprinkles and caramel topping. +409098,a close up of a giraffe drinking water +442286,a small boat in a large body of water +262608,an image of food items including meat and vegetables +520433,A train with graffiti moves along the railroad tracks. +267951,Two zebras eating hay from a feeder together +307993,a man is reading a book in a car with a small dog +276706,A cat laying in a box full of bubble wrap. +416385,Cows walking down a street near a tour bus. +100430,A built in desk with two mid-century modern chairs. +230151,two cat getting ready to get into a fight +25986,A bunch of items that are on a counter. +444869,A fry pan with a mixture of vegetables in it. +550322,A metal cup filled with scissors and two ladels. +215170,"A table full of cellphones of various shapes, colors and sizes." +448795,There is a table with chairs and a stove in the room. +3595,A table with wine glasses and bottles of wine +94940,A red vase sitting on top of a glass table. +9590,A group of people sitting around a wooden table. +129803,an gray and white horse at the beach +357941,Two televisions that are stacked on top of each other. +531622,A very neatly kept retro 1969s looking living room set. +172710,A woman kisses a man as they sit on a motorcycle. +285734,a child in a field with a kite +449921,"An old photograph of three baseball players, one with a bat." +189310,"A living area with a red couch, mirror, window and painting." +533145,A hand holding a Nintendo Wii game controller. +172843,An old toilet is transformed into a lawn ornament by adding soil and plants. +151742,A man holding a baby in a white baptism outfit. +424960,A man swinging a tennis racket at a ball on a field. +334399,A man standing in front of a clock. +48037,A open fridge that has different items inside of it. +508087,A large truck filled with lots of green bananas. +359140,a small toilet in a bathroom with tile walls +472143,A young couple sit and enjoy their food outside a busy shopping area. +231945,"The casual vehicle parade features a patriotic theme," +184667,A statue standing over a traffic light next to a giant spider. +90640,Black and white photograph of elephants walking through a street. +581328,A baseball player wearing a catchers mitt in front of a Bud Light advertisement. +395714,Eight hot dogs on charcoal barbeque on cement +366508,A brown bear walking down a grass covered hillside. +496313,A truck and bus on a street under bridge +388581,a public bathroom with a toilet and hand rail +204049,a man that is standing on a snowy field +187241,A man speaking at a public event behind a pitcher of ice water +287874,A passenger train travels down the tracks at a stop. +488374,A bunch of sheep smile are they walk by. +100196,a brown and white dog lays on a bed +340646,A large group of people flying kites in a large open field. +416078,Various items from the book bag are lying on the floor. +553072,A fleet of red and blue planes with a Canadien logo. +239041,A television is reflected from a bathroom mirror. +241297,A train traveling down tracks next to a lush forest. +52596,A little girl is standing outside eating a piece of pizza. +8218,A building with a black and gold clock on it. +414578,a man taking a nap on the bench in the middle of a park +161642,A coo coo clock mounted to the side of a wall. +29030,An upside down and right side up picture of a boy holding a phone. +192502,Four people on skis posing for the picture in snow +502813,A striped cat sitting in a windowsill. +244299,A small white airplane high up in the sky. +55806,there are two zebras eating on a little bit of loose grass +334276,A minivan is in an intersection with the traffic lights showing red. +20334,a person on a snow board laying on a snowy surface +415585,A train on tracks in a city with high rises. +55244,The man looks eagerly at a huge pizza in front of him. +230795,A very tall building with lots of windows. +434700,A ground tennis match between two guys while a bunch of people are watching in a stadium. +120347,three snow skiers in full gear headed down the mountain +416478,A group of people sit in a room with tables and one leans over to help another on a laptop. +125909,a group of people are eating pizza at a long table +237517,A wooden table topped with plates filled with lots of food. +78260,A clean kitchen island with plants on the island. +395230,A small white car with a small white dog riding in it. +372009,A brown teddy bear lays on a bed spread. +176466,The young girl is standing by the fire hydrant in curlers. +317310,a plastic toy of a teddy bear at home +176306,A giraffe is standing near some large boulders. +83059,Nice arrangement of furniture in old styled house +118802,A man holding a tie across his face with a formal outfit on. +225299,A person flying through the air while riding down a snow slope. +461953,A long hot dog on a plate on a table. +148662,Man with a hot dog in a paper rapper in his hand. +557596,A woman that is playing tennis on a court. +44604,a tiled floor with a trash can and a urinal sitting inside of it +564091,A woman is sitting at her jewelry display and talking on the phone. +469088,Two dogs that are standing up holding each other. +393547,Cat sitting on wood framed mirror looking down at own reflection. +233556,A group of four carrots on top of a wooden cutting board. +191758,A woman petting a giraffe that's leaning over a rail. +244925,The man is carrying a book bag with two bananas in it. +392443,A man catches a foamy wave on his surfboard. +94055,Some fancy dressed folks on some horses in a crowd. +299305,a toilet a toilet brush tiles and a door handle +46872,A man standing along side of a truck trailer. +335670,A yellow truck filled with passengers driving down a street. +575957,a dog is laying on his back in his bed in front of the fire place +558539,A blue and white city bus parked at a bus stop. +105177,A simple white residential kitchen with breakfast bar +55167,A yellow and blue bus traveling down a road next to a park. +167656,A man taking a swing at a tennis ball +381870,A group of people standing around an elephant. +516414,Calm waters serve as a berth for banana boats. +486194,Young woman carrying an opened umbrella in a city neighborhood. +179869,A group of brightly colored boats in palm grove. +348488,A Egyptian painting with 4 black horses on it +316342,A clean kitchen with a wall that has a blackboard +302222,People sit under umbrellas on benches with a statue on a brick sidewalk. +373753,The fire hydrant is sitting on the side of the road +33638,A woman observing something on a kitchen stove. +195790,A black toilet sitting next to a white bath tub. +432016,A horse is peaking out of a small window in a barn. +418062,Two men next to each other holding wine glasses. +16257,A little boy is holding a carrot stick. +422689,there is a young boy rinding a skateboard on a ledge +19333,A collection of items from a bag laid on floor. +2764,A boat traveling down a lake next to a shoreline. +163589,A table topped with lots of different foods and sandwiches. +313922,A man in brown jacket holding two pieces of luggage. +203845,An old brown building has a clock on it. +252203,A couple of dogs sitting in the front seats of a car. +42190,A person on a surfboard in the water. +45090,A couple of men in the water on surfboards. +515360,a yellow train is at a train station +439188,A man walking across a beach tossing a frisbee. +18350,A gold and white clock on street next to a building. +571313,A small room with different types of furniture and appliances that it makes it hard to tell what type of room it is. +511852,People are skiing down a snow covered hill. +555337,A black bull beginning to mount a brown cow. +374270,A man without a shirt riding a skateboard at the beach. +266151,Guy stands with an umbrella while water gushes high in the sky behind him. +405691,"Glasses of wine, salad and french bread on a wooden table. " +218091,A bedroom with a large bed sitting next to a black dresser. +430640,A laptop computer sitting on top of a table. +232887,A man poses while standing between two surfboards +72873,A sparse hospital room with an open window. +138819,The view of a bathroom with a wall mounted sink. +111830,An airplane can be seen traveling through the clouds. +28993,a couple of yellow poles are on the street +456574,There are two men sitting on a park bench +34183,A teddy bear has some pizza boxes on it. +524694,A giraffe eating food from a very large rock. +516893,Group of men all playing a soccer match together. +451234,People walking down a sidewalk passing Chinese restaurants. +179214,A white plate topped with a pizza and cheese. +354537,A blue vehicle with a dog sitting in the driver's seat. +246999,A living room is decorated with floral print. +484166,A man walking past a train at a train station. +359864,A man dressed in red riding on a boat. +84168,A stop sign and a fire hydrant on the corner of a grassy sidewalk. +105655,A table filled with some tasty looking pizza. +322352,A dining room with some plants are seen. +10211,Three giraffes that are standing in the grass. +551167,a woman leaning over as she waits for the tennis ball to come back +375184,A woman holding a tennis racquet standing next to a red sports bottle. +95679,a take out box is filled with food near some ketchup. +285908,A polar bear with snow on its fur sticking its tongue out. +191693,A man sitting in a chair playing a guitar in front of a microphone. +355040,a group of motorcycles next to each other in front of an advertisement +302292,A man holding a small cat in his hands. +142620,A man that is sitting down on a bench in front of a table. +507187,Two vintage motorcycles sitting in the grass on display. +497158,Street with light traffic at intersection in large city. +333557,A metallic refrigerator freezer sitting in a kitchen with it's door open. +516415,A young child swinging a bat at a tee ball. +204832,a bathroom with bright lights and white carpet +252074,A small child's bed sitting next to a window. +334941,A woman leaning up against an outside wall using her cell phone. +368663,A person driving a car towards an overpass. +537636,A large dog that is looking at a teddy bear. +89549,A sandwich filled with meat with a knife sticking out of it. +104185,a baseball player swinging a bat on the field +415904,A car with an argyle racing stripe in the rain. +63549,A man stands on a snowy hill with skis. +368335,a brown horse is walking in between two cars +441323,"A figurine of a chicken wearing a chain-mail helmet, a pink greeting card, and a pile of oranges." +3817,A man on a motorbike carrying a large stalk of bananas off a tree. +482910,A young woman playing a game of frisbee with another person. +204871,A red fire hydrant with a sticker of several animals on it +347950,A very cute brown dog with a disc in its mouth. +231028,Three skiers preparing to ski and posing for the camera. +412873,Two cattle grazing on a lush green hillside. +246263,"A bathroom with a glassed in tub, toilet and sink" +185837,A baby elephant plays in the water next to an adult one +228506,A cat laying bed in a small room. +344005,Two people on the beach are playing Frisbee. +576607,The lady is sitting on the wood bench. +501260,Two people standing in a living room watching tv. +113897,A beige bathroom with a phone beside the toilet. +48530,A cat laying on top of a bag filled with items. +404805,A woman on a boogie board riding a wave. +526341,Two giraffes are standing next to each other by trees. +532985,Two brown bears play with each other on the rocks. +128598,"A group of red, yellow and orange fruit mixed together." +14733,Many cows laying down in a dirt parking lot. +168593,"There are two refrigerators in this dirty, rundown kitchen. " +553576,A blue basket filled with donuts on top of a table. +490322,tower of a brick building with a clock on the front +568191,A bird flies over a large body of water. +468993,A man works on landscaping a tree near a giraffe. +488756,THERE IS A BOY THAT IS JUMPING IN THE POOL +282772,some black and white pillows on a white bed +181627,Burnt food sits on a plate with a cell phone next to it. +57072,A stainless shiny serrated knife sits in front of a sliced loaf. +382617,A book with a cup and office supplies stacked on top of it. +404922,A woman and two kids walking with their tennis rackets. +355143,A person took a picture of his torso and legs while laying on the top of a bunk bed. +312559,A bus is coming around a bend near a traffic light. +317173,A cat is sitting on the ground beside a wheel of a bicycle. +283659,A man riding a kiteboard on top of a wave in the ocean. +306281,A plate topped with mushrooms and broccoli covered in sesame seeds. +358685,A big zebra and a little zebra standing and looking. +168243,The girl with blue hair stands under the umbrella +282711,A wooden table surrounded by two chairs near a kitchen counter. +139486,A white bed sitting on a wooden floor in a bedroom. +146042,A small elephant standing next to a house. +394909,A group of people standing on a beach flying a kite. +385918,Tall man jumping into the air to catch a frisbee over another person. +274687,A bicycle is standing next to a bed in a room. +107516,"This kitchen features dark colored cabinets, nice counter tops, and pendant lights." +370899,Living room with white fireplace and brown furniture. +206268,A man standing in front of a flat screen TV holding a Wii game controller. +93068,A cart full of bananas next to boy in red hat. +161060,a bunch of donuts placed around some photos +441672,A plate of food with pasta and a sandwich on it. +32609,An old time photograph of a young man. +189163,An individual is holding a book and reading it in its bed. +316397,A baseball player standing on home plate with a bat in hand. +58335,A man on a skateboard is jumping over a pile of blocks. +443363,A man riding a paddle board with two dogs on it. +135155,Two people are walking up a snow covered hill. +418533,"A large train car labeled ""buffet"" and ""first class"" is parked in a train yard." +433547,A man and woman sitting next to each other on a park bench. +45587,A group of people and dog riding surfboards in the ocean. +248238,a hot dog with carrot pieces in a bun +494077,An assortment of fruits are viewed up close. +230190,A computer keyboard next to a mouse and remote control sitting on top of a table. +9400,A group of people that are sitting in front of laptops. +200471,a female in a white dress is playing tennis +785,A woman posing for the camera standing on skis. +469793,A man preparing food inside of a kitchen with a small bird on his shoulder like snow white while wearing a cheap chefs hat. +187565,A vase with four roses in it sitting on the floor +314757,a person in a living room playing nintendo wii while people watch +227765,The meal is being prepared in the big pot. +33882,a young girl is holding a teddy bear +295564,A lot of colorful vases sitting on top of a white table. +300142,A woman is sitting using a cell phone. +187543,A man in a hat standing next to a parking meter. +335325,Line of people skiing down a snowy slope. +433554,some people waiting in line to para-sail one guy has taken off +78554,A restroom with toilet basins and a mirror +308828,A street sign sitting on the side of a road next to a tall brick building. +400569,a horse is walking around outside the barn +453722,room with wood floors and a stone fire place +518224,A baseball player taking a swing during a game. +574280,A bus with a large picture of a woman's face on back of it. +481398,A cat sitting in front of a mirror with it's tail reflecting in a mirror. +252294,A woman sitting on top of a bed with curtains hanging over it. +52376,Two women comparing info on their phones in the room +202093,Several large bulls standing around in a grassy field in front of a farm plantation. +441491,Three women are taking a bite out of the same piece of pizza. +449302,A black and white photo of a man sitting by the water holding an umbrella to give him shade. +331712,There is a piece of pie on a patterned plate. +505062,A pizza sits on a piece of aluminum foil. +440617,an image of a bus that is going down the tracks +363071,Two brown cows walk though thick forest greenery. +150888,Clock tower over a crowd of people standing on a bridge. +565296,Long counter in center of room surrounded by grocery cases. +152946,A man and woman standing on top of a snow covered slope. +261774,A young girl with short hair brushes her teeth. +497032,A person holding a black and white umbrella in the street. +581317,A woman holding a small item in a field. +3837,The people are ready to go out on the water for their surfing lessons +186938,A small bird standing on a rocky ground. +195889,A cat laying in bed under a blue blanket. +200770,A man catching a frisbee while standing in a park. +507313,A white park bench sitting in the middle of a forest. +75375,a large number of people parasailing on the water +138965,A picture of children's toy reading story. +321665,A black and white image of a clock +389273,A woman throwing a frisbee on a field. +32992,A picture of a wooden container with crosses on it. +279874,A tolley car on a brick street in an urban area. +337662,A few people in a kitchen preparing a table and checking food in an oven. +310572,"Sandwiches, beer and a bowl of salad are being served on the dining table." +22271,People are standing in front of a building across the street from the western sign +76170,A young boy holding a frisbee in one hand against his cheek. +18957,A small boy pushes a pizza into an oven. +207925,The furniture in the living room is decorated with flowers. +165162,A refrigerator door left open that has a lot of bottles on the door. +457893,"A baking pan with meat, lettuce, onions and tomatoes." +46804,A sheep standing in grass next to a rock wall. +325031,a balloon elephant sits in the middle of a park area +547222,a boy taking a selfie in a mirror while brushing his teeth +461009,A man holding an apple between his fingers. +327479,An old train sits alone on the train tracks. +530860,Traffic signal for saying walk on Greene St. +496152,A female tennis player about to hit a ball. +310564,A fire hydrant sitting inside of a building under a window. +227220,A kitchen with a white tile wall and a chrome counter with a built in oven. +561411,A dog sitting upright with its hands on a laptop. +261787,A girl with curly hair and a teddy bear on a bed. +58137,Several people walking on a platform next to a train. +74137,A street scene with a pole with the clock on top. +293390,A VERY NICE BATHROOM IN THE MIDDLE OF A REMODEL +58304,A red bus traveling down a busy city street. +449872,A parking lot filled with parked cars in a shopping center.. +261535,A woman in white dress playing a game of tennis. +507326,a very old gas pump in a store +569058,A clock mounted on a pale blue wall. +568154,A young man holding a surfboard while standing near a river. +560143,A woman is hitting the ball with a tennis racket on the tennis court. +61717,A bed sitting in a bedroom next to a window under pictures. +554838,Several breakfast foods are on top of a refrigerator. +213586,A man is in a tv frame and making a funny face. +87912,A bus getting ready to get off a bridge on the highway. +153455,A man and woman are looking at a television while playing Wii. +490284,A dog that is on a couch in a room. +300276,People are at an outdoor lunch table in a park. +255633,A fighter jet is flying through a clear sky. +226973,a brown bull is walking on some sand water and a rock +262323,a full frontal view of a giraffe and an ostrich behind +99392,a couple of girls embracing each other with a teddy bear. +429761,Two men shaking hands while standing on a tennis court. +283101,Two large row boats filled with people in the water. +258061,A young guy is surfing in the ocean. +156292,A woman standing in front of an outdoor wall decorated with images and clocks. +294264,Half a dozen donuts from Krispy Kreme of various different flavors. +149641,A plate of vegetables with carrots and eggplant. +337818,Many people walk together towards a large house with umbrellas. +567329,A bloody arm with iv's inserted into an injury victim's arm are depicted in this graphic shot. +414122,Several pairs of scissors with black handles lay on a counter. +538589,a modern bathroom with blue walls and a clear shower +399759,Woman eating a hot dog standing in front of a fountain. +106901,A sign above a doorway with a bench in front +205289,An old truck in the field near some building structures +562139,A lighted kitchen looks shiny clean and nice. +103255,"Commuter train stopped on tracks at red light, green light further up the track." +312298,A woman holding a teddy bear on a table. +201526,A man wearing a tie next to a woman. +43133,A picture of several people in a sail boat in the ocean. +117079,A dumpster sitting in front of a building covered in graffiti. +277793,A black cat is sitting on a red suitcase. +425004,"Onion rings, a hot dog, and a sandwich are on a tray." +456708,A group of men riding skateboards on top of a ground. +36012,Three red double decker buses parked side by side. +253455,Several people wait at an airport baggage claim. +140987,A cute little blond girl sitting next to a pizza. +99938,a lady and three kids laying on a bed and reading. +187243,A woman laying on a bathroom floor next to a toilet. +490306,A girl standing in the grass with no shoes on with a frisbee in one hand and her other hand on her hip. +289659,A giraffe standing on top of a dirt and grass field. +534787,two people playing with electronics in their room +93703,a white and blue jet is flying in some clouds +291074,A baseball player holding a bat next to a base. +574706,A cat is looking out of a glass door with a reflection. +393225,"A bowl of soup that has some carrots, shrimp, and noodles in it." +276063,"A group of cars, riding down the street." +575406,"A red, white, and blue bus that is parked." +342146,A man sanding next to a cow in a pen. +219655,a big blue truck sitting on the snow next to some trees +425481,A man sanding on a colorful rug wearing a tie. +117786,A person standing on a walkway area and flying a kite in the air above him. +20179,The man has enjoyed many years as a surfer. +471932,Several various sewing items sitting on a pile. +323752,Man in grey t-shirt swinging his tennis racket at a ball. +478665,A tropical bird perches on a rope surrounded by greenery. +338703,A man carrying a small child above flooding waters. +403482,a microwave is built in to a all of a kitchen +254033,A black and white photograph of two zebras. +131444,A man wearing a hat and a gray jacket. +328791,a hot dog stand in a city with people +129362,A large bird perched on top of a tree branch. +69827,A man yelling to the driver of a truck +61773,Two women are cooking sweets in the kitchen. +39770,A pot on top of a stove next to a large metal ladle. +324634,Man and woman texting on cell phones. +525909,A cat on the floor watching a tv on a chair. +73861,Black cat lying on smooth tiled kitchen floor. +127556,A gray cat eating a treat from a humans hand. +182696,A large black cat laying on top of a pink laptop. +319704,Large oversized hot dog being held in tinfoil. +468078,A photo of an old elephant standing in the wild. +287216,a person standing next to a table with many stuffed animals +382554,A man riding a dirt bike up the side of a mountain. +505156,A man riding skis on top of snow covered ground. +103548,A herd of animals traveling down a country road surrounded by a lush green landscape. +428291,A table prepared with food is seen in this image. +32965,A woman staniding on the shore holding two umbrellas. +386585,A very large get liner flying in the sky. +94745,Young man holding a tennis racket while standing in front of a fence. +237920,Empty seats in front of a building on a sidewalk. +306212,A kitchen with a stainless steel refrigerator and wood cabinets. +260802,A person swinging a tennis racquet at a tennis ball. +337439,A woman rolling her luggage through an airport. +209322,A bathroom with blue and white tiles and a white toilet +377155,A beautiful woman holding an umbrella over her head. +133386,some people are on skateboards at a skate park +101785,Two elephants standing next to each other in a grass field. +468027,A woman sits on a table and portrays a time gone by. +52368,"Several benches in a park area, with flowers and an umbrella above a table" +436520,"A bathroom with a clear, shower door and a white toilet." +96825,A man with skis and ski poles is standing next to a hill covered in snow +328283,A group of skiers are outdoors playing in the snow. +345881,a plate with a sandwich and chips on a table +283495,A large jetliner flying under a cloud filled sky. +281882,A glass table holding a cup of coffee and a cellphone. +323851,A dog standing on the back of a human being +377314,We are looking up at the underside of an airplane. +432619,The container on the sink is holding flowers and a toothbrush. +246183,A group of people that are standing near a gate. +554100,There was a sandwich and cheese and meet served. +346587,A clock that is on the side of a building. +191226,A man surfing on a surf board in the ocean. +281475,A vintage photo of a girl and her dog hugging on a bed. +320106,A hipster emo woman sitting on luggage in the middle of a road. +520982,A baseball player holding a bat during a game. +341725,Pink tulips sit in a vase in the window. +171494,Some sort of figure in fur walking upright on two feet. +134199,A young elephant walks near a herd of other elephants. +346707,A couple of containers filled with unripe bananas. +144929,A young girl jumping into the air while holding an umbrella. +568925,A stove top burner sitting inside of a storage room. +183716,Two little girls are dressed in uniform preparing for the day +578210,A sheet cake sitting on top of a table with lit candles. +235919,A very tall old building sitting on the corner of a street. +210958,there are two dogs laying in a doggy bed together +143891,a bus parked on a rail way under a walking bridge. +460229,A red traffic stop sign with a blank white sign below it. +260829,A tall white clock tower with a black clock on each of it's sides. +261273,Two green signs that are on top of a stop sign. +186991,There are two zebras one zebra is eating grass. +241747,a group of young people playing soccer on a field +206473,Six sheep stand close together near a grassy hill. +70125,A metal pole with a bunch of street signs hanging from the side of it. +40621,a couple of giraffes eating out of a basket +520572,A man drives a horse drawn cart down a road. +435519,a person on a motor bike driving in race +326230,A man is talking to a woman behind a podium. +543006,a downward view of a small toilet in a room +10290,A bathroom with a blue shower curtain and blue walls. +116722,A train with a flag flying near the tracks +376160,Medical professionals gather around and tend to a patient on a hospital bed. +189197,A gray day at a park with a stone bench. +236189,An adult woman playing a game of frisbee with a little girl. +457900,Two trucks that are sitting in the street. +365177,a transit bus on a street under a bridge +507135,A fire hydrant on the side of the street. +83836,A man standing in a kitchen holding a glass full of alcohol. +460962,a sign showing stop on the street besides buildings +559099,Several cows are seen grazing in a field. +79545,Wilderness scene with animals grazing out in an open field. +32861,A man holding an umbrella in a hallway. +490878,a person riding skis on a flat snowy area +397117,a yellow and white concrete truck next to a bus +493509,The woman is working on her laptop while the man is on the cell phone. +103375,a bed room with a window and a night sand +200381,A man in a black jacket holds a toothbrush in his mouth as he stands near a woman with her eyes closed. +419653,A buffet of casserole dishes on a kitchen counter. +569432,A man skateboards down a path surrounded by trees. +396051,"A group of planes sitting on a runway, in the day." +220739,"A green and white street sign that reads ""lincoln av e.""" +413948,A person skis down a slope of snow +271063,A kitchen with lots of cabinets with an oven underneath a microwave oven. +257833,A big commercial plane flying in cloudy skies. +49994,A traffic light sitting next to the side of a building. +445643,The back side of an airplane sitting on a runway. +478312,"a kitchen with a fridge, stove and sink" +264238,View of an English city from the choppy water. +226634,A beautiful sunset occurs next to a stadium. +124246,A stop sign that is by a lot of plants. +456884,A car parked next to a bench along a city street. +205573,A motorcycle stopped on the road during nighttime in the city. +184402,A skateboard with two different color and sized wheels. +567197,an old black and white photo of cars parked near a building +440514,A large clock tower on top of a church next to a road. +103488,a public bathroom with several sinks and mirrors +569839,A little girl sitting in the middle of a restaurant and smiling for picture. +314264,a man making a flower display in a vase on a wall +83960,some oxen and a zebra laying on the ground +171181,A table topped with glasses and eating utensils. +105264,A group of young men standing on top of a sandy beach. +82688,Some people are enjoying themselves playing game. +389684,The pedestrian is walking down the side of the highway by the bus. +447313,Three zebras eating hay at the edge of a forest. +35768,This office area is organized with many notes and materials. +528862,In a large area many giraffes stand behind a fenced area. +527363,Mother elephant nurturing her baby at the zoo +581913,Four donuts in a box with a variety of frostings. +145651,A small white room with an unmade bed that has a backpack and a pair of glasses resting on it. +59328,A city with tall buildings filled with tall buildings. +158795,A person is shown riding a bicycle down the side of the road. +553698,A cat sitting on a pile of books. +440646,A woman putting a tie on a man as he sit at a table. +462784,A man standing on a subway train loading platform. +564109,A group of giraffe standing next to each other on a field. +196244,An adult zebra stands with its young in a field. +119365,A couple of people with a laptop at a table. +178690,A pink upholstered chair is in front of the television. +374156,A couple of stuffed bears next to a tree. +360792,A group of young boys playing a soccer game in progress. +449075,Two girls are eating hot dogs in a mall. +225505,"A bathroom with a stained glass and stone wall and tile of different shapes, sizes, and colors decorating the floor and walls with a toilet visible." +228644,A man with crazy hair holding a Nintendo Wii game controller. +222908,A living room filled with furniture and lots of windows. +315352,People are on board elephants in a muddy river. +142744,A cat standing on top of a carpet on a TV screen. +559842,Group of small children running down the field playing soccer. +173083,A group of wetsuit-clad men standing at a riverbank. +544071,A herd of zebra standing next to each other in a field. +2431,A plate on a wooden table full of bread. +113082,quaint kitchen with pink flowers on a small central table +426611,A train with open doors waiting on passengers at a train station. +25864,A pretty young lady riding a pink scooter on a street. +262900,A giraffe lowering its head to graze on some grass. +45775,A table with a sandwich and two cups of coffee. +67075,"close up of a plant with large, gray leaves" +522065,a kid holding a soccer balll next a big window +178671,A bedroom with a large bed sitting under a painting. +71752,Two buses driving by people in a city. +560119,Two tall buildings stand next to each other. +320659,A toilet has been turned on it's side out in a yard. +472256,A man leaving over a laptop computer next to sound equipment. +81897,A wooden bench sitting on a beach next to the ocean. +353409,A group of people on motorbikes ride on the road. +335644,a man kneeling down a tennis court holding a racquet. +453427,The welcome sign in the city of Reno on the street. +59666,a long passenger bus turning the corner by a building +379022,a close up of a reflection in a body of water +185756,The stuffed bear has a tag on his ear and a heart on his chest. +39659,"A breakfast of bagels, eggs, friend potatoes and fresh fruit along side glasses of juice and water, with a basket of jelly packets to the side. " +458424,A dog seated on a car parked near the road +535858,A woman trying to catch a wave on her surfboard. +409125,"A bathroom containing a toilet, sink, window, and bath tub." +480472,Women smiling looking into a mirror while fixing their hair. +446799,a person standing on a side walk underneath a traffic light +314108,Old photograph showing group of men with horse drawn cart outside of business. +390731,The child is cutting the birthday cake with a knife. +343543,A man holding a doughnut up to the side of his head. +145815,Two adult dogs play with frisbees in the snow. +267628,A train traveling down tracks near a rural area. +102329,A woman riding a snowboard across a snow covered slope. +578703,Three geese eating out of a parking lot grassy field. +54766,Two men watch as yellow aircraft flies over a lake. +473774,A plate with cross cut french fries and a large chicken sandwich. +252738,a man in a leather jacket talking on a cell phone. +495985,A woman with ear protection on swings a bat. +15599,A herd of elephants standing on the side of a river. +31121,A person jumps in the air with a tripod in hand. +50100,A crowd of people standing on a green field before a capital building. +470298,A polar bear in water with a round cage that contains an orange round object. +424548,A man surfing with the waves in the sea. +487461,A bear that is standing in a tree. +510122,A crowd of people watching a kite fly. +95670,A bunch of people riding kiteboards on top of an ocean. +498339,Commuter trains at station with passengers on platforms. +90804,A double decker bus with a man posing by the door. +369470,A bunch of cars that are parked in front of coin meters. +402623,An adorable dog standing on top of a lawn chair next to a BBQ with little hot dogs grilling on it. +121519,A man brushes his teeth in the dark of night. +359387,A kid tries to do a skateboard trick while sitting down. +525118,A pile of un ripe bananas sitting on a table on newspaper. +31636,a variety of vegetables and dip being displayed on a dish +229286,a child standing in front of a chocolate cake sitting on a wooden table. +347879,A brown cat laying in a white bathroom sink. +281766,A man on a bike rides through the crowd. +560371,Street signs from the corner of 8th ave. and 22 3/4 st. +89430,an image of a cat sitting on a couch +463534,A man laying on a bed next to a small black and white dog. +196699,A bell pepper sitting on top of a blue cutting board. +485897,A black and gray dog resting in a purple chair. +169936,The view from an airplane window looking down on clouds and mountains. +155380,an image of a church that is on a steeple +528866,Julienned raw vegetables in a glass dish on a kitchen counter +548713,A horse drawn carriage parked on the side of a road. +529774,A large bright yellow boat sits docked near a stairway. +197278,An out house with the door opened sitting in a field. +484450,A man riding on the back of a motorcycle next to another man. +56898,a black and white cat looks at the camera and there is a TV in the background +193669,A smiling woman is riding a large elephant. +549048,A white bus on street next to sidewalk and buildings. +567708,A bike parked against a parking meter near a street. +483945,A bed with pirate bedding that is red white and blue +270758,The four urinals have a very modern design. +124620,A woman checking out her surfboard at the beach. +552073,Two Giraffes are chomping on their feed basket. +445372,A large clock tower on top of a church. +34708,Two guys and a girl sitting on a couch playing video game. +566025,A street sign hanging from the side of a metal pole. +250205,Couple of Seagulls stand next to each other watching the same thing +495734,The giraffes are standing together on the grass +465489,A man in a black jacket and white pants leans forward at the top of a snowy mountain. +467031,A train on a track pulling into a station dock. +412899,A man in a green military uniform and another man standing by next to a dead elephant. +133596,Many young plays are playing soccer in the sand. +30049,The wake boarder surfs through the waves on a cloudy day. +412301,A city bus driving past a group of men riding skateboards. +359268,a machine to make a drink placed on a table +71738,A man holding a motorcycle helmet is moving a chair in a public place. +318114,A white plate with a slice of cake and an orange wedge. +65244,a little kid is brushing his teeth and smiling +531414,A black cat staring into the distance in a room +445537,a pointed clock tower of an investment building +7511,A man is flying a kite at the beach. +155312,A professional baseball player in batting stance with bullpen in background. +490280,Man who is relaxed and slouched reading the newspaper waiting for something. +393523, A Big Ben clock towering over the city of London. +8483,A lady and woman addressing the press with microphones on the stand +492817,A young elephant by a pool of water in a zoo enclosure. +403294,A white bus sitting on the side of a street. +327623,A black cat laying under a green chair. +438432,A black and white photo of school girls posing as a class. +349483,Two young children sleeping in wooden bunk beds. +315939,A man and a woman dressed up by a park bench. +335610,Two zebras stand side-by-side grazing in a green pasture. +13789,"A close up of a country sign, the picture is a personified bus that is freaking out because it is about to hit a biker, and the sign below reads 'danger traversee de route'." +45053,A woman holding a wet umbrella glances over to the right. +565670,Man looking in mirror while adjusting his pokka dot tie. +344633,a couple of people riding on the backs of brown horses. +101456,A kitchen counter covered in metal bowls and dishes filled with food. +366096,a living room with some brick walls and a fireplace +469242,a train on a train track at a train station +153574,A flat screen TV sitting in a living room next too a shelf. +159977,A giraffe and a zebra checking each other out. +572370,A large dog laying on top of a floor under a chair. +239988,Five men pose for a photo as they sit on their motorcycles +213035,Two sets of hands are each holding a cell phone while another hand in the background is holding a glass. +127987,A baseball player bobble head next to two computer monitors on a desk. +560011,A mouse is next to a keyboard on a desk +18534,A farm with a herd of cattle grazing on it's green open fields. +208649,There is a lot of food to be eaten on this plate. +568265,A man flying a kite in a park on a clear day +351620,A long horn bull next to two sheep near a stone wall. +202587,A group of three zebra standing next to a tree. +395289,Guy sitting on ground in the middle of the street with traffic light behind him +163057,A group of people flying kites on a grassy field next to buildings. +408235,A cat laying next to a laptop and a computer mouse. +270593,a herd of elephants traveling on a grassy area next to a lake +379014,A tall sign sitting next to a traffic light at night. +554046,Two sheep standing in the snow in a pen. +125829,A blue bike parked next to a red fire hydrant. +470935,A stove top oven sitting underneath a microwave. +266677,A woman holding a microphone stands in front of two giraffe. +345356,A man in a gray shirt holds his phone as he sits by a man in a white t-shirt. +403231,An orange and white cat laying on top of a bed. +380348,A large room with tables and chandeliers +563938,Two woman and a man are seen engaging in a conversation +64334,A man behind the counter showing a tie made of wood. +287994,Two planes next to one another on damp airport road +534915,The man is running with a Frisbee while others cheer. +144723,A dog jumps and catches a red frisbee +127129,A table full of food and two glasses with drinks . +125476,A bench with potted plants sitting on top of it. +397135,several horses pulling two carriages across sand next to a body of water +321543,A pan filled with broccoli and beef and oil. +40341,A young man holding up two skis on top of snow. +293300,Two large elephants standing next to a wire fence. +21400,A man walking next to a girl holding a pink umbrella. +424270,a small child is sitting on a bed +565986,A woman holding a box open with a pizza in it. +296511,Polar bear stand on edge of a slide +92998,The kitchen features a table in the middle of the room. +320780,A minor league batter poised to swing at the ball. +194885,An attic space serves as a small cozy bedroom with sloped ceilings. +439427,a snow boarder ramping a small snow mound +79686,A room with some chairs and a bookshelf. +543985,A parking meter sitting next to a parked car. +553253,A man holding a bunch of green bananas over his right shoulder. +206859,A man holding onto a bin full of lemons +573877,An orange tabby cat that appears to be reading a computer screen or watching the mouse.. +181267,A bag of luggage filled with lots of different balls. +73595,Stuffed teddy bear sitting in the bars of fence with flowers growing +233882,A small red plane sitting on top of an airport tarmac. +519598,A clock reads almost 3 o clock above a dining room table +563926,a truck getting something dumped into it with a sky in the background +471641,A smiling man in a nice hat in a car. +80413,The small stuffed bear is propped into the car dashboard. +66087,A brown bear sitting on a bunch of fallen logs +169181,a bed with some white bed covers and some books +330955,A kid eating a chili cheese dog while wearing sunglasses. +244344,A blue bus parked in front of a building. +11625,A woman about to catch a frisbee on a beach. +43635,A bunch of people sit in an open court yard +439834,A zebra standing next to a baby zebra in a field. +346642,A lagoon with crystal blue water filled with boats. +269098,A man sitting on a couch next to a white stuffed teddy bear. +352151,a plane on an air port run way +505162,A red bus is parked on the side of the road. +81336,City setting with food truck parked near roadway with pedestrians. +538115,Two men on skis racing cross country in front of a crowd. +38439,A baseball player holding a bat standing on a field. +78627,A group of people standing outside of a bus. +541267,The cat is sitting by the open laptop on the desk. +41572,A couple of men on a field playing baseball. +398781,A man holding a surf board on a beach. +25138,A cat standing on top of an open laptop computer. +500270,A woman in black shirt riding a skateboard. +195079,A pile of luggage sitting behind a parked car. +474054,A man flying through the air while riding a skateboard. +575911,A cat is staring at the computer keyboard. +170425,A pile of broken stoves on a parking lot. +48728,A man swinging a golf club in a grassy area. +380088,A cow grazing in the field and a man standing next to it. +470366,fifteen different varieties of doughnuts in a display case +159790,A skateboarder is balancing on a short half pipe. +200638,A screen is mounted on a wall over two chairs. +180083,A skateboarder with white converse sneakers has a long shadow. +448923,A very long submarine sandwich sitting on a table next to bottles of alcohol. +157657,An elephant strolling through a trail with two people on its back. +428234,A plant is growing on the window sill in the bathroom. +438373,A cut in half sandwich sitting on top of plate. +224377,The young girl is posing with a softball bat. +67686,The restaurant presents a gourmet breakfast of eggs and toast. +66700,A land with a lot of different animals. +419473,Meatball pizza on a pan next to a glass of beer. +135671,The motorcycle procession made their way down the crowded street. +13466,Two street signs are shown against more buildings. +468133,Two white swans taking flight from a lake. +159667,A laptop computer sitting on top of a wooden table. +206036,A man attempts to ski in the few inches of snow left on the ground. +34520,A wooden fireplace mantle topped with a wooden clock and a candle. +271772,A man is flying a kite in the sunlight. +4011,Baker proudly displays her white dog cake in her kitchen +256309,A microwave oven sitting in the corner of a kitchen. +327352,Two railroad trains standing side by side on the tracks. +128168,The school bus is remodeled with bright paint. +359220,A person at a table eating some food. +301670,Man playing tennis ball in mid air hit. +19957,A couple of kids sitting in front of some pizza. +517445,two people standing near each other playing nintendo wii +491216,A cat walking through a kitchen by a eating tray. +304320,Several cows standing while grazing in a field. +260036,A man riding up the side of a skateboard ramp. +198661,a clock attached to a the side of a building +437262,two people holding skis walking up a ski slope +235743,A group of people standing on top of a beach next to the ocean. +220871,A surfer in a black wet suit and a blue surfboard is standing on the beach. +559790,Large commuter train parked on the track with no people around. +47226,A man in a black snow suit sits in his snowmobile in a snowstorm. +271452,A couple of blue street signs hanging off the sides of a pole. +218017,A person on a court with a tennis racket. +416467,A kitchen filled with a metal stove top oven. +82815,A giraffe sticking its tongue towards a cracker. +51119,A bus that has been burned is sitting in pieces on the street. +380932,There are mountains in the background and a lake in the middle. +143024,Group of people on laptop while in business meeting +106411,"A man sitting at a table on a balcony, using a laptop." +405973,A man holding a game controller in his right hand. +44508,A man wearing a black hat and a red neck tie. +185546,A bathroom with a white toilet underneath a window. +291675,The rocks in the background make this a dangerous place to surf. +296676,"A woman stands on some grass, holding some frisbees." +347620,A pretty young lady holding a black umbrella. +534018,A large crowd of people stand in the snow outside a building. +102858,A wooden bench sitting near a group of buildings. +518438,A string of stoplights is going across the street. +482233,A red stop sign under a green street sign. +214009,A lot of birds flying around on a beach. +100409,"Four young men in a living room, playing golf on a Wii." +299654,Two zebras lower their heads to the ground to graze. +405547,there are several cows that are seen laying in the grass +441072,A hospital room filled with lots of beds. +400525,a laptop computer sitting on a cushion open and running +576461,a car is driving down a busy street +271780,A red parking meter next to some people +63328,Two horses are walking in the snow to their carrier. +335887,A train moving on the tracks in treed area. +250365,A black animal stands behind a few trees with fall colored leaves. +403295,A bicycle locked up to a metal pole. +88433,A man riding skis on top of a snow covered slope. +378823,Man herding some skinny cows in a street. +499615,A blue and yellow bus traveling down a street. +201241,A polar bear keeping cool in the water. +185303,A picture of a woman laying on the purple sheets of a bed. +69544,Two little kids standing next to each other in snow. +483352,A metal parking meter sitting in a parking garage. +428263,The young kids are playing Frisbee in the field. +534194,a man sitting on a bench in a slightly flooded area +128699,A man that has a skateboard in the air. +292171,A formation of airplanes flying through a cloudy blue sky. +87377,pretty cat hiding inside of a brown suitcase +4760,A set of park benches near a lamp post +477853,A man riding a vintage motorcycle down a street. +99114,A group of people crossing a street next to tall buildings. +427386,an old rusty refrigerator is abandoned in a field. +502419,Two photographs of elephants in a rocky area. +568956,A flock of birds gathered on and around some people in the rain. +75857,A church filled with rows of wooden seats. +419216,A group of people eating at tables under umbrellas in front of a restaurant. +160728,The man stands next to a child standing on a canoe with a paddle. +564636,A person is performing a trick on skis. +396617,A boy skate boards down a neighborhood street. +512421,A passenger jet that is flying in the sky. +225456,a cat that is next to a computer screen +153692,A man riding a bike across a cross walk with a dog. +248912,A plate has a sandwich on it and is next to an apple. +464476,A laptop computer sitting on top of a table. +96241,there is a small black train and people looking at it +312056,A white cat standing on top of a suitcase. +93611,it is raining and a man in a rain coat is standing outside +350974,A couple sharing an umbrella on a rainy day. +357291,A woman in white blazer with black umbrella on street. +406093,A plate with pancakes that have fruit on top and with a cup +398567,"A desk with a computer, a keyboard, a mouse, a bobble head, speakers and a lava lamp on it." +560744,A group of two women and one man sitting at a table. +104841,A group of people that are fine kites. +85089,People are holding wine glasses next to each other. +536891,A small child sitting at the table eating. +50177,A man riding skis across snow covered ground. +62025,An image of a hotel bathroom that is ugly. +267710,A large flock of black birds in flight. +517629,White cat sitting in sink licking face in bathroom. +180357,Three women perform a dance with traditional umbrellas. +565395,"A man in glasses sitting next to a woman and holding up a red frisbee that says ""Cheese Shop"" on it." +51314,A man is surfing on a small wave. +564745,A young boy holding a rack fulled of tennis ball. +421206,The black and white cat lies next to a pair of sneakers. +488251,A man standing in front of a brown horse near a small building +140388,A man cutting a slice of birthday cake. +513189,a man is riding on a surfboard at the beach +395382,A girl and boy playing on a fire hydrant. +343706,A woman holding her cell phone tucked in a wool cover. +292944,some kids standing around during a little league game +573300,"A plate with soup, a sandwich and a salad on it." +151516,"A beautiful bird with brown wings, glides over the water" +302964,A very long red bus driving across a parking lot. +239894,A person wearing chaps with the rear end out and a stuffed bear hanging off their back +33672,A person riding on the back of a white horse through a dirt field. +93419,"A bear standing in grass next to rocks, behind a wire fence." +112769,A black and white photo of a man helping a woman cross the street while riding a skateboard. +460129,A man riding on the back of a brown horse through a forest. +155540,A ADULT BROWN BEAR IS IN THE GRASS +356836,A giraffe is standing outside in a field. +386929,A kitchen with a tile floor and a metallic sink. +56684,a brown donut on some white paper on a red counter +235006,An orange truck driving next to a forest. +120441,A man in a baseball uniform throwing a baseball bat. +166244,a computer desk with three monitors on it +568148,a woman holds a frisbee in a public park +505573,A dog wears a tie while on the steps +222828,A group of women standing next to each other carrying luggage. +322175,Various exotic fruits adorn a wooden surface. +123622,A guy looking into an empty refrigerator. +224155,a person taking a photo in a mirror +138979,A large white bus sitting in front of a tall building. +120509,A woman smiling while holding a sandwich while sitting down. +69196,many people walking into an opened air plane +71563,A large screen monitor on a desk hooked up to a laptop. +546932,A white bowl filled with vegetable and meat soup. +325473,A girl in a dress eating a hotdog with rack of clothes in the background. +574665,A cement truck sitting next to a wooden fence. +461036,Animal in shadows of woods surrounded by foliage. +37437,"Two trains, side by side, waiting at the train station" +486910,Some very pretty horses in a grassy field. +101884,Ivy is growing up the walls of a building. +528201,People that are walking on a tennis court with racquets in their hands. +579911,Two pug dogs and a sandal show on a couch +25521,A white plate topped with a fruity dessert. +280226,Blue flowers with green leaves in a jug vase +390684,Cars parallel-parked on a street with a street-light in the background. +559006,A big brown bear swims in the water. +314685,A man comes off a pole from doing a skateboard trick. +137265,A view of someone in the sky parachuting to the ground. +91334,A cat drinking from a white bowl of water. +24247,A dog in a mirror with a person in a room. +237942,A man is standing in the shade of the tree near a large field. +132499,A very tall brick clock tower sitting under a blue sky. +442161,Three people pose for a picture while drinking wine +51334,Vehicles are traveling down a snow covered hill. +188416,A black computer keyboard sitting on a table. +576513,A pony and a dog are outside in the hay. +353969,there is a man and a woman playing a video game together +85328,A commuter train at a stop in a major city. +543082,A sailboarder holds on to the sail in the ocean. +416309,a man is on a court with a tennis racket +340894,Two computers are sitting on top of the desk. +107183,Elephants walk in a line down the middle of the street +147386,a man sitting on a red and black motorcycle +1296,A woman holding a Hello Kitty phone on her hands. +326081,A dog laying on the ground with a pink frisbee in it's mouth. +135690,A man riding on the back of a dirt bike in the air. +556120,A room is cluttered with suitcases and boxes. +314027,an image of a union station that is lit up +226567,A row of parked vehicles in front of a tall building. +266768,a small cooler is on a wood table +91619,A red stop sign sitting next to a light pole. +570788,A group of horses are drinking from a river +217137,"Two children under a ""Sesame Street"" sign on a light post." +14773,A hotdog is sitting with fries in a paper car on a plate. +447522,"Rice, broccoli, onions, and tomatoes sitting on a plate." +424378,A man with glasses riding in a car with an adorable dog in the backseat. +264625,A vase filled with a bunch of pink flowers next to a coffee cup. +322149,Two elephants in a dry lot contained by fencing. +129062,A hotdog stand with outside seating and bright lights. +502557,"A birthday cake with a topper that reads ""Happy Birthday Forresto.""" +188411,a person that is flying a kite through the sky +532901,A Victorian house looked very much like this model one does. +108315,A dog laying on top of a bed in front of a red book. +544825,Five people are riding in a red boat on the water. +28713,a man that is holding a long hot dog in hand +144058,A view of the harbor with ships moored on a very foggy day. +137809,A kite is being flown in the air at the park +244571,"A L shaped couch with a variety of pillows on it, in front of a television. " +419401,an image of a train that has a bike sign on the side +71667,A man is walking down the street next to a pole with a clock. +13965,A green an White train car traveling past a road filled with heavy traffic. +444694,"Carrots, lettuce, broccoli and other fresh vegetables displayed on a cardboard box." +334686,A little girl holding twp donuts in her hands. +502433,A woman on the beach playing with a frisbee. +234251,A young child holding a Nintendo Wii game controller. +390246,A surfer teeters on the top of a wave. +219261,The people is riding the horse and carriage in town. +499618,People walking on the street next to a truck with caged animals in it. +354132,A man standing next to a motorcycle on the side of a hill. +283743,A display of chocolate donuts and some pink and white cookies. +422434,A commuter train crosses over a train bridge in a down town city area. +456146,A group of sheep grazing on a roadside +291245,A computer keyboard sitting next to a computer mouse. +59044,A group of people looking at some kind of show or exhibit +262895,"A man wearing a tie, jacket and white shirt." +567340,A woman eating something wrapped up in a bun. +117380,A motor bike stationary in a parking lot. +35940,A street sign sitting on the corner of a sidewalk. +246951,A group of people standing on top of a sandy beach. +280891,A woman standing next to a young man near a pile of fruit. +197130,A man walking behind a city bus next to a building. +570693,A group of cows cross a desert road. +191613,There are people standing on a red double decker bus. +14167,a male skateboarder in a blue shirt doing a trick +353149,A very cute cat sitting on a park bench. +513066,A doctor tending to a persons injured leg. +173907,A cat sitting on top of a wooden fence near a vase with flowers. +119226,A person is holding a surf board in their hand +497299,A couple of people standing on a beach flying a kite. +45535,A zebra walks by himself in the brush. +156704,a crowd of people on a beach by the ocean +373374,sandwich sits on plate with dipping bowl next to a cup +320864,A boy wearing a helmet skateboards through water. +96327,"A banana, peanut butter, and crackers is sitting on a white plate. " +461722,A beautiful girl sitting at a table with an orange. +423919,A young boy in a red shirt looking at a cell phone +141247,a close up of some books on a table next to a vase of flowers +320396,a gnarly Frisbee player laying out to make a catch +48956,A giraffe eating leaves from a giant rock. +233727,A bus coming around the corner on a city street. +65533,A couple of people in the water with a kite. +26045,A long line of white urinals in a public restroom. +468297,a group of teens standing around holding onto skateboards +573853,A pizza with thick crust sitting on top of a pan. +479732,A very interesting sandwich containing lots of vegetables. +150098,A horse standing in the grass in a fenced in area. +389812,A smiling man holds a bunch of freshly picked bananas +81394,A tan utility truck with a blue interior. +310473,There are a lot of buses lined up on the street +350736,A large building on the corner of the intersection. +253825,a vase with some flowers in it as a fake bird sits next to it +34096,A house being built with lots of wood. +212853,A happy woman about to eat a slice of pizza. +186977,The young boy is holding a tennis racquet. +236323,Contents of a refrigerator inside compartments on the door. +193480,A professional tennis match from very high up in the stands +252332,A stop sign is shown among foliage and grass. +283216,A woman standing next to a red scooter near a shelf. +136355,A kitchen with a bright window and house plants +266437,A person jumping on a skateboard near a fence. +512564,Various vehicles are driving down a city street. +131207,A couple of birds standing on top of a wooden bench. +60363,A large clock mounted to the side of a building. +462148,a couple of cell phones sitting on the counter +68396,A pizza sitting on top of a plate covered in cheese and tomatoes. +172877,A man in a shirt and tie sitting on a white chair next to a lamp. +5184,A pair of grizzly bears mating with each other +71711,A large airplane museum with old war planes. +98658,Banana bunches are shown on top of a truck. +208708,A light that is above a white sign. +89924,a large teddy bear that is next to a log +365709,some buildings cars and street meters and a sign +351331,a small pepperoni pizza next to a fork +64155,A grey and black bathroom with an odd shape vanity. +120021,A motorcycle with a red seat is on top of a stand. +532403,A pile of scissors of many colors and a ruler. +325768,A small kitten is lying on the seat of a large motorcycle. +38092,Two large elephants and a small elephant walking off a road. +511324,A beautiful woman sitting on a chair on a laptop. +224736,A professional kitchen filled with sinks and appliances. +334405,A bus travels on a road near buildings and parked vehicles +161220,A couple of dogs fighting over a red frisbee. +45835,A group of women enjoying wine and cheese. +91756,A man in black shirt and tie standing next to fence outside. +134278,A woman and a man in a wheel chair sitting in front of a table with a cake. +100723,A large group of people standing in the street. +338153,A traffic signal showing that it is safe for horses to cross. +322822,Clocks on a the tower of an old building. +473839,a person siting on a brick wall with a tie +205222,A half eaten donut on one plate a missing piece of cake on another plate. +111874,A baseball player swinging at a pitch with the catcher behind him waiting for the ball. +461063,a lady in blue shorts and white shirt swinging at a tennis ball +440486,A river filled with boats next to a tall building. +506943,"A bed with the covers turned down, a tall wooden headboard, and a bedside table with a lamp." +68546,A group of people are all holding up there phones +272718,a person para sailing on the ocean waves +242363,"A bathroom with a sink, toilet and shower bathtub combination." +520043,A truck parked by other vehicles covered in graffiti. +10386,Guy takes a picture with his back to the river and mountains +360434,a man in red and plack sleeping on a park bench +577651,a person riding skis on a grassy field +577277,A woman strikes a funny pose while holding a book. +463771,A young woman is happily setting up some apples for putting caramel on them. +345559,A woman eating a variety of different food off of a white plate. +449190,a close up of a burrito french fries and a cup of fruit +108864,Two elephants cross tusks in confrontation in a field +398792,Two giraffes grazing from feeder next to trees. +301506,A sandwich being browned on a buttered grill. +558927,Two giraffes are munching on leaves in a grassy field. +396252,The bluebird is just sitting quietly on the branch. +272658,A room that has stained glass windows separating another room. +332512,A small bed in a room with a small white sink. +476767,A yellow lab is sleeping on a brown couch. +410912,A train pulling into a station with a red bench seat. +423769,A green bathroom with a mirror and a pink sink. +13882,A very cute looking black dog laying on the floor. +97865,There is a man throwing something at a target. +508872,the young couple is laughing over the toothbrush. +37777,The dining table near the kitchen has a bowl of fruit on it. +307731,A cup of cocoa with a spoon and a side of croissants. +188674,"Group of whimsical, colorful artificial flowers in bottles." +248953,a man riding a rail with a snowboard +170613,Surfers holding boards standing in water at ocean. +72077,Hospital display of different bed setups and a nurses uniform. +575544,A gray motorcycle parked in a parking lot. +111325,a small child and a group of cows +460997,A young man riding a surfboard with only one leg. +539566,"a bowl of broccoli,black beans and greens next to a small bowl of red peepers" +569703,A herd of elephants crossing river next to trees. +350467,The people are on the beach enjoying the sun. +307995,A glass and bottle of wine next to cat statue and window. +224970,A couple of street signs mounted to the top of a metal pole. +251206,A group of sheep standing on a road and a road side. +24996,A bathroom with a glass door and a sink. +142386,There are multiple pictures of the same man standing in the kitchen +369547,An area with rocks on the ground and a dog sitting on them. +98261,Two brown and black birds staring on a curved wire. +170292,A group of people playing football on a field +448837,A man in a bed is eating a doughnut. +452684,A large pitcher of some beverage is on the table next to orange slices. +172977,A zebra chews a flower in a fenced in field. +507950,Several cows in a field with a train passing in the background. +437732,A man hitting a tennis ball with a racquet. +181132,A building has a stop sign right in front of it. +153543,A woman riding a paddle board with a little boy. +15079,Two peanut butter and jelly sandwiches sliced in half +54598,A wooden table with a white plate with a doughnut on top of it. +422729,A horse pokes his head over the metal railing. +458510,The plate full of food has a side of beans and cheese on it. +196799,A train engine parked under a passage way on some tracks. +189103,a black and white photo of a male sitting on a bench +194352,A baby brown bear standing on it's hind legs. +117908,A man looking in the refrigerator with a cat also looking inside +215596,A bathtub sitting under a chandelier and next to a pair of windows and a mirror in a bathroom. +203687,"A circular green and white sign that reads ""car parking"" in front of cows." +443101,Two cows are in a mountainside field with snow-covered mountains in the background. +421478,A man in a tie with a shirt jacket thrown over his shoulder. +550702,there are many different plates of food on the table +408143,there is a glass vase with a cloudy liquid in it +285660,A herd of oxen resting on a beach by the water. +238431,A light brown horse's face is shown at close range. +8170,A refrigerator and a stove occupy a kitchen. +111593,A man in orange shirt holding various kites next to cabinet. +208283,A person in a vest stands next to a boat. +473767,Railway crossing sign and vacant train tracks and road +63661,"A kitchen area with counter, sink , stove and windows." +442348,A woman sitting down holding onto a fork. +272953,A brown horse grazing on a lush green field. +114479,"A few pieces of luggage sit, stacked neatly, on the ground." +477435,A wooden clock tower sits in a clearing on a clear day +446352,A small white cat sitting on top of a laptop. +393838,A pot full of vegetables and ready to be cooked. +89743,A city street filled with traffic next to buildings. +256470,A horse standing in the open field looking a the lake +553443,Guy bites an apple while the other two watch in the computer room +509129,A group of people that are standing on a carpet. +276260,A man is riding a brown horse along with a black horse. +519916,People playing beach tennis on a cool day +441211,A train traveling down train tracks past some houses. +494759,Two people on a beach flying a kite in the air. +363784,A white bath tub sitting under a window. +86147,A beautiful bride standing next to a her husband as they cut their cake. +563723,A man sitting in a chair eating food with a kitten on his lap. +191095,Empty stage set of a modern suburban kitchen +457217,a person petting a small elephant statue +557819,A close up of the front and of a bus. +441240,Four people on a tennis court holding tennis rackets. +19624,A busy street at night with parked cars on the side. +423480,GALA APPLES ON DISPLAY IN A PRODUCE DEPARTMENT +223832,Chocolate ice cream next to a banana on a flat surface. +225184,A dog herding a group of sheep in a meadow +451155,A woman sitting in front of a laptop computer. +509514,A small child thats eating and watching Mickey mouse on a phone. +150508,A woman sitting on top of a bench while reading a book. +546639,"A home office with leather desk chair, computer and hutch, and bookshelves, with books scattered on the floor." +546854,a pitcher of orange juice with orange slices in it +12881,Baseball players playing a baseball game on a baseball field +244099,A person riding a horse in an empty area of dried grass. +129988,A powder room in Morocco with an arched doorway and white towels on a brass stand. +98872,"Front diagonal view from hips up of a woman holding a beer out at side, face to face with a man wearing sunglasses with his tongue out, both wearing neckties, by a wooden wall." +124636,A baby cow standing in a pen next to another cow. +510681,A bed in a bedroom sitting under a painting. +509867,A woman standing on a tennis court with a tennis racquet. +474188,a green bench sitting on the side of a wall +272688,The woman and baby are watching the elephant. +467696,A man riding on a boat filled with luggage. +38685,The oriental signs are pointing in all directions. +51203,A man and a woman sitting on a couch together. +36477,Close up on bunches of yellow ripe bananas. +298197,A group of teenagers working on computers with adults behind them. +498650,A herd of elephants standing on leaf covered ground. +529944,A woman kneeling down on the floor before an oven. +121242,A horse drawn carriage parked on top of a field. +384036,a group of urinals is near the trees +21397,A yellow plate topped with bread and slices of fruit. +145215,A surfer carrying his surf board out of the ocean. +410350,Two cooks standing at the counter on a kithchen next to bottles. +367732,A man holding a birthday cake with a small child. +319677,A beautiful woman holding a sword while wearing a tight white shirt. +70896,A group of men riding boards on top of waves. +87929,A look of a bathroom sink through an open door. +229753,Two tall giraffes are next to bare trees. +513417,An elephant is standing next to a rock +556205,Two individuals riding bicycles on a board walk. +392506,"A woman sitting behind bananas, cucumbers and a pan." +193429,Man sitting in snow with snowboard attached to shoes. +310202,A woman standing in front of a table full of bananas. +98871,A small cat lies on a fluffy white blanket. +107582,A plane is on display near the water. +525777,A picture of a man sitting in a train. +372191,A group of young people sitting around a piece of luggage. +40886,A pitcher winding up to throw a pitch in a San Francisco uniform. +8803,A man in costume standing next to a building. +435785,Several cows laying down in a hilly area near a body of water +161144,large dog retrieving the frisbee for his owner +486986,there are many skiers standing in the snow +540645,A person laying on a bed in a room. +504005,A pan filled with an assortment of vegetables and a wooden spoon. +102056,A group of people are waiting beside the small blue bus. +309696,A fire hydrant on the side of the road spraying water. +100098,A woman on a brown and white horse rides near trees. +157378,a close up of flowers in a vase near a wall +206431,A woman is taking a bite of pizza. +331250,Three guys stand with their skateboards and there is a logo at the bottom. +293022,A collection of artwork leaning against a wooden fence. +359781,The giraffe is walking toward a rock on a trail. +476664,A small cat laying on the ground in a room. +320899,my mom must have cleaned up my room today. +138784,A long red and yellow train traveling down tracks. +371427,A picture of a person a dog and a horse. +295451,A small parade of folks in traditional dress that are on parade. +462211,a sign in a cityscape light sup in the rain +304484,An upright clock near wooden tables and chairs. +176841,A photo of a person cutting chicken with scissors. +350054,a cat sitting on a table next to a tv in a living room. +318238,two dachshunds and a cat sleep on a bed +514901,"Saltine crackers lay next to a wedge of cheese, with grapes and other items surrounding them." +31106,A man wearing a blue tank top holds out his arm toward a hovering Frisbee on a beach near a lake. +577826,Two skateboarders riding their boards on a sidewalk. +39760,A person para-sailing in the water with mountains in the background. +446113,A train passing by a field with a grounded airplane +35825,Woman standing in living room using video game controls. +63309,A big rock walkway is on a hill beside the ocean. +140921,A white surf board sitting on top of a beach next to the ocean. +12047,A male baseball player swinging to hit a ball. +570826,a public transit train on a train track with buildings in the background +521634,A street light with many signs on it stands to the foreground of a large building standing beside a naked tree. +337777,there are four aluminum canoes sitting in the water +366295,A group of large elephants standing in the water. +266115,A stop sign on the corner of a street. +13525,a nude person sitting on a bed with sheets and pillows +187177,A dog gets its teeth brushed by a man. +320658,A cat sleeping on top of an open laptop computer. +442175,"Old, tusked elephant eating grass with his buddies" +36660,Someone in sandals is standing over a broken cell phone in pieces. +342260,A woman wearing a pair of skis +111801,a big yellow truck parked next to a building +363981,A couple of men riding on top of skateboards. +300842,A skateboard that has its wheels on the floor. +302536,a person wearing a green hat playing nintendo wii +13148,Two men standing next to each other in front of a table full of alcohol. +252468,Boy sitting on a bench with an angry birds toy reading a book. +353136,A person brushing a cat with a brush. +562943,a person holding a surf board on a beach +305713,Three pairs of scissor sitting next to each other. +73009,a man sits on a toilet in a bathroom. +18485,A wooden bench sitting on a lush green park. +434580,A pretty young lady using a laptop computer with a black cat on top of it. +378831,A woman carrying shopping bags past a tall fire hydrant. +338291,A young person holding a snowboard while wearing a helmet. +157390,White bowl full of chopped carrots and broccoli. +57571,A painted vase is holding several colorful tulips. +529649,A cat standing next to an open laptop computer. +424842,A laptop next to a book and someones lunch. +572095,A group of motorcycles parked next to each other. +80953,"Two people, a woman with pink hair and a man, hold wine glasses and the shelf in the distance is filled with bottles." +183735,"A display of cheese, fruit, and wine is on display." +107306,Numbered row boats lined up along a small dock +336341,"a little boy with a suit, tie and glasses" +128679,A gray and white cat sitting in window next to a tiger cat. +268059,The woman stands cooking at a pot over a fire. +556028,A hot dog on a bun wrapped in tinfoil. +325517,A close up of a full cooked pizza pie. +363908,A baseball player bunting at a baseball game. +411875,A black and brown car on concrete floor. +228344,A woman holding a tennis racquetball in a blue shirt. +15596,Two speed motorcyclers turning a corner very sharply +374545,A flag is flying in a green grassy area. +292769,Someone is sticking their fork into a dessert. +72050,A city street at night with a green signal. +575763,a smal bench holds a teddy bear and an embroidered pillow +140231,"a work desk with display with graphs, notebooks, and keyboard" +72539,Several sailboats in the water docked at a marina. +520478,A man shrugs while missing a tennis ball in a tennis court. +161758,A train turning a corner around a hill outside of an ocean. +15148,A man and a woman sitting on a bench at a tennis court. +542374,"Two bottles of apple cider, an apple and a garnished entree." +161603,A cow inside a brick building with people looking at it through the door way. +62491,A man with a grey shirt and black jacket takes a picture of his bathroom while standing in the mirror. +187647,Two brown teddy bears sitting on top of a wooden table. +468996,A prosciutto and pesto pizza before being put in the pizza oven. +167003,A beautiful young lady eating a candy apple on an amusement park ride. +402855,A group of boats sitting on top of a beach. +375902,A woman approaches the finish line on skis +162445,Kites flown in large grassy open area with numerous onlookers. +163479,A group of people getting their surfboards and heading for the ocean. +204137,Children playing in a soccer competition on a grass field. +390841,A man standing on a boat holding a knife. +354527,A sandwich with lettuce and toasted bread on a plate. +545268,Three people sitting with game controllers in their hands. +43448,A baby and adult elephant are standing by large rocks. +282298,A group of people milling about inside a large space in the winter. +560235,A city intersection at Castro street with three stoplights +272129,A person in a yellow outfit flying two alien kites. +87470,A bunch of cows walking on the side of the road +113977,An audience watches as a bird spreads its wings. +565954,A can sitting on a wooden table next to a window. +496687,Young boys in suits and ties posing for photo. +417217,A long white passenger train traveling through lush green countryside. +71451,A clean bed in a hotel room with towels and soap laid out +491947,A woman and a man standing next to a table using a laptop. +375407,Two dogs are sitting a neatly made colorful bed. +210457,A couple of young men are playing frisbee. +72096,A woman sits at a table for a meal. +475484,There is a bright yellow parking meter on a red sidewalk +257187,Two female friends posing with a bottle of wine. +475928,A brown and white toy dog looking in a mirror. +69959,a dog running with a Frisbee in its mouth +165919,A bench sitting in front of a group of vending machines. +279692,A microwave oven sitting on a kitchen counter. +372494,A player is standing gay the diamond to lay baseball St the fame +359436,A young woman is flying a kite at the beach. +550055,An airplane getting ready to take off at the airport +570394,An oven that has four trays of cookies baking in it. +482917,"A dog sitting between its masters feet on a footstool watching tv +" +68277,A father reads a story to a child while lying in bed. +174888,A young man eats a slice of pizza. +160260,an image of a banana tree in the air +46323,a close up of two zebras in a field with trees +116957,A mostly empty train station with two trains ready to depart. +409116,An empty hospital room with a bed and religious peripherals +61805,A man is playing frisbee by herself on the beach. +579240,Lots of people are sitting at a long table sharing a meal. +280293,A distant shot of a beautiful looking boat area outside of two buildings. +471043,A restaurant kitchen with two giant menus sitting above the cooking area. +467742,A woman carrying a red purse filled with hot dogs. +292988,A pretty young lady standing on skis on a snow covered ski slope. +188183,A guy with a gray sweater and a guy with a blue shirt play video games together. +114025,A woman stands in a field holding a kite. +176906,A herd of animals eating food inside of a pen. +405191,a group of people playing frisbee out side +47137,A hand holding a remote control is shown in close up with a television in the background. +201887,A red VW bus parked on the side of a road. +349737,A computer on a table with all kinds of bottles and other items. +519182,A chocolate cake with a ring on it is on a white plate. +577212,"A kitchen area is being built that contains a deep sink, a dishwasher, and cabinets. " +511844,A man carrying a large US flag on a horse riding down a town street +388531,"A nearly all black snapshot shows a man standing sideways and looking forward, who is wearing a dark coat and hat and a bright pink tie. " +533434,A downtown urban street scene with skyscrapers and historic buildings. +494220,A sandwich sitting on a kitchen too next to a keyboard. +225609,A laptop computer sitting on top of a wooden desk. +562289,A cat sitting behind a white toilet next to a rug. +169166,A couple of people walking down a sidewalk with stars. +397291,A brown teddy bear sitting on the ground next to a comic strip. +125100,"An attentive dog sitting along the back of an overstuffed sofa, with another dog sniffing while standing behind a curtain." +233997,A welcome mat placed at the foot of a closed door. +363100,The inside of a restaurant that has tables and chairs along with a chalkboard with writing on it and shelves. +346841,There is a basket with beautiful flowers and fruit in it. +330410,This couple is playing wrestling on their Wii. +315564,A man on a bike with a skateboard in the street. +132622,The large bear is looking in the direction of the camera. +286760,Cake iced sitting on top of cake stand with bowl next to it +97036,The two young children are playing with a plastic chair. +166478,A young guy using his computer and talking on his phone. +437393,a carousel horse has a rose in its mane +477846,A country road with a street light and signage +160199,A giraffe standing in front of a stone building. +447448,"A living area with a kid playing, a piano and windows." +75611,A couple of brown horses standing on a grass covered field. +396274,A plant in a garden near a white building. +558498,four people sitting on a bench and some pink flowers +315181,hamburger and chicken sandwich wrapped in wax paper +561928,A bike mounted to a wall next to a tall pole. +53958,a woman on skis with a red shirt is posing for a picture in some snow +22755,A rear view mirror sitting on the side of a yellow bus. +452793,A kitchen with a granite counter top and faucet. +16451,A bunch of surfboards that are in the sand. +430002,a close up of a plate of pizza near a computer keyboard +195697,A person riding a snowboard down a hill. +17073,Two people walking down the sidewalk with each other near a Street +503845,A yellow train traveling down train tracks past a bridge.. +271206,A white sink sitting underneath a round mirror. +261563,A brown dog and a black dog play with a yellow frisbee in a field. +570107,A man with a backpack on with a cat hanging out of it. +99081,"A person trying to get on a train, but the door shut." +263588,A cat pawing at a television picture of some penguins. +561256,A woman wearing a hat & pink top takes a selfie in front of a bathroom mirror. +71095,A man standing on top of a field wearing a baseball uniform. +400189,A bus driving down a street next to a lush green forest. +10764,A catches crouches on a patch of dirt. +502982,A tennis player with a racket at the court +500139,A stop sign sits on a street that is lined with cars and a firetruck sits in the distance. +4227,There is a tennis player about to hit a ball +61316,a kitchen with a nasty dirty kitchen with a light beam through the window +211175,The benches are empty in the nighttime sky. +12669,a lady holding a glass of wine and a man holding a beer +46812,"A white bowl holding ramen, broccoli and carrots." +135460,A plate full of doughnuts and bananas in the background. +182923,A woman swinging a tennis racquet on a tennis court. +498940,A group of people including military personnel play soccer together. +180560,Two women in a room with one of them holding a cake. +112820,"A red, white and blue train next to satellites." +526353,Several people are waiting outside an airport with their luggage. +500110,A man sitting behind a large pile of vegetables. +566656,"An antique picture of a man, woman, cat, and dog." +262651,A ship sits in a dock next to loading equipment and shipping containers. +361687,A baby in a white crib sticking its hand through the bars. +302606,a kid is sitting in front of a few plates of food +489745,a hand opening up half a sandwich with green sauce +135256,A salad of vegetables and nuts in a white bowl on a table. +48376,A zebra looking at the camera with other zebras behind it in the wild. +205409,A woman wearing a net on her head holding a box in a kitchen. +443303,A cat laying on clothes that are in a suitcase. +350134,An elephant with it's trunk laying on a white gate. +393805,The two zebras are fighting for their own territory. +553074,A little boy is sitting on a skateboard. +433136,a man is doing a trick on a skateboard +20470,two giraffe heads standing close to each other +278890,A woman using a smart phone with her two hands. +184611,Guy pedals a bike through a small village. +143483,"a living room with a brown coach, leading into dining room with big window." +308512,There's a grill with a pizza cooking inside of it. +156503,A group of buses parked in front of a tall building. +263083,A man riding a wave on top of a surfboard. +494970,Flowers sitting in vases that are on a wooden table. +472509,A baseball player pitching a baseball holding catcher mitt. +283816,a kitchen with a refrigerator a small table and chairs +543385,Three zebras eating hay at a wildlife habitat. +562686,A train crosses a bridge in a large city. +144655,Two ducks swimming in a grassy pond together +521400,A female tennis player stands close to the net holding a racket. +113294,A man tying a boat to a shore line by the water. +295303,A young child eating cake with pink and white frosting on a high chair. +122535,A bunch of trains that are on a track. +394251,A fleet of semi trucks driving through orange traffic cones. +226571,A couple of men riding on the backs of brown horses. +185240,Mom gives her daughter a lesson in using her baseball glove. +316007,Two guys on the ski slope while one holds his snow board behind his back. +402330,A white toilet on the ground by some junk. +307866,A man standing in front of a mirror holding up a cell phone. +399832,A stainless steel table is in the middle of the large room. +395402,A small tricolor terrier dog in a pink collar. +366677,"A pizza sitting on a table, it appears to have everything on it." +2061,A public restroom with a garbage can and shower hose +29056,A sign for a state fair is under a street sign. +185475,A bus sitting beside a sign that says tow zone. +64015,A young boy carrying two skateboards across the street +324051,a man attemping to tie his tie +448983,A large white castle like building with a statue in front. +987,The stove has a coffee pot on the burner and a pot in the oven. +309366,A train traveling down tracks next to a power grid. +75886,A plate topped with a cake and a hat. +454414,there are many statues of zebras all around the field +550477,A person sitting at a park with luggage. +373119,A couple of people riding on the backs of horses. +123585,a few birds eating stuff off the ground +452113,A group of people posing with half a dozen large cupcakes +428885,A man standing on a roof holding an ax. +421822,A giraffe standing on top of a dirt field near trees. +377406,A white wooden bench sitting on top of a green hill next to the ocean. +528738,A pile of different types of vegetables on a table. +351823,A man holding a tennis racquet on a tennis court. +268052,Two cats in a chair taking their naps. +439623,A white fire hydrant sitting on a sidewalk. +229740,A yellow striped cat sitting on a bathroom sink. +361171,a person riding a snow board in the air +434159,A grey castle with various towers and windows. +124215,A computer mouse sitting next to a keyboard. +70921,Woman adjusting man's tie in occupied room with others. +125084,A yellow fire hydrant is standing in the snow. +154202,Several different types of electronics sprawled out on a bed. +533201,a jumbo jet sits parked in an airport +351930,A fighter jet sitting on top of an airport tarmac. +52507,A person that is going out in the water. +346972,A woman standing in a kitchen next to a sink. +179415,A man sitting in front of a laptop computer. +350491,A cow on a hill top looking for something to eat +450464,A railroad train heading toward a traffic light on the tracks +232649,A bathroom has the blue toilet seat off. +232357,A bunch of household items sitting in one room. +384308,The small dog sitting in the center of the walkway. +227958,A produced shelf in a store filled with fruits and veggies. +300867,Two small beds with white and red sheets. +445658,A family kitchen cluttered with items on the counters +49853,This doughnut has chocolate icing and sprinkles on it. +279716,A bunch of surfers carrying their boards into the ocean. +405632,The marina is full of several parked boats. +292647,A man riding a wind sail in the ocean filled with waves. +45685,A man in a striped shirt hitting a tennis ball +472233,a parade of motor cycles being watched by a crowd +281711,A kitchen in an apartment with a wooden floor. +315742,A person is sitting at a computer desk with a cell phone. +190463,A man riding a skateboard near a ramp. +263323,Two men are playing a video game in the hotel room. +11925,"Two trays hold fruit, vegetables, cheese and cookies." +59352,A man riding skis down a snow covered mountain. +153506,A plae with a sandwich cut in half and french fries. +251019,A person near a tennis net holding a tennis racket. +348730,A man who is riding a skateboard down the street. +83925,A child is playing with a ball in a batting cage. +245411,a person with a base guitar is on a laptop +56504,A group of people that are holding onto sheep. +262242,A woman standing on a tennis court holding a racquet. +329336,Two horse drawn wagons in a dusty field. +520868,A pony with blonde hair is in a mountain top. +377951,A doll standing near a piece of pizza +307034,A baby feeding cake to a man with a fork. +134888,A baseball game is in action at the plate. +140540,A train engine carrying carts over a hill side. +319283,"Pepperoni pizza with greens, being eaten with a fork and knife." +579307,Man and son standing on the beach side with a self assembled kite. +246014,A woman in white dress playing a game of tennis. +434510,Surfer riding breaking intense wave all the way to shore +375875,A dark room with a laptop on and someone sitting +135890,A large stone building with a clock on it +172088,A tennis player running forward during a tennis game. +22797,An airplane close to the ground with its landing gear dropped +400456,A man riding on the back of a brown horse in front of a truck. +458861,two men in helmets skateboarding down a street +74456,A man on a skateboard performs a trick on the ground. +104685,A trio of race horses going down the track at top speed. +160860,A sliced cake on a dining table with a knife next to it +422375,A person in a suit takes a photo of themselves in the mirror. +203201,A small child is holding a baseball bat. +20571,a group of boats parked next to a dock in the water +522941,A painted elephant in a pen on a clear day. +399744,A crowd of people shopping for fruit in a farmers market. +109537,A man riding a surfboard on a wave in the ocean. +205533,A bathroom with powers on a towel rack under a painting. +171595,The brown dog looks threw the diamond openings on the bench. +485219,A baby elephant standing next to a small watering hole. +86843,A smiling toddler on a surfboard with a fake wave simulating surfing. +455315,A busy chinese market crowded at night. +478136,"A plate of assorted donuts, muffins, and danishes." +473754,A guy and a girl holding surf boards on a beach. +429759,A street with several vendor stalls and people walking around. +261097,a man plays tennis in front of a large audience +511307,A dog is curled up on a bed under a blanket. +137727,A motorized cart fills a train with luggage +460684,A group of men sitting at a table together. +403096,A group of yellow bananas hanging by a door +218494,A laptop computer with a wireless mouse sitting on a desk +83639,a clear desk with a laptop and computer on it +86878,A young woman holding a tennis racquet on top of a tennis court. +524621,A couple of giraffe standing next to each other in a forest. +264919,A man is making a phone call while surrounded by balloons. +301135,Many people are sitting on two benches next to a light pole. +161720,The bathroom is in the middle of a renovation project. +521995,A laptop on a desk in a room. +214463,A bathroom sink with toothbrush holder and soap dispenser +493219,a couple of people that are sitting on a park bench +385078,"Somebody is gotten in the peaceful of the picture. +" +435466,"A kitchen area with shelves, counter and bar stools." +431923,A open book on top of a computer keyboard. +32102,Many colored umbrellas hanging from an outdoor open grid ceiling. +166482,A table in a bookstore's cafe with a laptop +203488,A silver and gray parking meter sitting by a tree. +19786,One person standing and another bending over in the foreground. +571746,A train goes down the side of a mountain in the snow. +56544,A train on bridge passing over water with city in the background. +431152,People walking down a residential street where cars are parked. +111546,A traffic light on a street with some people. +341973,Two girls pose for a photo holding doughnuts. +239010,A dinner party draped in sheer drapes and adorned with stuffed farm animals. +35436,There are very few people inside of the large train station. +328957,A cat sitting on top of a cat post in a living room. +74853,A man riding a skateboard over a metal rail in a parking lot. +397,A cheesy pizza sitting on top of a table. +505576,A large group of people with umbrellas on a street. +464286,Several cows stick their heads out of a pen to feed. +532735,A couple of men peeing in public urinals. +431023,A woman walks on a sidewalk talking on her phone while others stand near. +572604,Red brick building with fire hydrant and car with cloudy sky +139072,On a baseball field a player wearing white and a player with a black shirt and white pants are near each other. +241431,A knife sitting on top of slice carrots. +110138,A group of red and yellow buses parked side by side in a parking lot. +328683,A parking meter decorated with different colors of paper. +540529,Three giraffes behind a wire fence next to a tree. +43243,A TV sitting on top of a counter inside of a store. +185774,Two zebras stand together in a field. +29573,A suited man strides past ornate architectural feature. +231362,a small bird on a branch in a tree +472598,An old-fashioned green station wagon is parked on a shady driveway. +562645,A pair of dogs sit on a bathroom rug. +19817,A white toilet tin a bathroom sitting next to a sink. +29437,A woman that is sitting down in the snow. +191691,A man is shaving while looking in a mirror of a cluttered bathroom. +139490,Lunch pails packed with healthy and unique foods +430567,a kitty sitting in a plant with two glass mushrooms in the planter +402795,A woman is sitting down on a chair with a bag. +40109,Rows of gray and black keyboards make up several different pictures. +383470,A freshly plowed street is a winter wonderland. +485368,A pair of scissors sitting on top of a able next to a sponge. +51429,Bunches of bananas are hung on a chain beneath a pipe. +75372,A giraffe is poking its nose into a girl's beverage cup. +11081,An experimental airplane flying through a cloudy blue sky. +112581,a person in a clothing store wearing a hat +264554,Commode near white shower curtain in residential bathroom setting. +154846,a pizza with some pepperoni and mushrooms +538242,A man riding a motorcycle approaching a man wearing camouflage clothing. +426852,An indoor garden show which focus on a large vase. +514018,A kitchen with two shiny counter tops next to a wall mounted oven.. +268541,a man in a suit drinking a cup of coffee +336113,"A bathroom with a toilet, window and tape on the floor." +542634,The woman wears a helmet as she rides a brown horse. +389969,A large orange and white cat sitting in a field. +528049,A well-used laptop computer next to a pristine Macbook Pro +1525,A plane parked in a large airplane hanger. +468751,A woman on a cell phone on a street. +517807,a man in red is sitting on a barrel +172716,Black and white photograph of man riding a skateboard. +188084,"Sandwich, iced drink, and a pair of glasses sitting next to each other. " +361972,A glass plate topped with a piece of cake. +357620,A donut that is on top of a table. +443006,Four giraffes walking along the ground next to a little lake +1205,"A hut with a bed, lantern and pillows on the floor." +91263,A woman making sandwiches on a kitchen counter top. +165543,Even a giraffe looks next to a sauropod. +336568,A black dog running in a pen with a horse. +482951,a small girl in a blue and white dress and a colorful kite and water +321064,A small wooden table covered with delicious vegetables. +448964,Multiple city buses parked in a storage area. +56891,A brown horse grazing in an open plain. +368072,A couple of people at the beach during the day. +461255,A guy is flying high while using his skateboard. +300032,"An electric fence with a sign behind it that says ""A flood can happen anywhere.""" +448426,A tall giraffe kissing the bark of a brown tree. +121987,Bunches of garlic and bananas hanging from a stall. +390099,A man holding a baby with a laptop in front of them. +78107,A cat sits in front of television intently looking at it. +561810,The person with the paddle is waiting for something to fall. +134098,A person riding a snowboard down a snow covered slope. +269600,A clock with the Seiko logo underneath it. +103460,The skier is headed towards the architecturally -unique ski lodge. +68950,A man riding a paddle board along a river. +388211,Three hot dogs with ketchup and mustard on a plate +83494,"A plate topped with steaks, broccoli and carrots." +515043,The air plane is traveling down the runway at the airport. +407614,A smaller kitchen with a very decorated fridge. +551086,A women who is taking a picture with her cell phone. +500116,A group of people standing together on a field smiling. +117396,A portable bathroom has a gray plastic urinal. +382111,A man riding on the back of a brown horse. +458073,"A table on which a typewriter, books are kept and other gadgets are there." +276580,A baseball player holding a bat while standing on top of a field +544605,A bunch of brown signs on a pole. +522175,A couple of horses standing next to each other on a field. +279463,A magazine with the title Games for Cats is showing two cats in a toilet. +249969,"Meat with chutney, green beans, broccoli, stuffing, carrots and potatoes on a dish." +260409,A person in a helmet standing by their motorcycle. +164095,A zebra and an elephant investigating each other in a grassy area. +388027,a small bathroom has a small toilet and grate in the floor. +339738,A cat looks tired while wearing a small plastic hat. +506574,A giraffe that is standing near a fence. +361730,A large group of people flying kites beside a body of water +150576,A baby giraffe is lying down in an enclosed grassy area while a larger giraffe is walking around. +243344,Awake cat near ceiling on a closed refrigerator +452013,A small bathroom with a white toilet and tan tile. +265208,"A tray topped with two sandwiches, pie and a plate of coleslaw." +301797,a little boy holding onto a big bat +77784,A couple of people sitting at a wooden table. +489091,A residential bathroom has a modern motel look with upgraded fixtures and accessories. +365068,A woman and two men sitting on a bench in front of a store. +163105,A little girl sleeping with her teddy bear and quilt. +356432,Picture of living room with modern furniture and decor +193114,A stone tower with a clock and a flag on it +79913,A green street sign on top of a metal pool. +258996,A desk topped with computer monitors and laptops. +237318,a view through a car windshield of a stop sign +159774,A plenty shot in a game of soccer being made. +428178,A herd of zebra are taking a stance while posing for a photo. +136433,A man that is standing up holding a suitcase. +206496,an elephant carrying some people on its back +485564,a group of females playing soccer in a field +493117,A motorcycle sitting parked on the side of a road. +542511,a statue of person on top of a building with a clock +46941,A small child is sitting on the couch playing with a phone. +395083,A large amount of kites in the sky +266041,A man in black jersey holding a basketball above his head. +218766,The tennis player is beginning to serve a ball. +117836,A pizza on top of a white plate covered in greens. +323895,A man in yellow shirt and black shorts playing a game of tennis. +449102,Baseball player throwing a pitch from the mound +310560,A tower clock sits alone in a light blue sky. +158957,Person in a wetsuit holding a white surfboard and several fishing rods. +448365,"Youngster on a skateboard, trying simple tip up stunt." +363036,A woman that is sitting in front of a cake. +101145,The single train car is painted purple and yellow. +292232,A cat that is in a piece of luggage. +61943,"A big full view of several people gathering. +" +99747,A couple of bathrooms one with a standing toilet next to one with a sitting toilet. +13081,A man and a young boy working on laptop computers. +518716,A person that is feeding an animal with her hand. +93607,A broken truck hauling a lot of junk. +260635,A laptop sits on a toilet seat in a black and white photo. +38083,"Two baskets of strawberries, cucumbers, broccoli, carrots and potatoes gathered togethered." +142129,A red four door car pulling into a parking space with a meter. +281019,a room showing a toilet and a sink +205677,The vanity looks like it belongs in a Victorian house. +293002,A person holding a pink colorful umbrella on top of a dirt field. +552395,A cat is perched upon a wooden bench that sits on a stone patio. +567603,A yellow cat is looking at a black cat with something on its head. +248767,People standing on the corner with lights and pedestrian crossing near a construction site. +210857,A tennis player looks forward before she serves the ball. +442441,A piece of chocolate cake sitting on top of a wooden cutting board. +189752,That salad and pizza make a filling lunch. +294698,A girl holding a foot long hot dog in a restaurant +439827,A picture of a toaster painted on the side of a building. +283516,a sign with a clock in it hang off a building +270706,A woman wearing a white shirt and pants standing next to an older gentleman. +334083,A group of boys sitting on a curb with a baseball bat. +457683,The motorcycle has a large cargo box attached to the seat. +451356,some elephants are walking across a grassy field +54671,A couple laying on a big bed in a bedroom. +182984,A small her of sheep gathered on a lawn in front of a large building in the city. +67704,A white and blue train with various graffiti on it. +473821,A red couch next to a brown chair in a living room. +434898,The brown sectional sofa has two colorful pillows. +94795,A dog sitting on a sandy beach next to the ocean. +285534,a woman and her baby and a stuffed bear +63240,a man and some people riding on a raft +94607,A young man in a hat holding a cup of coffee and a pastry. +311435,a person swinging a tennis racket at a tennis ball +281976,Couple looking trifled at pickle on plate in the oven +152360,A dark night at a market with bananas hanging from a stand. +49759,a boy is preparing to serve a volley ball +393338,Fresh red and yellow tulips in a vase. +340508,a number of people playing frisbee indoors +433182,A train pulling into a train station next to a platform. +315173,A group of people riding on the back of a tour bus +153026,"The pizza has mushroom, sausage, and black olives." +136501,A baseball player with one leg kicked up preparing to throw a ball +301956,A large clock sitting over a lobby in a building. +405648,a woman walking along a sidewalk while holding a suitcase +273067,A red city bus with a red bow attached. +100909,A baseball player holding a bat on top of a field. +143236,Three dishes of food on a green surface. +28449,A group of elephants are standing in the trees. +207675,A church with a massively tall tower covered in a clock. +73278,Three elderly people sit together and eat desert. +301718,A table topped with a plate of food next to eating utensils. +573258,a person riding skis on a snowy slope +316708,A desk that has two computer and two laptops on it. +92624,assorted animals like giraffes and zebras standing by a river +547413,A cat exploring in plants next to a concrete wall. +450127,A living room with a blue couch with a red area rug and a fire place in the corner. +142500,a close up of a head of broccoli in a garden +527783,Several planes lined up on the tarmac at the airport. +95595,a person in a white t shirt cooking on a stove +350884,Several people play a game with a Frisbee in a park. +205108,a couple of men are at a table with food +206851,A man riding on top of a snowboard in the snow. +534252,The four images show a black dog next to a pair of shoes. +490505,A vase with a dozen tie-dye flowers in it +115128,two people riding surf boards on a body of water +320978,A store filled with lots of fresh produce on display. +75760,A moose is standing out by a river +487612,a close up of many large kites near the ground +99428,A stack of different electronics devices on a table. +456807,A man on a mass transit vehicle while on a cell phone. +354868,A black and white image of a train on tracks +101146,Some very pretty zebras walking on a dirt road. +39858,A group of men standing next to each other without a shirt. +74200,Surf boards adorn the windows of a dessert shop. +281032,An elderly person in a kitchen cooking food. +32124,A pretty young lady sitting on a sidewalk next to an older man. +321663,The colorfully dressed woman is skiing through the snow. +211527,A set of three boxes of donuts sitting next to each other on a table. +398563,A pile of stir fried meat and vegetables covered in a sauce. +86133,A close-up of the top of a fire hydrant with a train in the background. +48067,A yellow boat sitting on top of a body of water. +215456,A man cycling and a Stop sign at the front +214503,a rainbow umbrella that has people under it +441083,A dog panting out the window of a vehicle all captured in the side view mirror. +215939,A black bear is walking through the field +447279,There are police men standing and some are sitting on horses +222137,A garbage truck parked next to a food vendor. +446322,A glass display of different varieties of donuts. +122962,A classroom of small children eating pizza. +560010,Many people are doing their things on the beach. +173379,Four apples sitting in a bowl viewed from above. +435047,Balloons filled with helium attached to a food truck. +284688,A stop sign in the grass near a tree. +486488,A public bathroom stall with a toilet and trashcan. +1369,A man in a wetsuit with a surfboard standing on a beach. +203372,Two guys walking as look at their cellphones. +166124,Five bagels laid out on a oven rack +350694,"The surrounding of an outside town in the image. +" +168890,A pink motor scooter parked in a parking space. +160496,Two people standing in the sand together flying a kite on the beach. +424866,A trash truck driving down a street past a red stop sign. +3149,a very large building with a clock tower near +402248,a person that is flying a kite that is sitting on the ground +478817,A black cat sitting on top of a pot for a plant. +47687,The two cyclists are going down the country road. +350930,A dog is catching a Frisbee in its mouth. +182903,Cat in a closet with baggage and misc. +92212,a group of cars parked on a street nest to street signs +313398,An otter investigates two frisbees that are near it. +405432,A white table topped with cakes and nuts. +110587,A man brushing his teeth with a tooth brush. +450483,A small airplane sitting on top of an airport tarmac. +16238,Two women looking at three giraffes behind a fence. +527906,breakfast sandwich with egg and meat has a bite taken out of it +171461,Adults tasting wine while standing outdoors at winery. +249964,A group of brown cows standing on top of a lush green field. +548485,A bathroom with the door open so you can see a toilet and bathtub +373424,A woman sitting on top of a couch with two cats. +458109,A train parked next to some train tracks. +274917,A group of men are cutting a cake. +192620,there are many trucks that are going down the freeway +282062,A person in red and black reaching for a person in white and black who has a Frisbee. +103692,A young boy flying a kite in a blue sky with clouds. +397512,Two beds sitting side by side in a hotel room. +259755,A man sliding to the plate at a baseball game. +386718,A man wearing a Tour de France t-shirt stands beside a statue of a cow. +261906,A bird standing with its huge wings open near a fence. +125873,A group photo of boys in front of a building. +170670,this is a meal oina wood picnic table +289523,A kitten walking on the base of a window. +26201,A large building with two white towers with a crowd of people next to it.. +534128,A sleeping area of a train car with a seat belt buckle. +235404,"A bathroom with a sink, a fan and a mirrored medicine chest." +125952,A piece of luggage is ready to go with cold wear on top for quick usage. +508899,The cat is sitting on the rug in front of the stereo +310600,Two elderly men sit on a bench holding canes. +353558,A bowl of apples and bananas sits on a woven cloth. +268882,Three people flying a rainbow kite on a sunny day. +293334,A room with white walls and bright lights. +199764,The view of a crowd of shoppers and vendors at a market. +167725,A baseball player holding a bat on a field. +164420,a red fire hyrdant next to two red poles +2171,A group of people riding boards in the ocean. +515668,A dog chasing a white frisbee on a dirty and grass park. +527573,a man is standing near a yellow fire hydrant outside +300855,A small clock sitting in the middle of a side walk. +298252,A display case in a donut shop filled with lots of donuts. +560879,A beach filled with people flying colorful kites +258085,Two men in suits talking to a group of young people. +122317,a kite with a long tail some people and a black truck +573935,A small black dog standing on a tiled kitchen floor. +100848,a living room with a brown couch by a big window +352422,A very dingy and grime bathroom that's in someone's house. +84493,"A pizza with mushrooms, sauce and cheese is shown." +513056,a giant bear standing on its hind legs in a grassy area in front of the mountain +160864,Baseball team holding batting practice on the field +137658,A hand holding open a pouch with a cell phone inside. +463134,a room showing a wooden table and a capboard +439961, Vase of flowers on floor with a red and orange oen +499837,A silver pizza pan sitting on top of a table with pizza on it. +232073,A group of people in suits standing in a kitchen. +504142,Black and white puppy snuggled between a blanket and a pillow. +364010,Pair of dogs sitting on green towel in back seat of motor vehicle. +151970,a head shot of an elephant with a man sitting in the back ground +526711,A turquoise and white airplane and cars on the tarmac. +465404,A classroom filled with students sitting in front of laptop computers. +460781,A young man ridding a snowboard sliding down a railing in the snow. +242523,"A post with several street signs on it, including the name." +487498,a couple of girls stand underneath an umbrella +548420,A man and woman ride an elephant next to a body of water. +250506,A young girl sitting on top of a skateboard. +279203,A couple of people putting away ski equipment next to parked cars. +304834,A girl coming home from the store on her skateboard. +196116,Man flying on a parasail over the ocean. +352302,A man on some skis in the snow. +233652,"A steak sandwich on a bun with peppers, pickles and cheese." +404668,A series of photographs depicting plates covered in different types of food. +282878,A table that has a plate with pieces of square cut pizza on it and a remote control behind it. +25282,A smiling woman sitting on a stationary motorcycle. +573134,People are walking their horses along the beach. +249670,A bus driving down a rural country road surrounded by mountains. +548363,Airplanes on landing strips waiting to take off. +489344,Cat on floor by toilet looking up to cat laying in sink +154087,A group of people standing on a snow covered hill. +540762,a big building that has a clock on it +230360,a man sitting down with a telephone up to his ear +192079,A woman preparing food inside of a kitchen. +403385,A bathroom that has a broken wall in the shower. +231093,A toilet in a bathroom underneath a window. +413320,A woman riding on a duck boat on the lake +556837,A toilet in a stall with remote control buttons. +517417,People waiting on the platform of a train station. +269736,some people are taking pictures of a pizza +441432,An umbrella and other things in a trash can. +196664,Cat with a light colored bowtie lying on floor. +173685,a large area of water and a bridge +133679,A living room with chairs and a wall of windows looking to a patio. +57194,A pile of chopped up broccoli sits next to bottles of sauces. +250614,A small pizza on a metal dish sitting on a wood colored table. +306549,Bright tall colorful flags stuck in the sand at a beach +338159,A black counter top sitting next to a metal sink. +432798,Several boats sit on the water of the lake. +15778,A young boy rides his skateboard amongst pedestrians. +251317,A person is playing frisbee with some children +236717,A parked silver Nissan Titan four door pickup truck. +523660,a woman is holding a spoon in a kitchen +173547,A model train on a play set with a track. +173772,Several adults playing soccer in the snow wearing winter clothing +238310,A woman holding up an umbrella near a stage. +38323,A couple of donuts sitting on top of a tray next to a cup of coffee. +343599,A large brown clock tower mounted in the face of a building. +252137,a bunch of veggies are on a table +68331,a couple of chairs and beds in a room +380414,An old photo of a boy and girl skateboarding in a parking lot. +287291,A city street with buildings and cars on a rainy day. +197792,A black and white photo of a teddy bear holding a cross. +255244,A cat is lying on the back of the couch +560018,An ocean beach with surfers and people parasailing. +222559,People walk on the beach with boats nearby. +156302,There are abundance of fruits and vegetables being displayed. +113367,"A plate of fruit such as bananas, lemons, apples, and oranges." +34580,A red and white fire hydrant that is next to parking lot. +393692,A white table topped with a laptop computer sitting next to a phone. +354724,A street filled with lots of traffic next to white homes. +40404,A pair or hot dogs sitting on a white plate next to condiments. +402926,A giraffe running across a large dirt field. +66568,Two teddy bears lie propped up against a wall. +12927,A man riding a board on top of a wave in the ocean. +65455,A group of giraffe Standing up against a dirt wall in front of a crowd of children. +503522,a baseball player with a bat on the field +30668,A woman riding a brown horse across a sandy beach. +262006,A couple of giraffe walking across a street. +277235,a small kitten is looking in the mirror where you can see its reflection +341017,A boy sitting on top of a truck with a bunch of goats. +124930,A pool full of men and woman having drinks. +206784,A light that is on a ceiling in a kitchen. +147154,a man wearing an apron in front of a table filled with ingredients +41397,Two wooden benches sitting on top of a lush green grass covered park. +544278,A man walking down a street wearing shorts and a tie. +1590,A load of trash or work supplies in a dumpster outside. +430677,Open refrigerator and freezer containing only two bottles of wine. +74241,A group of jet skiers being pulled across the lake +229747,"A photo of an outside with various things in the scene. +" +382603,A bakery counter has many different kinds of pastries and pies. +551243,A man at a wedding with a drink in his hand. +367074,A sink in a kitchen with an overhead light on +250594,A man riding on skis down a slope on a course. +442968,A white bird sitting inside of a pond surrounded by greens. +439657,Two tail ends of American Airlines airplanes at an airport. +39267,A woman is kneeling down next to a toilet. +130768,a table top with some food on it +186816,Two professional male tennis players sitting court-side and drinking water +6688,A zebra looking up as another grazes in a field. +238708,A table topped with bowls filled with different vegetables. +364557,"After a long day surfing, this couple walks down the shoreline." +462371,A group of people standing around a white cake. +346343,A train station with a few passengers waiting for the train to arrive. +412483,A fire place sitting in a living room next to a TV. +329008,Two young men in the sunlight competing for possession of a frisbee. +173217,A suitcase filled with yard and knitting supplies. +221708,Lights shine on a wooden dining room table. +431272,A person stands at the bottom of a snowy ski hill. +428399,A sign near a wooden fence and a tree. +526446,A batter is preparing to hit the ball at a game. +436426,A smart device sitting on top of a brick counter. +144795,A person riding a pink motorcycle down a street. +64409,A pile of bananas sitting on top of a white table. +134657,Two road signs are viewed from inside of a vehicle windshield. +330122,A group of women sitting on the floor eating food. +23893,Kid seductively eating a hot dog at a baseball game. +459500,A clock between two bronze flamingo statues on a black box. +51079,A hand holding a hotdog over a paper tray. +36450,A very big teddy bear is next to a woman. +93236,The blue trailers are being hauled by a train. +360440,A teddy bear sitting near a railing facing a beach full of people. +455610,A parked red motorcycle sitting in front of a building. +125472,A man flying through the air while riding a skateboard. +537710,There is a person laying on the ground with a frisbee. +524108,Several motorcycles are stacked together side by side. +53404,A man is holding a Wii controller as if it were a baseball bat. +224819,A cheesy pastry sitting on top of a plate. +564936,A young man standing at the bottom of a ski hill. +439840,There are plant and a tv on the table. +305253,A flag waving in the breeze atop a clock tower. +152499,A group of friends hanging out around a swimming pool. +426542,Baseball players watching whats going on in the field +341196,A man riding a wave on top of a surfboard. +405368,A cell phone lying on a picture of a young man holding a similar cell phone. +330262,a bear in a shallow body of water near grass +252716,A frisbee that is laying in the grass near a tree. +335515,A white plate topped with different types of food. +580778,a lady that has a tennis racket in hand +183387,A woman kitboard on the ocean next to other kite boarders. +138556,A large green trunk sitting on top of a wooden floor. +499393,A peed boat with a cover on a river +81922,A large jetliner flying over a traffic filled street. +558808,A couple of people holding racquets on a tennis court. +567011,A person riding a beautiful wave very smooth +307480,An orange tree filled with oranges next to a building. +549738,A kite is flying in a clear sky. +411968,A clean bathroom is pictured in this image. +310094,There are bunches of bananas hanging from a plant. +92091,A baby girl chews on a stick with a teddy bear in hand. +157430,A green sign sitting on the side of a building. +318388,A father and his two children standing on top of a lush green field. +104701,Giraffes are grazing on the grass on the side of the road. +205577,A photograph of a kitchen inside a house. +535902,Two sings that are in a bathroom underneath a mirror. +231846,A yellow stripped cat sitting in a bathroom sink. +569103,A small piece of cake on a table. +413475,a close up photo of a stop sign and a street sign +166165,A woman standing on a tennis court holding a racquet. +368154,A red stop sign sitting on the side of a road. +409763,A baseball player holding a bat while standing on a field. +455937,A man sits on a chair and plays video games. +359432,The sandwich is on the table by the glass of milk. +242246,a green table some people oranges and bananas +409291,A girl with a baseball glove is standing in the grass. +538775,Many people walk nearby tall old buildings. +236904,A small white dog standing next to a red fire hydrant. +528516,Assorted vegetables being prepared in wok for consumption. +50713,A man and woman are riding down the street in a parade wearing patriotic hats. +478522,A man on a surfboard over the water. +163710,Two people sitting at a table with the desserts and a sparkler. +334301,"MAN IN ORANGE SHIRT TRYING TO RIDE A WAVE +" +292616,There is a group of small birds standing on the chairs. +46775,Two long metal tables sitting inside of a kitchen. +331113,The meat and broccoli on the plate is covered with steak sauce. +154004,a few people that are standing on a beach +434479,THERE IS PIZZA ON THE PLATE ON THE TABLE +468162,A living room scene is shown with a man sleeping. +104327,Zodiac on back of large boat in a lake. +255795,A woman walking across the street looking at a Car Quest vehicle. +54654,The woman is dipping food out of the pot to eat. +379585,The man in a sweater vest is smiling for a pose. +408873,Three elephants are walking near rocks and boulders in the habitat. +187876,a group of giraffes standing near one another with trees in the background +580953,"A desk with a laptop, computer monitor and a keyboard." +18563,A woman standing in front of an oven near another woman. +430788,a lady petting a white horse that is pulling a carriage +476253,A road block sitting over an orange and blue fire hydrant. +474215,The airplane flew across the blue skies and over the expensive beachside resort. +220187,A man riding a skateboard on a rail at a skate park. +4498,A young boy riding a skateboard on a street in front of a house. +527064,A large pizza placed on top of table next to a wineglass +207785,Obama speaking to a crowd of Obama supporters. +149376,The stop light found at a Hocken avenue intersection. +226802,A red bus driving down a busy city street surrounded by tall buildings. +570810,Woman grabbing her luggage at an airport terminal. +356507,A yellow dump truck parked on a lot. +364586,A black horse that is tied up eating grass. +571808,A white stove top oven sitting in a kitchen. +519649,A kitchen filled with appliances and lots of cupboard space. +21164,A beautiful beach scene with a young man approaching with his surf board +327864,A man pats a cat that is standing in his lap. +543676,A boy stands out the edge of a moving train. +417111,Three men in a booth making juice to sell. +338905,A group of people sitting at a table eating food. +22090,Orange sitting on a plate next to bananas on top of a table. +258628,A young boy getting ready to swing at a tennis ball. +58225,A half eaten hot dog being held in a hand at a baseball game. +443652,A bathroom with a walk in shower next to a toilet. +283055,there is a young boy wearing a tie and holding a bear +152866,Several slices of pizza on a white paper plate. +215982,Two men are playing video games in their home. +26017,A traffic light next to a very tall building near a street. +155736,A yellow white and green train traveling down train tracks. +549936,A herd of cattle standing on top of a dirt and grass field. +187411,A herd of sheep grazing on a pile of hay in a field. +216369,A clock with a brick and glass building behind it. +308964,A counter top with candles and an array of deserts. +512780,An emo girl with purple hair wearing a man's neck tie. +193547,A man enjoying a glass of wine with his Italian dinner. +444982,Two zebra grazing the grass in their enclosure. +59015,People gather around a truck parked on a boat. +567171,A scooter is parked on the street in front of a car. +138179,A baby in pajamas is chewing on a toy. +106677,Traffic lights and people walking as other on a crane continue with their work +549055,A man on a surfboard in the water. +233327,A yellow bird sitting on an oddly curved branch. +232842,A large group of people are flying kites in the park +191050,Three zebras in a green field grazing next to a tree. +103227,A young man holding a pink frisbee on a beach. +508985,A group of bikers riding down a street in traffic. +557829,Female snowboarder in the motion of landing on a log on a snow course. +176912,"A drawing of a yellow headphone cord and an ear piece," +289393,Set of toy animals sitting in front of a red wooden wagon. +315601,A close-up of a one-way street with many cars and motorcycles. +415949,A very modern living room with a black couch plus using accent colors in the shades of purple. +405216,A young woman riding a surfboard on a wave in the ocean. +186428,A train riding over a stone bridge near some steps. +247782,An older gentleman sitting in front of a bowl of icecream +243777,A laptop sits on a counter by a window overlooking airport terminals. +415194,A kitchen that has a table and a chair. +311883,A train moving along a track during the day. +219567,a white toilet with a cat on top of it +176211,"A meal of mashed potatoes, cheesy broccoli, and barbequed ribs. " +490643,A couple of giraffe standing next to a doorway. +191126,A blue bird is sitting on a wooden post. +399400,an image of a a plane that is flying in the air +366502,A young boy riding a skateboard through the air. +513690,A trash can is sitting next to a lowered curb. +25057,A man without a shirt in a park holding a beer and a frisbee. +1228,A close up of several zebras grazing in a field. +147736,"A plate with salad, oranges and a sandwich with silverware arranged next to it." +543547,A man walks beside an elephant as people ride by on the street. +66460,"A city block with people, cars, buses and a street vendor. " +90373,A passanger bus passing under a stoplight at dusk. +482590,A black and a white woman standing under an umbrella +534394,A herd of sheep moving up over a wall to a field from a sidewalk. +342593,A young hold holding a set of Nintendo Wii game controllers. +195086,A kid on the ground with a remote control. +550405,a laptop that is sitting on top of a table +104666,A living room with hard wood floors and a book shelf. +68352,A green train traveling down train tracks with steam pouring out of it. +1869,a young elephant walks with adult elephants along a dirt path +495687,Someone riding a skateboard down a bunch of stairs +333058,People board a plane in the middle of the rain. +461883,A male tennis player in the act of serving the ball. +394841,A doorway with a large glass window on top of a wooden floor. +341719,A group of people riding skis across a snow covered slope. +493623,A pair of high heels sitting near a vase with flowers in it. +92963,An airplane on a runway with snow on it. +579276,Two loaf of bread baking inside of an oven. +400048,A photograph of a group of people at a party. +221523,A man sitting on a bike holding a large dog on his knee with one are and guiding the bike with the other hand. +167894,A green street sign mounted to a white street light pole. +18783,A man in white shirt on bicycle with a dog riding in the back. +85187,A dirt road with people walking a a motorcycle driving. +200870,A dog with white and black hair catching a frisbee +194499,A little boy wearing a hat and leather boots. +344279,A white bunny rabbit sitting on the floor of a den. +222782,A large AMOCO sign above a sidewalk next to a street. +562582,A road sign with two arrows on it in front of a grave yard. +488219,A man is standing on a sunny beach +413172,A green traffic light shines above a street with light traffic. +451172,two pay telescopes are on a deck looking out to the ocean. +439180,A group of people riding horses down a small road. +359569,A black and brown dog walking across snow with a red Frisbee in't mouth. +145562,a small toys with so many people in it +99283,there is a old rusted train sitting on the ground +177934,A group of women operating a car wash. +285096,A tug boat sitting in the middle of the harbor. +41603,A car with open doors is towing boating equipment. +224647,A girl holding a racket and a boy behind her holding a tennis ball. +315740,A kitchen with metallic appliances and wooden cabinets. +250870,A male equestrian in full gear on a trotting white horse in a white fenced horse ring. +570138,"A bathroom with a sink, toilet, and vanity." +580284,Red stuffed bears are pinned to a cardboard tree. +467973,a bottle and a glass on a white table cloth +515993,this is blueberry pie from the old days +464993,Slater Menswear clock on the side of a Slater Menswear building. +380634,A young child riding on the back of a brown horse. +128813,A black and white photo of two teddy bears posing near two cameras. +360181,a man that is jumping his skateboard on some concrete +262394,Motorcycle parked along the street next to a building. +188544,"A deep sink, washing machine and microwave oven" +161634,A man leans back and gets ready to fall during part of the game. +331627,A man helping another man tie his tie on his suit. +450098,A tall sign next to a parking lot. +420525,Some older men and woman at a winery sampling some wine. +496765,An empty train station with a train parked in waiting. +114184,"A table filled with cakes, cupcakes, pies and whip cream." +411368,Shears and knives are in a cutting block. +161605,A sandwich with a pickle on a plate. +411223,Plates of food placed on a colorful bed. +227893,A green bus next to a shop on a small road. +308799,A doorway into a clean wood floored kitchen. +519351,A kid bites into a hotdog on a car +41888,Three birds walking around a dry grass field. +160740,A bunch of cars driving down a street surrounded by tall buildings. +495156,A man walking across a river holding a white surfboard. +337692,A woman riding a white horse around a barrel. +144250,Two giraffe walking through a lush green field. +63939,A group of people sitting around a wooden table. +446861,A row of traffic lights hanging over a suburban intersection. +300244,A black and white cat laying on top of a computer keyboard. +523818,Flowers in a vase on top of a wooden table. +372212,A silver fire hydrant sitting next to a road on a sidewalk. +213843,A chocolate cake with cream and wafers on top. +159282,A vase filled with yellow flowers next to a window. +130437,Cars riding on the street across a train on the tracks +262985,A marina filled with lots of smaller ships. +449180,An antique-looking grandfather clock reflecting light from a window. +425412,A close up of a street sign stating street table. +108668,A dog sleeping on a floor on top of a blanket. +477534,A couple of men riding skis down a snow covered slope. +485895,The giraffe is standing in the shade of the tree. +545959,A large group of sheep in a grassy field. +268987,A man jumps into the sea water while holding a surfboard +44312,a boy carrying a big bag of food across his shoulders +339943,A kitchen with a bath tub sitting behind a wooden door. +355817,A red and yellow bus parked in front of a tall building. +222043,Many white vases on a table in a room. +22680,A man with a green tie has his arms around the shoulders of two boys. +394478,a furry cat sits behind a child's laptop +66046,A Nintendo Wii controller sitting on a white table. +379836,A polar bear swimming through water in a zoo. +362778,These scantily clad people are enjoying a party +146773,"A dog is looking at a pink, flowered, multiple layered cake." +220339,A train traveling down a set of tracks. +120860,The dog is standing on the boat staring at something. +70460,A train has been tagged with colorful graffiti. +402410,A person jumping down a snowy hill on a snowboard. +61997,A man paints scenes at a fair stand. +568979,A man walking next to an elephant on a green field. +484296,Two zebras in a forest between many trees. +181980,A pitcher and umpire during a baseball game. +523195,a very big bus moving on the street with no people +220221,A woman holding a Nintendo Wii box at table. +428254,A man running to hit a tennis ball with a racket. +469543,A couple of small beds in a room. +524889,Old photograph depicting group of adults outdoors and some luggage. +401398,A young girl is holding a stuffed bear. +131273,A grey and white dog sitting in the passenger side of a car. +38155,there are many people on this field playing with a frisbee +387150,Parallel parking between the meters on a city street. +75283,Two people that are walking a dog together. +359937,A double decker bus is parked in the parking lot. +352895,a parked train sits next to some people walking in a depot +105866,Two queen size beds in a white room with white sheets +326174,A group of people are taking surfing lessons. +124013,Two young girls riding on a horse together with an older girl walking next to the horse. +172993,A black cat laying on top of a bed next to pillows. +308576,A dog standing on the back of a couch over a sleeping person and a laptop. +270122,Waves crashing on the shore with a surfer in the midst +481028,A cat sitting on top of a chair next to a teddy bear. +514668,a couple of cats that are inside of a car +257910,An orange and white giraffe standing next to a wall. +479440,A white cat sitting on the floor next to a feeding dish and a mat. +505822,A vase filled with red roses on top of a wooden table. +132861,A large church tower with a clock mounted on each of it's sides. +56158,A gray cat is laying on a pink duster. +525184,Young woman affectionately holding white teddy bear with car. +17409,A place mat is displaying an ornate glass along with a bottle of liquor. +270556,A city street filled with lots of traffic. +500211,a spooky looking hotel resort in the hills +355513,"A man standing on his snowboard by the woods," +379554,a toilet that has some bubbles coming out of it +422698,A cow grazing on grass and flowers next to a river. +571944,A bunch of goats are eating out of a box +548464,A green traffic signal at an intersection in a town. +138075,Three ladies seated on a dining table with a plate and cups +189203,Two photos of an airplane in the air. +302405,"Two snowboarders are standing with one foot strapped into their boards and one foot out, at the top of a mountain. " +23991,A man flying through the air while riding a skateboard. +370929,a silver and black train on its track and a red light +67042,A man standing next to a very old domed hallway. +551494,A woman holding a baby close to her chest. +94858,Two messy toilet stalls with toilets where one lid is raised. +139181,A pot and some vases on a table in a room. +138057,"A cheesy pizza, topped with chicken and vegetables. " +563758,a teddy bear that has a red scarf on +261388,a horse pulling a carriage down a street +9007,The man grins in a restaurant holding a glass of wine. +267515,Toothbrushes and toothpaste lay on the counter by the sink. +533511,"A computer and mouse sitting on a table," +32712,A baseball player hitting a ball in a professional game. +10707,A man standing in a living room holding a Nintendo Wii game controller. +82794,A hot dog that is sitting on a napkin. +419723,"A plate of food, including a sandwich and salad, is pictured here." +253732,A plate with half a sandwich and an ear of corn still in the husk. +182155,Two teenage girls paying a video game together. +124798,Various vehicles driving on a road surrounded by trees. +92680,A giraffe standing on top of a lush green field. +277390,A group of people standing around a center kitchen island. +8498,A clock tower is in the middle of some grass. +96832,A man sits at a desk and uses a laptop on it +501855,"A kitchen with a large stove, refrigerator, and table." +319768,A row of bamboo umbrellas sitting on top of a beach. +181742,A red fire hydrant sitting on a muddy green hillside. +401776,An old bus makes its way down a city street. +72052, a bright yellow restaurant sign with a green dragon on it +434148,a cake with pineapples and cherries on the top of it. +348877,A small pizza on a wooden cutting board. +450263,A woman sitting on a bench reading a paper. +157418,A couple of plates with sandwiches on them sitting next to an open can of spam. +437373,A group of people on the street with umbrellas. +276018,a bunch of kids walking through some grass +388487,A patch of wild flowers growing next to a stop sign. +55694,A black cow standing next to a brown cow on a lush green hillside. +100850,"A tray of food with an asian entree, rice, vegetables and a drink." +569931,A zebra in the wild walking towards a dirt road. +193863,A woman on a tennis court with a racquet. +6870,A large steam engine train traveling down train tracks. +468603,a man playing with a skateboard at a skatepark +26731,A white van covered in spray paint next to buildings. +56070,A motorcycle parked next to a yellow thing and tree. +426329,some frosted cakes with little decorations on top in a display case for sale +42055,Some colorful umbrellas somewhere in a shaded area during a sunny day. +323067,a man laying on a pile of snow next to a snowboard inside of a building. +433998,A pitcher winds up in preparation to throw a pitch. +346965,A man in a black shirt holding a dog with its hand in the air. +241340,A woman playing tug of war with a dog over a white frisbee. +483723,A guy laying in a hammock with another guy beside him. +115455,A woman squatting on the ground brushing her hair. +154515,A purple and yellow bus driving down a street. +226542,A man is using a toothbrush to clean his teeth. +91336,A girl eating an apple and reading on a bench. +459733,A man and a dog are on a board in the water. +570456,A living room filled with furniture and a table. +477111,A brown dog holding a yellow frisbee in it's mouth. +528821,A plate topped with pastry sandwiches on top of a table. +90738,A couple of brown cows standing by the side of a road. +83557,A bench in some grass that is next to a building. +575254,A bike parked outside a brick building. +382009,A person on a court with a tennis racket. +139141,A couple of young men holding Nintendo Wii game controllers. +542101,A person that is riding a dirt bike. +433504,The view of a room with several different utensils displayed on shelves. +53774,skateboarder who is about to land from a jump of some type +104424,A tennis player stands on a court holding a racket and smiles. +553549,A large black bear walking through a forest. +41478,a close up of a person cutting plants +173514,A snow boarder is standing on a snow covered mountain. +181576,a person sitting at a table eating food from a plate. +331138,A couple of brown elephants standing next to each other. +11727,a toilet a sink and a bad mirror +302842,a man sits by himself on a bench in a stone-paved square in front of a large bed of flowers +380203,A white horse is out eating in a field +356478,A baby elephant in dirt area next to a fence. +62819,a man that is walking through some water +39844,A man holding a Wii game controller in front of a projector. +337185,a bunch of zebras stand in some tall grass +265916,A man with a dog sitting in his backpack talking to a woman in sunglasses. +225791,a man on a skate board on a rail +98767,Stainless steel refrigerator in kitchen area with several spaces covered with green curtains. +138573,A large arrangement of teddy bears are on a wall. +87567,A kitchen table is lined with cooking materials. +178435,A mother sheep feeding her baby on a lush green field. +116936,A couple of people standing on top of a sandy beach. +346752,a big plate that has some fruit on top of it +460929,A hot dog with mustard is next to a bottle of soda. +194167,A giraffe looking for food between large rocks. +320182,a large group of zebra on an African plain. +523274,Person wearing helmet and sunglasses sitting on a stationary horse. +532463,A blue bench covered in different style bags. +65888,"Pizza with mushrooms, pepperoni, and tomatoes in box" +539738,A man holding a suitcase in one hand and hat in the other +288729,THERE IS A DESIGN OF AN ELEPHANT ON THE SHELF +577590,"A room with natural, unfinished, pale wood walls and built in shelves, also has curtained sliding doors that open onto a patio with a lounge chair, a big double bed with a blue blanket, and various framed photos and books." +292464,A young woman cutting into a cake and serving it. +91670,A car that is slightly driven off the road. +524957,this is a man walking a horse on a track +390052,A pair of fathers and sons playing outdoors in the daytime. +352005,A man wearing a blue shirt and a pair of glasses. +219657,A bathroom that has over flooded with water. +401320,A train pulling into a train station pulling a line of train cars behind it. +425151,Bright room with a couch and various different dressers. +104470,A woman holding two halves of a banana sandwich. +333772,The two cats are laying beside of the computer on the keyboard. +372652,A black bear walking by someone's car and trash can. +6580,A crowd of people standing next to a bed on a sidewalk. +304876,The Seattle Space Needle as a Jumbo Jet Plane flies by. +293296,a sign for prospect and brady st on a street with a light post +460251,A tv remote control sits on a table. +270544,an image of a group of people that are on a boat +312341,a man is sitting on a bike next to a bus +156497,Man sitting on a living room with green couches. +513513,The halved melon is on the counter next to the remote. +371945,A train that is sitting on the tracks under wires. +283761,A man wearing glasses and a suit sitting on a bus. +283222,A pair of red and black skis on a white background. +157980,A bagel sandwich with scrambled egg and bacon. +19663,A woman holding a tennis racquet on a tennis court. +326510,A man loading a truck with two pieces of luggage. +295823,A sidewalk beside a river with a clock tower beside it. +246686,A group of people holding boards looking out onto the ocean. +581557,A man holding a surfboard over his head. +46975,Boy holding skinny horse near jeep with tow hook. +266070,A plane flying over the water at sunset +572980,A large semi truck with a white trailer driving down a road. +326582,A fighter is jet flying through the clouds +55528,A man holding a paper bag while showing the camera a toothbrush. +535809,A cat laying on top of a car seat. +526580,Two men close to each other with a video game remote in their hand. +40011,"A yellow, blue, and purple train passes on the tracks." +243891,A group of people sitting around a table together +113630,Two zebras and a deer grazing in a grass field. +542350,A brown elephant on a path has shaved off tusks. +543393,A stop sign and other signage at the corner of a street. +188534,Assorted chinese food in a Styrofoam container on a table. +208031,A man riding on the back of a brown horse. +218891,A crowd of people in a waiting area +352445,a group of stuffed teddy bears in a display case +68408,A group of men kicking around a soccer ball. +399462,A girl with a kite running in the grass. +269662,A white and black bird sitting in grassy area next to water. +125755,A tray of cupcakes is set on top of a kitchen counter. +4665,A just married couple in the back of a car. +7298,A person that is playing in a baseball game. +474439,A vase decorated with an assortment of flowers. +140021,A pair of scissors and some fabric rest on the table +75563,a computers keyboard and the bottom of an apple mouse +501919,A man with a long beard and big ears sitting down. +21776,A man slicing up an apple on top of a wooden cutting board. +242138,The woman sitting near a Christmas tree holds a glass pitcher. +385359,THERE IS A BOY IN A BLUE SWEATER LOOKING AT SOMETHING +455597,a person in a kitchen with a stove some pots and pans +44858,A reflection of a large building in a window. +435134,"a dog, sits on a rug, looking at a television" +140713,A giant elephant standing next to a small elephant. +364911,A piece of cake sitting on a plate next to a drink. +433787,A person on a surfboard with a paddle in the water. +106810,A man that is sitting on a motorcycle under a carport. +233483,A man sitting at a computer desk with two desktop computer monitors sitting on it. +140582,The baby birds in a next tucked up under an eave. +116861,A woman sleeping on a sofa cuddling a teddy bear. +490244,a bunch of surfboards are piled up by a hill +315610,Commercial jetliners fly over an amusement park with a Ferris wheel. +353320,A guitar case rests on an empty bench +262425,A marine filled with boats floating on water. +389056,Two credit cards cut in half underneath a pair of scissors. +263403,A surfer flies off the crest of a wave. +450223,A shot of several cars in front of a gas station. +314689,A group of young children sitting on top of a bed. +306394,a man in a cop uniform while holding a red and white umbrella and standing on a pole +101535,A blender that has had some liquid come out on the counter. +397211,a skate park with multiple kids on skateboards +14278,A blurry image of a busy city street at night +193968,One lady is holding a stuffed rooster and smiling while the other is holding a donut in front of her open mouth. +536894,"A crispy pizza with vegetables, cheese and sauce." +577868,a grape fruit sliced in half on a plate +118740,Man riding surfboard ahead of breaking wave at ocean. +28903,A cat is sitting on a white toilet. +534887,A young man holding a doughnut sitting at a table. +267709,The snowboarders are posing for a picture on the slope. +180154,"a woman, a man and some children swimming and surfing in the water" +90802,CLOSE UP SHOT OF A BOTTLE AND A WINE GLASS +486987,A produce stand with many fruits and vegetables +103815,a pitcher throwing a ball from the mound +307668,Dog sticking its head out of a car window +303342,A man riding a snowboard on top of a snow covered slope. +249295,A Roman number clock tower near a municipal building. +362563,A man standing on top of a baseball field wearing a catchers mitt. +26734,"A man and a woman walking down a street carrying dogs, a kid and luggage." +437290,A crowd of people standing around in a room. +526040,A person on a snowboard has fallen in the snow. +524047,A man engages in a game with a flying disc. +326941,there is a yellow and green train coming up the tracks +523807,A foot long hot dog sitting on top of a bun. +147980,A group of children playing baseball out side. +500533,A metal pole that is inside of a shower. +548878,A snowboarder doing a trick in the air with a building behind +365556,A window shot of a plane in the air with another plane present. +100547,Three white castle hamburgers sitting in a white castle food bag. +425404,The doors on a subway car are slightly opened. +216326,Young baby sleeping in innocent white drapes around him +193349,A baseball pitcher on the mound throwing a pitch. +451940,A giraffe in front of a field of sheep. +385535,A hard to miss street sign set between two traffic lights. +51576,A zebra standing in a field grazing as another looks alert. +219632,A black curly haired dog is playing with a frisbee. +78478,A person cutting a pizza with a pair of scissors. +280530,Tall tower with a clock on top on an overcast day. +335037,a monitor a keyboard a window and a mouse +342273,A man in a top hat and a woman with glasses. +357331,a blue train driving on a train track below multiple power lines. +501506,A man rises to his toes on a tennis court. +318124,There is fish and broccoli and a casserole on the plate +507143,A parked motorcycle sitting next to a white brick wall. +383209,A gray cat sitting on top of a flat screen TV. +73199,A group of men stand together in suits. +164242,A white toilet sitting next to a shower. +35853,Vase with water holds a bunch of flowers in front of window +209940,There are two birds sitting on a branch by the water +553511,View of high rises on a city street. +428041,A minimalist room features white appliances and beige walls. +418346,A view of a bunch of toys hanging on a net. +145542,Two surfers in the water riding the waves. +237772,A cat that is laying down on a couch. +549713,A woman holding a video game controller in her hand. +511777,A group of people on bicycles huddled together. +308952,A melted looking lay pot sitting on top of a spindle. +382164,A group of boats are sitting on the water. +432647,Three street signs located next to a brick building. +316605,there is a male skateboarder doing a trick +467593,A close up of a peacock who is behind an enclosure. +434279,The large blue train is covered with rust. +396432,A small black pug is wearing a sweater and Santa Claus hot. +82449,A hot dog covered in mustard and cheese sits next to french fries. +462845,A woman in yellow plays a game of tennis. +368459,Two people riding a ski lift with snowboards on their feet. +147897,A man taking his picture in the mirror with a camera. +374061,A black cat holding onto the left of a teddy bear. +110156,A group of young and old are skiing on the snow. +522301,Red fire hydrant sitting on the side of the road. +213881,A large raw carrot and cut up garlic on a cutting board with a knife. +153931,Black and white photograph of a young man on cell phone. +269280,A man wearing a hat and tie looking at a paper. +364205,a desk with a keyboard a mouse and monitor +438185,White airplane with a band's name on the side. +147000,A person looking up at the sky where a kite is flying. +315128,there is a large concrete sign small buildings behind it +158602,A person standing on top of a snow covered slope. +217009,A couple of people sleeping on top of a bench. +483545,A counter topo filled with different types of vegetables. +303210,Two skateboarders performing a trick on a ramp. +522156,A cracker is on a plate next to some mint. +38892,a little girl in front of a book shelf and chair +243968,A man riding a snowboard is jumping over a hill. +122047,A counter topped with bowls of food and a cutting board. +221521,A bench with two wooden statues sitting behind it. +105426,A dorm room with a single bed and a desk. +402711,A young man holding a blue surfboard on top of a beach. +365103,A chicken and waffle sandwich on a plate. +395575,THERE IS A BENCH IN FRONT OF TE LAKE +396608,"A cup of coffee sitting next to a banana, apple and glass of orange juice." +343213,The bikes are parked along the side of the building. +371139,A traffic light is standing in the middle of the street as buses are driving in the background. +155671,A traffic light hanging over a street next to cross walks. +15254,These platters display healthy food choices of two entrees with a side vegetable and fruit +344513,A bullet train is going through a tunnel. +555669,A smiling woman nonetheless cringes as a dog licks her ear. +365752,Two men in suits and ties shaking hands. +16961,A guy riding a skateboard on the road with a long pole. +566771,A man is excited as he stands up and delivers a speech. +508846,A cat hiding in a basket of some sort. +179261,A large elephant standing next to a wire fence. +162035,A sign with teddy bears on it is advertising a tea room. +110601,A bathroom sink sitting next to a white toilet. +107239,A woman smiles with a bite of pizza in her mouth. +378652,A man riding a wave on top of a surfboard. +111341,A laptop sits on a stack of books on top of a messy desk. +418606,A rainbow colored kite next to an airplane in the sky. +447546,A large kitchen with many people preparing food. +505039,A herd of cattle under shade next to a body of water. +318157,A couple of vases sitting in a window sill. +510395,Two cows are grazing on a grassy area near a pagoda. +477067,A person riding an elephant that is spraying water from its trunk. +378454,A man gets air catching the Frisbee near the water. +88897,a pedestrian walk sign among these billboards signs +394940,a kid eating a cake on table looking around +48840,There are two giraffes located in a natural setting. +76249,An intersection of wires and cables stretching over a traffic light. +10681,A bright patio umbrella stands out against the plain white building. +160840,A woman is in a tennis swing stance. +322429,A wooden shelf filled with lots of glass pots and plates. +225129,A wooden table with many types of animals. +372161,The two zebras are standing together outside by the dirt road. +197097,A brown dog on a black couch with a laptop. +436252,A man riding on the back of a brown horse. +555847,An empty boat on in the water with birds perched on the side. +347995,A pretty lady laying in bed with a large black dog. +245161,A toilet setting in a bathroom with tile flooring. +523526,A desktop computer monitor on a white desk next to books. +469061,A man teaching a young child to ski. +391320,A bowl fulled of vegetables sitting on top of a counter. +356406,a group of people standing next to a building with a large dog +323715,A bear walking away towards the tall fence. +491757,A cat sitting on top of a bed. +30529,An old style portable phone and the bag it sets in. +342762,"Various people are acknowledging life and having a good time. +" +370561,A man that is sitting in the sand near surfboards. +444928,A group of men riding on the backs of horses in a field. +102057,Two bears are playing in the stone surroundings. +282098,An advertising column with advertising posters on it. +466229,a dog that is laying next to another person +418300,A man with an odd look taking a selfie. +562160,a bookshelf with books and a small statue of a bicycle with a basket. +17003,A man riding a skateboard down a street. +526319,There is some type of drink in a small cup with ice +531349,A red double decker bus driving past a river. +555456,A person riding a snowboard on a snow covered slope. +399893,an elephant standing by some trees with it's trunk in the air +802,"A kitchen with a refrigerator, stove and oven with cabinets." +415961,A dog with his tongue hanging out in a field. +456865,An airplane just landed on the runway +489940,A black and brown dog is laying on the pavement. +185890,Two barefoot women holding game controllers in each hand. +566923,a person trying to open a fire hydrant +539673,Two boats tied to the edge of a dock. +267684,Two people with skis are skiing on the snow. +334813,A man sitting at a desk with papers on it +43610,A bird with a berry in its mouth sits on a rock +394275,A blue bus driving down a street past a park. +73773,a guy that is sitting on a park bench with a news paper +165157,A cracked and broken blue Frisbee lying on the grass. +110027,"A garage with a table, refrigerator and metal shelf." +155877,Several goats are resting at the base of a tree. +98832,a small kitchen with a lot of counter space +181518,a red stop sign at a downtown area intersection +82554,A large cheesy pizza sitting on top of a white plate. +569900,This living room features clashing colors between the couch and the door. +463932,Construction worker near digging equipment and unearthed fire hydrant. +215755,A woman sitting on top of a cement bench near a lake. +482585,a couple of trains are on the tracks +6189,"Man slicing a pizza with a pizza cutter, at home." +145284,A wooden park bench sitting in the middle of a park. +3091,a white plate topped with a piece of chocolate covered cake. +548159,Two rows of red double decker buses on a green lawn +425870,A man and a young boy play a wii game together. +219629,A boy is eating a pastry in a room. +405135,A street scene with a line up of policeman on horses. +291251,Man in jacket doing a trick on a snowboard. +132342,"A green tile bathroom with sink, drawers, toilet, and window." +354729,A beige colored dog jumps to catch a frisbee. +264017,a small white plate with a slice of pizza on it +295593,A couple of men holding Nintendo Wii game controllers. +527603,"A kitchen with a dishwasher, refrigerator and pantry." +291202,A black and white photo of a martin Luther King next to a Lincoln statue. +187064,A table that has a candle on it in a living room. +492079,An adorable little girl eating half a sandwich. +292032,Two plates that have different foods inside of them. +87476,A young man riding a skateboard with an older man. +169436,A man is wearing baseball gear and standing on the field. +328091,"A bathroom sink with a toothbrush, soap dispenser and mirror." +106617,A man and woman eating slices of pizza at a pizzaria +283642,A person standing on a loading platform next to a train. +286907,A bathroom scene with focus on the toilet. +564743,Group of snowboarders on top of a mountain with trees on it. +369979,Several pieces of art and a painting on display +23380,A bus stop is decorated with blue brochures. +29125,A large clock tower illuminated by lights and topped with a pyramid.. +377679,A group of four vases filled with white and yellow flowers. +518908,"A notebook, pen, eye glasses, watch, cellphone and camera sitting on a wood surface." +534857,A dirty toilet that is in a bathroom. +36765,A man is riding a horse and buggy on the beach. +42421,A white cat standing next to a cluster of palm trees. +3084,a blue clock face with gold numbers set in a brick building +574069,"A table with computer equipment and two men, one eating while the other works on a laptop." +103558,Two men are standing in the living room and holding wii remotes. +269926,A picture of a two-story bus by the street. +386584,A bathroom with a white toilet next to a sink. +347925,Two giraffes standing beside each other next to a fence. +107907,Artistic toilet piece sitting in the center of a museum gallery. +471497,a small elephant walks in a lush forest +531707,A group of people sitting on a wooden bench next to a field. +318778,A group of people standing around tables next to a jet. +390401,A man swinging a bat at a baseball on a field. +290196,A group of people cross country skiing in forest. +406908,A few people are playing soccer on a soccer field. +153822,A woman is hitting a ball with a tennis racket. +495557,A set of train tracks with cargo train cars on one side and people on the other side near several buildings. +247369,A highway filled with lots of traffic next to a lush green park. +448657,there is a horse and a jockey jumping over a obstacle +231476,A passenger train at the end of a set of tracks in a building . +490366,A surfer sits on his surfboard in the sand close to the water. +198489,Small girl reaching for her umbrella on a driveway. +190497,A herd of cows near a large building. +40557,a street light is hanging on a pole +18224,A sexy young lady holding a tennis ball and tennis racquet. +314812,A WOMAN IS PLAYING GAMES USING AN ELECTRONIC GAMING CONSOLE +195271,A woman standing in a kitchen holding a jug of milk. +474398,An orange detour sign sitting on the side of a road. +549568,A light pole sitting next to the side of a road. +339256,A bath tub sitting under a window in a bathroom. +21036,A cool looking kite that is on the sand. +32300,A picture of a kid picking up a ball. +511583,A car is parked on a street at night. +183997,A small marina next to a wall of rocks. +163543,A person riding some skis in the snow. +514468,A surfer on his surfboard paddling out to the waves. +15614,Two giraffes that are standing in the grass. +568041,"A living room view of a couch, mirror, and vases." +413341,A laptop keyboard with three small bear figurines sitting on top. +137496,A man standing on a plane wing to board the plane. +290451,A long blue and white train traveling down a street. +73153,A person talking on a phone with a tree in the foreground. +128142,A team of baseball players playing a game of baseball. +389566,"The encompassing of an outside town in the picture. +" +10092,A green netted bed in a light filled bedroom. +281353,A bathroom with a toilet sitting next to a tub. +170024,a green two sided clock hanging on a building +131919,A woman walking a bike next to a river with a boat in it. +77396,These two cats are playing in a room that has a large TV and a laptop computer. +120061,a man in a wheel chair smiles as he open a oven +334077,A man bending over a pile of umbrellas sitting on a sidewalk. +520150,A kid sitting on a bed with a book. +530054,A small bathroom with only a toliet and sink. +74478,a man in glasses is holding a wine glass +478430,A woman in a bathing suit holding a Frisbee on a beach. +369442,A group of people standing around a herd of animals in a city. +448078,a couple of vehicles are driving down the street +76529,A close up of a banana next to a cup with liquid. +73753,A woman riding water skis on top of a lake. +42387,A forest filled with lush green leafy trees. +186042,a person skiing through the snow near some trees toward a sunset +330515,A batter is swinging at a ball while a catcher squats behind him. +387431,Sidewalk in city with store fronts and clock. +126766,The people are looking at the giraffes in the field. +453093,A bathroom that has recently been tiled and grouted +372938,A group of people riding on the back of a loaded red pickup truck. +195862,A man secures a saddle on a horse that a girl is sitting on. +553057,A group of people walking in the rain holding umbrellas. +276488,a table with a white plate a sandwich and a bottle +526751,A boat sitting on top of a beach next to a body of water. +81469,a bed with white bed sheets and pillows +190676,A panoramic shot of several people standing near a plane. +506178,Blurry image of men in living room playing a stand-up video game. +368884,A two story white building next to a building with an brown a frame. +106970,this is a giraffe running in a pen +260823,Four sheep are eating along the side of a hill. +532540,A statue of men riding horses next to a green hillside. +274549,The skier in the orange coat is riding on a trail between the trees. +345071,There are several people standing next to motor cycles. +481753,A white toilet is at the end of a trail. +374218,nice made salad with vegetables on a plate +114399,A bed sitting in a room with a white covering. +500423,"An orange, white, and gray train is sitting at the platform." +447342,Two buses in city with other cars and trees. +173385,An elephant is walking on a pile of sand outside a building. +411821,"An item inside the picture which appears to be truly astounding. +" +445569,The elephant appears to have a lot of wrinkles. +85944,A group of people sitting around a bar with drinks. +76307,A white plate that has a sandwich cut in half +305677,A person standing on a rocky hillside next to the ocean. +485865,a couple of zebras stand next to some horses +393277,A clock statue surrounded by city traffic and streets. +102908,Bearded skateboarder maintains balance while skating up wall. +460559,A bunch of green bananas hanging from a banana tree. +449638,A group of people riding bikes down a street. +238045,The three green buses are parked next to each other. +268000,A passenger train on the tracks going under a bridge. +233446,A cat sitting on the steps in front of its cat door. +14869,A park bench siting next to a tree next to a park. +190307,The young woman is riding the dolphin in the water. +187495,A fire hydrant stands on a corner of a sidewalk. +324340,A woman holding up three apples in one hand. +325690,A white and red traffic sign on top of a metal pole. +11209,A woman sitting on the back of a couch next to a man wearing glasses. +469638,A bathroom that is very clean and white. +355908,A narrow living room with a couch and tv. +534876,A LITTLE BOY IS HITTING A BASEBALL WITH HIS BAT +85029,a group of people picking out bananas from carts +466533,A little girl holding a donut covered in sprinkles. +238385,A group of people traveling down a cobble stone street. +220764,A person cross country skiing across a snow filled plain. +423715,Two women wearing hats standing near a fence. +96804,A sign that is on the door of a refrigerator. +161772,A large sliced pizza on a plate on a table. +195179,A small kitchen with black countertops and stainless steel appliances. +342958,a surf board next to a table with chairs +113271,Small dog sitting on a carpet with a rubber doughnut toy. +275611,One cheese pizza cooked and sliced on a pan. +333826,A red fire hydrant between some yellow poles +321176,A young woman underneath a clear bubble umbrella +73665,Man on street appearing to be dancing or skipping sideways. . +561116,A dog with floppy ears sitting on a couch. +285212,A grown and white dog on floor next to person's shoes. +136820,the girl is sitting by the window eating +102345,Closeup of various flowers in vase next to window. +326217,A man sitting on top of a boat with lots of supplies. +372038,A semi-browned banana sitting on top a cup of starbucks coffee. +291672,A person is wading ashore near three fishing boats. +68219,these two men in suits are shaking hands +279877,A group of neck ties sitting next to each other. +189600,A long haired dog with their face out the window of a car. +336245,A women posing sitting on the chair wearing a beanie. +26967,LOTS OF PEOPLE AT THE AIRPORT WAITING TO GET THEIR LUGGAGE +155861,A little kid that is eating some food on the table. +162914,a clock hanging from rafters of a building +393647,a large bus is up by the side of a curb +506335,"Two men riding mopeds, one with a woman and boy riding along." +517472,a girl laying on an inflatable mattress in a pool +64030,A flock of ducks floating on top of a lake. +493814,A plate full of broccoli with fries and carrots +108669,"A bow of fruit, such as bananas and apples." +319257,A cat is laying on the other side of a cactus. +217425,a large clock tower structure lit up in the early night sky +510782,a pink suitcase is in the back of a vehicle +154193,A woman sitting at a table with a pizza in front of her. +544044,A table with cell phones and clutter on top of it. +355776,A little girl in her underwear brushing her teeth in black vinyl boots. +488349,An angled view from the kitchen of an unfurnished home. +529457,a white and black fire hydrant is on a curb +557780,A small dog chewing on hot dog like dog toy. +206025,The man in the business suit wears a striped blue and white tie. +565781,A person eating some food walking down a street. +430804,some zebras and giraffes are walking around +221882,A person wheeling a hand truck across an open market. +119710,Somewhere in Asia a man holding the lead to a cow in a rice paddy +506052,a small hand held television set being held by a hand +9286,A few school buses are parked near other vehicles. +62540,A polar bear sticks its head in another polar bear's butt. +72582,A group of people sitting at a table together. +271643,A man flies a kite by the water side. +4246,A couple of young men standing next to each other on a street. +396692,A train traveling down train tracks next to a tall building. +538230,A group of men riding dirt bikes across a grass covered field. +82889,A tray of food sits on an outdoor table. +219174,A large brown bear walking across a field. +220045,A couple of people walking down a sidewalk holding tennis racquets. +565153,a road sign showing to stop on the road near a forest +156637,A heavily glazed donut sitting on the counter +199771,A group of people in chef outfits at a kitchen counter. +233840,Takeout food lies nestled in white paper with serrated edges. +435444,three bicycles are parked against a fence a car and building +242465,A red stop sign sitting on the side of a road. +471117,Split photo of two athletes serving tennis balls. +436264,A young boy swings a baseball bat in the backyard. +342675,Red train at a stop and a man that is waiting. +241037,A zebra next to giraffes in an enclosure +481911,"Two cats, brown and black cats on a bench" +86471,A man serving a tennis ball on top of a tennis court. +432373,a sign hanging up that says waterman ave +60347,A man sitting on the park bench in the forest +82740,A black and white photo of a person riding a horse jumping over obstacles. +355552,A group of men who are holding snowboards. +72833,A person riding a surfboard on a wave in a wet suit. +366111,A black and white photograph of men on bicycles in a city. +365456,A beautiful woman holding a tennis racquet on a court. +402283,"A group of people, sitting in bleachers, watch a boy bat at a little league baseball game." +47419,Older style station wagon from ford during a parade. +326256,A small bathroom with a dark vanity and tiled floor. +52233,Two people having a conversation while holding red umbrellas. +472415,A truck that has boxes in the bed. +449462,A table with a pot of food next to a map. +572408,A cow standing in a field with a smaller cow. +48719,a close up of a plate of broccoli and sauce +170519,A zebra is standing away from two adult giraffe. +172285,Two tall giraffe standing next to a green leaf filled tree +111644,A young woman falls while surfing in the ocean. +499571,A thin cat jumping off a pile of stuff +252748,a white cake in a flat pan a fork and a cheese grader +416660,there are many people looking in the store windows +364340,A white clock tower with palm trees in the foreground. +303006,"A room has a table, books, piano, and door in it." +345353,A person sitting at a table with two plates of food. +364016,A group of people who are working at a table. +507927,a number of people riding motorcycles on a city street +552532,Two baby cows standing on a dirt field next to a young boy. +412407,a phone with lines running on the sreen +403817,A cat sitting beside a laptop on a desk. +180011,"Four young giraffes in a zoo, with one of them being fed leaves by a person" +216296,a couple of guys with tennis rackets waiting on a ball +189631,A group of men riding horses down a street. +62839,The person is walking in the alley alone +476851,A blue cutting board filled with choppes veggies and fruits. +404128,A propellor airplane is on a grassy runway. +379183,A green train is rolling down the tracks +313386,A couple of large white airplanes parked in a stationary position. +397734,A lunch tray features hot dogs and fries with a drink. +193015,A single banana is on a white table. +241301,Two men standing up and playing the Wii. +9217,A clock tower sits on top of an old building. +471446,a truck on a street next to a van +63791,A group of men playing soccer in a park. +124277,A train that is going through a city. +357816,A man standing near home plate swinging a bat. +504635,Three zebras are standing in the grass by the trees. +459121,A little girl standing in front of a TV. +110551,a man flying through the air while riding a skateboard. +282618,a couple of people are wearing skis in the snow +277542,Several animals walking on a road with cars behind them. +85527,A man in a tuxedo is holding a beer +280036,A child on a beach flying a kite. +61418,Several children attentively play a game of curling together. +91885,A couple of cats sitting on top of a couch. +22874,A large black dog is laying on a rug. +468784,A bride and groom holding a knife to a three tier wedding cake. +321516,A bus driving down a street in front of a motorcycle. +283984,A bunch of packages are sitting outside of a building. +239997,A large white city bus stopped at a bus stop. +516733,A man holding out his mitt to catch a baseball +126434,"Two kids playing baseball, one of them is catching the ball. " +504900,A man sitting on a couch with a dog on his lap +341681,A tennis player lunges to return a wide serve +257,There is a small bus with several people standing next to it. +79362,The mountains past the fence are covered in snow. +520389,There is a black and white cat laying on top of a purse. +5804,"A laptop computer sitting on a table, next to a rocking chair." +47632,A broken bathroom with a white sink and toilet. +546325,A couch with pillows sitting in a living room. +424502,A baseball game being watched through a fence. +376677,A large construction site for a bridge build. +281827,A large airplane flying over a city above a bird. +537128,"A smiling, young couple snuggling cheek to cheek " +157098,Three giraffes standing up in a field eating leaves off of trees. +422545,A surfer hits a wipe out on a big wave. +282346,A skateboarder is riding his skateboard at night. +482210,A photo taken through a bathroom door of a bathroom. +425390,A large Siamese cat sitting on top of a laptop computer. +525880,A man sitting on a bench next to the ocean. +290231,A man riding a motor cycle down a race track. +246666,A very tall brick clock tower under a blue sky. +558483,THERE ARE SHEEPS THAT ARE EATING GRASS IN THE FIELD +372413,Motorcyclist is taking a turn while onlookers observe +203119,a man in a tie stands next to a sink +493941,A plate with rice topped with scallops and a side of broccoli. +207676,A man holding a white game controller while standing next to a bed. +33005,A person playing a game of tennis with a racket. +4296,A kitchen that is in the process of having the floors done +537456,A man standing in front of a store selling items. +382715,A man riding a skateboard down a busy city street. +252133,A yellow street sign sitting on the side of a road. +84000,a person riding a skate board ata skate park +182162,A living room with hard wood flooring and black furniture. +509609,A cat cuddles an elephant toy on the bed. +8876,A cooler with several bottles of S. Pellegrino sparkling water. +114946,A couple standing in the middle of an old delapitated building. +457693,wild animals graze in fields in front of a lake and snow-covered mountains +551713,A woman putting a pan in the oven. +342006, a castle and the big ben clocktower next to a river +552752,A man hangs off a stationary train indoors. +351904,The town square is covered by many inches of snow. +325306,A zebra that is bending it's neck backwards to reach it's tail. +86439,A group of people walking down a rain soaked street holding umbrellas. +153956,a close up of many plates of food on a table +578324,a keyboard a mouse and a monitor sitting on a desk +516828,A couple of sliced of pizza on top of a paper plate. +343453,A woman stands on a snow covered hill. +380706,A man riding a motorcycle down a city street. +104683,A stool sitting next to a white umbrella near a brick wall. +469828,The skier is quickly racing past the yellow flag. +222674,A group of people sitting around a wooden table. +433676,a group of people riding skis on a snowy slope +209824,an open fire hydrant near a city street +343774,A baby elephant standing at the edge of a water hole reaching out with its trunk. +318813,Two men standing together watching a kite fly up in the sky. +31829,A statue of a cow sitting under a sign on grass. +504733,A young boy attempts to hit a ball with a tennis racquet. +285727,A young boy is eating a meal in his pajamas. +406119,a little plane landing on the water +475403,A tennis player throws the ball up to serve it. +45197,A tiger cat sleeping on a bed next to an open laptop computer. +514586,A boy prepares to swing a baseball bat. +208318,many fire hydrants made to look like cartoon characters +269831,A little girl holding a paddle on a kayak. +45746,An updated kitchen with modern stainless steel appliances. +28378,A seaport with many boats near some houses. +60464,a couple of bowls of food sit on a table +79966,A black puppy with a ball in its mouth sitting in a bicycle basket. +409566,a bathroom with a toilet and a sink and a bath tub +574103,A table topped with a white bowl filled with rice. +143769,A brown miniature pony next to a wooden fence. +420347,The man is going over the speech that he will be giving in a few hours. +218988,A Sanyo microwave oven sitting on the counter. +66827,A kitchen with a screen glass door next to the counter. +415218,A stop top oven in a kitchen next to a couple of windows. +102355,Horse drawn cart with women and children in urban area. +530013,A baseball player at bat in a stadium +352761,An old man smiling while sitting on a bench. +218220,Cows and caves behind barbed wire fence on a pasture. +338678,A person riding skis along a snow covered road. +60449,A very nice looking deck area with a small table and a laptop. +386119,A white boat sitting along side of a shore line. +74638,A television that is sitting on a stand. +326088,A man that is sitting at a keyboard. +85101,A couple people flying kites on a beach. +361399,A skier with poles extended skiing by a flag post. +220915,A table with chairs and an umbrella sitting on a patio. +479350,Three little girls sitting at a table eating food. +577614,Two students study on two separate bench tables +514504,"A desk with a chair, computer, laptop and a book." +516602,A small calf is in a pen with bails of hay. +474170,A couple of elephants standing on a lush green forest. +410554,A happy man making sandwiches in a kitchen +537999,Friends playing a Frisbee game on a suburban soccer field +391016,A herd of zebra walking across a dry grass field. +235517,A parked motorcycle sitting next to a store front. +144064,A plan sitting on top of a sandy beach. +263586,A young girl holding a tennis racket on the court. +91857,A giraffe sticking its head in a feeding basket with trees in background. +321026,A boat floating along a river next to small walk way. +200939,A girl and a boy smile at each other. +166505,A herd of cattle grazing on the side of a hill. +191381,Blue dust pan and brush on floor next to white commode. +169468,Big clock hangs on the front corner of a building +241,a man standing holding a game controller and two people sitting +363831,A baseball player hits a hard fly ball. +242679,"A seat under a mirror onboard a train, next to a cluttered counter." +508514,A man sleeps with his headphones in and a light on. +83906,A bunch of red and white umbrella hanging from ceiling. +23117,two men dressed in suits covered in images of clouds under umbrellas +172617,A woman sitting on the ground next to luggage. +125870,An airport filled with large passenger jets parked next to each other. +66397,He follows the track used for cross country skiers. +23489,A group of people that are sitting in a boat in the water. +116556,"A desk with a chair, laptop, two computer monitors, and a keyboard." +491732,these men are playing tennis on a court +105448,A man riding a skateboard on a parking lot. +375357,A yellow and black parasail lying on the beach. +318854,A woman sitting at a desk using a laptop. +504700,A man in a suit stands in front of a bus +331242,A brown and white horse standing on top of a beach. +315350,A man swinging a tennis racquet on a court. +352476,A bike attached to the front of a blue bus. +189245,View of a snow capped mountain above trees and a bench. +46616,The two surfers are ready to go out on the water +17923,A dog curled up on a mans shoes. +264853,A man standing on top of a tennis court holding a racquet. +224126,A plate topped with two hot dogs covered in coleslaw. +462527,a small kitchen with a sink and mini fridge +137967,A cubicle desk with two laptops on it. +221000,The woman sits in bed as a child stands at the foot of it. +369506,A tall church tower under a blue sky filled with white fluffy clouds. +62167,a man standing next to sheep on a lush green park. +444495,A purple vase filled with multi colored flowers on top of a table. +128051,A green bus with a smaller bus sitting on top of it. +246425,Two airplanes flying through a blue sky with smoke pouring out of their rear ends. +296960,A sharp bladed knife left out on the ground. +85004,A clock sitting in the middle of a walkway. +415183,A group of people walking down a snow covered path with cats and horses. +548843,A little boy with glasses and a blue parka eats a doughnut. +450479,Two blue buses are seen parked next to each other. +145426,a bird is standing on a green bench +102625,An empty kitchen filled with dishes and appliances. +447779,The skateboarders are having fun in the halfpipe. +421976,An adult sheep leaning towards a newborn sheep in a hay filled area. +204232,A man that has a skateboard jumping in the air. +271759,A woman cuts a pan of cookies into bars on a kitchen counter. +114282,People walk out of the glass doors carrying luggage bags. +271424,A group of people riding skis and snowboards in the snow. +361571,A dog wearing a hat standing on some grass. +493628,A woman laying on a bed wearing fishnet stockings. +401808,A man and a dog on the shore near water. +126744,"A kitchen with a microwave, a refrigerator, and a dishwasher." +521863,A skateboarder is seen near a crowd through the glass door. +250311,A kitchen counter with pots hanging above it and several objects in the corner. +196210,"Fresh, cut up broccoli draining in a colander." +365685,A woman sucking on a very large sausage with her breast hanging out. +126606,Group of motorcycle riders looking over traffic on the street +27285,"Kitchen with refrigerator, range and vent, and white colored cabinets with an oak top." +509014,A group of people that are standing in the snow. +186709,A glass window in a fruit store with fruit in front of it +455666,"A young man, who is dressed formally, is posing for the camera. " +371652,A birthday cake with candles in it sitting on a table. +327665,A women in a sunhat and sunglasses posing beside a bilingual English-Arabic stop sign. +263687,a person in an office setting sitting in a chair +285661,A group of young men playing a game of soccer. +28655,A clock that is on top of a pole. +190056,Three giraffes grazing from a bush over a fence. +149252,Two zebras in the standing next to each other rubbing noses. +331642,A tall wooden pole with a Mcdonald's sign posted to it. +91300,A giraffe standing outside of two white doors. +395665,A tennis player gets prepared to hit the ball. +576017,There are two different street signs together in a different language +6723,Row of buildings on empty street near side walk. +507042,Three giraffes stand near the fence of their enclosure. +545056,A herd of animals grazing on a lush green field. +20342,Aerial tricks performed on red bike over stacked skateboards with photographer in background. +313399,A hot dog sitting on top of a wrapper next to a receipt. +85434,Cross country skiers on snow covered course during race. +158118,A guy is near a busy street in a foreign country. +219723,A set of four boxes filled with baby birds. +437789,A table topped with fresh fruits and vegetables. +490725,A cat laying on top of a chair with pillows. +100016,A traffic light in front of a road through a tunnel. +161032,A woman holding a red and white umbrella while standing in a cave. +494480,A brown dog standing next to a black dog as they fight over a frisbee. +261793,A woman on a tennis court playing tennis with a racket. +74937,a train on a track near a building +394840,Dude on horseback leads herd of sheep with two dogs +131115,A baseball player holding a bat next to a base. +543322,A bunch of big chef knives by a small piece of broccoli. +445950,a living room with a couch and a coffee table +19523,two women loading their bicycles onto a bus rack +497330,A woman sits in a chair holding a tennis racket. +508977,A small girl petting a black and white kitty. +351903,A giraffe at the zoo looks right at the camera +117061,A person in a silly shirt sits at a table so they can eat some pizza +533281,A wood fire oven with a long metal spatula hanging on the wall next to it. +338607,A giraffe stands beneath a tree beside a marina. +368940,a bathroom with a mirror and a sink +203024,this is a man talking wearing a suit +211246,A man standing a the front of a passenger bus. +12576,A woman sitting at a table topped with pizza. +20820,A toilet sitting on the ground near a wall. +530509,A young man holding a kite while sanding in a grassy park. +96043,Fathers and children playing sports in a back yard +109229,A young boy throwing a frisbee in a grassy field +479126,Two women sitting outside hanging out and smoking cigarettes. +464858,"crowds of people on an overcast day, looking up at kites" +274947,two red shuttle buses riding down a street next to a blue pole. +450182,A man riding a motorcycle down a street next to a train car. +465463,A woman preparing food inside of a kitchen. +217383,A white semi truck parked on a large muddy puddle. +179500,A man swinging a tennis racquet on top of a tennis court. +13729,a group of people that are playing some wii +135411,A suitcase is open and sitting on the ground. +539075,A motorcycle parked next to each other near people.. +489382,A herd of sheep crossing a bridge over a river. +466789,A cay laying on a brick walkway next to a person holding an umbrella. +403531,a man hanging out side of the train looking at something +186175,A tractor truck painted in camouflage sitting on a field. +272136,A large propeller plane mounted to the ceiling of a building. +353027,A hand pulls a slice of mushroom pizza from the pie. +408621,A yellow and green bus passing in front of a building. +20788,A woman hovering over food on a wooden table. +345434,A cat and some people on a grass field. +359855,A broken suitcase is on the side of the road. +227691,there is a small seagull standing by the water +388409,A black horse standing in a desert field surrounded by mountain. +96251,White flowers sit on a ledge next to vases and candles. +540925,the giraffe is standing up eating from the tree +349794,A massive tractor truck parked on a gravel road next to a forest. +20207,A cat laying on top of a blanket on a bed. +96514,A small white bird standing on top of a pond of water. +278168,A tennis player is shown three times within an image. +47255,Two giraffes stand side by side in a fenced in enclosure. +180764,A man eating a pink doughnut with sprinkles +517946,THERE ARE PEOPLE THAT ARE TAKING A WATER RAFT +528462,People are watching a man swing at an approaching baseball. +207366,Two young men playing a game of soccer. +525762,Small child in white outfit on a tennis court with a racket in hand. +376046,A train being pulled by an orange engine. +36693,a box of doughnuts on a table +463898,The child is standing next to the refrigerator with a toy on it. +414663,A clock with street lights on the sidewalk near a white building. +120777,A tray topped with two plates of food and a drink. +436349,"A few different colorfully designed trucks, as people approach. " +99481,A baby boy sitting at a wooden table in front of a white plate. +97748,A man sitting on the head of an elephant. +157469,"A man playing with an interactive video game, with a cat next to him." +527625,Brown bear walking down the walk way of a public park area. +590,A sink is shown with a mirror and lights. +559773,A skier jumps while going down a snow slope. +468508,A red motorcycle parked on a sidewalk near multi-story buildings. +443169,A baseball player holding a bat near a base. +131361,A man sitting at a table eating donuts. +391154,A group of stuffed animals that are sitting outside a brick house. +97230,Two elephants are eating some leaves by the road. +133648,A baseball batter is getting ready to hit the ball. +177714,A plate of cooked food in seen in this image. +476773,Multiple cars driving on a road that has snow. +265611,A birthday cake is decorated like a fire engine. +38816,A view into a bathroom from inside a kitchen. +33489,A semi truck pulling a large blue boat down a road. +167337,A pitcher getting ready to hit a baseball. +358255,Children's room with a bed and a small crib with stuffed toys on the ground. +533979,an elephant standing alone on a cement floor behind a wired fence. +101172,A local hero rides through the streets of town on his motorcycle with stuffed animals. +283412,A little poodle puppy laying near a newspaper with a look of guilt. +46497,Two little girls sitting on the side of a white boat. +450596,A living room with a long beige couch and a tan chair with a mop laying sideways on the chair. +227048,A young man playing a game of tennis on a tennis court. +572050,a black dog is running on a beach +186026,A little child riding skis down a snow covered slope. +144941,This is an image of the inside of a nice bathroom. +455974,A clear refrigerator is stocked up with food. +34617,"A zoo keeper on a scale holding a giraffe with a ""me gusta face"" " +159427,An intersection and three sets of traffic signal light. +578861,A woman is talking on the phone in front of a laptop. +410589,a sail boat and umbrella along a beach with tall grass +178064,A bedroom with the only light coming from the window. +370285,A group of people dining outside at a round table +225675,Skiers skiing under a ski lift on a snow covered slope. +511420,The large passenger train is painted maroon and gold. +554377,A view of inside of a car where a cat is laying down. +271148,A giraffe that is standing in the grass. +467705,A kitchen filled with bottles on it's counters and lots of counter space. +397890,A man getting his collar fixed by another man. +31717,A girl standing on the beach and posing with a surfboard. +534456,Two people sitting on a couch eating chips. +110638,A couple of large elephants standing next to a baby elephant. +291816,A Macbook sitting near a clock and a lamp on a desk. +56244,A potato dish with cheese on a black plate. +66348,A truck full of oranges riding on a street. +95300,A walk in shower next to a white sink. +277971,A young man sitting next to a little girl on a bed. +294297,Two plates of broccoli and shrimp on a table. +115060,A golden clock in a case on display. +568132,"A boy throwing out a pitch in a ball game. +" +454129,a couple of fire trucks that are by a motorcycle +501379,A truck is moving along a city street. +34455,Two television remotes sitting on the arm of a chair. +65271,A woman is walking with an unusual umbrella. +345400,A woman sitting at a table with plates and bowls of food. +188146,A bike parked in front of a doorway. +46185,two zebras are walking in a field next to some plants +234347,a person eating a banana with chocolate on the ground +78488,A yellow fire hydrant in front of a bike leaning against four poles +579192,Two pictures wide by side shows a man walking to a snowboard and standing on it +155131,A lady jumping after the ball at a tennis match. +160483,A white plate sitting on top of a plate filled with food. +75023,Two women stand under an umbrella at the beach. +86408,"A kitchen with a stove, microwave and refrigerator." +259576,A man flies his kite on a hill overlooking a bridge. +476280,A man holds a surf board and walks with a woman. +293034,A group of people that are standing around giraffes. +318814,A horse and a pony trot in their gated field. +375769,A boy with a helmet on eating food across from a bicycle. +382214,A white and black bird perched on a wooden fence rail. +269786,A man in a wet suit surfs in a flash flood by a bridge. +535467,A bunch of small kids in action on the soccer field. +343852,an image of a man that is holding a fake tongue +285437,A man who is wearing a tie that is too small for him. +314140,A cat is laying on a desk staring at a computer mouse. +3553,a person skating on some pieces of wood +466986,A man is smiling for the camera while standing in a kitchen. +577552,A black stove with two ovens build into it. +500435,A couple are walking under the umbrella in the rain. +12706,A crowd of pedestrians around a French monument. +82021,A toucan perches behind a the bars of a cage. +414385,A man walking down a street next to a road filled with cars. +314251,A parade of motorcycles is going through a group of tall trees. +28982,A red stop sign sitting on the side of a road. +288553,"A man in tie, black coat and a hat." +20908,"A table is adorned with cake, berries and bagels along with other empty dishes. " +203061,A green truck that is parked on some grass. +144373,A person with a blue ring eating a doughnut +22724,The building has a tall tower with a clock. +348941,A man is smiling and holding a piece of cake. +175052,A girl in the bathroom tying back her hair. +472088,People sitting down during a tour boat excursion. +193108,The baseball player is waiting to swing the bat. +224477,A person on a surfboard rides on a wave. +381607,A woman sits on a bench and talks on the phone. +118584,some elephants in a field of grass near a tree +146936,A man standing next to a woman as they both eat hot dogs. +163127,A young person standing on a snow covered ground while wearing skies. +260221,An older man holding a gaming remote control. +449488,A man wearing a striped suit and a purple tie and a paper flower on his lapel. +232455,A large flock of birds fly through the sky. +480075,A green and blue bus stopped to discharge passengers. +571219,A couple of baby elephants standing next to each other. +308730,A kitchen with a stainless steel stove.and white cabinets. +246782,Multiple people playing with a soccer ball on the beach. +53058,there is a older man sitting and using a lap top +9274,"A single pillar with a clock is near approaching traffic, including a police car. " +292158,A kite with a skull on it flying in the air on a beach. +405882,"A cake sits on a table, ready to be cut." +410781,A zebra grazing on grass on top of a dry field. +114579,"A woman in a full body ski suit and goggles, skiing on a snow covered slope with a mascot on the side." +119088,The men are up to their knees in the water. +573881,A cat that is under a bike on the ground. +213023,A zebra standing on the grass holding its head near the ground. +538451,The top of an old fabric parasol next to fern +126701,A bench sitting along side of river next to tree. +44065,A woman walking across a street with two baskets full of items. +171107,A stuffed bear laying on the ground in some water. +96991,THERE IS A PARK BENCH FACING A SNOW COVERED MOUNTAIN +490847,A man riding a bike on a dirt path through a forest. +401123,A large giraffe standing next to a man pushing a bail of hay on a cart. +111099,People standing and sitting around at a pier +215485,A horse grazes on a hill in a green field. +201685,A young man is surfing on an ocean wave. +532216,a man runs on the court during a tennis match to hit a ball +374559,A man in black shirt on a motorcycle in a street. +442480,A turboprop airplane that is in the hangar for repair. +576614,A bunch of bananas hanging from a tree. +304252,A person on a surf board riding some rough waves. +54516,A man is about to throw is disk golf frisbee. +368576,A baseball player holding a bat next to home plate. +395512,A kitchen with marble counter tops has wooden cabinets and many appliances. +267837,A person snowboarding down a snow covered mountain. +354662,a tiled bathroom with a toilet and scale in it +31566,A fridge with an ice maker in it against wall +19544,a bunch of computers on a desk with a phone +118739,There is a pizza with some slices taken out of it +401833,A smiling man sitting behind several wine glasses. +469471,A bathroom with a white toilet sitting next to a sink. +472472,A man standing on a beach holding a white frisbee. +328757,A woman eating vegetables in front of a stove. +303127,A young calf stands amidst the grasses on the riverside. +302165,A herd of cows laying on dry grass. +503799,A man standing on a skateboard riding it down a sidewalk. +253452,A white plate topped with food next to a plate of onion rings. +95132,A bed covered in pillows and a comforter. +525361,A train pulled into a train station next to a loading platform. +447087,A table topped with lots of flowers in gold vases. +461007,A wooden bench sitting up against a lush green park. +131882,Cows are laying down in a field of grass. +16356,two kids standing outside flying a kite during the day +542423,A woman sitting on top of a park bench in a field. +193328,A person standing on skis in the snow in front of a hut. +424927,A red bus parked in front of a building. +390826,a panda bear walking on a field near a tree +231169,The black and white locomotive is on the train tracks. +394724,Two surfers in the water and one riding a wave. +373591,A bird sitting on a branch outside above rocks. +420697,A man standing in front of a bathroom mirror. +174423,A bird sits perched on the edge of an umbrella. +277694,A cow that is sitting on the ground in front of a motorcycle. +573962,A picture of rush hour traffic on the streets. +39956,A messy room with door and bed and chair. +56443,A black and white still life of a branch with flowers in a vase +546245,A bed covered in pillows sitting underneath a window. +380117,A cat is laying curled up on a table surrounded by greenery. +516020,a couple of trains parked on some tracks under a closed roof +152759,a white toilet sits next to a dresser +290558,A young man is holding a baby on his lap. +440900,A her of black and white cattle standing on a field. +416663,A close up shot of a cat looking at a computer. +581655,A crimped pie crust is on waxed paper. +435598,A woman standing in behind a tray of donuts. +399879,A woman in a red robe is sitting at a dining table. +561766,A fishing boat with a person and a dog on it riding through the water. +488571,A couple of kids hovering over a pizza sitting on top of a wooden cutting board. +383339,A man surfing in the ocean as the sun sets. +403425,A herd of zebra walking across a dry grass field. +382462,A bunch of soccer players in uniform playing soccer. +402931,this is two people skiing down a hill +157109,A sail flying in the air over water. +330432,Vibrant photo of a train sitting at a train station +449031,The large city bus is painted bright yellow. +478212,a couple of people skiing down a hill +32416,There are five remote controls lined up together. +523123,a white table with glasses and red white and orange flowers +399542,Two zebras are heading into the bushes as another is heading in the opposite direction. +533805,A plane is flying above the airport terminal +261062,the door to the room is open to the outside +158035,Young girl in purple sport short and white pants about to swing tennis racket. +384723,A young boy tries out skateboarding tricks on a road +499835,Two UPS trucks are parked side by side beside a building. +545289,A finger that is pointing at bread on a plate. +329562,The jet is about ready to take off from the runway. +31016,a white laptop is on a wood desk +570664,The person is holding a treat for the cats. +568290,A red extra long bus driving down a stone covered walkway. +221828,There is a blender sitting on a counter next to a toaster oven. +185366,Two horses standing behind fence with grassy leaves +197461,a ram is looking at the camera and standing on some grass +103163,A man riding on the back of a motorcycle next to a muscle man. +80304,A motorcycle parked on the side of a road. +103307,The giraffe has it's head against the tree trunk. +56267,A group of sheep walk along a dirt path. +47588,a black and yellow trains engine pulling its cars +223276,A person on a cell phone on the side of a building. +301981,A giraffe caged in while grass falling from his mouth. +28790,A door open to a bathroom with the vanity showing. +529813,A passanger bus stopped on a street advertising a dinosaur exhibit. +476735,A speedboat pulls a water skier who is flying in midair. +448759,A happy man roller skiing in the mist +29197,An airplane flying through the gray sky with smoke pouring out it's back. +122040,A group of people stand in shallow water near a wind farm. +142472,A city filled with lots of vehicles and pedestrian traffic. +341247,A group of men who are playing basketball together. +423785,The room has two couches in front of a tv. +498462,A woman wearing a scarf and looking at a cell phone. +92451,a train that is on some kind of tracks +389644,People standing around a table with plates on it. +132084,A motorcycle rests against the side of a deserted road near a kangaroo crossing sign. +326664,The skateboarder is attempting a trick on the ramp. +241602,"A bathroom with a spa tub, sink, toilet, yellow stripes on the floor, and flower decorations on the walls." +21592,A person preparing a WII remote in order to play a game. +437117,a female in a blue top is playing tennis +331392,A white glass vase filled with flowers on top of a table. +208825,Closeup of a piece of cake and fork on a plate. +395849,A row of United States Army military fighter jets. +544481,A tall giraffe eating leafy greens in a jungle. +257076,A man with a yellow umbrella waves a flag on the shore of a river. +17179,A couple of cats in a small room. +102872,A man holding a birthday cake in a pan with friends. +340577,"A large military jeep in front of another military convoy," +227073,A woman standing on a beach near the water +420882,The inside of a building is shown with benches. +180329,A yellow tax sitting next to a car with lots of yellow bananas. +500752,Two elephants in the water with their mouths together. +303026,a woman posing on a wooden bench in the woods +468005,A wet elephant walks through a sandy portion of the beach. +55950,a man is playing tennis and is going to return the ball +531499,a big empty kitchen with only a refrigerator stove and a sink +34535,Two chairs at the foot of the bed have books and a purse on them. +318171,A dog sitting on a grassy hillside by a path. +505786,A person mixing something in a blender. +222283,a couple of kids play a game of soccer +199681,A microwave with a stuffed animal inside reads 2:46. +397809,A young boy dressed in costume eating a white cookie. +259571,An orange truck driving down a street full of men in the back. +342460,Many people are walking over a bridge near a clock tower. +236837,A large blue passenger train pulling into a train station. +397279,The tennis player does not know what to expect with the next serve. +47882,A kitchen filled with lots of counter space. +495199,People looking down in an enclosure with black bears. +323355,A young kid is holding a box of pizza. +30290,A man hugging a teddy bear while laying on a couch. +106120,A small bathroom stall with a toilet and wash basin. +399416,An airplane on a runway getting some work done. +245659,"A small bathroom with a toilet, trash can and toilet brush" +329456,A group of people walking down a mountain road. +323423,There are people with skis standing around the snow. +363358,A couple plates of food and a bowl on a table. +461839,A computer desk with a desktop computer on top of it. +405815,Sign with the words Radar across the bottom. +337290,A home office with a computer on the desk and personal items. +168817,A cat lies asleep on top of a remote control. +372265,A man rared back at a tennis ball with a racquet. +292648,A man in a wetsuit is holding his surfboard on the pier. +193387,A cake sitting on top of a pan on a table. +201764,an open suitcase is filled with clothes and other items +267932,a desk with a banana a keyboard and a mouse +335733,A vegetable and cheese pizza with broccoli and tomatoes +232376,A laptop computer sitting on a wooden desk next to a monitor. +503939,A blue and yellow train coming to a stop at a station. +249599,A cat laying on the floor next to a glass. +397166,A very simple bathroom with beige and cream colored decor. +461758,"A fridge full bananas, oranges, onions, eggs and juice" +434142,A person picking up a slice of small pizza. +23579,A woman sitting on a bus while holding a brown dog. +352214,A pizza with lots of different topping son it. +331790,Man selling fruits and vegetables from a push cart. +87561,A white toilet sitting next to a bathroom sink. +254050,A white curly haired dog standing in a hallway. +361439,A giraffe standing next to a log in a fenced in enclosure with people walking on the other side of the fence. +230721,THERE IS A CLOCK TOWER THAT IS ON TOP OF A BUILDING +163528,A brown table with white plate holding a pizza. +210012,A woman standing in a kitchen with hard wood floors. +581496,A man holding the unpeeled end of a partially peeled banana to his lips as though playing a horn +450355,a man sitting at a table with a plate full of food +338802,a man in a wetsuit riding a wave +566672,A baseball player is getting ready to hit the ball. +514116,A toilet as is typical in Asian countries. +362079,A giraffe that is standing in the grass. +336862,A bunch of kids sitting on the grass outside during a sunny day. +7276,A white bathroom sink sitting under a mirror. +241717,A girl starting to fly a large kite. +437231,The two dogs are sitting on a chair. +407825,A red apple with a clock inside of it. +265464,this is a man riding a wave with a board +564332,A man is poking at something in a pizza oven. +355851,A cake made up with decorations of a knitting motif +539423,a white counter a black oven a chair a light and a microwave +146685,An elephant is walking along with another elephant. +542079,A bus traveling down a road next to a bus stop. +227125,"Close up of a traffic light with three lights, the top illuminated red with a person image, the second down not illuminated, and the bottom on hanging down." +581022,A group of men that are sitting on a couch. +324189,A surfboard is recycled into a unique planter. +425074,A person riding a wave on a skateboard. +171058,An orange stripe cat sitting on top of a wooden bench. +238948,Two people on two horses at a distance on a beach with water and sky. +98197,A young black bear moves across a grassy field. +415334,There are people on the snow bank and snow lift chairs are above +432273,A traffic light and cars on a street. +174231,A dark cat hiding in between a laptop. +574805,A small child with a kite walking on a beach. +431854,a man is in the air with a tennis racket +289222,"A street light that shows, horse crossing on it." +507154,Four people gather around a table and smile for the picture. +222811,An open window with a bench next to it +525587,"An old, rusty blue pickup parked in the weeds." +254277,Some orange flowers in a tall silver vase +118108,a table with a keyboard and a mouse on it +396094,A cat is sleeping inside a duffel bag. +290771,"Comfortable, modern living room overlooking a wooded area" +101933,Two men riding on a motorcycle with a young girl. +404889,A giraffe extending its mouth toward a tree branch. +24734,A deep dish pizza sitting on top of a white plate. +273579,A small woman standing in front of a baby elephant. +417410,"A bunch of different fruits and vegetables such as garlic, tomotates, red peppers, and bannanas " +407903,A group of people riding surfboards on waves in the ocean. +126145,A cat sitting in front of a giant TV looking at fireworks. +429697,A group of animals are standing in the snow. +157960,A man standing in a living room holding a Nintendo Wii game controller. +465822,A woman standing in front of a camera in a room filled with a group of people. +460149,A clock hosted on a pole on a pavement next to a building +566282,A pair of well dressed men kick a soccer ball on the sidewalk. +177919,A man riding a skateboard down cement steps. +66632,A plate with cabbage and carrots with a shadow of a V on it. +480936,A barefoot woman eating food outside from a plate on her lap. +363522,A man riding on top of a hand rail with a skateboard. +449156,two people staging a protest against housing foreclosure +315501,"There is a classic, black automobile sitting in a showroom. There are people looking at it in the background. " +444576,A man and a dog ride in a convertible. +228085,A chair and some books in a room. +366256,A stone clock tower surmounted by a spire and minarets. +291582,A lone zebra standing in the green grass. +507550,A flock of birds standing on top of a body of water. +551998,a plate with some vegetables on it +438848,A man talking on his phone without using hands. +485090,An older man showing a young boy how to hit a ball. +441522,A group of people standing around a kitchen preparing food. +156889,People on a boat with two males under an umbrella. +191964,A cat stares forward over the corner of a keyboard. +20107,The fire hydrant has some writing on its side. +22850,A group of military men cutting up a sheet cake. +262360,A vase filled with flowers and water on top of a table. +571893,A kitchen with a teapot on the stove and books on a shelf. +213137,a man on a surf board riding a wave in the water +258911,A row of cows standing behind a metal fence. +6266,The side of a cow with an injury visible. +469030,A man holding an orange surfboard on top of a beach. +10935,An albino elephant with its baby standing in a marsh area with others. +432179,there are any trains that are seen on the tracks +273637,a woman standing with two wine glasses in her hands +64516,VARIOUS ANTIQUE CHAIN CLOCKS KEPT ALTOGETHER ON A TABLE. +473720,A large black dog standing inside of a kitchen. +203506,A table that has a large assortment of snacks. +101304,Two birds standing side by side on a branch +495048,A dog in on a surfboard on the back of a truck. +52891,There is a dog holding a Frisbee in its mouth. +309775,A stove top with lots of pots and pans. +58758,"A kitchen area with refrigerator, counter and a microwave." +109869,A cat standing on top of a wooden bench. +104112,A toilet in a bathroom next to a window and toilet paper dispenser. +500657,A little league baseman couching by his base. +479762,Three adult zebra are walking through the dirt path. +486009,Modern all white kitchen are of residential home. +306415,A group of men standing next to each other. +462289,A child sitting at a white table with lobsters in a bowl. +147758,a motorcycle is parked near a building by the curb +361497,A airplane mirror where clouds can be seen. +495443,A table topped with ripe bananas sitting in piles. +356800,A woman with an umbrella is standing by leaves. +207275,A man holding a Nintendo Wii game controller. +305589,A blond haired woman holding up a cell phone. +173776,A group of people gathered together in a kitchen. +123704,A glass filled with different flavored candy canes. +106331,A baseball player has swung his bat during a game. +172057,A group of chairs sitting around a white umbrella. +572555,"A red, yellow and silver train traveling down train tracks." +554037,"a counter with vegetables, knife and cutting board on it. " +482730,A pile of carrots and other vegetables on a tray. +203835,A bowl of berries sitting next to a bowl of salad. +260695,A man who is looking at his cell phone. +475813,a little girl standing in a room and holding a remote +476813,A train traveling along a rocky mountain side. +139163,A man holds a plate and walks through tall grass with his friend. +318066,Picture window of Vietnamese restaurant says closed. +361382,A man on a motor bike on the road. +208778,A CGI man sitting on top of a CGI hospital bed. +529434,A piece of luggage with a rainbow strap and a ticket on it. +270744,A man carries a leash around his shoulders as two dogs make their way alongside. +76994,A man reading a newspaper standing beside a wagon filled with bananas +37725,A plate with a chocolate dessert sits on a table. +574537,A boy with a hat and face mask on while standing on a snowboard. +392753,a close up of a sandwich and a cup of food +439326,A black and white panda bear sitting on the ground next to a white thing. +461993,a giraffe standing in the doorway of a barn +207670,A woman skiing in the snow followed by more skiers. +350167,A man running on the beach with a surfboard. +398209,A baby crib is in the living room under the television. +557564,A man in a suit and tie wearing a hat. +389649,"Three kids sitting with presents and cake, with a lot of books behind them." +189855,A smiling girl with her fifth birthday cake +550968,A little child holding a blue umbrella while walking across a wet parking lot. +563912,A person on skis jumping high in the air +172686,A table topped with oranges and a bowl of salad. +84200,An orange fire hydrant with a black hat on top. +551944,"Lone Nordic skier on a well worn track through a snowy ""wonderland""" +390471,A freshly made and sliced up pepperoni pizza on a table. +221562,A pretty young lady laying in bed using a laptop. +5356,A passenger plane that is parked on the runway. +463217,A group of young men playing a game of soccer. +350623,A view of a kitchen from behind a dining table. +330554,Blender with portions of its contents spilled around it. +343481,a bunch of sheep all chillin together in a bin +156192,A woman that is in the air with a frisbee. +232950,A man is looking at a sliced pizza. +456261,A man laying on top of a green bed next to a wall. +12016,A close up of two street sings above the back of a stop sign. +141770,A zebra standing next to two moss covered rocks. +491755,A very large living room with many bright windows. +536741,A man in coat and tie smiling and holding up two wine bottles in each hand by a cabinet with wine glasses in a room. +342770,Young man on side of the road pointing at a truck. +517454,Three cats resting on a blanket covered bed next to a shoe rack. +340451,Man sitting on park bench waving and wearing water protective clothing. +212166,A child with a messy face eating a plate of food with hands +51844,four lambs grazing in a fenced in pasture +515350,A man riding a wave on top of a surfboard. +107108,A bowl contains baby carrots and other food. +413295,A beautiful women holding a large yellow banana with her mouth wide open. +64710,a person and a dog are standing near some cliffs +186956,A train pulling into a train station next to a tall building. +180580,Broccoli and other vegetables are in a tray on the table. +562655,A baby boy holding a tooth brush sitting on a floor. +350897,An elephant reaches its trunk over a fence toward a kid. +351504,A man sitting on top of a lawn chair in a field. +571821,A red double decker bus parked next to a group of women. +81998,A counter top with a bowl of oranges next to a bowl of apples and a lamp. +499826,A woman standing next to a line of giant elephants. +140583,A group of donkeys on the side of the road. +523974,THERE IS A PAPER DOLL SOMEONE IS HOLDING IN THEIR HAND +15811,a close up picture of a giraffes head +553998,The truck carrying bundles of logs passes a park. +214491,A man swinging a tennis racquet at a ball. +310663,A train moving along some train tracks next to a tree. +139512,A man with camera taking a photo of sheep +19102,A couple of zebra standing next to each other. +525682,A group of people lounging in a living room. +482485,a fire hydrant sitting next to a sidewalk with trees and an apartment building in the background +329939,a trio of giraffes running through golden grass +152106,a cow standing on a dirt ground with trees in the background +375493,A woman in yellow shirt and skirt with cats in grass. +186060,A male tennis player preparing to return a shot +500298,A counter topped with lots of fresh vegetables. +505942,Two people have a conversation at an intersection +464689,A picture of the entrance to an old house. +222075,An assortment of items that were in a purse. +349130,A cat sitting on a table behind a glass filled with wine. +525227,a man is doing a jump on his board +188465,A baseball player swings their bat at a ball. +564418,A cake made to look like a colorful train +355881,"a bowl of fruit, veggies, and sushi on a table" +471184,A tall giraffe standing in a lush green park. +150763,A dining room table set up for a fancy dinner. +530163,Three giraffes feed from a basket hanging off a tree. +549797,A woman holding up a cup of coffee in an office. +335521,A busy street on the side of the hill +322829,A white meta bench next to a patch of grass. +105996,A person surfing on a surf board on some waves +540502,A white refrigerator and a counter in a room. +272518,A brown and white horse appear to be tired. +166142,A white and gray water fixture sitting on top of cardboard. +468997,A baseball field with players playing a game +401539,A large herd of horses riding on either side of two men. +157001,The man is curious about what is on the laptop computer. +209028,A small brown and white bulldog riding a skateboard. +579885,A herd of sheep grazing on grass in a field. +133821,A peacock with very large feathers walking down a street. +497661,Two oranges sitting beside a banana on a counter. +160012,A close up of a pizza pie sitting on a table. +309492,A cop riding on the back of a motorcycle down a street. +303718,Part of a donut sits on the plate on the table. +455345,A bowl that has apples and bananas in it. +431931,A yellow and brown bird perched on a leaf on top of a grass covered field. +434467,A man riding a motorcycle in pink furry boots. +536027,A person walking along wet ground holding an umbrella. +263758,A large propeller airplane sitting on top of a tarmac. +13632,A small round ceramic glass vase on a surface. +468363,A teddy bear standing next to two toys. +503197,A large blue and white bus parked on the road. +531189,A small dog walking past a red fire hydrant. +442630,The man is sitting on a bench and is looking out at the street. +74256,Two women standing next to each other in a train station. +465093,A cat leaning up against a white door in a room. +452772,Two brown cows laying in the grass next to a tree. +295199,A white urinal mounted to the side of a wall. +525247,Cat staring at the screen of an open laptop. +543220,A man riding a skateboard down the side of a ramp. +29019,Big Ben towering over the city of London with it's massive clock. +516813,A young man on skis is skiing on the mountain slope. +525439,a man stands in front of a flipped skate boarder +316879,People are camping outside with their bags and under an umbrella. +359751,A group of zebra standing on top of a lush green field. +177935,A large white kitchen range with gold towels on the front. +468632,A group of young men standing on top of a soccer field. +270705,A large bird perched on top of a stick near a window. +76768,A commuting train movig through a rail yard with tracks on +482476,A woman holding a remote control while standing by the side of a street. +520047,There is a train moving through a track yard +437028,A view of a building in a country different than the US. +263834,Person riding a motorcycle with someone holding a child. +135424,A distant view of a surfer riding the ocean waves. +99230,A cat has its paw on a game controller remote. +514296,"A white sand beach with chairs, umbrellas and people." +465893,there is a train that is coming down the tracks on the train +328372,A double decker bus drives down a street lined with buildings. +322785,A double deck tour bus at a stop with passengers. +466005,A jetliner flying above in a light blue sky. +300055,a suite case that is on a brown desk +399274,"Passenger rail train moving quickly, everything around indesicriminate blur" +355956,A little league team is practicing on a dirt lot. +103027,"Electronics, organizers and keys are laying in front of a bag." +263594,A bird walking past a white car in a lot +426011,A group of men who are standing behind a banner that has various flags on it. +32400,A man in a blue outfit holding a white frisbee. +79024,Black motorcycle sitting outside a wooden door on bricks. +460757,A cat laying on top of a rug near a toy. +64152,A kitchen with a refrigerator freezer next to a sink. +5540,"A cutting board topped with bread, meat and vegetables." +521879,People watch a horse and carriage ride by them. +45248,A large exit street sign laying on the ground. +437118,a man holding a tennis racket on a tennis court. +229531,Three young men holding Frisbees in a park posing for a picture. +124729,A dog sitting on a couch while staring out a window. +520109,Several umbrella covered areas are placed in a field. +530220,A motorcycle being displayed on a platform during an event. +219393,Several kids are on a tennis court with their tennis rackets. +193050,A group of sheep graze in a grassy field. +90754,Three women sitting on top of a couch next to a black cat. +308476,A polar bear standing on a rock formation in an enclosure. +270316,A delivery truck parked in front of a store on a street. +469810,A for of four urinals mounted to a wall. +353817,A mirror reflecting the image of a white kitchen oven. +444777,a bed with some black bags on it +7149,A woman washing a lam with a hose. +402333,A cat on the kitchen counter sticking its nose in a cupboard. +506544,A man walking his dog past a park bench. +273196,a large clock indoors with a large flag +230362,Dark clouds moving in over a harbor full of moored sailboats. +419119,A hand picking up a game remote from a table. +419848,A hot dog and a bowl on a table. +570448,A man sanding on a boat next to a beach. +381991,A woman hosing down a passenger railway car. +347216,Lunch with salad and dressing with pita bread. +189740,An orange and yellow flower sitting in a see through humming bird. +154884,MAN STANDING NEAR TABLE WITH A BASKET OF APPLES +175506,there are two men holding a frisbee together +277738,A man sitting on the edge of a platform with a large suitcase and statue. +250794,Bikes are shown lining the roads and the rails. +264572,A boy in the pitcher's mound getting ready to throw the ball. +389490,A baseball game being played before a crowd. +296865,A sheep standing near some black sheep on a field. +2985,The truck driver hauls an elephant down the highway. +34193,A painting of two bears with a mountain in the background. +225603,A person sitting at a table with some fancy food. +382125,"Two men are posing for a photo, one man is holding a slice of pizza on a plate, and they are surrounded by other people sitting at tables." +346905,The elephant family is walking down the road. +65736,A woman in black shirt and skirt playing a game of tennis. +288944,A young boy kneeling down on a snowboard on a snow covered field. +334471,A small garden is shown in wooden long boxes. +534421,A group of young children playing in the snow next to each other. +367095,A man that is sitting in front of a laptop. +512307,A black haired man wearing a white shirt and tie being filmed while speaking by a woman wearing red +162503,A bird perched on top of a tree branch. +72944,A small boy on a skate board on a ramp. +19036,a team of pizza makers holding a fresh pizza +268254,A stainless steel microwave oven is on a refrigerator. +49413,A stove top oven sitting inside of a kitchen. +450370,an elephant walking through the weeds in the forest +5513,A little girl with her back turned flying a kite in the sky. +250364,A man and a baby laying on a matress. +115680,cows and bulls on grass grazing for food. +147409,A bus driving across a cross walk near a tall building. +276476,A man riding a skateboard while flying through the air. +291742,A kitchen filled with metallic appliances and a stove top. +23840,A plate topped with slices of banana next to a knife. +549887,Two halves of sandwiches sitting on a plate. +281782,A woman standing next to a child on a yellow flower and grass covered field. +574520,"a surfer riding the waves,on a surf board." +144243,A group of children playing soccer on a field. +420422,A bus pulling away from a bus stop with the destination marked on it. +11538,a man wearing leather riding on a motorcycle +273772,a small pamphlet is sitting on a benches arm +35682,Eating a donut makes for a quick and easy breakfast. +75494,A man surfs a wave in the water. +325198,A giraffe standing next to a tall tree. +403820,Large airplane flying below the clouds from underneath +304941,A cat sitting on a bed near a television remote. +235575,A nice meal on a plate with a green cloth underneath. +160666,A toothbrush with toothpaste next to a tube on a counter. +339988,A man with respirator works on a surf board. +172271,A bench sitting on top of a grass covered hillside. +233362,"Artwork of a ship with three masts and one sail open with a scull and crossbones on it, in bluish gray water with gray cement wall in background." +225532,A highway filled with lots of traffic nest to a traffic light. +13432,Several sinks lined up by a brick wall +116845,"Grape tomatoes, apples, and an onion are on a table." +188078,A black piece of luggage sitting next to a tire donut. +324313,A hospital bed that is in a hospital. +411845,a wire with a street light hanging from it +133707,A black cat sleeping in the sun on a bench +463628,That doll has really dark and black eyes. +486087,"A living room is decorated with old-fashioned, floral patterns. " +451501,A big very old looking rusty truck in the grass. +294131,This bathroom looks like a very compact one. +561027,A mother polar bear leads her cubs through the snow. +271888,Some yogurt and baby carrots with dip are on this plate. +234136,Two men smiling while they are in a car with a dog. +494998,A brown bear walking next to two small bears. +358342,A tall massive clock tower towering over a city. +360899,A row of parked motorcycles sitting next to a white double decker bus. +187054,a couple of men are playing video games in a room +249909,A giraffe grazing from shrubs next to the road +21060,"The computer desk has a small pad of notes, and an mp3 player on it." +145523,A few items sit on top of a toilet in a bathroom stall. +199962,A man is sitting on a chair looking at a table. +89432,A man on a skateboard on a ramp. +279491,A woman and man serving themselves food from a table. +145439,A bear searching for food near the river. +427615,a close up of a child sleeping holding a stuffed animal +429834,A picture of some kites that are flying in the air. +474934,Two horses on a beach near the water +398927,A bird resting on a birdfeeder hanging on a tree. +368505,A tall white clock tower inside of a tall building. +315908,A child with a helmet on a motor bike. +512223,A couch and pillows in a small room. +441873,A young blond boy flying a yellow kite. +210190,a man in the park is flying a pink and black kite +168883,A woman wearing a creepy mask standing next to a child. +320324,Sever airplanes are parked on an airport runway. +126631,A tennis player with racket and a bag with a baby +238989,A banana leaning on a lemon that has its end sliced off in front of a spaghetti squash. +35952,A row of different colored motor scooters sitting in front of a store. +440184,Four people play a game of mixed doubles tennis while another man looks on. +368049,A snow boarder riding down a snow covered summit. +277584,A cat outside looking through a window. +85340,A woman holds a basket with a hot dog while she is surrounded by two other people. +523360,A cement wall with a picture on it and a small four door vehicle parked below the picture. +30967,two giraffes are walking around in their pen +176595,A woman bending over to pet a small horse. +49660,A male tennis player jumping in the air to serve a ball on a clay court with spectators looking on. +144269,People sitting on a train with one person looking up at a mirror and taking a photo of the reflection with a camera. +56413,A neon green walking sign has an arrow under it. +504970,A toilet that is outside next to a fence. +117286,A group of people standing on top of a snow covered slope. +107990,A small child climbs atop a large motorcycle +3382,People in navy uniforms and one person talking on a walkie- talkie. +384114,Several men standing outside of small airplane with man retrieving luggage from cart. +21365,A young girl is watching a movie of some sorts on a flat screen. +74499,A large blue boat sitting on top of a sandy beach. +353510,A couple of older folks standing in a kitchen. +80671,A person is trying to ski down a snowy slope. +9426,A small plane flying through a cloudy blue sky. +438788,A cake has had a slice taken out of it and put onto the plate. +153971,A kid tossing a blue frisbee towards another kid. +529762,A man sitting at a table eating a hamburger and fries. +71815,A guy playing tennis about to hit the ball. +556498,Two black signs that are on the side of a pole. +9553,There is a bird that is on a branch sitting looking +221433,a person skying on the water with a wave +475944,A large colorful parrot is perched on a tree limb. +37871,A dog standing in the grass near a flying frisbee. +314383,A man riding a skateboard through a empty lobby. +46650,A banana sitting on top of a black record. +361055,A man standing next to a dog inside of a room. +40894,a tour boat resting in the water next to a dock and underneath a bridge +311309,A woman holding an orange frisbee standing on a lush green field. +413689,Two women holding umbrellas while standing on a city street. +506586,A black and white cat playing with strap of blue backpack. +150212,A snowboard sitting on a snow covered slope. +348186,A gray teddy bear leaning up a counter next to the ocean. +260655,A white and blue plate topped with steak and bread next to asparagus. +550431,A man adjusting another mans color in front of a painting. +518348,Two giraffe standing next to each other on a dirt field. +224554,A train that is going by some grass. +160772,A boat on the water with a lighthouse in the background. +408480,A boat that is on a pier and not in the water. +183409,A well lit clock on a building at night +506587,A close shot of red flowers in the vase. +216083,A yellow and blue fire hydrant by a fence +378948,a dog on with a collar stands in between two people +83045,A bicycle leaning against the hull of a boat +362306,A man holding a large knife on top of a table. +493864,A man standing on a wet beach holding a blue board. +176793,a beautiful lady with a very nice motor bike +273316,The picture of a tennis player playing in a game. +9791,A golden clock rhino sculpture sitting on top of a fireplace. +353920,A bathroom with a sink and toilet and dark hardwood floor. +501788,A cat on the ground by a very old door leaning against a wall. +75046,The bedroom has stuffed animals and a stop sign on the wall. +147685,A man holding a pizza paddle taking a pizza out of an outdoor oven +205101,A tray with a cheese and meat sandwich with tater tots. +117125,The train is rounding the bend of a track on the mountain side. +346904,A bus driving down a road by a building. +506561,A man on a tennis court with his tennis racket poised to hit the ball. +64300,A pelican on the shore near a body of water. +255274,a baseball player is a bat during a game +94168,A yellow and red train on the railroad tracks. +184369,A person on a surf board surfing a wave. +256743,A long haired snowboarder poses standing with his board. +481425,a computers keyboard on a table and a pen +140167,A colorful vase sitting on top of a table next to a picture on a wall. +143533,A herd of white cows on a grassy field. +375554,BMX bikers waiting in sandy area for something with gear to ride. +570022,A living room filled with blue furniture in front of a TV. +235790,a couple of plates of food that has a stick in it +577864,Three people are playing with a red kick ball. +123469,A big truck going down the street with graffiti on it. +32909,Some very cute cows all lined up in a row. +216695,A bridge built over a water is shining lights at dusk. +293124,A pizza with apples on a plate near a cup +108923,A cat watching a television show about migrating geese. +549410,A cat is lounging on a book shelf. +432332,Two yellow and silver trains parked next to each other. +188945,A man riding a skateboard down the side of a road. +8629,many different slices of pizza with a white sauce. +414857,A man who is using a hair dryer to dry his hair. +243831,There are people skiing outside on a hill. +473204,A small child in the saddle on a horse at the rodeo +409630,A computer keyboard sitting next to a mouse. +326243,A baseball player throwing a pitch wearing a glove. +422918,A woman laying on top of a couch using a laptop computer. +351183,A pile of pancakes sitting on top of a white plate. +8350,A large dog sitting on top of a roof. +30925,A giraffe stands next to a tree and a lake. +44165,A caretaker looks after a small brown elephant +517069,Two women waiting at a bench next to a street. +578093,a white yellow and blue train at an empty train station +513778,a big giraffe walks across a dirt road +424642,a couple of people are outside near some trees +152281,Sheep with numbers painted on them in a green grass field together. +409259,"A plate with eggs, sausage and bacon sitting on a table." +384338,Giraffe with its head over a rail at a zoo enclosure. +550400,A cake is pictured that is a combined Friday the 13th and Valentine's Day Chocolate Layer Cake. +165984,Two horses grazing outside behind a thin wire fence. +301756,Two men playing Frisbee in a grassy area. +436203,Skier on the top of a ski course being followed by another rider. +1064,A close up of a plate of food containing broccoli. +350505,The city worker is elevated in a machine attached to a truck. +156372,A chair in the corner on a boat. +508288,A man wearing a life jacket while engaging in a water sport. +173109,A boat is in the water close to a housing lined shore. +7304,a little in a pink shirt and khaki skirt playing tennis +514540,"A city street corner with a street pole that has one way signs and a light on the top, and a building in the background." +451043,A person in the heavy snow on a snowboard. +187072,"Two little kids, a girl and a boy, playing a Wii game." +62875,a bunch of animals that are runing in a field +455746,A woman sitting at a table in front of bunches of bananas and grapes. +352538,A brown purse is sitting on a green bench. +204026,"A meal of french fries, salad, and meat is sitting on a table. " +138728,People playing a game of Frisbee in the park. +236461,A surfer crashes into the ocean after riding a wave. +16497,A man posing for a picture while holding a skateboard. +25972,A blue love seat sitting on a trailer attached to a bike. +509526,A woman in a black jacket sitting while talking on a phone. +218388,A large red sign on a metal pole. +140487,A man looks somewhat blurry on bike as others look on. +238065,A guy on a skateboard performs a trick on a half pipe. +573455,A large herd of cows on a field. +544451,The desktop wallpaper is open on a computer +366576,Various equine (horses and zebras) inside stalls under a tent. +234518,She's probably not going to get to that frisbee in time. +469634,A man riding a skateboard down the middle of a street. +161873,A giraffe is walking on a roadway with cars on it. +80596,An empty handbag lying flat on a table. +188768,A cake shaped like a stuffed and roasted chicken. +13948,Two zebras are seen running on a path together. +154701,A laptop on a desk with a cat laying on it. +574057,A bunk bed sits next to an open window. +81812,A group of people are eating at a restaurant. +63381,a single zebra standing by some rocks while eating some grass +532732,A woman in a red hat and dress and black gloves talking on her cell phone. +176009,a surfer using man made wave with ease +415672,A street scene with people on motorcycles and people sitting on benches. +257137,A white bowl filled with rice and vegetables. +263382,A lamp with a red wall with a large clock on it. +282808,A wooden park bench overlooking a valley full of trees. +221864,A beautiful woman riding skis down a snow covered hill. +60052,A woman twirling a floral print parasol umbrella. +132189,A blue bus is parked on the parking lot next to another bus. +531149,PEOPLE ON A BEACH WITH TENTS AND FLYING OBJECT +409914,A monitor showing a film on an airplane. +455859,A little girl in a pink shirt standing near a blue metal sculpture. +72024,Set of several sail boats gliding down a river. +226008,A couple of people riding a jet-ski on top of water. +338255,A train pulls up alongside a paved waiting area. +516786,A man holding a red and white surfboard in front of an elevator door. +255654,"Commode scene, probably commercial establishment, outside of USA." +103791,a truck on a city street with many houses in the background +16631,A street sign that has been altered with graffiti. +276387,A snow covered soiled toilet sitting in front of a house. +511669,A woman in jeans and a jacket on a horse riding through a large green field. +57172,A man riding down the side of a ski slope on a board. +280710,A group of people walking down a city street near a bus. +319541,A person sitting on top of a bench with their arms spread out. +542962,A couch and a television in a room. +52982,A person standing next to a large elephant. +25014,A standing toilet sitting inside of a bathroom stall. +324774,A person that is on the front of a can. +163372,Two zebras standing together while one zebra swishes his tail. +420069,A group of people playing a game of baseball on a field. +105179,We are looking at a black and white shot of a train platform. +253171,A couple of glasses next to a bottle. +468858,An old floor standing tv next to a leather couch. +381382,A partially eaten slice of cake with a spoon on a plate. +394328,There is an indoor toilet underneath a sign that says please flush. +489266,A small fat horse is walking on the grass. +213432,Two horses grazing on green grass next to a forest. +252696,A tennis player is preparing to serve the ball. +216664,A cat sitting on top of a white toilet in a bathroom. +147546,A rack with lots of ripe bananas hanging from it. +315191,An airplane doing maneuvers with white smoke pouring out of it's back end. +136624,Some assorted fried foods layed out on a plate +416125,A stop sign and fire hydrant on the side of the road. +110211,Zebras and rhinos out in the wild on a sunny day +264279,A man riding on top of a surfboard on a wave. +241599,A kitchen with brown cabinets and white appliances. +70240,a lady that is standing by some flowers +102906,A street devoid of traffic surrounded by tall buildings. +509719,A small bird is standing on the concrete +571970,a man with a bike at a marina +2154,A grocery cart filled with clothing and sheets sits next to some boxes under a tree on the sidewalk of a city street near a bench. +527791,A DOWNHILL SKIER SHREDDING THE SLOPES OF SNOW +31660,A bathroom with a small white toilet under a skylight. +463406,A truck full of boxes is next to a car. +554241,A group of people standing on a brick walkway. +550952,A group of four surfboards laying on top of a beach. +318573,A baseball player playing baseball with a bat. +518197,A crowd of passengers standing outside of a commuter train. +535602,A open box with pizza on the ground. +409921,A group of three parked buses in front of a tall building. +155604,Pizza with toppings baking in oven with steel +274411,A tennis player getting ready to serve the ball +26564,An office desk with a row of books and a desktop computer and laptop computer on the desk. +28209,a white sink and cabinet in a home bathroom +42541,A man riding a wind sail over choppy ocean water. +387388,A bench on a wooden plank in the water +229274,A large banana tree filled with lots of bananas. +22085,some males a playing with a white frisbee +528404,A picture of a train coming out of a house. +42383,A white toilet sitting next to a white bath tub. +24402,A woman using a blow dryer on a ball of newspaper. +352290,A brown horse standing on top of a lush green hillside. +546264,An orange cat laying on the seat of a motorcycle +369887,A nice ooking smart phon with a sticker on it +513793,A parking meter with the time expired on it +319221,"a tray filled with assorted plates and bowls, most with veggies in it" +148526,some people are riding motorcycles down the street +444502,A person on a field with a baseball glove. +315448,A person is riding an orange motorcycle doing a hand motion +492051,A room filled with lots of furniture and a table. +157261,The train is pulling passenger cars down the track. +480553,A bathroom with a small toilet and a brown lid and a larger white toilet. +159831,A meatball sandwich is smothered with melted cheese. +386224,A group of people and a girl holding a cell phone. +231855,A group of people riding on the backs of motorcycles. +282150,A blue and black motorcycle has a leather seat. +217562,A woman standing in front of a flat screen TV. +579438,A woman in a bustier holding a stuffed animal. +565622,A close-up of flat bread garnished with herbs and olive oil. +476925,A man sitting on a top of a green couch. +162580,A child sitting on top of a chair holding a teddy bear. +234526,A little boy in a yellow shirt feeding a giraffe. +112362,A young man dribbles a basketball as his companion talks on a phone. +18098,A large black dog sitting on to of a trucks flat bed. +574404,A baseball player swinging a baseball bat at a baseball. +131815,A woman with pink hair eats a banana in a kitchen. +386012,a sunny beach filled with a lot of curved kites +55668,A woman posing with her husband and two children. +198043,A skateboard on top of a surfboard on a beach. +83844,a sign a street a green car and a person with a black umbrella +1176,View of a skateboarder igrinding a rail through a lens +88507,A snow skier is going down a mountain slope. +273416,A man stands outside a shop selling various items. +536201,outside and cars park on the street and a sign name Duke Ellington Bld +128373,Various stuffed animals behind a pane of glass +444207,A dog is lying on the carpet of the living room. +421209,A baseball player holding a baseball bat while standing on a baseball field. +186637,a giraffe eating food from a food dispenser +102348,a picture of a water hydrant with many snow. +53490,A person riding the waves on a surf board. +306585,The young child is learning how to ski. +527529,Dog in bag with mesh and items around +393014,Several sandwiches sitting on a window display together. +472732,A herd of cattle and several men on horses are out in the desert. +272863,"A bathroom area with a tub, sink and wooden floor." +7281,Two men smile as they ride horses on the beach. +147721,A man riding a surfboard on top of a wave in the ocean. +371873,A table topped with donuts and a cup of coffee. +253819,A man that is jumping in the air with a skateboard. +575882,Two people are sitting on a couch together +506401,A city scene is shown with stop lights is shown. +360487,Delicate flowers are arranged in a green glass vase. +556248,Birds walking around on a large rock by the ocean +375143,a women that is sitting on a brick wall with a cell phone +362094,A restaurant filled with lots of different types of food. +265372,A small boat sitting in a harbor with larger boats. +542777,A plate full of fried food and salad with a fork laying in it +376937,A boat floating on a lake next to a tree covered shore. +554154,A living room filled with furniture under a chandelier. +304689,A woman sitting a table holding a piece of cloth. +390072,A large bouquet of flowers in a vase one being a sunflower. +431113,A man riding on the back of another mans bike in the street +444366,A wooden chair sitting in front of a window. +303944,a group of black suitcases sitting next to each other by a wall +296634,Three white bowls of food that include soup and vegetables. +405021,The van drives down the street behind two people walking a dog. +515266,A white truck parked next to a white trailer. +436653,A small town street filled with traffic beneath a mountain. +184485,A brown teddy bear standing next to a tooth brush. +83086,"A tall, stone clock tower rises above green trees" +330023,A living room with large open windows and blue carpet. +22498,A person riding a wind-sail on top of a body of water. +180515,A pole that has a street sign on it. +384823,A computer sits on a small wooden desk. +385781,A picture of a stone bench in a park. +526089,A man is playing records in a Dj booth. +114481,A baseball player standing next to a base. +468608,A woman in blue shirt cutting a frosted cake at table. +9145,Two ducklings sit next to each other in grass. +269282,A sign for Davidson College outside of one of its buildings +461572,A pizza with a slice being taken from it. +35672,A man laying in a bed with a dog and green blanket. +68933,A trio of zebra's leaned over eating hay on the ground. +486438,A plate of donuts with a person in the background. +477903,a group of pictures of the same table with multiple trays of food +307658,A brown fuzzy bear standing in front of a leaf filled tree. +560439,Three people walking down a snowy slope. +235093,A kite flies high in the air near some docks. +468953,A woman dressed in a police uniform talking to a man on a motorcycle. +314694,A young bot sitting at a desk using a laptop computer. +113571,A man cuts a cake with a rather larger knife. +197022,I want the pizza that has extra cheese on it. +102644,A white toilet sitting in a bathroom next to a shower. +66001,"A couple of monitors, a laptop, keyboard, mouse and a printer." +163879,Many suitcases lined up in a small room. +489798,A group of people sitting around a table. +357265,a city clock on the street of a city +258019,A man eating food out of a wrapper. +444275,A microwave oven sitting next to a device near a fence. +275374,People are sitting at a table drinking a beverage. +386210,A store window with a tray of grass and vegetables +182170,A man an a woman playing with an Xbox. +191724,"A breakfast plate includes fried hotdogs, eggs, cheese on bread and a scoop of potato." +556505,A wet black dog with its face covered in sand. +133999,A double decker bus driving down a street next to a tall building. +129675,A small stack of antique leather bound books with a pair of glasses and a pocket watch. +178683,A baseball player swinging a bat at a baseball during a game. +532963,a table near a body of water with many plates of food +494404,A traffic light sitting in the middle of a flooded street. +185721,black and white stripped poles with stop lights attached +160834,A white speed boat on a lake next to a shore. +233233,A person is standing on a very snowy hill wearing skis. +78771,A cat sitting next to a laptop computer on a table. +228122,Fancy traffic light with arrows and a mirror. +346232,these people are walking together down a road +271546,Two men with racquets on a tennis court. +44328,some people and a dog under an open umbrella +190150,A motorcycle parked next to a black truck. +336355,A woman on skies in the snow +10056,A city bus on a city street transporting people. +580197,Two men in bow ties standing next to steel rafter. +528525,A child with glasses and a bean holding a red kite. +142177,A plate of food sitting on a black tray +87444,A cow sitting in a penn inside of a building. +235902,Small bird hanging off the side of a cage bird feeder +297540,A baseball player holding a baseball bat on a field. +299448,A train is going down the track under a bridge. +553731,A clown talking on a phone next to a building. +283060,a table with plates and forks and knives close by +54763,A man in shorts riding a surfboard in a pit +232972,A woman talking on a cell phone standing in front of a board. +19890,Two pretty zebras grazing together near a metal structure. +517443,A white building with a clock on the front and side of it +487131,Four men standing outside a brick building with trucks. +192554,"A sink, soap, toilet and a mirror " +337083,An architecturally mature building on the corner of an intersection. +192787,a man sitting in front of a computer holding a camera wearing headphones +472246,"A fork next to an apple, orange and onion." +354303,A large group of zebra standing in a dirt field. +438093,"Two plates topped with mean, gravy and veggies." +219075,A man stands beside a refrigerator in a kitchen. +71360,A chubby toddler is chewing on a toothbrush. +114710,A person standing by a fence with a sheep. +82468,A plate full of food with an assortment of food on it. +5033,a tall tower next to a train track +121744,A tennis player with his leg up in the air and a racket in one hand. +24045,A close up of a small nice looking pizza on a plate. +335507,A couple of zebra standing next to a rhino. +523033,A group of people riding waves in the ocean. +372043,A man riding a wave on top of a surfboard. +33061,A group of people flying many kites in the sky. +198120,Boxes filled with donuts sitting on top of a table. +118811,A person sitting at a table with some drinks. +140783,A city bus drives down a dark city road. +70769,Several people on skateboards riding between cones on the pavement. +83277,a person jumping a skate board in the air +469203,A bride and a groom cut into a wedding cake together. +274869,Several sail boats on San Francisco Bay near the Golden Gate Bridge. +110759,A giraffe walking in a grassy area next to trees. +137950,A plane flying over several houses and lots of trees. +214204,an all white bathroom with a sink and toilet +467296,Person holding up a have eaten hotdog with topping +216482,A giraffe staring at the camera in a field. +365724,A batter getting ready to swing at a ball as the crowd watches. +138589,People at the baggage claim area of an airport. +560427,A plate of breakfast foods sitting on a table. +347203,A baker checks on a rack of muffins pulled from an oven. +393777,This photo shows a man in a chair with a toddler next to him. +138073,A train is pulling in to a train station. +222735,A remote control on a wooden table in front of a television. +181714,An animation of a girl holding an umbrella is shown. +203063,A herd of sheep grazing in a snow covered field. +210777,The young child is eating a sandwich while the adults prepare food. +225670,a black dog in the air catching a frisbee +182369,Animals in a body of water play with a ball. +428769,Car parked at meter with license plate that says SUPABAAD. +570094,Three slices of pizza and many bowls of salad on a table. +406315,a child is fitting inside a small suitcase +558608,A kite that is laying down in the sand. +456197,A large tower with a clock looms over a park. +99179,A group of women standing at the side of a building +171310,A chair with a cloth sits beside a table with a pot on it. +58701,a street sign on the corner of a city street +5154,a long skinny bed with a floral blanket on it +350522,A black and white cat sleeping in a pot with a leaf less tree. +357219,Four bears standing on a fallen tree outside. +486491,"Individuals are having a decent time in this photograph. +" +96884,Hot dogs with ketchup and plain chips +38314,A couple of sinks and some toilet in a room. +379055,An apple and a paper weight on top of wooden blocks before a mirrors. +245576,An orange cat sitting on top of a computer desk. +91520,A couple of giraffe standing next to a tree. +93405,A clock mounted on the side of a building. +195754,A living room with the tv on and a wheel on the wall. +455267,a wok on a stove cooking some food +199017,Person riding an elephant as it crosses through a river. +101948,A man in glasses is adjusting his tie. +440878,A white toilet covered in feminine toilet coverings. +30080,A grey military jet traveling down the runway. +24157,The group of people are skiing on the snow. +470624,A boat traveling across a large body of water near a large mountain. +359277,Rows of motorcycles in parking lot next to buildings. +163585,The bench on the side of the street is empty. +526704,This is a giraffe standing in an enclosure. +183144,A group of people walking in the rain while carrying umbrellas. +267184,An old luncheonette sign on a corner by a street sign +500507,Three dogs in a fenced in area together with a dirt ground. +101985,A soccor player trying to kick the ball but kicking the other player instead. +540642,A kitchen with wooden cabinets and a fridge +32760,A man on a bike looking at a line of semi-trucks in the street. +563295,A propeller plane flying through a gray sky. +61735,A WHITE AND BLACK COCKER SPANIEL UNDER A COMPUTER TABLE +109265,A large gray elephant walking through a marsh. +48546,Street signs at the corner of Wadsworth and Amherst +158015,A man holding a tennis racquet on a tennis court. +567812,A man sits with a teddy bear on his shoulders. +169505,A person flying a kite high in the sky. +340811,THERE IS A SANDWICH ON THE PLATE WITH GARNISH +318147,A single female rides her skateboard on a level surface beneath a huge palm tree. +306135,The man is walking up the stairs near a horse and rider statue. +154139,A baseball player pitching a ball on a field. +436413,someones bed where they left a teddy bear +31993,A group of three rams going through the grass. +569722,"A floral plate with greens, carrots and potatoes." +475572,"There are is a picture of a couple, a beany baby bear, and pot of grass on a mantle." +44839,A group of children eat cake with adults standing in the background. +300233,The ingredients are on the kitchen counter next to the blender. +554392,a man and woman stands in front of a cake +414852,there are two young boys with no shirts sitting on the floor +168248,A young man on a skateboard at a skate park +268215,A glass plate that has food on it sitting on a table. +25034,A rowing team looks ready to begin on a calm stretch of water. +37677,A woman sitting on a fence holding an open umbrella. +217039,Closeup of view of the cabin and wing of a large commercial airliner. +77360,a white cow walking down the street next to some motorcycles +4079,a silver vase and some silver leaves and a green plant +473935,A plane is taking off from a runway. +208107,A man standing on top of a boat next to a man in a straw hat. +225574,A large yellow lizard kite flying over a field. +475879,A piece of brown luggage sitting on the side of a road. +520232,A bird flying between to stop lights in the evening. +207545,A soccer player from Chelsea is on the cover of Chelseafc. +116206, A wooden cutting board filled with chopped vegetables. +191270,A man pointing to a baby's picture on a bulletin board. +50006,Looking out over a bay with many tourist boats moored +47732,A boy walking into the ocean with his surf board in tow. +369393,A woman holding a pink umbrella walking in the rain. +210408,A horse pulling a carriage on a city street. +317424,This work van has green graffiti sprayed on its side +2124,A truck with a horse trailer attached to it with horses on top of it. +114090,Birds are eating from a bird feeder with a pine cone on it. +89898,A skateboarder doing tricks in the air on pavement +581593,"A plate of meat, vegetables, and two large slices of bread with a red wine glass next to it. " +182683,A black and white cat is sitting looking out a window. +452516,A white toilet sitting in a bathroom next to a toilet paper roller. +238537,Two people posing with skis and a snowboard on a mountain. +304316,A close shot of two separate trains. +198530,A group of people on skis stand on the snow. +578343,A room with a desk and dresser holding a tv +350488,A zebra grazing on grass near a river. +108408,Rows of suitcases on carpet with crate in background. +485201,A person riding across a snow covered field holding ski poles. +21711,Motorcyclists and a bicycle are parked on a yard. +463901,A person sitting on a beach underneath a blue umbrella. +318524,A rusty side car of a train that has been vandalized with artwork. +211326,A plate topped with two grilled sandwiches and a knife. +345618,A picture of some food on a plate. +210976,A long bench sitting next to a large fence. +90306,A man in the air on a snowboard above a blue bed. +48636,a baseball player is swinging a bat at a ball +124707,"A kitchen area with a table, dishwasher and stove." +429174,A very tall building with a large tower and a clock on it's side. +482507,A dog carrying a frisbee in its mouth on a field. +488476,A group of white fish vases with a black one in the middle +104108,A brown and white bird is about to fly from a branch. +49014,A very large airplane sitting on a runway. +253485,A man and a women who are cutting a cake. +354814,A teddy bear that has been placed in a tree. +33717,a toy elephant sitting in a toy cage with toy people standing outside +351528,a white gray and black cat is laying on top of a box +334222,A boy on an off road skateboard coming down a green grass hill with trees behind him. +224366,Two men play a game of Frisbee in a field. +571497,A close up of a hamster in its cage. +478518,A small bird sitting on top of a plastic cup of water. +176193,a red white and black sign against a white background +113473,Woman in sunglasses preparing to take a bite of a sandwich. +248019,a blue and white vase and some blue and white wall hangings +500844,A large number of people standing together in a field +415882,a woman lying on a bed underneath a blanket +485483,Some pancakes with icecream and bananas and a coffee +576857,Policemen on horses are lined up watching a man with a rainbow flag. +581087,A toy figurine that has been placed in a shoe. +429690,A man hitting a tennis ball with a bat. +283012,A girl smiles downward while on the phone. +375021,A woman holding a tennis racquet on top of a tennis court. +237767,A very neat living room with the television on. +442478,A young man performing a stunt on a skateboard in a skate pit. +468337,A woman sitting on a surfboard in the ocean. +428280,A laptop on a table with some chairs. +400836,A pack of zebra walking around a grass covered forest. +301993,A man in a shirt and tie making a creepy face. +156184,two boats on the beach separated from one another +430590,The zebra stands eating from tall brown grass. +463454,A couple is standing by a picnic bench under an umbrella. +569700,a green vase with some flowers and greenery +113159,A woman touches her butt with a tennis racket in hand. +452003,A pizza that is as big as the plate. +1171,An antique train engine stands proudly in the glow of late afternoon light. +574769,A woman in a room with a cat. +471567,A giraffe stands alone outdoors at the zoo. +181859,A cute cat laying down in a sink. +477705,An empty street with two street lights placed next to each other. +318596,A sign on Dunmore Court warns pet owners to keep their dogs off the median. +250260,TWO ELECTRIC TRAIN COMPARTMENTS STANDING NEAR TO A BUILDING. +571678,A teddy bear with a pillow on the bed +566414,Utility truck with a large material container on a flatbed. +188318,A lot of tennis rackets that are on the ground. +455225,A couple of middle eastern dishes with fruit and herbs. +197756,A woman standing next to another woman holding a bottle of beer. +308165,A man jumps as he skates on a pavement +39150,A picture of different types of herbs and vegetables available from the CSA. +149123,a truck and two double deckered busses near a building +150040,two zebras eating grass in a very big field. +505818,Some people are hanging out and playing the nintendo Wii. +506736,"The lemons, carrots, and lemons are close to each other." +35767,A large tree sitting next to two benches. +512729,A picture of a plate of food on a table. +285200,A marble shelf containing three vases with different designs. +493612,A herd of brown cattle standing on a grass covered field next to a river. +558449,A potted plant sitting on a concrete overview. +159310,A couple of skis beneath two ski poles. +150320,a keyboard a monitor a brown desk and headphones +564699,A tiled bathroom altered to suit the needs of the handicapped. +122981,a small boy standing in front of a boat +424879,A child and a man hold Nintendo Wii controllers. +300216,A clean white bathroom with a simple mirror above the vanity. +451468,A picnic table inside of a large room . +178984,A pretty young lady holding a tennis racquet on a tennis court. +464358,a bed room with a neatly made bed +347170,a person riding a skate board grinding on a rail +370842,A knife being slid into a wooden block. +383397,A woman is sitting on a cinder block next to a trailer. +54540,A plush alligator on a bed covered with a bedspread and pillows with a lamp on above the bed. +416145,A large brown bear wading through a pool of water. +441442,A professional rider is riding a horse outside +3786,Woman with bookin sat on sidewalk from the top view +332432,A red bag of luggage at the airport. +35429,A young boy seems to be trying to feed a giraffe. +277239,A classroom that is empty and has tables and chairs. +540775,A person holding a tennis racquet by a tennis court +496213,A vintage photo of a man in a suite and tie. +371638,A train covered in graffiti sitting on top of train tracks. +150208,"A dinner table with salad, pizza and wine on it" +505487,A piece of luggage is leaning against the wall. +193565,A man sitting at a table with a pizza on a cutting board. +568765,A man in uniform with a sword riding a horse. +497344,A young boy sitting at a laptop computer. +93437,A shot of an elderly man inside a kitchen. +342971,A man catching a green Frisbee next to a field. +284160,A red double decker bus driving down a street. +332027,A tall giraffe standing on a rock on top of a hillside. +21161,A cat eating a part of a person sandwich +80306,a close up of a tennis player holding a racket and a ball +365182,A very tall clock tower with a clock on it's side. +308907,A corner of street with a building showing a bowling pin. +452899,Several people are flying kites in an open field. +290355,A dog wearing a yellow bandanna sitting on a log during a hike +325867,a rainbow umbrella some bicycles a fence and some grass +561523,Three flutes of champagne sit on a table with a white table cloth. +35899,some red and yellow leaves and some thin green trees +235017,A woman poses for a photo holding an umbrella over her head. +560368,a small bed room with a lamp and luggage. +470318,a close up of a plate of food with a hot dog and a burger +40989,A group of people enjoying a day at the beach. +99908,A car stopped by three cows crossing a road. +569319,A table covered with appetizers and a cake. +239456,A man holding a tennis racquet on a tennis court. +154670,A tour bus parked in front of a building with a large advertisement painted to it's side. +275929,a bunch of toilets laying on some cement stairs next to a building +400658,a bike sitting by a pole in a narrow alley +308507,A kitchen filled with lots of clutter and a table with blue metal chairs. +47394,The baseball player in the orange jersey is swinging a bat. +3932,A small lamb with a blue rope tied around its head. +451952,Three of four elephants in a enclosure eating some hay. +66144,A woman standing in front of window next to a bug and a stop sign. +306700,Woman showing off very large home made pizza. +154633,Close up of the flower extending from a banana tree stalk +336309,a large passenger airplane flying through a cloudy sky +335033,Two giraffes eating leaves at a watering hole. +23411,A group of zebras are standing in a field. +538330,"A dinner plate with broccoli, carrots, and stuffed peppers." +35526,"A bathroom with a bathtub, separate shower, sink, cabinets and mirror." +162398,The ugly tie with flowers is hanging up +121384,A seagull swims toward a rocky shore in a lake. +234910,A shopping center with parking lot along a busy street. +57350,A group of zebra on a grassy field. +315062,Some animals that are eating some hay together. +421682,The moon in the sky above a jetliner. +481214,"A little boy dressed up in a ""Harry Potter"" costume. " +285664,A open metal oven with a rack for cooking. +295797,A tower of a gray and white building has a weather vane and two clocks. +424464,The sculpture is of five people in clown costumes riding one long bike. +388903,A woman talking on the phone in front of a person selling apples. +158497,A kitchen filled with lots of dogs near a dishwasher. +217923,A close up of a cats profile is shown. +248703,A group of kids that are playing soccer on a field. +523772,Closeup of a table with donuts and a red bowl. +35963,A statue with two stuffed animals on top of it sitting in a patch of dirt. +275120,a close up of a cake on a counter +151877,A large truck parked next to palm trees on a street. +300245,The bathroom is neatly decorated in a retro style. +579003,A shower stall with interesting tile is the focal point. +410487,a stove that has some food on it +486306,an assortment of cooking utensils including a measuring cup and scissors +398031,A man is flying a kite on the beach. +457768,A spotted cat poses on the lavatory in a bathroom. +296871,a cat resting on the ground next to some beer bottles and a table +119876,A man dressed loudly is using his cell phone. +527578,"A dining area with a table, television and door to kitchen." +537727,A spinning wheel and hutch by window at night. +250875,A person standing in a kitchen holding a Nintendo Wii controller. +541055,A group of people on the ski slope in their skis. +150779,A dead end street sign sitting next to abandoned furniture and garbage +488346,A man in jeans in front of a television with a Wii controller and a bowling game on the television. +286503,An elephant standing next to a stone in a cage. +182398,A city bus has graffiti on the side of it +151962,The reflection of a dogs head out of a car window in one of the cars wing mirrors +39068,a couple of street signs are on a pole +319935,A hotel suite with balcony overlooking the scenery +527728,A large elephant swimming in a pond full of water. +250108,A computer that is on a desk near a window. +61953,A group of people skiing down a snow covered slope. +552883,"A view of a kitchen with cabinets, a sink and a clothes washer." +54679,A woman holds a pink and blue kite in her hand +343753,A group of people walking under a parking lot with skateboards. +62398,Black and white cat sleeping on blankets with collars. +117788,A kitchen with lots of objects on the counter. +508602,Bird standing on car roof near covered pavilion. +66567,a bathroom with a toilet and a stand up shower +263613,"Horse, cow, leopard and a lady looking at the camera." +10324,a fridge is open with some food inside of it +327834,A black and white image of a huge heard of sheep. +10216,A woman serving the tennis ball on the court +554374,A person that is riding a wave on a surf board. +220607,A conference room is packed with people sitting at their laptops. +571839,A mantle topped with two vases and a golden clock. +240175,A white bath tub sitting next to a sink in a bathroom. +550872,A herd lf elephants walking across a grass covered forest. +118606,A man riding skis on top of a rail. +436694,A large body of water sitting under a setting sun. +198209,Donuts going through a machine to be glazed. +255842,A refrigerator in a kitchen next to cabinets. +530975,a round outdoor courtyard table with a hotdog and a bag of chips on it. +279437,A small neat bedroom for an adult +246005,A man flying through the air while riding a skateboard. +404871,A sigh sitting next to a building in a city. +319275,a person riding skis in the middle of a snowy street +377706,Two people standing next to each other on top of the snow. +503202,Business men are watching a person play a video game. +66510,An old fire hydrant in the middle of the woods. +362520,Small child and protective gear jumping on a skateboard. +136140,A person wearing glasses while using a smart phone. +531995,A black and white cat with it's head inside of a black boot. +499226,A cat laying in a chair next to two remote controls. +368088,A herd of horses standing on the beach near the water +513965,A woman sitting on piece of luggage sitting in front of a building. +556246,A group of boys are skateboarding on a skateboard ramp. +377730,"A group of people at a party, listening to a man talk." +132982,A wet view of a street with people crossing in front of buses. +524954,A urinal is displayed with modern porcelain structuring. +444565,A glass coffee table sits in a living room. +406071,A herd of elephants standing around a dry grass field. +155811,"People out on a city street in the rain, many with umbrellas." +400554,this is a white van driving in the street +333556,Several stacks of white cups in a restaurant. +562292,A young woman sits on a wall using a cell phone. +74166,a man on a skating board jumping very high +5245,A man with at hot on that is in the water. +146411,A cat on the ground with a shoe. +287725,A train riding through tracks in a large train station. +43376,A giraffe looks out over a tall fence with trees in the background. +310902,A train travels over a tunnel with lights in it. +74832,A man riding skis on the top of a sky slope. +407443,The skateboarder has his hands in the air. +435894,A black cat atop a fallen tent flap. +520832,AA man walks down a city street next to a shop window. +315620,A person holding out their arms to catch a frisbee. +290602,They are jumping on those skis in the snow. +403349,A man wearing a baseball hat tossing a frisbee. +570678,A person in cold weather gear riding on a snowboard down a slope. +273645,"Sunbathers are on a rocky beach with towels, and umbrellas." +26665,A herd of zebras standing together in a field. +336171,Two people working in a kitchen preparing a meal. +49259,A man with his shirt off sitting by the shoreline sunning himself. +453757,A group of men playing a game of soccer on a field. +443769,three people standing next to rows of stuffed animals at a street vendor. +493610,A large group of people crammed into and on top of a truck. +154342,a kid stands on a hillside while flying a kite +50403,A table with jewelry and a bear covered in various writing. +72011,A park covered in leaves filled with lots of trees. +97599,A train is traveling down the train tracks during the day. +518365,A herd of elephants grazing on tall grasses +126141,Four differently colored teddy bears on a couch +299720,A giraffe is peeking around the side of a wall at the camera. +293468,"A yellow, red, and silver train makes its way to the loading platform." +492805,A train traveling near a bridge next to wild plants. +93766,A bronze horse and fountain decorate this old palace. +200938,A tall clock tower with a wind vane on top. +455975,A woman sitting in front of an open laptop computer. +246040,A man throwing a baseball at a baseball game +210081,Snow skiers in line skiing down a mountain range. +368978,A four engine jet transport airplane flying low. +77400,Adolescent standing in the living room in a tuxedo. +85376,A single green motorcycle Ina full parking lot +446983,"Outdoors by a stately building on a snowy day, someone with an umbrella converses with two skiers." +403421,"A dog is carrying a blue round Frisbee in his mouth as he walks across the grass. +" +432125,A stuffed toy sitting at a dining table with a frosted cake and cups. +561223,A young man riding a surfboard on a wave. +447117,"A room with a bed, lamps, tables and pillows. " +121788,A person on skis in the snow pulling on a cord. +20381,A train traveling down tracks next to a building. +151956,A train traveling along train tracks next to another set of tracks. +95692,A person standing next to the water and a umbrella. +111609,A man is sleeping with the covers pulled up high. +372349,A man and woman bathe in a shallow river. +154705,A few different computers are placed on the desk. +95866,A cheesy pizza sitting on top of a table. +348216,Your guess is as good as mine as to what these objects are. +572388,A toy smiley face in the middle of a doughnut. +104669,A white plate served on a multi colored table cloth +539390,an up close picture of mechanic of a bike +60970,a plate of rice and broccoli with meat +215644,A kitchen is shown in midst of repairs. +51277,A bedroom has wooden brown floors made of planks. +229096,a double deckered bus on a city street +485687,a white and black sea bird standing in very shallow water +413950,Two people standing next to each other while flying a kite. +91343,A dog standing in a kitchen with a toy. +242411,A clock tower on top of a store building in a busy city. +251062,The interior of a modern bathroom including glass shower and sinks +301581,A skier skiing down a snowy ski slope. +51355,A counter top with a plate containing a slice of pizza. +165686,"Plates of steak, vegetables, potatoes and bread are on a table." +73453,a little teddy bear stands on a table next to a chocolate dessert +496897,A person walking into a store with four dogs close behind. +555942,A motorcycle that is painted green and parked. +278579,Two men with beards wearing suits on a sunny day. +560440,"A view of a crosswalk that leads into a intersection. +" +294992,"a view inside a bedroom seeing a bed , table stand and an open window" +448236,A guitar and a frisbee laying on a bed. +371503,A young man with red hair kicking a soccer ball. +94751,A parking lot is on the side of the ocean. +38726,A man sitting on a bench next to a slug. +539509,"A ""do not enter"" sign on a suburban road." +530407,Elephants with long tusks greeting each other with their trunks +71965,A green mailbox with graffiti on the side +89047,A snowboarder jumps in the air over a snow embankment. +494887,Two men excited about the very large pieces of pizza they are holding. +241844,A kitchen with white cabinets has a sink and white refrigerator. +196919,Two persons with glasses skiing on snow covered mountain +370399,A group of green vegetables with some radishes and cauliflower. +331024,a blurry photo of a yellow fire hydrant +549255,A girl with running mascara and a bottle of Bacardi in an easy chair +218224,A large white airplane sits on the runway. +131295,An aerial view of a train on train tracks. +85478,There is a polar bear swimming in the water. +399516,A plate topped with three different types of doughnuts. +257791,some two zebras feeding on the dry grass +256003,"A toy train track is set up with two trains, houses, and a tractor." +318908,A white dog sitting on red table next to metal object. +213429,A small bathroom with a stainless steel sink +567383,some fake birds are standing on top of a clock +11696,A dog on top of a person so you cannot see the person. +418696,A street corner with a brown and white building on it. +364757,Two traffic lights showing red on a pole with a camera. +274470,A black dog next to four different boats. +18864,Three giraffes are eating and grooming each other. +273642,a dog is laying with a remote controller +396068,Young woman with long brown hair in very dark grey jump top holding electronic instrument like a remote control. +419386,A woman holding a small child that is trying to pet a cow. +100166,Three small items sit on an outside bench. +219164,A woman tennis player is getting ready to hit a ball. +393423,Two giraffes with necks crossed in the distance. +518109,A man tests a demonstration laptop inside of a store. +83049,Two people sitting and laying on top of a park bench. +41638,a lady that is on some skies on some snow +160351,A young man skating near a residential area +281837,A person holding an umbrella above their head. +443591,A small herd of zebra walking on a lush green landscape. +407274,a girl jumping in the air to catch a frisbee +99810,A boy is eating donut holes while sitting at a dinner table. +163025,This is one man with two different sides to him. +503196,A stop sign with road signs sitting on top of it is displayed. +221571,a dark brown clay pot with a snake design on one side +181524,A gas station and a traffic light. +445574,A baseball player holding a bat standing next to home plate. +493797,A dog sitting on the side of an area where boats are docked in the water. +383601,A toilet with an object hanging off of it. +232085,a couple of elephant walk through a dust area +339368,"A city street scene with a green bus coming up a street, with ocean in the background." +22793,A public bathroom with a bunch of urinals. +531047,Two women and man holding flutes of champagne. +492349,The small bird is perched on the branch of the tree. +277955,A multicolored train passing another set of tracks. +5820,A park bench on the side of a lake. +353408,A couple of elephants washing a baby elephant in a river. +369584,Two pizza pies in take-out boxes on a counter. +481159,A horse standing in a field by a fence. +414709,A man holding a child on top of a skateboard. +239458,A cat peeks its head out of curtains. +49891,A person sitting down and eating some pizza. +546934,A living room with a sofa chair and television. +168797, A man riding a skateboard on to of a wooden bench. +230838,A zebra walking by some antelope in the wild. +215255,A bathroom with a white sink next to a toilet paper roller. +236162,The two cats are laying on the chair together. +353666,A woman in a red dress holding a cell phone. +527248,A large crowd is attending a community fair. +195645,People and their children are gathered outside meeting together. +319432,Man holding two shirts with luggage and window +279305,Give candles light a decorative cake with white frosting. +245997,a close up of a cat laying on top of a luggage bag +516004,An electric train pulling into the train station. +500780,A black and white picture of hills or mountains +269689,A group of men on a field with baseball bats. +256722,A view of a living room with a laptop and a TV in it. +415841,"A kitchen with a refrigerator, sink, drawers and cabinets. " +87194, a polar bear in the water holding a carrot +22563,some purple flowers are in a green vase +550372,Some very big pretty trains at the station. +375219,A group of people riding bicycles next to various kites. +477288,Several men in costume gather together under their umbrellas. +355257,A woman laying in a hospital bed hooded up to machines. +447861,A sandwich is on a plate with a partially eaten orange. +233491,Water is spewing form the ground while people watch on. +396568,An orange and black train with train cars passing trees. +162067,A young person is doing a skateboard trick. +464098,An escalator sitting inside of building with lots of luggage. +52087,A man getting a drink from a water fountain that is a toilet. +473214,A road that has a car driving down it. +323788,A person on a surfboard in the water. +542234,A black bird flying over a body of water. +349485,Fresh fruits and vegetables sit for sale at a store. +441225,A bathroom with a tub and his and her sinks. +310407,A man watching a single engine plane make an approach to land. +420791,Boats docked in a harbor next to tall buildings. +30034,A woman smiling with a cell phone in her hand. +468277,"A counter top, a microwave, a stove, and a fridge." +125085,A baseball player holding a bat on a field. +93959,A white kitchen with marble countertops and stone floors. +463398,A couple of girls walking up the side of a vehicle. +567494,A batter is has hit a ball with his bat. +233090,A boat floating in a harbor of a very large city. +202470,A person with an umbrella near a building. +393288,A group of cars that are driving passed a church. +67956,A blue car making a right turn at an intersection. +209747,A gray and white kitten sitting in a bathroom sink. +494991,"This is a thing that is straightforward and plain. +" +156685,A fresh produce market on a river as a man talks to the woman. +190081,A young woman holding a giant tennis racquet +216636,A viw of a cake with pieces cut off of it. +36773,A man holding a racquet on a tennis court. +435569,a zebra a giraffe and some birds by some water +268400,A young man riding a skateboard down a dark street. +6861,A white toilet bowl with a plunger standing near it +431495,A couple of bottle of alcohol on a table next to glasses. +407039,A baby giraffe drinking milk from it's parent. +157862,A woman is sitting on the toilet in the restroom. +533106,an image of a kid playing with a frisbee +260440,A person on a skateboard up on a ledge. +560797,"NASA men making first, ceremonial pitch at a baseball game." +451275,A lady is holding her hot dog while posing for the camera. +456184,A man riding a skateboard on top of a stone walkway. +198415,Several people are sitting at tables in a gym. +38829,A man riding a bicycle with a boy on the back of it. +90501,A wooden bench sitting in front of a white building. +262466,A bunch of flowers sticking out of a glass vase. +385625,Many small airplanes with propellers parked in a stationary position. +330204,a public transit bus parked with its doors open +75932,a white and red boat with a bunch the people on it +552247,A group of kids standing near a tennis net. +293607,A double oven mounted inside of a yellow wall. +262325,A bowl that has various types of food in it. +246004,A man and a pretty woman sitting together while the woman holds a teddy bear. +146738,A strange brass statue holding a clock on a bureau +127623,A wooden stick figure is surrounded by fruit. +109123,A pizza sitting on top of a metal pan on a stove. +177101,A plane is sitting on the tarmac as the sun rises or sets. +183967,a cat sitting on top of a dining room table set with wine glasses +248334,a boat filled with people going down a river +214646,A man with white shirt and lose tie with messed up hair. +218012,A plate containing several donuts with frosting and powdered sugar. +333665,A group of young people hanging out together.. +504810,A plated sandwich and fried potatoes on a table. +219916,The bathroom is adorned with green rugs and a green shower curtain. +375783,A couple of sheep grazing on the side of a road. +279136,A stop sign has some graffiti on it. +364521,A red helmet is on a yellow toilet in the dirt. +406917,this lady is walking along the shore on a beach +180463,A person in catchers gear standing by a fence. +71283,A small living room is prepared for painting +390795,A side view of a ceiling with rows of windows and a clock. +467249,a brown and black tower with windows and a white clock +538005,A man flying through the air while riding a skateboard. +63617,A scared boy holding a baseball glove out towards a baseball. +481113,A man sleeping on a navy blue pillow with a TV monitor in place of his head. +300655,A man in a yellow shirt stands in a dirt circle. +220621,A fire hydrant sitting in front of a group of flowers. +533032,"An individual is gotten in the quiet of the picture. +" +323288,A large older man sitting on a wooden bench in a park. +222343,a close up of a toilet with a poster on the wall +573947,Two green stoplights that are on a pole. +203214,A man is distantly riding the waves on his surf board. +13145,An orange has been sliced in half and is being displayed. +402000,A woman standing on a beach is surrounded by birds. +184338,A large colorful truck with a with a wooden building on it's back. +437283,A very pretty bowl with some soup in it. +556597,a big jumbo jet sits parked next to another plane +131661,A man standing at a kitchen counter working. +576398,The large winged bird is looking for some prey. +276434,Bride and grooms arms cutting the wedding cake with fruit on top. +391972,A black plate topped with a pile of different foods. +156445,A large passenger jet with it's landing gear down. +519299,a fork sits on a plate with some food on the end of it +223300,A man on a skateboard rides along an edge. +409345,some kids are riding skateboards on a ramp +382406,A woman is walking a dog in the city. +240049,A woman holding a young child in her arms. +75612,Small group with hand held video controllers interacting with out of frame screen. +475466,"A man is standing near some graves, water, and a bus. " +130651,Two benches sit in front of a large store. +151235,Two adult zebras and a baby are in an enclosure. +300322,A brown and white dog standing next to a white horse. +536403,A white plate topped with hot dogs and salad. +208549,A woman standing next to a white cow with long horns. +281424,A cat has fallen asleep on top of a luggage +67868,A park bench submerged in water in a flood. +347695,A blonde woman adjusting a mans neck tie. +212766,Two boxes of pizza sit on a wood table and one of the boxes is closed while the other is open to reveal a whole pizza inside of it. +416104,A group of people sitting under umbrellas drinking beer. +438077,A man standing next to two black cows in a field +93116,Photo of a two bathroom fixtures and a vinyl shower curtain. +270420,A young girl protects herself with an umbrella +532142,A trolley for Adventure World on its track +550601,Two people are in the air as they perform water stunts. +384420,A giraffe stands in a zoo looking at the sky +566038,A bird sits on an outside windowsill overlooking a parking lot. +307511,An old green and brown car with chrome trim. +529907,A train runs down a track past run down buildings. +271785,The elephants and the young children are playing in the river. +270402,Two gray elephants standing next to each other on a road. +160278,Trucks for MARCP on a street with people in shops. +6450,A zebra lying down on the grass eating and resting. +315577,A dog laying down on the floor next to its owner. +281072,A man riding a skateboard down some cement steps. +284097,a young person holding a baseball bat +66711,A coupe of road signs near a downtown area or highway. +331475,Two plates of food sitting on the table +135478,Mac fans enjoying a drink and a joke +435896,A toilet bowl with buttons on the toilet seat +514294,A kitchen with lots of clutter and an open drawer. +542939,A large dog standing next to a man holding a child. +83923,a picture of a vase with flowers coming out of it +470882,A stop sign with words substituted for each of the letters. +196378,Two women in pink and yellow dresses holding a tennis racket. +465835,A heard of five zebras in the plains. +288762,"A square plate of carrots, spinach and more." +176031,A couple are approaching a man sitting down outside of a small shop. +405945,A black and white picture of a building with a neon sign. +59325,An elephant looks at the camera while outside +507826,A man holding a tennis racquet on a tennis court. +250164,A bedroom with a blue bed surrounded by metal stools. +508580,Two giraffe standing next to each other in a field. +331856,A man pulling his pants up on a tennis court. +324492,A colorful clock tower sitting int he middle of a parking lot. +159842,A smiling little girl hugging a teddy bear. +328504,Pair of giraffes standing next to a wooden pole barrier fence. +151330,A man carrying a surf board that looks like it was splattered with paint. +358301,two train on a track near a building +239327,A man on his skateboard is in the air pulling off a trick. +299468,"A young man, formally dressed, is posing. " +289813,A little boy that is sitting in the grass with a suitcase. +226412,The computer technician is repairing several different laptops. +91617,a desk with a monitor and keyboard and mouse +498802,a woman holding a tennis racket by the side of a road. +90058,A couple of zebra standing on top of a lush green field. +475053,"A closeup of a black jacket, white shirt and striped tie." +25143,a collage of photos with people playing frisbee +86755,A couple of people riding a pair of skis down a snow covered slope. +557896,An adorable little girl standing next to an easy bake oven. +9707,A beach scene with chairs and umbrellas and birds in the sky. +493206,A white bowl filled with beef and broccoli soup. +39399,A picnic table on a porch overlooking a body of water. +291038,"A pair of zebras standing in pen, in the grass." +61106,A young boy sitting on the ground next to another boy. +335153,A couple of people standing next to each other. +296176,A man in a field flying an airplane shaped kite. +197658,Cather preparing to catch ball in an empty field +315863,There is a train that is driving on the tracks +111683,Two men standing over a table eating food. +544533,a long line of red white and blue tourist buses +105053,a person skiing down part of a hill in front of some rocks and trees +131516,a stuffed teddy bear scrunched up in a chair +52238,Woman walking on train platform as train filled with passengers prepares to leave. +421069,A pair of scissors and a booklet on the table +131527,The broccoli florets are blue and green in color before cooking. +398222,Many people are gathered together for the dinner party. +380734,People sitting at an outdoor restaurant having lunch +385236,A large white clock tower towering over a small village. +245274,A bathroom with a toilet and a bathtub with a safety rail. +490749,A zebra walking next to an alligator next to a pile of rocks.. +205214,A couple of giraffe standing on top of a grass covered field. +44743,a person jumping in the air with a skateboard +25989,A small black dog playing with a frisbee. +307784,A white sink on a counter in a room. +375914,A yellow end sign sitting on the side of a field. +25551,An ambulance and police cars are stopped at the scene of an accident. +272736,A plane flies high in the middle of a dark sky. +385204,A white cat wearing a helmet made of melon rind. +39671,Pizza on a table with a cup and a fork +492378,A box with four decorated donuts in it. +185030,A cat sleeps on a pile of discarded shoes. +310052,A couple of trains driving past each other near a platform. +550423,Two men in suits look like they are singing +314188,A cat laying on a bed next to a remote control. +461884,A man riding a surfboard on a wave in the ocean. +155466,Two people watch as the man jumps on the skateboard. +216303,A pretty young lady walking across a tennis court. +490225,A large jetliner sitting on top of an airport tarmac. +512394,A metal motorcycle parked on top of a metal grate. +345419,A person riding a surfboard in the ocean +133869,A woman talks on her cell phone on the busy sidewalk. +262565,A man holding a baseball bat while while wearing a baseball uniform. +481710,"A room with a table, chairs, oven and pots." +527885,A Nintendo Wii video game system and controller. +577403,A couple of young boys with skateboards pass a city bus +11655,"Two men, one holding a book, looking off into the distance." +263477,A couple of giraffe standing next to each other on a field. +527447,a mountain that has some skiiers on it +286507,A long red train traveling through snow covered country side. +223874,A sidewalk filled with lots of pedestrian traffic near a traffic light. +494571,there is a red bus that is parked outside +50956,Person with a red and blue umbrella by a small pond. +119192,Baseball player swings his bat at a baseball. +417115,A man that is standing in the street near a bus. +159609,A woman with a tennis racket and a ball in front of her. +467135,A person driving while eating a slice of pizza. +446597,A baseball player taking a swing at an incoming ball. +90239,A small living room with couches and an old tv +161990,Train with four cars traveling through the wooded area. +14450,an image of a train that is going down the tracks +516677,People standing and sitting on snow with skis and mountain +330720,a close up ofa clock with statues of people +522880,a baby elephant with the family at a zoo +340200,A young girl holding a remote control in a living room. +435321,A woman standing in a living room holding a Wii game controller. +147236,a close up of a pair of scissors on a counter top +33990,"A simple, fenced in garden containing several kinds of plants." +1591,A black and white picture of a television set. +28039,A herd of zebra standing next to each other drinking from a river. +394320,There are several people standing near a pizza. +48196,A long yellow bus advertising a musical play +101265,a big bear plays with another bears neck +480421,A bathroom with a walk in shower and a white bath tub. +330699,A person standing on a surfboard in the water. +284282,A blender is sitting next to a printer. +565087,"People lying on their surfboards in the waves, one of the surfboards has a dog on it." +113860,A large boat with people on the back in the water. +577959,An old man is flying his kite in the middle of no where. +377239,A woman holding a cigarette smiling at the camera on a sunny day. +263474,"A bathroom area with a toilet, trashcan and dresser." +524533,"An open roofed, double-decker tour bus displaying a vivid ad across one side enters a downtown intersection." +247428,Small kitten warming up to a shy dog. +14038,A kitchen with hard wood floors and a yellow smiley face balloon. +415016,A young boy holding a baseball bat on a field. +576067,A two layered chocolate cake topped with white flowers. +407524,"A plate holds a good size portion of a cooked, mixed dish that includes broccoli and pasta. " +369751,Parking meters and signage are on the side of the street +17273,a male is typing on a laptop and there is also a paper and a cellphone on the table +156532,The lone sail boat is in the water near a snow covered mountain. +370123,Skewed clock tower standing behind an old misshaped building. +253746,A MAN IN A SHIRT AND TIE SMILING FOR THE CAMERA +434996,A small cat asleep in a pile of stuffed animals. +10705,A group of people socializing at a dinner table in a restaurant. +460837,A woman flying a kite on the beach. +120398,A sandwich with a pickle in a container. +501429,The baby sits on the furniture holding a toothbrush in his mouth. +507551,A boy in a green jersey with a bag on a baseball field +320336,A man carrying a white surfboard across a beach. +13991,A pan filled with meat and vegetables cooking on a stove top. +25286,White and orange flowers in a glass vase. +270505,A man ridding on top of an elephant in a city. +388881,A large white seagull in flight over blue waters. +135410,A bike leaning up to a parking meter. +338531,A bunch of antelopes are seen roaming the plains. +65806,"Man playing with a lighter, over his cellphone, in a local bar." +387539,A hand holding a sandwich in a napkin +112586,A group of people standing around a table with bottles of liquor. +33924,A kitten on a bed in a blanket and a hand holding an electric toothbrush. +364439,"There are trees and benches randomly scattered about in the park, and a green slide as well." +35195,a white seagull is standing alone on the sand +254016,A row of doughnuts being passed through a fryer. +367891,A young boy sitting on a child's toy laptop computer. +296897,The walls in the bedroom will have new wallpaper soon. +452300,A blurry photo of a dog sleeping underneath a chair. +570680,a person that is on a black skateboard +2532,A person standing on top of a ski covered slope. +162429,tree are two woman standing in the rain under a pink umbrella +514241,Two toothbrushes next to each other in front of sign determining which belongs to who +245182,A group of skiers skiing in a line with spectators on the side. +524681,People playing with kites outside in the desert. +508312,A stove that has a light above it. +265725,A baseball player holding a bat on a field. +434486,a woman in a short white skirt reaching for a ball. +15746,A fire hydrant is standing amid some grass. +422017,A man holding a snowboard stands on a hill in the snow while a mountain range is in the distance. +135483,Female soccer teams playing a game of soccer. +191990,2 motorcycles stand next to each other on the street. +280840,a close up of a plate with french fries +563730,An orange lying next to a green utensil. +65270,THERE IS A TOILET THAT IS DECORATED +456236,Some food that is laying on a white plate. +214575,A trolley that has one of its doors open. +365133,a worker working at a asian restaurant handing a customer food +5178,this is a man riding a horse oin the dirt +362240,Two motorcycles parked beside one another in a garage. +12966,"A dog on a leash, relaxing on the ground." +119134,A woman sitting in a chair while holding a young child. +435075,A vase filled with lots of different colored flowers. +46898,A bear is sitting in the grass in front of a rusty chain-link fence +521643,The colorful roses are in a clear glass jar. +343506,a urinal with tiled wall and two pictures of clowns smiling +85423,A tractor trailer truck being loaded with cargo. +534467,A kitchen filled with appliances and an open laptop. +330920,a person is walking with a surfboard along the beach +225093,A train with a green and orange stripe is sitting on the tracks. +539962,A large blue swimming pool sitting next to a hotel surrounded by palm trees. +192904,The tray on the bed has a pastry and two mugs on it. +431140,A toilet and sink side by side in a bathroom and a mirror. +98979,A microwave oven sitting on top of a kitchen counter. +427762,A young man riding a board on top of a wave. +232612,A woman sitting at a table with a plate of food. +190395,a stainless steel fridge with a small display sitting in the corner of the kitchen +475641,A large clock standing over a planted flower bed +88455,See-through Boy skateboards over orange partition at dusk +96226,an image of a woman smiling at the camera and behind her is a giraffe +541924,A woman walking on a city street in a red coat. +216944,A young girl laying on her stomach reading a book. +464366,The action at a professional baseball game played on a field of grass. +575633,A red stop sign next to a road in the middle of nowhere. +288933,Two cakes sitting on a class table near a candle. +443835,A beautiful woman in a red dress sitting on a bench next to a blue train. +171611,A man and a dog on a boat in the water. +193041,A donut covered in white frosting and lots of sprinkles. +278395,A man is on a surfboard and is pulling something in the water. +399628,Two children looking at a steam train engine +142257,Multiple vehicles on a city street near a light. +66508,"A city street with a storm drain, fire hydrant, and manhole cover." +45962,A close up picture of a group of bananas. +4936,A white dish filled with lots of vegetables. +277005,A young man walking across a street at a crosswalk. +190291,A group of people sitting at a table holding different pizzas. +44504,A display of toothbrushes and other dental hygiene products +382088,A big and white horse in a dirt cage. +279256,A woman is riding a horse at a competition. +162280,A small bathroom with focus on the shower curtain. +264805,A person taking a selfie in front of a large mirror. +577862,A giraffe examining the back of another giraffe. +236567,A pair of individual using sails to surf. +400975,A clock is shown on a wood panel. +205134,A slicing up a cake on top of a table with a knife. +138078,Baseballer standing with mitt in fenced field and grass +567536,A baby with blue shirt carrying a shovel next to two birds. +492057,A boy taking a picture of himself in mirror. +280083,A young girl eating a snack with a fork in her classroom +153184,Little birds sitting on the shoulder of a giraffe. +367673,The young girls are playing a game of soccer on the field. +575051,A baseball player is standing up to bat +252091,A woman carrying a container filled with food. +438017,a street light on a corner with a red light on it +338384,A beautiful young lady smiling while talking on a phone. +274455,A man riding a skateboard on top of pavement. +92377,A bird is perched on the arm of a bench. +167964,A lit street lamp at an intersection with a stop sign. +151432,a bird walking on the beach in front of the surf +125242,there are two slices of different pizzas on a paper plate +1180,A woman standing over a sheet cake sitting on top of a table. +256199,a group of men singing at a concert +437893,A very nice looking bed with a laptop on it. +287235,A cop riding on the back of a brown horse down a street. +513115,many small boats in a large body of water +246613,A bathroom with a toilet and a couple towels. +52314,a guy doing a jump with his skateboard +542803,The city bus in en route to Graham Street. +506356,A man holding a snowboard in his right hand. +538163,A man and woman that are around a table. +7795,A narrow hotel room with two made up beds. +575719,A young woman holding a white frisbee in her hands. +442565,The dog is jumping to catch a white Frisbee with it's mouth. +207027,A row of wooden surfboards sitting on a rack on the beach. +494863,A train next to another train next to a car. +153083,Two motorcycles parked in a grassy area next to a tree. +164121,A kitchen with a cluttered counter and wooden cabinets +358399,A man who is playing a video game. +139734,A close up view of some fresh produce. +419379,A wooden table topped with carrot cake donuts. +288860,An elephant walking in a dirt area next to a fence. +299548,A train is pulling into the train station. +181860,A man holds a bat in his hands. +574977,A man holding a baseball bat during a baseball game. +352618,Raw mango and orange and ripe bananas in a bowl +152258,a person riding a skate board in front of a brick structure +44877,a person in a wheel chair swinging a tennis racket +163138,A display filled with glass vases sitting next to each other. +317969,A herd of sheep walking across a road. +429261,A sandwich and some sides sit on a tray on a table. +494122,A stop sign with green ivy growing on it at a corner. +100895,These children are sleeping in the same bed. +20541,A crow approaches a cardboard pizza box on the ground and opens it +242051,A man examines an electronic device standing by a table. +212939,A row full of wooden benches in a cafeteria. +131593,A woman wearing a hat bites into a pastry. +356494,A man riding on a wave runner in the ocean. +536791,Man on a skateboard coming down a brick wall. +486580,A man in the snow in the mountains +417430,A person standing next to some trees taking a picture. +303942,A blue and white street sign next to a white building. +35976,the animal is laying down in the grass +312175,A woman standing outside with her black luggage. +534733,A chair and a couch in a room. +165035,Two draft horses pulling a large sleigh and a dog in front of them +164115,A surfboard sitting next to a shopping cart. +159112,A pizza covered with various toppings and some fruit wedges. +377371,Walnuts are being cut on a wooden cutting board. +518326,Creepy large doll heads laying in giant oversized fake beds. +193122,some people walking trees and many hanging umbrellas +53267,Man is holding up a photograph and smiling +468169,A hitter swings his bat to hit the ball. +340922,A person sitting on a bench with lots of written signs. +426795,A man eating a giant piece of bread. +81656,Old luggage cases. One is brown and one is green. +190095,The surfer is attempting to ride the wave. +310071,a man walking with an umbrella in the sunshine +185360,A cow standing next to a damaged car on a dirty lot. +29697,An empty kitchen of a house during the day. +80522,A child is petting a small horse that he stands beside. +341058,This is an empty table at a restaurant with ships in the background. +310770,A cut in half sandwich sitting on top of a wooden table. +240646,Vase with water and flowers in it sitting on the window sill +100896,Artistic black and white photo of man on a motorcycle. +540187,A motorcycle parked on the side of a road. +463751,Two elephants eating off the ground in a secluded area +71877, a guy doing a skateboard trick along a concrete railing +65008,A woman trying to fly a kite in a lush green field. +371042,Three people playing tennis on a grass court. +301449,A barley wine bottle next to a wine glass with wine. +112988,A half eaten cake with a rabbit drawn on top sits on a dish. +84650,a cat laying on a luggage bag on the ground +453334,a woman flying a kite with a man underneath +566975,A woman on the side of the street selling umbrellas. +580951,A body of water with an elephant in the background. +300246,An elephant with a person on top of it in a street. +179430,A street sign with two streets and two block numbers. +160308,A very large building with a large clock on it . +480133,A formation of airplanes in the distance with colored smoke. +279649,A large passenger jet taking off from a runway. +83013,An elephant is walking around its kept quarters on display. +521404,A man jumping a horse over an obstacle. +66821,A man looking at himself through the mirror. +418637,Four elephants partake in shade underneath a tree. +539355,there is a green clock in the street +27696,A person is eating pizza with a knife and fork. +446703,A teddy bear under some furniture that appears to be turned on it's side. +293166,two people walking on a side walk in front of a building +253386,A dog that is wearing a dog collar smiling +376990,A hand holds a hot dog while a little girl stands near. +495626,An otherwise charming old section of town is nonetheless assaulted by a massive billboard attached to the side of a building. +244550,This is a picture of horse going over a obstacle in a race. +255209,The dog is dwarfed by his human walker. +535617,Two girls surfing on a wave in the ocean. +191444,A bunch of computer equipment and cables all tangled together. +232383,A cat laying on top of a flat screen TV. +53263,A pretty young girl standing next to a boy in front of a birthday cake. +16164,A dog is laying on a dirty bathroom floor. +429505,Group of black chairs sitting underneath a blue umbrella. +274657,A teddy bear is seen looking out the window. +518140,A county building with a large clock on top +48475,A laptop computer on a desk along with some other things. +442877,A meal of chicken topped by a fried egg. +236246,A row of construction cones are lined up behind a fire hydrant. +32364,A pretty young lady flying a kite in the sky. +506628,A big clock on a post sits on the city sidewalk. +281649,a number of animals near one another on a field +327047,A kitchen with lots of bottles and glasses on top of it. +569249,A black cat is sitting on the bench and turning back its head. +556216,The backside of a tennis player who just hit a ball. +574666,A person with knee pads on standing on a skateboard. +268620,Person in profile and sunlight at a barred window. +517306,Two people sitting behind a large pizza on a table. +220176,A man posing for a picture on a bed in the air. +462890,A baby laying on it's back holding a toothbrush. +430287,That tub is usually one found in a nursing home. +216419,A clock on a pole on a sidewalk. +470032,A tropical bird hanging upside down on two wires. +250939,A young person in a motorcycle outfit sitting on a bike preparing to ride. +421902,A group of girls sitting with a white and grey dog. +170194,A single rail kart not moving on the tracks. +554767,"A red, white an blue train next to a train station loading area." +373266,"Medical students are looking at the monitor to check their patient's condition, while their associates wait in anticipation." +561681,A dish consisting of various meats and vegetables +241466,Decorated elephant statue near many bicycles in racks. +318022,A man is brushing his teeth while a piece of tissue sticks out of his ear. +284286,A group of children hanging around a umbrella. +85682,people standing in line on a hill in snow gear +57593,A man riding a wave on top of a surfboard. +124185,"various items from a woman's purse, including change, wallet, planner, music-player, knitting project, and more" +560624,A woman sitting on horse in a river. +570773,A man on some snow skis on the top of a mountain. +534827,a group of young men are riding their motocycles down the street +578655,A kite is flying high above the choppy waves as the surfer cuts through the waves. +491653,"Gloves, cell phone, lip gloss, a hairbrush and other items are on the table." +239171,A large jetliner airplane sitting next to another airplane on a runway. +400976,A living room with a couch sitting under a round mirror. +339344,A bus that is sitting in the street. +122266,The group of people are flying their kites in the field. +475396,A man riding down the side of a snow covered mountain. +3001,A table topped with donuts and a small box of even more donuts. +225919,A man on a bicycle rides with his dog as a passenger in the back. +318426,The station has no passengers waiting for the train. +303922,A couple of plastic containers filled with food. +299442,a white and yellow bus and its driver +469824,A very tall tower has clocks all around the top of it +418699,Two scissors that are interlocked on a table. +467512,Three people pose for a picture using a cell phone. +458079,Train platform with people on it waiting for their train under a clock +329030,A small walkway with a microwave and fridge and a door +131969,There's a yellow fire hydrant with blue trim o ntop +222711,A woman is skiing in a competition alone. +394517,a shower door a sink a mirror and an outlet +196836,"A woman stands wearing a black and white coat over a dark vest, orange shirt and pink tie. " +217393,A young man feeds a cow from his hand. +497392,There are bag on a bed in a hotel room. +94951,A yellow fire hydrant with a wet paint sign. +37728,A little boy holding a brownie sandwich over a plate. +91402,Guy out in the water rides through a wave on his surfboard +555476,A daytime shot of the Fremont East District street in Las Vegas +346207,A cat is laying on a desk full of computers. +524333,A group of people sitting around a table. +280810,A red and white plate topped with a pot pie and broccoli. +321866,A child and an older female in the bathroom with a toothbrush. +99546,A blue cake has an orange bear with a red shirt on top. +522061,A stove on a wall in a small kitchen. +274803,Teddy bear in front of a holly covered object. +435359,A computer is sitting on a desk with books. +165818,A spiral of bananas sitting inside of a large bowl. +163755,a group of people skiing on a hill +263668,A street sign surrounded by a crowd of people. +495117,Two Clydesdale are pulling a single man across a fielded area. +454495,A man on a tennis court in the middle of serving the ball. +550403,A clock that is on the side of a structure. +246589,A man leaning over eating something from a table. +227772,A skateboarder riding down the concrete handrail of stairs +74733,two flatbread pieces covered with different ingredients in between a flight of beers +120632,A group of people skiing around a snow covered slope. +399049,people are skiing down a large snowy mountain +400152,The long metro train is moving along an elevated track. +569565,A yellow dump truck driving past a forest. +286106,a little boy is holding up a cell phone +123069,Two horses in a field with mountains in the background. +171351,A surfer in a wetsuit stands with his surfboard and bicycle at the beach. +45496,Sheep in a forest after the snow has melted +58949,A little girl with a baseball bat is waiting for the pitch. +68166,a person is on some skis going down a hill +259793,"Two men standing outside holding umbrellas, people walking by in the background." +185590,a giraffe walks across the grass looking for food +524822,a living with almost everything in white except for a few decorations +267643,Two people sitting in a room with luggage +351463,A man that is carrying a baseball bat. +306186,A man getting ready to hit a tennis ball with a racket. +101636,There is a car with bicycles on the top of it. +488736,Large four sided clock hangs on the corner of the building. +568115,Some street lights are hanging at an intersection. +469996,People are working their way through busy traffic +560358,A clock is on a pole under a set of windows. +541593,Black and white photo of a clocktower and a bird. +190648,A messy and unmade bed and a red chair +112751,"A beach with waves coming in, and two people in wet suits and carrying surfboards, from the back, walking to the water." +133034,The phone is laying on the desk with all of the other stuff. +360910,A giraffe behind a wire fence in a zoo. +257941,A pastry on a plate next to a cup of coffee and fork by a window. +566756,Little girl stands in the room looking at a cell phone +12666,The traffic in this city is busy this time of day. +396845,Three baseball players getting their picture taken by a man. +193884,A red stop sign sitting on the side of a road. +572075,A cat is drinking water from the toilet bowl +404886,A baby giraffe standing next to a wire fence. +29563,A tennis player at a match prepares to return the ball. +581887,An intersection features a directional sign to local towns. +435324,A school bus that has a great deal of graffiti on it. +430377,a lady that is on some skies on some snow +19132,three women holding up teddy bears taking a picture +114870,A couple of kids leaning up against a brown teddy bear. +349090,A man holding a camera and a very long neck tie. +1757,Two very attractive women enjoy a glass of white wine. +305632,Baseball players are in action as a crowd watches. +28671,A girl making weird face and holding a lighter. +197458,A cat sleeping in a person's lap; the cat is also on this person's laptop. +93175,A kid sitting at a computer wearing headphones. +351683,A batter is waiting for a baseball to come to him. +203294,A tour bus with a cats face painted on the front of it +382758,Scissors on the counter next to radio with spindle on top. +504891,A group of small birds walking on top of a beach. +518725,A sliced sandwich with a pickle on a plate. +443772,We are looking at a long table with people eating pizzas. +432330,Many difference birds in cages on display in an outdoor market area. +87489,a public transit bus on a city street +392928,A bathroom door is opened by a toilet. +331844,A pitcher on the mound prepares to throw the ball. +354242,A young man leaing a cow down a rural country road. +461945,A young man swinging a racquet at a tennis ball. +231508,A baseball player pitching a baseball on a field. +124647,A young boy in a helmet with other boys on skateboards behind him. +136633,An umbrella is opened over a table at an outdoor market. +64824,A group of people stand together and smile. +558073,a cat sitting in a bathtub not looking amused +166768,An elderly woman is holding onto the arm of an elderly man. +552866,A picture of a very long and tall building. +50609,A kitchen that has various stainless steel appliances. +345960,A woman with a nice ass standing in a kitchen preparing food. +285291,A young lady riding skis down a snow covered slope. +357418,"A white container filled with rice, meat and veggies." +163280,A laptop computer sitting on top of a desk. +389255,A row of red and white umbrellas stand above tables in an outdoor eating area. +349926,A group of people on a grass field together playing a game with a frisbee. +468612,A young man tossing a white frisbee. +241638,A young boy riding skis down a slope +527270,A man is sitting on a bench and using his cellphone while another man stands and uses his. +467990,A gray and yellow train traveling along the tracks +23247,A woman looking into a refrigerator filled with food. +297427,A man holding a cheeseburger made out of donuts. +541991,a sheep is standing on the side of a hill +446359,a baby sitting with a birthday cake between his legs +390086,A white plate topped with vegetables and meat. +274629,A red stop sign with a picture of a Time Magazine cover underneath stop. +345993,A man in a suit and top had holds a monacle as two people sitting next to him laugh. +83462,A cluttered desk in an office cubicle near other cubicles. +385098,A group of people standing next to lots of luggage. +281208,A cat that is standing on a laptop. +541478,A man holding a Library card in his left hand. +180662,A young child sitting in front of a bowl of dessert holding up two ice cream bars. +555197,A person is going down the mountain on skis. +346968,Woman with glasses and a police uniform using a mobile phone. +427783,a batter lifting a foot as he stands at home plate +358664,One man rides a skateboard down an empty pool while another man watches. +434410,A young boy working on a wooden bench. +439658,A man is holding a snowboard and standing next to a woman holding skis. +91779,A display of various hot dogs in serving platters. +555357,A herd of cattle grazing on a lush green hillside under storm clouds. +254167,A person holding a large pair of scissors. +403891,A couple of boys playing soccer in the rain. +571550,The bouquet of flowers in the vase is starting to wilt. +479617,"A potato, carrots, cabbage, and piece of meat sitting on a plate." +469529,"A baseball player takes his stance in preparation for a pitch while the catcher and the umpire wait, too." +486369,A trash truck is next to a glass with a straw. +481386,A women who is holding a whisk in the kitchen. +196453,A cardboard cutout of two boys kicking a soccer ball +78565,Sail boats sail over a body of water while people stand near the shoreline. +63804,A woman with a computer is eating a doughnut. +391735,A man kneeling down beside the street and a yellow building. +245754,The shelves of a store are full of stuffed bears. +512467,A tall black and white horse standing on a lush green field. +175443,A Christmas tree with lights and teddy bear +145422,A time lapse photo of a man skiing down a hill. +394559,A woman playing tennis and holding a racquet in her hand. +69928,A statue of an elephant hanging off the side of a building. +299295,Two red and yellow trains parked next to each other. +459884,A man walking across a street near a light pole. +401197,"Numerous individuals are appreciating life and having an incredible time. +" +34657,A group of guys on a couch watching tv +319743,A man in a chair holding a Wii remote. +32645,a child in an orange shirt and a teddy bear sitting on a bench +240918,Pink bike sits on a guard rail by the river. +146190,A person is in the grass holding a frisbee. +536795,Parking meter with a solar panel on top of it. +418907,A young man on a skateboard performing a stunt near a curb. +253227,a large white clock is on a tower +380711,There is a blurry photo of a surfer walking out of the water +315486,Two children are near a sink and one has a red toothbrush. +478906,Three people smile as they pose standing together. +446285,Skateboarder sticks his tongue out while he rides his skateboard down the rail. +33830,a man assisting a woman shearing a sheep with several children watching +137490,A small bird sitting on the handle of a car door. +326479,a group of people stand around in a field with a giant bear +344844,A group of yellow road blocks sitting near a tree. +376093,The teen group is serving pizza and drinks to the younger children. +218855,"A bunch of people are sitting around while a guy plays a video game +" +356337,A man in a white shirt and a woman in a white dress hold a knife over a blue decorated cake. +412753,"A small bathroom with a shower, sink, and two toilets." +504304,"Two people, one being a young girl, are playing tennis. " +386313,a bicycle in a living room with a tv +20070,Man using a hair dryer in a small bathroom +253557,Red and white plane sitting in a green field. +353836,A food truck pulled up next to a person. +382683,A family with two kids on the boat. +33845,A man sitting on a chair in front of a computer. +525600,a number of giraffes near one another +371245,A close up of a zebra standing by a metal feeder. +204502,A wooden table topped with a bottle of alcohol and a glass. +563885,A woman asleep on a sofa holding a stuffed animal. +21232,A white toilet sitting inside of a bath tub. +567686,A keyboard and mouse along with other items on the desk +222781,A group of young women playing a game of frisbee. +202178,"Lines of fruits, vegetables, and grains on a white surface." +561889,Plate of food with broccoli on glass plate with table cloth +121016,A frying pan on the stove containing broccoli. +520787,Two slices of pizza are being served on a plate. +274109,a close up of a plate of food with a sandwich +96633,A brown bear sitting up against a tree on a green grass covered field. +26204,A street filled with lots of traffic next to tall buildings. +472854,Two men on skateboards on the pavement +153717,A man tossing a frisbee on top of a green park. +41574,A man in black shirt doing a trick at a skateboarding park. +22196,An old church with a clock on it is seen here. +75591,Three cats are lieing on a big soft pillow. +536602,Lot of several older flip phones all hanging on wires like flowers. +246672,The mother and the baby elephant are in the water. +170974,A group of people standing around playing video games +401862,PEOPLE WAITING IN LINE TO GET FOOD FROM A FOOD TRUCK +306335,A beautiful young lady holding a tennis racquet on a tennis court. +325874,three giraffes some brown and green grass some bushes and trees +191689,A brow bear walking next to a large rock in a field. +471816,a living room with a tv a couch and a chair +104758,a couple of elephants walking off a path +35857,Elephants swimming in a water hole in the sun +374485,A blue bus driving down a street next to trees. +414884,A toilet is outside on the sidewalk by a door. +55010,an image of plate with food on it +164780,A man pictured with a hotdog in his hands with people passing by. +290618,A female tennis player smiles as she hits the ball. +267942,"Brand new, stainless steel, big, modern, residential refrigerator" +150007,A large jumbo jet is flying above trees. +453001,A woman watching another woman walk with a suitcase on wheels. +387210,A man is standing on a beach and holding a surfboard. +476279,A subway pulls into a quiet subway station. +290659,A calico cat standing on top of an upholstered chair. +441028,A group of people standing on top of a building near a large clock. +257865,A man with a tennis racquet is dressed in white. +256983,"A woman at a baseball game with a Chicago Cubs visor, talking on her cell phone." +527313,A person prepares to eat a large hamburger. +295097,A dog chewing on a object held in a hand. +423358,A man that is holding a cellphone to his face. +499255,A man that is on ski's standing in the snow. +80865,A man stands on a tennis court while holding a tennis racket. +442661,a giraffe stares out of a glass window +303321,A biker with a helmet on is standing behind two motorcycles. +50756,A person riding a wave on a surfboard. +346138,five different pictures of different food items +488979,A herd of cattle standing on a pasture next to green crops. +251370,A man with a blue surfboard rides a very small wave. +107340,A bathroom sink sitting under a large mirror. +25386,A man sitting on a train next to a woman. +2894,A train traveling down train tracks next to trees. +418692,A living room with a person sitting in a chair next to a sliding glass door. +116439,A woman riding in a boat down a river. +560474,a wax head is looking out of a car window +127785,this is a group of giraffes walking together +485710,A skier is turning a corner while going downhill. +452622,Six vases of various sizes are beige and brown. +274460,A group of people on a beach with surf boards. +224104,A man riding on the back of a brown horse down a street. +539143,A train traveling under a rusted bridge on top of tracks. +246626,a guy with a phone in his hand. +469246,A commuter train stops at a train station for passengers. +581357,Skate boarder hang time with young man appearing to streak though the air. +379542,A man riding a skateboard off the side of a ramp. +343073,A mirror and soap dispenser in a bathroom. +407868,Young people are flying kites at a park. +200162,A train traveling under a signal lights on top of tracks. +240800,A fire hydrant in front of a graffitti written brick wall. +240250,A woman sitting down at a table with pizza. +394079,two sandwiches with marinara sauce and vegetables on a long white plate +148403,A clock tower next to a building and trees. +460059,a woman is wearing a yellow jacket and a man in a white shirt +491515,A collection of luggage and bags on a boat. +403864,A black and white train is in an underpass. +241149,A white plate topped with a pie and a bowl of butter. +364993,A hand holding a half of a sandwich next to a piece of dessert. +363902,A boy holding a baseball glove at a baseball game +256337,A full refrigerator and freezer are standing open. +60823,Some cows that are wandering around a lot of pigeons. +41110,A little boy drinking out of a bottle. +72656,Some cute little boys at a little table eating together. +232852,A three pronged fork sits on a white plate. +581157,a cat laying on the floor next to a fish bowl +525083,a view of a kitchen from across the room. +384834,Surfer in artificial surfing environment on river in waves. +31269,three zebras in a field near bushes +28508,One of the three giraffe is eating from a tree. +493905,A male Tennis player is trying to secure the ball. +190227,A steel toilet near a window in a very small bathroom. +246001,A lot of computers that are on a table. +426987,A boat sitting on the side of a white building. +161697,A person holding a donut inside of a plastic bag. +486118,"Some girls who are standing together, two of them have umbrellas." +288229,The large clock was prominently displaying the time. +87574,Flowers are in a vase of water on a tabletop. +113173,A man riding skis while holding two ski poles. +185620,Red brick building painted to look like a smiling face. +99828,A vase filled with white and yellow flowers. +506945,A man holding up a smart phone to his own face. +336718,A living room filled with furniture on top of a wooden floor. +138246,some horses grazing in front of a church +22963,A white toilet in a white tiled bathroom. +236432,A young baseball player throwing out a pitch +22834,A potted vase of fresh wildflowers on a table in front of a rock facade. +96946,A woman is crossing the street with a bouquet of flowers. +28239,"a miniature kitchen with a little fridge, stove and small table and stools" +3488,A teenager in a soccer uniform kicking a soccer ball. +409030,A young man using his smart phone while perched on cement. +120472,A decorative vase with some yellow flowers in it. +575156,A man in a white shirt has his hands on another man's shirt collar. +317188,the girl is using her cell phone to take a selfie. +214184,The black cat is laying on top of books on the shelf. +8196,A cookie sitting on top of a piece of paper. +562084,People are on the beach with buildings in the background. +528411,A teenager in a bathroom looking at a stand alone shower. +91883,two big sea crabs some greens and noodles and two drinks +331604,Kite surfer in the air on top of a red board. +278161,this school bus is yellow and black with dark windows +187424,A white toilet sitting between a car and a truck. +321805,a tower with a clock on top with a sky background +527029,A man covering his eyes next to cases of bananas +286785,A zebra reaching its head into a car to lick a passengers legs. +580388,The man is holding two knives in his hands. +528729,A man talking on a cell phone walking an orange bike across a street. +52527,A large mirror reflecting a bus driving down a street. +235914,Two zebras playing together on a dirt road. +175994,A yellow and rd train parked in a train station. +308735,A large cut pizza on a pan on a table. +15660,there is a man on a surf board in the ocean +185821,A giraffe that is standing in a field. +374162,A bowl full of vegetable soup and a spoon. +185935,a bathroom with a big shower and counter +542147,"A view of a grassy field, with cows in the back." +307936,A small elephant walking across a dry grass field. +574315,A cat resting on a laptop next to a person. +5673,a man outside a clothing shop taking a video +264660,A computer is on a desk in a blue room. +26624,"A couple posing in front of a bush embraces, touches noses, and laughs. " +127455,A fire hydrant next to a bush at a park. +186892,Many sausages or hot dogs cooking on a grill. +201622,The horses are out for a walk on the road. +158333,some peeled oranges sitting in a clear blender +40037,A stone building has a tall clock tower. +330665,two people in a building one is talking on a cell phone. +200862,"A display of produce, root vegetables and a cookbook." +86136,A cat standing over a blue plate with food on top of it. +489611,A young boy holding Nintendo Wii game controllers. +57027,An adult elephant is pictured walking with a baby elephant. +231616,A group of people petting giraffes at a zoo. +371864,Assorted items sit on a desk next to a laptop computer. +364256,A group of people with surfboards on a beach. +407532,A person sitting on top of a wooden bench near a field. +475660,A group of people playing music in front of the capital. +219841,The man runs through the field as he throws the frisbee. +106508,A police officer directing traffic in front of a yellow double deck bus. +233977,A bus is passing through an intersection beside a building. +242301,Three people who are jumping on a bed. +85905,A plate of sprinkled doughnuts with a persons mouth open in the background. +573088,A woman riding a brown horse through a tree covered road. +46869,"A household bathroom with vanity sink, toilet and tub and shower." +228676,A group of people walking up and down a city sidewalk. +408039,A boy in a white shirt and jeans standing in front of people. +295675,"A blue, yellow and red train travels across the tracks near a depot" +552153,A small plane flying over the woods near a mountain +253426,A slice of pizza on a flower plate. +112437,A woman touching a decoration on top of a batman cake. +34847,A fire hydrant stands alone in the middle of the concrete. +191761,A plate of bananas and sliced oranges covered in butterflies. +553965,A man riding a white surfboard on top of a wave. +130921,A large cat sitting on top of a bathroom sink. +245513,A giraffe standing in a field next to a fence. +152808,Some cut vegetables are kept in a tray on the table. +304819,a cat is staring at a television on a table +511674,A MAN WEARING A SHIRT WITH SCISSORS IN HIS HANDS. +523403,A dog sitting on the floor in a room. +144438,Two people with pizzas on a picnic table outdoors. +301595,A shower and a white toilet in a small bathroom. +54007,A young boy holding a baseball bat and a stick. +278095,A man power sliding on a long board +12115,Man in a coat walking with other people in the background. +245145,A snowy day in a colorful forest where leaves have already changed colors. +416534,"A room with table, chair, tv monitor and stand" +85556,A good looking pizza has a piece missing. +370375,A little boy wearing a baseball hat holding a baseball bat. +272599,A man is waiting for the wave he wants to ride to the shore +202199,a teddy bear has a tag around his neck +238228,An old photo of a man playing tennis on a grass court. +570465,Several slices of bread with side salads on a table. +357742,A person on skis sliding up down a path. +569016,A runway has many old-fashioned planes and helicopters. +170813,A man sitting at a park working on a laptop computer. +325368,A red street sign next to a no parking sign. +218365,A metal vase filled with an orange flower. +150986,A close shot of someone holding a small pair of scissors. +407570,a stop sign sits on a street corner +503097,An old and complex clock is built into the side of a building. +88741,A box with pizza in it that has different toppings. +425874,A city street filled with traffic and traffic lights. +113019,A young man sitting in front of a laptop computer. +507686,"A building front at the corner of N. Astor and E. Division St. +" +370207,A newly married couple eating cake with each other. +305206,A professional baseball player in the middle of throwing a pitch. +97922,A picture of dinner of steak and potatoes by a keyboard. +95063,A traffic light with a pedestrian crossing signal. +16025,The grey cat with white feet sits on a televsion set. +492363,A cakeshop sign sitting outside of a cakeshop store. +375015,A baby brown bear standing on top of a rock. +969,A man and a boy are playing catch in a yard. +473731,A picture of a horse that is in some dirt. +412455,Antique black and white photograph of people walking by large stone buildings +313955,Two baseball teams playing a game of baseball near a church. +189371,A man is standing in the sun playing tennis. +536375,Apples in arrangement inside a supermarket for sale. +256220,An overhead view of a city street has an empty lot below. +22324,A glass mug being used a vase for white and yellow flowers. +35705,A woman rests against pillows as she uses a laptop. +333605,A row of parking meters sitting in a park. +195798,A man sitting on a bench holding a blue umbrella with black dots. +272635,A large white bird flying over a rock cliff side. +39106,Four young adults standing and playing a video game. +426053,a bathroom with a toilet and a sink +80194,a tennis ball is resting on a racket outside +221846,A table topped with plates and containers filled with food. +560297,The cat is standing inside the refrigerator while its owner is trying to get it out. +377809,people with their head covered on a motorbike +329217,Cars are following a truck down a residential street. +97659,A traffic light under a cloudy blue sky. +160480,a woman sits in a chair while using a laptop +43433,A dog that is on the back of a motorcycle. +471251,Stripped kitty finds a comfy place in the bathroom for a nap +271897,a couple of kitchen appliances are lined up +36713,A black dog laying on a couch with a floral pattern. +19047,A red light that is on a pole. +36598,A group of four women walking down a street in the rain. +366679,A very attractive woman holding a tennis racquet. +114586,A cheesy pizza sitting on top of a white plate. +274014,a number of people riding skis on a snowy surface +277865,A bathtub sits next a window showing a ferris wheel. +476704,A bus on the street next to the lamp post. +523819,a stop sign a white and green street sign and some trees +1682,A boat sailing on top of a body of water. +477924,An adorable little girl riding skis on the snow. +565198,A little girl holding a blow dryer next to her head. +285961,A giraffe standing next to leaf filled trees. +361521,A man standing next to a small red truck with two american flags sticking out of it. +384512,Close-up of green bananas still on the stalk +327417,A man carrying his snow board beneath a giant snow covered mountain. +26159,A brown bear standing next to a giant rock. +525849,A man and woman sit together at a table. +136464,A line of decorative benches on a boardwalk. +223362,An older woman looking directly into the camera while holding an open pair of scissors in front of her face. +6712,A father throwing a baseball to his child holding a bat. +8211,"Two men talking to each other on a street corner +" +543782,A group of four people riding skis on top of a snow covered slope. +481413,A small child is holding a frisbee while looking at the beach. +390283,Man sitting in an innertube with a hat on the Sidneyville. +163684,A dirty dog holds a stick in its mouth in the winter. +177978,A person on a snowboard went off of a jump. +34452,A man bending over in the woods with a frisbee in each hand. +491090,A man sitting on one of a group of motorcycles. +399665,A bowl of soup with broccoli and brown beans. +509819,A pencil is sitting on a ruler with a pair of scissors. +435692,Kites flying in cloudy sky over the ocean. +441023,a person on a small boat with another boat in the background +402250,Woman on a horse jumping over a pole jump. +124712,Some parents sitting behind a fence watching a baseball game +127050,The tables at the restaurant are very crowded with people. +260967,A cat that is standing up looking out of a window. +70334,Three sheep are standing on a rock of a hill. +56205,A person sits next to their bike while birds walk nearby. +218608,Ants that are in selling oranges on a table. +139555,A man and a woman ride an elephant for the first time. +458663,Modern kitchen with dinning area and all wood flooring. +44767,"A white plate topped with fish, vegetables and a fork." +195897,"A restroom with a toilet basin, toilet paper and a mirror" +61207,A large jetliner flying over a small farm near a forest. +6896,Man posing in front of a pair of giraffes in background. +438737,A grocery store filled with lots of fresh produce. +230245,A freckled girl sitting outside eating a cookie. +201496,People crossing the street at a busy intersection +205054,A grey cat laying down on a wooden desk. +580418,A herd of cattle walking down a street near lush green trees. +352671,A muffin tin filled with lots of muffins. +499252,A woman riding skis on top of a snow covered slope. +65741,A group of flowers growing out of a white clothing button. +284605,A cat under a blanket looking at something. +65227,Girl wearing Girl Scouts uniform holding an object in her hand near a fence. +271986,A freezer with several boxes of a dish in it. +83768,a laptop sitting in a chair next to a big tv +134483,A white toilet with a black seat in a small bathroom. +67156,A man brushing his teeth and taking a self portrait in a mirror. +283940,a puppy sleeping on the floor by a remote control +148280,A parking lot filled with cars parked next to each other. +540669,A cat sitting on a desk next to a window. +545288,A person with some skis in the snow. +65490,Two tall giraffe standing next to each other on a field. +334050,a shelf with a bunch of stuff on it +281754,a kid and a girl are next to each other +294605,Small plate of food with mixed vegetables and meat. +394131,Lufthansa has been a recognizable airline for many years. +531061,two people riding on a motorcycle on a road +157715,A group of zebras standing and grazing in a field. +149196,A pile of stuffed animals hanging from the ceiling of a store. +105879,A man carrying a surfboard on top of the ocean. +388161,A man standing behind a brown horse on top of a field. +159311,A pair of zebra's leaning over eating grass in a field. +156242,Piles of different types of fruit in a grocery store. +247999,Person perfecting their flip on water ski board. +345261,Two giraffe standing on to of a dry grass covered field. +161141,A red bicycle with a basket on front next to a train. +458721,Two Frisbees laying on the ground next to a sports water bottle. +495996,A brown and white cat sitting in a chair. +39798,a bird ready to take off an edge made of cement +39589,A black cat laying next to a box of donuts. +359727,A baseball player holding a bat above home plate. +132288,A man that is on a box with a skateboard. +448868,A line of oil trucks driving down a street +33532,a small bird is standing on a tree outside +348475,An eightteen wheeler rolls down the evergreen tree lined highway toward a snow capped mountain. +521088,A man eating a hot dog on top of a plate. +521613,"A living area with chairs, a sofa and a fireplace." +443224,Female tennis player reaching to hit high ball. +211420,A girl is using her cell phone to take a picture of a fancy cake. +54277,A person is seen using a snowboard on the packed snow. +510585,A man spinning a frisbee on his finger. +20608,A shorn sheep behind a chicken wire fence +451571,A HALD EATEN CORN AND A SANDWICH ON THE PLAE +179346,a man is crossing the street and there is a yellow traffic light +536,"Three women in dresses, with two talking on the phone. " +53315,A boy smiles next to a birthday cake. +313093,A happy motor cyclist in leathers on a sunny day +227523,A red stop sign sitting under two green street signs. +126257,little dude shredding the gnar on flat ground +109539,Sculptures of a group of people with umbrellas. +497826,a bedroom with a big bed and a lot of windows as well +449879,A man sits on a motorcycle holding a cat. +185479,A man rests on the ground with his hand to his head; his Macbook rests in his lap. +566298,Three people brushing their teeth in front of the camera. +487391,Two hot dogs sitting side by side with condiments. +325055,A livestock competition where sheep are being judged. +116061,"Several people who are riding motor scooters, stopped at an intersection." +496093,A wooden bench sitting in a park covered with leaves. +212525,A restroom with focus on the modern sink. +339470,A dog standing on a bed in a room. +393659,A bathroom with two sinks and two mirrors. +118051,An office cubicle with clutter on the desk +145520,"Cluttered white shelf with tootbrush, toothpaste and hairbrush." +128014,A bedroom with open doors to a bathroom. +106722,The large green city bus is driving on a road. +289474,"A start of an outdoor winter sport taking place. +" +527025,People standing outside doorway with ribbon across it. +206806,The man was sitting on a bench near the water. +553326,A photo of an old style white oven. +138856,A large round piece of bread on a metal pan. +572229,A man riding a wave on top of a surfboard. +243464,A couple posing with two giraffes in the background. +270215,A young male is riding his skateboard in his empty pool. +408705,a pepperoni pizza that hasn't been cooked yet +578962,A busy city street filled with cars at night +416184,"The bath room is clean with brown tile, white sink and large mirror." +71004,A man in black hoodie playing with a dog. +411027,a close up of a sandwich in a paper plate +356351,This bathroom is so filthy it probably doesn't work anymore +551336,a woman hold the crust of a pizza +178072,A passenger train is traveling over a bridge. +354019,"the dish is full of very colorful ingredients," +83257,A man standing next to a robot with a camera. +98981,A small herd of cattle in a large field. +526570,A guy walking with a umbrella on a snowy sidewalk. +219135,A baby sitting on top of a bed with a bottle of milk. +473002,A young boy riding a skate board on the walkway of a park. +40102,Two giraffe standing next to each other on a grassy field. +2346,A penny behind three tiny flower vases on a wooden table. +200941,a very large building that has a clock at the top +333321,The sign is telling us where the train station is located. +60080,A PERSON PERFORMING A SKATING STUNT WITH MULTIPLE FRAMES COMBINED. +525373,Two girls eating donuts in a house. +188346,A green fire truck sitting on top of an airport tarmac. +572477,a man with a tennis racket standing on concrete +317019,A herd of zebra walking through a grassy field +447080,A group of people rows a long boat in a lake. +67776,Two yellow pieces of luggage sitting on a sidewalk. +393858,A plane that is flying in the air. +195542,A laptop computer on a desk with a wireless keyboard and mouse. +354736,A group of young people riding on top of a snow covered slope. +452137,Plate of 3 hotdogs covered in onions next to a mug of chocolate milk +223648,Multiple wooden spoons are shown on a table top. +209044,Two young children are playing a video game. +377910,A plate of food sits on a plane table. +401446,A woman wearing a dress and holding an umbrella. +337815,A small kitchen with black and wooden cabinets. +540806,A couple riding a motorcycle down a street. +152019,A man kicks a soccer ball on a soccer field. +425472,A person holding a red umbrella sitting on a pier. +381032,A player runs for the ball during a tennis match. +126123,A man standing next to a bear on a Chain leash. +131612,A girl riding a horse is jumping the log. +428447,A street sign next to a public road in a city. +141158,a person that is skiing across some snow +514915,A large black dog laying on a kitchen floor. +286908,Various dishes of food sit in bowls on a table. +493435,An umbrella lies behind a park bench that a small television is on. +45920,"A great picture of a person in the stillness motion. +" +483065,A man sitting in front of a pizza on a pizza pan. +237254,A bus parked at a bus stop on a city block. +476939,two medical professionals inside of an hospital. +487338,A girl is holding a paper up over her face as a man is shown behind in a mirror talking on a phone. +297085,A cat sitting in front of a flat screen TV. +129571,Four girls pose in front of a bus advertising The 1 Second Film. +114891,A small dog lies on a pillow near a toy banana. +502570,A beautiful young woman hitting a tennis ball with a racquet. +117374,Two cats sitting in the dirt under a tree. +452414,A group of people standing around a table with ripe bananas. +410889,A homemade pizza sitting on a cutting board on a counter. +19079,a hydrant at the street well closed with chains +507273,A woman putting on a lipstick holding a sharp knife. +545734,A kitchen cabinet that has glassware inside of it. +500568,"A tv, chair, side table, and other living room items in the dirt. " +382625,A group of people standing behind a blue table topped with sheet cakes. +478614,a tall brick building with a black and white clock at the top of the building +486864,A man holding a surfboard while standing on a sandy beach. +330931,A giraffe is crossing the road by some shrubbery. +396673,Two large commercial airplanes sitting on the runway. +130773,A little boy is all grins as he is shown a toad sitting on a Frisbee. +295553,A tree filled with lots of unripe bananas. +259005,a person standing on grass holding a large box of pizza +535322,An airport is mainly empty concrete parking with other planes far in the distance. +272015,A park bench in front of a porch in a green grass filled park. +346006,Yellow utility truck parked inside a warehouse by itself. +59973,There is a lovely bathroom with a full-size sunken Jacuzzi. +367329,two zebras are standing next to each other in their pen +340637,a pink hat and a cellphone on some weaved basket +107729,a little boy that has a baseball bat in hand +266977,A man carrying a surfboard across the beach +452122,An airplane flying in the air during the day. +203912,A bike parked on a sidewalk near a street. +431177,A person riding a skateboard on the corner next to a busy street. +476552,Two boats with people preparing food on them. +382670,Three cows are standing on a fishing boat. +279674,a child with a apron on looks at his food +409985,a person siting at a table with a plate of pasta +469279,A large elephant standing on top of a dirt field. +527023,A women doubles team in tennis converse as they are on the court. +348162,A man slicing a cake with a long knife. +263052,a girl is on a surfboard at the beach +228910,A woman wearing a camera strap around her neck. +444888,A tall building with balconies behind a red and white sign. +474430,"The bathroom is small but clean and neat looking, with an immaculate black and white tub / shower." +339413,three plates on a metal tier with pastries on it +275717,A person wearing a vest and tie in a yearbook photo +182895,A parking lot with a line of parking meters. +440359,A black and grey dog in the passengers side of a truck. +113570,Small train with locomotive in front and trees lining trail. +326854,"A room in a private house for loosening up and institutionalizing. +" +11364,A black bear walking across a lush green field. +481285,A lady sitting in booth with a huge pizza in front of her. +548780,Two sexy young women sitting on a metal bench in front of flowers. +470145,A white cow standing next to a bush in grass +165055,A pizza topped with fresh basil is on display. +248242,A young child holding on to a rope and wearing a pair of skis +535591,A mountain towers over a train going down the tracks. +472623,A young man riding a bike on top of a beach. +129637,Horse figurines next to walk on a table. +512240,a black chair a lamp some pictures and a fan +455966,Variety of fresh vegetables displayed on white surface. +335851,"As the horses graze, their friend the dog looks on." +313315,A person that is catching a frisbee in the air. +212647,A person riding on a pretty horse by a big white fence. +371749,A couple of women holding game controllers in their hands. +136644,A group of people sitting at two long tables in room. +11796,A kid that is holding a toothbrush in her hand. +482362,A man sits at a table and takes a drink of his beverage. +99937,Computer desk with two desktops and a television with large mess of wires behind +282698,"A man with glasses, checkered shirt and dotted tie" +568560,Professional athlete on clay court during tennis match. +255769,A crosstown bus is parked on the street. +575637,A man paddles a boat while his passenger relaxes in the back. +40426,There are fruits in a blend and a carton of icecream next to it. +39211,A man sitting at a table with a laptop computer. +67018,Kite surfing is a sport for many ocean goers. +121827,a man that is surfing in the ocean +160556,A young girl sits in front of a computer holding a phone. +309848,"A sandwich with lettuce, avocado, meat, and bread." +91643,Baseball players in striped pants huddle together to talk. +180336,this is a child ready to swing a baseball bat +510852,"A double headed shower, with the curtain open." +463013,A baseball player standing on top of a green field. +162357,A kite is stuck in a bare tree branch. +565353,A man that is sitting down with a laptop. +51598,A black trash bag in a restroom next to a sink. +217554,A small red bird sitting on top of a rear view mirror on the side of a car. +315178,Two elephants that are standing near the water. +547062,A small white and black dog standing next to a busted up ship. +405355,A train sits on a train track against a shrub +341804,A metallic stove top oven sitting in a kitchen. +461860,a man jumps up to swing at a tennis ball with his tennis racket +149780,A woman playing with a toilet seat and putting a normal chair over it. +120905,A red fire hydrant with a green cap with a bird on top of it. +514681,A body of water with boats in city buildings in the background. +539683,A gray cat sitting in a white sink in a bathroom. +380693,A couple of sheep standing on top of snow covered ground. +22432,"A very clean bedroom with two beds, lights and a TV." +351609,a bunch of already peeled oranges grouped together +291490,A cat peeking it's head out of the blankets. +295576,A man holding a box of donuts for eating +312878, a person wearing a backpack and pulling a rolling suitcase behind them while walking on a sidewalk. +120935,A herd of zebra standing near some bushes and rocks. +180792,"A bathroom with a toilet, toilet roll and safety rail." +431996,A man on a white boat in the middle of an ocean. +475407,A man riding on the back of a red motorcycle. +514417,many cars driving on a city street near trees +427666,Three bananas that are sitting next to a laptop and cellphones. +220872,A man standing next to a train going through grand central station +10192,A woman sitting at a table smoking cigarette. +318361,a girl sitting at a kitchen table in a home +25603,A girl with some food and drink at a table. +97006,A woman in a dress is standing on a gravel road holding a suitcase. +531563,A wall mounted black oven next to a counter top. +414882,a fancy parking meter sits on the road next to a black car +145405,Two woman sharing an umbrella as they walk +147418,Two plane flying over a sea and island +515176,a metal box is sitting on the floor +434763,"A white plate with sausage, eggs and other meat." +257060,A pizza being cut on top of a pizza pan. +203370,a city bus sits parked as people walk by it +518968,A large wave carries a brave surfer in the crashing surf. +325211,I really cant see this image very well. +378327,A knife sticking out of the top of a wooden table. +355263,Someone has hung those stuffed Animals from the top of the bridge. +117237,A bird sitting in a field of beautiful purple flowers. +43404,A large clock tower siting next to a tall building. +206290,A street light and other road signs. +447009,Black and white image of a person doing parking meter collections. +415958,A woman looks around a very small kitchen. +380011,"A photograph of an outside with numerous things in the scene. +" +393411,A passenger train that has had some graffiti written on it. +198178,A large elephant standing next to a small elephant. +99741,nice picture of two signs in front of mountains +358103,A lucky bamboo plant in the window of a small bathroom. +111909, man riding on water skis being towed behind a boat. +367804,A little girl standing in the sand with a kite. +34760,A small and near bathroom that's inside someone's house. +182366,Four pans of food sitting on a stove top. +497504,A walkway suspended over a street with a clock mounted to it. +65415,a lady wearing ski equipment in the snow +250282,A group of young children sitting next to each other. +404687,A smiling young man sits in a chair with ties on his shoulder. +219492,THERE IS AN ADULT CAT THAT IS LYING DOWN IN THE SINK +142826,A group of tables and chairs covered by umbrellas. +465566,A red train leaving a train station with man watching. +519193,A kid holding a video game controller in his hand. +471273,A young man attempting to fly a kite on a forest hillside. +42413,a male with a black tie and a boy in a red white and black shirt +389604,An adult and baby elephant standing in a grassy field. +209480,A blue plate with a pile of vegetables on a table. +313924,this is a woman on a court playing tennis +159791,A white refrigerator freezer covered in magnets and pictures. +215207,Various foods are sitting on plates on the table +287846,"A dog holding a ball in its mouth, near the water." +233079,A plane sits outside a room full of chairs. +140565,Multiple airplanes sit parked on the busy runway. +31965,A person on a motorcycle passing a mountain on a road. +537692,A collection of scissors and candles place on a table. +565971,A large long train on a steel track. +173142,Giraffes standing in and around a cave area. +473260,A myriad of stop signs that are black and white and red and white stand clustered together. +515660,A spread of seafood on a large plate with bread on the side. +330237,A display case displays various types of deserts. +7267,A gray pigeon is perched on the edge of an old gutter. +176034,Large wall with an antique finish window and an old clock above it. +378482,A lady wearing an apron in a kitchen. +369404,A young boy holding a game controller +59540,Two Nintendo Wii game controllers sitting next to each other. +493956,A blender filled with two storm troopers hanging off the side. +61034,a couple of computers that are on a counter +138806,this kitchen is very big and has wood cainets +505933,This is an image of an elevated train in the city. +355762,A guy is typing on a laptop computer. +8771,A male skier has fallen in the snow. +311310,A field full of people and a colorful kite. +251404,A very cute boy smiling and holding luggage. +75990,A man riding a brown horse down a city street. +292995,A tray of hot dogs with different toppings on them. +165012,Little girl is outside ready to play with someone. +450711,A youth wearing a yellow hat is rowing a boat down the stream. +502393,A man that is on a tennis court holding a racquet. +17984,A group of cows walking back out of the water +198312,A dining room scene is shown with a table and chairs. +565269,The back end of a bus with a Bus Stop sign in the foreground. +420627,"A stop sign with a sticker that says ""worrying"" fastened to it." +2240,A pile of teddy bears and dolls in a toy box. +370765,Two dogs destroying a brown teddy bear by ripping out it's stuffing. +192670,A little league baseball player hits a ball. +118741,A woman standing on a green field flying a colorful kite. +243104,An egg and vegetable fritter is served with a side of broccoli. +186711,Surfer riding decent sized wave on the river with breaking tide. +152111,A man kiteboarding on top of waves in the ocean. +546685,a couple of men that are standing out side +325078,A small bathroom is decorated in pretty colors. +328397,A snow boarder who has fallen on a snowy hill. +384726,A black bear walks in a forest amidst brush and fallen logs. +336949,A horse rolling around on it's back in a green park. +274835,"Steak sits on a plate with broccoli and mashed potatoes, next to a glass of water." +388316,A city street filled with lots of traffic. +330265,A series of photos showing different restroom items. +573753,A cat with glowing eyes laying on top of a person. +149005,"A small, brown dog holds a green toy in his mouth as he runs in the dirt." +573527,The street signs are clearly posted on the street for people to see. +557672,A woman walking down a street holding an orange umbrella. +276719,Two people are looking at a truck while a dog is being walked. +267411,a close up of three older men standing near one another +456825,The dog is swimming in the water with his Frisbee in his mouth. +215244,A group of people sitting at a table sharing a meal. +191017,A group of people standing on top of a field flying kites. +467315,A vase full of white flowers sitting on a wooden table. +274066,A group of people swimming in the ocean with a surfboard. +555684,A couple of people on a surfboard in the ocean. +243456,Two cats sitting on a sill looking out the window +266443,A woman is standing next to an artsy sculpture. +353562,A family of sheep standing next to each other on a lush green field. +143068,Kites being used by people on a beach. +397309,Four cows of various color grazing in a field. +298540,A patch of grass with lots of bikes parked on it. +227019,A man playing a game of sports with a hard swing baseball +28377,A street with various buildings on each side and a clock tower. +288313,There is plenty of cheese and other types of vegetables on a plate. +460982,Two men in a room and one with a white shirt using his phone. +406665,A man sniffing wine inside of a glass. +550471,An almost empty plate with a lemon slice on it +211882,A person standing in front of a counter at a restaurant. +465996,red traffic lights at an intersection on a well lighted street +374017,A sculpture of a woman is laying in an all-white bed. +489248,A man sitting on a park bench next to a herd of sheep. +563816,Two slices of pizza of different kinds in a box. +355370,A large passenger jet sitting on top of a runway. +223093,A large stone building with a tall clock tower. +4021,A baseball field full of baseball players standing on a field. +224542,A silver truck parked next to a colorful kite. +186788,two legs yellow shoes and a green skateboard +457718,A man is smiling genuinely and brightly at the people at his table. +562101,white snowy mountain with a man stand in skies with a yellow jacket and red black pants +187285,Two men riding surfboards on a wave in the ocean. +277521,A traffic light sitting above a street with lots of traffic. +129544,Large blue and gold clock on the side of the street. +204044,A white stove top oven sitting next to a refrigerator. +291784,A wooden table topped with a microwave and a toaster. +30012,a very larg pizza with some nice toppings on it +450620,It takes a great deal of expertise to handle the sails. +253177,a clock hanging on a wall with pictures of animals around it +413839,A man sitting on top of a bench next to a bird. +428754,A person bending over by the side of a parked car. +187791,A woman with a tie and a bag on the street. +316617,Three friends are playing frisbee golf in the woods. +256844,A white toilet sitting inside of a restroom next to toilet paper. +545390,A woman holding a pizza up in the air. +68080,A tennis play is being watched by a small crowd. +188613,A person on a court with a tennis racket. +27648, A row of white urinals in bathroom below windows. +395890,Couple in dress outfit standing in front of the white table with books on it. +305404,A crowded alley is full of souvenirs and a horse statue. +29045,Snowboarder sitting for a majestic scenic photo +412587,A man and little kids flying kites in a cloudy sky. +411674,A double decker bus on a road next to a cyclist and two people walking. +370953,A woman and a man standing next to a bush bench. +509520,Two people are in front of a television playing games. +370749,An elephant stands in the grass staring out. +564511,A young man is holding a pizza on a cooking sheet. +153896,A man holding a tennis racquet and two tennis balls. +451263,A zebra laying on it's side on a grass covered ground. +222991,An umbrella and rain boots sitting on a rug in a corner. +145728,A white plate topped with a cut in half sandwich. +59652,A black dog catching a frisbee in grassy area. +293907,A bright yellow railroad car on the tracks. +267537,A black and white scene with two couples under umbrellas and rain jackets sitting at a stadium. +51250,A brown horse peering over green bushes under trees. +272391,lots of men in suits and one boy is sitting on some luggage +547155,A couple of zebra standing on top of a grass field. +92861,A hand holding a piece of pizza with more pizza on a plate. +572671,There is a bird that is eating seeds out if the bird feeder +398682,an old antique clock hanging on the wall +515792,A young man in a bathing suit about to catch a Frisbee at the beach +50981,a dining room table with a plate of food next to a wine bottle and some glasses +216894,A picture of a coffee cup and a smart phone on a table. +577857,A metal sink next to a white top oven +419008,a cat is standing next to a picture of a fish +176257,Two men playing a wii with game controllers. +183650,A little girl puts and carrot in her mouth and then puts it in a man's mouth. +499110,Two giraffes eat from a pot attached to a fence. +365687,A man riding a surfboard on top of a wave. +427500,a yellow and brown fire hydrant on the side of the road +162043,A bus is seen coming up to a bus stop. +340930,Closeup of a cup holding scissors and other pens and pencils. +525202,A large pizza sitting on a pizza pan in the middle of a table. +184703,A man walking down a street holding an umbrella. +156756,A cowboy riding a horse beside a herd of cattle. +180800,Plastic container filled with oranges sitting on a green shelf. +352011,A man sitting in a chair with his nipples hanging out. +30156,A large cat laying next to a large orange pumpkin. +40414,A kitchen filled with furniture and a stove top oven. +68973,The snow is very crowded with snow skiers. +449114,A tennis player jumps and hits a ball. +454956,Two bears can be seen grazing in the grass at the side of the road. +578848,A van is traveling through a green light of an intersection. +497021,Yellow 'DIP' sign along a small town street. +32285,A white toilet sitting next to a toilet paper roller. +466583,A bathroom with a standing shower next to a sink and mirror. +393282,Two giraffes standing around in the middle of a field. +71357,a big train passes next to a side walk +329373,A group of young men standing around an open box of pizza. +52661,Traffic on a dock next to a moored sailing ship. +462805,"Two people, one on skis and one on a snowboard are standing in snow." +541635,A hot dog in a paper container of some sort. +187901,A large clock towers next to a tall building. +42893,Airplanes set to take off at a city airport +272961,A large horse studding next to a baby horse. +252771,A couple of laptop computers sitting on top of a table. +185599,Many apples and oranges are stacked near to each other. +124429,A display of flowering bushes in pots on a backyard patio. +486114,A room filled with furniture and beautiful decor. +95191,The view from a platform of the surrounding trains and tracks. +47055,A bed sitting inside of a room next to a window. +128978,A young man is sitting on his blue motorcycle. +403145,The bathtub and sink of a bathroom with a large mirror. +574074,a close up of three birds in a tree branch +464787,These suitcases are three piece matching set. +64796,A decorative container with mini roses is sitting on a pedestal. +95336,A child is shown eating a scoop of yogurt. +461976,A train traveling down train tracks in a rural area. +403122,Female tennis player preparing to serve the ball +398246,A picture of some people walking across the street. +84984,a couple of people on surf boards ride in the water +9050,"The dinner plate has asparagus, carrots and some kind of meat." +533156,Cat sitting on chair in front of desk with open laptop +17379,a flat screen TV embedded in a restroom mirror. +18193,A woman in green sweater eating a hotdog by campfire. +172491,One of the two elephants is lifting a plastic barrel with it's trunk. +25529,A plate of food with a sandwich and fries. +29187,A man riding a horse drawn carriage on a race track. +575174,A kid is standing on a tennis court with a racket. +171757,a couple of people that are standing up in a room +387990,A person holding piece of cardboard next to desk with speakers. +201498,A snowboader falling face first into the snow. +501031,A group of farmers get ready to load their horses with supplies. +189744,a building with a domino's pizza on the bottom of it +457249,A woman tossing a frisbee while wearing a bikini top. +119081,A cat sitting on a table in front of a vase of flowers. +220538,Two pizzas that are sitting on a table. +328403,A couple of umbrellas on top of a sandy beach. +405836,Series of small portions of food being put into a small oven. +8853,A man riding skis down a snow covered slope. +328805,this bathroom has a black table and a white animal house +316968,A white horse drawing a carriage through a street. +440763,"A child, wearing a cat costume and umbrella, stands before a brick building." +384461,a woman is sitting against a wall with a case +470909,A clock mounted to the side of a wall over desk. +462584,A train with bright lights on it under utility wires. +145742,A photo of chalk writing on the sidewalk next to a white fire hydrant. +317595,three guys sitting down eating sandwiches and smiling +236234,A cat up on a desk drinking milk from a glass. +109653,A kite with a long tail flying in the air +495681,A kitchen sink sitting underneath a large wooden window. +324266,The bathroom is clean for the guests to use. +465588,A surfer hitting a wave in the middle of the ocean. +6593, A man jumping after hitting a ball while playing tennis. +59295,An elephant at a zoo standing before a wire fence. +297736,Debris on a corner outside of a building near a street sign. +148792,A line of wagons with vendors selling fruit. +579548,A pair of computer monitors a keyboard and a laptop. +467092,A bus riding pass a tower with a crane attached to it. +183014,A cup of food in a persons hand. +77689,A man is taking a picture in a rear view mirror. +421875,Modern espresso machine on counter in residential kitchen. +284015,a person wearing a a shirt and tie +22929,A sepia toned photo of a baby snuggling with a giant teddy bear. +117535,A bathroom with towels draped of the curtain rod +24530,A close up view of a giraffe in front of a palm tree. +493774,The street sign is standing on the corner. +16046,A group of elephants walking across a grass covered field. +338419,A teddy bear with a red bow around its neck. +369849,Three horse grazing on grass near a street sign. +347630,A large elephant walking across a field of grass. +545155,The child riding on the horse looks unsure. +107650,People are sitting on the top of a blue trailer. +71920,A woman holding a purple umbrella near flowers. +142000,a couple of ssigns on a pole by a building +350874,A man on a motorbike with a side car. +318039,Giraffes leaning down to scratch faces in their zoo enclosure +396385,A man sitting at a table with two waffles on it. +395701,A room that has a small television next to a red chair. +33626,A fan is on the floor next to the nightstand beside a bed. +188421,A toilet next to a sink inside of a bathroom. +150788,a close up of a bunch of bananas and a container of garlic +531044,A giraffe standing near trees most with green leaves and one dead. +222261,Adult and children Elephants walking together across the plains. +17029,a dog jumping to catch a frisbee in a yard +94319,A man rides a black motorcycle around a curve. +27371,A woman dragging a suitcase on wheels down a cobble stone sidewalk. +104119,A large chicken walking through a grass covered landscape. +517548,A charming country bathroom includes a hotel style wall hung blowdryer. +116149,some woman standing on stage doing a dance with umbrellas +573882,A woman with headphones is playing the Wii. +562851,A bird is walking toward the camera beside a fence post. +97131,A car parked by a parking meter in front of a building. +27585,An ornate vintage clock with several faces. +13721,A girl with blue socks sitting on a blue bench. +168129,an elephant stading behind some tall grasses and staring at the camera +441008,A man is holding a surfboard at the beach +394050,A man is holding several throwing discs with other people standing or sitting around. +565326,YOUNG CHILD HOLDING A BABY HAIRBRUSH TO HER MOUTH +418106,A man stands in front of an airport with many airliners on it. +278506,A crowded beach with people playing frisbee +328661,A man flying a fan plane neck to flock of ducks. +227230,"A man windsurfing on a board and making a sign with one of his hands, while holding onto a sail with the other hand." +533166,"A modern kitchen with a fridge, island counter, hardwood floor, and deco ceiling artwork." +418565,Dozens of opened umbrellas hanging above in multicolors +30347,Two men are using laptops and a child is walking around. +345288,A man jumping in the air on a snowboard. +414236,A cup of coffee sitting next to a sandwich & chips. +196413,A parking meter sitting on the side of a sidewalk. +224391,Lone elephant walking on dirt path near bushy area. +550597,A white sink sitting next to a toilet near a tub. +106575,a pregnant woman standing holding on a white fridge +448263,A baseball player kneeling to speak to a child +144122,A small airplane flying through a blue sky. +534894,A tower with a clock on top on a concrete lot. +564659,Three pieces of broccoli on and around a small chair. +466567,A tree with a donut as an ornament +510642,A table filled with sandwiches and trays of fruit. +510755,A row of motorcycles parked next to each other on a lush green field. +251785,A white semi truck traveling down a road. +117792,A red fire hydrant in front of a window with large windows. +90351,A man standing near a fire hydrant next to a city street. +548223,A woman taking a selfie while brushing her teeth with a tooth brush. +171190,a large group of people are gathered around the table +189387,A very tall clock tower towering over a city. +533288,A man in shirt with napkin tucked in at his neck. +148188,A LOT OF PEOPLE ARE RIDING ON THE ELEPHANT +118447,A man standing next to a woman on a tennis court. +448205,A renovated propeller airplane flying in a blue sky +108212,"A kitchen with a stove, table, cabinets, and other items " +272615,"Bowls of fresh salad, soup, pudding and rice" +575209,"Two giraffes standing up next to one another, in between two tree and in the grass." +285418,A gray and white cat happily hugging a shoe. +363039,this is a bird flying in the sky with its wings +73256,A red bus driving in front of a double decker bus. +440443,a blue and white building and two red clocks +278375,a yellow fire hydrant on the corner of a street +281628,A man wearing a short skirt and tighty whities. +187857,A man riding on the back of a motorcycle down a street. +27353,Closeup of a white plate with a maggot in a piece of broccoli. +277749,A group of cows that are standing in the grass. +532209,A man in a blue wetsuit surfing on a wave. +234470,a big kitchen with an island and track lighting +578454,A bathroom with tile and a shower is shown. +197263,A man wearing a shirt and tie with long hair. +135117,A set of three wall mounted urinals with pictures of men on top of them. +276552,A man cutting food with a knife and a fork +20781,A couple of young men standing next to each other. +281759,A group of young women holding umbrellas while walking down a street. +31650,A boy on a skateboard doing a jump at a skate park +378506,Some backpacks and luggage are on the floor. +242869,A fish-eye view of a stop sigh in front of a trailer +161308,"Here is an image of an outside city with a clock. +" +507249,Two bikes parked next to each other on a bike rack. +568238,Two dogs playing with a disc in the grass. +281220,Three wall clocks showing different time and a lady +516805,A table full of items and on a sunny day. +100343,A stuffed teddy bear is sitting with the bananas +13414,a close up of a street parking meter +157938,A tennis player is swinging at a volley during a match. +202825,A woman in yellow shirt and white shorts holding a pole. +86334,The large green train is approaching a platform. +322654,there are people sitting on the ground painting the street +352900,A plate of noodles and broccoli are shown. +502279,A wire fence with a stop sign and trailer in the background. +296524,A man adjusting his tie while having a blurry hand. +115930,A group of men standing in front of a bar having a conversation. +347535,An old black and white photo of a city street with a large cathedral on the right hand side. +565391,A jeep with a dead bird on the windshield. +286858,A close up of a Winnie the Pooh teddy bear. +473121,A person leaning hard into a turn on a downhill ski course. +382399,A giraffe walking through a green grass covered field. +70685,a group of elephants near a body of water +377427,A man at a table with several dishes of food. +149014,A person surfing on snow between the snow clad trees. +189772,the Bike is parked next to a fence +248847,Various foods are sitting on a plate ready to eat. +564317,A street sign for Jack Kerouac (Adler) Road +161227,A laptop on the arm of a chair +18874,A group of giraffes inside of an enclosure. +383185,Several condiments on a tray in a kitchen. +343662,"A picture so blurry it is hurting my eyes, a cat on a bed." +452881,A table topped with a wooden block and an open book. +408542,A closeup of a zebra eating fresh green grass. +433984,a man that has a racket in his hand +1577,A watery glass jar full of blooming flowers +568623,A man sitting on a large bench talking on a cell phone. +509786,A man holding a tennis racquet on a tennis court. +223342,A orange tractor sitting on top of a lush green field. +36478,The view from the inside of a jetliner looking out over the earth. +537280,A young girl walking in the rain under an umbrella with boots and a raincoat. +241559,Large signs are suspended from the buildings above the city street. +491921,A couple of men standing on top of a field. +77548,An elephant walking down the street with a saddle +16521,Two women are on a set of brown stairs. +399543,Two men are playing tennis on a tennis court. +64264,a keyboard and a screen on use by a hand +45016,A white toilet sitting on top of a bathroom floor. +473973,A person surfing near a very high pier. +260686,There is a television that is on and signs nearby. +536110,A row of birds are flying against a blue sky. +309638,Guy jumping with his skateboard doing tricks on the sidewalk +549399,A purple motorcycle parked in front of a red brick building. +476215,A man standing behind two brown horses on a dirt field. +26697,A woman holding a toothbrush looking through a doorway. +325720,A truck towing large equipment on its flatbed down a road. +279259,Man in shorts running with a necktie on top +72075,A couple of kids that are on a baseball field. +12326,"This kitchen contains a stove with an exhaust hood, many cabinets, and a microwave." +528011,A zebra walking along a dirt road over a dry grass field. +197350,A woman in a red dress playing a game of tennis. +369081,A group of horses are grazing in the field. +354241,A girl dressed in pink clothing standing next to a cow. +29341,A white bull is standing still in a clearing. +484674,a cream colored refrigerator and a table and chairs +375909,A living room and kitchen with a mattress in the hall. +281455,A flock of small birds flying in the sky over the water. +489304,A baggage handler moves some luggage towards its destination. +557501,A bathroom is very colorful with blue yellow and red. +526394,A small piece of nutty cake on a plate +529507,A glass shower stall in a white bathroom with a window +150843,A man putting a pan inside of an oven with his bare hand. +192970,Giraffe grazing on a lush green grass covered field. +513993,A book shelf filled with lots of books sitting next to a microwave. +189775,Competior preparing to return volley during tennis match. +328786,Group park benches light up any Park. +229317,Two people on motorcycles are at an intersection in a rural area. +217989,A kitchen with a center island next to a refrigerator freezer. +466085,A bathroom that has been gutted with the shower basin the only thing left. +411184,A very large bridge spanning over the width of a river. +224742,A view of a couple types of toilet items. +329433,A table with plates of food that have been served. +129786,A long white couch in front of a wooden table. +249325,A man sitting on a bench next to pigeons holding a news paper. +139623,A passenger train stopped at a stop next to a grassy field. +185201,A butcher cutting up the corpse of a dead animal. +439179,A skier in the snow in front of the water. +509590,a little kid is holding an umbrella outside +269949,A very tall cathedral towering over a city. +253757,A pitcher standing on the pitcher's mound and throwing a baseball. +166255,A group of men and women riding horses in the dark. +487282,a girl wearing a white bonnet holding a black luggage bag +316526,A white and green bus driving down a street. +421865,A group of kites being flown at the beach. +374848,A group of people walking on a beach next to the ocean. +316254,a woman in a red top holding something with a white and red background +439738,A green vase with leafy plants poking out the top +276437,a long double decker passenger train going along a track +245094,A California king sized bed sits under a white canopy. +447736,A man eating a pink frosted sprinkle filled doughnut. +507037,a gathering outside on the lawn of city hall +95062,A pizza and grapes sit on a tray next to a drink. +442582,A yellow and white bus driving down a street. +494218,A woman cutting up an apple on top of a cutting board. +116881,A woman sitting on a hospital bed is smiling for a photograph. +568040,an image of two elephants doing down the grass +546126,A crowded subway train with standing room only available. +315219,A phone mounted to a wall next to a doorway. +264506,a large blue and white house on a hill near cattle pastures +572907,A man standing on a tennis court holding a racquet. +230119,A television that is sitting on the side of a wall. +523244,A man kneeling on top of a tennis court with a racquet. +145591,THERE IS A CLOCK THAT IS ON DISPLAY IN THE CITY +457060,A close up of a giraffe's face standing in front of a tree and another giraffe. +524536,a man wearing a red tie holding it up to show people. +404229,A stop sign with an oriental symbol above the English version. +441458,Dog trying to pick up an object with its mouth underneath a bench. +102577,A man kiteboarding over the top of the ocean. +311081,A bathroom is adorned with beige and white tiles. +252573,An orange tabby cat lies on the carpet and checks out a cell phone +133867,A parade on the street with a person riding an elephant. +385103,"A room filled with different types of items all around. +" +418288,The front of a motor cycle against a black and white tiled floor. +458846,A bunch of birds sitting on a traffic light. +520427,a man stands next to a bunch of parked bike +459400,A person lying down by an open toilet! +136988,A group of people standing and sitting around a living room. +109488,A case with a pink and green pattern. +370900,A group of white teddy bears on a white table. +434786,an image of a man with a cigarette in his mouth +91280,A clock with statues on either side of it under a white sky. +409784,a female tennis player in a blue dress playing tennis +416745,A white toilet sitting in a bathroom next to a sink. +243600,A group of smiling young children sit at a table in the library. +64822,The clock on the building is in the shape of a coffee cup. +501494,A closed white case sitting on the ground +409088,A paper sitting on top of a white plate near a small bird. +152618,a red and white sign a fence grass and a building +7386,a small motor bike outside of the garage +127068,A man holds a surfboard at the beach. +363881, A city bus parked on a very steep hill +559303,A man is lounging on a motorcycle while parked alongside the road. +280184,A man doing a tail slide on a rail +149052,Two small airplanes parked on a lush green field. +67881,A small boy is swinging a baseball bat a tee. +483374,A man and a woman looking at cell phones. +532003,Woman holding up a red frisbee in front of a group op people. +424819,"A woman posing for a pic in front of a mountain, near the water." +205102,A bike parked next to a wall next to a river. +528977,"Street signs, graffiti, old buildings and a bridge." +170729,A young lady sitting at a table covered in food. +497484,One glazed raised donut in a white box. +272970,A large blue object that has stuffed animals inside of it. +13943,A man driving a horse drawn wagon next to a red bus. +220526,A herd of zebra standing next to each other on a field. +280779,A young man riding skis across a snow covered slope. +314388,Sleeping teddy bear with nightcap on a work table with tools and cords. +437351,A woman in a hat sitting next to luggage. +338600,Man with tennis racket on green turf in front of a goal +44950,The mirror is reflecting a dog on the bed. +310906,A train is traveling across a bridge over a lake. +570515,a male in a gray shirt is moving a pot in the oven +120986,A white church with a giant clock tower mounted to it's sides. +572899,Two towel shaped elephants on a bed with pillows. +99567,"Two red buses, headed to the same place, are right next to each other on the road." +75055,A woman naked laying in bed with a cat. +414249,A empty park bench that is near some flowers. +539777,"Different fruits are being served on a long, white plate." +191981,A person skate boarding on the top of a half pipe. +570045,An arrow on the sign points the way to the Oil City Restaurant drive thru window. +199849,"Zebras standing on a grass plain, with other animals in the background." +317325,A white plate topped with a worm on slices of pizza. +83565,a close up of a bowl of fruits and vegetables +222195,A cay laying on top of a blue couch arm next to a wall. +482574,Man displaying local fruit and bananas for sale +573395,a group of surfers are riding waves in the ocean +268435,A cross country skier resting with his ski poles in the snow. +214727,A man standing in a bathroom in front of a mirror. +254045,A black and white cat sitting on top of a toilet seat. +112915,some gray walls a toilet a dartboard and some pictures +531020,A woman standing next to a man on top of a ski slope. +410633,"A plate featuring steak with sauce, broccoli, and mushrooms." +757,A herd of elephants walking through a lake filled with water. +495020,A couple of boats traveling down a river near a forest. +200252,Two green shoes lined up on a bed. +48684,A group of beautiful women sitting around a wooden table. +117036,A zebra walks in his enclosure in a zoo. +493720,A clock on the side of a building in a city +500944,A young man is performing stunts while skidding across the water. +214853,A chili cheese dog sitting next to chili cheese fries. +579602,Three kites in the air with many umbrellas on a beach +370678,a green and blue parking meter siting on the sidewalk +505809,a tennis player is surrounded by a bunch of people +531569,A white toilet sitting up against a wall under a window. +92339,A small formation of mounted guards practicing a routine. +480747,a young male riding an ocean wave on a surfboard +65430,A spotted dog is chasing another dog outside +369998,A stuffed toy dog sits and looks upright. +410849,A piece of luggage painted with the Eiffel tower on the side of it. +25517,A lone surfer riding a very nice wave. +15517,Buses parked on a road outside a large bus station. +69863,A vase sitting on top of a table filled with flowers. +414170,Several skiers glide down a hilly landscape covered in snow. +574425,Two old fashioned buses parked on the side of the road. +291048,A women who is holding the door handle to a truck. +551533,Cows grazing in a fenced-off grassy area. +303956,A man flying through the air riding a skateboard. +133087,Night time view of empty streets in commercial district. +535563,Birthday cake with bird and congratulatory message for sports team. +24610,A disorderly living area is free from decorative elements. +221307,"The bathroom has a sink, and see through shower." +96769,a couple of teddy bears that has a wine bottle near by +147132,The two surfers are read to take on the waves. +114235,A train with smoke coming into the train depot +504452,A man riding a bike down a street next to a giant panting. +154425,A small boy trying to fly a small kite +550980,There are several people standing at the end of a train going to Rockaway. +541071,A man on a beach flying a kite +339202,A man moves his video game remotes quickly as he plays a game. +470779,a group of people on skis in the snow +380828,A man admiring a dog on a bench made of books. +30504,A person riding skis down a snow covered slope. +22626,A view of a snowboarder's own legs and feet with a snowy hillside behind. +168367,A person holding a Nintendo Wii Remote Controller. +536166,A cowboy riding a horse rustles up some cattle as other horses look on. +323760,A toilet is shown in a bare room. +501538,A woman posing with a bunch of bananas in Sri Lanka. +243212,A young child is standing in the grass with a frisbee +276076,Paved road with vehicles in one lane and a flock of sheep and goats in the other. +115579,A man standing in front of a picture of a building in plaid shorts. +477483,A woman brushing her teeth in front of a bathroom mirror. +478922,A plate filled with eggs and sausage next to a cappuccino. +85097,A train parked in front of a train station. +351667,Two rectangular trays of pizza with topping on them +107751,Four zebras facing the same way drinking from a water hole. +375128,A fire hydrant is in the dark by a sidewalk. +503470,A man and a woman laying in bed on top of each other. +126941,A toilet room in the process of being renovated +167818,The desk by the window has two laptops and a keyboard on it. +519039,A white dump truck is going around a corner. +110482,The line of people are riding horses through the plains. +117308,Pairs of scissor sitting on top of a bed with a sewing kit. +113914,a kid poses on a side walk as a baseball player +514598,A woman posing for a picture with a surfboard. +124599,A couple of lawn chairs sitting on top of a beach under an umbrella. +354088,An old bus is parked in front of a market. +291830,The living room has a long grey couch and a rug under the coffee table. +533206,A sandwich on top of a metal tray next to a bowl of dipping sauce. +121196,A group of men standing on a street corner next to a stop sign. +507979,A table topped with lots of glasses of wine. +581569,A man flying through the air while riding a skateboard. +233405,Boy in swimsuit on a beach throwing a frisbee. +44559,A person riding skis through a forest covered in snow. +497099,A room filled with bathroom sinks and bath tubs. +459,A man holding a camera up over his left shoulder. +9679,A suitcase bag packed with roller skates hanging from the top and back of it. +172616,Two women and a child are sitting on a red bench. +38252,A picture of an Apple computer with a black background. +555131,a couple of people that are standing on a baseball diamond +325343,A young man is skateboarding on a low wall. +471991,An elaborate church with tiled floors and stained glass. +172330,A cat in between two cars in a parking lot. +563625,A woman is lying beside her child on the ground. +26363,A group of three elephants standing next to each other. +282231,A young man in a black tee holding a racquet +330522,A parking voucher machine on a snow-covered sidewalk. +5723,A pack of horses stand in a field +274052,A bird that has landed on top of another bird +42144,a traffic light with all green lights over a street. +108129,A tree in bloom with pink flowers near a rural area. +176863,The two zebra are walking in a single file line. +175718,A pizza sitting on top of a wooden cutting board. +334062,a kitten on a couch with aluminum foil on the edges of the cushions +65383,A football game is going on in a park. +235933,A woman in a bikini standing on a beach next to the ocean. +217397,The man uses his cell phone near a plate of food. +559838,Some raw looking meat is with cooked broccoli. +273132,An elderly woman sitting on the bench resting. +326781,A white toilet and a sink in a room. +298190,a sign that is hanging on a white wall +97156,A black cat sits contentedly in a suitcase. +553141,A man is on his own while skiing. +67213,A lot of people that are looking at a pool. +35328,Stairs are leading down into the streets where there is a bus. +15335,A group of people sitting at a table with food. +125617,This plastic container has a piece of mean in it along with some broccoli and mushrooms. +306466,A TV on top of a wooden dresser next to a desk. +383706,A doughnut with sprinkles is sitting on a piece of paper. +209347,A woman sitting on a train while holding a smart device. +127182,A kitchen filled with metal appliances and a window. +61520,A street going through a city with tall buildings. +400981,a young tennis player serving a tennis ball +74059,An old building with a giant clock at the top +70067,Made up clock reading too late on a window showing snow. +478586,A cat on land staring at a swan in the water. +421471,We are looking at a small airline toilet. +438046,A large white bed in a red room +564023,A public restroom with a toilet in the floor. +46889,a small boy is chewing on something yellow +488563,A cat is laying on a laptop on a bed +274418,A woman holding a polka dot umbrella looking inside a shop. +306638,A bowl filled with food sitting next to two pieces of bread. +228335,The refrigerator is cluttered with several different materials. +38858,A woman in a white dress marrying a man in front of a field. +125539,A blue truck with tarp covered trailer drives down the road. +539838,A boat sitting on a beach next to an ocean. +173932,A blender and other items on a counter. +512334,An airplane sitting in front of a group of people. +235252,A herd of giraffe walking along a grassy tree covered plain. +264282,A man in black jacket cross country skiing in woods. +346140,Woman holding up a small boy on a snow trail. +21465,A dirty table has incense burners on it. +243386,A shower equipped for a physically challenged person with a shower chair +97017,a clean bathroom with tiled walls and a sink +184945,a row of parked bicycles and motor cycles +352007,A man in a top hat steering a horse-drawn carriage through the snow. +113440,A knife being used to cut a dessert on a plate +412798,Tennis player and blue-and-white outfit holding a racket. +566135,An up close picture of a giraffe and his face and long neck that is reaching over a wooden fence. +155644,A young woman sits on a bench with shopping bags. +503101,A man using a flip phone while sitting beside a couple. +221165,A yellow truck driving down a curvy road. +111179,A church steeple that has a clock on it +8688,A wooden frame for a bed sitting next to a mattress. +168714,a green bus is driving down the street +24924,A bathroom scene with a bathtub and a sink. +491168,A man riding a snowboard down a snow covered slope. +442536,Two zebras that are standing in the grass. +108528,This is an image of a man flying a kite. +133995,Traffic signal on wall attached to cement structure. +202436,A sleek bedroom has gray walls and a white and orange bed. +466090,a female tennis player in a black dress and fans +304220,A polar bear sleeping on a rock. +562856,"A pastry meal sitting on a trey next to a bottle of orange soda," +40821,A selfie taken of a person with a cell phone laying over one eye. +315722,a pizza with lots of ingredients on a table in a room lit by dark lighting +377814,"A box of six pastries containing two chocolate doughnuts, one strawberry, one glaze, and two glazed crullers." +114352,A man holding a white frisbee while standing on a field. +533678,A herd of giraffe standing on top of a dry grass field. +579226,A large clock on the side of a building has biblical pictures. +427239,There's a kitchen with toaster sitting on the counter between the oven and stove +242868,A view of train tracks and a train. +48281,A woman in a red shirt holding a pink vase. +455675,A couple of young men riding bikes down a street. +155897,A person holding a sandwich in their hands. +447089,A woman standing next to a traffic signal on a street corner. +23623,His and her bathroom sinks underneath a large mirror. +554142,A trunk filled with plants with a mirror behind it. +17235,A light brown bathroom with a white toilet and sink. +60213,A large white bed with a wooden headboard. +472924,A dog looking out of a second story window. +371782,A teddy bear holding up miniature replica pizza boxes. +458481,A group of cattle in a grassy field near a tree. +381109,A walk way filled with white containers containing apples. +322796,A brown dog carrying a black frisbee in its mouth +203438,A red chair in a room next to a wooden table. +187887,"A lunch box with a slice of pizza, and pretzels." +378502,A person on a motor bike and a car on the street. +424731,An elephant with large white tusk standing next to a forest. +404237,A pizza sitting on top of a metal pan with a spatula. +159203,A fire hydrant on a sidewalk along a street. +381551,a punch of people sitting on park benches +398803,Two women playing tennis on a tennis court. +335690,A horse head sitting on a counter top next to drinks and food. +368684,A room with a tv in the background and a laptop screen in the foreground +514904,A woman holds a Weiner in each hand. +439537,Two donuts sitting on a brown paper wrapper. +447758,"A street view of tall buildings, street lights and traffic lights." +485896,A group of police men on horses all in a row with flags. +14547,A man riding skis with ski poles down a snow covered slope. +398045,people at costume party dressed up in costumes +475248,A metal counter top with a pan filled with food. +369594,The small kitchen has a black counter and wooden cabinets. +451683,"Large pizza covered in pepperoni, olives, peppers, onion, and mushrooms." +402206,Parents with their children at a library event outside. +222313,A person sitting on top of a bench next to a light pole. +244379,"This highway is empty this early on the morning," +164969,A pizza in a box with toppings that are divided into thirds. +538320,Several people are standing in a snow covered area. +300791,A man driving a horse drawn carriage down the side of a road. +210789,An adult standing behind a little girl while holding an umbrella. +574692,A large group of people buying oranges at a stand. +563153,A half eaten piece of fruit sitting on top of a table. +275695,There are diffrrnt Apia ces in the kitchen +220118,A dog is shown sitting on rocks by the beach. +429170,A surfer on his board performing a trick. +220041,The rear view mirror of a cityh bus driving down a street. +197200,A zebra standing on top of a pile of dirt and rocks. +208053,Small kids playing baseball in uniforms on a sunny day. +52624,a man sitting on a dirtbike in a circus ring +562045,A woman brushing her teeth while riding a skateboard. +73738,A white toilet sitting in between tiled walls. +550552,A large kitchen with an island surrounded by stools. +273688,A pizza covered in cheese sitting on to of a counter. +530520,Men are resting in a grassy area outside a building. +235244,A plate topped with bananas and red potatoes. +363403,A man with a red neck tie and a gray jacket. +1903,A hot dog is in a styrofoam box. +145448,A cat sleeping on a grey tarp on top of a car. +436858,A child skier is headed down a small slope on their skies. +49190,A white sink sitting under a bathroom mirror. +134103,Four people on horses walk down a trail. +492658,A sheep that sheep stands in the dry grass. +273618,A mother and baby elephant are standing near a water source. +415619,A blanket covered bed sitting under a bedroom window. +393056,a man wearing a wet suit riding the wave +11987,A small bedroom has striped wallpaper going floor to ceiling +140636,A couple of birds standing in the water. +78313,The shelves above the cabinet have porcelain dishes on them. +332007,A series of different bridges over a large body of water. +201723,A wall that is filled with some cool items. +527510,A large U.S Air Force plain sits on an asphalt ramp. +559102,A couple of kids playing with a racquet in front of a the camera. +37017,A large black dog sitting in a room. +34818,A close up of shoes preparing to stand on a skateboard. +463836,A man looking down with a backpack on in a house. +29934,A young girl is preparing to swing on a tennis court. +218751,"An old, rusty fire hydrant, in front of the pole. " +489264,"A living room has a mirror, window, couch, chair, and television in it." +535452,A man is playing tennis in front of steps +381204,A closeup of an apple in the foreground with three oranges in the background. +281008,A man is riding a surfboard on a wave. +552761,A bright yellow fire hydrant sits among landscaping rocks between the sidewalk and the fence. +69223,this is a bathroom and a tub with tile +214869,A woman sitting down with a large cell phone holder on her pants. +78858,A group of people siting around a pizza +479597,A man wearing a white shirt and red tie. +190447,A bike is shown attached to a rack. +526359,A group of couches in a tidy living room. +47720,"The table has a sandwich, a mug of coffee and custard cream on it." +83067,Couple sailing a large sailboat on calm water. +171349,An unfinished bathroom with a boarded window and exposed pipes. +157577,Two brown horses standing in front of a red brick building. +494099,A sandy beach next to a crystal blue ocean. +133622,A plate with a piece of food next to a pile of cheese broccoli. +127626,One way signs at N 11 St and Brewers Row near a brick building. +47654,a couple of kids are holding stuffed animals +20650,"Burger with broccoli, pickle, and fork on orange plate " +221067,a close up of a person with a large sandwich +264489,Two flowers sitting in a round vase near a window. +501242,A woman with good posture sits at a wooden desk with an open laptop. +315621,A motorcycle is parked next to a building. +298637,A person flying through the air while riding skis. +533688,Two white plates topped with meals sitting on a table. +564283,A white refrigerator freezer sitting inside of a kitchen. +377611,There is a orange on the table next to a small pocket knife +230982,An overweight man leans back in order to play a video game. +54340,A couple of cats laying on top of a bed. +355088,A clock on a post and a church spire in the background. +105156,A horse stands still attached to a passenger coach. +569988,A table with two hot dogs with topping and french fries. +408736,Cats sits on arm of chair blocking view of laptop +146334,A golden lab puppy wearing a red bow tie. +499716,a herd of zebras sniff around a caged area +176007,A pile of smart phones sitting on top of a chair. +55840,A cat sitting on a windowsill stares at the camera. +74798,A white and black bird on a chimney next to sky. +312549,This is a close up photo of a street sign of a cross street. +43720,A baby girl sitting on top of a green grass holding a cell phone. +34141,A giraffe stands among some trees and looks toward the camera. +293858,"A sandwich on toasted bread, with a salad and a bottle of water." +101223,The view from the commercial airplane includes the wing and mountains and water. +123017,a wooden desk outdoors with pink flowers in front of it. +513615,a jet is flying above some snowy terrain +70528,A woman and a dog tussle over a frisbee. +222648,A person doing a kickflip on a skateboard over a jump. +410380,A woman washing carrots on a counter in a kitchen. +324008,"A meal on an airplane of cereal, milk, and fruit." +287959,a sandwich that has something green and red in it +560373,A tan dog with sky blue eyes posing for a picture with a man sitting on a chair in the background. +223414,A lady is sitting on a terrace drinking a glass of wine. +393794,"a close up flowers and plants inside of a bowl +" +478874,A young girl holding a hair dryer and getting her hair brushed. +153847,A animal laying in the sand on a beach. +96427,A young boy holding a tennis racquet on a court. +111535,A person holding up a flip phone in their hand. +437872,A man brushing his daughters hair with a brush. +517386,A vase filled with flowers on top of a table. +300357,A woman in a skirt and colorful shirt kneeling down on floral fabric. +138975,Two men in skis are standing on a ski slope. +464130,a large white boats is pulled up to a dock +3939,three small children near one another with stuffed animals +462386,A nice ooking slow cooked chicken sandwich meal +350648,A cup with a growing plant and old fruit. +29913,A bicycle is lying on the sidewalk beside a fire hydrant. +297037,A horse is running near a body of water. +429679,"A feast of meat, potatos, and veggies on a plate" +566717,A cat sitting in a bathtub behind the curtain. +279030,A shot of a tennis player in mid shot. +523696,A young man is using his skateboard on the street. +402499,A man holds a Frisbee at a park. +154339,Gauges attached to pipes displayed in dimly lit area. +95022,A bird with red eyes perched on top of a tree branch. +279085,A person is looking at a laptop in the dark. +571034,A herd of cattle sitting next to each other on a pile of dry grass. +161505,25 images of dogs are formed into a square grid. +504580,Two giraffes during day in field of grasses. +248087,Bus driving along loaded with packages and bags on the luggage rack on the roof. +338591,A big clock on top of a big strange structure. +94513,A man ridding a horse and leading another horse through some water. +554357,A man holding a tennis racquet in his left hand. +550162,A man holding a bunch of unripe bananas. +514984,A man that is sitting in front of a pizza. +475593,Women father around a desk and machinery in a factory. +66072,A surfer surfing on the surfboard with an oar in the ocean. +566498,A man holding a baseball bat on top of a field. +33931,A close view of the round part of a tablespoon shows a wilted piece of lettuce resting on the spoon. +59815,A group of people dressed in an elephant costume. +269450,A set of three white plates covered in food. +413124,A young boy wearing a catchers mitt while standing on top of a field. +119640,A shirtless man on a tennis court holding a tennis racket. +547041,Two plastic containers have a soup and a salad in them. +239466,a close up of a young person holding a skate board +412658,A boy in green jersey playing in a baseball game. +555461,a person at a table with a laptop +261116,A table filled with a cake and paper plates with ice cream and cake. +124607,Small white toilet sitting next to a small white sink. +222424,A picture of a church clock with shrubbery in front of it. +347544,There is an old multi colored volvo parked next to a motel +179950,"A group of people, many wearing red shirts or vests are on a grassy area while a white Frisbee is in the air above their heads." +525667,People standing around a park bench next to a bicycle. +283874,Merchants sitting while selling off produce to others. +50431,A carriage with people in it being pulled by two horses in the street. +428248,A guy does tricks on his skateboard in the street +194786,there is a man that is throwing a frisbee between his legs +135708,a stuffed chicken is sitting next to some flowers +477867,A man is surfing on a board at the beach +303099,Two cats are shown sitting on a toilet. +308328,Some people in high visibility jackets putting suitcases onto a conveyer belt from a container +314914,A two sign sitting on the side of a road. +489482,A woman walks across the street as a car waits at the traffic signal. +158277,A bench sitting next to a green patch of grass. +58079,A person holding a toothbrush under the running water of a faucet. +36911,A baseball player has just hit the baseball at this game. +124232,Broccoli and plants growing in an outdoor garden setting +78465,a big bus driving down the road next to another bus +438497,A woman putting frosting on a cake on a plate +481187,A person on skis flying over a snow track. +549668,A bathroom with a white sink next to a shower. +578993,A person wearing a black water suit surfs in the ocean +498557,Train cars and a dry stream-bed along a roadside. +370170,"A salad of noodles, asparagus and meat in a dish." +438667,A cat lying down on some blue fabric +455435,A boy covering his face as a fire hydrant blows water at him. +232050,There is a plate of food that is packed with different foods +11241,A counter with several plates of food on it. +137185,A train caboose is sitting beside train tracks. +399905,A yellow school bus driving past a red brick building. +225183,A lot of police officers on horses patrolling a city street. +185473,a large group of horse with men riding on a few of them +54728,Two large and one baby elephant walking through the marsh. +565650,A scooter parked with a purple umbrella over the seat. +12748,A man and child next to a horse. +215845,A group of people sitting and standing by a white and blue ice cream truck. +100329,A brown bear trying to open a picnic cooler. +489687,A cat sitting on top of a a black car. +45830,A black cat laying on top of a suitcase in a room. +480179,A pile of luggage and trunks sitting under a cloudy blue sky. +370413,Man rides a horse down a city street. +207151,A vegetarian pizza is half eaten on a pizza holder. +308785,A silver passenger train traveling down train tracks near a field. +403774,Ship's clocks and barometers displayed on a rope edged wooden board +248232,A large clock mounted to the front of a building. +237256,A group of sheep is standing in a grassy field. +236868,Tennis players do give congratulations to their opponents. +229837,A metal shelf topped with lots of different items. +237357,Woman throwing a ball into the air in front of a house. +121591,There is a man skateboard on the side of a wall. +468043,A little boy is sitting on a statue of a sheep. +566234,a person standing on a plowed snowy road +386146,A couple of birds perched on poles sticking out of a lake. +40210,an elephant walking near a fence with trees on the other side +348059,A man sitting at a table with two plates of breakfast food. +169028,A boy is jumping in the air with his skateboard at the top of a skateboard ramp. +88552,"Two little boys are wearing helmets, goggles and snow gear as they stand and sit in the middle of the snowy terrain." +203350,Two small children in a double stroller looking at each other. +173530,A Ford Mustang next to a brown horse. +288765,A person holding a sandwich filled with lettuce. +363163,A man holding a tennis racquet on a tennis court. +499181,A street scene of a self service parking lot. +409646,A large black bear walking across a grass covered field. +321865,A modest modern looking kitchen for an apartment +20459,Two men playing a game of frisbee together. +186518,A old truck with a busted window in the tall bushes. +258762,A woman standing in front of a mirror with bright blue hair. +330055,A player running the bases in a baseball game. +322577,A wooden desk with a laptop computer and a desktop computer that are both open. +291286,A man riding a skateboard down an ally. +196811,A tall green and yellow double decker bus traveling down a street. +74860,A person sitting on the side of a mountain with a snow board. +211163,A person playing in the maintained play ground +94746,A man standing in front of a counter talking on a phone. +272566,A man and young girl surrounded by various fruits. +490294,Plane flying in sky above power line wires. +503518,Three people in uniform looking at a cell phone. +199404,A woman is taking a selfie in her bathroom mirror. +50481,A creepy Spinx statue suspended to the front end of a dump truck. +358652,A small baby on top of a green blanket next to a teddy bear. +232544,A group of people play Frisbee in a field. +69773,"Inside a restroom stall, a rag floats in the toilet water." +307510,A man taking a swing at a tennis ball. +396269,A flower arrangement is standing on a table in a very ornately decorated area. +544655,A girl in grey jacket and tie standing on a street. +423498,two people riding skate boards on a city street +130555,A kitchen with a lot of cabinets and stuff on the table. +115667,A baby girl places her hand upon a baby boy's forehead. +123131,A large black semi parked in a parking lot. +227042,A group of soccer players scramble against each other to get the ball. +438560,An old car sitting on top of a lush green field. +86215,A large brown dog standing next to a cat on a bed. +129628,Snowboarders walking through the snow carrying their boards +240783,A plate that has a pile of doughnuts on it. +193401,A man crouched down with a camera next to a small white horse +164710,A green plant that is growing out of the ground. +200703,A flock of ducks swimming on a lake together. +516800,The train is stopped on the railroad tracks to pick up passengers. +525371,A tall yellow building next to a traffic light that's green. +252444,Boy doing skateboard trick in air at a skate park. +427245,A couple of women sitting at a table next to drinks. +131063,"A large bathroom features tiled walls, two mirrors and two sinks." +117407,This cat is sitting on a porch near a tire. +313789,Many calendars and bunches of bananas hanging on a wall. +136768,baseball players practicing their batting skills in a filled arena +314177,a person taking a photo in a bath room mirror +26609,A city street line with very tall buildings. +198416,"A woman petting a cat, and other picture with a be prepared to stop sign." +320428,A man is striking a tennis ball at a game +411277,A desk with five different computers on a blue table cloth. +390201,Stuffed teddy bears and an eagle on a bamboo wall hanging. +436280,A british airways passenger jet in the sky. +485071,Guy falling off his surfboard after losing battle with the wave +450561,A picture of a base to a blender. +32456,A giraffe and a zebra are on the grass near trees & cars. +54967,A city street with cars and street lights. +143174,A stop light that has a street sign on it. +481370,A computer keyboard sitting on top of a desk. +359959,a white urinal with its blue and white controller +213538,A couple of computer monitors sitting on top of a wooden desk. +256223,a white plate with some pancakes butter and syrup +170914,"On a beach, there is a clock in the middle of the sand." +99341,A man standing on a patch of grass near a neon frisbee. +445972,A stop sign next to an intersection with wide open heart beyond +456566,A man with an earring is drinking from a cup. +544794,The piece of pizza is ready to be eaten. +263136,A woman in a wedding dress standing in a field near a corn farm and holding the bridle of a cream colored horse. +172648,a man leaning over the back of a truck in front of buildings +469192,A car is parked on dry grass with kites overhead. +507167,Man in glasses and black shirt brushing his teeth. +46924,The back of an iphone in front of a destk. +25748,The bow of a wooden sailing ship moored at a dock +356863,some people on a green hill are flying kites +26129,A red and white boat floating in front of a small brown boat. +4266,People skiing and standing on a ski slope. +320218,A brown horse standing on a dirt field. +145684,Woman standing in her snow boots with an umbrella. +241273,A convoy of dump trucks make their way past the supermarket. +386637,Small black and white dog laying down on top of a bed. +276971,Two birds on a parking bay with cars +191112,A person holds a robot in front of a ball near a goal. +189067,This expert skateboarder is skateboarding on a railing. +484604,A personal pizza decorated to look like an angry bird. +351133,A woman holding a tooth brush while wearing black. +304812,A person walking across a beach next to the ocean. +550432,A man standing on a beach while holding a surfboard. +21167,The couple are dressed up and posing for photos. +239717,a man is holding a plate and smiling happily +111619,A bus on driving down a street with other buses +109045,A black and white photo of a propeller plane. +400950,a small child riding a horse on a city street +196815,A group of people sitting in a room on top of a rug. +143107,a person on a surf board jumps in the air over snow +567730,The sign of a restaurant in the outside of the store. +406616,A wooden cutting board topped with veggies and a knife. +325423,A CLEAN AND COLORFUL BATHROOM WITH A LARGE MIRROR +299207,Man dressed in jeans standing in the street holding luggage. +527718,A person on a snowboard is sitting in the snow. +126046,A traffic light sitting next to a cluster of traffic cones. +455040,A harbor with a passenger ship and and grain silos +562843,a cell phone screwdriver a pair of scissors and a black thing on a desk +28343,A doughnut sitting on top of a napkin next to a cut of coffee on top of a doughnut table cloth. +413058,Two laptop computers sitting on top of a desk. +106046,A little girl sitting at a table eating pieces of cake on plates. +471625,A group of people standing on the outside of a building. +481819,Two men in pajamas standing and holding Wii controllers. +219283,A teddy bear sitting in front of a pile of boxes. +290234,A person that is on his cell phone in a car. +106537,A living room with a fireplace and wooden floors. +421231,a guy holding a fork sitting in front of his birthday cake +244160,A large sign on the front of a building. +259879,A cat sitting on a window sill in a room. +55955,A sports motorcycle is parked on a gravel road by a river. +19455,Two rooms of a house are left in disarray on moving day. +457271,A person holding a baby is looking at horses in a stable. +373089,A train is shown stopped at a train station. +466988,A black cat laying on top of the arm of a red chair. +13876,a black and white photo of a long bench for sitting near a building +525763,BOATS IN A HARBOR SURROUNDED BY BUILDINGS AND A FEW CARS +104603,A bear walks through tall grass near several trees. +2302,A person riding on the back of a brown horse on a rocky hillside. +67412,A group of people gather in an open area and fly kites. +527098,Several boats in the water near an amusement park. +415723,The outdoor show features a dog who can catch a frisbee. +467978,The dog is outside barking at the sheep. +442417,a man that is in a store with a cell phone +250344,Two young women sitting on a couch one of them using a laptop. +83682,a person riding a snowboard down a hill +357992,"A wooden desk with several computers on the desk, including laptops and computer monitors." +49676,Assortment of kitchen appliances displayed in white cupboard. +31093,A skateboarder is on top of a cement bowl. +377326,A herd of cows drinking water from the river +392320,mANY CHEFS WORK ON COOKING FOOD IN THE KITCHEN. +93685,A man in a wet suit riding a wave on a surfboard. +558421,A train filled with passengers traveling down railroad tracks. +544121,A desk topped with a laptop computer next to another laptop. +542284,A little girl talking on a cell phone while sitting down. +32001,A woman smiling with a white birthday cake and a man standing nearby holding a baby. +480657,a bus that is parked next to some dirt +570188,Two people playing a video game while others watch. +515904,A bathroom with a large tub next to a sink. +459382,A piece of chocolate cake and fruit served with a glass of milk +360494,Tourists relaxing on the beach at the Royal Hawaiian Hotel +505169,A toilet next to a chain shower stall in a bathroom. +317531,A cow on a small hill with surrounding mountains in the background. +479832,A train covered in lots of graffiti on train tracks. +223714,A table is cluttered with plates of food. +250427,street scene with marquee nearest advertising musical shows +414744,Two children playing in the sand at beach with a frisbee +308459,Two blue and white street signs and cars on a street. +28864,a close up of a bowl of different fruits +385438,a man playing a game of frisbee in a lush green park. +320053,the children are running and playing soccer together +533942,A chair and television are by the sidewalk. +341487,man is walking in the street carrying a sign that says smile +198915,This is an intersection sign between green lake drive and one other +557965,Two people riding on the backs of brown horses. +579056,A man hit something that exploded with a bat. +215408,A medieval style tower and clock against blue sky. +503399,a black and white photo of a bearded man playing tennis +308900,A BASEBALL GAME IN AN INNER CITY BALL PARK +357303,Skiers and snowboarders share a white mountain slope. +521540,A banana is on a plate with cookies and peanut butter. +93156,"A blue sky and a line of hills loom in the distance before a pair of young skateboarders, one of whom is much further ahead of the other." +185773,a cat sitting in a sink with its eyes open +468548,Factory where bananas are being prepared for market +216428,a cat drinking from a toilet and the cat on top of the toilet +508339,A woman sitting at a table while using a smartphone. +267972,A group of people on bicycles in a busy street. +382542,"A bathroom with a sink, toilet and safety rails." +291537,there is a snowboarder riding down a hill or mountain +212072,A stop sign in front of some buildings. +338562,A red fire hydrant in front of a shopping center. +303365,This green dufell bag sits next to a brown seat +536782,A person on a snowboard does an air trick. +264599,A crowded city street with lots of people walking around. +563195,Short rain as view from above either from over view mountain or air craft. +451896,A bike sitting parked on the ground next to a building. +245534,A clock reads twelve o'clock on the side of a building. +330455,A bus driving down a street next to a car. +240972,The bedroom has a chair and a fireplace. +136173,An elephant statue has pink accouterments on it. +172547,A very green hillside in the day time. +229840,A dog touches noses with a horse through a fence. +446909,a man sitting on a green bench in a park +127516,A woman in black wetsuit on a blue and white boogie board. +487843,Skateboarder who just launched off a horizontal ramp +217387,A bath tub with potted plants in it. +485673,A group of men playing a game of baseball. +536605,A woman getting her hair but with a pair of black scissors. +308555,The stoves inside of a pizza place's kitchen with pizza boxed on a shelf. +142919,"A small pizza with cheese, sauce and vegetables." +48910,a kitchen with a sink a shelf and a chair +430525,Two women are sitting on benches and one has a purse and shopping bag beside her. +407960,A cat is observing the dishwasher in the kitchen. +19742,A brown glass on the table for display art +115033,Two zebra standing side by side next to a pile of stones. +161010,"Picture of an outside corner that looks amazing. +" +286719,A bunch of carrots that are next to lemons. +444390,"This is the view of a kitchen stove, kitchen sink, counter, and cabinets. " +283904,A cat walking on the top of an open door. +84474,A boat dock with two planes floating on the water. +125485,A group of boats floating on a body of water. +156607,A couple of cows standing and sitting on top of a field. +425948,A woman and a little girl standing on top of a beach. +200401,A parking meter for bikes on the curb side. +410576,a yellow table some books a monitor and a computer +218249,a burger and some fries on a tray +217468,A man riding on the back of a small boat. +436348,a big group of people next to a umbrella +122542,TWO LADIES ARE OUT SPENDING THE DAY SKIING +271907,A picture of a cat wearing a bow tie. +88859,a big baseball field with people on it +123867,A brown dog walking across a grass covered field. +205247,A long white red and blue bus driving down a street next to trees. +494393,Man walking by red sign on sidewalk by window of building while another looks on. +116582,A Macbook laptop showing a flickr webpage on a table next to two remote controls. +416220,A city street lined with vintage cars and pedestrians. +172599,A large passenger jet sitting on top of an airport runway. +231379,A woman sitting on a motorcycle while talking to a child with a man laying in a hammock behind them. +171050,A brown and gold fire hydrant in front of a brick building. +62808,A young man is taking a picture of a large pizza. +258141,A man laying on top of a bed inside of a train room. +460567,"Antelopes, zebras, and giraffes are gathered around the watering hole. " +307262,A room corner painted orange with a picture of pizza on the wall. +167422,A red fire hydrant located beside a river of water. +566026,The Big Ben clock tower towering over the city of London. +185250,A woman standing next to a brown and white dog. +458240,a large body of water with trees in the background +382855,A person sitting on the ground with a cell phone. +224509,A living room has an entertainment center with television and shelves. +344364,A man hitting a tennis ball with a tennis racquet. +11313,A white bed topped with pillows and blankets. +122871,a man rides on a horse near a blue car +443952,Inside of a bathroom with a sink and toilet. +202228,The reflection of a man taking a picture in a mirror +168706,Two cows stand in a field near one young cow laying down. +255112,A man standing over a green frisbee on a lush green field. +223413,A cat laying on the ground next to a woman's shoes. +277383,Some guys playing with a disc in a grassy field. +215906,a woman in a gray top is playing tennis +559417,A harbor area with boats and a carousel in the background. +483475,A modern jet airplane coming in to park at the gate of an airport +461855,An old fashioned picture has a smiling baby with a teddy bear. +475042,A truck is parked in the dirt by the tree. +177323,A cat on its back plays with a toy. +295308,A middle aged man skateboards on the bottom of a skateboarding structure. +7787,"Fresh pizza sits on plates, ready to be eaten." +59022,a woman holds a kite over her head +474110,a man standing on the side walk while holding a sign +329280,a ups truck on a city street near trees +693,A cute little girl riding a skateboard in a store. +136143,A man wearing a red shirt is throwing a frisbee +259640,people walking around a tamale truck and a building +285293,A man in a fedora sitting on a park bench. +338452,A bird is standing upright in the water and leaves. +137106,it looks like a hand of a small child with pink and white top +116377,Two youngsters in the snow with helmets and skis. +282134,Guy poses for picture by kitchen sink with two dogs +419344,A group of people stare at a group of elephants. +145073,It looks like there is writing on the bottom of the Stop sign. +328728,A group of young women getting food from a table. +232287,"A cluttered kitchen with oven, rice maker, and microwave oven" +147179,Young adults lying on fold away bed in living area. +455464,A man is in deep conversation holding the telephone +308391,A fire department with a sign out front +150417,An older woman sitting at a table with a cake +132987,Two men who maybe spear fishing one is on a surf board. +213054,"Close up of pencil cup with pens, pencils, and scissors." +415325,A yellow street sign that reads safe passage +327155,a lake that has all kinds of boats on it +309938,The brown fuzzy dog has round blue eyes. +566941,People laugh at the antics of an elephant. +269033,A person with a skateboard on a street. +216761,"A man in plaid shorts skateboards in a rink by palm trees," +400945,A plain white bathroom that is completely unfurnished. +107858,a person holding a nintendo wii remote with a white background +86602,a train travels o some tracks next to some water +25715,A large body of water covered with boats. +26926,An orange fire hydrant with a face and bow tie drawn on it. +46912,a train getting ready to go into a tunnel +379740,a counter a white toilet and toilet paper and black tiles +100500,Brown dog laying on top of a bed with white sheets covering him. +173693,A jockey riding a horse on a horse racing track. +257537,A man standing on a field wearing a glove. +423767,A colorful jet is sitting patiently on a runway. +459752,a man with no shirt holds a toothbrush +113185,A German language street directional sign that reads Bauminghausstrasse. +569379,An adult elephant is collapsed in the water. +259665,Three people hold Frisbees while one of them throws his. +478055,A herd of cattle grazing on a dry grass field. +572462,A group of people standing inside of a moving tram. +310302,A plate with sliced pizza and a bottle of beer. +493683,"The bowl has mushrooms, broccoli and meat with chopsticks." +337055,a woman with a tattoo is sitting on the train tracks +311961,A dog sticking its head into a small pet bed. +269886,Someone holding a napkin and a banana in their hand +553154,Two elephants standing on a grassy field next to a tree. +63848,A meal on a plate is sitting on a table. +34567,A chili cheese dog sitting on a red tray next to french fries. +4338,A bear walking through a field next to a forest. +23023,Three pieces of luggage sitting on a floor in front of a curtain. +38064,a couple of zebras that are standing next to a fence +304827,Small kitchen area with sink full of dirty dishes +313562,A woman selling raw carrots at an outdoor market +76738,A man posing with a mouse and keyboard +269511,a small cat is sitting on a step by a door +274272,A large bus driving down a city street. +81224,this is horses racing each other on dirt +496307,A pizza with pasta on top of it. +446460,Green dump truck with a yellow bed sitting on a road. +449726,A fried egg is nestled inside a piece of crusty bread. +308645,Person holding up food on a stick of good to a dog. +75479,A herd of zebras grouped together on a dusty plain. +209602,a man surrounded by some snow covered trees +469719,A skier in the midst of a jump +200274,"It is a territory with numerous things to watch. +" +373344,A person lays down on a blanket with a dog by her side. +154000,A small white tow truck parked to another small white tow truck. +556932,A pizza sitting on top of a wooden cutting board. +381037,A cat sitting on top of a hard wood floor. +313228,A little boy is ready to eat his dinner. +536743,Six little boys are smiling in front of a wall. +140686,A long yellow and red train traveling down tracks. +57222,Two teddy bears are sitting together in the grass. +11760,A group of zebras walking away from trees. +142248,A living room area with a number of couches +312724,A group of different animals are grazing in the wild. +2521,a close up of a street sign near buildings +548528,a parking meter standing in the cold snow +92093,Hundreds of people gathered around looking at motorcycles. +290957,A brown horse with white fetlocks grazing in a fenced in yard. +500167,A baseball player swinging a bat on a field. +510955,A very pretty lady with a oven mitt in a kitchen. +383386,a couple of stuffed bears are on a bed +386841,A fanciful dressed piece of pizza on a plate. +463303,the fire hydrant is behind a rock and flowers +480215,"A bathroom with tile flooring and walls, and a white toilet." +430265,A man is trying to catch a red Frisbee. +343642,A large metal clock in the middle of a room. +422350,A sink and refrigerator in a small room. +174091,A pizza sitting on top of a white plate. +195470,Group of white sheep walking in a field of grass together. +199783,a bed room with two bends and two lamps +244455,Two people who are in the street on motorcycles. +264992,Two bags are full of fruits on the table. +284143,A man walking next to another man on a tennis court. +427561,A man on a motorcycle with a group of people standing around it. +236542,A dish of pancakes covered in bananas and strawberries. +261732,a man with a racket hits a tennis ball +247123,a tv on top of an entertainment center +497791,The old tow truck tries to lift an overturned truck that's on it's side. +430096,Two skate boards sitting side by side next to each other on a floor. +231339,A little girl is kneeling in front of an open refrigerator. +98801,A teenaged boy poses on the beach with his surfboard. +225281,A bunch of kites flying around a park. +103806,a cat laying on the floor of a kitchen +114745,Skateboarder dressed in animal costume in the middle of a stunt at a skate park. +85735,A picture of a birthday cake on a kitchen counter. +189932,A cell phone has a ritz cracker like keychain. +499537,A traffic sign sitting on the side of a road. +230600,A toilet on the outside of a building next to a parking meter. +532620,A sandwich is next to a yellow stuffed animal. +323231,A pair of ski emergency responders transporting an injured skier. +157269,several men on a street corner repairing a street sign +266091,A small garden area features a few springs of growth and a small busy plant and a few bricks. +544002,A man sitting on the hood of a car talking on a cell phone. +245242,"a wooden cutting board with cheese, bread and a knife on it." +411065,A cat on a bed looking at a laptop +17089,A whole lot of zebra's standing in a field. +191501,"A street sign that reads ""FRIZERIE"" in front of a red building." +577030,A large white couch in a living room in front of a TV. +356302,This kitchen has a metal side by side refrigerator/freezer combo. +97693,"A view of a bed, chair, and window treatments." +350619,A couple of sliced pizzas on a table. +434583,A person is doing something by itself and interesting. +303706,A cat in a kitchen on top of a refrigerator. +284648,The surfer is surfing on top of the waves. +274678,A lone giraffe standing in the tall bushes. +99794,A baseball player swinging a bat on a baseball field. +286654,"A street sign reads ""Rue Paul St"" in the snow." +66769,A lady is holding a pretzel with a cheese backing. +578736,A pretty woman in a white bikini holding a surfboard over her head. +522813,Three dimensional rendering of a cat and bed in a room. +113233,A very young boy on snow ski's holding a flag. +510275,A banana peel laying next to a glass bottle. +182647,Woman holding a cell phone covered with a crochet pounch +399957,The baby lamb is standing on green grass. +453756,a collage of photos with bowl and pots +141172,A door with a sticker of a cat door on it +539445,a red train is riding down the tracks +332318,Cows lounge in a field with a mountain backdrop. +416240,a cute baby giraffe standing next to a bigger giraffe +209692,Old fashioned red fire truck parked by itself on a street. +107511,A group of giraffe standing next to each other. +336658,"A photograph of an outside with numerous things in the scene. +" +129942,Blue and orange large birds on tree with metal pot. +37783,A young boy riding a skateboard down the side of a ramp. +309222,A couple of zebra print brushes sitting on top of each other. +36349,A pile of carrots and parsnips on the pavement next to a truck. +303250,two bears partially submerged in water near each other +363840,Several different pieces of electronic equipment and computers on a desk. +557220,Two zebras stand outside in front of some tall grass. +504921,there is a small yellow and white bird sitting on a branch +450889,A man holding a Nintendo Wii game controller in a living room. +440475,"A room with a Tv, potted plant, tables and chairs" +345823,A stop sign that is by a road by the beach. +212605,A cat putting it's paws on top of a laptop computer. +137118,An empty living room in an apartment with several chairs sitting in the middle of it. +102609,"A computer, keyboard and mouse sitting on a desk." +539904,A yellow fire hydrant sitting on the side of a road. +492683,a cat is looking out off an open window +287328,two small dogs are laying on a human bed +47769,a black table and stools sitting next to two windows with shutters +435709,A clock that is on the top of a pole. +5193,Man and boys holding two surfboards getting picture taken. +387173,A person riding on the water in a red row boat. +510871,A man that is on a court with a racquet. +106038,A toilet with plastic over the toilet seat. +486355,An open fire hydrant and children playing in the water. +541634,A bowl that has food inside of it. +370486,a woman holding a colorful striped umbrella +63726,There are cups and plates on the dish drainer. +385139,The black cat is wondering what isw behind the wall. +448627,A cat that is laying on a computer keyboard. +76521,A group of three people riding a ski lift over a snow covered slope. +330790,an elephant is carrying some plants in its tusk +104801,A living room filled with brown furniture and a flat screen TV.. +558524,"The large, very old jar is on display behind glass." +357356,A man tossing a frisbee standing on a stone path in the woods. +118515,A spotted kitten sitting on a wooden bench. +231281,a baseball swinging a baseball bat at a ball +421286,a plate with cut slices of pizza and peppeoni +378894,a man stands on a chair looking at a computer +535604,A group of small boats floating on top of a lake. +577858,Children making their own personal pizzas with different toppings. +51938,A person on skis does a trick on a rail. +568111,A bedroom with a bed under a window next to a green rug. +146503,A series of different photos showing different kinds of food. +174097,a table with a line of different kind of dressed hot dogs. +295231,A group of animals standing on top of a grass covered field. +93893,A group of brown teddy bear sitting at a brown wooden bench. +108503,Two surfers in wetsuits carrying surfboards along the beach. +299077,"A bathroom showing sink, toilet, and shower " +341645,A young man riding a skateboard down a street holding a 99 cent store bag. +497719,A man riding a snowboard down a slope with many hills. +457943,A dog carrying a Frisbee at a dog competition. +384848,A giraffe standing next to a stone wall. +138896,Two dump trucks driving down a road past a white pick up truck. +283945,Three large trucks are parked near houses and a lighthouse. +519754,A small bright orange refrigerator in a store +499922,An assortment of donuts with various coatings and toppings. +379259,A man with an umbrella walking in the rain +117891,A gray and white cat sitting in blue bowl. +531433,A close-up of a plate of food containing a hamburger and onion rings. +181485,A room with chairs and a piano and light coming through the window +522371,A couple of young people standing next to each other on the snow. +144539,Colorful room with two bouquets of flowers on a table. +581654,A dog approaches two sheep in front of onlookers. +445953,A man in costume kneels down on the concrete step +259475,A kitten standing next to a bunch of bananas on a bed. +424271,A group of young children riding skateboards in a building. +15984,A cow is laying in the middle of a field with flowers. +468456,"A group of people, one of a woman with a umbrella." +61422,A bathroom with a sink and a toilet. +495852,"An image of a raptor, possibly an eagle, extending its wings overhead against a yellow and maroon sky." +309237,A cat laying on top of a couch next to a remote control. +359525,a plate of pancakes and sausages on a table +533743,Two men who are playing video games together. +406053,a reflection of a man taking a photo +352684,A group of people gathered in the lobby of a building. +351034,A new android phone is next to another android phone. +421072,A dog holding a red ball in it's mouth next to a brown and white dog. +33055,A man standing on a beach on a cloudy day with arms spread wide +88360,A duo of women playing against each other in frisbee. +28499,A traffic sign in front of large trees and a building. +408049,a person is standing in skies in the snow +284400,Two hands holding and dialing a cellular phone. +419697,A woman standing next to a miniature train at a park. +464751,The man stands in the bathroom with no shirt on brushing his teeth. +139605,A small tug boat is gliding in the ocean. +511363,A kite that looks like an airplane is lying on grass. +455767,A beautiful young blonde standing next to a man. +41848,A group of stuffed animals standing and sitting next to each other. +198004,A car is waiting beside people standing on the sidewalk. +218703,The yellow truck passes by two people on motorcycles from opposing directions. +98808,Three giraffes grazing in a forested area. +328530,Two white plates sit on the edge of a table holding pizza slices with fried eggs on them. +323571,A street sign on the street near a building. +16491,a number of baseball players on a field +500717,A man that is standing next to train. +145295,Many skateboarders going down a very wide city street. +212322,A bus stops next to a street sign. +330396,A man and a woman holding stuffed teddy bears near the ocean. +420229,A person getting ready to use an apple slicer +350231,A woman sitting at a table next to a table. +214121,TWO YOUNG MEN ARE ON THE COURT PLAYING TENNIS +284379,A young person riding a body board on a wave. +17655,"A shot shows pale blue wall over a well-stuffed blue couch that dwarfs the already small, fluffy dog resting face-forward on one of its cushions. " +433154,A large green train traveling past wooden crates. +287443,A broccoli and almond salad on a white plate. +338375,A group of three people standing next to each other on a ski slope. +326265,A plate of cottage cheese pizza and another with two pepperoni slices sitting on the table +423588,A group of people snowboarding in the mountains. +174113,The cat is sitting on the kitchen counter in front of the microwave ! +308223,A soccer goalie and a player face off in a game. +288174,Young boy on blue skateboard in parking lot. +274126,a few boats that are out on a river +555763,A man on motorbike rides in front of a large parade of traffic. +520508,"Nordic skier, in full gear, making his way on a wind blown day." +315769,"A double decker bus traveling down he street, past a Ferris wheel." +280107,This people are standing near a man who is in the water. +359110,A broken down building with a clock that collapsed. +379659,a table top with a computer on it +443860,A man holding a smart phone in his right hand. +497014,The dog is playing catch with his master. +190515,The street is empty and a bunch of signs have been knocked down. +158994,Two big white city buses parked near the curb. +118237,A side by side comparison of the same room in the past and present. +41199,A man is sitting at a harbor with a market place. +231580,A man speaks to some children on a farm. +215949,A cat sitting on top of a kitchen floor. +134715,A large mirror above a sink in a bathroom. +254789,Appliance Warehouse truck in a parking lot with two men shaking hands and other men standing behind. +201561,A man in white shorts standing next to a yellow frisbee. +567304,a baseball player throwing a pitch from the mound +420281,A man wearing glasses eating a hot dog. +188439,A colorful truck is driving with a full load of sticks and twigs. +60951,A man holding a tennis racquet on a tennis court. +150686,A bus sitting parked on the cement near a building. +273657,Two donuts with chocolate frosting and sprinkles on a plate. +429369,A herd of cattle grazing on a lush green field. +426268,A large long train with man inside on the track. +381430,The young man are playing a game of soccer in the field. +565331,A train going down the train tracks in a building. +459258,A girl in white shirt playing with a yellow frisbee. +65170,A woman is sitting on a bench in front of the water. +297414,A kitchen filled with dishes and appliances with lots of cupboards.. +188417,A couple of people on top of a snow covered ski slope. +127535,A big basket that is holding a lot of ripe bananas in it.. +328286,Boats docked at a harbor facing the city. +139168,A squadron of four fighter jets flying through a blue sky. +388085,people crossing a city street in the rain +326021,A woman with a teddy bear sitting at a booth outside. +92059,Eleven carrots that were cleaned on a cutting board. +557823,a baby giraffe stands in a grass field +331455,A bird is flying next to a ship in the ocean. +153803,a man sitting at a table with some laptops on it +304818,A plastic container filled with onions and meat. +483867,A woman holding a colorful umbrella standing on top of a wet ground. +270677,A young man standing in front of a fence holding a skateboard. +187658,A pizza that is sitting on a metal platter. +542487,The cat walks deftly behind the vase of flowers set on the rug +295599,A blue room connected to a room with a table in it. +129903,A street sign with the words Manuel and Idalgo on it. +198518,"In this living room the television is on, a dog is sleeping on the floor, and snacks are on the coffee table." +90108,A white bathroom sink sitting under a bathroom window. +108645,Two men sitting on a couch playing a game system. +192128,A bus stopped on the side of the road while people board it. +404710,an image of a woman riding a horse and jumping over bars +189782,A wooden bench has a company advertise on it. +174567,this is a counter with three computers on it +452515,A woman in white dress playing a game of tennis. +26982,Two motorcycles parked next to each other on a lush green field. +65306,A green and white bus traveling down a road. +138083,A dog running around the field with sheep in the background. +453895,Flatbread Pizza topping are varied and are a healthy alternative. +116667,A double decker bus driving down a street past a tall building. +74492,Four different angles of a persons hand holding a small remote control in various positions. +253477,One person holds the back of a surfboard while another person stands on the front of it on one leg. +346482,the propeller of a plane flying in the air +254535,Two young boys sitting on a baseball field holding catchers mits. +513600,a blond woman with a spoon and a blender +280766,A man laughing and playing with a video game. +191359,A table topped with a colorful table cloth with food on top of it. +68036,A couple of trains traveling down train tracks. +470766,A person flies a kite in a park while another watches. +202040,Two motorcycles parked on the side of the road. +28994,A man riding a surfboard on top of a wave. +452917,A man flying through the air while riding a skateboard. +314426,castle with lights and a clock tower by a bridge +148785,A young boy with a downed kite on a string +311904,A young woman wearing mime makeup holding a racquet. +200291,Assorted food items displayed on light blue plates. +379144,A blue dump truck driving down the highway. +193895,two zebras some brown and green plants and trees +474119,A man sitting on a toilet whle talking on a phone. +374060,A small airplane getting ready to take off in field +538690,A couple of street signs sitting on top of a metal pole. +47648,A white bowl filled with veggies and two lemon wedgies. +6177,a black handled pair of scissors laying on something. +477144,A baseball player standing next to home plate holding a bat. +282680,A man surfs on a small wave on the water. +164602,A man and a woman standing in front of a mirror. +420002,Young women playing an organized soccer match on a grass field. +288408,A woman is standing on a snowboard indoors. +414750,A large pair of black scissors on top of a table. +372683,A man and woman throwing a frisbee on the beach. +575606,a small metallic toilet in a tile bathroom +148707,Two yellow fruits hanging on branches full of leaves. +370095,Graffiti stains the surface of a green and white sign. +395843,A person standing in a field holding a kite. +447124,A man is in the park playing frisbee with his friends. +406000,"Toothbrushes, toothpaste, mouthwash, and floss, and other dental accessories. " +455395,A styrofoam container has beans and rice and carrots in it. +375916,A compact bathroom with vessel sink and toilet. +164672,An old building with a clock tower in the middle. +525344,A large Delta passenger jet being prepared for take off from an airport runway. +490952,A person on a skateboard on the street. +331317,A wall mounted golden clock on the side of a building. +536416,A woman stands on a surfboard on the beach near another woman. +563009,A herd of sheep walking across a lush green field. +243780,a couple is cutting in to a cake at a wedding +172886,A bathroom with two sinks mounted on a wall. +434261,A man sitting in the driver's seat of a beat up bus. +450247,A cat laying on top of a plastic container next to a bottle. +565479,Woman placing a dog on a white and yellow surfboard. +126098,A young boy tossing a soccer ball across a field. +15954,Two giraffes in a outdoor shelter under a net. +434873,A man on the beach walking towards a volleyball court. +465327,A kitchen filled with appliances and cooking utensils. +550645,The man has a handlebar mustache and he is eating a hot dog. +565034,A computer on a desk with multiple speakers +358884,The woman is ready to launch her kayak with her dog. +75663,A children play area absent of any children. +303626,A woman is standing in her kitchen posing for a photo. +85795,A young girl sits inside of a luggage bag. +262048,A woman in a bikini laying under a red umbrella. +482597,A man in an ATV is moving the cows along. +511002,A large red stop sign next to a box sitting on a sidewalk. +152774,A herd of giraffe and long horned goats laying in a zoo. +81943,There is a white toilet with red tiled floors +546378,A gray cat laying on top of a wooden book shelf. +173235,two pairs of red scissors and a white and green gauge +126895,Two younger boys playing baseball together on a field. +354507,"A man with a polka dotted tie, dress shirt and wool sweater on." +340998,A person standing next to a bike covered in flowers. +384625,An overhead shot of an attractive living room with large windows. +6397,A cat laying next to another cat in a piece of luggage. +363241,A lady eating a slice of deep dish pizza. +498489,a dog that is sitting inside of a room +144468,A woman and a man riding on the back of an elephant. +304853,A middle-aged man assembles a green kite at his office. +174904,A Christmas ornament shaped like a donut on a Christmas tree. +146253,A group of skiers trudging up a snow covered hill. +37675,Horses graze in front of a large building amid snow. +134778,Birds with long legs walking in the water near a beach. +31390,Young men playing frisbee in a grassy field. +285250,A woman wearing snow boots and a bikini flies a green kite. +29020,A man riding on top of a wave in the ocean. +58364,A person standing in a living room with a fire place. +547790,A fighter jet flying through a cloudy blue sky. +16775,A line in front of a black lunch truck. +203564,A bicycle replica with a clock as the front wheel. +201670,A road filled with snow and traffic lights. +40317,The skier is going down the snow covered hill. +327383,An old van has been given a mirrored finish +229481,A woman cooking in a skillet on the stove. +332282,A picture of a man in the air on his skis going towards a snowy hill. +396410,A ram standing still in an empty pasture. +357860,A black bull with a man in white in the background. +79589,A giraffe standing in the middle of a field. +292819,"a bicycle sits on its stand in the middle of a grassy, wooded area" +304300,A man operating a very small park train going down a track. +540926,Two people in tan long sleeve shirts with two dark laptops. +286303,a close up of a tie and a green shirt +352507,The sun shines through a window into a clean living room with a tile floor. +532690,A woman playing a Wii game with other people. +104906,A smothered fish dinner with wholesome vegetables +502024,A white controller for the Nintendo Wii game system. +232315,A brown cow standing on top of a dry grass field. +558677,A large jetliner sitting on top of an airport tarmac. +256577,A man throwing a Frisbee in front of a large white and black dog. +367582,A man wearing a white shirt and tie looking at a paper. +35694,'A pizza topped with cheese and meat with bacon. +263858,Three boats filled with people floating down a river. +458338,A car with alarm clocks and flowers on it's dash board. +449708,A laptop computer is propped up on a cluttered desk. +66427,A road sign on top of a stop sign +342765,Man and woman look into open refrigerator that contains drinks +121154,A surfer ridding a wave crouching down on their surfboard. +387250,A young boy wearing pajamas eating in a kitchen. +1592,A young girl on a beach chair kicking her leg out +467843,A small child with glasses is playing frisbee. +208793,a lady that is sitting by a table with a plate of food +96762,A woman walking across a street holding a pink umbrella. +123220,A calico cat is curled up on a mat taking a nap. +504498,"The rider, clothed in camoflague and ski boots, is sure to blend into the grassy area on his motorbike." +415420,A bearded man in glasses is celebrating a birthday. +371046,A large brown dog sitting in front of a paw shaped cake with a lit candle. +226417,Many people are driving motorcycles through an intersection. +484474,a very tall building with a clock on it +577870,a tennis player on a table on the court +148531,A blue airplane with a propeller is sitting on a runway. +54611,Two zebra's standing next to one another eating grass. +214124,a close up view of a pie with strussel toppings +481886,A pizza covered in leafy greens on a table. +236123,A brown bear walking through a forest next to fallen trees. +260275,A traffic light with car passing underneath on the road. +411436,A brown bear standing on a rock in forest area. +533013,A white polar bar chewing on it's hand. +249346,LARGE BLACK AND WHITE PANDA BEAR WALKING AROUND IN AN ENCLOSURE +127517,A row of surfboards sticking out of the sand sitting next to each other. +63796,A cell phone sitting on top of a wooden table. +414289,A woman talking on a cell phone while holding a cup of coffee. +292467,These are archways with mini lights and a clock +258346,"A dreary, rainy day by the water, with people under an umbrella." +120199,A freshly made pizza is on an oven rack. +532164,A group of factory workers next to a vat full of oranges. +501502,A airplane that is sitting on a runway. +190306,"Separate pictures show noodles, rice and a meat dish." +264013,Several rows of track with a 'direct rail services' train on the furthest one. +20178,a person on skis with ski poles skis in snow +103855,An old couple is sitting down on a bench together. +62692,A woman standing on top of a tennis court. +83761,A man and a little girl sitting at a table eating pizza. +60069,A person kiteboarding over waves in the ocean. +47651,A partial cake and chopsticks are on the table with a lego man. +526030,A kitchen has a stove with cupcakes on top of it. +42406,A runway for airplane with one dual propellor plane parked on the runway and a person walking away from the plane. +343937,A woman wearing a white hat and white coat snowboarding down a slope. +466259,"People are in a boat in the rain with umbrellas. +" +342380,A red kite sitting on top of a lush green field. +190033,A plate topped with broccoli chicken covered in sauce. +434897,A man talking on a phone with a weak beard. +81761,A tennis player in action on the court. +197652,A cage packed full of yellow parakeets. +1561,Small bird sitting on a skateboard posed in front of dark blue background cloth. +213438,A zebra standing on dirty area with trees in the background. +57597,A group of women playing a game of soccer on field. +321195,A car parked in a metered parking spot. +245902,The bathroom has two large windows with a ledge. +132161,Cut open meat loaf sitting on aluminum foil in an outdoor setting. +541123,four tennis players with rackets on a court +259497,Older woman looking down at the Wii remote +448897,A pizza sitting on top of a white plate on a wooden table. +69496,A plate full of food is ready to be eaten. +369541,A dog catching a Frisbee in the grass. +157321,A person riding skis down the side of a snow covered slope. +433243,a zebra and a giraffe stand next to each other. +371243,a couple of zebras that are walking down a field +189451,A piece of cake left on a plate +122766,A little kid riding a green skateboard with yellow wheels. +92558,A herd of zebra and buffalo standing on a dry grass field. +140860,a person sitting on the ground with a laptop +361103,A city sidewalk with people walking up and down +175878,Four people standing around outside behind a house conversing. +570998,A street sign posted at an empty city intersection. +247014,An older man is holding a baseball bat while pointing. +388880,a large boat is in the water by a dock +229643,"A man takes a picture in the bathroom mirror +" +541493,A white sink under a mirror in a bathroom next to a light switch. +506201,a couple of people on skis ride through the snow +390241,A white train car lays on its side in the dark while a man with a light is nearby. +431234,Close up photo of a magnification make-up mirror in a dark room. +89670,A waffle with cream and strawberries sits on a plate. +137577,A man is off the ground catching a frisbee. +469424,A cat laying on top of a wooden bench. +163309,Cut sandwich portions on plate displayed on blue surface. +201186,A woman is in a bedroom holding a wine glass. +437618,A large television and some chairs in a room. +283520,Two men play around on a nature trail. +173401,THERE ARE TWO COWS THAT ARE WALKING IN THE GRASS +277025,Man in black shirt sits in restaurant with desert and wine in front of him. +219904,A large giraffe standing in front of a lush green wilderness. +177452,Their are phones from different manufactures on the table +363640,A young girl jumping to reach a white disc on a beach. +401484,A woman in black sweater holding a glass of wine. +365735,A man that is standing on a tennis court with a racquet. +500477,A person in the process of sheering a woolen animal. +26398,A pizza box with slices of pizza on it. +554727,A man riding a skateboard through the air over a ramp. +404984,A cat that is walking underneath a television. +214197,A few people are skate boarding in a skate park. +531875,a jar of sauce sits next to some carrots +423837,Two jumbo jets display their company emblems on a runway. +384007,A dog out in a field with a herd of sheep. +331688,some street signs blocking off part of a road +241525,A white square plate topped with meat and veggies. +110562,A man and a woman sitting on a couch with laptops. +350214,There is a stop sign covered in snow. +233042,A group of men playing a game of soccer on a field. +321943,Vase holding some type of flower with large pink bloom +56932,A blurred train is going under a bridge. +522703,Looking down at a cheese and broccoli pizza on the stovetop +468203,"A table with teddy bears, sandwiches and other items." +471118, a street sign with the red light glowing brightly on it +533137,A young boy standing on the top of a sky slope. +502318,A man with a TV in the middle of no where. +546983,A crowd of people flying kites over a lush green field. +270239,a couple of big beds that are in a room +127751,A white and blue bus driving past houses on a city street. +158806,The dog is thinking about eating the sandwich. +436605,Four giant kites flying over a lush green field. +126030,Two big trucks are parked in a parking lot. +162332,two people standing next to a table with a cake +391214,A red surfboard is sticking up from the ocean waves. +356533,A white kitchen filled with a refrigerator freezer. +532571,A close up shot of a tasty looking deep dish pizza. +480509,A crowd watches as a man rides a skateboard in a skate park. +192520,A blue van passes by a cement wall with graffiti. +127997,A tractor trailer on one side of a road and a car travelling behind another car can be seen in the car's mirror. +335284,A metallic toilet sitting in a metallic stall. +208003,Two giraffe standing next to each other in a zoo. +109873,A giraffe standing next to a brick building. +518914,An image of indoor restaurant and raining outdoors +215324,a couple of birds are standing in a field +434129,Elaborate Toronto Blue Jays professional baseball cap cake +289423,Two younger people playing a game of frisbee. +428712,Two pieces of bread with a leafy green on top of it. +475387,A train traveling down tracks near a train station. +531970,A red fire hydrant mounted to the side of a building. +404088,An umpire and catcher kneeling down next to each other during a baseball game. +480605,An airplane flies up into the sky with the wheel out. +221199,A close up of the man holding a large knife against an animal. +540280,Photography equipment and a light sitting in a room. +578545,A pregnant woman laying in bed reading a book. +495332,a big field of sheep that are outside +68771,A brown bear sitting on top of a seat next to luggage. +154816,a couple of young kids play a game of basketball +142687,A man cooks pizzas in a fire kiln. +384671,A table with a bottle of water and slice of pizza +184659,The cake has two motorcycles on the icing. +537955,A brown dog standing on the kitchen floor looking up. +475423,One cow is nuzzling the head of another cow. +411841,A large jetliner sitting in front of a tall building. +487421,"A food closeup shows a blend of pasta noodles, corn, tomato bits, sections of broccoli, and croutons." +292789,a close up of a skate board on a tree branch +191893,A long train comes down the tracks through the city. +492914,A boy balancing on a skateboard in a parking lot. +234794,A vintage STOP sign in black & white +27969,A large woman sitting on a bench outside. +174511,A computer monitor sitting on top of a wooden desk. +347529,A bear or some type of large animal is gripping a tree. +137297,a tennis player wearing a red shirt is playing tennis +244050,A man riding a brown horse down a race track. +532919,A horse drawn carriage traveling down a street. +414008,A brown and white dog runs on some brown grass near a Frisbee that is just sailing above the ground. +169700,A clock shows it is just after 10:00 o'clock. +475890,A large clock towers in a downtown metropolitan area. +164330,People are sitting at a table and eating some pizza. +376284,A fire hydrant and some cars on a street. +330091,A snowboarder is sliding quickly along a snowy hill. +106389,A tabby cat siting on an orange chair +76484,a close up of a monitor with a mouse and cotrol +417085,A big cow and a smaller cow standing beside a road. +536370,A man flying through the air while riding a snowboard. +532575,A dog rests his head on the edge of a boat at sea. +55013,two guys and two girls watching a computer +214989,A baby elephant walking along a river near a grassy covered shore. +279621,a yellow and black train is coming down the tracks +521008,A woman in gold shies takes a selfie photo in a bathroom mirror +44476,A group of young women kicking around a soccer ball. +137028,a dog with shoes and a backpack standing next to car +226278,A man on a tennis court at night time. +365208,A black and white photo shows someone standing on a beach behind a curtain +168416,"a red humming bird outside at a humming bird feeder +" +227049,A city at night with people walking around. +580029,A traffic light hanging off of a metal pole. +210060,A woman on a bike with a baby seat holding a dog leash. +158660,Bowls of bananas and apples for sale in a cafe +331352,A small closed toilet in a cramped space. +526732,A bunch of vases are arranged in a store window +464534,a view of a bathroom area with a white long flusher and window behind it +181296,A person that is sitting on top of a motorcycle. +40064,"A narrow, one-lane street and a stoplight by a low wall" +504500,People standing up against their upright surf boards on the beach. +200720,A zebra displays its rear end and turns its head. +152686,Tennis player serving a tennis ball on a clay court +35222,A standing toilet sitting underneath a window in a room. +254172,"A woman with a giraffe , parrot and kangaroo near the eiffel tower" +488385,The motorcycles are parked on the side of the building. +120129,A brown and white cat resting on wooden furniture +516372,A fire hydrant that is sitting near a car. +515612,An old man sitting next to a graffiti covered wall while holding a music keyboard. +517861,Shredded pork sandwich with beans and potato salad. +393814,A white table topped with a laptop computer next to bowls of food. +236914,Two stuffed animals sit at a table with honey. +16502,A sheep standing on top of a rock. +373356,A photo of a man swinging a tennis racket. +530313,A group of people who are seated together. +21903,A man is leaning over a fence offering food to an elephant/ +175908,Two girls who are looking at some snow skis in the store. +442106,a pot on a stove with assorted cut veggies in it +503431,Sheep and rams grazing on a stony hillside. +4108,A table topped with trays full of hot dogs. +527670,A dog sitting on top of a couch with a smile. +384476,A kite being flown in the blue sky. +128180,a person talking a pic of pizza on the counter +35012,A fire hydrant on the street by a building. +286662,A person that is looking at a cake. +356428,A couple of people walking through a market filled with food. +466079,A pair of gray shoes are sitting on a bed. +382172,A horse wearing a protective cover stands in a grassy field. +482477,there is a bird that is sitting at the top of a branch +419201,A herd of animals grazing on top of a grass field. +136600,A lap top sits on a small desk with jars and candles around it +290078,A toilet sitting outside a building in an alley. +564337,Pizza sitting on a paper plate with a can of pop. +36990,there is a red and a yellow bus parked under a tree +575946,Small white toilet with spare rolls of toilet paper beside it. +217521,A cat walking past a wooden desk next to another cat. +106920,Four pizzas sitting on a counter in a kitchen +197859,A room with two beds and a nightstand. +323615,"A slender, yellow vase containing many purple flowers." +132652,There is a woman talking on the phone. +280972,A foot pushing a flush button in a blue tiled bathroom. +562834,A wooden bench next to a wall with a wooden door. +37865,A girl in pink shirt eating a chocolate frosted donut. +466945,A picture of a person walking down the road. +462315,A yellow truck that was recently on fire and put out by the fire department. +37689,There are two snowboarders in the air completing stunts. +299649,a white plane sits on a tarmac near a row of parked cars +332570,the portable device is displaying a very important message. +422464,A mattress leaning up against a wall under track lighting. +439007,a polar bear fully submerged in a small body of water +21396,A couple of cats laying on top of a brown chair. +341048,A panda eats a bamboo stalk in the forest. +293802,A boy performing a kickflip on his skateboard on a city street. +576987,"A person with his feet attached to a wake board, holding onto a para-sailing handle in the air." +363845,Bunches of bananas sit at the end of a boat. +497960,A black and white picture of three boys and two holding an umbrella +509699,A woman sitting in a chair in front of a TV. +578522,A crossroads sign with a car parked nearby. +136770,Two men walking down a street by a blue bicycle. +462614,A bathroom filled with fixtures and a shower. +567562,a family that is eating at a table +27805,A boy putting something in his mouth and smiling for a picture. +352794,Fruit in a jar filled with liquid sitting on a wooden table. +147259,A black and white dog is catching an orange frisbee. +83915,"A concrete building with towers, a steep in the middle and a clock underneath." +565813,A ferry going from one point to another point. +173274,"A man wearing glasses, dress shirt and a tie is smiling in content." +164788,A fancy birthday cake made to look like 3 pigs in the mud +521306,A boy with glasses playing a game with a Nintendo Wii controller. +217594,There is an image of a tv and a chair in the living room +497334,An open book sitting on top of a blanket covered bed. +38645,The umbrella is inside of a potted plant on the wooden balcony. +85183,A woman is entering a green lit room via wheelchair while talking to another lady. +355575,the hands of a man crawling out of a toilet +118344,A big wooden dining table filled with lots of food. +123176,A yellow and black train on a track. +149731,Old dirty freight train parked by itself near the tracks. +468063,Two people riding on horses at the beach +415408,A faded red fire hydrant sitting on the side of a street. +386089,An old man on the phone wearing glasses and a blue coat. +249227,A white bath and toilet image on a room wall. +341778,A selection of pottery vases in various colors +548275,A bird is perched on a rock in the sea water. +157918,A man sits on a bench and talks on the phone. +558671,A woman cooking food on a stove while a dog watches. +473250,there is a painting of a woman holding a red umbrella +119146,A man flying a black and yellow kite +191874,some people are playing video games in a living room +120412,A lot of traffic on the road in the city. +280612,A man throwing a tennis ball to hit with a tennis racket. +292810,Restroom full of many urinals with smell eliminators. +160394,A silver train traveling past a train stations. +538963,a bed room with a large bed and a laptop +464087,A baseball batter takes a mighty swing as the catcher and umpire look on. +480470,A barefoot woman flying a kite at twilight. +438304,An Adidas advertisement depicts a male and a female tennis player on the court. +346605,A refrigerator containing fishing worms sits on a floor. +287967,a street a street light a traffic light and some trees +509855,A fork is inside of a bowl of broccoli. +340175,A LITTLE ROOM AND DINING ROOM AREA WITH FURNITURE +356131,Two people sitting on a small sail boat on the ocean. +337354,A man standing next to a cat in a kitchen in front of a laptop computer. +214274,A man and a woman cook in the kitchen. +189919,A couple of men standing next to each other while wearing neck ties around their heads. +274655,this is a bus with an ad for a casino +252833,A man is talking on his cell phone. +565962,A cat outside a window looking at a Buddha statue. +338146,The kitchen has some of the best antique fixtures. +143582,a person riding a motorcycle on a race track +72000,Woman with big hair about to receive a hand stamp +16593,"Two men sitting on a couch, one holding a Wii controller." +502510,A passenger train is at the train station. +511379,A pole that has a clock on the top of it. +430756,A person brushes a tied up horse. +336667,A large clock sits in the middle of a flower bed on a street. +468171,there are lots of pillows on the bed. the light is on +245453,Someone releases a colorful kite to someone else holding the string. +375078,"A dried black flower in a long, tall black & white vase." +513574,Some people gathered at a dining table with some food. +306506,A herd of zebra standing on a green grass covered field. +391375,A girl sitting on a bench in front of a stone wall. +459634,People are riding on motorcycles on a scenic road. +487418,a close up of a person eating a hot dog +351297,a giraffe standing on a dirt road near a field.. +93604,A kitchen with granite counter tops and a large oven. +450364,A rug sitting on a floor next to a white bed. +572935,a giraffe is posing for a photo next to a tree. +77980,The inside of a refrigerator with lots of food in it. +449150,A cat is about to have its teeth brushed. +66231,a number of people in a kitchen preparing food +353001,A man walking past a group of ladies walking down a road holding pink umbrellas with his gut and moobs handing out. +323828,"Train with lights on, multiple track area, near over/under pass." +492609,Two pizzas with green vegetable toppings are on cutting boards. +477688,A row of motorcyclists lined up while passer byers watch. +323888,a large building with a large clock on the front +38048,A red fire hydrant on a city sidewalk. +72843,A red double decker bus parked in front of a tall building. +386370,A bench sitting next to a river next to a bridge +92173,A black and white cat laying on top of a desk. +221291,Young boy posing in front of a flying kite in the park +530500,A woman looking over a picture in a frame. +240655,A person on a skateboard doing a trick on a table. +197775,a van with the back open and appliances in the back +98431,a green and white bus pulling up to a bus stop in a city +448854,"Oranges, lemons, and limes sitting on a table" +412975,A woman walking across a street in short shorts. +535997,this is a clock on top of a tower +243912,A man sitting down holding a brown dog wearing a blue tie. +487898,A little girl getting ready to kick a soccer ball. +491902,Several people are seen sitting around and smoking. +34071,The photo of the double parking meter has a blurry city in the background. +135797,A living room furnished with light-colored furnishings is pictured. +97589,A table filled with plates of food sitting next to each other. +407198,One giraffe sitting on the grass and another giraffe standing up. +257169,A bathroom that has a persons hand holding an object. +371047,A young boy is doing a trick on a skateboard. +301011,Man standing getting ready to serve the ball. +543364,There is a table in the middle of the room. +412437,there is a man walking in the street holding a umbrella +8934,a laptop head phones and an mp3 player +384811,A man in a kitchen who is operating a blender. +30675,The train engine number 6309 is operated by BNSF. +501039,a black animal in water looking up with teeth out +319726,a tennis player reaching to hit a ball on a tennis court +985,A bus parked in a large parking lot +431173,A woman that is sitting down with a hotdog. +348243,A chubby black pony in a pasture looking ahead. +370042,Large assortment of small and large vases displayed outdoors. +375232,A lap top computer on a wooden table out in a backyard. +448535,A woman cutting a birthday cake surrounded by friends. +524642,A side table with a lamp and books net to a home library. +536716,Two zebra standing next to each other on a dirt field. +66320,a person holding a camera up to the window +205906,A nightstand with a couole phones and watches and clocks on it. +93297,A black cat with white paw laying in a hanging cat bed. +51258,A baseball player tossing a bat next to home plate. +509468,a teddy bear that is sitting in a seat +175593,A long table set for a Christmas seafood feast +462576,a plate of breakfast food sits on a table +167082,a person riding a skate board on a rail +533537,A clock outside in front of some buildings. +308332,A bedroom decorated with a blue underwater theme. +493102,Several kites flown above a field near a lighthouse. +286591,Snow covered benches near a body of water. +203781,A family standing next to each other wearing ski equipment. +556240,there is a very tall tower that has a clock on it +491106,A woman is standing in front of an old train. +551908,"A plated filled with a fish, potatoes and broccoli." +92332,A man holding and pointing to a jumbo remote control in clear package in a store aisle. +227482,A young man running towards a white Frisbee. +578099,A blue motorcycle parked on a sidewalk next to a street. +379086,Vehicle traffic in an uban area during winter. +225730,People on surfboards in the water riding on waves. +375211,Yellow bowl filled with white powder topped in red jelly. +376307,some people at an outdoor shop and some different fruits +41128,A parade on a street with several officers on motorcycles riding while confetti falls from the sky on them. +457735,A small toy that looks like a witch next to a keyboard. +265374,A man standing on a tennis court holding a tennis racquet. +529668,A young man is posing in front of a camera. +185903,A train traveling down the train tracks next to a train station. +581033,A man is scratching the cat on the head. +32724,a group of giraffes run across a field +113836,A couple of beds sitting next to each other in a room. +572571,a pitcher throwing a ball towards a batter during a Dodgers game +432378,A group of people standing outside of a bus. +505562,A beach filled with people and kites being flown +118546,Three cats are lying on an unmade bed. +33116,Man playing tennis in motion with crowd and tennis court +105786,A bunch of tables with blue cloth on them sitting in a big courtyard. +291412,A black cat sitting on top of a wooden fence. +125632,A guy wearing a wetsuit surfing a wave. +356623,Some people riding some motorcycles through a rock tunnel. +469635,A group of people with umbrellas on the street. +187001,A man sitting at a table in a kitchen with a laptop. +341818,A man sitting at a table with a plate in front of him. +373519,A bird sits on a wire over a street sign. +495894,A tall wooden clock tower with a clock on it's side. +194832,A television screen is displayed in an empty bus. +33052,a living room with a lot of chairs and a little bar in the corner +150144,A woman in vintage clothing carrying an umbrella +146830,A pitcher pitching a baseball during a game. +41011,A man in an English suit and bowler riding a horse. +33104,A group of people standing around each other in skis. +560646,A man standing on top of a paddle board in the ocean. +260974,"A table and chairs sit on a grassy walkway, with a pitcher." +480664,A water jug used as a vase to hold flowers +75976,A chandelier hanging from a ceiling over a table. +184295,A man holds a baby in his lap while the baby eats a banana. +124617,a catcher and a batter in a baseball field +490620,A little girl sitting by a freshly made pizza. +340573,A screen shot of a clock on a computer screen. +434006,Two young kids playing a game of frisbee on a beach. +309232,A brown horse with the word Autism written on the side of it. +167501,A dog skims across the water chasing something. +243034,A very tall clock tower towering over a city at night. +575500,Bananas in a bushel are displayed over some kind of tail. +168683,A man wearing headphones using a computer at a cyber cafe. +273684,Black and white image of baseball player about to throw the ball. +281221,a giraffe walking through trees on a sunny day +351287,A yellow dog is walking on white snow. +573605,One glass of wine is full and one glass is empty. +386661,Two blue park benches on a beach facing the ocean. +375409,A silver and blue Amtrak train sitting below tall buildings. +520918,A train pulls up as a man stands waiting alongside snack machines. +442952,A bench sitting in the middle of a lake. +37616,A man standing in a living room next to a chair. +210607,A boat that is sitting in the water. +288714,This looks like a bunch of burned food on top of burned bread. +140556,these man are standing near a fire hydrant +544565,A with plate with a chocolate pastry and whip cream. +187989,A group of jets are flying together in a tight formation +482022,The kitchen has shiny counter tops and brown wood-grain cabinets. +457687,A pair of remote controlled planes flying through the air. +251343,A kitchen with a black stove top oven and white cabinets. +352734,a small boy holding a fork with some dessert being shoved in his mouth +295837,A woman standing over a pan filled with food in a kitchen. +500471,A cat laying on top of a suitcase laying on the floor. +116517,A couple of doctors sitting in front of a sound board. +442861,A couple of men holding tennis racquets on a tennis court. +218561,A dog holds a frisbee with the side of its mouth +59383,A large kitchen with wood cabinets and black accents. +418219,"View down a city walkway and street, with grass, pedestrians, trees, cars on street and parked on side of street, a bench, and some buildings in distance." +11316,Man standing in front of the ocean in a wet suit with a surf board. +181655,A man and woman sitting near a table with a lot of food on it. +504415,A man walking across a dirt field next to a street with traffic. +296684,A man in a grey wet suit on a surfboard. +49060,A train sitting next to a loading platform with people standing on it. +131841,a slice of bundt cake sits on a white plate +56714,A banana sitting next to an orange and apples on a wooden table. +390215,A plate of chicken with herbs and steamed broccoli. +232173,Skis and ski boots sit together on a tiled floor. +343394,A girl jumping in the air under a kite. +460454,A man in white shirt jumping a ramp on a skateboard. +78720,People sitting on a patch of grass in sand with an umbrella +122549,A black and white photo of a man wearing several ties. +224595,I think that the plane has just taken off. +118598,Some colorful kites are flying against the cloudy sky. +329533,a couple of bananas and some other fruit +347740,A bathroom is photographed with a fisheye filter. +74120,a woman with a red hat is eating a hot dog +80659,Horses and their riders are racing in a horse race. +276840,The people are preparing to go skiing in the snowy forest +124876,a person riding a surf board on a wave +4283,Two birds that are sitting in a marsh area. +98268,"An old, weathered street sign that says One Way" +99053,"A bowl of noodles, meat and broccoli with a fork." +340368,A skateboarder is doing stunts on a park bench. +2684,A lot of zebras standing in the sand on a hot summer day. +49502,"An incredible picture of an individual in the stillness movement. +" +536683,A toilet in a room with a broken wall. +294537,A skier stands posing while two others are skiing towards him. +356968,A brown horse with blonde hair standing in an open field. +35671,A cow and a person on a horse in the dirt. +67558,A white toilet sitting in a bathroom next to a tp dispenser. +99186,A stop sign at an empty intersection in the country side. +112719,a cat sitting on an open striped umbrella +58778,a guy riding a skateboard at a skate park +323709,Large commercial cargo plane sits on tarmac next to radar equipment. +47819,A man standing behind a brown horse carrying lots of luggage. +112342,A dog in the water has a purple Frisbee in his mouth. +307531, a dog running towards a frisbee in the air +354744,A boat is washed up on the shore. +361656,a bunch of ripe bananas sitting on a table. +563871,A man who is sitting on the ground after just having thrown a disc. +519676,A motorcycle parked in a parking lot next to a building. +477655,A group of young men kicking around a soccer ball. +6074,A blue and white truck with pants in it's flat bed. +39976,These are the three types of pizza toppings available. +240784,A couple of bags of someone's belongings that were left unattended. +292347,A large clock is suspended from the ceiling of a narrow passage with metal bars on the side. +347352,A person playing with a WII controller for a video game +461408,A man and a woman open a pizza box. +248270,Two boats resting ashore on a wide river. +459440,A close-up of a drawing on a piece of paper next to a computer mouse. +50025,Two young boys sitting in bed together under blankets. +439443,A person riding a surfboard on a wave in the ocean. +62741,A jet in the air flying in a dark sky. +514607,an umbrella set up on a beach in the sun +350341,Grey bird in a wooden basket eating bread. +201477,An end sign on a hill with several umbrella structures. +39951,A young boy taking a swing at a tennis ball +438704,"At the picture is a scene of an airplane outside of a town. +" +535977,An oven in a kitchen with wooden floors and tiled walls. +389419,A man in glasses and tie pointing his finger. +197369,"Woman proudly hod,ing expired vegetables in bag of plastic" +486232,A hand is holding small red and green apples. +72666,A cloudy day with a few airplanes waiting to take off. +289180,A child holding a cellphone above field of grass. +515785,A young man is playing frisbee in the park. +364166,2 Zebras standing next to each other in plaines +486104,A baseball player holding a bat while standing on a field. +478759,A metal plate holding a half eaten pizza next to glasses of beer. +290130,A man riding a surfboard next to a wave in the ocean. +56250,A table with a couple of bears on it. +93276,a man in red is playing a baseball game +246105,A man and a woman cut a cake together. +44269,A metro bus at night at a bus stop letting people off on the sidewalk. +316000,A large horse stands outside of a barn and a silo. +297620,A large open room with a long white staircase. +163257,A man in a neon green shirt and black pants holding a pink umbrella. +248793,"Birds fly overhead in a gloomy sky above buildings, a brick archway and an ornate clock." +532145,A herd of cattle standing on top of a grass covered field. +383026,A bench sitting in a park next to a tree. +456725,A man taking a swing at a baseball +464033,A large tower that has a weather vain at the top. +331395,A man writing in a notebook with several partially filled wineglasses in front of him. +560064,A few people sitting on a bench in front of a doughnut shop. +368402,The woman in the kitchen is holding a huge pan. +4765,A man riding a surfboard on a wave in the ocean. +575909,The stop sign on the street is vandalized. +251824,A person sitting at a wooden table holding an electronic device. +166913,A woman is helping another play a video game. +553561,A couple of kids playing a game on a lush green field. +500703,People are waiting for the train to arrive +306159,point of view shot of man using a small urinal in bathroom +448697,An intersection that is close to a clock tower. +558107,A red fire hydrant sitting on the side of a road on a side walk. +453369,A gray cat wearing a colorful neck tie. +208867,A boat floating in the middle of a small lake. +367578,A man in a tie waits in a room full of people. +149184,"A kitchen with a stove, microwave, telephone, table and chair. " +258399,A boy running across a field holding a catchers mitt. +243331,A white horse looking out of a window at a building. +418816,A man waling his bike along a road with cars. +26992,Some people are sitting around a table and sharing a meal. +62297,A boy in a tie is bending down over a bowl. +64531,A man with a tie that has nuts and bolts on it. +480416,People sitting on a bench on a town's sidewalk. +318618,A basket of oranges and a cup on a table. +115077,Cows are grazing in a field in the shade. +214192,two motocross racers in the middle of a race +487351,a crowd of people in a park playing with kites and balls +399177,A clock that is on the side of a tower. +449327,A dog is sitting on a skateboard. +203661, Quaint kitchen with a wooden dining table +214255,An orange traffic cone sitting in the middle of traffic. +468525,a large plane is taking off near a field +140020,A man standing under a large clock tower next to the ocean. +308358,People are milling about on a city street. +535950,A couple of cows on a dirt road. +189820,A blue office chair sitting next to a wooden desk. +369259,Thee family is standing around the island in the kitchen. +360350,A person holds a surfboard on his shoulders. +11552,a bear walking in the woods next to some trees +174247,Three laptops on a desk in an office. +24805,A panda bear with its hand to its mouth. +172408,A man in black hovers over a skateboard while they are both in the air. +22646,A man is standing next to some train tracks +309424,An office area with two computer monitor and two hard casesset on a rolling chair. +487861,a bunch of skiers move along the top of a snowy mountain +305317,Several people standing in a green field together while flying kites. +407067,A skateboarder is doing a trick on cement steps. +412377,Two favorite kitty activities are sleeping and perusing the outdoors from a windowsill. +107228,Two green duffel bags of two different designs. +343218,a man with a tennis racket gets ready to swing his racket +156320,a bunch of people in a kitchen getting food ready +84968,A blue sign sitting on the side of a road next to a tree. +398304,The steering wheel of a bike with many gadgets parked in a mud room. +391722,A man serving another man a cake with candles on it. +573320,Two people are playing a WII video game. +210981,People feeding an elephant in a zoo enclosure. +434993,A man grinds a rail on his skateboard. +372817,a group of people with umbrellas walk on a side walk +266206,Partially open door leading to a kitchen from a hallway. +18888,A wooden bench in front of some trees. +446301,A beautiful woman in a short skirt holding a green tennis ball and a tennis racquet. +298316,A statue of Fry form Futurama holding a skateboard. +30793,A coaster is shown next to a remote. +371588,Yellow military jet making pass against gray cloudy sky. +121089,A large white airplane flying beneath a blue sky. +551861,A white and blue bird is perched on a tree branch that is sitting next to a bunch of bushes. +330986,"A human a doing something right now that is full. +" +252201,A child on a toy is approaching a fire hydrant. +361948,A man and woman sitting on a red bench +94002,A man riding a skateboard outside of a building. +302206,A couple of people that are riding on horses. +558955,A black and white soccer ball sits in the grass. +483130,The dog standing by the table is really skinny. +479477,A woman holding a bat over the top of a baseball base. +393068,a person drinking something near a tv +297108,A cat in a birthday hat is lying on a couch. +207431,There is a plate of mushroom pizza on a table. +831,A man on a skateboard is performing a trick at the park. +37670,A man holding holding a giant remote control. +277197,"A living room with colored windows, sofas and chairs. " +22488,A bird perched on top of a leafless tree under a blue sky. +135976,Laptop and mouse sits on desk in front of computer monitor +138704,A man in a living room playing a video game. +197111,Two cats are lying next to each other with heads on a pillow. +308167,A fire hydrant next to a low brick wall. +149832,A herd of cattle grazing on a lush green field. +314023,A person standing on top of a bed covered in a blanket and pillows. +403150,people playing baseball on a baseball field with an umpire +169736,a close up of a plate of food with meat +346821,A pitcher is about to throw the ball to the batter. +431594,Various trays of bath salts and a metal scoop. +290521,A herd of sheep walking on a cluster of dry grass. +31735,A red living room filled with furniture and two windows. +457766,A plow dumps snow into the back of a truck. +380516,an image of a child with headband with a racket +486521,A hood lifted on a Chevrolet vehicle with a teddy bear on the side. +23034,A man riding on the back of a brown horse. +82229,A modern flatscreen television sits upon a nostalgic console model. +305035,A couple of signs that are above a stop sign. +349676,A man taking a picture of two giraffes +235000,A man with a helmet riding on a motorcycle with a basket on it. +310369,A group of women sitting next to eachother. +265234,a very big boat that is in some water +196344,"A group of horses standing around in a field, grazing." +395634,A horse and carriage is on a quiet street as a woman walks down the sidewalk. +298433,a blue yellow and white jet parked and some grass +350799,"A bathroom with sink, toilet, and bathtub and black and white floor tiles." +211108,Someone with a cast on their foot and leg. +575081,A boy holding a game controller and playing a video game. +238291,Two black cats sit on a windowsill looking into the backyard garden. +318543,The young boy is doing tricks on his skateboard. +507879,A dark picture of a toilet with a small roll of toilet paper on the back of the tank. +361258,The beach is filled with blue tents and umbrellas. +368442,A giraffe and ostriches that are in the grass. +523418,A dog jumping in the air catching a frisbee. +513946,A beautiful young blonde woman holding a tennis racquet on a tennis court. +405195,This a case full of doughnuts and cinnamon buns. +198724,A dog that is standing on a frisbee. +223833,The cat rests on the bed while watching television. +438495,A room in the house has an all white surface area. +103870,A man kneeling down in front of an oven. +225175,A clock stand sits on the sidewalk by the road. +416269, a passenger train sitting on a track next to a building +521071,A little girl is holding a kite in front of a field of people flying kites. +456239,A woman walking down train tracks holding an umbrella. +374947,a stop sign altered so it says 'stop hammer time' +293071,"A red. white, and blue fire hydrant on the side of the road. " +176232,A decorative flower vase with lavender in it. +130645,A foreign bus traveling down a street in front of jeep. +31745,A dog laying down on a pillow and a cat in the suitcase with a water and food bowl nearby. +31521,a girl at a kitchen table looking at a laptop computer +476172,There are dental care supplies on a table +389933,A dog sitting on a couch with its head cocked to the side. +340422,The ties come in a variety of designs. +313647,A man that is standing in the dirt with a baseball bat. +116574,a woman in a black dress on a skateboard +570101,a living room with a couch a table and large windows +29151,A woman standing a surf board using a paddle. +540209,A man standing in a kitchen preparing food. +221477,A wild animal walking across a grass covered field. +15681,A hawk is standing over the remains of another bird. +203382,a bear that is standing in a pond +280022,A man hitting a tennis ball with a tennis racquet. +84643,An elephant walking around its enclosure at the zoo. +312316,A giraffe standing at attention in a zoo pin. +292419,A blue freezer refrigerator sitting in a kitchen next to a counter. +318888,A man holding a white puppy and a red leash. +468411,An orange cat standing in front of a glass door. +566502,"A white dish plated with corn, carrots, tomatoes, onions, olives, herbs and oil." +143440,some people and a snowboarder in a blue jacket +441695,a group of airplanes waiting on the tarmac +264819,Snowboarder riding in a half pipe performing tricks. +121989,A group of people sitting at a table eating food. +577564,A white toilet sitting next to a white sink. +282980,A group of people and surfboards in the water. +245232,A sign littered with stickers on a pole with a crosswalk button beside a large red building. +399605,A man riding a wave on a surfboard in the ocean. +562155,"A person in a car wearing dark glasses, a shirt, and tie." +363072,this trains station has a white building in the background +327388,The train is passing by the open field. +146448,A young child is holding a blue skateboard. +503081,A very pretty clock in the middle of a big room. +308026,A skateboarder doing a trick with skyscrapers in the background. +372317,A vintage red tour bus parked on the side of the street. +24403,An old red truck sits in a driveway. +51741,A white toilet and sink in a room. +248089,Some hands holding up some remotes to a screen. +121417,a woman is sitting with an umbrella outside +566436,A person sitting on a bench in a park. +253742,A woman standing next to a herd of animals. +319617,a hot dog on a plate next to two glasses. +322177,The snowboarder is laying on the snow with his board in the snow. +509451,A group of people posing for a photograph at a black tie event. +17313,A man pointing at something by people with glasses and wine bottles. +128602,A young child sits eating between two adults. +46173,A woman in grey shirt standing n grassy area next to black fence. +509194,A man holding a tennis racquet in one hand a lifting his fist in the other. +87230,a bed two lights two white pillows and some drawers +267224,Blue pickup truck traveling on a city street. +19667,Two soccer teams playing against each other on a field. +386879,A woman wearing a red tennis outfit holding onto a racquet. +52790,A side view of a train passing through a mountain trail. +26501,A double deck tour bus riding below the Big Ben Clock Tower. +367528,"A table with a bowl, pitcher vase, and coffee mug." +37119,Black and white cows stand around in a farm yard. +176542,A man that is sitting on a horse. +452121,a white toilet is laying on its side on the ground +476647,A crowd of people flying kites on a lush green field. +578330,A man in glasses is eating a sandwich. +387387,A yellow bus that is sitting in the grass. +4312,A man sits in a diner photographing his meal +401018,A woman holding an umbrella in the rain +293333,The white train is at a platform at evening time. +147681,A young man riding a skateboard down a metal hand rail. +99348,a crowd of surfers are all on a beach +29306,a dog sits in front of a body of water +440377,A black pan sitting on top of a counter filled with breakfast foods. +447991,A small bus driving down a street next to a sidewalk. +42201,The man with black outfit and royal blue necktie poses for a photo at the event +10107,There is a dog sitting down and yawning. +172979,A traffic sign hung upside down on a pole. +542510,Hauling items in a wagon is a lot easier than carrying them. +400178,A sign on a road that resembles a chess board. +543581,A dog is sitting on the couch in a living room. +559312,The man is walking with a bicycle covered with small green bananas. +271728,A fat orange cat on a couch beside a TV remote +76822,Skiers perform on a lighted half-pipe beside a mountain. +559037,a skier with a helmet and green ski poles +183379,Large jetliners parked on an airport tarmac outside of an airport. +202138,A lot of flowers that are on a table. +239029,A man standing next to a woman holding a game controller. +179229,A small white boat driving past two light houses. +340004,The cat is sitting beneath a motor bike. +313176,An unfrosted cake in a metal pan with green spots on top. +329931,A woman opening up the refrigerator looking for something. +463876,A desk with a white laptop and black computer keyboard. +262396,A cat is sitting on top of a computer chair which is covered in hair. +144798,a close up of a toilet and a bath tub with toys +369997,A man riding a motorcycle across a lush green park. +496845,A truck that is pulling a boat behind it. +231952,A giraffe drinking water and some elephants near a watering hole. +560466,Up close view of a model train set and its surrounding area +470699,A woman and a black and white dog on the beach. +87199,A man in costume talking on a cell phone. +194063,A man swinging a tennis racquet at a tennis court. +270136,A large passenger jet sits parked at an airport. +405444,A female child putting cheese on poorly made pizzas. +296151,A pile of stuffed animals sits on a bed. +473124,a glass of liquid is on a table +208671,Two giraffes that are standing in the grass. +67180,A woman sitting on a wooden bench on a wall. +552503,Three pots of bright colorful food cooking on a black stove top. +240173,A red traffic with a mirror hanging off the side of it. +539874,A man wearing a red and black neck tie. +109750,A small metal motor boat on a lake. +32960,A red train engine with a large golden bell +350122,A busy bus station with ramp going downstairs. +45392,A young boy bending over holding a catchers mitt. +340278,A man and woman are standing outside holding a cell phone. +189267,An armed person is standing in a snowy field. +164548,A woman shopping for different bottles of wine. +333712,A small pizza with toppings and a pizza cutter. +551957,A young man does a kick flip outside +215151,A man flying through the air while riding a skateboard. +505243,A clock sitting in a chair next to a table. +306412,A woman is standing next to a wall with a blue umbrella. +322824,A one way sign that is on a pole. +332582,A snowboarder is gliding backwards down a slope. +3793,A bus is parked in front of a building. +241326,A big chair with a gray cat laying on top of it next to a black dog. +2562,A man hitting a tennis ball with a racquet. +376193,A hand holding an apple in your left hand. +190767,There are four cows eating grass in a field +476008,a bunch og pumpkins are laying in a field +221893,A bottle of beer on top of a table next to a glass full of it. +65124,a messy bathroom with a toilet and toilet paper +491215,The snow boarder is near the top of the ramp. +488387,A blue motor scooter with a cat sitting on it. +344222,A jar filled with different types of fruit on a table. +94663,A power line with lots of different components. +568107,The motorcyclist has his hands at his side while riding swiftly down the road. +517795,two sheep next to a wooden structure behind a fence +231163,Train stopped at a depot with people milling about. +495160,A baseball player running to first base during a baseball game. +112818,A slice of cake on a plate decorated like the bottom of the ocean. +54655,The dog is achieving high jumps in the yard. +566276,Four children standing behind a fence petting a horse. +568318,A bottle of wine sitting on a desk calendar +158494,there are many giraffes that are seen here +401682,A bear is dressed dup to coordinate with the Christmas display behind him. +41077,A man flying through the air while riding a snowboard. +248965,A young girl holding a colorful kite on a sandy beach. +545594,A woman with a red backpack is on a bus. +385190,Street art painted on the wall in an asian country. +41247,people enjoy swimming in the waves of the ocean on a sunny day at the beach. +133476,A plate of a roast beef soda and cola in a glass cup. +168847,A small cat sitting on a chair by a window. +481628,Eight swans are swimming in the calm waters. +43816,A batter getting ready to hit his pitch. +299116,A little girl posing for a picture while eating food. +540531,A large clock tower towering over a city. +450655,A funky looking clock with a bottle next to it. +154867,A sewage lid on the ground with a para sail chute in the background. +344555,A small arrangement of tools used for sewing. +503765,Two vintage cars are parked at a car show. +298718,A train and its operators going down the track. +77394,a couple of people that are sitting on a couch +461821,a brown black and white dog grass and a frisbee +538741,A ski instructor is getting two people set up in their skis. +138549,A white plate on top of a table covered in food. +301014,two cats sitting side by side eating out of a dish +460010,A man is hugging two sheep in an enclosed area. +505739,The man is driving the horse fast +117466,A little girl hugging another child next to a picnic table with food. +300403,PEOPLE WAITING FOR DINNER IN A BUSY RESTAURANT. +451879,"Baseball players in action, one person dressed in green running while the others in white are looking and reaching toward the ball." +53223,There are billboards on the side of the road. +253489,There is a small white vase with colorful flowers in it +125458,A tray filled with two foot long hot dogs and a regular hot dog next to onion rings. +261207,"A smaller banana, is pealed and in someones hand. " +210782,a man standing next to red checkered tables near trash cans. +365317,A man that is standing on a court with a racquet. +234660,Two white bullet trains parked at a train station. +506987,A man sitting in a car holding up a cellphone camera. +577091,a laptop on a pure black table with speakers +23446,Adult man sitting at table while using electronic equipment. +300880,"A picture of a wooden table shows dishes, utensils and water glasses along its periphery and a plate full of food next to a candle in a glass at its center. " +551383,The person on a bike is under an umbrella to protect herself from the rain. +1626,Two smiling young people playing a game of Wii. +544456,A young person on skis lies in the snow +163314,People are walking in front of some shops. +521550,A harbor that has a large number of boats docked. +71306,He was standing in the kitchen by the stove talking on the telephone. +570643,A woman cutting up a salad with a knife on a table. +316031,Black and white photograph of houses and a clock tower. +314313,a busy road that is next to some buildings +389843,a couple of green chairs in a room +276024,Men riding on horses and with other ones. +259728,A stop sign on a pole near a road. +343967,A monochrome room with a fireplace and living area +237964,A building in a grassy area with a sign indicating which way +45721,A large cat laying on top of a computer keyboard. +209570,The carrot cake is on a plate on the table +449132,A black and white spotted horse in a pasture. +190015,A truck parked near a tall pile of hay +547224,Orange and black uniformed worker standing outside of moving train. +531710,A sheep sniffing the back of a cat in the snow. +257382,a big yellow school bus parked in front of some trees. +403943,A man holding a umbrella on the sandy beach. +357824,Baby birds walking in a swamp and over reeds. +162113,A gas stove next to a stainless steel kitchen sink and countertop. +228300,A group of young men sitting next to each other on a wall. +579925,A batter sings his bat at a baseball game. +497514,A person going down a half pipe on a snow board. +432588,a close up of a person holding a hot dog +479334,A stop sign has had the O replaced with George W. Bush Jr's likeness. +412304,A group of horses pulling a man on a cart. +237463,The person is holding one of two surfboards on the beach. +537241,A big thick tasty looking pastry with icing on it. +484551,THERE IS A PERSON THAT IS SITTING IN THE BOAT ON THE WATER +498733,A man throwing a frisbee in a dry grass covered forest +206958,a room showing a toilet and a sink +119469,A herd of sheep grazing on a lush green filed. +50054,a man with a cup is standing near a cow +43286,An orange train traveling past tall buildings and a crowd of people.. +67315,A close-up picture of a man wearing a tie. +490714,A person is doing a trick while riding a skateboard. +133131,Graffiti written on an all way stop sign. +82673,A small car is parked in front of a scooter +122229,Two men taking care of an elephant near stairs. +326898,Two people are standing in a hallway while one person checks their phone. +440706,a close up of a small bird on a tree branch +148508,"A black and white picture of a busy street, only red is in color, a red double decker bus drives down the road. " +217312,two women stand on a train platform waiting to board. +492524,A person standing and watching a kite fly in the sky. +274438,"Kite flying in the breeze on the beach. +" +289512,A woman riding a horse in a field. +180563,Horse standing on sidewalk with white carriage in city traffic. +285820,A living room with a brown leather couch and wood flooring +89880,Two dogs are playing together on the grass +477474,A laptop open with images on the screen. +141205,A woman sticking her tongue out to a young boy. +58816,a bath room with a toilet a stool and handle bars +543193,A very big lady riding a bike on the street. +110560,A bathroom sink under a mirror in a bathroom. +339469,A yellow fire hydrant sitting in the middle of a sidewalk. +463174,A young woman in pink leggings playing tennis +46571,a bike that is parked next to a brick wall +281296,a woman and her cat nervously look at the camera +192007,"A baseball game in progress, photographed through a fence." +211115,A red plate topped with two bacon wrapped hot dogs. +544611,A crowd standing around a bed next to a building. +161743,A group of people flying kites on top of a beach. +406813,A mattress is laying on a shiny wooden floor. +361123,A sheep in the snow with other sheep around him. +526456,A herd of cows standing on top of a field. +248152,One person on a beach flying their kite in the air. +323356,A close up of a tooth brush and a blurred background of a man in a blue jacket facing the opposite direction. +213693,A blonde woman standing in front of a red double decker bus. +404263,a man riding a dirt bike in the sand +182825,A train drives along the tracks amidst many cranes. +44749,A bunch of bananas are sitting next to several pairs. +44718,A couple of motorcycles parked next to each other. +442688,A plane on a runway at a small airport. +259189,Blue water with a boat and two people in the water. +526425,A brown and black dog holding a frisbee in it's mouth. +576704,A chef chops up ingredients in a pot of stew. +323515,A platter topped with sliced vegetables with ranch dip in the center. +183390,A cow laying on top of dry grass in a pen. +420702,A horned animal is eating weeds at the side of the road. +200945,A hot dog and a pickle on a tray. +527002,a man that is surfing in some water +547196,Men and women sit around a table at a dinner. +107427,A toilet in a small room with a window and unfinished walls. +28290,A group of people standing under a white tent on a beach. +553558,A white sink sitting underneath a mirror in a bathroom. +118181,A woman sitting on a couch in a public restroom. +225757,A desk with multiple computers and cell phones. +398236,A big very tasty looking sandwich filled with some meat. +22656,A man is taking a picture of his bathroom sink. +411405,A teddy bear sitting at a computer desk with headphones on. +210099,An orange cat sunning itself on a lawn chair. +264654,A set of three pieces of luggage filled with clothing. +301494,A close up of a cake with a toy car driving up a hill of brown icing. +449424,There is a bedroom with a large bed and a cluttered desk. +512760,A simple bathroom has various classic decorations around it. +274216,A man riding in the back of a white and red boat. +9527,A picture of a messy desk with an open laptop. +557510,A white vase with a painted blue flower border on a blue towel. +546222,A man with a beard is close to a farm animal. +56344,Two computer monitors on a desk with a keyboard and mouse +404568,A seagull standing on the sand of a beach +412373,A semi truck riding on top of a faerie. +128262,An old rusty bus is parked next to a small church +3661,A bunch of bananas sitting on top of a wooden table. +202963,A tennis player serving a ball on a court and a separate image of his sneakers and uniform. +198590,Two trucks are parked in front of a house. +515355,A fried donut sandwich that's on a plate +302137,A bus that is sitting in the street. +459912,Rows of motor bikes and helmets in a city +504341,An adorable dot resting on a beach near the ocean. +60049,A street sign is filled with various stickers. +19324,Black and white photograph of officers on horses. +142903,A stereo sitting on a metal shelf next to a bright light. +209018,A man sticking his tongue while wearing a pink sign around his neck. +291209,A man walking on top of a baseball field wearing a catchers mitt. +392260,Two zebras eating some grass together in an open area. +27484,A group of people walking on a street and sidewalk. +225130,The statue of a painted elephant with a target on it. +391978,A TV sitting in a room at the end of a bed. +38919,Those horses have stopped to rest along the side of the road. +307683,A blanket that has different types of food. +546965,A truck that has several cars on it. +291460, A man is placing items on a pizza in a pan +367424,A large metal spoon sitting on top of a cup. +191301,there is a chocolate cake and ice cream on a plate +138220,A man with a tattoo on his back and a frisbee in his hand. +119729,A bunch of four bananas that is turning red. +295403,A man helps a woman sit on a bike. +323602,A gray and white puppy on a leash atop a skateboard. +56988,Top down view of a bathroom with a toilet and trash can. +552148,A man and a woman playing Wii boxing in a living room. +142337,a bathroom with a sink and a toilet +568879,One of the two monitors next to the laptops is on. +539129,A single zebra that is grazing in a field. +374551,There is a tiny bird on the branch. +69757,A group of people cutting cake at a table. +171255,Several horses on a beach near a tent with the ocean in the background. +469002,A box filled with six donuts separated by dividers. +558645,A person is holding a small green cell phone. +111526,A man riding skis down the side of a snow covered mountain. +182050,an open fully stocked fridge with eggs and soda +173598,A pitcher throwing a ball during a baseball game. +477955,a para sailor launching his sail at the beach. +522791,A man with tongs in front of hot dogs and buns. +424793,a group of people standing around while looking a bunch of little birds +240637,A dog sleeping on bed against the wall. +95772,A pile of rusted metal junk laying in the weeds. +4840,a man does a trick on a skate board as a young kid looks on +18426,A woman that is sitting on a motorcycle in the grass. +504091,A man holding up a tennis ball with a racquet in the other hand. +776,"Three teddy bears, each a different color, snuggling together." +125017,"A small, well organized desk with a computer and books." +445135,A man standing on top of a tennis court. +304099,Luggage moves along a conveyor belt at an airport. +177420,White counter top sink with wooden cabinets and a mirror. +13769,A white toilet sitting in a bathroom next to a white wall. +15810,A man in a red shirt in a bathroom with two mirror and a photo +294035,A boy standing up on a open refrigerator. +283768,a person standing next to a trindle bed +356877,a young female holding a tennis racket in a tennis court +487141,The thin vase on a table has flowers in it. +63516,A couple of horses standing on top of a grass covered field. +198641,A black cat laying on a white lap top. +275215,A man in a beanie sitting with a red and white snowboard. +267625,The man is wearing a hat and tie of a man wearing a hat. +355905,A white dog is on a sandy beach while the sea foam washes ashore behind it. +256660,"A plate with brocclie, carrots, and some type of meat with gravy on top." +344325,Helmeted person taking a tight corner on a motorcycle. +199634,a open kitchen with white color and wood +558840,"Tray of food disguised in car, on restaurant counter" +301641,A person is driving a speedboat quickly through the water. +113588,several young students working at a desk with multiple computers +231341,An elephant in a field with white birds +240393,"A dog laying on desk next to keyboard, phone and monitor." +417547,A baseball player pitching a ball to a batter. +379584,Two sheep standing next to each other in a barn. +121326,"A rather large heard of elephants, including a baby. " +34993,An older man sitting at a desk looking at a laptop. +276673,A boy holding a baseball bat watching a ball. +184474,Wooden bench on hillside near grassy sloped area. +332844,a woman standing on the beach with a dog +446850,Two people who are playing tennis on a tennis court. +498716,Two cats laying near a vase and two candles. +143320,A group of surfers dressed in black riding small waves. +130438,A sandwich is sitting on a paper plate. +179898,A little kid holding up two hot dogs in buns. +134807,A man wearing a white shirt and a flowery tie. +536428,A group of men are playing frisbee in the park. +463825,A cat climbing into a bathroom sink looking at someone +376603,A birthday cake that depicts a small mountain with cars driving up it. +116455,a motorcycle that has some sticks on his back +19456,A man carefully places the food on the pan as a small crowd watches. +400202,A yellow double decker bus on street next to buildings. +120977,A city full of buildings under a smoggy sky. +147835,A green pasture with lots of animals in the foreground and mountains in the back. +415360,A puppy laying on a skateboard on a brick sidewalk. +348701,A person doing skate tricks in an outdoor park +522393,two people in a wooden boat with sails on some water +553990,A young person ridding a horse jumps a gate in a competition. +162363,a male skateboarder in a black and white shirt doing a trick +242007,A cat laying on top of a bag in front of a camera. +280464,two people walking in the rain holding open umbrellas +318730,A pair of scissors cutting a piece of string. +485148,The horse eats hay near a cat standing in a doorway. +44352,A large metal green clock hanging from the side of a building. +194716,A woman holding a small girl with sun glasses on her head. +383842,"A lady hold a game controller, pointed towards a laptop." +381682,A man holding a wine glass in order to smell the wine +358231,The two little girls are snuggling under the covers in their parents' bed. +286920,A herd of animals walking across a grass covered field. +129492,Two small children holding remote controls while sitting on a floor. +31202,Skier dressed all in white carrying his skis over his shoulder. +302787,A city at night filled with lots of traffic. +14004,A man sits at a full dining table. +471087,a man that has a shirt and a tie +574184,"A cat laying on a bed next to an opened laptop. +" +345884,A group of young men riding skateboards in a skate park. +330500,A cat standing in front of a TV looking at an image of a mouse on it's screen. +40620,A bus driving down the road near a church and traffic light. +475184,Two young men posing for a picture holding their surf boards with the ocean in the background. +208991,A couple of red motorcycles parked in front of a building. +357808,A motion blur of a person riding a skateboard on the street. +460378,The kitchen counters are almost down with the remodel. +456199,A young man riding a snowboard down a snow covered slope. +98416,Sheep in field by barn with fence and car. +255691,A living room filled with leather furniture and man laying on the ground. +50942,two males on computers and a gray keyboard +32677,A dog and a cat sleeping next to each other. +552902,a zebra grazes on some green grass next to some trees +404988,A line of benches that are snow covered +105872,An older black and white picture of a cue of people boarding a bus +516868,A kitchen scene with focus on a sink and oven. +556131,a man in a red tie and hat is holding a large fish +242400,A woman standing beside a Christmas decorated street post. +575958,"Several sheep stand in an empty field, looking at the camera." +282155,A big dog is resting halfway out of the window. +474003,A bathroom with outdated fixtures and a clothes hamper in the middle of the floor. +235064,A brown bear walking on a ledge with trees in the background. +223243,A baseball player catching a baseball with his glove. +38029,A float in a parade on a sunny day. +415001,A group of baseball players are giving high fives. +526892,A man touching an iron board in a room filled with other items. +107814,Zebra roaming through the grass with others in the distance +357743,The chef is preparing many flatbread pizza's for the lunch crowd. +416337,A person standing by a truck with many bananas on the back. +317439,A large brown bear standing next to a wire fence. +257767,"A keyboard, mouse, speakers and monitor on a desk" +515022,A red and yellow train on the train tracks. +442245,A group of young children kicking a soccer ball around a field. +380802,A child holding a bat walks back to the dugout. +288862,A man performing a trick on a ledge on a skateboard. +167166,A semi truck unattached to a trailer sits in park +322968,A clock is situated atop a colorful tower. +425608,A herd of sheep standing on top of a lush green hill. +447038,A bathroom showing a sink and a toilet. +248129,A red and blue truck driving down a street. +338019,a webcam on a tripod near a laptop +470658,A man holding a bob marley kite in the air +365214,A book sitting next to a cup of coffee on a bench. +39731,a skateboarder in a black shirt doing a trick +578088,A cat has headphones in its ear while curled around the cellphone +364075,A couple of giraffe standing next to each other. +496597,Two people riding a small boat across a massive lake surrounded by mountains. +289264,A brown dog with it's head hanging out of a window. +447160,A person flying an elaborate shark kite outside. +478980,A man riding a skateboard while wearing a helmet. +199881,A man using a remote while two other people look on. +47395,A white bus route sign hanging from the side of a black pole. +107481,two giraffes standing next to each other with a fence between them +280760,A little girl that is laying down in a bed. +466901,A soldier standing in front of a table with bombs sitting on top of it. +182179,A wooden bench sitting on top of a grass hillside near the ocean. +375286,A large group of people walking on a street. +87742,A large glass vase with some flowers near a big window. +197681,Laptop sitting on top of the table inside an open room. +315195,People are running through the water spraying from a fire hydrant. +323979,a baseball field with a pitcher hurling a baseball to the plate +227851,An elderly woman fanning herself while sitting outside. +560272,one plane flies upside down over another plane +145700,Four green traffic lights on an empty road. +47740,A man lies on the beach while someone else holds a kite. +244931,A snowboarder sitting in the snow with his hand up +115765,A group of young women standing under trees in a park. +348720,Two cats on a toilet tank looking out a window together. +410712,A yellow and black traffic sign with buildings in background. +243213,A man holding a tennis racquet while standing on a purple tennis court. +573549,People are gathered under a female impersonators sign. +146723,Soccer player returns the ball from the goal. +40729,two people are cutting a cake and plates +399415,Two women who are standing in the grass with a frisbee. +352480,A wooden table topped with vases full of flowers next to a brick wall. +240301,Longhorn cows stand or recline in a barn. +512793,A red tray of food on a table. +20979,A blue and white bus parked in front of a motorcycle. +577160,A lovely dinner and a bottle of wine +500316,A woman riding a pair of skis and reaching towards a dog. +515742,A girl holding a stick with a hotdog on the end of it roasting it in a fire. +2014,A guy stops himself from falling off of his skateboard. +579918,There are several multicolored sun umbrellas and this boy is holding one +402233,Many people are together in the kitchen. +69969,A restaurant full of people sitting on benches +569997,The television stand has many remotes and electronics on it. +328464,Lone ice boat sailing near a dock on wide frozen water. +65567,A highway sign sitting on the side of a highway. +55280,A group of black and white cows in pen in a barn. +28850,a big bed with a lamp and bedside table and sliding glass leading to a balcony +509891,A man scrubs down an elephant in a water hole. +456638,A beautiful woman in a black skirt getting off a train. +327918,An oven with some pots of cooking food items. +73491,A man swinging a baseball bat over home plate. +435312,a person taking a photo of a traffic light on a city street +117563,Two men standing in a living room holding game controllers. +416326,A blue basket filled with green leafy vegetables. +236884,A young boy holding a slice of pizza in his hands. +16896,The kitchen is clean and ready to be used. +267683,a woman in kitchen cooking chips in fry +265313,Two cat lying on a floor playing with each other +139108,Some horses are grazing in a field next to the water. +79930,"A man, a woman and a child ride a motorbike together in front of a small building." +386277,A lemon hangs from a small tree limb near several leaves. +274864,The clock tower is in the middle of the street +218687,A large frosting teddy bear sitting on top of a pink cake. +140007,A girl in the snow wearing vintage ski equipment. +205776,A bear laying in a canvas type net +54761,Three young boys sitting down with some luggage. +209972,A sail boat stuck in the sand on the beach +260266,The traffic signal is at the intersection near a large building. +575222,A group of children ride on a children's train. +553447,a herd of zebra in a field with one staring at the camera +190007,this is man riding a wave on a board +247378,baseball players playing the game in front of a large crowd +345869,THERE IS A TOWER CLOCK THAT IS ON DISPLAY +213579,a person sitting and holding a mug and a book next to a table with a slice of cake on it. +265059,A giraffe in front of a large amount of plant life. +475634,a cat that is sitting on a couch next to a remote +419323,A giant blue gummy bear sitting next to smaller gummy bears. +261186,Muddy elephant with large tusks in natural habitat. +438220,"A silver, blue, and orange train is moving past a platform at the train station." +460390,Many skiers are descending the snow covered slope. +60126,A bowl filled with granola and banana slices. +57238,A white refrigerator freezer sitting inside of a kitchen. +355394,A surfer is riding a wave in a green ocean. +353577,"this is a group of people standing near a river +" +356400,A sink and counter in a small kitchen. +68993,A leaned over stop sign in a snowy parking lot. +298736,A man positions one foot on his roller blade and the other in midair. +544629,a child a a table with a large cake +288041,A man and a woman watch as a young man plays video games. +322106,A woman sitting next to a man next to luggage. +509807,A kitchen counter with dishes dryin g on the stove +498971,I think those are all considered sailboats in the water. +407286,A trio of dogs sitting in their owner's lap in a red convertible. +38586,q close up of three men wearing suits and neck ties +234590,"a bathroom with towels , lights, and a sink that is clean " +460379,"Two Giraffes are in the wilderness, possibly eating. " +366630,A vase of light and dark purple flowers in a white vase. +545756,A man holding a racquet on top of a tennis court. +70471,A man sitting in a chair holding a baby who is chewing on a remote. +491098,A formally set dining table is adorned with fresh tulips. +188509,Blue scissors cutting up a plastic credit card +151000,A woman taking pictures on a busy street. +79446,Three piece fixture bathroom with window over the bathtub. +315474,A cooler filled with large beer cans and bottles for sale. +239444,a man placing a pizza inside an oven +103584,A brown dog on a bed looking towards a bright window. +382030,A wig sitting next to a pair of shoes on top of a table. +16704,A large gray elephant standing on a lush green field. +528524,The brown cows walking along a path in the field. +33158,A man hitting a baseball with a bat. +55432,Crowd of airliners parked at a terminal with service vehicles. +154254,A cat curled up on a bed sleeping with a man sitting in the back ground holding a laptop and watching the cat. +348982,A woman in a brown jacket holding a kite in a field. +551215,a tennis player running to get to the ball +315868,A motorcycle parked next to street with little to no traffic. +560367,A white toilet sitting next to a toilet paper roller in a bathroom. +126995,A man taking a swing at a tennis ball +167952,Many different foods on dishes on a table +335119,A car and a bus behind a fence. +270554,A close up view of some very tasty looking food items. +578492,Two women standing next to each other while holding up a mirror. +207323,A Miami Air airplane flies against a blue sky. +512220,A man sitting in front of a doorway holding a cell phone. +192181,A baseball player standing in a field on a baseball field. +198625,The person in the blue shirt has a plaid neck tie on. +341603,there is a woman holding a very large donut +184771,A gold and white dog sticking its head out a car window. +143503,Two men are on horses in the street near other people. +271997,A photo of a young male in a suit jacket and tie. +435316,A cat watching water go down a sink drain +51540,A pile of fresh produce sitting inside of a store under a scale. +463781,one airplane on a landing strip next to a green field +486964,A zebra standing next to a baby zebra as it feeds. +290750,Lots of people stand in a busy kitchen. +230212,a nice train travels next to some trees +107564,A team of young children playing soccer. +11567,a tennis player with a racket on a court +160913,A girl lies on a couch with food in her hand. +484573,A pile of food on a white plate. +154798,A group of people walking on the beach carrying their surf boards. +134856,Three people on horseback ride along the beach while waves come in. +416795,A slice of pizza on the table with a cup of soda. +38034,"An office with a computer, printer, scanner and many other technologies." +523560,"A plate topped with meat, vegetables and beans." +589,A person doing karate in a field at night +520124,some people are standing together around some food +67307,A cat laying in an open suitcase that is on a bed. +416700,a man is reaching back with a tennis racket +109340,The blue bus is riding across the street. +428191,a couple of elephants that are standing next to each other +541474,A snowboarder in a colorful jacket racing down a slope. +466596,There is a cheese pizza inside of a pizza box +204381,The white polar bear is standing near a tree branch. +503841,two traffic lights in front of a huge building +27517,A person holds a flip phone displaying the screen. +359925,A horse is pulling two people in a carriage on a street. +537672,A black refrigerator freezer inside of a kitchen. +514083,Man on skateboard riding around a garage next to car. +340844,A little boy wearing a tie and a blue sweater. +509262,A man hold a young boy and an orange Frisbee. +325593,Man holding a skate board in a park +185943,A view of a bus sitting on a street corner in a city. The picture looks old. +474571,A smart phone sitting on a table next to a bottle of corona beer. +32464,a man on a skate board is at a park +463783,Two men and a woman sit on a park bench +211203,Sandwich next to cooked bacon on plate with hot beverage. +286422,Couple on sailboat with dog on open waters. +237263,A bouquet of flowers in a vase sitting on a table. +470115,"A hotdog sandwich, soft drink, and other menu items at the food court of a large supermarket." +156751,A flamingo standing in front of water and plants. +426453,A woman holding a tennis racquet on a tennis court. +391142,Two pink flowers in a yellow colored vase. +173211,Muffins sit in a pan on top of an oven. +146568,A little boy is standing near a lot of toys. +207803,A marina with boats docked and a city view +422740,A long train alongside a brightly it train station. +76329,"A clock with the word ""Frisco"" written on top. " +548555,There is a chili dog in the bun. +487692,A man getting off a double decker bus +417588,A multi colored parking meter sitting in front of a stairway. +204994,a giraffe is looking over a fence at a man in sunglasses +50578,An orange is hanging on a green tree +192730,Three cows are standing on the pavement next to a gate with three structures in the background. +335954,two cups filled with veggies and nuts +304361,A little girl holding a game controller in a room. +488977,A baby is playing in bed with a laptop +345560,A woman is seen in the rear view mirror of a motorcycle. +379156,A wild animal sitting on some rocks in a field. +419859,A cardinal sits on a wooden rail in his home environment +571029,A man lunging to the ground after a white frisbee. +548179,A very small cute kid with a cell phone. +109753,A yellow clock that is on the floor. +526126,A small kid trying to do a trick on his skateboard. +408047,City bus loading on a busy metropolitan street. +272666,A young boy wearing camouflage sitting in a doorway. +26448,Three small skiing figurines posed on cauliflower. +149962,A man doing a trick on a skateboard +526536,A deep dish pizza sitting on top of a white plate. +568082,The big bear is laying down on the rock in the sun. +405526,A vase filled with red flowers sitting on a counter. +268350,Girl walking through a living room with a huge leather sectional. +94317,Ornate cabinet displayed next to kitchen sink in residence. +222440,A log sitting on a field next to a river. +502732,A metallic refrigerator freezer in a kitchen next to a cabinet. +308235,Four lambs standing on a hill top with trees. +562073,A hipster emo lady standing next to a hipster young man. +63565,A group of people enjoying a day at the beach. +427055,a big clock on a blue pole in a small downtown town +450308,A man stands with his bike in ankle deep water in a flooded city. +502844,A young man rides a skateboard on the sidewalk. +554859,"An empty room with a table, a desk, and chairs." +465549,Two young people standing in a living room holding game controllers. +523494,Several people are waiting to get on a city bus. +134542,"A newspaper covered in candy, fruit and goodies." +836,"A person up in the air, upside down while outside. " +66886,A baby girl is holding a pink brush as she scratches her head. +1464,A person in a black jacket skiing through deep snow. +572802,A man is talking on a cell phone near a bus station. +461275,A cross road of Furnace St. and Crapo St. +510080,A man presses a banana against his forehead while staring forward. +411754,A man checks his cell phone in a waiting area. +137221,A baseball player is getting ready to hit a ball. +82981,A group of men standing around holding game controllers. +562232,Three people standing around a brown horse with a white stripe on his face. +164475,A young man riding a skateboard in a parking lot. +347456,A mother and baby elephant walking in green grass in front of a bond. +355471,There is a bear sitting next to a bird. +119617,a kitchen with a sink surrounded by a bunch of cluttered items +495125,a row of wine glasses on a wooden table +541054,She doesn't look very comfortable holding the tennis racket. +561054,A small child riding on a blue wheeled toy. +332908,a ratchet ass room with a shelf on the wall +212054,Two beautiful women standing next to a black umbrella. +404209,A green plate topped with two pieces of cake. +502456,A man standing in a field wearing a hat and jacket. +374530,A bridge across a river and a tower with a clock is seen. +235082,A batter is swinging the bat in a baseball game. +349459,A passenger jet that is pulled in next to the terminal. +163104,Two giraffes standing around on the grassy plains. +5635,A stop sign that has been written on with a black marker. +541687,some people are sitting at a table on a phone and laptop +414379,A street scene of the intersection with people and cars. +197163,Three zebra standing on a road in a grassy field. +106351,A white and green kitchen filled with dishes and appliances. +253755,A lake with a rail bridge and traffic bridge over it. +15006,A restroom filled with graffiti and two toilet stalls. +481009,A table with a vase filled with flowers sitting on top of it. +16817,A person walking through the snow near a fence. +350157,A woman and child are crossing the street at the pedestrian crosswalk. +306383,A zebra and ostrich standing in dirt field next to trees. +186218,The two men are outside with coats and umbrellas. +364188,A little girl that is holding a toothbrush. +132329,A refrigerator mostly empty with only a few bottles of water inside. +308631,People stand around an antique motorcycle in a grassy area. +19924,"A woman with a hat, tie and striped halter smoking a long cigarette." +494782,A young person in a hoodie with headphones in on a laptop. +213593,A red stop sign sitting on the side of a tall building. +475043,A woman taking a sip of a beer by people with laptops. +156025,A cute dog is taking a nap on a very large cushion. +498368,A metal pan filled with lots of veggies in broth. +205720,A man talking on a cell phone on a boat with a city in the background. +228764,An orange and white cat standing on top of a beach. +190372,A group of people are sitting at a table with bowls and wine glasses. +146961,A man is cooking in a crowded kitchen. +501835,a couple of people that are on a buggy +2191,There is a woman in a wetsuit in the water. +27433,The giraffe is sitting in the middle of the grass alone +230903,A yellow and red train traveling down tracks. +304817,Snowboard stuck in a thick collection of trees. +459303,This is a train on the track with people ready to board +160933,a man smile at a table with a pizza on it +56396,A surfer is moving through a small wave. +408138,A blue and white double decker bus next to a barrier. +152202,A young woman prepares to slice a giant birthday cookie! +331096,A white sink sitting under a mirror next to a toilet. +417193,A red Frisbee floating in a lake with dark water. +123360,A group of people walking down a walkway. +549649,A grey and white cart laying on table with sunglasses on. +126592,A red stop sign sitting under a couple of street signs. +75673,A dog going to the bathroom in the park. +89503,this is giraffes standing around in the dirt +21202,cars that are stopped at a traffic light +552775,A man pokes his head in front of an oven open to baking cookies. +534428,People are crossing a street with umbrellas on a rainy day. +118690,A woman flying kites in a cloudy sky. +496409,some guy that is skiing down a hill in some snow +560566,A clock tower at seven forty three in the afternoon. +32777,A man that is walking next to a train. +124949,a man and woman sitting on a stone bench under umbrellas +113052,a man is riding a wave on a surfboard +137031,A small white airplane flying high up in the sky. +468604,Large elephant rubbing itself up against a large tree. +205473,Group of people walking on skis on a field of snow. +32610,a desk top with a bunch of electronics on it +296014,a couple of people on a boat on a river +467931,Two men sitting around a laptop looking at the screen. +31019,A crowd of people walking down a street next to a traffic light. +312783,A pair of people jump for a frisbee. +433373,two plates of food on a table with chairs +540619,A white toilet sitting inside of a bathroom. +298278,Giraffe standing next to each other at a zoo. +494855,A baseball player is swinging a bat at a ball. +302290,A small child is holding a toy at the park. +107781,A man standing on a tennis court holding a racquet. +410231,A giraffe walks on the tundra tree-lined park. +196462,A plate filled with a salad and a bowl of scrambled eggs. +499105,A young lady learning to play tennis preparing to hit a ball +294182,A man and child fly a kite on the beach. +299533,A couple of pony's standing in the middle of a forest. +220528,a teddy bear wearing a white shirt and green apron +503148,This slice of pizza is rather large and ready to eat. +384486,A counter top in a kitchen topped with fruits and vegetables. +568004,An unusual chandelier is the focal point of this room. +445567,A female wearing winter clothing standing next to a tent inside an unfinished building. +460361,"a baseball batter at citifield is about to hit the baseball +" +463290,a family sitting in the living room with one of them petting a dog +476491,an alley between two buildings with a sky in the background +8351,Two dogs are wearing winter attire and staring off to the distance. +279391,A nice interior decoration with a green couch and white end tables. +93435,A couple of men sitting down to have a meal. +56400,A man wearing glasses while holding a banana. +325505,A kitchen counter top with many different appliances. +386962,Yellow shoes sitting next to a suitcase with red lining. +395006,a bench near a table near a tree +155285,"A young boy stands around a busy area, wearing a white shirt with a yellow tie and a name tag" +298812,A little girl holding an umbrella is standing on the sidewalk +2239, a little girl holding onto a tennis racket with both hands +285234,A tray full of breakfast sitting on a bed. +281809,A woman holds up a small fake finger +110618,A snowboarder with his snowboard attached to his feet sitting on a slope. +293832,A close up of toothbrush bristles near a mirror +302160,There is a zebra standing alone in the zoo +48674,This is a black and white photo of a girl under a pedestrian traffic signal. +424683,Several people seated in chairs in a waiting room with a Snapple vending machine in the far corner of the room. +568814,A man with a bear sitting with his arms crossed and his tie over his left shoulder. +264594,Two young ladies petting a young calf on a farm +112867,A bunch of bins that are on a wooden table. +551650,A plane travels through the clouds in the sky. +454404,A woman wearing a blue t-shirt while looking at her cell phone and sitting on a bench next to a bright pink wall. +579900,A small loaded pizza on a yellow plate +171199,"A pizza, silverware, and a drink sitting on a table." +364783,A white toilet sitting next to a sink near a red wall. +107554,a surf board leaning on a wheel barrel +359592,"A white plate topped with broccoli, meat and potatoes." +526762,People crossing a river on four large elephants. +170630,A woman standing in a kitchen in front of a washing machine. +196506,A woman decorating a double layer cake on a table. +294495,A woman holding a tennis racquet on a tennis court. +276596,Blurry photograph of a commuter train coming in to a station +255950,Looking down on a stony surface shows a bowl with an orange in it and what looks like a large piece of red plastic. +546226,Old buildings by a street on a partly cloudy day +521874,A small blue train traveling past houses by train tracks.. +573349,There are several people walking in a street parade. +421811,"A kitchen with a table, chairs and a refrigerator." +423005,An empty intersection with two red lights glowing +344368,a close up of a cat in the back of a car +551304,A white and gold fancy toilet and stainless trash can. +409178,"A person on snow skis, with a backpack, skiing down a mountain." +277080,The woman is eating a piece of pizza. +298689,A man grabs the back end of his snowboard as he soars off a jump. +507361,A bottle sitting on a window sill next to a window. +437374,Two young children are playing together on a Wii. +531264,A man in a suit has a black mark on his hand. +263011,a group of people getting off a parked bus +434746,A person is doing a skateboard trick outdoors. +123511,A close up of an orange in a red serving bowl. +97278,Young man on top of a snowboard wearing maroon jacket. +27656,"A vase of fresh, colorful flowers on a table" +126974,Two people are sitting beside one another working on their laptops. +456991,A man that is sitting at a table with various items on it. +117064,An adult elephant and a baby elephant are walking. +118529,a couple of trains sit parked under some power lines +219269,A bedroom with a desk in the corner. +484029,A stop sign with a street sign above it. +483108,A man on a bicycle riding next to a train +399178,A baseball game in progress with the batter swinging. +200839,A library bus outside of an apartment building +553847,A young man holding a white guitar hero guitar while standing in front of a TV. +379453,An Air Force jet flying in a deep blue sky. +330109,People in a horse drawn buggy on a city street. +56592,A young man in a white shirt is playing tennis. +412240,A dog sitting behind a pair of black shoes. +110617,A baseball player in a ball hitting stance. +326063,Man holding this frisbee in the park about throwing it +170401,some food is on a white plate on a table +267875,A picture taken through a car window of a shop with many motorcycles parked in front of it. +182805,A woman and a dog sitting on the ground. +241880,A person in snow gear skiing down a snowy slope. +538394,A man holding a very large knife standing in a foggy alley. +181799,A white plate topped with a lush green and red salad. +316842,This is the inside of someone's deejay station. +110597,A man who is leaping in the air to catch a Frisbee. +412443,A large red barn with a large clock in front of it. +296730,A brick building with a clock tower at the corner of a street. +312746,A bed sitting in a bedroom between two lamps. +505242,A snowboarder with goggles stands still on the slope. +532071,A brown bear lays down in the woods. +70987,A woman with beautiful breast sitting next to another woman and pizzas. +252617,The cat is peeking out from inside the purse. +134940,A large crowd of people around a very large illustration. +372203,A wooden bench and a fire hydrant on a field. +131171,Two containers filled with food and sweets on a table. +47801,A bald headed man eating a slice of cake. +174594,A man stands at the base with a bat. +267315,A woman is holding a small child on her back. +470931,A bunch of ripe bananas hanging from the top of a tree. +325519,"A red, black and yellow train coming down the tracks by a body of water. " +188865,A man and a woman holding up tennis racquets. +137402,"A bathroom is shown with a mirror, sink, and shower." +11742,A glass of red wine sits beside the bottle for a refill as a piece of cake goes untouched in the back. +374782,a laptop and a monitor on a wood desk +183155,A man rides one horse in a group of horses outside in a field. +90732,A little girl is mixing in a kitchen bowl while standing on a chair. +516212,A cat sitting on top of a microwave oven. +270097,A man sitting at a laptop computer sitting in front of a mirror. +194506,Two small bears playing in the water together +383494,A small cat laying in the arms of a large teddy bear. +249347,A child in blue shirt playing with a kite in field. +156740,A display case inside of a bakery filled with bread. +151138,A man sitting on his surfboard looking out into the ocean. +73702,A man with an umbrella hat stands next to another man. +180490,A room with a refrigerator with a house plant sitting on top of it. +155997,A dog rides in a cart pulled by a man on a bike. +231460,Different kinds of street signs hanging from a pole in the city. +316332,A street sign on the side of a street in front of a building . +198075,A group of people riding horses along the beach. +562243,A man in a purple shirt and matching tie looking pensive. +277961,A zebra grazing from the ground in its enclosure. +94306,A yack and a baby in the forest with long white horns +164292,A man is riding waves with his surfboard. +239351,A man and a woman sanding on a dirt road while holding an umbrella. +365851,A woman carrying a surfboard walks along the beach. +191846,A boy tries a bicycle in front of a display stand. +45516,A young woman relaxes while checking her smartphone. +421923,a glass vase with some flowers coming out of it +94926,The little girl is watching a polar bear. +515716,A couple of women standing on either side of a man wearing glasses. +134649,A white toilet sitting under a bathroom window. +479848,There are condiments at a hot dog stand +151092,A clock sitting in the middle of a room illuminated. +520585,A room full of people sitting down on chairs. +549225,A group of horsss running around a field. +376667,Two people carrying surfboards through a train station. +412431,A clock sitting on top of a wooden mantle. +599,A cat on a leather chair next to remotes +29465,A bird that is playing in the snow. +293891,An old man scratching his head at a baseball game +369373,A couple of young men standing in a living room holding Wii controllers. +548288,Two military personnel cutting a cake together before other military members. +272857,A street sign that reads Bush on the side of a pole. +521509,A girl sitting on a bed is taking a self portrait. +567205,A person standing next to a vehicle on a street. +487289,A pan of brownies has several cut pieces and a fork in it. +151585,A white dog wearing a red coat on a sidewalk. +161807,The healthy food is ready to be eaten. +188546,a close up of a dog with a hat +450695,A large long train on a steel track. +85926,One bear and two cubs in the grass while birds fly behind them. +363853,A cat sitting on a chair with a bag under its paw +418002,A yellow fire hydrant sitting in front of a building. +43657,A batter that is watching the ball go past them to the catcher. +73417,Hot dogs on a BBQ being grilled in a backyard. +116362,A bowl filled with food on top of a wooden table. +356368,A group of zebras that are standing in the dirt. +577451,"A close up of bananas, apples and oranges." +209468,A woman in pajamas using her laptop on the stove top in the kitchen +439971,a girl that is taking a picture in the mirror +12817,A man on a skateboard performing a trick. +366569,A woman taking a swing at a tennis ball +227440,A man sitting at a table with two kids. +525908,A tennis player is on an outdoor court. +217951,A man kite boarding over a large body of water. +278203,A man rides a bicycle carrying snow skis. +328352,Three people are sitting on a bench looking over a pier. +141634,Sepia photograph of two women petting a horse. +158250,A bird walks on sand during the day +476569,Three people are skiing in the snow near a hill. +377060,A horse's rider jumps the horse over a log. +228854,a brown dog is laying on a gray couch +366367,A little girl holding a cell phone in her hand +35814,A frozen fire hydrant spewing ice out into a street. +573943,Parking lot full of different colored semi trucks. +130909,A man in a kitchen instructing a woman on what to do +73830,A herd of giraffe standing next to each other on a field. +42178,Smoggy picture of many trains in a busy train station. +124985,A recliner chair sitting next to a table with a lamp. +424585,a track carrying a tank at the back of it +473994,two feet and a white dog carrying a frisbee +64439,A person on a court with a tennis racket. +12120,A couple of women playing a game of tennis on a tennis court. +336629,The batter prepares to run the bases as the catcher and umpire watch the ball to see if it went foul or not. +396972,A man riding up the side of an empty swimming pool on a skateboard. +445009,Looking down into a living room where a dog is sleeping on the floor +32625,Food and beverage sitting atop a white table top. +257219,A young playing tennis preparing to return the ball. +126958,The walls of a room painted blue with white clouds +234607,A man and a woman playing a game on the Nintendo Wii. +346703,A man and woman standing over a dinner table with a cake. +571641,A computer desk topped with a large monitor. +356505,A woman in a bikini riding a wave on a surfboard. +559543,A little girl in a pink shirt holding a game controller. +551780,A large clock mounted to the side of a building. +466665,The microwave and the stove have the same design. +457817,A male tennis player in action on the court. +212817,A child on a snowboard going down a slope. +419601,The shades are partly drawn on this black and white motif room. +160963,The little girl is dressed in pink and holding a umbrella. +574010,A tall building with giant clock tower sitting above it. +286711,some baseball players are playing baseball on a field +248284,this person is leaving footprints in the snow +478553,Two zebra standing next to each other on a dirt field. +385248,Scantily dressed women near a line of motorcycles. +59732,An adult and a child cross the city street at night. +61882,A white toilet sitting next to a bathroom sink. +325152,A forest with many tall trees all around. +211177,A tray of food sitting on top of a white table. +173997,Two people are sitting at a picnic table by a lake. +288076,Shaggy cattle with horns graze on grass in a meadow. +206800,A person in a field flying a parasail and having fun. +82994,A group of people standing in front of an airplane. +155051,a close of up a clock that makes the moon look small next to it +133927,A young boy is playing tennis at the tennis courts. +518729,An animal is walking along in a wooded area. +261707,Surfing the web on a laptop at a coffee bar. +336431,A young boy holding up an electric tooth brush. +285007,a kitchen with a sink a stove and a microwave +503663,A man looking in the mirror brushing his teeth . +563311,An old wooden steeple with a clock on it +330604,there is a yellow motorcycle that is parked on the street +468487,A woman who is holding her little dog. +412914,a upside down boat is on top of a big hil +116133,A man and two women standing around a wooden table. +414296,A large metal clock hanging off the side of a tall building. +487217,A traffic light over a city street with cars. +537395,a bunch of toilets that are next to each other +511145,A man riding a motorcycle on a race track. +291696,A man leaping over three people while catching a white frisbee. +455772,A person in a field jumping to catch a Frisbee. +276133,A group of carrots sit in a glass dish. +274416,Pink and yellow flowers are in a brown vase. +115875,A little girl sitting on the floor holding a Wii remote +324670,A seagull sitting on the pier with the light house behind him. +532761,A living room that is filled with furniture. +66675,A happy couple playing Wii in a bed room +495612,An orange pedestrian crossing sign next to a tall building. +335047,A hot dog with red peppers as a topping. +303926,A woman holding a child on a skateboard. +96459,A duck paddling through a shallow body of water. +510915,A herd of elephants of various ages standing out in an open plain. +325228,Boys are standing in a lot holding tennis rackets. +573843,A crane operates over the city being built +342933,A pizza sitting on top of a pizza pan. +316138,a bunch of motorcycles are parked together outside +326627,A building that has a rainbow above it. +121817,A woman and a man sitting to each other blue couch. +390902,A man standing on a tennis court holding a racquet. +6906,A man presenting something to another man in a tent. +200109,A slice of pizza partially obscuring a cell phone. +563015,A man with a large stack of suitcases in a room. +452816,A group of men riding skis down a snow covered slope. +106641,a large green toy truck on a sidewalk in front of benches. +476597,Two men are talking to each other near a fish tank. +387216,A train is sitting beside a railroad track. +304083,a baseball player swinging a bat at a ball +314865,A refrigerator that is in an otherwise empty room. +524575,Three giraffe and a wildebeest in a field. +23807,Two people sitting on a dock eating sandwiches +9171,A man riding down a snow covered slope in the snow. +349486,An elephant scraping up a large tree with its tusks. +256899,A plate of broccoli and meat on a table +480379,A man standing on top of a oat in a river. +182176,Double decker city bus passing under an overpass. +246843,Adults and a child stand together near a mud pit. +539498,A red double decker bus driving past a tall building. +423141,a close up of a bottle and glass of wine +440036,A large flock of birds flying over the ocean. +262148,The skateboarder is putting on a show using the picnic table as his stage. +314147,A man in a suit sits at a table. +354976,Laptop lifted up on a desk next to another monitor. +518974,A black and white cat with a ball next to it +517819,Solemn military men look on as the plaque is presented. +7325,A red fancy bus is parked by a standing man. +330065,A young boy holding his hand out to a giraffe sticking it's tongue out. +83408,A man in a wet suit riding a wave on a surfboard. +180953,A large purple and red passenger jet flying through a blue sky.. +551881,A kitchen that has wooden floors and a chrome refrigerator. +410101,a man that is playing a wii game +221536,A large room with marble floors and white ceramic toilets +569251,A kitchen that has various paintings on the walls and a large fish aquarium against the wall. +188308,The skateboarder has on arm and knee pads with his helmet. +379529,An old toilet outside against an old painted wall. +525869,A herd of sheep are seen on a farm +118715,A gray fire hydrant sitting next to a brick wall. +88899,Black and white photo of a boy with a dog. +570242,A close up of a house phone showing only the numbers in focus. +298396,Kitchen area with counter top space and dining room table. +370260,A colorful bus driving down a street in front of a bus. +196754,There is a stop sign outside of a bus window. +533532,there are many bags and luggages on the floor +467285,a baseball player getting ready to bat at a game +404642,there are two hot dogs on a paper plate with toppings +75719,This bird is looking at a toy photographer. +458632,A man playign sports in the middle of a stadium +185807,A baby girl in a high chair eating a bowl of cereal. +404349,A tray with a brown cat sleeping on top of a teddy bear inside +115791,Baseball player standing on diamond with bat raised. +12101,A toilet bowl with a sign on the top +222662,a lady standing next to a person with a umbrella +392878,A group of people sitting at a table having food. +440769,several guys playing soccer one is headbutting the ball +361285,A clock tower with a a black bird flying by it. +471868,A man is riding a motorcycle down a wet sidewalk. +481895,Two surfers riding waves close to the beach. +13061,Many controllers set on top of a table. +572296,a person in a living room playing nintendo wii near a window +475159,A man walking in the ocean carrying a surfboard +33006,People playing video games while someone watches in a library +515050,A giraffe walking in a field with gazelle's looking on. +88225,A double decker sight seeing bus is driving on the road. +405279,Kites are flying in the sky over the water at a park. +217016,Yellow vehicle with surfboard tied to roof rack. +462954,a building a sign some cars and traffic and street lights +545475,A cat thats lieing in a pile of shoes by the door. +378163,The grinch riding a motorcycle with a small dog with antlers. +428403,A view of a person walking towards a house boat. +300413,The dog is laying by himself on the couch. +445371,A brown dog tied up to a brown wooden bench next to a street. +438807,A person on a surfboard in the water. +564120,The neck and head of two large giraffes by a tree. +300773,An Asian man ad woman on their cell phones. +309005,A living room filled with furniture and a white table. +161877,A parent standing up and playing Wii in their living room +74759,A group of people sitting on the backs of elephants. +500559,Two wooden benches with a tree in background. +253770,Two young men holding Nintendo Wii controllers standing next to each other. +320743,Men in blue with hats are riding elephants. +384375,The open drapes show the view from the room. +141228,A refrigerator door is open and it is full of foodstuffs. +310200,The dessert has been split into two halves on the plate. +514016,A bus stopped at a bus stop in front of a tall building. +426541,Two jet liners sitting on top of an airport runway. +42279,Two zebra standing next to each other near a forest. +164924,"A man's legs are laying on a bed as he watches a game called ""Avengers"" on the screen." +82174,"Two very large birds pose outside on white chairs, side by side" +248193,A long yellow train traveling down train tracks. +176696,A white plate topped with a couple of donuts. +153011,A couple of food trucks parked in a parking lot. +546664,A man surfing the waves on an artificial wave pool. +29648,A red fire hydrant on a concrete block. +543045,Two people standing next to and holding onto the frisbee golf goal in a park. +251195,Two girls at a school table using their calculator. +289781,the boat is tied up on the lake +326462,Pink donut with white sprinkles on the top of it. +294307,A man riding skis across a snow covered ground. +515424,A person doing a flip on a snowboard. +32735,a person jumping a pair of skis in the air +88748,A water fountain sitting in the middle of a lot of green plants. +30432,"A bathroom with a tub, toilet and sink." +347179,Black and white photo of people looking at animals grazing. +549932,some people standing in front of a building with some suitcases +306603,A man holding up a phone while standing in snow. +233124,A woman licking donuts in a box of donuts. +354829,A car is parked on the side of the street in the rain. +78194,A baby boy is laying on a couch. +55017,A couple of sandwiches in a food basket +154148,A man standing in the ocean while holding a surfboard. +35894,A black and brown dog laying on a grass covered ground next to a yellow fire hydrant. +577619,One giraffe in the foreground with two giraffes in the background. +523229,A dirty public bathroom with a handicap sign located above the toilet. +499177,A man riding a dirt bike on a country road in a forest. +472671,Two skateboards with neon green wheels and no one riding. +579468,A beautiful woman with a blue fro brushing her teeth with a giant toothbrush. +557117,A video game remote sitting on someones lap +373578,a small giraffe that is walking around on dirt +548921,A brown cow standing in a lush green field. +536833,A bicycle and a motorcycle are parked next to each other at a park. +201025,two huge elephant with tusks hidden among the trees +296649,People are walking and riding motorcycles on the street +485731,A small kitchen with a stove and counters. +497855,"Apples, oranges and bananas all mixed in a bowl." +159262,Blue barrels are on the ground near trucks. +25685,People on a boat looking at a plane in the water. +321877,A blond woman hold a red Wii controller. +3156,A young man bending next to a toilet. +420669,A woman rolling down a sand dune with a red frisbee. +40446,A church with lots of wooden pews and an illuminated crucifix on the wall. +510616,A beautiful young woman in camo short shorts standing next to a man holding Nintendo Wii game controllers. +518163,A family has their luggage on the ground. +28809,A picture of a bunch of bananas sitting on a table. +524263,a couple of black bears are in the grass +566450,An old style refrigerator that is holding beverages. +542717,there is a man sitting on the ground with many vegetables +338532,A giraffe stands in the middle of a sandy area. +376449,A shirtless surfer jumps up from the waves. +510798,A catcher that is reacting to a pitch he just caught. +187592,A man putting an uncooked turkey in the oven +54485,A trolley stopping at the curb to pick up two passengers. +271828,A child's steam engine train sitting on train tracks. +518030,there is a bench on cornet looking out at the water +242100,a couple of zebras are in a field +357278,Blindfolded men standing in robes are tasting wine. +243199,An open laptop computer sitting on top of a bed. +523217,Two people are cutting into a cake at a celebration. +215554,A black and white dog laying next to a teddy bear. +347236,A black cat and an orange cat are sitting on the floor. +171546,Blonde haired boy doing a jump while riding a skate board. +165795,five vases covered in flowers in front of a woven screen +71737,A kids birthday cake siting on a table. +309889,A red soft bed with light shinning through +247259,A group of people sitting at a table using laptop computers. +420546,A man helps his friend with his suit. +103710,A living room with pink and red chairs and a colorful couch. +357279,a person jumps a snowboard over the snow +525988,A small teddy bear holding a toy camera. +312406,A couple of blocks of chocolate sitting next to bananas and pudding. +244167,A brown cow in a field of grass near two red barns. +27441,A group of people standing around a red stop sign. +332869,A little boy running towards a green Frisbee. +163777,The fur on this dog is long enough to cover his eyes. +18239,Several horses are seen milling about this grassy area. +127587,A heard of cattle grazing in a field of grass. +337246,many different kites flying in the sky +19962,A man riding a kiteboard over the ocean under a cloudy sky. +272111,a row of umbrellas opened advertising a beer company +386332,A woman seated in front of a buffet of pizzas. +122787,A living room with wooden floors and a brown couch. +490720,A panda bear eating something in an enclosure +376521,A few people on skis standing on a snowy trail. +53289,Black dog laying down near a black and white cat. +497117,Two birds are perched upon a snowy bank. +425160,An older man with a green sports coat and blue tie with a flower on it. +513681,A man in a safety vest holds him arms up as he stands in front of an airplane. +555905,A bedroom that looks like a hotel room includes a television and bed. +192403,"A very modern hotel bedroom holds a large, white bed. " +456784,A man decorated a white frosted cake with chocolate icing. +279149,The girl in this picture is not wearing many clothes. +182240,there are three zebras standing together in the wild +275722,a clock attached to a wall of a building +391446,A toy boat sits on the ground. +132001,A white keyboard and mouse provide contrast to black desktop. +442809,a pastry store with many cupcakes on display +289059,A man standing on a tennis court holding a racquet. +412894,Dozens of people walking around a metro area +463132,The top of the computer desk is very shiny. +140122,A laptop and a keyboard on a desk. +535080,A black cat laying on top of a piece of luggage. +502220,Two women are flying a bird shaped kite. +490794,A parking sign is displaying spaces available on a city street +173830,A skier in a squat position on skies skiing downhill. +210794,a living room on a wooden floor and television in it +513098,A group of planes flying in sequence in the sky. +67959,Box of donuts glazed in different types of toppings. +460705,A man in a wet suit holding a white surfboard in the ocean. +179699,A man sitting at a table next to a greeting card. +369763,A polie officer standing next to a motorcycle parked on the street. +442149,Two sheep grazing the field in a mountainous area. +344654,There is an elephant shaped figure next to other decorations. +163361,A colorful airplane flying though a blue sky. +277073,Two people are on a bike together traveling down the road. +408147,an elephant playing with a piece of wood and a fence +388674,A large gray elephant standing on top of a field. +201004,THERE IS AN IMAGE OF A BUILDING ON THE GRASS +393513,A skateboarder in the middle of a trick on a concrete rail. +578570,A man laying in a hospital bed badly injured. +350639,A woman standing in a kitchen preparing food. +463837,A group of men sitting around a table together. +34930,A beautiful young lady walking down a street in the rain. +426629,A giraffe stands in a field as birds perch on its neck. +106281,Two trains passing each other on seperate tacks. +158744,a man is holding some stuff standing by the curb +547519,A brown bear walking across a forest surrounded by trees.. +113756,A man riding a skateboard while a woman videotapes it. +337551,Dogs playing at a birthday with one dog wearing a hat +390083,A sidewalk sitting along side of a building at night. +327590,A red tray topped with three chili cheese and bacon covered hot dogs. +384012,A batter up at the plate in a baseball game +394246,A man riding a skateboard into the air. +75296,A man show a huge doughnut covered with melted chocolate and sprinkles. +248427,Two people are standing at a street corner and one of them is using an umbrella. +240287,A man with a beard standing on the beach with a surfboard under his right arm and he is looking out into the ocean. +174690,People with suitcases stand on a walkway underneath a clock. +208817,A man riding on top of a surfboard in the ocean. +363286,passengers sitting in the seats aboard an aircraft +292581,three old cell phones on chains on s textured surface +523096,A laptop that is sitting under a lamp on a table. +316514,a bowl full of mixed vegetables and pieces +350386,Two gentleman standing next to each other in an office. +391144,A herd of elephants standing on a pond of water. +199551,A picture of a young boy laying on top of a bed. +185335,An open laptop computer sitting on top of a table. +457566,A plate with an open face sandwiched topped with cheese. +493424,a person is holding an old cellphone outside +380868,a large bus with two levels is parked outside +239837,Two buildings with a plaza between that has a clock tower. +513342,"Two apples, an orange, and a banana form a smiling face" +57357,A zebra eating grass next to a wire fence. +356241,A bird flying outside the window of a building. +347753,"Doorway view to a bathroom with sink, bathtub and toilet." +169111,MIXTURE OF FRUITS KEPT IN A BIG BOWL. +27731,A female tennis player holds her body and racket poised. +73118,Two brown teddy bears sitting side by side. +313762,A man standing in the waves holding a surfboard. +79396,A boy in a bath tub with a toy in his mouth. +431306,A man taking a picture of his reflection in the bathroom +445417,Jockeys racing horses on a track during a race. +200583,a bench with a bottle of water with a luggage bag near by +423773,A man hitting a tennis ball on a tennis court. +543570,This is the back angle of two emperors and a baseball player hitting the ball with his bat. +339740,A road sign warns there is a curve in the road. +45387,A baboon is sitting eating a banana on the ground. +542758,A family posing on the beech for a photo. +129595,A man holding up a cardboard sign next to a woman. +268496,An old fashioned street sign in a town on the corner. +15862,A red fire hydrant sitting in the middle of a sidewalk. +329258,a young man attempting to jump down some steps on a skateboard +178592,An elephant leading a baby through a Savannah plain. +31980,A pizza sitting on top of a white plate on a table. +505650,Two men are riding horses around an arena. +372384,A tennis player holding a tennis racquet while he serves a tennis ball. +327514,A man standing in a kitchen ironing his clothes while cooking food. +288202,A polar bear laying on a large stack of ice. +534081,a desk with a monitor and a laptop +209186,A giraffe standing next to a tree and some rocks. +382999,A man filling jugs with water from a bathroom sink. +361763,Two baseball players work out on the field. +321008,A breakfast plate with a waffle and fresh fruit. +520324,Someone is driving a cart near a single engine airplane. +456145,A row of pottery vases sitting on a window pane. +111435,A tall building with a massive golden clock on it's face. +188616,a basket of food on a table with fries +163290,A giraffe standing next to a zebra on a field. +515579,A man holding a ball while standing next to a gate. +395210,"A large clock near a house is marked, ""1802""." +456292,A cat climbing into a cat door on a wall. +512576,A table and some chairs in a room. +145093,A stone building with a clock displayed on the outside. +386525,A parked truck in a parking lot next to a tree. +499281,A kitchen with a bag from Whole Foods on the counter. +346759,A red and white plane is sitting on the runway. +461628,A train is moving along the tracks beside a house. +43882,The man has dipped something in the bowl. +546659,A train traveling past tall white buildings on train tracks. +143859,Array of dishes with fruit inside them on the kitchen countertop +282928,a person with their mouth open holding a piece of bread up to it +79034,A fire hydrant sits in the middle of the park +249643,A train traveling down train tracks near a train station. +479659,Two older individuals enjoying a glass of wine. +346596,A bike with a basket sitting on snow covered ground. +72753,The two teddy bears are sitting together on the red tablecloth. +140908,A pair of stuffed animals sitting on a bench in front of lake Michigan. +290179,A great shot of a very nice and large city somewhere. +73280,a brown and white kitchen with a silver refrigerator +452297,A cup of ice cream with chocolate syrup and bananas +221869,A shot of an empty bathroom with a walkin shower. +140640,A group of women wearing hats while standing at a dessert table. +546721,Some small boats are tied up by the city. +198992,A pair of red scissors on a white surface. +64084,A batch of bread slices sitting on a plate. +82263,A white fishing boat goes under a bridge. +357805,A gray and white cat sitting on a laptop keyboard with a photo of two people on the screen. +322629,A man riding a skateboard up the side of a ramp. +272416,"An old toilet in a bathroom with extended plumbing +" +69553,there is a close up picture of a train going down the tracks +285894,A giraffe has come to a fence line to greet visitors. +90138,A sandwich cut in half next to a drink. +229653,A pretty lady laying in bed with a laptop. +479808,Two young men wearing glasses holding a white frisbee. +175438,A large cock sitting in the middle of a street. +124614,A group of people standing next to bags of luggage. +219434,Man walking into ocean holding surfboard under arm +496309,A giraffe cranes its head to look over a canopy. +273198,A man opening a fire hydrant spewing out rusty water into a street. +533480,A man walking across a parking lot in the rain with a red umbrella. +93670,A man wearing a brown suit and brown tie. +309402,A bright blue suitcase is sitting on a bed. +349689,about twenty people riding bicycles through a town area +303726,a bathroom that has a sink and a toilet in it +530915,An airplane sitting on top of a field next to a crowd of people. +253518,Two young men in wetsuits standing on a concrete ledge in front of water. +170960,A stone statue of an elderly woman sits upon a wooden bench. +31971,A bed in a bedroom topped with a colorful blanket and two pillows. +509402,A zebra grazes in a very grassy area. +397427,A cat that is sitting between two computers. +277869,A bus is parked on the street away from some cars. +226020,A boy in a green shirt stands spread eagle with one foot on a skateboard. +49327,The people are walking in around in town +330754,A man and woman in western clothing standing in front of a trailer. +160185,the soccer player has the ball right next to his feet +178403,"A table with a jar of cookies, cake, and fruit on it." +472376,A group of travelers at the airport station. +154420,A clean bathroom with blue tiles on wall and counter. +480663,A woman smiles while sitting in a leisure area under an sun umbrella. +167017,A woman holding a dog in front of a mirror. +408955,A couple of couches and a coffee table sitting by a window in the living room. +263359,A lot of people that are on some horses. +479557,A little girl that is on the beach in the daytime. +484175,A man holding a elephant with some kids on the top. +67342,Two birds sitting on a branch in the woods. +168434,These two trains are workhorses necessary to care for other trains. +166096,A clock tower is seen in front of a tall building. +433499,The miniature blue train is behind a picket fence. +450762,Teddy bears dressed up like soldiers in a boat. +519555,A black and white picture of a stop sign. +85913,A blue motorcycle parked on the side of a road. +118852,A couple of kites are flying in the sky +198943,A red fire hydrant sitting on the side of a road. +128516,A person on a surfboard in the water. +230884,A boy in a helmet rides a skateboard +80273,a man snow boarding with snow gear on +282847,A group of young men playing a game of frisbee. +499249,A sign that is bent on a sidewalk. +309302,A group of horses walking down the street +75405,Two horses that are standing in the grass. +203865,A colorful bus is parked on the street. +266160,A boy in pool on a yellow board. +457684,A large white airplane parked on a runway. +574256,A bird on a branch in a tree +59774,An umbrella is placed inside an old microwave. +555939,A small bathroom with a toilet and shower. +333756,a man leaping into the air and holding a tennis racket +299261,a snow skier and lots of trees on a sunny day +249809,A yellow skateboard wheel touching the pavement on a sunny day +571437,"Broccoli, yellow bell pepper, and a strawberry on a plate. " +342711,Woman in sportswear playing tennis on a tennis court. +250440,A truck that is sitting in the street. +557981,A young man holding a stuffed teddy bear and a white umbrella. +274262,A large kitchen with a center island surrounded by stools. +338067,A construction sign sitting in the middle of a road. +134555,An elephant in the zoo behind a large fence +258112,A store with a taxi and bus parked out front +318570,a man that is skiing across some snow field +427655,a horse is pulling a carriage with people down a street +402802,A woman sitting at a table with a little girl. +319487,A person sits on the road near their motorcycle. +303439,"A group of pigeons, swans and ducks clustering around water. " +88560,There are four groups of fruits setting on a stone bench. +23230,A family of swans swimming on top of a lake. +489125,A woman on the beach tries to catch a frisbee. +579471,A double decker bus is riding down the street. +152751,A computer desk with a green mat sitting on top of it. +126324,A cat sleeping on top of a wooden bench. +575349,A little boy with a red fireman taking a bit out of food wrapped in a napkin. +499302,A sheep dog herding a group of three sheep. +23781,An assortment of fruits and vegetable all set together +438107,White swans in the water and on the grass with one taking a close eye on the camera. +352587,Two horses graze in a grassy pasture lined with pine trees. +500446,A large clock mounted to the face of a buildings entrance. +551952,A white truck filled with motorcycle on it's flatbed. +317320,A bicyclist is riding across the street next to someone on a motorcycle. +93672,a green plant is in a glass vase +50746,A person is laying tennis with racket in hand +54335,A lady looks out onto the city from behind a giant clock. +512290,A couple on skies in the snow outdoors. +524373,A giraffe standing next to a palm tree on a field. +153669,a batter after he has hit a pitched ball before he is going to run +344013,This player swings his racket during a match +329957,A couple of girls are standing in a kitchen +80369,A couple of little girls sitting at a table with a cake. +168834,Cute little cat sitting inside of a bidet +181499,A hand is holding a cd by a laptop computer. +17905,A man standing next to a light and a sign. +548339,The boy is trying to hit the baseball during the game. +191047,Three men all walking in the middle of the road . +451440,A black cat sitting on a chair at a table with plate of food and coffee. +313948,A motorcycle is on display at a convention. +524361,A small bed laying on top of a table. +501122,A man standing over an ironing board wearing a gas mask. +397522,A skateboarder performing a stunt in an urban area. +137315,a man smiling with shots and a plate of food on the table +208585,a group of people and a car passing under a bridge +231527,The oranges are picked to make fresh jams. +113736,A man in water waiters sits in a river as he watches a baby bear run by. +423618,A carrot and a knife are resting on a cutting board. +85329,An image of a very cute girl with face piercings. +424940,A flock of swan swimming on top of a river. +62296,A harbor filled with boats surrounded by buildings. +87244,the fire hydrant has on the side of the road +411765,A tennis player taking a swing at a ball. +394334,A display case filled with various donuts and other sweets. +348791,A couple of women sitting next to each other. +293852,A living room with wooden walls and furniture. +525542,a white bus is on a city street +15497,A cat laying on top of a couch next to a computer mouse. +172556,An instructor teaching people how to surf on the beach +188067,"A couple of very young male soccer players, are competing for control of the ball. " +47234,Stuffed teddy bear strapped into child safety seat. +79969,a tennis player hitting a serve on a court +294305,Two clocks on top of a tower at night time. +125106,A kitchen counter topped with ripe bananas and chocolate. +209527,Two women standing and playing video game near chair. +173245,A man flying through the air on a snow board. +36962,A cat sitting on top of a TV peering out a window. +186182,Glasses sitting on top of a stainless steel refrigerator. +341397,We are looking at a large old bath room. +251242,A little girl blowing out the candles of a cake. +136008,"Park with grass, chair and bird on sidewalk." +8180,A large airplane is on the airport runway. +158384,A desk that has two computer monitors on it. +182362,A young man is eating food while using the computer. +367489,A man winding up with a baseball on a mound. +419735,A bob laying down on a comforter of a bed. +454601,a tabby and black cat lounging on a sofa +475413,A glass jar of fruit on a decorative table mat. +95295,a couple of people are sitting on a boat +318373,A group of people walking down a sidewalk next to a wagon of little children. +69140,A couple of men sitting at a table having dinner together. +261796,A black and white picture of a large house is shown. +69229,Cows with horns are sitting down in the open field +230679,A person giving a giraffe some food with his hand. +183114,black and white photo of two birds flying on a cloudy sky +504389,a couple of people that are playing in a field +208408,A person walking in the rain on the sidewalk. +245793,A train engine and passenger cars pulling in to a station. +524431,A horse drawn carriage traveling down the middle of a road. +529102,A breakfast has an omelette and a toasted muffin. +378751,A cat sprawled out on a couch with a remote on the arm +510449,A brown bear walking in an open area. +118191,Player making a goal during the soccer game match +342232,A boy dressed in safety gear on a skateboard on a basketball court. +423506,Two men smiling and taking a picture together. +49946,A teddy bear next to a wood stick and wood wall. +401556,A towel on a drying rack in a bathroom with a wooden stool. +443034,A third of the chocolate cake has been eaten. +129339,A cat is laying on the floor with its paws in a shoe. +218853,a large silver plane is put on display at a museum +111819,An elephant in an enclosure is touching a woman in a pink dress. +369093,The pizza is on wax paper near a paper plate. +224675,A woman standing next to a man kneeling down on the ground. +44467,A brown teddy bear laying on an asphalt ground. +383606,A blue corner sink with a man reflected in the above mirrors. +288983,A large giraffe standing behind a wire fence. +377012,a cat sitting in front of a tv while watching a hocket game on tv +555696,a group of people that is in field kicking a ball +554002,A black dog standing between people in line +371250,A brown sofa and ottoman with pillows and remotes. +573196,A plate with a slice of cake on top. +91715,Red and white commercial truck parked on open lot. +111553,A couple of zebras are walking through undergrowth. +542095,A look at a hotel room with two beds in it. +1164,Two beautiful young ladies giving an elephant a bath in a river. +136807,There are keyboard keys on a wooden table. +190585,"A plate with meat, broccoli, and noodles is sitting on a table." +485985,A little blonde boy in blue has a blue toothbrush in his mouth. +98095,A man is playing with a Wii controller as his friends watch. +301093,The bed has a nightstand next to it with a lamp on it. +99218,A young boy holding a kite while running across a field. +455741,A man sanding next to an orange frisbee. +470348,this is a white sink and a white toilet +207306,A teddy bear in jail clothes posed on top of a trash can. +374342,A man is throwing up a tennis ball and going to hit it with a racket. +127659,A commuter train passes people sitting on a bench at a train station. +115721,A dog laying down on top of a couch cushion. +79846,The orange fire hydrant is beside an old shack. +124210,A cooler and fishing gear on a fishing pier. +170178,The men are in the kitchen preparing the meal. +444126,Two surfers stroll the beach while some others walk in the water. +245174,a person standing next to a stop sign on a tree +465878,a surfer catching a gnarly wave in the swell +297972,a man leaning over a lot as another man catches the frisbee +292590,A man on skis goes down the snow covered hill. +5205,The man is giving the young girl a ride on his motorcycle. +409491,A man and a woman standing in a field flying kites. +521549,There is a tall tower connected to a building. +13832,close up of a chicken sandwich and fries on a plate +34582,Large amounts of desserts set on different platters. +280732,A red and white cellphone sits on a white computer keyboard. +134223,"A white plate topped with a hot dog, french fries and condiments." +522576,A woman with a painted face holds an umbrella. +200681,A dog jumping up into the air to catch a blue frisbee. +158760,The kitchen area is clean and ready to be used. +406949,A large white bush driving down a city street. +429366,A kitchen counter filled with lots of dishes. +31597,Several vases on display behind a glass case. +521465,A group of sheep in front of a building. +358293,A woman standing on a tennis court hitting a tennis ball. +520326,Two motorcycles parked next to each other on a parking lot. +299001,A grocery store filled with lots of fresh fruit stand vegetables. +414670,A guy on a snowboard doing tricks on a rail. +109206,The landing gear is down as the airliner comes in for a landing. +336937,A plethora of toilet bowls and urinals all in a row. +253433,a little teddy bear dressed in some BDSM gear and chains +366421,A guitar on a bed in a room. +301236,two different kinds of zebras in the grasslands +214604,A batter awaits a pitch at a baseball field. +34786,A man dressed as a town fryer walking across the street using a cell phone +521098,A large green gate sitting in front of a red brick building. +209062,A large bird sits at the top of a tree. +192660,Benches of fruit on display at a market +139306,A footlong sandwich on a piece of paper next to a serrated knife. +334625,An injured man lying in a hospital bed wrapped in bandages. +87503,a picture of a bunch of train cars colored red. +527504,THERE ARE HORSES STANDING ON THE GRASS HILL SIDE +106053,Two slices of pizza have been placed on an plate on a coffee table. +520683,A very large brown brick clock tower with a large cross on top of it. +302760,A bathroom sink with a marble counter top under a large mirror. +511341,A man walking down a road holding a black umbrella. +311964,Young boys and girls taking pictures with their cell phones. +242139,A building shines in the clear sky as cars drive underneath. +367116,A couple of men standing in a living room holding game controllers. +288591,We are looking at a large truck parked in a garage. +424172,A group of people riding surfboards on top of the ocean. +67208,A man riding a motorcycle with a brown long horn bull behind him. +307569,Many jockies are riding horses down a beach. +558171,A man holding a device and a coke bottle in a clearing in a wood. +576200,A herd of cattle grazing on a lush green field. +526222,A woman swinging a racket at a tennis ball. +170346,A pack of mountain goats climbing up the side of a mountain. +27874,A train passing by an empty platform. +120356,The man stands in front of a television playing a video game. +308670,A skier flying through the air on their skis while holding a ski pole. +485742,a woman is hitting a tennis ball across the tennis court +14504,A large brown stuffed animal laying in the aisle of a retail store. +416267,A person playing tennis on a tennis court. +479950,A group of people sitting around a table on laptops. +229191,A bowl of chili and a half-eaten sandwich on a plate. +23126,A man is standing on top of two horses and holding the reigns. +492407,Two brown horses grazing in a field next to fence. +138119,Two elephants with seats tied to their backs for people to ride on. +352000,The large mirror has bright lighting behind it. +337826,"Sheared sheep on roadway taken from vehicle, with green hillside in background." +218960,A large brown bear sniffs something on the ground. +48129,Man sitting at a dinner table eating a chocolate piece of cake. +565776,A kitchen with a center white island topped with a bowl of greens. +376625,An old passenger trolley is on the street. +425388,A long bus drives through a wide city street +12010,A very close up picture of some food. +306426,A woman baking bread on top of a baking sheet. +246931,Two baby elephants are in a fenced enclosure. +238332,A colorful train engine on the railroad tracks. +525087,Cameramen take pictures of a man leading a horse on a track. +366723,a keyboard sits under neath a monitor +538414,A player in action batting in a baseball game. +297787,A person in a room with knives and scissors hanging on the wall. +117899,A kitchen filled with wooden cabinets and a table. +205782,A double decker bus sitting on the side of the road. +481654,A person wind surfing in a very large body of water. +543112,A bench sitting on a sidewalk near a line of cars. +172946,A group of people standing around holding Nintendo Wii controllers. +153344,Baseball players seen playing the game through the fence. +140270,A person is riding a horse around on grasses +38465,Traffic on a busy city street at night. +366316,An African elephant walks through a patch of swampy brush. +36661,A bedroom with a picture frames on the wall and lamp next to it. +399988,A man wearing a green shirt playing tennis. +18553,two brown dogs are laying next to each other +514082,A group of zebras up against one another +265050,A person lays on a bed and watches a computer. +551518,A man standing in a lush green field flying a kite. +332990,A man in his ski gear is in the deep snow. +153510,A close shot of a unique looking plate of food. +190656,A pizza sitting on top of a pan in an oven. +430821,a elephant that is in some tall grass +566264,A dog swimming in the ocean by itself. +212545,a girl wearing a cowboy hat while holding a dog +430160,A plate holding a sandwich with peanut butter and bananas. +430973,Large whole pizza pie with cheese and olive toppings. +56433,A little girl crying with one hand on a laptop. +28002,a large castle in front of a clear sky +531735,a couple of motorcycles are parked outside of a building +508787,A boy with red shirt and hat holding a baseball bat. +444273,Two zebra standing next to each other on a lush green hillside. +552824,A car parked outside of a gas station with chrome rims. +409542,A group of people walking past a tall clock. +234934,"Eggs, orange and vegetables are sitting on a plate." +351597,A computer station with one mac and a laptop are turned on. +153656,Two toothbrushes and a tube of toothpaste are in a cup. +368291,A blue plate of food on a table. +267349,A plate and a bowl hold several types of fruit. +197175,A couple of elephants walking around a body of water. +364299,An animal walking through a river on water. +195444,An old rusty fire hydrant standing on a cracked sidewalk. +271864,An extravagant bedroom with focus on the chandelier. +515367,Two boys are midair playing frisbee on the grass. +31043,The living room has pictures of trees on the wall +440000,a few large animals in a desert with a sky background +391656,A bathroom features a picture of a woman a toilet and a sink. +138821,Two giraffes stand in sand inside an enclosure. +306755,The child stands beside a toilet bowl with a light inside it. +202102,A person resting their head on a pillow next to an airplane window. +153092,Two birds are standing in the water together. +504414,A giraffe walking through the jungle next to mountains. +376767,A large building with a clock on it's face and a bird statue on top. +486905,A fire hydrant that is painted white and red +136846,A large truck driving past a shopping center on a rain covered road. +302789,A piece of luggage sitting on a hardwood floor next to a bed with items on it. +148909,A street light sitting next to a building on the side of a road. +370935,a male skateboarder in a black shirt is doing a trick +14743,Three light sheep are grazing on grass in a ring and a dark sheep is eating by himself. +414560,there are many cows that are laying in this barn +83065,a screen shot of a televised new weather report +405675,The fire hydrant on the side of the road is painted a bright yellow and orange. +148549,A young man holding a bunch of green bananas inside of a store. +24919,A herd of elephants standing on top of a field. +341868,A row of sail boats with trees in background. +30465,A beautiful white horse pulling a green carriage. +47724,A dog stands near toys outside in the yard. +39630,A tennis player in white wearing a white cap holds a red tennis racket. +218060,A woman with glasses using cellphone to take a picture. +452724,Nice large hotel room separated into two parts +124654,"A restroom view of a toilet, sink, and shower curtain." +572525,People are standing in a bus that is overloaded with luggage. +283858,A little boy riding a skateboard down the side of a ramp. +486805,A zebra stooped over eating grass in a field. +549112,The person is cutting the crusts off of the sandwiches. +423576,a small mug of coffee and a pair of glasses +442746,A girl is playing in a grassy area. +379210,A cat lying next to someone sitting on a bench. +381195,Two white bowls that are sitting on a table. +410437,A red fire hydrant sitting next to a sandwich sign. +207886,A man prepares to serve a pizza topped with french fries. +133933,A man and woman holding electronic devices in their hands. +92338,A herd of sheep grazing on a lush green hillside. +552217,A woman laying in her bed touching the alarm clock +482350,A cat standing near a dead bird with some words on the picture +536200,A young woman with tattoos using her cell phone.. +461410,A cat laying on top of a white bed on a pillow. +387855,Two trains near railway stops on the tracks. +414711,A building tower has two clocks on it. +206260,Assorted flavored donuts being grabbed by multiple hands. +37678,A train sitting under a display inside a building. +217948,Three brown bears looking out a cage at the ground below. +77172,a wooden weaving machine a window and some books and cds +468613,"In a restaurant kitchen, a woman prepare pizzas." +176634,A zebra playing on a field with logs of tree +86320,A bathroom sink sitting under a large mirror. +241124,A young man has his foot placed on a pole while another looks on. +419872,a man with a racket get ready to swing it +465453,a person standing and holding a game controller in one hand +150026,The hotdog is next to the cup that is on the table. +94566,A fluffy Siamese cat sitting on a table next to a computer monitor. +135281,Two people who are walking under the same umbrella. +105647,"A street with pedestrians, bikes, a jitney and a bus. " +316047,a spin brush tooth brush on the sink +140974,Upward closeup of crossed street signs in a winter setting. +255529,"Some tasty and nice food ready to eat. +" +156609,A white computer monitor on top of a wooden desk. +415768,The dish in the pot contains several different kinds of vegetables. +225133,A bunch of very pretty umbrellas displayed in a tree. +54091,A woman opening up a laptop computer gift in her living room +241889,A person doing a skiing trick in the air. +480780,A large bunch of bananas sitting in a tree. +120853,A close up of a sandwich with a drink in the back. +11360,A kitchen countertop is cluttered with various kitchen items. +304657,A tall building with lots of windows and a walkway. +482514,This photo includes a rusty primitive refrigerator against a wall. +53909,a picture of a cellphone on a cellphone +483643,A baby wearing a red shirt standing behind someone's hand. +515982,A man sliding into a base next to another baseball player. +170436,a woman sits on a chair with a laptop on her lap +137188,A cat laying down on a surface in a room. +419190,Two women wearing sunglasses enjoying a glass of alcohol. +489613,Photo of a uninstalled toilet on a towel and a drop cloth with buckets and bags. +160211,One hairy dog with sharp teeth riding with his head out the car window. +150943,A snowboarder stands next to a person in skis. +548882,A plate of food and a cup of coffee on table. +569729,A dog wearing sunglasses sitting inside a car. +74,A picture of a dog laying on the ground. +332067,A man leans down and fixes his snow shoes. +386707,A young man standing in front of a Canon store. +411044,two men playing tennis on a court inside a fence +67727,A bathroom sink with wood finish cabinets. +219260,A man stands outside of a steam locomotive. +379443,A pair of orange scissors is sitting on black mesh. +516038,A baseball player pitching a baseball on a field. +470623,A cat that is laying down underneath a car. +431876,The cops in the city are riding horses threw the streets. +571264,a man is standing next to a motorcycle outside +511724,A family of elephants standing next to each other. +91667,Two jets fly overhead while the crowds look +575179,A plate topped with small sandwiches with meat and veggies. +357604,a desk with a laptop and a computer monitor near a bed +397327,A white bathroom is shown with a blue towel. +375621,A man wearing glasses eating a sprinkle covered doughnut. +507921,Street signage on post near roadway in city environment. +293153,The sightseeing boat streams along the river joined by a plane +434488,"A clock tower, with a sky scrapper next to it." +297812,there is a woman sitting on a blanket having a picnic +195113,This is a colander with green apples in it. +153865,"A octopus, shark and monster kite flying above a crowd." +289712,A large room with many stacks of suitcases. +182775,A blue plate topped with food next to a fork and knife. +103462,Black and white photograph of a woman using a sewing machine. +286146,A birthday cake that is on a table. +206705,A wooden table in a kitchen next to a refrigerator. +98350,a person at a table with a plate of food +422778,a hand a white plate with a square pizza +422212,A wall with three different framed photos of tennis players and a tennis racket under each frame. +502163,A man tries to take another man's Frisbee. +177913,Two dogs sleep together on a bed. +12192,A little boy plays with a racket and ball. +350675,A person flying a kite high in the sky. +7288,A white toilet bowl with an electronic brown seat. +252219,a person with a shopping cart on a city street +60529,A man is enjoying a day snow skiing. +502336,A group of people walking down a street next to a tall building. +219315,Pastry and bottle of liquid on table with various bottles +521964,A produce stand shows a minimal amount of frui. +525021,Two motorcycle riders leaving out on a ride. +382557,A group of Korean people watching a woman sign an important document. +565597,Slices of pizza upside down on a plate on a table. +169808,The plate is empty on the table. +38938,A wooden desk with a cat and lamp on it. +169855,a bird trying to eat out of a bird house +112941,A group of people riding skis down the side of a snow covered mountain. +242073,Toilet in a bathroom in an international location with a basket. +80646,A dog sitting on top of a made bed. +168811,There is a crowd of people waiting for the train. +562207,A group of people are standing next to an elephant emerging from the water. +361693,A black bear that is walking in the woods. +525646,A pizza topped with pepperoni and extra spinach. +137507,"A cat playing with a red couch, with its eyes closed." +170147,A little girl is wearing a coat and boots while holding an umbrella on a dirt road. +562875,A white dresser with an attached mirror in a room with yellow walls. +95249,A man opens his mouth wide and holds a piece of food. +119964,A person holding a skateboard overlooks a dead field of crops. +475889,A group of people gather near a table with food. +509531,Three white rock vases on a table with yellow flowers. +440358,A young person becoming airborne while riding a snow board. +445295,A large commercial airline taking off from the airport. +533855,A white frosted donut with sprinkles and a jump rope with leather roping next to it. +497076,A man is riding an elephant down the street. +333365,A large white airplane in a stationary position. +61715,A passanger train moves on the rails of the city. +196,This table is filled with a variety of different dishes. +346865,a blurry picture of a cat and a window +454731,A table topped with a green bowl of cereal next to a ripe banana. +280888,A group of people on a field playing soccer. +311879,A white stove top oven sitting in a kitchen. +393928,A herd of sheep in an open snowy field +228893,A small group of zebras that are eating grass. +324837,A small computer screen opened in the room. +53328,Two men standing in a living room next to each other. +260896,A black bear with a white marking on its chest. +3335,A clean white toilet with the toilet seat up. +130456,A laptop and two controllers on a small table in front of a couch. +394659,"A kitchen is displayed, showing wooden cabinets and a blue tiled counter top." +428580,Two empty beach chairs laying on the sand. +3703,Ripe bananas sitting next to a laptop computer and plastic wrap. +518177,a tray of food going into an oven +466425,Two hot dogs on buns and unpeeled corn on the cob on a plate. +347254,Bearded man in a suit about to enjoy an adult beverage +411282,A pizza sitting on top of a pan on a table. +338054,a teddy bear handing from a persons hand +388299,A baby smiles with it's stuffed animal. +287366,A man sitting outside under an umbrella using a laptop. +205863,A computer component and a power strip sit on a desk. +528386,A bar is shown with a tv and decorations. +421437,A bear standing next to a tree flying a colorful kite. +88967,A three way sign is posted on an outdoor pole. +424219,Two large giraffe standing next to each other and an ostrich. +168775,A person standing in the kitchen holding a ladle above a bowl while reading a book. +285047,A person sitting at table with a cup looking at a cell phone. +255630,A person riding a wave on top of a board. +421908,A person skiing down a hill with poles +452687,A picture of a snowboard covered in snow. +253441,"A pink bathroom contains a toilet sink, cabinets, and mirror." +410484,Woman getting piece from a two-tier blue and white cake with star decorations. +305319,A woman laying on top of a surfboard in the ocean. +404297,A dog chasing a red frisbee across a field. +211282,A plate topped with pizza in two different pictures. +476120,The back of a microwave and it's plugs. +484301,A couple of motor bikes and cars on a street. +344730,A street sign next to a bend in the road. +463084,a bus pulling up to the bus stop in a city +346940,a stove top with a tea kettle with steam pouring out of it. +492196,A boat tugs a barge behind it through the water. +412338,A man and a woman posing for a picture while on a ski mountain. +495808,a person has a bag on wheels in a room +240147,The baseball player is throwing the fast pitch. +466774,A young elephant walks with two older elephants in a gated area. +493004,A person in snow gear riding on a snowboard. +531000,A giraffe with its teeth on a fence. +321542,The Big Ben clock tower towering over the city of London. +404461,A woman standing in an alley way holding an umbrella. +277932,A giraffe and two zebras walking in tall grass. +414071,three boys are enjoying a video game at home +518287,A toothbrush in a the toothpaste section of a toothbrush holder. +499591,Two black and white Clydesdale horses in a field. +1779,An intersection with a street sign and a building and palm trees in the background. +292140,Two adult elephants and a child elephant walking in the woods. +185930,This is a public bathroom with soap dispensers installed on the wall. +223183,A group of people on the beach flying some kites. +133556,Soriano lashes a double down the left field line +478821,Two zebra standing next to each other on a dirt field. +177535,There are several brown cows eating grass outside. +552504,a little girl that is running around with a kite +82258,Several books are stacked on a table. +203669,A man throwing a frisbee in a park +395831,A pink box filled with donuts next to a bottle of coke. +264424,a bunch of guys playing baseball on a field +538175,A little girl jumping on a small child's bed. +296994,a man reaching for a blue frisbee on a fence +510182,a lady in a blue dress on tennis court bouncing ball. +484414,a boy jumping his skateboard over a red box +167647,A medium sized pizza on a platter with about half of it gone +562885,A woman skiing down a snow covered slope. +392642,An overhead view of dogs sleeping on the couch looking out the window. +199969,A pile of wooden boxes filled with fruits and vegetables. +392476,"A desk with a monitor, keyboard and a laptop next to it. " +426972,A sparse room with a bed sitting in the corner. +539694,people sitting down using small laptop computers on a desk. +302375,Many different people riding bikes on the street. +169198,"A man in sunglasses, a suit and rope noose tie wearing black gloves." +47131,Men sorting through a toppled over train car. +380140,A kneeling woman takes a photo of a park bench. +332987,Man in a red shirt and blue jeans skateboarding. +533596,A young girl sitting at a table making cookies. +248911,A couple of knights riding horses on a green ground. +358252,The kitchen appears to be tidy with the dishes drying and the brook in the corner. +306343,A group of skateboarders riding their skateboards on a sidewalk. +182021,A man holding a baseball bat while standing on a baseball field. +572811,A woman that is sitting down holding a hotdog. +325328,A home made pizza and some wine on a table +543740,A toddler in his underwear stands in front of a sink. +361804,A woman in a pink bikini sitting next to a man with a surfboard. +82396,a statue of a man on a horse outside of england +518701,"A bed with clothes on it, a fan and large decorative cloth hanging over it." +159215,A person is taking a picture of three people with a camera. +342318,A train is pulling up to a platform to pick up passengers. +14276,A close-up of a zebra looking back behind him. +214306,A big brown dog looking out a pretty glass door. +375503,A stair case sitting next to a wooden desk with a computer on it. +210920,an open luggage bag near a laptop +274451,Several people are standing on a city street. +385181,A white dish with a tomato based casserole +263700,A citizen stands pointing to a Police motorcycle as the cop looks on. +143387,The skier in the helmet moves through thick snow. +361751,Benches side by side in a park +502959,Several people are around a table with cups of beer. +188345,A cake sitting on top of a table for someone named Raphael. +94271,A man sleeping next to a dachshund puppy. +188579,The view of a tall snow covered mountain with people on it. +404484,A woman bending over in a living room to pet her dog. +225014,A person in a costume on the back of a car. +301684,An elephant sitting while its trainer cleans it with a broom. +481010,A woman in white dress playing a game of tennis. +316400,"A teddy bear wearing a green Starbucks apron with the text ""BRASIL"" on it." +489159,"A large sandwich on a plate, with a small bowl of potato salad. " +204147,A man wearing a shirt holding a object in his right hand. +181852,A red suitcase next to a chair outside on the grass. +360849,A black dinning room table sitting in a yellow dinning room. +381463,A bus driving under a bridge down a road. +388037,a lady holds a basket of donuts and muffins with a bride in the background +238598,Two men and two women walking in the rain while on of the men has an umbrella over himself. +57377,A train that is sitting on the tracks. +335194,Many people are walking up and down the boardwalk. +233528,A desktop computer sitting on top of a desk. +2453,A bench near a bank of water with posts in the water. +389595,A person aiming the remote at the tv. +126671,a tiled bathroom with a toilet and bathtub inside of it +391300,The tailgate of a car open and two suitcases inside. +335177,A round intersection on a surburban street with one floor homes. +64016,A man has a crow sitting on his hand. +303590,A child sitting with container that has chips and a hot dog in it. +487607,A man standing next to a woman holding a tennis racquet. +527644,A jet is flying through the air leaving smoke behind it. +256055,A young girl holding a backpack while walking across a field. +480944,A traffic light sitting on the side of a road. +52966,A woman standing next to two smiling men. +455219,Some people in a field working with some big animals. +422536,A woman standing under a bunch of unripe bananas. +242909,A pizza sitting on top of a table. +367195,A dog laying down on a fluffy carpet +70229,a park bench that has a teddy bear on it +555983,A blurry motion picture of a person doing a wheelie on a motorcycle. +29170,A horse is on a deserted sandy beach with umbrellas. +118124,A man with glasses and a tie clip sits in his car. +416049,A couple of zebra standing next to each other. +119113,A tower that has a clock on the side of it. +112830,A woman standing next to a brown horse and small dog. +65088,A zebra staning in grass and looking at the camera +147667,Female tennis player getting ready to serve the ball +401783,A view of the mountains is shown from an airplane window. +675,A cat licking drink out of a cup that is sitting on a table. +233553,two giraffes in field near some trees +79380,A man riding on the back of a brown horse. +93434,Two boys are standing in front of a train with backpacks. +150639,A man sits in a car while on a phone. +30361,There is an empty cup of coffee next to a laptop and open book at a cafe. +566697,a plate with something that looks to be catfood. +461405,A group of sheep in a grassy area with trees in the back ground. +234953,A PICTURE OF A WORKER PUSHING LUGGAGE +450607,A red double decker bus is driving down the street. +80747,a young girl swinging with her teddy bear +493932,a statue of a golden elephant and another sculpture behind it +567142,A LOT OF PEOPLE ARE ON BOATS IN THE WATER +469103,A wooden table with an umbrella over it. +285558,Several young people sitting in a living room with the lights off. +524216,A large white bus driving down a street next to a sign. +555180,The train is traveling down the track towards Kingscote. +131138,a desk with a cup plate laptop monitor and keyboard +579697,A man poses with some fresh fruit at an outdoor market. +280909,A little girl is dressed for and ready to play tennis. +262262,A tall tower with a clock stands above a winter sky. +249443,a black bench is in front of a window +512479,A woman laying on a couch with a white cat on top of her. +285929,Two animals are walking through the tall grass of the woods. +180101,A boy getting ready to blow out candles on a birthday cake. +79465,A bathroom toilet nestled in a cubby is turned into a room for darts. +376608,A brown dog laying down in a room next to a desk. +50245,A skateboarder flipping his skateboard going down a ramp +562121,Two zebras fighting in a cloud of dust +512191,A young boy standing on a grass covered field under a flying kite. +269306,Pigeons attempt to eat pieces of pizza on the ground. +181870,this lady is standing next to her brown horse +345134,A suitcase that is on the floor with its handle up. +385842,A vase filled with colorful flowers next to a green vase. +140696,People carrying stuff down the street while a guy stands at the ATM +209035,A person standing on a tennis court holding a racquet. +228025,A kite flying over a sandy brown beach. +1490,A man in a wet suit stands on a surfboard and rows with a paddle. +115222,Two palm trees sitting next to a building. +289594,A man in a hat leaning against a pole +141962,A person with a helmet on a blue motorcycle. +440724,A blue and white plate topped with Chinese food. +444324,The man is standing in front of a door. +378672,a decorative seat sitting inside cut out bushes +1554,Three sheep in a pasture with people standing by the fence. +413349,A man that has a skateboard that is in the air. +564058,A bride and groom cut their wedding cake. +454195,a couple of elephants that are in a river +365983,A person in yellow pants and a blue shirt carries skis up a snowy mountain. +217509,A woman standing under a red stop sign on a green yard. +267115,A white dog sitting on a ledge of a window. +260608,a group of girls going after a soccer ball +578255,A person standing in the grass flying a kite. +559136,The person holds their poles up while skiing down a slope. +146465,A kitchen with lots of counter space and black and white appliances. +560620,A young man riding up the side of a dry swimming pol on a skateboard. +109370,A man holding a tennis racquet and a ball on top of a court. +257557,a forklift sitting in front of a factory +278321,two boats sitting on the shore close to the water +434089,a ram is eating some food from a wood trough +435334,horses grazing on a lush green field surrounded by trees. +335658,A keyboard and mouse sitting on a desk. +4795,A cat observing a computer screen next to a laptop and a cordless phone. +490279,A man in red shorts plays tennis on a green court. +462105,A bench overlooks a harbour with a lighthouse. +406976,Two dogs lay next to each other on a brown couch. +137108,A man hitting a tennis ball with a racquet. +365652,a person sitting on a bike near many other parked bikes +412362,Two women and one man pose for a picture. +29138,A group of four people standing next to each other. +444913,A man is playing outside with a Frisbee. +417742,An adult skier is holding the hand of a child skier. +183204,"A carpet with various items that includes shoes, clothing and toiletries." +229295,A woman standing on a boat squirting mustard on a hot dog held by a man standing on another boat +220025,An airplane nose sits in a hangar. +212384,A giraffe and zebra cake sits against a neutral backdrop. +136715,A man on a motorbike rides down the street. +7333,A young man riding a skateboard across leaf covered ground. +389197,A boy sliding down a waterslide at a waterpark. +359965,A white electronic toilet with the seat open. +222266,Slice of chocolate cake with frosting and sliced strawberry. +6220,A dark table has a large arrangement of food. +107087,A black cat sits in a car and looks out. +29370,An orange cat laying on top of a wooden table. +220292,A couple of cats lying in a red suit case on a bed. +167598,A tiered kite flies above a plaza of people +467116,An Asian man with back pack holds an ice-cream +42528,a person lifting a little stool with their feet and a person holding a cell phone +391674,A park bench is beside a stone wall and a flowering bush. +281101,A man standing on a tennis court holding a racquet. +191225,two couples having pizza and soda at a small resturant +203102,a woman on a tennis court playing tennis +444199,a person with a bat near many tvs +187722,View from out the seat of horse drawn carriage with man holding wine glass +409944,A picture of a tennis player yelling passionately. +365663,A young man riding his skateboard on a ramp. +26534,a person holding the string of a kite flying in the sky +35887,Three birds eat from a hanging bird feeder. +224342,A vase filled with yellow flowers on top of a table. +33377,two people with two dogs on a surf board and one dog swimming +397681,A group of twenty-five squares of different photos of carrots. +234938,A group of wooden benches sitting on top of a wooden deck. +459757,A giraffe standing by a pair of skinny trees. +96492,A toilet bowl with a tall white tank has a plunger type flush button. +294228,A girl flying a kite as two kids watch. +411047,A couple of cops walking towards a double decker bus. +330205,A snowboarder is airborne grabbing is board. +509158,A person riding skis on top of a snow covered ground. +321742,A picture of a lot of motorcycles together. +477946,A man flying through the air while riding a skateboard. +86630,A elephant in the sand with a white animal on top of it. +412339,Two people in a living room with wii remotes. +314779,"A neat hotel room with a bed, some furniture, and a patio." +106096,A man by a park bench is taking off his pants. +146193,A man walking into the ocean while holding a surfboard. +54088,a tow truck pulling a white card down the road +347039,A clock tower stands over a city landscape. +188077,A couple of airplanes sitting on top of an airport. +527163,The people are sitting on the dock beside of the water +184313,A horse drawn carriage standing in front of a city building +259555,"A beautiful woman sitting on a bench, looking at a cell phone." +542260,"kids play soccer is a soccer field, one boy just kicked the ball" +29709,"A photo of a dining venue outside complete with tables, chairs and umbrellas." +70870,A lone woman stands at an empty train station. +578977,Street intersection with stop sign near cement wall. +294814,Two horses drinking water from a trough in front of a building. +427338,A city made out of stone brick with large arches. +569535,A man standing on a tennis court holding a racquet. +367900,A blue and yellow train sitting in a train station. +383921,A herd of elephants walking across a body of water. +13232,A black-and-white photo of two teddy bears sitting on a piano. +547612,A bed covered in pillows with a towel on top of it. +463970,A close up image of a variety of donuts. +482436,The woman in the diner and the man looking into the window are making eye contact. +451123,A person cleaning a dogs teeth next to a table. +303667,A man holding a cell phone in a crowded mall. +437126,A cat sitting on the back of a car seat. +484584,a shirtless tennis player running up to meet the ball +579463,Two horses grazing in a field with ruins in the background. +71027,There are horses pulling a man and a cart. +10263,an empty living room with a fire place and a mirror +416733,a dirty room packed with a bunch of stuff +189365,A tennis player is holding a racket with both hands. +18654,A man that has fallen off a bucking horse at a rodeo. +371155,A bench is surrounded by grass and a few flowers. +395644,Five cats are sleeping on a bed with a red bedspread. +186079,A plain bathroom with toilet and bath tub +229000,two people standing very close to a microwave +430805,A brown bear walks in dried grass and branches. +243190,A variety of foods are mixed in a bowl. +559955,A platform at a train station with a train on either side. +370175,a dog is tied up by the leash outside with a bag +425035,a toilet seat in a bathroom with the lid down. +216581,this is a photo of a large crowd of young adults sitting on a long row of park benches +312632,A white toilet sitting in a bathroom next to a counter. +412247,A woman standing in a batting cage with a bat. +84004,A young woman riding a white surfboard on blue water in the ocean. +199641,A dog leaping outside to catch a frisbee. +133611,a big boat is going down a small river +260141,a group of boats resting in the water next to a bridge +25708,"A macaroni dish with broccoli, onion and tomato" +280211,A silver passenger train traveling down train tracks. +478220,A city that has many large and tall buildings. +273232,A man walking up the beach after finishing parasailing. +486573,A vase filled with water and white flowers. +115912,A dog walking along a beach next to a man on a kiteboard. +202935,A large clock tower with multiple clocks on it's face. +155617,A small bathroom with a checker board wall. +219201,A man hitting a tennis ball with a tennis racquet. +41839,A bathroom with a walk in shower next to a toilet and a sink. +156626,"A shelf containing candles, flowers and a mirror." +546670,a girl wearing a safety helmet getting on a skate board +295957,A girl standing up cautiously on her surfboard. +100510,an equestrian riding a horse jumping an obstacle +319706,A cat sits on a desk in front of a computer. +492937,A close up of a bike brake on a bicycle. +467675,An angry cat hissing while sitting on a bathroom counter. +459408,A bathroom under construction with a white tub next to a toilet. +313599,Hot dogs and french fries are lined up at a table. +387655,A man riding skis down a snow covered slope. +9395,A pitcher getting ready to release a pitch +82059,A multi colored train traveling past a small town. +250113,Frisbee being buriesd in sand by many pairs of feet +56983,a woman stares as a bird flys through the air +202653,A couple snugging together on a wooden bench. +249825,A young man is on his phone looking upwards. +435576,A man wearing a hat standing next to a pile of produce. +331667,Doors open to the train to let people board and unboard +321804,A man and a child standing on a tennis court. +163258,A white toilet sitting in a bathroom next to a wall. +516345,A beach scene with several surfers chatting on the beach +182202,An open laptop computer sitting next to a phone. +139455,A herd of cattle grazing in a dry field with snow off in the distance. +437432,a person waits by a sign for something maybe a bus +85045,A hand holding a sandwich wrapped in black and white checkered wrapping. +235836,A boy playing baseball about to hit a ball. +65433,A person is standing in front of a dog. +47807,A yellow banana sitting on top of a cutting board. +576045,A young girl prepares to throw a disc through a hoop while other watch in a gym. +223930,A motorcycle parked next to a few bicycles. +255272,a group of odd looking vases sitting on a shelf +196759,A Frito Lay delivery van parked outside in a parking lot. +23294,Four male surfers carrying their boards on a sandy beach. +19306,A city street with no traffic line with traffic lights. +494139,Two men looking at a computer screen with Wii remotes. +303814,A man smiles while throwing a frisbee. +5486,"A photograph of living room sofa, and dining set." +8401,three bears outside in the woods in the bushes +57086,A baseball batter is swinging a bat at an incoming pitch. +360504,The clear pool stood empty as people stood around nearby. +276863,A couple instrument cases are stacked up with a red hat on top for donations. +321035,A welcome cake for someone on a green table of some sort. +25609,A woman holding a pink donut covered in sprinkles. +505447,A plate that is flying in the air during the day. +472864,Cattle are grazing and laying on a green field. +80714,A pretty woman sitting at a desk using a laptop computer. +567789,A large water goblet half filled with a liquid. +256067,a person and a young child on a beach +50811,am empty bowl and three empty beer bottles in front of a man +322955,A bird standing on the shore of the beach +67832,Lamb chops over a bed of carrots and potatoes +132554,A woman holds the reins of a saddled horse +62347,a man standing on a red boat out on a large body of water. +356380,A room with a couch and a tv monitor +104715,Man flying a colorful dragon kite in a blue sky +477064,A very large dimly lit living room with double doors with windows. +385115,a kid playing with a kite as people walk along on the top of a hill +548201,Toilet with soap and cleaners on tile with white walls +89884,Two lounges are pictured next to a beautiful private pool. +306644,a bunch of cell phones sit inside of a display case +375449,A herd of sheep standing on top of a lush green field +232550,a man standing on a sidewalk outside a parkded bus +529698,a close up of a motorcycle parked on a street filled with people +88349,A small pizza sitting on top of a blue plate. +365035,A man is taking his own picture in a mirror. +404635,A group of elephants standing together in a field of grass. +92526,A giraffe eating leave from a small tree. +188689,Large ship washed up ashore on a long stretch of beach. +11269,View of a train coming in on the far side tracks +333290,A group of giraffe standing on top of a dirt field. +368900,A cluttered room filled with a tv and a kitchen. +135673,Two planes are close together in the sky. +81354,A close up of a pair of rusty scissors and wrench. +482305,A blue and yellow double decker bus on a street. +556130,A baseball player hopes to be safe while sliding into base. +215259,Two women playing a game with a Nintendo Wii controller. +12887,A living room filled with furniture and a black piano. +334614,Two black cows behind a gate near a red fire hydrant. +452696,A black cat sitting on top of a laptop computer. +31878,A group of different appliances sitting on top of a table. +384554,This is a giant metal refrigerator and freezer. +43290,a boat sitting under a rusty metal roof +153130,a woman hitting a tennis ball with her racket +542676,A woman is looking at a grey horse in the eye. +120235,A view out of a window that shows a winding river. +338472,A pile of oranges sitting inside of a basket. +90956,A man riding skis down a snow covered ski slope. +29094,A herd of sheep standing on top of a grass covered field. +183757,A cat sitting on top of a red boat next to two dogs. +284674,An empty red Nokia phone casing hanging from a Christmas tree. +351744,A train is passing by an empty platform +138970,two people moving a refrigerator next to two cars +216576,A group of young people wearing ski equipment. +259952,A small chair and bed in a room. +223123,A field of cows being looked at over bushes. +576539,a girl wearing a krispy kreme hat with donuts +574227,An old brick building with a clock tower. +256145,A crowd of young people sanding on a snow covered ski slope while holding ski equipment. +23774,An old green pickup truck on a flatbed truck behind a fence. +184929,Workers at indoor area with bunches of unripened fruit. +462213,a female sitting at a desk working on a laptop +528527,a statue of two people surfing in a fountain +43344,Two tennis players are sitting on the bench. +169389,Lambs grazing in a green pasture near the seaside. +146710,A woman hitting her coaches fist with her first on the court. +143572,a tennis player swings his tennis racket +137682,A man on a surfboard riding a wave. +279714,Closeup of a button in front of the Louisville Slugger factory in KY. +482562,some brown cabinets a table light and refrigerator +320715,A young man hits a tennis ball while wearing a helmet. +405188,A computer is connected to speakers and a hard drive on desk. +180751,a man pouring a drink into a wine glass +444568,A little boy with headphones in front of a computer. +511430,A full view of a kitchen with many things to use. +119861,This photo has a blurry background but you can see some nice wooden benches in the foreground. +147027,A monkey runs past some giraffe standing by the trees. +108392,A display case of different types of doughnuts in it. +432468,A cat sleeping on top of a closed suit case. +356787,A CD sitting inside of a microwave oven on a counter. +243218,a black cat is laying on a bed +298830,A lone cow standing behind a metal wire fence. +267840,a stop and go light on red out side of a building +360480,A woman in white jacket and green skirt playing tennis. +293452,Three birds are looking around while on the ground. +434990,A police car onsite of an accident involving a truck on a freeway. +350289,People carrying surfboards walking across a beach next to the ocean. +403038,"A table in the sun with a white cloth, beef sandwich, glass of beer, and bottle of wine." +27519,a person standing on a city sidewalk holding a dog leash +75319,A pile of lots of vegetables and produce. +533408,a public transit bus on a city street +13490,A white plate topped with mint angel food cake. +334069,A pile of luggage sitting on the side or a road. +40361,A baseball player preparing to swing the bat. +140702,Two elephants walk in the grass together by trees. +111988,A park bench on a beach of white sand looking out to the ocean. +465257,Elephants walking with each other to travel to a place. +126192,A giraffe running across a grass covered field. +72621,Two white birds sitting on sand with water in the background. +111944,A guy on skis with another skier farther behind him. +505516,an umpire wand players watching the batter slide into first base +293811,"Men on a baseball diamond playing baseball, a man just swung" +305437,A teenaged girl at a booth at an educational fair +310262,A dog leaping into the air to catch a yellow frisbee. +315196,A man riding a bike down a street with a woman. +162685,A group of people standing in a bathroom while man puts on a tie. +125182,A large neon sign sitting next to a green traffic sign. +220277,An older skateboarder holds a long pole as he skates. +262531,A man riding a skateboard on a street near a park. +539238,"A women, baby, and a dog are standing next to a pool. " +46882,Many people are playing a game and having fun. +246057,A fire truck turning at the corner of a road. +73832,a woman standing beside a fire hydrant and posing for the camera +348400,A person getting out of a taxi cap holding a pink umbrella. +19090,A man and a lady holding up some cameras near each other. +286994,some elephants and one is by some water +63934,A person that is riding a skateboard on the street. +398606,A bathroom with a reflection of a television and a sink. +201452,A couple of people standing on a beach holding surfboards. +334311,A bench sitting on the side of an empty walking path. +202926,Pelicans and sea gulls are sitting on the beach. +357229,A whole cheese pizza with a fork and a knife on a table. +174603,A group of men play frisbee in a field. +313057,A short commuter train traveling along the train tracks with snow on the ground. +353953,Man standing in front of a television holding up a Wii controller. +105961,A picture of an old creepy man standing next to an old creepy woman. +50482,The scene is three large racks of skis on a mountain. +577976,A utility truck is parked in the street beside traffic cones. +10920,A car and traffic light on a city street. +569070,some zebras standing around a tree in a cage +208589,A bird in a pot eating a fruit. +392915,"A neat and tidy, modern, residential, family kitchen" +70370,The laptop is on a desk near an office chair. +257920,Double decker bus with dancers advertised in the side +96625,A man is performing a trick on skis. +467130,there are people sitting on benches as two woman walk by +173057,A large clock tower in front of a building next to a fountain. +547597,A curvy road line with tall buildings and post. +119630,Many suitcases are lined up on a floor +156487,A highway with a Rue Paul St. sign beside it. +264124,A person that is on his cell phone. +71090,A cat sleeping next to a large white teddy bear wearing birthday hat. +292822,a small boat in a large body of water +533816,A couple of women standing on a tennis court around a man. +55072,A single giraffe looks over the green brush. +340559,There are two sinks next to two mirrors. +338105,cars that are stopped at a traffic light +416543,A white bus driving down a street near buildings. +451202,A classic car parked next to a large metal Canadian airplane. +410004,A man in blue and white shirt on street next to bunches of bananas. +120682,A man riding a bike while talking on a cell phone. +61960,A PERSON LAYING ON A BED WITH THIGH HIGHS AND HEELS +187352,The young man tennis player is serving the ball. +412757,Two green buses parked along the side of a city street. +331600,A picture of many brick building and a large sign outside. +347836,A man and boy ride horse and stir up dust. +281111,A man sanding next to a brick oven filled with fire. +63040,Many families are sitting down with their dogs. +394904,A couple walking down a path by the waters edge. +248774,a brown horse with a blond mane and a red horse +172702,A advertising billboard next to a street light at night. +510636,a woman is sitting under an umbrella outside +65982,A woman leaning on a building talking on her cell phone +522427,A woman holding a cat over a cake and cupcakes. +79031,A kid on a surboard riding a little wave +243980,A couple of baseball players are on the field. +458727,This man is standing on a tennis court holding a racket while people are watching. +297562,A little baby is getting a haircut in a pink chair. +276964,An above snap shot of a flushing toilet bowl. +91545,A man with hoodie skateboarding on a lonely road. +220307,"A picture of two giraffes, fairly close to a road, with a bus traveling up it." +333237,There is a room with rose wallpaper and a large bed. +56669,A man has thrown a frisbee into a metal structure. +35975,A large pizza sitting on top of a cutting board. +20268,A measuring cup with melted butter is inside the microwave. +486974,A clock tower on an old building of a village +535156,A large elephant scratching it's back on the side of a pole. +537548,A soldier riding a red motorcycle down a busy street. +279081,A traffic light on a street corner with shops behind it. +388457,a neatly made bed in a bedroom iwth a window +61503,A woman standing under an umbrella looking up. +408817,A airplane that is flying over a mountain. +12670,A crowd of people standing around each other. +222903,"A table with cups, a plate with cheese and tomato and a platter of bread." +207172,Two boats pulled up to the docks where there are people walking. +140843,Two soccer teams playing a soccer match in a stadium. +5644,A boy flying through the air with his skateboard as it flips around. +449296,A kitchen sink with cupboards of dishes stored above it. +500565,A woman holding a child wrapped in a towel brushing her teeth. +342367,A TV showing two men in hats and women. +69356,A woman standing in front of a fruit stand. +279176,A group of people playing frisbee in a field. +82138,A merry go round with lots of colorful giraffe and other animals. +467138,A woman is holding a tennis racquet on the tennis court +378169,A man wearing a black suit and red tie. +114549,Set of bananas hanging off of a banana tree. +416730,The woman is talking on a cell phone +460333,A young boy sitting on a bed in a bedroom. +242510,A large white dog statue sitting next to a clock. +401816,A group of three men walking horses on a paved country road. +569437,A skateboarder flips his skateboard in mid air. +108327,A man who is holding a Frisbee in his hand. +441752,People standing around two model stunt planes on grass. +67536,A computer keyboard sitting on top of a table. +36487,There is a female tennis player wearing white shorts and a white bra +284365,a kitchen that has a sink and a stove in it +325688,two birds flying over some water and their reflection +222866,"A bowl filled with pasta, sauce and vegetables." +197444,"A delicious gourmet berry desert dish with a scoop of ice cream, " +552289,A black purse and cell phone on a table next to an orange peel and newspaper. +357552,the green double decker bus is parked and ready to go. +318174,A laptop computer and several books at a work station. +463690,The man is lying on the sidewalk with one leg in the air. +412767,A toasted sandwich sits on a wooden cutting board. +121677,A cake sitting on top of a table next to a pie. +200451,A group of people standing on top of a sandy beach. +170232,A bus driving down a street in a small city. +153229,The group of young men is playing a game of Frisbee. +23731,a calico kitty sleeping in an orange chair +290833,A large zebra and baby zebra standing inside an enclosure eating. +389401,A dog sniffing a bicycle U-lock attached to a blue bike +77813,A small bathroom with a roll of toilet paper and a toilet +150874,A hotel room filled with beige and blue furniture. +442791,A small animal on a rock near some Frisbee. +77963,A very colorful room with models of cows afixed to the ceiling. +65208,A man walking while holding an umbrella on a wet sidewalk. +262175,a man is standing in the woods wearing a hat and glasses +52005,The yellow fire hydrant is next to the bushes. +218215,A large white polar bear rolling around in a body of water. +464263,A window view of a garden at a workstation. +452866,A man and woman cut their special cake together. +405093,A sexy young woman standing on a tennis court holding a tennis racquet. +88286,a person on a skate board getting pushed by someone else +128791,"Sparrow bird on branch, with beak inspecting leaves on branch" +173584,Two fighter jets flying through a blue sky. +522446,a number of people sitting at a bar with wine glasses +569274,a couple of kids that are eating at a table +426259,Snow skiers at the base of the mountain slope. +416885,Three pastry desserts and two glasses of wine are on a table. +344229,Two benches at a light rail stop during the winter. +403854,"People standing on a crowded sidewalk in the evening, many holding umbrellas." +102446,"A living area with counter, chairs, windows and an air hockey table." +344308,"An elegant bedroom with a draped, decorated bed." +579462,A woman that is standing near a open suitcase. +88462,A large yellow school bus stopping on a road. +428867,A group of different colored teddy bears sitting on top of a blue table. +407387,A flock of birds standing on top of a grass hill. +244235,A gray and silver fire hydrant sitting next to a rock. +540816,A large passenger jet flying through a blue sky. +494731,Black birds on a wood fence near the ocean. +136915,A man who is looking at a baseball bat. +301347,Two giraffe standing next to a chain link fence. +97513,"Cherry tomatoes, cheese, beans and broccoli on a table " +292428,A man's feet resting on a skateboard +443197,A striped cat curled up above a comforter. +50124,Passenger bus stationary in traffic on city street. +103134,Two ladies are standing near a few toilets. +556230,"a kitchen has a chrome stove and oven with white cabinets. +" +96566,The young woman seems to be very happy about her food. +84929,Teddy Bear sitting on a radiator wearing a hat. +209221,A train pulling out of a train station next to train tracks. +428856,There is a battleship floating in the water. +77184,A two story boat sailing on a crystal blue body of water. +534784,People walking across two bridges on a sunny day +174239,Some type of colorful vegetable is wet and sitting on the counter +25158,A little girl holding a red frisbee while wearing a pink visor. +159598,A food vending machine with food inside of window boxes. +180917,A large stone building with a tower and arched windows. +137560,A group of children dressed in purple at a tennis practice. +140490,People enjoying the beach during a sunny day. +512302,A hand holding a bacon wrap over a chalk board. +448626,Two white vans of some sort parked near a mountain. +97994,Three laptop computers and a desktop computer sit next to each other. +421979,A flower is on an object that is lit. +105783,A bear made out of gummy bears sitting on a counter. +362368,A small boy holding a plate of tasty looking food. +190326,A cat standing on top of a car trunk next to a parked motorcycle. +180539,A group of people walking across a snow covered slope. +439902,A gorgeous young lady holding a cell phone in her right hand. +441929,A person riding skis across a snow covered forest. +199959,A train pulls into a covered train stop where people wait. +154095,A white bed with a rucksack and bag on it. +520840,A group of giraffes drinking from big puddles of water. +145378,Two young boys riding skis down the side of a snow covered slope. +197090,A red stop sign sitting on the side of a street. +75033,A big guy with a bear flying a kite in the sky. +167131,some broccoli and shredded carrots sitting on a cutting board with a knife +131386,A group of airplanes in the sky in formation. +104893,a yellow and black train sitting on track +33854,"A bus, old cabin cars, and motor cycles with people " +188818,a painting is hanging over a television in a room +553420,a number of street signs with a business sign in the background +54603,A mirror sitting on top of a wooden dresser. +513039,A man surfing along a small wave in the ocean. +235200,A picture of some animals eating some grass. +388453,A very big room full of people with fancy chandeliers. +244575,Two horses in a wooded area amongst bushes +271576,A dog standing on top of a boat in a body of water. +290981,A herd of sheep that are grazing in a field. +53606,A train covered with graffiti moves along an urban track. +270354,A boarded up white house sitting on a grass lot. +366493,a close up of sliced apple with a blurry background +268396,A stop sign with a green street sign posted above it. +214127,A man flying through the air while riding a snowboard. +33221,A woman holding a tennis racquet in the air +417632,A man pouring wine into two other mens wine glasses +403672,A boy is preparing to play on a sport field. +109924,The cake is in the shape of a long train. +555538,A catcher in baseball with his arm extended. +326837,A man standing in front of a stove cooking. +275781,A woman in red shirt standing in bathroom with sinks and a television. +352259,"A boy swings the bat, just hitting the ball, as the catcher and umpire are in the background in this city league baseball game. " +568131,This elephant is walking through grass near rocks. +397980,a little boy that is hitting a baseball ball +255338,A man riding skis down the side of a mountain. +412384,A child holding an umbrella in front of a house. +306879,A boy and a girl trying to fly a kite. +294163,A large white clock tower filled with light. +262229,A group of young ladies playing a game of soccer. +391560,"Dull red train, 54, between grass and trees." +240111,A bath tub sitting next to a toilet under a window. +209763,A statue of a man with a walking stick is draped with a flower garland and a teddy bear in his hand. +119402,A gold bus traveling on a single lane road +94599,A woman standing next to a pile of luggage. +255483,Man looking over paperwork while holding pen on desk. +478155,Trays of snacks and a bottle of wine. +472795,A cow standing near a curb in front of a store. +450577,A HORSE IS IN THE BACK ON A DISPLAY WAGON +112677,A small dog that is sitting in a sailboat panting. +205190,two trains sit motionless at a train depot +268484,A crowd of people flying kites next to a city with tall buildings. +272148,Several surfers paddling on their boards out in the ocean. +66179,A large green banana plant sitting next to a wooden fence. +256860,A tall clock tower being reflected in a window. +277689,Lavishly decorated cake and empty drinking glasses await their tropical guests +90255,An old lady smiling in a pink kitchen. +230150,A couple of dogs standing and laying on top of a deck. +493284,A group of adult and young elephants walking. +190292,"music sheets in a binder sit on the table with scissors, tape, a pen and ruler " +91406,Several women gathered together posing with 6 pizzas in take out boxes. +192676,A large white dead polar bear on display in a museum. +360762,A basket with a stuffed teddy bear hangs outside. +249687,A young kid with skiing gear on the snow +130522,a little puppy dog in some kind of bag +142718,A red motorcycle riding down one side of the street and a cow walking down the other side of the street. +245313,Snow skiers pose near a ski trail sign. +268247,A vase with a flower sitting on top of a wooden table. +90280,A blender sitting next to a field full of grass. +356299,A white sink in a bathroom under a mirror. +350000,There are orange beach umbrellas lined up on a beach +231822,A tray of various foods next to drinks on a table. +256481,Three cats that are sitting in a window. +237597,A small elephant licking a blue metal fence. +480842,Two tall giraffe standing next to each other. +106335,Several vehicles turning the corner on a busy intersection. +406500,some people on a park bench in a field +272678,A group of people sitting at a table with laptops. +581702,A close up of a red and black bird on a rock. +377881,The chair next to the person has been used as a table for things. +233651,A man holding a bag with a doughnut in it. +33753,A wooden park bench with a remote control on top of it. +231343,A man holding a baseball bat on a field. +37003,An older gentleman in a white shirt and black bow tie. +401653,Animals walk around a grassy area together. +175364,"A kitchen with two stoves, an island, and appliances." +504378,Two airplanes flying in tandem leave a smoky contrail in the sky. +571450,A woman laying in bed while reading a book. +342335,A sign next to a stone wall stating the road name. +205103,A cute kitten playing with strings on a shoe. +548722,A zebra in scrub land with small trees behind. +313214,A group of people flying kites at the beach. +466838,"two women sit at a table, one just took a slice of pizza. " +378655,Slider burgers with hot dog and fries on plate on table +66181,Two framed photos of two toddlers next to a lemon and a plant +502798,a brown and black ox and a white and black one and grass +498765,A man sitting on a couch holding food in his hands. +13923,a room that has some furniture and a table in it +16598,A girl with blue hair is taking a self portrait. +384661,"An oven with a stove, pots and utensils, and a refrigerator next to it." +121812,This hazy picture depicts traffic on a busy street. +470161,A woman sits on a bed and holds a book. +19308,An adorable cat rolling around on it's back while holding a toothbrush in it's mouth. +211785,A herd of sheep walking around in the snow. +232243,a man holding a bag watches a baseball game unfold +432334,a man that is standing on a beach with a board +209530,A group of people sitting around a table. +321798,Fruit in plastic cups and toast and food on a plastic tray. +368153,Two blonde horses standing in a field grazing on grass. +13291,A group of people hold up Frisbees for the camera. +191342,A group of people sitting around a dinner table. +75646,A group of well dressed women sitting next to each other with small children. +82715,A person that is surfing in the water. +509588,A couple of zebra standing next to a metal fence. +86336,a large building that has a clock at the top +75748,A train on some train tracks near some trees +314182,Four bowls of different eatables are kept on the slab. +19716,a business man posing for a stock photo and cheesin mad hard +423125,A person standing on a surfboard surfing the waves. +198805,A group of trucks and cars parked in a parking lot. +544811,Two birds flying in the sky over a lake +536088,A huge cake with decor and flowers siting on a table. +258078,A young boy standing next to a yellow bike. +504353,The girl lies on the bed near many stuffed bears. +246809,A small boat traveling past a red light house. +279386,A small cat sitting under a wooden table. +578168,Several bench seats lined up in the car of a vehicle. +436871,A view of a lake and mountains from a boat. +40259,A large clock tower sitting next to a red brick building. +268838,Several sheep are in a grassy field with trees. +101715,a close up of banana peels near a drink +90554,"A decorated hair salon cake with brush, comb, razors, scissors and shaving cream " +392555,A zebra looks after one of its injured brethren. +262030,this bathroom is big and has a jacuzzi tub made of wood +106172,A guy posing with a guitar while making a song. +252911,A man riding a motorcycle next to a woman driving an SUV +474347,An elephant standing around beside a tree. +541010,A soccer team is praying on the field. +85764,Mixed assortment of vegetables on a wooden plate with several different types of vedgies. +299089,There's a field of brown grass with zebras in it +361527,Apple computer monitor with a keyboard and mouse next to a ipod +240537,A man is herding some sheep and with a black dog. +223746,A man standing in a bathroom not wearing a shirt. +385707,A glass of reed wine sits next to a half empty bottle +213829,A group of people on skis posing for the picture +217228,a zebra grazing on grass in an open field +450885,a lady that has a tennis racket in her hand +527535,A dessert topped with whipped cream sits on a table. +410627,The young man is stirring his pot of food with a wooden spoon. +568398,Small home made pizza with olives and pepperoni. +300375,a person laying in bed with medicine on the night stand +209289,Two small dogs standing next to each other in a field. +73139,A clock with two little chefs on either side of it. +315248,A spotted dog sits protectively with it's toy. +68155,A woman standing in front of a TV in a living room. +503424,Vibrant cake displays in a glass case to view. +324962,The young girl is learning to ride her skateboard outside. +391933,A man riding on the back of a brown horse through a river. +87493,a cell phone painted on a wall near a bike +68628,Guy jumps off the steps doing a flip trick with his skateboard +5064,A baseball player swinging a bat during a game. +485802,An airplane leaving a trail in the sky. +524992,a red blue and yellow bus and a green and white bus and some people +294030,The jet is flying high in sky threw the sun +442523,a horse in a a field near many trees +245497,A man flying through the air on a skateboard. +535842,A muffin sitting on a plate next to a mug. +517832,A small black dog sitting in an orange checkered chair. +166392,Mastering the art of skateboarding is profoundly beneficial. +7274,A family is sitting around a dinner table. +268938,a couple of zebras are standing in a green field +527260,A kitchen cluttered with dishes with a stove and oven. +459898,Some animals run together in the tall grass. +360983,A young girl who is looking at a tray of cupcakes. +579081,A group of people riding in a ski lift above a mountain. +357567,A small bathroom with a white toilet next to a shower curtain covered bath tub. +474078,a baseball player bunting at a baseball on a field +59479,Lamps are the only lighting in this kitchen. +561620,Light from an open door shines on a simple wooden pew in a church. +407948,some people walking into the water with some surfboards +247216,A baseball player is pitching a ball. +449043,There is a very tall tower that has a clock on it +281397,Black and white photo of cars parked on the street. +548331,A dog standing in front of a white frisbee at night. +110048,A plate of food with sauce and chopsticks. +545663,Two zebras are standing in an enclosure behind a fence. +561903,A dog standing by a television in a room. +559101,"A baby in a softly colorful padded chair, holding a red plastic toy." +127669,A man on a surfboard jumping over a wave. +133412,A sliced pizza on a metal pan on a table. +405621,there are several stop signs along side the grass +196342,An empty narrow bathroom with the sink outside of the door. +556633,This master bedroom has a bathroom behind glass walls. +418226,A row of wall mounted urinals under aquariums. +156806,A vase sitting on a hard wood floor with flowers sticking out of it. +32907,a toilet on the ground outdoors in front of a house +93806,A group of people racing down a snow covered slope. +280360,A blue airplane flies in a clear blue sky. +16776,Two black bears climbing up a lush green tree. +272253,Whatever is in the cup does not please this woman. +84783,A cat sits between a window and a large birdcage. +230877,A woman on a surfboard is riding on a wave +581226,A group of what appears to be young people playing on a game system. +421316,A white toilet sitting under a bathroom mirror. +468777,The small frog is lying on leaves of the same color as it's body. +125958,a person is riding a horse by the beach +542611,The toaster adorned with a face sits atop the tiled surface. +451623,A lady stops along a street to munch down a hotdog. +521542,A pink cookie jar on a tile kitchen counter. +282741,A cart with wheels with several trunks atop it +508101,a man is standing at the back of a boat +532695,a group of people dressed in old fashioned clothes +281541,A woman holding a phone up to her ear. +480438,a close up of a plate of food on a table near a cup of water +212761,A group of people walking down a wet sidewalk. +244792,a close up of a plate of food with waffles +136271,A display case in a store filled with apples and oranges. +275198,A group of people holding umbrellas eating a meal outdoors. +402786,There are several beds in this room put together +563927,A woman in yellow is hitting a tennis ball on a clay court. +479562,A woman talks on a cellphone while standing outdoors. +69189,A man riding a bike down a street. +573206,a pizza with olives sitting on a pizza pan on top of an oven +69668,A man cooking some square food in an oven. +450458,A car and a train on a city street. +461092,A grey brick building with snow outside. +108243,a dried out tree with fruit hanging on it +47112,A dining table has a large pizza and wine glasses. +278184,A white furry puppy dog nestled beside a brown teddy bear. +420548,A man looks excited and holds up his kite +199050,A black and white picture of a group of people. +460967,A colorful bus parked in a lot beside a tall building with many windows. +533123,A woman holding a baby boy in her hands. +49688,a person riding a wave on top of a surfboard. +231628,A man riding a paddle board on a large body of water. +493682,A street corner with a bunch of highway signs on it. +88640,Ms Williams is participating in the championship tennis match. +92675,"Man in white suit, riding white horse in ceremonial procession." +16958,A room with a fireplace and a wooden table. +308263,One light brown cow with hay in it's mouth. +39484,A variety of cars on a street with buildings. +298344,A boogie board or writing on a large wave in the ocean that is Brakey +473109,A bald man with a beard wearing a polka dot bow tie. +121961,A surfer riding their surfboard through waves in the ocean. +198733,A guy jumping in the air on a skateboard. +9275,"A picnic with alcohol, a large cooler, a blender, and mixers." +184330,there is a airplane that is landed at the airport +36678,The Big Ben clock tower towering over the city of London. +44003,A street sign that has been modified so the name is changed. +288465,Sheep in the process of getting sheered of their wool +507317,People at a museum looking at some pottery +487050,The statues were of famous old baseball players. +487151,A man holding a baseball bat while on a field. +360512,A herd of zebra standing next to each other on a dry grass field. +319369,Two women talk at a beach rental kiosk. +245414,a little girl walking on a beach with an umbrella +89555,A cat is asleep on top of a bed. +462929,Two men in suits and ties next to plant. +555356,some tin foil is wrapped around something in a kitchen +455506,A dog holds a Frisbee outside on the grass. +279420,Child on skis with tips pointing at each other. +129440,A woman standing on a beach next to the ocean. +371529,A woman with her hand on the seat of an automatic toilet in a display. +541485,An elephant that is walking among some bushes. +571091,a couple of bags that are on a wooden floor +67534,Not really a good choice for this shirt and tie combination. +223816,One brown cow sitting on top of the rocky ground. +303163,A flock of birds is flying around the factory structure. +291861,A Zebra standing in between a group of large rocks +231732,"A sink with a toothbrush holder, soap and a mirror around it. " +375980,A white table topped with black plates filled with cakes. +316995,A man walking down a beach holding a surf board +133470,Two people relax by the ocean on the beach. +486046,a giraffe staring right into the camera +209755,A person stirring a pot of stew with a wooden spoon. +322480,A plate topped with a sandwich covered in seeds. +401718,An assortment of foods arranged on a plate. +357903,Two pizzas with cheese and an egg on top. +160437,A zebra laying next to another zebra on a dirt covered floor. +410632,A group of three men standing on a baseball field. +14226,A man sitting on a train at a table using a laptop. +442128,A man standing in a kitchen remodeling it. +287527,A young man and woman holding their heads close to each other. +134016,bowls filled with different foods next to a plate of broccoli. +65288,A yellow and green object with a brown bird perched on top of it. +427133,A group of people behind a white picket fence watching a person in the grass with a dog and small group of sheep. +243478,A living room with a brown couch and foot stool. +387434,A cat drinking out of a cup on a night stand. +443712,The man stands outside of a store holding a piece of food. +356248, a man holding onto a little blond girl +102421,THERE IS AN ADULT CAT THAT IS LOOKING AT SOMETHING +472054,A woman standing in a park with a paper cutout boat. +522779,A kitchen seen is pictured while food is being prepared. +404944,a person has an orange cellphone and a laptop +79014,This is a blurry image of a man looking at something yellow and roundish. +366648,A plate of food that includes peas and pasta. +446751,some elephants in some tall brown grass and trees +2890,A group of people riding skis down a snow covered street. +125069,A flat screen tv sitting on top of a wooden dresser. +469165,a man at a baseball base with the catcher behind him +213605,A bus parked next to a white building with red trimming. +73,A motorcycle parked in a parking space next to another motorcycle. +96785,A couple of women standing next to each other in front of a store. +347557,Three elephants in sandy area next to trees. +328730,Two men enjoy glasses of beer at a gathering. +292991,THIS IS A PHOTO OF SOMEONES LUGGAGE LEFT BEHIND +262235,A beautiful young lady talking on a phone while smiling. +317683,A room with two tables sitting around a fire place. +300903,Two men in orange shirts and two men in white shirts diving for a white frisbee. +520636,A white blanket with some stuffed bears on top. +517967,A picture that has a lady with a laptop. +296745,A very large elephant reaching its trunk out to a crowd. +414196,A person holding a camera phone in their left hand. +45057,This messy pizza is covered in cheese and mushrooms +323128,A cat curled up in a sunny spot on a table sleeping. +204767,A man wearing sun glasses is wearing a suit and tie and holding two things in his hands. +543034,there is a dog and a cat sitting in a basket +570386,Kites being flown in the air during the day. +190441,A flock of white sheep in a green field. +167240,A vase siting on top of a wooden shelf near a map. +437599,A silver spoon sitting on top of an unknown surface. +24921,A small white boat floating on top of a river. +282674,a dog that is laying down next to a truck +5032,A woman and a kid are standing on skis in the snow. +518039,A half a pizza sitting on top of a white plate. +454314,A bear and two other animals in the grass near the woods. +297046,A train crosses an intersection while cars wait. +286493,Subway train pulling into the station for boarding. +146672,A couple of clocks next to a wine glass +477016,A young child stands in the kitchen with an adult. +410252,A family pet who has gotten its head stuck inside a article of clothing. +548209,A person guiding a child down a hill on skis. +34214,A man flying through the air on a skateboard. +360735,There is a man with a helmet riding a motorcycle. +143961,A group of people standing and sitting on top of a field. +556751,A beautiful little blond girl using a smart phone. +576650,People walking down the street while some people ride their bicycles. +206381,A girl chatting with a mother goat while her baby goat looks on. +306339,A dog chewing on a mans shoes as he lays on a field. +290170,A person is riding a small motorcycle in a parking lot. +500495,Four giraffes standing behind a short wall with trees behind them. +274708,Several people in skis standing on a snow covered incline. +484080,A glass vase filled with oranges on a table next to a plate filled with even more oranges. +290002,A red fire hydrant on the side of a street. +328921,A group of three dummy heads covered in hats. +563604,A sign outside of a closed road redirecting traffic +244159,a living room with couches and a television +106848,A vase on a table stands next to a hanging picture. +97479,A young woman sits on a park bench wearing a hat. +4392,A dog laying on it's back among pillows and blankets. +153288,A Star wars storm trooper holding a pink umbrella. +403619,a hand a cellphone a laptop and a beer coaster +475887,"A monitor, two tablets and a laptop computer sitting on a table." +429246,A crowd of people walking on a sidewalk while holding umbrellas. +311846,Each of the three cakes have icing flowers on them. +280536,a couple of treys full of food sit next to each other +252388,"A woman, and baby use toothbrushes in front of a sink." +67788,A group of boats floating on top of a lake. +432570,A vase of flowers is sitting by a window. +428945,The young zebra has begun to form his adult stripes. +423617,a wet road busy with traffic like a taxi and bus +224702,A woman watches the tennis player who is about to serve a ball. +13031,a person jumping a jet ski in the air +534178,Different colored ties hang near two old picture frames. +455557,some zebras are eating green grass and a hill +222330,"Two signs in front of a red brick building that say ""Tow Away No Stopping from 4pm to 6pm"" and ""No Parking from 2am to 6am""." +208406,a man performs a trick on a skate board as people look on +425303,A large passenger jet flying over the top of a large body of water. +218189,A group of people standing in a field with kites in the background. +289309,A wicker basket carrying a variety of fruit. +533485,A white vase filled with pink flowers with green leaves. +514200,This is an image of a clock tower with abstract architecture . +52546,A laptop computer sitting on top of a table next to a tree. +125129,A man in an Arabic type outfit on a cell phone. +180362,A car dashboard with a group of brown cows waking towards it. +551995,A little girl sitting at a table with a plate of food. +459272,A woman holding a smart phone next to a group of people. +515158,A man wearing a red wig eating a banana. +253575,Two polar bears walking in a snowy field. +341409,A group of surfboards sitting next to each other on a beach. +540160,A person on a long large train on a track. +406001,A zebra rolling around on it's back in a field. +227960,A mostly empty dish of brussel sprouts and carrots. +2225,A little girl is eating a chocolate doughnut. +289263,A girl in bikini standing with surfboard on the beach. +407121,A man with glasses sitting at a desktop computer. +482994,A large white cat sitting on top of a piece of luggage. +381786,Two sheep running in the snow with something covering their bodies. +538255,A yellow school bus driving past a traffic light. +49881,a couple of people on some motorcycles +194310,A woman holding a tennis racquet in her left hand. +303556,A man and woman on beach playing with a frisbee. +377352,Two bikers riding their bikes on the road stopped in front of the line. +53434,A fuzzy photo shows a simple bathroom and bathtub. +118065,A farmers marked filled with lots of fresh produce. +448765,A restroom with two toilets sitting side by side. +135561,"The kitchen is lit with overhead lights, shining on the cupboard and sink" +85813,The couple is skiing down the hill together. +446005,A kitchen has wooden cabinets and black countertops. +457400,A woman looking at maps spread out on a bed. +1290,A baby in high chair with bib and cake. +476810,a cat is on a table next to a remote +85823,"Two horses grazing on grass in the sun +" +405166,a horse pulling a cart with some people inside of it +527480,person in shadow watersking in large body of water +508949,A woman riding skis next to a brown dog standing on it's hind legs. +410225,a close up of a plastic container of food +150265,A group of people walking down a sidewalk. +100238,A family standing next to each other while holding frisbees. +126925,A clock sitting in a yard behind a fence. +361919,A group of people skiing down the side of a snow covered mountain. +480757,A white toilet with a black lid sitting in a bathroom. +127092,A big building perched atop a hill with a sign in the foreground. +255578,Meat and a salad on a white plate. +531163,A passenger bus that is making a turn. +134768,a headphone jack sitting next to a keyboard +214958,A man holding a purple hose on top of waves near a sandy beach. +363272,A man sitting on a stone block talking on a cell phone. +331807,A cutting tray with some lemons and a knife. +194140,Racks of assorted food at a fruit stand +312278,Suitcases on top of a carrier onto of a vehicle. +467511,A biker chic in high heel boots is talking to a man at a gas pump. +290741,A small bird on a wooden board on the water. +84866,A group of children holding racquets and tennis balls. +448308,An orange is shown with a swiss army knife. +21613,A woman flipping over in the air while riding skis. +270532,a group of cows grazing next to a barn +467908,"A scene with different things in the room. +" +62355,A baseball player holding a bat standing next to home plate. +371677,A couple of computer monitors sitting on top of a wooden desk. +304545,A black suitcase with a handle and white background. +244940,A collection of hot dogs topped with a variety of toppings. +498383,A small elephant laying on the ground in the mud. +366867,A bath tub sitting next to a white sink. +434098,"A tiled bathroom with a single vanity, toilet and shower." +21588,An opened fire hydrant spewing water into the street. +193162,a man on a three wheeler following behind a two dogs and a cow +109313,A man holding a tv remote and wii controller. +162088,A creepy woman holding a clear umbrella next to a forest. +401425,Several slices of cake sitting on paper plates with forks on top. +86696,A wooden center island in a kitchen next to two flat screen TVs. +34417,People working behind glass in a doughnut making factory. +215570,A bird that is sitting on top of a branch. +69577,A table full of many different types of food. +229342,A living room scene with a dog and a cat sleeping on the floor. +253969,A man and a woman standing next to each other. +458153,A lone elephant is walking through a field +117543,A large commercial aircraft flying in the sky +204930,A giraffe standing by itself in the sand. +574200,A parking lot has many school buses parked in it. +386443,A white microwave that is under kitchen cabinets. +125673,A plate with a bowl and food on it. +26690,A man is high in the air as he skateboards on the ramp. +38662,The bow of a ship on land with another on the edge of the water. +524382,several dogs behind a crate with hay on the ground +119995,a tennis player stretching to hit a tennis ball +560323,a man with a tennis racket celebrates as people look on +328026,A man puts neck ties up on a display. +401971,A computer chair at the desk with two computer monitors. +213351,"A desk with three computer monitors, stacks of books and a phone." +157651,A boy preparing to fly a kite on a beach. +303534,the bedroom looks neat and clean though it is a small area +479075,A herd of animals standing in a large field. +477025,a man in glasses and a tie is smiling +516846,A snowboarder is doing a trick mid air. +31711,A number 41 bus heading to Mt Airy on a road. +232115,assorted desserts sitting on an outdoors table +42889,A teddy bear sits by a keyboards and microphone. +441483,A toilet with no seat sits in a tiny bathroom. +560591,a modern flush toilet in a bathroom with tile. +32587,Sheep grazing on grasses on mound on nice day. +37382,A giraffe sitting on a rocky dirt and grass covered ground. +143329,"A corner of a bedroom with a lamp, a bed, and two wall hangings." +439773,A baby laying on a floor next to a purple cell phone. +32039,a flat bread pizza topped with vegetables on a grill +444028,a tennis player on a court with someone holding an umbrella +11320,Traditional view of crowded city residences with big bridge at the end of the street. +332877,A group of motorcyclers riding down a street with traffic +359203,A old bench next to an old building. +545678,a giraffe is standing next to a zebra outside +534308,Three elephants walking in their designated area in a zoo. +329711,A train coming on the tracks on a sunny day +197870,a small chicken is standing by a bench +555900,Some delicious looking muffins fresh out of the oven. +560365,A cooked pizza with different toppings sitting on a pan. +60859,A train traveling through rural countryside under power lines. +67255,A red stop sign sitting above a four way sign. +204525,A man standing next to a few bags of luggage. +531324,The retro bicycle shop is actually three stories high. +446462,Two loafs of bread sitting on a counter behind a window. +568981,a man that is taking a picture of a little boy +29484,A young giraffe peers inquisitively at the photographer. +224622,A clock tower in an open space with decorative plaques under the clock. +313454,A man standing at a podium at a USINDO luncheon +451835,A toddler in a grassy area playing with a Frisbee. +560908,A hotel room scene with a double bed and a view of the patio. +411138,A large garden in a lush green house. +69946,A blue boat docked on a green lush shore. +504101,Giant statues of cows and a Ghana airplane +76034,a toddler sitting on the bed holding onto a book +79906,"A room with two couches, a table, several pillows and two pictures on the wall. " +257458,A refrigerator with a box sitting on top and a stove with a shelf above it that has a toy red truck and candles. +182078,A blue fire hydrant above two pairs of shoes. +404897,A futon with several pillows piled on it and a suitcase next to it. +420710,A commuter train going across a bridge next to a road +285651,a man is riding a skateboard in the street +290293,a long subway with people in it is lit up +192932,a woman is standing in the snow on skies +216618,A large white bus and many cars on a road. +107954,The keyboard and computer mouse are sitting on the desk. +108431,The laptop has been placed next to a tray of tea. +306313,An oven in a kitchen with a stove on top in between counter tops. +523373,A table full of vegetables and fruits piled on top of each other. +505733,Ostriches and giraffes out in the grass +349918,An advanced home office with three different computers +26907,a small boy in an orange shirt a baseball glove and ball +353898,A flock of doves and a man sitting in a park. +57232,Old baseball bats are turned into a seat. +299593,A city street with a two story bus. +541606,A living room filled with furniture in the time and the same living room at night. +179181,A red and gray passenger train traveling on train tracks. +351489,A woman walking around a living room next to a TV. +410650,A beautiful young woman swinging a tennis racquet on a tennis court. +113369,A couple pieces of pizza sitting on a plate. +332025,A woman holding a dog close to a group of people with skiing gear +240023,A tennis player using his shirt to dry his face during a tournament game. +423935,A pair of parking meters reflecting expired times. +193069,A blue and white train engine pulling lots of brown train cars through a rural area. +313169,A man does a jump on a skateboard. +254119,A colorful cuckoo clock with the clock hands at six o'clock. +48738,A goat with very long horns standing in front of a tree. +8495,A man is holding skis and ski poles. +85268,A sink under a mirror next to a door way. +234147,A basket of large carrots next to a box of bell peppers. +390322,A cat walking past a potted plant on cement tiles. +208861,a dog sitting and looking in a mirror +151480,A group of baseball players that are walking in the outfield. +322056,Two men dressed as confederate soldiers during a reenactment. +232432,3 dogs sitting in front of a fruit and veggie stand. +444302,A 25 mph turn sign on the side of a highway. +262200,A group of kids at table around a cake. +247914,A street sign surrounded by beautiful potted flowers in bloom. +216520,a baby elephant walking on a dirt field next to a fenced enclosure. +54562,A long red and white train going down the track +535198,A large airplane flies overhead through the sky. +421109,A large brown horse walking across a grass covered field. +522007,"The view of a kitchen's microwave, oven, and cabinets." +570185,A Wii game system and accessories are sorted out for sale. +273086,A man sitting at a table with food next to a little girl eating. +488377,Two men on surfboards riding on a small wave. +415828,A group of people standing under an umbrella on the side of a street. +359136,A young woman is lying on a bathroom floor with her legs on the bathtub. +417416,A skateboarder salutes the sky as he jumps his board. +104015,Two urinals in wall with a white divider. +455528,A man sitting on the snow while riding a snowboard. +182734,A person riding a motorcycle on a playground. +216273,A small white dog sitting on the floor on top of a rug. +212346,The passenger bus is stopping alongside of the street. +519635,Smiling lady typing on laptop on high back bench and table. +294,A man standing in front of a microwave next to pots and pans. +113905,A plate that has four hotdogs and buns with a bottle of ketchup and mustard next to it. +199133,A table topped with lots of different ingredients for food. +44989,A white bed topped with a book surrounded by large windows. +540354,A bathroom filled with urinals mounted on a wall side by side. +489339,A woman is wearing a wetsuit while holding a surfboard. +548729,A group of people standing around a table with wine on it. +252280,A bunch of bikes parked in bike racks. +138115,An old man making duck lips while holding an orange. +408248,A new black backpack with tags still attached. +335992,A hand holding a mug of green liquid next to a pile of fruit. +314880,there are many men playing soccer in a field +138954,A white plate on top of a table topped with fruits and vegetables. +478979,An orange flower sitting inside of a picture frame. +563403,A striking face and green eyes are apparent on the cat. +431398,Two personal pizzas on a table at a restaurant. +140087,A man wearing glasses while standing in front of a microphone. +552610,a stove top and counter in a kitchen +223198,A young man modeling clothes during a photo session. +189436,A carved bear that has a ribbon around the neck. +560000,A cheesy pizza has mushrooms sliding off of it. +284681,A bowl of steamed broccoli sitting on a table. +571059,two people holding hands while on surfboards in the water +579321,The person walking the dog has dressed it in a torn shirt. +495881,A herd of cattle standing on top of a green field. +141328,a large bowl full of pasta with many other foods +78892,A passenger train that is going over a bridge. +38714,A couple of large kites on a beach. +258793,A parking meter sitting next to a street with a very odd looking building next to it. +362971,A pile of bunches of bananas not fully ripe. +339022,The two men are riding their motorcycles in the parking lot. +492323,A baseball player standing in the outfield waiting for a play. +370270,a person hitting a ball with a stick in a office. +135975,A brown teddy bear sitting next to a blue piece of luggage. +496267,Two zebras walk through a green field of grass. +226256,A garden is surrounded by a train and phone booth. +368204,A man ready to swing his tennis racket +214648,A man outside of a store with neon signs. +542451,There are a lot of animals on the hills. +136941,a group of cows standing on the side of a road. +431568,a large pizza is on a white plate +213453,a white plate with rice carrots and various other food +542073,A street light in front of a store front window. +320632,There are several zebras standing close to each other. +229158,A view of the back of a horses head following another horse. +340934,"A bathroom with a toilet, cabinet, tub, shower curtain and a scale in it. " +82375,a couple of zebras are standing in a field +476455,Two young men standing in front of a flat screen TV. +371829,a person riding skis on a snowy slope +573756,Two giraffe standing next to each other in a forest. +156928,a truck painted like a a shark sits in a driveway with a horse statue in the yard +391638,a baby is reaching up and over an oven +9317,A young boy sitting on a field next to a soccer ball. +409016,A woman's feet leave the ground as she swings her tennis racket. +165675,Slices of ham on a black tray next to a knife +150365,A giraffe stands between trees while other giraffes walk behind him. +289618,a pack of dogs walking down a snow covered yard. +136466,a stove with a tea kettle and cooking pot on top +487192,A bunch of garbage sitting in a cluttered area. +101414,A baby grabs his mother's robe as she gently brushes his hair. +498555,a white vase with a blue and yellow bird +204726,A young man playing on a laptop sitting in his lap. +168692,Two boys carrying a surfboard on the beach. +288430,People flying kites in the sand on a windy beach. +158498,A tablet sitting on top of a computer desk. +8923,A young boy riding a skateboard on a sidewalk. +430420,A bathroom sink sitting underneath a mirror mounted on it's wall. +388854,Big Ben in London showing the time of 2:25 in the afternoon +261180,A man riding a wave on top of a surfboard. +147629,a cat licking its lips while holding onto a toy in the shape of an elephant +190115,the man is sitting with a salad in front of him and smiling. +410168,A dog wearing a yellow hat with a smiley face on it. +456917,A baseball player standing on a field holding a bat in his hands. +153624,A close up photo of a person holding a skateboard. +513809,Two cows that are together in a field. +72428,a toilet sits next to a shower an sink +21971,Several umbrella's and chairs gathered around at a beach. +561393,A cat examines a bag while standing on a suitcase. +537355,A red fire hydrant sitting in a field next to a white building. +493196,A man with skates and poles traveling on a paved road. +196295,A herd of elephants walks through a clearing. +243027,The sun shines brightly behind a stop sign. +42433,an overhead view of many people on motorcycles +50561,Two different flavored donuts sitting on top of a white plate. +488997,A decorative arrangement with red flowers in a vase. +238603,A man flying a kite in a blue sky. +469467,A woman talking on a banana phone with Andy Warhol. +254283,A pedestrian crossing sign sitting on a street corner. +160283,a small white toilet is in a tiny bathroom +9077,A variety of fruit is displayed in a market. +36607,a close up of a small older cell phone +440171,A man is sitting on the back of an elephant. +364102,a woman throwing a frisbee in a green field. +8131,There is a dog that is walking on the beach at sun set +500468,A large group of chickens stand together in a building. +196321,A row of refrigerators filled with a variety of beers. +147872,A person on skis heading down a snowy slope +79657,An alarm clock is showing the time at 6:53. +132791,A man that is standing in the dirt. +157771,Professional speaker on stage pointing out his coworker +541550,A humble kitchen has a stove and microwave. +440106,A woman holding a cloth picture in a group of people. +120282,A family of ducks floating across a lake. +209419,A white dog laying on top of a Siamese cat on a stone wall. +318442,A man holding an orange slice in his mouth. +455555,a little boy sitting on a skateboard and riding it +37470,There are two cats sitting on a window ledge. +342051,a man is standing next to a stop sign outside +553353,A man drinking in a suit and tie. +212462,"Still frame of fruit on a plate including pineapple, bananas and an orange." +63965,A woman holding a plate of cake covered in frosting. +507935,a small child is standing on a skateboard +399297,A bunch of flags fly in the sky on a field. +4592,a woman with a hat swinging a tennis racquet +226360,A cat and a metal bowl on a wooden platform. +181962,Several people are riding horses on the beach. +336265,there is a boy playing frisbee in the grass +399545,A man riding a motorcycle with a woman on back of it. +284623,A black cat sits in a bathroom sink. +156636,a kid on a surf board rides some waves +141501,Warning signs outside a fence at a transit station +555843,Looks like an image of small caged brown and white birds. +511138,A giraffe that is standing in the grass. +17613,A red stop sign sitting on a street topped with two green street signs. +144333,A woman riding a bike with a basket on it. +152649,A jumbo jet airplane in flight on a sunny day. +497668,A young boy wearing a wet suit laying on his surfboard paddling in the water. +316806,There is a bird perched on top of a sign with a body of water in the background. +183166,Two people riding a scooter on the road while holding an umbrella. +463865, a furry kitten laying on a laptop +218205,A woman siting at a table in front of a coffee cup in a a kitchen. +200775,A man is holding a sandwich while sitting at a dinner table. +430875,A green traffic light suspended above a street. +92205,Construction worker holding a stop sign on the side of a road on a sunny day. +137578,Two toilets that are sitting on a tile floor. +368041,a kid holding a cell phone on her ears +172478,A red double decker bus driving down a street. +2235,A tennis player prepares to serve the ball. +13843,A large brown bear laying down inside of a cave. +160393,A bunch of paper is covering the walls of a bedroom +292931,Two orange and white kittens sleeping in a pot. +84270,A crowded airport filled with people carrying luggage. +541538,A piece of pie and donut on plates at a table with three beer mugs. +322844,there are two stuffed animals on a wooden bench +156924,a man and a woman are holding video game controllers +50326,A man holding a kite on a beach during the day. +416864,Mr. and Mrs. Santa Clause standing on the side of a road as Santa points to the sky. +81054,A truck parked on the side of a road next to another truck. +397278,A yellow sign sitting on the side of a road. +437898,A medium sized home kitchen with wood cabinets. +26767,A street sign showing they are making improvements +195851,Some people playing basket ball wearing green uniforms. +486020,A zebra observing a dead deer on the ground. +361351,Sliced pizza in delivery box with bottle beverage on table. +457901,Three people in a room with one holding a plastic bat.. +505451,A person riding the waves on a surf board. +208236,A brown dog fighting over a deflated ball with a darker brown dog. +15440,A stop sigh on a post with two buses in the background. +76138,A lot of broccoli sitting in a bowl +103667,A kitchen with a center island surrounded by wooden stools. +192191,A frozen pizza is coming out of an oven. +357383,Man reading a book with large square glasses. +297074,A man holds up a Polish sausage on a bun. +544538,A man putting a hot dog in a bun at a table. +452274,A man wearing a white shirt and tie. +557907,Two lambs that are standing in the grass. +499597,A cat laying under a chair next to a bottle of water. +327769,A cat lying down in a sink in a bathroom. +353108,A herd of sheep walking across a lush green field. +574282,A girl going after a soccer ball at a soccer match. +323295,Two baby elephants are playing at the feet of two adult elephants. +571876,A counter top with cups of juice next to a sink. +192594,A view of an empty city street at night +308974,A kite flying above in a crystal clear blue sky. +178807,A couple of people riding skateboards on a sidewalk. +488166,The man stands on fence railing beside a table with food on it. +401850,A horse drawn carriage goes down this street surrounded with tall buildings. +336053,Two children enjoy a meal at a restaurant. +218362,A large digital clock mounted to a wall. +110762,A dog is lying on the back of a small boat. +523883,A squash sits on top of three bananas to form a claw. +550365,A snowboarder is flying through the air doing stunts on his snow board. +413275,Two trucks parked next to one another in a lot. +2690,An inlet filled with boats of all kinds. +252639,a long green and white bus driving down the road +539938,A train traveling down tracks near a rural countryside. +517249,Man riding a horse in an open arena. +154168,A bus driving down a street past tall houses. +538364,A policeman on a motorcycle at night watching pedestrians cross a street +448600,There is one piece of cake on the plate. +28236,A passenger train that is traveling down the tracks. +137573,An umbrella on top of the desk in a home office. +555361,A man wearing a blue striped shirt and tie. +288673,A group of people at the beach flying kites +7938,A man is talking on his cell phone on the street. +195715,A baseball sitting in a baseball mitt on a blanket +43314,A man flying through the air while riding skis. +345361,Four children at an outdoor party wearing festive hats. +30548,A man with a bear wearing glasses in a business suit. +505792,there is a male snowboarder that is in the air +126299,A red stove top oven sitting next to a building. +85688,A woman holding up a yellow banana to her face. +273469,A table with two boxes of pizza and beer cans +533107,A red double decker bus parked next to another city bus. +396779,A pond with two ducks swimming on top of it. +78188,"refreshed and unable to see image, have had this problem before" +177468,Three chairs on a sidewalk and a pigeon standing next to one of them. +389451,A herd of cattle walking across a beach next to the ocean. +555066,The green traffic signals are near two parked vehicles. +77821,Small child on skiis stands still on a snow trail. +214367,Wood shading on the side of a window with brick siding. +360705,A herd of animals grazing on a lush green field. +152492,A man at a desk gestures before a laptop while holding a phone to his ear. +280017,A white and gray bird sitting on a beach next to a body of water. +72632,Two giraffe standing together and looking towards an area of trees and bushes. +43530,A flock of ducks splashing and playing in the water. +225076,A airplane that is sitting on a tarmac. +296707,"A bathroom with a toilet, towel rack and a tub in it. " +110052,a person standing on top of skis holding ski poles. +34522,A close-up of a hawk with a group of people in the background. +323528,A city bus crosses an intersection of a crowded neighborhood. +340327,Table setting for two with vase of flowers and candle. +362521,A green street sign over a street next to a traffic light. +453981,two baby animals are play fighting with eat other +256916,A silver pan topped with pepperoni pizza on a table. +306582,A group of cows standing next to a line of laundry drying. +204311,People sit around a table littered with plates of food. +358427,Two pieces of broccoli being held up on a fork +147740,A woman walking while carrying bananas on her hat. +519801,A train traveling down train tracks next to a lush green forest. +476233,A couple of young men playing a game of soccer. +303024,the ball is coming toward the batter and the catcher is ready +22199,two people make a purchase at a bakery +39468,A big green Ford F250 Pickup truck parked in the city lot +25134,People are walking in front of a line of parked buses. +517465,A young man holding a ball in his hands. +488198,A woman with nice breast sitting at a table with a pizza. +216628,A group of young people skateboard down a street. +97790,1 military jet fighter flying in formation alongside a 1 military propeller pilot. +545903,"A room with a small bed, slippers and a pot." +356586,Chocolate glazed doughnuts and pastries on a plate. +99477,A person bending over a table with a lamp on it. +505099,a baseball player is going to swing a bat +48273,A pile of lots of different oranges with stickers on them. +61101,A computer desk topped with three monitors and keyboard. +279774,A baseball player is getting ready to hit a ball. +376441,A man standing next to another man on a sandy beach. +144992,A bus that is sitting in the street. +91564,A large group of sheep stand near the water all looking down eating +237350,A beautiful young lady brushing her teeth in front of a mirror. +313733,Pair of motorcycle riders about to drive on road +248469,A living room is filled with brown furniture. +325557,a black motorcycle parked carrying a folding bicycle +120767,A pair of children sit on a giraffe while other children stand nearby. +49885,A red medical ambulance bus parked and waiting for people to board. +80013,A group of fire fighters working on a fire hydrant. +102235,Young girl gets ready to blow out candles as family watches +217329,Two men in kitchen preparing hot dog buns. +204188,A modern toilet is seen in this picture. +25393,a couple of men in ties are outside +15469,A man standing on top of a base on a field. +204324,A family flying a kite at the beach. +258985,A large porcelain toilet posed with a tan flower pot. +227326,A man and woman that is standing near a cake. +512276,"A room with two flamingos, a couch, a chair, an ottoman and a television in it. " +338098,A bathroom with a white toilet sitting next to a bath tub and a sink. +147577,The train image on the wall is beautiful. +297323,Two buses are parked against a curb in front of a building. +201120,A table topped with pieces of cloth and large piece of paper. +215213,A very large crowd is close together taking pictures. +522751,A view of a stoplight by a street. +515586,There is a bed in the room next to the night stand. +196085,Men are gathered at a table to eat a meal. +288884,The girl is enjoying brushing her teeth in the mirror. +16466,Two green freight trucks parked on the side of the road. +472030,A lush green forest filled with lots of trees. +111448,a hand sitting on a horse that is being lead by two other people +170784,A red double decker bus driving past a tall building. +116182,meat and veggies in a wavy purple bowl +540782,A wooden bench and a fence with some flowers. +188290,a yellow and red trains engine on its track and trees and signs +180095,"A sign that says ""stop"" with another sign underneath it ." +395,A man talking on his phone in the public. +9262,A cart of finger foods including sandwiches with a group of teddy bears around the plates. +304180,A person with a skateboard on a street. +302643,there is a sandwich and salad on a blue and white plate +137538,A large bird perched on top of a rock +95677,A man ina yellow rain coat waits in the rain +321332,A group of men standing around a table with pizza. +195829,A group of young men playing a game of soccer. +158849,A group of people wait in line to use a machine. +261389,A small pink statue holding onto an umbrella +324322,There is an image of two people playing wii. +333565,A couple of women washing a able full of oranges. +239625,A square pizza being cut into pieces by the pizza maker +181409,A baseball player standing next to home plate. +449560,a young man pushes a dog standing on a skate board +422200,Man sitting on the sidewalk talking on a phone. +77222,some little girls presenting leis to service men +549718,A blue and yellow city bus driving down the street +535569,A wooden table topped with different kinds of foods. +281376,The two monitors are sitting among the laptops. +45594,Truck and car passing each other in a suburban neighborhood +544351,A picture of a person playing in a tennis game. +315744,A rabbit is eating a carrot next to a stuffed animal. +274800,A cat sleeping in a large piece of luggage. +57363,a red and yellow fire truck and some buildings +365993,A man riding a snowboard down a snow covered slope. +188522,An old pickup truck sitting in a field falling apart. +49682,A woman with a box of chicken has an umbrella hat. +262605,a light a clock a television and a woman +305464,there is a large bucket and a small pot in this bathroom +183675,A man is riding a horse in an open field. +326312,There is a red fire hydrant in the middle of a sidewalk +212739,A man riding his skate board down a slope . +561042,No image is displaying to describe in this box. +59532,mopeds parked in a parking garage with a green floor. +344930,A red fire hydrant on an urban street. +119404,Two benches on a sidewalk in front of a urban street and some houses. +310538,A man standing on top of a tennis court. +535179,The skier caught some air while going down the hill. +297698,A man is skiing in mid jump onto a ramp. +106793,A couple of children sleeping in a bed together under a blanket. +404437,A large black bear walking across a forest. +440189,A man standing on top of a sandy beach holding a paddle. +515577,Two skiers prepare to make their way past an embankment +355756,a store sits in front of a fire hydrant +581062,A man rides his skateboard near a drain pipe system. +373381,A bed in a bedroom under a window covered with curtains. +398507,A fleet of green army trucks parked on a grass covered field. +360216,A woman brushing the teeth of a man. +222628,A man and woman are looking at a computer screen. +29680,Three giraffes in grassy field next to trees. +12455,three empty docks some water and some clouds +211707,A person holds a seven eleven hot dog into the air. +374333,Two lap tops sitting next to each other on a computer desk +146570,A living room with a white couch and flat screen TV. +188958,A group of snowboarders standing outside a lodge +281878,A bed with two laptops on it below a painting. +293249,"A glass table with a plate of bar cookies, a potted plant and a vase filled with chocolate eggs." +258330,A man is jumping on a ski board across some snow. +116424,A white toilet with a control panel on it's left side. +523978,"A bathroom with a white bath tub, sink and large window." +333436,A couple of people walking down the street. +428111,A man riding a skateboard up the side of a ramp. +241453,A number of cattle outside some houses +283268,A white plate topped with a toy hot dog in a toy bun. +318146,A person reaching out to pet a horse with hills and fields in the background. +436895,A airplane in the sky with a bear on the wing. +304044,A bus traveling down a city street at night. +353028,"A pizza with cheese, sauce and spinach leaves." +105737,A tilted square photo of a book shelve full of books and a teddy bear with a bow tie in the middle. +37624,A crowd shot of a tennis match at night time. +365095,A soccer player in the midst of kicking a soccer ball. +371069,a toilet a shower a sink and a white cabinet +211487,A red and white fire hydrant is on the lawn. +56865,Oddly dressed people standing by each other posing towards camera. +364853,A man cooking hot dogs and hamburgers on a grill. +522613,A tall giraffe standing in a forest on a grassy ground. +219594,A bear pokes about in the water while seagulls look on. +124621,Train traveling through countryside near tall brick structure. +9288,A toilet in a restroom next to a toilet paper dispenser +517128,"inside a airplane hangar,a stealth plane hanging -up." +522713, a bench sitting in the grass facing the water and boats +67590,A group of horse back riders on a wooded trail. +384230,A giraffe is bending towards two of its trainers +252216,Some animals that are standing in the grass together. +581501,A kitchen filled with wooden cabinets and stools. +344897,a bunch of cows standing and laying on a grass field. +269311,Three youth sit in the doorway of a house while one smokes. +215579,Cat intently watching a TV screen up close. +475195,an assortment of tropical fruits with some large yellow flowers +484312,A man with a glass holding a teddy bear +328536,A plate of broccoli covered in cheeto's with a utensil on it. +424258,A wooden bench near two barrels with flowers. +76588,A siamese cat laying on top of a white sink. +165351,Sliced bananas sit on top of a pastry dish on a plate. +35438,A black and white dog sitting on a park bench +317028,A chocolate donut with a hole in the middle and a partial hole beside it. +101491,A teenager wheeling a suitcase down a crowded street. +170127,a guy that is stretching in some kind of park +368836,A man standing on a tennis court holding a racquet. +472067,A group of people seated while holding umbrellas +433625,"Small bathroom with sink, toilet, and shower/tub combo." +157948,A snowboarder balances themselves with their arms spread out as they lean over on the board. +304984,A white plate with a sandwich and sides on it +221172,A man in a blue shirt is playing tennis. +232503,City buses prepare to leave the bus station +47713,A series of collectible items are sitting on display. +401212,A large building has a Glass business logo on it. +45882,"A long haired, black cat with yellow eyes lays on a black suitcase." +257529,"A pile of oranges, blue berries and raspberries." +519461,a couple of elephants are standing in a pin +99177,Two people laying on top of green grass under a white umbrella. +143458,a man with a drink wearing a suit and green tie +26828,A cup with two toothbrushes and toothpaste in it +431092,A group of people gathered at the rivers edge with their dogs. +301106,A woman in a very short white skirt holding a tennis racquet. +56092,"Horses kicking up dirt and grass, behind a fence." +8762,Street lights and a lit up street sign at an intersection. +344795,there is a round pan covered with aluminum in the stove +42507,A couple of small children standing on top of a sandy beach. +475218,A man wearing a helmet while holding a line. +523252,The long steam train sits at the station. +275268,A child sitting on a chair with many stuffed animals. +357782,Two women are standing at a store near boxes of produce. +109942,A Street sign standing next to a palm tree. +439994,A group of baseball players standing on top of a field. +292804,A woman rushes with a handbag through an empty train station with a large clock. +39743,Two children who are sitting next to each other naked. +502063,A table with a vase on it in an empty space near a man. +248559,A cell phone sitting atop a beverage with a laptop on the side. +133636,A parking meter sitting on the side of a sidewalk. +246590,A yellow motorcycle in front of a street with several people. +503978,a plate filled with some pasta and broccoli +85721,A clock that is perched on clothing to make it look like a head. +198271,A large tower with a clock and a blue banner +278512,A small white plane sitting on top of an airport runway. +478812,a person holding on to a small pair of scissors +169076,A television is on a tv stand next to a bureau. +498687,A man standing in a driveway next to a truck. +454907,"A kitchen that includes a stove, ovens and refrigerator." +296886,a number of people watching horses on a track +385057,this is two people riding on an elephant +273582,a baseball player swinging a bat on a field +236268,A blue vase filled with white flowers sitting on a floor. +553097,A large tower building with a clock on the top. +30407,A pile of cell phones sitting on top of a table. +239355,A cop car sitting on the side of a road behind a motorcycle. +194729,A plaque on the side of a stone bench. +566278,Red and black motorcycle parked near large 4 story building. +133690,a person holding a dog sitting on a couch +123136,A kitchen sink and part of a stove with a doorway leading into an adjacent room +450055,A frisbee that is flying in the air. +15070,Two cats staring out a window at a squirrel. +509366,Anolder man sitting with his head tilted back while wearing a suit and tie. +337446,Two ponies are running through a grassy field. +409855,A refrigerator that has a microwave above it in the kitchen. +3145,a white couch a brown chair a person a ceiling fan and a table +475678,"Many pieces of luggage gathers together, all with tags attached." +13892,A boy in a black cap is suspended in the air above a skateboard and a small staircase. +526622,A bike sitting near the water that has boats in it. +567877,A man standing between two adorable little girls and tow birthday cakes. +71724,a small boat in a body of water +537053,a giraffe in a field with trees in the background +140513,Three zebras standing in the middle of a plain in the wild. +42375,Two women laugh while sampling multiple glasses of wine. +574110,A very tall gray clock tower next to a building with lots of windows. +427118,Two skiiers kneeling in the snow by an orange flag. +397109,A park bench next to a serene lake. +78947,A highway sign posted on a pole next to a street sign. +486034,some kids sleeping in a bedroom with a pirate theme to it +357957,A living room filled with yellow furniture and a flat screen TV. +508801,A plate with a pizza sitting on top of a wooden table. +81000,A statue and other pieces of art are along a wall. +35146,Close-up picture of pizza and salad on wooden +310862,A man is frowning while standing in an empty room. +167810,Two ducks are swimming in the water of a pond. +487438,A cluttered bedroom with books on the bed +285089,A black bear balances on a wooden fence +460783,A poodle with a yellow ribbon in it's fur with banana's in the background. +413056,A doll sitting at a table with fake food. +130130,A computer desk holding a monitor and keyboard in front of blinds. +153994,A person walking in the rain holding an umbrella. +309499,Two animals are walking along in a field. +561795,Two men in the bed of a pickup truck working on the vehicle. +30706,A man taking a selfie between two mirrors +46011,a small air plane on an air plane run way +162627,A girl that is sitting on a horse. +36561,Various people eating in a restaurant at a table. +140068,A group of men on a field playing baseball. +257478,a close up of a baseball player holding a glove on the field +84889,Bunches of bananas are displayed in a shop. +485887,"Street full of cars, double decker buses, and someone on a bike" +99410,A man without a shirt wearing a neck tie. +155488,A small town grocery store beside a road. +427796,a table with pots and pitchers with knives in a cupboard +416271,A jetliner sitting on top of an airport tarmac. +9003,a man returns the tennis ball with his racket +75412,A bedroom is fancy and has many fancy things in it. +151844,A red double decker bus traveling down a street. +61972,A large metal clock hanging with chains from a roof. +266892,a woman standing at the end of a tennis court holding up a racket +297956,A person on a motor bike on the water. +82456,Two men sitting on the backs of two large elephants. +30044,A sign in front of an airplane warning of no smoking. +429074,A white toilet sitting in the corner of a bathroom. +140129,The front of a church with two bell towers. +289995,Farmers market with people looking at fruits and vegetables +557360,Some bunches of red bananas on a stalk. +294373,A jockey sitting on the back of a horse +235491,A city street with a sign that says fun +522380,A cat sitting on top of a blue piece of luggage. +409850,A picture of a livestock with the american flag and blue and white ribbons hanging from the ceiling. +158421,a sky lift for skiers coming down the mountain +479067,A close up of an sandwich and soup on a wooden table. +475798,An airplane parked next to a terminal ready for passengers to board. +504287,A shirtless male tennis player reaching for a ball. +180787,A picture of some people that are cooking some food. +262353,A group of people sitting and standing around a table with beverages. +433044,a close up of a plate of food with broccoli +326667,a white bird flies low over the water +399091,a bench surrounded by different types of plant life +122388,A man holding a Wii game controller in his hands. +320026,A crowd of people standing around a luggage carousel at an airport. +539224,A red teddy bear with a crown is nailed to a pole. +162841,A yellow vase with a red painted top that has two flowers that are bloomed in it. +451511,a female snow skier in a red jacket and some snow +145549,A pile of surfboards and kayaks sitting on a storage lot. +221083,Two horses are standing in a snowy pasture +515038,a man wearing a nice shirt tie with a view of the chest area +314729,a black and white baseball player card the player has a bat +285957,A giraffe standing in a lush green field. +195204,many cows laying on a field of green grass +394157,a white cat wall clock with a red handle +522622,A group of young children running on a field. +52412,A jetliner wing flying over the top of a parking. +279809,A pair of black cats display a menacing stare. +244539,A group of motorcycles parked next to each other. +428336,This is an image of a woman with an umbrella with a sign on it. +324740,A brown teddy bear sitting in a chair wearing a blue shirt and red hat. +151338,a guy skate boarding on the edge of a wall +133418,A man holding a tennis racquet on a tennis court. +72155,A young man sitting on top of a metal and wood bench. +137576,"All of the cows are poking their heads out, eating some hay. " +106244,A man holding a donut in a napkin up to his mouth. +109323,Several motorcycles lined up in a row in front of a old building. +141002,A man readies to swing his tennis racket. +30066,a girl with a hat flying a kite on an open range +346517,an odd looking red and yellow train sitting on the track +157352,A man riding a skateboard on a ramp. +440455,a man watching his dog checking something on the desk +319360,A giraffe is eating grass from the feeder +524173,A person lying on a surfboard as others observe them. +130613,Three fish and vegetables on a silver tray. +354202,A giraffe looking over the corral fence in his zoo habitat. +24144,A pizza sitting on top of a pizza box covered in cheese. +124927,A person on a beach with a surf board. +495131,man practices snowboarding on indoor court while women look on. +504194,A dog is sitting near a bench alone. +235699,A toilet sitting in a bathroom next to a sink. +566550,A group of people flying kites on top of a sandy beach. +5001,A group of people cutting a ribbon on a street. +66445,A white plate topped with pasta and chicken with broccoli +298904,a glass fish bowl with rocks and weeds in it. +68520,Three buses pulled in front of a bus station loading passengers. +485917,one surfer if riding a wave while the other is sitting on his board +37149,There is a woman looking at two vases that are on display in a glass case. +5599,A field full of people standing on top of a grassy field flying kites. +471642,Passengers getting on and off of a tram at the station. +263647,A woman has fallen over in the snow on a snowboard. +411832,a little cat stretching by some apples +566470,A sandy area with two boats and a cloudy background. +206876,A giant elephant laying on top of a dirt ground. +569767,A couple of people riding horses down a dirt road. +160190,A man on a motorcycle riding in the desert. +514180,A metal counter topped with lots of cheesy pizzas. +474021,A couple of guys playing on the nintendo wii at a gathering. +55868,A pelican near some boats that are docked. +10977,A bath and a toilet in a small room. +494273,A boy sitting in a chair with a stuffed animal in front of him. +577398,A man on a motor bike driving down the road. +344614,A clock town sits in the middle of a city. +116370,The clock is built into the side of a brick wall near a statue of two cranes. +556000,A group of kids playing a game with a Nintendo Wii controller. +49731,A man flying through the air while riding a snowboard. +228867,A group of people standing around a bed in a bedroom. +372731,A man in a leather jacket standing next to a white horse. +454148,Man standing on a stage in front of a microphone. +308274,A man sitting on top of a couch holding a Nintendo Wii game controller. +354491,a mamma horse and her baby standing in a field of grass +113049,A young woman with pretty eyes eating half an orange. +95583,A man walking on a sidewalk while holding an umbrella. +249277,A group of people walking down a street near a river. +122777,A blurry photo of two laptops and a computer monitor. +307794,Batter and catcher playing in a game of baseball. +326820,A blue vase holding a bunch of white and yellow flowers. +492077,A line of people are riding bicycles on the street. +248310,Two tooth brushes sitting beside each other on a table. +133819,A blue bus driving down a city street. +439907,A bathroom with a shower and a white sink on a wooded counter. +322482,a close up of a person holding a cell phone +299609,A horse standing on top of a lush green field. +475108,Calico cat yawning and laying on a gray seat. +527054,Woman wearing polka dot stockings and pink dress posing with an umbrella. +227709,"This image is too blurry, can't see it." +343424,A large wooden bed covered in white blankets under a painting. +480536,a male and a female the male has a cellphone the female a bottle of water +282365,An elephant walks through th ejungle to eat. +432120,A dog hanging out of back door window in a car. +552273,A group of young children walking around a street. +192964,A skateboarder performing a trick on an indoor ramp. +517612,People engaging in activities in an open area. +49115,A giraffe standing next to a pile of stones. +66519,The large bird is walking in the water. +95833,An elephant swimming in a lake at sun set. +11260,Train on track as it approaches a bridge. +512869,A woman and a young boy sitting at a table with food. +249046,a man is in the air on a snowboard +331447,An orange billboard truck driving down a street in front of a crowd of people. +573066,Two animals grazing in a wooded area with thin trees. +198204,A row of ovens sitting inside of a warehouse. +16098,A man is holding a wii controller while a Super Mario Bros book appears in the background. +108326,A large painting of zebras and hogs standing next to deer. +505939,a number of people wearing skis on a snowy surface +316700,a white plate with many different food items +514416,A woman standing in front of a mirror taking a selfie. +303994,"A red vase holding two red flowers, and a vintage-style alarm clock, all arranged in the corner of a windowsill." +136042,A food cart sitting on the side of a crosswalk. +517617,"A plate with rice, carrots, bacon, and a small potato. " +551018,Bus merging through traffic at a busy intersection. +547137,A baby girl brushing her teeth in a bathroom sink. +202928,We see an arrangement of peach flowers in an earth tone vase. +578362,a snow covered mountain that's surrounded by clouds +212239,Artwork with a fish is hanging from the ceiling. +104585,A woman standing on a tennis court holding a racquet. +54718,A group of muddy elephants standing by rocks. +217323,A person wiping out on a snowboard on the ground. +478175,A unique restroom is seen in this image. +498259,A group of rowers in a boat is waiting for instruction from the lead. +438426,A man with a skull and crossbones tie. +309160,A young cat with a beautiful coat standing alone. +62623,The man sleeps with his laptop on his stomach. +64189,A boy in black jacket jumping a ramp on a skateboard. +242855,"Plate of food, including hot dog, ribs, beans, and corn." +363461,A computer desk and chair looks like a home office. +136722,A train travels around the bend of a grassy area. +574066,a glass covered donut fryer frying a ring of donuts +484723,Lovingly restored antique double decker buses in London +361506,This skateboarder is riding the cityscape at night when traffic is minimal. +465272,People walk by a fountain holding umbrellas as it rains. +76261,Two birds flying in a gray sky next to a mountain. +109798,three different donuts one is pink one is brown and one has white sprinkles +252127,A fluffy cat checks itself out in a mirror. +362545,A man hitting a tennis ball with a racquet. +100215,A mattress laying on a floor next to a wall. +224322,a person standing next to a parked motorcycle on a field +323119,a close up of a basket of fruit on a bike +227399,A transporting cart parked in a street while passengers board. +294689,A coffee table is standing in a living room. +339266,there is a lap top on a table with many bananas around it +472878,"A man is somewhat hard to be seen in the wave, on his board. " +19589,A living room display at an Ikea store +217937,A plate of food with a sandwich with a runny egg. +261587,a girl on a board riding along a boat in the water +266082,A red fire hydrant in front of a skyscraper +372979,A cat sitting on top of a window sill. +493728,A woman is cutting into a cake with a large knife. +499866,An adult woman and two little girls eating donuts. +122217,Two people skateboarding down a roadway in a downhill descent. +520707,Several people are seen walking through the airport while waiting for their bags. +311205,a large truck surrounded by cars with a house in the background +312263,A clock is at the bottom of a very tall building. +468736,A close-up of a plate of pasta and meat with a piece of broccoli. +561437,A person in white shirt doing a trick on skis. +458768,A brightly lit kitchen with lots of natural light. +581482,A fancy metal cloth is seen against huge barred windows at a stone train station. +241691,A giraffe standing next to a covered structure. +334555,A cow is leashed up to a green pole near the civilians. +537027,A man taking time to check something out on his mobile phone. +17182,A brown desk with a wooden chair in a classroom. +4069,Black and white photo of two men riding bikes. +515751,A person is riding a skateboard down the street. +246650,"A smaller car is stopped at the red light, as traffic drives on. " +144167,Lighted bar sign mounted near traffic signal in front of a building. +153279,Several people playing in a field and flying kites. +455261,The view of a person riding a motorcycle on a paved road. +379842,A Nintendo Wii game controller sitting on top of instruction manuals. +194940,Three bowls filled with vegetables on top of a table. +26941,A bunch of suitcases that are on a cart. +496411,A stop sign with a domed tower in the background. +231589,A child in diapers standing on a bed. +271681,A woman holding a quiche in her hand and smiling +523637,A group of three people sitting on a couch. +176629,A giraffe standing on a dirt road next to plants. +439781,Elephants stand together along a wall in a zoo. +264335,A bird flying through a blue sky with wide wings. +321790,A young man holds up a tennis racket. +556369,A small green floating on top of a lake. +214520,A woman fixing her hair on a purple covered bed +253630,A coffee table on a rug in a living room. +442567,A man on skis teaches a very small boy how to ski on a snowy landscape. +134119,Some very cute giraffes in a big grass field. +474028,a group of kids playing soccer in a field +155912,a guy on a bicycle and a guy flying a kite +177213,Small pizza sits on a plate on a restaurant table. +441430,Multiple bunches of bananas and plantains in an outdoor market. +30942,Two unattended motorcycles parked somewhere near a red car. +452060,A woman on a court with a tennis racket. +170038,A plate of beans with salad with side sauces. +272958,A man on a wake board that is up in the air. +279919,Cat laying on wooden floor with toy banana +52470,Two wooly sheep are standing in a pen. +94944,People are standing on top of a snowy mountain. +406841,An old brick building contains an appliance store. +202923,"Batter, catcher, and umpire anticipating the next pitch." +453216,A group of people are on skateboards on an empty city street. +12280,An airport with a woman carrying a piece of luggage. +255248,A cook sanding between two women inside of a kitchen. +2295,A cat peering into a wooden bowl which is sitting on a table. +432529,there are two giraffes standing very close to each other +259819,A black cat was lying inside a suitcase. +289516,A clock sits above green bushes under a blue sky. +435922,Cat sitting next to remote control on small counter. +407057,Vintage picture of a man and a horse on the farm. +256771,A woman holding a knife who just cut into a cake. +171016,A person is skiing down a snowy hill. +236766,A man holding a tennis racquet in front of a crowd. +225075,Clock tower decorated with banner and bird statue. +356043,A formally dressed man is on state singing. +555898,A man and a woman using Nintendo Wii controllers. +515670,a large piece of paper on a refrigerator saying stop. +100274,A long train traveling through a train yard. +479011,"The meal on the plate has turkey, dressing, and mashed potatoes." +73536,A plate filled with dessert sitting next to a small Christmas tree. +580621,"A person is taken in this very picture. +" +491764,The passenger train is moving in front of buildings. +466416,A building that is heavily lit up and in front of a river. +26174,A lone zebra stands with some trees in the background. +352978,"A living area with chairs, shelves and a fireplace." +383748,A clock in wooden frame covered by a wreath. +389308,Various parts and games for a Nintendo Wii on a bed. +424554,A yellow tanker truck parked on top of a dirt field. +55077,A close shot of what seems to be a public restroom. +453400,A cat sitting on a couch with a laptop in front of it. +377949,A women who is standing by a barb wire fence. +109316,A woman walking down a street holding a gray umbrella. +351787,A herd of zebra in a grassy field under a field +195594,A guy standing next to a skateboard on a hillside. +262113,A pile of blood oranges sitting on display in a store. +491784,A man laying in bed next to a painting of a tree. +427401,A woman with a umbrella on a city street. +488592,A woman rides a bicycle down a narrow corridor in an indoor Asian market +287387,The teddy bear looks like it is going to drink the beer. +202201,Some people that are picking out from a large variety of doughnuts. +175642,A woman riding a wave on top of a blue surfboard. +180738,Cat siblings sitting on a sunny window sill +278172,A man sitting at a table with a plate of chill cheese dogs. +240731,A small pizza sitting on a decorative plate. +278822,The two people are ready to serve the variety of donuts. +301061,A person is moving green hay towards an elephant that is inside the back of a white truck. +479155,Two young kids interacting in the grocery store produce section. +482974,A desktop computer in a kitchen with a lamp next to it. +211653,Different types and sizes of parking meters on display. +466137,A stuffed bear set in front of a cup of coffee. +436936,A black animal walking around a green forest. +450581,The people on the motorcycles are racing on the track +99317,A tray holding various boxes and bubble wrap. +173968,a ath room with a toilet a bath tub and a sink +191614,A horse standing in a lush green grass field. +120964,A man wearing a North Carolina basketball jersey performs skateboard tricks +490702,A cat wearing a collar is looking in a mirror. +262654,A white plate topped with different types of food. +241010,"A lone person stands in a large, city scene." +250083,A man rides a surfboard on a wave in the ocean. +367881,The big grey bear is staring at something +308134,An older couple standing next to each other. +133025,A man standing in a batting cage on top of astro turf. +91416,A cook standing in a professional kitchen preparing food. +409221,a person on his back on the ground playing with a frisbee +110951,A remote control sitting on a dash of a car. +213162,A tennis player approaches the ball with her racket. +375130,A street that goes on to a high way with the light on red. +439573,A large sandwich cut in half sitting on a plate. +420230,An elephant is walking forward in a field. +47285,A group of people standing in the snow holding empty boxes. +447549,Three giraffes in a field with trees in the background. +402685,A plate with a piece chicken and some broccoli +550729,A colorful kite laying on top of a lush green field. +240764,A parking meter in a parking garage that has a lot of cars. +463325,Awoman is standing beside a stop sign in a museum. +62151,Horses stand and drink from pond water near the road. +408103,A young man riding skis down a snow covered slope. +181118,People watching elephants enter the water by a river. +158999,A group of animals grazing on grass in a field. +412584,a number of cars stopped on a city street +502998,A person riding skis down a snow covered slope. +304069,A white van parked in front of a tall brown brick building. +434805,a person riding a skate board wearing a suit +82668,Sunny day on beach with umbrellas and loungers with beachgoers +472833,A swan is swimming near snow covered rocks. +106193,A modern bathroom is designed to be useful. +376856,a tall church tower with a clock at the top +294176,many clocks on a stair way with many people walking up and down them +573571,"a skier, dressed warmly slides down a slope." +560361,People standing on the backs of elephants that are standing in the river. +207844,"People laying in chairs, walking, and playing in the water on the beach." +135139,Several green plants that have grown rather tall. +293245,A Yamaha motorcycle parked outside of a building. +225963,A girl mixing food with a whisk in a measuring bowl. +513125,Dog lying on bedding material in suitcase in large room. +287554,A bathroom with a brown shower curtain and white toilet +575372,A road sign that indicates route sixty six. +487222,there's and airplane in the sky flying over some trees +84825,A person in white and red jacket jumping in air on skis. +325568,A group of men on a field playing baseball. +200986,Street Lights and a clock light up the night sky. +16730,A dog sitting in front of a brown wooden door. +50355,a bunch of cars that are paying a toll +522612,Guy jumping over the railing while on his skateboard +190700,Two stuffed animals sitting on top of each other near a wall +444899,many skis lined up on a mountain waiting for people to put them on +495349,A close up of a rusty train next to a bicycle. +339851,A young man in a yellow shirt and black shorts hitting a tennis ball in a tennis match in a stadium. +479912,A white airplane parked on a runway under a blue sky. +61862,A person is looking in the mirror of a motor bike +18380,a group of people sit around a big table +111825,A man riding a skateboard down a hall. +351875,A bunch of people gathered together in a very big crowd. +233033,An outdoor with a patio with chairs and a wooden deck. +443723,A black and silver computer mouse with a black background. +537132,The vendor is selling his homemade wine in the upscale store. +378284,A person sits across from a pizza ready to be served. +356181,A fire hydrant covered up halfway with snow. +250951,A black and white cat sitting in front of a black bag. +146865,A young man does a trick on a skateboard in a bowl while other children with bikes and scooters watch. +49119,A motorcycle parked near a harbor filled with boats. +337827,A farmers marked filled with rip and unripe bananas. +105014,a salad that looks like a boat is next to a fork +109516,A colorful bird is sitting on a tree. +574242,"A view of a mirror with a stop sign, in the back." +547293,there is a airplane that is being boarded at the airport +386581,A brown horse standing next to a blue car. +372316,A street containing various cars and lampposts at night. +396903,Small red propeller airplane sitting on an airport runway. +314192,An image of a stationary canadien train behind a fence. +565853,A man playing Wii on a large flat screen tv +89329,The motorcycle racer leans down to the road while making a turn. +96445,A zebra standing on a lush green field. +514292,A teddy bear with a ribbon and some sunglasses. +205324,the boy has on black sneakers and his trying to grab the frisbee +84123,A tall green street sign sitting on the side of a road. +187169,Two chairs sitting in a living room under a framed picture. +444804,There was a man that was playing frisbee on the grass +499621,A couple of chairs and a umbrella on a beach. +277592,A tall giraffe standing in front of two giant stones. +574672,a group of people wearing skis on a snowy surface +516542,Signs posted in front of a municipal complex. +540652,A horse with a blanket on it eating hay. +490927,The bathroom counter is nicely decorated and organized. +348045,Three white urinals mounted to a bathroom wall. +251098,A military motorcycle is parked behind a van on a street way. +10428,A sink is shown in front of a frame covered wall. +280918,Two beautiful young women baking a turkey in a pan.. +292926,A cup sitting in a window sill filled with flowers. +166260,A metal pole with street signs attached to it's sides. +413684,Skateboarding preforming a mid-air stunt in a park. +257656,A man wearing a black jacket next to a brick wall. +499134,An open laptop on a desk next to a computer monitor. +467721,"Driving on a highway behind a compact car, on the way to Nice" +83110,A man sitting in a hospital bed hooked up to an IV. +549683,A man trying to snowboard in the dark. +497127,A bus parked in front of a building net to a traffic light. +6748,"A woman is stooped beside a fence, watching a polar bear." +488934,A young couple shows off a birthday cake on a plate. +284743,A group of people staring at a woman holding a bat. +565233,Man sitting on his bed while using his laptop. +406070,A man that is in the air with a skateboard. +363319,A group of giraffes eating a plant from a hanging basket. +232905,The tower of the building has a clock displayed. +471869,A teddy bear sitting on a blue chair. +434527,A man brushing his child's teeth while the child sits in a chair. +334391,A furry dog standing next to a fire hydrant. +344439,A traffic light with a couple of green street signs mounted to it's sides. +467297,a woman is standing next to an oven +226128,A vandalized school zone sign attached to a pole. +251042,A man looking annoyed while riding on the back of an elephant +340007,A female surfer is exiting the water. +230004,A stuffed teddy bear sitting with books on top of it. +276285,A small pizza in the middle of a table. +243724,"Two burgers, fries, and a drink sitting on a tray." +31024,Several clocks display the time in different time zones. +300943,A truck that is parked on the side of the street. +506095,A cat is staring at a laptop computer. +307547,A person and a animal in the daytime. +196571,Top view of a green train on railroad tracks. +515727,A group of white herons nesting in a marshy area. +428973,Two small children are on the dirt with an umbrella. +570548,"A lunchbox with a sandwich, yogurt and a banana." +153685,a living room containing a rug a table and some sofas +19087,A sign warning bike riders to reduce speed. +365404,a close up of a person with a tie in his mouth +84235,a hot dog on a bun with ketsup and lettuce on a plate +263120,A group of elephants gathering around a body of water. +557127,A road with cars on it and a traffic light. +394418,A man reaches as high as he can to hit a tennis ball. +544432,A group of people that are gathered around a table. +134844,a train is next to a city by the mountains +15260,A cake cover is made to look like a wire birdcage. +432309,A parked motor bike on the side of a the street. +250540,Men in hard hats are on small motorcycles. +183469,two green and one grey parrot perched on a branch. +2495,A full view of a dirty bathroom with no toilet available. +144836,Elderly woman looking over boxed pastry items at outdoor venue. +272364,a few giraffes that are reaching to eat +549789,"A person on skis flies high in the air, while someone down below takes a picture. " +263860,Two elephants in a field rubbing their trunks on each other. +437664,A nude women reclines on a bed with a red bed spread. +5670,a young man in a grey shirt is going to cut his hair +564366,A boy riding a skateboard next to a low grind rail. +557709,A Baseball player is attempting to take his best swing while the players behind him look on. +94610,A sidewalk lined with parked cars next to tall buildings. +123946,A couple of hotdogs on a paper plate. +366003,A bacon and cheese covered hot dog on a paper. +362005,A man flying into the air on top of a skateboard ramp. +498032,A person standing in a room with a remote. +91949,A man standing next to a boy in front of a tree. +388225,Two people play an interactive video game in a living room. +323375,A woman petting a giraffe inside of a building. +341856,Clear vase with water and flower stems in window. +54870,A white plate holding a sandwich and a salad. +105102,a plate with meat and potatoes on it +579859,Large clock tower overlooking a busy street during the day. +212226,A person in a the reflection of a truck mirror. +306139,A group of people at a table working on small laptops. +402334,a building that has a small clock at top +201825,"A very formally styled wedding cake, decorated in white icing and adorned with green ribbons and pink flowers. " +228858,A zebra standing on top of a grass covered field +94419,A large blue bench sitting next to bottles. +297349,A group of people standing around a pile of luggage. +244665,"many people sitting around dinner tables, being served by a waiter" +557916,A little girl sitting at the end of a bed looking at a teddy bear. +6589,A tabby cat wearing a tie is laying on a couch. +483149,A bird sits on a rear view mirror +558169,a blue bird sitting on someone's arm in a room +500699,two plates some food and a fork knife and spoon +198935,A dog sits on grass next to a fire hydrant while a person holds a leash and a bag filled with dog poop +361739,A bunch of sliced up sandwiches sitting on top of a glass dish. +111076,A bathroom with a sink and toilet and a window. +387661,Small passenger train passing through verdant country side. +146150,A man sitting in a chair opening empty luggage. +93853,a woman carrying a handbag and tennis racket walking her dog +91719,"Three zebras, possibly Jacksonville-Grevy, two facing camera with one in background." +215132,A living room filled with furniture and a TV over a fireplace. +91474,Two zebras walking together with trees in the background. +488942,a large building that has a clock on a pole outside +405196,An assortment of ingredients rest both in a bowl and on a surface. +55768,A blue double decker bus driving down a street. +35210,A muffin in a black muffin wrap next to a fork. +319285,A bathroom with a bathtub sitting next to a toilet. +548219,A cat sitting inside of a red bag of luggage. +422274,A person riding on top of a surfboard on water. +313999,"A plate topped with meat and a rice, veggie cake." +475906,a living room filled with assorted baby and kids toys +186282,A flat screen monitor shows a brightly colored image on the screen. +154028,The animals are grazing and eating in the grass. +519784,An assortment of vehicles drive down a street filled with stores. +199403,A person stands with a tie and skirt on. +515347,A man wearing a tie and a jacket. +482297,A very plain and dull bathroom that's in someone's house. +570981,A kitchen filled with dishes and clutter and its sink under repair. +56736,A military air craft flies in the sky with landing gear down. +419371,A zebra standing next to a lush green forest. +156246,A little boy sitting next to an elephant with a long trunk. +114375,Many sail boats sail through the water in a row +434060,A herd of sheep grazing in a grass covered field. +162858,cars setting at traffic light leading to capitol building +368222,a man using a red phone receiver to talk on his cell phone +264976,A cat is using the toilet in a white tile bathroom. +500118,A room with a stone fireplace and living room furniture. +511999,A group of people is standing outside of a tram. +218430,A couple of guys playing a game on the Nintendo Wii. +207557,An orange and white cat sitting on metal surface at night. +412749,a cat that has a shirt on its back +479248,A flat screen tv on a wooden tv stand. +322959,Bread and fruit are on a table with a knife and fork. +342244,A cut looking at its reflection in a mirror +442387,"A little girl stands at a little red table, with a birthday cake shaped like a gators head on it, with friends and family around her." +330439,"A room with a bed, dresser, mirror, and rocking chair." +132814,Two zebra standing next to each other on a dry grass field. +233567,A goat is standing in a barn by some hay. +289702,Large black dog sitting in front of a big mirror. +276195,A giraffe in a grassy field near a hill. +155145,a boat with a rainbow umbrella sitting in water +144534,"Skillet filled with salami, broccoli and other vegetables." +41119,A traffic light at an intersection with a skyscraper in the background. +193674,A person on a surfboard in the water. +422807,An airplane flying through a blue sky with propellers. +267571,a giraffe standing on a sandy beach in front of some rocks +455716,A row of motorcycles parked together on a grass yard area with a house in the background. +51089,A street view of on coming traffic underneath a street light. +208623,A woman sitting in front of a laptop computer at a desk. +566314,A clock below a stained glassed window with light coming in. +571786,A bottle of booze sitting next to a glass. +45176,A pug dog is looking away from its image in the mirror. +321214,A baby in plaid shirt eating a frosted cake. +38825,Two Zebras grazing together in a grassy area. +271712,A bathroom with a white bath tub under a window. +464462,Two people are lounging on a couch near computers. +472648,A young bull looking pretty mean at the camera. +133608,A large group of bicyclists on a city street. +321079,A plate that has food on top of it with powdered sugar. +447449,A picture of a clock on top of the building. +6473,A birthday cake fashioned to look like a beach with surfboard and palm trees. +318187,The inside look at machinery inside of a factory. +400336,A single giraffe standing in an open field. +66524,A man standing on top of a baseball field. +186589,Some very cute small dogs laying by each other. +132719,Man performing skateboarding trick on cement in daylight +317410,A couple of women standing in the back of a car with an open trunk. +482777,An aeroplane soaring high in a clear sky. +72797,A man hitting a tennis ball with a racquet. +326658,A white poster board with scissors and pieces of cloth. +436865,TWO GIRAFFES GRAZING IN THE TREES DURING THE DAY +454234,A man standing in front of a fridge with a lot of magnets on it. +567552,"Two computer monitors, a laptop, keyboard and mouse set up on a desk." +212116,A group of young ladies riding on the back of a horse. +280733,A small bus driving past a very tall pole. +43170,A man in a suit speaking at a podium +509423,We are at the intersection of Doyers Street and Chatham Square. +501281,A man with a tennis racquet walking in the street. +367228,Young man flying a kite over a grassy area by water. +463542,a number of people riding skis on a snowy surface +167044,A pizza is shown with forks next to it. +441203,A long road in the middle of no where with some cars on it. +513688,A chair next to a desk with a laptop and phone sitting on it. +484151,A few adolescents looking at their phones at a table. +241837,A man looks down at a dog standing on a skateboard. +120826,A train is on the track waiting in the middle of the afternoon. +220900,Several horses and donkeys are grazing in a field. +121783,Grown cat sitting in front of a closed door leading outside. +437221,The skateboard is flipping as a rider jumps up. +419081,An olive colored toilet sitting inside of a room. +541345,A kitchen with a stove top oven and blue walls. +274792,A bundt cake pan filled with a batter +145528,three men standing in the park while talking to each other +451449,The dog lies in a bed underneath the bookshelf. +380698,A long train traveling along side of a mountain. +521106,Two young men playing a game of tennis. +349469,Some animals that are looking at something in front of them. +417015,A pink flower in a can in front of a mirror. +337619,Two people sitting on a bench looking out at city. +333656,Two persons are practicing surfing on sand.One man is standing nearby. +519338,A blue rusted train engine sitting on top of rail tracks. +24323,"A bathroom area with a sink, cabinets and a tub." +286820,Two cellphones that are laying on a blanket. +2388,A white toilet sitting inside of a bathroom. +72273,a pizza smothered in cheese and meat with french fries. +272048,A man sitting on top of a purple bench on a tennis court. +143479,A man holding a pan filled with hot dogs in buns. +53892,A box filled with donuts with frosting check marks. +73622,a couple of people in uniforms are sitting together +368994,"A picture of a blanket on the sidewalk covered with flower headbands, knitted caps, assortment of cloths and a lunatic sign. " +572090,A woman standing in front of an apple. +318585,"a group of people hang out on the side of the road, waiting for a ride" +157214,A man at a podium with another holding an umbrella over him. +222430,A man looks straight ahead sitting at a desk. +297180,A man sitting in a chair while working on her laptop. +320670,A man is laying down on a bed with white sheets. +497660,A parked truck and trailer with a large load. +473055,A mirror and sink in a small bathroom. +263258,"A baseball field, in the dugout area with a young boy holding a bat with both hands and going toward the dugout." +34205,"Closeup of a plate of food that includes chicken, mushrooms and broccoli." +191738,a cat lays down on a stuffed animal +23351,A giraffe that is laying on the ground. +77061,two people riding horses on a sand road +410924,A red container filled with office supplies on top of a table. +357385,A man holding a chocolate covered doughnut while sitting in a chair. +564612,A woman posing for a picture in front of some food. +181169,a wooden bench that has colorful decorations +476843,A kid on a surfboard in the water. +322816,a cake with some figures made out of frosting on it +320180,an image of a woman sitting down on a couch with laptop +49893,A man hitting a tennis ball with a racquet. +362409,A man on a surfboard riding a wave. +521877,The graveyard in front of the church is very spooky. +559195,a white boat is in front of a city on the water +18022,The horses are walking side by side in the grass +64442,"A close up shot of horse, with it's baby in the back." +375812,A young boy hitting a ball in a yard with a bat. +400082,"A hotdog, fries and a drink sit on a table beside a book." +140929,The clock is on display on the side of the building outside. +344314,A small herd of zebra standing next to each other. +477673,A kitten resting in a duffel bag on a hard wood floor. +287099,A street sign is at an intersection by tracks. +28285,A white clock tower at the top of a tiled building. +348474,A woman standing next to a group of horses on a field. +559576,A street sign showing how to drive around a divide +383419,A little girl sitting at a table eating a hot dog. +54264,a small statue is by a red sign +462031,A man holding a bat on top of a field under a light. +202489,A man standing next to a table holding a glass of wine. +86168,A large cat rests beside a window sill. +1393,A green vase filed with red roses sitting on top of table. +272241,A cat sitting on the back of a Paso 750. +546428,A kitchen with a white stove top oven. +431655,A red rose sitting on a vase filled with water. +108803,A man is sitting in a chair and holding an umbrella over his head. +341296,A clock sitting on top of a street sign. +557923,two people riding bicycles next to each other in a parking lot +103030,Two tables filled with food under a red tent. +511713,Airplane with vapor trails from other aircraft flying above +417055,We are looking at an ornate old clock tower. +53800,A father and son play a video game on the Nintendo Wii. +415,A guy jumping with a tennis racket in his hand. +174679,A small boat and chair on the beach. +367310,A horse eating a banana out of an older woman's hand. +453481,A couple of people with some bikes on a street. +158950,A blue and yellow train progressing on a track. +16010,An outdoor area with many animals inluding a zebra and a rhinoceros. +222512,A woman holding a baby on her lap while using a laptop computer. +130966,A large black steer walking away with a small stuffed teddy bear in a pile of brush. +424443,A beer and pizza sitting on a picnic table. +42526,A small sandwich sitting on a white china plate. +67491,a large air plane flying in the air +4066,two people in the ocean with a surf board. +430961,A baseball player preparing to throw a pitch during a game. +13348,a large air plane on a terminal +77997,three photos of a male doll slowly getting undressed +319607,A bent traffic light next to the side of a street. +465130,"There are a bed, chair, couch, tv stand and desk in a room." +365642,A young attractive woman sitting on a toilette on the side of a street. +268927,Black and white photograph of person with birds. +136595,Boats floating beneath a bridge on the water +543719,A person laying on a bed with a dog and two cats. +125971,A hotdog with toppings served in a red basket +532855,A man grinding his skateboard on a rail. +39718,A man holding a Nintendo Will controller in a living room. +432150,The kitchen sits empty and unused during the day. +148458,A white and orange cat sitting on top of a sidewalk. +581827,A woman that is standing with a racquet. +578221,a close up of a street sign with a mountain in the background +502084,A couple of polar bears in a snowy field. +196878,A newspaper called The Queenslander with a holiday dinner scene on it. +53359,a person riding a surf board on a wave +236996,A person holding a hot dog with a white wrapper. +74646,People flying kites on a sandy beach while a bucket sits in the sand. +570947,A partially sliced pizza with one piece turned upside down +501439,There is a man holding a tennis racket in his hand. +133963,A couple of guys standing up and playing Wii together. +237600,The man poses while standing in front of two clock on the wall. +76468,Two tennis players shaking hands on the court +427865,Some cows are hanging out on the beach. +567118,A street with barely any traffic line with street lights. +379402,a man working on a pizza in a kitchen +540860,A green car on display next to a busy street. +503837,A group of young people riding motorcycles down a street. +467194,A man is grinding a rail on a skateboard. +552253,A very big polar bear under water with an item. +296907,A cat wearing a Santa suit including a Santa hat. +317250,The grass next to the water with umbrellas. +333240,A cheese covered pizza sitting on top of a counter. +447585,Two men stand by a large desert pizza. +371890,a black and white cat a chair and some bicycles +282130,A motorcycle is parked in the gravel alongside a street. +410934,A broccoli plant has very large leaves. +342403,A young man kneeling on top of a lush green field. +482242,A man sitting in a chair with a black dog in front of a computer. +279521,A man in a dress and two men in pants with a bus. +243569,A girl sits in bed looking at her laptop +502895,A large train is passing over a set of tracks. +509131,A bunch of mini bananas are hanging above a bowl of apples and oranges. +50380,A man guiding a pony with a boy riding on it. +375376,Three zebra stand close together in tall grass. +528575,A boy asleep in bed with his Christmas teddy bear +5577,A black and white cat sitting on top of a pile of clothes. +174004,A yellow work truck parked in tall grass. +495183,a girl is riding her bike down the street +378515,A man kneeling down over piles of bananas. +478575,a line of motorcycles that are next to a road +543525,A kitchen area with all white cabinets mad a white refrigerator. +156278,a massive variety of pots and other objects are displayed along a long kitchen counter with a sink and a clock on the wall. +411484,Three dogs running around a field with a woman holding a frisbee. +20915,A group of white appliances sitting next to each other. +159458,A dog rests on a bed in a bedroom where one person is also sitting. +18442,A close-up of a plate of pasta containing broccoli. +451559,A bicycle sits next to an empty park bench. +29577,Two horses with red feathers on top of their heads. +527060,A woman holding a piece of chocolate cake at a table. +12375,A plate of food sits on a white table. +131431,A large building with a clock on the front of it +48850,A table with two chairs with a pink hairdryer on top. +161925,two women are cutting and preparing a pizza +150224,Family and friends are together at the beach. +503008,A man waving a red flag at cows in the road. +215278,a woman in a pink top a refrigerator and some shelves +441009,The cowgirl is waiting for her turn at the event. +314026,A boy doing a trick with a skateboard from a ledge. +444895,there is a man wearing glasses and a suit +424633,Some very cute sheep in a big field. +422886,A man eating a hot dog with cheese and onions. +444926,A motorcycle parked on top of a tiled floor. +188624,A man flying into the air while riding a skateboard. +270672,A man bits in to food as a crowd of people mills around behind him. +376718,A large bed topped with blankets and pillows. +294487,A small canopy next to a dresser in a wood paneled room. +521819,A group of kids play on a grassy area and lift their arms up as a Frisbee is just above their heads. +46031,A laptop and a desktop computer sitting on a table. +455290,A herd of elephants standing around in the middle of a pen. +26512,BASEBALL DIAMOND WITH PITCHER ON MOUND READY TO THROW THE BALL +254368,A man laying in bed holding a plate of food. +127476,A pizza that is sitting on a plastic tray. +301201,A collection of books and knick-knacks on shelves. +94033,A man tosses a red frisbee at an unknown object. +529838,Snowboarder in full orange and white gear is airborne. +163020,A ducks is flying over a body of water. +332455,a close up of a toilet with a pink seat and lid +406885,a red and black miniature train engine is pulling a red train car +5038,A woman sits on a bed with pillows. +300138,two white and blue vases and a white vase with a white and yellow flower +49255,A street sign on top of a pole next to a large green tree. +187990,A boy is riding a skateboard on a ramp. +474868,Three people standing near each other holding cell phones +241517,a public transit bus on a city street +322922,A group of men on bikes hitching a ride on the back of a bus. +32944,An older man standing next to a woman. +141256,Young man on skateboard passing a man in a black shirt. +159684,A high speed train is seen in the station. +406611,A bunch of people are standing in the snow +358817,A yellow traffic light above a street next to houses. +554711,A woman laying in bed while using a laptop computer. +487239,people riding horseback on a mountain during a beautiful day +363126,A woman riding skis on a snow covered slope. +447208,A man sitting in front of a tv tray in front of a cake. +541197,Two tennis players with rackets and a ball as a crowd watches +82678,A cement bench near a railing that overlooks a large body of calm water. +487925,A man standing on a baseball field holding a bat. +365387,View of a public men's' room with a cot on the side. +21688,a brown brick house with so many windows +320232,"Buildings with large signs ""Park Here"" with rainy cement" +423229,An old fashioned steam engine train traveling down railroad tracks. +1818,A zebra in the grass who is cleaning himself. +120380,A few small kids playing a game of Wii. +539478,Pair of giraffes in an open field grazing and watching. +581886,Two people sit in the sand with their surf boards. +407518,A brown bird perched on top of a metal fence. +78490,a close up of a woman next to a horse +50232,A large metal clock tower below very tall building. +180984,A man and a woman playing frisbee in the grass. +226662,A customized motorcycle with more in the background. +387515,The blue and white bus is travelling down the street. +298578,A group of people on a court with tennis rackets. +484915,A pizza that is sitting on a paper plate. +391158,A beautiful old steam locomotive in the railhouse +508443,A half eaten pizza muffin is sitting on a plate with others untouched. +133100,A zebra in the sun on a dirt road +377005,A cat laying on top of a wooden shelf with boxes. +496887,A plate full of bread and chicken alfredo. +227164,An old rusted pickup truck sitting in a field. +114504,A dog sniffs food in plastic bags in a refrigerator. +251580,An adult teaching a small girl how to play tennis. +471004,A person swinging a tennis racket on a tennis court. +95251,Four young men in a sitting area stand looking towards the opposite side of the room. +150117,A man that is holding a camera in both of his hands. +209048,Three coffee mugs are in front of a microwave. +48396,A woman standing next to a young boy holding a knife. +143143,A man holding a plate of food while standing next to other people. +361913,Young men playing a game of base ball +268556,A woman is riding a motorcycle down the street. +165056,Two giraffes are standing together under the trees. +131597,Row of motorcycles parked at curb in outdoor area. +546626,A smart phone sitting on top sitting on top of a wooden table. +384207,A red and white train sitting still on a train track +366822,A group of friends huddled next to each other while holding snowboards. +224358,A female professional tennis player engaged in competition. +6579,A woman dressed in military uniform speaks to a child. +254824,A picture of a building appearing to be made of legos +274653,A round cake decorated for Christmas with penguins and fir trees. +286124,Person with arm wrapped around street sign standing on sidewalk. +460676,A man and young boy with tennis rackets on a blue tennis court. +262609,A man with a medical mask is crossing the street. +542205,A pigeon perched on a ledge with a street behind it. +131847,A woman is holding open scissors in front of her face. +67886,A couple of people walking across a beach with a surfboard. +438059,a cat sits on the ground with a scarf around its neck +540473,A man standing next to a woman in front of a couch. +353977,an amtrak train going down a track underneath a bridge +492885,A man riding a motorcycle down a road with a POW - MIA flag. +306477,A street sign leaned over with the words High Gate Avenue on it. +553075,A white plate holding a cheese pizza on a table. +406491,A strawberry blond cat is cuddled up between a pair of ladies business shoes. +549063,A surfer is squatting down to prepare his board. +492544,A single giraffe that is walking in a field. +178796,A small baby giraffe sitting on concrete next to an older adult giraffe. +67805,A bathroom with three white wall mounted urinals. +128675,A man holding one water ski at the lake. +287636,Mother and son on the beach with surf board in the foreground. +444294,A group of children seated at desks in a classroom. +470703,Several motorcycles parked in a parking lot in front of a building. +485758,A man on a horse is roping a calf inside a ring. +348854,A batch of very deformed looking carrots among a group of different types of vegetables. +20779,a person riding on a horse drawn carriage +271230,A crowd of people near water cheering next to a float. +147866,A parking meter next to a parked car. +466936,A man is sitting down outdoors smoking a cigarette. +549386,A man standing outside of a building next to bicycles. +171317,A single yellow rose in a small glass vase +303607,Two children hold large crocheted stockings on Christmas. +194595,a person at an office supply store holding a pair of scissors +579073,A man next to a large wall holding a paddle. +184951,"Chicken, broccoli, and macaroni and cheese served an on orange plate. " +379922,A closeup picture of a bright orange grapefruit cut in half. +255165,"a desk filled with some paperwork, a laptop and a computer with two monitors" +282724,A yellow boat sitting on top of a sandy beach. +86646,a couple is taking a bite out of a wedding cake +443167,people standing on the beach near a body of water +163010,A boy is surfing while a grown man who is also in the water looks on +415434,Two elephants are walking through some green bushes. +512416,A MAN WITH A BIRTHDAY CUPCAKE BLOWING OUT CANDLES +88120,A PERSON IS SKIING ON THE SNOW BANKS +368456,A train covered in graffiti on top of train tracks. +505934,A man holding a baseball bat during a baseball game. +303550,A grumpy cat sits with objects balanced on his side. +490405,A man stacks oranges on a cart i an open air market. +3255,a group of people riding skis on a snowy surface +487236,A giraffe in the middle of a field looking astute +156113,An edible teddy bear is sitting on a small cupcake. +406189,This zoo exhibit is home to a large group of girrafes +191842,Photo taken in a car of the television on the roof. +141882,People are waiting at the airport with their luggage +93360,A small dog is jumping into the air and catching a frisbee. +343157,THE MAN IS PLAYING WITH A WII IN THE LIVING ROOM +118625,A purse sits on a counter in a kitchen. +236457,A white pickup truck waiting at a red light. +548011,Group of cross-country skiers on snow-covered mountain landscape. +156720,A surfboard and paddle are along the shoreline. +530367,A white cat laying on a zebra striped blanket. +106900,"A woman, man, and a dog standing in the snow. " +125167,A collection of teddy bears bearing Swiss flags +507147,a man with a horse is standing near two people on a porch +265085,a guy in a red white and blue shirt holding a red white and blue tennis racket +283162,a sandwich laying on paper and on a table +142246,A computer on a table with four chairs in a bay window. +454199,A woman reaches a spoon towards a plate of food. +150930,The clock shown above has someone's name on it. +414819,A bear with its mouth open and swiping a paw at another bear. +26323,A herd of giraffe walking across a grass covered field. +454576,"The german shepherd is guarding the front of the barred door," +507362,Fog is in the air at an intersection with several traffic lights. +4265,Blue dishes sitting on a shelf with a plant and flowers. +381608,Two people setting up a market stand with jars +463605,A train covered in graffiti traveling down railroad tracks. +122953,A cat lying under a laptop and beside another computer. +229388,A man holding an umbrella in one hand and a cell phone up to his ear in the other. +432553,A couple of dogs viewing something as a person sits in a chair. +532126,A white toilet sitting next to a bath tub with a chair in it. +490491,A burnt out cement building is next to a stop sign. +350251,A metal microwave sitting on a counter top. +82696,A bird is walking right through a dining room. +228504,People on a beach with a kite flying in the air. +240565,Three white urinals hanging on a wall in the bathroom. +235788,A vintage VW bus that is red and white. +520237,A woman doing something with a large blue umbrella +47571,Some people sit in a carriage pulled by a horse. +240589,A yellow fire hydrant that is missing it's top. +21452,A car parked on a lush green field. +72657,A woman sitting on the couch playing wii with a dog sitting next to her. +31333,A surfer in a wetsuit kneels on her board at the end of a ride +134688,A brown teddy bear sitting on top of a table in front of a white plate with a piece of pie. +386189,Two park benches sitting in grass under dappled sunlight +411472,A man on a skateboard jumping onto a concrete bench. +477623,An orange train traveling along train tracks near a train yard. +524507, A bald man holding a blue umbrella on a street. +291936,A peddler selling shirts in the rain outside a HSBC building. +139428,Two girls in stand on grass and one holds a bat as the other holds a pink cup. +323797,"Two elephants looking at each other aggressively while near a body of water, " +239861,"When it's this cold, it's better to stay out of the wind." +104747,Six people hold up wine glasses at a dinner table. +312385,A surfer standing with his surf board next to the water +96549,An airplane on the runway either just landed or ready to take off. +336044,A woman holding a tennis racquet at night with a tower over her shoulder. +58117,different slices of banana cut in halve length wise +493132,a soccer player kicks a ball directly at the goalkeeper. +386164,A wooden ball on top of a wooden stick. +415076,A clock that is on the side of a building. +121633,A group of elephants standing in the water. +91469,A woman playing game with Nintendo Wii controller and Wii Fit board. +489909,"A crate with cucumbers, oranges and a banana in it. " +162366,A parking meter sitting in front of a brick building. +21864,The ocean inlet is a favorite place for boaters. +275657,The person is holding a forking and eating food. +232684,A man works on his laptop in the dark. +196852,Two red benches sitting in front of windows. +366264,Large white flowers are in a glass with paper tied around it. +114335,A pizza with cherry tomatoes in on a pan. +297669,A woman in red sweater with dog and sheep in grassy field. +263796,A red toilet in a very small bathroom. +102843,A boat in the ocean near a red light house. +52803,A man skillfully shows off on his snowboard. +386352,a tennis player who has just made a shot. +173737,An airplane can be seen flying through cloudy skies. +402967,A bus approaches a sidewalk where several people and bicycles are lined up. +29793,Two young people laying in two beds in a bedroom under blankets. +117719,A man changes a light bulb in a darkened bar. +217704,A loaf of bread next to a toaster and jelly. +156869,Two cranes on top of an island surrounded by water. +94666,A display in a grocery store filled with broccoli and peppers. +387328,This must be the Boston Commons on a spring day when there is a light drizzle. +49733,A large clock hanging off the side of a tall building. +328299,People at the beach surfing on a sunny day. +450282,A man is shoving a large piece of food in to his mouth. +415647,A man and a young boy dressed in matching white dress shirts and ties. +388654,Baseball pitchers have their own unique stance when throwing a ball. +284279,A humming bird standing on top of a green feeder. +382770,A person riding on a waterski holding a handle +430871,A parking meter next to a handicap parking space. +418625,Two zebra laying on a ground next to each other. +272880,A woman holding a piece of paper near a pan of pizza. +83850,That pizza is four times the size of a normal pizza. +364284,"A man holding a blue, red and green frisbee in his hands." +484641,"A breakfast plate with toast, eggs and bacon." +246348,A long empty road with an over pass bridge. +98434,This person is about to eat a banana. +103851,a person standing near a building with an open umbrella +365557,Man with his arms out snowboarding down the mountain +494550,A close up view of an orange and other fruit. +529968,A cat is sitting on a motorcycle looking in the mirror. +490001,A person riding a wave on top of a surfboard. +501760,A hotdog with cheese fries sitting on top of it. +413704,A dog running in a field with people around. +335981,A few people walking in a store near each other. +63144,A surferboarder is surfing on a small wave. +88250,Two elephants with their trunks attached to each other +189885,A herd of sheep walking down a rural country road. +496207,the back of a city bus as it drives down a street +520338,A man in white shirt standing outside of a building with a yellow fire hydrant in the foreground. +195863,a person standing on a beach flying a kite +167128,A couple of adult elephants with a baby one following along. +423951,A large body of water filled with lots of boats near tall buildings. +468178,Several zebras in an open field with mountains in the background. +536831,A man is on the ski slope on a sunny day. +494751,A modern crisp motel room displays overhead eclectic art. +287545,A couple of giraffe standing in a building. +54204,People with horse drawn carriage on side of city street. +575834,A refrigerator with different items of food and drink. +88432,Some street signs near a road with a truck. +454741,A bus with a red stripe is parked on the street. +558635,A man on a bench staring down at something in his hands. +530052,Carrots are sitting on the stand outside in a bunch +205282,A group of giraffes that are standing in the grass. +502012,A group of white work trucks with advertising parked together +57548,Two very cute fuzzy young sheep on a grassy hill. +502136,"A building wall and pair of doors that are open, along with vases of flowers on the outside of the building." +105668,A women holds onto a Nintendo wii-mote and nunchuck +431952,Several girls are playing with a frisbee while others watch. +51948,Two zebra standing next to each other on a hillside. +401157,A bed with white sheets and a night stand. +437540,A man standing on a paddle board riding a wave in the ocean. +494438,The bathroom is structured like they are old buildings. +89668,A bunch of cows grazing in a dry field together +279892,A field of cows grazing near a barn. +551737,A man that is standing in the grass. +395904,A man taking a turkey out of the oven +141879,2 people are flying a kite in the middle of no where in the winter. +496680,a big blue bus that is parked next to some cars +26670,A girl is flying a kite and a woman is walking away from her. +499884,Five young people are posing at the tennis net. +403863,A blue and white tooth brush sitting on a sink. +203734,Two young boys sitting on a park with a plate of food. +308849,A brown plate topped with bananas and a jar of honey. +316666,this is a restaurant with flowers on the bar +515911,A seagull is flying over the ocean on a cloudy day. +472387,A street sign is seen over a river in a city. +273909,Two young women playing a game of soccer. +89405,A vase of white roses in front of a bookcase. +239387,A cow standing between two cars on a dirt lot. +121839,A women who is carrying a young girl wearing snow skis. +325027,A hand is lifting up the top bread of a sub sandwich. +222788,Happy surfers holding up their boards on the beach +52726,Red wrong way sign in front of a church +498439,Fans observing a baseball game in process. +88562,A stove and a window in a room. +286313,Two baseball players and an umpire on a baseball field. +58937,A wooden table filled with wine glasses and a bowl of salad. +362373,a living room with a wooden floor and chairs inside of it +473110,A train engine carrying a cart down a track. +492132,People walking in a museum with a airplane hanging from the celing. +530741,"This white bowl has rice, broccoli, and fish in it." +399655,A small dog is laying on a couch with a shoe. +535245,A cow standing in the water on a field. +426297,The zebra is wondering about the shadow that he sees. +255479,Two men in wet suits carry wake boards across a sandy beach. +45383,A window on brick wall with vases in the sill. +71171,"A meal at a restaurant of a salad, a toasted sandwich and a pickle" +327314,A motorcycle sits on a sidewalk near a building +20465,Foot long hot dog in a bun with cheese sauce. +83214,A truck is parked on the side of a busy road. +464390,An oxen looking at a giraffe near some trees. +303731,A couple of women in the street holding umbrellas. +305639,A man is playing a WII video game. +149676,this image does not have a picture associated with it to describe +461477,A brown bear stands on a log near some water. +56633,A tasty looking pie that is sliced up and ready to eat. +503183,A doll with articulated joints stares from her perch between two parking meters. +353299,Two horses standing on a lush green field. +353051,A woman with blue hair standing next to a horse. +150623,A person carrying several sacks under an umbrella. +287663,A group of boats sitting next to each other on a beach. +554500,A pretty young lady sitting in a room with computers. +349594,A child holding chocolate donut with both hands. +449634,A couple of train engines carrying carts down a set of tracks. +110200,a bunch of food is loaded on to a plate +124300,A toilet sitting next to a bathroom counter. +204853,A group of people standing around a white cake on a table. +61494,A couple of men racing up the side of a snow covered slope. +389738,Skiers enjoying a day on the slopes in the sun +76657,"Living room setting with furniture, fireplace and lamp" +105945,A father holding his little child upside down. +479376,A picture of a vacant home's kitchen and living room. +24790,A plane has its wings folded up towards the body. +100770,A plate of cooked green vegetables and hot chilies. +431197,"A bathroom with a sink, paper roll, toilet, towel rack and mirror." +43673,A red teddy bear wearing a santa hat sitting on a cocktail table. +575624,A group of cows relaxing in the grass in front of a barn. +251064,A woman holding up a smart phone to her face. +445267,A cat sleeping next to a pile of stuffed animals. +198612,A white and brown dog laying on top of a wooden floor. +322511,A horse race where the red and white leader is in the lead. +137085,Three pedestal plates holding oranges on a table. +409708,A woman is holding her daughter in front of a birthday cake with candles while another lady stands nearby +139,A woman stands in the dining area at the table. +264482,"A plate topped with two donuts, one pink and one glazed." +249534,A plate of chicken sticks with radishes and cucumbers. +473133,A man riding a surfboard on top of a wave. +541274,A group of giraffe standing next to each other by tall trees. +306940,Baseball players about to deliver hit to ball with many spectators. +301746,A couple of young men riding bikes down a street in front of a sign. +86516,A couple of people riding skis on top of snow covered ground. +440043,A red double decker bus next to another bus in warehouse. +335201,A person on a court with a tennis racket. +56068,A group of people riding horses across a beach near the ocean. +213827,a person jumping over a ramp in the water +9236,A kitchen with a black automatic dishwasher next to a doorway. +542549,a bed with some kind of blankets on it +32648,A green shuttle bus taking a turn on a mountain road. +132328,many people watch a person fly a kite with a young person +456446,A person is windsurfing near several waves on a hazy day. +135361,A tennis player is getting ready to hit the ball +507975,Some very pretty horses with riders in the grass. +19532,A stop sign that is decorated in a tropical environment. +506982,A steel refrigerator with several stickers on it. +166401,A person at the door with a desk at the center of the room and a potted plant +89391,A small bath room with a sink and toilet. +519758,A white clock tower on a brick building. +68217,A long train travels past some trees along the railroad tracks +91326,a young boy slices a pizza in the kitchen +520979,A black and white image of a vehicle that is decorated like a dog. +51500,a couple of kids are standing by the bushes +193911,A couple of cows standing on top of a dirt ground. +257328,A plate with dozens of bananas stacked high. +28702,A man standing with his arms folded while smiling. +500257,A few men working on moving luggage at an airport +475223,A bird standing next to a lot of tall grass. +337969,"A toilet, sink, mirror, and tub in a bathroom." +79955,Pickup truck on a ramp preparing to merge with heavy Interstate highway traffic. +422522,some people are watching two people playing tennis +125983,A woman dancing in front of a large mirror. +205232,The large crowd stands on the beach underneath flying kites. +505461,Boats docked at a pier in a large body of water. +575395,Man with tennis racket preparing to hit ball +69293,"The bathroom toilet with the cover up, sink, and bathroom items are shown." +423798,A street at night is lit up by streetlights. +299970,A car is parked on the street by some signs. +25654,A child holds a plastic object while another person cuts it. +400709,A male standing with an upright surfboard on a beach. +44934,A plate that has a piece of pizza and a fork. +449432,A group of people in uniforms stand in formation next to a bus +261161,A dog with a leash on is sitting near a park bench +371841,"A white bowl with shrimp, broccoli and rice." +540176,A road sign and traffic lights next to it +410988,View of a small kitchen in an empty apartment +326928,Two men are walking along the beach with surfboards. +71727,A laptop on a porch next to steps +108253,A plate of cheese bread next to bread sticks and wine. +398810,A small cat sitting on top of a couch looking out a window at another cat. +196118,A clock tower stands stately in an afternoon sky +577522,a bird stands on top of a laptop keyboard +465552,A plate with spaghetti and broccoli and can of pop +351466,A photo of a gated archway with a clock on top. +98656,A man in a dress riding a tiger motorcycle. +74591,A box with a variety leafy green and root vegetables in it. +513882,a large air plane flying in the air +97626,A group of officers are on horseback traveling in formation. +98248,Close up from behind of a young giraffe standing with front legs splayed and head the ground by a fence outside. +235522,Three giraffe eating greens in a field next to lots of trees. +516248,there is a person that is holding a computer mouse +449406,A zebra standing on a dirty rocky field. +262587,A man riding a wave on top of a yellow surfboard. +478404,A couple of plates of food on a table. +376751,Skies skiing near a chair lift and a mountain behind. +499095,a woman and a kid playing with some wii motes +88244,A wooden desk topped with a monitor and a laptop. +540962,A living room has white furniture and fire place. +86956,A man standing behind a woman holding a bat. +209544,"A man standing up while holding a red plastic cup and a large frisbee type disc in his hand, preparing to throw it." +39663,A backpack and a line of supplies laying out. +318314,This skateboarder shows a degree of athletic ability. +319228,A cell phone and a lighter are are next to a keyboard. +410337,A person on a cell phone in a room. +545040,there is a red and silver bullet rain at a train stop +304706,Two large pizzas covered in sauce and cheese. +114972,A very tall building sitting on top of a sandy beach. +546877,Many boats are parked in a river in a city. +63403,A close up of black and white zebra stripes. +488278,China Airlines plain on the ground at an airport with baggage cars nearby. +546011,A trio of zebras stand together in the grass. +43555,A man riding a skateboard on the side of a planter. +357478,a group of people in ski wear on a snow covered surface. +102478,A group of baseball players with a bat and ball at the pitch +458387,Two boats sailing in the water near high grass. +115459,A young girl flying a kite in a field. +564489,A woman in a short red dress standing on top of a tennis court. +141271,A man throwing a tennis serve into the air. +109046,AN orange version of the Eiffel tower in the middle of a city. +228472,A man riding a skateboard down the side of a ramp. +575931,Young boy on the back of his father under an umbrella. +277146,"An ""ANA"" blue and white airplane at an airport. " +432859,An iPod and a laptop computer on a desk +199047,A room illuminated by a lamp and various toys and electronics strewn across the desk +294832,A bathroom with an enclosed shower next to a sink and a toilet. +542637,Two horses in a field on the other side of a fence +199395,a man is flying a kite at on the shore at the beach +363188,People dressed as zombies walking down the street. +72546,there are two very tall giraffes in this zoo by the water +450932,The reflection of a woman is in a window and beyond her is a white and red train. +516244,A variety of healthy fruits placed on a table. +262189,A group of four street signs stacked on top of each other. +29253,A red train is in a train station. +511050,a dog by a couch in a living room +280413,A street sign on a city street with tall buildings. +75101,A large bathroom with an enclosed toilet and a large sink. +101703,a busy street with people a red double decked bus and a clock tower +340420,two different pizzas that just came out of an oven. +473199,Yellow umbrellas stand out in a courtyard area near a walk way. +332113,A gray fire hydrant sitting in the middle of a field. +36196,A airplane moving on the run way of a air port. +284628,A lidless toilet is shown caked in dirt or other filth. +51984,Many sheep are grazing for food in the grass. +102671,Some glazed donuts have chocolate frosting with sprinkles. +202797,A faux fire place that has yet to be fully assembled. +118109,A bunch of men standing near a table filled with wine glasses +477202,dogs standing around with someone watching them +515056,People are crossing the street through the crosswalk. +477389,The elephant has a determined look as he walks away. +545735,A woman holding a yellow umbrella next to a cathedral. +519703,A group of ferry and sailboats are sitting on the water. +303538,A man skateboarding down the street holding a bottle of water. +579043,A clock tower with a blue sculpture in the foreground. +549327,A man bending over to look inside of a fridge. +309993,A group of people that are standing together. +174425,A small slice of pizza remains on the plate +248457,there's someone sitting under that umbrella and someone taking a picture +55727,A bathroom with a white toilet next to a walk in shower. +42408,A passenger bus that is driving down the street. +142722,Two cows and a puppy sitting in the grass. +423165,a barthroom with green walls and a purple rug +185487,a person with green clothes and green board snowboarding. +22690,A plate of bread with jam and powdered sugar on it. +344702,this buss is parked near the curb in the street +167540,An airplane flying in a cloudy blue sky. +29357,This pizza is cut into eight equal slices. +202777,A dome towers above other buildings with an ornate gold statue +209613,Three look alike dogs are herding sheep into a pile. +61492,A cat sitting on top of an antique record player. +308115,A group of skiers watch as one members does a trick. +176811,An ornate clock with four sides is shown in this photograph. +463527,"A blue and black ray holding sandwich, coffee and liquor bottles." +388766,A large panda bear sitting on top of a wooden post. +492800,A diner with large pepsi signs on the front of it. +535483,A woman is riding a bike with something in her hand. +128460,Fast moving male skateboarder against light colored background. +216161,A dog looking at a slice of pizza. +544122,A lady in bed with oxygen tube and a dog. +558736,Three zebras and two giraffes in the wilderness. +192810,A little boy is hitting a tee ball from a tee ball stand. +311954,A clean organized and fully furnished living area. +268725,a cyclist with a motorbike moving very fast +313321,A wall mounted TV over the top of a table. +391940,A woman holding a piece of fruit and a bag. +430319,The cat is on the mans lap even when he is trying to use his laptop. +5713,Two teenaged boys sitting on the floor posing next to a computer. +195353,A cat is sitting in front of a window. +63882,A PINK TOILET AND A PINK BATH TUB IN THE BATHROOM +65182,A man hitting a tennis ball with a racquet. +23656,a cat next to a blue chair and a deck +223804,A small set of boats sitting on top of a river. +32811,A bird resting outside of a boat window. +507633,A man is wearing ski gear on a snowy mountain. +445597,A little girl sitting in front of a cake with lit candles. +536517,A panda is eating a frozen treat with fruit in it. +30254,A bathroom with a white toilet sitting next to a white ball. +84749,A cat curled up in the shade on a door stoop. +521259,The man is playing Frisbee with the young boy. +57006,A parking meter sitting on the side of a road. +408327,A women with a tennis racquet in one hand and a towel in the other. +32901,four men are posing for a picture at an event +409239,An uneaten traditional pizza served at a table. +222564,Two chefs in a restaurant kitchen preparing food. +315841,A small gray elephant standing on a grass covered field. +286021,A train engine is sitting at a train station. +384981,A group of people gathered to celebrate a birthday. +196046,A group of people sitting on motor bikes on a street. +409181,A herd of zebra standing on a field. +101919,A pizza is being cut into on a sheet. +530278,A vase with designs of horses and men. +66297,A hot dog restaurant with neon lights in front of it. +537671,some kind of noodle and vegetable dish being made on the stove. +554892,a person that is feeding a big giraffe +503972,A man with a red beard has on a tie. +320857,a green box some ads and a controller +56127,Fish eye angle view of small kitchen with fire extinguisher at far end. +366759,A picture of a tower clock in the middle of the city on top of a building +129065,Double-decker bus driving down a crowded city street. +367706,Two men and a woman standing in a parking lot by a doughnut shop. +94405,A group of people descending a snow covered hill. +366152,a blue vase with yellow flowers sits on a windowsill +349964,A dog laying on the grass with a frisbee. +194306,A white dog sitting inside a red car next to a string of flowers hanging off the mirror. +383406,cats laying on a desk near a couple monitors and a keyboard +391006,A plane flying over a fence away from the airport +237118,A middle aged man takes a selfie in a mirror. +38693,A person sits at a table with a hot dog. +121430,A green motor bike with an odd leather seat sitting on a road. +186822,A bathroom sink sitting under a mirror sitting next to a toilet. +283910,A group of sheep being herded by a black dog. +394677,A person bent over sleeping in a chair next to others. +138653,these cupcakes are decorated green with small horses +278323,A female tennis player in action on the court. +44860,A group of sheep standing in a field. +103904,a woman is sitting with an umbrella over her +463633,A red stop sign sitting in the middle of a street. +503992,A yellow lab curled up in its dog bed. +28071,A picture of a very tall stop sign. +54490,A group of metal sculptures sitting on top of a white table. +76149,a sanctuary sign and a tall clock tower +325459,Two people sitting in chairs playing a video game. +168804,A tray with different types of pizza on it +450758,A herd of giraffe running across a field. +214732,A fire truck parked next to a fire hydrant. +301188,a motorcycle that is next to a bunch more +18058,A blue street sign with a cartoon cop warning about drinking and driving. +55772,"HAM AND EGG ON A PANCAKE, WITH A DISH OF YOGURT" +252020,A man standing on a tennis court holding a tennis racquet. +217133,A vintage truck with a surfboard on top is painted matted black. +403950,A group of zebras grazing in a field. +249815,Racks full of bikes fill an entire street. +214742,A man that is holding a baseball bat. +109503,A man is throwing a Frisbee on the beach. +524725,two parking meters connectec onto one pole +400547,A number of unmanned small boats tied together. +297574,A blue and white plate holds cut pieces of pizza on it. +411587,The man is in the water with a boat. +261346,a woman wearing a white dress is playing tennis +564061,A purple cart full of suit cases and bags. +353231,Looking at a barge cross a channel of water under a cloudy sky +415823,half of an orange in a small bowl. +232790,A tie rack sitting inside of a white closet. +380892,A brown horse standing on a lush green field. +167902,A black and yellow bird with a colorful beak +442549,A group of motorcyclists riding across the town +500335,A trian sitting next to three other trains near a field. +119677,A square of cheesecake on a marble cutting board with a two-pronged fork. +476856,A cat drinking water out of a white cup. +387375,A group of people riding on top of a ski lift. +108056,A man riding a skateboard down a set of steps. +199918,A very big bear in the water by a waterfall. +103628,A salad with half a sandwich and salad dressing. +551796,A chocolate cake with nuts on top on a cake plate in the grass. +42641,The fresh fruit is left out on the counter. +560470,A woman holding up a chocolate doughnut with icing on top of it. +81103,A man leans over his motorcycle and rests one hand on the leather seat. +279221,A yellow furniture moving truck parked next to a traffic light. +526004,A small infant sitting on someones lap at a table and eating a pizza crust. +290828,A giraffe eating grass from a stick near a bridge. +321579,There are glasses and pizzas on the table. +530061,A child sitting down in front of a bowl. +72018,A picture of a room with a TV and a bathroom. +297396,Small pieces of cake have been arranged on a plate +26817,A man in white shirt and black shorts playing tennis. +275449,A is cat seated near a wine glass. +531973,A brown cow standing in a forest next to tree branches. +528811,a green train that is sitting on a train track +125944,An open toilet with a sign posted on it. +176857,People in a hall with a camera taking a picture +121381,A young child wearing a jacket and eating a donut. +33554,Tourists will find blue signs like this in Great Britain. +136218,A plane flying between two large buildings in black and white. +408746,The man is surfing on a wave as another surfer is in the water nearby. +35176,A group of people standing beside a food truck. +53529,A dog with a hat and a person in a truck. +20481,A laptop computer sitting on top of a desk. +558406,A person on skis is in the air. +450359,A family is in the kitchen preparing a meal. +404847,A group of people with umbrellas on a road. +425702,A man holding a surfboard walking on a beach next to the ocean. +536947,An abandoned refrigerator next to a building with a window. +154589,A woman standing in a kitchen with a dog. +71914,A mini fridge with an open door and a white interior. +340155,A computer desk topped with two laptops and office supplies. +187795,A sign picture of a baseball player holding a bat. +72004,Mini pizzas on a tray before going into the oven. +497238,A man riding a skateboard on a stone bench. +177262,A cat sitting on a bathroom counter behind a hair dryer. +360772,A toilet sitting in a bathroom next to a sink. +367468,a large white cat laying next to a closet and black shoes +337498,A large slice of pizza with cheese and marinara sauce on a plate. +488915,An open laptop computer sitting on top of a wooden desk. +362026,A standup shower and toilet in a small bathroom. +515779,A child smiles while holding a luggage rack +394288,There is a close up photo of an elephants face wearing a garment +266434,A baseball player getting ready to hit a ball at home plate. +381587,Several pictures of Asian style dishes and in the middle a person is eating. +377497,Horse with odd striped head and white body in a sanctuary. +93120,"Three young boys dressed in formal clothes, two are standing one is sitting" +529590,A bearded man in glasses and his cat +581437,A close-up of a microwave and a street cone on the driveway. +245153,Two puffins sitting in some grass on a mountain. +322586,BABY IN BLUE JEAN OVERALLS HOLDING A CELL PHONE +484225,A yellow freight train is traveling on a track +139637,A man riding a bike down the middle of a street. +465862,A woman standing in an isle at a farmers market. +142487,A box full of different kinds of doughnuts. +158272,woman studies a map while standing on street +157283,A couch that over a carpet in a living room. +277089,a street sign on a pole on a street +168175,A wooden table topped with two sandwiches and other food items. +41276,A small airplane is flying against the blue sky. +430518,A woman in a pink top serving a ball in a tennis match. +144162,The control station inside of a technology center. +533239,A large cat wearing a santa hat making a funny face. +420052,A bunch of garbage is outside a black gate. +475439,A nerd holding a white and black frisbee. +423668,A boat and a child holding a surfboard on a beach. +453903,A luggage carousel at an airport surrounded by luggage. +525286,A large clock is on the wall where the paint is peeling. +281591,Two small dogs sleeping on a persons bed +463647,A couple of signs and vehicles on a road. +5595,A book on birds located in Australia sitting on a shelf.. +374990,A woman standing in a doorway as a dog turns and looks at her. +434263,Three sheep eating hay in a fenced in pen. +194876,A man is standing in a bedroom with his shirt unbuttoned. +427646,A train on a track traveling through a countryside. +346621,A trash bin with decorative stickers of cars on them on the ground +285192,A man races a motorcycle on a track. +88902,A red light and street sign in front of a palm tree +555953,A small airplane flying over a field filled with people. +297970,some people playing with a frisbee in the park +189811,A pizza sitting on top of a wooden cutting board. +538844,Two bowls that have food inside of them. +275488,A group of men sitting in front of a laptop computer. +89367,A child holding a knife admires a pizza. +350002,Woman in party dress sitting in beauty shop with hair dryer. +265771,A group of kitchen appliances on a metal table +430079,An eagle statue in front of paintings overlooks an ornate room. +166889,A woman taking a picture of herself in front her her computer +77296,A man in a black outfit sleeping on a small bench. +239773,Baseball player in blue and white uniform swinging at a ball. +555687,There is a small lamb poses on the bike. +41837,two service truck parked at an airport +284426,There are cattle on the bank by the river. +88485,The young man is outside playing a game of Frisbee. +316505,A white plate topped with cheesy pizza and toppings. +280761,A girl in a red dress working on a laptop. +342283,A man standing under a light while making a high face. +104691,Two women in english riding outfits on top of horses. +315037,A man on a bench working on a laptop. +414228,A man standing next to a herd of sheep and cattle on a lush green field. +418440,A sandwich filled with meat and mustard.sitting on top of a plate. +438232,A red and yellow train pulling into a train station. +134328,An airplane flying through a blue sky next to a helicopter. +507783,some peoples luggage has been abandoned at the air port +558528,Men are taking pictures of a skater grinding on a car +33368,A man that is on a tennis court with a racquet. +392228,A building with a very pointy roof and a clock. +407717,Closeup of various oranges and bananas in pile. +37717,A table topped with different flavored and colored cup cakes. +153901,A glass cup full of some drinks set on a table counter. +286524,Two pieces of fruit sitting on a plate beside a stack of books. +464786,A hot dog and a bun with some mustard. +370013,A person mixing up food inside of a Nutri Blend. +361027,A young male tennis player in action on the court. +22479,The skateboarder wears headphones while jumping to grab his board. +213421,A woman sits holding an umbrella near the group of women. +315991,A group of people on surfboards doing different things. +501005,derek jeter swings his bat at a baseball +260925,A cat sitting on the hood of a car. +446324,An old truck carrying luggage at the back +37671,some baseball players are playing baseball a batter and a catcher +434204,A man riding on a skateboard on the sidewalk. +258860,A white bicycle parked next to a brown brick wall. +323925,"A lunch salad in a yellow bowl made out of fruit, vegetables, and meats with chopsticks. " +518889,A sausage and some vegetables are on a tray. +274017,a kitchen that has a sink and a stove in it +541837,A woman and little girl are standing in a room +154145,A man on a court swinging a racket at a ball. +448871,A blue train traveling over a red rail bridge over cars. +331692,A pizza topped with lots of toppings on a checkered table cloth. +528091,A man with a tennis racket on a court. +528399,A wooden table topped with plates and bows filled with food +447314,A woman flies a kite near a young child. +17944,A very tall castle sitting under a cloudy gray sky. +525162,a guy is kayaking down a river alone +131108,this is a street with a brick building +424284,Flowers sitting on the deck of a light green boat. +362092,A bus parked on top of a red bus. +273791,a person walking across an odd looking pavement carrying an umbrella +529549,A herd of elephants standing next to each other on a field. +371973,A small yellow airplane is on a grassy runway. +404652,A white stove top oven sitting between two counters. +506568,A post box is standing along the sidewalk. +351554,Street sign for Hollywood Boulevard with a building in background. +519605,A dirty truck parked on the side of the road. +262626,A cat looks off the edge of a made up bed that has blue pillows and a floral pillow. +269015,A woman standing outside under an umbrella reading a magazine. +403180,A charming retail village includes a colorful flower garden and a historical tower clock. +570857,A surfer surfing under a wave on a surfboard. +377867,A cat sits next to a bike that is garnished with flowers. +203299,Two sheep standing in a sunny green field +52835,"A meal in a container consisting of an orange, meatballs, carrots, and peas." +466422,A baseball player holding a bat standing near home plate. +220678,A cow is standing still with a plastic apparatus on his hip end. +253432,A plate of broccoli sits on a red plate. +359135,Two elephants playing with each other and interlocking their tusks. +333630,THERE IS A MAN THAT IS PLAYING MUSICAL INSTURMENTS +125375,A red white and blue train is pulled up at the passenger station. +477741,A vandalized abandoned building at a stop sign +413959,A horse that is standing with a cart near birds. +349430,Three men stand in a row with their surfboards +177143,A blue table sitting inside of a restaurant with a menu on top of it. +446522,A dog sitting on a chair underneath a painting. +156759,A group of people standing outside of a white store. +147425,A cat in a dark room standing up on all fours. +72714,A herd of cows walking down a small country road. +229849,an image of a female tennis player that is returning a serve +544104,Waterway will all kinds of boats moored and docked. +346013,A couple of flowers inside a clear vase. +503808,a guy that is skiing down a snowy hill +351747,A man running with a baseball bat in his hand. +298762,A man walking down a road with a horse and carriage coming at him. +425522,A pile of luggage sitting inside of a building next to a bench. +189806,A cat and a Dog playing on the floor near shoes. +267998,a swiss army knife sitting on a table with a flash drive +405894,A woman riding a horse and taking a picture at sunset. +184791,A painting of a table with fruit on top of it. +416758,A herd of black and white cattle standing on a lush green hillside. +227460,Some water that is reflecting a building near it. +7726,A large red truck on a city street. +523782,A cardinal perches on the side window mirror of a parked sedan. +253506,A white tow truck with another car behind it. +166358,A person skiing alone on snow covered mountain +561014,a red and white plane is fling in the sky +152731,five sheep standing on a wide open field +45463,"a bedroom with a bicycle, television, refrigerator and microwave" +509258,A street sign shows directions to highways and towns. +319452,Why would anyone use a portable light to shine on a banana? +346985,A large cat is sitting in the sink in the bathroom. +32682,A giraffe standing in a lush green field with lots of plants. +286182,there is a man that is sitting at a table with lots of food +220704,A cafeteria type kitchen that is not in use. +429108,A male tennis player walking on the tennis court. +87429,Traffic is stopped on the road because of a red light. +221932,A man is taking a bite from a piece of pizza +123119,A stop sign on a beach with everyone in the water +331223,The red fire hydrant is next to a caution partition. +53183,A lady is eating a salad before digging into a huge pizza sitting in front of her. +304404,A batter swings at the ball during a baseball game +278032,a train is stopped on the train tracks at the station +288769, many tables arranged outside at the shop +69340,A kitchen that has a sink and cabinets in it. +25550,People stand in a city street at a rally. +238459,A cow standing on a mount of rock filled dirt next to a lush green field. +263881,A giraffe that has its legs spread out. +485994,Wooden tables next to the ocean with colorful chairs. +203416,A beautiful young woman sitting at a table with a plate of food. +212198,A little girl sitting next to her teddy bear. +25424,A man hitting a tennis ball with a tennis racquet. +212470,A couple of men standing in front of a horse near couple of dogs and a tree. +205002,A man on a motorcycle waits at the traffic light +214468,Train conductor standing on a moving train next to some trees. +241888,"Two toilet stall, one blue and the other orange." +367622,A lone young male adult surfing the waves. +467818,A couple of elephants standing in shallow water. +476300,Several elephants walking in the dirt near grass. +391684,An elephant in the water inside its exhibit. +554625,a boy wearing headphones using one computer in a long row of computers +550627,A bunch of doughnuts with sprinkles on them +132316,Creamed filled donuts on top of cupcake holders. +125322,A man holds up his phone and looks at the phone. +485909,Two men are discussing something next to a desk with a laptop. +31247,Mixed group of vegetables sitting on a counter top. +566634,A couple of women standing next to a pair of skis. +20403,a stuffed animal is on the table nest to some leafs +254807,A man on a cell phone looks across the road towards other people. +320480,A man standing in a kitchen preparing food. +268734,A partially eaten sandwich with steak and onions. +430048,"A business window with an ""ATM INSIDE"" sign, reflecting a clock tower." +78820,Food in a pain is shown up close. +206271,The two urinals are on the wall with color tiles. +177449,A bunch of red apples next to a few oranges. +65661,A woman holding her umbrella in her hands +147471,A man and women rest as there dog stands on the trail. +44361,A bathroom with a large white tub and his and her sinks. +448492,A price sign for broccoli is in front of some radishes. +293768,A person on a skateboard does a trick. +159240,An orange living room filled with a red couch and a brown chair. +226147,A woman is taking a picture of food with a mobile device. +368595,Traffic lights next to traffic signs on a bridge. +154861,A young man is playing frisbee in the woods. +278988,"Several plates with pieces fo cake on each plate, and one piece of cake has a plastic fork stuck into it." +319647,A boy leaning against a rail on his skateboard +261758,a dog that is on some grass in front of a building +168200,Commercial jet airplane flying in clear blue skies. +331816,A group of sheep in grassy area with tree in the background. +296065,A living room with a wooden floor and lots of furniture. +531143,A yellow and brown butterfly sitting on top of an orange. +317018,A man wearing shorts is running through the woods playing frisbee golf. +581683,A big wedding cake with three white stories. +189244,A group of people standing around a TV +258850,A man is standing next to his ice cream truck. +383846,there is a cat that is sitting on a mans lap +579337,A woman that is holding a tennis racquet. +231691,a train on a train track at a station +216363,The items are on the conveyor being ready to be put on the wagon. +391596,A couple of people laying on top of a sandy beach. +279864,A dish of steak and potatoes along with two bottles of wine. +412621,A person that is doing a trick in the air. +383324,A beautiful young lady wearing a skirt standing with her legs spread apart. +461491,A baseball player wearing a catchers mitt while catching a baseball. +253967,A group of people holding cell phones and posing. +184446,Two baby elephants laying in a puddle of mud +116095,There are four brown and white cows in a row and a couple more behind them. +342476,A group of birds foraging in a grassy field. +199003,three zebras mill about in the grass of a wide open plain. +79188,There are two giraffes sitting together in the wild +276036,Half of a cake with various layers on a foil covered plate. +349936,"A living room with two blue couches, a blue chair, and a wood burning stove. " +538132,A small dog sitting on top of a couch cushion. +32081,A woman holding a tennis racquet on a tennis court. +11291,Man and woman holding glasses of wine in front of a television. +482382,An overhead view of a man in front of a public toilet. +470386,A woman sitting on a couch in front of an open laptop computer. +535312,Series of photos displaying inside of ones apartment. +244487,A couple of large passenger jets flying past each other on an airport. +96517,A cat sitting in a blue and white bag. +431503,a sink a laptop a tv a couch and large windows +412916,A group of people standing on top of a field playing baseball. +121748,Two young boys eating carrots while sitting on a bed. +300157,Pair of zebras standing in grassy field outdoors. +548766,A couple of baby sheep standing next to each other. +554291,A small kitten standing in a blue hat on top of a table. +318193,A tennis player rushes to hit a tennis ball. +42875,A cow is laying in the grass next to the water. +94202,a couple of anmails standing next to a truck +560662,A man in a blue jersey running towards a basketball. +179584,A grandpa and his granddaughter playing a game of frisbee in a field. +569314,Three children sitting in a row reading books. +176935,A couple pieces of cake sitting on a plate. +236747,A dog is sitting on a work table looking down. +196789,A man is in the kitchen in front of a sink. +531602,A young boy brushing his teeth in the bathroom +105732,A group of people on skis standing around. +304744,Man placing items on a dining room table in front of other people. +80895,A man checking his phone while a woman takes a photo of the water. +363767,A cake shaped like a horse with white frosting and decorative candies in different colors. +195165,A bathroom with a lot of items near the sink and counter. +509497,"A person with two dogs, and another with an umbrella, walking down a road in a park." +263211,A giraffe walking through a lush green field. +271892,a bunch of cows and baby cows in a line in a barn +576576,A bathroom with white fixtures and green flooring +552237,A group of young men flying kites in a park. +374401,a close up of a person talking on a very old cell phone +523854,A couple of chairs and a table in a room. +91899,A herd of sheep laying next to each other on lush green grass. +361124,A man is holding an umbrella beside a truck. +452027,a number of animals in a field near some trees +363343,A plate with a picture of a movie character painted on it in the sand +139872,A dog laying on grass near a flying disc. +242968,"A vase filled with pens with fake sunflowers attached on a desk that says ""Visitors must sign in""." +260470,A counter topped with a large white frosted cake sitting next to small pastry. +578031,A person picking a piece of pizza from the pie. +464515,The couple is riding the motorcycle together. +356498,Some kind of a pancake that has broccoli and sauce on it. +451150,Half a dozen donuts are sitting in a box. +233112,Colorful post notes are placed all over the bathroom and shower walls. +138755,A clock that is on the side of a tower. +141760,The person holding the doughnut is looking through its hole. +431954,"A young girl, holding a teddy bear at an outdoor event." +116750,a train car parked in a train yard +498196,A couple of giraffe standing in a forest. +507547,Two pretty brown cows standing next to each other +239202,A man standing on a tennis court holding up a racquet. +249219,A double decker bus driving down the road. +335539,A table and some chairs in a room. +119581,A black and white dog laying on a bed. +39811,A British bus makes its way down the road. +310082,a sheep is standing on a white fence +131152,a man riding a surfboard close to the shore +523315,A brown teddy bear sitting near a pillow +46331,A pitcher getting ready to throw pitch at a game. +343325,"A bus traveling down the street, with Walton-Le-Dale written on it." +30210,"Several older electronics, including cellular phones and a palm pilot with a broken screen next to each other in white box enclosure." +108244,A black cat with a hat on the ground. +374241,a directory next to some snow covered benches +113935,A long red wall with car brake lights reflecting off it +114389,A lady sitting on a wall talking on her cell phone. +308889,A black and white view of a double decked bus on the street. +125850,A cat laying in a green bowl on a wooden table. +145746,A room that has a bed and a bathtub. +214753,Two equestrians riding their horses on the beach together. +356500,Some people that are hanging out in the snow. +60899,The young boy is playing in the living room of his house. +34418,A dairy cow leaned over eating some grass from a field. +196853,Two guys standing around with the same colored tie on. +519744,A young man standing on a skateboard wearing a hat. +261705,Two men are making pizzas in a kitchen. +557190,"A young man in a suit with his arm around the shoulder a shorter older man, also in a suit" +253695,"A baseball player holds his glove in the air, waiting to catch a ball." +71384,an over head view of cars parked below +239252,An elaborate contraption on a water faucet for a bathtub. +312024,A black and blue multi color bird walking on a grassy area +187890,A bright kite flying past a phallic monument. +568717,"A very roomy, clean kitchen in green and white tile. " +291833,A restroom with three stalls with three toilets. +398905,A person is sitting at a keyboard near a microphone. +183374,A group of people who are standing near each other with umbrellas. +50117,A brown and white cow in a green pasture. +325184,two elephants in a pen being observed by people +307026,Man in glasses swinging at a ball with a tennis racket. +40635,A crowd of people shopping at a farmers market filled with fruit and vegetables. +328462,Lady working in a kitchen while man sits at table watching TV. +147725,a public transit bus on a city street +521869,A dog driving a car down a street past a truck. +215867,A man on a bicycle passing by a taxi. +183273,A train with graffiti all over it is on the tracks. +18336,A little girl taking a bite out of a apple. +239157,A road filled with parked cars in front of a shop. +519088,A garbage man is working down a street with his red garbage truck. +241064,A herd of animals walking and laying on a lush green field. +54389,a building with a clock above the front doors +242543,a person looking in an opened refrigerator +13605,A 6 year old's birthday cake with horses on a top. +201934,A white bus parked next to a sidewalk near a fence. +152176,A bike is parked alongside the lake shore. +64974,A skateboarder flips his skateboard as he flies through the air. +352582,A man in a suit tossing a frisbee +58520,A child is shown holding a kite in the air. +329011,"A dog being washed in a tub, with a sad look on its face." +52712,a red and a black suitcase a rug and some flowers +388770,A flock of birds standing on top of a metal set of bars. +155319,A group of people walking on top of a sandy beach. +434735,Two giraffe standing on a desert land scape. +366137,A woman standing in front of a doorway under a window. +308117,a computer screen with a keyboard and mouse on a desk +292463,A young boy and girl sitting and eating at a childs table with a dog nearby. +400453,The woman with a sandwich on her plate is drinking from a wine glass. +175633,A large sailboat docked near the coast with a smaller boat. +580720,A group of people standing on top of a beach near the ocean. +530620,Men work on the basket of a hot air balloon. +160892,Rainbow colored umbrella blocking the sun on a beach. +149783,A picture of some people on their computers. +562059,A table topped with a bowl of granola and two apples. +194790,Several people with several pizza posing for the camera. +268710,Two zebras are standing together side by side. +18073,A kite flying over a wave filled ocean under a cloudy sky +93791,two street signs on a red and white pole next to street. +297353,A man standing on a purple bed playing an electric guitar +202445,"A cat facing away from the camera, among blankets on a bed." +488368,The elephant is looking in the direction of the camera. +161569,A zebra standing on top of a lush green field. +255385,A black and white photo of a castle at night +164583,A bend sitting in a park along a dirt road. +76431,"a girl in black wet suit in a kayak with lots of water splashing + " +214305,A young boy poses next to his homemade pizza. +120164,A steel oven is pictured in this image. +455588,A boat is in a muddy body of water. +192763,A yellow fire hydrant sitting on green grass wearing a white hat. +438995,A clock sitting next to a large tree near a building. +438567,A living room with wooden floors filled with furniture. +15567,The cat is standing by the rocking chair in the living room. +238498,A hand holding a hot dog and a table of food. +242734,A small train with writing all over it passes through an intersection. +296997,Four forks and a spoon poised over an intricately decorated cake in a box +33904,A teddy bear is positioned to read a text book. +221155,a couple of animals walking around a farm +57878,a lady eating at a table holding up the peace sign +405183,A young girl with a nice booty standing in a living room. +579561,A zebra has its head lowered to eat some loose grass on the ground. +209357,Three men standing on a mountain holding a snowboard. +293011,a cake decorated with an airplane has lit candles in it +419050,A person surfing the waves in a wet suit. +262347,A metal bench between two white flowering bushes. +168512,A turkey or chicken cooks inside a kitchen oven. +390759,A group of three cows eating food while standing behind bars. +221281,A group of giraffes walking in the sand. +161187,A black train engine pulling a white train in the rain. +43585,Two small dogs playing on the grass covered ground. +328284,A person is snow skiing next to a tree. +413419,"A two-story house with palm trees, a chain link fence. and a decorative border." +479633,A man on a skateboard performing a trick. +560756,White leather sofas with ottoman near lamps in orange living room. +180739,A women who is on a surfboard riding a wave. +318825,A man holding a tennis racquet on top of a tennis court. +138185,two guys riding skateboards outside of a building +568882,SOME ONE HOLDING A PLATE OF BROCOLLI AND MIXED VEGETABLES +151781,A group of young men standing on top of a lush green field. +275791,A large trains travels past a river that contains several different boats +319933,A cook is seen in a open kitchen making donuts +306949,"a cat takes over a human's chair, and their book." +396691,Two women in the kitchen with a plate of spaghetti. +36844,A spacious living room with three windows and a wooden floor. +119360,A cats tail sitting on to of a laptop computer on a desk. +68745,a close up of a stuffed animal near a book +501311,Professional baseball player pitching the ball during a game. +426874,Dog lying under desk next to chair in home setting. +66543,a street sign on a sidewalk next to a stone wall +243914,A man riding a surfboard on top of a large wave. +382307,A man standing by the record player in a living room +132540,a television set a brown couch a table and pictures +174898,A motorcycle parked on the side of a road. +162256,A large hairy dog on a leash next to a crowd. +495107,a boy eating a doughnut and holding a coffee cup +100978,A group of people waiting to cross a traffic filled street at a crosswalk. +223574,Emergency vehicles are on the scene of the accident. +536120,A man throwing a Frisbee in a parkland +499617,A man wearing skis on a mountain slope. +775,"A rear view mirror on a bike is reflecting a poster on building. +" +289573,An older couple getting married in front of a crowd. +426878,A woman holds a little girl who stands on top of a skateboard. +386958,A stylized photograph of a really old fire hydrant sitting beside a bent iron handrail. +239980,A stoplight and a street sign in California. +476731,An unknown man making a call on his cellphone. +480226,A close up view of a very cute furry dog. +319184,Two people playing a game of frisbee in a field. +458048,A box of mini pizzas all with different toppings. +581010,A small bowl containing food beside a coffee cup. +206878,A powdered and glazed donut laid out to be eaten +138271,A toaster oven sitting on top of a counter. +227686,A horse with blinder and a colorful harness in the woods +458487,A baseball player holding a bat next to a ball. +16959,A carrying a surfboard while walking across a beach next to the ocean. +230819,A wild rides the waves on his surfboard. +384038,A young boy leaning up against an iron fence. +123810,A beautiful woman in a wedding dress cutting cake with her husband. +349837,The refrigerators are lined up against the wall. +517318,A woman is feeding a giraffe in a sandy plain. +5476,A group of people walking towards a beach while carrying surfboards. +485390,A herd of sheep grazing in a pasture. +523316,a white plate on a wooden table and some bread +45976,A man standing in front of a mirror shaving +264568,A woman is putting a pizza in the oven. +129159,A large clock tower rises up above the surrounding buildings. +354333,a close up of a person holding a slice of orange +178156,A truck stopped at an intersection where construction barriers are up. +122606,A bus going to crosstown parked on side of road. +151394,A person riding a skateboard down a stair rail. +182279,A couple of people standing in a field flying a giant kite. +283203,A boy skateboards by a train during a sunset. +182511,There are two plates showing. One has two hot dogs with all the trimmings and one has a potato wrapped in foil. +487548,"A table with two laptops, two cups of hot chocolate and two donuts on it. " +305195,a baseball player is throwing a ball +252970,A double decker bus driving down a street. +418700,a few boats are docked by a large pier +177575,A stir fry bowl with broccoli and beef cooking. +476282,A couple of zebra walking next to each other. +4497,"A delivery truck driving on a freeway with ""MOBEL PREISS"" painted on it's sides. " +142769,This photo depicts a brown and white dog in the sand. +419089,A yellow bus carrying passengers riding along the road. +376187,A large American flag sitting on top of a building. +204256,A cell phone and book on a couch. +165353,A little league baseball game with a runner on third base. +521285,A herd of giraffe walking through a lush grass covered field. +236308,A couple of people riding skis down a snow covered slope. +393583,A stop sign along an empty road lined with a green fence. +199346,A group of people walking next to stairs. +198164,A classic car waiting at a 3-way stop sign. +561967,A yellow train engine traveling down train tracks. +238147,two bikes parked on the street with pizza delivery boxes attached to their back ends +505977,The circular bed has a chandelier above it. +397375,A dog sitting in the passenger seat of a car. +553108,"Two giraffes are against trees and grass, one is sitting." +557172,A bathroom sink and mirror reflecting the shower and bathtub. +131743,A group of people are standing playing Wii. +496090,A man riding a skateboard down a street. +349402,There is a large amount of bananas hanging up. +170208,A man in black wetsuit surfing on a wave on surfboard. +155885,A flock of white birds flying over small boats. +213403,a male tennis player in a red shirt is playing tennis +259335,a couple of people standing in front of some water as the sun sets +444631,A surfer is walking along the shore line. +82512,A stuffed teddy bear hiding behind plants next to a house. +322762,An elephant standing in the dry grass at the edge of water. +18794,A snowboarder is high in the air holding onto his board with one arm flailing. +445561,A small private plane that is coming in for a landing. +23251,A close-up of grains and pastries on a table. +572900,A man holding a white frisbee in his right hand. +116819,There is a small cargo boat in this river that is surrounded by buildings +499031,A group of two women and an older woman between them. +213399,a little giraffe sitting on the ground next to a somewhat bigger one +371506,A miniature telephone on a table with a raw broccoli tree +239448,Two men standing on a very tall clock tower with a white clock and two thermometers. +531023,a bath room with a toilet and a towel rack +354041,There is a blender with a green mixture in it +135972,The stainless steel black and aluminum toilet is opened. +490084,A man in a helmet is riding a kayak in rough water. +170893,A dog is standing next to a toilet playing with tissue +360325,A herd of sheep standing next to each other on dirt ground. +130875,A tray full of food including orange juice and bananas. +366830,A large brown horse walking through a lush green forest. +535721,A batch of bannas is siting next to a jar. +103257,A large wholly yak with big horns is standing in the grass. +225792,A cop riding on top of a motorcycle. +557451,White and gray cat looking past spoked wheel. +516913,Tennis player about to hit the ball back to opponent. +260910,A kitchen with a lot of things on the counters. +329576,A white horse running next to a brown horse. +75456,A pizza with Canadian bacon and pineapple in a fluted pan. +47004,A man stands out in the rain underneath an umbrella. +247917,Two adult men stands with a group of little league baseball players for a group photo +94422,A baseball player swinging a bat near home base. +465418,A bus driving down a street in front of a cross walk. +78959,A strange plant hanging off a banana tree. +145751,A man sitting at a table wearing a shirt and tie smiling. +156935,A team mascot that represents a lightning bolt with boxing gloves. +421499,Group of brown cows standing on a field next to each other. +265243,A city street at night filled with lots of traffic. +5385,"On a baseball diamond, a player holds a bat while in front of a catcher in gray and an umpire in black." +284257,A man standing in a room next to a metal and red pole. +185125,A little kid that is sitting on a couch. +220310,a stuffed animal lays inside of a trash can +425722,An animal surrounded by a flock of birds +169683,A pig and cow are standing out in the grass. +377486,A person riding a horse in the dirt near a wall. +502582,there is a baseball player that is looking at his hat +138599,A BMW motor cycle parked next to shrub.. +258395,A red fire truck driving down a street. +77486,"A bathroom is shown with a toilet, sink, and shower." +289323,A man holding a cart seat while standing next to a little girl. +48739,A man is taking photo of a baby. +491336,A tow truck is parked and is towing another vehicle. +70739,A couple of women sitting next to each other. +266246,A young girl outside in the rain holding an umbrella. +107641,Construction equipment seen at work site in urban area. +338840,A girl in her underwear jumping onto a bed. +393258,A bunch of luggage laying on an area rug. +53624,A large gray elephant standing on a pool of water. +234239,Motorcycle parked next to SUV in car garage +419453,A girls soccer game is in the works onthe field. +464317,A woman holds an umbrella while sitting in a camp chair. +540372,A cow standing on a barren grass field in the middle of a town. +116951,A train driving on the tracks near trees. +400853,Two people are riding a small motorcycle off-road. +362530,A room with a Christmas tree filled with lots of furniture. +525024,Dozens of people in a parking lot with kites in the sky. +410068,A person with an umbrella walking across the street. +169143,A man throws a baseball on a baseball diamond. +74343,A small gold clock on a mantle with a mirror. +57812,A cat and a kitten laying on a bed next to a laptop. +59752,Numerous boats in a street lined body of water. +170211,A group of three people standing side by side holding Nintendo Wii controllers. +293789,Several kites are flying on the beach in the blue sky. +194097,A woman sitting with a boy cutting a cake. +520812,A mother sheep standing next to a group of baby sheep. +519631,A young man riding a surf board on some waves. +501116,a traffic light above a road with a building in the background +135566,A crowd of people standing on cement ground flying kites. +155142,A television sits on a cabinet in a room. +469130,A few jumbo jet planes parked in a waiting area of an airport. +241551,A group of men on a field playing baseball. +579134,A bathroom with a long counter and rugs on the floor. +511236,A white toilet sitting in front of a building under a window. +124627,A shopping mall filled with lots of different shops. +318290,An oven and a range on a table +526364,"Sparse narrow kitchen, used, but neat, all in white." +273715,A couple of people with some skis in the snow. +171539,An old fashion red truck has its hood up near a dog and lady. +191218,"A Philly steak sandwich with sliced beef, onions, and cheese on a bun." +125371,A vase filled with a colorful flower on top of a table. +113589,Two plastic containers next to a banana on a table. +176120,A bathroom with a shower covered in a curtain next to a toilet. +356169,A wet road in a rural neighborhood. +466125,The child smiles brightly while being handed a pink umbrella. +581632,A bar filled with lots of bottles of alcohol. +490624,An old fashioned television and a newer electronic gadget sitting on top. +580835,Up close picture of broccoli with plants behind it +174276,A fleet of boats floating on a crystal blue ocean. +118134,a building with a very large clock on the side of it +300155,A bird is perched on the twig of a tree. +35269,A plate of food sits on a counter top. +72281,The young man in the cap jumps up on a skateboard. +293837,A laptop sits on the table with its case. +392108,A beautiful woman in a bikini surfing with her dog. +191300,A crowd of people walking along a river next to street lights. +161129,A bowl of vegetable soup sitting on top of a table. +104626,A truck parked near a tent and a stadium. +334178,The pipe smoker enjoys his nightly smoky ritual. +15846,Two young men playing a game of frisbee on a lush green field. +493522,A zebra standing on a patch of dirt on a green hillside. +380951,Bananas in a saucepan cooking in simmering caramel. +503294,a black and white cats walking in the living room +194158,A tour bus downtown with yoga ads all over it. +99119,A young boy riding a wave board in the water +356347,A blue pot of tomato sauce with a wooden ladle. +572178,A passenger train that is pulling into the station. +436972,A man in a uniform standing on a motorcycle in front of a crowd. +276413,This is a teddy bear birthday cake for someone turning 30. +457074,A variety of kites flown in a computerized image. +148968,A striped cat sleeping on someones white purse +377577,A picture of a person holding an umbrella. +226761,Two boys standing in front of a couch with Wii controllers. +62041,A large building with Christmas wreaths hanging from wall-to-wall. +563680,A young man flying through the air while riding a skateboard. +526837,A man riding skis on top of a snow covered slope. +261712,Two giraffes at the zoo during the day. +199553,A man smiling on skis in the snow. +53629,A cat sleeping on the tv with his paw hanging down. +389258,"A woman with an umbrella kneels near a child, who also has an umbrella." +17966,The zebra is confined within the wire fence. +404444,A woman kissing a giraffe over a wooden fence. +559821,A man with a tie standing by some umbrellas. +18841,A woman holding a case with a laptop inside +469051,A beautiful young lady with pink hair holding onto a kite. +403584,Two people standing on a beach next to the ocean. +577735,a small copper vase with some flowers in it +497555,A young lady holding a Nintendo Wii game controller. +521321,A cow on a mountaintop standing in the grass. +143370,A bathroom with a poster of an ugly face above the toilette. +108484,A girl and a large stuffed bear at a table. +339177,A group of people sitting and studying in a library. +508115,"A teddy bear sitting by a flower, coffee bag and a religious statue." +44029,A man riding skis down the side of a snow covered slope. +305060,a person getting a piece of pizza pie +451373,View of the intersection of two streets in front of houses. +126727,A baby walks down a brick sidewalk as she carries a blue umbrella. +491058,A skateboarder holds out his arms as he pops up the front of his board while standing on the back. +454818,A large brown dog laying inside of a car. +409970,a man sitting on a motorcycle in a bike shop +280688,A coffee cup with a lid on a table next to a keyboard. +448998,A little girl wearing protective gear rides a skateboard. +348092,A man on a motorcycle on a racetrack. +419048,Some very cute cows in a nice shaded area. +145318,a table with many plates of food and drinks +431897,Giraffe relaxes in the shade in the park +165771,There is a clock tower with colored embellishment on top +151247,A white open toilet seat with signatures sitting amongst posters. +51738,A bed in a hotel is carrying sheets and pillows as it sit next to a lamp. +81251,A pizza topped with fresh tomatoes greens and cheese +362343,A busy road with people on bikes and in vehicles is shown. +389081,A plate filled with a melted cheese covered sandwich and fries. +179487,A woman tennis player is about to return the ball. +323758,A train yard with carts and tanks on two tracks. +196798,A parade of circus elephants lead by an SUV. +232460,A man wearing a glove pitching a baseball. +384242,I think that the sport that the guy is doing is called windsurfing. +399349,A man walking beside a horse with a kid on it next to a dog. +437895,A bed with a colorful blanket has an iron bed frame. +427464,Bunches of ripe bananas hanging from hooks inside a store. +437145,A toy train is driving on a train track. +542163,A man riding a wave on a surfboard. +115898,A man in black wetsuit on white surfboard riding wave. +372577,a tennis player holding a tennis racket on a court +22649,A fire hydrant sits in front of office buildings. +480268,WOMAN USED IN ADVERTISEMENT FOR AN ELECTRONICS AD +102735,Dog in parking lot and on a leash. +472,A plane flies over water with two islands nearby. +312509,Various birds flying over a body of water next to trees. +168746,A man riding a snowboard down the side of a snow covered slope. +558915,Some people outside at night with a skate board. +345507,A large amount of motorcycles are parked by a sidewalk. +405614,A white city bus pulling onto a street near a cross walk. +488785,A vase with flowers on the table +16546,A cross country skier passes an individual on a trail +163451,A young child has a cell phone up to their ear. +456521,"A man riding a skateboard on a cement rail, then on the side of a pipe wall." +37875,A boy holding an umbrella standing on a street. +249786,a man jumping skis at a ski area +575389,a woman looking at laptop as she sits at a table +249672,A snowboarder does a jump over a snowy slope. +186980,A wooden table with two chairs next to a sink. +412510,A man in black shirt using urinal in bathroom. +545612,A train engine traveling under a blue bridge next to a stairway. +433993,A mother and three children lounge on a sofa +382905,a truck and other cars under a bridge +75426,A sign letting tourist know where to file elephant complaints. +341700,The mirror above a bathroom sink is shattered. +456611,"A damaged sign that says ""STATE LAW YIELD TO PEDESTRIANS WITHIN CROSSWALK.""" +432258,an open laptop sitting on a wooden desk. +453824,This room is decorated in a simple yet elegant style. +359239,a close up of a pizza on a plate with knives and forks +411070,A living room are with a fireplace and wooden furniture. +378657,people standing outside a building with clocks built into the side of it +503238,A red bus going down a busy city road. +543408,A little girl holding a brown stuffed animal. +395497,A flock of birds flying over a beach next to the ocean. +97800,A beautiful woman playing with a small green bird. +511623,An antique train with green engine and red passenger cars. +147769,A baseball player leans on a bat with his hand on his hip. +25360,A white and black bird captured in flight. +63480,A gray and black bird sitting next to the ocean. +5961,A man cutting up a large sandwich in a kitchen. +501368,A person wearing a towel is drying their hair with a hair dryer. +7570,A picture of a computer and a living room. +39785,A person is surfing in a wave pool. +444746,A hand holding a smart phone above a pile of smart phones. +395182,A couple of men standing on top of a snow covered slope. +523869,A white foam tray filled with lots of food. +260166,A group of people sitting on the back of an elephant. +548939,A boy standing on a sidewalk by a skateboard. +285599,An elephant and birds in a grassy area by trees. +97337,A TV sitting in a living room on top of a TV stand. +175535,a white plate with some food and two trays of sauce +319696,A red microwave on a tile kitchen counter. +26765,two dogs hogging a bed by them selfs +411685,A black cat half-submerged in a toilet while drinking out of it. +24343,two people on motorcycles car and trees and water +494456,Two skiers stand on their skis in the snow. +522990,Horse carriage being led by man in busy city. +196885,"Get ready, get set for the baseball pitch on it's way." +557239,Rust and white cat curled up in a toilet bowl. +440940,A beautiful young woman in a bikini riding a paddle boat. +237326,Racers racing on their horses around a track. +171524,Horse and riders walking on a trail in the woods. +573622,The long passenger train rides beside a chain link fence. +433845,A single surfer is riding a surfboard on a wave. +485290,"A rectangular plate with a waffle, fork and bowl." +483742,A couple of sheep standing on a lush green field. +244060,A hand holding out a carrot to a donkey. +128059,A pizza sitting on top of a white plate covered in cheese and sauce. +233164,an image of a street sign on the street +384015,Two men standing next to each other holding Wii game controllers. +202275,Two dogs pulling on the same play toy in a park +492785,A sandwich is cut in half and sitting on it's wrapper. +434192,A river filled with red boats floating on it. +12551,A group of three bath tubs sitting next to each other. +441854,A traffic sign with writing on it at an intersection. +537206,A man laying on the ground in front of a motorcycle. +5394,A boat that looks like a car moves through the water. +415393,a man on a skate board looks like he is falling +412842,A large black bear standing on top of a large rock. +146487,A man standing on one foot holding a controller. +488270,An airplane with wheels wheels barely off ground tilted slightly upward from the pavement to the blue sky. +141040,A couple of guys that are sitting on couches. +67660,A man with glowing shine has a violin. +224114,A hotel resort with umbrellas and beach chairs. +12448,A baby is laying down with a teddy bear. +398203,Several children on teams are running toward a soccer ball +161470,a little bird taking a bath in a bird bath +388481,The monitor is displaying a website for iTV. +337653,A rainbow in the sky over a street. +44723,The Big Ben clock tower towering over the city of London. +516875,A woman trying to bite a hot dog in a container without holding it. +383762,A bunch of bananas hanging above somewhere on a ceiling. +365711,A man standing on a beach holding a surfboard. +521601,A small doughnut inside a cup that's sitting on a table. +50239,The market is selling bunch of bananas. +299757,A couple of people that are sitting on a couch. +382174,A woman walking down the sidewalk at night in a city +566608,Three different size elephants with focus on the backside. +142719,THERE IS A CAT THAT IS SITTING ON THE PORCH +168093,A person on a surfboard in the water. +95375,a giant rainbow piercing the sky while zebra's eat +218761,Dessert covered in chocolate with white topping and candy atop it. +406182,A woman holding up a doughnut over a table. +145921,Three airliners are preparing to load passengers onto a plane. +162827,A white plate topped with four donuts covered in frosting. +231161,In a grassy field stand 2 giraffes and 2 llamas. +578341,A man swinging a tennis racket wearing a blue shirt +273323,A boat that is on the dock still attached. +32656,A birthday cake with a knife in it +398377,Three women sitting on a train seat on cellphones. +4375,A crowd of skiers gathers on the top of the slopes. +100138,A black motorcycle parked in front of trees. +163518,A woman standing in front of a table with lots of salad. +122458,The cat's gaze is focused on something above his head. +129175,A group of people on a gondola underneath a bridge. +400333,A pan topped with two slices of pizza sitting next to a fork. +419544,Bus 811 is pulling into a bus stop. +395978,A large jetliner lading on a runway at an airport. +430681,a bear sticking his head under the water +361073,A large white bus stopped at a bus stop covered in snow. +241174,Two men greeting each other with a handshake. +99182,A man looking through a book on top of a table. +74369,A little boy in a baseball uniform holds the bat ready to swing. +130948,a day of the dead offering with fruit +100354,The lamb is nursing for milk from his mother. +44038,A small vase sitting on a sidewalk next to a brick building. +495587,A large group of people riding bicycles down a street at night. +163076,There's an outdoor dining area featuring a fountain. +544855,a man standing next to a a little passenger train on the track +347171,a family sitting on a couch near large windows +545138,Two cars and a motorcycle are parked in the same small spot at various times. +177496,A living room filled with furniture and a wall mounted paintings. +521197,A man poses with a yellow bicycle and a banana. +538423,a close up of a bird with a blurry background +393836,An unmade bed and a turned on lamp. +228467,A white and red bus is traveling down a road. +559884,The street worker is holding a stop sign near a truck. +466052,A coffee mug sits in the corner on a counter with several items in it. +78671,A baseball player swinging their bat on the field +330316,The train on some railroad tracks next to a platform. +217622,A man in a wet suit standing on a surfboard as the wave approaches. +71215,A family riding on a horse and buggy ride near the White House. +175948,A tiny bathroom with only a toilet and a shelf. +409358,A modern bathroom with square sink and backlit mirror. +410272,A chef preparing vegetables at a counter in a kitchen. +128570,An adorable child wading in water while holding onto a boogie board. +133923,A group of vehicles driving down a city street. +70353,A cat laying on the arm of a chair in a living room. +421042,A man riding skis down a snow covered ski slope. +286478,A dog with a lazy look lying on a bed. +420596,A man holds a racket and goes to hit a ball. +50829,A lot of food that is on top of a table. +541587,a clear vase with different flowers on a table +59614,A multi colored dish with broccoli and white twisted pasta in it. +439516,a giraffe leaning over a fence to eat out of a bowl that a woman is holding +53454,A fighter jet flying through a blue sky with smoke behind it. +158770,Several stuffed bears wearing crowns line the table. +483564,A table topped with a personal note and a clock. +443797,A cross hangs on a white wall next to a closet. +247587,a man standing on an upside down surfboard on the sand +14874,A skier stands next to skis stuck into the snow. +316795,A man in black leading an all white horse +305423,A man who is holding a skateboard next to some ramps. +383065,Unique looking Modern Outdoor Public restroom on a sidewalk. +518773,A large sandwich filled with meat and peppers. +492846,There are two girls playing video games together. +463884,A man in a wet suit on a board being pulled +370657,A motorcycle has three people riding on it. +577893,Man playing tennis with tennis racket on court +402405,A man with a backpack walking in skis. +138768,street lights on a city street with no one around +307649,a cat is starring at an old television +371129,A man goes skiing at a park with all his ski gear on. +509227,an image of boy on a skateboard doing tricks +246265,Many motorcycles are parked around a crowd of people. +557163,A red double decker bus parks next to a large white awning. +314154,A young girl is smiling while holding a luggage bag. +156567,A black clock tower with a white sky in the background. +155007,"a teenager playing in a skate park with a skateboard +" +227730,A cat is curled up inside a bowl. +412978,A kitchen counter with a rounded edge and shelves +82821,Paddle boats parked at the edge of a river or lake +113251,An evening city scene with blurred images of cars driving by +134596,a person doing a headstand on a concrete floor +436164,A white horse pulling a cart down a street. +537574,A little pit bull dog is sitting on a floor board of a car. +406932,A dog hanging out of a side window on a car. +564820,A collection of trinkets and little girls purses. +118106,A group of young men playing a game of frisbee. +384152,A person in pink teddy bear mascot suit on sidewalk under a traffic light. +534801,Two men in a market area with various fruits and vegetables. +347058,A plate topped with pieces of cake and sausage. +380388,"Non passenger train, slowly coming down the tracks" +567609,A decorative space with yellow ceramics and a vase of flowers. +508586,Herd of zebra grazing on dried grasses in open field. +205570,A woman uses a paintbrush on a melting candle. +439774,A man and two girls sitting on a couch with a dog. +471394,A plate of food on a table with a tall glass +195211,a room showing a screen and a table +127170,A baby sits at a white table and on the table are a baby bottle and a cupcake with a one sitting on it. +299887,A man and a woman are posing next to a red motorcycle. +352552,A person flying a kite near a basketball hoop +249301,Two guys are riding a motorcycle down the street. +169606,A black bear standing on top of a rocky hillside. +303069,A loving couple who has fallen to sleep together on a couch. +315810,A male tennis player engaged in a match. +293554,Woman outside playing a game of frisbee with a dog +346589,A man that is on his knees with a snowboard. +139721,A cat calmly sitting on a counter next to some scissors. +98322,A family climbing up the side of a snow covered mountain with ski equipment. +269113,three dogs on a field of green grass +391161,a hydrant placed besides a road in the street +40924,a couple of naked guys in a room together +364608,A man standing on top of a sandy beach near an upright surfboard. +296523,Two mean in uniform are riding horses side by side on a sandy beach. +323468,A small herd of zebras enjoy a drink of water from the river. +477689,A photo of a women smiling posing for a picture. +435037,A donut covered in chocolate sitting next to a cup of coffee. +149646,a close up of a person holding a cat wearing a tie +545002,A man riding skis down the side of a ski slope. +465868,A gray cat standing on top of a dirt road. +568972,Father and son wait on their bicycle at a traffic light. +500680,A group of women looking at a display of baked goods that is outside under a pavilion. +457491,A fast train crossing over a small bridge. +332292,The skateboarder is checking his technique in the mirror. +74139,A large pizza sitting on top of a table covered in cheese +255649,Two black horses standing next to each other. +472416,A lamb standing in the middle of a lush green field. +227582,A person extending a white plate holding a sandwich. +459164,Two calculators are next to a computer laptop. +54909,Two people walk on a path carrying umbrellas. +490012,A very tall building tower with a clock on it's side. +449839,A bride and groom posing by a tree +423189,Sparse office with antique computer and dial telephone +403758,A man riding on the back of a white horse next to other horses. +350267,Many people are listening to a lecture on their laptops. +303603,People standing next to tree looking at an airplane flying over ocean. +523241,A busy street with several lanes and a crossing sign in the foreground. +514537,A wild animal drinks water from the toilet bowl. +76416,A double decker bus driving past very tall buildings. +106314,A man doing a trick on a skateboard on a sidewalk. +332607,A girl sitting on a kitchen counter drinking wine. +317120,A street post with three different street signs on it +60760,A bathroom with a walk in shower currently under repair. +226161,A photo of a living room containing a fireplace but no other furniture. +195172,A giraffe walking across a tall dry grass field. +440093,A man flying through the air while riding a skateboard. +493442,A woman slashing down a snowy hill on skis. +31817,A man riding a motorcycle while eating food. +465449,"An elephant walks around a small, fenced-in area." +555298,"A dog sleeping between a book bag and a shredder, underneath a computer desk " +561938,Two adult elephants are surrounding a baby elephant +161447,A woman and three men at a table with most of the pizza gone. +112904,An Oriental meal is uneaten on a table. +378561,A red headed boy sits hugging his Black Labrador dog. +327413,The view of an entertainment center and desk in a hotel room. +128506,Some very cute stuffed animals in funny costumes together. +442301,A person holds a misshapen carrot over a kitchen counter. +382333,A bunch of vegetables that are in the ground. +508822,A young boy eating breakfast in bed. +373029,An aircraft is overtaken by maintenance workers as it sits on a landing. +324155,A man on a skateboard performs a trick +417164,A parking meter machine covered in ice surrounded by snow. +361142,A very tall building sitting along side of a street. +195297,Two dogs walking down a street side by side. +251094,a sheep with two of her baby lambs in the pasture +321071,A couple of white plates with sandwiches on top of them. +472424,A baseball player holding a bat during a game. +337143,A herd of giraffe standing next to each other at a zoo. +389256,A woman cutting a cake while wearing a crown. +383958,A woman smiles with a fork as pizza sits in front of her. +543620,"A catcher, umpire, and batter playing on a baseball field. " +322164,A tiger cat sitting on a floor next to a piece of string. +414529,A man is playing tennis with a racket on the tennis court +204661,A person holding up a phone in their left hand. +355197,A woman smoking a cigarette and talking on the phone. +437720,A nude woman at a table with a laptop by portraits and paintings. +345068,A hospital room filled with empty beds and medical equipment. +537438,A slice of vanilla and chocolate cake siting on top of a white plate. +318471,A street sign marking the intersection of Roberts and Cedar Streets +142483,A few pieces of pizza sitting on a plate +231052,A platter filled with cooked food and broccoli. +510606,"A bathroom is shown, with a urinal and a bidet." +147979,a man on a motorcycle that is in some grass +60677,A purple truck parked in parking lot next to an apartment. +284153,a bathroom with a bath tub a toilet and a sink +401088,a lot of very skinny cows with trees in the background +219676,A clock hanging off the side of a tall building. +132901,A man and a woman standing next to a motor cycle. +299148,a baseball player swings his bat at a ball +40757,A young boy laying in bed with a pacifier in his mouth +68050,A group of animals that is standing in the grass. +365018,A dog sitting in the bed of a truck. +468778,A bunch of teddy bears with umbrellas sitting on display. +323442,People enjoying a meal and wine under white umbrellas. +546342,Altered black and white photograph of a boy swinging a racquet +25846,A close-up of the person using a laptop with an extra keyboard. +381658,a train on a train track with a sky background +498225,A group of people eating outside of a bakery window. +331049,A small brown horse standing on a hilltop +206618,A banana tree with an unripened clump of bananas hanging from a tree vine. +319073,A man is surfing on a crashing wave. +246074,An empty city street surrounded by stores and shops on either side. +249129,A group of teddy bears sitting at a small table in front of a christmas tree. +529256,Two dogs laying on a bed with a red comforter. +54513,A bunch of ripe bananas sitting on a plate. +322944,A woman with a badly bruised face holding a stuffed animal. +412592,A bowl full of broccoli with spoons on a table. +570179,some monitors and different electronic boards and controllers +553471,An alarm clock sitting under a large hammer. +49646,A red train with its doors closed near the platform. +549780,A purple gloved hand holds out a hot dog bun that has chili on it. +350262,A few llamas in a fence with fog over them. +280819,A lady sitting at an enormous dining table with lots of food. +530033,A man is using a urinal at a public restroom +213961,Two cows walking along the sand dunes at a beach. +28688,A woman and two young children holding Nintendo Wii game controllers. +422280,Luggage on a carousel at a crowded airport. +512495,A bright white enamel bathroom with a checked floor. +401037,there seems to be a stuffed animal that was left in the street +320290,Cars and buildings line the urban streets of the past +103757,A cat on a toilet seat of some sort. +364243,A man rides a silver motorcycle down the street in town. +59202,A skateboarder is near the edge of a skateboard ledge. +174838,A woman sitting on a horse while he's walking. +493161,two giraffes near a tree in a field +118965,A man sitting on his skateboard in a field. +560911,a person sitting down with a cell phone +543531,Men in uniform are around a birthday cake. +354606,A small brown hamster sleeping inside of it's cage. +385633,A refrigerator that has a plant on top of it. +495613,A yellow motorcycle and a blue motorcycle parked on red gravel. +37988,a woman is throwing a tennis ball to serve +498533,A street scene with a dusting of snow on the car and the ground. +358149,Dozens of people watching a large colorful kite about to be flown +38276,A cluttered computer desk in a messy room. +104392,"a modern kitchen with an oven, stove, and a fridge " +446409,A tabby cat laying on a cat scratcher in front of a bicycle wheel. +482589,A black and orange cat laying on top of an umbrella. +40275,there is a monk standing in front of a building +543762,A stir-fry vegetable dish arranged in a bowl. +576070,A bed in a bedroom between two lamps in front of a tv on a dresser. +218456,A cheese and pepperoni pizza with basil sprinkled on top. +325598,A black cat is curled up and sleeping. +327617,an old black and white photo of a tennis player +477010,A tennis player serves a ball as a crowd watches. +135572,a teddy bear sitting inside a toilet bowl +140043,A plate of eggs and toast next to a plate of bacon and french toast. +329219,A man standing next to a dog on the ground. +194724,A pizza sitting on top of a plate next to a foil bag of food. +244636,A doughnut shop sign hanging off the side of a building. +420878,a dog jumping up to catch a frisbee in front a man with leg bent +139099,A street scene with a person on a motorcycle. +328668,a group of people standing in the park playing with a frisbee +477791,A cat looking out of a vehicle window during rain. +391253,"The room is filled with remarkable items well suited. +" +230881,A bull with long horns standing next to a brick structure. +152388,a number of birds flying near a nest +96107,A kitchen filled with appliances and track lighting. +60456,A man is approaching a seagull on the beach. +390627,a small opened refrigerator on the ground +91950,The rams are sitting on the rocks and boulders. +62068,A Ma and Pa statue outside some high rise office buildings +374010,A man that is on a surfboard in the water. +136920,"A bathroom with a sink, toilet, and window." +281533,A dog watches an animal on the television. +568270,A herd of horses in a grassy field near a hill top. +63399,A frisbee sitting in a sports bag sitting on the ground. +512116,An adorable kid walks across the rug holding a phone. +388100,A street scene with people lined up on the sidewalk. +400238,A group of people standing around with two of them holding the Nintendo Wii remote. +150487,There is a motorcycle parked against a wall. +556183,Alfredo pasta with broccoli and mushrooms hot meal. +311300,two girls are riding a skateboard down the street. +263163,A man sits on a bench in a no smoking area +234499,A pita pizza fills up an entire plate on a table. +157465,Two different styles of buses parked side by side. +535578,A group of sheep grazing in a grassy valley. +214671,A cat sitting on a blanket on a table. +133571,A horse is standing next to a metal box. +98283,A person riding a skateboard on top of a blue floor. +388619,Three bikes on the shore while people talk on a small boat. +163447,a pair of vases with flowers are under a chandelier +535183,A group of people standing outside of a food truck +366931,Two decorated cakes in boxes on a table +365701,Young man in orange jersey throwing a baseball. +475893,Dead plants on a sidewalk of a busy city street. +543992,a blanket spread out with many items that have to do with electronics on it +192291,"A bathroom with walk-in shower, deep tub and sink overlooks other townhouses" +545920,A man on horse watching people play a game of baseball. +368821,A clock sits at the top of the ceiling +510078,A young man riding a skateboard into the air. +173391,A person is pressing a button on a convection oven. +12639,A little boy about to hit a baseball during a game. +62915,A man driving a luggage cart sitting on top of a runway. +501527,The two surfers are walking down the beach. +420330,A white plate topped with a cheesy green pizza. +118607,A wooden table topped with four white bowls. +146614,A living room filled with lots of furniture and seats. +443281,A TOILET IS IN THE BATHROOM DOOR WAY +71123,A large jumbo jet with huge wings is on the runway. +97667,Many different dishes of food on a table. +116678,A neatly made double bed accented by a pair of teddy bears. +317402,A dog sits on a chair in front of a flower pot. +414736,The man is holding a banana beside the fence +401857,a baseball player swings at a fast-moving baseball in a crowded stadium. +153966,A cat laying on a blanket in a cage. +58797,A toilet is in a dirty bathroom with a sink. +127955,there are two brown bears that are playing together in the water +429283,A giraffe is standing under a tall tree. +339426,A baseball player swinging a bat on a field. +329447,A sheepdog runs around a herd of cows in a fenced-in field. +491681,Man on surf board surfing on ocean waves. +125635,A black and white cat stares downward at a window. +182213,A persons work station complete with his lunch and drink. +578984,A lawn chair sitting on a beach covered by an umbrella. +120285,A living room filled with furniture next to a fire place. +122838,A small white bard with a long beak on a branch. +536073,A blender where someone is making a mixed drink. +100438,a man sitting in a restaurant eating a meal with others in the background +410942,A group of people standing on top of a snow covered slope. +244754,a living room with some fancy curtains behind a couch +368280,Two teams of small children are playing a soccer game. +497351,A army jeap on display in a museum. +194875,Here are motorcyclists parked outside a Polish gathering spot for women +505542,The blue and white train is traveling down the track. +443160,The would is dressed up wearing a hat and tie. +364470,"A living room with couch, settee, and a tiled floor." +280515,Two elephants that are drinking out of a watering hole. +228306,Red metropolitan bus at intersection in city environment. +2867,a group of young people getting ready to go ski +253421,A vase that is on a table with flowers inside of it. +85772,A young man taking a swing at a tennis ball. +231534,A large jetliner sitting on top of an airport tarmac. +200572,An individual with a red tie sitting next to a dog. +148955,The two gentlemen are talking with each other. +505213,A man opening his Mouth wide to eat a large sausage sandwhich +97868,"A blue, white and red fire hydrant sitting on a sidewalk." +337188,A black cat laying on top of a wooden desk. +474272,I dog standing up blocking the camera from taking a picture. +421955,A group of navy men cutting a massive cake on top of a white table. +389404,The chicken has found something to eat in the grass. +213932,A picture of a motorcycle on the street. +240767,A red brick building with a street sign sitting outside of it. +550529,A motorbike sitting in front of a wine display case +203849,A living room that has a lit lamp on the counter. +341132,A woman standing over a table next to two other people. +505638,A steam engine train traveling down train tracks. +471335,a person with a child in a stroller +386187,a person getting a drink with a person behind the bar +205474,A vase filled with lots of flowers on a table. +482605,A man holding a pair of headphones in his left hand. +128748,a baseball player talks with an umpire +64915,Two piles of trunks sitting next to each other. +280705,A photographer setting up his equipment for a photo shoot. +94536,A cat that is by a bicycle wheel. +573113,A pair of shoes hanging over a street sign. +488360,an elephant and a rhino dirt water trees and bushes +47627,a sexy naked woman on a bed in front of a window +561629,A little boy with scissors and construction paper. +568259,A male tennis player swinging his tennis racquet. +343254,a trey with some bread and juice on it +121828,There are a lot of appliances stacked in the room. +113951,Children involved in a soccer game in motion trying to move the ball. +303818,A bus traveling down a curvy road behind a black car. +349021,Thomas the tank traveling down train tracks next to a bush. +331230,A cutting board with slices of fruit on top of it. +70865,A man sitting at a table with plates of food. +530583,A couple of glass items that are in a room. +466784,A group of office workers posing for a picture together. +115412,a cell phone sits next to a plastic toy +130984,Three sets of train tracks with trains on each of them. +239148,A herd of goats walking along a dirt road. +298525,A microwave oven sitting inside of a kitchen cabinet. +90367,a close up of a dog sitting wearing a hat +198495,A BMW motorcycle parked on a brick street. +15826,Kids enjoying the skateboard park on a sunny day +325208,A group of vintage metal trinkets with tags. +558784,A man standing on a dirty and grass field next to a lake. +144562,Baseball players are in their positions to play the game. +25508,A woman playing with a tennis ball and racket. +35628,Two traffic attached to a pole on a tree lined street. +520531,an image of a cat sitting on top of the desk area +257853,A canopy bed is dressed in all pink bedding. +209630,Street signs are affixed to a utility pole. +171241,A man standing on a baseball field holding a bat. +477087,"Examples of baseball moribilia include bats, balls, mitts, and needles." +453330,A bird stands on the ground among dried leaves. +35411,Black and white image of a skier in a mountain forest. +455956,A picture of a person and a horse in the street. +65375,some boats docked in the water and a person in a yellow raft +558457,A young boy standing next to a pile of green things. +394663,An elephant with tusks is on the grassy ground. +413734,A airliner pulled up to the gate for loading and unloading of passengers. +570171,A herd of zebra standing next to each other on a lush green field. +287574,A group of elephants stand under a waterfall. +430791,Red ties hanging like nooses in a museum. +141755,Flock of ducks standing on a rocky shore. +282206,a person laying on a boat in water +522727,A man poses for a picture in a nice dinner jacket. +169438,Children playing a game using Wii on a 13 inch TV. +245701,A man with a tennis racket with a crowd watching. +540681,a person stretching to hit a ball with the racket +254926,Man wearing an orange and black neck tie with a blue tee shirt. +239235,A group of people riding down a snow covered ski slope. +523529,Something has peaked the interest of this bear. +27246,A red water hydrant in the field next to a road +214421,A man standing next to a woman in front of a TV screen. +40813,there is a young guy about to fall in dirt +331937,Side by side beds displayed in brightly lit room. +300086,A large white clock tower towering over a wall. +258266,A bowl of food sitting on top of a white kitchen counter. +175867,A wet rain soaked street surrounded by buildings and trees +188941,"A living room with couch, tables, and paintings." +90753,A vase filled with white flowers on top of a table. +208946,The building stands tall against a clear blue sky. +391637,A motor bike parked in front of a building with a cover on it +402765,A Nintendo Wii controller in a person's hand. +284152,A man sitting on a bench next to the ocean. +219754,A brown plane is parked at air port +51376,"Soup, salad and sandwich sitting on a plate." +176697,A dog sticking it's nose out of a crack in a window. +494269,"A bathroom with a toilet, sink and trashcan in it." +105782,A dog chasing a kite that is flying. +74412,Cars parked on a beach with people watching hot air balloons. +355342,Three Asian performers on a stage with parasols. +441292,A green semi truck driving down a narrow street. +343496,A person walking by stop sign at street intersection. +167353,An old wooden clock attached to the wall +118367,"Hot dog on a roll with cheese, onions, and herbs." +461256,Woman stirring boiling pan of food on back burner. +430359,A baseball player holding a bat over his head. +390130,A man and a women who are traversing the terrain on snow skis. +464649,"A variety of green vegetables including kale, cabbages, broccoli " +230501,A woman kneeling down to an orange cat on a lap top computer. +287484,A messy bed in a bedroom between two tables with lamps. +451648,THERE IS A VAN THAT IS PARKED UNDER A SHED +292446,A man eating pizza without using his hands. +462640,Black and white photograph of men on a rowboat. +86848,A smiling lady sitting by a cake with a lit candle. +7522,An adult zebra and a younger zebra in Savannah +244853,A bunch of items that are on a table. +208208,a view of mountains from the window of a jet airplane +27897,Black and white photograph of people at train station. +460145,A herd of sheep walking down a road in front of a silver truck. +176289,a cat sleeping in the middle of a big bed +280392,"Two people stand on the beach, surfboards in hand." +293315,Three women that are sitting on a bench. +8888,A bunch of airplanes are parked on the runway. +163628,A bathroom door is open showing a shower with the shower curtain mostly open. +27658,A red fire hydrant sitting on top of a lush green hillside. +241238,Three captive giraffes are standing about in a zoo. +523230,two men sitting on a park bench outside by a tree +314440,A train with red lights riding down train tracks. +331785,A man and woman riding on the back of a motorcycle. +380162,a tub toilet sink and medicine cabinet and door +66523,A bed topped with three white pillows covered in a canopy. +34808,A man standing next to a woman while flying kites. +315974,A finger pointing to a blemish on a green piece of fruit +514089,A little girl chews on the end of a party noise maker +554595,A man laying on top of a sandy beach laying next to a surfboard. +345245,a bunch of stuff is on a small table +23017,A blender filled with liquid sitting on a kitchen counter. +50576,A two truck towing a brinks money truck. +25096,A young boy cuts into a cake shaped like a skateboard. +391321,a street light is next to a stop sign +234533,A bicycle carries a cake from Dairy Queen on its back. +538054,A person holding up a piece of banana to the camera. +452721,A group of people riding horses down a beach. +127044,A long green and yellow train traveling down tracks. +245430,there is a opening on the street of the building n the city +275755,A shirtless man with a hairy chest holding a remote +193271,A kitchen filled with black appliances and lots of counter top space. +169802,A man in hat made of bananas standing in room by men. +119166,A man in a red shirt leaning up against a road sign with a camel on it. +117368,A stop sign with two street signs above it. +294831,Two pieces of pizza are served on a plate. +84312,A cat with it's head inside of a brown shoe. +353411,A dinner table shot of a person holding a sandwhich accompanied by fries and beverages +288399,A brown dog flying through the air with a red frisbee in his mouth. +532833,A large free standing street clock with a cloudy sky. +518363,Two cows in a backyard with one sitting down and the other eating. +20935,"A room full of guys and girls sitting a various tables, some have laptops and food. " +182755,There are three monitors and a laptop on the desk. +493235,A kitchen with lots of black counter top space. +260966,An antique style clock is on a post in a park. +245383,a motorcycle and a three wheeler both coming same direction on both sides of street +276836,A white toilet with a wooden toilet seat. +512912,A white bowl of bananas and sour cream sits on a white plate next to a banana half in the peel. +560312,A run down waiting room at a transit station. +417481,A man wearing a shirt and tie topped with a motor cycle helmet. +98633,A white piece of cake sitting on top of a plate. +559442,White clouds float above a big fancy castle on a sunny day +439770,The empty surf board is floating on top of a wave. +62661,A taxi cab parked next to a fire hydrant. +258322,a close up of a person holding a really old cell phone +240084,A traffic light suspended in the air in front of a brown and red brick building. +504516,A dog is in the bed of a truck with its tongue out. +200018,A picture of a teddy bear on a stone. +306688,"A white pizza sliced in on a board along with two plates, utensils and pink napkins." +400516,An Asian street scene with many people on the street. +374974,A small child touches the trunk of an elephant standing behind an enclosure. +116466,a small child is getting his hair blow dried +238488,A woman is editing a video from her laptop using 2 large television screens. +65773,a man in a room watching television and a wooden table +123071,a person cutting a pizza with a knife +75216,A herd of cattle laying in the grass on the ground. +347422,bench located near the side of a ship +493868,"A plate with broccoli down the sides and some white, rolled up things in the middle." +565691,A zebra in a shed with a container next to it +480212,A smart phone sitting next to a canned soft drink and a pen on a wooden table. +491169,A motorcycle on a gravel area with people in the background. +11305,"A living area with tables, a sofa and multiple windows." +508962,A person dressed as jesus texts on his phone +289076,Skateboarder wearing all black going up a wooden ramp on his board. +572702,Cat squints through paneled window and metal bars. +261777,Someone doing tricks on their skis at a ski slope. +134001,A street sign standing on a corner in front of a building. +187348,A group picture of young men and women at an event at night. +522232,a person washing a parked motorcycle on a concrete road +581338,a closeup of a toothbrush on the table +249273,A red fire hydrant sitting on a sidewalk next to a street. +299553,A crowd of people gathered watching kites in the air +436470,a living room with couches chairs and a table +75051,A small white toilet sitting next to a metal trash can. +104796,A man standing in a field holding a small parachute. +477085,A small herd of sheep walking along a grass covered field. +162156,A narrow white room with a white mattress on the floor. +185993,A clock tower currently reads 1:46 near the buildings. +218886,Two pizzas sitting on top of a wooden cutting board. +451856,Two girls and a guy showing off their frisbees. +13132,A pair of men wearing waders stand in shallow water. +211675,A white vehicle is parked near a parking meter. +64736,a dougnut sitting on a plate next to a glass of orange juice +500878,A type of food with various types of meat. +491449,a man riding a wave with his surfboard with the wave covering him +11184,A computer workstation with a keyboard and multiple mice. +159269,some outdoor tables sitting next to some umbrellas +456552,A man riding a skateboard on top of a cement bench. +11887,A motorcycle with a trailer parked in a spot +232597,An old man wearing a red tie and a black vest. +317797,a girl in a white dress and a big yellow animal +244303,a few men play drums in a big celebration +476715,A white toilet sitting next to a large window. +144202,A pastry and a cup of coffee on a plate set by a laptop. +136772,a small bowl of fruit on a table +75552,A woman stooping down to catch a frisbee while wearing a dress +551596,"A big, fat bird has some crazy hair" +64599,A wooden table topped with white plates filled with food. +433904,Two cars stopped on a street near buildings and stop signs +437205,The young boy just finished eating the banana. +580540,Inside of a living room with a cat watching a tv. +134964,A cake with icing and cartoon cake toppers. +562818,A group of people in the snow with skis. +29727,a young boy is holding up some balloons +250137,A woman reaching in her purse while holding an umbrella. +243989,"Three men, one caring a skateboard, are wearing matching t-shirts. " +288075,Several benches stand by the side of a river. +228436,there is a bike that is parked on a small bridge +529096,A baby cow standing next to it's mother next to a pool of water. +562595,Two elephants lock their trucks together in the brush area. +57936,A picture of a young woman holding hands with a dog. +71826,a family sitting down at a meal and saying a prayer +330408,A bus at a traffic intersection in a city. +546298,a big bird stands on top of a wooden log +488539,Luggage on the curb waiting to be picked up. +66172,A woman holding up a wine glass in a dining room. +212074,A bathroom with white colored cabinets and toilet +41018,A large roasting pan in an oven filled with stew. +273914,A double deck tour bus riding down a street. +145512,A living room decorated for Halloween with a large window with closed blinds. +229946,a mother elephant and a baby elephant are walking into a pond +148724,a big train that is on a rail way +134870,A group of people walking down a sidewalk past a parking meter. +116295,A traffic signal flashing red at dusk with a building behind it. +287186,A white bus parked in front of a building. +560721,a couple of pizzas that are on some pans +84870,A large passenger jet flying through a cloudy sky. +70020,A woman in a short pink skirt holding a tennis racquet. +370165,A person on a motor bike doing a wheelie jump +383033,a couple of birds are standing on some twigs +64146,A scary man wears a hat made out of bananas. +285832,this living room has black leather couches and a wood coffee table +128324,A pod of elephants in the African plains +163831,A black and white cat sitting on top of a bed next to a cell phone. +514396,Photo of a cat stuck high up in a tree. +490044,A man is walking by a table with lots of oranges on it. +249532,a man pets a horse as others look on +307847,A colorful railroad train arriving at a station. +1353,some children are riding on a mini orange train +452461,A couple of trains traveling down the tracks. +556966,A young man riding a surf board on a very small wave. +504074,Women that are sitting outside on a patio area and smoking cigarettes. +5325,A lady holding an umbrella is walking with a lady in the wheel chair. +428116,A small white dog hanging its head out the side of a window. +561164,A street corner with a sign and windows on the building. +578967,A monorail is going down the track with people on it. +546667,Two people smile as they ride on an elephant. +484351,A classroom with kids and various men in suits. +374574,People stand in the drizzle with black and white umbrellas. +436387,The little girl is standing between the low shrub and the fire plug +548550,A bacon wrapped hotdog on a bun with onions +129548,Skiers going up and down a snowy mountain. +391688,A young man riding a rail down some stairs on a skateboard. +268670,A man sitting on a couch with a dog mug and remote control. +481313,A cat with its paw over its face lying next to a remote and a banana. +386227,Cows and sheep graze a snowy field on a cloudy day +215693,An umbrella is standing behind a red rectangular seat. +40881,A bowl of chicken and vegetables is shown. +473171,A picture of the sun setting in the trees. +151084,A man winding up to throw a frisbee in the park +44612,An older person standing next to a brown horse in a dirt field. +77063,A jockey riding a horse as it leaps into the air. +505132,Well decorated restroom with sink and chair for sitting. +361993,A man walking across a street near a traffic light. +300725,a pigeon perched on the arm of a bench +462364,A white toilet with a box of tissues on it's tank. +257838,A man putting an uncooked pizza pie in the oven. +368242,a person is flying a kite in a field +235751,The view of a kitchen refrigerator and checkered tile. +457054,A man driving a car across an airport runway. +304008,this man is stepping on one frisbee and catching another +104340,A man standing behind a bench with something in his hands. +442214,Two people eating powdered and chocolate doughnuts and coffee. +168698,A gray cat laying inside an opened suit case. +116413,An oven filled with three pizzas covered in cheese. +127192,"A white plate with pizza, chicken wings, an egg role, and ranch dressing." +473340,"A brown park bench next to signs reading ""wildwood"" and ""danger.""" +439224,"A white plate topped with fish, veggies and a roll" +190494,A horse-drawn carriage moves past a historical building. +438024,A city with a river in the middle with boats docked +204051,A man posing while holding food items in each hand. +398309,A man in the air with a skateboard doing a trick. +482978,an image of a subway bus going thru the subway station +227526,Oddly shaped homemade pizza about to be cut with pizza cutter +293841,A silver bus on street next to buildings. +406215,A woman and a little boy playing the Nintendo Wii. +445695,A hand holding a jelly filled donut over a table. +440554,A baseball player lower his glove for a ground ball. +402717,a close up of a plate with broccoli +60088,A chocolate donut and a cup of coffee. +282437,A herd of zebras standing together in a plain. +449274,A horse running on a dirt road in the open. +524187,A baseball player up to bat during a game. +316694,A small black dog on a leash next to a bike. +561335,Two row boats are laying upside down in the woods. +435012,Several people standing next to a wooden walkway. +374448,View of dining room of restaurant with cone lights overhead +357060,A bird is trying to find food in the water. +326317,a parking meter with some graffiti on it +346067,A yellow and black bird perched on top of a wooden branch. +282113,A fuzzy white goat is grazing in the grass +154931,Two people eating a variety of food together. +117170,A pair of pizza rolls for sale are on a plate. +499785,"A living room with a large white vase filled with red, purple and white flowers." +33044,a little child on little bitty skis in the snow +152482,A man holding a half eaten hot dog and a dollar. +321014,Black and white photo of a cat surrounded by kitchen knives +194398,A children's pig train travels down rail road tracks. +460286,A bed covered in creepy black blankets and pillow cases +417440,Three Zebras grazing on the grass in a field. +253408,two people sitting down at a table near wine glasses +440937,A person is browsing Facebook on their phone in a restaurant. +390569,"A road and traffic sign that reads ""motorcycles use caution.""" +206591,A man wearing a red hat and a red neck tie. +19253,A photo of a grassy hillside with several sheep grazing. +290839,A couple of men standing on a boat next to a small dog. +50034,Hand reaching for one of the doughnuts on the table. +565148,"A batter, catcher and umpire in a baseball game." +571518,All of the bunches of bananas are yellow and ripe. +180653,The young couple is enjoying their skiing trip. +293207,Several men are all trying to catch a Frisbee. +506723,A woman standing next to a black cow on a lush green field. +116696,a cake made with diapers for a baby shower +96923,A blue brush gliding through beautiful brown hair. +227433,A man carrying a suitcase and a bag at a train station. +476894,Two men standing in front of a white monster truck. +113095,A skateboarder rides his skateboard across a parking lot. +371879,A collaboration of people in different pictures doing things +303267,two horses in a field with a mountain in the background +143125,A lady and man on a park near the road +581422,Two men are sitting on a wooden crate with a cow next to them. +556064,A woman is getting ready to take a bite out of a large sandwich. +362828,A man that has a hat and a beard. +548337,A group of people sitting at tables eating pizza. +76648,A stop sign that has various stickers on it. +288062,A colorful toilet seat open in a toilet stall +121876,A polar bear stands over an orange disc in his enclosure. +492163,A silver and rusted colored fire hydrant sitting next to a crosswalk. +549299,A crowd of people walking down a street holding white umbrellas. +466958,A dirt road in the desert next to a blank yellow sign. +430856,A herd of sheep standing on top of a dirt field. +574241,A couple of kitten drinking water from a bowl. +396205,Two cows standing and grazing in an open pasture. +427639,a spotted dog sitting underneath the kitchen counter +247599,A pile of oranges sitting on top of a shelf. +361180,A brown bear walking with rocks in the background. +480140,people crossing a zebra crossing and vehicles standing +140076,A made up dinner table with a flower vase on the table. +378548,a cell phone and an SD card sitting on a table +127910,a white plate of food and a drink on the side +402798,a close up of the tail section of a large passenger airplane +556341,A man standing next to a zebra on a lawn. +425280,A city bus traveling down a rod next to a stadium. +167588,A large navy propeller plane is boarded on the tarmac +48795,a close up of a box wit ha sign on it on a bench +573928,A couple of cows standing on a field next to each other. +115243,A boy standing in the snow with skis +238013,"A man is playing tennis, the ball is coming toward him." +260150,A person sitting in front of a plate of pancakes. +240940,A cat sitting on the floor watching television. +57095,A red traffic light above a street in down town Los Angeles. +535523,A machine in a factory with a blue chair sitting next to it. +222831,The objects are placed carefully for a special effect on the viewer. +388350,A tennis player reaches overhead with her racket. +574141,A man on skis cross country skiing through a snowy trail. +497674,An older person sitting on a wooden bench. +576160,The interior of a public bathroom with multiple sinks. +81210,A young couple sharing an umbrella in pouring rain. +43712,A cat sits on top of a laptop keyboard +53916,Two zebra standing next to each other in a park. +28246,Blue tram in a city with people boarding +77596,A man and woman holding surfboards close to the sea +495546,A lady is on the beach hiding in her umbrella. +164325,A group of people with luggage waiting by a door +381021,a woman is on a poster hanging outside +166563,A large statue of an elephant is attached to a business sign. +186472,The nose of a high-speed train that is sitting on the tracks. +377385,A tennis player is lunging for the ball. +463670,A dog that is laying down next to a teddy bear. +529314,A small group on the bleachers has an umbrella. +15956,A woman exercising a brown horse in a riding ring. +359115,A man holding a Nintendo Wii controller in a living room with a blue leather couch. +487002,A teddy bear sitting on a laptop computer. +360700,A very old clock overlooking a pub sign. +421970,An expressway sign is informing of how much further to the next destination. +474344,A man holds a bat while a woman watches. +200047,Two guys sit on a couch watching TV. +370813,A skateboarder's airborne feet and skateboard near a curb +222228,A cat sitting on the back of a white chair in a living room. +134537,Center city street lit up by a series of light displays. +279265,Man next to chair walking from living room. +57508,A baby laying inside of an open suitcase. +505565,The birds are standing on the grass and dirt. +180261,Four surfers on a beach with their surfboards. +505788,A young boy holding a purple skateboard on a wooden floor +245173,A tall red bricked clock tower with three windows. +451532,a couple of people are standing on a snowy mountain +171360,A person on a motor bike on the street. +562897,A plate topped with orange slices and eating utensil. +277710,A person on skis going down a mountain slope. +211215,A man with a backpack eats a banana next to a street. +440964,A computer monitor is facing away from a keyboard and mouse and a coffee cup and blue ball also are sitting on a table. +190211,A dog catching a yellow frisbee in it's mouth. +498807,A young girl tries to keep her balance on a surfboard. +62518,Modern commuter train on a well maintained track +36861,A parking meter on the side of the street with a ring for attaching bicycles. +578591,A large jetliner sitting on top of an airport runway. +341874,A partially closed lap top computer sitting on a wooden desk. +555705,Two cats sitting on top of a pair of shoes. +399764,A man is leading a cow with a ribbon on its neck. +154584,The hikers make sure they are out of range of the black bear. +226984,A kitchen filled with appliances and wooden cabinets. +223335,A man riding a motorcycle on a racing track. +202387,A little baby sheep is standing next to a large brown sheep. +102928,A young child poses for recognition while wearing a tie. +31983,A girl is on her cell phone while waiting for her food order. +73093,there are many young boys that are playing baseball +312951,A brick and stone gothic-style tower with church steeple rises behind a modern glass building. +343076,A fluffy cat laying on an electronic device +112164,a baby giraffe sniffs an adult giraffe +347693,A couple of windows sitting inside of a room. +262987,Two triangular street signs on grass next to brick pathway. +399851,"A kitchen shelf holds an assortment of pots, pans, and utensils." +203705,A laptop computer on a white desk with various office work and two cups beside it. +474245,A group of people standing next to each other. +438269,There is a bird standing in the sand. +85750,A clock sits against a window in a white wall. +391415,There is a red car being towed on a truck +494800,A flower hanging from the side of a banana plant. +45136,A tennis player is holding his tennis racquet up. +560948,A bathroom with focus on a counter with dual sinks. +565693,there is a little boy dressed as santa sitting on the bench +76674,A wooden bench sitting in front of a park. +373132,A dog playing with a sheet in its mouth as the camera flashes light on its eyes. +154785,A group of young ladies kicking around a soccer ball. +90787,lots of people are on skies on the snow. +29346,A green cake that is shaped to be a train +576820,A line of people checking in their luggage at an airport. +65333,"Two open laptops on a desk pointing in different directions. +" +165401,A couple surfers catching waves in the water +302200,A parking meter sitting in the snow next to a parked car. +88252,Man yawning and lady looking the other way at a table with wine and food. +507473,A girl is taking a selfie while brushing her teeth. +535770,A lady sitting on a couch with a laptop. +460307,A group of people posing for a picture next to two brown horses. +314112,A beautiful woman in a white dress kissing a man while cutting a cake. +483836,a zebra waking through the herd across grass +541017,A skateboarder is about to go down a platform. +336654,Professional baseball player at bat at citi stadium. +10449,A group of three elephants are standing in the water. +356660,a man on a tennis court swinging a racket towards a ball +574402,A giraffe is standing in the grass near a stone wall. +467479,A couple of men wading through a body of water. +180167,A large black bear walks through the green terrain. +184386,A minimalist bedroom with low furniture and a quote on the wall. +201043,Many umbrellas are hanging from the ceiling in the umbrella shop. +519880,A man on a skateboard doing a trick. +492041,A man in white playing tennis as others watch +405306,this is a grey cat laying down on a bed +527040,A bunch of birds sitting in a bread basket. +39405,Spectators watching as competitors play a double tennis game. +440067,A cat is on a table with a cloth on it. +144065,A couple of people at a table with a cake. +63114,A man in a kilt stands before a white board. +477466,Two young men are standing and eating pizza together. +236016,"A bedroom with a dresser, tv, and a lamp in it." +50531,A couple of pans filled with bagels with holes in the middle of them. +61566,a man standing on a surfboard near the shore +186276,A woman who is using a blowdryer on a dummy head. +418761,A bunch of book bags and suitcases lay on the floor. +232088,A living room filled with furniture and decor. +28692,A man flying through while riding a skateboard. +524887,Two racing motorcycles and riders racing at a track. +170321,A large elephant crossing a narrow shallow river. +70480,A crowd watching baseball players at a game. +75948,A black bear climbing out of a pond +147904,A person flies a kite on a stormy day. +317898,Some chopped vegetables layed out on a pan +418563,A cat bites into a doughnut offered by a person's hand. +271143,A woman sitting laying on a bed dressed up like Marilyn Monroe. +45472,A table with some oranges and some cups. +231237,A vase with various flowers in it sitting on a tiled counter. +465074,A woman with a hat is using an umbrella. +322887,An orange road construction sign near a curve in the road. +499391,A stove with a frying pan and a teapot on it. +157593,A pair of people stand with a soccer ball in the middle of them. +490936,A row of parked motorcycles on the side of a street. +340179,A group of people sitting around a table having a meal. +563683,A bear in the woods standing on a log. +153217,a black cat standing in front of a motorcycle +203389,A group of young people riding motorcycles near a river. +177952,a man is wearing an eye patch in a room +490441,A man a young girl playing video games +530706,A man taking a photograph of himself in a security mirror. +516396,A big dark colored dog standing with his front paws on a skate board. +69536,A turkey that is cooking in a large roaster oven on the counter. +192153,A wooden swings hangs in a park next to a river. +401642,A metallic sink in a kitchen with a couple of dirty dishes. +580041,A city street filled with traffic and parking lights. +370448,A fire hydrant in front of an empty sidewalk. +204337,A man holding a tennis racquet on a tennis court. +151911,A blurry photo of a kitchen and a dining room. +148910,A train traveling down tracks near a small town. +417339,A man and a boy standing next to each other. +242946,A group of women sitting at a table with plates of food +373193,A girl is sitting by her dog on the stairs. +572678,An upscale living area containing white and glass furniture with brown accents. +530777,A tall brick clock tower sitting in a park. +298784,A man walking his bike past a wooden boat. +178982,A view of a sign that leads to Brooklyn and Queens. +492911,An elaborate metal vase holds a decorative bouquet of flowers. +292529,Man wearing a red shirt holding a racket and badge +117028,a person jumping a skate board in the air +301691,City buses are parked at the bus station +246106,A woman is unloading a bag in a large kitchen. +518916,Young soccer players on field with adult onlookers. +2157,A plate of finger foods next to a blue and raspberry topped cake. +250167,A man holding white surf board on the beach +254653,A tour bus is parked along a curb. +241102,A young boy holding a kite next to a body of water. +3742,Apple in and over-flowing a bowl on a windowsill with a rose in a vase. +227031,A man cutting a piece of cake on top of a table. +171717,A well lit area of the bathroom with white paintings. +214247,A couple of kids standing next to a truck. +398753,A view of a baseball game during the day. +367336,A large cathedral with a massive tower in front of a street. +468018,A person jumping up with a kite in their hands. +576015,A guy takes a picture of his car's rear view mirror. +126638,Three giraffes are eating food from the feeder. +350003,A firetruck is near a brown building off a side street that veers from a main road. +205451,A boy attempting to mount an elephant in a wooded area. +559656,An open truck of a car packed with luggage. +188192,"A cell phone, watch and a pen. " +289001,A person riding a buggy and horse down the street. +64332,a black plane is sitting on a runway +148272,An adorable cat attempts to hide in a purse to steal the persons identity. +77473,A woman holding a Nintendo Wii game controller. +553788,there is a woman laying in a bed using a lap top +433915,A double image of a comedian and a singer on the television screen. +557633,A couple of women standing next to each other. +465877,A chef in a kitchen standing next to a counter with jars and containers. +399822,A group of people riding skis on snow covered ground. +364493,A large bed sitting in a bedroom next to a window. +378614,A print ad for the Pizzeria La Crescia. +557447,A businessman sitting at a desk with a folder containing documents. +36238,A pot full of beef and broccoli stew. +469152,A teddy bear sticking out of a postal shipping box. +379378,an image of two zebras in the middle of the wilderness +132415,A white paper plate holding two pieces of pizza. +1573,A kitchen scene with an oven and a stove. +233825,"A den with a couch, table, book shelf and a television." +183127,a man is riding a surfboard at the beach +298382,a couple of horses with a man standing on top +547258,A young child is jumping high in the air. +356421,A skater performing a trick on a skateboard. +160941,A train traveling down train tracks surrounded by forest. +336427,a person on skies performing on an obstacle course +212257,Three giraffe standing near trees and one eating on a tree. +224664,A group of people flying kites on top of a sandy beach. +345497,A guinea pig in a cage with carrots and broccoli. +491508,A bench next to a tree in a park. +420825,A man holding a tennis racquet on a tennis court. +165174,Two men holding skis standing on a ski slope. +291932,A pair of shoes sits on a bench next to a door. +262594,People standing on a roadway next to a vintage motorcycle. +465275,A woman standing with a remote in her hand +478742,a bathroom with tiled floor and a circular window +289400,A large doughnut sign above a shop for doughnuts. +181488,A room filled with wooden furniture and white walls. +482319,A man and women who are looking at a small child. +435562,A young boy sitting on a seat on a bus. +466882,There are people playing a game of tennis. +300577,A woman in green shirt sitting next to plate of food. +1347,Electronic computer items displayed on wooden desk in office. +571279,A long bowl with variety of fruits laid out in it in front of a plate with a napkin. +335810,A plate is piled high of orange slices while a bunch of bananas sits next to it. +1138,"A living room has a couch, chair, fireplace, windows, and a potted plant." +182450,A toilet sitting next to a white sink under a mirror. +397069,A black and white shot of a toothbrush on the sink rim +65399,A red classic body truck with hood opened with engine showing. +563067,a large airplane flying over a building with people walking below +301827,A kitchen with a doorway leading to a laundry room. +405962,A cowboy on a horse in a rodeo show +498919,Fresh fruit cart containing oranges and pears on it +69568,A smiling old lady holds a pizza on a plate. +555012,The roll of toilet paper beside the toilet is empty. +84018,A photo of a skinny road between buildings. +329534,The pair of shoes is on the bathroom floor near the cabinet. +309958,flower arrangement in a basket with purple and blue flowers +549687,A pair of giraffe walking around in a zoo exhibit. +380493,a number of different doughnuts in a box +547630,A table that has a cup of coffee and a book set on it. +128920,A man riding a bike down a street next to a street sign. +86432,A baseball game in progress with a young player swinging the bat. +292792,A computer monitor sitting on top of a computer desk. +253767,a fence some baseball players and a sign +386193,A bird themed clock sitting inside of a green box. +280007,A large clock tower with an American flag flying from the top of it. +322261,A little boy sitting on top of a skateboard. +303611,A man in a restaurant admiring a gigantic pizza. +401991,A white dog laying next to a cat on a bed. +201207,A skateboarder performs a stunt jump off a concrete structure. +35891,Several people crossing at an intersection with traffic lights. +292384,Elephants stand together near a log in an enclosure. +264948,A woman returns a tennis ball during a tennis match. +112626,a metallic suit case in front of a couch +530571,a clock on the outside of a building saying it is a little after 5 o clock +265125,A woman holding a black umbrella as she stands behind a car. +61314,A red table holding a black laptop with red rope on it. +53015,A baby grabs for a bite of pizza that a man is eating. +458323,Young couple posing in front of a bush and tree. +444386,A man standing next to a woman inside of a donut shop. +47316,A pillow laying by a window in front of a green wall. +338304,A bunch of sheep make their way through the crowded city street. +149568,"The man plays on the beach with his two dogs, one of which is a black standard poodle." +222681,A family surrounding a little girl sitting at a table in front of a cake. +432488,A man riding skis down the side of a snow covered slope. +142324,A person on a motor bike on a street. +269918,a man and a cat lying on a couch +450391,A desktop computer monitor sitting on top of a desk next to a red bottle of water. +27611,Two men are moving and speaking in a park. +516430,A car with the hood and doors propped open on a field. +389532,silohette of a man against the whiteness of the sky surrounding him +576770,A man holding a piece of white paper in his fingers. +425933,"Street sign showing ""Pete Rose Way"" at an intersection." +356323,A man petting a brown dog while it's taking a bath. +570695,A white horse walking in the grass near trees. +526955,A girl standing in a garden biting into something. +299100,A colorful hot dog on a white dish with an iced beverage. +431067,The lounge chairs are waiting for the kite fliers to finish. +408818,A red caboose with a man hanging off the back of it. +196574,A woman is on a surf board surfing a wave. +469577,A white horse standing next to a stone wall. +322285,A public bus stopping on a street corner +263644,The antique bed has elaborate wood decoration on the frame.. +265153,A very colorful painting on an elephant statue +452359,A man is standing in a suit with his head cocked to the side. +448786,a train that is on a train track +513580,A motorcycle driving by a red and white biplane. +139440,Six people in a boat rowing on a body of water. +179850,A man in a blue shirt holds a pair of garden shears open. +526256,Large brick building with towers and clocks in daytime. +151537,there is a small dog that is looking threw the glass +51008,A cat looking like it is using a laptop +226848,a person riding a skateboard at a skate park +523322,A computer desk has some shoes under it. +89150,A group of people standing around a picnic table. +247806,A clock tower is part of an old building. +410533,a cat that is sitting in a sink +179558,Two giraffes standing together in an open field zoo den +346214,Several kites flying on a windy day at the beach. +552221,a large pizza is on a large white plate +53893,Three zebras eating hay from a trough at the zoo. +14820,A black and white image of quite a few Zebras. +309678,A person is holding a tomato above a tray. +557107,A beautiful woman laying on top of a bed in lingerie. +262642,A man in a black shirt eating a sandwich +296381,A woman bent over talking on a cell phone. +38865,Two white plates topped with meat and veggies next to bottles. +99615,a young boy standing in front of a counter with dougnuts +244468,an image of a cat looking out the window +435742,A train on a track near a bridge. +80130,some people walking on a platform between two trains +552636,A group of people walking down a sidewalk near a bus. +349006,A person riding a skateboard down a street lined with parked cars +99645,A cat next to a television in a room. +293125,A person wearing skis bent over looking through a backpack. +525732,A man in a wetsuit is holding up a surfboard. +66238,A person wearing a snowboard jumping in the air over snow. +483469,A small green bridge over a quiet looking road. +91844,"Picture of an exterior place that looks wonderful. +" +543231,"A close-up shot of a girl, sitting down playing the Wii. " +413497,A large clock mounted on the wall of a stone building +298261,a pink truck with a wine bottle on the side +545093,Black and white photo of a trolley car. +363559,A plate has bits of brown rice and broccoli. +377113,A person on some skis in the water. +474920,A duck walking in the dry grass near a lake. +201918,A black cat is scared by a large dog. +477305,some people are running on a road and a green and white sign +22801,A pretty lady wearing sunglasses holding a white frisbee. +415990,A bunch of cows that are standing in the grass. +516804,A bus stop sign with a large building in the background. +4980,A woman in white and black dress with suitcase on train. +284762,A traffic light sitting next to a street sign. +292155,A large open multi- colored umbrella and tree branches. +256713,"Bathroom with tub, toilet, sink, mirror and window." +77924,a car is sitting at a red light in traffic +56651,A woman handing another woman a birthday cake filled with candles. +382374,A herd of elephant with a calf and adult elephants. +143998,A group of carrots with an organically grown strip tag around them. +87399,A clock on display on a shelf in front of a mirror. +437738,The signs are clearly visible for all of us to see. +124390,Two giraffes standing outdoors near a brick building. +33561,A herd of cattle is grazing through the field beside houses. +204186,Racers riding four wheelers while a crowd watches. +301867,THERE ARE WOMEN THAT ARE LAUGHING UNDER THE UMBRELLA +519706,An old woman in a flowered dress is holding a plate of bananas. +380979,The man is driving the fire engine in the parade. +127761,A rowboat set next to a dock in a river. +162130,A wooden bench is sitting next to a grassy field. +490475,A young bear cub perched between two tree branches +381599,Five jumbo jets are parked at a large airport. +80737,A parked black motorcycle in front of a brown house. +163348,A desk with a small white computer set up on it. +284421,A young male jumping with his skate board. +373789,A plate holding a slice of bread with mayonnaise and chicken tenders and another piece of bread with nothing. +344154,A grey cat rest next to a laptop with his paw on the keyboard. +186036,a person on the back of a parked truck +500062,A person jumping as they swing at a incoming tennis ball. +419978,A group of bikers riding down the road together. +40083,A couple of people sitting under an umbrella. +560281,A polar bear stands a small rock in the middle of surrounding water. +277422,A man holding a surfboard while wearing a wet suit. +370709,A horse in the water next to the birds +23954,A pair of zebra's eating grass on a field with flamingos in the background. +132317,A bug sitting on the side of a laptop computer. +102589,Five doughnuts are left in the open box. +374677,A brown vase filled with two purple flowers. +196212,A man flying through the air while riding skis. +385770,A coffee table that has a map on it. +137156,A yellow taxi cab driving down a street near a bridge. +432752,a couple of dogs stand on a beach next to some water +243852,A man wearing a white t shirt and a neck tie. +38321,"A cloudy sky , red traffic lights and power lines" +348483,An old wooden bench sitting under a tree on a field. +28885,People stroller through the walkway near a giraffe. +551403,A lighted clock suspended from a ceiling in a dark area. +275448,A man that is on a board in the water. +296098,A tall clock tower with a clock on each of it's sides. +400803,A man standing on top of an orange boat on a river. +194188,An elephant is walking around his exhibit at the zoo +493724,Three ladies using music instruments in a living room. +198717,"A man advises us to hush, about to scare his brother" +224777,a large elephant that is standing next to some trees +581081,Many small boats docked in the water together. +364980,A person holding several carrots in their hand. +453649,"A zebra standing around in a grassy area, with another behind it." +383066,A woman sitting at a table while holding a cell phone. +470121,Two plates that have different types of food on it near a bottle. +511622,A woman in a scarf cooks using a huge ladel +317763,A view of a close up of a computer. +237060,A huge airplane looks small against a wide open concrete area. +204448,"A kitchen complete with a microwave, sink, and dishwasher." +563951,A male tennis player dressed in white making a serve. +397863,Adult and juvenile giraffes standing and lying on a dirt clearing. +48708,A kitchen has a dining table with a lime green chair. +208663,A meal of vegetables and seafood mixed together. +298051,A group of people are gathered to listen to the music outside. +108541,A sign explains the toll on a toll road. +12959,A large clock tower with a clock on it's face. +466531,A small bird is sitting on a green plant leave. +132121,A large hotel room with a television on the wall +437423,An intersection with traffic lights hanging above it. +337065,"Meat, potatoes, peppers, and a carrot are sitting on a plate." +490529,A woman in pink looking at her phone +122869,A large kitchen with white cabinets and two tables. +244760,A white and black horse standing next to a wooden fence in a field. +574675,A man sitting at a table with two laptops on it. +373705,"A number of young people are enjoying themselves around a fountain, not far from a fire hydrant." +547136,An airplane having maintenance done on the tarmac. +434657,She is well balanced on her new surfboard. +527528,people flying kites on a bright sunny day +371216,A person that is drinking some beer on a table. +375490,A kid in wetsuit on surfboard in the ocean. +245996,A clean bathroom is seen in this image. +15017,A tennis ball is coming toward a man +552075,A hipster emo woman with purple hair holding up a camera +365886,A person using a photo filter holding a samsung cell phone. +125572,a woman riding a bike in the street and a building with a clock in the background +395283,A man standing on a beach with a parachute in the background. +107177,A mama and a baby duck are swimming in the water. +423742,A small laptop with a cat laying behind the screen. +303685,A street vendor with ties hanging from a rod +530765,A woman with a baby wrapped up and a dog near the water. +184405,A man is flying a kite in a field +572081,a tennis player swinging a racket at a ball +259854,Two street signs are sitting on top of the pole +450674,A pair of racing motorcycles coming to a start line. +533962,A man standing in the snow outside a small wooden cabin putting a spoon in his mouth +198921,Three zebras in grassy area next to shrubbery. +285120,An airplane is parked on a runway and someone is standing nearby. +322125,A display window with glasses that look like cup cakes. +426686,An open field with cows grazing and a lake in the background. +102503,A yellow bedroom with with a bedspread that is half and half. +188819,There is a broken samsung flip phone on a table +176078,some white sheep and a black and white dog and grass +74030,a person and a dog in a fake train +520524,A bicycle and a motorcycle parked near a door on a narrow street. +11300,The little boy sits on the ground next to the skateboard. +503255,The bench at the tree offers a respite and a scenic autumnal view of a grand valley +49756,A horse with a saddle tied up to a fence. +443450,underside of a plane flying through a cloudy sky +59009,A train is traveling down the railroad tracks. +356612,Several black bulls are walking down the street. +226291,a black dog is holding a fed and green frisbee +231568,Four men standing next to each other posing for a picture. +304815,A computer mouse and keyboard sitting next to a monitor. +266379,The brown and white cat lays down on the washing machine near a pair of scissors. +44800,Makeshift skate park set up on a blocked off city street +5123,Group of pedestrians walking in front of a domestic house. +178746,Darth Vader holding a plastic light saber in an airport while a kid stands in the background with a real lightsaber. +515444,A man eating a hotdog in a crowded stadium. +423508,"two benches, a small statue and some street signs stand between a street curb and the brick facade of a large building. " +365207,rear view mirror reflection showing a dog in the back seat +578467,A man riding an elephant through a forest filled with trees. +430380,A Nokia cell phone is sitting atop the box it came in. +438623,Two young boys sit with a man in the grass as they eat hot dogs. +348496,A group of small boats floating down a river. +440060,A woman wearing a hat sitting on a park bench. +478374,A small herd of elephants walking together through a watering hole. +503278,A man and woman dancing on top of a dance floor. +53484,A red painted wall is against a television. +485916,A red carpet in a bathroom with white fixtures +547440,A tall clock tower made out of red bricks. +407528,Fuzzy palm tree and clock town on wide town street. +298628,Three cows standing on a lush green field. +62805,Street sign on the corner of Maciel Ln and Wonder Stump Rd. +571718,A man standing in front of a fruit stand containing several bunches of bananas. +68490,Two horses stand in the desert while small desert hills stand in the background. +572495,"The compact workspace is well-furnished, neat and organized." +361660,Paper towels that are sitting on top of a refrigerator. +143926,A young woman is attempting to fly a kite +455981,A white toilet that does not have it's seat down. +100283,A stop sign on the corner in front of a row of stores. +566524,A couple of people that are standing near a train. +72737,a man is doing a trick on a skateboard +360698,a commercial plane is on the airport runway +467477,Young boy riding large breaking wave in open ocean. +21498,An adorable little blonde girl standing on top of a box. +501824,A passenger train that is stopped at the station for loading of passengers. +484754,An image of a car in a side mirror. +530439,a man sitting at a table using a laptop computer. +449454,A smiling man holding up a small pizza with toppings. +500940,People are sailing on a small boat in the water. +125645,A group of buses sitting in a rural area. +550527,A bathroom with an odd shaped toilet next to a shower. +443602,two people eating food off of a paper plate +155035,The three giraffe stand next to a pile of logs. +120388,A survival kit containing a variety of items. +3501,"A bowl with rice, broccoli and a purple relish." +459662,Two little girls holding up chocolate and vanilla donuts. +297372,A small brown dog wearing a leash next to a bike. +507663,People are on grass playing some sort of game. +98636,A large white bird standing next to a large body of water. +444927,A man falling down while looking at a soccer ball. +558114,Basketball players walking on court with coach in wearing dark suit. +49567,three luggage bags piled up on top of one another +19491,a male in a brown and white shirt eating a sandwich +170852,a man riding a wave on top of a surfboard. +64121,A man standing in front of a refrigerator freezer. +264375,Several people standing together with a red stoplight behind them. +221555,A tennis player uses all of his energy to connect with the ball. +298172,A plate that has different types of food on it. +9729,"Two people standing next to each other, one holding a phone and the other pointing at it. " +528318,The living room has windows and a couch and loveseat. +439654,A group of teddy bears sitting on top of a bunk bed. +92202,a cat playing with a stuffed toy on the carpet +280242,A room with a bed and a TV mounted to a wall. +417159,A time clock with a white hard hat on shelf. +467956,food on a plate with broccoli sitting on a table +161820,A large bunch of ripening banana type fruit. +436722,A large two layer cake elaborately decorated with a train.. +478406,A tall giraffe standing next to a bunch of trees. +88092,A young man holding a game controller in his hands. +201326,A man standing on a tennis court holding a racquet. +109824,A bunch of donuts sitting on top of metal rack covered in glaze. +283005,Two men walk towards the steps while one carries a surfboard. +204098,An old train moving on a train track. +207400,"A room filled with a tub, sink and toilet." +288923,A bicycle chained to a pole on a snowy day +530207,A woman holding onto a pink bag of luggage. +302990,A person with a surfboard in a room. +153834,Cows are grazing in the countryside with a bridge in the background. +325022,A passenger jetliner sitting on top of a tarmac at an airport. +262014,A cat looks at the camera from a window sill +132059,A yellow tray topped with a cup of coffee and a donut. +164983,A brown and black dog laying on a bed. +112093,An olden styled Good Humor ice cream truck. +523212,A combination living room/dining room with a large cream colored sofa and two brown ottomans. +127337,A living room with a couch next to a table and a lamp. +474464,a plate with a piece of chocolate cake and vanilla ice cream +134215,there is a all black motorcycle that is parked on the street +460621,A close up of a bathtub in a bathroom +237487,A person standing at the plate in mid swing of a bat +531136,Two parrots sitting on top of a tree beneath a blue sky. +10463,A woman with red hair sitting on a bench. +96034,A picture of a teddy bear with a map behind it. +96983,A cat sitting on a wooden bench outside. +315672,Two airliners on the snowy runway of an airport +546702,A fat gray tiger cat laying on top of bed up against a pillow. +142564,Two kids are smiling playing in a bathtub. +87875,"Their is a hadron and their in this lot," +30992,there is a male baseball player that is at bat at a game +50521,this bathroom has a green tub and a toilet chair +415613,A man making a sandwich on a lunch truck. +553669,"People sitting on benches in the park, and traffic in the street" +383322,A man and woman riding a motor scooter. +99342,a checkers board sits in a jail cell +323682,A man stands next to a few pieces of luggage. +496383,A man and woman sitting on a wooden bench together. +120340,a man putting his bike on a rack in front of the bus +402662,A skateboarder who is jumping down a flight of stairs +150284,A man stands beside his motorcycle in front of a store. +403885,A scene featuring a shepard woman is juxtaposed colorful shapes +14306,A laptop computer sitting on top of a table. +92795,a cat is sitting on a wooden bench outside +182736,A large clock tower stands in the middle of an outside event. +412531,a single parking meter sitting next to some plants and a tree +512442,A woman holding a bowl in her hand standing next to a baby elephant. +9420,A group of men and boys in suits and ties. +189634,This is an open box containing four cucumbers. +245915,A herd of elephants splashing and playing in a river. +209917,A woman standing on a tennis court holding a rocket. +577877,Several guys in a living room watching a video game. +138488,A man riding a white scooter down a street with a woman on the back. +540820,Two wash basins side-by-side next to a toilet and a bidet. +519361,Many emergency vehicles are parked on a road. +567683,Some motorcyclists getting off their street bikes at a gathering +19247,A man kite boarding over a large body of water. +148055,A brown cow stands at the edge of a roadway. +5418,A couple of giraffe standing next to a forest. +6614,A black and white image of a lot of round objects. +499104,two polar bears playing with each other +199339,"A street sign with the name of two streets and a stop sign, and parked cars and buildings in the distance." +147128,"A man wearing a black jacket, tie and sunglasses." +218026,A brown and black horse in the middle of the city eating grass. +292493,some people a red bench a slide and snow +62500,A park bench sitting in the middle of a forest. +560332,A suitcase sitting on a bench in front of a bed. +334884,A white bowl filled with vegetables and meat. +224724,There is a woman standing on a city street. +478356,A woman holding a sign sitting on top of a truck. +451772,A yellow bird sitting on top of a tree on a branch. +160421,"A bowl of food with meat in a sauce, broccoli and cucumbers. " +579091,A plate of broccoli and meat on a table. +495993,Several cars driving towards a public market. +186422,a brown bear is walking away from a river +117441,Straight and round silver objects on top of each other. +537124,A man waiting on the ball playing tennis. +427077,A man stands poised with a baseball bat. +431827,Hand holding items for the movie Twilight Eclipse. +84701,A stack of suitcases rest beside a couch. +49633,a white bird sitting on a grassy hill +219984,A woman flying a kite in the blue sky. +474502,A large white polar bear standing on a icy pool. +461156,A small dog sitting on a wooden chair. +116358,View of a baseball game in action from behind home plate. +579405,Four hot dogs on a grill next to some hot dog buns. +409211,A man standing on a clay tennis court with a racquet. +385873,Three pizzas sitting next to each other in boxes. +484331,A young boy with baseball bat raised waiting for the ball +293888,A man with a suit and tie with a headset on. +338552,A couple of people riding snowboards down a snow covered slope. +193498,various items from the bag are on the table +570624,A group of people with umbrellas crossing a street in cold weather. +309317,there is a woman posing with a very large sandwich +415015,A glass vase on white tiled window sill. +255536,A row of various types of chairs and umbrella with a bridge in the background. +361992,Two young women digging in to a tin pan of food in a barn +139518,A vendor covered by a tent near a van. +431185,A woman in tight pants holding a Wii game controller. +334006,a large blue truck is driving down the street +26560,A woman on a surfboard riding a wave. +157112,A street intersection in an Asian country during the day +345376,A man walks across a base ball field. +212292,A keyboard sits on top of the keyboard of an open laptop computer. +32597,A cat sits in a living room with a television in the background. +113040,"TRAY WITH HALF EATEN CAKE, COFFEE, AND OTHER DISHES" +316041,A big brown cow with horns standing in a big grassy field +268259,A metal gear with chain on a wheel. +28719,A group of people sitting at a table in a room. +58029,a bathroom with a big mirror above the sink +149406,An old motorcycle rests near a rundown building. +90003,Two dogs who are playing with a Frisbee. +474246,an image of two bears that are next to a tree +188948,there are three men playing a video game together +166868,many cows in a field of green grass behind a fence +21686,people at a restaurant with a plate with cheese cake +249404,A road sign is next to a red traffic light. +507352,A bathroom with a toilet and a toilet paper dispenser. +22213,A group of people standing on a grass covered shore. +263299,Large black train system surrounded by trees and nature. +376358,a brown cow is laying in a pin +277015,A coffee cup sitting on a wooden table next to a computer keyboard and mouse. +546463,A full view of a kitchen with stove and counters. +202231,A man holding up holding an object inside of a plastic case. +25358,A group of people are watching boys play soccer. +117352,A beautiful woman and a man standing in front of a pile of berries. +118906,A woman with a baby being held on a skateboard +337403,Some pans and kitchen spoons hang from hooks on a ceiling rack. +271560,A man sitting on a bench in a room. +448694,a trio of men playing with a frisbee on an open field +88517,A light that is shining on a sign. +91766,A carton of brown eggs sits amid fresh produce +233266,A man in a wetsuit rides a wave in the ocean +480652,These suitcases are sitting next to a chair. +32331,A couple of people with snowboards in the snow. +190722,Computer desk with destop and open mac laptop +566596,A little boy sitting on top of a teddy bear. +129587,a large elephant that is standing up eating +196280,A picture of a boy looking into a pot. +478120,An ANA airplane as it is taking off. +300814,Two adults playing a game in a arena. +335833,a very big building with a mounted clock +44825,In what country do they allow bicycles on a passenger train? +269254,People on a motorcycle holding a wrapped surfboard. +381213,No image is being shown on the page right now. +510329,A tourist unfolds an umbrella near ancient ruins. +304596,A man riding a skateboard on the side of a ramp. +579158,a red and blue plan on the runway getting ready to get passengers +526645,A giraffe walking through a tree filled forest. +108679,A bicycle parked on top of a bed in a bedroom. +450081,A young woman pets and kisses a giraffe. +297910,A big city full of people and many animals too. +106739,A man and child near a short stop sign. +304341,A blue bench sitting under a clock mounted to a wall. +493695,A city street filled with traffic at night. +388374,A beach lined with colorful umbrellas under palm trees. +108425,A man standing on his front lawn throwing a Frisbee. +255718,A rusty old fire hydrant on an inner city street +229468,There is a baseball player about to hit the ball +461588,A man riding a motorcycle across a sandy beach. +296825,"A yellow and red van that reads "" Foot Stinks "" on it's right passenger door." +200284,A surfer lying on his surfboard as a wave approaches from behind. +129502,A man standing on a snow covered mountain in a heavy jacket. +396821,A person is riding a wave on a surfboard. +481318,a little black dog sitting on the rug +241934,A large assortment of donuts with different colored toppings +311510,A blue car in gravel parking lot next to bushes and street signs. +536321,An adorable caleco cat sitting underneath a bicycle. +360876,Two men on a tennis court shaking hands. +308430,Someone is cooking a vegtable stir fry for dinner +4972,A BLACK AND WHITE PIC OF A MAN AND A HORSE +262404,A group of children surrounding a table decorating cake. +265574,A bathroom with a white bathtub next to a toilet. +454388,The computer has been placed on a huge shelf full of movies. +232121,A laptop computer with a beer sitting next to it on a table. +228450,A black and white image of a laptop beside a coffee mug. +478724,"A man in a blue shirt with a red beard, laughing. " +32082,Two zebras grazing on some grass with some shrubbery around them. +371330,A woman standing on the outside of an airplane. +577995,A bed with two books and pillows on it. +126657,Several motorcycles riding down the road in formation. +350099,this man is riding a board near a field +342060,The suitcases are on the pavement next to the brown bench. +293591,A couple of rhino standing next to a tree. +269606,the animals are walking and grazing on the grass +68291,A herd of sheep standing below very tall buildings. +158982,A whit toilet sitting under a picture in a frame. +456968,A man holding up a smart phone with a camera. +343187,A double decker bus going along a road with old buildings in the background. +277717,A man standing near a bridge going over water. +330037,Three dogs of different colors laying on top of the sofa. +57387,a crowd watching a girl ready to hit the tennis ball +121506,A wooden table with an inverted umbrella on it. +197388,A team of skiers rides intently across the snow. +289633,A man taking his own temperature with a glass thermometer. +129547,A red fire hydrant on a city street sidewalk. +278747,A subway station above groundtrain with a small green building. +557517,A person that is about to fly a kite. +340841,The cat is sitting on the mans knee. +490153,Intersection and lights for Queen St and Bay St. +283928,Mouse on a couch looking at broccoli dubiously. +332845,The man is sitting next to his bed on the laptop. +320203,a couple of green signs above a red stop sign +171740,A couch in a living room with walls lined with a bookcase and pictures. +67994,A clock tower with multiple sides in a snowy area. +137301,"A desk with a laptop, monitor, mouse and a hand bag." +456053,A silver and yellow train pulling into a train station. +460035,A couple of soldiers standing next to a little girl. +213338,A clock outside of a building that runs backwards. +194381,There is a elephant that is standing besides a lake or river +342302,a man on a skating board with his hands up +206112,A bunch of suitcases and bags by a wall. +19888,A bed sitting on a hard wood floor. +110997,A flock of birds flies in the sky. +158583,A man riding a skateboard over some steps. +151965,a couple of people are standing out in the snow +9914,"A plate of food which includes onions, tomato, lettuce, sauce, fries, and a sandwich." +66717,A man is standing in a train in a train station. +113722,A group of surfers rinse their boards before leaving the beach. +464274,A man dressed in green talking on a cell phone. +18833,A cat sleeping with its head resting on a sneaker. +185989,An announcer with a microphone talking to a crowd. +280930,there is a young girl putting food in to a oven +225177,A yellow bus is going under a bridge +521359,Small bathroom with toilet and sink connected to each other. +49810,A little cat looking at itself in a mirror. +301402,A young person sitting on a chair near a table. +130062,A man who is on a surfboard in a river. +86220,A car and a public transit vehicle on a road. +342271,A family riding on the back of raft. +195896,A baseball player holding a bat over a base. +522081,A vintage train carrying cars rides on railroad tracks. +448703,A red semi truck parked next to a tree. +249668,A seagull on the waters edge of a beach holding a fish in it's mouth. +158945,A PICTURE OF A ELEPHANT WITH A CART ON ITS BACK +201775,A bathroom with two urinals and a sink. +579635,A man surfing in the ocean with a sail boat behind him. +3983,A group of people next to a bus with skis and backpacks. +445982,A polar bear standing near a tree on grass +472881,Several trains riding on different tracks near water. +53665,A man riding a kiteboard on top of the ocean. +264909,Mountain sheep standing in outdoor natural setting area. +21746,A woman hitting a tennis ball on the tennis court +340478,A brown and white horse crossing the street +177489,Two people that are sitting on a table. +553747,A small black sign on the refrigerator door +453819,A couple of boats parked near a dock on the side of a small building. +311928,A young boy swinging a baseball bat towards a ball. +458560,A good stands in the grass next to the water. +398742,A hefty rugby player in red shirt and black shorts in the air. +120428,A girl with a drink sitting on the toilet. +556653,A picture of a train yard for passenger trains. +512667,Two people are standing fairly close in a kitchen. +440400,A woman is standing on the sidewalk with an umbrella. +217219,A made up bed with a pile of newspapers on it. +372706,There are some cars and trucks parked at a bus depot +524844,A young man engaged in advanced skateboarding tricks. +522566,A very short van is parked with a surfboard leaning against it. +116023,A tennis player holding a racket and ball +104421,A dog looking up at a frisbee while standing in a field. +269721,A man standing in a field with a baseball. +445908,A woman hitting a tennis ball on a tennis court during a match. +456931,Many yellow and green lemons are stacked in baskets. +365047,A train moving along a track near a field. +271461,a cast iron dish filled with rice and brocolli +465715,A beach covered in waves and drift wood. +164389,A group of men riding on the back of a boat. +325327,White cow standing alone on a busy city street. +377091,The person has a sandwich and salad on the plate +225658,Man in suit with red white and blue tie. +360716,The skiing woman is jumping in the air. +299271,A herd of cattle grazes in a field near a tree. +428454,A Man skis using a sail in open snow-packed field. +205514,The large living room has been decorated in modern furnishings. +392004,A teapot can be used a vase for fresh flowers. +424641,The people are riding bicycles in the bicycle lane of the road. +63953,Young teenage boy on his skateboard on the street with people on the curb. +323598,A large modern bathroom features an oversize tub and walk-in shower. +86036,A couple of beautiful topless women standing next to each other. +495031,a man with his arm up as he gets ready to serve the ball +394240,A row of motorcycles parked in front of a building. +490711,A white refrigerator freezer sitting inside of a kitchen. +510827,Two women eating in an elegant restaurant. +486122,A steel fridge in a kitchen near a microwave +293244,A GREEN AND BROWN SUITCASE LYING UP ON A LEDGE +198826,A person pouring a glass of wine for a woman. +61660,a business truck with graffiti written on it +478009,"A bathroom with a toilet, tub, mirror and shower curtain. " +445248,a group of little elephants standing close to each other +212288,A city worker repairing a traffic light over a street. +423944,Two headless mannequins display fashionable clothing in front of a pink background. +33979,Several people standing in the sand under kites. +333182,A young man with a tie stands next to a graffiti wall. +130699,"Several men are playing sports on a field near some trees, wall, bus, and several buildings in the background." +110626,A stop sign located at a cross section in a rural area. +121904,A kitchen that has many things in the sink and on the counter. +498381,A parrot flying through a tree filled forest. +54329,A professional baseball player getting ready to throw the ball +286327,A man herding sheep into an open pen. +224117,A ship filled with luggage next to a life saver floating in water. +26445,"A counter, sink, and cabinets in a kitchen" +131539,a number of people riding skis on a snowy surface +477194,A small sandwich with lettuce and tomato on it. +576136,A brown dog eating food from a dog bowl. +327532,Two men playing tennis in front of a large crowd of people. +35279,there is a tennis racket and a laptop on the floor +199389,A fire hydrant painted so that it has a face on it. +207196,A kitchen with tile back splash and stainless steel appliances. +19916,Sliced apple in a bowl covered in cinnamon. +470746,"A place with couches, chairs, tables, and bookshelves." +139260,There is a banana split with whipped cream and a cherry. +239395,An old motorcycle parked on the side street with an umbrella over it. +422176,A vase filled with flowers and greens on a shelf. +14821,"A back pack by itself next to a backpack with beer, fruit and snacks." +510154,A gray elephant stands up to his thighs in a river. +139097,A sink under a large mirror in a bathroom. +333014,a bunch of people playing soccer in a field +130030,A kitchen table with two chairs against a wall. +178616,A large dog holding a Frisbee in it's mouth on grassy field. +8749,A pizza sitting on a pizza pan on top of a wooden table. +171819,Two surfers at the beach standing at the coastline. +74617,Two young people playing a game of tennis. +318415,An old brick building along side of a river +440045,three children sitting on a bench near one another +548336,THIS IS A PHOTO OF TWO HAPPY CHILDREN SITTING AT THE TABLE +240950,A group of people sitting at tables eating food. +259382,Giraffe inside rock walls standing and bowing its head. +356125,A elephant reaching out with some thing with its nose. +111590,A bird flying over a field with lots of grass. +503219,two cows in a grass field together behind a fence +366782,A man is standing on a dock near water with a passenger boat going by large buildings in the background. +42267,A baby elephant is nursing while another elephant eats hay. +176381,A person that is riding a surfboard under a wave. +144305,a laptop sitting on a big blue box +123415,An elephant standing next to a smaller elephant. +256367,there is a long train coming up the tracks +343401,A couple of people riding on the back of a horse carriage. +495064,A lady walks a child towards a bus parked in a harbor. +360902,A sandwich with meat next to a pickle and a cup of potatoes. +213361,A seagull drinks water from a pool of water. +146805,Laptop and desktop computers in use on a cluttered desk. +544639,a black and white zebra some rocks and plants +388212,A tall giraffe is standing by a fence. +254990,A business man is leaning against a window looking at his cell phone. +237735,A sleek gray plane flying through a cloudy sky. +506220,A bathroom filled with a bath tub and his and her sinks. +520871,A pizza with burned edges is sitting on the table. +469803,A red white and blue fire hydrant on the sidewalk. +108303,Iced carrot cake on a table with odd type of cola. +301380,A herd of sheep in a rural landscape with trees and a pond in the background. +482134,Yellow and red floral arrangement displayed in bathroom. +236161,A shiny antique bus coming though a gate by a brick building +482062,Three zebras are running up a grassy hill +202656,Sheep are gathered around a lone tree on the hill +76873,Two legs with work boots on poking out of a truck window. +221554,An all white room with cloths hanging and flowers +262460,Neatly folded dress shirts and a tie sit on top of a counter. +166948,two people standing near one another playing nintendo wii +231617,"A red and yellow bus sits on the back of a flatbed truck, driving down the highway." +14271,Two giraffes are walking and standing in the open field +457334,A team of baseball players celebrate during a game. +349678,A large tower with a clock on it advertising transportation via train. +18771,A river with lots of trees on the river banks and a bridge in the middle of the river. +342397,Skier performing jump on high altitude ski slope. +161609,A brown dog sitting in a mans back pack. +156474,A desktop computer sitting on top of a wooden desk. +452618,A woman sitting on a plane with plates of food. +440299,A white toilet in a bathroom next to toilet paper. +394941,A man riding a paddle board in the middle of a lake. +209655,A bathroom with a white bath tub and a sink. +497801,Surfers on the beach changing their wet suits. +223374,A black microwave oven with toys sitting on top of it. +572546,A telephone pole with street signs posted on it. +565186,a blue and silver truck with logs trees and wires +242287,A bicycle that is resting upon the wall of a building. +12979,A man does a skateboard trick in the air. +506569,A skier dressed in red on the slopes during a snow storm. +504932,A meal of broccoli and meat is on a plate. +266400,a row of motorcycles parked on a city street +231471,several ducks in front of a placid river +256343,A woman making some food inside her kitchen. +39512,A couple of men standing in a living room holding Nintendo Wii game controllers. +167781,A man washing a black elephant at a zoo. +326726,A person holding a Jesus sign in a city. +390689,A man with a yellow helmet riding a boogie board down a slide +64425,Traffic signals and sign on pole at roadway intersection. +70945,A man cutting a kids hair with scissors. +343803,A man has a frisbee in his hand and is standing up. +549629,A black bear sitting on the grass beneath a tree +514787,A couple of photos of a group of people playing with interactive a gaming unit.. +232489,A paper plate that has two pieces of pizza on it. +374966,Several skateboarders at a skateboard park skateboarding while others watch. +534213,Many boats tied to the edge of the bank. +387506,A sandy beach covered in umbrellas near the ocean. +147729,People gathered taking pictures with a cell phone. +3326,A couple paddling in a canoe on a river +316596,A chocolate cake with white frosting topped with chocolate cookies. +363181,A man is holding a pillow up as shade from the sun. +391225,A man riding a wave on top of a surfboard. +561337,A man on a surfboard riding a wave in swimming trunks. +330449,A famers market filled with lots of fresh produce. +53677,A man standing next to a small airplane with two dogs. +20553,"A teddy bear laying on top of a bed next to a table with beers. + +" +396324,A sandwich and sauce is placed on a plate at the dinner table. +559483,A man holding a skateboard while wearing a yellow shirt. +202343,a man holding some kind of phone hin his hand +337305,A man on a snowboard stands and smiles. +2759,Two bowls filled with broccoli soup on top of a table. +216254,a stop sign hanging from a small shack +302298,A large and small giraffe standing in a grassy field. +573791,A coffee cup with some food and a fork in it. +475271,A woman sitting down to use a laptop computer. +104837,"A bathroom scene with a toilet, sink and a mirror." +261360,A stuffed frog stuck between two parking meters in front of a car. +64760,A woman that is standing in front of a tray of food. +41872,A bedroom with built in television and open fireplace +6226,A train riding on a track near a forest and traffic signs. +506137,A large collection of cooking utensils hanging on a wall. +443537,A cat and dog are close together on a bed. +77415,Someone is holding a container of garlic mayo near his sandwich. +208761,A woman's foot in a ballet flat next to two pieces of luggage. +496486,A woman standing on a tennis court with a tennis racquet in her hand. +471858,A middle aged man standing next to a parked motorcycle +69213,Two men wearing suits and hats are walking together. +31625,A box filled with cakes next to other boxes of cakes. +101096,A oool lookign stop sign by a murky bog hill +284560,Pans filled with different types of food on a stove top. +231806,Two people are cutting a pastry at a celebration. +226244,A large clock tower towering over a city on top of a hill. +4212,A cat rests on the hood of a blue car. +328289,People walking around the park with a few horses +326168,A bus passes several people riding their bicycles. +468302,A man in a blue and white baseball uniform preparing to throw a baseball. +475244,A city with water and boats along with many buildings. +257370,two people are playing a baseball video game +456610,Food separated into plates and bowls on a table. +357255,Six different cellphones on a white textured surface. +296284,A donut shop is full of different flavors of donuts. +290269,A black and white dog chasing sheep in a field. +409052,A large white airplane sitting on a runway. +369982,A pool with several lounge chairs on a sunny day. +453273,An exposed photo of the cemetery in the background. +158109,Two black cat sitting in front of a window facing the backyard. +491985,A black cat sitting on topo of a bed. +540098,A man doing a kick in the park. +418275,Woman laying head on pillow with a cat on it +540264,a person tying another persons neck tie wearing a suit +286322,A white bowl on top of a plate filled with food. +76973,A man on skis skiing down a mountain slope. +552573,A man splashing in the water with a giant umbrella. +527695,A bowl of some broccoli that is chopped. +432799,A cooked and sliced pizza with a variety of toppings in a pizza box. +72935,A bathroom with two large white dressers and sinks +246308,A wooden desk with shelves that have action figures above it +399384,A beautiful young lady standing in front of a shower. +84521,A man walking through an empty subway concourse +207177,A man grins while resting in legs on a kayak. +392048,A tray that has plates of waffles on it. +415874,"A pizza sitting on top of a table with olives, sausage and cheese." +148588,A brick oven with logs and a uncooked pizza next to it. +47367,A dog standing next to a fire hydrant on a sidewalk. +92028,a man well dressed posing at the photo +107964,A man doing a trick on a skate board. +307564,Tea time in the dollhouse is much like the real thing. +167529,A bathroom sink sitting under a bathroom mirror. +269287,A white bathroom sink with a vase of flowers on it +507797,Two buses parked next to each other in front of a building. +242362,A fruit salad in a bowl with slices of fruit around it. +210501,A red and silver train traveling past a train station. +289469,"A dish of macaroni and cheese, french fries and broccoli are sitting on the table." +56580,An old time car is parked at the curb near a stop sign. +34773,A large white and black dog laying on top of a couch. +371289,Two woman are playing paddle board on a beach. +135763,A red fire hydrant sitting in a lush green field. +400552,A variety of pots are stored in a nook by a fireplace. +233771,A black and white image with a colored british flag umbrella +25860,a man with some drink in hand stands in front of a counter +24104,A full view of a home office with many computer screens. +77118,A bear that is walking in the water. +133527,there is a person holding a big sandwich in there hand +425973,Two baby horses playing together in a field +220981,A sad smart phone holding a half a banana. +188173,A giraffe and zebras mingle as cars drive out of an animal park. +8277,The meal consists of chopped chicken with cheese and brocolli. +699,a fogy picture with a red light in the back ground +321437,A clock on a pole sitting next to tall buildings. +429726,A man riding a skateboard down a street. +142552,Some people on a roof who are flying some kites. +186950,A train with many cars is rolling on the tracks. +296492,A little kid sitting on the counter eating food. +559171,A man and woman ride on a red motorcycle with others in the background. +25804,A family of five takes a ride on an elephant. +519755,Strength in a tennis match can prove successful. +167549,A stuffed bear and a vase by a headstone. +497441,A blue car and white truck next to bushes in yard. +295242,A virgin plane is sitting on the runway +259253,A herd of sheep walking across a lush green field. +290610,The train is going past the field with the grass. +476864,A surfer in a wetsuit riding a wave +74573,A parking meter on the side of a street near a window. +86202,A woman skiing poses on a snow slope. +167572,A sandwich with nachos and a salad on a plate. +377802,A woman standing on top of a field near a frisbee. +547504,a computer monitor is on top of a glass desk +529850,A man kneeling down to a black cat on luggage. +83113,Animals trying to either move or go around fallen tree branches +423001,A man trekking through the snowy woods on skis +517889,A woman playing a frisbee game in front of several spectators. +450151,A black and brown park bench in a grassy area. +31796,"Meal of egg ""salad"", apple, yogurt parfait, and lemonade on a narrow countertop." +463618,A woman holding a baby next to a bird cage. +558558,A city traffic signal and street at night. +92644,A group of people out on a boat and a man on a jet ski +341801,A tall monstrous looking street sign sitting on the side of a road. +525381,A batter swings hard at a low ball as the catcher reaches out his glove. +534845,Teddy bear and clothing hanging from clothes lines outside window. +457538,A young boy wearing a red catchers mitt. +324321,A car and a bus are merging into traffic together +268124,A bunch of horses that are standing in the water. +216548,A gray cat sleeping on top of a bed. +360342,A blue motorcycle parked along the side of the road +385222,A young man wearing a ring adjusting his tie +378928,A woman playing tennis on a grass court +336656,At sunrise the man is ready to enter the water with his gear. +238890,A group of people riding horses on the beach at sunset. +179200,A black and white cow grazing on dry hay next to a black cow. +80022,A tennis player wearing white holds out his tennis racket as a ball floats in the air near it. +260305,a few zebras that are walking on some grass +580591,A woman riding skis down a snow covered slope. +122281,Three men holding snowboards on top of a mountain +231582,An airplane in the water a short distance from a rocky shore. +231402,A motorcycle passing by a yellow dump truck. +143040,A kitchen with black stove and white cabinets. +501191,magnets that have been placed on a refridgerator. +473196,Two buildings standing tall but the tallest one has a clock on it. +554740,Two parking meters take credit cards and allow 2 hour parking +494852,A man in grey shirt doing a trick on skateboard. +325347,A man on a tennis court playing tennis +528720,A man riding a skateboard next to another man. +185046,"A well balanced meal set on a tray +" +145873,A street scene with a large truck driving by. +158372,a little blue over night bag on a counter +422670,A small child is reaching for the camera. +149446,A woman holding a child on her hip in the water +563424,A little boy with a hat holding a bat. +402909,a mirror reflecting the platform at a train station +127624,A train next to a train station with city in background. +338949,Ingredients for making sandwiches are displayed on a plate. +189452,A group of people with bananas tied to their bicycles. +256868,Man preforming stunt on skateboard outside in the city. +327500,Three giraffes thinking their head over a wooden fence. +245460,a small boy with a hat playing with a remote +200250,People are walking by a truck with an advertisement against the former president of Iran. +264628,A sink sitting under a large bathroom mirror. +358833,"A living room area that has a couch, table, and lots of photos on the wall." +255322,Two women are holding a bowl with doughnuts +7991,A plate topped with baby carrots and beans next to a peeler. +385540,a woman riding a horse while holding a flag +220722,People are in the bed of a green truck with an umbrella. +356358,A tall clock tower and fountain with water next to palm trees and people taking a photo near the water. +421144,A large panda bear walking along a dirt road. +183199,"Two dogs on a couch, one is standing on the top and one is laying down." +174633,An adult on skis holding the hand of a child on skis. +549338,Three horses are near a field of many animals in the distance. +349310,A bus driving down a quiet street in the city. +83531,A BBQ topped with lots of sausages sitting side by side. +137004,Baskets of oranges and a basket of pears. +449594,two twin beds in a room with two chairs +365366,A blond woman kneeling in front of a parking meter. +93948,A cat standing next to a plate on a computer. +558834,Many people are enjoying the lovely day flying kites on the great lawn +547435,A yellow pickup truck stopped at an intersection +334977,A smart phone at different angles with windows. +254732,Four black jets are flying above in the middle of the blue sky. +424975,A store covered in graffiti on a street corner. +437180,A group of people around a large desk working +187079,there is a baby sitting on a chair with a stuffed bear +388569,A couple of bags of luggage sitting on top of a ship. +442165,A baseball player holding a bat next to home plate. +472034,a plate with various foods sits on top of the place mat +79689,A partial view of a toilet and sink in a bathroom. +68457,A photo of the tail of a jet engine airplane on the tarmac. +206176,A colorful checkered motorcycle parked along the street. +461172,"A plate with banana's, carrots, blueberries, and oranges." +363844,A lot of stuffed animals that are hanging up. +33008,A black and white cat lounging with sleepy eyes. +73467,A cat is sleeping on a computer desk. +318722,A cat standing on an open oven door peering into the oven. +87144,A woman and her child sitting nest to a man on a park bench. +48905,A metallic refrigerator freezer sitting in a kitchen. +442836,A person trying to throw a frisbee and another trying to block the throw. +343458,Someones hand lifting up the top of a hamburger bun. +238074,A man smiling while standing in the snow with one foot on his snowboard. +447948,A street scene with a dirt road and a large truck. +239785,a man is snowboarding on a snowy hill +456328,A bathroom photo focusing on the toilet and the window. +365866,A toilet and container in a small room. +397225,a couple of kids are holding up pink umbrellas +305978,A giraffe is walking in a grassy field as a cow is laying down. +480583,Many donuts with different flavors are displayed. +52827,A house and a lighthouse is located near the water. +221272,A skier skiing down a snowy mountain. +372230,A woman in pink dress playing a game of tennis with people in background. +165164,A man standing in front of a pile of bananas. +558641,Three donuts sitting on a napkin on a counter. +394474,A woman and a kid in a room. +58690,A boy playing a multicolored piano on the street. +234433,a bicycle and parking sign that is upside down +546717,A woman sitting on a couch in front of a laptop. +505849,"A bathroom has a toilet, sink, mirror and bidet." +432234,Two brown teddy bears sitting on a couch. +451471,"A store that says ""Ray's Tavern"" and a group of motorcycles parked outside the store. " +317822,A cat sitting on top of a shelf with a mouse box. +534045,An old green fire hydrant sits on a grassy curb. +198635,A speciality drink and roll prepared on a plate. +338,Two people standing in a kitchen looking around. +22168,A single cow laying in a grassy field +107922,A person sits at a table in a kitchen. +319530,a man on skies is coming down a hill +267200,A skate boarder gets some air during a jump. +278365,Lady with a slice of piece in front of a stack of pizza boxes. +431236,A kitchen with a washer and a stove top oven. +235486,Three people are sitting at a table eating pizza. +194851,a man that is swinging a baseball bat +528314,a man that is skiing down a snowy slope +304828,The lower half of a very tall giraffe in a grassy area. +553780,there are four donuts in a small box +152255,An elephant in a field surrounded by trees. +205401,A plane floating on top of a lake surrounded by mountains. +1799,A large green truck on a city street. +50306,"The table is holding, pizza, eating utensils and glasses of orange juice." +17882,There are bikes parked next to the cars. +323100,A group of chefs preparing food inside of a kitchen. +153524,A computer desk topped with a computer and two monitors. +264110,A stuffed animal sleeping in a miniature bed under a blanket. +332663,A field with animals grazing on top of a grass covered field. +426241,A desktop computer sitting on top of a glass table. +94012,A man holding a tennis racquet on top of a tennis court. +476175,a close up of a plate of macaroni shells +476258,A person in a helmet is riding a skateboard. +272117,Four people at a table with a birthday cake that has just been lit. +253223,a building with two towers and an air plane in the background +137408,A surf sailer gathers his gear and walks along grass. +491725,Picture of docked boats while sun is setting in distance +341006,a god in a small cage sitting on a dog bed +216228,A girl is skateboarding down the Hollywood walk of fame. +196879,"A zebra is standing on gravel, facing the camera," +200348,The young baseball batter prepares to take a swing. +364884,Spectators are watching a snowboard competition of the Olympics. +338200,A teddy bear that has been set on a bench. +98003,A slice of pastry with a cream filling. +161112,A black and white photo of a child putting on gloves next to a suitcase. +123035,a cooked pizza near an uncooked pizza +359947,A woman taking a photograph of a microwave oven +31481,"A boat sitting on the ground, where their use to be water." +61333,A orange and white cat sleeping on top of a blanket on a bed. +425569,A large professional kitchen has a stainless steel counter. +224793,The cat with a damaged eye sits on a pair of shoes. +374829,A man holding a baseball bat as another gives signs. +522127,A close up image of a street sign letting people know where they are. +114152,A window sill with multiple plants on the ledge. +455515,a couple of cars parked next to a fire hydran. +368581,"A plastic container filled with a sandwich, sliced berries and sliced cucumber." +84530,A group of men sitting next to each other. +570755,Six trucks parked next to each other in a parking lot. +48332,Two men are cutting a cake at a function. +408906,Two personal sized pizzas are being prepared on a pan. +179112,A young woman takes a self portrait in the mirror. +257673,An old wooden bench sitting beside a bush +418882,A stove top has many different items cooking on it +307323,A living room/dining room where a family would sit +447147,doughnuts baked in an oven on top of aluminum foil +573896,A herd of cattle grazing on a green grass covered field. +492816,A cat is sitting on top of a gray plate. +74101,A person walking down a street while holding an umbrella. +493295,A cat sleeps on top of a computer mouse. +110265,two people standing in a living room playing nintendo wii +191949,A women who is standing on a tennis court. +328,"Three men in military suits are sitting on a bench," +206809,A polar bear relaxing in a pool of water. +57390,A small brown bird is sitting inside by a window. +108698,A cat is sitting in the window on a rail. +259452,A city with tall buildings and a large green park. +241318,A group of women that are standing near each other. +468197,Two people surfing a beautiful sky blue wave. +559462,A man and a woman dressed in wedding dresses. +490890,a castle surrounded by a fence and some trees +310788,a man sitting in a chair infront of a computer in front of a window +146837,A man flying through the air over a skateboard. +503707,A group of men riding motorcycle down a country road. +558741,A tall giraffe standing next to a baby giraffe. +475035,two baseball players on a field playing baseball +516313,A woman and man standing behind a counter with a teddy bear. +17708,"Three boats travel around a calm, clear harbor." +129113,a burnt tea spoon sits on a wooden surface +425447,White truck parked on street with trees and man +331686,an image of a group of policeman on motorcylces +27787,There are several boats floating in the harbor. +334073,A tall maroon clock in the middle of park. +518383,A person riding a snowboard down a snow covered slope. +123137,A person on a skateboard rides on a platform. +106563,A clock that is hanging underneath a glass arch. +272968,Bedroom with a king size bed with wooden furniture. +89894,A white vase filled with roses sits near a fridge. +523436,some different foods are lon a plate next to a mug +213465,A lady snowboarding on a hill with snow. +562197,Pictures of different types of prepared food containing beans. +217285,A baseball player with the Cardinals getting ready to hit a baseball. +153445,"a living room with a leather sofa , flat screen television, throw pillows and a wood slatted coffee table." +217223,A group of people standing next to each other. +423036,a close up of a bench with a dog laying on the ground +546133,A giraffe is standing in front of a wall +156858,A black bird landing on the leaves in the water +338901,a brown white and black dog is laying on a gray couch +317622,A line of buses in a parking lot with people standing around. +380427,A full picture of some white toilets on the side. +194138,An athletic person playing tennis in the sun. +351621,Two kites sail high in a clear blue sky. +420960,two people exchanging phone numbers at a table +164104,An ostrich and zebra fenced in with each other. +21382,A green street sign sitting below a large tree. +299082,A giraffe eating grass over a rock wall +575357,A dog that is jumping in the air looking at a frisbee. +548246,A group of people standing on top of a tennis court. +294595,a kitchen with cabinets and counter tops sitting on a tiled floor +446651,Young girl with helmet on hold on tight to her father driving the motorcycle. +325586,A cell phone and a banana on a rock. +95427,A pile of oranges with on sliced on top. +295656,A beautiful woman standing next to two men with a beautiful blonde woman behind them. +357024,A wall of video games next to a fridge . +310185,A baseball player holding a bat on a baseball field. +419051,a cat is standing inside of a bathroom sink +512254,Baby elephant grabs on to branch and brings it near its mouth +543330,A table with cut up vegetables and cheese with it's rind cut off. +53102,A computer desk topped with two desktop computers. +451144,a couple of people on skis sit on top of a snowy hill +113579,A mama and a baby horse are standing near one another in a field. +156045,A man in a white pants and a white shirt and colorful tie. +493192,Skier lays down on a snowy hill with his equipment on. +482100,These toilets are being used outside as decor +574619,A woman feeding a giraffe from her hand in a zoo. +221190,A large building that has a train passing by it. +462565,people on bicycles ride down a busy street +323507,a little vase of flowers that are yellow in a blue vase +369533,Light breaks through a cloudy day at the pier. +308506,There is a person sitting on the toilet using the bathroom +379882,A baseball player holding a bat over home plate. +173375,A man riding a snowboard down a snow covered slope. +449676,A person standing on a beach flying a kite on the beach. +239064,a group of people walking on an elevated walkway +559440,"very small bath with stand-up shower, commode and sink" +334007,A bear cookie sitting next to a gummy bear +546964,A room filled with furniture and very large rugs. +238292,An animal that is on a tree eating some food. +512545,A flock of sheep in a mown field under telegraph wires +220214,Two people standing in front of a train on the tracks. +225225,A couple of trains are traveling side by side. +114458,a child in a bed with a striped sweater and colorful blanket +581560,A black and white picture of a teddy bear +378545,A pole that has a clock on top of it. +316423,A large white bird in the open water. +12333,A woman riding on the back of a white horse. +256250,two giraffes in a field next to some standing water +124002,A gray and white cat drinking milk from a bottle. +212453,A white toilet sitting in a corner of a room. +63104,A boy wearing a cap and green t-shirt holds a baseball mitt. +249371,"Many sheep grazing in a large, green pasture." +425475,A woman's hand holding a glass of wine. +537668,A view of a boat at sea with a lighthouse in the background. +496379,A baby sits on a bed and plays with a laptop computer. +90592,a picture of a nice dressed man in front of a car +191053,The young child is wearing a tie and smiling +453841,Cars and trucks stopped at an intersection at twilight. +105751,A woman serves a ball with a clock in the background. +62554,Several plates of food are set on a table. +94531,a group of giraffes that are inside the fence +407990,A stop sign has been altered to read stop the war. +578493,A bull and a cow lie in a field. +406147,A group of girls sitting on a towel under an umbrella. +321024,"People in line in the street at an ice cream truck. +" +562062,"A man playing in a baseball game, running with his glove getting ready." +103585,A bathroom with two sinks sitting under mirrors. +542150,A box robot standing by a toothbrush with toothpaste on it. +111117,Bird perched on a high branch in a tree +399991,a close up of a young baseball player fielding a baseball +370331,a young man on a skate board doing a trick +258998,A large gray cat sitting in front of a mirror next to a pink bowl. +411666,Tubes of breast milk in a refrigerator. +473215,A banana sundae sits in a dessert glass. +429623,A very large pizza on top of a pan on a table. +472029,Eight different striped candy canes resting in a green vase +558577,A man lying down on a bed showing his clean sneaker bottoms. +350789,some zebra chillin in the wild with a bird flying over +521943,A small boy practicing hitting a baseball off of a ball stand +512013,Plate of vegetables and pita sitting on top of a dinner table. +347768,Cars and a bus driving down a busy road. +343703,A snowy slope and tree line with one person skiing down. +452224,A small yellow bird on a branch of a tree. +160195,There is two men riding on a skateboard on the street. +554607,Hotdogs are cooking on a roaster with condiments arranged alongside. +80698,a baseball player holding a bat in a field +301753,A baseball player holding a bat on top of a field. +453310,A red truck with roof lights and equipment in back. +216710,a couple of plates that have some food on them +150987,A large predatory bird sits on a tree branch in an exhibit. +376491,A view of a mountainside with skiiers and snowboarders. +328452,A bathroom sink below a well lit mirror. +185210,A city street at night filled with lots of traffic. +178939,The big dog is laid out in the hallway +546642,A motorcyclist riding down the street with a dog in a basket. +432796,A couple of swans swimming in a pond next to two people. +360132,A giraffe is eating leaves off of a tree +134112,A small dog laying on a bed next to a laptop computer. +112800,A sea plane about to land on a lake near a boat +10800,"A bathroom with a sink, counter, toilet and shower curtain." +474762,A picture of four wild horses in a forest. +145666,A bowl full of broccoli and tomatoes being cooked. +386716,An adorable child brushing it's teeth with a toothbrush. +56350,A picture of people is on the floor near a urinal. +147793,A picture of a street sign with various posts on it. +348263,The child smiles while posing in a baseball uniform. +286544,A man pushing a wheelchair on the street. +549518,two bananas sitting on top of a table next to a white bowl. +458790,A view from the inside of a train from a side window. +577584,A large white bowl sits on a slide out shelf under a microwave. +122851,There is a man picking bananas next to a street. +529235,some food and glasses of wine on a table +89541,A tray of fruit and a muffin on a table. +269346,A man rared back at a tennis ball with a tennis racquet. +71345,two trains go side by side down a street +471342,A bowl filled with lots of vegetables and rice. +376247,"A couple of children riding on the back of a horse posing with their mom, her cow and a small dog." +411953,A man with a guitar in front of a microphone. +43218,There is a clock above a shelf of knickknacks. +312306,Various animals graze in a pasture surrounded by woods. +516916,A desk with five computers in a row on it. +534426,A road that has cars driving under a traffic light. +482225,Clear plate of fries next to a bacon cheeseburger. +35827,"An office scene with laptops, printers and chairs." +292209,The big truck is parked in the parking lot by itself. +225495,A man with a tie and glasses and messy hair posing for a photo. +485142,A female skateboarding barefoot with a purple effect applied to background. +393497,Man speaking from lectern at outdoor gathering in urban area. +37655,A little girl sitting at a table with lots of fruit and cake. +78838,A group of people posing on sidewalk with a plaque. +353593,A man and two children laying on surfboards in the sand. +445055,a little kid is surfing at the beach +400265,a man that is standing up with a cord in his hand +78035,A bathroom showing the bathtub and the sink and mirror. +370116,This is some pink luggage that is sitting together in a group. +346633,A plate that has different kinds of food on it. +93040,cows are laying down on a patch of grass +140439,"A clear, glass vase full of fresh cut tulips" +287970,A large elephant standing in front of the capital building in Washington DC. +204067,Player at home plate preparing to bat during game. +46503,"A view into a bathroom with a white toilet, tub and a wooden cabinet sink." +423116,A kitchen table with a stove top and an open laptop computer. +108681,A cat sleeping on top of a laptop keyboard. +190160,"Three with colored birds standing on a wet surface, each bird standing on one leg." +19157,a group of guys showing off a cow to an audience. +296182,Two people paddling a boat across a body of water. +47938,A pair of slippers sits on the bathroom floor. +301300,A person standing in front of a stop sign in the dark. +557346,A bunch of animals in a grassy area. +237669,A baseball player takes his turn at bat. +77595,A cat sleeping on a bed next to a laptop computer. +328797,A kitchen with lots of dishes and appliances next to cooking utensils. +290261,A train going down the tracks that has just gone under a bridge. +94846,A man is typing at his laptop computer. +251367,A baseball game with a hitter at home plate in a swinging motion and people in the stands above the dugout area. +529670,A kid throwing a Frisbee and a bat on the ground. +263520,A lone giraffe stands in the middle of a grassy field. +388873,There is a big stop sign colored in red and white +532759,a very big building with many windows and a clock on it +315603,A man with a laptop on his desk is sitting in front of a computer desk. +527038,Heavy rain falls on a man holding a black umbrella. +419350,A fruit stand with many varieties of fruit. +396304,A bathroom with some of the wall removed during a renovation. +327177,A cat sitting on top of a green car. +222635,"A living area with a fireplace, television and atlas on wall." +345787,A bride waits for something while holding her bouquet. +325885,a tennis player swinging a racket to hit a ball +56960,A pair of computer monitors display contrasting sets of angel wings. +558128,A white walled bedroom has added flair with pastel quilted bedding. +580796,a bunch of elephants moving down the road +436183,A young lady swinging a tennis racquet towards a ball. +46743,A woman sitting next to a parking meter. +530261,A train pulling into a train station with large windows. +202572,a close up of a stuffed animal on the ground +536486,A large herd of sheep stands on the edge of a field. +529522,two people riding surf boards n a body of water +302361,a bunch of elephants walk around a broken tree +458058,A pile of small cakes and donuts sitting on plates. +207611,A man walking down a street holding a red and gray bag. +505035,A little girl is making a huge mess with a birthday cake. +182314,A blue truck pulling a load of unripe bananas. +57672,The group paddles the boat down on the water. +240107,A man standing on a rock holding a surfboard. +347515,A person jumping on a surf board on a wave in the ocean. +240082,A wooden box with a bird in a tree painted on it. +146489,Pizza on a cutting board is next to goblets with a beer bottle. +74135,A man standing next to another man as they prepare food. +263973,A man holding up a big white surfboard +403500,A man holding a pine cone while wearing a name tag. +540193,A man holding a tennis racquet on a court. +404613,Young boy with T-ball and bat pointing at ball. +130564,A person sitting on a large cement planter. +42697,A couple of people walking across a green tennis court. +516732,Two zebra standing on a tall dry grass field. +398637,Attendants at a fancy event wear long dresses and tuxedos. +119137,The bathroom has wood trim and white furniture. +20254,A man standing with an umbrella in one hand and a flashlight in the other +180202,A silver bowl of sliced carrots and chopped broccoli. +178818,A bulldog resting on and sleeping with a teddy bear. +262682,Two sinks that are in a kitchen near a window. +34464,People are at the beach near the ocean edge. +507330,A double decker bus parked on the street. +113139,There is alcohol and ginger ale on the tray. +198163,a man with many plates filled with different colors of paint +111086,Two rows of cars parked next to a boat. +242379,A strawberry cheesecake on a green plate that is on top of a pink and white cloth. +241279,A cat that is laying down on a couch. +579760,A brown dog sitting with a man on a porch swing. +163473,A cake is lit with tall yellow candles. +158635,"An ornate dessert sits on a plate, waiting to be eaten." +34114,A white microwave oven sitting inside of a wall. +87327,A crowd of people flying kites under a cloudy sky. +288592,a couple of bears walking across a field. +233376,Inside of a kitchen with a refrigerator and counter top. +218214,A white sheep standing next to a brick wall. +99115,"several food items on a table, including soup, salad and a meat entree." +498228,Two large birds sitting on top of large rocks. +580856,A sidewalk outside of a winery with tables +543897,A calico cat is resting it's head peacefully +157417,A person wearing a helmet is riding a motorcycle on a dirt road. +86615,A shaggy haired sheep with its lambs next to it. +16005,A woman holding a child and standing near a bull. +8775,A bedroom has many posters on the wall. +171464,"A parking lot with a car, three buses, and a semi." +29596,"A room with a couch, table set with dinnerware and a television. " +487943,a man doing a big jump with his skateboard +565128,A group of men getting plates of food. +133537,People walk down the platform next to an Amtrak train. +477195,A pizza with pepperoni and spinach leaves by a beer. +561037,A cruiser bike in line with others at a biker gathering +495456,a woman with a green oven mitt is checking on her baking +452776,A woman talking on a phone while standing next to a pole. +76351,A small elephant rubbing up against a tree. +432146,A person riding skis down a snow covered slope. +393180,a person sitting on the ground in front of a stove +287828,A young woman in a bikini in the ocean with her surfboard. +36451,A beach lined with lots of parked boats. +195673,a person riding skis on a snowy slope +572574,A brown duck floats by itself on the water +227480,a bath room with a toilet near a window +183181,A herd of buffalo grazing on grass next to the ocean. +147101,A person on a skateboard up in the air. +556562,there is a close up picture of a sugar donut +299688,A group of two dogs sitting in front of two plates of food. +477042,A woman on a bench plays an accordion as a man looks on. +34089,A tree has a no parking sign taped to its trunk. +315491,A city street with a traffic light and street signs in front of a stone building. +56137,A view of a bunch of apples sitting on a stand. +301766,A man leaping off the side of a cliff while skiing. +575020,A large hamburger sitting on top of a wooden cutting board. +568508,A black and white cat laying on top of a laptop computer. +175653,A person trying to get up after falling while skiing. +107216,The water the boat is in is reflecting the sun. +417653,A horse figurine sitting on a red chair on the sidewalk. +61414,A man on a cell phone eating food at a coffee table +80652,A kitchen with a wooden table next to a metallic refrigerator freezer. +80104,a train on a train track at a train station +483227,A group of children wait to play some tennis. +277172,A white FedEx truck parked in front of a tall building. +59952,A man in glasses wearing a tie with aliens +566699,Giraffe standing in open area near trees with mouth open. +376456,Two ladies with frisbee at the pitch playing +18291,A vase filed with flowers and plants on a book shelf. +361947,a green bus from a foreign country coming down the road +108953,a woman is out in a field with sheep +372816,a wood counter top in a long bathroom +381134,a person that is spiting something up in a toilet +24053,This room has a wall with a mural on it. +147498,"Many birds fly around, above an empty beach" +201765,A duck floating on a lake with gray and black feathers. +271639,a female tennis player in a white top +418854,A bathroom with a toilet and a sink next to a tub. +165172,A toothbrush that is sitting inside of a cup. +123599,A zebra and baby grazing on a grassy field. +242945,Male skier holding poles standing at the top of a snowy peak posing for camera +197774,A yellow street light mounted to the top of a pole. +77477,A vase of flowers sits on a table near a book. +499428,A large red double decker bus traveling down a road. +316008,A kitchen counter top with a white bowl sitting next to another white bowl. +481446,A young man wearing a tie and a blue shirt. +46603,A photo of a building with a clock tower on top. +87958,A train with several cars is going around a corner. +553879,A busy intersection with many cars and traffic lanes lies beneath an overpass. +574357,The motorcyclist in a helmet is looking over the side of a bridge. +105455,A colorful clock tower along a street and near apartments. +580084,Black bird with red eyes as seen sitting on branch. +304698,there are three suitcases That are opened on the floor +107304,A woman opening the bathroom door with the room chained off. +328117,A metal tray filled with fried donuts and metal tongs. +443713,A man riding a skateboard off the side of a rail. +76942,a man standing by his bike with his hands on the seat +340047,a person holding an open umbrella with words written on it +489850,Three people that are posing for a picture. +481327,Vase in the corner and flowers and sticks poking out of it +5437,A fire hydrant with a blue jacket on top of it. +29640,A skillet contains diced meat and mixed vegetables. +221094,A man and woman are on a bicycle pulling luggage. +539140,The airborne tennis player hits the tennis ball with his racket. +81779,a person presents some big doughnuts in a box +48383,A couple of elephants standing next to each other. +339245,a baseball player swings his bat at a baseball +193720,A toilet and a computer monitor on the ground. +103522,A boy in grey jersey holding a baseball bat. +581899,Two bright green passenger trains pass by with people standing in the doorways. +390463,A white plate topped with blue and pink cup cakes. +484457,a square cake with many squared layers on top of one another +368349,A tiled bathroom with white towels hanging up. +297267,A train traveling down train tracks next to a lush green hillside. +265636,A brown teddy bear hanging from a green sign. +97682,there is a man that is holding a phone wearing a hat +170550,"Road construction and street signs in Cape Town, SA" +129812,A man riding skis while flying through the air. +534734,A temporary tennis court has been erected in the town square. +151521,A group of people waiting at a table at a restaurant. +381699,A large room is decorated for winter holidays and features a rustic clock tower. +93964,A white city bus traveling down a street with traffic. +215723,Two men smiling and wearing yellow jackets behind construction markers. +284991,A man has a red water bottle up to his mouth. +325527,a brown teddy bear sitting on a huge box +452623,Adult holding food items in to go tray at outdoor event. +543215,Signs point the way to a cemetery on a quiet road +236951,A rural train station is loading and unloading passengers +316675,A plate with potaotes and vegetables and meats on a plate +540452,A black cat resting himself on a couch +298979,A lot of zebras in the grass grazing and one zebra just looking. +30932,"A kitchen scene with a microwave, window, and decorations." +254864,A fire hydrant sitting on the side of a city street. +529187,A mama and baby giraffe are standing close to one another. +415163,A group of people standing around a TV with a video game on it's display. +329717,Young boy sitting on top of a briefcase +196341,The silhouette of people is seen against the inside of an outside large clock. +526371,a person with a hat and some ski poles +441841,Motor bike taking a fast turn on a track. +359234,Two sheep grazing on a lush green grass covered field. +30403,A man raises his tennis racquet as a tennis ball comes towards him. +454252,a bunch of people are standing together in a room +302310,two people standing close to one another holding a bottle and a cup +358359,A kitten being roasted inside of a microwave oven. +192362,male skier sliding down a cold snowy hill surrounded by evergreen trees +490105,A cat sitting on a floor in front of a flat screen TV. +175318,"An old clock stands in a dilapidated, messy room. " +119452,a spotty banana sitting on top of an orange and some other fruit +490964,a croissant on a plate near a beverage on a table +378873,A lot of food that are in some baskets. +362986,A green 7th street sign hanging from a wooden pole. +121123,A couple of people sitting on top of a elephant. +577887,Part of a pizza is displayed showing it's toppings. +139684,A living room filled with furniture and a flat screen tv. +500049,A plane is parked in an airport field. +134935,A table topped with a tray full of cookies and a vase filled with flowers. +570088,A giraffe standing next to a wooden pole near a forest. +420472,Two giraffes are eating a leafy branch together. +177861,Pedestrians walking on sidewalk with umbrella on rainy day. +117718,A row of urinals stand on a wall in a bathroom area. +192656,a man is preparing to pitch the baseball ball. +462424,a cat that i sleeping on a pile of junk +120519,A yellow teddy bear on a little girls bed +90891,Five men are selling a large amount of bananas. +551188,a large group of bags that are on a convorbelt +451228,"There are buses, bicycle riders, and Christmas lights on the street." +122213,A kitty cat standing on a sink playing with a mirror. +185936,A man holding a banana in his hand. +43375,"An apple, sharp knife, with some cut up apples. " +279948,A young boy standing next to a kitchen sink next to a dish rack. +277533,A man sitting on a red couch holding a Wii game controller. +327567,A bowl of beef stew and a spoon on a cloth napkin. +395621,Group of men standing around a kitchen eating small sides. +174402,A man holding a tennis racquet as a tennis ball approaches him. +442761,A dog and and someone's hand holding on to a frisbee +355860,Two giraffes rubbing on a tree beside two giraffes. +532610,A kitchen counter topped with a dish tray filled with dishes. +288491,a man on a surf board rides the waves +447242,Two people are flying kites in the grass. +34483,A vase filled with flowers on top of a golden table. +479030,A large long train on a steel track. +506115,"Blonde girls on a bus hold deflated soccer balls as a brown haired girl sits in the row of seats in front of them. +" +147879,A warehouse filled with light fixtures in it. +473541,Some flowers and a ceramic sheep on a table +181449,A black kitten lays on her side beside remote controls. +418548,a man is holding up a box of doughnuts +207832,A man standing on top of a tennis court holding a racquet. +34115,A stuffed bear that is in a train seat. +16410,Yellow flowers in a vase on a windowsill. +475844,A woman sitting on a bench holding a book. +523873,two people standing holding tennis rackets and a ball +46859,A baseball player taking a swing at a ball. +448151,A birthday boy with car shaped cake and candles on it. +160031,A road filled with traffic led by a big blue bus. +189078,"Variety of fruits such as bananas, oranges, and apples on a platter." +306061,A little boy riding a skateboard across a cement area. +37709,There is a stop sign and two street name signs on one poll +453509,A lot of oranges that are in some boxes. +529348,Two zebras are eating grass under an umbrella. +449485,Is this picture of a girl and her suitcase hand tinted? +79144,Bear cubs play among the fallen tree limbs. +296105,A white boom box with an mp3 player on top of it. +256518,"A breakfast plate with toast, vegetables, eggs and meat." +552977,A white urinal mounted to a wall under a flushing mechanism. +22423,A man standing next to an elephant who stole his hat with it's trunk. +235241,Woman and man playing with a disk toy outside on the beach. +410641,A close of up a half eaten chocolate cake. +329355,The two zebras are eating grass on the plain. +376996,A red small engine plane in motion on a field. +459749,A pot of water has carrots in it. +36414,Two birds looking at their reflections in side mirror +155873,A woman sitting next to a yellow hydrant on a sunny day. +480173,A woman holding a tennis racquet while standing on a tennis court. +154711,THERE IS A WALL WITH FLOWERS ON IT AND A BIRD +368510,Several vanilla Cokes on a desk with a laptop. +441969,Old brick buildings are reflected in a glass door. +339676,a surfer on top of a wave in the water. +384215,A marina filled with boats under a cloudy blue sky. +231610,A batter standing behind the catcher is taking a swing. +344862,two people riding a motorcycle on a city street +406873,"a large elephant that has people on its back +" +177856,A crowd of people riding on top of a yellow and white boat. +552612,A herd of sheep grazing on a lush green field. +303970,A living room filled with lots of furniture. +304438,This is an old fashion picture of a young man in a suit. +274010,A young boy playing a video game while sitting on a sofa. +496081,two brown horses standing behind some rocks +129735,A man riding a horse over a red and white striped pole. +581451,A hot dog in a bun covered with peas and ketchup. +411941,A kitchen with metallic appliances and a trash can. +567315,A train traveling through a lush green rural countryside. +237232,Woman at wooden desk with a glass of finished wine in front +396729,"A remote control, book and phone sitting on a bed" +252582,A small airplane flying through the clear blue sky. +513129,A man's reflection is in a mirror of a bathroom. +314935,Two laptop computers are on a brown desk. +400887,A man walking a horse next to a boy walking another horse. +74388,A blender full of a green colored smoothie +12993,A cyclist and bus splash past one another on the street. +508582,A pair of rectangular deep dish homemade pizzas. +565575,A man at a counter playing interactive bowling video game. +367599,A lot of people flying kites on the beach . +49194,A child tennis player prepares to hit the ball +416304,Two men play against each other in Wii Bowling. +234757,A parking meter sitting in the middle of a flooded street. +72811,A plastic serving tray with food and drink on it. +183666,Red and blue train sits along the tracks +96440,a close up of a plate of food consisting of pasta and vegetables +304165,A washroom is adorned in soothing beach vibe decor. +430744,Boy wearing shorts and flip flops holding a bat. +283744,A string of Christmas garland hangs below a display of stuffed animals. +388927,A person holding a smart phone in the palm of their hand. +527164,The sign is in clear view by the traffic lights. +483705,a person riding a surf board on a small wave +41300,A train traveling through a tree filled countryside. +237075,Five statues of people on a pavement +332968,A display case filled with lots of different cakes. +17436,A man sitting on a bench with a tall building behind him. +222468,A dining room filled with lots of people. +243090,A white refrigerator freezer filled with lots of drinks. +535588,A blue and yellow bus parked in front of a man with a bike. +316019,a mattress with a maroon sheet inside a tent. +290734,A person singing into a microphone while holding a cell phone. +64723,A face car driving past a parked motorcycle. +236739,A view of a bus traveling on top of a bridge. +207179,A lot of motorcycles parked next to each other. +266502,a small plane with a propellor sitting on a runway +420929,The two white birds are flying in the clear sky. +301266,Four people gathered at a steel table with utensils. +277291,people crossing the street in a big city in the rain. +553664,A red laptop with earbuds sitting on a table +94501,A chocolate cake is next to a bottle of beer. +347819,There is some tuna and a potato on a white plate. +357109,A CROWD OF PEOPLE WATCHING A SKATEBOARDER PERFORM +364429,A long haired cat laying on a shoe on the floor. +572630,Columns of black motorcycles in front of very old buildings. +379767,"A delicious meal of rice,chicken, and broccoli with water and soda to finish the meal. " +396224,A table filled with plates of food and bread. +70332,A man with an evil smirk on his face wearing a vest. +373539,this is a piece of meat and green beans on a plate +253930,A pasta dish on a white plate with a fork. +523194,A fire hydrant on the side of a road. +291370,A nattily dressed man and woman stand next to a horse. +388812,A group of giraffe standing on top of a lush green field. +188667,A cat standing next to a window in a room. +48308,"A giraffe stands in front of a verdant, lush group of trees. " +151299,a man flying through the air while riding a snowboard. +306664,A large white polar bear walking across a dirt and gravel ground. +363793,A large white sheep cake sitting on top of a foil plate. +527828,A boy poses with a fork eagerly with fruit topped pancakes. +93601,A group of six cinnamon rolls sitting inside of an oven . +108283,A rotten door leading into a restroom covered in filth. +361029,A hipster holding a camera while wearing glasses. +352755,Two ponies eating grass in a field with tall grass. +520799,A person holding a tennis racquet with the letter b in the middle of it. +171500,Commercial logging transport truck on dirt road near forest. +125853,A four-picture collage of three elephants interacting with each other. +50514,Many people are walking near some very colorful buildings. +393720,A man flying through the air while riding a skateboard. +309120,A man getting ready to kick a soccer ball. +360097,A gate is near lots and lots of luggage that is all grouped together in different clusters. +292908,A man is surfing on a wave in the ocean. +34474,A home with lots of wood darkly stained. +311041,An orange cut in half sitting next to a glass of oj. +380247,A small kitchen inside of a dark office +31471,A woman tending to a brown cow with a rope wrapped around it's mouth. +5802,Two men wearing aprons working in a commercial-style kitchen. +393578,a white bus is on a busy street +357475,A white toilet sitting next to a white bath tub. +520401,a child sitting on a couch in a living room. +235242,A gray train riding on a track as people are walking. +191304,"A dining table with a buffet table, book shelves and a wall clock." +527506,A small plane landing in a grassy field +166205,some skate boarders using an empty swimming pool +385719,Laptop with computer monitors displayed on wooden desk. +247057,A person doing a snow boarding stunt on a rail. +71209,Two cowboys on horses chasing a steer in an arena +580607,a couple of boats are parked at a dock +295956,Two women are playing a game of tennis on a green court. +363666,a couple of people sitting around a table +329041,A group of brief cases are piled up on the sidewalks. +469603,A brown horse looking out of a window in his stall. +343031,A black steam engine pulling a small passenger car. +567440,A pizza topped with sliced up bananas on a pan. +234341,A top down view of a computer and keyboard +276149,many people on a snowy slope riding skis and snowboards +173080,a number of cars on a city street near a traffic light +543268,A display case inside of a bakery filled with doughnuts and cakes. +384204,A cat sitting on top of a window sill near a phone. +276055,A woman holding up a large carrot in a backyard. +420036,A table with two TVs on top of it next to four remote controls. +113757,A group of students sitting in front of laptop computers. +511403,A white cell phone sitting on top of a table. +310442,A woman riding a bike with a cat on her +474788,A biplane takes flight on a sunny day +214919,A white container filled with lots of food. +515642,Book next to remote controller displayed on tiled surface. +111338,A girl standing next to a man in a room. +547383,Two adult sheep lay on the green grass. +232187,A woman with a tennis ball is next to a child +188752,Two bunches of bananas at a market stand. +246124,Group of people flying a kite on a plateau outdoors +415843,A row of three wall mounted urinals in a bathroom. +353866,A man wearing a hat while standing next to a body of water. +389622,A large black and silver clock in a display case. +407150,A pile of garbage sitting next to a trash can. +147256,A stir fry bowl of broccoli and a bowl of meatballs. +239347,A picture of a recently married couple displayed behind glass. +489346,A yellow fire hydrant sitting in front of a white fence. +197262,A pizza that has been cut into slices. +359791,The boat includes several rows of orange chaird. +253474,A bunch of skiers on snow are standing around. +153299,two giraffes are standing together outside a barn +267521,An American Airlines jet plane parked near a terminal. +234592,A grand bed is adorned with a net canopy and surrounded by large estate furniture. +71699,A young man taking a swing at a baseball +190185,A large sandwich filled with sausages on a tray. +110999,A painting of a man smiling behind a table with fruit +438999,Food and a spoon sit on a plate on a table. +488151,A little boy walking through a field while holding a kite. +11172,A kitchen view of a dining table with a bowl with bananas. +248701,"A person dressed in an all white snow outfit on skis and holding ski poles, while standing on a snow covered ground." +457558,Stop light featuring Main Street and a green light +213255,a man standing in front of the grill of a hot dog stand. +397063,A small ring of raw meat in someone's palm +561336,A group of men on a field playing baseball. +54931,a woman with a rope leading a horse +535933,A pizza sitting on top of a white plate. +263393,A table topped with plates and bowls of food. +20598,Small children are eating from plates of pizza. +84060,a women combing her young daughters hair +291528,A delicious banana and peanut butter sandwich is on display. +314328,A clean white toilet in a stall with a chrome toilet brush. +326863,A yellow train comes to the cross roads of a train track. +61531,A man skis over a plastic contraption on a ski slope. +452611,A man riding a skateboard on a street. +537069,A boy swinging a bat at a ball. +325991,A young man in a red shirt is throwing a frisbee. +355057,Photo of airplane wing as the plane flies in the blue sky. +176037,A transit bus riding through a city street at night. +549136,A barbed wire fence has a teddy bear in it. +132702,Two vegetables are lying on a napkin on a table. +56160,A flower arrangement is sitting in a black vase. +122039,Train cars on railroad tracks with graffiti on the side. +10966,A group of people sit and stand in a circle while drinking in a living room. +398174,a young blonde standing and playing with her cell phone +231079,A surfer is on a board riding a wave. +129756,A man that is standing in the grass near animals. +25660,Many flowers are decorated outside of a building. +107227,A woman riding a horse with number 26 on it +157053,An adorable little girl holding a Nintendo Wii game controller over head. +125201,A very tall clock tower with clocks on each of it's sides. +120872,A group of people playing a game of soccer on top of a field. +480752,there is a bench on a very high hill or mountain +510587,A man riding a skateboard flipping it into the air. +378814,A Giraffe looking down as another giraffe in the background in looking through a fence +560918,A little boy is picking up a skateboard outside. +75095,A wooden park bench siting next to a park. +102598,there is a dog playing frisbee in the snow +210736,A booth with salesman trying to track down +233950,A man kiteboarding on top of a snow covered ground. +224848,A couple of zebra standing next to each other near a tree. +335800,A street sign with flags on it and a building in the background. +124952,The bus and the car are driving down the street. +161962,A picture of a building and some grass. +269105,A white toilet sitting next to a green wall under a picture. +207898,A plate that has different food on it. +538463,Passengers gather to board oncoming black and red train. +399636,A group of people at a table in a room. +84540,Two people on bicycles riding next to a building. +368218,A white plate topped with sausages and veggies with gravy. +223740,A guy cutting a pizza on a long counter. +244401,"Carrots, lettuce, broccoli and variety of vegetables on a board. " +417696,Gold tone clock tower inside a shopping mall plaza. +275020,A bucket filled with two fruit filled donuts and a cup of custard. +478093,A white air plane flying in the air with its landing gear. +392990,some people playing tennis for a large crowd to watch +191078,Elderly man examines fruit on display in a store. +127788,"Bike racks lined up along a road, filled with bicycles." +363830,A big bathroom with a couch a bathtub in the middle of the room. +576822,Two giraffes in an enclosure with their necks and heads touching. +314412,A FULL PLATE OF FOOD SITTING ON A TABLE +267321,a black and white photo with pops of red in color +208871,An older man carrying a plate of food and making a silly face. +312078,A man riding a wave on top of a surfboard. +128119,The bus has bikes on the front of it +461805,a parked motor bike with a man standing next to it +300471,a cat is laying down on a blue chair +569272,A cat looks at a computer screen while snuggled against a keyboard. +393372,A woman in a tie and blue hair. +455170,A pedestrian crossing light in front of an irish store. +447460,A young boy eating a hot dog on top of a paper in a basket. +328368,an old man with a white dog on a leash and a bench +345229,A boy is standing on the beach and looking at something +72507,A train pulling passenger cars on a train track. +577783,A Delta aircraft is parked at a terminal while maintenance men attend to it. +213649,A city bus driving down a city street +86625,A man with goatee opening a fridge with shot from inside fridge. +340015,A large pizza with meatballs and tomatoes on top of it. +73927,"The batter recoils just after swinging, as the catcher sits crouched with his glove out in front of the plate." +55722,A group of cows stand next to a fence. +24207,A shaggy haired sheep looking up in a field. +22861,A fresh pepperoni pizza seems to have a couple of slices missing. +563541,Two men are playing ball with some elephants. +488788,A sign is welcoming vehicles to the business being advertised +58344,A clock in near the triangular roof of a large building. +573214,two people on a motorcycle a car and some buildings +246125,A baby playing with a toothbrush gets a sponge bath from an adult. +303298,A person holding a tennis racket in the air on a tennis court +53344,a person riding a motorcycle on a city street +360986,A bull is cleaning its balls next to a rock. +135902,A red and yellow train is shown on the train tracks. +98194,Two black and white dogs in front of an abandoned truck in a wooden area. +6091,The stop sign is clearly visible at night for us to see. +70813,A cozy bed stands between two windows within an upstairs bedroom. +500718,Several airplanes are parked neatly in a row. +210846,A person dipping a sandwich into a bowl of soup. +435391,Two women sitting in the back of a ski boat with a black dog. +225738,A group of giraffes standing up in their natural habitat. +299493,A yellow city bus going to walmart and the hospital +310804,Zebras and Water Buffalo graze for food together. +97502,A man sitting on the ground looking like a zombie. +563281,An old picture of a baby holding a record in his hand. +127259,A block of pigeons gathered around a person sitting on a park bench. +228144,"A chair sitting in the middle of the room, in a black and white photo." +626,The clock tower is in the center of the building. +262509,A small boat sits on the water next to a city. +534554,Baked dish on long metal serving dish on wooden table. +433103,Several children are seated in a row and holding electronic keyboards. +562227,A city train passing under a walk way +211604,A young girl lays on a wooden floor while clutching a tennis racquet. +103856,a glass walled shower in a small bathroom +347724,A basket full of fresh grown carrots next to other vegetables. +99269,Miniature fruit and chocolate chip cookies are ready for the doll house occupants. +316396,A group of giraffe standing next to a tree. +82986,Two men watch another throw a Frisbee in a field. +289073,A close up of a red fire hydrant next to a light pole. +333020,Woman holding a mechanical device attached to the side of a wall. +401004,Several people sitting at tables in front of a bar. +31893,A cat standing on top of a bag of luggage. +45586,A calico cat sits on a cushion on a bench. +551154,A white bed with a couple of pillows on top of it. +461802,A red train sits in the station while a worker passes. +268941,a large white boat at a boat dock +86845,A bus that is pulled next to a sidewalk near a large building +120831,A bench sitting in a grassy area. +354398,a black and white photo of an old car on a street +490688,A gourmet hot dog presented with a side of couscous. +422893,Two people laying on surfboards riding a wave. +534151,an elephant in a field of grass with trees near by +75696,an image of two men standing in front of a Christmas tree +530259,"Plates with food on, a cup of coffee, and plastic utensils on a wood table." +328814,Two black bear cubs wrestling around with each other. +565245,a processing machine with a bunch of doughnuts on it +551559,A zebra in a cage at a zoo next to a walkway. +279097,there is a city bus that has stopped to pick up passengers +223032,A dog holding a white frisbee in it's mouth. +89459,A walking street sign under traffic light covered with stickers +157944,a close up of a tv with a man wearing s suit and shirt +424146,A table topped with three computer monitors next to a green plant covered wall. +45433,A snow skier is on the white snow. +134981,two people standing in a strong snow storm +318571,A black cat sitting in front of a mirror next to a picture frame. +232654,A baby sitting in a high chair eating food. +29838,A dinner plate with grilled veggies and some bread. +283264,A pitcher is throwing the ball in a baseball game. +35567,A lady with a young girl standing in front of a few english muffins. +403951,Harvest display of vegetables and wines on a shop counter. +279103,A blender has some sort of liquid inside. +50960,cakes on a plate on a table along with a cup and a fork +412184,An airplane parked in front of a small airport. +195800,A street with people and cows walking down it. +499349,LOOKING AT A WINDOW FROM THE OUTSIDE IN +364703,a red train on a train track below power lines. +76176,A man holding a turkey he has just taken from the oven. +391584,A very tall brick building with bricked up windows. +257471,A living room with lots of furniture and a TV +74124,A couple of men standing next to a bush on a rural road. +102805,A man in holds a Frisbee in the parking lot by the river. +538721,Man putting laptop in bag while another Man is sleeping. +558234,A woman in a white dress standing over a multi layered cake. +236068,A man in a suit and top hat talking on a phone. +545220,A person that is skiing in the snow in the day. +500464,Bathroom with a white tiled floor and sink. +15883,Cook preparing a meal in folded bread at a food stall. +452674,Small black bird standing on a wooden table or deck. +576052,A female horse rider mounted near a body of water and mountains. +138397,Many old fashion nick-knacks are all neatly placed. +315962,Woman in shades and cap sit on beach chair under an umbrella +566543,A group of girls is playing soccer as the goalie tries to catch the ball. +60246,A newly married couple standing in front of a cake. +270351,A grop of pigeons in front of an open window +317575,A plate of unusual food combinations including an egg on mashed potatoes mango and a chocolate on a plate. +251075,A bathroom with a vanity mirror toilette and kitchen sink next to a shower. +168375,A black and white cat sitting inside of a cage. +260025,A dated image of a newly married couple cutting a wedding cake. +280498,A kitchen that is very clean in a house. +370208,A bike parked in front of a parking meter. +375405,Two white doves huddle close together while sitting on a branch. +142924,A man standing on a tennis court holding a racquet. +188795,The clock tower is an impressive view with the lights at night.. +170716,"The girl is cutting pizza in her kitchen, the melted cheese clinging to the knife." +519853,three people wading in shallow waters with a frisbee flying by +340034,A small child is sitting on a toilet with an electronic device. +37629,a close up of a sheet of pizza on a table +172498,A full shot of a big yellow bus. +398866,A man standing next to a giant elephant. +199117,A couple of men standing and sitting in front of a store. +395405,A living room filled with furniture and a table. +205258,a man with white and blue on playing tennis +501029,A series of photos showing how to make a smoothie. +499007,A group of elephants walking in dry grass. +342814,A couple of green buses driving next to a roller coaster. +113051,A boat traveling into a water filled tunnel. +146315,A group of three men standing next to each other. +426835,"Two boys at outdoor picnic holding hot dogs dressed similarly, jeans, yellow sport shirts but with different caps, one yellow the other red." +15267,A cat laying on top of a table in front of a mirror. +445668,A sandy beach with colorful kites flying over it. +499313,A deep dish and thick crusted pizza with toppings. +218997,A group of baseball players standing next to a kid on a field. +307292,A man in a suit and tie wearing a wedding ring. +242940,"A stop sign at an intersection, with Hammer time and a person's picture displayed on the sign " +469687,A bird flying through the air while flapping it's wings. +506416,A train is travelling on a railroad track. +47471,"Multiple people on a beach, some playing with kites." +470545,a close up of a plate of food with pizza +184633,A bunch of bananas that are in the back of a truck. +544956,Three women sitting on a bench in front of a painting looking at their phones. +115106,A bird sits on a roof with a tree nearby. +269964,A man standing on a tennis court with a tennis racquet. +551692,A ship traveling along a body of water. +114164,A herd of zebra walking across a dirt road. +14285,A cat sleeping on a bed with a small TV in a bedroom. +366873,"Eggs, Biscuits and gravy with coffee and a cherry danish." +360409,A woman in a wet suit surfs a wave. +28452,An open refrigerator door on a kitchen floor. +467151,An image of a girl running above an image of a bench. +429290,A young man holding a yellow frisbee in his hands. +331817,A persons arm reaching over a table filled with food. +161978,Different people are doing skateboard tricks and riding. +395557,A room filled with a pile of black umbrellas. +367747,A train on some tracks above a city area. +421566,A young child eating a pizza at a picnic table. +357943,A LOT OF SHEEP IS IN THE GRASS WITH A SHEEP DOG +42685,a crowd surrounding a large pizza with four sections of different toppings +364580,A living room filled with furniture and a lamp. +380487,A little girl is sitting on her bed that has a flower bed spread. +547962,A crowd of people gather outside with their umbrellas open. +578391,A woman holding a wooden piece of art next to a laptop. +107020,half of a birthday cake with an angel decoration on the top of it +231037,there is a surfer that is riding a wave in the ocean +149431,Sailboats parked at a dock on a calm lake on a clear day. +420775,a man wearing a backpack and green jacket +235352,A refrigerator has it's door open and is full of food. +547341,A person with braces is biting into a sandwich. +579982,A dried up tree trunk with birds on it's branches. +360629,A red partitioned plate with various types of food. +234779,A couple of plates topped with sloppy joes. +262933,Are these black bears fighting or have they found their dinner? +417520,A cat sitting on a table outside with a dog laying on the ground +532876,A skier standing in the snow next to a yellow and blue train. +113113,A basket filled with lots of fresh produce. +316741,A small refrigerator with lots of food packed inside. +504702,a person is flying a kite in the dirt +423008,A group of boats with passengers docked at a fenced wall with a crowd at the fence. +118450,A bunch of bicycles parked on the street with items sitting around them +570586,A mirror shows another light in a background of a wonderful bathroom +91954,OLD RUSTED BOXCARS STILL SITTING ON A SET OF TRACKS +483849,A vase filled with green leafed flowers on a window sill. +225721,Two people in lab coats are doing something they pulled up on their laptop. +522638,A teddy bear and a stuffed monkey sit side by side. +245440,A river with a bunch of colorful kites flying over it. +42,This wire metal rack holds several pairs of shoes and sandals +296393,A child stands away from a woman and and another child and they all carry umbrellas on a sidewalk. +461245,"group of giraffes mingling in a stand of trees +" +456525,A sandy beach with people laying on cots under umbrellas. +22113,a red white and green fire hydrant and a fence +184606,A dog is standing in floodwater beside a house. +115584,A man riding a wave on top of a surfboard. +432160,A pile of luggage sitting on the floor of an airport. +377999,A small sailboat docked at a local shore. +41550,A room with large curved desk with lots of chairs. +412440,A piece of pizza sitting on top of a plate. +252135,A man sitting next to a woman on a couch holding a game controller. +150875,A large stone bench sitting next to rose bushes. +89861,An indoor train platform and tracks with a passenger train pulled up next to the platform. +426578,A person on the beach next to the ocean. +7873,a woman on her cell phone in the middle of a market place +39430,Two sheep are looking over a cement wall. +492562,A mountainside with a railroad of trains passing. +300039,A person looking at their cell phone at another person taking a picture. +18531,Mushrooms are used in many variety of dishes +161781,A woman in gear skiing down a snowy slope +68204,A group of people standing in the sand with a kite. +449660,Two cats seen from behind sitting by a window on a carpet. +198492,Two girls sitting at a table smiling and eating and drinking. +414261,Baby bear climbing large rock near pine tree. +318138,a girl is playing with a video game controller +355418,a small bathroom with a toilet in it +201899,A young man wearing a red shirt riding a black skateboard. +328316,A no left turn sign hanging from the side of a wooden pole. +89614,A street sign is affixed to a traffic light and a tree looms in the background. +84463,Man holding up three almost empty glasses of wine. +389004,A plate filled with two sandwiches cut in half next to a bowl of tomato soup. +174062,People are watching a man on a skateboard. +507087,A group of surfboards laying on the beach with a person carrying a surfboard back from the water. +455943,An airplane high in the sky flying overhead. +310703,An old abandoned train at the bottom of a mountain. +328777,A larger passenger jet flying through a blue sky. +356953,a large lake with a couple of guys on a boat. +132362,A table filled with lots of different bowls of food. +182417,A beautiful dessert waiting to be shared by two people +115118,a train of many colors is coming down the track +437010,A person holds a finger over one ear when listening to a cell phone on the other. +19275,A picture of two kids eating some food. +14526,A train traveling down train tracks next to a building. +417668,A sub sandwich on a plate with sides. +324638,A group of people standing around a table with food on top of it. +185409,A herd of zebra in a grass field. +260257,A red stop sign sitting below a tall building. +232596,A pile of cut hair on top of a comb and pair of scissors. +306099,LARGE COLORFUL OUT DOOR FRUIT AND VEGETABLE STAND +107205,A man standing on one foot holding a skateboard behind him. +44220,A couple of people standing in front of a TV. +200605,a woman holding an umbrella walking down a wet sidewalk +139971,A bathroom with white urinals amd sinks and brown stall doors. +210404,A cake sitting on top of a table. +248920,A hotdog next to a plate of chili cheese fries on top of a table. +81061,A couch sitting on top of a field of grass. +95441,A flock of ducks walking along a muddy road. +506127,A woman sitting on a bench in a field in front of a pond. +495288,A blue and green plaid tie with a flag pin on it. +483941,A red and white fire hydrant sitting on a field of grass. +160498,"A chair next to a desk with a lamp, a monitor, a notebook and paper items." +316123,Children are playing soccer in a field of grass. +409331,A man with a camouflage umbrella hat is taking a picture. +453634,A bathroom with a toilette with it's seat down. +228309,A puppy laying on a purple blanket on a bed. +158222,A very orderly office with a bed in it was very well lit cause of open windows. +465537,A red car parked in front of a parking meter on a street. +99707,A woman standing next to a sign on top of a snowboard. +347142,A men's public washroom with a blue floor. +245006,A cat laying on top of a couch on top of a pillow. +139992,A woman holding an umbrella while crossing the street. +135210,A child holding a Motorola cell phone in its hand +569001,A tray that has plates on top of it. +312213,A cat sitting by a laptop but staring at a person. +427876,A stop light with green arrows on Woodbine Ave. +57265,A woman walking down a street holding an umbrella. +311950,A hot dog on a bun covered in ketchup and mustard. +510150,A stoic looking cat sits in a green bowl. +486290,glass figurines sitting on top of a table. +420234,A catcher kneels as a batter prepares for a pitch. +311744,A cartoon rabbit advertises for a healthy breakfast. +327663,A group of horse mounted police standing in front of a crowd. +173161,two people walking on a side walk sharing an umbrella +184531,A custom motorcycle sits in a car show +243316,A goat standing next to a tree in the open. +96615,A small kid and a man with some food. +274538,A crowd of people standing on a sidewalk holding candles. +288403,A group of boys playing a little league baseball game. +503980,a person holding a clear piece of glass or plastic +558594,City posts with street signs and lights on it. +236954,Two dogs are is sitting in the back seat of a car. +505663,A large clock hanging from the side of a building.. +249792,A man wearing a red neck tie while wearing a checkered shirt. +95899,A red stop sign next to a blue street sign. +191925,A baseball player holding a bat next to home plate. +338050,"Groceries, including greens, juice, and bread sitting on a table." +350833,A cream colored bathroom is clean and empty. +449828,A man on a surfboard in the water. +510857,A group of people riding sailboats on blue water. +393421,A room is shown with a bed and luggage. +184789,A airplane in the overcast gray sky over tarmac +22628,a person holding a surf board on a beach +135275,A small blue car on a city road. +9156,"A Subway Sandwich with chips, raisins and a coffee cup." +93803,A large crane truck driving on top of wet mud. +6211,A wall clock reading the time eleven twenty. +442585,A small enclosure for different types of animals. +345849,two toys for children to ride on mounted on springs +241882,A boy practicing his techniques coming down the ramp on a skateboard. +144863,A man eating a hot dog covered in ketchup and mustard. +63434,A man with a white shirt with a blue tie. +66239,The stop sign has writing on the front side of it. +356632,A man standing in a room holding a game controller. +344909,A red and gold painted fire hydrant on the street +372620, A young man riding a skateboard in a car garage. +398066,A young man holding a baseball in front of a pitcher. +511554,A woman posing behind several bunches of bananas +148128,A man standing next to a white frisbee flying over a field. +228464,A photo of the building with focus on the clock. +402433,A pizza sitting on top of a pan in the oven. +84389,A bench on top of stone tiles surrounded by trees. +302067,a bunch of people playing baseball as people watch +52759,"An airplane sits on the tarmac of an airport, with a disconnected boarding gate." +39368,A large bus parked on a handicapped parking space. +168162,A man jumping a brown horse over an obstacle. +577073,A man riding a board on top of a pile of snow. +123244,A man with his foot on the face of someone lying on the ground. +53870,a personnear a table with many plates and boxes of pizza +388290,A wooden area on a ship with lots of food. +524535,A person is holding a pan full of donuts with blue icing. +126345,Elephant eating leaves from tree standing on grass. +507211,A surfer rides a wave on a sunny day. +240751,A very cute zebra eating some green grass. +105812,A white plate with a cut in half sandwich on top of it. +491470,"A snowy, icy, empty city street and a stoplight." +524061,A skateboarder performing a trick on the edge of a ramp. +405635,The view of a hotel bedroom set up. +387576,A teddy bear tucked into bed under a blanket. +516766,A white teddy bear sitting next to a brown teddy bear. +196660,"A surfer, surfboard under his arm, near a no swimming sign on a beach." +66243,a man holding a blue snow board in his hand on the snowy mountain +523811,A small bird perched on a piece of wood. +388215,"A man reaches into the air with a tennis racket, in an attempt to hit a flying tennis ball." +445792,there is a woman sitting on a couch playing a video game +312033,A young boy holding a baseball bat on a field. +293537,The man is holding a package of a brand new toothbrush. +555366,A black and white zebra stands in a grassy field. +84064,A bathroom with white tile and a beige toilet. +564657,A bathroom with four urinals and a drain on the floor. +376900,A tennis player prepares to serve a tennis ball. +309316,A woman firefighter standing next to the fire truck. +250730,A man riding a bike down a dirt road. +500952,A red train traveling under a bridge on train tracks. +34056,The man is making a cheese pizza in his kitchen. +307341,a person riding skis on a snowy slope +332377,A red frosted donut sitting on top of a table. +222054,a large citi bus in the street around some trees +376365,A glass of milk next to a round purple vase. +152543,A group of young people are sitting on a concrete divider. +301486,Assorted food items displayed on trays with condiments on table. +495786,A horse drawn carriage traveling down a street. +78683,A boy with a bat at a batting cage. +333998,A man with luggage in the hallway outside a small kitchen. +555110,A plate topped with a cheesy veggie tostada. +498400,Three skinny white cows are walking down the street. +97924,Three people are loading a horse into a horse trailer. +166166,A wooden table with a vase of flowers and a television. +167074,A man standing next to a red and silver fire hydrant. +137003,A small girl is holding a large triangular kite. +303358,three elephants are standing in a brown field of grass +238525,A group of giraffe standing and sitting on a field. +320039,a close up of a child eating food +356379,A row of park benches with flower beds hanging next to them. +459304,The skateboarder in the helmet is balancing on the half pipe. +460266,Partially eaten cake on a white plate in a restaurant +426714,A cat lying across the top of the microwave +164899,A woman sitting at the end of a table with a plate of food. +19176,A field filled with baseball players playing a game of baseball. +551602,A lone zebra is eating grass in a field. +380834,"A black and white photo of four people, one rowing along a lake." +18770,A man in a suit with a blue tie and vest. +199203,A nice looking kitchen with a shiny metal oven and microwave. +255482,A blue turboprop airplane races across the blue sky. +410638,A man is posing with two young boys holding rackets. +61171,A herd of black and white cows eating dry grass. +112372,A large double decker bus driving under traffic lights. +442609,A messy kitchen with pots and pans laying around. +137120,A man flying through the air while riding a snowboard. +435081,a collection of various food pictures mostly of desert type items +499577,A young man wearing a tennis racquet on his back. +171788,A man is in action with the ball on a tennis court. +419408,A man riding a skateboard over a rope. +361923,A green truck with a snow plow next to a yellow vehicle. +347335,"A plate of food with meat, eggs and potatoes." +226903,"A table with many different objects, including a plate of sandwiches. " +473896,A short black and white clock tower above a sign +558717,A couple of women standing on top of a beach next to a beach. +513073,A person's feet are shown in front of a small tv. +41212,A soccer player is preparing to kick a soccer ball. +352307,A water buffalo with long horns standing in a wooded area behind a wire fence. +355819,"A baseball bat, ball and glove laying on a playing field" +190829,Separate men sitting on park benches playing on phone and reading. +407168,A train next to a station as a man walks beside it +286450,A large black train on a train track. +369045,People are standing near a tall steeple with a clock. +440409,There are two signs on the traffic signal. +321810,A black dog holding a red and green frisbee in it's mouth. +89045,a living room with a couch and piano +453438,A large stuffed bear on display in a room. +428175,A heavy old truck sits in the dirt. +567390,"A white plate topped with meat, veggies and gravy." +192699,Two people stand near a bike wearing helmets. +549450,a man being goofy while brushing his teeth +12204,a couple of giraffes that are standing in a fence +197716,A bus parked on a street next to a tree. +379070,A road line with blue fire hydrants next to a sign. +486479,A large white dog laying underneath a bed. +441543,A group of people with one person holding up a huge different color umbrella. +493613,A pair of shoes flips over a skateboard on a road. +443361,"A couch, fireplace, and other furniture sitting in a roo" +561399,The man has his hand on a rack of small yellow objects. +536078,A group of men on a field playing baseball. +357498,A man juggling while standing on top of a sign riding a skateboard. +524064,A couple of men riding horses down a street with tall buildings. +530590,A man's hands holding an iphone with a brightly lit screen. +427965,a living room with a couch some chairs and a tv +316147,A man leaps up to hit the tennis ball during a match +318566,The young woman is taking a selfie in the museum. +345252,A boy waring headphones is playing a game on his computer. +136411,A stop sign with graffiti on the 600 block of Newport Street. +457436,"Two artic skiers dressed in orange gear, snow ski across a frozen plain." +65035,A book and a watch in the background and glasses in front of them. +224802,Three British Airways jets lined up at a terminal. +248395,A tiny bat is held by someone with a camera +476035,a bunch of people standing in front of some pizzas +331289,A group of people on motorcycles waiting at a traffic light +24195,a yellow bus that is next to a curb +219344,A stuffed teddy bear wearing a blue neck tie. +180232,A squirrel eating a piece of fruit in grassy area. +9769,The pick up truck is plowing the snow. +212646,A white stove top oven sitting inside of a kitchen. +309610,A woman standing on top of skis on a snow covered slope. +78381,A baseball player is being tagged out during a game. +257215,A man cutting carrots on top of a blue cutting board with a knife. +134096,A calico cat drinking from a sink faucet. +531816,a little girl in pink holding onto a pink teddy bear +460243,This baseball player is swinging his bat at the ball +504790,a man biting into a sandwich while seated at an outdoor table. +189828,Grey plane taking off above some green vegetation. +260510,A glass bowl with an orange in it. +422432,A pickup truck parked on a street near a crowd. +363432,A woman walking past a man in a train station. +535135,A surfer is riding a very large wave. +45912,A couple of large suitcases on the ground. +141017,WOMAN AND CHILD STANDING IN THE ALL WHITE KITCHEN +74035,A large dog laying on a blanket on a couch. +288002,Four jets fly overhead trailing smoke with a clear blue sky. +421882,a little bathroom with just a toilet in it +128568,A floral arrangement with flowering twigs in an orange vase. +359451,a number of motorcycles parked near one another +153709,A surfer carrying the board underneath it's arm. +169089,A couple of girls riding on top of surfboards on a wave. +458810,A camera and a tape recorder charging on a table. +371309,A young man is throwing out a pitch at a baseball game. +46463,A hand holding a sandwich above a plate. +514860,A man sitting next to a woman at a table. +289992,"A plain, white bathroom with a sink and a tub." +430056, A cut in half sandwich sitting inside of a microwave. +16977,A car that seems to be parked illegally behind a legally parked car +262736,A dog is jumping with a Frisbee in its mouth. +255917,A cluster of traffic driving towards a capital building. +147556,An elephant standing in the middle of a tent. +361481,A small bowl of peppers on a counter. +497031,A child cuts pieces of pink fabric with scissors. +462982,A white toilet in a bathroom next to a sink. +102330,A man holding a slice of cheese pizza in his right hand. +197880,A girl on a bed sits near the corner of the room. +404780,a person on the beach while playing with a kite +88109,An adult and child zebra that are standing together in a field. +580608,A green bottle with a label on it with a plant growing inside. +432213,A sandwich that is next to some fries. +570995,Cat standing next to a dog laying on the bed +320796,there is a elephant that has a red cape or cloth on its back +149909,A grey and white bird in water with a fish in its beak. +268394,A truck cake sitting next to a Ford emblem cake. +2587,a close up of a banana and a doughnut in a plastic bag +163112,Man sitting outside in a blue coat about to stand up from lawn bench. +50165,Small train running down the tracks in the middle of a field. +78703,A man with a scarf on his head standing in a big grass field. +279078,a close up of a person in front of a refrigerator with its door open +8179,A green traffic light above a street with a car on coming. +392991,A white cake with chocolate being poured over the top of it. +524601,A group of young people playing video games. +315864,A cake topped with M&Ms sitting on a tray. +562347,The young couple smiles close beside each other. +503210,a striped couch a picture a clock a mirror a plant and a lamp +75636,A pizza and a salad are sitting on a table. +380756,A herd of sheep is on the side of the road and a bus drives through. +19592,A man sitting on a bench with his tennis racket getting ready to play a match. +516827,A horse eats lush green grass by a wire fence +131581,A person on a bike is next to a train on the tracks. +104629,A group of people riding on the back of a boat in the water. +426061,A train in the middle of an area with trees +55375,A woman bathing a baby near a kitchen sink. +221914,A close up image of a sloppy joe on a plate. +301912,A piece of cake on a plate with some juice by it +530941,A group of cattle laying on top of a dirt barn. +15597,shirtless skateboarder going down a ramp on clear day +354572,People sitting under an umbrella looking at the scenery. +41273,"A picture loaded with numerous things all inside. +" +302452,A giraffe drinking milk from a bottle behind a cage. +173825,A living room filled with furniture and a TV. +264336,A man riding a bike through a lush green park. +177927,A well decorated living room with dust covers on some of the furniture. +34869,"A pack of ""Hiragishi Donuts"" in a plastic container wrapped in a rubber band." +171601,a large herd of sheep walking down a dirt road. +277812,Two women who are standing under a umbrella. +378244,A person skiing down a slope next to snow covered trees. +483553,A man preparing food outside of a shop on a street corner. +151988,A picture of two people sitting on a bench. +509192,A woman is standing on a kitchen floor. +68674,Baby sits inside an empty suitcase on top of a bed. +341011,a bathroom with a toilet sitting next to a sink +398992,A girl in white shirt painting a black umbrella. +356648,The man is taking a drink from a refrigerator near a tennis court. +23802,A man wearing glasses standing next to an airplane. +140295,Couple of zebras eating out of the food bin at the zoo +7253,An old-fashioned motorcycle painted mint green and parked on a curb. +84533,A woman dressed in leather poses on a motorcycle. +122747,A man in a black shirt and orange bow tie. +273052,A sheep lying on a hill side next to a tree. +420522,A frosted old-fashioned doughnut sits on a white paper. +491377,A young lady poses for a photograph while holding an umbrella. +132272,A man holds up a glass of wine with a smile. +27946,A bus and taxis on the road in the city. +249623,A black bear walking through a path in the woods. +208806,A very tall flat screen TV on top of a wooden stand. +236909,Kites flying over a large park in the middle of a city. +336001,A kitchen refrigerator and bed mattress outside an apartment. +149903,a man with a surfboard hooked up to some parachute. +45574,A HAM SANDWICH WITH LETTUCE IN A PAPER BAG +347145,A vase that has some white flowers in it. +485123,A street lined with parking meters and cars +185476,A group of people with surfboards walk on the beach. +338108,A man standing next to a little girl on a ski slope. +454854,"The tall, adult giraffe stands behind a fence near a wooden pole." +460866,A table topped with a cup full of toothbrushes. +78371,A small airplane taking off from an airport runway. +358058,A man in uniform holding a musical keyboard. +350133,a black kitty laying on a bench licking its paw +117508,A person riding a snowboard down a snow covered slope. +241155,a subway train at a station filled with people +530820,A man near a fence holding a racquet. +94538,Three elephants and a zebra standing outdoors together. +85881,A guy standing in a horse stance holding a tennis racket. +236671,A woman sharing a smile while looking at a cake. +84031,Baseball game in large stadium with ball flying toward batter +53491,A kitchen counter with a pizza ready for the oven. +454457,The skateboarder makes a jump above a rail and stairs. +2142,A man sitting on top of a bench near some pigeons. +46077,a motor bike carrying very many people on the street +333286,A sheep being pulled by a person with a rope. +557422,A club sign hanging off the side of a building. +484303,CARTOON DEPICTION OF A SNOW SKIER GOING DOWN THE SLOPES +460022,A couple of coffee cups on a bed. +579693,There is a toilet in a narrow bathroom. +497034,A bed with a wooden headboard next to a window. +74181,a person standing next to many luggage bags +126226,A group of guys in a dugout with their gear +105658,a bottle of tequila sitting next to an orange cat. +286036,A group of people ski and snowboard together +454577,An animal standing on top of a lush green field. +391365,A man riding a skate board up a metal rail. +535501,"A shelf with a clock, lamp and various books." +389116,A picture of a man with his cow named Elsie. +174206,A sandwich and coffee placed upon a wooden table. +569705,A plane sitting on top of a dirt field next to another plane. +516408,A cat standing on two legs near a tv. +81228,A metallic red microwave on top of a fridge-freezer +209274,A small train ride carrying people around a park +413971,Two plates filled with hot dogs sitting on a wooden counter next to drinks. +33871,A woman standing in front of a kitchen sink on display. +421010,Two women having lunch together while man stood by them. +478407,A nerd eating a slice of pizza on a paper plate. +578595,there is a sheep behind a fence standing in the snow +250893,A man holding a red frisbee on a lush green yard. +465836,A group of men standing next to each other. +159854,Two young boys playing with a disc in the sand. +337194,A large bird floating out in the water. +207178,Two people standing on top of snow with skis. +15797,A man riding a snowboard down the side of a snow covered slope. +100811,A row of wooden poles with seagulls resting on them. +244815,A woman getting dessert from a food truck +579303,A couple of sandwiches are piled high with vegetables. +377231,A group of three zebras standing in a grassy area. +445211,A man in green shirt holding a frisbee under a bridge. +158414,A bus is displaying rider information pamphlets at the front of the bus. +574785,one teo three for finb di bu bu +24391,A couple of men standing next to each other at a ribbon cutting ceremony. +406959,A large clock sitting in front of a tall building. +352652,A bike buried under snow next to parking meters. +76731,A pen is sitting on top of a laptop. +256091,A group of zebras standing around in the desert. +417849,A young farmer using a Sunshine Milker machine to milk a cow. +380106,two giraffes in a field with many trees +376442,A black plush toy sitting on the lid of a toilet. +320823,A man and a woman sitting next to each other on a table. +433134,A close up of a black and white cat in the grass. +125076,"A monitor with an ipod, keyboard, mouse, camera, speakers and hard drive tower." +364592,Two opponents are having a game of Frisbee. +560222,a busy street with cars and trucks down it +523174,A cat looking at an elephant on a table +378204,A woman in a blue tank top holding a smart phone. +265433,A dog lays in the grass panting with a Frisbee. +134886,A large jetliner flying over a dry grass field. +499724,Someone holding a pancake with bananas in it. +167155,the bench is completely covered in snow so is the tree +210374,two men sitting at a table one looking at his phone +133098,A group of scattered sheep move down a country path. +115946,A street intersection with old buildings in the background. +179948,A traffic light next to a set of stairs. +307145,A kitchen with old wooden cabinets and a stove top oven. +112065,a person holding a game remote next to another one holding a beer +234031,A man wearing glasses talking on a phone +70935,A woman preparing to hit a tennis ball while a man watches. +469174,The plane was flying high near the flag in the air +199247,A herd of animals laying down in a lush green field. +530987,A group of people riding on top of three elephants. +73239,Several tables are set up with laptop computers. +183338,a man is serving in a game of tennis +376773,Three people with a baseball equipment standing in an open area. +421401,A vase filled with flowers on a counter top. +530212,A rack of assorted colorful neck ties. +321496,A sandwich in a paper container on top of a wooden table. +66154,an assortment of some colorful vases on display on a table +343692,A motorcycle in a garage-like area by the wall. +191296,A small red fire hydrant in grassy field. +534349,"Many objects, such as a shirt and shoes are in the briefcase. " +39828,a close up of a cat in a sink +218134,"A white, red and blue bus on street next to people walking." +302603,A living room with a television and brown couch has a clothes hanger on the doorknob. +412471,A bunch of suitcases that are on a sidewalk. +119210,A zebra standing next to a fountain and a wooden fence. +83547,A small elephant standing next to a tree stump. +58194,A flock of birds flying in an overcast sky +392229,A white plate topped with sliced of pizza. +382696,A kitchen under construction with a trashcan and stove. +134160,A giraffe laying on the ground next to birds on rocky ground. +307842,Surf boards lay on the sand in front of booths. +399369,A person in shorts and no shirt running in the sand +347023,A man is sprawled out on a wall. +161231,A couple of large long trains on a track. +456679,A man riding on the back of an elephant in a jungle. +396851,Crowd of people walking near trucks outside of large complex. +173704,A person standing on a street with some food. +151492,Man on phone and drink with red hue standing next to a woman +152933,A man in a jacket and hat stands near a street sign. +35326,A stove back splash with a granite design. +542248,A giraffe standing next to a forest on top of a field. +359118,A white plate of food on a table. +355610,"A black and white photograph of a stuffed teddy bear wearing a shirt that reads ""handle with care"" and a small stuffed sheep." +216861,a man on a bike that is walking dogs +308678,two men in in a white raft and a ship behind them +370209,A man in glasses is mixing in bowls near pots on a stove. +578821,A table holds a cheese pizza and condiments on a checkered tablecloth. +470704,A glass of red wine and a glass of white wine stand in front of their respective bottles. +194956,So many stuffed animals and teddy bears in a room. +345397,Man in tshirt and tie with cellphone in bathroom taking picture +253415,MTA F train comes rolling through the bridge tracks. +537153,A couple of people sitting on top of a wooden bench. +271046,A giraffe stands tall beside a tree in a barren area. +300368,Bride and groom looking at wedding cake with server in hand +132143,a couple of big buildings that are next to each other +401250,A person that is doing a trick in the air. +293703,A few men posing for a photo at a dinner table. +302716,A man looking into a refrigerator filled with beer. +405530,A man sitting on a bench looking out to sea. +358048,A giraffe and a boar standing at the side of a pond. +104393,A group of people are playing some musical instruments. +488789,An view of a major city and cars traveling over a bridge. +97610,Two elephants walking on cement next to wall +138316,A lush green field with lots of animals grazing on it. +484651,A glass bowl filled with different kinds of fruits. +135670,A bike behind a rail for safety on a train ride. +160875,There is a group of benches with umbrellas +78748,A group of motorcycles on display for a crowd. +262896,a plate consisting of beef and gravy +210439,A young man catching a blue frisbee in a park. +569289,A plate of beans and eggs with a knife and fork on it. +711,A coffee table sits in the middle of a living room. +514550,a man on a skateboard skates on the sides of a skate bowl +326369,A large polar bear on a toy ice pond in a zoo. +197245,A cat is laying face down on the remote control. +449191,A large man is holding a black suitcase. +136908,A boy is sitting on a skateboard on the street. +199516,People petting and taking pictures of a cow behind a rock wall. +146836,A passenger train traveling on rail road tracks. +454982,Two laptop computers sit side by side on a desk. +96732,"Three people flying kites at the beach, with one kite on the ground." +522782,A triple screen computer set up on a desk next to a bed +92363,Two men riding brown horses down a small road. +228708,A pair of tennis players practicing in an outdoor tennis court. +299838,A man wearing a blue shirt and white shorts playing tennis. +166532,A white bath tub sitting next to a bathroom sink. +303670,a meal on a table which includes pizza in a box and a bottle of beer along with a beer mug +3845,a chicken meal with carrots broccoli and rice +340209,A man wearing a hat standing outside taking a picture. +19443,a motorcycle is hanging in the air with plants on it +300972,three people on a gravel ground playing frisbee +216115,An American Airlines airplane is sitting on the runway +459136,A steel bench sitting next to a wall. +498994,A piece of luggage filled with clothing and materials. +495519,Person riding a four wheeler on a beach towards a bridge. +235787,A sandwich served with mixed vegetables and plated. +74457,A man standing on a beach while holding a white surfboard. +268395,"A bathroom contains a toilet, a sink and a bathtub." +15667,There is a yellow fire hydrant on the side of a street. +98839,A cat curiously looking sideways at a television. +321424,A small aircraft parked on a grass field +137260,A owman is posing next ot wine bottles at a bar. +211294,A fire truck parked on the side of the road. +448256,Three men stand next to a car with its hood open. +316351,A sailboat is sailing past a lighthouse on a brick pier. +423744,This laptop and monitor are surrounded by many wires +25812,A skier skis down a slope near a ski lift. +170517,A man walking a dog down a road while holding an umbrella. +210346,A bird that is flying above the flowers. +171067,A coo coo clock with colorful art painted on top of a clock. +16064,A young man playing frisbee while people watch. +181058,Two herds of yak are grazing on a hillside with a snowy bottom landing. +390368,A white street sign sitting on the side of a road. +54759,A woman in a white dress playing a game of tennis. +143252,Several different types of vegetables laid out on a tabletop. +345224,"A small, yet clean looking bathroom, with blue pained walls. " +237277,"Folded red cloth with a plate on top containing a bran muffin, small tin of cream cheese, and a butter knife, behind which are a red apple and a glass of ice water." +430469,A plate of vegetables is placed on the dinner table. +356092,A white bird sitting on top of a wooden post. +556012,A city street filled with lots of traffic at night. +393557,color photo of three zebra standing in all directions +146120,A WOMAN SITTING ON A BENCH EATING PIZZA WITH A LITTLE BOY +136833,A couple of police motorcycles parked next to each other. +43605,a man holding a tennis racket and playing tennis on a tennis court. +107558,A person wearing a helmet on a skateboard. +544246,a cookie made into a bear with a bib on +118401,A giraffe and several elephants at the water's edge. +97580,a guy and his dog sitting on a surf board +268356,A tall clock tower sticking out of the roof of a building. +157601,Woman sitting at table with beverages consuming sandwich. +264753,A picture of two buildings and a street in black-and-white. +444100,A night view of a city with illuminated skyscrapers seen from across a river. +471578,A church with a clock tower and a bell. +49097,A bike and a dog on the sidewalk outside a red building. +373341,A Fed Ex delivery truck driving head on into an SUV. +360706,A green apple on a wooden cutting board next to peeler. +354685,A woman standing next to a standing toilet. +490629,A street scene with many people on motorbikes. +483013,A brown bear walking across a river near a river. +467467,A group of elephants standing behind a wire fence. +189015,The meal is being prepared in the kitchen. +88142,A bunch of teddy bears all lined up in a row +521719,A close up of several wind kites hanging. +37181,A motorcycle parked next to a car in a parking lot. +517737,A smiling woman and child standing on a ski slope. +457131,Between branches of a tree an airplane is rising in the sky. +363058, A group of people windsurfing in water with a boat in background. +303314,Black and white dog protecting yellow flying disc in open grassy field. +562507,A pizza is served on a dish above a table. +337226,A green and black train sitting on top of snow. +186427,A man standing on top of a tennis court holding a racquet. +561004,Two pizzas sitting on pizza pans on a oven. +21641,A little boy sitting on the floor in his pajamas. +578792,A person is leaning low on their motorcycle on the tracks. +326593,An elephant sticks his trunk out the back window of a truck. +519491,A tall clock tower with a statue on top. +209685,A bird that is sitting on a branch. +244822,A frisbee is in the foreground and a large park in the background +3035,an airplane is getting ready to be loaded with passengers +250345,a pizza with a variety of toppings in a box +349438,A man flying through the air while on a skateboard. +52132,A room with an older model television in it. +211476,Two plastic black containers filled with food on a table. +510095,A man is holding a baseball bat. +220584,a surfer that has fallen off of his surf board +119911,A boy doing a skateboard trick on a street. +52020,A horse eating hay standing in a mowed field. +418471,A close up view of a pizza sitting on a table with a soda in the back. +284548,A red and black train traveling down train tracks. +435059,A person riding a surfboard in the middle of a wave. +205861,"Green,orange,and red vegetables in bowls and bags. " +233527,The bus is parked alongside the road and is empty. +464006,A motorcycle that is on the ground sideways. +452891,A white dog standing on top of a wooden bench. +308587,People are in the water with kites flying over them. +556083,A skateboarder doing a trick on a ramp covered in graffiti at night. +11721,A golden stoned elevator has a clock above it. +49602,A wooden sail boat with white sails floating on a body of water. +192809,A small vanilla birthday cake topped with strawberries. +496531,a stop sign on a pole next to a tree +444142,A man holding a tennis racquet on top of a tennis court. +50148,Two men on stage with an image on a screen. +284589,A bed that is un made with a laptop open +197918,two children stand near various childrens toys in the background +349199,A group of people enjoying a day at the beach. +478386,An old truck is parked in front of the station +568893,"A hotel room with a flat screen tv, chair, and bed. " +248300,A man standing next to a girl eating a piece of cake. +515445,A group of people walking on top of a beach. +403104,Group of signs on top of each other on a pole. +232646,A stop sign at the end of the road. +335099,"Two small dogs are in front of a black iron gate, one of them looking up at something. " +263966,A large grey horse is behind a wooden fence. +572008,A person riding a horse on top of a lush green field. +169800,A woman walking a dog down a street. +282871,a number of benches next to a tree +215482,A batter preparing to swing and a catcher prepared to catch the throw. +309341,A white surfboard sitting in a room before a set of track lighting. +580931,Three birds sitting next to each other on an electrical wire. +50896,A bowl filled with lots of oranges on a counter. +25560,An orange and white cat standing in front of a flat screen TV +23696,A row of bathroom toilets by a green wall. +311877,A one way sign pointing to the left; the sky is blue in the background. +234697,Stop lights are lit up in a cloudy dark sky. +158167,A little girl stands on one leg as she plays with a remote while another person lounges in the background on a couch. +519329,A man holding a tray of glasses with candy canes. +357814,A pretty woman holding a child and a little girl. +40948,a man is outside holding a ball and a racket +575901,a baseball pitcher throwing a baseball to first base +58886,A wooden table topped with two monitors and a laptop computer. +438707,A small bird picking at pebbles on a beach. +340946,A man hitting a tennis ball with a racquet. +559166,A red car driving past a red fire hydrant on a curvy street. +84362,A young child and cat in a living room. +48169,"A woman tennis player swinging a tennis racket with both hands, on a hard surface court." +410195,A man holding a surfboard while standing on top of a beach. +469961,A woman that is standing on ski's in the snow. +9603,A herd of cows walking along a grass covered field. +416256,A cat laying on the floor next to a keyboard. +9270,A young girl eating a piece of cake off of a plate. +32322,A look at a white refrigerator and brown cabinets. +79926,"Long row of elephant, with blue eyes, statues." +441539,"Three people seated on a bench, one with a tennis racket and a fourth standing" +77837,The green bus has a large front window and a yellow license plate. +351335,A man holding a cell phone sitting in a yellow seat. +349841,A public bus driving on a city street. +468245,A white bed sitting in the corner of a room next to windows. +557323,A man dressed in green kicks a soccer ball. +114861,A Styrofoam cup of coffee with a wooden stirrer in it is nearly half drank. +285302,A boy sitting at a table cutting out paper. +266491,Two men riding skies down a snow covered road. +291680,"A group of kids playing team baseball, the catcher and umpire are behind the kid that is at bat." +462931,A baseball player holding a bat walking across a field. +25758,A lady holding a pan with a big turkey in an open oven. +564098,A sheep being pet by a group of people. +317062,A desktop computer sitting on top of a desk. +74349,A snowboarder in mid air after a jump +408830,a colorful motorcycle sitting next to a fence +316862,A counter top with pizzas placed on top of it. +151733,A red and white bus on street next to a building. +564934,People at a train station boarding a train before it leaves. +561750,A luggage cart with a pile of luggage sitting on top of it. +423464,a kid performs a trick off of some steps +80163,A boy playing tennis in a tennis court. +518605,Giraffes and zebras graze in a field with trees. +16161,Five yellow bananas and one orange orange together +92053,"Three plates, spoons and glasses on a dining table" +338065,a large air plane on a run way +369799,A group of kids that are sitting together. +387773,All of the people have their motorcycles parked. +444719,A beautiful woman in short shorts standing next to a river filled with elephants. +473555,a small living room with a couch and chairs +425634,a train sitting on the rails under power lines +122418,Black and white photo of a man in a tie smiling. +165298,A bright red fire hydrant near a stop sign. +75481,a close up of a street sign with buildings in the background +261426,A black square plate topped with a cut in half chicken sandwich. +280370,Two men that are on top of horses on the side of a cow. +442040,Several people stand near a ski lift as skiers dot the snow in the distance. +245651,A large white multi layered cake sitting on top of a table. +78426,A gray cat lying on a desk near a telephone. +330348,A man sitting on a set of steps while scratching his ear. +255934,A baby elephant standing next to an adult elephant. +264155,A group of people sitting at a table with pizza. +22623,Closeup of a cellphone device with various buttons. +134206,"a retro image of women in aprons, some holding clipboards, in a giant industrial kitchen" +34508,A person on a snowboard on a mountain slope. +272713,A animal sitting on a table next to a vase of roses. +555119,"A red truck riding down a street with the license plate that reads "" HT-Stuff ""." +437497,A young man swinging a baseball bat over home plate. +388042,The kitchen area of a RV with the window open. +348913,A white couch with a mattress sitting before a blue wall. +559776,A long haired cat lounging on top of a car. +246231,A tennis player stretches out his racket on a clay tennis court. +322610,A woman walking past a shop filled with merchandise. +393743,A little girl standing next to a soccer ball about to kick it +177802,A professional photograph of a living room looking out onto a patio. +104095,Cattle grazing in field of brown grass in landscape +356298,a train cart is near a white tank +176901,Three people in the snow trying to walk up the hill in skiis. +141135,A man holding a camera and talking on a phone. +22892,A cats sits on the table with a dog outside. +238700,a giraffe and a zebra are standing in a field +214966,A man standing on a tennis court holding a tennis racquet. +278352,Few people playing with Frisbee in the park. +369503,"A kitchen with a clear counter top and wooden cabinets, along with a white dish washer under the counter." +185904,a man in a blue shirt riding a blue motorcycle and some people +135579,"A white plate topped with mean, veggies and mashed potatoes." +161163,"A motel room bathroom with soap, shampoo and clean hand and face towels." +15709,a jetblue plane sits on the tarmac at an airport +406810,A man sitting using a laptop computer and other people watching tv. +115856,A tan clock tower shows the time of 6:34. +310843,several people skiing on a snow hill near evergreen trees +510254,A woman on sitting on top a bed. +164594,"Two men are riding an elephant, a driver and a passenger." +180274,A convenient store's display of beverages inside a cooler. +478159,A desk with sticky notes and a computer on it +309528,a man standing on a sidewalk next to an rv +410344,A large elephant walking next to a fallen tree. +157099,A dog is jumping to catch a Frisbee. +389036,a man setting up his kite to fly +447328,This kitchen has granite counter tops and a stainless steel stove +54011,a fire hydrgon that is out in the bushes +381413,A knife sticking out of the side of a block of cheese. +559067,a dog is sitting inside of a black suitcase +437239,A group of people standing on a field playing disc golf. +439982,A man sitting at a table with a plate of broccoli. +58210,A small brown bird standing on a patch of grass. +130732,a man is shaving in a mirror in a bathroom +460623,A couple of men playing a game of frisbee in a park. +515682,"A glass field with a few chairs and vehicles in the distance, along with people standing in the field and one kite being flow in the air." +59239,a bunch of cows under a tree on a field +221105,Several people looking at books displayed on a table. +435260,"A red brick building as a backdrop, trained elephants entertain a crowd." +89359,The adjacent computer screens near the keyboard show different displays. +7559,A coffee cup filled with different colored tooth brushes. +58539,A man wearing a suit and tie and red hat with a silver buckle. +239260,A toddler on a surfboard in the sand on a beach. +417144,A pile of fresh fruits and vegetables sitting on display. +210522,A group of friends standing next to each other at night. +134288,An single orange is sitting on a table. +372362,Girl holding an umbrella on a horse drawn carriage +425690,An overview picture of a street at night. +98141,a person riding a horse with trees in the back ground +44831,A tall clock tower sitting between a couple of buildings. +506515,A man holds up a laptop computer for others to see. +577631,A table topped with vegetables and a cook book. +534377,An empty park bench sitting in front of trees. +230932,A bunch of statues that have hats on their head. +454610,Two boats filled with lots of fresh produce floating on a river. +105912,A red fire hydrant sitting on a sidewalk. +91136,Some very cute sheep by some very big trees. +201301,a person that is eating little hamburgers by a computer +54965,A wedge of crumb cake on a white plate with a fork. +179563,A man sitting under a stop sign on the side of street. +386908,A row of motorcycles sitting on top of a parking lot. +305223,A rowboat parked at the base of a white lighthouse. +564003,A restroom stall with a white toilet and a toilet paper dispenser. +126064,A person that is riding a wave while surfing. +347099,a sign showing birds are not allowed in the area +244421,A car that is sitting next to a rail car. +563762,"A bedroom with clothes racks, a bed and windows." +428612,A group of flowers is displayed in a vase. +164363,A large wooden block with roman numeral numbers. +315792,A big giraffe up close looking at you. +413626,Picnic tables on a patio covered in snow. +303713,A man swinging a tennis racket at a tennis ball. +534605,Man in motorcycle leathers standing in front of a group of bikes +76211,A clock mounted on the side of a building next to a street. +526486,so many oranges and ripe ones with price labels +40468,A guy on his surfboard surfing through the ocean. +425136,The little girl poses with her dog for a photo. +169885,A couple of young men sitting down sharing a pizza. +152103,White dog sitting on a unmade bed with blue sheets. +244833,A yellow and a green motorcycle in the back of an auditorium. +210342,A crowd of people laying on a beach next to surfboards. +580975,Motorcycles parked in a row in the street. +224530,an image of a man posing with surfboard +372633,A group of people riding skis on a snowy slope. +14557,A building displaying a clock showing the time to be 6 oclock. +230454,The man is posing with his umbrella up. +545007,A clock tower with a statue on top of it +397404,A kitchen area with two refrigerators and a microwave. +391067,a piece of bread with some other food on it +128644,A small plan is parked half on a cement area and half in a field while the ground is wet. +424933,A group of little boys playing a game of softball. +242270,a red and yellow bus is parked some people and cars on a street +123239,This is an image of a sign to pay here to park. +482690,"A boy soaring into the air, doing tricks on his skateboard." +342817,a orange colored cat peering down on some unknown object +534444,Many kites are in the sky at the beach. +38732,A towel rack in a bathroom topped with two stuffed animals. +245049,A stop sign is next to an electronic traffic signal. +412793,The red bus is parked at the traffic signal near other cars. +333294,A small bird standing on a dock on the water. +488500,A woman with tennis racket and ball wearing all white. +36761,A motorcycle parked in a courtyard in front of a small restaurant. +153300,A person is cutting an item of food. +196565,A surfer is catching a wave in the ocean. +203275,A photo collage of a girl hitting a tennis ball and looking over a hedge and a woman hitting a tennis ball. +134231,There is a variety of vegetables for sale. +441453,A man is sitting on a motorcycle while a young girl looks at a helmet. +15735,A hotdog is in a bread sandwich bun. +224289,A brown basket filled with bananas and apples. +142942,Two boats that are sitting in the water. +143333,A man on a dirt tennis court is crouched in position. +349185,a dump truck in field of dirt and straw +329080,Messy bed next to bed with clothes on it in bright room. +396496,a group of people next to a train with a sky background +258291,A white bus sitting next to lots of buildings. +246973,a close up of a street sign with buildings in the background +360624,A person walking down a sidewalk at night. +51040,Some people out in the grass throwing a frisbee +323639,A little girl in a white tennis dress holds up a yellow racket. +478380,A bus driver watching a herd of sheep blocking a road. +378099,A computer keyboard sitting next to a mouse on a wooden table. +564563,A view of birds gliding through the air. +68833,A kitchen that has carpeted floors and wooden cabinets. +225387,a surfer is seen mid air jumping from a wave +431573,A red fire hydrant is leaking onto a side walk. +68650,A man and a boy standing next to a tall giraffe. +477477,A man and a woman riding skis down the slide of a snow covered slope. +307243,A white building with lots of people walking around it. +181591,A man in glasses using a telephone in a salon. +7398,"A meal with noodles, chicken and vegetables. " +426247,A small dog laying next to a door. +213375,A mens bathroom with two uneral's and a tv . +398423,A man holding a tennis racquet on top of a tennis court. +79392,A airplane that is flying in the sky. +214492,Two young men leaning up against a wall wearing ties. +383211,Woman taking a selfie with her cell phone. +260199,"A double decker bus, and cars on a city street." +309859,a kid does a trick on a skate board +227428,A dog sitting on a couch under a blanket. +201550,a bunch of people are walking around outside +501491,a person that is cutting some black and white cake +418281,two cows outside one laying down and the other standing near a building +109600,A person sitting next to a toilet that is sitting on a sidewalk and filled with papers. +469134,A group of bikers assembles outside of a pizza shop. +446881,Living room arrangement centered around TV and a look into the kitchen. +98242,The back of a man has something in mid air he's looking at. +410246,A picture of the head of a brown cow wearing a halter. +41924,Boats floating close together in a calm body of water. +85316,An old picture of a family on their farm. +476313,A bathroom counter with two sinks under two mirrors. +43098,A man is walking down the street in front of a red door. +215376,A young boy wearing a red shirt holding a Nintendo Wii controller. +300701,A couple of people standing on top of a field flying a kite. +180130,a man and woman stand in front of a cake +14029,A person laying on a beach next to a white surfboard. +329379,a sign on a fence with trees on the other side +520862,"A plate of food with shrimp, pasta, and salad." +287320,A white toilet sitting next to a brown chair. +524186,A big commercial plane flying in cloudy skies. +258789,A field with a cat and chicken next to a fence. +286285,"a desk with container full pens, remotes and other nic nacks" +375763,A very cute flock of sheep in a grassy field. +27789,A man holding a Nintendo Wii game controller. +26176,A person is walking through the snow on skis. +233370,A woman lies on the ground under a suitcase. +179311,A plane that is flying in the air. +175825,a person is riding on a surfboard at the beach +294403,A woman under an umbrella on a rainy day +210671,A bed sitting in a bedroom between two lamps on tables. +80316,A woman prepares to hit a tennis ball on a tennis court. +103379,A pair of scissors standing up with wispy smoke in the background. +301963,"A living area with a rocking chair, dog in bed and fireplace." +357948,"Two street signs read ""Dead End"" and ""College""." +477526,a train moving along the track on a hillside near a mountain +531798,This table has a variety of fruit and vegetables on it. +41257,Photos of two ferrets sleeping in a pet bed +406489,A red train is on the tracks by the grass and trees. +49258,A person sitting in front of a wooden desk with a laptop. +65883,A young boy getting ready to blow out candles for his birthday. +195408,A person with a remote and holding a dog +323739,Single boat near the shore of an ocean. +342448,A couple of men holding white surfboards on top of a beach. +411958,A train traveling down tracks near a loading platform. +24609,A woman riding on a boat filled with supplies. +473219,A man and woman look into each others eyes while getting married. +385962,A toilet and bidet have toilet paper stacked between them. +120771,A man riding a wave on top of a surfboard. +473728,A parking meter with a reserved space bag over it's right side. +239808,A plate that has different types of food on a table. +549907,an elephant playing with water at a watering hole with his trunk +150830,"A living room has a television, a table, and a painting." +53123,A tennis player has just attempted to hit the ball. +6662,A woman that is laying upside down on a bed. +122987,An adult giraffe sits down while a baby giraffe investigates. +251582,A baby zebra drinking milk from a mama zebra's tit. +464872,a couple of zebras that are running through some grass +22257,A herd of giraffe standing next to each other near a forested hillside. +156727,A woman flying a kite on the beach. +197336,Eight different types and sizes of paira of scissors on a red table. +178753,The woman sitting in a red chair is smiling while holding a cell phone. +560111,A red and yellow train car sitting in a train yard. +423113,A person in wetsuit on white surfboards in water. +148286,An elephant and a punk are standing next to a river. +372794,A yellow and green train pulling out of a tunnel next to a red car. +248582,A small group of men are standing next to a fruit stand. +324040,a male is riding an elephant next to some water +193743,A man standing on a tennis court waves to someone. +246248,A red stop sign on the side of a brick road. +88094,A steam train coming through town with houses in the back. +211243,A glass of milk sitting next to a bowl of fruit on top of a table. +127781,a black cat lying under a black umbrella +557926,People in maroon shirts tend to food being grilled outside a building. +83136,A person approaching a kite on a grassy field +354547,a man in a white suit standing in front of some bushes +2685,A group of people standing around each other. +12731,a big long bridge walkway over some green trains +423336,A black and white cow standing next to a wire fence. +38180,A white tanker truck driving down a street next to a bus. +165039,A bus driving in a city area with traffic signs. +180925,A small elephant with a seat on it's back. +441511,Young child in grassy field with ball and flying disc. +459064,A brown and white dog in window sill looking outside. +62230,The basketball players are playing in a game +478184,A lone giraffe is walking along the shore of the water +432626,A man standing in a room next to a man laying on the ground. +224220,People are in a small boat with green oars. +415716,"A beige living room with a cabinet,flowers, lamp and armchair." +10928,A close up of a street pole with several signs. +336777,Many different signs cover a post next to a bus stop. +305876,Orange seats on a train with Yellow doors and lime green floors. +496485,A small boat sailing on a large body of water. +281377,A person's arm holding a surfboard and standing in front of the ocean. +349860,A BOY WITH A BLUE SHIRT AND JEAN PANTS DOING A TRICK WITH HIS SKATEBOARD +235644,Emergency paramedic medical workers caring for an infant on a train station walkway. +250066,A toilet is sitting amongst things have been abandoned. +449567,A group of hot women sitting at a table in front of a pizza. +375915,Pizza on a tray on the table outside next to plates and wine glass +49984,a bathroom simply designed with pale neutral tan colors +201732,A fire hydrant is standing in the middle of a parking lot. +498535,A base ball player wearing a catchers mitt. +167602,A gray and white cat sitting next to a pink teddy bear. +376321,Two cars are waiting at a stop light. +227940,a airplane on a runway with the door open +105349,The car is speeding past a girl on a bike. +547607,A pregnant woman holding a cat with bananas on her head +515241,"Off in the distance, a few people dot the stands and the fenced in area bordering a ball field, while an umpire and three uniformed baseball players, including a batter, catcher and outfielder, strike playing poses in the foreground. " +221183,A copper and orange train on the train tracks. +154892,A man is sitting down with a piece of chocolate cake in front of him with a fork in his hand. +278899,a lot of different types of luggage bags near one another +92648,A town square is full of people riding their bikes and skateboarding. +140661,A living room next to a kitchen and a dinning room. +437370,a large air plane is parked out on a grass field +455352,a bell tower with a clock built inside of it +58483,An elephant with tusks standing in a rock strewn grassy area with two birds perched on top of it. +311465,a person wearing a head band and holding a tennis racket +446743,A baby holding a stuffed animal in a red wagon. +541132,A green bus is turning in front of a grey car. +217078,A man catching a white frisbee on a sandy beach. +278338,A bathroom with orange and white flooring with double sinks +94038,A pair of small dogs lying on a bed. +223955,A man holding a red frisbee while standing on lush green field. +185444,a guy in a half pipe gets ready for his trick +177758,Two women in the snow on skis in front of a large building. +77405,an orange trolley traveling down a brick street. +523097,a women that is eating some kind of sandwich +462809,Baseball players swing at a baseball with a bat during a game. +574790,a lot of cars driving on a road beside a gas station +379332,A man on a court swinging a tennis racket. +44347,A kid bikes with his bag attached to the back. +87956,A man holding a surf board in his hands walking towards the beach. +198650,A parked truck with an artistic design on its trailer. +139969,Several people with bicycles on a sidewalk outside a restaurant. +273712,a refrigerator in a room next to a wall +529939,A man walking toward a line of surfboards lined up along a shop wall. +413900,Men are playing a video game on a wii. +517793,Group of people flying a blight kite with smiley faces on it. +514118,A close up image of a giraffes face while eating. +534270,Man and woman with umbrella hats sitting on top of a bridge. +241350,A ten speed bike is next to a wooden desk. +33270,An India-design living room features warm reds and oranges and an ornate cabinet. +210299,A little boy riding his bike and wearing a helmet +145227,a man that has a medal around his neck +528331,"Two mean stand in a park, one of them wearing a baseball glove." +380720,A man smiles down from the back of an elephant. +268854,a couple of boats that are floating in some water +85192,A woman sitting in a stream using a frisbee to sift sand +355137,Woman cross country skiing alone on a trail in the woods. +102746,a large group of people at a ranch +243418,Man riding an elephant behind two guys on bicycles. +26432,A group of people fly kites into the air on a large grassy field. +426777,Several pieces of a pie with broccoli on it among other things. +301029,Two cups on a table and a man seated next to the table. +552654,A group of people playing with snowboards in the snow. +297442,A person wearing blue shoes riding a skateboard. +389378,It is night time and the town is quiet. +419096,A train traveling down tracks net to a bridge. +113313,Brown bear sitting in upright position in grassy field. +451038,A person cutting up a piece of fruit with a knife. +463452,Man in a suit sitting down and starring +44171,A woman eating a giant doughnut covered in sprinkles. +440037,A crowd of people riding a motorized pontoon across a river. +231758,A group of colorful cows laying inside of a barn. +82312,A brown dog standing next to bicycles in front of a store. +62089,A boy at a skate park practicing on his skateboard. +392665,Two young girls in snow-boarding gear sitting down +412094,A long black train traveling through a train station. +456690,A herd of zebras grazing with a rainbow behind. +347818,A person walking across a field next to a kite. +47524,A person with glasses and a shirt in a room. +432993,A man riding a skateboard along side of a cement block. +410493,an orange tree with fresh fruit growing from it +474499,Towels hanging on an oven in a kitchen +235130,A snowboarder poses next to two skiers on the mountain. +134574,A table topped with four plates filled with food. +498627,A man wearing a USA shirt skiing in the sun. +444496,A bunch of bananas are sitting in a glass server. +326774,A young boy sitting on top of a cow statue. +265635,A pretty young lady holding a briefcase in front of maps on a wall. +521692,A man is standing on top of a snow covered hill. +222771,A group of bikers wait before riding down the street. +309264,Many cages of birds are stacked at a pet store. +480793,The walls outside the small bathroom have a blue tint. +539259,A person on a cell phone on a street. +122589,A sign is shown at the edge of a street. +47191,Man in green jacket walking towards bus stop sign. +459449,"Four stuffed teddy bears having a picnic and ""eating"" sandwiches while having drinks" +120961,A desk sitting next to a showroom of cars in it. +244124,A elephant that is standing in the dirt. +503412,A flat screen TV sitting in a living room. +36252,A woman wading through water holding a surfboard. +472821,Two zebras grazing in the grass under the trees. +187496,People sitting on a bench watching a soccer game. +196141,a baseball player swinging a baseball bat at a ball +358796,"With their legs up on the furniture and the tv on, they sat in a living room setting of a house." +373170,A classroom filled with lots of wooden desk. +179808,"Near a teller machine, several baggies sit on a shelf that holds three bags with orange fish in them." +478474,A truck that is sitting in the street. +38721,A woman wearing a blouse and devil horns hold a cell phone to her ear. +424445,A fighter jet taking off from an airport runway. +203110,Orange streetcar stopped at a pick up point along a line. +272153,a dog walking beside a man carrying a surf board +546388,A man standing next to a red motorcycle next to a orange van. +266831,A person with a camera taking a picture. +39516,Cake topped with fruit and whipped cream sits on a plate. +181065,A herd of sheep grazing on a lush green hillside. +550173,this is a train riding down the tracks +344397,A large jetliner flying through a cloudy blue sky. +62170,An elephant standing next to a tree outside. +473415,a few boats that are floating down some water +397101,A young woman gets ready to serve the ball. +494072,Santa bear sitting in the corner near the curtain. +383337,A hand reaching into a box of donuts on a counter. +83510,A woman with her head lowered cuddling a stuffed animal. +470256,"A kitchen area with sink, dishwasher and refrigerator." +146457,two children being entertained by preparing pizza at home. +6012,There are bananas around another piece of fruit. +574837,A series of photos showing different types of food. +504599,A living room filled with furniture and a library. +114684,A girl sitting on a stone wall and eating. +365168,A plate filled with pasta and vegetables on a table. +368807,"A sign hanging on a wall says ""Don't STOP drinking""" +456143,"A table full of different foods, such as pizza, fries, and a sandwich. " +425762,A plate filled with sliced beef a bun and potatoes. +359270,A man in a suit and tie holding a violin bow. +59201,Woman wearing glasses eating a large slice of cheese pizza. +497009,A young person sitting at a table covered with plates of pizza. +181572,A closeup of an old and mossy outdoor garden bench. +247317,Two people are finishing a meal in a restaurant. +50201,Creative centerpiece floral arrangement at an outdoor event +245481,A railroad crossing sign is near some buildings and cars. +47940,A person sitting indian style on top of a bed. +563797,A large elephant standing in a forest with a red blanket on it's back. +473427,Several bunches of bananas are on a table. +156891,A large television and couch in a room. +273889,A woman walking along a tennis court holding a tennis racquet. +479195,"A fire hydrant on the side of the road, it looks old." +8445,A group of people are sitting on a bench +266562,Closeup of a corner of a metal tray containing three hotdogs. +158005,"Indirect lighting in a darkened room plays across a table covered with the remains of a meal, thereby giving everything, including the table, a basket, plates with uneaten food, utensils and glasses with liquid, a reddish patina." +341164,A man who is riding on a skateboard. +81274,A girl in pink shirt sitting at a table with green cup. +214984,A large brown dog running across a grass covered field. +424545,A grey and white cat laying in window sill next to a curtain. +169991,A slice of pie sitting on top of a white plate. +470070,An umpire and baseball players standing on the baseball field +323853,A closeup of pink and yellow fruit in a tree. +80429,A man holding a bat under a dark chem trail filled sky. +269058,A pitcher throwing a baseball on the baseball field. +442695,A man sitting on a chair next to a black dog. +216457,A street light on a pole outside of a house. +432106,A group of people with pink umbrellas on walkway. +60932,A group of people standing in a room. +341393,A golden retriever laying down on the side of a pool. +8333,A white and red train traveling over a city. +490567,A bathroom with a white toilet next to a walk in shower. +420357,A baseball player in red and white contorts his body as a ball hovers in the air above him. +335132,a large tower that has a clock on top +152012,A group of boys play a game of soccer outside. +415238,The painting is of a vase of flowers on a table. +437325,there is a woman sitting on the couch playing a video game +146855,A girl hanging on a street light pole that has quite a few lights on it. +189773,An older model double deck tour bus sitting on a road side. +347688,A person hitting a tennis ball with a racquet. +211260,A laptop computer is sitting on a desk. +539636,A man riding skis down a snow covered slope. +1948,A man holding a turkey that he murdered. +425925,A large clock tower in the center of a city. +254930,A man holding two cups filled with dessert. +552186,A man riding a skateboard performing a trick. +249506,A wooden table hosts older computers and an outdated laptop. +210241,A long black train traveling past a graffiti covered wall. +506748,"The vase holds two large, pink roses whose petals have fully opened." +477949,An arrangement of brightly colored flowers and greenery awakens a brick wall. +451014,A blue and yellow fire hydrant sitting on the side of a road. +432017,The clock on the side of the metal building is gold and black. +194277,A woman holding a kite in her hands in front of a woman tying her shoes. +190898,A building with large windows sitting inside of a building. +258402,"A couple of dead, stuffed giraffe on display." +563349,A person on a board holding a para sail rope over a snow field. +449963,Screens are everywhere in a business training area. +18824,People are lounging on the beach under umbrellas. +574154,A young woman holding a tennis racquet in front of a ball. +333140,A black cat sitting at a computer desk topped with a monitor. +60132,A man holds a black plate with a square skull in front of his face. +109005,An elephant and a rhinoceros stand not far from each other. +294855,a suit case sits on a top next to some drink +484425,A pizza on a pan sitting in the oven. +465879,a man is sitting on a large horse +242297,A dog in a red shirt holding a red frisbee in its mouth. +61722,The young men in suits are posing on a staircase. +273329,a number of people standing around a table with wine bottles +347965,A big teddy bear sitting in front of a painting of a tsunami. +333956,A parking meter at the edge of the ocean with a boat behind it. +305343,Two cups sitting on top of a gray counter. +180650,a group of people play with a frisbee in a field +222317,Large dog lying on couch with blanket in living room. +44536,A man riding a paddle board out on a body of water. +483401,A man standing in a kitchen preparing food on a counter. +148591,some cups are sitting on top of a toilet +484485,A snowboarder holding a snowboard standing under a sign. +419856,a black bicycle parked near a large branch carrying bananas +136681,Pieces of patterned floral fabric are lined up next to each other. +133876,A lady is in the hospital and sitting in a chair smiling. +558673,an image of a kitchen and joined living room +190995,A man is riding his skateboard down the road. +421360,A woman sitting at table with a man eating food. +154154,A man riding a skateboard up the side of a ramp. +467457,A white bowl with seven naval oranges next to a stack of plates. +321647,A team of baseball players playing a game of baseball. +574810,A cat is seated in a window sell looking outside the window +109907,A puppy playing fetch along the shore of a lake +144334,two slices of pizza sit on a white plate +262677,A silver and red fire hydrant sitting next to a street. +138814,A man on the tennis court is about to use his racket. +126163,A child sits at a table with stuffed toys. +147921,"A beach with umbrellas, boats, and people biking or walking." +502006,Two brown bears walking through a lush tree filled forest. +88846,A clean bathroom that has a sink and a bathtub. +358883,A bath tub sitting next to a large window. +528084,oranges in a bowl around a bowl a marbles +22979,A group of people are unloading from a bus. +510103,A large cake sitting in the middle of a table surrounded by pictures in frames. +353981,large NASA plane parked near the landing stripe next to a smaller plane +274852,Street signs are advising people to proceed while being aware of their surroundings. +192858,A group of women sitting around a table with a pizza on a pan. +509223,A downhill skier is racing against the clock. +335089,A red train with a large engine that's on tracks. +20796,The stop light has a picture of a bike. +234928,a red train is sitting on some tracks +249658,A double decker bus traveling down the street in the day. +494014,Outside of a Chinese grocery in the city. +226197,A man riding a skateboard off the side of a cement ramp. +98187,A man is walking towards his kite on the ground. +9813,A woman guiding a horse that is pulling a carriage +30455,a bed with a pillow and a blanket and some books +94774,Group of people in dress clothes sitting around a conference table. +430760,Big Ben seen in the background behind tree branches. +291930,a man wearing leathers and his black motorcycle +65113,An old looking white fridge in a big rock wall. +101780,A giraffe eating some leaves from a tree at the zoo +91052,A young man holding a catchers mitt next to another boy holding a bat. +513072,Man preforming stunt on skateboard on a road. +20438,A dog is lying in bed with its head on a pillow and it is sleeping. +229647,The giraffes are standing in the fenced area. +371555,A smiling woman reclines in a chair with a newspaper. +492444,A woman and her sons in formal clothing posing by a river boat +67431,"A birthday cake features a syringe, band-aids and pills." +235791,A series of two photographs of a boat on a river. +79653,A mouse is wrapped in its own cord and wrapped in a backpack. +58800,A person riding a skateboard next to the ocean. +483050,A large bed with two lamps on either side lighting the room. +205625,A stop sign sits at an empty intersection. +230598,A group of people standing around carts with fruit on ice. +177486,A black cat wearing a tin foil hat looking off into the distance. +211665,a close up of food on a plate +375509,A laptop computer sitting on top of a desk near a monitor. +239943,A herd of zebra running around a dirt field. +291724,A lot of people that are looking at something. +553165,A boat that is on the sand and people nearby. +72275,"The wooden plate has a banana, peaches, and a green apple." +302275,A couple of slices of pizza sitting on top of a piece of tin foil. +384528,A sign warning no camera and no videos on the side of a road. +290684,A woung woman in white and purple holding a pink stuffed animal. +468124,A double-decker bus is parked in a large field. +509822,a gray bicycle is locked to some metal doors +444626,a plate full of rice and vegetables on top +107234,A man dressed in suit and tie holding a wine glass in his mouth. +503137,A bowl that has food and a fork inside of it. +259853,Well dressed children are enjoying cake at a table +375823,There are several people riding mopeds and motorcycles traveling down the street. +479176,A group of people sitting on strange looking benches. +451120,A woman standing at a table holding a pepper cracker. +538465,Two giraffes on the grass in a fenced area. +505344,A man is bending down by the water with a frisbee. +167110,People are riding ramps on a skateboard in a fenced area. +10678,A skateboarder leans while going down the street +158440,a person riding a surf board on a body of water +200978,Four photographs of Tex-Mex Squash Casserole are displayed. +565045,Blue bathroom with two white towels hanging by the shower. +266099,A large commercial airplane parked on the runway +388983,There is a pickle slice and a hot dog on a piece of bread in a tray. +186073,A giraffe bust hanging by a Rain Forest Cafe Sign. +571857,"In the desert, two people are sitting next to a small propeller plane next to a tent with other planes in the background." +542127,Two skiers flipping in the air with people in the background. +417216,A skateboarder does a trick in the middle of the street. +42102,A young man is dressed in a school skirt outfit. +255036,Three traffic lights are shown and they all read red. +119373,a male paddle boarder water and a swimmer +336101,A man holding a cutting board while making the peace sign. +130419,A woman standing next to two bags of luggage. +217997,A man carrying a surfboard while walking in the ocean. +520659,A white tent with a row of surfboards sitting under it. +409403,Two kids making a smoothie in a blender. +130812,A skateboarder jumping off a skateboard ramp performing a trick. +202438,Two giraffe snuggling each other's neck on a field. +543706,A living room with a fireplace and is very messy. +227898,A street scene with a horse pulling a white carriage. +449038,A large white clock tower sitting on top of a large building. +195559,There are many little sandwiches on the plate. +285882,A plate of pasta with sauce and bread on a table. +104865,A bowl filled with food and a white spoon. +190753,There is a group of four men sitting on park benches. +395343,three vases with flowers inside on a table +209835,A woman looking down at a set of luggage to her right. +384527,The furniture is posed in the room with a sign that says do not touch. +157955,a table that has a train model on it with other cars and things +131159,a close up of a stuffed animal near car pedals +492552,A man with a striped tie and a black blazer +96998,A bathroom sink with lots of lights above it. +240798,a close up of a banana on a plate next to a bowl +441468,A red fire hydrant sitting on the side of a road. +306619,A young lady kicking a soccer ball on a field. +573869,"Nice open stretches of land that is alive. +" +35498,A mouse sitting on the side of a computer monitor. +552371,Close up of two horses inside of the fence +442136,A man looks over a parked motorcycle that has an American flag on the back. +447364,"Kneeling on the skateboard, the rider uses their arms to propel them." +426182,A person in sneakers on a skateboard hitting a cone. +454562,A man is playing baseball before a crowd. +20748,A person is riding a motorcycle with dogs in a cage on the back of it. +218678,A man on a white surfboard riding on a wave. +345380,A dog jumping in the air catching a Frisbee in its mouth. +327961,A couple of horses standing and laying on top of a lush green hillside. +80300,A brown donut on a thin piece of white paper. +297147,A motorcycle parked on the pavement near a building. +385877,A man is holding a Frisbee on his row boat. +190423,A woman prepares to release her bowling ball. +433277,A table topped with three computer monitors sitting side by side. +454978,A motorcycle is sitting on the side of the road next to a sign. +579326,A pile of broccoli and carrots sitting on a wooden table. +364322,many woolly sheep standing together in the field +429633,Black and white historical photo man next to motorized bicycle. +551454,A tall clocktower with pointed top on a street. +410810,A group of Navy men cutting a large sheet cake. +81616,A group of people scrubbing down their elephants +398188,A person wearing all black does a one handed hand stand as he holds a skateboard on his feet. +50926,A group of people flying a kite in a field. +198796,White plate with small pieces of a sandwich on it. +294883,A batter at a baseball game who is waiting for the pitch. +174386,Bananas hanging from the ceiling by attached strings. +47596,A line of people is getting on to a bus. +58384,A herd of elephants standing next to each other. +267862,A guy sitting on his motorcycle while a woman stands beside him +298547,A group of people sitting and laying next to each other. +325969,A dog is standing on a miniature motorcycle. +26630,There is an unmade bed in a Victorian style room. +220106,Many motor bikes lined up on a city street. +514682,A bathroom with a white tub next to a sink and toilet. +95297,there is a man that is eating a very large slice of pizza +77951,"A plate with a slice of bread, green peppers and meat on it. " +240213,BLACK AND WHITE PHOTO OF WOMAN HOLDING UMBRELLA +573094,"A room with chair, bicycle, television and a Christmas tree." +209728,Two birds sitting on a large rock next to a river. +390301,A white and green rusted fire hydrant spewing out frozen water. +460430,A dog in mittens chewing a plastic bottle. +548670,A young boy stands at bat in a park. +469085,A man standing next to other people on top of a field. +139953,An arrangement of donuts and other food sits on a table. +473370,A laptop on a desk in a classroom. +550797,Blue toilet in center of shot with tile floor. +310532,A white sink and toilet in a small room. +134459,A group of people playing Frisbee in a field. +92034,An adult and baby elephant grazing in the green grass. +377946,A yellow food truck parked close to a car +66800,A elephant that is standing in the grass. +434459,A man and a woman cutting up a big sheet cake. +205834,a close up of a dog near a bowl +492102,A passenger train traveling through a tunnel covered with a forest. +502168,a fleet of naval ships in the ocean +224004,A game controller is shown on a table. +36311,A man standing over a bag of luggage. +327624,A herd of zebra standing on top of a dirt field. +45728,Some delicious noodles are being cooked on a pan. +436603,A brown teddy bear laying in bed under a blanket. +417911,A man in a wetsuit surfing a wave on a surf board. +472691,Two slices of vegetarian pizza wait to be eaten +273961,a skateboarder in a black shirt is doing a trick +14921,There are pictures of flowers in the bathroom. +273354,A blurry photo of a train riding along +79408,A red stop sign sitting next to a forest. +302767,A man standing on a board in a body of water. +269395,A pot filled with some liquid and parchment paper. +541952,A large clock tower on top of a church building. +207507,Two cellphones have cute homemade cellphone covers. +371564,A man standing under an umbrella in the rain using a cell phone. +543422,A photo of two people skiing on the snow. +529122,The people are selecting their donuts at the counter. +503814,A street sign on a street near a large building. +349611,A man wearing a black and purple outer garment with a paisley tie. +383359,A person is trying to hit a ball with a tennis racket. +416862,a store with a fridge and some cabinets and a customer +295269,a trey with some cookies on top of it +214123,Group of women socializing with alcohol in house +5443,A person in black jacket on skis standing on slope. +170048,A man jumping in the air catching a frisbee on a field. +147042,"A kitchen refrigerator with numerous pictures held up by magnets, next to counters and a dining table and chairs." +507081,"A kitchen with its light's off, with light coming from an open door." +152245,People and their loads of luggage in line at an airport +351477,Four children in the snow learning to ski. +70256,a man cts into a small cake with his sharp knife +556600,A water surfer is flying with a kite on the beach. +533976,The young girl is sitting at the table eating a piece of cake. +499622,A cop riding on the back of a motorcycle. +166320,A display at grocery store filled with fruits and vegetables next to jars. +76310,A flock of birds sitting on top of a green field. +257992,"At a baseball game, a player swings the bat at a pitch." +64629,A large propeller airplane flying through a blue sky. +579060,A man hits a tennis ball with a racket. +97656,A man riding a skateboard at a skate park. +472282,A catcher crouching at the plate in a baseball game. +555405,Many kites in different shapes and sizes fill the sky. +210654,A pair of shoes sitting on top of a skateboard. +424812,Riding a horse through a field at dusk. +430690,A traffic light turns green on the corner of a city street. +13867,A young person holding a frisbee while standing on a field. +503772,A metallic refrigerator freezer sitting inside of a kitchen. +320893,A bench in the woods surrounded by leaves. +383621,Commercial airliner flying near mast on cloudy day. +452179,The twin beds with the blue spread are pushed together. +383678,A sailboat on land next to a playground near the ocean. +530952,Ducks walking through the parking lot of a Sam's Club. +549261,"A lot of plants, there tops green and stalks are brown." +128891,Two birds sitting a cage perched on top of a branch. +251211,A train coming down the tracks by a road +533140,"Three sheep in a vineyard, two black faced and one white faced" +390298,A man that is standing next to a bike. +428452,A cut in half bagel sandwich sitting on top of a plate. +483525,The photographer used a panoramic view for this photo. +31092,A person on a motorcycle is next to parked bicycles on the sidewalk. +404338,A pole with multiple traffic signs near trees and bushes. +174671,a sand shore line with kites flying above it. +265462,A man riding a skateboard down a bunch of steps. +576412,A train cake sitting on top of a metal shelf. +112949,A person in the snow on a snowboard. +10779,a little boy wearing a tie and a fake mustache +404620,A narrow street has numerous blue pointing signs. +512911,this child is sitting inside a bag of luggage +386553,A piece of bread that is on a plate. +575293,A couch sitting next to a white fire hydrant. +379158,the room has a glass shower as well as a red cross kit +342566,A gang of bikers riding down a street next to tall buildings. +393203,some sheep eating grass in front of a rock +213356,A group of picnic tables with umbrellas with the umbrellas folded down. +333697,Two street signs on the corner of a stone wall. +458311,A couple of elephants that are standing in the dirt. +213799,The dog is laying down underneath the table because he is in trouble for chewing on things he shouldn't have chewed on. +307573,A black chair sitting next to a refrigerator. +350840,A man on a surfboard rides on a wave. +402519,A small yellow bird on a small branch. +99065,A woman is standing in front of a large red and white sign. +527220,A red car next to a gas station sign and parked blue and silver motorcycles. +255627,A man holding a tennis racquet on a tennis court. +22072,A white plate topped with onion rings and a corned beef sandwich. +449480,a person holding a pair of scissors and cutting on a lace bordered white fabric. +175136,Boats are docked in the water near buildings on the shore. +364073,A player in action up to bat in a baseball game. +128907,A city at night with a well lit blue building. +113041,A man running with tennis racquet in hand trying to hit the tennis ball. +461885,A woman riding on the back of a brown horse through a forest. +288290,A group of men sitting in front of laptop computers. +183332,Two women standing in front of a laptop computer. +489907,Sign indicating danger of falling rocks with snow +474186,A cut in half sandwich sitting on top of a basket. +447187,A man is swinging a bat a ball being pitched at him. +31061,A young man is sitting down with his skateboard. +128829,A couple of parking meters sitting on top of a patch of grass. +529636,a large tower that has a big clock at the top +499266,A hand holding a smart phone above a wooden table. +203928,The people are flying kites near the water. +527476,Man in hat standing in front of a blue train engine. +131617,A computer animated girl brushes her teeth while two adults watch. +443347,A young lady showing off the hot dogs she just bought. +67065,A pizza with toppings sitting on a tray. +106073,A man in a black hat with his tie in a coffee pot. +275441,A bike parked in the middle of a sidewalk next to a street. +409217,A plate with meat and vegetables next to a fork. +563712,A tennis player wearing white is holding a racket. +435937,its sunny outside and you can see the shadows of benches +356236,"An assortment of food including carrots, tomatoes, and quiches." +203879,There is a small cellphone displayed between a set of ear buds and two paper weights. +449412,A woman holding an umbrella while walking down a street. +149398,A gold circular clock and temperature display atop a building. +327605,The woman wearing skis and a helmet is standing with skis and ski poles. +163167,a rustic kitchen with lots of stonework and wood accents +121260,A giraffe walking across a lush green field. +78580,A large jetliner sitting on top of an airport tarmac. +384594,A red commuter train passing through a train station. +121143,A large tower with a clock on it near a busy city street. +351715,A skier in a race jumping over a small hill +272949,Two men talking in a crowd on a ski slope. +182227,A horse walking across a river with rocks. +54337,A group of people is socializing at a table. +499594,a square plate with a piece of meat and some mixed veggies +313585,A living room with white furniture and a flat screen TV surrounded by book on book shelves. +458223,a man walks along his bicycle near the ocean +506224,two giraffes standing together beside a fence and wall +269253,A woman holding an umbrella listening to another woman. +334675,Buses of various colors parked in a parking lot. +375461,A man selling bananas and other fruits in a street market to passerbys. +204020,A woman in black dress and cardigan taking photograph with her camera. +539557,"A boat, two seagulls, and a light house." +549508,A group of friends standing next to each other while wearing ski equipment. +377359,A plate of food that is on a table. +434412,A table with a stuffed animal and various boxes on top. +6484,"A cake on a pan with a spatula, a flower white with roses and a white beverage holder." +15565,Two zebra standing next to each other on a lush green field. +19783,a person feeding seagulls on a beach near a lighthouse +205716,A white plate with rice and vegetables with wooden chop sticks. +365503,A bath room with an old fashioned looking tub. +57150,Little girl holding up a big stuffed animal with other children in background. +124975,Two zebras standing side by side in a field. +511654,A man petting a giraffe whose face it over the fence +237745,a man with a hat riding on a surf board +1425,A meal is lying on a plate on a table. +539226,a large plane is flying through the sky +562345,A woman in a yellow jacket standing against a concrete wall. +529234,two old cell phones and a wooden table +255401,A bathroom filled with toilets and a tub next to a sink. +304291,The brown horse is walking on the dirt in the fence. +445606,A bus driving down a street next to tall buildings. +252625,The small street is crowded with small shops. +326420,A man laying on a boogie board is riding a wave. +135167,Scrambled eggs are accompanying dinner foods on a plate. +21198,A woman sitting at a table inside of a kitchen. +486233,A squadron of fighter jets flying in formation in a blue sky. +142667,People look at various food trucks in the city. +330050,A couple of tennis players pose for the camera. +279974,A man holding a tennis racquet on top of a tennis court. +539141,a red truck a yellow crane some water boats and trees +436218,a man with a suit and tie and glasses and a pie chart +408101,A large black bear standing by a tree. +422654,table with small blue and green coat hanging off back of chair +228261,"A very long table full of different kinds of food, which people are lining up to eat" +49005,A pitcher is warming up while the other team watches. +154971,A man kicking a soccer ball whle standing on a field. +573179,A black and white photo of a boy and a horse. +395180,A cyclist pauses near the water to observe a canoe. +207458,A young man riding a skateboard along a dirt road. +178810,A yellow and red fire hydrant sitting next to a tree. +35074,A cat sitting on a pan in an oven. +391011,A row of parked motorcycles sitting on the side of a road. +307800,A woman and some kids sitting on a couch. +191425,A black and white picture of a bird flying over a ocean +176275,Someone is taking a basic shot of the bathroom. +81070,A tree with balloons tied onto it and candles at the base of it. +575822,A teddy bear sitting next to many other stuffed animals. +50485,A red fire hydrant in the middle of the grass. +157271,Two people playing Frisbee in a field of grass. +383549,"A living room with a large picture window features a flat screen television set, red dog bed, chair, coffee table and couch." +306611,Boys playing on an indoor skate mat ramp +75595,The elderly man in a cap is sitting on a wooden bench. +177990,A man is playing on a tennis court. +528276,the man is riding a skateboard around the empty lots +419363,A little girl sitting on a plastic elephant toy. +270175,A group of motorcyclists stay in a group in traffic. +300737,A very cute goat standing in some very tall grass. +289855,The bird is perched alone on the bannister. +288201,A man holding a sandwich in his hand. +143876,Two cats in a vehicle with one laying in the dashboard and one perched looking out the side window. +82846,A red trolley car driving down a parking lot. +513670,A person flying a kite high up in the sky. +527102,A man sitting in a chair holding a yellow umbrella. +183519,A bunch of people inside a crowded subway train. +387244,A fire hose sitting on top of a man hole cover near a yellow post. +416851,A woman standing next to a podium holding a tennis racquet. +68117,A boat that is out on top of the grass. +46327,two giraffes a tree dirt and a hill +552065,A man riding up the side of a skateboard ramp. +347389,A TV sitting on top of a wooden stand. +101246,Group of people watching kites being flown. +352080,A luggage bag filled with various colored pieces of clothing. +216218,A toilet that is sitting in a bathroom with the light on. +49075,A train car has steps placed on the side of it. +396556,A brown dog pulling on a hand holding a frisbee. +35760,A clock tower where the clock is not at the top. +522909,A long haired cat sitting next to an open door. +510643,two flat bed work trucks among palm trees +532780,"a plate with an open sandwich next to a little bowl of soup and a wine glass +" +34428,A man riding a snowboard down a snow covered slope. +176060,Three pieces of sliced pizza on a wooden surface. +154520,there is a man holding on the a kite that hes flying +132682,A very white toilet that is in a clean room. +132931,Two baseball players standing on the field during a game. +369840,A group of man riding a skateboard down a street. +144804,A woman sitting on the floor with a box of food. +381610,A beautiful blonde haired woman taking a pizza out of an oven. +469721,A fire hydrant in the grass behind a fence. +292905,A man and a woman hold a large tray of doughnuts. +279279,Two horses nuzzling each other in a field. +481314,A group of people water surfing in the ocean waters +179599,A baseball player pitching a ball on a field. +374184,A clock is sitting on the tank of a toilet. +275279,This bathroom features a marble top vanity with double sinks. +111788,Three people walking across a beach carrying their surfboards. +1270,Kids playing a game of baseball while people watch. +244737,A large number of a cows lined up at a feeder. +109797,A portrait is hung over the stone fireplace. +207967,A tour bus is parked on the curb waiting +266117,A living room with a black leather sofa and chair. +110435,A woman bathing her dog in the sink +343062,A man swimming in a pool of blue water. +471814,A variety of vegetables are spread over some kind of grill. +375521,Two people outside in snow gear with a snowboard. +512985,A person standing on a beach with surfboard. +504977,A lady sitting on a bench in a very open field. +390048,A black and white image of a man biting a donut. +576875,A baseball player swinging a baseball bat on a baseball field. +45596,A view A large metal structure near the side of a building +163289,A man stares at another man tying a tie. +89487,The man is holding his tie with his right hand. +327433,The wildlife is grazing on the tall vegetation. +374249,a living room view of a table with plants and a tv +267191,Two people are riding elephants beside some trees. +129431,A large elephant stomps around on the dirt covered ground. +341921,A young man sitting on a park bench next to a playground. +238404,A brown calf standing in a field with another cow looking on. +522430,a close up of a cows near other cows +8599,Three people are moving a cart of luggage. +341929,A group of withering flowers by a road side. +220808,A couple of suitcases that are in a terminal. +526723,Man wearing red coats sitting on grass using cellular phone. +132703,A man who is performing a trick on a skateboard. +384635,A yellow train traveling past a field next to a forest. +358799,a large zebra standing on some short grass +6847,A bearded man with an earring wearing a black tie. +212077,A man is riding a wave on a surfboard +290076,A living room filled with furniture and a large rug. +134760,Skiers going down a mountain and riding on the lift. +526721,The cat was eating out of her bowl which was sitting on the floor. +56002,"A man standing in the middle of the room, with clutter all around." +552188,a man in a large park crouching prepared to throw a frisbee +385205,A very cute cat laying on a rug. +103705,A man is laying in a bed next to a window. +578350,A tall giraffe standing next to a tree surrounded by a crowd of people. +248655,a person is standing in the snow in skis +228981,"A smart phone, digital camera and mobile phone on display." +377715,"A young baseball player in uniform getting ready to bat.," +226883,An animal grazing on a lush field of green grass. +576672,A person pretending to light a man on a laptop screen's cigarette. +885,a male tennis player in white shorts is playing tennis +416343,A man and woman that are standing with a surfboard. +481415,Snowy mountain with flags and an air born skier. +344955,A woman eats a burger next to a street vendor. +447611,A couple of people holding knives to the bottom of a laptop. +427311,A commercial air plane taking off from the runway strip. +394352,Zebras walking in the middle of the road +414795,A herd of elephants walking into a large body of water. +207635,A man in black shorts with a yellow frisby. +59501,a cat is laying on a window ledge +85381,An old bus is next to an old train. +66926,Several rows of donuts sitting on a table. +238602,A cat is wearing a pink wool hat. +342521,A woman standing next to a man while throwing a Frisbee. +283498,Plane on the tar mat of an airport. +293855,a bunch of potatoes and tomatoes grilled together +561814,A building with a clock called Cadogan Hall. +472160,A person on a motorcycle with a stuffed reindeer on the window. +255149,a bunch of different colored vases on a table +513280,a very large vase holding some flowers outside +107339,A pretty young lady standing in front of a couch behind a wooden table. +230561,A couple of people with remotes in a room. +110042,"A game at an outdoor fair called ""Ball In The Bog""" +291866,Many pizza boxes are left mess and without pizza +269429,"A living room, complete with couch, coffee table, shelving unit and tv set." +427980,A beautiful young woman eating a giant slice of cheese pizza. +296724,A pink and red couch in a room with a pink rug. +537589,A train sitting inside of a train station near a loading platform. +301438,TENNIS GAME SHOWING ONE PERSON HOLDING A RACKET +320642,A woman holding a game controller as her friend watches. +190637,a small child laying in bed playing nintendo wii +58647,A man on a surf board riding the wave. +32334,Two people are smiling holding empty wine glasses. +422676,black kids lying on a bench posing on a photo +431950,An antique living room with elegant looking furniture. +309514,a person posing for a photo sitting at a table +30958,A woman laying on a bed holding a handbag. +451915,The shoreline of a beach on a cloudy day. +122302,a parking area for motorcycles and bicycles along a street +64495,"A parking meeter next to a wall that reads ""tie.""" +292649,Three people are standing on skis on the top of a hill. +254493,A man is almost touching the ground while riding his motorcycle. +270852,A man and a woman are in the snow with helmets. +103873,Two well equipped men with dogs at a pier. +214737,A large clock mounted to the side of a building. +8190,a man standing on his surfboard riding a big wave +553859,A person is holding a tennis racket on a tennis court. +155179,an upclose photo of a cake with chocolate pieces +342377,"Farmer's market style display of carrots, celery, egg plants and squash." +331799,A woman standing in front of a box handing a woman a bag of food. +326367,Children enjoying pizza out with friends at a restaurant +276549,A family of giraffe standing next to each other. +68765,"A keyboard, mouse, and wires on a desk." +9520,A very big pretty horse hooked to a cart by a building. +209071,Two couch cushions are supported by wooden frames +455633,A man holding a surfboard next to a wave filled body of water. +299042,Two sheep are standing side by side behind a fence. +330186,a kid lays on a surf board while in the ocean +527691,a young woman packing luggage backs with clothing +138550,AN IMAGE OF A FIRED HYDRANT ON THE STREET +144862,A person skis past two people and a dog +196665,An older bald man in a striped suit. +124756,"A green, yellow and blue truck driving down a street." +328200,An adorable brown and white dog sitting between two legs. +62198,A man on a surfboard that is in the water. +531167,a toilet with no tank attached to the wall +480720,A cat looking at his reflection in the mirror. +544583,there is a male surfer riding a small wave +577033,A group of four men riding a rowboat across a river. +193673,There are many bananas on a counter at a market +543090,The inside of a small building with a brown couch. +485333,A white refrigerator freezer sitting in a park. +357317,A business man walking along side the baseball field. +219437,Kitchen area of home with food in oven or consumption. +289960,A person standing on top of a beach flying a kite. +75434,A man walks on the beach holding a surfboard on his head. +6719,A woman in a black wetsuit sits on her surfboard near the water. +488075,The living room and kitchen of a home. +254164,A person walking in a snowy landscape with ski poles +122252,a vehicle got an accident and a police officer looking +484028,A man on a bike wearing glasses riding indoors. +183833,A red stop sign over a yellow pedestrian crossing sign. +198477,There is a car on a street and some traffic lights. +533069,A train sitting next to a loading area near a house. +539302,two giraffes and an elk in the brush +468115,many different colored signs people buildings and a street +19432,a man playing tennis going for a low ball +222118,A woman talking on a cell phone while holding luggage. +96988,A commuter train movig non bridge over water +580746,a field that ha a bunch of sheep in it +73981,two giraffes playing in their sandbox exhibit +359219,Two pizzas sitting in pie pans on top of a stove. +141475,A white pony standing on its back legs with feather wings. +51484,A group of men carrying surfboards on a beach. +151268,A small herd of young elephants are standing in water. +245102,A bright red light that is on the side of a snow covered street. +208169,A large number of people riding motorcycles down the road. +14880,Stop signs on a school bus are opening up. +404462,A black and white photograph of something I cannot quite make out. +500330,A black dishwasher sitting next to a microwave. +238071,"S&B train number 3815 coming down the track, country area." +339890,A woman is standing in the kitchen and holding a thermometer. +168909,A couple of people that are standing at a table with various objects. +117112,A woman and a man holding Nintendo Wii controllers. +266611,"A red and white sign that reads "" Give Way "" ." +531929,A pair of young men play a doubles game of tennis. +22842,Cooked broccoli and cauliflower covered with creamy cheese. +264392,A dog sits on a seat in the middle of a room. +368038,A colorful train sits on the tracks in the sunshine. +377393,Looking down at a beach area and boardwalk that has a circular walkway and clock tower. +152208,A bench with a green umbrella on top of it. +186095,A young man looking after harnessed horses snacking on grass +307703,A person that is is up to bat at a baseball game. +123633,A mother standing behind two baby boys sitting at a table. +230995,A woman sitting on the ground holding a purple stripped umbrella. +392144,A group of avaitors standing on an airport runway. +424998,A city street with cars parked on it under a ball building. +124297,A street sign that is on the side of a pole. +191577,An old woman holding a smart phone while wearing a green jacket. +503983,A very tall building sitting next to a street sign. +461262,a baseball player in a hat holding a baseball bat +487525,a bath room with a toilet a bath tub and curtains +546524,a train on a track near many power lines +148395,A green truck parked in the middle of a garage. +59598,A table topped with a laptop computer next to a plate of food. +360878,A man and a women in a court with paddles in hand. +339058,a lady and man standing next to a fire hyrdgen +500543,A man standing on a football field during a game holding an umbrella surrounded by football players. +432293,An uncooked pizza sitting on top of a wooden spatula. +373422,A green and white bus pulling into a bus stop. +104345,Two planes flying in a clear blue sky. +167486,A man on a bicycle watching someone on stage +223426,A open refrigerator filled with food in a room. +499845,Two men on skis going down a mountain slope. +290070,Motorcycle on platform to be worked on in garage +33731,A young man is trying to pull off a skateboarding trick over a large rock. +19444,A young man jumps to catch a Frisbee on a playing field. +492968,A snowboarder with black and white clothes finishing a run. +577654,"A kitchen that has a stove, refrigerator, and table in it." +500420,A multicolored kite against a blue sky with clouds. +382411,A man holding a tennis racquet on a tennis court. +199122,A baseball player is getting ready to hit a pitch. +522478,A bird sitting at the top of a tree on a branch. +163852,a square plate with all kinds of vegetables on the plate +506357,a drawer full of apples and pears and other foods +326798,A clock mounted on the side of a church tower. +496268,A red stop sign above a no parking sign. +3217,A wooden bench on the ground next to some trees. +265063,Two people in yellow ride horses down a narrow street. +418893,Man stands behind a very large kite inside a building. +27463,A cat sitting on top of a seat behind a steering wheel. +11198,Someone prepares salads as part of a healthy meal. +329568,Some old-time ovens sit on the grass at an outdoor market. +178175,LOTS OF BACKPACKS AND HATS LINED UP ALONG A WALKWAY +48044,a person sitting at a table with a laptop +81661,A computer with cables plugged in is shown. +581253,A zebra grazing on some grass near a stone. +373382,People sitting in the stands watching a man play tennis. +84936,A close-up of a television on white wall. +556005,An orange and white flower grows from a bulb in a flower pot. +401249,"A man wearing sun glasses, a tie and a suit." +124116,A cat laying on top of a cat bed. +458953,A hillside has many kites in the air over it and is near a lake. +401330,A group of men standing around a luggage cart. +230240,two people riding skis on a snowy surface +41998,A picture of a large building with people milling about. +469859,Three mature men wearing suit and tie sitting at a table. +466960,Food sits on plates lined up on a counter. +446835,A man combing his hair with his moobs hanging out. +554445,A man in his kitchen cooking using the stove. +270165,A model of a red cow wearing a pink top hat outside of a building. +471235,A banana hanging that has gone bad and something else I can't make out. +146767,A cat laying next to a stainless steel bowl. +446232,a snow border snowboards on a snowy path +64693,A picture of two men in the service on a table below a clock. +457178,A vintage picture of people walking around a town +441156,Men on a safari with an elephant and photo equipment. +365139,a small dog is standing in a sink +411665,A cat playing with it's reflection in a mirror. +120420,A man holding a silver flip phone open in front of his face. +431431,a large food truck is parked on the side of the street +404534,a fence some buildings and some different signs +381832,a street light hanging fron one of many wires connected to a power pole +578786,A clock sits at the top of a tan and gray tower. +429833,A street filled with traffic under a blue sky. +321811,Small woman with a cooking apron around her waste reaching into the oven and pulling out a plate of food. +265108,A blue piece of luggage sitting up against the side of a building. +167898,"A kitchen with a toilet, sink and a bathtub." +395462,A man is standing next to a tree with a surfboard. +562592,A person that is driving on the street. +471562,A picture of an airplane and a large tower at night. +293259,A large bunch of unripened green plantains on display. +453013,A large teddy bear with a smaller teddy sitting in a rocking chair. +153782,The building has a light pole with for lights in front of it. +155974,A gray cat on top of a fridge with some foodstuffs +206770,A house with a large hole in the side of it. +348669,a brown bear is digging in the ground for something +334521,Giraffes and a bird behind a chain link fence at a zoo +64611,A man riding a skateboard down a ramp. +328041,There are black and white poles along a street corner +415964,A large red stop sign on a metal pole. +224238,a pic with a hydrant outside in the field +405970,A large living room with a wall painted green +160531,A man playing Wii bowling in a living room. +1503,A computer on a desk next to a laptop. +414638,A white plate with a sliced up piece of food on top of it. +13980,"A white plate topped with meat, vegetables and fruit." +240418,A man on a surfboard surfing on a wave. +383420,A view of a remote with a popcorn hour book on the table. +74268,A cat sitting up on its hind feet on a park bench +438861,A man sleeping in clothing on a bed. +533900,A wooden bathroom with a wooden toilet next to a window. +528980,A windblown inverted umbrella mounted on a pole with city buildings behind. +471154,Two people in hard hats sitting in a golf cart. +526940,A pretty young lady sucking on the end of a banana with a Stewart from Mad TV hair cut. +413552,A baby sitting on a females lap staring into the camera. +567198,Two giraffe standing on a dirt road next to a jungle +18982,a man standing in front of a blue wall +202154,A pizza with fresh basil served on a board +10114,A picture of a very nice kitchen that is white. +346774,A woman sitting at a table with a plate of food. +108982,A blue and yellow colored bird perches on a tree branch. +221095,"A living area with a desk, laptop and surfboard." +515485,A woman in a red shirt and white shorts playing tennis. +240495,A woman is at a park playing frisbee in the rain. +535262,A large elephant in mid stride in the desert +436695,A long necked bird with long legs by a swampy marsh. +159627,A white bus traveling down a road next to a car. +1146,A young man wearing black attire and a flowered tie is standing and smiling. +35504,A pair of men enjoying a Nintendo Wii in a living area. +418825,Fruits and vegetables lay on a counter to prepare a meal. +62311,"A living area with a television, CD rack and various posters." +101270,Four air planes are flying in the air leaving fog. +254931,A large orange fatso's clock hanging from the side of a building. +292266,The cruel dog owners stapled the frisbee to the dog's head in a cruel effort to compose a funny picture. +253216,A small kitten is sitting in the bowl on the scale. +201426,two young boys are enjoying pizza and pepsi +149268,A girl flies a kite in the air outside. +162523,A man who is performing a trick on a skateboard. +114941,train pulling up on the tracks next to a stationary double decker train +408532,A shopping plaza with a clock on the building. +159377,Two people preparing a meal in a kitchen. +368142,A wooden table topped with a pastry and a cup of coffee. +285607,A big commercial plane flying high in the sky. +99425,A large crowd of motorcycle enthusiasts at a motorcycle event. +116202,A group of men riding up the side of a skateboard ramp. +46245,a happy looking polar bear swiiming in water +435240,A large black bear walking through a forest. +122994,A large red umbrella on a metal pole. +317441,A street sign above an orange detour sign. +9759,"A street sign above mailboxes in a snowy, icy winter scene." +540564,"A close-up of a zebra's face, eating dry grass in a pen." +269394,Two parking meter that accept credit and debit cards +272185,A parking meter sitting next to a small covered sign. +502,"A furry, black bear standing in a rocky, weedy, area in the wild." +312423,A crowded side walking going through a park. +329318,A person jumping over a skateboard while doing a trick. +296255,a man hitting a tennis ball with a tennis racquet. +384337,A hospital like bed with brown straps on the bottom +64136,A banana tree in a forest of trees. +532530,There is a map in the street of the city. +52107,three tennis players on a court playing tennis +456223,A series of pictures using found objects to spell out the word love. +560850,A set of blue bleachers sitting in the middle of a dirt field. +435823,A couple of adults standing next to children in a park. +428375,A note written on a banana reagarding a story. +393284,A snowboarder crouching on his board in mid air. +309692,A cart stacked with several pieces of packaged items at a pickup location of a store. +152987,Adult elephant standing next to wire fence outdoors. +35594,An elephant mother with a baby elephant beneath her reaches for branches with her trunk. +405205,A passenger bus that is parked in a parking lot. +93765,a close up of two cups on a table +157756,A clock tower by street next to cars at night. +176118,"Close up of a plate with broccoli and shrimp, with some broth." +111910,A man in the snow has a blue snowboard. +59547,A woman holding two rainbow slices of cake. +146730,"A room with wooden slatted walls adorns two shower knobs, a trash can, a soap dish with soap and a sink." +422877,People waiting to cross a busy street at night. +206701,An apple computer sitting on top of a wooden desk. +108965,A person making an ugly face holding Nintendo Wii game controllers. +578016,a bunch of things are outside of a clean white home +380116,The bright computer monitor is sitting on the corner desk. +471893,an image of two people playing video games +302026,A line of chili peppers hanging in a kitchen. +200959,Person on snowboard jumping in air with mountains in the background. +280114,A man laying on top of a wooden bench next to a can of beer. +578498,A living room area with some couches and a television +558640,A red bowl full of vegetables sitting on a table. +403995,Some girls that are dressed up in a parade. +83441,A black leather sofa in a living room with a batman poster hanging in the wall. +572233,People are sitting at tables for a reception. +82338,A man on motorcycle driving past cows on the street +546980,A sheep eats grass alone by a lake +250022,A dog with a longing look as it sits by a window. +334174,The clock and the building are all lit up. +567787,A small toilet rests in a dark colored bathroom. +80470,A man riding a horse up the side of a tree. +140826,A large jetliner sitting on top of an airport runway. +62687,it is snowing outside and many people are holding umbrellas +362103,Person on skateboard performs a trick in an empty street +361244,A wooden horse standing on top of a table. +415538,A woman wearing a short skirt and a plaid shirt. +370819,A large potted plant sitting next to three bottles of wine. +211743,A man riding skis down a snow covered slope. +132706,Steam rising from a hot plate of vegetables. +448243,A white VW Bug with a surfboard mounted to it's roof. +283,A bottle on wine next to a glass of wine. +453138,A bike parked next to a cluster of trees. +474095,A man sitting on a toilet with a cigarette and beer can in hand. +545958,A cow standing outside of a white building with a blue entrance. +248631,A laptop with a stationary mouse attached to it. +47435,Some hot dogs are outside in a baggie. +108674,A bed and a window in a room. +243882,A book is being held open by a person's hands. +206413,A person swinging a bat at home plate as player in bullpen look on. +552507,Street sign in front of a large building and clear skies. +140435,An old mattress near parked trucks in the grass +268293,There is a male tennis player that has swung for the ball +446117,An orange on the middle of a park bench. +464283,A young man and woman drink wine at a wine bar. +380244,A large bed sitting beside a night stand. +347747,A black and yellow train traveling down train tracks. +300718,A living room with a hard wood floor and a dinning room table nearby. +392251,An elephant walking behind a large wire cage. +52637,a dog on a lawn chair with a banana in its mouth +60467,"A tray of biscuit, egg, bacon, hashbrown,milk, orange, apple, and ketchup" +221620,A white tray topped with donuts near a bag. +761,A group of people riding skis on top of a ski slope. +503252,a green painted parking meter called a donation station +547816,A view of a bathroom with the shower curtain open. +80045,A large outdoor clock with two faces and various designs and numbers on the faces. +247206,"Man lying on floor playing with cat, in cluttered room." +1398,A cat rubbing up against the camera persons legs. +302243,A herd of zebras stand around in the wild. +321395,"A plate of food that includes rice, meat and vegetables." +158292,A group of women cooking in a restaurant kitchen. +375755,A young boy with shaggy blonde hair standing with his skateboard. +87479,Three young men playing Frisbee on the sand +463012,This pristine bed includes several pillows and a fancy head board. +535326,a bus taped off so it can be painted +12323,A toilet and two rolls of toilet paper in a small room with ledge and window. +193388,She didn't expect that there would be this many birds to feed. +442206, A boy and a girl posing for a picture in formal wear. +54334,"A bedroom with a large window, bed and floor lamp." +280857,a kitchen with a green rug sitting on a tile floor +64909,A young man wears a fake mustache in a kitchen decorated for the New Orleans Saints. +335579,A man lies down next a cow while facing another. +51028,A keyboard rug lies on the floor by two chairs. +309467,Two people cross country skiing on a snow covered hill. +239575,Several people in jackets sitting on a raft. +112269,The man is taking a bite of a humongous sandwich. +176149,A street sign slightly knocked over next to a rural road. +151528,A dog walking away from a stone wall with a man on it. +242605,this is an image of a child's birthday party. +25123,a cat laying under an umbrella on the ground +112905,A man standing next to a stone wall while holding a skateboard. +505335,A group of people stand out side with umbrellas. +496618,"The breakfast consists of fried eggs, pancakes, and syrup on the side." +175688,A large building that includes a tower with a clock topping it +81766,A large black dog with long hair standing on steps. +469067,this is a person sleeping on a bed with a cat +463669,A black and white cat laying on top of a blue blanket. +575243,A person walking down a street while holding an umbrella. +562614,A group of children running after a soccer ball +102778,A person in a red jacket holding an umbrella. +495419,This is a cup full of toothbrushes with a tube of toothpaste nearby. +228749,Steak with assortment of green vegetables and french fries. +537964,A red fire hydrant is sitting in the woods near fallen leaves. +332058,A man walking into the ocean while holding a surfboard. +529528,A bowl that has some kind of a batter in it near a mixer. +90155,A train on the tracks out in the country +520273,a cloudy sky during a day with some overcast +521994,A young boy holding a blue surfboard in his right arm. +203846,A red stop sign sitting under a green street sign. +275863,this is a child spinning around a bat outside +295768,Computer monitor and accesories sitting on a desk. +75888,Some colorful fresh fruit and veggies cleverly arranged. +81484,Three plates of various food sit on a table +151358,A newspaper that has sunglasses on top of it sitting in front of books. +201141,A man that is sitting down in a fruit stand. +403481,A white and blue train heading towards a sign in the foreground. +538819,Two rectangular slices of pizza with multiple toppings. +419098,Multiple pairs of scissors attached by a beaded metal string. +276892,A giraffe and a zebra stand on a concrete area near rocks. +281387,A dinner table with a place setting and dish of food that has meat and vegetables. +207826,A woman holds up a book as she attempts to read in bed. +97585,A wall with different types of decorations of art pieces. +98048,A couple of men standing near a sailboat. +200492,A cat is looking into a Christmas cup on a counter. +52996,A group of women in military outfits helping other women in a kitchen. +67563,A group of elephants by some buildings on the water. +283890,A large black vase under a hanging light in a room. +564739,A train with a yellow engine car traveling down railroad tracks. +258680,A man wearing a suit and tie under a brown umbrella. +264962,three zebras and a gazelle drinking at a watering hole +81004,A black and white photo has two baseball players. +207056,A group of elephants bathing and playing in the water. +232244,An elegant with a red shawl draped on top of it. +486026,A red and green plate holding a pink cake with frosting. +565374,An old man sitting down playing an accordion next to parked bikes. +144932,Tug boats do a good job handling water emergencies. +486400,A young woman on a beach flying a kite +363344,Four birds are walking on the sand near water. +347558,A renovated kitchen with stainless steel appliances and a huge stove +218183,a small child standing in a living room eating something +434043,A puffy pie is on a cooler grate on white tiles. +283064,A table with a huge glass vase and fake flowers come out of it. +99913,Small group of giraffes traveling through dense green brush +512879,Two sheep inside the confines of the stone gate. +45627,A woman with a life jacket on holding onto a rope while engaging in a water sport. +264964,A pile of feces sits on the back of a public restroom toilet. +540469,A young child that is using a wake board in the water. +223256,This couple is making a funny face while sitting on a couch +48575,A beautiful woman sitting in a blue chair writing a paper. +187302,A child on skis in the snow next to a sign. +225518,A view of a large bed in a luxurious bedroom. +476460,A man adjusts numbers at a tennis match. +82812,A group of commuters standing around a train station. +92815,Two adults sit with two children playing video games. +38531,A downtown area with cars parked at parking meters. +261182,Extremely ripe banana being put into a saucepan in a kitchen +30785,A plate filled with a bowl of vegetables and two slices of bread with a spread on them. +18490,several motorcycles are parked next to each other +115146,A group of people converse in an office setting. +282287,"The dog is wearing socks, shoes, and a cap. " +96638,A man sitting in the snow riding a snowboard. +424227,Man and woman using pay phones at adjacent booths. +217753,"A large display of fruit: applies, grapes, oranges, lemons, limes and grapefruit" +389655,Large unusual looking plain on the runway surrounded by many people. +526257,A professional baseball game being played at night +448211,"The image shows a leafy backdrop with part of a fence and a smiling woman, and an eagle swooping, improbably, from right above. " +103127,A car's side mirror shows a dog sticking his head out of the window. +10534,A black and white photo of a woman asleep on a park bench surrounded by foilage. +139567,A tall church sitting next to a lush green field. +513381,A little girl standing in front of a stack of items. +476872,Surfer riding waves on their surfboards in the ocean. +64523,A black and white photograph of a female tennis club. +183571,A man holding a boat at dock with a dog standing on it. +559547,"Men stand in uniforms, expressionless, in an historic photo." +127520,A line of buses waiting to take passengers where they need to go. +448269,A baseball player about to swing at a pitch during a game. +133698,A pizza that is half pepperoni and half chicken. +230262,A brown cow standing on the side of a road. +17707,A bed covered in a ten sitting on a beach. +212558,A person stopped wearing a yellow jacket riding a motorcycle. +50627,A baseball player waiting to hit the ball. +353180,A group of people that are behind a bus. +57879,A narrow city street has a leaning one way sign. +327089,A school bus that is stopped and letting children off the bus. +6437,A polar bear licking its paw while grooming. +520430,A women smiling really big while holding a Wii remote. +437947,The kitchen is clean and ready to be used +272925,A street covered in pink confetti next to a red fire hydrant. +527962,a narrow alley with signs and buildings down it +124452,A man is jumping in the air catching a Frisbee. +343571,Two black bears standing next to each other. +563574,A person wearing a hat standing on some steps with a toothbrush in his mouth. +568982,A mouse sits on a mouse pad next to an iPod. +471737,A train traveling down tracks next to trees. +79113,A red-headed man with glasses is looking at his laptop. +473919,a group of stuffed animals sit next to each other +572147,Two little girls are helping to decorate a cake. +547854,a half eaten pizza is sitting on a plate +150410,Man bending down to check out a model plain that is parked in the grass +138639,A group of men standing on the side of a street. +579415,Many people with umbrellas are waiting to cross the street. +406377,A train trailing a plume of white smoke crosses a bridge. +568101,kites being flown on the beach near the ocean +369082,"A kitchen with a stove, oven, cabinets and blender." +92771,Two zebras in the zoo by some trees. +4359,"A woman holding three bags stands by the open doors of a subway car, through which other people can be seen." +522020,A close up of a hairy white cat outside. +119802,stuffed animals are sitting together in a street corner +276707,A street sign prohibiting vehicles in front of a store. +323564,A yellow ten speed bike parked on a bridge. +25430,"A bench overlooks a lush, green valley below." +563175,A PICTURE OF ALL WHITE IN A BATHROOM +215998,A parked black motorcycle sitting on top of a parking lot. +517007,Man and woman posing in front of a colorful kite. +288576,a man outside after he threw a frizbee +375606,A woman in a suit using a smart phone. +30356,A cat standing on top of a toilet seat next to a sink. +206560,a person jumping a snow board in the air +459590,"A white sign is displayed, reading ""Bart Ba.""" +429497,Several bicycles lined up against a brick building. +194120,A cat sits next to what appears to be a pumpkin. +254834,A view of the Union Station's awning and clock. +412966,A man on skis stands on the hill. +407822,"A man is posing with two young ladies, while holding his drink. " +67078,An old man holding a plaque next to a motorcycle. +544065,A girl tries to kick a soccer ball while avoiding interference from a player on the opposing team. +116825,A cat leans over a desk and paws at an army knife. +553361,A white bed and dresser are in a small room. +50786,A white truck is near some trees in the background. +250276,A white horse standing next to a woman in a field. +464248,a couple of birds are standing on a gutter +235663,The wing of an airplane over a large area with mountains. +295809,Street sign painted on a road that looks like a bicycle. +47559,there is a small bathroom that is white and has a toilet +395717,A man wearing a hat sitting on top of a boat. +449428,Sepia photograph of cows grazing in field next to a fence. +265822,A brown teddy bear sitting next to cup cakes and then sitting on a couch. +354540,"A counter with extension cords, a toaster oven and a laptop." +91359,A monorail train is traveling on a track. +273059,Several men running while one man running towards a frisbee. +348991,Two benches on opposite sides of a grave pathway in a park with flowers in bloom. +506151,A domestic cat rests on a kitchen table in front of a microwave. +137241,A man holding a tennis racquet on a tennis court. +490337,Bright red umbrella open on the sand of a beach. +230915,A city street filled with traffic next to tall buildings. +574928,a herd of sheep standing around in a big grassy field +302302,A very big cute looking bird sitting on a pole. +179578,Two men standing next to each other on top of a field. +547738,View from a train car of passing tracks and trees. +251124,A bike parked next to a street in a city at night. +307932,Two baby elephants standing in tall grass with an adult elephant. +64884,A sign hanging off the side of a wooden pole. +260516,there is a starbucks drink and a sandwich on a table +551633,a little girl playing with a soccer ball +417284,A pool with lots of coverings and umbrellas sitting along side of it. +11340,A large elephant walking next to a man +515465,some blurred sheep are running and some green grass +550722,A TV sitting on top of a wooden dresser. +447787,A lady holding up a pot roast while posing for a photo. +10693,an image of a woman holding an umbrella with her coat on +40998,A young girl walking through a flower garden. +69391,A large white public bus parked on the street. +332916,A man standing on the corner with a drink in hand. +209222,Black and white photograph of a man sitting at a bench. +204821,Zebras eating hay at a fenced wildlife habitat. +391825,A herd of white sheep standing on top of a green field. +306636,This young girl is learning to throw a frisbee. +242972,A teddy bear sitting on the ledge of a wall +209610,A train that is sitting on the tracks. +472762,A cat sitting in the middle of eight pairs of shoes. +216972,A stop sign is fashioned into a snack store sign. +211722,A moustached skate board rider holds his board +192651,A nice living room with a television is pictured. +94140,A photo taken in a car looking at a dog in the back seat. +552156,A fire hydrant is next to a sign with a picture of a fire hydrant on it. +110906,A man standing on a tennis court holding a tennis racquet. +227033,"A picture of an outdoor area that looks great. + +" +457631,"Individuals are up and doing something fun today. +" +479613,Three men are at a restaurant table with donuts and beer. +317715,A cat laying next to a bike with a large tire. +66135,An old yellow train is waiting at the station. +338044,A parked motorcycle on display next to the skull of a demon. +99584,A transit bus stopped at a street side that's filled with snow. +165752,a dog in a field near a fence +281733,A young a boy eating a chocolate sprinkled covered donut. +173445,The four pink sheep are moving away from each other. +555848,Plate of hotdogs smothered in condiments with tater tots +498280,A man is putting a pizza into a fiery oven. +493067,A polar bear is playing with a ball in the water. +456559,A man wearing sunglasses and a black hat. +257053,A blue cake with yellow stars around it. +21900,A man riding a horse in front of a fence. +514508,A man in bowler hat and lab coat by people in a tv frame. +159898,A man in a white shirt riding on a skateboard. +436174,motorcycle bikes all parked next to each other lined up down the road . +181421,Three people in a boat with an umbrella in the rain +109319,An animal that is in the snow by themselves. +313055,A blocked view of the Eiffel Tower in France. +522425,A person in front of a mirror with a toothbrush. +221911,A muffin for breakfast with an orange and cream +348235,there are two zebras standing in the wild together +202880,Group of giraffes standing in a field eating and lounging. +280619,A bathroom with a white toilet and a white toilet seat. +281829,A man and a boy playing with baseballs and baseball gloves. +113828,a line of red double decker buses driving down the road +199437,A man and a woman behind the counter of a restaurant. +409523,There is a man on a surf board in the ocean. +94185,a shop with a bunch of signs sitting out front +264870,A white refrigerator freezer sitting on a hard wood floor. +139248,A young boy with a cell phone up to his ear +383527,A long boat on churning waters next to a bouy +39317,Several containers are on a shelf next to a mini-fridge on a counter. +400062,A man in brown shirt playing with a red frisbee. +493704,The woman is riding her horse on the beach by the water. +242724,Two very sexy women in bikinis riding horses in the ocean. +373904,Three cows on grass have a white stripe. +190499,A pretty young lady holding a tooth brush in her mouth. +148042,A person holding a cell phone in their hand. +509185,A white church has a decorative window and gold clock. +484321,A small boat leaning to it's side is on the beach. +395463,A group of people sitting at a bar as a man prepares food. +324338,Three men standing on a lawn holding paper plates and beer. +275429,Flowers in a vase on a window sill. +42399,two people posing for a photo holding wine glasses +520752,A baseball player swinging a bat over home plate. +96354,a couple of elephants are in a pin +548014,a man in glasses that has a suit on +327675,A young man holding a tennis racquet on top of a tennis court. +292225,People are playing tennis behind a long fence. +382572,A man on a skateboard is holding on to string. +479466,A tennis player on a tennis court holds his racket as a crowd watches him. +186899,A person is walking in the sand near the water. +141597,A large cargo van parked in front of a smart car. +308487,A group of people standing at a table with bottles of wine. +265003,A dog wearing a hat and sitting in the grass. +207072,Flowers in a glass vase with traffic in the background . +447917,Two girls and a boy have fun at soccer practice +498120,A bus pulled up to the curb along a road. +476415,A man wearing a white shirt and tie standing in a room. +482275,A man and woman cutting a slice of cake by trees. +531111,A bathroom with a black and white checkered floor. +161840,Three cats sitting in a window waiting for their master to return. +367626,A surfer being filmed going up a big wave. +488664,A long passenger train traveling over a rail bridge. +481212,A man laying on top of a couch next to a black and white dog. +407149,A living room scene is shown with a couch and table. +309100,Three zebras and other wild animals out in a semi-green field. +226498,A group of people on a field play a game of soccer. +420610,"Table full of hot dogs, ribs, burgers and other party food" +477750,Large special saddles are used while riding elephants. +415967,The dark mirror shows a bathroom in it's reflection. +233834,A train moving down the rail road tracks . +229221,A cow stands in a field where other cows are lying down. +259513,a man shearing the wool off a sheep +409346,two ladies filling their plates with lots of food +188873,A man squatting in front of a garbage can while another watches. +571925,a large giraffe is outside eating from a tree +224907,A polar bear in the water at a zoo with two balls +425591,A dog and a cat sitting in a chair. +176273,Three horses covered in blankets are walking through a field. +61658,A picture of some food on a plate +410114,cowboys on horses are herding some cattle down a road +185393,The man and woman are standing while playing video games. +259830,A moped is parked next to bicycles on a sidewalk. +318455,A table topped with three trays filled with cakes and desserts. +207491,Bus traveling down road with headlights on past cars parked on street +219144,A bus is stopping to pick up a passenger. +287171,A park filled with lots of lit up sculptures. +217517,A city filled with lots of tall white buildings. +490515,a person riding a snow board falling to the ground +130586,a boy making a face while running to get his kite in the air +382973,A child is smiling for the camera while outside +461334,A man in green and white jacket throwing a baseball. +234691,A large clock tower with a giant clock and two statues. +312550,Two white and grey cats sleeping on a bed with penguin comforter. +353695,Two white sheep in grassy area with mountains in background. +194203,A black and white dog laying on a blue chair next to bags of presents. +186125,Scissors and a pile of postage stamps topped by one of President Nixon +78093,someone that is skiing across some white snow +581262,A fire hydrant and some debris on the street. +464181,a silver jet fighter is flying upside down and some cliffs +174145,Several men sitting in front of a large wall. +463724,"Orange slices, onion slices, and pieces of bologna frying in a pan." +490639,a person sitting down taking a photo of a cat +537907,A unique style bed with red covers and a mirror behind it. +421757,Two boats are floating on the river near the shore. +324135,Child with goggles and cat and baseball with wood background +425371,A white sink sitting under a mirror in a bathroom. +229350,Two men sitting on a yellow boat in the water. +51685,A small biplane flying through a bright blue sky. +505636,A person launching into the air on a snowboard. +499937,Two black cats one sitting on a chair and one next to the chair. +184274,A shiny vintage refrigerator inside of a camper. +370055,A man riding a surfboard on top of a blue wave. +208423,A crowd of people flying kites over a field. +282830,A man in action looking at an incoming frisbee +401552,Small child holding up a blue and yellow striped umbrella. +530146,A white plate topped with a sandwich and sliced veggies. +197745,A couple of captive giraffes look around the ground in the zoo. +168061,A radio sitting on a table next to a record player. +360573,A man standing next to a set of piked motorcycles. +240481,"A female tennis player is in great shape, holding her racket. " +300538,Two small children brushing their teeth at a bathroom sink +325351,"2 men sit on the couch, video game controllers in hands." +494555,A young man in a sweat shirt is standing on a wooden walkway. +4772,A man is staring out of a boat window. +468577,The small girl is lying on the mattress of a crib. +287469,A zombee walking down a street covered in blood. +284715,A white and brown dog sitting on top of a bed. +439339,Two cups of ice cream sitting on a table in front of a woman with whipped cream and a cherry on top. +363875,A man that is sitting on a moped. +188735,Three people in yellow shirts cleaning a park bench. +418512,An intersection with a post showing street signs. +60431,A man walking across a baseball field with a small child behind him. +550714,"The little girl is eating a banana. +" +507223,A man that is standing in the dirt with a bat. +179251,Two kids brushing teeth in the bathroom with man taking a picture. +305626,A bear that is standing in a field. +479508,A person is helping a lady cut part of her shirt behind her neck. +112440,Several different ties hand over a tie rack. +290289,A living room with many chairs and couches. +221754,There is very little traffic at this city intersection. +447088,three baseball players walking around while holding bats +130712,A street sign next to a large building. +540253,Classroom of students with laptops all around a large table. +543961,A bathroom consisting of a toilet and a tub. +183620,A woman with a bat hitting televisions that say Comcast Doesnt Care. +124243,Boys in a skate board park built in a parking lot. +162634,A wild animal on a rocky hill with a few plants +159900,two people a black backpack snow and mountains +302867,A side rail inside of a building. +128658,"A plate has a waffle, some fruit and ice cream on it." +534601,"A stuffed, white bear is on the bed with a person." +72912,A huge hole in the middle of a bathroom. +445846,A clean kitchen with the windows white and open. +408208,A person is doing a high jump on some skis. +386650,A bench next to three potted plants. +522889,Venus Williams is swinging at the tennis ball at the game. +391689,An old truck and old car buried in snow in a winter yard +513242,A man wearing a nice pink shirt with a pink tie. +107123,"Bathroom with white pedestal sink, bathtub and shower, and commode." +109441,A square reflective glass building sitting next to a street light. +498460,And animal stands on a table while a bear rides a bicycle. +100604,A display of teddy bears on a table top. +581394,Group of people standing outside of a green bus. +38540,A bus arrives to the bus stop at two twenty p.m. +285844,A man standing on top of a tennis court holding a racquet. +496166,A large white toilet next to a child's white toilet. +289610,A group of teddy bears standing next to each other on a shelf. +466736,a bunch of bananas hanging from a wire +268948,A giraffe is leaning over a fence looking at people. +451008,A man in a wet suit leans over a blue and white surfboard. +550805,Fully loaded yellow truck bed on roadway in populated area. +393410,A large air plane flying in the blue sky. +535952,Three chocolate cupcakes sitting on a wooden cutting board. +162495,Tall building with clock and spire behind white bricked building. +315631,A white table topped with a pizza and a pan of food. +217183,A doll standing next to a vase filled with flowers and plants. +107468,A bird flying over the beach to the water +110026,A car covered in various empty toothpaste tubes. +123545,a man is holding a racket looking up at the ball +30534,A person on skis jumps down a snowy hill. +405004,A white couch sits in the middle of a very nice looking room. +416170,A cat sitting in behind a window looking out. +228683,An open door and a cat inside a house. +382041,a man in yellow is doing a trick on a skateboard +478621,"A man in a suit on a plaza, holding a blue umbrella in the rain." +370038,A woman in her underwear next to a naked man holding cookies. +274773,there are many bikes parked outside a pizzeria +455004,She is holding up a peace sign in the snow. +371036,A person flies a large yellow kite on a field. +139007,A bunch of elephants playing together in a field. +237844,A laptop sitting on a desk with other accessories. +14470,A group of young kids petting a couple of giraffe. +281950,A lone toilet sits in a large bathroom. +248919,Lots of fruit sits on bowls on the counter of this kitchen. +142240,A woman holding a roasting pan filled with a turkey in an open oven. +28273,The little black kitten is sitting inside a black bag. +568700,A giraffe that is laying down in the grass. +553078,A little boy with red hair laying on the ground next to surfboards. +32766,An air plane wing flying over a very large mountain. +91373,A group of people exercising on the beach. +336209,A man riding a skateboard up a wooden ramp. +509551,An old clock tower captured on a partly cloudy day +394206,A group of people riding in the back of a truck. +557686,there is a small bird sitting on the ledge of a building +111951,A couple of white bathroom sinks sitting next to a toilet. +41687,a skier and a snowboarder in front of a large house +465184,a living room that has some chairs and pillows in it +375469,two people riding surf boards on a wave +192306,A man standing on a tennis court near a large net. +384788,a teacup on a saucer with a little biscuit next to it +413650,a black orange and white cat and some bricks +242611,a long beige bathroom with a door to a bedroom and another to the hallway +478721,Two people carrying a kite to be flown later. +278801,A man fallen on the ground while riding a snowboard. +538073,A table topped with plates of food and cups with drink. +365273,a small child is inside of a blue case +431256,A man on a snowboard in the mountains. +403054,A man riding a skateboard across a street. +531784,a woman is typing on a laptop on a desk +337274,a dog with a umbrella that is pointing to the sky +330419,there is a zebra that is seen standing next to a tree +320078,A cat laying on to of a white and red chair. +461254,A full English breakfast and tea sits atop a wooden table. +44260,A collection of apples growing on a tree. +191265,A table full of trophies and cell phones +498641,A dog that is laying down on its side. +483001,A bedroom suite with a large bed and amazing view +267127,A man riding a skateboard down a street. +180373,A cat standing in front of a TV showing a dog in a cage. +546596,A window display of some animals dressed up. +116083,"Adults walking along with kids, all carrying bags" +130401,The person crossing their legs is wearing socks with colorful dogs on them. +442681,there are many trains that are stopped on the tracks +348594,A group of people are playing frisbee on the beach +295377,A skier stands next to a warning sign. +234807,a number of horses in a field near a building +435986,A man with a coat on his shoulder and a suitcase by his foot. +105011,A pretty young lady riding a red surfboard in the ocean. +460107,A photo taken from the top of the table looking at a mirror in the background. +372501,A herd of sheep walking on top of a lush green field. +319616,A new empty refrigerator in a clean kitchen +395723,two zebras standing by a car in front of some trees +77187,A brown bear standing next to a tall brown tree. +552942,A white Cairn terrier pants in the sun whilst dressed in a neon yellow outfit. +279165,A couple of zebras eating grass from a small grass area. +443259,A center island in a kitchen covered in a fan. +12269,A little girl is in store with an umbrella. +71466,a chair with a pillow a mirror on the wall and a set of curtains +512403,A vase of feathers on a shelf by some art. +561650,Baseball player standing in front of a fence holding a bat. +495438,A shirtless person cutting a heart shaped cake with a knife. +354657,A stunt rider performs a trick on back of a horse. +80733,A man standing in front of a mirror above a counter. +470952,"A man is in his skiing gear, while posing for the camera. " +331529,A woman seated near buckets and baskets of oranges. +436315,A homemade pizza sits on a metal sheet. +514797,"At the seawall, the gentlemen are holding up the kite " +153307,A clear glass vase of yellow flowers against a blue background. +316912,A cow and several people on the sidewalk next to a busy street. +220111,a buncch of food is laying out on a table +285645,A man wearing skis and holding a handle leans toward a sandy plain. +361341,A large black bird perched on top of a tree in a forest. +155199,a black cat is laying on a couch +136552,a red double decker bus with a movie poster on the sign of it +294484,The giraffe eats from a reachable limb of the tree. +501225,The teenager is airborne while riding the skateboard +368212,Baby brushing teeth while sitting on a toilet. +192457,A donut on a plate with a fork and knife. +570116,a man and a kid that has a soccer ball +386424,A man and woman are sitting at the table +87364,There are people in wet suits who are surfing in the ocean. +271266,A beautiful painting of a white plane with a blue tail. +197915,A bird that is sitting on a plate on a table. +498997,A man is playing a guitar by his keyboard. +123580,A table with four bowls of food on the top. +183500,A person is flying a biplane in the sky. +269784,A yellow scooter bike is by a fire hydrant. +443887,A cat sitting on top of a brick pillar next to a bunch of statues. +31368,A group of people eat a meal at an outdoor event +38837,A very cute cat sitting by a very pretty umbrella. +308883,A laptop computer sitting on a bed by someones feet. +278627,A series of photos showing people eating food. +3466,The man is wearing orange and black shoes. +191672,a person riding a skate board on a wave +219440,a cow staring into a camera standing on a field +200089,Several boats docked in a beautiful city harbor. +581829,"A bowl of cereal with milk, bananas, raspberries and blueberries." +397133,A man is in a kitchen making pizzas. +168580,A person sitting on a motor bike on a street. +57535,two sets of skiis covered with a bit of snow +496632,A vehicle mirror reflecting a white bus on a road. +372113,A celebration with cake for Navy members stationed in Thailand +361106,a smiling groom holding his bride in his arms +535013,There is a banana and a donut on a white plate +487159,"This meal consists of salad, water, vegetables and dip." +407644,A man standing on top of snow next to a snowboard. +560902,A man holding a tennis racket out towards a tennis ball. +362797,A crowd of people are standing at a fair and kites are in the sky above them. +298924,A plate of food with meat and white noodles. +578698,A person flying a kite over water on a cloudy day. +114884,"A woman with a cigarette standing, while a group of people with luggage walk towards a bus." +191203,Someone riding on an elephant in a wooded area. +95786,there are three vases made of clay on a table +425027,A black and white kitten sitting on top of a laptop computer. +405248,A wooden bench covered with pots and containers of plants. +64307,A brown tray topped with a plate of food next to potatoes and a drink. +177453,A giraffe standing next to a tall tree. +422686,A young man riding down the side of a skateboard ramp. +286362,two men looking angry at each other. +263351,A woman in a red jacket is holding a red phone. +375760,"In the suit case there are some clothes . +" +409929,A young man crouches on a moving skateboard. +497501,"A white plate topped with fries, onion rings and vegetables." +101567,A dog resting his head on the edge of the pool next to an apple. +457559,A group of young men playing a game of soccer. +363986,A prepared formal dining table set and ready for guests. +215394,A cat napping inside of a large planter. +407260,A young woman holding a gun on a stove top oven sitting in a field. +34257,A market display case filled with different colored vegetables. +252048,A horse is standing in the stables in the hay +406395,A cat wearing a neck tie laying on top of a pillow. +27208,A woman taking a picture of kites being flown +321718,A woman takes a dish out of the oven proudly. +214519,Two side by side urinals mounted on a wall. +289714,A person in a kitchen looking at the oven. +261779,A pinup-style photo of a woman sitting on a luggage trunk. +257327,a bathroom with towels under a sink and a big mirror above it +407909,"A photo of a person being taken in this picture. +" +199977,The airplane in the sky is doing tricks while spitting out smoke. +491835,A woman is waiting for a train. +336320,a large hot dog that is on some paper +209604,Shelves are filled with parcels that have red ribbons. +434662,A skier bending down to gain momentum as she goes down the slope. +535307,A sandy beach next to the ocean under a sky filled with kites. +186697,A peson riding a bike down a long narrow road. +165202,A white traffic sign with black letters at night. +295683,A street sign that is on the side of the road. +7260,women on a tennis court playing a game of tennis +376310,A small bathroom with a mirror and sinks. +440529,A man wearing a glove with a bird on top of it. +270048,two train cars one is black and the other is white +579277,A large store filled with lots of groceries and produce. +234124,A small kitten laying on top of a purple slipper. +383119,Several old boats side by side in a city harbor. +330495,A beautiful woman laying around a -bed with a neck tattoo. +146667,A woman digging through the storage compartment on her moped. +318523,A display in a doughnut shop filled with doughnuts. +315281,A partially eaten vanilla frosted doughnut with sprinkles +251797,A toilet with the seat down in a tiled room. +202321,A man in a black wetsuit riding on a surfboard. +293810,The meal consists of meat with brocolli on the side. +577065,there are many zebras eating at the zoo together +539808,A humongous jumbo jet is on the airport runway. +277162,A hot dog with toppings and condiments in a paper wrapper. +579664,Vegetables are displayed in a wooden barrel outdoors. +254965,Two giraffe standing and sitting next to each other. +249836,A time lapse photo of a man throwing a frisbee. +214692,A large crowd watching a professional baseball game +446723,Man giving the peace sign to a lady taking a picture with a smart phone. +513968,A group of sheep in a field with a fence in the background. +82252,A couple of zebra standing next to each other. +466410,An elegant white vase of colorful flowers rests on the windowsill. +231549,A white bed sitting between two lamp under a picture. +163436,A surfer is about to catch a wave. +772,there are three she eps standing together on the grass +459967,A group of carrots are displayed on a counter. +125651,A man standing behind a car next to a tent. +100306,A man standing on top of a snow covered ski slope. +204289,A round bundt cake on a blue plate next to a can +500884,A woman standing in front of a building in the rain. +348379,Group of protesters with red and white signs on concrete steps. +154071,Some players in action on the baseball field. +61782,A walk in a shower sitting next to a sink under a mirror. +553721,A dog wearing a leash laying next to an orange frisbee. +457616,A boy in purple jersey swinging a baseball bat. +333150,A laptop and large crowd of people in a room. +447740,A woman holding up a smart phone and a little girl. +176799,A couple of people skateboarding in a graffiti filled area. +561009,A bird perched on top of a tree branch. +532387,A kid in standing in the grass with kites flying above. +165009,a man and woman stand next to a wedding cake +517515,Several baskets filled with food sitting on a table. +554805,Two cows and a baby are standing and sitting down. +487095,Giraffes and zebra watching a zookeeper in their enclosure. +335085,Commercial retail refrigerator stocked full of beer bottles. +578849,A man riding skis down a snow covered ski slope. +565778,A train going back to its coarse filled with people. +263828,a black motorcycle is parked by the side of the road +210030,A white plate with a slice of cake on top of it. +331185,A person is riding his motorcycle on the dirt road. +267694,A person is eating a seafood pizza with a knife and fork +450728,A man in a black shirt rides an elephant as a man walks near it down a street. +93725,A boy swinging a baseball bat at a ball. +421139,A group of people on a field playing with a Frisbee. +234889,"Two large trains at a modernized train station, people walking about." +81100,A young boy standing on a tennis court holding a racquet. +274449,A big crowd of people huddled together with some umbrellas. +374629,A brown and white cow standing in the middle of a gravel path. +347370,A person that is holding a lime in their hand. +358901,A white truck driving down a curvy road near trees. +445179,A bench that is beautifully shaded by a tree. +205370,A couple of friends playing video games together. +52016,A person standing by a building with a doughnut. +530226,A large white polar bear walking through the snow. +229659,A laptop in a bright yellow coffee house. +540556,A midair shot of a guy doing a trick in a skateboard halfpipe. +498657,A white and brown dog playing with frisbee in the field +486313,A CGI living room filled with black furniture. +441264,A pair of rusty scissors sitting on a floor. +80690,A couple of sub sandwiches are in a basket. +569543,A female tennis player in white serves the ball. +189936,A picture of the president standing at a podium +100726,An older woman playing Wii Bowling with another girl. +505728,A woman prepares to pour batter into lined muffin tins. +313593,A cat sleeps with its head on a laptop computer. +412878,A large green couch located in a living room. +285388,"A zebra walking inside of its pen, with its back to the camera." +210804,A tall building towering over a city next to a river. +140006,Mopeds and bicycles parked next to parking meters. +432702,A man with an umbrella sits on the hood of a car. +183889,A man pressing buttons on his cell phone. +381842,A green street sign hanging from a metal pole. +253095,A man standing on a street with a cell phone to his ear. +581450,A living room filled with lots of furniture. +564088,a few people that are inside a fence +476335,a group of men working the kitchen behind a counter top +74711,Two ducks floating together on a body of water. +87393,A baseball player taking a swing at a ball +323496,A young lad swings his Wilson tennis racquet. +23121,A man poses his tennis racquet as a ball comes towards him. +569059,A wooden desk sitting in a living room with a monitor on top of it. +234182,A bus that is colored in the colors of the Canadian flag. +13296,A clown riding a bike down the street +2640,a white train with a red stripe on its track +461522,Two giraffes standing next to each other looking over a fence. +373677,a clock on the top of a small tower on the top of a building +437049,The people are at tables on an outdoor patio. +32990,A kitchen sink sitting next to a toilet. +201420,A group of giraffe standing next to each other +14831,A brown and white animal laying on top of a bed. +476709,A woman standing on top of a paddle board. +189550,A woman in sunglasses is in a picture with a giraffe. +124759,A couple glasses of wine and some food. +257058,A couple of men riding horses down a rocky path. +292618,The people are moving across the snowy mountainside. +88084,A red and white painted fire plug on the sidewalk. +362123,A wet street with a stop sign on the corner. +351559,A traffic light in front of a tall building with red lights at the top. +244581,a bed a lamp a cabinet and some curtains +183176,A man on a motorcycle with a woman on back +184621,A group of men riding on the back of a small elephant. +10858,Two hotdogs in open aluminum foil with various condiments. +568587,A woman on a cell phone standing on a street. +472828,A man selling oranges and juice to a bunch of people. +110231,A skier with poles on the hill of snow. +100087,A traffic light by a Lutz road sign. +24958,A man with a phone raised to his ear with other men. +75768,A man on a bed with a couple of dogs. +526706,a small calf nursing a cow in a pasture +268229,"A sleek, black bedroom looks cold and uninviting. " +314996,a woman on a beach holding a surfboard behind her +360318,Small monkey eating fruit sitting on a rock. +122020,A sweet potato cut in half next to a banana. +221820,A post with a no right turn sign and a stop signs with stickers +374727,A street sign showing four different roads on it +36810,A baseball player standing next to home plate. +550666,People gathering at an old building to eat on a sunny day +460347,A bus traveling on a freeway next to other traffic. +273246,a number of people on a beach with a body of water +133327,A young man riding a skateboard down a sidewalk. +137861,A living room filled with furniture and hard wood flooring. +84130,a man riding a skateboard down a curvy road. +270738,a tennis player swings his racket at a tennis ball on a tennis court +167273,A boy doing skateboard tricks on a wooden object. +538913,Children pose around a surfboard in front of a lifeguard station. +487220,A man and two women standing next to each other. +125107,A pug chews on a large water bottle. +283254,A man in a tie sitting in front of a ashtray. +476406,A blue and yellow train on tracks next to two white vans. +539768,A tall street sign hanging from the sides of a tall metal pole. +358410,A bird standing on a ledge looking out. +247407,A small child in white shirt and tie with pacifier. +438723,A woman laying in a bunch of purses and shoes. +2006,a big purple bus parked in a parking spot +278350,A person watching another person standing in the water. +548957,A bunch of apples and oranges in a closeup +70619,A train parked in front of a train station. +554620,A woman with blonde hair holding an open umbrella. +476190,A small yellow and grey bird is walking on the ground. +404820,A man in a wet suit is surfing a wave. +17741,Three horse drawn carriages in front of a huge house with a clock on it. +501982,Tennis match in process with a female about to serve the ball. +579294,A person skiing on snow covered field in front of houses. +200627,A plate of food that includes rice and various vegetables. +301376,A street area with a building and cars. +109055,A cat sitting between two bikes sitting next to each other. +110630,Colorful slice of pizza sitting on top of a white plate. +152326,A man and woman cutting a cake near a window. +121572,a couple of buses that are lined up by some buildings +527374,A white plate topped with gravy covered food on top of a table. +76454,A giraffe is fenced in next to a large city. +515895,a person riding a horse on a beach +245450,A subway train with a row of orange and white seats. +411480,A crowd of people standing on the edge of a cliff next to the ocean. +172006,The bunk beds are made up with the same bedding. +93393,A giraffe is walking up a grassy and rocky hill. +517823,a couple of people that are standing in a field +33325,Three people are sitting on a bench in the subway. +187743,A small girl with long hair brushing her teeth +108898,The blooming yellow flowers are in the copper vase. +553709,a man in a tie holding a cup +280239,A train speeding down the tracks in the middle of a field. +161370,A living room filled with nice furniture and a persian rug. +86472,A white passenger train traveling down train tracks. +165419,A boy on the beach playing with a green Frisbee. +24396,"On a small stage, a stylish motorcycle sits on display." +378809,A rear view mirror on the side of a yellow bus. +562906,a slice of pizza turned up side down on a paper plate +559470,a little boy holding onto a suitcase in an airport +487688,there are two woman that are riding motorcycles +194013,A man working on an intricate task while on a canoe in an everglade. +564911,A oneworld passenger plane taking off from an airport. +389721,The giraffes wander around their cage and eat from the trough on a wall. +176993,an orange train is coming down some tracks +102174,a work desk with a monitor and keyboard +54924,Cluttered blue carpet with notebooks and video games. +450303,A group of people sitting around a table in front of computers. +246540,Decorated cake sitting on a plate atop a box. +426520,a living room with a bunch of figurines +264044,A couple of red umbrellas sitting outside of a small brick building. +265719,a man that is eating some kind of food +280709,Dog jumping in air to catch flying disc with adult sitting in background. +135604,A young man about to kick a soccer ball on a green field +262274,A surfboard that is on its side in the sand. +141795,a bath room with a toilet a large mirror +21394,Three people ride an elephant near a wall. +393054,A modern open concept kitchen and dining room. +183249,An open door that leads into a kitchen +84680,Someone dressed in a costume pressing the buttons on the microwave . +362469,People fly their kite by the sea while a boat sits in the background. +188824,a cat sits next to a remote control +539937,A person is flying a kite high in the air. +441247,A woman standing in a kitchen next to a table. +136270,A white wedding cake with blue and red butterflies all over it. +96097,there is a cat sitting on a wooden chair +474608,A disc jockey and a man singing into a microphone. +420579,A person standing next to skis in the snow. +309495,A toilet that is in a bathroom with the lid up. +434022,A steam train is traveling down the tracks. +220224,The top of a building with a clock on it. +431257,A large model railroad landscape with trains on it +513260,A blue train car sitting on top of train tracks. +183319,A glass next to a laptop computer on a desk. +45094,A man drinking wine at a wine tasting. +127074,A man holding a kite with a sea of people behind him. +515126,A bunch of bananas sit next to a cup of coffee. +232769,Some girls who are playing soccer against each other. +178446,A young girl holding a sandwich at a table. +141343,An abandoned teddy bear outside of a closed shop on the sidewalk. +580791,A pizza with meat served on a plate with a beer +467000,a rainy day with people on the road with umbrellas and a person with a cycle waiting in the shade. +433574,A person in a wheelchair plays music on a CD player while talking on a wireless telephone. +251967,A picture of a carrot and a knife on a plate. +566631,some microwaves with a few stickers on them +357430,A large pizza sitting on a pizza pan with a slice missing. +101280,A water bird stands on the shore as the tide comes in. +236025,A young man holding a tennis racquet in his hand. +178994,A group of sheep sitting next to a tree. +531594,A black cat lies on a wood desk. +303549,A white toilet with a black lid and red painting on it. +65969,A glass and vase sit on a table overlooking the ocean. +354072,A bathroom sink under a mirror next to a plant. +211204,A bear foraging in the grass on a hill +251344,Cupcakes with white frosting and different colored star frosting decoration on each. +216962,"The small bedroom is white monochromatic with lots of natural light, and no window coverings." +526801,A cluttered desk with a laptop and a computer on it. +541086,An ornate vase with a handle sitting on a table. +341401,Three boys are sitting and eating some food. +14600,A picture painting on a wall of a man with an umbrella. +129135,Yellow Train stopped at the station in front of a bench. +392933,A giraffe running across a grass covered field. +522702,A zebra standing on a lush green field next to a brick wall. +438253,A dog hides underneath a bed with its face peeking out of the bed skirt. +632,"Bedroom scene with a bookcase, blue comforter and window." +42979,Several people are running in a grassy field playing with a frisbee. +200725,A neat yellow bed in a room with white and blue walls. +428278,A plate holding a slice of pizza with assorted vegetables. +555920,A white plate containing fried food and various greens. +449471,A gaggle of geese walking across grass next to water. +53505,A toilet sitting underneath a medicine cabinet in a bathroom. +215897,Two guys leaning against a surf board on the beach. +236865,Young girl in a dress playing with a frisbee. +431439,A kid plays with scissors that look like a bird. +549448,A group of people are on a tour in the jungle. +176519,A man standing in the ocean next to a young child. +299601,A stuffed kitty cat is placed on a counter. +116226,a pair of yellow scissors a ladle and some oven mitts +350388,A cream based soup in a while bowl with a chopped green vegetable on top. +124659,A living room with a large green couch and office desk. +296383,A cel phone laying open on a table with reflections from the phone shinning on the table. +276458,A couple people in the water flying kites. +308894,A large long train on a steel track. +92416,A young man holding a bottle of beer while wearing a suit. +143129,A man and giraffes are sitting on the grass. +96110,Two and a half hotdogs on paper plates are on a counter. +533811,A man wearing a neck tie and a blue shirt. +536154,A smiling child surrounded by numerous stuffed animals. +10039,A very large tower has a clock on it. +242870,The black and white silhouette of a motorcycle near water +125435,A pizza sitting on top of a white plate covered in cheese and veggies. +376278,A zebra is lying on the ground with other zebras. +403907,A red bench sitting below tall neon lit buildings. +213422,The bed and desk in a modern hotel room +18191,A black and yellow fire hydrant on a city sidewalk. +237777,Two elephants standing next to each other in a jungle forest. +337120,A tall brick building with a bike parked in front of it. +153055,The thin pizza is sitting on the plate. +99540,a lift truck sits parked next to a pine tree +73450,Airport workers loading luggage onto into an airplane's cargo hold. +280320,Urinals lined up along one wall with a handicap accessible one at the end. +369675,A passenger train is sitting at a station. +225946,A train traveling through the countryside next to a dirt road. +136929,A box with varieties of donuts on the table +224662,An old self portrait of a man dressed nice. +309579,a bunch of people are flying kites in a field +218290,A baseball holding a baseball bat during a baseball game. +157928,A cooler attached to a sled near some skiers +359184,A street sign on top of two one way arrow signs. +53668,a boy attemping a jump with his skateboard in a parking lot +455218,A living room with furniture and a wall hanging +80713,A group of giraffes standing in front of people taking pictures. +366031,A woman standing with a bi-wing airplane on a runway. +127451,Two men riding snowboards in a snow storm down a slope. +493843,A trashcan has been knocked over in a kitchen. +83574,A bookshelf with a bear toy and various books. +251801,A wooden table topped with cakes and desserts. +578237,A group of men sitting in a wine seller. +307364,a large sidewalk is filled with people walking around +119308,"A young man jumping up, doing a trick on a skateboard." +356394,People walking and bicycling in a city street. +402887,"Foreign candy in great display, all of color" +13175,Boy in college shirt riding skateboard along curved rail. +226959,a woman jumping in the air so she can hit a tennis ball with her racket +459141,A person wearing a straw hat walking a bike. +203580,"A sidewalk with sandwich board, table and umbrella." +209239,A tasteful white and beige bathroom features and oval sink and large mirror. +178299,a brown and white cat sitting in a bathroom sink +359356,A man hitting a tennis ball with a racquet. +93730,a tennis player on a court wit ha racket +292488,Person in a parka taking pictures with a mobile phone camera. +405261,Two people eating biscuits on a brown table. +92020,A white dog having its hair blown dry by a man. +374111,Two plates of chips and a sandwich are served on a tray. +88652,A picture of a broken down stop sign. +23671,a person is jumping up with a tennis racket +315388,a pair of shoes and fabric strewn across a wooden floor. +327114,A cut in half sandwich on a plate with fries. +316882,A break room filled with tables and chairs. +234291,Lone giraffe standing in shade of tree in outdoor natural area. +284253,A pile of eggplant for sale at a market. +112085,A man riding on the back of a wagon being pulled by two horses. +201220,A man and woman in wedding attire smile. +230610,A bathroom with a sink and shower curtain with a map print. +405007,A European street of historic red-brick buildings and a spire rising in the background. +334760,A performer attending to an injured brown horse. +430155,a street image with parked vehicles along side the curb +345389, A tall woman is standing in a small kitchen +137678,A building with a roman numeral clock hanging from it. +80057,A brown teddy bear sitting at a table with colored pegs. +393804,A roast meat sandwich with a green sauce sits on a plate with something fried to the side. +376545,A young man flipping a skateboard through the air. +489023,A soccer player looks up at a soccer ball. +442009,a bathroom with a bath tub near windows +11156,A purse sitting next to its contents and a laptop +22112,A shelf with a vase filled with green plants next to a vase with a face. +488823,A young man is working and mixing something together. +260922,A photo of an apartment building with a clock on it +182523,A man holding two red skis walking through the snow. +29472,A man with a white shirt and dress pants outside in the rain with an umbrella. +49517,There are plenty of leftovers on the stove. +116037,An baseball player is swinging at a moving ball while the catcher behind him is ready to catch it. +418949,"The ballplayer waits in the batter's box, watching the umpire defend his call." +498350,Motorcycle rider rides a rocky trail in the forest. +1856,A man riding a wave on top of a surfboard. +485081,An old double door oven that was in a fire. +543895,Two men squatting outside a store looking at a frisbee. +371999,An illuminated clock tower against a nighttime background +256251,A piece of pizza with a bite taken out of it +510559,A woman in a wet suit rides a surfboard. +108380,Two cows in a field eating from a food bowl +577932,A woman walking next to a man riding a pink bike. +157847,a bird that is flying high over the sky +505400,Group of people standing in a field playing with the frisbee. +510707,a kitchen with a big sink and a rack for the pots +14975,Several people are at a podium holding a frame while a man in a suit looks on. +43435,"Two surfers catching two different waves, one after the other." +510842,A bus sits next to a curb at a cross walk. +396676,An intersection of a city with pedestrians in the crosswalk. +561901,An adorable little girl standing in the middle of a park holding a tennis ball. +346265,there is two picture of a giraffe in the wild +157206,A stack of old trunks and luggage against a wall. +176474,Three different types of dogs looking at the camera. +193181,A man holding a baseball bat on a field. +275210,A giraffe in a dry savannah with dry shrubs +544876,two males are sitting on a wooden bench eating donuts +231795,A kid standing there looking at his snowboard on the snow covered walkway. +579231,A baseball player standing next to home plate. +387776,A man jumping on snowboard with mountains and trees in background. +43417,Laptop on a desk with an external mouse attached +541435,The counter of a coffee shop advertises additional seating downstairs. +506707,A baseball player runs into home plate during a game. +197254,A horse drawn carriage is parked along the curb. +408253,A woman standing on a beach holding a blue bag. +149785,A small elephant is walking in an enclosure by the fence. +92187,A parking meter with a wooden stick figure on top. +64961,A umbrella sitting over lawn chairs on a beach. +557677,A bathroom with a white toilet sitting next to a white tub. +569526,a small child swinging a bat on a baseball field +382512,A man that is sitting down near a bird. +104198,A sign is next to an ornate white gazebo. +329337,A stop sign above other signs in front of a house. +478868,A man walking across the street without any traffic. +212342,Two colorful peacocks walking towards a brown wooden bench. +326410,"A living room is set up with cool walls, bright carpet and a dated entertainment center." +30595,toy of tracks arranged in a straight line +262197,a very tall brown structure sitting above a parking lot. +113975,Dog jumps over a woman to catch a frisbee in a dog show. +42288,a man jumps in the air as he catches a frisbe +373375,A giraffe that is standing near a tree. +288481,A bunch of flowers inside of a vase. +23879,A train traveling down train tracks near a city. +520781,A bed in a bedroom beneath a flat screen TV. +247477,Person lying on brown leather couch in sparsely fille room. +293175,A couple riding on top of an elephant in a forest. +432429,a female tennis player in a black top playing tennis +175469,A couple of boats floating on top of a body of water. +43535,A man kissing a baby elephant on a dirt road. +477919,A store selling both ripe and unripe bananas. +311690,A plate topped with lots of greens next to a bottle of wine. +204830,Shelves filled with fresh vegetables of every kind. +319342,Adult surfer riding small breaking wave on open ocean. +348522,Man sitting on large block checking cell phone. +198397,A man hitting a tennis ball with a tennis racquet. +87409,Three beautiful women riding a paddle board on a large body of water. +87677,"An old building with two rusty, very old pick up trucks parked in front." +394892,a little kid riding a skateboard at a park +151629,A man holding a tennis racquet on a court. +170190,Red car on roadway in large city area. +157124,Various sink cabinets lined up in a warehouse +214391,Sandwiches and beverages sitting on a table +444183,A man riding a pair of skis down a snow covered slope. +163798,A clock tower sitting beside a large building. +528875,"pans filled with assorted veggies, fruit and rice" +309434,Two planes fly next to each other with only the sky visible in the background. +404526,"A view of a beer bottle and a beach with chairs, an umbrella and the ocean in the background." +390157,A couple enjoying a yummy dark craft beer. +226119,A man standing behind a child sitting at a table +354212,A person using a mouse on top of a wooden desk. +523957,A guy is skateboarding through cones on a street. +252459,A picture of a window opened and something on it. +209782,A man sitting on top of a bench in front of a street. +282659,Professional baseball player getting ready to swing at a pitch. +553992,"An institutional looking room holds an exit sign, chairs, recording equipment and a man with one arm aloft that appears to be demonstrating something with a device in the held-up hand for the benefit of a woman behind him that is watching closely. " +484816,A yellow school bus with a creepy eye shaped rear view mirror. +498804,A tower of a building that has a clock on it. +67419,A bird perched on top of a tree branch. +100006,A truck that is sitting in the street. +549220,A dog on a leash trying to ride a skateboard. +89765,A shiny metal pot filled with some diced veggies. +12343,a man wearing black is riding a red and silver motorcycle +167989,a lady preparing pizza on a wooden table +218752,A large brown cow laying on the ground in a penn. +390292,A woman sitting in a chair beneath a sign saying not to sit there. +187144, A white bus parked at a stop next to a crowd. +474906,A white and black truck turning onto a street. +289899,A group of people ride in a canal past buildings. +68881,A full plate full of delicious food sets on top of the table. +358624,An orange being held up to a christmas tree bulb. +577096,some kind of pole that has some writing on it +146917,A display case filled with fruit in paper wrappers. +574940,"Quaint living room area, furniture and decor appearing to be early American, well lit." +253693,Three zebras in a field of dry brush. +216333,A large tower of different sized and colored luggage. +453520,A barn filled with cows and a few lights. +261068,A lady doing something with animals in an enclosed area. +248810,The adult giraffe is standing near a metal fence. +209856,A man standing in front of a plate of food with a glass of wine. +284465,A group of children playing a game of soccer. +411559,A man is flying a kite with two strings +381262,A couple of men sitting on a cement block on top of a skateboard. +445008,"Pedestrians pass in front of a fence, with benches, trees, and buildings on the other side." +529215,Two people with umbrellas are walking across railroad tracks. +370513,a desk with a laptop a monitor and a keyboard +104572,a bath room with sinks and mirrors +346560,a woman is facing an oven in a kitchen +255784,A group of people with suitcases in a room. +560890,A group of people standing around each other. +245301,The girl is riding her show horse around the course. +562485,A young woman wearing a suit and tie posing for a picture. +478099,A small train is going through a garden with people watching. +135978,The view of a giraffe through some vegetation. +302219,A trunk full of backpacks and other bags. +248363,A plate of cookies next to a cats tail. +162939,A plane is parked near the pretty blue ocean. +260048,a green light over a street at an intersection +372914,a crowd of people with a clock tower in the background +469232,The guy is nicely dressed in a suit and tie. +545111,A see through container with a lemon and apple dropped in it. +251901,A person hiking up the side of a snow covered hillside. +572051,"A plate of pasta shells, broccoli and legumes." +271177,A motorcycle sitting on the side of a street corner. +407083,A small dog is looking out a car window. +437332,a male skateboarder in a white shirt doing a trick +324845,Three sandwhiches with toppings on them and a cucumber +5652,A little baby with blue eyes talking on a phone. +78420,A brown and black cat laying on laptop next to a chair. +164779,A white food truck driving down a street at night. +60090,A yellow commuter train parked at a train station. +478320,a passenger sorting through luggage on an airport runway +252776,a man glares as other people behind him look on +294134,A Fawcett's Malt truck sits parked on the side of the road. +528311,A desk in an office with a computer and a phone. +500492,A glass of beer with a bottle next to it on a table. +412399,A talented young surfer riding a large wave. +138601,A bus on a street that only allows buses. +40986,Raw cookies in a pan on the counter and baked cookies in a pan on the stove. +129663,Two people on a tennis court swinging to hit a tennis ball. +174390,A police man on a motorcycle drives down the road. +501294,A picture of people watching TV in the living room adjusted to imply motion. +523780,Two people skiing right up to a big lodge. +15987,Two elephants are touching trunks through a fence. +46877,A grey and white cat outside looking into a window. +387833,A tall clock tower with a massive clock on each of it's sides. +11181,Someone walking down the street while holding a pink umbrella +204206,A fire hydrant has been painted in the style of Dalmatian outside the fire department. +410878,A parked motorcycle sitting on a dirty road. +488287,"A baby, eyes wide open, on top of some covers." +474854,a person eating a banana sitting at a table +3337,A man with a wristband on and a cell phone in his hand. +365132,A couple of women walking across a beach next to the ocean. +157093,A baseball player holding a wooden bat standing on a baseball field. +362599,"Small kitchen with wood cabinets, white refrigerator, microwave, and furnace" +439969,A rusted pink fire hydrant in the grass +446574,A bathroom has a shower and toilet in it. +8708,A white teddy bear is posed to appear to be reading a book. +279927,A group of people standing next to each other near a ground of people on a green patch fo grass. +7961,Some is holding a bottle of wine next to a huge hot dog covered in chili. +392985,An elephant stands in front of a watering hole in his habitat. +279696,A man standing next to a circus clown. +183394,a couple of people ride on horses side by side with each other +240102,A man standing on top of a lush green field. +271900,Some sheep are next to a hay pile. +527497,An office cubicle with two computers on the desk +25668,a male and female and she is holding a white umbrella +519330,A group of people dressed in some nice clothes +126583,A man with a white cap and clothes holding something. +564738,A man holding a phone up to his ear near a tall brick building. +179141,Four people are smiling together over a box of pizza. +101762,A cat standing next to a bike parked against a wall. +338986,A train pulls up along some buildings. +208340,A computer mouse is sitting on top of a keyboard. +192332,A passenger train parked at the train station. +403315,A husky dog is carrying a frisbee in a park. +84258,A boy with an earring and a hat wearing a tie. +478338,A women using sports equipment on the water. +205911,A man skiing alone on a snow capped plains +489046,A bird sitting inside of a green bush outside +73634,A small blue and yellow plane sits at an airfield. +538064,A statue of a man not far from a large clock. +518719,Earthen toned clay pot displayed on hard surface. +368648,a white and blue bus is by a curb +85298,A little girl standing on a tennis court holding a racquet. +28540,Couple wearing hats enjoy a calm elephant ride with tour guide in front +131276,A bakery with customer at the counter and various types of donuts in the display case in front of the customers. +165884,A bowl filled with ripe fruit sitting on top of a table. +41449,A young girl tossing a frisbee to an older man +274084,A man stands in a boat near a flock of ducks. +237501,Two teddy bears position to look like they are playing instruments. +580757,A fire hydrant that has the stars and stripes on it. +186556,Two giraffes move around in an enclosure next to some trees. +259037,A man dressed in baseball clothing and holding a baseball glove. +306693,A small yellow car parked between two large yellow trucks. +218268,some people boats and birds in the water +348929,A man in the street of a busy city. +76866,Three zebras eating grass on a dry grassy slope. +513292,A little boy carrying a skateboard that is the same size as he is. +505440,A couple of giraffes that are standing in the grass. +516871,Several fruits and veggies are ready to be eaten. +26573,A crowded street in an Asian country is full of people with umbrellas. +24097,A group of people and elephants on a street. +255135,A stop sign laying on a sidewalk fallen over. +254123,An empty plastic container and a plastic fork left on a bench. +244240,A toilet with a lot of debris around the base. +579822,A dog running into the waves near some surfers. +278550,a dog rests in a basket on a bike +42779,A brown hamster standing on a hair brush. +367452,A clock is high up on the side of the tower wall. +566049,People on a beach playing a game of frisbee. +558911,"A view of a drink with a garnish sitting on it, on a table." +489605,Pasta and vegetable salad served in bowl with meat and cheese. +101473,A cell phone with a smiley face against a plastic figurine +61471,Puppy chewing on toilet paper in the bathroom. +297419,A pair of fancy chickens among the daffodils. +523681,A horse eating grass from a grassy field. +27032,A mama elephant and her two babies are standing alone in their habitat. +144383,A young surfer in green shorts riding a wave. +469713,An animal that is licking the neck of another animal. +419971,This men's bathroom has two urinals and a sinks. +539529,A hairy man is carrying a surfboard in his wet suit. +458119,A very cute cat laying by a big bike. +498374,A person's reflection is shown in the bathroom mirror they are photographing. +404758,The farmers are attempting to sell their products at market. +332851,A man riding on top of a paddle board. +498392,A man hanging his face out of a train window. +244823,An old tv lies broken on a beautiful beach. +279154,a fire hydrant in a field with trees in the background +420852,Some hot air balloons are in the air above wires. +466981,A man standing next to a car in the snow. +138040,A PICTURE OF PEOPLE GETTING OFF OF A WHITE BUS +49473,a green vase with flowers and a calendar sitting on a table +299353,A large clock tower connected to a brick church. +389771,A little girl sitting on top of a bed holding an object. +188651,The picture of a cat under a car. +346863,A man sitting in front of a table drinking wine. +192212,A laptop sitting on someones bed next to a suit case . +139843,A tall brown building with a large white clock. +82061,A living room scene with a wire chair and a television. +273494,a hotel rooom with two beds and a food tray on one bed +290700,A man flying on top of a surfboard on top of a wave. +537007,A father and son ride waves while using a body board in the ocean. +263202,A girl who is checking her cell phone. +490032,Surfers at a cliff next to water at sunset. +88682,A group of people set on the ground talking in a park. +561160,there ae people that are sittign at the table +137803,Pictures of Queen Elizbeth the second riding a horse. +147624,A person in a shirt and tie is holding a can. +564822,A man flying a multi-colored kite on the beach. +117425,A toddler celebrates his birthday with a cupcake. +131018,A toddler reaches into a bowl of grapes in a sink. +19404,A sea gull walking along the sand and surf. +152776,fresh vegetables picked from a garden and a gardening tool +559956,A group of people kneeling down beside some sheep. +94871,A group of people standing around sheep on a field. +456303,A person on a snowboard who is performing a trick. +213758,a ram on the side of a mountain on a rock +294073,A woman and a man standing between two brown horses. +544120,A man sitting at a table in front of a giant pizza. +12319,a couple of giraffes are standing on a trail +455381,"A white white topped with pasta, mushrooms and broccoli." +531815,a shirtless male skateboarder is doing a trick +227801,Two tall teddy bears standing next to each other with a person kneeling between them. +483038,A man is shearing a sheep on a concrete pad. +409867,A tall clear glass window with two cats sitting at the base of it. +31280,The lamp shines next to the made up bed. +79397,A man standing on top of a baseball field. +66355,A cat walking on a bed with several books on it. +345139,A man smiling while sitting at a table drinking beer. +381360,A man is surfing a big wave towards shore. +373945,A man sitting at a counter with half of a pizza. +54627,"Brown, white and tan horses grazing in an open field." +208380,Two vases filled with water and lots of colorful flowers. +424208,a t.v. stand that has a t.v. and some other electrical equipment +10149,A cook slices up food while preparing a dish. +7818,An illuminated floral display forms the centerpiece of the arrangement in this close up of a dining room table setting. +209733,A man is flying a large kite in a field. +446218,A red fire hydrant sitting in front of a brick building. +511066,A woman standing in front of a door with a broken surf board next to her. +209753,A woman with large black tear drop earrings and a black dress looks at her cell phone. +321118,A stuffed bear head and paw on a laptop computer. +383046,A man in glasses snowboarding down a hill. +482829,A woman swinging a tennis racket at a tennis ball +529806,Men are in action are playing frisbee on grass. +474452,A red sign notifying drivers that there is no parking allowed at any time. +251476,A herd of zebra standing in a grassy field. +39477,Someones living room with a sewing machine and plants. +288391,The cell phone is gold and hooked up to a wall. +117458,A man is riding with a box on the back of his bike. +493279,A woman walking next to a snowboard on a ski covered slope. +549351,A smoke stack sitting on the side of a roof. +518213,a large bull with horns standing in a grassy field +564095,An adult standing holding surfboard and a child kneeling by water. +575110,A half dressed man points toward his wristband. +469096,A group of giraffe standing next to each other. +44045,a bicycle leaning against a stop and a yellow car +364919,A bridge filled with blue and white buses. +206751,A man holding a giant half a sandwich on top of a table. +117869,A giraffes peaking over a rock with trees in the background. +7556,People in the water and parachutes overhead. +337035,Ducks are gathered on rocks beside a body of water. +347506,A group of people standing next to a bus and a flag pole. +299039,A plate with three sandwiches sitting next to shoestring fried potatoes. +565957,A partially lit Asian person holding a phone +530265,A man standing in a kitchen preparing food. +256628,A yellow dog relaxing with a leash attached to a chair and a blue bowl of water nearby. +415153,A girl is throwing a Frisbee near some tents at a campground. +18158,a vintage photo of some people waiting for a bus +59455,People on corner with cars on street and stoplight with building +99515,people in a store looking at old looking items on a table +13659,A man sitting in front of a laptop computer in an office. +171443,A man standing on the beach playing frisbee +429598,An interesting kitchen renovation with brick and wood +26611,Carrots in a bowl on a metal surface. +445334,A little kid is standing on a chair +230226,A bath caddy is stuffed with all the amenities for teeth care. +466256,a plate with some vegetables and rice on a plate +145020,Donald Duck talking to Minney Mouse at Disney World at Christmas. +353644,Two young girls on skateboards with a beagle in the front. +153072,Some very colorful and large kites being flown on a beach. +146155,two people at a bar holding drinks +562261,A man stretching out yelling while catching a Frisbee. +529148,"Young children sharing a laptop in a messy room with several laptops, books, and papers." +268224,Three young people in a kitchen pointing to a pizza. +179174,very many travelling bags placed on the floor +455750,A lazy dog lies atop a bed in a simple hotel room. +16995,A giraffe walks leisurely through the tall grass. +551350,The picnic table under the tree is empty of people. +432441,A very very old clock that is in an very old building. +33109,A semi truck is driving down a street. +9186,A group of vases sitting in a shop window with other home decor. +327255,A man riding a snowboard across a snow covered slope. +208473,A small bird standing on top of a sandy beach. +224337,A man holds pizza crust in his mouth. +16903,An orange detour sign hanging from a metal pole under a cloudy sky. +544052,A couple of storm troopers standing next to each other. +327367,A neon sign with a clock on top of a building. +298691,a big bowl on a table filled with broccoli +453926,A plate that has a dessert on it. +497281,A woman swinging a tennis racquet on a tennis court. +483587,A small black dog walking across a grass covered yard. +8646,Cars traveling on a three-way with large truck in the middle +143445,A couple of women are taking some shot drinks. +410614,A man on a skateboard captured in each step of a trick. +25069,Two men skateboarding in the middle of the street. +568687,Cars are driving down a very busy freeway. +366711,A man standing outside beside a bunch of fruit. +573819,Two young men sitting in front of an open laptop computer. +66706,A plate topped with banana slice covered pan cakes. +490199,A couple sitting on the back of a flatbed holding a dog. +47570,A family sitting down at a dinner table eating food. +264222,a man that is typing on his keyboard eating pizza +480311,Many children are posing together outside of the building window. +92131,A green bus parked in a parking lot next to others buses. +268412,a bunch of cows walking down the road +313872,"A young man is standing with a skateboard on a sidewalk with the chalk message, ""life is beautiful""." +500058,the back of an air plane flying through a blue sky +429913,A baseball player winds up for a powerful pitch. +14007,A cat stands on top of a blue electric device. +450570,A woman skiing with a small child across snow. +235380,an old photo of a castle at the end of the street +149022,A white plate holding various sized doughnuts on a table. +244317,A picture of some food and a toy on top of it. +85353,"A road sign next to a parking lot that reads ""FLAMING LIPS ALLEY""." +476119,a man skating on the road very fast +541965,A plate of partially-eaten pizza is seen on a restaurant table. +296775,A person wearing a backpack stands in front of a bus driving by on a city street. +124760,a person in a dress on top of a horse +195598,A small toy train on a model track. +559252,A grey van in front if a parking meter that takes credit cards. +317035,A very cute old looking suitcase with some writing on it. +431891,Bunches of carrots and broccoli on display stand. +320425,A group of giraffe standing next to each other on a dirt field. +372067,A group of people with surfboards riding a wave in ocean. +564069,a bus driving on a city street with trees +278742,Students in a study hall working on computers. +37209,A man riding on the side of a motor bike. +323751,A train is making its way down the tracks. +169584,Two vases show ladies appearing to look carefree. +43734,there is some sort of animal that is in the waves on the water +295767,Two storm troopers sitting at a wooden table in front of a pizza. +283627,A black dog with a red collar under a pink blanket. +476417,This is an image of a panda eating bamboo. +193605,A man is selling bananas outside in a lot. +232625,A guy on a snow board in the dark. +69138,A red traffic light with a sad face drawn over it. +69411,a snowboard instructor teaching students how to snowboard +416774,THIS IS A YUCKY PICTURE OF A LARGE AND SMALL TOILETS +290704,Three giraffes crossing dirt road into dry field +114239,A woman holding up measuring cups and a cat watching on the counter. +85576,A commercial bathroom stall with empty toilet paper holders. +382584,A transit bus making a turn into a garage of some sort. +405174,A cat sitting on the keyboard of a computer on a table +459396,A brown cow grazing on a patch of lush green grass. +488454,A white horse grazes in a field near a forest. +323418,A sky filled with airplanes flying underneath the clouds. +420958,This a view from an airplane of the landscape below. +171632,a blue bedspread and a blue curtain on the window +27935,Three pots of flowers are placed on a window sill. +2988,a black white and orange cat lying on a blue chair +352533,A black pan filled with mushrooms and vegetables. +363560,Some young children are lined up by a tennis net. +349437,Two people sitting on a motorcycle that parked on the road. +33802,This living room has a sectional couch. +256197,"A bunch of cheese, breads, and meats on plates. " +54421,an image of a plate of meat with veggies on it +352703,a lady that is cooking some food on the stove +201646,An extremely focused man playing with the Wii. +75713,A man leads a long-haired bull with a rope in a competition. +249953,A man riding a blue surfboard on a wave in the ocean. +455085,The side of a bus parked on the side of a street. +310227,Black and white photograph of two bare feet sticking out from the covers of a child's bed +200882,A clock that is on the side of a building. +528595,A group of people including children and adults are riding on a small train. +171685,people walking around and looking at assorte motorcycles +199158,an image of a toilet that is sitting outside +294908,A girl is trying to hit a baseball with a bat. +160166,A man sitting at a table eating a hot dog near an american flag. +60856,A lone horse walks through a desert plain. +376236,a young boy is feeding a large giraffe +193348,A small child that is holding a toothbrush and brushing their teeth. +78060,A man and young child stand in the snow giving thumbs up. +550350,some white crackers a controller a bottle on a couch +465820,a person riding a skate board siting down on a road +543551,A double-decker bus near a waterway and a bridge. +250258,an image of a professional baseball game being played +173371,The pizza has small plates with various foods around it. +513891,Signs indicating a one way with paintings on it +8844,Smiling lady standing by two bunches of bananas on a table. +289152,A baby and a teddy bear in a playpen. +525899,Black and white photograph of a surfer balancing on her board +49068,A woman in riding gear riding a horse in a dirt arena. +129852,A woman standing on top of a lush green field. +122861,a couple of people that are surfing in some water +100539,a blue truck and a male in a purple shirt and a tree +535579,A bunch of stuffed bears and gift boxes in a suitcase. +296544,A table of food that includes pizza and a cake. +426175,a man standing next to a red train near a train track +353317,A clean kitchen is shown with and without a center island. +403821,Different types of ice creams and cold drinks are seen in a shop. +23937,a small sheep is laying in a field +531070,a zebra standing on some dirt and bushes and trees +156846,A group of people sitting around a long table +472755,A train is moving down the train tracks. +565582,A living room filled with furniture and a small dog. +230031,a person kneeling on sand with a kite +86840,There is a yellow fire hydrant I. The street +432317,A large group of police riding horses down a city street. +35711,The men standing in the ocean while another one surfs. +23084,A young woman holding a tennis racquet on a tennis court. +502852,A little girl using a laptop on a table +10720,A horse stands tethered to a wall. +163682,A businessman is sitting in a chair and smiling for a photo. +203171,many kites flying high in the sky near buildings +189966,A kitten standing on the edge of a small table in front of a mirror with an elaborately carved wooden frame. +217825,A city bus parked next to a bus stop. +175061,several yellow trains with graffiti designs on them +242368,a trey with a bunch of vegetables on it +197191,Two birds standing on a section of cobblestone. +388130,A plate of food with vegetables and meat. +237780,A herd of cattle standing on top of a lush green hillside. +413685,A man who is standing by a sign that says lost children. +405736,a man stands on top of a snowy hill +519208,a man standing next to an elephant next to his trunk +282225,A young man kicking a soccer ball around a field. +345466,A pitcher holds his arm far behind him during a pitch. +221282,A woman cutting a pizza on a wooden surface. +207652,A parked motorcycle with a red enclosed side car. +145436,"Sliced oranges, a juicer, a glass and a paring knife used to make orange juice." +235984,A stop sign stands amongst a garden of cacti. +483994,Sheep are standing on a platform with a dog behind them. +276893,A small boy is asleep on the side of a bed. +229858,A deer standing next to a small deer in a forest. +511398,A small dog on a harness laying on top of a sandy beach. +573968,A person on a snowboard is standing on a rail. +277945,A baseball player swinging a bat at a baseball. +383039,A horned ram and a sheep grazing in a fenced field. +526804,A white plate topped with a slice of pizza on a table. +515421,A woman with nice breast holding a book while sitting next to a dog. +408859,a bathroom with a sink a mirror and a toilet +547421,Black and white photograph of dog walking and person on skateboard. +97427,Stacked washer dryer in kitchen near fridge and stove. +206218,A laptop computer sitting on a truck table. +496360,A lone snow skier on a large white slope meanders his way down. +264461,A bathroom with a traditional toilet next to a floor toilet. +460289,A girl with a colorful shirt on his a tennis racket in her hand. +372428,Brown and white horses graze near lawn chairs. +546742,A cat sitting underneath a bed on the floor. +103571,three people riding horses on a beach near a body of water +315976,a red double decker bus is seen coming up the street +280271,A blue fighter plane on runway with trees in the background. +471842,A piece of cake sits on the paper plate +51674,Boats floating down a river surrounded by trees. +384616,a red fire hydrant near a dirt road with trees in the background +523470,A meal consisting of two pieces of meat on skewers and greens and cheese. +537721,A book with a picture of a cell phone on display. +544975,Wild animals grazing near a lagoon surrounded by trees. +376416,A group of baseball players holding a bat. +172595,A desk with multiple computers inside a office +115709,A photo of a restroom containing two toilets. +385029,A person cutting a pizza next to a salad and bottles of wine on wooden table. +125527,A Samsung phone is being put in a pocket. +434417,A hotel room with a bed sitting next to a couch. +127510,a baseball player catches a ball in his glove +47516,Three people in suits posing outside of a bus +110415,a nurse watching a newborn baby hooked up to tubes +56638,a big park bench that is next to a building +42215,There are two yellow lemons and five green lemons and also two oranges +243810,Two toilets sitting on a sidewalk with a cardboard box. +235192,A group of people watching a man in the water. +187513,A bathroom with a sliding shower door next to a toilet. +458388,three donuts and five donut holes on a plate +543696,A bunch of yellow bananas sitting on top of a counter. +365542,a public transit bus parked on a city street +153632,Side of meat sitting on a white plate on a dinner table. +506483,An art installation is placed by a street. +80145,A man wearing skis holding two ski poles. +219894,"A black and white kitten sleeping on the keyboard of a laptop," +244411,Black cows standing in the grass of a pasture. +134322,"Kite flying between water area and building complex, probably Japan." +471009,The woman is flying her kite on the beach. +454444,A group of three giraffe standing inside of a cage. +475882,"An intersection with a street sign, a person and a stop sign" +5502,A set of four scenes of people flying a kite over a field. +67125,A group of people standing around a couple of elephants. +323186,A white egg-shaped bathtub in a decorative bathroom. +8647,The people walk along the path near to the stores. +25378,A sign for a restaraunt and bar outside +531739,A man driving a bus down a street next to a parking lot. +312795,Woman in black heels standing on green and white suitcase. +92109,"A giraffe's head is pictured in this clear, colorful photo." +89109,A cute brown dog laying on a blanket. +299083,It will be a long wait for the truck before the buses leave the area. +109894,a clock on a pole on a city street near buildings +538912,A picture of buildings with a clock tower in front. +258285,Two large passenger jets flying over a beach filled with birds. +234554,A man riding a skateboard in a river bed. +524775,Yellow double decker bus being boarded on a city street. +15085,A giraffe drinking water from a river on a beach. +511136,A man placing a beach umbrella on top of his roof. +320554,A black cat laying in the sun under a bench +434177,a group of people walk on a beach with surf boards +56872,A man in sunglasses and chains is holding a microphone to his mouth. +190236,An office cubicle with four different types of computers. +321603,Kitchen appliance in use on wooden counter top in cooking area. +121414,Birds perched up on a tree branch next to a window. +268378,A group of people eating a meal at a table. +362327,A black brown cat with large whiskers looking at the camera. +287858,The contents of a bag sitting on top of a bed next to a bag. +96306,There are people watching other people play table tennis. +110784,A bus traveling down a street next to a tall building. +505831,A bus driving down a city street during the day. +333924,A man on a surfboard on a wave in the water. +257470,A woman playing in her hair while sitting on a bed. +200667,A cow that is leaning under a metal wall. +557679,An older woman serving two younger people food +305799,A teenager on a blue skateboard has his arm in the air. +190690,A yellow and white cat sitting next to a book on a bed. +502644,A woman sitting on a toilet with a mask on. +577821,An old clock tower with roman numerals and bells. +303357,A brown horse sticking its head out of a red and white barn door. +292485,a man standing on a pair of skis on the grass +106113,A family is sitting at an outdoor picnic table. +363276,A man standing in a park holding a pizza. +419074,Jet liner flying off into the distance on an overcast day +7519,A man in foodservice holding baskets with food. +136117,Two open suitcases filled with a variety of snacks +576927,A park bench with two stones piled on top of each other +411188,a gray bird about to perch on a branch +463211,students wait for a bus to come pick them up. +276585,A passanger bus stopped by the side of the road. +149571,A teenager riding a skateboard down a street. +439306,A delivery truck is parked while a man is standing in the back. +573796,a apple that has a pair of knifes sticking out of it +504813,A watch with a gold design surrounding it. +247223,A red light house on pier next to water. +146451,An outside photo of a fire hydrant in between two poles. +53744,"a cutting board with a knife, tomato, and lettce on it " +493273,People flying and watching kites at a park +266250,A woman and a cat sitting in front of a TV. +197840,A couch sitting in front of a rub on a hard wood floor. +236419,"An umbrella on a cement wall that says ""San Miguel""." +456496,A woman sitting in front of the Eiffel tower near pigeons. +546687,Cityscape of a train stopping traffic on a street +225731,a green motorcycle parked and resting next to another vehicle inside a parking lot +301574,three motor cycle racers posing on their parked bikes +108152,A couple of horses pulling a cart with a person. +195538,"a desk with a keyboard, monitor and a laptop on the top" +183348,A entrance into a building next to a parking meter. +108021,A pair of scissors sitting on a strap. +554266,A series of photos showing a person laying on a bed. +428218,A couple of people standing on top of a green yard. +195002,A young girl eats a doughnut near another woman. +232614,A bird is perched by a leaf on a tree branch. +59458,A street sign saying S. Gay st while a traffic light is yellow. +89268,a table top with some laptops on it +447152,this is a train riding down th rails +127842,a man surfing a small wave on part of a river +561619,A man sitting in a chair holding a remote and watching television in a living room. +516476,A bus driving down a street next to a white van. +504811,A biplane flying over a small church with a steeple. +566277,"Two baseball players standing on a field, during a game." +246076,A large dog sitting at the foot of a couch. +508303,The person is holding a pastry in their hand +422253,Two giraffes leaning over a fence to eat leaves. +156832,A toilet sitting in a bathroom next to a mirror. +435003,A laptop computer sitting on a desk next to a desktop monitor. +581332,Three glasses of wine sitting on a wooden table. +266451,a clock tower with a white clock and some buildings +254814,A busy city intersection clogged with bike traffic +45644,A display of different vegetables is seen in a store. +537652,A bird that is standing on a concrete ledge over the water. +184613,A child holding a flowered umbrella and petting a yak. +80117,A man in a parking lot doing a trick on a skateboard. +33576,a man walks and talks on his cell phone +457584,A display of donuts with various toppings and varieties. +572725,A man in white shirt grinding a skateboard on rail. +15278,A white plate topped with broccoli and a dumpling. +478077,A microwave oven sitting on top of a counter top. +391255,A young woman with a sword standing next to a man over an orange cake. +359097,Old fashioned computers are lined up on a desk. +353889,A female tennis player is attempting to serve the ball. +496264,A giraffe stand in front of large rocks and looks at a tree. +294247,A passenger jet in flight in a clear blue sky. +4187,A tennis player prepares to hit the tennis ball +332627,A gorgeous young lady holding a tennis racquet on a court. +154423,A black desk with a desktop computer monitor and keyboard sitting on top of it. +539787,a man and his baby are looking at some donuts +546832,Two women pose with a hot dog at an outdoor function +462244,A train rides alongside another train on the tracks. +255339,A serious looking man and woman posing for a picture. +108189,A meat sandwich cut in to three different parts +252342,A Christmas tree in front of a window. +413810,A skier riding down a snow covered slope. +83540,a person wearing a blue jacket is wearing skis and snowy trees +277208,A picture of a giraffe drinking some water. +140289,Two born bears walking though a forest surrounded by trees. +563964,A man throwing a frisbee in front of a sign point in the direction of the toilet. +423830,A bird walking through some gravel as its baby chicks follow. +14713,A living room with a couch in front of a TV. +281448,Two sheep standing next to each other on a grass field. +68646,A little boy that is sitting in front of a laptop. +401758,A dog kissing a cat on top of a cement road. +117191,A toilet seat with a fake foam butt on top of it. +144252,this is a man swing a bat at a ball +444493,People at a bus stop waiting on a bus. +326332,Boy on a skateboard in a skateboard park. +181836,A man walking without a shirt past an orange cone. +424521,A shirtless man doing skateboarding tricks near a stream +243491,A collection of military airplanes sit in a hanger for display. +125643,A blue and yellow fire hydrant next to a yellow cone. +79619,"A little boy wearing a white shirt, tie and blue pants is smiling as he sits in a white chair in the middle of the grass. " +154419,A dog wearing a protective cone around it's head watching TV. +196442,a man holding onto a some wires while skiin +255708,Several people are skiing in the snow by a tree. +507887,Two pizzas are sitting alongside an almost empty pitcher of wine. +118956,a yellow and white fire hydrant near a building +63154,A surfer is riding a wave in light blue water. +264191,Some rocks are collected in a corner in this room +263428,Some people look at sheep on a farm. +268856,Two men play Wii sports in their living room. +234902,A man in a elevator taking a self portrait. +267169,A baby elephant being fed a bottle of milk. +330493,Person in restaurant with flooring and blinds with tables +225537,A photo of a black lap top sitting on a table +411695,a clock tower in the middle of a paved area in a park +466015,A dip surrounded by vegetables such as celery and broccoli. +226377,A professional tennis player waiting for the ball. +237308,The long train has a yellow and red engine and moves down the track. +372258,A man in green shirt catching a white frisbee. +51533,Many pots and pans are hooked on a kitchen wall. +221605,A desktop computer sitting on top of a wooden desk. +322831,The train is for decoration out in the front of the building. +480275,A wooden wagon with wheels topped with bunches of bananas. +344521,A white plate topped with different types of fruits and vegetables. +83466,A man wearing skis posting for a picture at night in the snow. +407056,A pizza with purple cabbage topping on a table next to white bowl. +30707,a man sitting on the end of a bed in front of a small TV. +489645,"A desktop computer is turned on to the desktop, on the desk with other equipment. " +324598,two children on a stool brushing their teeth +401244,a person playing frisbee on a field in sport wear +485580,Rows of computers sit on a group of desks in a classroom. +205671,A man riding a white surfboard on a wave in the ocean. +53838,A large plane flies in the sky while a reflection shines from the wings. +199671,A steak topped with an egg and peppers. +444543,two white and black birds a nest and some trees +78056,a photo of a light pole near a city street +321497,A elephant that is standing up in the grass. +89557,This man is cutting a large sheet cake at the party. +369485,A bathroom with a marble counter under two giant mirrors. +358525,A child in a hat playing on a laptop computer +165986,A man in patterned jacket standing on ski slope. +543566,A cat sleeping on top of a pillow on a bed. +508639,A horse drawn buggy sits in front of pyramid shaped mosques. +131453,A family of elephants walking through tall grass. +15303,A man in a wet suit riding a surfboard on a wave. +84447,A motorcycle driver sitting next to his motorcycle. +403353,A lamp sitting next to a small bed with a book on top of it. +254927,a man that is kicking some kind of soccer ball +563849,A man holding a frisbee while standing on a paved road. +574135,A MAN IS PLAYING BASE BALL ON THE FIELD +999,A young man kneeling on top of a base. +538888,"Plates of raw carrot, zucchini, squash, broccoli and beans" +357526,A woman and her daughter sitting outside in the sun +250335,Businessman with a striped shirt and orange tie. +93887,A fluffy sheep stands in a large field and looks at a fence. +384258,Two zebra standing on a dirty road next to a grass covered field. +379760,The traffic light is clearly visible for us to see. +171880,A man throwing a Frisbee while the dog watches. +264497,two yong men in kilts are having a conversation +567881,A group of baseball players standing on a field next to each other. +156572,A boy sitting on the floor in a living room holding a game controller. +556608,A birthday cake with English and Chinese characters. +57306,A person standing on a street with a cell phone. +460944,A toilet and toilet paper roll sit in a partially constructed bathroom. +145668,A gray and white cat sitting on a grey office chair. +344928,A cat playing with a cup that is on the floor +355453,a boy in his bed has food set in front of him +528488,This dog is playing frisbee in the snow +28881,A baseball player swinging a bat near home plate. +271917,A bus approaching an intersection at a green light. +505528,A horse pulling a coach in an indoor arena. +146973,Two white plates topped with lots of desserts. +342293,A woman in a bikini sitting on a towel on the beach. +54628,Ornate wedding cake ready at the hotel reception +32715,A woman and a child flying a kite on top of a beach. +197177,"Some stacked with much heavenly sustenance primed to consume. +" +49450,A woman hitchhiking while another woman sits on a suitcase +443583,A giraffe standing next to a boulder on a grass covered field. +157891,Giraffes eating the branches of the trees in the field. +571242,A building in the sky that has the lights on. +281508,A bunch of surf boards lined up along a fence at a beach. +34811,A bathroom sink underneath a medicine cabinet next to a window. +235597,A group of men sitting at desks with computers. +300330,A woman in a theater style chair typing a laptop. +103931,A man and child flying a kite in a field. +271934,A tall stone building with a massive clock on it's side. +137954,A young boy with his father spending time with his father. +381482,Black and white motorcycle parked on a sidewalk. +102555,A man kneeling down to pet a small dog. +30931,This is a picture of a white refrigerator with several magnets on the doors. +156772,Several fruits with Chinese characters written on them. +2315,A herd of elephants in the wild near a river. +111376,A bull is on a farm walking around a pen. +50331,The fresh vegetables are growing in the garden. +132042,a man is sitting down playing video games +74067,a man with a tennis racquet swinging at a ball +118710,The bus is going through the traffic light. +14380,A steel truss bridge carries a roadway over a rail yard. +506085,A group of people standing outside of a building. +372307,A horse standing in the grass in a fenced in area. +425905,A pair of scissors sticking out of a wooden table. +62423,this is a bathroom that has a sink and toilet +263723,The pizza has thin crust and lots of veggies. +451714,A man standing in snow gear on skis while on a snowy hill. +272610,A tower towering above a small city under a blue sky. +179199,A statue standing on a sidewalk while holding a black umbrella. +499397,A dog holding a skateboard trotting down a street. +350721,Two men fall to the ground during an ultimate Frisbee game +450786,A sign hanging from the side of a building advertising a store. +296208,A bruised banana sitting next to a cup of coffee. +155443,A train pulling into the station in a city. +543203,"Passenger air planes parked at an airport, overcast weather." +216243,A baseball player who is walking with a bat. +300023,The traffic and people on a commercial street corner at night +224807,Men sit around a table sharing a meal. +205693,A pair of remotes sitting on a leather cushion. +312720,A man flying through the air while skiing. +173383,A two layer cake sitting on top of a table. +243313,an old fashioned television on a city side walk +355240,a dog sits on a chair behind a glass +167583,Piles of fruit sitting inside of a farmers market. +405296,a toilet sits next to a bath tub as a bunch of tiles sit piled up +194555,there is a large sign that says a street name on it +140203,A vehicle displays a customized license plate and milk advertisements. +568213,A couple of men standing on top of a field together. +78696,A bus drives down the middle of a street. +91236,A group of jets flying overhead in tight formation. +383462,A man playing a game on the Wii console. +169547,Woman holding a banana pointed at the camera. +257864,A white plate topped with a sandwich and other food. +409603,A woman wearing black and white holds a tennis racket. +20305,A young man is sitting in a chair playing a video game. +487957,Man walking down street with an umbrella over his head. +532390,A commercial passenger airplane sitting on the landing strip by the terminal. +543181,A group of people are on a safari in a vehicle and they are viewing a giraffe. +211069,Two giraffe moving very quickly in the woods. +192233,A man holding a tennis racquet on a tennis court. +188311,a room with laptops and headphones resting on tables. +569,A woman in a trench coat playing with her kite +81630,A large black bird wings spread flying over the woods +568110,A traffic light with the letter B written on it. +579696,Two men sitting in front of a brick building holding skis. +476975,A zebra standing next to an elephant next to some trees. +116291,trees in fall colors and a stop sign to the right. +56545,A gray bird is standing on small brown branch. +419680,A street sign is posted near the two story building. +48609,A small one way road is filled with moving cars and pedestrians watch. +265742,There is no image here to provide a caption for. +492470,A small glass pitcher sitting on a table with a flower in it. +482539,Two people riding the waves on their surf boards. +97899,A large white double decker bus traveling past a tall building. +181873,A person skiing down a snowy mountain side. +475917,A park with lots of people flying kites. +416746,"A pitcher stands on his mound, about to throw his baseball." +229889,A person wearing skis going up a hill in the snow. +488567,The middle of a highway during a cloudy day. +558458,A woman points at her plate of spaghetti. +503392,A man riding standing on top of two horses during a performance. +561923,"People flying kites, one of the kites is an American flag." +246061,A living room with hard wood floors filled with furniture. +376208,a man dressed in a knight costume riding a horse performing at a show +43266,A couple of giraffe in a field near some trees. +62459,a red and white fire hydrant is sitting by a curb +428,a close up of a child next to a cake with balloons +388677,A cop riding a motorcycle next to a white van. +104453,A man on snowshoes looking down a pathway. +208363,a group of people sitting together eating pizza +111004,two elephants this one looks like his ear is ripped +873,Large factory smoke towers shadowed by a large building behind them. +346638,A bottle of beer sits next to the keyboard and mouse at the computer table. +243091,a white plate filled with pasta and broccoli +53550,A young boy admiring a toy railroad display. +198960,A group of sheep standing next to each other on a field. +272630,The two laptops are still on the table. +551439,A woman smiles from behind the book she has been reading. +146676,A man with glasses skating alone on a snow covered field +237428,A blonde woman sitting on a park bench next to a green bike. +73209,Two men are checking out several wines in a crowded room. +374649,there is a small blue luggage along with other luggages +42790,A man sitting and interacting with his phone +214109,Both benches have a caution notice on them. +200699,A blacn and white cow sticking its head over a fence. +44244,A young boy sitting on the back of a cart filled with luggage. +320696,"A man on a surfboard, who is riding a wave." +56739,Two construction workers are walking in front of a cone and parked cars. +129001,A bath tub sitting next to a sink in a bathroom. +358763,a keyboard with five screens and a laptop +45564,Several birds searching for food at the water's edge +551896,A moth eating an orange cut in half on a pink plate. +400915,a person on a skateboard that is at a skate parke +259683,A crowded city filled with lots of people and traffic. +161185,A train is near a track switching station. +317448,A man flying through the air while riding a skateboard. +52627,A person standing on top of a yellow fire hydrant. +342165,A man in cowboy hat riding a horse around cows. +153797,A baseball player throwing a pitch onto the field +385861,a close up of a child eating something +325157,A group of men in uniform standing next to each other. +165589,A blender is shown on a kitchen counter next to a sink. +330405,An alarm clock sitting next to a window on a black table. +143346,A catcher crouches as the batter swings to hit the ball in a baseball game. +179441,The living room has a dog sitting on the floor watching the television. +20307,A bicycle sitting beside a black door and steps. +521419,A small child is hiding under a table. +239048,a bunch of sheep are walking on the road +387563,A giraffe's head is hunched down looking for grass. +64842,A beautiful woman standing in a field on green grass. +29587,Black and white cat sitting on a man's head in front of a storefront. +61602,Someone is holding the door open to a large industrial freezer. +415748,A man riding on the back of an elephant through a city street. +311182,A herd of cattle grazing on a lush green grass field. +319345,A row of motorcycles parked next to each other. +295194,A couple of men trying to lasso a cow. +373486,A man on a skateboard who is performing a trick. +574063,A man standing in front of a mirror with a light around them. +176744,A large group of people watching and flying kites. +177069,Man lounging on a boat giving a thumb up. +356740,A laptop computer opened on a desk with a screensaver +551966,A man sits on a bench and stares into the distance. +345499,An elephant in a pool of water near the bank +413079,A person riding on a horse while jumping it over an obstacle. +155401,A bus parked in front of a bus stop. +153976,A young man riding a skateboard into the air. +219524,A black bear walking next to a green truck. +128849,A woman kneeling down near an elephant to touch it's trunk. +373810,Two teddy bears that are hanging on a line. +71573,A man doing a jump on a skateboard +143576,A cook is in the kitchen preparing a big pot of food. +160482,A couple of people on a small boat in the water. +204471,A toasted sandwich on a square white plate. +520778,A woman in a white dress and someone with a striped umbrella seated by a pond. +293133,A young girl helping blow dry another child's hair. +51773,the woman prepares her horse for a jumping competition +85543,A box of different doughnuts with icing on each. +557402,A bucket full of red flowers and leaves put on a decorative area +360274,A young boy with a bat is attempting to hit a baseball. +148444,A close-up of a plate of food that has been eaten. +239888,A bear walks alongside a road near a tree. +428718,A beautiful young lady sitting on a cement block in front of a gray car. +30270,a white tub is in an outside area +223739,Older man questioning employee for different wines in store. +150244,A chick inside of an oven covered in herbs and seasoning. +447501,A green monster kite soaring in a sunny sky. +83658,a group of zebras are all drinking from a river +282251,A young man holding a tennis racket waiting for a serve. +140391,A couple different pastries on a pastry dish. +236412,A pizza casserole with two kinds of crackers on the side. +531510,Two soldiers standing next to each other in a pharmacy. +230646,A bunch of candles that are on a cake. +476873,A stop sign sits in front of a brown and white house as snow lies on the ground. +283113,A couple of hot dogs on a paper plate. +3794,a burger and salad are on a plate for dinner +558611,a man in overalls thats painted yellow is holding a banana +131938,Cat sitting up with a fake tie around it's neck. +345848,A group of people are on bikes on a busy street. +211853,Five very small boats sitting in the water tied to the dock. +331349,A simple kitchen with several cabinets and a fridge. +506906,Two cups of black coffee sitting next to a coffee pot. +443737,An old style jet plane on a tarmac. +22341,A woman is taking her picture in a mirror. +495491,The draft horse is waiting for the rider to arrive. +448176,some cars on a ferry on a body of water +577924,A group of people at a train station with a passing train. +43614,A large white bear walking on top of a log. +104326,A pinewood and green modern themed kitchen area. +449945,a bathroom counter with two sinks on it +150091,there is a old train that is coming up the tracks +198782,A young man with curly hair looking off to the side +554828,a flock of geese are walking in a parking lot +243355,a zebra looks at the grass at a zoo +371472,A pile of pineapple sitting next to a pile of bananas. +352217,Female tennis player swinging racket for a high ball. +349101,A car accident between a car and a bus +490178,a small child holding on to his luggage +107656,A living room with a black couch sitting next to a table. +141946,"Two laptops, many papers, desk chair, file cabinets, overheard cabinets, and other small objects fill a carpeted cubical space." +483275,A group of elephants with one elephant raising it's trunk and dust and dirt coming up behind it. +239229,a girl with glasses standing in a kitchen +506004,The ferris wheel is located in the middle of the water. +14175,A woman walks past street posters and graffiti. +160126,A man riding a skateboard down a wet street. +83217,Two big plates filled with some tasty looking food. +198841,a large vase with large flowers near stone walls +327073,Athlete ready for play during outdoor tennis match. +489235,a laptop on a desk with a projector on the wall +523580,A single zebra bends down to eat some grass. +22474,A knife about to cut a birthday cake in pieces. +136740,Two brown cows standing in some tall grass. +448448,Two giraffes grazing on some green leaves in the field. +78429,Surfers on surfboards ride in a row on the ocean waves. +192716,a street sign attached to a wooden pole +134193,A tennis player in white is in action with the ball. +19167,Oranges and a leaf are in a silver colander. +244999,people standing on the beach while one grabs for a frisbee +434976,A little girl standing in front of a TV holding a Nintendo Wii controller. +414501,a person in a kimono looking at computer mice in the store +113397,A man holding a Nintendo Wii game controller. +38190,A pan with a pastry covered in meat and veggies. +4979,A brown and white horse standing on top of a giant red chair. +279138,Two women sitting on the floor with gifts in a living room. +170849,Birds flying over a sandy beach and landing on a platform. +568315,Two young elephants are playing with each other. +136718,A woman sits at a desk with a lap top that has a post it on it +318224,A red fire hydrant looms in front of a tall building. +236117,A black and white cat laying on a couch holding a stuffed animal. +146659,A airplane flying high in the sky next to a set of white smoke lines. +5247,A black and white photo of an older man skiing. +82530,A toilet with a red seat sitting next to a paper towel dispenser. +16716,A herd of zebra standing next to each other in a field. +141538,Three dogs exploring a stream and rocks in nature. +207205,"A plate full of meat, vegetables and rice." +168619,A road traveling along a field under a cloudy sky. +170041,"A tiled shower, molded plastic bathtub, shelf, mirror, wooden vanity, lamp, and sink make up a beige colored bathroom." +89839,Perhaps he's a magician who will pull a rabbit out of that hat. +306453,A group of people holding Nintendo wii game controllers. +474034,A woman riding a skateboard down a sidewalk in front of a building. +427232,A crowd of people flying kites on a field. +96207,A rear view mirror has the reflection of a truck. +80725,A cyclist checks his wrist heart rain monitor in front of a stop sign. +18688,A baseball player holding a bat standing near home plate. +22236,A double decker bus sitting in front of a bus stop. +492472,A traffic light with a building in the background. +109826,A very nice looking rest room with a nice tub. +399538,A boat is sitting in the water at a dock +349559,A man is sitting down on a skateboard +500871,Clear bowl of carrots with beer in it. +179693,Two children sit at a table outdoors with a pizza in front of them. +403693,A young boy sitting on the floor at the food of a bed. +31442,The man is sitting in the small kitchen on a stool. +384350,a white and red plane parked on a tarmac +280230,a close up of a table with many plates of food +308466,"A bathroom containing a toilet, sink and bathtub with shower, with no accessories." +109889,a person with ski poles and skis in the snow +162799,A female tennis player on the court holding a racket. +491793,A convoy of city buses traveling down a busy city street next to a crowd of passengers +4749,A green bowl with two ripe bananas in it. +276192,Cheese stuffed crust is a relatively new type of pizza. +540174,A baby in a carseat eating a donut. +107960,Riding a motorcycle down a street that has no one else on it. +290843,A woman sitting on a laptop computer next to a cat. +113037,A couple of women soccer players are on the field. +125160,A rear view mirror shows an elephant walking down the road. +363927,A passenger bus is riding down a highway. +552235,A Christmas tree with a bunch of presents under it. +230987,A cluttered desk with a black chair next to it. +563702,A fire fire truck parked in a parking lot. +489763,Three woman on skis in the snow smiling. +183306,A United jet liner flying through the air. +476620,a little boy with a donut with pink icing +219965,a close up of three giraffes in a structure near a brick wall +566651,A young girl hitting a tennis ball with a .racquet +18893,A cat curled next to various items and accessories. +63488,A young man ready to hit a home run. +98716,Elderly man sitting on a bench facing the beach. +576754,A man riding a skateboard down a street. +111806,Characters from Cat in the Hat in front of a man and child. diff --git a/detector_codes/SAFE-main/engine_finetune.py b/detector_codes/SAFE-main/engine_finetune.py new file mode 100644 index 0000000000000000000000000000000000000000..da3fbf2577b2c32c5a30657f8d293b10b7bbfe52 --- /dev/null +++ b/detector_codes/SAFE-main/engine_finetune.py @@ -0,0 +1,189 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. + +# All rights reserved. + +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import math +from typing import Iterable, Optional + +import torch +import utils +from scipy.special import softmax +from sklearn.metrics import accuracy_score, average_precision_score +from timm.data import Mixup +from timm.utils import ModelEma, accuracy +from utils import adjust_learning_rate + + +def train_one_epoch( + model: torch.nn.Module, + criterion: torch.nn.Module, + data_loader: Iterable, + optimizer: torch.optim.Optimizer, + device: torch.device, + epoch: int, + loss_scaler, + max_norm: float = 0, + model_ema: Optional[ModelEma] = None, + mixup_fn: Optional[Mixup] = None, + log_writer=None, + args=None, +): + model.train(True) + metric_logger = utils.MetricLogger(delimiter=' ') + metric_logger.add_meter('lr', utils.SmoothedValue(window_size=1, fmt='{value:.6f}')) + header = 'Epoch: [{}]'.format(epoch) + + update_freq = args.update_freq + use_amp = args.use_amp + optimizer.zero_grad() + + for data_iter_step, (samples, targets) in enumerate( + metric_logger.log_every(data_loader, print_freq=100, header=header) + ): + # we use a per iteration (instead of per epoch) lr scheduler + if data_iter_step % update_freq == 0: + adjust_learning_rate( + optimizer, data_iter_step / len(data_loader) + epoch, args + ) + + samples = samples.to(device, non_blocking=True) + targets = targets.to(device, non_blocking=True) + + if mixup_fn is not None: + samples, targets = mixup_fn(samples, targets) + + if use_amp: + with torch.cuda.amp.autocast(): + output = model(samples) + loss = criterion(output, targets) + else: # full precision + output = model(samples) + loss = criterion(output, targets) + + loss_value = loss.item() + + if not math.isfinite(loss_value): + print('Loss is {}, stopping training'.format(loss_value)) + assert math.isfinite(loss_value) + + if use_amp: + # this attribute is added by timm on one optimizer (adahessian) + is_second_order = ( + hasattr(optimizer, 'is_second_order') and optimizer.is_second_order + ) + loss /= update_freq + grad_norm = loss_scaler( + loss, + optimizer, + clip_grad=max_norm, + parameters=model.parameters(), + create_graph=is_second_order, + update_grad=(data_iter_step + 1) % update_freq == 0, + ) + if (data_iter_step + 1) % update_freq == 0: + optimizer.zero_grad() + if model_ema is not None: + model_ema.update(model) + else: # full precision + loss /= update_freq + loss.backward() + if (data_iter_step + 1) % update_freq == 0: + optimizer.step() + optimizer.zero_grad() + if model_ema is not None: + model_ema.update(model) + + torch.cuda.synchronize() + + if mixup_fn is None: + class_acc = (output.max(-1)[-1] == targets).float().mean() + else: + class_acc = None + + metric_logger.update(loss=loss_value) + metric_logger.update(class_acc=class_acc) + min_lr = 10.0 + max_lr = 0.0 + for group in optimizer.param_groups: + min_lr = min(min_lr, group['lr']) + max_lr = max(max_lr, group['lr']) + + metric_logger.update(lr=max_lr) + metric_logger.update(min_lr=min_lr) + weight_decay_value = None + for group in optimizer.param_groups: + if group['weight_decay'] > 0: + weight_decay_value = group['weight_decay'] + metric_logger.update(weight_decay=weight_decay_value) + if use_amp: + metric_logger.update(grad_norm=grad_norm) + if log_writer is not None: + log_writer.update(loss=loss_value, head='loss') + log_writer.update(class_acc=class_acc, head='loss') + log_writer.update(lr=max_lr, head='opt') + log_writer.update(min_lr=min_lr, head='opt') + log_writer.update(weight_decay=weight_decay_value, head='opt') + if use_amp: + log_writer.update(grad_norm=grad_norm, head='opt') + log_writer.set_step() + + # gather the stats from all processes + metric_logger.synchronize_between_processes() + print('Averaged stats:', metric_logger) + return {k: meter.global_avg for k, meter in metric_logger.meters.items()} + + +@torch.no_grad() +def evaluate(data_loader, model, device, val=None, use_amp=False): + criterion = torch.nn.CrossEntropyLoss() + metric_logger = utils.MetricLogger(delimiter=' ') + header = 'Test:' + model.eval() + + all_predictions, all_labels = [], [] + + for index, batch in enumerate(metric_logger.log_every(data_loader, 1000, header)): + images, target = ( + batch[0].to(device, non_blocking=True), + batch[-1].to(device, non_blocking=True), + ) + with torch.cuda.amp.autocast() if use_amp else torch.no_grad(): + output = model(images) + if isinstance(output, dict): + output = output['logits'] + loss = criterion(output, target) + + all_predictions.append(output.cpu()) + all_labels.append(target.cpu()) + acc1, _ = [acc / 100 for acc in accuracy(output, target, topk=(1, 2))] + batch_size = images.shape[0] + metric_logger.update(loss=loss.item(), acc1=acc1.item(), n=batch_size) + + predictions, labels = ( + torch.cat(all_predictions, dim=0), + torch.cat(all_labels, dim=0), + ) + y_pred = softmax(predictions.numpy(), axis=1)[:, 1] + y_true = labels.numpy().astype(int) + + acc, ap = ( + accuracy_score(y_true, y_pred > 0.5), + average_precision_score(y_true, y_pred), + ) + r_acc = accuracy_score(y_true[y_true == 0], y_pred[y_true == 0] > 0.5) + f_acc = accuracy_score(y_true[y_true == 1], y_pred[y_true == 1] > 0.5) + print( + '* Acc@1 {top1.global_avg:.2%} loss {losses.global_avg:.4f}'.format( + top1=metric_logger.acc1, losses=metric_logger.loss + ) + ) + return ( + {k: meter.global_avg for k, meter in metric_logger.meters.items()}, + acc, + ap, + r_acc, + f_acc, + ) diff --git a/detector_codes/SAFE-main/main_finetune.py b/detector_codes/SAFE-main/main_finetune.py new file mode 100644 index 0000000000000000000000000000000000000000..59720b228f08a2d928fcf57c25f195de5a079c52 --- /dev/null +++ b/detector_codes/SAFE-main/main_finetune.py @@ -0,0 +1,671 @@ +import argparse +import csv +import datetime +import json +import os +import random +import time +from pathlib import Path + +import numpy as np +import timm +import torch +import utils +from data.datasets import TrainDataset +from engine_finetune import evaluate, train_one_epoch +from models.resnet import resnet50 +from optim_factory import LayerDecayValueAssigner, create_optimizer +from timm.data.mixup import Mixup +from timm.loss import LabelSmoothingCrossEntropy, SoftTargetCrossEntropy +from timm.utils import ModelEma +from utils import NativeScalerWithGradNormCount as NativeScaler +from utils import str2bool + + +def get_args_parser(): + parser = argparse.ArgumentParser('Fine-tuning', add_help=False) + parser.add_argument('--jpeg_factor', type=int, default=None) + parser.add_argument('--blur_sigma', type=float, default=None) + parser.add_argument('--mask_ratio', type=float, default=None) + parser.add_argument('--mask_patch_size', type=int, default=None) + parser.add_argument('--transform_mode', type=str, default='crop') + + # Training Config + parser.add_argument( + '--batch_size', default=128, type=int, help='Per GPU batch size' + ) + parser.add_argument('--epochs', default=100, type=int) + parser.add_argument( + '--update_freq', default=1, type=int, help='gradient accumulation steps' + ) + + # Model parameters + parser.add_argument( + '--model', default='SAFE', type=str, metavar='MODEL', help='model architecture' + ) + parser.add_argument('--input_size', default=256, type=int, help='image input size') + parser.add_argument( + '--layer_decay_type', + type=str, + choices=['single', 'group'], + default='single', + help="""Layer decay strategies. The single strategy assigns a distinct decaying value for each layer, + whereas the group strategy assigns the same decaying value for three consecutive layers""", + ) + + # EMA related parameters + parser.add_argument('--model_ema', action='store_true') + parser.add_argument('--model_ema_decay', type=float, default=0.9999) + parser.add_argument('--model_ema_force_cpu', action='store_true') + parser.add_argument( + '--model_ema_eval', + action='store_true', + help='Using ema to eval during training.', + ) + + # Optimization parameters + parser.add_argument( + '--clip_grad', + type=float, + default=None, + metavar='NORM', + help='Clip gradient norm (default: None, no clipping)', + ) + parser.add_argument( + '--weight_decay', type=float, default=0.01, help='weight decay (default: 0.05)' + ) + parser.add_argument( + '--lr', + type=float, + default=None, + metavar='LR', + help='learning rate (absolute lr)', + ) + parser.add_argument( + '--blr', + type=float, + default=1e-2, + metavar='LR', + help='base learning rate: absolute_lr = base_lr * total_batch_size / 256', + ) + parser.add_argument('--layer_decay', type=float, default=1.0) + parser.add_argument( + '--min_lr', + type=float, + default=1e-6, + metavar='LR', + help='lower lr bound for cyclic schedulers that hit 0 (1e-6)', + ) + parser.add_argument( + '--warmup_epochs', + type=int, + default=1, + metavar='N', + help='epochs to warmup LR, if scheduler supports', + ) + + parser.add_argument( + '--warmup_steps', + type=int, + default=-1, + metavar='N', + help='num of steps to warmup LR, will overload warmup_epochs if set > 0', + ) + parser.add_argument( + '--opt', + default='adamw', + type=str, + metavar='OPTIMIZER', + help='Optimizer (default: "adamw"', + ) + parser.add_argument( + '--opt_eps', + default=1e-8, + type=float, + metavar='EPSILON', + help='Optimizer Epsilon (default: 1e-8)', + ) + parser.add_argument( + '--opt_betas', + default=None, + type=float, + nargs='+', + metavar='BETA', + help='Optimizer Betas (default: None, use opt default)', + ) + parser.add_argument( + '--momentum', + type=float, + default=0.9, + metavar='M', + help='SGD momentum (default: 0.9)', + ) + parser.add_argument( + '--weight_decay_end', + type=float, + default=None, + help="""Final value of the + weight decay. We use a cosine schedule for WD and using a larger decay by + the end of training improves performance for ViTs.""", + ) + + parser.add_argument( + '--smoothing', type=float, default=0.1, help='Label smoothing (default: 0.1)' + ) + + # Mixup params + parser.add_argument( + '--mixup', type=float, default=0.0, help='mixup alpha, mixup enabled if > 0.' + ) + parser.add_argument( + '--cutmix', type=float, default=0.0, help='cutmix alpha, cutmix enabled if > 0.' + ) + parser.add_argument( + '--cutmix_minmax', + type=float, + nargs='+', + default=None, + help='cutmix min/max ratio, overrides alpha and enables cutmix if set (default: None)', + ) + parser.add_argument( + '--mixup_prob', + type=float, + default=1.0, + help='Probability of performing mixup or cutmix when either/both is enabled', + ) + parser.add_argument( + '--mixup_switch_prob', + type=float, + default=0.5, + help='Probability of switching to cutmix when both mixup and cutmix enabled', + ) + parser.add_argument( + '--mixup_mode', + type=str, + default='batch', + help='How to apply mixup/cutmix params. Per "batch", "pair", or "elem"', + ) + + # Finetuning params + parser.add_argument('--pretrained', default=True, help='finetune from checkpoint') + parser.add_argument('--global_pool', action='store_true') + parser.set_defaults(global_pool=True) + parser.add_argument( + '--head_init_scale', + default=0.001, + type=float, + help='classifier head initial scale, typically adjusted in fine-tuning', + ) + parser.add_argument( + '--model_key', + default='model|module', + type=str, + help='which key to load from saved state dict, usually model or model_ema', + ) + parser.add_argument('--model_prefix', default='', type=str) + + # Dataset parameters + parser.add_argument( + '--num_train', + default=10000000000, + type=int, + help='Number of training images, incluing real and fake', + ) + parser.add_argument('--data_path', default='', type=str, help='dataset path') + parser.add_argument( + '--nb_classes', default=2, type=int, help='number of the classification types' + ) + parser.add_argument( + '--output_dir', + default='./checkpoints-5class', + help='path where to save, empty for no saving', + ) + parser.add_argument('--log_dir', default=None, help='path where to tensorboard log') + parser.add_argument( + '--device', default='cuda', help='device to use for training / testing' + ) + parser.add_argument('--seed', default=None, type=int) + parser.add_argument('--resume', default='', help='resume from checkpoint') + + parser.add_argument( + '--eval_data_path', default=None, type=str, help='dataset path for evaluation' + ) + parser.add_argument('--imagenet_default_mean_and_std', type=str2bool, default=True) + parser.add_argument( + '--data_set', + default='IMNET', + choices=['CIFAR', 'IMNET', 'image_folder'], + type=str, + help='ImageNet dataset path', + ) + parser.add_argument('--auto_resume', type=str2bool, default=True) + parser.add_argument('--save_ckpt', type=str2bool, default=True) + parser.add_argument('--save_ckpt_freq', default=5, type=int) + parser.add_argument('--save_ckpt_num', default=100, type=int) + + parser.add_argument( + '--start_epoch', default=0, type=int, metavar='N', help='start epoch' + ) + parser.add_argument( + '--eval', type=str2bool, default=False, help='Perform evaluation only' + ) + parser.add_argument( + '--disable_eval', + action='store_true', + help='Disabling evaluation during training', + ) + parser.add_argument('--num_workers', default=8, type=int) + parser.add_argument( + '--pin_mem', + type=str2bool, + default=True, + help='Pin CPU memory in DataLoader for more efficient (sometimes) transfer to GPU.', + ) + + # Evaluation parameters + parser.add_argument('--crop_pct', type=float, default=None) + + # GPU selection parameter + parser.add_argument( + '--gpu_ids', + type=str, + default='0', + help='gpu ids: e.g. 0 0,1,2, 0,2. use -1 for CPU', + ) + + parser.add_argument( + '--use_amp', + action='store_true', + help='Use apex AMP (Automatic Mixed Precision) or not', + ) + + return parser + + +def seed_everything(seed, deterministic=False): + """Set random seed. + + Args: + seed (int): Seed to be used. + deterministic (bool): Whether to set the deterministic option for + CUDNN backend, i.e., set `torch.backends.cudnn.deterministic` + to True and `torch.backends.cudnn.benchmark` to False. + Default: False. + """ + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed_all(seed) + if deterministic: + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.benchmark = False + + +def main(args): + print(args) + + # 设置设备 + if args.gpu_ids == '-1': + device = torch.device('cpu') + else: + os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu_ids + device = torch.device('cuda') + + # Fix the Seed for Reproducibility + if args.seed is not None: + seed_everything(args.seed, True) + + # Init Train & Test Datasets + if not args.eval: + dataset_train = TrainDataset(is_train=True, args=args) + sampler_train = torch.utils.data.RandomSampler(dataset_train) + + if args.disable_eval: + dataset_val = None + else: + dataset_val = TrainDataset(is_train=False, args=args) + + sampler_val = torch.utils.data.SequentialSampler(dataset_val) + + if args.log_dir is not None: + os.makedirs(args.log_dir, exist_ok=True) + log_writer = utils.TensorboardLogger(log_dir=args.log_dir) + else: + log_writer = None + + data_loader_train = torch.utils.data.DataLoader( + dataset_train, + sampler=sampler_train, + batch_size=args.batch_size, + num_workers=args.num_workers, + pin_memory=args.pin_mem, + drop_last=True, + ) + if dataset_val is not None: + data_loader_val = torch.utils.data.DataLoader( + dataset_val, + sampler=sampler_val, + batch_size=1 if args.transform_mode == 'source' else args.batch_size, + num_workers=args.num_workers, + pin_memory=args.pin_mem, + drop_last=False, + ) + else: + data_loader_val = None + + # Init Model + if args.model == 'SAFE': + model = resnet50(num_classes=2) + else: + model = timm.create_model(args.model, pretrained=args.pretrained, num_classes=2) + model.to(device) + + mixup_fn = None + mixup_active = args.mixup > 0 or args.cutmix > 0.0 or args.cutmix_minmax is not None + if mixup_active: + print('Mixup is activated!') + mixup_fn = Mixup( + mixup_alpha=args.mixup, + cutmix_alpha=args.cutmix, + cutmix_minmax=args.cutmix_minmax, + prob=args.mixup_prob, + switch_prob=args.mixup_switch_prob, + mode=args.mixup_mode, + label_smoothing=args.smoothing, + num_classes=args.nb_classes, + ) + + model_ema = None + if args.model_ema: + model_ema = ModelEma( + model, + decay=args.model_ema_decay, + device='cpu' if args.model_ema_force_cpu else '', + resume='', + ) + print('Using EMA with decay = %.8f' % args.model_ema_decay) + + model_without_ddp = model + n_parameters = sum(p.numel() for p in model.parameters() if p.requires_grad) + + print(f'Number of params: {n_parameters / 1e6:.2f}M') + + eff_batch_size = args.batch_size * args.update_freq + if not args.eval: + num_training_steps_per_epoch = len(dataset_train) // eff_batch_size + + if args.lr is None: + args.lr = args.blr * eff_batch_size / 256 + + print('Base lr: %.2e' % (args.lr * 256 / eff_batch_size)) + print('Actual lr: %.2e' % args.lr) + + print('Accumulate grad iterations: %d' % args.update_freq) + print('Effective batch size: %d' % eff_batch_size) + + if args.layer_decay < 1.0 or args.layer_decay > 1.0: + assert args.layer_decay_type in ['single', 'group'] + if args.layer_decay_type == 'group': # applies for Base and Large models + num_layers = 12 + else: + num_layers = sum(model_without_ddp.depths) + print('--------------------------------------') + print(num_layers) + print('--------------------------------------') + assigner = LayerDecayValueAssigner( + list( + args.layer_decay ** (num_layers + 1 - i) for i in range(num_layers + 2) + ), + depths=model_without_ddp.depths, + layer_decay_type=args.layer_decay_type, + ) + else: + assigner = None + + if assigner is not None: + print('Assigned values = %s' % str(assigner.values)) + + optimizer = create_optimizer( + args, + model_without_ddp, + skip_list=None, + get_num_layer=assigner.get_layer_id if assigner is not None else None, + get_layer_scale=assigner.get_scale if assigner is not None else None, + ) + loss_scaler = NativeScaler() + + if mixup_fn is not None: + criterion = SoftTargetCrossEntropy() + elif args.smoothing > 0.0: + criterion = LabelSmoothingCrossEntropy(smoothing=args.smoothing) + else: + criterion = torch.nn.CrossEntropyLoss() + + print('criterion = %s' % str(criterion)) + + utils.auto_load_model( + args=args, + model=model, + model_without_ddp=model_without_ddp, + optimizer=optimizer, + loss_scaler=loss_scaler, + model_ema=model_ema, + ) + + if args.eval: + model.eval() + print('Eval only mode') + + ROOT = args.eval_data_path + VAL_DICT = { + 'data/datasets/test1_ForenSynths/test': [ + 'progan', + 'stylegan', + 'stylegan2', + 'biggan', + 'cyclegan', + 'stargan', + 'gaugan', + 'deepfake', + ], + 'data/datasets/test4_GenImage/test': [ + 'Midjourney', + 'stable_diffusion_v_1_4', + 'stable_diffusion_v_1_5', + 'ADM', + 'Glide', + 'wukong', + 'VQDM', + 'BigGAN', + ], + } + try: + vals = VAL_DICT[args.eval_data_path] + except: + vals = sorted(os.listdir(args.eval_data_path)) + + rows = [ + ['{} model testing on...'.format(args.resume)], + ['testset', 'accuracy', 'avg precision'], + ] + + for v_id, val in enumerate(vals): + args.eval_data_path = os.path.join(ROOT, val) + dataset_val = TrainDataset(is_train=False, args=args) + sampler_val = torch.utils.data.SequentialSampler(dataset_val) + data_loader_val = torch.utils.data.DataLoader( + dataset_val, + sampler=sampler_val, + batch_size=1 if args.transform_mode == 'source' else args.batch_size, + num_workers=args.num_workers, + pin_memory=args.pin_mem, + drop_last=False, + ) + + test_stats, acc, ap, r_acc, f_acc = evaluate( + data_loader_val, model, device, val + ) + print( + f'Accuracy of the network on {len(dataset_val)} test images: {test_stats["acc1"]:.2%}' + ) + + print( + f'test dataset is {val} acc: {acc:.2%}, ap: {ap:.2%} r_acc: {acc:.2%}, f_acc: {ap:.2%}' + ) + print('***********************************') + + rows.append([val, acc * 100, ap * 100, r_acc * 100, f_acc * 100]) + + def calculate_column_means(rows): + if not rows or len(rows[0]) < 2: + raise ValueError( + 'The input rows list is empty or lacks numeric columns.' + ) + num_columns = len(rows[0]) - 1 + means = ['mean'] + [ + sum(row[i] for row in rows) / len(rows) + for i in range(1, num_columns + 1) + ] + return means + + rows.append(calculate_column_means(rows[2:])) + + test_dataset_name = ROOT.split('/')[-2] + + csv_name = os.path.join( + args.output_dir, f'{os.path.basename(args.resume)}_{test_dataset_name}.csv' + ) + with open(csv_name, 'w') as f: + csv_writer = csv.writer(f, delimiter=',') + csv_writer.writerows(rows) + return + + max_accuracy = 0.0 + if args.model_ema and args.model_ema_eval: + max_accuracy_ema = 0.0 + + print('Start training for %d epochs' % args.epochs) + start_time = time.time() + for epoch in range(args.start_epoch, args.epochs): + if log_writer is not None: + log_writer.set_step(epoch * num_training_steps_per_epoch * args.update_freq) + train_stats = train_one_epoch( + model, + criterion, + data_loader_train, + optimizer, + device, + epoch, + loss_scaler, + args.clip_grad, + model_ema, + mixup_fn, + log_writer=log_writer, + args=args, + ) + if args.output_dir and args.save_ckpt: + if (epoch + 1) % args.save_ckpt_freq == 0 or epoch + 1 == args.epochs: + utils.save_model( + args=args, + model=model, + model_without_ddp=model_without_ddp, + optimizer=optimizer, + loss_scaler=loss_scaler, + epoch=epoch, + model_ema=model_ema, + ) + utils.save_model( + args=args, + model=model, + model_without_ddp=model_without_ddp, + optimizer=optimizer, + loss_scaler=loss_scaler, + epoch='last', + model_ema=model_ema, + ) + if data_loader_val is not None: + test_stats = evaluate(data_loader_val, model, device, use_amp=args.use_amp)[ + 0 + ] + print( + f'Accuracy of the model on the {len(dataset_val)} test images: {test_stats["acc1"]:.2%}' + ) + if max_accuracy < test_stats['acc1']: + max_accuracy = test_stats['acc1'] + if args.output_dir and args.save_ckpt: + utils.save_model( + args=args, + model=model, + model_without_ddp=model_without_ddp, + optimizer=optimizer, + loss_scaler=loss_scaler, + epoch='best', + model_ema=model_ema, + ) + print(f'Max accuracy: {max_accuracy:.2%}') + + if log_writer is not None: + log_writer.update(test_acc1=test_stats['acc1'], head='perf', step=epoch) + log_writer.update(test_loss=test_stats['loss'], head='perf', step=epoch) + + log_stats = { + **{f'train_{k}': v for k, v in train_stats.items()}, + **{f'test_{k}': v for k, v in test_stats.items()}, + 'epoch': epoch, + 'n_parameters': n_parameters, + } + + if args.model_ema and args.model_ema_eval: + test_stats_ema = evaluate( + data_loader_val, model_ema.ema, device, use_amp=args.use_amp + )[0] + print( + f'Accuracy of the model EMA on {len(dataset_val)} test images: {test_stats_ema["acc1"]:.2%}' + ) + if max_accuracy_ema < test_stats_ema['acc1']: + max_accuracy_ema = test_stats_ema['acc1'] + if args.output_dir and args.save_ckpt: + utils.save_model( + args=args, + model=model, + model_without_ddp=model_without_ddp, + optimizer=optimizer, + loss_scaler=loss_scaler, + epoch='best-ema', + model_ema=model_ema, + ) + print(f'Max EMA accuracy: {max_accuracy_ema:.2%}') + if log_writer is not None: + log_writer.update( + test_acc1_ema=test_stats_ema['acc1'], head='perf', step=epoch + ) + log_stats.update( + {**{f'test_{k}_ema': v for k, v in test_stats_ema.items()}} + ) + else: + log_stats = { + **{f'train_{k}': v for k, v in train_stats.items()}, + 'epoch': epoch, + 'n_parameters': n_parameters, + } + + if args.output_dir: + if log_writer is not None: + log_writer.flush() + with open( + os.path.join(args.output_dir, 'log.txt'), mode='a', encoding='utf-8' + ) as f: + f.write(json.dumps(log_stats) + '\n') + + total_time = time.time() - start_time + total_time_str = str(datetime.timedelta(seconds=int(total_time))) + print('Training time {}'.format(total_time_str)) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser('Fine-tuning', parents=[get_args_parser()]) + args = parser.parse_args() + if args.output_dir: + Path(args.output_dir).mkdir(parents=True, exist_ok=True) + + main(args) diff --git a/detector_codes/SAFE-main/models/__init__.py b/detector_codes/SAFE-main/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/detector_codes/SAFE-main/models/resnet.py b/detector_codes/SAFE-main/models/resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..ed5201272b361fec87f38e61320a1951bf0918cd --- /dev/null +++ b/detector_codes/SAFE-main/models/resnet.py @@ -0,0 +1,268 @@ +import os, sys, pdb +import kornia +import torch +import torch.nn as nn +import torch.utils.model_zoo as model_zoo +from torch.nn import functional as F +from torchvision import transforms +from typing import Any, cast, Dict, List, Optional, Union +import numpy as np + +__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', + 'resnet152'] + + +model_urls = { + 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', + 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth', + 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth', + 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth', + 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', +} + + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=1, bias=False) + + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(BasicBlock, self).__init__() + self.conv1 = conv3x3(inplanes, planes, stride) + self.bn1 = nn.BatchNorm2d(planes) + self.relu = nn.ReLU(inplace=True) + self.conv2 = conv3x3(planes, planes) + self.bn2 = nn.BatchNorm2d(planes) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(Bottleneck, self).__init__() + self.conv1 = conv1x1(inplanes, planes) + self.bn1 = nn.BatchNorm2d(planes) + self.conv2 = conv3x3(planes, planes, stride) + self.bn2 = nn.BatchNorm2d(planes) + self.conv3 = conv1x1(planes, planes * self.expansion) + self.bn3 = nn.BatchNorm2d(planes * self.expansion) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class ResNet(nn.Module): + + def __init__(self, block, layers, num_classes=2, zero_init_residual=False): + super(ResNet, self).__init__() + + self.unfoldSize = 2 + self.unfoldIndex = 0 + assert self.unfoldSize > 1 + assert -1 < self.unfoldIndex and self.unfoldIndex < self.unfoldSize*self.unfoldSize + self.inplanes = 64 + self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1, bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64 , layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.fc1 = nn.Linear(512, num_classes) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, nn.BatchNorm2d): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + + # Zero-initialize the last BN in each residual branch, + # so that the residual branch starts with zeros, and each residual block behaves like an identity. + # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + nn.init.constant_(m.bn3.weight, 0) + elif isinstance(m, BasicBlock): + nn.init.constant_(m.bn2.weight, 0) + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + conv1x1(self.inplanes, planes * block.expansion, stride), + nn.BatchNorm2d(planes * block.expansion), + ) + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes)) + return nn.Sequential(*layers) + + def _preprocess_dwt(self, x, mode='symmetric', wave='bior1.3'): + ''' + pip install pywavelets pytorch_wavelets + ''' + from pytorch_wavelets import DWTForward, DWTInverse + DWT_filter = DWTForward(J=1, mode=mode, wave=wave).to(x.device) + Yl, Yh = DWT_filter(x) + return transforms.Resize([x.shape[-2], x.shape[-1]])(Yh[0][:, :, 2, :, :]) + + def _preprocess_fft(self, x, scale=8): + from torch.nn import functional as F + x = torch.fft.fft2(x, norm="ortho") + x = torch.fft.fftshift(x, dim=[-2, -1]) + b, c, h, w = x.shape + x[:, :, h//2-h//scale:h//2+h//scale, w//2-w//scale:w//2+w//scale] = 0.0 + x = torch.fft.ifftshift(x, dim=[-2, -1]) + x = torch.fft.ifft2(x, norm="ortho") + x = torch.real(x) + x = F.relu(x, inplace=True) + return x + + def _preprocess_dct(self, x, diagonal=64): + from scipy.fftpack import dct, idct + device = x.device + x = x.cpu() + b, c, h, w = x.shape + x = torch.tensor(dct(dct(x.numpy(), axis=-1, norm='ortho'), axis=-2, norm='ortho')) + mask = torch.rot90(torch.tril(torch.ones(h, w), diagonal=diagonal).bool(), k=-1, dims=(0, 1)) + x[:, :, mask] = 0 + x = torch.tensor(idct(idct(x.numpy(), axis=-1, norm='ortho'), axis=-2, norm='ortho')) + return x.to(device) + + def _preprocess_edge(self, x): + return kornia.filters.sobel(x) + + def _preprocess_NPR(self, x, factor=0.5): + return F.interpolate( + F.interpolate(x, scale_factor=factor, mode='nearest', recompute_scale_factor=True), + scale_factor=1/factor, + mode='nearest', recompute_scale_factor=True + ) + + def forward(self, x): + + x = 1 * self._preprocess_dwt(x) + + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc1(x) + + return x + + +def resnet18(pretrained=False, **kwargs): + """Constructs a ResNet-18 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [2, 2, 2, 2], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet18'])) + return model + + +def resnet34(pretrained=False, **kwargs): + """Constructs a ResNet-34 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet34'])) + return model + + +def resnet50(pretrained=False, **kwargs): + """Constructs a ResNet-50 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet50'])) + return model + + +def resnet101(pretrained=False, **kwargs): + """Constructs a ResNet-101 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 23, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet101'])) + return model + + +def resnet152(pretrained=False, **kwargs): + """Constructs a ResNet-152 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 8, 36, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet152'])) + return model diff --git a/detector_codes/SAFE-main/optim_factory.py b/detector_codes/SAFE-main/optim_factory.py new file mode 100644 index 0000000000000000000000000000000000000000..d71483c41163224516454febf9b0ce412bf9e8c9 --- /dev/null +++ b/detector_codes/SAFE-main/optim_factory.py @@ -0,0 +1,251 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. + +# All rights reserved. + +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + + +import torch +from timm.optim.adafactor import Adafactor +from timm.optim.adahessian import Adahessian +from timm.optim.adamp import AdamP +from timm.optim.lookahead import Lookahead + +# from timm.optim.nadam import Nadam +# from timm.optim.novograd import NovoGrad +from timm.optim.nvnovograd import NvNovoGrad + +# from timm.optim.radam import RAdam +from timm.optim.rmsprop_tf import RMSpropTF +from timm.optim.sgdp import SGDP +from torch import optim as optim + +try: + from apex.optimizers import FusedAdam, FusedLAMB, FusedNovoGrad, FusedSGD + + has_apex = True +except ImportError: + has_apex = False + + +def get_num_layer_for_convnext_single(var_name, depths): + """ + Each layer is assigned distinctive layer ids + """ + if var_name.startswith('downsample_layers'): + stage_id = int(var_name.split('.')[1]) + layer_id = sum(depths[:stage_id]) + 1 + return layer_id + + elif var_name.startswith('stages'): + stage_id = int(var_name.split('.')[1]) + block_id = int(var_name.split('.')[2]) + layer_id = sum(depths[:stage_id]) + block_id + 1 + return layer_id + + else: + return sum(depths) + 1 + + +def get_num_layer_for_convnext(var_name): + """ + Divide [3, 3, 27, 3] layers into 12 groups; each group is three + consecutive blocks, including possible neighboring downsample layers; + adapted from https://github.com/microsoft/unilm/blob/master/beit/optim_factory.py + """ + num_max_layer = 12 + if var_name.startswith('downsample_layers'): + stage_id = int(var_name.split('.')[1]) + if stage_id == 0: + layer_id = 0 + elif stage_id == 1 or stage_id == 2: + layer_id = stage_id + 1 + elif stage_id == 3: + layer_id = 12 + return layer_id + + elif var_name.startswith('stages'): + stage_id = int(var_name.split('.')[1]) + block_id = int(var_name.split('.')[2]) + if stage_id == 0 or stage_id == 1: + layer_id = stage_id + 1 + elif stage_id == 2: + layer_id = 3 + block_id // 3 + elif stage_id == 3: + layer_id = 12 + return layer_id + else: + return num_max_layer + 1 + + +class LayerDecayValueAssigner(object): + def __init__(self, values, depths=[3, 3, 27, 3], layer_decay_type='single'): + self.values = values + self.depths = depths + self.layer_decay_type = layer_decay_type + + def get_scale(self, layer_id): + return self.values[layer_id] + + def get_layer_id(self, var_name): + if self.layer_decay_type == 'single': + return get_num_layer_for_convnext_single(var_name, self.depths) + else: + return get_num_layer_for_convnext(var_name) + + +def get_parameter_groups( + model, weight_decay=1e-5, skip_list=(), get_num_layer=None, get_layer_scale=None +): + parameter_group_names = {} + parameter_group_vars = {} + + for name, param in model.named_parameters(): + if not param.requires_grad: + continue # frozen weights + if ( + len(param.shape) == 1 + or name.endswith('.bias') + or name in skip_list + or name.endswith('.gamma') + or name.endswith('.beta') + ): + group_name = 'no_decay' + this_weight_decay = 0.0 + else: + group_name = 'decay' + this_weight_decay = weight_decay + if get_num_layer is not None: + layer_id = get_num_layer(name) + group_name = 'layer_%d_%s' % (layer_id, group_name) + else: + layer_id = None + + if group_name not in parameter_group_names: + if get_layer_scale is not None: + scale = get_layer_scale(layer_id) + else: + scale = 1.0 + + parameter_group_names[group_name] = { + 'weight_decay': this_weight_decay, + 'params': [], + 'lr_scale': scale, + } + parameter_group_vars[group_name] = { + 'weight_decay': this_weight_decay, + 'params': [], + 'lr_scale': scale, + } + + parameter_group_vars[group_name]['params'].append(param) + parameter_group_names[group_name]['params'].append(name) + # print("Param groups = %s" % json.dumps(parameter_group_names, indent=2)) + return list(parameter_group_vars.values()) + + +def create_optimizer( + args, + model, + get_num_layer=None, + get_layer_scale=None, + filter_bias_and_bn=True, + skip_list=None, +): + opt_lower = args.opt.lower() + weight_decay = args.weight_decay + # if weight_decay and filter_bias_and_bn: + if filter_bias_and_bn: + skip = {} + if skip_list is not None: + skip = skip_list + elif hasattr(model, 'no_weight_decay'): + skip = model.no_weight_decay() + parameters = get_parameter_groups( + model, weight_decay, skip, get_num_layer, get_layer_scale + ) + weight_decay = 0.0 + else: + parameters = model.parameters() + + if 'fused' in opt_lower: + assert has_apex and torch.cuda.is_available(), ( + 'APEX and CUDA required for fused optimizers' + ) + + opt_args = dict(lr=args.lr, weight_decay=weight_decay) + if hasattr(args, 'opt_eps') and args.opt_eps is not None: + opt_args['eps'] = args.opt_eps + if hasattr(args, 'opt_betas') and args.opt_betas is not None: + opt_args['betas'] = args.opt_betas + + opt_split = opt_lower.split('_') + opt_lower = opt_split[-1] + if opt_lower == 'sgd' or opt_lower == 'nesterov': + opt_args.pop('eps', None) + optimizer = optim.SGD( + parameters, momentum=args.momentum, nesterov=True, **opt_args + ) + elif opt_lower == 'momentum': + opt_args.pop('eps', None) + optimizer = optim.SGD( + parameters, momentum=args.momentum, nesterov=False, **opt_args + ) + elif opt_lower == 'adam': + optimizer = optim.Adam(parameters, **opt_args) + elif opt_lower == 'adamw': + optimizer = optim.AdamW(parameters, **opt_args) + # elif opt_lower == 'nadam': + # optimizer = Nadam(parameters, **opt_args) + # elif opt_lower == 'radam': + # optimizer = RAdam(parameters, **opt_args) + elif opt_lower == 'adamp': + optimizer = AdamP(parameters, wd_ratio=0.01, nesterov=True, **opt_args) + elif opt_lower == 'sgdp': + optimizer = SGDP(parameters, momentum=args.momentum, nesterov=True, **opt_args) + elif opt_lower == 'adadelta': + optimizer = optim.Adadelta(parameters, **opt_args) + elif opt_lower == 'adafactor': + if not args.lr: + opt_args['lr'] = None + optimizer = Adafactor(parameters, **opt_args) + elif opt_lower == 'adahessian': + optimizer = Adahessian(parameters, **opt_args) + elif opt_lower == 'rmsprop': + optimizer = optim.RMSprop( + parameters, alpha=0.9, momentum=args.momentum, **opt_args + ) + elif opt_lower == 'rmsproptf': + optimizer = RMSpropTF(parameters, alpha=0.9, momentum=args.momentum, **opt_args) + # elif opt_lower == 'novograd': + # optimizer = NovoGrad(parameters, **opt_args) + elif opt_lower == 'nvnovograd': + optimizer = NvNovoGrad(parameters, **opt_args) + elif opt_lower == 'fusedsgd': + opt_args.pop('eps', None) + optimizer = FusedSGD( + parameters, momentum=args.momentum, nesterov=True, **opt_args + ) + elif opt_lower == 'fusedmomentum': + opt_args.pop('eps', None) + optimizer = FusedSGD( + parameters, momentum=args.momentum, nesterov=False, **opt_args + ) + elif opt_lower == 'fusedadam': + optimizer = FusedAdam(parameters, adam_w_mode=False, **opt_args) + elif opt_lower == 'fusedadamw': + optimizer = FusedAdam(parameters, adam_w_mode=True, **opt_args) + elif opt_lower == 'fusedlamb': + optimizer = FusedLAMB(parameters, **opt_args) + elif opt_lower == 'fusednovograd': + opt_args.setdefault('betas', (0.95, 0.98)) + optimizer = FusedNovoGrad(parameters, **opt_args) + else: + assert False and 'Invalid optimizer' + + if len(opt_split) > 1: + if opt_split[0] == 'lookahead': + optimizer = Lookahead(optimizer) + + return optimizer diff --git a/detector_codes/SAFE-main/requirements.txt b/detector_codes/SAFE-main/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..2e1427ddb6cd49850837dac700db45944e2236b8 --- /dev/null +++ b/detector_codes/SAFE-main/requirements.txt @@ -0,0 +1,9 @@ +timm==0.6.12 +kornia==0.7.2 +numpy==1.26.4 +opencv-python +pywavelets +pytorch_wavelets +tensorboardX +scipy +scikit-learn \ No newline at end of file diff --git a/detector_codes/SAFE-main/scripts/eval.sh b/detector_codes/SAFE-main/scripts/eval.sh new file mode 100644 index 0000000000000000000000000000000000000000..85b4b7018da40b59377a6850c24a8aeb74468d47 --- /dev/null +++ b/detector_codes/SAFE-main/scripts/eval.sh @@ -0,0 +1,23 @@ +MODEL="SAFE" +RESUME_PATH="./checkpoints" + + +eval_datasets=( + # "/data/ziqiang/Benchmark" \ + # "/data/ziqiang/jpeg" \ + # "/data/ziqiang/noise" \ + "/data/ziqiang/sample" \ +) +for eval_dataset in "${eval_datasets[@]}" +do + python main_finetune.py \ + --input_size 256 \ + --transform_mode 'crop' \ + --model $MODEL \ + --eval_data_path $eval_dataset \ + --batch_size 256 \ + --num_workers 16 \ + --output_dir $RESUME_PATH \ + --resume $RESUME_PATH/checkpoint-best.pth \ + --eval True +done diff --git a/detector_codes/SAFE-main/scripts/train.sh b/detector_codes/SAFE-main/scripts/train.sh new file mode 100644 index 0000000000000000000000000000000000000000..be2ee596c79a7a445cbe90b99c73a103d6cc89c2 --- /dev/null +++ b/detector_codes/SAFE-main/scripts/train.sh @@ -0,0 +1,51 @@ + +GPU_NUM=4 +WORLD_SIZE=1 +RANK=0 +MASTER_ADDR=localhost +MASTER_PORT=12588 + +DISTRIBUTED_ARGS=" + --nproc_per_node $GPU_NUM \ + --nnodes $WORLD_SIZE \ + --node_rank $RANK \ + --master_addr $MASTER_ADDR \ + --master_port $MASTER_PORT +" + +train_datasets=( + "data/datasets/train_ForenSynths/train" \ +) +eval_datasets=( + "data/datasets/train_ForenSynths/val" \ +) + +MODEL="SAFE" + +for train_dataset in "${train_datasets[@]}" +do + for eval_dataset in "${eval_datasets[@]}" + do + + current_time=$(date +"%Y%m%d_%H%M%S") + OUTPUT_PATH="results/$MODEL/$current_time" + mkdir -p $OUTPUT_PATH + + python -m torch.distributed.launch $DISTRIBUTED_ARGS main_finetune.py \ + --input_size 256 \ + --transform_mode 'crop' \ + --model $MODEL \ + --data_path "$train_dataset" \ + --eval_data_path "$eval_dataset" \ + --save_ckpt_freq 1 \ + --batch_size 32 \ + --blr 1e-2 \ + --weight_decay 0.01 \ + --warmup_epochs 1 \ + --epochs 20 \ + --num_workers 16 \ + --output_dir $OUTPUT_PATH \ + 2>&1 | tee -a $OUTPUT_PATH/log_train.txt + + done +done \ No newline at end of file diff --git a/detector_codes/SAFE-main/utils.py b/detector_codes/SAFE-main/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..6d76760edef5e42954595f1b303c8ee89eab7d14 --- /dev/null +++ b/detector_codes/SAFE-main/utils.py @@ -0,0 +1,676 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. + +# All rights reserved. + +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + + +import datetime +import math +import os +import time +from collections import OrderedDict, defaultdict, deque +from pathlib import Path + +import numpy as np +import torch +import torch.distributed as dist +from tensorboardX import SummaryWriter +from timm.utils import get_state_dict +from torch import inf + + +def str2bool(v): + """ + Converts string to bool type; enables command line + arguments in the format of '--arg1 true --arg2 false' + """ + if isinstance(v, bool): + return v + if v.lower() in ('yes', 'true', 't', 'y', '1'): + return True + elif v.lower() in ('no', 'false', 'f', 'n', '0'): + return False + else: + raise argparse.ArgumentTypeError('Boolean value expected.') + + +class SmoothedValue(object): + """Track a series of values and provide access to smoothed values over a + window or the global series average. + """ + + def __init__(self, window_size=20, fmt=None): + if fmt is None: + fmt = '{median:.4f} ({global_avg:.4f})' + self.deque = deque(maxlen=window_size) + self.total = 0.0 + self.count = 0 + self.fmt = fmt + + def update(self, value, n=1): + self.deque.append(value) + self.count += n + self.total += value * n + + def synchronize_between_processes(self): + """ + Warning: does not synchronize the deque! + """ + if not is_dist_avail_and_initialized(): + return + t = torch.tensor([self.count, self.total], dtype=torch.float64, device='cuda') + dist.barrier() + dist.all_reduce(t) + t = t.tolist() + self.count = int(t[0]) + self.total = t[1] + + @property + def median(self): + d = torch.tensor(list(self.deque)) + return d.median().item() + + @property + def avg(self): + d = torch.tensor(list(self.deque), dtype=torch.float32) + return d.mean().item() + + @property + def global_avg(self): + return self.total / self.count + + @property + def max(self): + return max(self.deque) + + @property + def value(self): + return self.deque[-1] + + def __str__(self): + return self.fmt.format( + median=self.median, + avg=self.avg, + global_avg=self.global_avg, + max=self.max, + value=self.value, + ) + + +class MetricLogger(object): + def __init__(self, delimiter='\t'): + self.meters = defaultdict(SmoothedValue) + self.delimiter = delimiter + + def update(self, **kwargs): + for k, v in kwargs.items(): + if v is None: + continue + if isinstance(v, torch.Tensor): + v = v.item() + assert isinstance(v, (float, int)) + self.meters[k].update(v) + + def __getattr__(self, attr): + if attr in self.meters: + return self.meters[attr] + if attr in self.__dict__: + return self.__dict__[attr] + raise AttributeError( + "'{}' object has no attribute '{}'".format(type(self).__name__, attr) + ) + + def __str__(self): + loss_str = [] + for name, meter in self.meters.items(): + loss_str.append('{}: {}'.format(name, str(meter))) + return self.delimiter.join(loss_str) + + def synchronize_between_processes(self): + for meter in self.meters.values(): + meter.synchronize_between_processes() + + def add_meter(self, name, meter): + self.meters[name] = meter + + def log_every(self, iterable, print_freq, header=None): + i = 0 + if not header: + header = '' + start_time = time.time() + end = time.time() + iter_time = SmoothedValue(fmt='{avg:.4f}') + data_time = SmoothedValue(fmt='{avg:.4f}') + space_fmt = ':' + str(len(str(len(iterable)))) + 'd' + log_msg = [ + header, + '[{0' + space_fmt + '}/{1}]', + 'eta: {eta}', + '{meters}', + 'time: {time}', + # 'data: {data}', + ] + # if torch.cuda.is_available(): + # log_msg.append('max mem: {memory:.0f}') + log_msg = self.delimiter.join(log_msg) + MB = 1024.0 * 1024.0 + for obj in iterable: + data_time.update(time.time() - end) + yield obj + iter_time.update(time.time() - end) + if i % print_freq == 0 or i == len(iterable) - 1: + eta_seconds = iter_time.global_avg * (len(iterable) - i) + eta_string = str(datetime.timedelta(seconds=int(eta_seconds))) + if torch.cuda.is_available(): + print( + log_msg.format( + i, + len(iterable), + eta=eta_string, + meters=str(self), + time=str(iter_time), + data=str(data_time), + memory=torch.cuda.max_memory_allocated() / MB, + ) + ) + else: + print( + log_msg.format( + i, + len(iterable), + eta=eta_string, + meters=str(self), + time=str(iter_time), + data=str(data_time), + ) + ) + i += 1 + end = time.time() + total_time = time.time() - start_time + total_time_str = str(datetime.timedelta(seconds=int(total_time))) + print( + '{} Total time: {} ({:.4f} s / it)'.format( + header, total_time_str, total_time / len(iterable) + ) + ) + + +class TensorboardLogger(object): + def __init__(self, log_dir): + self.writer = SummaryWriter(logdir=log_dir) + self.step = 0 + + def set_step(self, step=None): + if step is not None: + self.step = step + else: + self.step += 1 + + def update(self, head='scalar', step=None, **kwargs): + for k, v in kwargs.items(): + if v is None: + continue + if isinstance(v, torch.Tensor): + v = v.item() + assert isinstance(v, (float, int)) + self.writer.add_scalar( + head + '/' + k, v, self.step if step is None else step + ) + + def flush(self): + self.writer.flush() + + +class WandbLogger(object): + def __init__(self, args): + self.args = args + + try: + import wandb + + self._wandb = wandb + except ImportError: + raise ImportError( + 'To use the Weights and Biases Logger please install wandb.' + 'Run `pip install wandb` to install it.' + ) + + # Initialize a W&B run + if self._wandb.run is None: + self._wandb.init(project=args.project, config=args) + + def log_epoch_metrics(self, metrics, commit=True): + """ + Log train/test metrics onto W&B. + """ + # Log number of model parameters as W&B summary + self._wandb.summary['n_parameters'] = metrics.get('n_parameters', None) + metrics.pop('n_parameters', None) + + # Log current epoch + self._wandb.log({'epoch': metrics.get('epoch')}, commit=False) + metrics.pop('epoch') + + for k, v in metrics.items(): + if 'train' in k: + self._wandb.log({f'Global Train/{k}': v}, commit=False) + elif 'test' in k: + self._wandb.log({f'Global Test/{k}': v}, commit=False) + + self._wandb.log({}) + + def log_checkpoints(self): + output_dir = self.args.output_dir + model_artifact = self._wandb.Artifact( + self._wandb.run.id + '_model', type='model' + ) + + model_artifact.add_dir(output_dir) + self._wandb.log_artifact(model_artifact, aliases=['latest', 'best']) + + def set_steps(self): + # Set global training step + self._wandb.define_metric( + 'Rank-0 Batch Wise/*', step_metric='Rank-0 Batch Wise/global_train_step' + ) + # Set epoch-wise step + self._wandb.define_metric('Global Train/*', step_metric='epoch') + self._wandb.define_metric('Global Test/*', step_metric='epoch') + + +def setup_for_distributed(is_master): + """ + This function disables printing when not in master process + """ + import builtins as __builtin__ + + builtin_print = __builtin__.print + + def print(*args, **kwargs): + force = kwargs.pop('force', False) + if is_master or force: + builtin_print(*args, **kwargs) + + __builtin__.print = print + + +def is_dist_avail_and_initialized(): + if not dist.is_available(): + return False + if not dist.is_initialized(): + return False + return True + + +def get_world_size(): + if not is_dist_avail_and_initialized(): + return 1 + return dist.get_world_size() + + +def get_rank(): + if not is_dist_avail_and_initialized(): + return 0 + return dist.get_rank() + + +def is_main_process(): + return get_rank() == 0 + + +def save_on_master(*args, **kwargs): + if is_main_process(): + torch.save(*args, **kwargs) + + +def init_distributed_mode(args): + + if args.dist_on_itp: + args.rank = int(os.environ['OMPI_COMM_WORLD_RANK']) + args.world_size = int(os.environ['OMPI_COMM_WORLD_SIZE']) + args.gpu = int(os.environ['OMPI_COMM_WORLD_LOCAL_RANK']) + args.dist_url = 'tcp://%s:%s' % ( + os.environ['MASTER_ADDR'], + os.environ['MASTER_PORT'], + ) + os.environ['LOCAL_RANK'] = str(args.gpu) + os.environ['RANK'] = str(args.rank) + os.environ['WORLD_SIZE'] = str(args.world_size) + # ["RANK", "WORLD_SIZE", "MASTER_ADDR", "MASTER_PORT", "LOCAL_RANK"] + elif 'RANK' in os.environ and 'WORLD_SIZE' in os.environ: + args.rank = int(os.environ['RANK']) + args.world_size = int(os.environ['WORLD_SIZE']) + args.gpu = int(os.environ['LOCAL_RANK']) + elif 'SLURM_PROCID' in os.environ: + args.rank = int(os.environ['SLURM_PROCID']) + args.gpu = args.rank % torch.cuda.device_count() + + os.environ['RANK'] = str(args.rank) + os.environ['LOCAL_RANK'] = str(args.gpu) + os.environ['WORLD_SIZE'] = str(args.world_size) + else: + print('Not using distributed mode') + args.distributed = False + return + + args.distributed = True + + torch.cuda.set_device(args.gpu) + args.dist_backend = 'nccl' + print( + '| distributed init (rank {}): {}, gpu {}'.format( + args.rank, args.dist_url, args.gpu + ), + flush=True, + ) + torch.distributed.init_process_group( + backend=args.dist_backend, + init_method=args.dist_url, + world_size=args.world_size, + rank=args.rank, + ) + torch.distributed.barrier() + setup_for_distributed(args.rank == 0) + + +def all_reduce_mean(x): + world_size = get_world_size() + if world_size > 1: + x_reduce = torch.tensor(x).cuda() + dist.all_reduce(x_reduce) + x_reduce /= world_size + return x_reduce.item() + else: + return x + + +def load_state_dict( + model, state_dict, prefix='', ignore_missing='relative_position_index' +): + missing_keys = [] + unexpected_keys = [] + error_msgs = [] + # copy state_dict so _load_from_state_dict can modify it + metadata = getattr(state_dict, '_metadata', None) + state_dict = state_dict.copy() + if metadata is not None: + state_dict._metadata = metadata + + def load(module, prefix=''): + local_metadata = {} if metadata is None else metadata.get(prefix[:-1], {}) + module._load_from_state_dict( + state_dict, + prefix, + local_metadata, + True, + missing_keys, + unexpected_keys, + error_msgs, + ) + for name, child in module._modules.items(): + if child is not None: + load(child, prefix + name + '.') + + load(model, prefix=prefix) + + warn_missing_keys = [] + ignore_missing_keys = [] + for key in missing_keys: + keep_flag = True + for ignore_key in ignore_missing.split('|'): + if ignore_key in key: + keep_flag = False + break + if keep_flag: + warn_missing_keys.append(key) + else: + ignore_missing_keys.append(key) + + missing_keys = warn_missing_keys + + if len(missing_keys) > 0: + print( + 'Weights of {} not initialized from pretrained model: {}'.format( + model.__class__.__name__, missing_keys + ) + ) + if len(unexpected_keys) > 0: + print( + 'Weights from pretrained model not used in {}: {}'.format( + model.__class__.__name__, unexpected_keys + ) + ) + if len(ignore_missing_keys) > 0: + print( + 'Ignored weights of {} not initialized from pretrained model: {}'.format( + model.__class__.__name__, ignore_missing_keys + ) + ) + if len(error_msgs) > 0: + print('\n'.join(error_msgs)) + + +class NativeScalerWithGradNormCount: + state_dict_key = 'amp_scaler' + + def __init__(self): + self._scaler = torch.cuda.amp.GradScaler() + + def __call__( + self, + loss, + optimizer, + clip_grad=None, + parameters=None, + create_graph=False, + update_grad=True, + ): + self._scaler.scale(loss).backward(create_graph=create_graph) + if update_grad: + if clip_grad is not None: + assert parameters is not None + self._scaler.unscale_( + optimizer + ) # unscale the gradients of optimizer's assigned params in-place + norm = torch.nn.utils.clip_grad_norm_(parameters, clip_grad) + else: + self._scaler.unscale_(optimizer) + norm = get_grad_norm_(parameters) + self._scaler.step(optimizer) + self._scaler.update() + else: + norm = None + return norm + + def state_dict(self): + return self._scaler.state_dict() + + def load_state_dict(self, state_dict): + self._scaler.load_state_dict(state_dict) + + +def get_grad_norm_(parameters, norm_type: float = 2.0) -> torch.Tensor: + if isinstance(parameters, torch.Tensor): + parameters = [parameters] + parameters = [p for p in parameters if p.grad is not None] + norm_type = float(norm_type) + if len(parameters) == 0: + return torch.tensor(0.0) + device = parameters[0].grad.device + if norm_type == inf: + total_norm = max(p.grad.detach().abs().max().to(device) for p in parameters) + else: + total_norm = torch.norm( + torch.stack( + [torch.norm(p.grad.detach(), norm_type).to(device) for p in parameters] + ), + norm_type, + ) + return total_norm + + +def save_model( + args, epoch, model, model_without_ddp, optimizer, loss_scaler, model_ema=None +): + output_dir = Path(args.output_dir) + epoch_name = str(epoch) + checkpoint_paths = [output_dir / ('checkpoint-%s.pth' % epoch_name)] + for checkpoint_path in checkpoint_paths: + to_save = { + 'model': model_without_ddp.state_dict(), + 'optimizer': optimizer.state_dict(), + 'epoch': epoch, + 'scaler': loss_scaler.state_dict(), + 'args': args, + } + + if model_ema is not None: + to_save['model_ema'] = get_state_dict(model_ema) + + save_on_master(to_save, checkpoint_path) + + if is_main_process() and isinstance(epoch, int): + to_del = epoch - args.save_ckpt_num * args.save_ckpt_freq + old_ckpt = output_dir / ('checkpoint-%s.pth' % to_del) + if os.path.exists(old_ckpt): + os.remove(old_ckpt) + + +def auto_load_model( + args, model, model_without_ddp, optimizer, loss_scaler, model_ema=None +): + output_dir = Path(args.output_dir) + if args.auto_resume and len(args.resume) == 0: + import glob + + all_checkpoints = glob.glob(os.path.join(output_dir, 'checkpoint-*.pth')) + latest_ckpt = -1 + for ckpt in all_checkpoints: + t = ckpt.split('-')[-1].split('.')[0] + if t.isdigit(): + latest_ckpt = max(int(t), latest_ckpt) + if latest_ckpt >= 0: + args.resume = os.path.join(output_dir, 'checkpoint-%d.pth' % latest_ckpt) + print('Auto resume checkpoint: %s' % args.resume) + + if args.resume: + if args.resume.startswith('https'): + checkpoint = torch.hub.load_state_dict_from_url( + args.resume, map_location='cpu', check_hash=True + ) + else: + checkpoint = torch.load(args.resume, map_location='cpu') + + model_without_ddp.load_state_dict(checkpoint['model']) + print('Resume checkpoint %s' % args.resume) + if 'optimizer' in checkpoint and 'epoch' in checkpoint: + optimizer.load_state_dict(checkpoint['optimizer']) + if not isinstance( + checkpoint['epoch'], str + ): # does not support resuming with 'best', 'best-ema' + args.start_epoch = checkpoint['epoch'] + 1 + else: + assert args.eval, 'Does not support resuming with checkpoint-best' + if hasattr(args, 'model_ema') and args.model_ema: + if 'model_ema' in checkpoint.keys(): + model_ema.ema.load_state_dict(checkpoint['model_ema']) + else: + model_ema.ema.load_state_dict(checkpoint['model']) + if 'scaler' in checkpoint: + loss_scaler.load_state_dict(checkpoint['scaler']) + print('With optim & sched!') + + +def cosine_scheduler( + base_value, + final_value, + epochs, + niter_per_ep, + warmup_epochs=0, + start_warmup_value=0, + warmup_steps=-1, +): + warmup_schedule = np.array([]) + warmup_iters = warmup_epochs * niter_per_ep + if warmup_steps > 0: + warmup_iters = warmup_steps + print('Set warmup steps = %d' % warmup_iters) + if warmup_epochs > 0: + warmup_schedule = np.linspace(start_warmup_value, base_value, warmup_iters) + + iters = np.arange(epochs * niter_per_ep - warmup_iters) + schedule = np.array( + [ + final_value + + 0.5 + * (base_value - final_value) + * (1 + math.cos(math.pi * i / (len(iters)))) + for i in iters + ] + ) + + schedule = np.concatenate((warmup_schedule, schedule)) + + assert len(schedule) == epochs * niter_per_ep + return schedule + + +def adjust_learning_rate(optimizer, epoch, args): + """Decay the learning rate with half-cycle cosine after warmup""" + if epoch < args.warmup_epochs: + lr = args.lr * epoch / args.warmup_epochs + else: + lr = args.min_lr + (args.lr - args.min_lr) * 0.5 * ( + 1.0 + + math.cos( + math.pi + * (epoch - args.warmup_epochs) + / (args.epochs - args.warmup_epochs) + ) + ) + for param_group in optimizer.param_groups: + if 'lr_scale' in param_group: + param_group['lr'] = lr * param_group['lr_scale'] + else: + param_group['lr'] = lr + return lr + + +def remap_checkpoint_keys(ckpt): + new_ckpt = OrderedDict() + for k, v in ckpt.items(): + if k.startswith('encoder'): + k = '.'.join(k.split('.')[1:]) # remove encoder in the name + if k.endswith('kernel'): + k = '.'.join(k.split('.')[:-1]) # remove kernel in the name + new_k = k + '.weight' + if len(v.shape) == 3: # resahpe standard convolution + kv, in_dim, out_dim = v.shape + ks = int(math.sqrt(kv)) + new_ckpt[new_k] = ( + v.permute(2, 1, 0).reshape(out_dim, in_dim, ks, ks).transpose(3, 2) + ) + elif len(v.shape) == 2: # reshape depthwise convolution + kv, dim = v.shape + ks = int(math.sqrt(kv)) + new_ckpt[new_k] = ( + v.permute(1, 0).reshape(dim, 1, ks, ks).transpose(3, 2) + ) + continue + elif 'ln' in k or 'linear' in k: + k = k.split('.') + k.pop(-2) # remove ln and linear in the name + new_k = '.'.join(k) + else: + new_k = k + new_ckpt[new_k] = v + + # reshape grn affine parameters and biases + for k, v in new_ckpt.items(): + if k.endswith('bias') and len(v.shape) != 1: + new_ckpt[k] = v.reshape(-1) + # elif 'grn' in k: + # new_ckpt[k] = v.unsqueeze(0).unsqueeze(1) + return new_ckpt diff --git a/detector_codes/__init__.py b/detector_codes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..fdb6c987fa9cbf6dc4d6a6d74913eaebc5f17299 --- /dev/null +++ b/detector_codes/__init__.py @@ -0,0 +1,688 @@ +import argparse +import importlib +import os +import sys +import urllib.request + +import torch +import torch.nn as nn +from huggingface_hub import snapshot_download +from torchvision import transforms +from transformers import CLIPModel + +DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + + +def download_weights(): + weights_path = './DeForge-AIGIBench-Models' + token = os.getenv('HF_TOKEN') + # Check if directory exists and has more than just the .git folder or similar + if not os.path.exists(weights_path) or len(os.listdir(weights_path)) <= 1: + print('Downloading weights from Hugging Face Hub...') + snapshot_download( + repo_id='TheKernel01/DeForge-AIGIBench-Models', + local_dir=weights_path, + repo_type='model', + token=token, + ) + return weights_path + + +# Download weights on import +download_weights() + + +class DetectorWrapper: + def __init__(self): + self.model = None + self.transform = None + self.use_optimal_threshold = False + + @torch.inference_mode() + def detect(self, data): + # Default: sigmoid probability where high = fake if output dim is 1 + # If output dim is 2, use softmax[:, 1] + out = self.model(data) + if out.shape[1] == 1: + return out.sigmoid().flatten() + else: + return out.softmax(dim=1)[:, 1].flatten() + + def _setup_path(self, path): + """Append path to sys.path and clear related cached modules to avoid collisions.""" + # Convert relative path to absolute to ensure consistency + # Assuming we are in detector_codes/ or the root + if not os.path.isabs(path): + # Try to find the path relative to the root if not found + if not os.path.exists(path): + # If we are in detector_codes, go up one level + possible_path = os.path.join('..', path) + if os.path.exists(possible_path): + path = possible_path + else: + # Fallback to absolute if possible or just use as is + pass + + abs_path = os.path.abspath(path) + if abs_path not in sys.path: + sys.path.insert(0, abs_path) + + # Clear modules that might conflict + conflicting = ('networks', 'models', 'utils', 'data', 'model', 'util') + to_delete = [ + m + for m in list(sys.modules.keys()) + if m in conflicting or any(m.startswith(c + '.') for c in conflicting) + ] + for m in to_delete: + del sys.modules[m] + + +class AIDE_Detector(DetectorWrapper): + def __init__(self, model_path): + super().__init__() + self._setup_path('detector_codes/AIDE-main') + from data.dct import DCT_base_Rec_Module + from models.AIDE import AIDE + + self.model = AIDE(resnet_path=None, convnext_path=None) + self.dct = DCT_base_Rec_Module() + state_dict = torch.load(model_path, map_location='cpu', weights_only=False) + msg = self.model.load_state_dict( + state_dict['model'] if 'model' in state_dict else state_dict, strict=False + ) + self.model.to(DEVICE).eval() + self.dct.to(DEVICE) + self.transform = transforms.Compose( + [ + transforms.Resize((256, 256)), + transforms.ToTensor(), + ] + ) + self.normalize = transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ) + self.resize = transforms.Resize((256, 256)) + + @torch.inference_mode() + def detect(self, data): + batch_stacked = [] + for i in range(data.shape[0]): + img = data[i] + x_minmin, x_maxmax, x_minmin1, x_maxmax1 = self.dct(img) + stacked = torch.stack( + [ + self.normalize(self.resize(x_minmin)), + self.normalize(self.resize(x_maxmax)), + self.normalize(self.resize(x_minmin1)), + self.normalize(self.resize(x_maxmax1)), + self.normalize(img), + ], + dim=0, + ) + batch_stacked.append(stacked) + batch_data = torch.stack(batch_stacked, dim=0) + out = self.model(batch_data) + return out.softmax(dim=1)[:, 1].flatten() + + +class C2P_CLIP_Original(nn.Module): + def __init__( + self, + name='openai/clip-vit-large-patch14', + num_classes=1, + hf_token=None, + ): + super(C2P_CLIP_Original, self).__init__() + self.model = CLIPModel.from_pretrained(name, token=hf_token) + del self.model.text_model + del self.model.text_projection + del self.model.logit_scale + self.model.vision_model.requires_grad_(False) + self.model.visual_projection.requires_grad_(False) + self.model.fc = nn.Linear(768, num_classes) + torch.nn.init.normal_(self.model.fc.weight.data, 0.0, 0.02) + + def encode_image(self, img): + vision_outputs = self.model.vision_model( + pixel_values=img, + output_attentions=self.model.config.output_attentions, + output_hidden_states=self.model.config.output_hidden_states, + return_dict=self.model.config.return_dict, + ) + pooled_output = vision_outputs[1] + image_features = self.model.visual_projection(pooled_output) + return image_features + + def forward(self, img): + image_embeds = self.encode_image(img) + image_embeds = image_embeds / image_embeds.norm(p=2, dim=-1, keepdim=True) + return self.model.fc(image_embeds) + + +class C2P_CLIP_Original_Detector(DetectorWrapper): + def __init__(self, model_path=None): + super().__init__() + if model_path is None: + model_path = 'https://www.now61.com/f/95OefW/C2P_CLIP_release_20240901.zip' + if model_path.startswith('http'): + state_dict = torch.hub.load_state_dict_from_url( + model_path, map_location='cpu', progress=True + ) + else: + state_dict = torch.load(model_path, map_location='cpu', weights_only=False) + self.model = C2P_CLIP_Original( + name='openai/clip-vit-large-patch14', + num_classes=1, + hf_token=os.getenv('HF_TOKEN'), + ) + self.model.load_state_dict(state_dict, strict=True) + self.model.to(DEVICE).eval() + self.transform = transforms.Compose( + [ + transforms.Resize((224, 224)), + transforms.ToTensor(), + transforms.Normalize( + mean=(0.48145466, 0.4578275, 0.40821073), + std=(0.26862954, 0.26130258, 0.27577711), + ), + ] + ) + + +class C2P_CLIP_Detector(DetectorWrapper): + def __init__(self, model_path): + super().__init__() + self._setup_path('detector_codes/C2P-CLIP-DeepfakeDetection-main') + from networks.c2p_clip import C2P_CLIP_Model + + self.model = C2P_CLIP_Model( + name='openai/clip-vit-large-patch14', + num_classes=1, + hf_token=os.getenv('HF_TOKEN'), + ) + state_dict = torch.load(model_path, map_location='cpu', weights_only=False) + if 'model' in state_dict: + state_dict = state_dict['model'] + new_state_dict = {} + for k, v in state_dict.items(): + if k.startswith('module.'): + new_state_dict[k[7:]] = v + else: + new_state_dict[k] = v + self.model.load_state_dict(new_state_dict, strict=False) + self.model.to(DEVICE).eval() + self.transform = transforms.Compose( + [ + transforms.Resize((224, 224)), + transforms.ToTensor(), + transforms.Normalize( + mean=(0.48145466, 0.4578275, 0.40821073), + std=(0.26862954, 0.26130258, 0.27577711), + ), + ] + ) + + def detect(self, img): + return self.model.detect(img) + + +class C2P_DINOv2_Detector(DetectorWrapper): + def __init__(self, model_path=None): + super().__init__() + self._setup_path('detector_codes/C2P-DINOv2-main') + from model import C2P_DINOv2_Model + + self.model = C2P_DINOv2_Model(hf_token=os.getenv('HF_TOKEN')) + if model_path is not None: + state_dict = torch.load(model_path, map_location='cpu', weights_only=False) + self.model.load_state_dict( + state_dict['model_state_dict'] + if 'model_state_dict' in state_dict + else state_dict, + strict=False, + ) + self.model.to(DEVICE).eval() + self.transform = transforms.Compose( + [ + transforms.Resize(256), + transforms.CenterCrop(224), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ), + ] + ) + + def detect(self, img): + return self.model.detect(img) + + +class CLIPDetection_Detector(DetectorWrapper): + def __init__(self, model_path): + super().__init__() + self._setup_path('detector_codes/CLIPDetection-main') + from models.clip_models import CLIPModel + + self.model = CLIPModel(name='ViT-L/14', num_classes=1) + self.model.load_state_dict( + torch.load(model_path, map_location='cpu', weights_only=False) + ) + self.model.to(DEVICE).eval() + self.transform = transforms.Compose( + [ + transforms.Resize((224, 224)), + transforms.ToTensor(), + transforms.Normalize( + mean=(0.48145466, 0.4578275, 0.40821073), + std=(0.26862954, 0.26130258, 0.27577711), + ), + ] + ) + + +class CNNDetection_Detector(DetectorWrapper): + def __init__(self, model_path): + super().__init__() + self._setup_path('detector_codes/CNNDetection-master') + from networks.resnet import resnet50 + + self.model = resnet50(num_classes=1) + state_dict = torch.load(model_path, map_location='cpu', weights_only=False) + self.model.load_state_dict( + state_dict['model'] if 'model' in state_dict else state_dict + ) + self.model.to(DEVICE).eval() + self.transform = transforms.Compose( + [ + transforms.Resize((256, 256)), + transforms.CenterCrop(224), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ), + ] + ) + + +class DeForge_AI_Detector(DetectorWrapper): + def __init__(self, model_path=None): + super().__init__() + self._setup_path('detector_codes/DeForge-AI-main') + from model import DeForge_AI_Model + + checkpoint = None + checkpoint_args = {} + if model_path is not None: + checkpoint = torch.load(model_path, map_location='cpu', weights_only=False) + if isinstance(checkpoint, dict): + checkpoint_args = checkpoint.get('args', {}) or {} + model_kwargs = { + 'lora_r': checkpoint_args.get('lora_r', 16), + 'lora_alpha': checkpoint_args.get('lora_alpha', 32), + 'lora_dropout': checkpoint_args.get('lora_dropout', 0.5), + 'unfreeze_last_blocks': checkpoint_args.get('unfreeze_last_blocks', 0), + 'image_size': checkpoint_args.get('image_size', 256), + 'forensic_dim': checkpoint_args.get('forensic_dim', 256), + 'hf_token': os.getenv('HF_TOKEN'), + } + lora_target_modules = checkpoint_args.get('lora_target_modules') + if isinstance(lora_target_modules, str): + model_kwargs['lora_target_modules'] = [ + m.strip() for m in lora_target_modules.split(',') if m.strip() + ] + elif lora_target_modules: + model_kwargs['lora_target_modules'] = lora_target_modules + self.model = DeForge_AI_Model(**model_kwargs) + if checkpoint is not None: + self.model.load_state_dict( + checkpoint['model_state_dict'] + if 'model_state_dict' in checkpoint + else checkpoint, + strict=False, + ) + self.model.to(DEVICE).eval() + size = model_kwargs['image_size'] + resize_size = max(int(round(size * 1.15)), size) + self.transform = transforms.Compose( + [ + transforms.Resize(resize_size), + transforms.CenterCrop(size), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ), + ] + ) + + def detect(self, img): + return self.model.detect(img) + + +class DFFreq_Detector(DetectorWrapper): + def __init__(self, model_path): + super().__init__() + self._setup_path('detector_codes/DFFreq-main') + import networks.resnet as resnet_module + + importlib.reload(resnet_module) + self.model = resnet_module.resnet50(num_classes=1) + state_dict = torch.load(model_path, map_location='cpu', weights_only=False) + self.model.load_state_dict(state_dict) + self.model.to(DEVICE).eval() + self.transform = transforms.Compose( + [ + transforms.Resize((256, 256)), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ), + ] + ) + + +class Effort_Detector(DetectorWrapper): + def __init__(self, model_path): + super().__init__() + self._setup_path('detector_codes/Effort-AIGI-Detection') + from models.clip_models import ClipModel + + opt = argparse.Namespace(use_svd=True) + self.model = ClipModel( + name='openai/clip-vit-large-patch14', + opt=opt, + num_classes=1, + hf_token=os.getenv('HF_TOKEN'), + ) + self.model.load_state_dict( + torch.load(model_path, map_location='cpu', weights_only=False) + ) + self.model.to(DEVICE).eval() + self.transform = transforms.Compose( + [ + transforms.Resize((224, 224)), + transforms.ToTensor(), + transforms.Normalize( + mean=(0.48145466, 0.4578275, 0.40821073), + std=(0.26862954, 0.26130258, 0.27577711), + ), + ] + ) + + +class FreqNet_Detector(DetectorWrapper): + def __init__(self, model_path): + super().__init__() + self._setup_path('detector_codes/FreqNet-DeepfakeDetection-main') + from networks.freqnet import FreqNet + + self.model = FreqNet(num_classes=1) + self.model.load_state_dict( + torch.load(model_path, map_location='cpu', weights_only=False) + ) + self.model.to(DEVICE).eval() + self.transform = transforms.Compose( + [ + transforms.Resize((256, 256)), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ), + ] + ) + + +class GramNet_Detector(DetectorWrapper): + def __init__(self, model_path): + super().__init__() + self._setup_path('detector_codes/Gram-Net-main') + import networks.resnet as resnet_module + + importlib.reload(resnet_module) + self.model = resnet_module.resnet18(num_classes=1) + self.model.load_state_dict( + torch.load(model_path, map_location='cpu', weights_only=False) + ) + self.model.to(DEVICE).eval() + self.transform = transforms.Compose( + [ + transforms.Resize((256, 256)), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ), + ] + ) + + +class LGrad_Detector(DetectorWrapper): + def __init__(self, model_path): + super().__init__() + self._setup_path('detector_codes/LGrad-master/CNNDetection') + import networks.resnet as resnet_module + + importlib.reload(resnet_module) + self.model = resnet_module.resnet50(num_classes=1) + self.model.load_state_dict( + torch.load(model_path, map_location='cpu', weights_only=False) + ) + self.model.to(DEVICE).eval() + self._setup_path('detector_codes/LGrad-master/img2gad_pytorch') + from models import build_model + + self.discriminator = build_model( + gan_type='stylegan', + module='discriminator', + resolution=256, + label_size=0, + image_channels=3, + ) + disc_path = 'DeForge-AIGIBench-Models/LGrad-master/karras2019stylegan-bedrooms-256x256_discriminator.pth' + if not os.path.exists(disc_path): + os.makedirs(os.path.dirname(disc_path), exist_ok=True) + urllib.request.urlretrieve( + 'https://lid-1302259812.cos.ap-nanjing.myqcloud.com/tmp/karras2019stylegan-bedrooms-256x256_discriminator.pth', + disc_path, + ) + self.discriminator.load_state_dict( + torch.load(disc_path, map_location='cpu', weights_only=False), strict=True + ) + self.discriminator.to(DEVICE).eval() + self.transform = transforms.Compose( + [transforms.Resize((256, 256)), transforms.ToTensor()] + ) + self.transform_disc = transforms.Normalize( + mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5] + ) + self.transform_resnet = transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ) + + def detect(self, data): + disc_input = self.transform_disc(data) + disc_input.requires_grad = True + with torch.enable_grad(): + pre = self.discriminator(disc_input) + grad = torch.autograd.grad( + pre.sum(), + disc_input, + create_graph=False, + retain_graph=False, + allow_unused=False, + )[0] + b, c, h, w = grad.shape + grad_flat = grad.view(b, -1) + grad_min = grad_flat.min(dim=1, keepdim=True)[0].view(b, 1, 1, 1) + grad_norm = grad - grad_min + grad_flat_norm = grad_norm.view(b, -1) + grad_max = grad_flat_norm.max(dim=1, keepdim=True)[0].view(b, 1, 1, 1) + grad_norm = torch.where(grad_max != 0, grad_norm / grad_max, grad_norm) + resnet_input = self.transform_resnet(grad_norm) + with torch.no_grad(): + out = self.model(resnet_input) + if out.shape[1] == 1: + return out.sigmoid().flatten() + else: + return out.softmax(dim=1)[:, 1].flatten() + + +class LaDeDa_Detector(DetectorWrapper): + def __init__(self, model_path): + super().__init__() + self._setup_path( + 'detector_codes/RealTime-DeepfakeDetection-in-the-RealWorld-main' + ) + from networks.LaDeDa import LaDeDa9 + + self.model = LaDeDa9(num_classes=1) + self.model.fc = torch.nn.Linear(2048, 1) + from collections import OrderedDict + from copy import deepcopy + + state_dict = torch.load(model_path, map_location='cpu', weights_only=False) + pretrained_dict = OrderedDict() + for ki in state_dict.keys(): + pretrained_dict[ki] = deepcopy(state_dict[ki]) + self.model.load_state_dict(pretrained_dict, strict=True) + self.model.to(DEVICE).eval() + self.transform = transforms.Compose( + [ + transforms.Resize((256, 256)), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ), + ] + ) + + +class NPR_Detector(DetectorWrapper): + def __init__(self, model_path): + super().__init__() + self._setup_path('detector_codes/NPR-DeepfakeDetection-main') + from networks.resnet import resnet50 + + self.model = resnet50(num_classes=1) + self.model.load_state_dict( + torch.load(model_path, map_location='cpu', weights_only=False) + ) + self.model.to(DEVICE).eval() + self.transform = transforms.Compose( + [ + transforms.Resize((256, 256)), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ), + ] + ) + + +class RIGID_Detector(DetectorWrapper): + def __init__(self, model_path=None): + super().__init__() + self.use_optimal_threshold = True + self._setup_path('detector_codes/RIGID-main') + from rigid_detector import RIGID_Detector as RIGID_Impl + + self.model = RIGID_Impl(lamb=0.05) + self.model.model.to(DEVICE) + self.transform = transforms.Compose( + [ + transforms.Resize((224, 224)), + transforms.ToTensor(), + transforms.Normalize( + mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225) + ), + ] + ) + + @torch.inference_mode() + def detect(self, data): + return self.model.detect(data) + + +class Resnet50_Detector(DetectorWrapper): + def __init__(self, model_path): + super().__init__() + self._setup_path('detector_codes/Resnet50-main') + from networks.resnet import resnet50 + + self.model = resnet50(num_classes=1) + self.model.load_state_dict( + torch.load(model_path, map_location='cpu', weights_only=False) + ) + self.model.to(DEVICE).eval() + self.transform = transforms.Compose( + [ + transforms.Resize((256, 256)), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ), + ] + ) + + +class SAFE_Detector(DetectorWrapper): + def __init__(self, model_path): + super().__init__() + self._setup_path('detector_codes/SAFE-main') + from models.resnet import resnet50 + + self.model = resnet50(num_classes=2) + state_dict = torch.load(model_path, map_location='cpu', weights_only=False) + self.model.load_state_dict( + state_dict['model'] if 'model' in state_dict else state_dict, strict=True + ) + self.model.to(DEVICE).eval() + self.transform = transforms.Compose( + [ + transforms.Resize((256, 256)), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ), + ] + ) + + +weight_mapping = { + 'AIDE': './DeForge-AIGIBench-Models/AIDE-main/model_epoch_best.pth', + 'C2P-CLIP': './DeForge-AIGIBench-Models/C2P-CLIP-DeepfakeDetection-main/model_epoch_best.pth', + 'C2P-CLIP-Original': None, + 'C2P-DINOv2': './DeForge-AIGIBench-Models/C2P-DINOv2-main/model_epoch_best.pth', + 'CLIPDetection': './DeForge-AIGIBench-Models/CLIPDetection-main/model_epoch_best.pth', + 'CNNDetection': './DeForge-AIGIBench-Models/CNNDetection-master/model_epoch_best.pth', + 'DeForge-AI': './DeForge-AIGIBench-Models/DeForge-AI-main/model_epoch_best.pth', + 'DFFreq': './DeForge-AIGIBench-Models/DFFreq-main/model_epoch_best.pth', + 'Effort': './DeForge-AIGIBench-Models/Effort-AIGI-Detection/model_epoch_best.pth', + 'FreqNet': './DeForge-AIGIBench-Models/FreqNet-DeepfakeDetection-main/model_epoch_best.pth', + 'GramNet': './DeForge-AIGIBench-Models/Gram-Net-main/model_epoch_best.pth', + 'LaDeDa': './DeForge-AIGIBench-Models/RealTime-DeepfakeDetection-in-the-RealWorld-main/model_epoch_best.pth', + 'LGrad': './DeForge-AIGIBench-Models/LGrad-master/model_epoch_best.pth', + 'NPR': './DeForge-AIGIBench-Models/NPR-DeepfakeDetection-main/model_epoch_best.pth', + 'RIGID': None, + 'Resnet50': './DeForge-AIGIBench-Models/Resnet50-main/model_epoch_best.pth', + 'SAFE': './DeForge-AIGIBench-Models/SAFE-main/model_epoch_best.pth', +} + +detector_classes = { + 'AIDE': AIDE_Detector, + 'C2P-CLIP': C2P_CLIP_Detector, + 'C2P-CLIP-Original': C2P_CLIP_Original_Detector, + 'C2P-DINOv2': C2P_DINOv2_Detector, + 'CLIPDetection': CLIPDetection_Detector, + 'CNNDetection': CNNDetection_Detector, + 'DeForge-AI': DeForge_AI_Detector, + 'DFFreq': DFFreq_Detector, + 'Effort': Effort_Detector, + 'FreqNet': FreqNet_Detector, + 'GramNet': GramNet_Detector, + 'LaDeDa': LaDeDa_Detector, + 'LGrad': LGrad_Detector, + 'NPR': NPR_Detector, + 'RIGID': RIGID_Detector, + 'Resnet50': Resnet50_Detector, + 'SAFE': SAFE_Detector, +} diff --git a/evaluate_detectors.py b/evaluate_detectors.py new file mode 100644 index 0000000000000000000000000000000000000000..01855ace9258794ed190077bd71b7bd8bf7033c2 --- /dev/null +++ b/evaluate_detectors.py @@ -0,0 +1,365 @@ +import argparse +import os +import random + +import numpy as np +import torch +from datasets import load_dataset +from dotenv import load_dotenv +from sklearn import metrics +from torch.utils.data import DataLoader, Dataset +from tqdm import tqdm + +from detector_codes import ( + DEVICE, + detector_classes, + weight_mapping, +) + +CACHE_DIR = None + +load_dotenv() +HF_TOKEN = os.getenv('HF_TOKEN') + +SEED = 123 +random.seed(SEED) +os.environ['PYTHONHASHSEED'] = str(SEED) +np.random.seed(SEED) +torch.manual_seed(SEED) +if torch.cuda.is_available(): + torch.cuda.manual_seed(SEED) + torch.cuda.manual_seed_all(SEED) +torch.backends.cudnn.benchmark = True +torch.backends.cudnn.deterministic = False +torch.backends.cudnn.enabled = True + + +def calculate_auc_metrics(id_conf, ood_conf): + all_conf = np.concatenate([id_conf, ood_conf]) + labels = np.concatenate([np.ones(len(id_conf)), np.zeros(len(ood_conf))]) + fpr, tpr, _ = metrics.roc_curve(labels, all_conf) + auroc = metrics.auc(fpr, tpr) + tpr_threshold = 0.95 + valid_indices = tpr >= tpr_threshold + fpr_at_95 = fpr[np.argmax(valid_indices)] if np.any(valid_indices) else fpr[-1] + return auroc, fpr_at_95 + + +def calculate_average_precision(id_predictions, ood_predictions): + all_predictions = np.concatenate([id_predictions, ood_predictions]) + labels = np.concatenate( + [np.ones(len(id_predictions)), np.zeros(len(ood_predictions))] + ) + return metrics.average_precision_score(labels, all_predictions) + + +def calculate_accuracy(id_conf, ood_conf, use_optimal=False): + """Calculates class-specific accuracies. + Returns (real_accuracy, fake_accuracy)""" + if use_optimal: + all_conf = np.concatenate([id_conf, ood_conf]) + labels = np.concatenate([np.ones(len(id_conf)), np.zeros(len(ood_conf))]) + + fpr, tpr, thresholds = metrics.roc_curve(labels, all_conf) + + # We maximize the arithmetic mean of TPR (real acc) and TNR (fake acc) + # to find the optimal balanced threshold + balanced_accs = (tpr + (1 - fpr)) / 2 + best_idx = np.argmax(balanced_accs) + + return tpr[best_idx], 1.0 - fpr[best_idx] + else: + # Use fixed 0.5 threshold + r_acc = (id_conf >= 0.5).mean() + f_acc = (ood_conf < 0.5).mean() + return r_acc, f_acc + + +def print_table_header(): + print('\n' + '=' * 95) + print( + f'{"Dataset":<25} | {"Similarity":<10} | {"Accuracy":<10} | {"AUC":<10} | {"AP":<10} | {"FPR95":<10}' + ) + print('-' * 95) + + +def print_legend(use_optimal_threshold=False): + print('\nLegend:') + print( + '- Similarity: The average detector score indicating the predicted probability of the image being Real (ID).' + ) + if use_optimal_threshold: + print( + '- Accuracy: The class-specific accuracy (Real accuracy for the Real row, Fake accuracy for Generator rows)' + ) + print(' using an optimal threshold calculated pairwise.') + else: + print('- Accuracy: The class-specific accuracy using a 0.5 threshold.') + print( + ' (For Real: score >= 0.5 is correct; For Generated: score < 0.5 is correct)' + ) + print('- AUC: Area Under the Receiver Operating Characteristic Curve (ROC AUC).') + print('- AP: Average Precision, summarizing the precision-recall curve.') + print('- FPR95: False Positive Rate when the True Positive Rate (TPR) is at 95%.') + + +def print_evaluation_results(similarities, datasets, use_optimal_threshold=False): + id_confi = similarities[0] + id_name = datasets[0] + + # Pre-calculate metrics to get average Real accuracy + ood_results = [] + id_acc_scores = [] + + for ood_confi, dataset_name in zip(similarities[1:], datasets[1:]): + auroc, fpr_95 = calculate_auc_metrics(id_confi, ood_confi) + aver_p = calculate_average_precision(id_confi, ood_confi) + r_acc, f_acc = calculate_accuracy( + id_confi, ood_confi, use_optimal=use_optimal_threshold + ) + sim = ood_confi.mean() + + ood_results.append( + { + 'name': dataset_name, + 'sim': sim, + 'acc': f_acc, + 'auc': auroc, + 'ap': aver_p, + 'fpr': fpr_95, + } + ) + id_acc_scores.append(r_acc) + + avg_id_acc = np.mean(id_acc_scores) if id_acc_scores else 0.0 + + print_table_header() + + # Real Section + id_sim = id_confi.mean() + print( + f'{id_name:<25} | {id_sim:<10.4f} | {avg_id_acc:<10.4f} | {"-":<10} | {"-":<10} | {"-":<10}' + ) + print( + f'{"Average Real":<25} | {id_sim:<10.4f} | {avg_id_acc:<10.4f} | {"-":<10} | {"-":<10} | {"-":<10}' + ) + print('-' * 95) + + # Generated Section + auc_scores, ap_scores, fpr_scores, sim_scores, acc_scores = [], [], [], [], [] + + for res in ood_results: + print( + f'{res["name"]:<25} | {res["sim"]:<10.4f} | {res["acc"]:<10.4f} | {res["auc"]:<10.4f} | {res["ap"]:<10.4f} | {res["fpr"]:<10.4f}' + ) + sim_scores.append(res['sim']) + acc_scores.append(res['acc']) + auc_scores.append(res['auc']) + ap_scores.append(res['ap']) + fpr_scores.append(res['fpr']) + + avg_sim = np.mean(sim_scores) + avg_acc = np.mean(acc_scores) + avg_auc = np.mean(auc_scores) + avg_ap = np.mean(ap_scores) + avg_fpr = np.mean(fpr_scores) + + print('-' * 95) + print( + f'{"Average Generated":<25} | {avg_sim:<10.4f} | {avg_acc:<10.4f} | {avg_auc:<10.4f} | {avg_ap:<10.4f} | {avg_fpr:<10.4f}' + ) + print('=' * 95) + + # Summary Table + total_acc = (avg_id_acc + avg_acc) / 2 + print('\nSummary:') + print('=' * 95) + print( + f'{"Accuracy":<12} | {"Accuracy (Real)":<18} | {"Accuracy (Gen)":<18} | {"AUC":<10} | {"AP":<10} | {"FPR95":<10}' + ) + print('-' * 95) + print( + f'{total_acc:<12.4f} | {avg_id_acc:<18.4f} | {avg_acc:<18.4f} | {avg_auc:<10.4f} | {avg_ap:<10.4f} | {avg_fpr:<10.4f}' + ) + print('=' * 95) + + +class HFImageDataset(Dataset): + def __init__(self, hf_data, transform=None): + self.hf_data = hf_data + self.transform = transform + + def __len__(self): + return len(self.hf_data) + + def __getitem__(self, idx): + item = self.hf_data[idx] + image = item['image'].convert('RGB') + label = item['label'] + if self.transform: + image = self.transform(image) + return image, label + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + '--model', + type=str, + required=True, + choices=[ + 'AIDE', + 'C2P-CLIP', + 'C2P-CLIP-Original', + 'C2P-DINOv2', + 'CLIPDetection', + 'CNNDetection', + 'DeForge-AI', + 'DFFreq', + 'Effort', + 'FreqNet', + 'GramNet', + 'LaDeDa', + 'LGrad', + 'NPR', + 'RIGID', + 'Resnet50', + 'SAFE', + ], + ) + parser.add_argument( + '--dataset', + type=str, + default='AIGC-Detection-Benchmark', + choices=['AIGC-Detection-Benchmark', 'MS-COCOAI', '140k-Real-and-Fake-Faces'], + help='HuggingFace dataset to evaluate on', + ) + parser.add_argument( + '--limit', type=int, default=1000, help='Limit samples per subset for speed' + ) + parser.add_argument( + '--batch_size', type=int, default=16, help='Batch size for evaluation' + ) + parser.add_argument( + '--show_legend', + type=lambda x: str(x).lower() == 'true', + default=False, + help='Whether to show the legend (default: False)', + ) + args = parser.parse_args() + + dataset_configs = { + 'AIGC-Detection-Benchmark': { + 'path': 'TheKernel01/AIGC-Detection-Benchmark', + 'mapping': { + 1: 'ADM', + 2: 'BigGAN', + 3: 'CycleGAN', + 4: 'DALLE2', + 5: 'GauGAN', + 6: 'GLIDE', + 7: 'Midjourney', + 8: 'ProGAN', + 9: 'SD14', + 10: 'SD15', + 11: 'SDXL', + 12: 'StarGAN', + 13: 'StyleGAN', + 14: 'StyleGAN2', + 15: 'VQDM', + 16: 'WhichFaceIsReal', + 17: 'Wukong', + }, + }, + 'MS-COCOAI': { + 'path': 'TheKernel01/MS-COCOAI', + 'mapping': {1: 'SD21', 2: 'SDXL', 3: 'SD3', 4: 'DALLE3', 5: 'Midjourney 6'}, + }, + '140k-Real-and-Fake-Faces': { + 'path': 'TheKernel01/140k-Real-and-Fake-Faces', + 'mapping': {1: 'StyleGAN'}, + }, + } + + print(f'Initializing {args.model} detector...') + detector = detector_classes[args.model](weight_mapping[args.model]) + + print(f'Loading dataset {args.dataset}...') + config = dataset_configs[args.dataset] + test_data = load_dataset( + config['path'], + split='test', + token=HF_TOKEN, + cache_dir=CACHE_DIR, + ) + all_generators = np.array(test_data['generator']) + generator_mapping = config['mapping'] + + # Prepare subsets + real_indices = np.nonzero(all_generators == 0)[0] + real_dataset = HFImageDataset( + test_data.select(real_indices), transform=detector.transform + ) + evaluation_datasets = [('Real (ID)', real_dataset)] + + for gen_id, gen_name in generator_mapping.items(): + fake_indices = np.nonzero(all_generators == gen_id)[0] + fake_dataset = HFImageDataset( + test_data.select(fake_indices), transform=detector.transform + ) + evaluation_datasets.append((f'{gen_name} (OOD)', fake_dataset)) + + # Run detection + sim_datasets = [] + test_datasets = [name for name, _ in evaluation_datasets] + + for dataset_name, dataset_obj in evaluation_datasets: + loader = DataLoader( + dataset_obj, + batch_size=args.batch_size, + shuffle=False, + num_workers=8, + pin_memory=True, + persistent_workers=True, + ) + scores = [] + total = 0 + + # Calculate expected number of batches based on samples limit + total_batches = ( + min(len(dataset_obj), args.limit) + args.batch_size - 1 + ) // args.batch_size + pbar = tqdm( + loader, total=total_batches, desc=f'Evaluating {dataset_name}', leave=False + ) + + for i, (imgs, _) in enumerate(pbar): + imgs = imgs.to(DEVICE) + # Detector returns p(fake), so we take 1 - p(fake) to get p(real) + p_fake = detector.detect(imgs) + score = 1.0 - p_fake + scores.append(score.cpu()) + total += len(imgs) + if total >= args.limit: + break + + scores = torch.cat(scores)[: args.limit] + print( + f'{dataset_name:<25}, Count: {len(scores)}, Similarity: {scores.mean():.4f}' + ) + sim_datasets.append(scores.numpy()) + + print('\n' + '=' * 95) + print(f'Results for {args.model} on {args.dataset}:') + print('=' * 95) + print_evaluation_results( + sim_datasets, + test_datasets, + use_optimal_threshold=detector.use_optimal_threshold, + ) + if args.show_legend: + print_legend(use_optimal_threshold=detector.use_optimal_threshold) + + +if __name__ == '__main__': + main() diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..dae50f7531f3278314e17081caeffbc0e42c666c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,33 @@ +[project] +name = "aigibench" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [ + "accelerate>=1.13.0", + "clip", + "datasets>=4.8.4", + "einops>=0.8.2", + "kornia>=0.8.2", + "loralib>=0.1.2", + "numpy>=2.4.4", + "open-clip-torch>=3.3.0", + "opencv-python>=4.13.0.92", + "peft>=0.18.1", + "pillow>=12.2.0", + "python-dotenv>=1.2.2", + "pytorch-wavelet>=1.2", + "pytorch-wavelets", + "pywavelets>=1.9.0", + "scikit-learn>=1.8.0", + "scipy>=1.17.1", + "torch>=2.11.0", + "torchvision>=0.26.0", + "tqdm>=4.67.3", + "transformers>=5.5.0", +] + +[tool.uv.sources] +clip = { git = "https://github.com/openai/CLIP.git" } +pytorch-wavelets = { git = "https://github.com/fbcotter/pytorch_wavelets.git" } diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..cd0ab2fe0845e6077044528a91805d1f4c0027ff --- /dev/null +++ b/requirements.txt @@ -0,0 +1,22 @@ +gradio +huggingface_hub +accelerate>=1.13.0 +clip @ git+https://github.com/openai/CLIP.git +datasets>=4.8.4 +einops>=0.8.2 +kornia>=0.8.2 +loralib>=0.1.2 +numpy>=2.4.4 +open-clip-torch>=3.3.0 +opencv-python>=4.13.0.92 +peft>=0.18.1 +pillow>=12.2.0 +python-dotenv>=1.2.2 +pytorch-wavelets @ git+https://github.com/fbcotter/pytorch_wavelets.git +pywavelets>=1.9.0 +scikit-learn>=1.8.0 +scipy>=1.17.1 +torch>=2.11.0 +torchvision>=0.26.0 +tqdm>=4.67.3 +transformers>=5.5.0 diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000000000000000000000000000000000000..7c71b9c3c98cb87b69315e3452f2aa46c53ccfb6 --- /dev/null +++ b/uv.lock @@ -0,0 +1,2362 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] + +[[package]] +name = "accelerate" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyyaml" }, + { name = "safetensors" }, + { name = "torch" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ca/14/787e5498cd062640f0f3d92ef4ae4063174f76f9afd29d13fc52a319daae/accelerate-1.13.0.tar.gz", hash = "sha256:d631b4e0f5b3de4aff2d7e9e6857d164810dfc3237d54d017f075122d057b236", size = 402835, upload-time = "2026-03-04T19:34:12.359Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/46/02ac5e262d4af18054b3e922b2baedbb2a03289ee792162de60a865defc5/accelerate-1.13.0-py3-none-any.whl", hash = "sha256:cf1a3efb96c18f7b152eb0fa7490f3710b19c3f395699358f08decca2b8b62e0", size = 383744, upload-time = "2026-03-04T19:34:10.313Z" }, +] + +[[package]] +name = "aigibench" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "accelerate" }, + { name = "clip" }, + { name = "datasets" }, + { name = "einops" }, + { name = "kornia" }, + { name = "loralib" }, + { name = "numpy" }, + { name = "open-clip-torch" }, + { name = "opencv-python" }, + { name = "peft" }, + { name = "pillow" }, + { name = "python-dotenv" }, + { name = "pytorch-wavelet" }, + { name = "pytorch-wavelets" }, + { name = "pywavelets" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "torch" }, + { name = "torchvision" }, + { name = "tqdm" }, + { name = "transformers" }, +] + +[package.metadata] +requires-dist = [ + { name = "accelerate", specifier = ">=1.13.0" }, + { name = "clip", git = "https://github.com/openai/CLIP.git" }, + { name = "datasets", specifier = ">=4.8.4" }, + { name = "einops", specifier = ">=0.8.2" }, + { name = "kornia", specifier = ">=0.8.2" }, + { name = "loralib", specifier = ">=0.1.2" }, + { name = "numpy", specifier = ">=2.4.4" }, + { name = "open-clip-torch", specifier = ">=3.3.0" }, + { name = "opencv-python", specifier = ">=4.13.0.92" }, + { name = "peft", specifier = ">=0.18.1" }, + { name = "pillow", specifier = ">=12.2.0" }, + { name = "python-dotenv", specifier = ">=1.2.2" }, + { name = "pytorch-wavelet", specifier = ">=1.2" }, + { name = "pytorch-wavelets", git = "https://github.com/fbcotter/pytorch_wavelets.git" }, + { name = "pywavelets", specifier = ">=1.9.0" }, + { name = "scikit-learn", specifier = ">=1.8.0" }, + { name = "scipy", specifier = ">=1.17.1" }, + { name = "torch", specifier = ">=2.11.0" }, + { name = "torchvision", specifier = ">=0.26.0" }, + { name = "tqdm", specifier = ">=4.67.3" }, + { name = "transformers", specifier = ">=5.5.0" }, +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.13.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/77/9a/152096d4808df8e4268befa55fba462f440f14beab85e8ad9bf990516918/aiohttp-3.13.5.tar.gz", hash = "sha256:9d98cc980ecc96be6eb4c1994ce35d28d8b1f5e5208a23b421187d1209dbb7d1", size = 7858271, upload-time = "2026-03-31T22:01:03.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/6f/353954c29e7dcce7cf00280a02c75f30e133c00793c7a2ed3776d7b2f426/aiohttp-3.13.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:023ecba036ddd840b0b19bf195bfae970083fd7024ce1ac22e9bba90464620e9", size = 748876, upload-time = "2026-03-31T21:57:36.319Z" }, + { url = "https://files.pythonhosted.org/packages/f5/1b/428a7c64687b3b2e9cd293186695affc0e1e54a445d0361743b231f11066/aiohttp-3.13.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15c933ad7920b7d9a20de151efcd05a6e38302cbf0e10c9b2acb9a42210a2416", size = 499557, upload-time = "2026-03-31T21:57:38.236Z" }, + { url = "https://files.pythonhosted.org/packages/29/47/7be41556bfbb6917069d6a6634bb7dd5e163ba445b783a90d40f5ac7e3a7/aiohttp-3.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab2899f9fa2f9f741896ebb6fa07c4c883bfa5c7f2ddd8cf2aafa86fa981b2d2", size = 500258, upload-time = "2026-03-31T21:57:39.923Z" }, + { url = "https://files.pythonhosted.org/packages/67/84/c9ecc5828cb0b3695856c07c0a6817a99d51e2473400f705275a2b3d9239/aiohttp-3.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a60eaa2d440cd4707696b52e40ed3e2b0f73f65be07fd0ef23b6b539c9c0b0b4", size = 1749199, upload-time = "2026-03-31T21:57:41.938Z" }, + { url = "https://files.pythonhosted.org/packages/f0/d3/3c6d610e66b495657622edb6ae7c7fd31b2e9086b4ec50b47897ad6042a9/aiohttp-3.13.5-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:55b3bdd3292283295774ab585160c4004f4f2f203946997f49aac032c84649e9", size = 1721013, upload-time = "2026-03-31T21:57:43.904Z" }, + { url = "https://files.pythonhosted.org/packages/49/a0/24409c12217456df0bae7babe3b014e460b0b38a8e60753d6cb339f6556d/aiohttp-3.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c2b2355dc094e5f7d45a7bb262fe7207aa0460b37a0d87027dcf21b5d890e7d5", size = 1781501, upload-time = "2026-03-31T21:57:46.285Z" }, + { url = "https://files.pythonhosted.org/packages/98/9d/b65ec649adc5bccc008b0957a9a9c691070aeac4e41cea18559fef49958b/aiohttp-3.13.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b38765950832f7d728297689ad78f5f2cf79ff82487131c4d26fe6ceecdc5f8e", size = 1878981, upload-time = "2026-03-31T21:57:48.734Z" }, + { url = "https://files.pythonhosted.org/packages/57/d8/8d44036d7eb7b6a8ec4c5494ea0c8c8b94fbc0ed3991c1a7adf230df03bf/aiohttp-3.13.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b18f31b80d5a33661e08c89e202edabf1986e9b49c42b4504371daeaa11b47c1", size = 1767934, upload-time = "2026-03-31T21:57:51.171Z" }, + { url = "https://files.pythonhosted.org/packages/31/04/d3f8211f273356f158e3464e9e45484d3fb8c4ce5eb2f6fe9405c3273983/aiohttp-3.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:33add2463dde55c4f2d9635c6ab33ce154e5ecf322bd26d09af95c5f81cfa286", size = 1566671, upload-time = "2026-03-31T21:57:53.326Z" }, + { url = "https://files.pythonhosted.org/packages/41/db/073e4ebe00b78e2dfcacff734291651729a62953b48933d765dc513bf798/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:327cc432fdf1356fb4fbc6fe833ad4e9f6aacb71a8acaa5f1855e4b25910e4a9", size = 1705219, upload-time = "2026-03-31T21:57:55.385Z" }, + { url = "https://files.pythonhosted.org/packages/48/45/7dfba71a2f9fd97b15c95c06819de7eb38113d2cdb6319669195a7d64270/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7c35b0bf0b48a70b4cb4fc5d7bed9b932532728e124874355de1a0af8ec4bc88", size = 1743049, upload-time = "2026-03-31T21:57:57.341Z" }, + { url = "https://files.pythonhosted.org/packages/18/71/901db0061e0f717d226386a7f471bb59b19566f2cae5f0d93874b017271f/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:df23d57718f24badef8656c49743e11a89fd6f5358fa8a7b96e728fda2abf7d3", size = 1749557, upload-time = "2026-03-31T21:57:59.626Z" }, + { url = "https://files.pythonhosted.org/packages/08/d5/41eebd16066e59cd43728fe74bce953d7402f2b4ddfdfef2c0e9f17ca274/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:02e048037a6501a5ec1f6fc9736135aec6eb8a004ce48838cb951c515f32c80b", size = 1558931, upload-time = "2026-03-31T21:58:01.972Z" }, + { url = "https://files.pythonhosted.org/packages/30/e6/4a799798bf05740e66c3a1161079bda7a3dd8e22ca392481d7a7f9af82a6/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31cebae8b26f8a615d2b546fee45d5ffb76852ae6450e2a03f42c9102260d6fe", size = 1774125, upload-time = "2026-03-31T21:58:04.007Z" }, + { url = "https://files.pythonhosted.org/packages/84/63/7749337c90f92bc2cb18f9560d67aa6258c7060d1397d21529b8004fcf6f/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:888e78eb5ca55a615d285c3c09a7a91b42e9dd6fc699b166ebd5dee87c9ccf14", size = 1732427, upload-time = "2026-03-31T21:58:06.337Z" }, + { url = "https://files.pythonhosted.org/packages/98/de/cf2f44ff98d307e72fb97d5f5bbae3bfcb442f0ea9790c0bf5c5c2331404/aiohttp-3.13.5-cp312-cp312-win32.whl", hash = "sha256:8bd3ec6376e68a41f9f95f5ed170e2fcf22d4eb27a1f8cb361d0508f6e0557f3", size = 433534, upload-time = "2026-03-31T21:58:08.712Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ca/eadf6f9c8fa5e31d40993e3db153fb5ed0b11008ad5d9de98a95045bed84/aiohttp-3.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:110e448e02c729bcebb18c60b9214a87ba33bac4a9fa5e9a5f139938b56c6cb1", size = 460446, upload-time = "2026-03-31T21:58:10.945Z" }, + { url = "https://files.pythonhosted.org/packages/78/e9/d76bf503005709e390122d34e15256b88f7008e246c4bdbe915cd4f1adce/aiohttp-3.13.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5029cc80718bbd545123cd8fe5d15025eccaaaace5d0eeec6bd556ad6163d61", size = 742930, upload-time = "2026-03-31T21:58:13.155Z" }, + { url = "https://files.pythonhosted.org/packages/57/00/4b7b70223deaebd9bb85984d01a764b0d7bd6526fcdc73cca83bcbe7243e/aiohttp-3.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4bb6bf5811620003614076bdc807ef3b5e38244f9d25ca5fe888eaccea2a9832", size = 496927, upload-time = "2026-03-31T21:58:15.073Z" }, + { url = "https://files.pythonhosted.org/packages/9c/f5/0fb20fb49f8efdcdce6cd8127604ad2c503e754a8f139f5e02b01626523f/aiohttp-3.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a84792f8631bf5a94e52d9cc881c0b824ab42717165a5579c760b830d9392ac9", size = 497141, upload-time = "2026-03-31T21:58:17.009Z" }, + { url = "https://files.pythonhosted.org/packages/3b/86/b7c870053e36a94e8951b803cb5b909bfbc9b90ca941527f5fcafbf6b0fa/aiohttp-3.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:57653eac22c6a4c13eb22ecf4d673d64a12f266e72785ab1c8b8e5940d0e8090", size = 1732476, upload-time = "2026-03-31T21:58:18.925Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e5/4e161f84f98d80c03a238671b4136e6530453d65262867d989bbe78244d0/aiohttp-3.13.5-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5e5f7debc7a57af53fdf5c5009f9391d9f4c12867049d509bf7bb164a6e295b", size = 1706507, upload-time = "2026-03-31T21:58:21.094Z" }, + { url = "https://files.pythonhosted.org/packages/d4/56/ea11a9f01518bd5a2a2fcee869d248c4b8a0cfa0bb13401574fa31adf4d4/aiohttp-3.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c719f65bebcdf6716f10e9eff80d27567f7892d8988c06de12bbbd39307c6e3a", size = 1773465, upload-time = "2026-03-31T21:58:23.159Z" }, + { url = "https://files.pythonhosted.org/packages/eb/40/333ca27fb74b0383f17c90570c748f7582501507307350a79d9f9f3c6eb1/aiohttp-3.13.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d97f93fdae594d886c5a866636397e2bcab146fd7a132fd6bb9ce182224452f8", size = 1873523, upload-time = "2026-03-31T21:58:25.59Z" }, + { url = "https://files.pythonhosted.org/packages/f0/d2/e2f77eef1acb7111405433c707dc735e63f67a56e176e72e9e7a2cd3f493/aiohttp-3.13.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3df334e39d4c2f899a914f1dba283c1aadc311790733f705182998c6f7cae665", size = 1754113, upload-time = "2026-03-31T21:58:27.624Z" }, + { url = "https://files.pythonhosted.org/packages/fb/56/3f653d7f53c89669301ec9e42c95233e2a0c0a6dd051269e6e678db4fdb0/aiohttp-3.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fe6970addfea9e5e081401bcbadf865d2b6da045472f58af08427e108d618540", size = 1562351, upload-time = "2026-03-31T21:58:29.918Z" }, + { url = "https://files.pythonhosted.org/packages/ec/a6/9b3e91eb8ae791cce4ee736da02211c85c6f835f1bdfac0594a8a3b7018c/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7becdf835feff2f4f335d7477f121af787e3504b48b449ff737afb35869ba7bb", size = 1693205, upload-time = "2026-03-31T21:58:32.214Z" }, + { url = "https://files.pythonhosted.org/packages/98/fc/bfb437a99a2fcebd6b6eaec609571954de2ed424f01c352f4b5504371dd3/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:676e5651705ad5d8a70aeb8eb6936c436d8ebbd56e63436cb7dd9bb36d2a9a46", size = 1730618, upload-time = "2026-03-31T21:58:34.728Z" }, + { url = "https://files.pythonhosted.org/packages/e4/b6/c8534862126191a034f68153194c389addc285a0f1347d85096d349bbc15/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:9b16c653d38eb1a611cc898c41e76859ca27f119d25b53c12875fd0474ae31a8", size = 1745185, upload-time = "2026-03-31T21:58:36.909Z" }, + { url = "https://files.pythonhosted.org/packages/0b/93/4ca8ee2ef5236e2707e0fd5fecb10ce214aee1ff4ab307af9c558bda3b37/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:999802d5fa0389f58decd24b537c54aa63c01c3219ce17d1214cbda3c2b22d2d", size = 1557311, upload-time = "2026-03-31T21:58:39.38Z" }, + { url = "https://files.pythonhosted.org/packages/57/ae/76177b15f18c5f5d094f19901d284025db28eccc5ae374d1d254181d33f4/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ec707059ee75732b1ba130ed5f9580fe10ff75180c812bc267ded039db5128c6", size = 1773147, upload-time = "2026-03-31T21:58:41.476Z" }, + { url = "https://files.pythonhosted.org/packages/01/a4/62f05a0a98d88af59d93b7fcac564e5f18f513cb7471696ac286db970d6a/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d6d44a5b48132053c2f6cd5c8cb14bc67e99a63594e336b0f2af81e94d5530c", size = 1730356, upload-time = "2026-03-31T21:58:44.049Z" }, + { url = "https://files.pythonhosted.org/packages/e4/85/fc8601f59dfa8c9523808281f2da571f8b4699685f9809a228adcc90838d/aiohttp-3.13.5-cp313-cp313-win32.whl", hash = "sha256:329f292ed14d38a6c4c435e465f48bebb47479fd676a0411936cc371643225cc", size = 432637, upload-time = "2026-03-31T21:58:46.167Z" }, + { url = "https://files.pythonhosted.org/packages/c0/1b/ac685a8882896acf0f6b31d689e3792199cfe7aba37969fa91da63a7fa27/aiohttp-3.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:69f571de7500e0557801c0b51f4780482c0ec5fe2ac851af5a92cfce1af1cb83", size = 458896, upload-time = "2026-03-31T21:58:48.119Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ce/46572759afc859e867a5bc8ec3487315869013f59281ce61764f76d879de/aiohttp-3.13.5-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:eb4639f32fd4a9904ab8fb45bf3383ba71137f3d9d4ba25b3b3f3109977c5b8c", size = 745721, upload-time = "2026-03-31T21:58:50.229Z" }, + { url = "https://files.pythonhosted.org/packages/13/fe/8a2efd7626dbe6049b2ef8ace18ffda8a4dfcbe1bcff3ac30c0c7575c20b/aiohttp-3.13.5-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:7e5dc4311bd5ac493886c63cbf76ab579dbe4641268e7c74e48e774c74b6f2be", size = 497663, upload-time = "2026-03-31T21:58:52.232Z" }, + { url = "https://files.pythonhosted.org/packages/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:756c3c304d394977519824449600adaf2be0ccee76d206ee339c5e76b70ded25", size = 499094, upload-time = "2026-03-31T21:58:54.566Z" }, + { url = "https://files.pythonhosted.org/packages/0a/33/a8362cb15cf16a3af7e86ed11962d5cd7d59b449202dc576cdc731310bde/aiohttp-3.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecc26751323224cf8186efcf7fbcbc30f4e1d8c7970659daf25ad995e4032a56", size = 1726701, upload-time = "2026-03-31T21:58:56.864Z" }, + { url = "https://files.pythonhosted.org/packages/45/0c/c091ac5c3a17114bd76cbf85d674650969ddf93387876cf67f754204bd77/aiohttp-3.13.5-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10a75acfcf794edf9d8db50e5a7ec5fc818b2a8d3f591ce93bc7b1210df016d2", size = 1683360, upload-time = "2026-03-31T21:58:59.072Z" }, + { url = "https://files.pythonhosted.org/packages/23/73/bcee1c2b79bc275e964d1446c55c54441a461938e70267c86afaae6fba27/aiohttp-3.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f7a18f258d124cd678c5fe072fe4432a4d5232b0657fca7c1847f599233c83a", size = 1773023, upload-time = "2026-03-31T21:59:01.776Z" }, + { url = "https://files.pythonhosted.org/packages/c7/ef/720e639df03004fee2d869f771799d8c23046dec47d5b81e396c7cda583a/aiohttp-3.13.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:df6104c009713d3a89621096f3e3e88cc323fd269dbd7c20afe18535094320be", size = 1853795, upload-time = "2026-03-31T21:59:04.568Z" }, + { url = "https://files.pythonhosted.org/packages/bd/c9/989f4034fb46841208de7aeeac2c6d8300745ab4f28c42f629ba77c2d916/aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:241a94f7de7c0c3b616627aaad530fe2cb620084a8b144d3be7b6ecfe95bae3b", size = 1730405, upload-time = "2026-03-31T21:59:07.221Z" }, + { url = "https://files.pythonhosted.org/packages/ce/75/ee1fd286ca7dc599d824b5651dad7b3be7ff8d9a7e7b3fe9820d9180f7db/aiohttp-3.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c974fb66180e58709b6fc402846f13791240d180b74de81d23913abe48e96d94", size = 1558082, upload-time = "2026-03-31T21:59:09.484Z" }, + { url = "https://files.pythonhosted.org/packages/c3/20/1e9e6650dfc436340116b7aa89ff8cb2bbdf0abc11dfaceaad8f74273a10/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:6e27ea05d184afac78aabbac667450c75e54e35f62238d44463131bd3f96753d", size = 1692346, upload-time = "2026-03-31T21:59:12.068Z" }, + { url = "https://files.pythonhosted.org/packages/d8/40/8ebc6658d48ea630ac7903912fe0dd4e262f0e16825aa4c833c56c9f1f56/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a79a6d399cef33a11b6f004c67bb07741d91f2be01b8d712d52c75711b1e07c7", size = 1698891, upload-time = "2026-03-31T21:59:14.552Z" }, + { url = "https://files.pythonhosted.org/packages/d8/78/ea0ae5ec8ba7a5c10bdd6e318f1ba5e76fcde17db8275188772afc7917a4/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c632ce9c0b534fbe25b52c974515ed674937c5b99f549a92127c85f771a78772", size = 1742113, upload-time = "2026-03-31T21:59:17.068Z" }, + { url = "https://files.pythonhosted.org/packages/8a/66/9d308ed71e3f2491be1acb8769d96c6f0c47d92099f3bc9119cada27b357/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fceedde51fbd67ee2bcc8c0b33d0126cc8b51ef3bbde2f86662bd6d5a6f10ec5", size = 1553088, upload-time = "2026-03-31T21:59:19.541Z" }, + { url = "https://files.pythonhosted.org/packages/da/a6/6cc25ed8dfc6e00c90f5c6d126a98e2cf28957ad06fa1036bd34b6f24a2c/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f92995dfec9420bb69ae629abf422e516923ba79ba4403bc750d94fb4a6c68c1", size = 1757976, upload-time = "2026-03-31T21:59:22.311Z" }, + { url = "https://files.pythonhosted.org/packages/c1/2b/cce5b0ffe0de99c83e5e36d8f828e4161e415660a9f3e58339d07cce3006/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20ae0ff08b1f2c8788d6fb85afcb798654ae6ba0b747575f8562de738078457b", size = 1712444, upload-time = "2026-03-31T21:59:24.635Z" }, + { url = "https://files.pythonhosted.org/packages/6c/cf/9e1795b4160c58d29421eafd1a69c6ce351e2f7c8d3c6b7e4ca44aea1a5b/aiohttp-3.13.5-cp314-cp314-win32.whl", hash = "sha256:b20df693de16f42b2472a9c485e1c948ee55524786a0a34345511afdd22246f3", size = 438128, upload-time = "2026-03-31T21:59:27.291Z" }, + { url = "https://files.pythonhosted.org/packages/22/4d/eaedff67fc805aeba4ba746aec891b4b24cebb1a7d078084b6300f79d063/aiohttp-3.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:f85c6f327bf0b8c29da7d93b1cabb6363fb5e4e160a32fa241ed2dce21b73162", size = 464029, upload-time = "2026-03-31T21:59:29.429Z" }, + { url = "https://files.pythonhosted.org/packages/79/11/c27d9332ee20d68dd164dc12a6ecdef2e2e35ecc97ed6cf0d2442844624b/aiohttp-3.13.5-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:1efb06900858bb618ff5cee184ae2de5828896c448403d51fb633f09e109be0a", size = 778758, upload-time = "2026-03-31T21:59:31.547Z" }, + { url = "https://files.pythonhosted.org/packages/04/fb/377aead2e0a3ba5f09b7624f702a964bdf4f08b5b6728a9799830c80041e/aiohttp-3.13.5-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:fee86b7c4bd29bdaf0d53d14739b08a106fdda809ca5fe032a15f52fae5fe254", size = 512883, upload-time = "2026-03-31T21:59:34.098Z" }, + { url = "https://files.pythonhosted.org/packages/bb/a6/aa109a33671f7a5d3bd78b46da9d852797c5e665bfda7d6b373f56bff2ec/aiohttp-3.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:20058e23909b9e65f9da62b396b77dfa95965cbe840f8def6e572538b1d32e36", size = 516668, upload-time = "2026-03-31T21:59:36.497Z" }, + { url = "https://files.pythonhosted.org/packages/79/b3/ca078f9f2fa9563c36fb8ef89053ea2bb146d6f792c5104574d49d8acb63/aiohttp-3.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cf20a8d6868cb15a73cab329ffc07291ba8c22b1b88176026106ae39aa6df0f", size = 1883461, upload-time = "2026-03-31T21:59:38.723Z" }, + { url = "https://files.pythonhosted.org/packages/b7/e3/a7ad633ca1ca497b852233a3cce6906a56c3225fb6d9217b5e5e60b7419d/aiohttp-3.13.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:330f5da04c987f1d5bdb8ae189137c77139f36bd1cb23779ca1a354a4b027800", size = 1747661, upload-time = "2026-03-31T21:59:41.187Z" }, + { url = "https://files.pythonhosted.org/packages/33/b9/cd6fe579bed34a906d3d783fe60f2fa297ef55b27bb4538438ee49d4dc41/aiohttp-3.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6f1cbf0c7926d315c3c26c2da41fd2b5d2fe01ac0e157b78caefc51a782196cf", size = 1863800, upload-time = "2026-03-31T21:59:43.84Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3f/2c1e2f5144cefa889c8afd5cf431994c32f3b29da9961698ff4e3811b79a/aiohttp-3.13.5-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:53fc049ed6390d05423ba33103ded7281fe897cf97878f369a527070bd95795b", size = 1958382, upload-time = "2026-03-31T21:59:46.187Z" }, + { url = "https://files.pythonhosted.org/packages/66/1d/f31ec3f1013723b3babe3609e7f119c2c2fb6ef33da90061a705ef3e1bc8/aiohttp-3.13.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:898703aa2667e3c5ca4c54ca36cd73f58b7a38ef87a5606414799ebce4d3fd3a", size = 1803724, upload-time = "2026-03-31T21:59:48.656Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b4/57712dfc6f1542f067daa81eb61da282fab3e6f1966fca25db06c4fc62d5/aiohttp-3.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0494a01ca9584eea1e5fbd6d748e61ecff218c51b576ee1999c23db7066417d8", size = 1640027, upload-time = "2026-03-31T21:59:51.284Z" }, + { url = "https://files.pythonhosted.org/packages/25/3c/734c878fb43ec083d8e31bf029daae1beafeae582d1b35da234739e82ee7/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6cf81fe010b8c17b09495cbd15c1d35afbc8fb405c0c9cf4738e5ae3af1d65be", size = 1806644, upload-time = "2026-03-31T21:59:53.753Z" }, + { url = "https://files.pythonhosted.org/packages/20/a5/f671e5cbec1c21d044ff3078223f949748f3a7f86b14e34a365d74a5d21f/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:c564dd5f09ddc9d8f2c2d0a301cd30a79a2cc1b46dd1a73bef8f0038863d016b", size = 1791630, upload-time = "2026-03-31T21:59:56.239Z" }, + { url = "https://files.pythonhosted.org/packages/0b/63/fb8d0ad63a0b8a99be97deac8c04dacf0785721c158bdf23d679a87aa99e/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2994be9f6e51046c4f864598fd9abeb4fba6e88f0b2152422c9666dcd4aea9c6", size = 1809403, upload-time = "2026-03-31T21:59:59.103Z" }, + { url = "https://files.pythonhosted.org/packages/59/0c/bfed7f30662fcf12206481c2aac57dedee43fe1c49275e85b3a1e1742294/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:157826e2fa245d2ef46c83ea8a5faf77ca19355d278d425c29fda0beb3318037", size = 1634924, upload-time = "2026-03-31T22:00:02.116Z" }, + { url = "https://files.pythonhosted.org/packages/17/d6/fd518d668a09fd5a3319ae5e984d4d80b9a4b3df4e21c52f02251ef5a32e/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:a8aca50daa9493e9e13c0f566201a9006f080e7c50e5e90d0b06f53146a54500", size = 1836119, upload-time = "2026-03-31T22:00:04.756Z" }, + { url = "https://files.pythonhosted.org/packages/78/b7/15fb7a9d52e112a25b621c67b69c167805cb1f2ab8f1708a5c490d1b52fe/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3b13560160d07e047a93f23aaa30718606493036253d5430887514715b67c9d9", size = 1772072, upload-time = "2026-03-31T22:00:07.494Z" }, + { url = "https://files.pythonhosted.org/packages/7e/df/57ba7f0c4a553fc2bd8b6321df236870ec6fd64a2a473a8a13d4f733214e/aiohttp-3.13.5-cp314-cp314t-win32.whl", hash = "sha256:9a0f4474b6ea6818b41f82172d799e4b3d29e22c2c520ce4357856fced9af2f8", size = 471819, upload-time = "2026-03-31T22:00:10.277Z" }, + { url = "https://files.pythonhosted.org/packages/62/29/2f8418269e46454a26171bfdd6a055d74febf32234e474930f2f60a17145/aiohttp-3.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:18a2f6c1182c51baa1d28d68fea51513cb2a76612f038853c0ad3c145423d3d9", size = 505441, upload-time = "2026-03-31T22:00:12.791Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + +[[package]] +name = "annotated-doc" +version = "0.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, +] + +[[package]] +name = "anyio" +version = "4.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622, upload-time = "2026-03-24T12:59:09.671Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", size = 114353, upload-time = "2026-03-24T12:59:08.246Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "certifi" +version = "2026.2.25" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328, upload-time = "2026-04-02T09:26:24.331Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061, upload-time = "2026-04-02T09:26:25.568Z" }, + { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031, upload-time = "2026-04-02T09:26:26.865Z" }, + { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239, upload-time = "2026-04-02T09:26:28.044Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589, upload-time = "2026-04-02T09:26:29.239Z" }, + { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733, upload-time = "2026-04-02T09:26:30.5Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652, upload-time = "2026-04-02T09:26:31.709Z" }, + { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229, upload-time = "2026-04-02T09:26:33.282Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552, upload-time = "2026-04-02T09:26:34.845Z" }, + { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806, upload-time = "2026-04-02T09:26:36.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316, upload-time = "2026-04-02T09:26:37.672Z" }, + { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274, upload-time = "2026-04-02T09:26:38.93Z" }, + { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468, upload-time = "2026-04-02T09:26:40.17Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460, upload-time = "2026-04-02T09:26:41.416Z" }, + { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330, upload-time = "2026-04-02T09:26:42.554Z" }, + { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828, upload-time = "2026-04-02T09:26:44.075Z" }, + { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627, upload-time = "2026-04-02T09:26:45.198Z" }, + { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008, upload-time = "2026-04-02T09:26:46.824Z" }, + { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303, upload-time = "2026-04-02T09:26:48.397Z" }, + { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282, upload-time = "2026-04-02T09:26:49.684Z" }, + { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595, upload-time = "2026-04-02T09:26:50.915Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986, upload-time = "2026-04-02T09:26:52.197Z" }, + { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711, upload-time = "2026-04-02T09:26:53.49Z" }, + { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036, upload-time = "2026-04-02T09:26:54.975Z" }, + { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998, upload-time = "2026-04-02T09:26:56.303Z" }, + { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056, upload-time = "2026-04-02T09:26:57.554Z" }, + { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537, upload-time = "2026-04-02T09:26:58.843Z" }, + { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176, upload-time = "2026-04-02T09:27:00.437Z" }, + { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723, upload-time = "2026-04-02T09:27:02.021Z" }, + { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085, upload-time = "2026-04-02T09:27:03.192Z" }, + { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819, upload-time = "2026-04-02T09:27:04.454Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915, upload-time = "2026-04-02T09:27:05.971Z" }, + { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" }, + { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" }, + { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" }, + { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" }, + { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" }, + { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" }, + { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" }, + { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" }, + { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" }, + { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" }, + { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" }, + { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" }, + { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" }, + { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" }, + { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" }, + { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" }, + { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" }, + { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" }, + { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" }, + { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" }, + { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" }, + { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" }, + { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, +] + +[[package]] +name = "click" +version = "8.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/75/31212c6bf2503fdf920d87fee5d7a86a2e3bcf444984126f13d8e4016804/click-8.3.2.tar.gz", hash = "sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5", size = 302856, upload-time = "2026-04-03T19:14:45.118Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl", hash = "sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d", size = 108379, upload-time = "2026-04-03T19:14:43.505Z" }, +] + +[[package]] +name = "clip" +version = "1.0" +source = { git = "https://github.com/openai/CLIP.git#d05afc436d78f1c48dc0dbf8e5980a9d471f35f6" } +dependencies = [ + { name = "ftfy" }, + { name = "packaging" }, + { name = "regex" }, + { name = "torch" }, + { name = "torchvision" }, + { name = "tqdm" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "cuda-bindings" +version = "13.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-pathfinder", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/c8/b2589d68acf7e3d63e2be330b84bc25712e97ed799affbca7edd7eae25d6/cuda_bindings-13.2.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e865447abfb83d6a98ad5130ed3c70b1fc295ae3eeee39fd07b4ddb0671b6788", size = 5722404, upload-time = "2026-03-11T00:12:44.041Z" }, + { url = "https://files.pythonhosted.org/packages/1f/92/f899f7bbb5617bb65ec52a6eac1e9a1447a86b916c4194f8a5001b8cde0c/cuda_bindings-13.2.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:46d8776a55d6d5da9dd6e9858fba2efcda2abe6743871dee47dd06eb8cb6d955", size = 6320619, upload-time = "2026-03-11T00:12:45.939Z" }, + { url = "https://files.pythonhosted.org/packages/df/93/eef988860a3ca985f82c4f3174fc0cdd94e07331ba9a92e8e064c260337f/cuda_bindings-13.2.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6629ca2df6f795b784752409bcaedbd22a7a651b74b56a165ebc0c9dcbd504d0", size = 5614610, upload-time = "2026-03-11T00:12:50.337Z" }, + { url = "https://files.pythonhosted.org/packages/18/23/6db3aba46864aee357ab2415135b3fe3da7e9f1fa0221fa2a86a5968099c/cuda_bindings-13.2.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7dca0da053d3b4cc4869eff49c61c03f3c5dbaa0bcd712317a358d5b8f3f385d", size = 6149914, upload-time = "2026-03-11T00:12:52.374Z" }, + { url = "https://files.pythonhosted.org/packages/c0/87/87a014f045b77c6de5c8527b0757fe644417b184e5367db977236a141602/cuda_bindings-13.2.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6464b30f46692d6c7f65d4a0e0450d81dd29de3afc1bb515653973d01c2cd6e", size = 5685673, upload-time = "2026-03-11T00:12:56.371Z" }, + { url = "https://files.pythonhosted.org/packages/ee/5e/c0fe77a73aaefd3fff25ffaccaac69c5a63eafdf8b9a4c476626ef0ac703/cuda_bindings-13.2.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f4af9f3e1be603fa12d5ad6cfca7844c9d230befa9792b5abdf7dd79979c3626", size = 6191386, upload-time = "2026-03-11T00:12:58.965Z" }, + { url = "https://files.pythonhosted.org/packages/5f/58/ed2c3b39c8dd5f96aa7a4abef0d47a73932c7a988e30f5fa428f00ed0da1/cuda_bindings-13.2.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df850a1ff8ce1b3385257b08e47b70e959932f5f432d0a4e46a355962b4e4771", size = 5507469, upload-time = "2026-03-11T00:13:04.063Z" }, + { url = "https://files.pythonhosted.org/packages/1f/01/0c941b112ceeb21439b05895eace78ca1aa2eaaf695c8521a068fd9b4c00/cuda_bindings-13.2.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8a16384c6494e5485f39314b0b4afb04bee48d49edb16d5d8593fd35bbd231b", size = 6059693, upload-time = "2026-03-11T00:13:06.003Z" }, +] + +[[package]] +name = "cuda-pathfinder" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/74/8c66861b873d8eed51fde56d3091baa4906a56f0d4390cae991f2d41dda5/cuda_pathfinder-1.5.1-py3-none-any.whl", hash = "sha256:b3718097fb57cf9e8a904dd072d806f2c9a27627e35c020b06ab9454bcec08c0", size = 49861, upload-time = "2026-04-03T16:41:22.203Z" }, +] + +[[package]] +name = "cuda-toolkit" +version = "13.0.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/b2/453099f5f3b698d7d0eab38916aac44c7f76229f451709e2eb9db6615dcd/cuda_toolkit-13.0.2-py2.py3-none-any.whl", hash = "sha256:b198824cf2f54003f50d64ada3a0f184b42ca0846c1c94192fa269ecd97a66eb", size = 2364, upload-time = "2025-12-19T23:24:07.328Z" }, +] + +[package.optional-dependencies] +cublas = [ + { name = "nvidia-cublas", marker = "sys_platform == 'linux'" }, +] +cudart = [ + { name = "nvidia-cuda-runtime", marker = "sys_platform == 'linux'" }, +] +cufft = [ + { name = "nvidia-cufft", marker = "sys_platform == 'linux'" }, +] +cufile = [ + { name = "nvidia-cufile", marker = "sys_platform == 'linux'" }, +] +cupti = [ + { name = "nvidia-cuda-cupti", marker = "sys_platform == 'linux'" }, +] +curand = [ + { name = "nvidia-curand", marker = "sys_platform == 'linux'" }, +] +cusolver = [ + { name = "nvidia-cusolver", marker = "sys_platform == 'linux'" }, +] +cusparse = [ + { name = "nvidia-cusparse", marker = "sys_platform == 'linux'" }, +] +nvjitlink = [ + { name = "nvidia-nvjitlink", marker = "sys_platform == 'linux'" }, +] +nvrtc = [ + { name = "nvidia-cuda-nvrtc", marker = "sys_platform == 'linux'" }, +] +nvtx = [ + { name = "nvidia-nvtx", marker = "sys_platform == 'linux'" }, +] + +[[package]] +name = "datasets" +version = "4.8.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, + { name = "filelock" }, + { name = "fsspec", extra = ["http"] }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "multiprocess" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pyarrow" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "xxhash" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/22/73e46ac7a8c25e7ef0b3bd6f10da3465021d90219a32eb0b4d2afea4c56e/datasets-4.8.4.tar.gz", hash = "sha256:a1429ed853275ce7943a01c6d2e25475b4501eb758934362106a280470df3a52", size = 604382, upload-time = "2026-03-23T14:21:17.987Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/e5/247d094108e42ac26363ab8dc57f168840cf7c05774b40ffeb0d78868fcc/datasets-4.8.4-py3-none-any.whl", hash = "sha256:cdc8bee4698e549d78bf1fed6aea2eebc760b22b084f07e6fc020c6577a6ce6d", size = 526991, upload-time = "2026-03-23T14:21:15.89Z" }, +] + +[[package]] +name = "dill" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/81/e1/56027a71e31b02ddc53c7d65b01e68edf64dea2932122fe7746a516f75d5/dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa", size = 187315, upload-time = "2026-01-19T02:36:56.85Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019, upload-time = "2026-01-19T02:36:55.663Z" }, +] + +[[package]] +name = "einops" +version = "0.8.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/77/850bef8d72ffb9219f0b1aac23fbc1bf7d038ee6ea666f331fa273031aa2/einops-0.8.2.tar.gz", hash = "sha256:609da665570e5e265e27283aab09e7f279ade90c4f01bcfca111f3d3e13f2827", size = 56261, upload-time = "2026-01-26T04:13:17.638Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/09/f8d8f8f31e4483c10a906437b4ce31bdf3d6d417b73fe33f1a8b59e34228/einops-0.8.2-py3-none-any.whl", hash = "sha256:54058201ac7087911181bfec4af6091bb59380360f069276601256a76af08193", size = 65638, upload-time = "2026-01-26T04:13:18.546Z" }, +] + +[[package]] +name = "filelock" +version = "3.25.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/b8/00651a0f559862f3bb7d6f7477b192afe3f583cc5e26403b44e59a55ab34/filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694", size = 40480, upload-time = "2026-03-11T20:45:38.487Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70", size = 26759, upload-time = "2026-03-11T20:45:37.437Z" }, +] + +[[package]] +name = "frozenlist" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, + { url = "https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b", size = 50594, upload-time = "2025-10-06T05:36:07.69Z" }, + { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448, upload-time = "2025-10-06T05:36:08.78Z" }, + { url = "https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383", size = 242411, upload-time = "2025-10-06T05:36:09.801Z" }, + { url = "https://files.pythonhosted.org/packages/8f/83/f61505a05109ef3293dfb1ff594d13d64a2324ac3482be2cedc2be818256/frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4", size = 243014, upload-time = "2025-10-06T05:36:11.394Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cb/cb6c7b0f7d4023ddda30cf56b8b17494eb3a79e3fda666bf735f63118b35/frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8", size = 234909, upload-time = "2025-10-06T05:36:12.598Z" }, + { url = "https://files.pythonhosted.org/packages/31/c5/cd7a1f3b8b34af009fb17d4123c5a778b44ae2804e3ad6b86204255f9ec5/frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b", size = 250049, upload-time = "2025-10-06T05:36:14.065Z" }, + { url = "https://files.pythonhosted.org/packages/c0/01/2f95d3b416c584a1e7f0e1d6d31998c4a795f7544069ee2e0962a4b60740/frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52", size = 256485, upload-time = "2025-10-06T05:36:15.39Z" }, + { url = "https://files.pythonhosted.org/packages/ce/03/024bf7720b3abaebcff6d0793d73c154237b85bdf67b7ed55e5e9596dc9a/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29", size = 237619, upload-time = "2025-10-06T05:36:16.558Z" }, + { url = "https://files.pythonhosted.org/packages/69/fa/f8abdfe7d76b731f5d8bd217827cf6764d4f1d9763407e42717b4bed50a0/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3", size = 250320, upload-time = "2025-10-06T05:36:17.821Z" }, + { url = "https://files.pythonhosted.org/packages/f5/3c/b051329f718b463b22613e269ad72138cc256c540f78a6de89452803a47d/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143", size = 246820, upload-time = "2025-10-06T05:36:19.046Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ae/58282e8f98e444b3f4dd42448ff36fa38bef29e40d40f330b22e7108f565/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608", size = 250518, upload-time = "2025-10-06T05:36:20.763Z" }, + { url = "https://files.pythonhosted.org/packages/8f/96/007e5944694d66123183845a106547a15944fbbb7154788cbf7272789536/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa", size = 239096, upload-time = "2025-10-06T05:36:22.129Z" }, + { url = "https://files.pythonhosted.org/packages/66/bb/852b9d6db2fa40be96f29c0d1205c306288f0684df8fd26ca1951d461a56/frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf", size = 39985, upload-time = "2025-10-06T05:36:23.661Z" }, + { url = "https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746", size = 44591, upload-time = "2025-10-06T05:36:24.958Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1dc65480ab147339fecc70797e9c2f69d9cea9cf38934ce08df070fdb9cb/frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd", size = 40102, upload-time = "2025-10-06T05:36:26.333Z" }, + { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717, upload-time = "2025-10-06T05:36:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7", size = 49651, upload-time = "2025-10-06T05:36:28.855Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417, upload-time = "2025-10-06T05:36:29.877Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027", size = 234391, upload-time = "2025-10-06T05:36:31.301Z" }, + { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c0/8746afb90f17b73ca5979c7a3958116e105ff796e718575175319b5bb4ce/frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121", size = 226549, upload-time = "2025-10-06T05:36:33.706Z" }, + { url = "https://files.pythonhosted.org/packages/7e/eb/4c7eefc718ff72f9b6c4893291abaae5fbc0c82226a32dcd8ef4f7a5dbef/frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5", size = 239833, upload-time = "2025-10-06T05:36:34.947Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/e5c02187cf704224f8b21bee886f3d713ca379535f16893233b9d672ea71/frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e", size = 245363, upload-time = "2025-10-06T05:36:36.534Z" }, + { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" }, + { url = "https://files.pythonhosted.org/packages/5d/6f/4ae69c550e4cee66b57887daeebe006fe985917c01d0fff9caab9883f6d0/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1", size = 243365, upload-time = "2025-10-06T05:36:40.152Z" }, + { url = "https://files.pythonhosted.org/packages/7a/58/afd56de246cf11780a40a2c28dc7cbabbf06337cc8ddb1c780a2d97e88d8/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1", size = 237763, upload-time = "2025-10-06T05:36:41.355Z" }, + { url = "https://files.pythonhosted.org/packages/cb/36/cdfaf6ed42e2644740d4a10452d8e97fa1c062e2a8006e4b09f1b5fd7d63/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8", size = 240110, upload-time = "2025-10-06T05:36:42.716Z" }, + { url = "https://files.pythonhosted.org/packages/03/a8/9ea226fbefad669f11b52e864c55f0bd57d3c8d7eb07e9f2e9a0b39502e1/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed", size = 233717, upload-time = "2025-10-06T05:36:44.251Z" }, + { url = "https://files.pythonhosted.org/packages/1e/0b/1b5531611e83ba7d13ccc9988967ea1b51186af64c42b7a7af465dcc9568/frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496", size = 39628, upload-time = "2025-10-06T05:36:45.423Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231", size = 43882, upload-time = "2025-10-06T05:36:46.796Z" }, + { url = "https://files.pythonhosted.org/packages/c1/17/502cd212cbfa96eb1388614fe39a3fc9ab87dbbe042b66f97acb57474834/frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62", size = 39676, upload-time = "2025-10-06T05:36:47.8Z" }, + { url = "https://files.pythonhosted.org/packages/d2/5c/3bbfaa920dfab09e76946a5d2833a7cbdf7b9b4a91c714666ac4855b88b4/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94", size = 89235, upload-time = "2025-10-06T05:36:48.78Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d6/f03961ef72166cec1687e84e8925838442b615bd0b8854b54923ce5b7b8a/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c", size = 50742, upload-time = "2025-10-06T05:36:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/1e/bb/a6d12b7ba4c3337667d0e421f7181c82dda448ce4e7ad7ecd249a16fa806/frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52", size = 51725, upload-time = "2025-10-06T05:36:50.851Z" }, + { url = "https://files.pythonhosted.org/packages/bc/71/d1fed0ffe2c2ccd70b43714c6cab0f4188f09f8a67a7914a6b46ee30f274/frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51", size = 284533, upload-time = "2025-10-06T05:36:51.898Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3b/b991fe1612703f7e0d05c0cf734c1b77aaf7c7d321df4572e8d36e7048c8/frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82", size = 274161, upload-time = "2025-10-06T05:36:54.309Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ec/c5c618767bcdf66e88945ec0157d7f6c4a1322f1473392319b7a2501ded7/frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714", size = 294676, upload-time = "2025-10-06T05:36:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/7c/ce/3934758637d8f8a88d11f0585d6495ef54b2044ed6ec84492a91fa3b27aa/frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d", size = 300638, upload-time = "2025-10-06T05:36:56.758Z" }, + { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" }, + { url = "https://files.pythonhosted.org/packages/dc/48/c7b163063d55a83772b268e6d1affb960771b0e203b632cfe09522d67ea5/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51", size = 292101, upload-time = "2025-10-06T05:36:59.237Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d0/2366d3c4ecdc2fd391e0afa6e11500bfba0ea772764d631bbf82f0136c9d/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e", size = 289901, upload-time = "2025-10-06T05:37:00.811Z" }, + { url = "https://files.pythonhosted.org/packages/b8/94/daff920e82c1b70e3618a2ac39fbc01ae3e2ff6124e80739ce5d71c9b920/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0", size = 289395, upload-time = "2025-10-06T05:37:02.115Z" }, + { url = "https://files.pythonhosted.org/packages/e3/20/bba307ab4235a09fdcd3cc5508dbabd17c4634a1af4b96e0f69bfe551ebd/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41", size = 283659, upload-time = "2025-10-06T05:37:03.711Z" }, + { url = "https://files.pythonhosted.org/packages/fd/00/04ca1c3a7a124b6de4f8a9a17cc2fcad138b4608e7a3fc5877804b8715d7/frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b", size = 43492, upload-time = "2025-10-06T05:37:04.915Z" }, + { url = "https://files.pythonhosted.org/packages/59/5e/c69f733a86a94ab10f68e496dc6b7e8bc078ebb415281d5698313e3af3a1/frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888", size = 48034, upload-time = "2025-10-06T05:37:06.343Z" }, + { url = "https://files.pythonhosted.org/packages/16/6c/be9d79775d8abe79b05fa6d23da99ad6e7763a1d080fbae7290b286093fd/frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042", size = 41749, upload-time = "2025-10-06T05:37:07.431Z" }, + { url = "https://files.pythonhosted.org/packages/f1/c8/85da824b7e7b9b6e7f7705b2ecaf9591ba6f79c1177f324c2735e41d36a2/frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0", size = 86127, upload-time = "2025-10-06T05:37:08.438Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e8/a1185e236ec66c20afd72399522f142c3724c785789255202d27ae992818/frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f", size = 49698, upload-time = "2025-10-06T05:37:09.48Z" }, + { url = "https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c", size = 49749, upload-time = "2025-10-06T05:37:10.569Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2", size = 231298, upload-time = "2025-10-06T05:37:11.993Z" }, + { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" }, + { url = "https://files.pythonhosted.org/packages/dc/94/be719d2766c1138148564a3960fc2c06eb688da592bdc25adcf856101be7/frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686", size = 225038, upload-time = "2025-10-06T05:37:14.577Z" }, + { url = "https://files.pythonhosted.org/packages/e4/09/6712b6c5465f083f52f50cf74167b92d4ea2f50e46a9eea0523d658454ae/frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e", size = 240130, upload-time = "2025-10-06T05:37:15.781Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d4/cd065cdcf21550b54f3ce6a22e143ac9e4836ca42a0de1022da8498eac89/frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a", size = 242845, upload-time = "2025-10-06T05:37:17.037Z" }, + { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" }, + { url = "https://files.pythonhosted.org/packages/6c/52/232476fe9cb64f0742f3fde2b7d26c1dac18b6d62071c74d4ded55e0ef94/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f", size = 240542, upload-time = "2025-10-06T05:37:19.771Z" }, + { url = "https://files.pythonhosted.org/packages/5f/85/07bf3f5d0fb5414aee5f47d33c6f5c77bfe49aac680bfece33d4fdf6a246/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7", size = 237308, upload-time = "2025-10-06T05:37:20.969Z" }, + { url = "https://files.pythonhosted.org/packages/11/99/ae3a33d5befd41ac0ca2cc7fd3aa707c9c324de2e89db0e0f45db9a64c26/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30", size = 238210, upload-time = "2025-10-06T05:37:22.252Z" }, + { url = "https://files.pythonhosted.org/packages/b2/60/b1d2da22f4970e7a155f0adde9b1435712ece01b3cd45ba63702aea33938/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7", size = 231972, upload-time = "2025-10-06T05:37:23.5Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ab/945b2f32de889993b9c9133216c068b7fcf257d8595a0ac420ac8677cab0/frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806", size = 40536, upload-time = "2025-10-06T05:37:25.581Z" }, + { url = "https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0", size = 44330, upload-time = "2025-10-06T05:37:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/82/13/e6950121764f2676f43534c555249f57030150260aee9dcf7d64efda11dd/frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b", size = 40627, upload-time = "2025-10-06T05:37:28.075Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c7/43200656ecc4e02d3f8bc248df68256cd9572b3f0017f0a0c4e93440ae23/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d", size = 89238, upload-time = "2025-10-06T05:37:29.373Z" }, + { url = "https://files.pythonhosted.org/packages/d1/29/55c5f0689b9c0fb765055629f472c0de484dcaf0acee2f7707266ae3583c/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed", size = 50738, upload-time = "2025-10-06T05:37:30.792Z" }, + { url = "https://files.pythonhosted.org/packages/ba/7d/b7282a445956506fa11da8c2db7d276adcbf2b17d8bb8407a47685263f90/frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930", size = 51739, upload-time = "2025-10-06T05:37:32.127Z" }, + { url = "https://files.pythonhosted.org/packages/62/1c/3d8622e60d0b767a5510d1d3cf21065b9db874696a51ea6d7a43180a259c/frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c", size = 284186, upload-time = "2025-10-06T05:37:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" }, + { url = "https://files.pythonhosted.org/packages/05/23/6bde59eb55abd407d34f77d39a5126fb7b4f109a3f611d3929f14b700c66/frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37", size = 273830, upload-time = "2025-10-06T05:37:37.663Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3f/22cff331bfad7a8afa616289000ba793347fcd7bc275f3b28ecea2a27909/frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a", size = 294289, upload-time = "2025-10-06T05:37:39.261Z" }, + { url = "https://files.pythonhosted.org/packages/a4/89/5b057c799de4838b6c69aa82b79705f2027615e01be996d2486a69ca99c4/frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2", size = 300318, upload-time = "2025-10-06T05:37:43.213Z" }, + { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" }, + { url = "https://files.pythonhosted.org/packages/59/f7/970141a6a8dbd7f556d94977858cfb36fa9b66e0892c6dd780d2219d8cd8/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe", size = 291762, upload-time = "2025-10-06T05:37:46.657Z" }, + { url = "https://files.pythonhosted.org/packages/c1/15/ca1adae83a719f82df9116d66f5bb28bb95557b3951903d39135620ef157/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8", size = 289470, upload-time = "2025-10-06T05:37:47.946Z" }, + { url = "https://files.pythonhosted.org/packages/ac/83/dca6dc53bf657d371fbc88ddeb21b79891e747189c5de990b9dfff2ccba1/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a", size = 289042, upload-time = "2025-10-06T05:37:49.499Z" }, + { url = "https://files.pythonhosted.org/packages/96/52/abddd34ca99be142f354398700536c5bd315880ed0a213812bc491cff5e4/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e", size = 283148, upload-time = "2025-10-06T05:37:50.745Z" }, + { url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" }, + { url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" }, + { url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, +] + +[[package]] +name = "fsspec" +version = "2026.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/51/7c/f60c259dcbf4f0c47cc4ddb8f7720d2dcdc8888c8e5ad84c73ea4531cc5b/fsspec-2026.2.0.tar.gz", hash = "sha256:6544e34b16869f5aacd5b90bdf1a71acb37792ea3ddf6125ee69a22a53fb8bff", size = 313441, upload-time = "2026-02-05T21:50:53.743Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl", hash = "sha256:98de475b5cb3bd66bedd5c4679e87b4fdfe1a3bf4d707b151b3c07e58c9a2437", size = 202505, upload-time = "2026-02-05T21:50:51.819Z" }, +] + +[package.optional-dependencies] +http = [ + { name = "aiohttp" }, +] + +[[package]] +name = "ftfy" +version = "6.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a5/d3/8650919bc3c7c6e90ee3fa7fd618bf373cbbe55dff043bd67353dbb20cd8/ftfy-6.3.1.tar.gz", hash = "sha256:9b3c3d90f84fb267fe64d375a07b7f8912d817cf86009ae134aa03e1819506ec", size = 308927, upload-time = "2024-10-26T00:50:35.149Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/6e/81d47999aebc1b155f81eca4477a616a70f238a2549848c38983f3c22a82/ftfy-6.3.1-py3-none-any.whl", hash = "sha256:7c70eb532015cd2f9adb53f101fb6c7945988d023a085d127d1573dc49dd0083", size = 44821, upload-time = "2024-10-26T00:50:33.425Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "hf-xet" +version = "1.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/92/ec9ad04d0b5728dca387a45af7bc98fbb0d73b2118759f5f6038b61a57e8/hf_xet-1.4.3.tar.gz", hash = "sha256:8ddedb73c8c08928c793df2f3401ec26f95be7f7e516a7bee2fbb546f6676113", size = 670477, upload-time = "2026-03-31T22:40:07.874Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/43/724d307b34e353da0abd476e02f72f735cdd2bc86082dee1b32ea0bfee1d/hf_xet-1.4.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:7551659ba4f1e1074e9623996f28c3873682530aee0a846b7f2f066239228144", size = 3800935, upload-time = "2026-03-31T22:39:49.618Z" }, + { url = "https://files.pythonhosted.org/packages/2b/d2/8bee5996b699262edb87dbb54118d287c0e1b2fc78af7cdc41857ba5e3c4/hf_xet-1.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:bee693ada985e7045997f05f081d0e12c4c08bd7626dc397f8a7c487e6c04f7f", size = 3558942, upload-time = "2026-03-31T22:39:47.938Z" }, + { url = "https://files.pythonhosted.org/packages/c3/a1/e993d09cbe251196fb60812b09a58901c468127b7259d2bf0f68bf6088eb/hf_xet-1.4.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:21644b404bb0100fe3857892f752c4d09642586fd988e61501c95bbf44b393a3", size = 4207657, upload-time = "2026-03-31T22:39:39.69Z" }, + { url = "https://files.pythonhosted.org/packages/64/44/9eb6d21e5c34c63e5e399803a6932fa983cabdf47c0ecbcfe7ea97684b8c/hf_xet-1.4.3-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:987f09cfe418237812896a6736b81b1af02a3a6dcb4b4944425c4c4fca7a7cf8", size = 3986765, upload-time = "2026-03-31T22:39:37.936Z" }, + { url = "https://files.pythonhosted.org/packages/ea/7b/8ad6f16fdb82f5f7284a34b5ec48645bd575bdcd2f6f0d1644775909c486/hf_xet-1.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:60cf7fc43a99da0a853345cf86d23738c03983ee5249613a6305d3e57a5dca74", size = 4188162, upload-time = "2026-03-31T22:39:58.382Z" }, + { url = "https://files.pythonhosted.org/packages/1b/c4/39d6e136cbeea9ca5a23aad4b33024319222adbdc059ebcda5fc7d9d5ff4/hf_xet-1.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2815a49a7a59f3e2edf0cf113ae88e8cb2ca2a221bf353fb60c609584f4884d4", size = 4424525, upload-time = "2026-03-31T22:40:00.225Z" }, + { url = "https://files.pythonhosted.org/packages/46/f2/adc32dae6bdbc367853118b9878139ac869419a4ae7ba07185dc31251b76/hf_xet-1.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:42ee323265f1e6a81b0e11094564fb7f7e0ec75b5105ffd91ae63f403a11931b", size = 3671610, upload-time = "2026-03-31T22:40:10.42Z" }, + { url = "https://files.pythonhosted.org/packages/e2/19/25d897dcc3f81953e0c2cde9ec186c7a0fee413eb0c9a7a9130d87d94d3a/hf_xet-1.4.3-cp313-cp313t-win_arm64.whl", hash = "sha256:27c976ba60079fb8217f485b9c5c7fcd21c90b0367753805f87cb9f3cdc4418a", size = 3528529, upload-time = "2026-03-31T22:40:09.106Z" }, + { url = "https://files.pythonhosted.org/packages/ec/36/3e8f85ca9fe09b8de2b2e10c63b3b3353d7dda88a0b3d426dffbe7b8313b/hf_xet-1.4.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5251d5ece3a81815bae9abab41cf7ddb7bcb8f56411bce0827f4a3071c92fdc6", size = 3801019, upload-time = "2026-03-31T22:39:56.651Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9c/defb6cb1de28bccb7bd8d95f6e60f72a3d3fa4cb3d0329c26fb9a488bfe7/hf_xet-1.4.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1feb0f3abeacee143367c326a128a2e2b60868ec12a36c225afb1d6c5a05e6d2", size = 3558746, upload-time = "2026-03-31T22:39:54.766Z" }, + { url = "https://files.pythonhosted.org/packages/c1/bd/8d001191893178ff8e826e46ad5299446e62b93cd164e17b0ffea08832ec/hf_xet-1.4.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8b301fc150290ca90b4fccd079829b84bb4786747584ae08b94b4577d82fb791", size = 4207692, upload-time = "2026-03-31T22:39:46.246Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/6790b402803250e9936435613d3a78b9aaeee7973439f0918848dde58309/hf_xet-1.4.3-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:d972fbe95ddc0d3c0fc49b31a8a69f47db35c1e3699bf316421705741aab6653", size = 3986281, upload-time = "2026-03-31T22:39:44.648Z" }, + { url = "https://files.pythonhosted.org/packages/51/56/ea62552fe53db652a9099eda600b032d75554d0e86c12a73824bfedef88b/hf_xet-1.4.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c5b48db1ee344a805a1b9bd2cda9b6b65fe77ed3787bd6e87ad5521141d317cd", size = 4187414, upload-time = "2026-03-31T22:40:04.951Z" }, + { url = "https://files.pythonhosted.org/packages/7d/f5/bc1456d4638061bea997e6d2db60a1a613d7b200e0755965ec312dc1ef79/hf_xet-1.4.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:22bdc1f5fb8b15bf2831440b91d1c9bbceeb7e10c81a12e8d75889996a5c9da8", size = 4424368, upload-time = "2026-03-31T22:40:06.347Z" }, + { url = "https://files.pythonhosted.org/packages/e4/76/ab597bae87e1f06d18d3ecb8ed7f0d3c9a37037fc32ce76233d369273c64/hf_xet-1.4.3-cp314-cp314t-win_amd64.whl", hash = "sha256:0392c79b7cf48418cd61478c1a925246cf10639f4cd9d94368d8ca1e8df9ea07", size = 3672280, upload-time = "2026-03-31T22:40:16.401Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/2e462d34e23a09a74d73785dbed71cc5dbad82a72eee2ad60a72a554155d/hf_xet-1.4.3-cp314-cp314t-win_arm64.whl", hash = "sha256:681c92a07796325778a79d76c67011764ecc9042a8c3579332b61b63ae512075", size = 3528945, upload-time = "2026-03-31T22:40:14.995Z" }, + { url = "https://files.pythonhosted.org/packages/ac/9f/9c23e4a447b8f83120798f9279d0297a4d1360bdbf59ef49ebec78fe2545/hf_xet-1.4.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:d0da85329eaf196e03e90b84c2d0aca53bd4573d097a75f99609e80775f98025", size = 3805048, upload-time = "2026-03-31T22:39:53.105Z" }, + { url = "https://files.pythonhosted.org/packages/0b/f8/7aacb8e5f4a7899d39c787b5984e912e6c18b11be136ef13947d7a66d265/hf_xet-1.4.3-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:e23717ce4186b265f69afa66e6f0069fe7efbf331546f5c313d00e123dc84583", size = 3562178, upload-time = "2026-03-31T22:39:51.295Z" }, + { url = "https://files.pythonhosted.org/packages/df/9a/a24b26dc8a65f0ecc0fe5be981a19e61e7ca963b85e062c083f3a9100529/hf_xet-1.4.3-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc360b70c815bf340ed56c7b8c63aacf11762a4b099b2fe2c9bd6d6068668c08", size = 4212320, upload-time = "2026-03-31T22:39:42.922Z" }, + { url = "https://files.pythonhosted.org/packages/53/60/46d493db155d2ee2801b71fb1b0fd67696359047fdd8caee2c914cc50c79/hf_xet-1.4.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:39f2d2e9654cd9b4319885733993807aab6de9dfbd34c42f0b78338d6617421f", size = 3991546, upload-time = "2026-03-31T22:39:41.335Z" }, + { url = "https://files.pythonhosted.org/packages/bc/f5/067363e1c96c6b17256910830d1b54099d06287e10f4ec6ec4e7e08371fc/hf_xet-1.4.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:49ad8a8cead2b56051aa84d7fce3e1335efe68df3cf6c058f22a65513885baac", size = 4193200, upload-time = "2026-03-31T22:40:01.936Z" }, + { url = "https://files.pythonhosted.org/packages/42/4b/53951592882d9c23080c7644542fda34a3813104e9e11fa1a7d82d419cb8/hf_xet-1.4.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7716d62015477a70ea272d2d68cd7cad140f61c52ee452e133e139abfe2c17ba", size = 4429392, upload-time = "2026-03-31T22:40:03.492Z" }, + { url = "https://files.pythonhosted.org/packages/8a/21/75a6c175b4e79662ad8e62f46a40ce341d8d6b206b06b4320d07d55b188c/hf_xet-1.4.3-cp37-abi3-win_amd64.whl", hash = "sha256:6b591fcad34e272a5b02607485e4f2a1334aebf1bc6d16ce8eb1eb8978ac2021", size = 3677359, upload-time = "2026-03-31T22:40:13.619Z" }, + { url = "https://files.pythonhosted.org/packages/8a/7c/44314ecd0e89f8b2b51c9d9e5e7a60a9c1c82024ac471d415860557d3cd8/hf_xet-1.4.3-cp37-abi3-win_arm64.whl", hash = "sha256:7c2c7e20bcfcc946dc67187c203463f5e932e395845d098cc2a93f5b67ca0b47", size = 3533664, upload-time = "2026-03-31T22:40:12.152Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "huggingface-hub" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, + { name = "httpx" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "tqdm" }, + { name = "typer" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/88/bb/62c7aa86f63a05e2f9b96642fdef9b94526a23979820b09f5455deff4983/huggingface_hub-1.9.0.tar.gz", hash = "sha256:0ea5be7a56135c91797cae6ad726e38eaeb6eb4b77cefff5c9d38ba0ecf874f7", size = 750326, upload-time = "2026-04-03T08:35:55.888Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/37/0d15d16150e1829f3e90962c99f28257f6de9e526a680b4c6f5acdb54fd2/huggingface_hub-1.9.0-py3-none-any.whl", hash = "sha256:2999328c058d39fd19ab748dd09bd4da2fbaa4f4c1ddea823eab103051e14a1f", size = 637355, upload-time = "2026-04-03T08:35:53.897Z" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "joblib" +version = "1.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/41/f2/d34e8b3a08a9cc79a50b2208a93dce981fe615b64d5a4d4abee421d898df/joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3", size = 331603, upload-time = "2025-12-15T08:41:46.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713", size = 309071, upload-time = "2025-12-15T08:41:44.973Z" }, +] + +[[package]] +name = "kornia" +version = "0.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "kornia-rs" }, + { name = "packaging" }, + { name = "torch" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/e6/45e757d4924176e4d4e111e10effaab7db382313243e0188a06805010073/kornia-0.8.2.tar.gz", hash = "sha256:5411b2ce0dd909d1608016308cd68faeef90f88c47f47e8ecd40553fd4d8b937", size = 667151, upload-time = "2025-11-08T12:10:03.042Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/d4/e9bd12b7b4cbd23b4dfb47e744ee1fa54d6d9c3c9bc406ec86c1be8c8307/kornia-0.8.2-py2.py3-none-any.whl", hash = "sha256:32dfe77c9c74a87a2de49395aa3c2c376a1b63c27611a298b394d02d13905819", size = 1095012, upload-time = "2025-11-08T12:10:01.226Z" }, +] + +[[package]] +name = "kornia-rs" +version = "0.1.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/17/8b3518ece01512a575b18f86b346879793d3dea264b314796bbd44d42e11/kornia_rs-0.1.10.tar.gz", hash = "sha256:5fd3fbc65240fa751975f5870b079f98e7fdcaa2885ea577b3da324d8bf01d81", size = 145610, upload-time = "2025-11-08T11:29:32.399Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/6c/8248f08c90a10d6b8ca2e74783da8df7fa509f46b64a3b4fbb7dd0ac4e9c/kornia_rs-0.1.10-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f0809277e51156d59be3c39605ba9659e94f7a4cf3b0b6c035ec2f06f6067881", size = 2811606, upload-time = "2025-11-08T11:30:21.346Z" }, + { url = "https://files.pythonhosted.org/packages/83/dc/29e5710cbc5d01c155ee1fd7621db48b94378a7ae394741bb34a6bfb36d9/kornia_rs-0.1.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ecf2ba0291cc1bb178073d56e46b16296a8864a20272b63af02ee88771cb574", size = 2076141, upload-time = "2025-11-08T11:30:07.527Z" }, + { url = "https://files.pythonhosted.org/packages/68/f7/0b3e90b9d0a25e6211c7ac9fa1dfed4db1306a812c359ee49678390a1bdc/kornia_rs-0.1.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d874ca12dd58871f9849672d9bf9fa998398470a88b52d61223ce2133b196662", size = 2205562, upload-time = "2025-11-08T11:29:35.353Z" }, + { url = "https://files.pythonhosted.org/packages/63/d4/315f358b2a2c29d9af3a73f3d1973c2fd8e0cdeb65a57af98643e66fa7c8/kornia_rs-0.1.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f332a2a034cc791006f25c2d85e342a060887145e9236e8e43562badcadededf", size = 3042197, upload-time = "2025-11-08T11:29:51.614Z" }, + { url = "https://files.pythonhosted.org/packages/d3/b8/0ddbdf1d35fec3ef24f5b8cc29eb633ce5ce16c94c9fb090408c1280abe9/kornia_rs-0.1.10-cp312-cp312-win_amd64.whl", hash = "sha256:34111ce1c8abe930079b4b0aeb8d372f876c621a867ed03f77181de685e71a8f", size = 2539656, upload-time = "2025-11-08T11:30:33.908Z" }, + { url = "https://files.pythonhosted.org/packages/90/01/1d658b11635431f8c31f416c90ca99befdc1f4fdd20e91a05b480b9c0ea8/kornia_rs-0.1.10-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:950a943f91c2cff94d80282886b0d48bbc15ef4a7cc4b15ac819724dfdb2f414", size = 2811810, upload-time = "2025-11-08T11:30:22.497Z" }, + { url = "https://files.pythonhosted.org/packages/e4/ed/bd970ded1d819557cc33055d982b1847eb385151ea5b0c915c16ed74f5c0/kornia_rs-0.1.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:63b802aaf95590276d3426edc6d23ff11caf269d2bc2ec37cb6c679b7b2a8ee0", size = 2076195, upload-time = "2025-11-08T11:30:08.726Z" }, + { url = "https://files.pythonhosted.org/packages/c1/10/afd700455105fdba5b043d724f3a65ca36259b89c736a3b71d5a03103808/kornia_rs-0.1.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38087da7cdf2bffe10530c0d53335dd1fc107fae6521f2dd4797c6522b6d11b3", size = 2205781, upload-time = "2025-11-08T11:29:36.8Z" }, + { url = "https://files.pythonhosted.org/packages/25/16/ec8dc3ce1d79660ddd6a186a77037e0c3bf61648e6c72250280b648fb291/kornia_rs-0.1.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa3464de8f9920d87415721c36840ceea23e054dcb54dd9f69189ba9eabce0c7", size = 3042272, upload-time = "2025-11-08T11:29:52.936Z" }, + { url = "https://files.pythonhosted.org/packages/f7/75/62785aba777d35a562a97a987d65840306fab7a8ecd2d928dd8ac779e29b/kornia_rs-0.1.10-cp313-cp313-win_amd64.whl", hash = "sha256:c57d157bebe64c22e2e44c72455b1c7365eee4d767e0c187dc28f22d072ebaf7", size = 2539802, upload-time = "2025-11-08T11:30:35.753Z" }, + { url = "https://files.pythonhosted.org/packages/a5/d5/32b23d110109eb77b2dc952be75411f7e495da9105058e2cb08924a9cc90/kornia_rs-0.1.10-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:0b375f02422ef5986caed612799b4ddcc91f57f303906868b0a8c397a17e7607", size = 2810244, upload-time = "2025-11-08T11:30:23.637Z" }, + { url = "https://files.pythonhosted.org/packages/96/5f/5ecde42b7c18e7df26c413848a98744427c3d370f5eed725b65f0bc356fb/kornia_rs-0.1.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f2bcfa438d6b5dbe07d573afc980f2871f6639b2eac5148b8c0bba4f82357b9a", size = 2074220, upload-time = "2025-11-08T11:30:09.972Z" }, + { url = "https://files.pythonhosted.org/packages/18/6c/6fc86eb855bcc723924c3b91de98dc6c0f381987ce582e080b8eade3bc88/kornia_rs-0.1.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:021b0a02b2356b12b3954a298f369ed4fe2dd522dcf8b6d72f91bf3bd8eea201", size = 2204672, upload-time = "2025-11-08T11:29:38.777Z" }, + { url = "https://files.pythonhosted.org/packages/19/26/3ac706d1b36761c0f7a36934327079adcb42d761c8c219865123d49fc1b2/kornia_rs-0.1.10-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d9b07e2ae79e423b3248d94afd092e324c5ddfe3157fafc047531cc8bffa6a3", size = 3042797, upload-time = "2025-11-08T11:29:54.719Z" }, + { url = "https://files.pythonhosted.org/packages/8d/f4/d62728d86bc67f5516249b154ff0bdfcf38a854dae284ff0ce62da87af99/kornia_rs-0.1.10-cp313-cp313t-win_amd64.whl", hash = "sha256:b80a037e34d63cb021bcd5fc571e41aff804a2981311f66e883768c6b8e5f8de", size = 2543855, upload-time = "2025-11-08T11:30:37.437Z" }, + { url = "https://files.pythonhosted.org/packages/91/d5/8ed1288a51d2ad71a6c01152ceccdd2d92f21692dfd2304b1ae9383496fa/kornia_rs-0.1.10-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:119eb434d1384257cae6c1ee9444e1aa1b0fda617f6d5a79fef3f145fdac70ac", size = 2809873, upload-time = "2025-11-08T11:30:24.958Z" }, + { url = "https://files.pythonhosted.org/packages/54/2b/fd5f919723aaa69ec5c1e60b10b7904a9126be5b9d6ccc0267fa42ca77e0/kornia_rs-0.1.10-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:60bca692911e5969e51d256299ecc6e90d32b9a2c5bf7bd1c7eb8f096cb9234b", size = 2074360, upload-time = "2025-11-08T11:30:11.327Z" }, + { url = "https://files.pythonhosted.org/packages/43/ec/7987aa5fb7d188180866bd8dafa5bb5b1f00a74ba738bb4e2abe63c589ac/kornia_rs-0.1.10-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61f126644f49ff9947d9402126edacfeeb4b47c0999a7af487d27ce4fc4cbc2a", size = 2206111, upload-time = "2025-11-08T11:29:40.608Z" }, + { url = "https://files.pythonhosted.org/packages/91/08/cb73b7e87a07b2af1146988d159d48722f0a28f550f920397c8964ab7c19/kornia_rs-0.1.10-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:614aeffdb1d39c4041ace0e0fc318b36eb211f6c133912984e946174e67dbb42", size = 3041436, upload-time = "2025-11-08T11:29:55.984Z" }, + { url = "https://files.pythonhosted.org/packages/db/e2/9f50fce2d8e9edd6b2d09908b6d5613f9ead992bf2e80060e080f2e7d64d/kornia_rs-0.1.10-cp314-cp314-win_amd64.whl", hash = "sha256:6de4e73b1c90cc76b7486491866eb9e61e5cf34d3a4016957d4563ac7d3ee39a", size = 2544067, upload-time = "2025-11-08T11:30:38.638Z" }, + { url = "https://files.pythonhosted.org/packages/d1/8f/45895818f3c7a5009737119b075db6b88bbf00938275611bc5d2cfbd0b2a/kornia_rs-0.1.10-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f0db8b41ae03a746bb0dcb970d5ff2fd66213adb4a3b4de1186fe86205698e89", size = 2806089, upload-time = "2025-11-08T11:30:26.117Z" }, + { url = "https://files.pythonhosted.org/packages/38/af/831e79b45702f8b6102438b1ff9b44a912669890cdf209cd275257f6d655/kornia_rs-0.1.10-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9b63ee175125892ef18027bd3a43b447fd53f9bf42cea4d6f699ab4e69cf3f16", size = 2064116, upload-time = "2025-11-08T11:30:13.481Z" }, + { url = "https://files.pythonhosted.org/packages/53/1b/e92606e0fa9a1b52ecf57faf322dcc076ae35315b4e1870d380fd64926d7/kornia_rs-0.1.10-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68eb25ba4639fa5e1cd94a10fb6410c8840c9f0162e5912d834c4a8c7c174493", size = 2197890, upload-time = "2025-11-08T11:29:42.273Z" }, + { url = "https://files.pythonhosted.org/packages/2e/fa/a2adce992b5eb65ef8adfc6f4465989948bfa8b875638e17c214541af25a/kornia_rs-0.1.10-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc18ba839f5c10ceb4757342ee7530cef8a0ecdd20486b8bbe14a56f72fa7037", size = 3040852, upload-time = "2025-11-08T11:29:57.856Z" }, + { url = "https://files.pythonhosted.org/packages/ee/36/40a3e3a235c370f5f61a8f9a7bdedf47d1bdd8f7d7e145e551545babff6b/kornia_rs-0.1.10-cp314-cp314t-win_amd64.whl", hash = "sha256:257eb0a780f990c0c44ac47acb77504dd95b8df0c592fd31354da1228df6678d", size = 2543609, upload-time = "2025-11-08T11:30:40.1Z" }, +] + +[[package]] +name = "loralib" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/da/117193e94c47dc5288b17443d53d8c4b373c59e37d2ffda7e275e0cea717/loralib-0.1.2.tar.gz", hash = "sha256:22ccff494a6254b973ddaee9f9aad4657941cab4221c75c5a04e0cac4fbd4567", size = 14552, upload-time = "2023-08-27T16:48:19.333Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/e7/a4362bf791bca17d2d91e7c69483185ab03d5aa05dd10391eff2e179a685/loralib-0.1.2-py3-none-any.whl", hash = "sha256:e341c9a507b180f3b8e70914efef9f6b19d1aa3996dec546b180cfbd027059e9", size = 10390, upload-time = "2023-08-27T16:48:17.723Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + +[[package]] +name = "multidict" +version = "6.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/9c/f20e0e2cf80e4b2e4b1c365bf5fe104ee633c751a724246262db8f1a0b13/multidict-6.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172", size = 76893, upload-time = "2026-01-26T02:43:52.754Z" }, + { url = "https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd", size = 45456, upload-time = "2026-01-26T02:43:53.893Z" }, + { url = "https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7", size = 43872, upload-time = "2026-01-26T02:43:55.041Z" }, + { url = "https://files.pythonhosted.org/packages/cf/3b/d6bd75dc4f3ff7c73766e04e705b00ed6dbbaccf670d9e05a12b006f5a21/multidict-6.7.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cb2a55f408c3043e42b40cc8eecd575afa27b7e0b956dfb190de0f8499a57a53", size = 251018, upload-time = "2026-01-26T02:43:56.198Z" }, + { url = "https://files.pythonhosted.org/packages/fd/80/c959c5933adedb9ac15152e4067c702a808ea183a8b64cf8f31af8ad3155/multidict-6.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75", size = 258883, upload-time = "2026-01-26T02:43:57.499Z" }, + { url = "https://files.pythonhosted.org/packages/86/85/7ed40adafea3d4f1c8b916e3b5cc3a8e07dfcdcb9cd72800f4ed3ca1b387/multidict-6.7.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c3a32d23520ee37bf327d1e1a656fec76a2edd5c038bf43eddfa0572ec49c60b", size = 242413, upload-time = "2026-01-26T02:43:58.755Z" }, + { url = "https://files.pythonhosted.org/packages/d2/57/b8565ff533e48595503c785f8361ff9a4fde4d67de25c207cd0ba3befd03/multidict-6.7.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c90fed18bffc0189ba814749fdcc102b536e83a9f738a9003e569acd540a733", size = 268404, upload-time = "2026-01-26T02:44:00.216Z" }, + { url = "https://files.pythonhosted.org/packages/e0/50/9810c5c29350f7258180dfdcb2e52783a0632862eb334c4896ac717cebcb/multidict-6.7.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:da62917e6076f512daccfbbde27f46fed1c98fee202f0559adec8ee0de67f71a", size = 269456, upload-time = "2026-01-26T02:44:02.202Z" }, + { url = "https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961", size = 256322, upload-time = "2026-01-26T02:44:03.56Z" }, + { url = "https://files.pythonhosted.org/packages/31/6e/d8a26d81ac166a5592782d208dd90dfdc0a7a218adaa52b45a672b46c122/multidict-6.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582", size = 253955, upload-time = "2026-01-26T02:44:04.845Z" }, + { url = "https://files.pythonhosted.org/packages/59/4c/7c672c8aad41534ba619bcd4ade7a0dc87ed6b8b5c06149b85d3dd03f0cd/multidict-6.7.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:398c1478926eca669f2fd6a5856b6de9c0acf23a2cb59a14c0ba5844fa38077e", size = 251254, upload-time = "2026-01-26T02:44:06.133Z" }, + { url = "https://files.pythonhosted.org/packages/7b/bd/84c24de512cbafbdbc39439f74e967f19570ce7924e3007174a29c348916/multidict-6.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c102791b1c4f3ab36ce4101154549105a53dc828f016356b3e3bcae2e3a039d3", size = 252059, upload-time = "2026-01-26T02:44:07.518Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ba/f5449385510825b73d01c2d4087bf6d2fccc20a2d42ac34df93191d3dd03/multidict-6.7.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a088b62bd733e2ad12c50dad01b7d0166c30287c166e137433d3b410add807a6", size = 263588, upload-time = "2026-01-26T02:44:09.382Z" }, + { url = "https://files.pythonhosted.org/packages/d7/11/afc7c677f68f75c84a69fe37184f0f82fce13ce4b92f49f3db280b7e92b3/multidict-6.7.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3d51ff4785d58d3f6c91bdbffcb5e1f7ddfda557727043aa20d20ec4f65e324a", size = 259642, upload-time = "2026-01-26T02:44:10.73Z" }, + { url = "https://files.pythonhosted.org/packages/2b/17/ebb9644da78c4ab36403739e0e6e0e30ebb135b9caf3440825001a0bddcb/multidict-6.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba", size = 251377, upload-time = "2026-01-26T02:44:12.042Z" }, + { url = "https://files.pythonhosted.org/packages/ca/a4/840f5b97339e27846c46307f2530a2805d9d537d8b8bd416af031cad7fa0/multidict-6.7.1-cp312-cp312-win32.whl", hash = "sha256:28ca5ce2fd9716631133d0e9a9b9a745ad7f60bac2bccafb56aa380fc0b6c511", size = 41887, upload-time = "2026-01-26T02:44:14.245Z" }, + { url = "https://files.pythonhosted.org/packages/80/31/0b2517913687895f5904325c2069d6a3b78f66cc641a86a2baf75a05dcbb/multidict-6.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcee94dfbd638784645b066074b338bc9cc155d4b4bffa4adce1615c5a426c19", size = 46053, upload-time = "2026-01-26T02:44:15.371Z" }, + { url = "https://files.pythonhosted.org/packages/0c/5b/aba28e4ee4006ae4c7df8d327d31025d760ffa992ea23812a601d226e682/multidict-6.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:ba0a9fb644d0c1a2194cf7ffb043bd852cea63a57f66fbd33959f7dae18517bf", size = 43307, upload-time = "2026-01-26T02:44:16.852Z" }, + { url = "https://files.pythonhosted.org/packages/f2/22/929c141d6c0dba87d3e1d38fbdf1ba8baba86b7776469f2bc2d3227a1e67/multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23", size = 76174, upload-time = "2026-01-26T02:44:18.509Z" }, + { url = "https://files.pythonhosted.org/packages/c7/75/bc704ae15fee974f8fccd871305e254754167dce5f9e42d88a2def741a1d/multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2", size = 45116, upload-time = "2026-01-26T02:44:19.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/76/55cd7186f498ed080a18440c9013011eb548f77ae1b297206d030eb1180a/multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445", size = 43524, upload-time = "2026-01-26T02:44:21.571Z" }, + { url = "https://files.pythonhosted.org/packages/e9/3c/414842ef8d5a1628d68edee29ba0e5bcf235dbfb3ccd3ea303a7fe8c72ff/multidict-6.7.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177", size = 249368, upload-time = "2026-01-26T02:44:22.803Z" }, + { url = "https://files.pythonhosted.org/packages/f6/32/befed7f74c458b4a525e60519fe8d87eef72bb1e99924fa2b0f9d97a221e/multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23", size = 256952, upload-time = "2026-01-26T02:44:24.306Z" }, + { url = "https://files.pythonhosted.org/packages/03/d6/c878a44ba877f366630c860fdf74bfb203c33778f12b6ac274936853c451/multidict-6.7.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060", size = 240317, upload-time = "2026-01-26T02:44:25.772Z" }, + { url = "https://files.pythonhosted.org/packages/68/49/57421b4d7ad2e9e60e25922b08ceb37e077b90444bde6ead629095327a6f/multidict-6.7.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d", size = 267132, upload-time = "2026-01-26T02:44:27.648Z" }, + { url = "https://files.pythonhosted.org/packages/b7/fe/ec0edd52ddbcea2a2e89e174f0206444a61440b40f39704e64dc807a70bd/multidict-6.7.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed", size = 268140, upload-time = "2026-01-26T02:44:29.588Z" }, + { url = "https://files.pythonhosted.org/packages/b0/73/6e1b01cbeb458807aa0831742232dbdd1fa92bfa33f52a3f176b4ff3dc11/multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429", size = 254277, upload-time = "2026-01-26T02:44:30.902Z" }, + { url = "https://files.pythonhosted.org/packages/6a/b2/5fb8c124d7561a4974c342bc8c778b471ebbeb3cc17df696f034a7e9afe7/multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6", size = 252291, upload-time = "2026-01-26T02:44:32.31Z" }, + { url = "https://files.pythonhosted.org/packages/5a/96/51d4e4e06bcce92577fcd488e22600bd38e4fd59c20cb49434d054903bd2/multidict-6.7.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9", size = 250156, upload-time = "2026-01-26T02:44:33.734Z" }, + { url = "https://files.pythonhosted.org/packages/db/6b/420e173eec5fba721a50e2a9f89eda89d9c98fded1124f8d5c675f7a0c0f/multidict-6.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c", size = 249742, upload-time = "2026-01-26T02:44:35.222Z" }, + { url = "https://files.pythonhosted.org/packages/44/a3/ec5b5bd98f306bc2aa297b8c6f11a46714a56b1e6ef5ebda50a4f5d7c5fb/multidict-6.7.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84", size = 262221, upload-time = "2026-01-26T02:44:36.604Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f7/e8c0d0da0cd1e28d10e624604e1a36bcc3353aaebdfdc3a43c72bc683a12/multidict-6.7.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d", size = 258664, upload-time = "2026-01-26T02:44:38.008Z" }, + { url = "https://files.pythonhosted.org/packages/52/da/151a44e8016dd33feed44f730bd856a66257c1ee7aed4f44b649fb7edeb3/multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33", size = 249490, upload-time = "2026-01-26T02:44:39.386Z" }, + { url = "https://files.pythonhosted.org/packages/87/af/a3b86bf9630b732897f6fc3f4c4714b90aa4361983ccbdcd6c0339b21b0c/multidict-6.7.1-cp313-cp313-win32.whl", hash = "sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3", size = 41695, upload-time = "2026-01-26T02:44:41.318Z" }, + { url = "https://files.pythonhosted.org/packages/b2/35/e994121b0e90e46134673422dd564623f93304614f5d11886b1b3e06f503/multidict-6.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5", size = 45884, upload-time = "2026-01-26T02:44:42.488Z" }, + { url = "https://files.pythonhosted.org/packages/ca/61/42d3e5dbf661242a69c97ea363f2d7b46c567da8eadef8890022be6e2ab0/multidict-6.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df", size = 43122, upload-time = "2026-01-26T02:44:43.664Z" }, + { url = "https://files.pythonhosted.org/packages/6d/b3/e6b21c6c4f314bb956016b0b3ef2162590a529b84cb831c257519e7fde44/multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1", size = 83175, upload-time = "2026-01-26T02:44:44.894Z" }, + { url = "https://files.pythonhosted.org/packages/fb/76/23ecd2abfe0957b234f6c960f4ade497f55f2c16aeb684d4ecdbf1c95791/multidict-6.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963", size = 48460, upload-time = "2026-01-26T02:44:46.106Z" }, + { url = "https://files.pythonhosted.org/packages/c4/57/a0ed92b23f3a042c36bc4227b72b97eca803f5f1801c1ab77c8a212d455e/multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34", size = 46930, upload-time = "2026-01-26T02:44:47.278Z" }, + { url = "https://files.pythonhosted.org/packages/b5/66/02ec7ace29162e447f6382c495dc95826bf931d3818799bbef11e8f7df1a/multidict-6.7.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65", size = 242582, upload-time = "2026-01-26T02:44:48.604Z" }, + { url = "https://files.pythonhosted.org/packages/58/18/64f5a795e7677670e872673aca234162514696274597b3708b2c0d276cce/multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292", size = 250031, upload-time = "2026-01-26T02:44:50.544Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ed/e192291dbbe51a8290c5686f482084d31bcd9d09af24f63358c3d42fd284/multidict-6.7.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43", size = 228596, upload-time = "2026-01-26T02:44:51.951Z" }, + { url = "https://files.pythonhosted.org/packages/1e/7e/3562a15a60cf747397e7f2180b0a11dc0c38d9175a650e75fa1b4d325e15/multidict-6.7.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca", size = 257492, upload-time = "2026-01-26T02:44:53.902Z" }, + { url = "https://files.pythonhosted.org/packages/24/02/7d0f9eae92b5249bb50ac1595b295f10e263dd0078ebb55115c31e0eaccd/multidict-6.7.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd", size = 255899, upload-time = "2026-01-26T02:44:55.316Z" }, + { url = "https://files.pythonhosted.org/packages/00/e3/9b60ed9e23e64c73a5cde95269ef1330678e9c6e34dd4eb6b431b85b5a10/multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7", size = 247970, upload-time = "2026-01-26T02:44:56.783Z" }, + { url = "https://files.pythonhosted.org/packages/3e/06/538e58a63ed5cfb0bd4517e346b91da32fde409d839720f664e9a4ae4f9d/multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3", size = 245060, upload-time = "2026-01-26T02:44:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/b2/2f/d743a3045a97c895d401e9bd29aaa09b94f5cbdf1bd561609e5a6c431c70/multidict-6.7.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4", size = 235888, upload-time = "2026-01-26T02:44:59.57Z" }, + { url = "https://files.pythonhosted.org/packages/38/83/5a325cac191ab28b63c52f14f1131f3b0a55ba3b9aa65a6d0bf2a9b921a0/multidict-6.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8", size = 243554, upload-time = "2026-01-26T02:45:01.054Z" }, + { url = "https://files.pythonhosted.org/packages/20/1f/9d2327086bd15da2725ef6aae624208e2ef828ed99892b17f60c344e57ed/multidict-6.7.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c", size = 252341, upload-time = "2026-01-26T02:45:02.484Z" }, + { url = "https://files.pythonhosted.org/packages/e8/2c/2a1aa0280cf579d0f6eed8ee5211c4f1730bd7e06c636ba2ee6aafda302e/multidict-6.7.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52", size = 246391, upload-time = "2026-01-26T02:45:03.862Z" }, + { url = "https://files.pythonhosted.org/packages/e5/03/7ca022ffc36c5a3f6e03b179a5ceb829be9da5783e6fe395f347c0794680/multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108", size = 243422, upload-time = "2026-01-26T02:45:05.296Z" }, + { url = "https://files.pythonhosted.org/packages/dc/1d/b31650eab6c5778aceed46ba735bd97f7c7d2f54b319fa916c0f96e7805b/multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32", size = 47770, upload-time = "2026-01-26T02:45:06.754Z" }, + { url = "https://files.pythonhosted.org/packages/ac/5b/2d2d1d522e51285bd61b1e20df8f47ae1a9d80839db0b24ea783b3832832/multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8", size = 53109, upload-time = "2026-01-26T02:45:08.044Z" }, + { url = "https://files.pythonhosted.org/packages/3d/a3/cc409ba012c83ca024a308516703cf339bdc4b696195644a7215a5164a24/multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118", size = 45573, upload-time = "2026-01-26T02:45:09.349Z" }, + { url = "https://files.pythonhosted.org/packages/91/cc/db74228a8be41884a567e88a62fd589a913708fcf180d029898c17a9a371/multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee", size = 75190, upload-time = "2026-01-26T02:45:10.651Z" }, + { url = "https://files.pythonhosted.org/packages/d5/22/492f2246bb5b534abd44804292e81eeaf835388901f0c574bac4eeec73c5/multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2", size = 44486, upload-time = "2026-01-26T02:45:11.938Z" }, + { url = "https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1", size = 43219, upload-time = "2026-01-26T02:45:14.346Z" }, + { url = "https://files.pythonhosted.org/packages/24/bb/2c0c2287963f4259c85e8bcbba9182ced8d7fca65c780c38e99e61629d11/multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d", size = 245132, upload-time = "2026-01-26T02:45:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f9/44d4b3064c65079d2467888794dea218d1601898ac50222ab8a9a8094460/multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31", size = 252420, upload-time = "2026-01-26T02:45:17.293Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/78f7275e73fa17b24c9a51b0bd9d73ba64bb32d0ed51b02a746eb876abe7/multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048", size = 233510, upload-time = "2026-01-26T02:45:19.356Z" }, + { url = "https://files.pythonhosted.org/packages/4b/25/8167187f62ae3cbd52da7893f58cb036b47ea3fb67138787c76800158982/multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362", size = 264094, upload-time = "2026-01-26T02:45:20.834Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e7/69a3a83b7b030cf283fb06ce074a05a02322359783424d7edf0f15fe5022/multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37", size = 260786, upload-time = "2026-01-26T02:45:22.818Z" }, + { url = "https://files.pythonhosted.org/packages/fe/3b/8ec5074bcfc450fe84273713b4b0a0dd47c0249358f5d82eb8104ffe2520/multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709", size = 248483, upload-time = "2026-01-26T02:45:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/48/5a/d5a99e3acbca0e29c5d9cba8f92ceb15dce78bab963b308ae692981e3a5d/multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0", size = 248403, upload-time = "2026-01-26T02:45:25.982Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/e58cd31f6c7d5102f2a4bf89f96b9cf7e00b6c6f3d04ecc44417c00a5a3c/multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb", size = 240315, upload-time = "2026-01-26T02:45:27.487Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/1cd210229559cb90b6786c30676bb0c58249ff42f942765f88793b41fdce/multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd", size = 245528, upload-time = "2026-01-26T02:45:28.991Z" }, + { url = "https://files.pythonhosted.org/packages/64/f2/6e1107d226278c876c783056b7db43d800bb64c6131cec9c8dfb6903698e/multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601", size = 258784, upload-time = "2026-01-26T02:45:30.503Z" }, + { url = "https://files.pythonhosted.org/packages/4d/c1/11f664f14d525e4a1b5327a82d4de61a1db604ab34c6603bb3c2cc63ad34/multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1", size = 251980, upload-time = "2026-01-26T02:45:32.603Z" }, + { url = "https://files.pythonhosted.org/packages/e1/9f/75a9ac888121d0c5bbd4ecf4eead45668b1766f6baabfb3b7f66a410e231/multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b", size = 243602, upload-time = "2026-01-26T02:45:34.043Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e7/50bf7b004cc8525d80dbbbedfdc7aed3e4c323810890be4413e589074032/multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d", size = 40930, upload-time = "2026-01-26T02:45:36.278Z" }, + { url = "https://files.pythonhosted.org/packages/e0/bf/52f25716bbe93745595800f36fb17b73711f14da59ed0bb2eba141bc9f0f/multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f", size = 45074, upload-time = "2026-01-26T02:45:37.546Z" }, + { url = "https://files.pythonhosted.org/packages/97/ab/22803b03285fa3a525f48217963da3a65ae40f6a1b6f6cf2768879e208f9/multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5", size = 42471, upload-time = "2026-01-26T02:45:38.889Z" }, + { url = "https://files.pythonhosted.org/packages/e0/6d/f9293baa6146ba9507e360ea0292b6422b016907c393e2f63fc40ab7b7b5/multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581", size = 82401, upload-time = "2026-01-26T02:45:40.254Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/53b5494738d83558d87c3c71a486504d8373421c3e0dbb6d0db48ad42ee0/multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a", size = 48143, upload-time = "2026-01-26T02:45:41.635Z" }, + { url = "https://files.pythonhosted.org/packages/37/e8/5284c53310dcdc99ce5d66563f6e5773531a9b9fe9ec7a615e9bc306b05f/multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c", size = 46507, upload-time = "2026-01-26T02:45:42.99Z" }, + { url = "https://files.pythonhosted.org/packages/e4/fc/6800d0e5b3875568b4083ecf5f310dcf91d86d52573160834fb4bfcf5e4f/multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262", size = 239358, upload-time = "2026-01-26T02:45:44.376Z" }, + { url = "https://files.pythonhosted.org/packages/41/75/4ad0973179361cdf3a113905e6e088173198349131be2b390f9fa4da5fc6/multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59", size = 246884, upload-time = "2026-01-26T02:45:47.167Z" }, + { url = "https://files.pythonhosted.org/packages/c3/9c/095bb28b5da139bd41fb9a5d5caff412584f377914bd8787c2aa98717130/multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889", size = 225878, upload-time = "2026-01-26T02:45:48.698Z" }, + { url = "https://files.pythonhosted.org/packages/07/d0/c0a72000243756e8f5a277b6b514fa005f2c73d481b7d9e47cd4568aa2e4/multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4", size = 253542, upload-time = "2026-01-26T02:45:50.164Z" }, + { url = "https://files.pythonhosted.org/packages/c0/6b/f69da15289e384ecf2a68837ec8b5ad8c33e973aa18b266f50fe55f24b8c/multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d", size = 252403, upload-time = "2026-01-26T02:45:51.779Z" }, + { url = "https://files.pythonhosted.org/packages/a2/76/b9669547afa5a1a25cd93eaca91c0da1c095b06b6d2d8ec25b713588d3a1/multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609", size = 244889, upload-time = "2026-01-26T02:45:53.27Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a9/a50d2669e506dad33cfc45b5d574a205587b7b8a5f426f2fbb2e90882588/multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489", size = 241982, upload-time = "2026-01-26T02:45:54.919Z" }, + { url = "https://files.pythonhosted.org/packages/c5/bb/1609558ad8b456b4827d3c5a5b775c93b87878fd3117ed3db3423dfbce1b/multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c", size = 232415, upload-time = "2026-01-26T02:45:56.981Z" }, + { url = "https://files.pythonhosted.org/packages/d8/59/6f61039d2aa9261871e03ab9dc058a550d240f25859b05b67fd70f80d4b3/multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e", size = 240337, upload-time = "2026-01-26T02:45:58.698Z" }, + { url = "https://files.pythonhosted.org/packages/a1/29/fdc6a43c203890dc2ae9249971ecd0c41deaedfe00d25cb6564b2edd99eb/multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c", size = 248788, upload-time = "2026-01-26T02:46:00.862Z" }, + { url = "https://files.pythonhosted.org/packages/a9/14/a153a06101323e4cf086ecee3faadba52ff71633d471f9685c42e3736163/multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9", size = 242842, upload-time = "2026-01-26T02:46:02.824Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/604ae839e64a4a6efc80db94465348d3b328ee955e37acb24badbcd24d83/multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2", size = 240237, upload-time = "2026-01-26T02:46:05.898Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/c3a5187bf66f6fb546ff4ab8fb5a077cbdd832d7b1908d4365c7f74a1917/multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7", size = 48008, upload-time = "2026-01-26T02:46:07.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/f7/addf1087b860ac60e6f382240f64fb99f8bfb532bb06f7c542b83c29ca61/multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5", size = 53542, upload-time = "2026-01-26T02:46:08.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/81/4629d0aa32302ef7b2ec65c75a728cc5ff4fa410c50096174c1632e70b3e/multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2", size = 44719, upload-time = "2026-01-26T02:46:11.146Z" }, + { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, +] + +[[package]] +name = "multiprocess" +version = "0.70.19" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a2/f2/e783ac7f2aeeed14e9e12801f22529cc7e6b7ab80928d6dcce4e9f00922d/multiprocess-0.70.19.tar.gz", hash = "sha256:952021e0e6c55a4a9fe4cd787895b86e239a40e76802a789d6305398d3975897", size = 2079989, upload-time = "2026-01-19T06:47:39.744Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/45/8004d1e6b9185c1a444d6b55ac5682acf9d98035e54386d967366035a03a/multiprocess-0.70.19-py310-none-any.whl", hash = "sha256:97404393419dcb2a8385910864eedf47a3cadf82c66345b44f036420eb0b5d87", size = 134948, upload-time = "2026-01-19T06:47:32.325Z" }, + { url = "https://files.pythonhosted.org/packages/86/c2/dec9722dc3474c164a0b6bcd9a7ed7da542c98af8cabce05374abab35edd/multiprocess-0.70.19-py311-none-any.whl", hash = "sha256:928851ae7973aea4ce0eaf330bbdafb2e01398a91518d5c8818802845564f45c", size = 144457, upload-time = "2026-01-19T06:47:33.711Z" }, + { url = "https://files.pythonhosted.org/packages/71/70/38998b950a97ea279e6bd657575d22d1a2047256caf707d9a10fbce4f065/multiprocess-0.70.19-py312-none-any.whl", hash = "sha256:3a56c0e85dd5025161bac5ce138dcac1e49174c7d8e74596537e729fd5c53c28", size = 150281, upload-time = "2026-01-19T06:47:35.037Z" }, + { url = "https://files.pythonhosted.org/packages/7f/74/d2c27e03cb84251dfe7249b8e82923643c6d48fa4883b9476b025e7dc7eb/multiprocess-0.70.19-py313-none-any.whl", hash = "sha256:8d5eb4ec5017ba2fab4e34a747c6d2c2b6fecfe9e7236e77988db91580ada952", size = 156414, upload-time = "2026-01-19T06:47:35.915Z" }, + { url = "https://files.pythonhosted.org/packages/a0/61/af9115673a5870fd885247e2f1b68c4f1197737da315b520a91c757a861a/multiprocess-0.70.19-py314-none-any.whl", hash = "sha256:e8cc7fbdff15c0613f0a1f1f8744bef961b0a164c0ca29bdff53e9d2d93c5e5f", size = 160318, upload-time = "2026-01-19T06:47:37.497Z" }, + { url = "https://files.pythonhosted.org/packages/7e/82/69e539c4c2027f1e1697e09aaa2449243085a0edf81ae2c6341e84d769b6/multiprocess-0.70.19-py39-none-any.whl", hash = "sha256:0d4b4397ed669d371c81dcd1ef33fd384a44d6c3de1bd0ca7ac06d837720d3c5", size = 133477, upload-time = "2026-01-19T06:47:38.619Z" }, +] + +[[package]] +name = "networkx" +version = "3.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/9f/b8cef5bffa569759033adda9481211426f12f53299629b410340795c2514/numpy-2.4.4.tar.gz", hash = "sha256:2d390634c5182175533585cc89f3608a4682ccb173cc9bb940b2881c8d6f8fa0", size = 20731587, upload-time = "2026-03-29T13:22:01.298Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/05/32396bec30fb2263770ee910142f49c1476d08e8ad41abf8403806b520ce/numpy-2.4.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15716cfef24d3a9762e3acdf87e27f58dc823d1348f765bbea6bef8c639bfa1b", size = 16689272, upload-time = "2026-03-29T13:18:49.223Z" }, + { url = "https://files.pythonhosted.org/packages/c5/f3/a983d28637bfcd763a9c7aafdb6d5c0ebf3d487d1e1459ffdb57e2f01117/numpy-2.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23cbfd4c17357c81021f21540da84ee282b9c8fba38a03b7b9d09ba6b951421e", size = 14699573, upload-time = "2026-03-29T13:18:52.629Z" }, + { url = "https://files.pythonhosted.org/packages/9b/fd/e5ecca1e78c05106d98028114f5c00d3eddb41207686b2b7de3e477b0e22/numpy-2.4.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8b3b60bb7cba2c8c81837661c488637eee696f59a877788a396d33150c35d842", size = 5204782, upload-time = "2026-03-29T13:18:55.579Z" }, + { url = "https://files.pythonhosted.org/packages/de/2f/702a4594413c1a8632092beae8aba00f1d67947389369b3777aed783fdca/numpy-2.4.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e4a010c27ff6f210ff4c6ef34394cd61470d01014439b192ec22552ee867f2a8", size = 6552038, upload-time = "2026-03-29T13:18:57.769Z" }, + { url = "https://files.pythonhosted.org/packages/7f/37/eed308a8f56cba4d1fdf467a4fc67ef4ff4bf1c888f5fc980481890104b1/numpy-2.4.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9e75681b59ddaa5e659898085ae0eaea229d054f2ac0c7e563a62205a700121", size = 15670666, upload-time = "2026-03-29T13:19:00.341Z" }, + { url = "https://files.pythonhosted.org/packages/0a/0d/0e3ecece05b7a7e87ab9fb587855548da437a061326fff64a223b6dcb78a/numpy-2.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:81f4a14bee47aec54f883e0cad2d73986640c1590eb9bfaaba7ad17394481e6e", size = 16645480, upload-time = "2026-03-29T13:19:03.63Z" }, + { url = "https://files.pythonhosted.org/packages/34/49/f2312c154b82a286758ee2f1743336d50651f8b5195db18cdb63675ff649/numpy-2.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:62d6b0f03b694173f9fcb1fb317f7222fd0b0b103e784c6549f5e53a27718c44", size = 17020036, upload-time = "2026-03-29T13:19:07.428Z" }, + { url = "https://files.pythonhosted.org/packages/7b/e9/736d17bd77f1b0ec4f9901aaec129c00d59f5d84d5e79bba540ef12c2330/numpy-2.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fbc356aae7adf9e6336d336b9c8111d390a05df88f1805573ebb0807bd06fd1d", size = 18368643, upload-time = "2026-03-29T13:19:10.775Z" }, + { url = "https://files.pythonhosted.org/packages/63/f6/d417977c5f519b17c8a5c3bc9e8304b0908b0e21136fe43bf628a1343914/numpy-2.4.4-cp312-cp312-win32.whl", hash = "sha256:0d35aea54ad1d420c812bfa0385c71cd7cc5bcf7c65fed95fc2cd02fe8c79827", size = 5961117, upload-time = "2026-03-29T13:19:13.464Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5b/e1deebf88ff431b01b7406ca3583ab2bbb90972bbe1c568732e49c844f7e/numpy-2.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:b5f0362dc928a6ecd9db58868fca5e48485205e3855957bdedea308f8672ea4a", size = 12320584, upload-time = "2026-03-29T13:19:16.155Z" }, + { url = "https://files.pythonhosted.org/packages/58/89/e4e856ac82a68c3ed64486a544977d0e7bdd18b8da75b78a577ca31c4395/numpy-2.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:846300f379b5b12cc769334464656bc882e0735d27d9726568bc932fdc49d5ec", size = 10221450, upload-time = "2026-03-29T13:19:18.994Z" }, + { url = "https://files.pythonhosted.org/packages/14/1d/d0a583ce4fefcc3308806a749a536c201ed6b5ad6e1322e227ee4848979d/numpy-2.4.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:08f2e31ed5e6f04b118e49821397f12767934cfdd12a1ce86a058f91e004ee50", size = 16684933, upload-time = "2026-03-29T13:19:22.47Z" }, + { url = "https://files.pythonhosted.org/packages/c1/62/2b7a48fbb745d344742c0277f01286dead15f3f68e4f359fbfcf7b48f70f/numpy-2.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e823b8b6edc81e747526f70f71a9c0a07ac4e7ad13020aa736bb7c9d67196115", size = 14694532, upload-time = "2026-03-29T13:19:25.581Z" }, + { url = "https://files.pythonhosted.org/packages/e5/87/499737bfba066b4a3bebff24a8f1c5b2dee410b209bc6668c9be692580f0/numpy-2.4.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4a19d9dba1a76618dd86b164d608566f393f8ec6ac7c44f0cc879011c45e65af", size = 5199661, upload-time = "2026-03-29T13:19:28.31Z" }, + { url = "https://files.pythonhosted.org/packages/cd/da/464d551604320d1491bc345efed99b4b7034143a85787aab78d5691d5a0e/numpy-2.4.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d2a8490669bfe99a233298348acc2d824d496dee0e66e31b66a6022c2ad74a5c", size = 6547539, upload-time = "2026-03-29T13:19:30.97Z" }, + { url = "https://files.pythonhosted.org/packages/7d/90/8d23e3b0dafd024bf31bdec225b3bb5c2dbfa6912f8a53b8659f21216cbf/numpy-2.4.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45dbed2ab436a9e826e302fcdcbe9133f9b0006e5af7168afb8963a6520da103", size = 15668806, upload-time = "2026-03-29T13:19:33.887Z" }, + { url = "https://files.pythonhosted.org/packages/d1/73/a9d864e42a01896bb5974475438f16086be9ba1f0d19d0bb7a07427c4a8b/numpy-2.4.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c901b15172510173f5cb310eae652908340f8dede90fff9e3bf6c0d8dfd92f83", size = 16632682, upload-time = "2026-03-29T13:19:37.336Z" }, + { url = "https://files.pythonhosted.org/packages/34/fb/14570d65c3bde4e202a031210475ae9cde9b7686a2e7dc97ee67d2833b35/numpy-2.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:99d838547ace2c4aace6c4f76e879ddfe02bb58a80c1549928477862b7a6d6ed", size = 17019810, upload-time = "2026-03-29T13:19:40.963Z" }, + { url = "https://files.pythonhosted.org/packages/8a/77/2ba9d87081fd41f6d640c83f26fb7351e536b7ce6dd9061b6af5904e8e46/numpy-2.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0aec54fd785890ecca25a6003fd9a5aed47ad607bbac5cd64f836ad8666f4959", size = 18357394, upload-time = "2026-03-29T13:19:44.859Z" }, + { url = "https://files.pythonhosted.org/packages/a2/23/52666c9a41708b0853fa3b1a12c90da38c507a3074883823126d4e9d5b30/numpy-2.4.4-cp313-cp313-win32.whl", hash = "sha256:07077278157d02f65c43b1b26a3886bce886f95d20aabd11f87932750dfb14ed", size = 5959556, upload-time = "2026-03-29T13:19:47.661Z" }, + { url = "https://files.pythonhosted.org/packages/57/fb/48649b4971cde70d817cf97a2a2fdc0b4d8308569f1dd2f2611959d2e0cf/numpy-2.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:5c70f1cc1c4efbe316a572e2d8b9b9cc44e89b95f79ca3331553fbb63716e2bf", size = 12317311, upload-time = "2026-03-29T13:19:50.67Z" }, + { url = "https://files.pythonhosted.org/packages/ba/d8/11490cddd564eb4de97b4579ef6bfe6a736cc07e94c1598590ae25415e01/numpy-2.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:ef4059d6e5152fa1a39f888e344c73fdc926e1b2dd58c771d67b0acfbf2aa67d", size = 10222060, upload-time = "2026-03-29T13:19:54.229Z" }, + { url = "https://files.pythonhosted.org/packages/99/5d/dab4339177a905aad3e2221c915b35202f1ec30d750dd2e5e9d9a72b804b/numpy-2.4.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4bbc7f303d125971f60ec0aaad5e12c62d0d2c925f0ab1273debd0e4ba37aba5", size = 14822302, upload-time = "2026-03-29T13:19:57.585Z" }, + { url = "https://files.pythonhosted.org/packages/eb/e4/0564a65e7d3d97562ed6f9b0fd0fb0a6f559ee444092f105938b50043876/numpy-2.4.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:4d6d57903571f86180eb98f8f0c839fa9ebbfb031356d87f1361be91e433f5b7", size = 5327407, upload-time = "2026-03-29T13:20:00.601Z" }, + { url = "https://files.pythonhosted.org/packages/29/8d/35a3a6ce5ad371afa58b4700f1c820f8f279948cca32524e0a695b0ded83/numpy-2.4.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:4636de7fd195197b7535f231b5de9e4b36d2c440b6e566d2e4e4746e6af0ca93", size = 6647631, upload-time = "2026-03-29T13:20:02.855Z" }, + { url = "https://files.pythonhosted.org/packages/f4/da/477731acbd5a58a946c736edfdabb2ac5b34c3d08d1ba1a7b437fa0884df/numpy-2.4.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ad2e2ef14e0b04e544ea2fa0a36463f847f113d314aa02e5b402fdf910ef309e", size = 15727691, upload-time = "2026-03-29T13:20:06.004Z" }, + { url = "https://files.pythonhosted.org/packages/e6/db/338535d9b152beabeb511579598418ba0212ce77cf9718edd70262cc4370/numpy-2.4.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a285b3b96f951841799528cd1f4f01cd70e7e0204b4abebac9463eecfcf2a40", size = 16681241, upload-time = "2026-03-29T13:20:09.417Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a9/ad248e8f58beb7a0219b413c9c7d8151c5d285f7f946c3e26695bdbbe2df/numpy-2.4.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f8474c4241bc18b750be2abea9d7a9ec84f46ef861dbacf86a4f6e043401f79e", size = 17085767, upload-time = "2026-03-29T13:20:13.126Z" }, + { url = "https://files.pythonhosted.org/packages/b5/1a/3b88ccd3694681356f70da841630e4725a7264d6a885c8d442a697e1146b/numpy-2.4.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4e874c976154687c1f71715b034739b45c7711bec81db01914770373d125e392", size = 18403169, upload-time = "2026-03-29T13:20:17.096Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c9/fcfd5d0639222c6eac7f304829b04892ef51c96a75d479214d77e3ce6e33/numpy-2.4.4-cp313-cp313t-win32.whl", hash = "sha256:9c585a1790d5436a5374bac930dad6ed244c046ed91b2b2a3634eb2971d21008", size = 6083477, upload-time = "2026-03-29T13:20:20.195Z" }, + { url = "https://files.pythonhosted.org/packages/d5/e3/3938a61d1c538aaec8ed6fd6323f57b0c2d2d2219512434c5c878db76553/numpy-2.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:93e15038125dc1e5345d9b5b68aa7f996ec33b98118d18c6ca0d0b7d6198b7e8", size = 12457487, upload-time = "2026-03-29T13:20:22.946Z" }, + { url = "https://files.pythonhosted.org/packages/97/6a/7e345032cc60501721ef94e0e30b60f6b0bd601f9174ebd36389a2b86d40/numpy-2.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:0dfd3f9d3adbe2920b68b5cd3d51444e13a10792ec7154cd0a2f6e74d4ab3233", size = 10292002, upload-time = "2026-03-29T13:20:25.909Z" }, + { url = "https://files.pythonhosted.org/packages/6e/06/c54062f85f673dd5c04cbe2f14c3acb8c8b95e3384869bb8cc9bff8cb9df/numpy-2.4.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f169b9a863d34f5d11b8698ead99febeaa17a13ca044961aa8e2662a6c7766a0", size = 16684353, upload-time = "2026-03-29T13:20:29.504Z" }, + { url = "https://files.pythonhosted.org/packages/4c/39/8a320264a84404c74cc7e79715de85d6130fa07a0898f67fb5cd5bd79908/numpy-2.4.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2483e4584a1cb3092da4470b38866634bafb223cbcd551ee047633fd2584599a", size = 14704914, upload-time = "2026-03-29T13:20:33.547Z" }, + { url = "https://files.pythonhosted.org/packages/91/fb/287076b2614e1d1044235f50f03748f31fa287e3dbe6abeb35cdfa351eca/numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:2d19e6e2095506d1736b7d80595e0f252d76b89f5e715c35e06e937679ea7d7a", size = 5210005, upload-time = "2026-03-29T13:20:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/63/eb/fcc338595309910de6ecabfcef2419a9ce24399680bfb149421fa2df1280/numpy-2.4.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:6a246d5914aa1c820c9443ddcee9c02bec3e203b0c080349533fae17727dfd1b", size = 6544974, upload-time = "2026-03-29T13:20:39.014Z" }, + { url = "https://files.pythonhosted.org/packages/44/5d/e7e9044032a716cdfaa3fba27a8e874bf1c5f1912a1ddd4ed071bf8a14a6/numpy-2.4.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:989824e9faf85f96ec9c7761cd8d29c531ad857bfa1daa930cba85baaecf1a9a", size = 15684591, upload-time = "2026-03-29T13:20:42.146Z" }, + { url = "https://files.pythonhosted.org/packages/98/7c/21252050676612625449b4807d6b695b9ce8a7c9e1c197ee6216c8a65c7c/numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27a8d92cd10f1382a67d7cf4db7ce18341b66438bdd9f691d7b0e48d104c2a9d", size = 16637700, upload-time = "2026-03-29T13:20:46.204Z" }, + { url = "https://files.pythonhosted.org/packages/b1/29/56d2bbef9465db24ef25393383d761a1af4f446a1df9b8cded4fe3a5a5d7/numpy-2.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e44319a2953c738205bf3354537979eaa3998ed673395b964c1176083dd46252", size = 17035781, upload-time = "2026-03-29T13:20:50.242Z" }, + { url = "https://files.pythonhosted.org/packages/e3/2b/a35a6d7589d21f44cea7d0a98de5ddcbb3d421b2622a5c96b1edf18707c3/numpy-2.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e892aff75639bbef0d2a2cfd55535510df26ff92f63c92cd84ef8d4ba5a5557f", size = 18362959, upload-time = "2026-03-29T13:20:54.019Z" }, + { url = "https://files.pythonhosted.org/packages/64/c9/d52ec581f2390e0f5f85cbfd80fb83d965fc15e9f0e1aec2195faa142cde/numpy-2.4.4-cp314-cp314-win32.whl", hash = "sha256:1378871da56ca8943c2ba674530924bb8ca40cd228358a3b5f302ad60cf875fc", size = 6008768, upload-time = "2026-03-29T13:20:56.912Z" }, + { url = "https://files.pythonhosted.org/packages/fa/22/4cc31a62a6c7b74a8730e31a4274c5dc80e005751e277a2ce38e675e4923/numpy-2.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:715d1c092715954784bc79e1174fc2a90093dc4dc84ea15eb14dad8abdcdeb74", size = 12449181, upload-time = "2026-03-29T13:20:59.548Z" }, + { url = "https://files.pythonhosted.org/packages/70/2e/14cda6f4d8e396c612d1bf97f22958e92148801d7e4f110cabebdc0eef4b/numpy-2.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:2c194dd721e54ecad9ad387c1d35e63dce5c4450c6dc7dd5611283dda239aabb", size = 10496035, upload-time = "2026-03-29T13:21:02.524Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e8/8fed8c8d848d7ecea092dc3469643f9d10bc3a134a815a3b033da1d2039b/numpy-2.4.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2aa0613a5177c264ff5921051a5719d20095ea586ca88cc802c5c218d1c67d3e", size = 14824958, upload-time = "2026-03-29T13:21:05.671Z" }, + { url = "https://files.pythonhosted.org/packages/05/1a/d8007a5138c179c2bf33ef44503e83d70434d2642877ee8fbb230e7c0548/numpy-2.4.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:42c16925aa5a02362f986765f9ebabf20de75cdefdca827d14315c568dcab113", size = 5330020, upload-time = "2026-03-29T13:21:08.635Z" }, + { url = "https://files.pythonhosted.org/packages/99/64/ffb99ac6ae93faf117bcbd5c7ba48a7f45364a33e8e458545d3633615dda/numpy-2.4.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:874f200b2a981c647340f841730fc3a2b54c9d940566a3c4149099591e2c4c3d", size = 6650758, upload-time = "2026-03-29T13:21:10.949Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6e/795cc078b78a384052e73b2f6281ff7a700e9bf53bcce2ee579d4f6dd879/numpy-2.4.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9b39d38a9bd2ae1becd7eac1303d031c5c110ad31f2b319c6e7d98b135c934d", size = 15729948, upload-time = "2026-03-29T13:21:14.047Z" }, + { url = "https://files.pythonhosted.org/packages/5f/86/2acbda8cc2af5f3d7bfc791192863b9e3e19674da7b5e533fded124d1299/numpy-2.4.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b268594bccac7d7cf5844c7732e3f20c50921d94e36d7ec9b79e9857694b1b2f", size = 16679325, upload-time = "2026-03-29T13:21:17.561Z" }, + { url = "https://files.pythonhosted.org/packages/bc/59/cafd83018f4aa55e0ac6fa92aa066c0a1877b77a615ceff1711c260ffae8/numpy-2.4.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ac6b31e35612a26483e20750126d30d0941f949426974cace8e6b5c58a3657b0", size = 17084883, upload-time = "2026-03-29T13:21:21.106Z" }, + { url = "https://files.pythonhosted.org/packages/f0/85/a42548db84e65ece46ab2caea3d3f78b416a47af387fcbb47ec28e660dc2/numpy-2.4.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8e3ed142f2728df44263aaf5fb1f5b0b99f4070c553a0d7f033be65338329150", size = 18403474, upload-time = "2026-03-29T13:21:24.828Z" }, + { url = "https://files.pythonhosted.org/packages/ed/ad/483d9e262f4b831000062e5d8a45e342166ec8aaa1195264982bca267e62/numpy-2.4.4-cp314-cp314t-win32.whl", hash = "sha256:dddbbd259598d7240b18c9d87c56a9d2fb3b02fe266f49a7c101532e78c1d871", size = 6155500, upload-time = "2026-03-29T13:21:28.205Z" }, + { url = "https://files.pythonhosted.org/packages/c7/03/2fc4e14c7bd4ff2964b74ba90ecb8552540b6315f201df70f137faa5c589/numpy-2.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:a7164afb23be6e37ad90b2f10426149fd75aee07ca55653d2aa41e66c4ef697e", size = 12637755, upload-time = "2026-03-29T13:21:31.107Z" }, + { url = "https://files.pythonhosted.org/packages/58/78/548fb8e07b1a341746bfbecb32f2c268470f45fa028aacdbd10d9bc73aab/numpy-2.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:ba203255017337d39f89bdd58417f03c4426f12beed0440cfd933cb15f8669c7", size = 10566643, upload-time = "2026-03-29T13:21:34.339Z" }, +] + +[[package]] +name = "nvidia-cublas" +version = "13.1.0.3" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/a5/fce49e2ae977e0ccc084e5adafceb4f0ac0c8333cb6863501618a7277f67/nvidia_cublas-13.1.0.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c86fc7f7ae36d7528288c5d88098edcb7b02c633d262e7ddbb86b0ad91be5df2", size = 542851226, upload-time = "2025-10-09T08:59:04.818Z" }, + { url = "https://files.pythonhosted.org/packages/e7/44/423ac00af4dd95a5aeb27207e2c0d9b7118702149bf4704c3ddb55bb7429/nvidia_cublas-13.1.0.3-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:ee8722c1f0145ab246bccb9e452153b5e0515fd094c3678df50b2a0888b8b171", size = 423133236, upload-time = "2025-10-09T08:59:32.536Z" }, +] + +[[package]] +name = "nvidia-cuda-cupti" +version = "13.0.85" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/2a/80353b103fc20ce05ef51e928daed4b6015db4aaa9162ed0997090fe2250/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_aarch64.whl", hash = "sha256:796bd679890ee55fb14a94629b698b6db54bcfd833d391d5e94017dd9d7d3151", size = 10310827, upload-time = "2025-09-04T08:26:42.012Z" }, + { url = "https://files.pythonhosted.org/packages/33/6d/737d164b4837a9bbd202f5ae3078975f0525a55730fe871d8ed4e3b952b0/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_x86_64.whl", hash = "sha256:4eb01c08e859bf924d222250d2e8f8b8ff6d3db4721288cf35d14252a4d933c8", size = 10715597, upload-time = "2025-09-04T08:26:51.312Z" }, +] + +[[package]] +name = "nvidia-cuda-nvrtc" +version = "13.0.88" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/68/483a78f5e8f31b08fb1bb671559968c0ca3a065ac7acabfc7cee55214fd6/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575", size = 90215200, upload-time = "2025-09-04T08:28:44.204Z" }, + { url = "https://files.pythonhosted.org/packages/b7/dc/6bb80850e0b7edd6588d560758f17e0550893a1feaf436807d64d2da040f/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d27f20a0ca67a4bb34268a5e951033496c5b74870b868bacd046b1b8e0c3267b", size = 43015449, upload-time = "2025-09-04T08:28:20.239Z" }, +] + +[[package]] +name = "nvidia-cuda-runtime" +version = "13.0.96" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/4f/17d7b9b8e285199c58ce28e31b5c5bbaa4d8271af06a89b6405258245de2/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef9bcbe90493a2b9d810e43d249adb3d02e98dd30200d86607d8d02687c43f55", size = 2261060, upload-time = "2025-10-09T08:55:15.78Z" }, + { url = "https://files.pythonhosted.org/packages/2e/24/d1558f3b68b1d26e706813b1d10aa1d785e4698c425af8db8edc3dced472/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f82250d7782aa23b6cfe765ecc7db554bd3c2870c43f3d1821f1d18aebf0548", size = 2243632, upload-time = "2025-10-09T08:55:36.117Z" }, +] + +[[package]] +name = "nvidia-cudnn-cu13" +version = "9.19.0.56" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/84/26025437c1e6b61a707442184fa0c03d083b661adf3a3eecfd6d21677740/nvidia_cudnn_cu13-9.19.0.56-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:6ed29ffaee1176c612daf442e4dd6cfeb6a0caa43ddcbeb59da94953030b1be4", size = 433781201, upload-time = "2026-02-03T20:40:53.805Z" }, + { url = "https://files.pythonhosted.org/packages/a3/22/0b4b932655d17a6da1b92fa92ab12844b053bb2ac2475e179ba6f043da1e/nvidia_cudnn_cu13-9.19.0.56-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:d20e1734305e9d68889a96e3f35094d733ff1f83932ebe462753973e53a572bf", size = 366066321, upload-time = "2026-02-03T20:44:52.837Z" }, +] + +[[package]] +name = "nvidia-cufft" +version = "12.0.0.61" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2f/7b57e29836ea8714f81e9898409196f47d772d5ddedddf1592eadb8ab743/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6c44f692dce8fd5ffd3e3df134b6cdb9c2f72d99cf40b62c32dde45eea9ddad3", size = 214085489, upload-time = "2025-09-04T08:31:56.044Z" }, +] + +[[package]] +name = "nvidia-cufile" +version = "1.15.1.6" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/70/4f193de89a48b71714e74602ee14d04e4019ad36a5a9f20c425776e72cd6/nvidia_cufile-1.15.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08a3ecefae5a01c7f5117351c64f17c7c62efa5fffdbe24fc7d298da19cd0b44", size = 1223672, upload-time = "2025-09-04T08:32:22.779Z" }, + { url = "https://files.pythonhosted.org/packages/ab/73/cc4a14c9813a8a0d509417cf5f4bdaba76e924d58beb9864f5a7baceefbf/nvidia_cufile-1.15.1.6-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:bdc0deedc61f548bddf7733bdc216456c2fdb101d020e1ab4b88d232d5e2f6d1", size = 1136992, upload-time = "2025-09-04T08:32:14.119Z" }, +] + +[[package]] +name = "nvidia-curand" +version = "10.4.0.35" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/72/7c2ae24fb6b63a32e6ae5d241cc65263ea18d08802aaae087d9f013335a2/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:133df5a7509c3e292aaa2b477afd0194f06ce4ea24d714d616ff36439cee349a", size = 61962106, upload-time = "2025-08-04T10:21:41.128Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9f/be0a41ca4a4917abf5cb9ae0daff1a6060cc5de950aec0396de9f3b52bc5/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:1aee33a5da6e1db083fe2b90082def8915f30f3248d5896bcec36a579d941bfc", size = 59544258, upload-time = "2025-08-04T10:22:03.992Z" }, +] + +[[package]] +name = "nvidia-cusolver" +version = "12.0.4.66" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-cusparse", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" }, + { url = "https://files.pythonhosted.org/packages/5f/67/cba3777620cdacb99102da4042883709c41c709f4b6323c10781a9c3aa34/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:0a759da5dea5c0ea10fd307de75cdeb59e7ea4fcb8add0924859b944babf1112", size = 200941980, upload-time = "2025-09-04T08:33:22.767Z" }, +] + +[[package]] +name = "nvidia-cusparse" +version = "12.6.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" }, + { url = "https://files.pythonhosted.org/packages/fa/18/623c77619c31d62efd55302939756966f3ecc8d724a14dab2b75f1508850/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b3c89c88d01ee0e477cb7f82ef60a11a4bcd57b6b87c33f789350b59759360b", size = 145942937, upload-time = "2025-09-04T08:33:58.029Z" }, +] + +[[package]] +name = "nvidia-cusparselt-cu13" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/10/8dcd1175260706a2fc92a16a52e306b71d4c1ea0b0cc4a9484183399818a/nvidia_cusparselt_cu13-0.8.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:400c6ed1cf6780fc6efedd64ec9f1345871767e6a1a0a552a1ea0578117ea77c", size = 220791277, upload-time = "2025-08-13T19:22:40.982Z" }, + { url = "https://files.pythonhosted.org/packages/fd/53/43b0d71f4e702fa9733f8b4571fdca50a8813f1e450b656c239beff12315/nvidia_cusparselt_cu13-0.8.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:25e30a8a7323935d4ad0340b95a0b69926eee755767e8e0b1cf8dd85b197d3fd", size = 169884119, upload-time = "2025-08-13T19:23:41.967Z" }, +] + +[[package]] +name = "nvidia-nccl-cu13" +version = "2.28.9" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/55/1920646a2e43ffd4fc958536b276197ed740e9e0c54105b4bb3521591fc7/nvidia_nccl_cu13-2.28.9-py3-none-manylinux_2_18_aarch64.whl", hash = "sha256:01c873ba1626b54caa12272ed228dc5b2781545e0ae8ba3f432a8ef1c6d78643", size = 196561677, upload-time = "2025-11-18T05:49:03.45Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b4/878fefaad5b2bcc6fcf8d474a25e3e3774bc5133e4b58adff4d0bca238bc/nvidia_nccl_cu13-2.28.9-py3-none-manylinux_2_18_x86_64.whl", hash = "sha256:e4553a30f34195f3fa1da02a6da3d6337d28f2003943aa0a3d247bbc25fefc42", size = 196493177, upload-time = "2025-11-18T05:49:17.677Z" }, +] + +[[package]] +name = "nvidia-nvjitlink" +version = "13.0.88" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/7a/123e033aaff487c77107195fa5a2b8686795ca537935a24efae476c41f05/nvidia_nvjitlink-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:13a74f429e23b921c1109976abefacc69835f2f433ebd323d3946e11d804e47b", size = 40713933, upload-time = "2025-09-04T08:35:43.553Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2c/93c5250e64df4f894f1cbb397c6fd71f79813f9fd79d7cd61de3f97b3c2d/nvidia_nvjitlink-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e931536ccc7d467a98ba1d8b89ff7fa7f1fa3b13f2b0069118cd7f47bff07d0c", size = 38768748, upload-time = "2025-09-04T08:35:20.008Z" }, +] + +[[package]] +name = "nvidia-nvshmem-cu13" +version = "3.4.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/0f/05cc9c720236dcd2db9c1ab97fff629e96821be2e63103569da0c9b72f19/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dc2a197f38e5d0376ad52cd1a2a3617d3cdc150fd5966f4aee9bcebb1d68fe9", size = 60215947, upload-time = "2025-09-06T00:32:20.022Z" }, + { url = "https://files.pythonhosted.org/packages/3c/35/a9bf80a609e74e3b000fef598933235c908fcefcef9026042b8e6dfde2a9/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:290f0a2ee94c9f3687a02502f3b9299a9f9fe826e6d0287ee18482e78d495b80", size = 60412546, upload-time = "2025-09-06T00:32:41.564Z" }, +] + +[[package]] +name = "nvidia-nvtx" +version = "13.0.85" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/f3/d86c845465a2723ad7e1e5c36dcd75ddb82898b3f53be47ebd429fb2fa5d/nvidia_nvtx-13.0.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4936d1d6780fbe68db454f5e72a42ff64d1fd6397df9f363ae786930fd5c1cd4", size = 148047, upload-time = "2025-09-04T08:29:01.761Z" }, + { url = "https://files.pythonhosted.org/packages/a8/64/3708a90d1ebe202ffdeb7185f878a3c84d15c2b2c31858da2ce0583e2def/nvidia_nvtx-13.0.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb7780edb6b14107373c835bf8b72e7a178bac7367e23da7acb108f973f157a6", size = 148878, upload-time = "2025-09-04T08:28:53.627Z" }, +] + +[[package]] +name = "open-clip-torch" +version = "3.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ftfy" }, + { name = "huggingface-hub" }, + { name = "regex" }, + { name = "safetensors" }, + { name = "timm" }, + { name = "torch" }, + { name = "torchvision" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4a/1f/2bc9795047fa2c1ad2567ef78ce6dfc9a7b763fa534acee09a94da2a5b8f/open_clip_torch-3.3.0.tar.gz", hash = "sha256:904b1a9f909df8281bb3de60ab95491cd2994a509177ea4f9d6292a84fe24d6d", size = 1503380, upload-time = "2026-02-27T00:32:46.74Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/b5/41c315ccd94ca332ead3e832e83eee343ab245005c3e43d9d3e75eae34eb/open_clip_torch-3.3.0-py3-none-any.whl", hash = "sha256:c549ad5ed6bfc119cc11105033c0a2b9d7a2a4afeb40a58a09aab3da1a0043ce", size = 1547268, upload-time = "2026-02-27T00:32:44.902Z" }, +] + +[[package]] +name = "opencv-python" +version = "4.13.0.92" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/6f/5a28fef4c4a382be06afe3938c64cc168223016fa520c5abaf37e8862aa5/opencv_python-4.13.0.92-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:caf60c071ec391ba51ed00a4a920f996d0b64e3e46068aac1f646b5de0326a19", size = 46247052, upload-time = "2026-02-05T07:01:25.046Z" }, + { url = "https://files.pythonhosted.org/packages/08/ac/6c98c44c650b8114a0fb901691351cfb3956d502e8e9b5cd27f4ee7fbf2f/opencv_python-4.13.0.92-cp37-abi3-macosx_14_0_x86_64.whl", hash = "sha256:5868a8c028a0b37561579bfb8ac1875babdc69546d236249fff296a8c010ccf9", size = 32568781, upload-time = "2026-02-05T07:01:41.379Z" }, + { url = "https://files.pythonhosted.org/packages/3e/51/82fed528b45173bf629fa44effb76dff8bc9f4eeaee759038362dfa60237/opencv_python-4.13.0.92-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0bc2596e68f972ca452d80f444bc404e08807d021fbba40df26b61b18e01838a", size = 47685527, upload-time = "2026-02-05T06:59:11.24Z" }, + { url = "https://files.pythonhosted.org/packages/db/07/90b34a8e2cf9c50fe8ed25cac9011cde0676b4d9d9c973751ac7616223a2/opencv_python-4.13.0.92-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:402033cddf9d294693094de5ef532339f14ce821da3ad7df7c9f6e8316da32cf", size = 70460872, upload-time = "2026-02-05T06:59:19.162Z" }, + { url = "https://files.pythonhosted.org/packages/02/6d/7a9cc719b3eaf4377b9c2e3edeb7ed3a81de41f96421510c0a169ca3cfd4/opencv_python-4.13.0.92-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:bccaabf9eb7f897ca61880ce2869dcd9b25b72129c28478e7f2a5e8dee945616", size = 46708208, upload-time = "2026-02-05T06:59:15.419Z" }, + { url = "https://files.pythonhosted.org/packages/fd/55/b3b49a1b97aabcfbbd6c7326df9cb0b6fa0c0aefa8e89d500939e04aa229/opencv_python-4.13.0.92-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:620d602b8f7d8b8dab5f4b99c6eb353e78d3fb8b0f53db1bd258bb1aa001c1d5", size = 72927042, upload-time = "2026-02-05T06:59:23.389Z" }, + { url = "https://files.pythonhosted.org/packages/fb/17/de5458312bcb07ddf434d7bfcb24bb52c59635ad58c6e7c751b48949b009/opencv_python-4.13.0.92-cp37-abi3-win32.whl", hash = "sha256:372fe164a3148ac1ca51e5f3ad0541a4a276452273f503441d718fab9c5e5f59", size = 30932638, upload-time = "2026-02-05T07:02:14.98Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a5/1be1516390333ff9be3a9cb648c9f33df79d5096e5884b5df71a588af463/opencv_python-4.13.0.92-cp37-abi3-win_amd64.whl", hash = "sha256:423d934c9fafb91aad38edf26efb46da91ffbc05f3f59c4b0c72e699720706f5", size = 40212062, upload-time = "2026-02-05T07:02:12.724Z" }, +] + +[[package]] +name = "packaging" +version = "26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, +] + +[[package]] +name = "pandas" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/da/99/b342345300f13440fe9fe385c3c481e2d9a595ee3bab4d3219247ac94e9a/pandas-3.0.2.tar.gz", hash = "sha256:f4753e73e34c8d83221ba58f232433fca2748be8b18dbca02d242ed153945043", size = 4645855, upload-time = "2026-03-31T06:48:30.816Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/b0/c20bd4d6d3f736e6bd6b55794e9cd0a617b858eaad27c8f410ea05d953b7/pandas-3.0.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:232a70ebb568c0c4d2db4584f338c1577d81e3af63292208d615907b698a0f18", size = 10347921, upload-time = "2026-03-31T06:46:33.36Z" }, + { url = "https://files.pythonhosted.org/packages/35/d0/4831af68ce30cc2d03c697bea8450e3225a835ef497d0d70f31b8cdde965/pandas-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:970762605cff1ca0d3f71ed4f3a769ea8f85fc8e6348f6e110b8fea7e6eb5a14", size = 9888127, upload-time = "2026-03-31T06:46:36.253Z" }, + { url = "https://files.pythonhosted.org/packages/61/a9/16ea9346e1fc4a96e2896242d9bc674764fb9049b0044c0132502f7a771e/pandas-3.0.2-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aff4e6f4d722e0652707d7bcb190c445fe58428500c6d16005b02401764b1b3d", size = 10399577, upload-time = "2026-03-31T06:46:39.224Z" }, + { url = "https://files.pythonhosted.org/packages/c4/a8/3a61a721472959ab0ce865ef05d10b0d6bfe27ce8801c99f33d4fa996e65/pandas-3.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef8b27695c3d3dc78403c9a7d5e59a62d5464a7e1123b4e0042763f7104dc74f", size = 10880030, upload-time = "2026-03-31T06:46:42.412Z" }, + { url = "https://files.pythonhosted.org/packages/da/65/7225c0ea4d6ce9cb2160a7fb7f39804871049f016e74782e5dade4d14109/pandas-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f8d68083e49e16b84734eb1a4dcae4259a75c90fb6e2251ab9a00b61120c06ab", size = 11409468, upload-time = "2026-03-31T06:46:45.2Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5b/46e7c76032639f2132359b5cf4c785dd8cf9aea5ea64699eac752f02b9db/pandas-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:32cc41f310ebd4a296d93515fcac312216adfedb1894e879303987b8f1e2b97d", size = 11936381, upload-time = "2026-03-31T06:46:48.293Z" }, + { url = "https://files.pythonhosted.org/packages/7b/8b/721a9cff6fa6a91b162eb51019c6243b82b3226c71bb6c8ef4a9bd65cbc6/pandas-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:a4785e1d6547d8427c5208b748ae2efb64659a21bd82bf440d4262d02bfa02a4", size = 9744993, upload-time = "2026-03-31T06:46:51.488Z" }, + { url = "https://files.pythonhosted.org/packages/d5/18/7f0bd34ae27b28159aa80f2a6799f47fda34f7fb938a76e20c7b7fe3b200/pandas-3.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:08504503f7101300107ecdc8df73658e4347586db5cfdadabc1592e9d7e7a0fd", size = 9056118, upload-time = "2026-03-31T06:46:54.548Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ca/3e639a1ea6fcd0617ca4e8ca45f62a74de33a56ae6cd552735470b22c8d3/pandas-3.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5918ba197c951dec132b0c5929a00c0bf05d5942f590d3c10a807f6e15a57d3", size = 10321105, upload-time = "2026-03-31T06:46:57.327Z" }, + { url = "https://files.pythonhosted.org/packages/0b/77/dbc82ff2fb0e63c6564356682bf201edff0ba16c98630d21a1fb312a8182/pandas-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d606a041c89c0a474a4702d532ab7e73a14fe35c8d427b972a625c8e46373668", size = 9864088, upload-time = "2026-03-31T06:46:59.935Z" }, + { url = "https://files.pythonhosted.org/packages/5c/2b/341f1b04bbca2e17e13cd3f08c215b70ef2c60c5356ef1e8c6857449edc7/pandas-3.0.2-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:710246ba0616e86891b58ab95f2495143bb2bc83ab6b06747c74216f583a6ac9", size = 10369066, upload-time = "2026-03-31T06:47:02.792Z" }, + { url = "https://files.pythonhosted.org/packages/12/c5/cbb1ffefb20a93d3f0e1fdcda699fb84976210d411b008f97f48bf6ce27e/pandas-3.0.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5d3cfe227c725b1f3dff4278b43d8c784656a42a9325b63af6b1492a8232209e", size = 10876780, upload-time = "2026-03-31T06:47:06.205Z" }, + { url = "https://files.pythonhosted.org/packages/98/fe/2249ae5e0a69bd0ddf17353d0a5d26611d70970111f5b3600cdc8be883e7/pandas-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c3b723df9087a9a9a840e263ebd9f88b64a12075d1bf2ea401a5a42f254f084d", size = 11375181, upload-time = "2026-03-31T06:47:09.383Z" }, + { url = "https://files.pythonhosted.org/packages/de/64/77a38b09e70b6464883b8d7584ab543e748e42c1b5d337a2ee088e0df741/pandas-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3096110bf9eac0070b7208465f2740e2d8a670d5cb6530b5bb884eca495fd39", size = 11928899, upload-time = "2026-03-31T06:47:12.686Z" }, + { url = "https://files.pythonhosted.org/packages/5e/52/42855bf626868413f761addd574acc6195880ae247a5346477a4361c3acb/pandas-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:07a10f5c36512eead51bc578eb3354ad17578b22c013d89a796ab5eee90cd991", size = 9746574, upload-time = "2026-03-31T06:47:15.64Z" }, + { url = "https://files.pythonhosted.org/packages/88/39/21304ae06a25e8bf9fc820d69b29b2c495b2ae580d1e143146c309941760/pandas-3.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:5fdbfa05931071aba28b408e59226186b01eb5e92bea2ab78b65863ca3228d84", size = 9047156, upload-time = "2026-03-31T06:47:18.595Z" }, + { url = "https://files.pythonhosted.org/packages/72/20/7defa8b27d4f330a903bb68eea33be07d839c5ea6bdda54174efcec0e1d2/pandas-3.0.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:dbc20dea3b9e27d0e66d74c42b2d0c1bed9c2ffe92adea33633e3bedeb5ac235", size = 10756238, upload-time = "2026-03-31T06:47:22.012Z" }, + { url = "https://files.pythonhosted.org/packages/e9/95/49433c14862c636afc0e9b2db83ff16b3ad92959364e52b2955e44c8e94c/pandas-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b75c347eff42497452116ce05ef461822d97ce5b9ff8df6edacb8076092c855d", size = 10408520, upload-time = "2026-03-31T06:47:25.197Z" }, + { url = "https://files.pythonhosted.org/packages/3b/f8/462ad2b5881d6b8ec8e5f7ed2ea1893faa02290d13870a1600fe72ad8efc/pandas-3.0.2-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1478075142e83a5571782ad007fb201ed074bdeac7ebcc8890c71442e96adf7", size = 10324154, upload-time = "2026-03-31T06:47:28.097Z" }, + { url = "https://files.pythonhosted.org/packages/0a/65/d1e69b649cbcddda23ad6e4c40ef935340f6f652a006e5cbc3555ac8adb3/pandas-3.0.2-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5880314e69e763d4c8b27937090de570f1fb8d027059a7ada3f7f8e98bdcb677", size = 10714449, upload-time = "2026-03-31T06:47:30.85Z" }, + { url = "https://files.pythonhosted.org/packages/47/a4/85b59bc65b8190ea3689882db6cdf32a5003c0ccd5a586c30fdcc3ffc4fc/pandas-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b5329e26898896f06035241a626d7c335daa479b9bbc82be7c2742d048e41172", size = 11338475, upload-time = "2026-03-31T06:47:34.026Z" }, + { url = "https://files.pythonhosted.org/packages/1e/c4/bc6966c6e38e5d9478b935272d124d80a589511ed1612a5d21d36f664c68/pandas-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:81526c4afd31971f8b62671442a4b2b51e0aa9acc3819c9f0f12a28b6fcf85f1", size = 11786568, upload-time = "2026-03-31T06:47:36.941Z" }, + { url = "https://files.pythonhosted.org/packages/e8/74/09298ca9740beed1d3504e073d67e128aa07e5ca5ca2824b0c674c0b8676/pandas-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:7cadd7e9a44ec13b621aec60f9150e744cfc7a3dd32924a7e2f45edff31823b0", size = 10488652, upload-time = "2026-03-31T06:47:40.612Z" }, + { url = "https://files.pythonhosted.org/packages/bb/40/c6ea527147c73b24fc15c891c3fcffe9c019793119c5742b8784a062c7db/pandas-3.0.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:db0dbfd2a6cdf3770aa60464d50333d8f3d9165b2f2671bcc299b72de5a6677b", size = 10326084, upload-time = "2026-03-31T06:47:43.834Z" }, + { url = "https://files.pythonhosted.org/packages/95/25/bdb9326c3b5455f8d4d3549fce7abcf967259de146fe2cf7a82368141948/pandas-3.0.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0555c5882688a39317179ab4a0ed41d3ebc8812ab14c69364bbee8fb7a3f6288", size = 9914146, upload-time = "2026-03-31T06:47:46.67Z" }, + { url = "https://files.pythonhosted.org/packages/8d/77/3a227ff3337aa376c60d288e1d61c5d097131d0ac71f954d90a8f369e422/pandas-3.0.2-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:01f31a546acd5574ef77fe199bc90b55527c225c20ccda6601cf6b0fd5ed597c", size = 10444081, upload-time = "2026-03-31T06:47:49.681Z" }, + { url = "https://files.pythonhosted.org/packages/15/88/3cdd54fa279341afa10acf8d2b503556b1375245dccc9315659f795dd2e9/pandas-3.0.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:deeca1b5a931fdf0c2212c8a659ade6d3b1edc21f0914ce71ef24456ca7a6535", size = 10897535, upload-time = "2026-03-31T06:47:53.033Z" }, + { url = "https://files.pythonhosted.org/packages/06/9d/98cc7a7624f7932e40f434299260e2917b090a579d75937cb8a57b9d2de3/pandas-3.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0f48afd9bb13300ffb5a3316973324c787054ba6665cda0da3fbd67f451995db", size = 11446992, upload-time = "2026-03-31T06:47:56.193Z" }, + { url = "https://files.pythonhosted.org/packages/9a/cd/19ff605cc3760e80602e6826ddef2824d8e7050ed80f2e11c4b079741dc3/pandas-3.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6c4d8458b97a35717b62469a4ea0e85abd5ed8687277f5ccfc67f8a5126f8c53", size = 11968257, upload-time = "2026-03-31T06:47:59.137Z" }, + { url = "https://files.pythonhosted.org/packages/db/60/aba6a38de456e7341285102bede27514795c1eaa353bc0e7638b6b785356/pandas-3.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:b35d14bb5d8285d9494fe93815a9e9307c0876e10f1e8e89ac5b88f728ec8dcf", size = 9865893, upload-time = "2026-03-31T06:48:02.038Z" }, + { url = "https://files.pythonhosted.org/packages/08/71/e5ec979dd2e8a093dacb8864598c0ff59a0cee0bbcdc0bfec16a51684d4f/pandas-3.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:63d141b56ef686f7f0d714cfb8de4e320475b86bf4b620aa0b7da89af8cbdbbb", size = 9188644, upload-time = "2026-03-31T06:48:05.045Z" }, + { url = "https://files.pythonhosted.org/packages/f1/6c/7b45d85db19cae1eb524f2418ceaa9d85965dcf7b764ed151386b7c540f0/pandas-3.0.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:140f0cffb1fa2524e874dde5b477d9defe10780d8e9e220d259b2c0874c89d9d", size = 10776246, upload-time = "2026-03-31T06:48:07.789Z" }, + { url = "https://files.pythonhosted.org/packages/a8/3e/7b00648b086c106e81766f25322b48aa8dfa95b55e621dbdf2fdd413a117/pandas-3.0.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ae37e833ff4fed0ba352f6bdd8b73ba3ab3256a85e54edfd1ab51ae40cca0af8", size = 10424801, upload-time = "2026-03-31T06:48:10.897Z" }, + { url = "https://files.pythonhosted.org/packages/da/6e/558dd09a71b53b4008e7fc8a98ec6d447e9bfb63cdaeea10e5eb9b2dabe8/pandas-3.0.2-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d888a5c678a419a5bb41a2a93818e8ed9fd3172246555c0b37b7cc27027effd", size = 10345643, upload-time = "2026-03-31T06:48:13.7Z" }, + { url = "https://files.pythonhosted.org/packages/be/e3/921c93b4d9a280409451dc8d07b062b503bbec0531d2627e73a756e99a82/pandas-3.0.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b444dc64c079e84df91baa8bf613d58405645461cabca929d9178f2cd392398d", size = 10743641, upload-time = "2026-03-31T06:48:16.659Z" }, + { url = "https://files.pythonhosted.org/packages/56/ca/fd17286f24fa3b4d067965d8d5d7e14fe557dd4f979a0b068ac0deaf8228/pandas-3.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4544c7a54920de8eeacaa1466a6b7268ecfbc9bc64ab4dbb89c6bbe94d5e0660", size = 11361993, upload-time = "2026-03-31T06:48:19.475Z" }, + { url = "https://files.pythonhosted.org/packages/e4/a5/2f6ed612056819de445a433ca1f2821ac3dab7f150d569a59e9cc105de1d/pandas-3.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:734be7551687c00fbd760dc0522ed974f82ad230d4a10f54bf51b80d44a08702", size = 11815274, upload-time = "2026-03-31T06:48:22.695Z" }, + { url = "https://files.pythonhosted.org/packages/00/2f/b622683e99ec3ce00b0854bac9e80868592c5b051733f2cf3a868e5fea26/pandas-3.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:57a07209bebcbcf768d2d13c9b78b852f9a15978dac41b9e6421a81ad4cdd276", size = 10888530, upload-time = "2026-03-31T06:48:25.806Z" }, + { url = "https://files.pythonhosted.org/packages/cb/2b/f8434233fab2bd66a02ec014febe4e5adced20e2693e0e90a07d118ed30e/pandas-3.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:5371b72c2d4d415d08765f32d689217a43227484e81b2305b52076e328f6f482", size = 9455341, upload-time = "2026-03-31T06:48:28.418Z" }, +] + +[[package]] +name = "peft" +version = "0.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "accelerate" }, + { name = "huggingface-hub" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyyaml" }, + { name = "safetensors" }, + { name = "torch" }, + { name = "tqdm" }, + { name = "transformers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d8/48/147b3ea999560b40a34fd78724c7777aa9d18409c2250bdcaf9c4f2db7fc/peft-0.18.1.tar.gz", hash = "sha256:2dd0d6bfce936d1850e48aaddbd250941c5c02fc8ef3237cd8fd5aac35e0bae2", size = 635030, upload-time = "2026-01-09T13:08:01.136Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/14/b4e3f574acf349ae6f61f9c000a77f97a3b315b4bb6ad03791e79ae4a568/peft-0.18.1-py3-none-any.whl", hash = "sha256:0bf06847a3551e3019fc58c440cffc9a6b73e6e2962c95b52e224f77bbdb50f1", size = 556960, upload-time = "2026-01-09T13:07:55.865Z" }, +] + +[[package]] +name = "pillow" +version = "12.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/21/c2bcdd5906101a30244eaffc1b6e6ce71a31bd0742a01eb89e660ebfac2d/pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5", size = 46987819, upload-time = "2026-04-01T14:46:17.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/be/7482c8a5ebebbc6470b3eb791812fff7d5e0216c2be3827b30b8bb6603ed/pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2d192a155bbcec180f8564f693e6fd9bccff5a7af9b32e2e4bf8c9c69dbad6b5", size = 5308279, upload-time = "2026-04-01T14:43:13.246Z" }, + { url = "https://files.pythonhosted.org/packages/d8/95/0a351b9289c2b5cbde0bacd4a83ebc44023e835490a727b2a3bd60ddc0f4/pillow-12.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3f40b3c5a968281fd507d519e444c35f0ff171237f4fdde090dd60699458421", size = 4695490, upload-time = "2026-04-01T14:43:15.584Z" }, + { url = "https://files.pythonhosted.org/packages/de/af/4e8e6869cbed569d43c416fad3dc4ecb944cb5d9492defaed89ddd6fe871/pillow-12.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:03e7e372d5240cc23e9f07deca4d775c0817bffc641b01e9c3af208dbd300987", size = 6284462, upload-time = "2026-04-01T14:43:18.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/9e/c05e19657fd57841e476be1ab46c4d501bffbadbafdc31a6d665f8b737b6/pillow-12.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b86024e52a1b269467a802258c25521e6d742349d760728092e1bc2d135b4d76", size = 8094744, upload-time = "2026-04-01T14:43:20.716Z" }, + { url = "https://files.pythonhosted.org/packages/2b/54/1789c455ed10176066b6e7e6da1b01e50e36f94ba584dc68d9eebfe9156d/pillow-12.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7371b48c4fa448d20d2714c9a1f775a81155050d383333e0a6c15b1123dda005", size = 6398371, upload-time = "2026-04-01T14:43:23.443Z" }, + { url = "https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62f5409336adb0663b7caa0da5c7d9e7bdbaae9ce761d34669420c2a801b2780", size = 7087215, upload-time = "2026-04-01T14:43:26.758Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f8/2f6825e441d5b1959d2ca5adec984210f1ec086435b0ed5f52c19b3b8a6e/pillow-12.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:01afa7cf67f74f09523699b4e88c73fb55c13346d212a59a2db1f86b0a63e8c5", size = 6509783, upload-time = "2026-04-01T14:43:29.56Z" }, + { url = "https://files.pythonhosted.org/packages/67/f9/029a27095ad20f854f9dba026b3ea6428548316e057e6fc3545409e86651/pillow-12.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc3d34d4a8fbec3e88a79b92e5465e0f9b842b628675850d860b8bd300b159f5", size = 7212112, upload-time = "2026-04-01T14:43:32.091Z" }, + { url = "https://files.pythonhosted.org/packages/be/42/025cfe05d1be22dbfdb4f264fe9de1ccda83f66e4fc3aac94748e784af04/pillow-12.2.0-cp312-cp312-win32.whl", hash = "sha256:58f62cc0f00fd29e64b29f4fd923ffdb3859c9f9e6105bfc37ba1d08994e8940", size = 6378489, upload-time = "2026-04-01T14:43:34.601Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7b/25a221d2c761c6a8ae21bfa3874988ff2583e19cf8a27bf2fee358df7942/pillow-12.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f84204dee22a783350679a0333981df803dac21a0190d706a50475e361c93f5", size = 7084129, upload-time = "2026-04-01T14:43:37.213Z" }, + { url = "https://files.pythonhosted.org/packages/10/e1/542a474affab20fd4a0f1836cb234e8493519da6b76899e30bcc5d990b8b/pillow-12.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:af73337013e0b3b46f175e79492d96845b16126ddf79c438d7ea7ff27783a414", size = 2463612, upload-time = "2026-04-01T14:43:39.421Z" }, + { url = "https://files.pythonhosted.org/packages/4a/01/53d10cf0dbad820a8db274d259a37ba50b88b24768ddccec07355382d5ad/pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8297651f5b5679c19968abefd6bb84d95fe30ef712eb1b2d9b2d31ca61267f4c", size = 4100837, upload-time = "2026-04-01T14:43:41.506Z" }, + { url = "https://files.pythonhosted.org/packages/0f/98/f3a6657ecb698c937f6c76ee564882945f29b79bad496abcba0e84659ec5/pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:50d8520da2a6ce0af445fa6d648c4273c3eeefbc32d7ce049f22e8b5c3daecc2", size = 4176528, upload-time = "2026-04-01T14:43:43.773Z" }, + { url = "https://files.pythonhosted.org/packages/69/bc/8986948f05e3ea490b8442ea1c1d4d990b24a7e43d8a51b2c7d8b1dced36/pillow-12.2.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:766cef22385fa1091258ad7e6216792b156dc16d8d3fa607e7545b2b72061f1c", size = 3640401, upload-time = "2026-04-01T14:43:45.87Z" }, + { url = "https://files.pythonhosted.org/packages/34/46/6c717baadcd62bc8ed51d238d521ab651eaa74838291bda1f86fe1f864c9/pillow-12.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5d2fd0fa6b5d9d1de415060363433f28da8b1526c1c129020435e186794b3795", size = 5308094, upload-time = "2026-04-01T14:43:48.438Z" }, + { url = "https://files.pythonhosted.org/packages/71/43/905a14a8b17fdb1ccb58d282454490662d2cb89a6bfec26af6d3520da5ec/pillow-12.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56b25336f502b6ed02e889f4ece894a72612fe885889a6e8c4c80239ff6e5f5f", size = 4695402, upload-time = "2026-04-01T14:43:51.292Z" }, + { url = "https://files.pythonhosted.org/packages/73/dd/42107efcb777b16fa0393317eac58f5b5cf30e8392e266e76e51cff28c3d/pillow-12.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f1c943e96e85df3d3478f7b691f229887e143f81fedab9b20205349ab04d73ed", size = 6280005, upload-time = "2026-04-01T14:43:54.242Z" }, + { url = "https://files.pythonhosted.org/packages/a8/68/b93e09e5e8549019e61acf49f65b1a8530765a7f812c77a7461bca7e4494/pillow-12.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:03f6fab9219220f041c74aeaa2939ff0062bd5c364ba9ce037197f4c6d498cd9", size = 8090669, upload-time = "2026-04-01T14:43:57.335Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/3ccb54ce8ec4ddd1accd2d89004308b7b0b21c4ac3d20fa70af4760a4330/pillow-12.2.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cdfebd752ec52bf5bb4e35d9c64b40826bc5b40a13df7c3cda20a2c03a0f5ed", size = 6395194, upload-time = "2026-04-01T14:43:59.864Z" }, + { url = "https://files.pythonhosted.org/packages/67/ee/21d4e8536afd1a328f01b359b4d3997b291ffd35a237c877b331c1c3b71c/pillow-12.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eedf4b74eda2b5a4b2b2fb4c006d6295df3bf29e459e198c90ea48e130dc75c3", size = 7082423, upload-time = "2026-04-01T14:44:02.74Z" }, + { url = "https://files.pythonhosted.org/packages/78/5f/e9f86ab0146464e8c133fe85df987ed9e77e08b29d8d35f9f9f4d6f917ba/pillow-12.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:00a2865911330191c0b818c59103b58a5e697cae67042366970a6b6f1b20b7f9", size = 6505667, upload-time = "2026-04-01T14:44:05.381Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1e/409007f56a2fdce61584fd3acbc2bbc259857d555196cedcadc68c015c82/pillow-12.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1e1757442ed87f4912397c6d35a0db6a7b52592156014706f17658ff58bbf795", size = 7208580, upload-time = "2026-04-01T14:44:08.39Z" }, + { url = "https://files.pythonhosted.org/packages/23/c4/7349421080b12fb35414607b8871e9534546c128a11965fd4a7002ccfbee/pillow-12.2.0-cp313-cp313-win32.whl", hash = "sha256:144748b3af2d1b358d41286056d0003f47cb339b8c43a9ea42f5fea4d8c66b6e", size = 6375896, upload-time = "2026-04-01T14:44:11.197Z" }, + { url = "https://files.pythonhosted.org/packages/3f/82/8a3739a5e470b3c6cbb1d21d315800d8e16bff503d1f16b03a4ec3212786/pillow-12.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:390ede346628ccc626e5730107cde16c42d3836b89662a115a921f28440e6a3b", size = 7081266, upload-time = "2026-04-01T14:44:13.947Z" }, + { url = "https://files.pythonhosted.org/packages/c3/25/f968f618a062574294592f668218f8af564830ccebdd1fa6200f598e65c5/pillow-12.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:8023abc91fba39036dbce14a7d6535632f99c0b857807cbbbf21ecc9f4717f06", size = 2463508, upload-time = "2026-04-01T14:44:16.312Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a4/b342930964e3cb4dce5038ae34b0eab4653334995336cd486c5a8c25a00c/pillow-12.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:042db20a421b9bafecc4b84a8b6e444686bd9d836c7fd24542db3e7df7baad9b", size = 5309927, upload-time = "2026-04-01T14:44:18.89Z" }, + { url = "https://files.pythonhosted.org/packages/9f/de/23198e0a65a9cf06123f5435a5d95cea62a635697f8f03d134d3f3a96151/pillow-12.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd025009355c926a84a612fecf58bb315a3f6814b17ead51a8e48d3823d9087f", size = 4698624, upload-time = "2026-04-01T14:44:21.115Z" }, + { url = "https://files.pythonhosted.org/packages/01/a6/1265e977f17d93ea37aa28aa81bad4fa597933879fac2520d24e021c8da3/pillow-12.2.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88ddbc66737e277852913bd1e07c150cc7bb124539f94c4e2df5344494e0a612", size = 6321252, upload-time = "2026-04-01T14:44:23.663Z" }, + { url = "https://files.pythonhosted.org/packages/3c/83/5982eb4a285967baa70340320be9f88e57665a387e3a53a7f0db8231a0cd/pillow-12.2.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d362d1878f00c142b7e1a16e6e5e780f02be8195123f164edf7eddd911eefe7c", size = 8126550, upload-time = "2026-04-01T14:44:26.772Z" }, + { url = "https://files.pythonhosted.org/packages/4e/48/6ffc514adce69f6050d0753b1a18fd920fce8cac87620d5a31231b04bfc5/pillow-12.2.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c727a6d53cb0018aadd8018c2b938376af27914a68a492f59dfcaca650d5eea", size = 6433114, upload-time = "2026-04-01T14:44:29.615Z" }, + { url = "https://files.pythonhosted.org/packages/36/a3/f9a77144231fb8d40ee27107b4463e205fa4677e2ca2548e14da5cf18dce/pillow-12.2.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:efd8c21c98c5cc60653bcb311bef2ce0401642b7ce9d09e03a7da87c878289d4", size = 7115667, upload-time = "2026-04-01T14:44:32.773Z" }, + { url = "https://files.pythonhosted.org/packages/c1/fc/ac4ee3041e7d5a565e1c4fd72a113f03b6394cc72ab7089d27608f8aaccb/pillow-12.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f08483a632889536b8139663db60f6724bfcb443c96f1b18855860d7d5c0fd4", size = 6538966, upload-time = "2026-04-01T14:44:35.252Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a8/27fb307055087f3668f6d0a8ccb636e7431d56ed0750e07a60547b1e083e/pillow-12.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dac8d77255a37e81a2efcbd1fc05f1c15ee82200e6c240d7e127e25e365c39ea", size = 7238241, upload-time = "2026-04-01T14:44:37.875Z" }, + { url = "https://files.pythonhosted.org/packages/ad/4b/926ab182c07fccae9fcb120043464e1ff1564775ec8864f21a0ebce6ac25/pillow-12.2.0-cp313-cp313t-win32.whl", hash = "sha256:ee3120ae9dff32f121610bb08e4313be87e03efeadfc6c0d18f89127e24d0c24", size = 6379592, upload-time = "2026-04-01T14:44:40.336Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c4/f9e476451a098181b30050cc4c9a3556b64c02cf6497ea421ac047e89e4b/pillow-12.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:325ca0528c6788d2a6c3d40e3568639398137346c3d6e66bb61db96b96511c98", size = 7085542, upload-time = "2026-04-01T14:44:43.251Z" }, + { url = "https://files.pythonhosted.org/packages/00/a4/285f12aeacbe2d6dc36c407dfbbe9e96d4a80b0fb710a337f6d2ad978c75/pillow-12.2.0-cp313-cp313t-win_arm64.whl", hash = "sha256:2e5a76d03a6c6dcef67edabda7a52494afa4035021a79c8558e14af25313d453", size = 2465765, upload-time = "2026-04-01T14:44:45.996Z" }, + { url = "https://files.pythonhosted.org/packages/bf/98/4595daa2365416a86cb0d495248a393dfc84e96d62ad080c8546256cb9c0/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:3adc9215e8be0448ed6e814966ecf3d9952f0ea40eb14e89a102b87f450660d8", size = 4100848, upload-time = "2026-04-01T14:44:48.48Z" }, + { url = "https://files.pythonhosted.org/packages/0b/79/40184d464cf89f6663e18dfcf7ca21aae2491fff1a16127681bf1fa9b8cf/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:6a9adfc6d24b10f89588096364cc726174118c62130c817c2837c60cf08a392b", size = 4176515, upload-time = "2026-04-01T14:44:51.353Z" }, + { url = "https://files.pythonhosted.org/packages/b0/63/703f86fd4c422a9cf722833670f4f71418fb116b2853ff7da722ea43f184/pillow-12.2.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:6a6e67ea2e6feda684ed370f9a1c52e7a243631c025ba42149a2cc5934dec295", size = 3640159, upload-time = "2026-04-01T14:44:53.588Z" }, + { url = "https://files.pythonhosted.org/packages/71/e0/fb22f797187d0be2270f83500aab851536101b254bfa1eae10795709d283/pillow-12.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2bb4a8d594eacdfc59d9e5ad972aa8afdd48d584ffd5f13a937a664c3e7db0ed", size = 5312185, upload-time = "2026-04-01T14:44:56.039Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae", size = 4695386, upload-time = "2026-04-01T14:44:58.663Z" }, + { url = "https://files.pythonhosted.org/packages/70/62/98f6b7f0c88b9addd0e87c217ded307b36be024d4ff8869a812b241d1345/pillow-12.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22db17c68434de69d8ecfc2fe821569195c0c373b25cccb9cbdacf2c6e53c601", size = 6280384, upload-time = "2026-04-01T14:45:01.5Z" }, + { url = "https://files.pythonhosted.org/packages/5e/03/688747d2e91cfbe0e64f316cd2e8005698f76ada3130d0194664174fa5de/pillow-12.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7b14cc0106cd9aecda615dd6903840a058b4700fcb817687d0ee4fc8b6e389be", size = 8091599, upload-time = "2026-04-01T14:45:04.5Z" }, + { url = "https://files.pythonhosted.org/packages/f6/35/577e22b936fcdd66537329b33af0b4ccfefaeabd8aec04b266528cddb33c/pillow-12.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cbeb542b2ebc6fcdacabf8aca8c1a97c9b3ad3927d46b8723f9d4f033288a0f", size = 6396021, upload-time = "2026-04-01T14:45:07.117Z" }, + { url = "https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286", size = 7083360, upload-time = "2026-04-01T14:45:09.763Z" }, + { url = "https://files.pythonhosted.org/packages/5e/26/d325f9f56c7e039034897e7380e9cc202b1e368bfd04d4cbe6a441f02885/pillow-12.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9aba9a17b623ef750a4d11b742cbafffeb48a869821252b30ee21b5e91392c50", size = 6507628, upload-time = "2026-04-01T14:45:12.378Z" }, + { url = "https://files.pythonhosted.org/packages/5f/f7/769d5632ffb0988f1c5e7660b3e731e30f7f8ec4318e94d0a5d674eb65a4/pillow-12.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:deede7c263feb25dba4e82ea23058a235dcc2fe1f6021025dc71f2b618e26104", size = 7209321, upload-time = "2026-04-01T14:45:15.122Z" }, + { url = "https://files.pythonhosted.org/packages/6a/7a/c253e3c645cd47f1aceea6a8bacdba9991bf45bb7dfe927f7c893e89c93c/pillow-12.2.0-cp314-cp314-win32.whl", hash = "sha256:632ff19b2778e43162304d50da0181ce24ac5bb8180122cbe1bf4673428328c7", size = 6479723, upload-time = "2026-04-01T14:45:17.797Z" }, + { url = "https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150", size = 7217400, upload-time = "2026-04-01T14:45:20.529Z" }, + { url = "https://files.pythonhosted.org/packages/d6/94/220e46c73065c3e2951bb91c11a1fb636c8c9ad427ac3ce7d7f3359b9b2f/pillow-12.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:b1c1fbd8a5a1af3412a0810d060a78b5136ec0836c8a4ef9aa11807f2a22f4e1", size = 2554835, upload-time = "2026-04-01T14:45:23.162Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ab/1b426a3974cb0e7da5c29ccff4807871d48110933a57207b5a676cccc155/pillow-12.2.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:57850958fe9c751670e49b2cecf6294acc99e562531f4bd317fa5ddee2068463", size = 5314225, upload-time = "2026-04-01T14:45:25.637Z" }, + { url = "https://files.pythonhosted.org/packages/19/1e/dce46f371be2438eecfee2a1960ee2a243bbe5e961890146d2dee1ff0f12/pillow-12.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d5d38f1411c0ed9f97bcb49b7bd59b6b7c314e0e27420e34d99d844b9ce3b6f3", size = 4698541, upload-time = "2026-04-01T14:45:28.355Z" }, + { url = "https://files.pythonhosted.org/packages/55/c3/7fbecf70adb3a0c33b77a300dc52e424dc22ad8cdc06557a2e49523b703d/pillow-12.2.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c0a9f29ca8e79f09de89293f82fc9b0270bb4af1d58bc98f540cc4aedf03166", size = 6322251, upload-time = "2026-04-01T14:45:30.924Z" }, + { url = "https://files.pythonhosted.org/packages/1c/3c/7fbc17cfb7e4fe0ef1642e0abc17fc6c94c9f7a16be41498e12e2ba60408/pillow-12.2.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1610dd6c61621ae1cf811bef44d77e149ce3f7b95afe66a4512f8c59f25d9ebe", size = 8127807, upload-time = "2026-04-01T14:45:33.908Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c3/a8ae14d6defd2e448493ff512fae903b1e9bd40b72efb6ec55ce0048c8ce/pillow-12.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a34329707af4f73cf1782a36cd2289c0368880654a2c11f027bcee9052d35dd", size = 6433935, upload-time = "2026-04-01T14:45:36.623Z" }, + { url = "https://files.pythonhosted.org/packages/6e/32/2880fb3a074847ac159d8f902cb43278a61e85f681661e7419e6596803ed/pillow-12.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e9c4f5b3c546fa3458a29ab22646c1c6c787ea8f5ef51300e5a60300736905e", size = 7116720, upload-time = "2026-04-01T14:45:39.258Z" }, + { url = "https://files.pythonhosted.org/packages/46/87/495cc9c30e0129501643f24d320076f4cc54f718341df18cc70ec94c44e1/pillow-12.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fb043ee2f06b41473269765c2feae53fc2e2fbf96e5e22ca94fb5ad677856f06", size = 6540498, upload-time = "2026-04-01T14:45:41.879Z" }, + { url = "https://files.pythonhosted.org/packages/18/53/773f5edca692009d883a72211b60fdaf8871cbef075eaa9d577f0a2f989e/pillow-12.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f278f034eb75b4e8a13a54a876cc4a5ab39173d2cdd93a638e1b467fc545ac43", size = 7239413, upload-time = "2026-04-01T14:45:44.705Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e4/4b64a97d71b2a83158134abbb2f5bd3f8a2ea691361282f010998f339ec7/pillow-12.2.0-cp314-cp314t-win32.whl", hash = "sha256:6bb77b2dcb06b20f9f4b4a8454caa581cd4dd0643a08bacf821216a16d9c8354", size = 6482084, upload-time = "2026-04-01T14:45:47.568Z" }, + { url = "https://files.pythonhosted.org/packages/ba/13/306d275efd3a3453f72114b7431c877d10b1154014c1ebbedd067770d629/pillow-12.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6562ace0d3fb5f20ed7290f1f929cae41b25ae29528f2af1722966a0a02e2aa1", size = 7225152, upload-time = "2026-04-01T14:45:50.032Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6e/cf826fae916b8658848d7b9f38d88da6396895c676e8086fc0988073aaf8/pillow-12.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:aa88ccfe4e32d362816319ed727a004423aab09c5cea43c01a4b435643fa34eb", size = 2556579, upload-time = "2026-04-01T14:45:52.529Z" }, +] + +[[package]] +name = "propcache" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d", size = 46442, upload-time = "2025-10-08T19:49:02.291Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/0f/f17b1b2b221d5ca28b4b876e8bb046ac40466513960646bda8e1853cdfa2/propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2", size = 80061, upload-time = "2025-10-08T19:46:46.075Z" }, + { url = "https://files.pythonhosted.org/packages/76/47/8ccf75935f51448ba9a16a71b783eb7ef6b9ee60f5d14c7f8a8a79fbeed7/propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403", size = 46037, upload-time = "2025-10-08T19:46:47.23Z" }, + { url = "https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207", size = 47324, upload-time = "2025-10-08T19:46:48.384Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d3/6c7ee328b39a81ee877c962469f1e795f9db87f925251efeb0545e0020d0/propcache-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72", size = 225505, upload-time = "2025-10-08T19:46:50.055Z" }, + { url = "https://files.pythonhosted.org/packages/01/5d/1c53f4563490b1d06a684742cc6076ef944bc6457df6051b7d1a877c057b/propcache-0.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367", size = 230242, upload-time = "2025-10-08T19:46:51.815Z" }, + { url = "https://files.pythonhosted.org/packages/20/e1/ce4620633b0e2422207c3cb774a0ee61cac13abc6217763a7b9e2e3f4a12/propcache-0.4.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4", size = 238474, upload-time = "2025-10-08T19:46:53.208Z" }, + { url = "https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf", size = 221575, upload-time = "2025-10-08T19:46:54.511Z" }, + { url = "https://files.pythonhosted.org/packages/6e/a5/8a5e8678bcc9d3a1a15b9a29165640d64762d424a16af543f00629c87338/propcache-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3", size = 216736, upload-time = "2025-10-08T19:46:56.212Z" }, + { url = "https://files.pythonhosted.org/packages/f1/63/b7b215eddeac83ca1c6b934f89d09a625aa9ee4ba158338854c87210cc36/propcache-0.4.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778", size = 213019, upload-time = "2025-10-08T19:46:57.595Z" }, + { url = "https://files.pythonhosted.org/packages/57/74/f580099a58c8af587cac7ba19ee7cb418506342fbbe2d4a4401661cca886/propcache-0.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6", size = 220376, upload-time = "2025-10-08T19:46:59.067Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ee/542f1313aff7eaf19c2bb758c5d0560d2683dac001a1c96d0774af799843/propcache-0.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9", size = 226988, upload-time = "2025-10-08T19:47:00.544Z" }, + { url = "https://files.pythonhosted.org/packages/8f/18/9c6b015dd9c6930f6ce2229e1f02fb35298b847f2087ea2b436a5bfa7287/propcache-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75", size = 215615, upload-time = "2025-10-08T19:47:01.968Z" }, + { url = "https://files.pythonhosted.org/packages/80/9e/e7b85720b98c45a45e1fca6a177024934dc9bc5f4d5dd04207f216fc33ed/propcache-0.4.1-cp312-cp312-win32.whl", hash = "sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8", size = 38066, upload-time = "2025-10-08T19:47:03.503Z" }, + { url = "https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db", size = 41655, upload-time = "2025-10-08T19:47:04.973Z" }, + { url = "https://files.pythonhosted.org/packages/68/ab/6b5c191bb5de08036a8c697b265d4ca76148efb10fa162f14af14fb5f076/propcache-0.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1", size = 37789, upload-time = "2025-10-08T19:47:06.077Z" }, + { url = "https://files.pythonhosted.org/packages/bf/df/6d9c1b6ac12b003837dde8a10231a7344512186e87b36e855bef32241942/propcache-0.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf", size = 77750, upload-time = "2025-10-08T19:47:07.648Z" }, + { url = "https://files.pythonhosted.org/packages/8b/e8/677a0025e8a2acf07d3418a2e7ba529c9c33caf09d3c1f25513023c1db56/propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311", size = 44780, upload-time = "2025-10-08T19:47:08.851Z" }, + { url = "https://files.pythonhosted.org/packages/89/a4/92380f7ca60f99ebae761936bc48a72a639e8a47b29050615eef757cb2a7/propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74", size = 46308, upload-time = "2025-10-08T19:47:09.982Z" }, + { url = "https://files.pythonhosted.org/packages/2d/48/c5ac64dee5262044348d1d78a5f85dd1a57464a60d30daee946699963eb3/propcache-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe", size = 208182, upload-time = "2025-10-08T19:47:11.319Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0c/cd762dd011a9287389a6a3eb43aa30207bde253610cca06824aeabfe9653/propcache-0.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af", size = 211215, upload-time = "2025-10-08T19:47:13.146Z" }, + { url = "https://files.pythonhosted.org/packages/30/3e/49861e90233ba36890ae0ca4c660e95df565b2cd15d4a68556ab5865974e/propcache-0.4.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c", size = 218112, upload-time = "2025-10-08T19:47:14.913Z" }, + { url = "https://files.pythonhosted.org/packages/f1/8b/544bc867e24e1bd48f3118cecd3b05c694e160a168478fa28770f22fd094/propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f", size = 204442, upload-time = "2025-10-08T19:47:16.277Z" }, + { url = "https://files.pythonhosted.org/packages/50/a6/4282772fd016a76d3e5c0df58380a5ea64900afd836cec2c2f662d1b9bb3/propcache-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1", size = 199398, upload-time = "2025-10-08T19:47:17.962Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ec/d8a7cd406ee1ddb705db2139f8a10a8a427100347bd698e7014351c7af09/propcache-0.4.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24", size = 196920, upload-time = "2025-10-08T19:47:19.355Z" }, + { url = "https://files.pythonhosted.org/packages/f6/6c/f38ab64af3764f431e359f8baf9e0a21013e24329e8b85d2da32e8ed07ca/propcache-0.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa", size = 203748, upload-time = "2025-10-08T19:47:21.338Z" }, + { url = "https://files.pythonhosted.org/packages/d6/e3/fa846bd70f6534d647886621388f0a265254d30e3ce47e5c8e6e27dbf153/propcache-0.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61", size = 205877, upload-time = "2025-10-08T19:47:23.059Z" }, + { url = "https://files.pythonhosted.org/packages/e2/39/8163fc6f3133fea7b5f2827e8eba2029a0277ab2c5beee6c1db7b10fc23d/propcache-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66", size = 199437, upload-time = "2025-10-08T19:47:24.445Z" }, + { url = "https://files.pythonhosted.org/packages/93/89/caa9089970ca49c7c01662bd0eeedfe85494e863e8043565aeb6472ce8fe/propcache-0.4.1-cp313-cp313-win32.whl", hash = "sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81", size = 37586, upload-time = "2025-10-08T19:47:25.736Z" }, + { url = "https://files.pythonhosted.org/packages/f5/ab/f76ec3c3627c883215b5c8080debb4394ef5a7a29be811f786415fc1e6fd/propcache-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e", size = 40790, upload-time = "2025-10-08T19:47:26.847Z" }, + { url = "https://files.pythonhosted.org/packages/59/1b/e71ae98235f8e2ba5004d8cb19765a74877abf189bc53fc0c80d799e56c3/propcache-0.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1", size = 37158, upload-time = "2025-10-08T19:47:27.961Z" }, + { url = "https://files.pythonhosted.org/packages/83/ce/a31bbdfc24ee0dcbba458c8175ed26089cf109a55bbe7b7640ed2470cfe9/propcache-0.4.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b", size = 81451, upload-time = "2025-10-08T19:47:29.445Z" }, + { url = "https://files.pythonhosted.org/packages/25/9c/442a45a470a68456e710d96cacd3573ef26a1d0a60067e6a7d5e655621ed/propcache-0.4.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566", size = 46374, upload-time = "2025-10-08T19:47:30.579Z" }, + { url = "https://files.pythonhosted.org/packages/f4/bf/b1d5e21dbc3b2e889ea4327044fb16312a736d97640fb8b6aa3f9c7b3b65/propcache-0.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835", size = 48396, upload-time = "2025-10-08T19:47:31.79Z" }, + { url = "https://files.pythonhosted.org/packages/f4/04/5b4c54a103d480e978d3c8a76073502b18db0c4bc17ab91b3cb5092ad949/propcache-0.4.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e", size = 275950, upload-time = "2025-10-08T19:47:33.481Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c1/86f846827fb969c4b78b0af79bba1d1ea2156492e1b83dea8b8a6ae27395/propcache-0.4.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859", size = 273856, upload-time = "2025-10-08T19:47:34.906Z" }, + { url = "https://files.pythonhosted.org/packages/36/1d/fc272a63c8d3bbad6878c336c7a7dea15e8f2d23a544bda43205dfa83ada/propcache-0.4.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b", size = 280420, upload-time = "2025-10-08T19:47:36.338Z" }, + { url = "https://files.pythonhosted.org/packages/07/0c/01f2219d39f7e53d52e5173bcb09c976609ba30209912a0680adfb8c593a/propcache-0.4.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0", size = 263254, upload-time = "2025-10-08T19:47:37.692Z" }, + { url = "https://files.pythonhosted.org/packages/2d/18/cd28081658ce597898f0c4d174d4d0f3c5b6d4dc27ffafeef835c95eb359/propcache-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af", size = 261205, upload-time = "2025-10-08T19:47:39.659Z" }, + { url = "https://files.pythonhosted.org/packages/7a/71/1f9e22eb8b8316701c2a19fa1f388c8a3185082607da8e406a803c9b954e/propcache-0.4.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393", size = 247873, upload-time = "2025-10-08T19:47:41.084Z" }, + { url = "https://files.pythonhosted.org/packages/4a/65/3d4b61f36af2b4eddba9def857959f1016a51066b4f1ce348e0cf7881f58/propcache-0.4.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874", size = 262739, upload-time = "2025-10-08T19:47:42.51Z" }, + { url = "https://files.pythonhosted.org/packages/2a/42/26746ab087faa77c1c68079b228810436ccd9a5ce9ac85e2b7307195fd06/propcache-0.4.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7", size = 263514, upload-time = "2025-10-08T19:47:43.927Z" }, + { url = "https://files.pythonhosted.org/packages/94/13/630690fe201f5502d2403dd3cfd451ed8858fe3c738ee88d095ad2ff407b/propcache-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1", size = 257781, upload-time = "2025-10-08T19:47:45.448Z" }, + { url = "https://files.pythonhosted.org/packages/92/f7/1d4ec5841505f423469efbfc381d64b7b467438cd5a4bbcbb063f3b73d27/propcache-0.4.1-cp313-cp313t-win32.whl", hash = "sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717", size = 41396, upload-time = "2025-10-08T19:47:47.202Z" }, + { url = "https://files.pythonhosted.org/packages/48/f0/615c30622316496d2cbbc29f5985f7777d3ada70f23370608c1d3e081c1f/propcache-0.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37", size = 44897, upload-time = "2025-10-08T19:47:48.336Z" }, + { url = "https://files.pythonhosted.org/packages/fd/ca/6002e46eccbe0e33dcd4069ef32f7f1c9e243736e07adca37ae8c4830ec3/propcache-0.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a", size = 39789, upload-time = "2025-10-08T19:47:49.876Z" }, + { url = "https://files.pythonhosted.org/packages/8e/5c/bca52d654a896f831b8256683457ceddd490ec18d9ec50e97dfd8fc726a8/propcache-0.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12", size = 78152, upload-time = "2025-10-08T19:47:51.051Z" }, + { url = "https://files.pythonhosted.org/packages/65/9b/03b04e7d82a5f54fb16113d839f5ea1ede58a61e90edf515f6577c66fa8f/propcache-0.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c", size = 44869, upload-time = "2025-10-08T19:47:52.594Z" }, + { url = "https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded", size = 46596, upload-time = "2025-10-08T19:47:54.073Z" }, + { url = "https://files.pythonhosted.org/packages/86/bd/47816020d337f4a746edc42fe8d53669965138f39ee117414c7d7a340cfe/propcache-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641", size = 206981, upload-time = "2025-10-08T19:47:55.715Z" }, + { url = "https://files.pythonhosted.org/packages/df/f6/c5fa1357cc9748510ee55f37173eb31bfde6d94e98ccd9e6f033f2fc06e1/propcache-0.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4", size = 211490, upload-time = "2025-10-08T19:47:57.499Z" }, + { url = "https://files.pythonhosted.org/packages/80/1e/e5889652a7c4a3846683401a48f0f2e5083ce0ec1a8a5221d8058fbd1adf/propcache-0.4.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44", size = 215371, upload-time = "2025-10-08T19:47:59.317Z" }, + { url = "https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d", size = 201424, upload-time = "2025-10-08T19:48:00.67Z" }, + { url = "https://files.pythonhosted.org/packages/27/73/033d63069b57b0812c8bd19f311faebeceb6ba31b8f32b73432d12a0b826/propcache-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b", size = 197566, upload-time = "2025-10-08T19:48:02.604Z" }, + { url = "https://files.pythonhosted.org/packages/dc/89/ce24f3dc182630b4e07aa6d15f0ff4b14ed4b9955fae95a0b54c58d66c05/propcache-0.4.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e", size = 193130, upload-time = "2025-10-08T19:48:04.499Z" }, + { url = "https://files.pythonhosted.org/packages/a9/24/ef0d5fd1a811fb5c609278d0209c9f10c35f20581fcc16f818da959fc5b4/propcache-0.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f", size = 202625, upload-time = "2025-10-08T19:48:06.213Z" }, + { url = "https://files.pythonhosted.org/packages/f5/02/98ec20ff5546f68d673df2f7a69e8c0d076b5abd05ca882dc7ee3a83653d/propcache-0.4.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49", size = 204209, upload-time = "2025-10-08T19:48:08.432Z" }, + { url = "https://files.pythonhosted.org/packages/a0/87/492694f76759b15f0467a2a93ab68d32859672b646aa8a04ce4864e7932d/propcache-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144", size = 197797, upload-time = "2025-10-08T19:48:09.968Z" }, + { url = "https://files.pythonhosted.org/packages/ee/36/66367de3575db1d2d3f3d177432bd14ee577a39d3f5d1b3d5df8afe3b6e2/propcache-0.4.1-cp314-cp314-win32.whl", hash = "sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f", size = 38140, upload-time = "2025-10-08T19:48:11.232Z" }, + { url = "https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153", size = 41257, upload-time = "2025-10-08T19:48:12.707Z" }, + { url = "https://files.pythonhosted.org/packages/34/5e/63bd5896c3fec12edcbd6f12508d4890d23c265df28c74b175e1ef9f4f3b/propcache-0.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992", size = 38097, upload-time = "2025-10-08T19:48:13.923Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/9ff785d787ccf9bbb3f3106f79884a130951436f58392000231b4c737c80/propcache-0.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f", size = 81455, upload-time = "2025-10-08T19:48:15.16Z" }, + { url = "https://files.pythonhosted.org/packages/90/85/2431c10c8e7ddb1445c1f7c4b54d886e8ad20e3c6307e7218f05922cad67/propcache-0.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393", size = 46372, upload-time = "2025-10-08T19:48:16.424Z" }, + { url = "https://files.pythonhosted.org/packages/01/20/b0972d902472da9bcb683fa595099911f4d2e86e5683bcc45de60dd05dc3/propcache-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0", size = 48411, upload-time = "2025-10-08T19:48:17.577Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e3/7dc89f4f21e8f99bad3d5ddb3a3389afcf9da4ac69e3deb2dcdc96e74169/propcache-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a", size = 275712, upload-time = "2025-10-08T19:48:18.901Z" }, + { url = "https://files.pythonhosted.org/packages/20/67/89800c8352489b21a8047c773067644e3897f02ecbbd610f4d46b7f08612/propcache-0.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be", size = 273557, upload-time = "2025-10-08T19:48:20.762Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a1/b52b055c766a54ce6d9c16d9aca0cad8059acd9637cdf8aa0222f4a026ef/propcache-0.4.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc", size = 280015, upload-time = "2025-10-08T19:48:22.592Z" }, + { url = "https://files.pythonhosted.org/packages/48/c8/33cee30bd890672c63743049f3c9e4be087e6780906bfc3ec58528be59c1/propcache-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a", size = 262880, upload-time = "2025-10-08T19:48:23.947Z" }, + { url = "https://files.pythonhosted.org/packages/0c/b1/8f08a143b204b418285c88b83d00edbd61afbc2c6415ffafc8905da7038b/propcache-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89", size = 260938, upload-time = "2025-10-08T19:48:25.656Z" }, + { url = "https://files.pythonhosted.org/packages/cf/12/96e4664c82ca2f31e1c8dff86afb867348979eb78d3cb8546a680287a1e9/propcache-0.4.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726", size = 247641, upload-time = "2025-10-08T19:48:27.207Z" }, + { url = "https://files.pythonhosted.org/packages/18/ed/e7a9cfca28133386ba52278136d42209d3125db08d0a6395f0cba0c0285c/propcache-0.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367", size = 262510, upload-time = "2025-10-08T19:48:28.65Z" }, + { url = "https://files.pythonhosted.org/packages/f5/76/16d8bf65e8845dd62b4e2b57444ab81f07f40caa5652b8969b87ddcf2ef6/propcache-0.4.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36", size = 263161, upload-time = "2025-10-08T19:48:30.133Z" }, + { url = "https://files.pythonhosted.org/packages/e7/70/c99e9edb5d91d5ad8a49fa3c1e8285ba64f1476782fed10ab251ff413ba1/propcache-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455", size = 257393, upload-time = "2025-10-08T19:48:31.567Z" }, + { url = "https://files.pythonhosted.org/packages/08/02/87b25304249a35c0915d236575bc3574a323f60b47939a2262b77632a3ee/propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85", size = 42546, upload-time = "2025-10-08T19:48:32.872Z" }, + { url = "https://files.pythonhosted.org/packages/cb/ef/3c6ecf8b317aa982f309835e8f96987466123c6e596646d4e6a1dfcd080f/propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1", size = 46259, upload-time = "2025-10-08T19:48:34.226Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2d/346e946d4951f37eca1e4f55be0f0174c52cd70720f84029b02f296f4a38/propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9", size = 40428, upload-time = "2025-10-08T19:48:35.441Z" }, + { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "pyarrow" +version = "23.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/88/22/134986a4cc224d593c1afde5494d18ff629393d74cc2eddb176669f234a4/pyarrow-23.0.1.tar.gz", hash = "sha256:b8c5873e33440b2bc2f4a79d2b47017a89c5a24116c055625e6f2ee50523f019", size = 1167336, upload-time = "2026-02-16T10:14:12.39Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/4b/4166bb5abbfe6f750fc60ad337c43ecf61340fa52ab386da6e8dbf9e63c4/pyarrow-23.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f4b0dbfa124c0bb161f8b5ebb40f1a680b70279aa0c9901d44a2b5a20806039f", size = 34214575, upload-time = "2026-02-16T10:09:56.225Z" }, + { url = "https://files.pythonhosted.org/packages/e1/da/3f941e3734ac8088ea588b53e860baeddac8323ea40ce22e3d0baa865cc9/pyarrow-23.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:7707d2b6673f7de054e2e83d59f9e805939038eebe1763fe811ee8fa5c0cd1a7", size = 35832540, upload-time = "2026-02-16T10:10:03.428Z" }, + { url = "https://files.pythonhosted.org/packages/88/7c/3d841c366620e906d54430817531b877ba646310296df42ef697308c2705/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:86ff03fb9f1a320266e0de855dee4b17da6794c595d207f89bba40d16b5c78b9", size = 44470940, upload-time = "2026-02-16T10:10:10.704Z" }, + { url = "https://files.pythonhosted.org/packages/2c/a5/da83046273d990f256cb79796a190bbf7ec999269705ddc609403f8c6b06/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:813d99f31275919c383aab17f0f455a04f5a429c261cc411b1e9a8f5e4aaaa05", size = 47586063, upload-time = "2026-02-16T10:10:17.95Z" }, + { url = "https://files.pythonhosted.org/packages/5b/3c/b7d2ebcff47a514f47f9da1e74b7949138c58cfeb108cdd4ee62f43f0cf3/pyarrow-23.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bf5842f960cddd2ef757d486041d57c96483efc295a8c4a0e20e704cbbf39c67", size = 48173045, upload-time = "2026-02-16T10:10:25.363Z" }, + { url = "https://files.pythonhosted.org/packages/43/b2/b40961262213beaba6acfc88698eb773dfce32ecdf34d19291db94c2bd73/pyarrow-23.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:564baf97c858ecc03ec01a41062e8f4698abc3e6e2acd79c01c2e97880a19730", size = 50621741, upload-time = "2026-02-16T10:10:33.477Z" }, + { url = "https://files.pythonhosted.org/packages/f6/70/1fdda42d65b28b078e93d75d371b2185a61da89dda4def8ba6ba41ebdeb4/pyarrow-23.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:07deae7783782ac7250989a7b2ecde9b3c343a643f82e8a4df03d93b633006f0", size = 27620678, upload-time = "2026-02-16T10:10:39.31Z" }, + { url = "https://files.pythonhosted.org/packages/47/10/2cbe4c6f0fb83d2de37249567373d64327a5e4d8db72f486db42875b08f6/pyarrow-23.0.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6b8fda694640b00e8af3c824f99f789e836720aa8c9379fb435d4c4953a756b8", size = 34210066, upload-time = "2026-02-16T10:10:45.487Z" }, + { url = "https://files.pythonhosted.org/packages/cb/4f/679fa7e84dadbaca7a65f7cdba8d6c83febbd93ca12fa4adf40ba3b6362b/pyarrow-23.0.1-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:8ff51b1addc469b9444b7c6f3548e19dc931b172ab234e995a60aea9f6e6025f", size = 35825526, upload-time = "2026-02-16T10:10:52.266Z" }, + { url = "https://files.pythonhosted.org/packages/f9/63/d2747d930882c9d661e9398eefc54f15696547b8983aaaf11d4a2e8b5426/pyarrow-23.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:71c5be5cbf1e1cb6169d2a0980850bccb558ddc9b747b6206435313c47c37677", size = 44473279, upload-time = "2026-02-16T10:11:01.557Z" }, + { url = "https://files.pythonhosted.org/packages/b3/93/10a48b5e238de6d562a411af6467e71e7aedbc9b87f8d3a35f1560ae30fb/pyarrow-23.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:9b6f4f17b43bc39d56fec96e53fe89d94bac3eb134137964371b45352d40d0c2", size = 47585798, upload-time = "2026-02-16T10:11:09.401Z" }, + { url = "https://files.pythonhosted.org/packages/5c/20/476943001c54ef078dbf9542280e22741219a184a0632862bca4feccd666/pyarrow-23.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fc13fc6c403d1337acab46a2c4346ca6c9dec5780c3c697cf8abfd5e19b6b37", size = 48179446, upload-time = "2026-02-16T10:11:17.781Z" }, + { url = "https://files.pythonhosted.org/packages/4b/b6/5dd0c47b335fcd8edba9bfab78ad961bd0fd55ebe53468cc393f45e0be60/pyarrow-23.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5c16ed4f53247fa3ffb12a14d236de4213a4415d127fe9cebed33d51671113e2", size = 50623972, upload-time = "2026-02-16T10:11:26.185Z" }, + { url = "https://files.pythonhosted.org/packages/d5/09/a532297c9591a727d67760e2e756b83905dd89adb365a7f6e9c72578bcc1/pyarrow-23.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:cecfb12ef629cf6be0b1887f9f86463b0dd3dc3195ae6224e74006be4736035a", size = 27540749, upload-time = "2026-02-16T10:12:23.297Z" }, + { url = "https://files.pythonhosted.org/packages/a5/8e/38749c4b1303e6ae76b3c80618f84861ae0c55dd3c2273842ea6f8258233/pyarrow-23.0.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:29f7f7419a0e30264ea261fdc0e5fe63ce5a6095003db2945d7cd78df391a7e1", size = 34471544, upload-time = "2026-02-16T10:11:32.535Z" }, + { url = "https://files.pythonhosted.org/packages/a3/73/f237b2bc8c669212f842bcfd842b04fc8d936bfc9d471630569132dc920d/pyarrow-23.0.1-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:33d648dc25b51fd8055c19e4261e813dfc4d2427f068bcecc8b53d01b81b0500", size = 35949911, upload-time = "2026-02-16T10:11:39.813Z" }, + { url = "https://files.pythonhosted.org/packages/0c/86/b912195eee0903b5611bf596833def7d146ab2d301afeb4b722c57ffc966/pyarrow-23.0.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:cd395abf8f91c673dd3589cadc8cc1ee4e8674fa61b2e923c8dd215d9c7d1f41", size = 44520337, upload-time = "2026-02-16T10:11:47.764Z" }, + { url = "https://files.pythonhosted.org/packages/69/c2/f2a717fb824f62d0be952ea724b4f6f9372a17eed6f704b5c9526f12f2f1/pyarrow-23.0.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:00be9576d970c31defb5c32eb72ef585bf600ef6d0a82d5eccaae96639cf9d07", size = 47548944, upload-time = "2026-02-16T10:11:56.607Z" }, + { url = "https://files.pythonhosted.org/packages/84/a7/90007d476b9f0dc308e3bc57b832d004f848fd6c0da601375d20d92d1519/pyarrow-23.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c2139549494445609f35a5cda4eb94e2c9e4d704ce60a095b342f82460c73a83", size = 48236269, upload-time = "2026-02-16T10:12:04.47Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3f/b16fab3e77709856eb6ac328ce35f57a6d4a18462c7ca5186ef31b45e0e0/pyarrow-23.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7044b442f184d84e2351e5084600f0d7343d6117aabcbc1ac78eb1ae11eb4125", size = 50604794, upload-time = "2026-02-16T10:12:11.797Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a1/22df0620a9fac31d68397a75465c344e83c3dfe521f7612aea33e27ab6c0/pyarrow-23.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:a35581e856a2fafa12f3f54fce4331862b1cfb0bef5758347a858a4aa9d6bae8", size = 27660642, upload-time = "2026-02-16T10:12:17.746Z" }, + { url = "https://files.pythonhosted.org/packages/8d/1b/6da9a89583ce7b23ac611f183ae4843cd3a6cf54f079549b0e8c14031e73/pyarrow-23.0.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:5df1161da23636a70838099d4aaa65142777185cc0cdba4037a18cee7d8db9ca", size = 34238755, upload-time = "2026-02-16T10:12:32.819Z" }, + { url = "https://files.pythonhosted.org/packages/ae/b5/d58a241fbe324dbaeb8df07be6af8752c846192d78d2272e551098f74e88/pyarrow-23.0.1-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:fa8e51cb04b9f8c9c5ace6bab63af9a1f88d35c0d6cbf53e8c17c098552285e1", size = 35847826, upload-time = "2026-02-16T10:12:38.949Z" }, + { url = "https://files.pythonhosted.org/packages/54/a5/8cbc83f04aba433ca7b331b38f39e000efd9f0c7ce47128670e737542996/pyarrow-23.0.1-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:0b95a3994f015be13c63148fef8832e8a23938128c185ee951c98908a696e0eb", size = 44536859, upload-time = "2026-02-16T10:12:45.467Z" }, + { url = "https://files.pythonhosted.org/packages/36/2e/c0f017c405fcdc252dbccafbe05e36b0d0eb1ea9a958f081e01c6972927f/pyarrow-23.0.1-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:4982d71350b1a6e5cfe1af742c53dfb759b11ce14141870d05d9e540d13bc5d1", size = 47614443, upload-time = "2026-02-16T10:12:55.525Z" }, + { url = "https://files.pythonhosted.org/packages/af/6b/2314a78057912f5627afa13ba43809d9d653e6630859618b0fd81a4e0759/pyarrow-23.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c250248f1fe266db627921c89b47b7c06fee0489ad95b04d50353537d74d6886", size = 48232991, upload-time = "2026-02-16T10:13:04.729Z" }, + { url = "https://files.pythonhosted.org/packages/40/f2/1bcb1d3be3460832ef3370d621142216e15a2c7c62602a4ea19ec240dd64/pyarrow-23.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f4763b83c11c16e5f4c15601ba6dfa849e20723b46aa2617cb4bffe8768479f", size = 50645077, upload-time = "2026-02-16T10:13:14.147Z" }, + { url = "https://files.pythonhosted.org/packages/eb/3f/b1da7b61cd66566a4d4c8383d376c606d1c34a906c3f1cb35c479f59d1aa/pyarrow-23.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:3a4c85ef66c134161987c17b147d6bffdca4566f9a4c1d81a0a01cdf08414ea5", size = 28234271, upload-time = "2026-02-16T10:14:09.397Z" }, + { url = "https://files.pythonhosted.org/packages/b5/78/07f67434e910a0f7323269be7bfbf58699bd0c1d080b18a1ab49ba943fe8/pyarrow-23.0.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:17cd28e906c18af486a499422740298c52d7c6795344ea5002a7720b4eadf16d", size = 34488692, upload-time = "2026-02-16T10:13:21.541Z" }, + { url = "https://files.pythonhosted.org/packages/50/76/34cf7ae93ece1f740a04910d9f7e80ba166b9b4ab9596a953e9e62b90fe1/pyarrow-23.0.1-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:76e823d0e86b4fb5e1cf4a58d293036e678b5a4b03539be933d3b31f9406859f", size = 35964383, upload-time = "2026-02-16T10:13:28.63Z" }, + { url = "https://files.pythonhosted.org/packages/46/90/459b827238936d4244214be7c684e1b366a63f8c78c380807ae25ed92199/pyarrow-23.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:a62e1899e3078bf65943078b3ad2a6ddcacf2373bc06379aac61b1e548a75814", size = 44538119, upload-time = "2026-02-16T10:13:35.506Z" }, + { url = "https://files.pythonhosted.org/packages/28/a1/93a71ae5881e99d1f9de1d4554a87be37da11cd6b152239fb5bd924fdc64/pyarrow-23.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:df088e8f640c9fae3b1f495b3c64755c4e719091caf250f3a74d095ddf3c836d", size = 47571199, upload-time = "2026-02-16T10:13:42.504Z" }, + { url = "https://files.pythonhosted.org/packages/88/a3/d2c462d4ef313521eaf2eff04d204ac60775263f1fb08c374b543f79f610/pyarrow-23.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:46718a220d64677c93bc243af1d44b55998255427588e400677d7192671845c7", size = 48259435, upload-time = "2026-02-16T10:13:49.226Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f1/11a544b8c3d38a759eb3fbb022039117fd633e9a7b19e4841cc3da091915/pyarrow-23.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a09f3876e87f48bc2f13583ab551f0379e5dfb83210391e68ace404181a20690", size = 50629149, upload-time = "2026-02-16T10:13:57.238Z" }, + { url = "https://files.pythonhosted.org/packages/50/f2/c0e76a0b451ffdf0cf788932e182758eb7558953f4f27f1aff8e2518b653/pyarrow-23.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:527e8d899f14bd15b740cd5a54ad56b7f98044955373a17179d5956ddb93d9ce", size = 28365807, upload-time = "2026-02-16T10:14:03.892Z" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, +] + +[[package]] +name = "pytorch-wavelet" +version = "1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "torch" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/52/c86626a5ebc3df52dde8f8b224d1bad683a1da1dc9ffe95469a63f9e418e/pytorch_wavelet-1.2.tar.gz", hash = "sha256:c75caa0163f2089fdf89547c02d14b2bd3bf46c18d5ef3c830db8320ad8f0139", size = 2397, upload-time = "2020-12-16T23:08:43.492Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/2b/d25ef73e9a801b06dd7e10e3911b03023a48fac349dd375314c951e9f4e6/pytorch_wavelet-1.2-py3-none-any.whl", hash = "sha256:f74cd0220aeb2a638afc070c4bcc62c2a8e01d556491f3f8a4c7a2cea8b50799", size = 2769, upload-time = "2020-12-16T23:08:42.464Z" }, +] + +[[package]] +name = "pytorch-wavelets" +version = "1.3.0" +source = { git = "https://github.com/fbcotter/pytorch_wavelets.git#9a0c507f04f43c5397e384bb6be8340169b2fd9a" } +dependencies = [ + { name = "numpy" }, + { name = "six" }, + { name = "torch" }, +] + +[[package]] +name = "pywavelets" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/75/50581633d199812205ea8cdd0f6d52f12a624886b74bf1486335b67f01ff/pywavelets-1.9.0.tar.gz", hash = "sha256:148d12203377772bea452a59211d98649c8ee4a05eff019a9021853a36babdc8", size = 3938340, upload-time = "2025-08-04T16:20:04.978Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/37/3fda13fb2518fdd306528382d6b18c116ceafefff0a7dccd28f1034f4dd2/pywavelets-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30baa0788317d3c938560c83fe4fc43817342d06e6c9662a440f73ba3fb25c9b", size = 4320835, upload-time = "2025-08-04T16:19:04.855Z" }, + { url = "https://files.pythonhosted.org/packages/36/65/a5549325daafc3eae4b52de076798839eaf529a07218f8fb18cccefe76a1/pywavelets-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:df7436a728339696a7aa955c020ae65c85b0d9d2b5ff5b4cf4551f5d4c50f2c7", size = 4290469, upload-time = "2025-08-04T16:19:06.178Z" }, + { url = "https://files.pythonhosted.org/packages/05/85/901bb756d37dfa56baa26ef4a3577aecfe9c55f50f51366fede322f8c91d/pywavelets-1.9.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:07b26526db2476974581274c43a9c2447c917418c6bd03c8d305ad2a5cd9fac3", size = 4437717, upload-time = "2025-08-04T16:19:07.514Z" }, + { url = "https://files.pythonhosted.org/packages/0f/34/0f54dd9c288941294898877008bcb5c07012340cc9c5db9cff1bd185d449/pywavelets-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:573b650805d2f3c981a0e5ae95191c781a722022c37a0f6eba3fa7eae8e0ee17", size = 4483843, upload-time = "2025-08-04T16:19:08.857Z" }, + { url = "https://files.pythonhosted.org/packages/48/1f/cff6bb4ea64ff508d8cac3fe113c0aa95310a7446d9efa6829027cc2afdf/pywavelets-1.9.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3747ec804492436de6e99a7b6130480e53406d047e87dc7095ab40078a515a23", size = 4442236, upload-time = "2025-08-04T16:19:11.061Z" }, + { url = "https://files.pythonhosted.org/packages/ce/53/a3846eeefe0fb7ca63ae045f038457aa274989a15af793c1b824138caf98/pywavelets-1.9.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5163665686219c3f43fd5bbfef2391e87146813961dad0f86c62d4aed561f547", size = 4488077, upload-time = "2025-08-04T16:19:12.333Z" }, + { url = "https://files.pythonhosted.org/packages/f7/98/44852d2fe94455b72dece2db23562145179d63186a1c971125279a1c381f/pywavelets-1.9.0-cp312-cp312-win32.whl", hash = "sha256:80b8ab99f5326a3e724f71f23ba8b0a5b03e333fa79f66e965ea7bed21d42a2f", size = 4134094, upload-time = "2025-08-04T16:19:13.564Z" }, + { url = "https://files.pythonhosted.org/packages/2c/a7/0d9ee3fe454d606e0f5c8e3aebf99d2ecddbfb681826a29397729538c8f1/pywavelets-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:92bfb8a117b8c8d3b72f2757a85395346fcbf37f50598880879ae72bd8e1c4b9", size = 4213900, upload-time = "2025-08-04T16:19:14.939Z" }, + { url = "https://files.pythonhosted.org/packages/db/a7/dec4e450675d62946ad975f5b4d924437df42d2fae46e91dfddda2de0f5a/pywavelets-1.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:74f8455c143818e4b026fc67b27fd82f38e522701b94b8a6d1aaf3a45fcc1a25", size = 4316201, upload-time = "2025-08-04T16:19:16.259Z" }, + { url = "https://files.pythonhosted.org/packages/aa/0c/b54b86596c0df68027e48c09210e907e628435003e77048384a2dd6767e3/pywavelets-1.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c50320fe0a4a23ddd8835b3dc9b53b09ee05c7cc6c56b81d0916f04fc1649070", size = 4286838, upload-time = "2025-08-04T16:19:17.92Z" }, + { url = "https://files.pythonhosted.org/packages/5a/9c/333969c3baad8af2e7999e83addcb7bb1d1fd48e2d812fb27e2e89582cb1/pywavelets-1.9.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d6e059265223ed659e5214ab52a84883c88ddf3decbf08d7ec6abb8e4c5ed7be", size = 4430753, upload-time = "2025-08-04T16:19:19.529Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1b/a24c6ff03b026b826ad7b9267bd63cd34ce026795a0302f8a5403840b8e7/pywavelets-1.9.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ae10ed46c139c7ddb8b1249cfe0989f8ccb610d93f2899507b1b1573a0e424b5", size = 4491315, upload-time = "2025-08-04T16:19:20.717Z" }, + { url = "https://files.pythonhosted.org/packages/d7/c7/e3fbb502fca3469e51ced4f1e1326364c338be91edc5db5a8ddd26b303fa/pywavelets-1.9.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8f8b1cc2df012401cb837ee6fa2f59607c7b4fe0ff409d9a4f6906daf40dc86", size = 4437654, upload-time = "2025-08-04T16:19:22.359Z" }, + { url = "https://files.pythonhosted.org/packages/92/44/c9b25084048d9324881a19b88e0969a4141bcfdc1d218f1b4b680b7af1c1/pywavelets-1.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:db43969c7a8fbb17693ecfd14f21616edc3b29f0e47a49b32fa4127c01312a67", size = 4496435, upload-time = "2025-08-04T16:19:23.842Z" }, + { url = "https://files.pythonhosted.org/packages/cd/b6/b27ec18c72b1dee3314e297af39c5f8136d43cc130dd93cb6c178ca820e5/pywavelets-1.9.0-cp313-cp313-win32.whl", hash = "sha256:9e7d60819d87dcd6c68a2d1bc1d37deb1f4d96607799ab6a25633ea484dcda41", size = 4132709, upload-time = "2025-08-04T16:19:25.415Z" }, + { url = "https://files.pythonhosted.org/packages/0a/87/78ef3f9fb36cdb16ee82371d22c3a7c89eeb79ec8c9daef6222060da6c79/pywavelets-1.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:0d70da9d7858c869e24dc254f16a61dc09d8a224cad85a10c393b2eccddeb126", size = 4213377, upload-time = "2025-08-04T16:19:26.875Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cd/ca0d9db0ff29e3843f6af60c2f5eb588794e05ca8eeb872a595867b1f3f5/pywavelets-1.9.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4dc85f44c38d76a184a1aa2cb038f802c3740428c9bb877525f4be83a223b134", size = 4354336, upload-time = "2025-08-04T16:19:28.745Z" }, + { url = "https://files.pythonhosted.org/packages/82/d6/70afefcc1139f37d02018a3b1dba3b8fc87601bb7707d9616b7f7a76e269/pywavelets-1.9.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7acf6f950c6deaecd210fbff44421f234a8ca81eb6f4da945228e498361afa9d", size = 4335721, upload-time = "2025-08-04T16:19:30.371Z" }, + { url = "https://files.pythonhosted.org/packages/cd/3a/713f731b9ed6df0c36269c8fb62be8bb28eb343b9e26b13d6abda37bce38/pywavelets-1.9.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:144d4fc15c98da56654d0dca2d391b812b8d04127b194a37ad4a497f8e887141", size = 4418702, upload-time = "2025-08-04T16:19:31.743Z" }, + { url = "https://files.pythonhosted.org/packages/44/e8/f801eb4b5f7a316ba20054948c5d6b27b879c77fab2674942e779974bd86/pywavelets-1.9.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1aa3729585408a979d655736f74b995b511c86b9be1544f95d4a3142f8f4b8b5", size = 4470023, upload-time = "2025-08-04T16:19:32.963Z" }, + { url = "https://files.pythonhosted.org/packages/e9/cc/44b002cb16f2a392f2082308dd470b3f033fa4925d3efa7c46f790ce895a/pywavelets-1.9.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e0e24ad6b8eb399c49606dd1fcdcbf9749ad7f6d638be3fe6f59c1f3098821e2", size = 4426498, upload-time = "2025-08-04T16:19:34.151Z" }, + { url = "https://files.pythonhosted.org/packages/91/fe/2b70276ede7878c5fe8356ca07574db5da63e222ce39a463e84bfad135e8/pywavelets-1.9.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3830e6657236b53a3aae20c735cccead942bb97c54bbca9e7d07bae01645fe9c", size = 4477528, upload-time = "2025-08-04T16:19:35.932Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ed/d58b540c15e36508cfeded7b0d39493e811b0dce18d9d4e6787fb2e89685/pywavelets-1.9.0-cp313-cp313t-win32.whl", hash = "sha256:81bb65facfbd7b50dec50450516e72cdc51376ecfdd46f2e945bb89d39bfb783", size = 4186493, upload-time = "2025-08-04T16:19:37.198Z" }, + { url = "https://files.pythonhosted.org/packages/84/b2/12a849650d618a86bbe4d8876c7e20a7afe59a8cad6f49c57eca9af26dfa/pywavelets-1.9.0-cp313-cp313t-win_amd64.whl", hash = "sha256:47d52cf35e2afded8cfe1133663f6f67106a3220b77645476ae660ad34922cb4", size = 4274821, upload-time = "2025-08-04T16:19:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/ba/1f/18c82122547c9eec2232d800b02ada1fbd30ce2136137b5738acca9d653e/pywavelets-1.9.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:53043d2f3f4e55a576f51ac594fe33181e1d096d958e01524db5070eb3825306", size = 4314440, upload-time = "2025-08-04T16:19:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/eb/e1/1c92ac6b538ef5388caf1a74af61cf6af16ea6d14115bb53357469cb38d6/pywavelets-1.9.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:56bc36b42b1b125fd9cb56e7956b22f8d0f83c1093f49c77fc042135e588c799", size = 4290162, upload-time = "2025-08-04T16:19:41.322Z" }, + { url = "https://files.pythonhosted.org/packages/96/d3/d856a2cac8069c20144598fa30a43ca40b5df2e633230848a9a942faf04a/pywavelets-1.9.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08076eb9a182ddc6054ac86868fb71df6267c341635036dc63d20bdbacd9ad7e", size = 4437162, upload-time = "2025-08-04T16:19:42.556Z" }, + { url = "https://files.pythonhosted.org/packages/c9/54/777e0495acd4fb008791e84889be33d6e7fc8af095b441d939390b7d2491/pywavelets-1.9.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4ee1ee7d80f88c64b8ec3b5021dd1e94545cc97f0cd479fb51aa7b10f6def08e", size = 4498169, upload-time = "2025-08-04T16:19:43.791Z" }, + { url = "https://files.pythonhosted.org/packages/76/68/81b97f4d18491a18fbe17e06e2eee80a591ce445942f7b6f522de07813c5/pywavelets-1.9.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:3226b6f62838a6ccd7782cb7449ee5d8b9d61999506c1d9b03b2baf41b01b6fd", size = 4443318, upload-time = "2025-08-04T16:19:45.368Z" }, + { url = "https://files.pythonhosted.org/packages/92/74/5147f2f0436f7aa131cb1bc13dba32ef5f3862748ae1c7366b4cde380362/pywavelets-1.9.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9fb7f4b11d18e2db6dd8deee7b3ce8343d45f195f3f278c2af6e3724b1b93a24", size = 4503294, upload-time = "2025-08-04T16:19:46.632Z" }, + { url = "https://files.pythonhosted.org/packages/3d/d4/af998cc71e869919e0ab45471bd43e91d055ac7bc3ce6f56cc792c9b6bc8/pywavelets-1.9.0-cp314-cp314-win32.whl", hash = "sha256:9902d9fc9812588ab2dce359a1307d8e7f002b53a835640e2c9388fe62a82fd4", size = 4144478, upload-time = "2025-08-04T16:19:47.974Z" }, + { url = "https://files.pythonhosted.org/packages/7d/66/1d071eae5cc3e3ad0e45334462f8ce526a79767ccb759eb851aa5b78a73a/pywavelets-1.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:7e57792bde40e331d6cc65458e5970fd814dba18cfc4e9add9d051e901a7b7c7", size = 4227186, upload-time = "2025-08-04T16:19:49.57Z" }, + { url = "https://files.pythonhosted.org/packages/bf/1f/da0c03ac99bd9d20409c0acf6417806d4cf333d70621da9f535dd0cf27fa/pywavelets-1.9.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:b47c72fb4b76d665c4c598a5b621b505944e5b761bf03df9d169029aafcb652f", size = 4354391, upload-time = "2025-08-04T16:19:51.221Z" }, + { url = "https://files.pythonhosted.org/packages/95/b6/de9e225d8cc307fbb4fda88aefa79442775d5e27c58ee4d3c8a8580ceba6/pywavelets-1.9.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:969e369899e7eab546ea5d77074e4125082e6f9dad71966499bf5dee3758be55", size = 4335810, upload-time = "2025-08-04T16:19:52.813Z" }, + { url = "https://files.pythonhosted.org/packages/33/3b/336761359d07cd44a4233ca854704ff2a9e78d285879ccc82d254b9daa57/pywavelets-1.9.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8aeffd4f35036c1fade972a61454de5709a7a8fc9a7d177eefe3ac34d76962e5", size = 4422220, upload-time = "2025-08-04T16:19:54.068Z" }, + { url = "https://files.pythonhosted.org/packages/98/61/76ccc7ada127f14f65eda40e37407b344fd3713acfca7a94d7f0f67fe57d/pywavelets-1.9.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f63f400fcd4e7007529bd06a5886009760da35cd7e76bb6adb5a5fbee4ffeb8c", size = 4470156, upload-time = "2025-08-04T16:19:55.379Z" }, + { url = "https://files.pythonhosted.org/packages/e0/de/142ca27ee729cf64113c2560748fcf2bd45b899ff282d6f6f3c0e7f177bb/pywavelets-1.9.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a63bcb6b5759a7eb187aeb5e8cd316b7adab7de1f4b5a0446c9a6bcebdfc22fb", size = 4430167, upload-time = "2025-08-04T16:19:56.566Z" }, + { url = "https://files.pythonhosted.org/packages/ca/5e/90b39adff710d698c00ba9c3125e2bec99dad7c5f1a3ba37c73a78a6689f/pywavelets-1.9.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9950eb7c8b942e9bfa53d87c7e45a420dcddbd835c4c5f1aca045a3f775c6113", size = 4477378, upload-time = "2025-08-04T16:19:58.162Z" }, + { url = "https://files.pythonhosted.org/packages/f1/1a/89f5f4ebcb9d34d9b7b2ac0a868c8b6d8c78d699a36f54407a060cea0566/pywavelets-1.9.0-cp314-cp314t-win32.whl", hash = "sha256:097f157e07858a1eb370e0d9c1bd11185acdece5cca10756d6c3c7b35b52771a", size = 4209132, upload-time = "2025-08-04T16:20:00.371Z" }, + { url = "https://files.pythonhosted.org/packages/68/d2/a8065103f5e2e613b916489e6c85af6402a1ec64f346d1429e2d32cb8d03/pywavelets-1.9.0-cp314-cp314t-win_amd64.whl", hash = "sha256:3b6ff6ba4f625d8c955f68c2c39b0a913776d406ab31ee4057f34ad4019fb33b", size = 4306793, upload-time = "2025-08-04T16:20:02.934Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "regex" +version = "2026.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/0e/3a246dbf05666918bd3664d9d787f84a9108f6f43cc953a077e4a7dfdb7e/regex-2026.4.4.tar.gz", hash = "sha256:e08270659717f6973523ce3afbafa53515c4dc5dcad637dc215b6fd50f689423", size = 416000, upload-time = "2026-04-03T20:56:28.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/28/b972a4d3df61e1d7bcf1b59fdb3cddef22f88b6be43f161bb41ebc0e4081/regex-2026.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c07ab8794fa929e58d97a0e1796b8b76f70943fa39df225ac9964615cf1f9d52", size = 490434, upload-time = "2026-04-03T20:53:40.219Z" }, + { url = "https://files.pythonhosted.org/packages/84/20/30041446cf6dc3e0eab344fc62770e84c23b6b68a3b657821f9f80cb69b4/regex-2026.4.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2c785939dc023a1ce4ec09599c032cc9933d258a998d16ca6f2b596c010940eb", size = 292061, upload-time = "2026-04-03T20:53:41.862Z" }, + { url = "https://files.pythonhosted.org/packages/62/c8/3baa06d75c98c46d4cc4262b71fd2edb9062b5665e868bca57859dadf93a/regex-2026.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b1ce5c81c9114f1ce2f9288a51a8fd3aeea33a0cc440c415bf02da323aa0a76", size = 289628, upload-time = "2026-04-03T20:53:43.701Z" }, + { url = "https://files.pythonhosted.org/packages/31/87/3accf55634caad8c0acab23f5135ef7d4a21c39f28c55c816ae012931408/regex-2026.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:760ef21c17d8e6a4fe8cf406a97cf2806a4df93416ccc82fc98d25b1c20425be", size = 796651, upload-time = "2026-04-03T20:53:45.379Z" }, + { url = "https://files.pythonhosted.org/packages/f6/0c/aaa2c83f34efedbf06f61cb1942c25f6cf1ee3b200f832c4d05f28306c2e/regex-2026.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7088fcdcb604a4417c208e2169715800d28838fefd7455fbe40416231d1d47c1", size = 865916, upload-time = "2026-04-03T20:53:47.064Z" }, + { url = "https://files.pythonhosted.org/packages/d9/f6/8c6924c865124643e8f37823eca845dc27ac509b2ee58123685e71cd0279/regex-2026.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:07edca1ba687998968f7db5bc355288d0c6505caa7374f013d27356d93976d13", size = 912287, upload-time = "2026-04-03T20:53:49.422Z" }, + { url = "https://files.pythonhosted.org/packages/11/0e/a9f6f81013e0deaf559b25711623864970fe6a098314e374ccb1540a4152/regex-2026.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:993f657a7c1c6ec51b5e0ba97c9817d06b84ea5fa8d82e43b9405de0defdc2b9", size = 801126, upload-time = "2026-04-03T20:53:51.096Z" }, + { url = "https://files.pythonhosted.org/packages/71/61/3a0cc8af2dc0c8deb48e644dd2521f173f7e6513c6e195aad9aa8dd77ac5/regex-2026.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2b69102a743e7569ebee67e634a69c4cb7e59d6fa2e1aa7d3bdbf3f61435f62d", size = 776788, upload-time = "2026-04-03T20:53:52.889Z" }, + { url = "https://files.pythonhosted.org/packages/64/0b/8bb9cbf21ef7dee58e49b0fdb066a7aded146c823202e16494a36777594f/regex-2026.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dac006c8b6dda72d86ea3d1333d45147de79a3a3f26f10c1cf9287ca4ca0ac3", size = 785184, upload-time = "2026-04-03T20:53:55.627Z" }, + { url = "https://files.pythonhosted.org/packages/99/c2/d3e80e8137b25ee06c92627de4e4d98b94830e02b3e6f81f3d2e3f504cf5/regex-2026.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:50a766ee2010d504554bfb5f578ed2e066898aa26411d57e6296230627cdefa0", size = 859913, upload-time = "2026-04-03T20:53:57.249Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/9d5d876157d969c804622456ef250017ac7a8f83e0e14f903b9e6df5ce95/regex-2026.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:9e2f5217648f68e3028c823df58663587c1507a5ba8419f4fdfc8a461be76043", size = 765732, upload-time = "2026-04-03T20:53:59.428Z" }, + { url = "https://files.pythonhosted.org/packages/82/80/b568935b4421388561c8ed42aff77247285d3ae3bb2a6ca22af63bae805e/regex-2026.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:39d8de85a08e32632974151ba59c6e9140646dcc36c80423962b1c5c0a92e244", size = 852152, upload-time = "2026-04-03T20:54:01.505Z" }, + { url = "https://files.pythonhosted.org/packages/39/29/f0f81217e21cd998245da047405366385d5c6072048038a3d33b37a79dc0/regex-2026.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:55d9304e0e7178dfb1e106c33edf834097ddf4a890e2f676f6c5118f84390f73", size = 789076, upload-time = "2026-04-03T20:54:03.323Z" }, + { url = "https://files.pythonhosted.org/packages/49/1d/1d957a61976ab9d4e767dd4f9d04b66cc0c41c5e36cf40e2d43688b5ae6f/regex-2026.4.4-cp312-cp312-win32.whl", hash = "sha256:04bb679bc0bde8a7bfb71e991493d47314e7b98380b083df2447cda4b6edb60f", size = 266700, upload-time = "2026-04-03T20:54:05.639Z" }, + { url = "https://files.pythonhosted.org/packages/c5/5c/bf575d396aeb58ea13b06ef2adf624f65b70fafef6950a80fc3da9cae3bc/regex-2026.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:db0ac18435a40a2543dbb3d21e161a6c78e33e8159bd2e009343d224bb03bb1b", size = 277768, upload-time = "2026-04-03T20:54:07.312Z" }, + { url = "https://files.pythonhosted.org/packages/c9/27/049df16ec6a6828ccd72add3c7f54b4df029669bea8e9817df6fff58be90/regex-2026.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:4ce255cc05c1947a12989c6db801c96461947adb7a59990f1360b5983fab4983", size = 270568, upload-time = "2026-04-03T20:54:09.484Z" }, + { url = "https://files.pythonhosted.org/packages/9d/83/c4373bc5f31f2cf4b66f9b7c31005bd87fe66f0dce17701f7db4ee79ee29/regex-2026.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:62f5519042c101762509b1d717b45a69c0139d60414b3c604b81328c01bd1943", size = 490273, upload-time = "2026-04-03T20:54:11.202Z" }, + { url = "https://files.pythonhosted.org/packages/46/f8/fe62afbcc3cf4ad4ac9adeaafd98aa747869ae12d3e8e2ac293d0593c435/regex-2026.4.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3790ba9fb5dd76715a7afe34dbe603ba03f8820764b1dc929dd08106214ed031", size = 291954, upload-time = "2026-04-03T20:54:13.412Z" }, + { url = "https://files.pythonhosted.org/packages/5a/92/4712b9fe6a33d232eeb1c189484b80c6c4b8422b90e766e1195d6e758207/regex-2026.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8fae3c6e795d7678963f2170152b0d892cf6aee9ee8afc8c45e6be38d5107fe7", size = 289487, upload-time = "2026-04-03T20:54:15.824Z" }, + { url = "https://files.pythonhosted.org/packages/88/2c/f83b93f85e01168f1070f045a42d4c937b69fdb8dd7ae82d307253f7e36e/regex-2026.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:298c3ec2d53225b3bf91142eb9691025bab610e0c0c51592dde149db679b3d17", size = 796646, upload-time = "2026-04-03T20:54:18.229Z" }, + { url = "https://files.pythonhosted.org/packages/df/55/61a2e17bf0c4dc57e11caf8dd11771280d8aaa361785f9e3bc40d653f4a7/regex-2026.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e9638791082eaf5b3ac112c587518ee78e083a11c4b28012d8fe2a0f536dfb17", size = 865904, upload-time = "2026-04-03T20:54:20.019Z" }, + { url = "https://files.pythonhosted.org/packages/45/32/1ac8ed1b5a346b5993a3d256abe0a0f03b0b73c8cc88d928537368ac65b6/regex-2026.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ae3e764bd4c5ff55035dc82a8d49acceb42a5298edf6eb2fc4d328ee5dd7afae", size = 912304, upload-time = "2026-04-03T20:54:22.403Z" }, + { url = "https://files.pythonhosted.org/packages/26/47/2ee5c613ab546f0eddebf9905d23e07beb933416b1246c2d8791d01979b4/regex-2026.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ffa81f81b80047ba89a3c69ae6a0f78d06f4a42ce5126b0eb2a0a10ad44e0b2e", size = 801126, upload-time = "2026-04-03T20:54:24.308Z" }, + { url = "https://files.pythonhosted.org/packages/75/cd/41dacd129ca9fd20bd7d02f83e0fad83e034ac8a084ec369c90f55ef37e2/regex-2026.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f56ebf9d70305307a707911b88469213630aba821e77de7d603f9d2f0730687d", size = 776772, upload-time = "2026-04-03T20:54:26.319Z" }, + { url = "https://files.pythonhosted.org/packages/89/6d/5af0b588174cb5f46041fa7dd64d3fd5cd2fe51f18766703d1edc387f324/regex-2026.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:773d1dfd652bbffb09336abf890bfd64785c7463716bf766d0eb3bc19c8b7f27", size = 785228, upload-time = "2026-04-03T20:54:28.387Z" }, + { url = "https://files.pythonhosted.org/packages/b7/3b/f5a72b7045bd59575fc33bf1345f156fcfd5a8484aea6ad84b12c5a82114/regex-2026.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d51d20befd5275d092cdffba57ded05f3c436317ee56466c8928ac32d960edaf", size = 860032, upload-time = "2026-04-03T20:54:30.641Z" }, + { url = "https://files.pythonhosted.org/packages/39/a4/72a317003d6fcd7a573584a85f59f525dfe8f67e355ca74eb6b53d66a5e2/regex-2026.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:0a51cdb3c1e9161154f976cb2bef9894bc063ac82f31b733087ffb8e880137d0", size = 765714, upload-time = "2026-04-03T20:54:32.789Z" }, + { url = "https://files.pythonhosted.org/packages/25/1e/5672e16f34dbbcb2560cc7e6a2fbb26dfa8b270711e730101da4423d3973/regex-2026.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ae5266a82596114e41fb5302140e9630204c1b5f325c770bec654b95dd54b0aa", size = 852078, upload-time = "2026-04-03T20:54:34.546Z" }, + { url = "https://files.pythonhosted.org/packages/f7/0d/c813f0af7c6cc7ed7b9558bac2e5120b60ad0fa48f813e4d4bd55446f214/regex-2026.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c882cd92ec68585e9c1cf36c447ec846c0d94edd706fe59e0c198e65822fd23b", size = 789181, upload-time = "2026-04-03T20:54:36.642Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6d/a344608d1adbd2a95090ddd906cec09a11be0e6517e878d02a5123e0917f/regex-2026.4.4-cp313-cp313-win32.whl", hash = "sha256:05568c4fbf3cb4fa9e28e3af198c40d3237cf6041608a9022285fe567ec3ad62", size = 266690, upload-time = "2026-04-03T20:54:38.343Z" }, + { url = "https://files.pythonhosted.org/packages/31/07/54049f89b46235ca6f45cd6c88668a7050e77d4a15555e47dd40fde75263/regex-2026.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:3384df51ed52db0bea967e21458ab0a414f67cdddfd94401688274e55147bb81", size = 277733, upload-time = "2026-04-03T20:54:40.11Z" }, + { url = "https://files.pythonhosted.org/packages/0e/21/61366a8e20f4d43fb597708cac7f0e2baadb491ecc9549b4980b2be27d16/regex-2026.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:acd38177bd2c8e69a411d6521760806042e244d0ef94e2dd03ecdaa8a3c99427", size = 270565, upload-time = "2026-04-03T20:54:41.883Z" }, + { url = "https://files.pythonhosted.org/packages/f1/1e/3a2b9672433bef02f5d39aa1143ca2c08f311c1d041c464a42be9ae648dc/regex-2026.4.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:f94a11a9d05afcfcfa640e096319720a19cc0c9f7768e1a61fceee6a3afc6c7c", size = 494126, upload-time = "2026-04-03T20:54:43.602Z" }, + { url = "https://files.pythonhosted.org/packages/4e/4b/c132a4f4fe18ad3340d89fcb56235132b69559136036b845be3c073142ed/regex-2026.4.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:36bcb9d6d1307ab629edc553775baada2aefa5c50ccc0215fbfd2afcfff43141", size = 293882, upload-time = "2026-04-03T20:54:45.41Z" }, + { url = "https://files.pythonhosted.org/packages/f4/5f/eaa38092ce7a023656280f2341dbbd4ad5f05d780a70abba7bb4f4bea54c/regex-2026.4.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261c015b3e2ed0919157046d768774ecde57f03d8fa4ba78d29793447f70e717", size = 292334, upload-time = "2026-04-03T20:54:47.051Z" }, + { url = "https://files.pythonhosted.org/packages/5f/f6/dd38146af1392dac33db7074ab331cec23cced3759167735c42c5460a243/regex-2026.4.4-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c228cf65b4a54583763645dcd73819b3b381ca8b4bb1b349dee1c135f4112c07", size = 811691, upload-time = "2026-04-03T20:54:49.074Z" }, + { url = "https://files.pythonhosted.org/packages/7a/f0/dc54c2e69f5eeec50601054998ec3690d5344277e782bd717e49867c1d29/regex-2026.4.4-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dd2630faeb6876fb0c287f664d93ddce4d50cd46c6e88e60378c05c9047e08ca", size = 871227, upload-time = "2026-04-03T20:54:51.035Z" }, + { url = "https://files.pythonhosted.org/packages/a1/af/cb16bd5dc61621e27df919a4449bbb7e5a1034c34d307e0a706e9cc0f3e3/regex-2026.4.4-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6a50ab11b7779b849472337191f3a043e27e17f71555f98d0092fa6d73364520", size = 917435, upload-time = "2026-04-03T20:54:52.994Z" }, + { url = "https://files.pythonhosted.org/packages/5c/71/8b260897f22996b666edd9402861668f45a2ca259f665ac029e6104a2d7d/regex-2026.4.4-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0734f63afe785138549fbe822a8cfeaccd1bae814c5057cc0ed5b9f2de4fc883", size = 816358, upload-time = "2026-04-03T20:54:54.884Z" }, + { url = "https://files.pythonhosted.org/packages/1c/60/775f7f72a510ef238254906c2f3d737fc80b16ca85f07d20e318d2eea894/regex-2026.4.4-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c4ee50606cb1967db7e523224e05f32089101945f859928e65657a2cbb3d278b", size = 785549, upload-time = "2026-04-03T20:54:57.01Z" }, + { url = "https://files.pythonhosted.org/packages/58/42/34d289b3627c03cf381e44da534a0021664188fa49ba41513da0b4ec6776/regex-2026.4.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6c1818f37be3ca02dcb76d63f2c7aaba4b0dc171b579796c6fbe00148dfec6b1", size = 801364, upload-time = "2026-04-03T20:54:58.981Z" }, + { url = "https://files.pythonhosted.org/packages/fc/20/f6ecf319b382a8f1ab529e898b222c3f30600fcede7834733c26279e7465/regex-2026.4.4-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f5bfc2741d150d0be3e4a0401a5c22b06e60acb9aa4daa46d9e79a6dcd0f135b", size = 866221, upload-time = "2026-04-03T20:55:00.88Z" }, + { url = "https://files.pythonhosted.org/packages/92/6a/9f16d3609d549bd96d7a0b2aee1625d7512ba6a03efc01652149ef88e74d/regex-2026.4.4-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:504ffa8a03609a087cad81277a629b6ce884b51a24bd388a7980ad61748618ff", size = 772530, upload-time = "2026-04-03T20:55:03.213Z" }, + { url = "https://files.pythonhosted.org/packages/fa/f6/aa9768bc96a4c361ac96419fbaf2dcdc33970bb813df3ba9b09d5d7b6d96/regex-2026.4.4-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:70aadc6ff12e4b444586e57fc30771f86253f9f0045b29016b9605b4be5f7dfb", size = 856989, upload-time = "2026-04-03T20:55:05.087Z" }, + { url = "https://files.pythonhosted.org/packages/4d/b4/c671db3556be2473ae3e4bb7a297c518d281452871501221251ea4ecba57/regex-2026.4.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f4f83781191007b6ef43b03debc35435f10cad9b96e16d147efe84a1d48bdde4", size = 803241, upload-time = "2026-04-03T20:55:07.162Z" }, + { url = "https://files.pythonhosted.org/packages/2a/5c/83e3b1d89fa4f6e5a1bc97b4abd4a9a97b3c1ac7854164f694f5f0ba98a0/regex-2026.4.4-cp313-cp313t-win32.whl", hash = "sha256:e014a797de43d1847df957c0a2a8e861d1c17547ee08467d1db2c370b7568baa", size = 269921, upload-time = "2026-04-03T20:55:09.62Z" }, + { url = "https://files.pythonhosted.org/packages/28/07/077c387121f42cdb4d92b1301133c0d93b5709d096d1669ab847dda9fe2e/regex-2026.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:b15b88b0d52b179712632832c1d6e58e5774f93717849a41096880442da41ab0", size = 281240, upload-time = "2026-04-03T20:55:11.521Z" }, + { url = "https://files.pythonhosted.org/packages/9d/22/ead4a4abc7c59a4d882662aa292ca02c8b617f30b6e163bc1728879e9353/regex-2026.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:586b89cdadf7d67bf86ae3342a4dcd2b8d70a832d90c18a0ae955105caf34dbe", size = 272440, upload-time = "2026-04-03T20:55:13.365Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f5/ed97c2dc47b5fbd4b73c0d7d75f9ebc8eca139f2bbef476bba35f28c0a77/regex-2026.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2da82d643fa698e5e5210e54af90181603d5853cf469f5eedf9bfc8f59b4b8c7", size = 490343, upload-time = "2026-04-03T20:55:15.241Z" }, + { url = "https://files.pythonhosted.org/packages/80/e9/de4828a7385ec166d673a5790ad06ac48cdaa98bc0960108dd4b9cc1aef7/regex-2026.4.4-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:54a1189ad9d9357760557c91103d5e421f0a2dabe68a5cdf9103d0dcf4e00752", size = 291909, upload-time = "2026-04-03T20:55:17.558Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d6/5cfbfc97f3201a4d24b596a77957e092030dcc4205894bc035cedcfce62f/regex-2026.4.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:76d67d5afb1fe402d10a6403bae668d000441e2ab115191a804287d53b772951", size = 289692, upload-time = "2026-04-03T20:55:20.561Z" }, + { url = "https://files.pythonhosted.org/packages/8e/ac/f2212d9fd56fe897e36d0110ba30ba2d247bd6410c5bd98499c7e5a1e1f2/regex-2026.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e7cd3e4ee8d80447a83bbc9ab0c8459781fa77087f856c3e740d7763be0df27f", size = 796979, upload-time = "2026-04-03T20:55:22.56Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e3/a016c12675fbac988a60c7e1c16e67823ff0bc016beb27bd7a001dbdabc6/regex-2026.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e19e18c568d2866d8b6a6dfad823db86193503f90823a8f66689315ba28fbe8", size = 866744, upload-time = "2026-04-03T20:55:24.646Z" }, + { url = "https://files.pythonhosted.org/packages/af/a4/0b90ca4cf17adc3cb43de80ec71018c37c88ad64987e8d0d481a95ca60b5/regex-2026.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7698a6f38730fd1385d390d1ed07bb13dce39aa616aca6a6d89bea178464b9a4", size = 911613, upload-time = "2026-04-03T20:55:27.033Z" }, + { url = "https://files.pythonhosted.org/packages/8e/3b/2b3dac0b82d41ab43aa87c6ecde63d71189d03fe8854b8ca455a315edac3/regex-2026.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:173a66f3651cdb761018078e2d9487f4cf971232c990035ec0eb1cdc6bf929a9", size = 800551, upload-time = "2026-04-03T20:55:29.532Z" }, + { url = "https://files.pythonhosted.org/packages/25/fe/5365eb7aa0e753c4b5957815c321519ecab033c279c60e1b1ae2367fa810/regex-2026.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa7922bbb2cc84fa062d37723f199d4c0cd200245ce269c05db82d904db66b83", size = 776911, upload-time = "2026-04-03T20:55:31.526Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b3/7fb0072156bba065e3b778a7bc7b0a6328212be5dd6a86fd207e0c4f2dab/regex-2026.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:59f67cd0a0acaf0e564c20bbd7f767286f23e91e2572c5703bf3e56ea7557edb", size = 785751, upload-time = "2026-04-03T20:55:33.797Z" }, + { url = "https://files.pythonhosted.org/packages/02/1a/9f83677eb699273e56e858f7bd95acdbee376d42f59e8bfca2fd80d79df3/regex-2026.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:475e50f3f73f73614f7cba5524d6de49dee269df00272a1b85e3d19f6d498465", size = 860484, upload-time = "2026-04-03T20:55:35.745Z" }, + { url = "https://files.pythonhosted.org/packages/3b/7a/93937507b61cfcff8b4c5857f1b452852b09f741daa9acae15c971d8554e/regex-2026.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:a1c0c7d67b64d85ac2e1879923bad2f08a08f3004055f2f406ef73c850114bd4", size = 765939, upload-time = "2026-04-03T20:55:37.972Z" }, + { url = "https://files.pythonhosted.org/packages/86/ea/81a7f968a351c6552b1670ead861e2a385be730ee28402233020c67f9e0f/regex-2026.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:1371c2ccbb744d66ee63631cc9ca12aa233d5749972626b68fe1a649dd98e566", size = 851417, upload-time = "2026-04-03T20:55:39.92Z" }, + { url = "https://files.pythonhosted.org/packages/4c/7e/323c18ce4b5b8f44517a36342961a0306e931e499febbd876bb149d900f0/regex-2026.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:59968142787042db793348a3f5b918cf24ced1f23247328530e063f89c128a95", size = 789056, upload-time = "2026-04-03T20:55:42.303Z" }, + { url = "https://files.pythonhosted.org/packages/c0/af/e7510f9b11b1913b0cd44eddb784b2d650b2af6515bfce4cffcc5bfd1d38/regex-2026.4.4-cp314-cp314-win32.whl", hash = "sha256:59efe72d37fd5a91e373e5146f187f921f365f4abc1249a5ab446a60f30dd5f8", size = 272130, upload-time = "2026-04-03T20:55:44.995Z" }, + { url = "https://files.pythonhosted.org/packages/9a/51/57dae534c915e2d3a21490e88836fa2ae79dde3b66255ecc0c0a155d2c10/regex-2026.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:e0aab3ff447845049d676827d2ff714aab4f73f340e155b7de7458cf53baa5a4", size = 280992, upload-time = "2026-04-03T20:55:47.316Z" }, + { url = "https://files.pythonhosted.org/packages/0a/5e/abaf9f4c3792e34edb1434f06717fae2b07888d85cb5cec29f9204931bf8/regex-2026.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:a7a5bb6aa0cf62208bb4fa079b0c756734f8ad0e333b425732e8609bd51ee22f", size = 273563, upload-time = "2026-04-03T20:55:49.273Z" }, + { url = "https://files.pythonhosted.org/packages/ff/06/35da85f9f217b9538b99cbb170738993bcc3b23784322decb77619f11502/regex-2026.4.4-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:97850d0638391bdc7d35dc1c1039974dcb921eaafa8cc935ae4d7f272b1d60b3", size = 494191, upload-time = "2026-04-03T20:55:51.258Z" }, + { url = "https://files.pythonhosted.org/packages/54/5b/1bc35f479eef8285c4baf88d8c002023efdeebb7b44a8735b36195486ae7/regex-2026.4.4-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ee7337f88f2a580679f7bbfe69dc86c043954f9f9c541012f49abc554a962f2e", size = 293877, upload-time = "2026-04-03T20:55:53.214Z" }, + { url = "https://files.pythonhosted.org/packages/39/5b/f53b9ad17480b3ddd14c90da04bfb55ac6894b129e5dea87bcaf7d00e336/regex-2026.4.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7429f4e6192c11d659900c0648ba8776243bf396ab95558b8c51a345afeddde6", size = 292410, upload-time = "2026-04-03T20:55:55.736Z" }, + { url = "https://files.pythonhosted.org/packages/bb/56/52377f59f60a7c51aa4161eecf0b6032c20b461805aca051250da435ffc9/regex-2026.4.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc4f10fbd5dd13dcf4265b4cc07d69ca70280742870c97ae10093e3d66000359", size = 811831, upload-time = "2026-04-03T20:55:57.802Z" }, + { url = "https://files.pythonhosted.org/packages/dd/63/8026310bf066f702a9c361f83a8c9658f3fe4edb349f9c1e5d5273b7c40c/regex-2026.4.4-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a152560af4f9742b96f3827090f866eeec5becd4765c8e0d3473d9d280e76a5a", size = 871199, upload-time = "2026-04-03T20:56:00.333Z" }, + { url = "https://files.pythonhosted.org/packages/20/9f/a514bbb00a466dbb506d43f187a04047f7be1505f10a9a15615ead5080ee/regex-2026.4.4-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54170b3e95339f415d54651f97df3bff7434a663912f9358237941bbf9143f55", size = 917649, upload-time = "2026-04-03T20:56:02.445Z" }, + { url = "https://files.pythonhosted.org/packages/cb/6b/8399f68dd41a2030218839b9b18360d79b86d22b9fab5ef477c7f23ca67c/regex-2026.4.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:07f190d65f5a72dcb9cf7106bfc3d21e7a49dd2879eda2207b683f32165e4d99", size = 816388, upload-time = "2026-04-03T20:56:04.595Z" }, + { url = "https://files.pythonhosted.org/packages/1e/9c/103963f47c24339a483b05edd568594c2be486188f688c0170fd504b2948/regex-2026.4.4-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9a2741ce5a29d3c84b0b94261ba630ab459a1b847a0d6beca7d62d188175c790", size = 785746, upload-time = "2026-04-03T20:56:07.13Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ee/7f6054c0dec0cee3463c304405e4ff42e27cff05bf36fcb34be549ab17bd/regex-2026.4.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b26c30df3a28fd9793113dac7385a4deb7294a06c0f760dd2b008bd49a9139bc", size = 801483, upload-time = "2026-04-03T20:56:09.365Z" }, + { url = "https://files.pythonhosted.org/packages/30/c2/51d3d941cf6070dc00c3338ecf138615fc3cce0421c3df6abe97a08af61a/regex-2026.4.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:421439d1bee44b19f4583ccf42670ca464ffb90e9fdc38d37f39d1ddd1e44f1f", size = 866331, upload-time = "2026-04-03T20:56:12.039Z" }, + { url = "https://files.pythonhosted.org/packages/16/e8/76d50dcc122ac33927d939f350eebcfe3dbcbda96913e03433fc36de5e63/regex-2026.4.4-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:b40379b53ecbc747fd9bdf4a0ea14eb8188ca1bd0f54f78893a39024b28f4863", size = 772673, upload-time = "2026-04-03T20:56:14.558Z" }, + { url = "https://files.pythonhosted.org/packages/a5/6e/5f6bf75e20ea6873d05ba4ec78378c375cbe08cdec571c83fbb01606e563/regex-2026.4.4-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:08c55c13d2eef54f73eeadc33146fb0baaa49e7335eb1aff6ae1324bf0ddbe4a", size = 857146, upload-time = "2026-04-03T20:56:16.663Z" }, + { url = "https://files.pythonhosted.org/packages/0b/33/3c76d9962949e487ebba353a18e89399f292287204ac8f2f4cfc3a51c233/regex-2026.4.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9776b85f510062f5a75ef112afe5f494ef1635607bf1cc220c1391e9ac2f5e81", size = 803463, upload-time = "2026-04-03T20:56:18.923Z" }, + { url = "https://files.pythonhosted.org/packages/19/eb/ef32dcd2cb69b69bc0c3e55205bce94a7def48d495358946bc42186dcccc/regex-2026.4.4-cp314-cp314t-win32.whl", hash = "sha256:385edaebde5db5be103577afc8699fea73a0e36a734ba24870be7ffa61119d74", size = 275709, upload-time = "2026-04-03T20:56:20.996Z" }, + { url = "https://files.pythonhosted.org/packages/a0/86/c291bf740945acbf35ed7dbebf8e2eea2f3f78041f6bd7cdab80cb274dc0/regex-2026.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:5d354b18839328927832e2fa5f7c95b7a3ccc39e7a681529e1685898e6436d45", size = 285622, upload-time = "2026-04-03T20:56:23.641Z" }, + { url = "https://files.pythonhosted.org/packages/d5/e7/ec846d560ae6a597115153c02ca6138a7877a1748b2072d9521c10a93e58/regex-2026.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:af0384cb01a33600c49505c27c6c57ab0b27bf84a74e28524c92ca897ebdac9d", size = 275773, upload-time = "2026-04-03T20:56:26.07Z" }, +] + +[[package]] +name = "requests" +version = "2.33.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120, upload-time = "2026-03-30T16:09:15.531Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" }, +] + +[[package]] +name = "rich" +version = "14.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/c6/f3b320c27991c46f43ee9d856302c70dc2d0fb2dba4842ff739d5f46b393/rich-14.3.3.tar.gz", hash = "sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b", size = 230582, upload-time = "2026-02-19T17:23:12.474Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl", hash = "sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d", size = 310458, upload-time = "2026-02-19T17:23:13.732Z" }, +] + +[[package]] +name = "safetensors" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/29/9c/6e74567782559a63bd040a236edca26fd71bc7ba88de2ef35d75df3bca5e/safetensors-0.7.0.tar.gz", hash = "sha256:07663963b67e8bd9f0b8ad15bb9163606cd27cc5a1b96235a50d8369803b96b0", size = 200878, upload-time = "2025-11-19T15:18:43.199Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/47/aef6c06649039accf914afef490268e1067ed82be62bcfa5b7e886ad15e8/safetensors-0.7.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c82f4d474cf725255d9e6acf17252991c3c8aac038d6ef363a4bf8be2f6db517", size = 467781, upload-time = "2025-11-19T15:18:35.84Z" }, + { url = "https://files.pythonhosted.org/packages/e8/00/374c0c068e30cd31f1e1b46b4b5738168ec79e7689ca82ee93ddfea05109/safetensors-0.7.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:94fd4858284736bb67a897a41608b5b0c2496c9bdb3bf2af1fa3409127f20d57", size = 447058, upload-time = "2025-11-19T15:18:34.416Z" }, + { url = "https://files.pythonhosted.org/packages/f1/06/578ffed52c2296f93d7fd2d844cabfa92be51a587c38c8afbb8ae449ca89/safetensors-0.7.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e07d91d0c92a31200f25351f4acb2bc6aff7f48094e13ebb1d0fb995b54b6542", size = 491748, upload-time = "2025-11-19T15:18:09.79Z" }, + { url = "https://files.pythonhosted.org/packages/ae/33/1debbbb70e4791dde185edb9413d1fe01619255abb64b300157d7f15dddd/safetensors-0.7.0-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8469155f4cb518bafb4acf4865e8bb9d6804110d2d9bdcaa78564b9fd841e104", size = 503881, upload-time = "2025-11-19T15:18:16.145Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1c/40c2ca924d60792c3be509833df711b553c60effbd91da6f5284a83f7122/safetensors-0.7.0-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:54bef08bf00a2bff599982f6b08e8770e09cc012d7bba00783fc7ea38f1fb37d", size = 623463, upload-time = "2025-11-19T15:18:21.11Z" }, + { url = "https://files.pythonhosted.org/packages/9b/3a/13784a9364bd43b0d61eef4bea2845039bc2030458b16594a1bd787ae26e/safetensors-0.7.0-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42cb091236206bb2016d245c377ed383aa7f78691748f3bb6ee1bfa51ae2ce6a", size = 532855, upload-time = "2025-11-19T15:18:25.719Z" }, + { url = "https://files.pythonhosted.org/packages/a0/60/429e9b1cb3fc651937727befe258ea24122d9663e4d5709a48c9cbfceecb/safetensors-0.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac7252938f0696ddea46f5e855dd3138444e82236e3be475f54929f0c510d48", size = 507152, upload-time = "2025-11-19T15:18:33.023Z" }, + { url = "https://files.pythonhosted.org/packages/3c/a8/4b45e4e059270d17af60359713ffd83f97900d45a6afa73aaa0d737d48b6/safetensors-0.7.0-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1d060c70284127fa805085d8f10fbd0962792aed71879d00864acda69dbab981", size = 541856, upload-time = "2025-11-19T15:18:31.075Z" }, + { url = "https://files.pythonhosted.org/packages/06/87/d26d8407c44175d8ae164a95b5a62707fcc445f3c0c56108e37d98070a3d/safetensors-0.7.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cdab83a366799fa730f90a4ebb563e494f28e9e92c4819e556152ad55e43591b", size = 674060, upload-time = "2025-11-19T15:18:37.211Z" }, + { url = "https://files.pythonhosted.org/packages/11/f5/57644a2ff08dc6325816ba7217e5095f17269dada2554b658442c66aed51/safetensors-0.7.0-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:672132907fcad9f2aedcb705b2d7b3b93354a2aec1b2f706c4db852abe338f85", size = 771715, upload-time = "2025-11-19T15:18:38.689Z" }, + { url = "https://files.pythonhosted.org/packages/86/31/17883e13a814bd278ae6e266b13282a01049b0c81341da7fd0e3e71a80a3/safetensors-0.7.0-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:5d72abdb8a4d56d4020713724ba81dac065fedb7f3667151c4a637f1d3fb26c0", size = 714377, upload-time = "2025-11-19T15:18:40.162Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d8/0c8a7dc9b41dcac53c4cbf9df2b9c83e0e0097203de8b37a712b345c0be5/safetensors-0.7.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b0f6d66c1c538d5a94a73aa9ddca8ccc4227e6c9ff555322ea40bdd142391dd4", size = 677368, upload-time = "2025-11-19T15:18:41.627Z" }, + { url = "https://files.pythonhosted.org/packages/05/e5/cb4b713c8a93469e3c5be7c3f8d77d307e65fe89673e731f5c2bfd0a9237/safetensors-0.7.0-cp38-abi3-win32.whl", hash = "sha256:c74af94bf3ac15ac4d0f2a7c7b4663a15f8c2ab15ed0fc7531ca61d0835eccba", size = 326423, upload-time = "2025-11-19T15:18:45.74Z" }, + { url = "https://files.pythonhosted.org/packages/5d/e6/ec8471c8072382cb91233ba7267fd931219753bb43814cbc71757bfd4dab/safetensors-0.7.0-cp38-abi3-win_amd64.whl", hash = "sha256:d1239932053f56f3456f32eb9625590cc7582e905021f94636202a864d470755", size = 341380, upload-time = "2025-11-19T15:18:44.427Z" }, +] + +[[package]] +name = "scikit-learn" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/d4/40988bf3b8e34feec1d0e6a051446b1f66225f8529b9309becaeef62b6c4/scikit_learn-1.8.0.tar.gz", hash = "sha256:9bccbb3b40e3de10351f8f5068e105d0f4083b1a65fa07b6634fbc401a6287fd", size = 7335585, upload-time = "2025-12-10T07:08:53.618Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/74/e6a7cc4b820e95cc38cf36cd74d5aa2b42e8ffc2d21fe5a9a9c45c1c7630/scikit_learn-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5fb63362b5a7ddab88e52b6dbb47dac3fd7dafeee740dc6c8d8a446ddedade8e", size = 8548242, upload-time = "2025-12-10T07:07:51.568Z" }, + { url = "https://files.pythonhosted.org/packages/49/d8/9be608c6024d021041c7f0b3928d4749a706f4e2c3832bbede4fb4f58c95/scikit_learn-1.8.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5025ce924beccb28298246e589c691fe1b8c1c96507e6d27d12c5fadd85bfd76", size = 8079075, upload-time = "2025-12-10T07:07:53.697Z" }, + { url = "https://files.pythonhosted.org/packages/dd/47/f187b4636ff80cc63f21cd40b7b2d177134acaa10f6bb73746130ee8c2e5/scikit_learn-1.8.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4496bb2cf7a43ce1a2d7524a79e40bc5da45cf598dbf9545b7e8316ccba47bb4", size = 8660492, upload-time = "2025-12-10T07:07:55.574Z" }, + { url = "https://files.pythonhosted.org/packages/97/74/b7a304feb2b49df9fafa9382d4d09061a96ee9a9449a7cbea7988dda0828/scikit_learn-1.8.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0bcfe4d0d14aec44921545fd2af2338c7471de9cb701f1da4c9d85906ab847a", size = 8931904, upload-time = "2025-12-10T07:07:57.666Z" }, + { url = "https://files.pythonhosted.org/packages/9f/c4/0ab22726a04ede56f689476b760f98f8f46607caecff993017ac1b64aa5d/scikit_learn-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:35c007dedb2ffe38fe3ee7d201ebac4a2deccd2408e8621d53067733e3c74809", size = 8019359, upload-time = "2025-12-10T07:07:59.838Z" }, + { url = "https://files.pythonhosted.org/packages/24/90/344a67811cfd561d7335c1b96ca21455e7e472d281c3c279c4d3f2300236/scikit_learn-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:8c497fff237d7b4e07e9ef1a640887fa4fb765647f86fbe00f969ff6280ce2bb", size = 7641898, upload-time = "2025-12-10T07:08:01.36Z" }, + { url = "https://files.pythonhosted.org/packages/03/aa/e22e0768512ce9255eba34775be2e85c2048da73da1193e841707f8f039c/scikit_learn-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0d6ae97234d5d7079dc0040990a6f7aeb97cb7fa7e8945f1999a429b23569e0a", size = 8513770, upload-time = "2025-12-10T07:08:03.251Z" }, + { url = "https://files.pythonhosted.org/packages/58/37/31b83b2594105f61a381fc74ca19e8780ee923be2d496fcd8d2e1147bd99/scikit_learn-1.8.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:edec98c5e7c128328124a029bceb09eda2d526997780fef8d65e9a69eead963e", size = 8044458, upload-time = "2025-12-10T07:08:05.336Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5a/3f1caed8765f33eabb723596666da4ebbf43d11e96550fb18bdec42b467b/scikit_learn-1.8.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:74b66d8689d52ed04c271e1329f0c61635bcaf5b926db9b12d58914cdc01fe57", size = 8610341, upload-time = "2025-12-10T07:08:07.732Z" }, + { url = "https://files.pythonhosted.org/packages/38/cf/06896db3f71c75902a8e9943b444a56e727418f6b4b4a90c98c934f51ed4/scikit_learn-1.8.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8fdf95767f989b0cfedb85f7ed8ca215d4be728031f56ff5a519ee1e3276dc2e", size = 8900022, upload-time = "2025-12-10T07:08:09.862Z" }, + { url = "https://files.pythonhosted.org/packages/1c/f9/9b7563caf3ec8873e17a31401858efab6b39a882daf6c1bfa88879c0aa11/scikit_learn-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:2de443b9373b3b615aec1bb57f9baa6bb3a9bd093f1269ba95c17d870422b271", size = 7989409, upload-time = "2025-12-10T07:08:12.028Z" }, + { url = "https://files.pythonhosted.org/packages/49/bd/1f4001503650e72c4f6009ac0c4413cb17d2d601cef6f71c0453da2732fc/scikit_learn-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:eddde82a035681427cbedded4e6eff5e57fa59216c2e3e90b10b19ab1d0a65c3", size = 7619760, upload-time = "2025-12-10T07:08:13.688Z" }, + { url = "https://files.pythonhosted.org/packages/d2/7d/a630359fc9dcc95496588c8d8e3245cc8fd81980251079bc09c70d41d951/scikit_learn-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7cc267b6108f0a1499a734167282c00c4ebf61328566b55ef262d48e9849c735", size = 8826045, upload-time = "2025-12-10T07:08:15.215Z" }, + { url = "https://files.pythonhosted.org/packages/cc/56/a0c86f6930cfcd1c7054a2bc417e26960bb88d32444fe7f71d5c2cfae891/scikit_learn-1.8.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:fe1c011a640a9f0791146011dfd3c7d9669785f9fed2b2a5f9e207536cf5c2fd", size = 8420324, upload-time = "2025-12-10T07:08:17.561Z" }, + { url = "https://files.pythonhosted.org/packages/46/1e/05962ea1cebc1cf3876667ecb14c283ef755bf409993c5946ade3b77e303/scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72358cce49465d140cc4e7792015bb1f0296a9742d5622c67e31399b75468b9e", size = 8680651, upload-time = "2025-12-10T07:08:19.952Z" }, + { url = "https://files.pythonhosted.org/packages/fe/56/a85473cd75f200c9759e3a5f0bcab2d116c92a8a02ee08ccd73b870f8bb4/scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:80832434a6cc114f5219211eec13dcbc16c2bac0e31ef64c6d346cde3cf054cb", size = 8925045, upload-time = "2025-12-10T07:08:22.11Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b7/64d8cfa896c64435ae57f4917a548d7ac7a44762ff9802f75a79b77cb633/scikit_learn-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ee787491dbfe082d9c3013f01f5991658b0f38aa8177e4cd4bf434c58f551702", size = 8507994, upload-time = "2025-12-10T07:08:23.943Z" }, + { url = "https://files.pythonhosted.org/packages/5e/37/e192ea709551799379958b4c4771ec507347027bb7c942662c7fbeba31cb/scikit_learn-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf97c10a3f5a7543f9b88cbf488d33d175e9146115a451ae34568597ba33dcde", size = 7869518, upload-time = "2025-12-10T07:08:25.71Z" }, + { url = "https://files.pythonhosted.org/packages/24/05/1af2c186174cc92dcab2233f327336058c077d38f6fe2aceb08e6ab4d509/scikit_learn-1.8.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c22a2da7a198c28dd1a6e1136f19c830beab7fdca5b3e5c8bba8394f8a5c45b3", size = 8528667, upload-time = "2025-12-10T07:08:27.541Z" }, + { url = "https://files.pythonhosted.org/packages/a8/25/01c0af38fe969473fb292bba9dc2b8f9b451f3112ff242c647fee3d0dfe7/scikit_learn-1.8.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:6b595b07a03069a2b1740dc08c2299993850ea81cce4fe19b2421e0c970de6b7", size = 8066524, upload-time = "2025-12-10T07:08:29.822Z" }, + { url = "https://files.pythonhosted.org/packages/be/ce/a0623350aa0b68647333940ee46fe45086c6060ec604874e38e9ab7d8e6c/scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29ffc74089f3d5e87dfca4c2c8450f88bdc61b0fc6ed5d267f3988f19a1309f6", size = 8657133, upload-time = "2025-12-10T07:08:31.865Z" }, + { url = "https://files.pythonhosted.org/packages/b8/cb/861b41341d6f1245e6ca80b1c1a8c4dfce43255b03df034429089ca2a2c5/scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb65db5d7531bccf3a4f6bec3462223bea71384e2cda41da0f10b7c292b9e7c4", size = 8923223, upload-time = "2025-12-10T07:08:34.166Z" }, + { url = "https://files.pythonhosted.org/packages/76/18/a8def8f91b18cd1ba6e05dbe02540168cb24d47e8dcf69e8d00b7da42a08/scikit_learn-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:56079a99c20d230e873ea40753102102734c5953366972a71d5cb39a32bc40c6", size = 8096518, upload-time = "2025-12-10T07:08:36.339Z" }, + { url = "https://files.pythonhosted.org/packages/d1/77/482076a678458307f0deb44e29891d6022617b2a64c840c725495bee343f/scikit_learn-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:3bad7565bc9cf37ce19a7c0d107742b320c1285df7aab1a6e2d28780df167242", size = 7754546, upload-time = "2025-12-10T07:08:38.128Z" }, + { url = "https://files.pythonhosted.org/packages/2d/d1/ef294ca754826daa043b2a104e59960abfab4cf653891037d19dd5b6f3cf/scikit_learn-1.8.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4511be56637e46c25721e83d1a9cea9614e7badc7040c4d573d75fbe257d6fd7", size = 8848305, upload-time = "2025-12-10T07:08:41.013Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e2/b1f8b05138ee813b8e1a4149f2f0d289547e60851fd1bb268886915adbda/scikit_learn-1.8.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:a69525355a641bf8ef136a7fa447672fb54fe8d60cab5538d9eb7c6438543fb9", size = 8432257, upload-time = "2025-12-10T07:08:42.873Z" }, + { url = "https://files.pythonhosted.org/packages/26/11/c32b2138a85dcb0c99f6afd13a70a951bfdff8a6ab42d8160522542fb647/scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c2656924ec73e5939c76ac4c8b026fc203b83d8900362eb2599d8aee80e4880f", size = 8678673, upload-time = "2025-12-10T07:08:45.362Z" }, + { url = "https://files.pythonhosted.org/packages/c7/57/51f2384575bdec454f4fe4e7a919d696c9ebce914590abf3e52d47607ab8/scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15fc3b5d19cc2be65404786857f2e13c70c83dd4782676dd6814e3b89dc8f5b9", size = 8922467, upload-time = "2025-12-10T07:08:47.408Z" }, + { url = "https://files.pythonhosted.org/packages/35/4d/748c9e2872637a57981a04adc038dacaa16ba8ca887b23e34953f0b3f742/scikit_learn-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:00d6f1d66fbcf4eba6e356e1420d33cc06c70a45bb1363cd6f6a8e4ebbbdece2", size = 8774395, upload-time = "2025-12-10T07:08:49.337Z" }, + { url = "https://files.pythonhosted.org/packages/60/22/d7b2ebe4704a5e50790ba089d5c2ae308ab6bb852719e6c3bd4f04c3a363/scikit_learn-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:f28dd15c6bb0b66ba09728cf09fd8736c304be29409bd8445a080c1280619e8c", size = 8002647, upload-time = "2025-12-10T07:08:51.601Z" }, +] + +[[package]] +name = "scipy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954, upload-time = "2026-02-23T00:17:49.855Z" }, + { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662, upload-time = "2026-02-23T00:18:01.64Z" }, + { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366, upload-time = "2026-02-23T00:18:12.015Z" }, + { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017, upload-time = "2026-02-23T00:18:21.502Z" }, + { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842, upload-time = "2026-02-23T00:18:35.367Z" }, + { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890, upload-time = "2026-02-23T00:18:49.188Z" }, + { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557, upload-time = "2026-02-23T00:18:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856, upload-time = "2026-02-23T00:19:00.307Z" }, + { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682, upload-time = "2026-02-23T00:19:07.67Z" }, + { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340, upload-time = "2026-02-23T00:19:12.024Z" }, + { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199, upload-time = "2026-02-23T00:19:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001, upload-time = "2026-02-23T00:19:22.241Z" }, + { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719, upload-time = "2026-02-23T00:19:26.329Z" }, + { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595, upload-time = "2026-02-23T00:19:30.304Z" }, + { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429, upload-time = "2026-02-23T00:19:35.536Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952, upload-time = "2026-02-23T00:19:42.259Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063, upload-time = "2026-02-23T00:19:47.547Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449, upload-time = "2026-02-23T00:19:53.238Z" }, + { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943, upload-time = "2026-02-23T00:20:50.89Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621, upload-time = "2026-02-23T00:20:55.871Z" }, + { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708, upload-time = "2026-02-23T00:19:58.694Z" }, + { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135, upload-time = "2026-02-23T00:20:03.934Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977, upload-time = "2026-02-23T00:20:07.935Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601, upload-time = "2026-02-23T00:20:12.161Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667, upload-time = "2026-02-23T00:20:17.208Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159, upload-time = "2026-02-23T00:20:23.087Z" }, + { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771, upload-time = "2026-02-23T00:20:28.636Z" }, + { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910, upload-time = "2026-02-23T00:20:34.743Z" }, + { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980, upload-time = "2026-02-23T00:20:40.575Z" }, + { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543, upload-time = "2026-02-23T00:20:45.313Z" }, + { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510, upload-time = "2026-02-23T00:21:01.015Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131, upload-time = "2026-02-23T00:21:05.888Z" }, + { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032, upload-time = "2026-02-23T00:21:09.904Z" }, + { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766, upload-time = "2026-02-23T00:21:14.313Z" }, + { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007, upload-time = "2026-02-23T00:21:19.663Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333, upload-time = "2026-02-23T00:21:25.278Z" }, + { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066, upload-time = "2026-02-23T00:21:31.358Z" }, + { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763, upload-time = "2026-02-23T00:21:37.247Z" }, + { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984, upload-time = "2026-02-23T00:22:35.023Z" }, + { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877, upload-time = "2026-02-23T00:22:39.798Z" }, + { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750, upload-time = "2026-02-23T00:21:42.289Z" }, + { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858, upload-time = "2026-02-23T00:21:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723, upload-time = "2026-02-23T00:21:52.039Z" }, + { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098, upload-time = "2026-02-23T00:21:56.185Z" }, + { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397, upload-time = "2026-02-23T00:22:01.404Z" }, + { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163, upload-time = "2026-02-23T00:22:07.024Z" }, + { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291, upload-time = "2026-02-23T00:22:12.585Z" }, + { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317, upload-time = "2026-02-23T00:22:18.513Z" }, + { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327, upload-time = "2026-02-23T00:22:24.442Z" }, + { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165, upload-time = "2026-02-23T00:22:29.563Z" }, +] + +[[package]] +name = "setuptools" +version = "81.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/1c/73e719955c59b8e424d015ab450f51c0af856ae46ea2da83eba51cc88de1/setuptools-81.0.0.tar.gz", hash = "sha256:487b53915f52501f0a79ccfd0c02c165ffe06631443a886740b91af4b7a5845a", size = 1198299, upload-time = "2026-02-06T21:10:39.601Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/e3/c164c88b2e5ce7b24d667b9bd83589cf4f3520d97cad01534cd3c4f55fdb/setuptools-81.0.0-py3-none-any.whl", hash = "sha256:fdd925d5c5d9f62e4b74b30d6dd7828ce236fd6ed998a08d81de62ce5a6310d6", size = 1062021, upload-time = "2026-02-06T21:10:37.175Z" }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "sympy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, +] + +[[package]] +name = "threadpoolctl" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, +] + +[[package]] +name = "timm" +version = "1.0.26" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, + { name = "pyyaml" }, + { name = "safetensors" }, + { name = "torch" }, + { name = "torchvision" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7b/1e/e924b3b2326a856aaf68586f9c52a5fc81ef45715eca408393b68c597e0e/timm-1.0.26.tar.gz", hash = "sha256:f66f082f2f381cf68431c22714c8b70f723837fa2a185b155961eab90f2d5b10", size = 2419859, upload-time = "2026-03-23T18:12:10.272Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/e9/bebf3d50e3fc847378988235f87c37ad3ac26d386041ab915d15e92025cd/timm-1.0.26-py3-none-any.whl", hash = "sha256:985c330de5ccc3a2aa0224eb7272e6a336084702390bb7e3801f3c91603d3683", size = 2568766, upload-time = "2026-03-23T18:12:08.062Z" }, +] + +[[package]] +name = "tokenizers" +version = "0.22.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/73/6f/f80cfef4a312e1fb34baf7d85c72d4411afde10978d4657f8cdd811d3ccc/tokenizers-0.22.2.tar.gz", hash = "sha256:473b83b915e547aa366d1eee11806deaf419e17be16310ac0a14077f1e28f917", size = 372115, upload-time = "2026-01-05T10:45:15.988Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/97/5dbfabf04c7e348e655e907ed27913e03db0923abb5dfdd120d7b25630e1/tokenizers-0.22.2-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:544dd704ae7238755d790de45ba8da072e9af3eea688f698b137915ae959281c", size = 3100275, upload-time = "2026-01-05T10:41:02.158Z" }, + { url = "https://files.pythonhosted.org/packages/2e/47/174dca0502ef88b28f1c9e06b73ce33500eedfac7a7692108aec220464e7/tokenizers-0.22.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:1e418a55456beedca4621dbab65a318981467a2b188e982a23e117f115ce5001", size = 2981472, upload-time = "2026-01-05T10:41:00.276Z" }, + { url = "https://files.pythonhosted.org/packages/d6/84/7990e799f1309a8b87af6b948f31edaa12a3ed22d11b352eaf4f4b2e5753/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2249487018adec45d6e3554c71d46eb39fa8ea67156c640f7513eb26f318cec7", size = 3290736, upload-time = "2026-01-05T10:40:32.165Z" }, + { url = "https://files.pythonhosted.org/packages/78/59/09d0d9ba94dcd5f4f1368d4858d24546b4bdc0231c2354aa31d6199f0399/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25b85325d0815e86e0bac263506dd114578953b7b53d7de09a6485e4a160a7dd", size = 3168835, upload-time = "2026-01-05T10:40:38.847Z" }, + { url = "https://files.pythonhosted.org/packages/47/50/b3ebb4243e7160bda8d34b731e54dd8ab8b133e50775872e7a434e524c28/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfb88f22a209ff7b40a576d5324bf8286b519d7358663db21d6246fb17eea2d5", size = 3521673, upload-time = "2026-01-05T10:40:56.614Z" }, + { url = "https://files.pythonhosted.org/packages/e0/fa/89f4cb9e08df770b57adb96f8cbb7e22695a4cb6c2bd5f0c4f0ebcf33b66/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c774b1276f71e1ef716e5486f21e76333464f47bece56bbd554485982a9e03e", size = 3724818, upload-time = "2026-01-05T10:40:44.507Z" }, + { url = "https://files.pythonhosted.org/packages/64/04/ca2363f0bfbe3b3d36e95bf67e56a4c88c8e3362b658e616d1ac185d47f2/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df6c4265b289083bf710dff49bc51ef252f9d5be33a45ee2bed151114a56207b", size = 3379195, upload-time = "2026-01-05T10:40:51.139Z" }, + { url = "https://files.pythonhosted.org/packages/2e/76/932be4b50ef6ccedf9d3c6639b056a967a86258c6d9200643f01269211ca/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:369cc9fc8cc10cb24143873a0d95438bb8ee257bb80c71989e3ee290e8d72c67", size = 3274982, upload-time = "2026-01-05T10:40:58.331Z" }, + { url = "https://files.pythonhosted.org/packages/1d/28/5f9f5a4cc211b69e89420980e483831bcc29dade307955cc9dc858a40f01/tokenizers-0.22.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:29c30b83d8dcd061078b05ae0cb94d3c710555fbb44861139f9f83dcca3dc3e4", size = 9478245, upload-time = "2026-01-05T10:41:04.053Z" }, + { url = "https://files.pythonhosted.org/packages/6c/fb/66e2da4704d6aadebf8cb39f1d6d1957df667ab24cff2326b77cda0dcb85/tokenizers-0.22.2-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:37ae80a28c1d3265bb1f22464c856bd23c02a05bb211e56d0c5301a435be6c1a", size = 9560069, upload-time = "2026-01-05T10:45:10.673Z" }, + { url = "https://files.pythonhosted.org/packages/16/04/fed398b05caa87ce9b1a1bb5166645e38196081b225059a6edaff6440fac/tokenizers-0.22.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:791135ee325f2336f498590eb2f11dc5c295232f288e75c99a36c5dbce63088a", size = 9899263, upload-time = "2026-01-05T10:45:12.559Z" }, + { url = "https://files.pythonhosted.org/packages/05/a1/d62dfe7376beaaf1394917e0f8e93ee5f67fea8fcf4107501db35996586b/tokenizers-0.22.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:38337540fbbddff8e999d59970f3c6f35a82de10053206a7562f1ea02d046fa5", size = 10033429, upload-time = "2026-01-05T10:45:14.333Z" }, + { url = "https://files.pythonhosted.org/packages/fd/18/a545c4ea42af3df6effd7d13d250ba77a0a86fb20393143bbb9a92e434d4/tokenizers-0.22.2-cp39-abi3-win32.whl", hash = "sha256:a6bf3f88c554a2b653af81f3204491c818ae2ac6fbc09e76ef4773351292bc92", size = 2502363, upload-time = "2026-01-05T10:45:20.593Z" }, + { url = "https://files.pythonhosted.org/packages/65/71/0670843133a43d43070abeb1949abfdef12a86d490bea9cd9e18e37c5ff7/tokenizers-0.22.2-cp39-abi3-win_amd64.whl", hash = "sha256:c9ea31edff2968b44a88f97d784c2f16dc0729b8b143ed004699ebca91f05c48", size = 2747786, upload-time = "2026-01-05T10:45:18.411Z" }, + { url = "https://files.pythonhosted.org/packages/72/f4/0de46cfa12cdcbcd464cc59fde36912af405696f687e53a091fb432f694c/tokenizers-0.22.2-cp39-abi3-win_arm64.whl", hash = "sha256:9ce725d22864a1e965217204946f830c37876eee3b2ba6fc6255e8e903d5fcbc", size = 2612133, upload-time = "2026-01-05T10:45:17.232Z" }, +] + +[[package]] +name = "torch" +version = "2.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-bindings", marker = "sys_platform == 'linux'" }, + { name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "sys_platform == 'linux'" }, + { name = "filelock" }, + { name = "fsspec" }, + { name = "jinja2" }, + { name = "networkx" }, + { name = "nvidia-cudnn-cu13", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cusparselt-cu13", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nccl-cu13", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nvshmem-cu13", marker = "sys_platform == 'linux'" }, + { name = "setuptools" }, + { name = "sympy" }, + { name = "triton", marker = "sys_platform == 'linux'" }, + { name = "typing-extensions" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/8b/69e3008d78e5cee2b30183340cc425081b78afc5eff3d080daab0adda9aa/torch-2.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4b5866312ee6e52ea625cd211dcb97d6a2cdc1131a5f15cc0d87eec948f6dd34", size = 80606338, upload-time = "2026-03-23T18:11:34.781Z" }, + { url = "https://files.pythonhosted.org/packages/13/16/42e5915ebe4868caa6bac83a8ed59db57f12e9a61b7d749d584776ed53d5/torch-2.11.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f99924682ef0aa6a4ab3b1b76f40dc6e273fca09f367d15a524266db100a723f", size = 419731115, upload-time = "2026-03-23T18:11:06.944Z" }, + { url = "https://files.pythonhosted.org/packages/1a/c9/82638ef24d7877510f83baf821f5619a61b45568ce21c0a87a91576510aa/torch-2.11.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:0f68f4ac6d95d12e896c3b7a912b5871619542ec54d3649cf48cc1edd4dd2756", size = 530712279, upload-time = "2026-03-23T18:10:31.481Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ff/6756f1c7ee302f6d202120e0f4f05b432b839908f9071157302cedfc5232/torch-2.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:fbf39280699d1b869f55eac536deceaa1b60bd6788ba74f399cc67e60a5fab10", size = 114556047, upload-time = "2026-03-23T18:10:55.931Z" }, + { url = "https://files.pythonhosted.org/packages/87/89/5ea6722763acee56b045435fb84258db7375c48165ec8be7880ab2b281c5/torch-2.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6debd97ccd3205bbb37eb806a9d8219e1139d15419982c09e23ef7d4369d18", size = 80606801, upload-time = "2026-03-23T18:10:18.649Z" }, + { url = "https://files.pythonhosted.org/packages/32/d1/8ed2173589cbfe744ed54e5a73efc107c0085ba5777ee93a5f4c1ab90553/torch-2.11.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:63a68fa59de8f87acc7e85a5478bb2dddbb3392b7593ec3e78827c793c4b73fd", size = 419732382, upload-time = "2026-03-23T18:08:30.835Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e1/b73f7c575a4b8f87a5928f50a1e35416b5e27295d8be9397d5293e7e8d4c/torch-2.11.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:cc89b9b173d9adfab59fd227f0ab5e5516d9a52b658ae41d64e59d2e55a418db", size = 530711509, upload-time = "2026-03-23T18:08:47.213Z" }, + { url = "https://files.pythonhosted.org/packages/66/82/3e3fcdd388fbe54e29fd3f991f36846ff4ac90b0d0181e9c8f7236565f82/torch-2.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:4dda3b3f52d121063a731ddb835f010dc137b920d7fec2778e52f60d8e4bf0cd", size = 114555842, upload-time = "2026-03-23T18:09:52.111Z" }, + { url = "https://files.pythonhosted.org/packages/db/38/8ac78069621b8c2b4979c2f96dc8409ef5e9c4189f6aac629189a78677ca/torch-2.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8b394322f49af4362d4f80e424bcaca7efcd049619af03a4cf4501520bdf0fb4", size = 80959574, upload-time = "2026-03-23T18:10:14.214Z" }, + { url = "https://files.pythonhosted.org/packages/6d/6c/56bfb37073e7136e6dd86bfc6af7339946dd684e0ecf2155ac0eee687ae1/torch-2.11.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:2658f34ce7e2dabf4ec73b45e2ca68aedad7a5be87ea756ad656eaf32bf1e1ea", size = 419732324, upload-time = "2026-03-23T18:09:36.604Z" }, + { url = "https://files.pythonhosted.org/packages/07/f4/1b666b6d61d3394cca306ea543ed03a64aad0a201b6cd159f1d41010aeb1/torch-2.11.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:98bb213c3084cfe176302949bdc360074b18a9da7ab59ef2edc9d9f742504778", size = 530596026, upload-time = "2026-03-23T18:09:20.842Z" }, + { url = "https://files.pythonhosted.org/packages/48/6b/30d1459fa7e4b67e9e3fe1685ca1d8bb4ce7c62ef436c3a615963c6c866c/torch-2.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a97b94bbf62992949b4730c6cd2cc9aee7b335921ee8dc207d930f2ed09ae2db", size = 114793702, upload-time = "2026-03-23T18:09:47.304Z" }, + { url = "https://files.pythonhosted.org/packages/26/0d/8603382f61abd0db35841148ddc1ffd607bf3100b11c6e1dab6d2fc44e72/torch-2.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:01018087326984a33b64e04c8cb5c2795f9120e0d775ada1f6638840227b04d7", size = 80573442, upload-time = "2026-03-23T18:09:10.117Z" }, + { url = "https://files.pythonhosted.org/packages/c7/86/7cd7c66cb9cec6be330fff36db5bd0eef386d80c031b581ec81be1d4b26c/torch-2.11.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:2bb3cc54bd0dea126b0060bb1ec9de0f9c7f7342d93d436646516b0330cd5be7", size = 419749385, upload-time = "2026-03-23T18:07:33.77Z" }, + { url = "https://files.pythonhosted.org/packages/47/e8/b98ca2d39b2e0e4730c0ee52537e488e7008025bc77ca89552ff91021f7c/torch-2.11.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:4dc8b3809469b6c30b411bb8c4cad3828efd26236153d9beb6a3ec500f211a60", size = 530716756, upload-time = "2026-03-23T18:07:50.02Z" }, + { url = "https://files.pythonhosted.org/packages/78/88/d4a4cda8362f8a30d1ed428564878c3cafb0d87971fbd3947d4c84552095/torch-2.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:2b4e811728bd0cc58fb2b0948fe939a1ee2bf1422f6025be2fca4c7bd9d79718", size = 114552300, upload-time = "2026-03-23T18:09:05.617Z" }, + { url = "https://files.pythonhosted.org/packages/bf/46/4419098ed6d801750f26567b478fc185c3432e11e2cad712bc6b4c2ab0d0/torch-2.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8245477871c3700d4370352ffec94b103cfcb737229445cf9946cddb7b2ca7cd", size = 80959460, upload-time = "2026-03-23T18:09:00.818Z" }, + { url = "https://files.pythonhosted.org/packages/fd/66/54a56a4a6ceaffb567231994a9745821d3af922a854ed33b0b3a278e0a99/torch-2.11.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:ab9a8482f475f9ba20e12db84b0e55e2f58784bdca43a854a6ccd3fd4b9f75e6", size = 419735835, upload-time = "2026-03-23T18:07:18.974Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e7/0b6665f533aa9e337662dc190425abc0af1fe3234088f4454c52393ded61/torch-2.11.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:563ed3d25542d7e7bbc5b235ccfacfeb97fb470c7fee257eae599adb8005c8a2", size = 530613405, upload-time = "2026-03-23T18:08:07.014Z" }, + { url = "https://files.pythonhosted.org/packages/cf/bf/c8d12a2c86dbfd7f40fb2f56fbf5a505ccf2d9ce131eb559dfc7c51e1a04/torch-2.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b2a43985ff5ef6ddd923bbcf99943e5f58059805787c5c9a2622bf05ca2965b0", size = 114792991, upload-time = "2026-03-23T18:08:19.216Z" }, +] + +[[package]] +name = "torchvision" +version = "0.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "pillow" }, + { name = "torch" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/e7/56b47cc3b132aea90ccce22bcb8975dec688b002150012acc842846039d0/torchvision-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c409e1c3fdebec7a3834465086dbda8bf7680eff79abf7fd2f10c6b59520a7a4", size = 1863502, upload-time = "2026-03-23T18:12:57.326Z" }, + { url = "https://files.pythonhosted.org/packages/f4/ec/5c31c92c08b65662fe9604a4067ae8232582805949f11ddc042cebe818ed/torchvision-0.26.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:406557718e62fdf10f5706e88d8a5ec000f872da913bf629aab9297622585547", size = 7767944, upload-time = "2026-03-23T18:12:42.805Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d8/cb6ccda1a1f35a6597645818641701207b3e8e13553e75fce5d86bac74b2/torchvision-0.26.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d61a5abb6b42a0c0c311996c2ac4b83a94418a97182c83b055a2a4ae985e05aa", size = 7522205, upload-time = "2026-03-23T18:12:54.654Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a9/c272623a0f735c35f0f6cd6dc74784d4f970e800cf063bb76687895a2ab9/torchvision-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:7993c01648e7c61d191b018e84d38fe0825c8fcb2720cd0f37caf7ba14404aa1", size = 4255155, upload-time = "2026-03-23T18:12:32.652Z" }, + { url = "https://files.pythonhosted.org/packages/da/80/0762f77f53605d10c9477be39bb47722cc8e383bbbc2531471ce0e396c07/torchvision-0.26.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5d63dd43162691258b1b3529b9041bac7d54caa37eae0925f997108268cbf7c4", size = 1860809, upload-time = "2026-03-23T18:12:47.629Z" }, + { url = "https://files.pythonhosted.org/packages/e6/81/0b3e58d1478c660a5af4268713486b2df7203f35abd9195fea87348a5178/torchvision-0.26.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:a39c7a26538c41fda453f9a9692b5ff9b35a5437db1d94f3027f6f509c160eac", size = 7727494, upload-time = "2026-03-23T18:12:46.062Z" }, + { url = "https://files.pythonhosted.org/packages/b6/dc/d9ab5d29115aa05e12e30f1397a3eeae1d88a511241dc3bce48dc4342675/torchvision-0.26.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:b7e6213620bbf97742e5f79832f9e9d769e6cf0f744c5b53dad80b76db633691", size = 7521747, upload-time = "2026-03-23T18:12:36.815Z" }, + { url = "https://files.pythonhosted.org/packages/a9/1b/f1bc86a918c5f6feab1eeff11982e2060f4704332e96185463d27855bdf5/torchvision-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:4280c35ec8cba1fcc8294fb87e136924708726864c379e4c54494797d86bc474", size = 4319880, upload-time = "2026-03-23T18:12:38.168Z" }, + { url = "https://files.pythonhosted.org/packages/66/28/b4ad0a723ed95b003454caffcc41894b34bd8379df340848cae2c33871de/torchvision-0.26.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:358fc4726d0c08615b6d83b3149854f11efb2a564ed1acb6fce882e151412d23", size = 1951973, upload-time = "2026-03-23T18:12:48.781Z" }, + { url = "https://files.pythonhosted.org/packages/71/e2/7a89096e6cf2f3336353b5338ba925e0addf9d8601920340e6bdf47e8eb3/torchvision-0.26.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:3daf9cc149cf3cdcbd4df9c59dae69ffca86c6823250442c3bbfd63fc2e26c61", size = 7728679, upload-time = "2026-03-23T18:12:26.196Z" }, + { url = "https://files.pythonhosted.org/packages/69/1d/4e1eebc17d18ce080a11dcf3df3f8f717f0efdfa00983f06e8ba79259f61/torchvision-0.26.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:82c3965eca27e86a316e31e4c3e5a16d353e0bcbe0ef8efa2e66502c54493c4b", size = 7609138, upload-time = "2026-03-23T18:12:35.327Z" }, + { url = "https://files.pythonhosted.org/packages/f3/a4/f1155e943ae5b32400d7000adc81c79bb0392b16ceb33bcf13e02e48cced/torchvision-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ebc043cc5a4f0bf22e7680806dbba37ffb19e70f6953bbb44ed1a90aeb5c9bea", size = 4248202, upload-time = "2026-03-23T18:12:41.423Z" }, + { url = "https://files.pythonhosted.org/packages/7f/c8/9bffa9c7f7bdf95b2a0a2dc535c290b9f1cc580c3fb3033ab1246ffffdeb/torchvision-0.26.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:eb61804eb9dbe88c5a2a6c4da8dec1d80d2d0a6f18c999c524e32266cb1ebcd3", size = 1860813, upload-time = "2026-03-23T18:12:39.636Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ac/48f28ffd227991f2e14f4392dde7e8dc14352bb9428c1ef4a4bbf5f7ed85/torchvision-0.26.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:9a904f2131cbfadab4df828088a9f66291ad33f49ff853872aed1f86848ef776", size = 7727777, upload-time = "2026-03-23T18:12:22.549Z" }, + { url = "https://files.pythonhosted.org/packages/a4/21/a2266f7f1b0e58e624ff15fd6f01041f59182c49551ece0db9a183071329/torchvision-0.26.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:0f3e572efe62ad645017ea847e0b5e4f2f638d4e39f05bc011d1eb9ac68d4806", size = 7522174, upload-time = "2026-03-23T18:12:29.565Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ba/1666f90bc0bdd77aaa11dcc42bb9f621a9c3668819c32430452e3d404730/torchvision-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:114bec0c0e98aa4ba446f63e2fe7a2cbca37b39ac933987ee4804f65de121800", size = 4348469, upload-time = "2026-03-23T18:12:24.44Z" }, + { url = "https://files.pythonhosted.org/packages/45/8f/1f0402ac55c2ae15651ff831957d083fe70b2d12282e72612a30ba601512/torchvision-0.26.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:b7d3e295624a28b3b1769228ce1345d94cf4d390dd31136766f76f2d20f718da", size = 1860826, upload-time = "2026-03-23T18:12:34.1Z" }, + { url = "https://files.pythonhosted.org/packages/d2/6a/18a582fe3c5ee26f49b5c9fb21ad8016b4d1c06d10178894a58653946fda/torchvision-0.26.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:7058c5878262937e876f20c25867b33724586aa4499e2853b2d52b99a5e51953", size = 7729089, upload-time = "2026-03-23T18:12:31.394Z" }, + { url = "https://files.pythonhosted.org/packages/c5/9b/f7e119b59499edc00c55c03adc9ec3bd96144d9b81c46852c431f9c64a9a/torchvision-0.26.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:8008474855623c6ba52876589dc52df0aa66e518c25eca841445348e5f79844c", size = 7522704, upload-time = "2026-03-23T18:12:20.301Z" }, + { url = "https://files.pythonhosted.org/packages/d0/6a/09f3844c10643f6c0de5d95abc863420cfaf194c88c7dffd0ac523e2015f/torchvision-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:e9d0e022c19a78552fb055d0414d47fecb4a649309b9968573daea160ba6869c", size = 4454275, upload-time = "2026-03-23T18:12:27.487Z" }, +] + +[[package]] +name = "tqdm" +version = "4.67.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598, upload-time = "2026-02-03T17:35:53.048Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374, upload-time = "2026-02-03T17:35:50.982Z" }, +] + +[[package]] +name = "transformers" +version = "5.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "regex" }, + { name = "safetensors" }, + { name = "tokenizers" }, + { name = "tqdm" }, + { name = "typer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ff/9d/fb46e729b461985f41a5740167688b924a4019141e5c164bea77548d3d9e/transformers-5.5.0.tar.gz", hash = "sha256:c8db656cf51c600cd8c75f06b20ef85c72e8b8ff9abc880c5d3e8bc70e0ddcbd", size = 8237745, upload-time = "2026-04-02T16:13:08.113Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/28/35f7411ff80a3640c1f4fc907dcbb6a65061ebb82f66950e38bfc9f7f740/transformers-5.5.0-py3-none-any.whl", hash = "sha256:821a9ff0961abbb29eb1eb686d78df1c85929fdf213a3fe49dc6bd94f9efa944", size = 10245591, upload-time = "2026-04-02T16:13:03.462Z" }, +] + +[[package]] +name = "triton" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/5d/08201db32823bdf77a0e2b9039540080b2e5c23a20706ddba942924ebcd6/triton-3.6.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:374f52c11a711fd062b4bfbb201fd9ac0a5febd28a96fb41b4a0f51dde3157f4", size = 176128243, upload-time = "2026-01-20T16:16:07.857Z" }, + { url = "https://files.pythonhosted.org/packages/ab/a8/cdf8b3e4c98132f965f88c2313a4b493266832ad47fb52f23d14d4f86bb5/triton-3.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74caf5e34b66d9f3a429af689c1c7128daba1d8208df60e81106b115c00d6fca", size = 188266850, upload-time = "2026-01-20T16:00:43.041Z" }, + { url = "https://files.pythonhosted.org/packages/3c/12/34d71b350e89a204c2c7777a9bba0dcf2f19a5bfdd70b57c4dbc5ffd7154/triton-3.6.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:448e02fe6dc898e9e5aa89cf0ee5c371e99df5aa5e8ad976a80b93334f3494fd", size = 176133521, upload-time = "2026-01-20T16:16:13.321Z" }, + { url = "https://files.pythonhosted.org/packages/f9/0b/37d991d8c130ce81a8728ae3c25b6e60935838e9be1b58791f5997b24a54/triton-3.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10c7f76c6e72d2ef08df639e3d0d30729112f47a56b0c81672edc05ee5116ac9", size = 188289450, upload-time = "2026-01-20T16:00:49.136Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4e/41b0c8033b503fd3cfcd12392cdd256945026a91ff02452bef40ec34bee7/triton-3.6.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1722e172d34e32abc3eb7711d0025bb69d7959ebea84e3b7f7a341cd7ed694d6", size = 176276087, upload-time = "2026-01-20T16:16:18.989Z" }, + { url = "https://files.pythonhosted.org/packages/35/f8/9c66bfc55361ec6d0e4040a0337fb5924ceb23de4648b8a81ae9d33b2b38/triton-3.6.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d002e07d7180fd65e622134fbd980c9a3d4211fb85224b56a0a0efbd422ab72f", size = 188400296, upload-time = "2026-01-20T16:00:56.042Z" }, + { url = "https://files.pythonhosted.org/packages/49/55/5ecf0dcaa0f2fbbd4420f7ef227ee3cb172e91e5fede9d0ecaddc43363b4/triton-3.6.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5523241e7d1abca00f1d240949eebdd7c673b005edbbce0aca95b8191f1d43", size = 176138577, upload-time = "2026-01-20T16:16:25.426Z" }, + { url = "https://files.pythonhosted.org/packages/df/3d/9e7eee57b37c80cec63322c0231bb6da3cfe535a91d7a4d64896fcb89357/triton-3.6.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a17a5d5985f0ac494ed8a8e54568f092f7057ef60e1b0fa09d3fd1512064e803", size = 188273063, upload-time = "2026-01-20T16:01:07.278Z" }, + { url = "https://files.pythonhosted.org/packages/48/db/56ee649cab5eaff4757541325aca81f52d02d4a7cd3506776cad2451e060/triton-3.6.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b3a97e8ed304dfa9bd23bb41ca04cdf6b2e617d5e782a8653d616037a5d537d", size = 176274804, upload-time = "2026-01-20T16:16:31.528Z" }, + { url = "https://files.pythonhosted.org/packages/f6/56/6113c23ff46c00aae423333eb58b3e60bdfe9179d542781955a5e1514cb3/triton-3.6.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:46bd1c1af4b6704e554cad2eeb3b0a6513a980d470ccfa63189737340c7746a7", size = 188397994, upload-time = "2026-01-20T16:01:14.236Z" }, +] + +[[package]] +name = "typer" +version = "0.24.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/24/cb09efec5cc954f7f9b930bf8279447d24618bb6758d4f6adf2574c41780/typer-0.24.1.tar.gz", hash = "sha256:e39b4732d65fbdcde189ae76cf7cd48aeae72919dea1fdfc16593be016256b45", size = 118613, upload-time = "2026-02-21T16:54:40.609Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl", hash = "sha256:112c1f0ce578bfb4cab9ffdabc68f031416ebcc216536611ba21f04e9aa84c9e", size = 56085, upload-time = "2026-02-21T16:54:41.616Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "tzdata" +version = "2026.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/f5/cd531b2d15a671a40c0f66cf06bc3570a12cd56eef98960068ebbad1bf5a/tzdata-2026.1.tar.gz", hash = "sha256:67658a1903c75917309e753fdc349ac0efd8c27db7a0cb406a25be4840f87f98", size = 197639, upload-time = "2026-04-03T11:25:22.002Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl", hash = "sha256:4b1d2be7ac37ceafd7327b961aa3a54e467efbdb563a23655fbfe0d39cfc42a9", size = 348952, upload-time = "2026-04-03T11:25:20.313Z" }, +] + +[[package]] +name = "urllib3" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/a2/8e3becb46433538a38726c948d3399905a4c7cabd0df578ede5dc51f0ec2/wcwidth-0.6.0.tar.gz", hash = "sha256:cdc4e4262d6ef9a1a57e018384cbeb1208d8abbc64176027e2c2455c81313159", size = 159684, upload-time = "2026-02-06T19:19:40.919Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl", hash = "sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad", size = 94189, upload-time = "2026-02-06T19:19:39.646Z" }, +] + +[[package]] +name = "xxhash" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/02/84/30869e01909fb37a6cc7e18688ee8bf1e42d57e7e0777636bd47524c43c7/xxhash-3.6.0.tar.gz", hash = "sha256:f0162a78b13a0d7617b2845b90c763339d1f1d82bb04a4b07f4ab535cc5e05d6", size = 85160, upload-time = "2025-10-02T14:37:08.097Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/07/d9412f3d7d462347e4511181dea65e47e0d0e16e26fbee2ea86a2aefb657/xxhash-3.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:01362c4331775398e7bb34e3ab403bc9ee9f7c497bc7dee6272114055277dd3c", size = 32744, upload-time = "2025-10-02T14:34:34.622Z" }, + { url = "https://files.pythonhosted.org/packages/79/35/0429ee11d035fc33abe32dca1b2b69e8c18d236547b9a9b72c1929189b9a/xxhash-3.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b7b2df81a23f8cb99656378e72501b2cb41b1827c0f5a86f87d6b06b69f9f204", size = 30816, upload-time = "2025-10-02T14:34:36.043Z" }, + { url = "https://files.pythonhosted.org/packages/b7/f2/57eb99aa0f7d98624c0932c5b9a170e1806406cdbcdb510546634a1359e0/xxhash-3.6.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:dc94790144e66b14f67b10ac8ed75b39ca47536bf8800eb7c24b50271ea0c490", size = 194035, upload-time = "2025-10-02T14:34:37.354Z" }, + { url = "https://files.pythonhosted.org/packages/4c/ed/6224ba353690d73af7a3f1c7cdb1fc1b002e38f783cb991ae338e1eb3d79/xxhash-3.6.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93f107c673bccf0d592cdba077dedaf52fe7f42dcd7676eba1f6d6f0c3efffd2", size = 212914, upload-time = "2025-10-02T14:34:38.6Z" }, + { url = "https://files.pythonhosted.org/packages/38/86/fb6b6130d8dd6b8942cc17ab4d90e223653a89aa32ad2776f8af7064ed13/xxhash-3.6.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aa5ee3444c25b69813663c9f8067dcfaa2e126dc55e8dddf40f4d1c25d7effa", size = 212163, upload-time = "2025-10-02T14:34:39.872Z" }, + { url = "https://files.pythonhosted.org/packages/ee/dc/e84875682b0593e884ad73b2d40767b5790d417bde603cceb6878901d647/xxhash-3.6.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7f99123f0e1194fa59cc69ad46dbae2e07becec5df50a0509a808f90a0f03f0", size = 445411, upload-time = "2025-10-02T14:34:41.569Z" }, + { url = "https://files.pythonhosted.org/packages/11/4f/426f91b96701ec2f37bb2b8cec664eff4f658a11f3fa9d94f0a887ea6d2b/xxhash-3.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49e03e6fe2cac4a1bc64952dd250cf0dbc5ef4ebb7b8d96bce82e2de163c82a2", size = 193883, upload-time = "2025-10-02T14:34:43.249Z" }, + { url = "https://files.pythonhosted.org/packages/53/5a/ddbb83eee8e28b778eacfc5a85c969673e4023cdeedcfcef61f36731610b/xxhash-3.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bd17fede52a17a4f9a7bc4472a5867cb0b160deeb431795c0e4abe158bc784e9", size = 210392, upload-time = "2025-10-02T14:34:45.042Z" }, + { url = "https://files.pythonhosted.org/packages/1e/c2/ff69efd07c8c074ccdf0a4f36fcdd3d27363665bcdf4ba399abebe643465/xxhash-3.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6fb5f5476bef678f69db04f2bd1efbed3030d2aba305b0fc1773645f187d6a4e", size = 197898, upload-time = "2025-10-02T14:34:46.302Z" }, + { url = "https://files.pythonhosted.org/packages/58/ca/faa05ac19b3b622c7c9317ac3e23954187516298a091eb02c976d0d3dd45/xxhash-3.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:843b52f6d88071f87eba1631b684fcb4b2068cd2180a0224122fe4ef011a9374", size = 210655, upload-time = "2025-10-02T14:34:47.571Z" }, + { url = "https://files.pythonhosted.org/packages/d4/7a/06aa7482345480cc0cb597f5c875b11a82c3953f534394f620b0be2f700c/xxhash-3.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7d14a6cfaf03b1b6f5f9790f76880601ccc7896aff7ab9cd8978a939c1eb7e0d", size = 414001, upload-time = "2025-10-02T14:34:49.273Z" }, + { url = "https://files.pythonhosted.org/packages/23/07/63ffb386cd47029aa2916b3d2f454e6cc5b9f5c5ada3790377d5430084e7/xxhash-3.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:418daf3db71e1413cfe211c2f9a528456936645c17f46b5204705581a45390ae", size = 191431, upload-time = "2025-10-02T14:34:50.798Z" }, + { url = "https://files.pythonhosted.org/packages/0f/93/14fde614cadb4ddf5e7cebf8918b7e8fac5ae7861c1875964f17e678205c/xxhash-3.6.0-cp312-cp312-win32.whl", hash = "sha256:50fc255f39428a27299c20e280d6193d8b63b8ef8028995323bf834a026b4fbb", size = 30617, upload-time = "2025-10-02T14:34:51.954Z" }, + { url = "https://files.pythonhosted.org/packages/13/5d/0d125536cbe7565a83d06e43783389ecae0c0f2ed037b48ede185de477c0/xxhash-3.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:c0f2ab8c715630565ab8991b536ecded9416d615538be8ecddce43ccf26cbc7c", size = 31534, upload-time = "2025-10-02T14:34:53.276Z" }, + { url = "https://files.pythonhosted.org/packages/54/85/6ec269b0952ec7e36ba019125982cf11d91256a778c7c3f98a4c5043d283/xxhash-3.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:eae5c13f3bc455a3bbb68bdc513912dc7356de7e2280363ea235f71f54064829", size = 27876, upload-time = "2025-10-02T14:34:54.371Z" }, + { url = "https://files.pythonhosted.org/packages/33/76/35d05267ac82f53ae9b0e554da7c5e281ee61f3cad44c743f0fcd354f211/xxhash-3.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:599e64ba7f67472481ceb6ee80fa3bd828fd61ba59fb11475572cc5ee52b89ec", size = 32738, upload-time = "2025-10-02T14:34:55.839Z" }, + { url = "https://files.pythonhosted.org/packages/31/a8/3fbce1cd96534a95e35d5120637bf29b0d7f5d8fa2f6374e31b4156dd419/xxhash-3.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7d8b8aaa30fca4f16f0c84a5c8d7ddee0e25250ec2796c973775373257dde8f1", size = 30821, upload-time = "2025-10-02T14:34:57.219Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ea/d387530ca7ecfa183cb358027f1833297c6ac6098223fd14f9782cd0015c/xxhash-3.6.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d597acf8506d6e7101a4a44a5e428977a51c0fadbbfd3c39650cca9253f6e5a6", size = 194127, upload-time = "2025-10-02T14:34:59.21Z" }, + { url = "https://files.pythonhosted.org/packages/ba/0c/71435dcb99874b09a43b8d7c54071e600a7481e42b3e3ce1eb5226a5711a/xxhash-3.6.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:858dc935963a33bc33490128edc1c12b0c14d9c7ebaa4e387a7869ecc4f3e263", size = 212975, upload-time = "2025-10-02T14:35:00.816Z" }, + { url = "https://files.pythonhosted.org/packages/84/7a/c2b3d071e4bb4a90b7057228a99b10d51744878f4a8a6dd643c8bd897620/xxhash-3.6.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba284920194615cb8edf73bf52236ce2e1664ccd4a38fdb543506413529cc546", size = 212241, upload-time = "2025-10-02T14:35:02.207Z" }, + { url = "https://files.pythonhosted.org/packages/81/5f/640b6eac0128e215f177df99eadcd0f1b7c42c274ab6a394a05059694c5a/xxhash-3.6.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b54219177f6c6674d5378bd862c6aedf64725f70dd29c472eaae154df1a2e89", size = 445471, upload-time = "2025-10-02T14:35:03.61Z" }, + { url = "https://files.pythonhosted.org/packages/5e/1e/3c3d3ef071b051cc3abbe3721ffb8365033a172613c04af2da89d5548a87/xxhash-3.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:42c36dd7dbad2f5238950c377fcbf6811b1cdb1c444fab447960030cea60504d", size = 193936, upload-time = "2025-10-02T14:35:05.013Z" }, + { url = "https://files.pythonhosted.org/packages/2c/bd/4a5f68381939219abfe1c22a9e3a5854a4f6f6f3c4983a87d255f21f2e5d/xxhash-3.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f22927652cba98c44639ffdc7aaf35828dccf679b10b31c4ad72a5b530a18eb7", size = 210440, upload-time = "2025-10-02T14:35:06.239Z" }, + { url = "https://files.pythonhosted.org/packages/eb/37/b80fe3d5cfb9faff01a02121a0f4d565eb7237e9e5fc66e73017e74dcd36/xxhash-3.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b45fad44d9c5c119e9c6fbf2e1c656a46dc68e280275007bbfd3d572b21426db", size = 197990, upload-time = "2025-10-02T14:35:07.735Z" }, + { url = "https://files.pythonhosted.org/packages/d7/fd/2c0a00c97b9e18f72e1f240ad4e8f8a90fd9d408289ba9c7c495ed7dc05c/xxhash-3.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:6f2580ffab1a8b68ef2b901cde7e55fa8da5e4be0977c68f78fc80f3c143de42", size = 210689, upload-time = "2025-10-02T14:35:09.438Z" }, + { url = "https://files.pythonhosted.org/packages/93/86/5dd8076a926b9a95db3206aba20d89a7fc14dd5aac16e5c4de4b56033140/xxhash-3.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:40c391dd3cd041ebc3ffe6f2c862f402e306eb571422e0aa918d8070ba31da11", size = 414068, upload-time = "2025-10-02T14:35:11.162Z" }, + { url = "https://files.pythonhosted.org/packages/af/3c/0bb129170ee8f3650f08e993baee550a09593462a5cddd8e44d0011102b1/xxhash-3.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f205badabde7aafd1a31e8ca2a3e5a763107a71c397c4481d6a804eb5063d8bd", size = 191495, upload-time = "2025-10-02T14:35:12.971Z" }, + { url = "https://files.pythonhosted.org/packages/e9/3a/6797e0114c21d1725e2577508e24006fd7ff1d8c0c502d3b52e45c1771d8/xxhash-3.6.0-cp313-cp313-win32.whl", hash = "sha256:2577b276e060b73b73a53042ea5bd5203d3e6347ce0d09f98500f418a9fcf799", size = 30620, upload-time = "2025-10-02T14:35:14.129Z" }, + { url = "https://files.pythonhosted.org/packages/86/15/9bc32671e9a38b413a76d24722a2bf8784a132c043063a8f5152d390b0f9/xxhash-3.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:757320d45d2fbcce8f30c42a6b2f47862967aea7bf458b9625b4bbe7ee390392", size = 31542, upload-time = "2025-10-02T14:35:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/39/c5/cc01e4f6188656e56112d6a8e0dfe298a16934b8c47a247236549a3f7695/xxhash-3.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:457b8f85dec5825eed7b69c11ae86834a018b8e3df5e77783c999663da2f96d6", size = 27880, upload-time = "2025-10-02T14:35:16.315Z" }, + { url = "https://files.pythonhosted.org/packages/f3/30/25e5321c8732759e930c555176d37e24ab84365482d257c3b16362235212/xxhash-3.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a42e633d75cdad6d625434e3468126c73f13f7584545a9cf34e883aa1710e702", size = 32956, upload-time = "2025-10-02T14:35:17.413Z" }, + { url = "https://files.pythonhosted.org/packages/9f/3c/0573299560d7d9f8ab1838f1efc021a280b5ae5ae2e849034ef3dee18810/xxhash-3.6.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:568a6d743219e717b07b4e03b0a828ce593833e498c3b64752e0f5df6bfe84db", size = 31072, upload-time = "2025-10-02T14:35:18.844Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1c/52d83a06e417cd9d4137722693424885cc9878249beb3a7c829e74bf7ce9/xxhash-3.6.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bec91b562d8012dae276af8025a55811b875baace6af510412a5e58e3121bc54", size = 196409, upload-time = "2025-10-02T14:35:20.31Z" }, + { url = "https://files.pythonhosted.org/packages/e3/8e/c6d158d12a79bbd0b878f8355432075fc82759e356ab5a111463422a239b/xxhash-3.6.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78e7f2f4c521c30ad5e786fdd6bae89d47a32672a80195467b5de0480aa97b1f", size = 215736, upload-time = "2025-10-02T14:35:21.616Z" }, + { url = "https://files.pythonhosted.org/packages/bc/68/c4c80614716345d55071a396cf03d06e34b5f4917a467faf43083c995155/xxhash-3.6.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3ed0df1b11a79856df5ffcab572cbd6b9627034c1c748c5566fa79df9048a7c5", size = 214833, upload-time = "2025-10-02T14:35:23.32Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e9/ae27c8ffec8b953efa84c7c4a6c6802c263d587b9fc0d6e7cea64e08c3af/xxhash-3.6.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0e4edbfc7d420925b0dd5e792478ed393d6e75ff8fc219a6546fb446b6a417b1", size = 448348, upload-time = "2025-10-02T14:35:25.111Z" }, + { url = "https://files.pythonhosted.org/packages/d7/6b/33e21afb1b5b3f46b74b6bd1913639066af218d704cc0941404ca717fc57/xxhash-3.6.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fba27a198363a7ef87f8c0f6b171ec36b674fe9053742c58dd7e3201c1ab30ee", size = 196070, upload-time = "2025-10-02T14:35:26.586Z" }, + { url = "https://files.pythonhosted.org/packages/96/b6/fcabd337bc5fa624e7203aa0fa7d0c49eed22f72e93229431752bddc83d9/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:794fe9145fe60191c6532fa95063765529770edcdd67b3d537793e8004cabbfd", size = 212907, upload-time = "2025-10-02T14:35:28.087Z" }, + { url = "https://files.pythonhosted.org/packages/4b/d3/9ee6160e644d660fcf176c5825e61411c7f62648728f69c79ba237250143/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:6105ef7e62b5ac73a837778efc331a591d8442f8ef5c7e102376506cb4ae2729", size = 200839, upload-time = "2025-10-02T14:35:29.857Z" }, + { url = "https://files.pythonhosted.org/packages/0d/98/e8de5baa5109394baf5118f5e72ab21a86387c4f89b0e77ef3e2f6b0327b/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f01375c0e55395b814a679b3eea205db7919ac2af213f4a6682e01220e5fe292", size = 213304, upload-time = "2025-10-02T14:35:31.222Z" }, + { url = "https://files.pythonhosted.org/packages/7b/1d/71056535dec5c3177eeb53e38e3d367dd1d16e024e63b1cee208d572a033/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:d706dca2d24d834a4661619dcacf51a75c16d65985718d6a7d73c1eeeb903ddf", size = 416930, upload-time = "2025-10-02T14:35:32.517Z" }, + { url = "https://files.pythonhosted.org/packages/dc/6c/5cbde9de2cd967c322e651c65c543700b19e7ae3e0aae8ece3469bf9683d/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f059d9faeacd49c0215d66f4056e1326c80503f51a1532ca336a385edadd033", size = 193787, upload-time = "2025-10-02T14:35:33.827Z" }, + { url = "https://files.pythonhosted.org/packages/19/fa/0172e350361d61febcea941b0cc541d6e6c8d65d153e85f850a7b256ff8a/xxhash-3.6.0-cp313-cp313t-win32.whl", hash = "sha256:1244460adc3a9be84731d72b8e80625788e5815b68da3da8b83f78115a40a7ec", size = 30916, upload-time = "2025-10-02T14:35:35.107Z" }, + { url = "https://files.pythonhosted.org/packages/ad/e6/e8cf858a2b19d6d45820f072eff1bea413910592ff17157cabc5f1227a16/xxhash-3.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b1e420ef35c503869c4064f4a2f2b08ad6431ab7b229a05cce39d74268bca6b8", size = 31799, upload-time = "2025-10-02T14:35:36.165Z" }, + { url = "https://files.pythonhosted.org/packages/56/15/064b197e855bfb7b343210e82490ae672f8bc7cdf3ddb02e92f64304ee8a/xxhash-3.6.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ec44b73a4220623235f67a996c862049f375df3b1052d9899f40a6382c32d746", size = 28044, upload-time = "2025-10-02T14:35:37.195Z" }, + { url = "https://files.pythonhosted.org/packages/7e/5e/0138bc4484ea9b897864d59fce9be9086030825bc778b76cb5a33a906d37/xxhash-3.6.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a40a3d35b204b7cc7643cbcf8c9976d818cb47befcfac8bbefec8038ac363f3e", size = 32754, upload-time = "2025-10-02T14:35:38.245Z" }, + { url = "https://files.pythonhosted.org/packages/18/d7/5dac2eb2ec75fd771957a13e5dda560efb2176d5203f39502a5fc571f899/xxhash-3.6.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a54844be970d3fc22630b32d515e79a90d0a3ddb2644d8d7402e3c4c8da61405", size = 30846, upload-time = "2025-10-02T14:35:39.6Z" }, + { url = "https://files.pythonhosted.org/packages/fe/71/8bc5be2bb00deb5682e92e8da955ebe5fa982da13a69da5a40a4c8db12fb/xxhash-3.6.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:016e9190af8f0a4e3741343777710e3d5717427f175adfdc3e72508f59e2a7f3", size = 194343, upload-time = "2025-10-02T14:35:40.69Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3b/52badfb2aecec2c377ddf1ae75f55db3ba2d321c5e164f14461c90837ef3/xxhash-3.6.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f6f72232f849eb9d0141e2ebe2677ece15adfd0fa599bc058aad83c714bb2c6", size = 213074, upload-time = "2025-10-02T14:35:42.29Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2b/ae46b4e9b92e537fa30d03dbc19cdae57ed407e9c26d163895e968e3de85/xxhash-3.6.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:63275a8aba7865e44b1813d2177e0f5ea7eadad3dd063a21f7cf9afdc7054063", size = 212388, upload-time = "2025-10-02T14:35:43.929Z" }, + { url = "https://files.pythonhosted.org/packages/f5/80/49f88d3afc724b4ac7fbd664c8452d6db51b49915be48c6982659e0e7942/xxhash-3.6.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cd01fa2aa00d8b017c97eb46b9a794fbdca53fc14f845f5a328c71254b0abb7", size = 445614, upload-time = "2025-10-02T14:35:45.216Z" }, + { url = "https://files.pythonhosted.org/packages/ed/ba/603ce3961e339413543d8cd44f21f2c80e2a7c5cfe692a7b1f2cccf58f3c/xxhash-3.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0226aa89035b62b6a86d3c68df4d7c1f47a342b8683da2b60cedcddb46c4d95b", size = 194024, upload-time = "2025-10-02T14:35:46.959Z" }, + { url = "https://files.pythonhosted.org/packages/78/d1/8e225ff7113bf81545cfdcd79eef124a7b7064a0bba53605ff39590b95c2/xxhash-3.6.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c6e193e9f56e4ca4923c61238cdaced324f0feac782544eb4c6d55ad5cc99ddd", size = 210541, upload-time = "2025-10-02T14:35:48.301Z" }, + { url = "https://files.pythonhosted.org/packages/6f/58/0f89d149f0bad89def1a8dd38feb50ccdeb643d9797ec84707091d4cb494/xxhash-3.6.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:9176dcaddf4ca963d4deb93866d739a343c01c969231dbe21680e13a5d1a5bf0", size = 198305, upload-time = "2025-10-02T14:35:49.584Z" }, + { url = "https://files.pythonhosted.org/packages/11/38/5eab81580703c4df93feb5f32ff8fa7fe1e2c51c1f183ee4e48d4bb9d3d7/xxhash-3.6.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c1ce4009c97a752e682b897aa99aef84191077a9433eb237774689f14f8ec152", size = 210848, upload-time = "2025-10-02T14:35:50.877Z" }, + { url = "https://files.pythonhosted.org/packages/5e/6b/953dc4b05c3ce678abca756416e4c130d2382f877a9c30a20d08ee6a77c0/xxhash-3.6.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:8cb2f4f679b01513b7adbb9b1b2f0f9cdc31b70007eaf9d59d0878809f385b11", size = 414142, upload-time = "2025-10-02T14:35:52.15Z" }, + { url = "https://files.pythonhosted.org/packages/08/a9/238ec0d4e81a10eb5026d4a6972677cbc898ba6c8b9dbaec12ae001b1b35/xxhash-3.6.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:653a91d7c2ab54a92c19ccf43508b6a555440b9be1bc8be553376778be7f20b5", size = 191547, upload-time = "2025-10-02T14:35:53.547Z" }, + { url = "https://files.pythonhosted.org/packages/f1/ee/3cf8589e06c2164ac77c3bf0aa127012801128f1feebf2a079272da5737c/xxhash-3.6.0-cp314-cp314-win32.whl", hash = "sha256:a756fe893389483ee8c394d06b5ab765d96e68fbbfe6fde7aa17e11f5720559f", size = 31214, upload-time = "2025-10-02T14:35:54.746Z" }, + { url = "https://files.pythonhosted.org/packages/02/5d/a19552fbc6ad4cb54ff953c3908bbc095f4a921bc569433d791f755186f1/xxhash-3.6.0-cp314-cp314-win_amd64.whl", hash = "sha256:39be8e4e142550ef69629c9cd71b88c90e9a5db703fecbcf265546d9536ca4ad", size = 32290, upload-time = "2025-10-02T14:35:55.791Z" }, + { url = "https://files.pythonhosted.org/packages/b1/11/dafa0643bc30442c887b55baf8e73353a344ee89c1901b5a5c54a6c17d39/xxhash-3.6.0-cp314-cp314-win_arm64.whl", hash = "sha256:25915e6000338999236f1eb68a02a32c3275ac338628a7eaa5a269c401995679", size = 28795, upload-time = "2025-10-02T14:35:57.162Z" }, + { url = "https://files.pythonhosted.org/packages/2c/db/0e99732ed7f64182aef4a6fb145e1a295558deec2a746265dcdec12d191e/xxhash-3.6.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c5294f596a9017ca5a3e3f8884c00b91ab2ad2933cf288f4923c3fd4346cf3d4", size = 32955, upload-time = "2025-10-02T14:35:58.267Z" }, + { url = "https://files.pythonhosted.org/packages/55/f4/2a7c3c68e564a099becfa44bb3d398810cc0ff6749b0d3cb8ccb93f23c14/xxhash-3.6.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1cf9dcc4ab9cff01dfbba78544297a3a01dafd60f3bde4e2bfd016cf7e4ddc67", size = 31072, upload-time = "2025-10-02T14:35:59.382Z" }, + { url = "https://files.pythonhosted.org/packages/c6/d9/72a29cddc7250e8a5819dad5d466facb5dc4c802ce120645630149127e73/xxhash-3.6.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:01262da8798422d0685f7cef03b2bd3f4f46511b02830861df548d7def4402ad", size = 196579, upload-time = "2025-10-02T14:36:00.838Z" }, + { url = "https://files.pythonhosted.org/packages/63/93/b21590e1e381040e2ca305a884d89e1c345b347404f7780f07f2cdd47ef4/xxhash-3.6.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51a73fb7cb3a3ead9f7a8b583ffd9b8038e277cdb8cb87cf890e88b3456afa0b", size = 215854, upload-time = "2025-10-02T14:36:02.207Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b8/edab8a7d4fa14e924b29be877d54155dcbd8b80be85ea00d2be3413a9ed4/xxhash-3.6.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b9c6df83594f7df8f7f708ce5ebeacfc69f72c9fbaaababf6cf4758eaada0c9b", size = 214965, upload-time = "2025-10-02T14:36:03.507Z" }, + { url = "https://files.pythonhosted.org/packages/27/67/dfa980ac7f0d509d54ea0d5a486d2bb4b80c3f1bb22b66e6a05d3efaf6c0/xxhash-3.6.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:627f0af069b0ea56f312fd5189001c24578868643203bca1abbc2c52d3a6f3ca", size = 448484, upload-time = "2025-10-02T14:36:04.828Z" }, + { url = "https://files.pythonhosted.org/packages/8c/63/8ffc2cc97e811c0ca5d00ab36604b3ea6f4254f20b7bc658ca825ce6c954/xxhash-3.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa912c62f842dfd013c5f21a642c9c10cd9f4c4e943e0af83618b4a404d9091a", size = 196162, upload-time = "2025-10-02T14:36:06.182Z" }, + { url = "https://files.pythonhosted.org/packages/4b/77/07f0e7a3edd11a6097e990f6e5b815b6592459cb16dae990d967693e6ea9/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b465afd7909db30168ab62afe40b2fcf79eedc0b89a6c0ab3123515dc0df8b99", size = 213007, upload-time = "2025-10-02T14:36:07.733Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d8/bc5fa0d152837117eb0bef6f83f956c509332ce133c91c63ce07ee7c4873/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:a881851cf38b0a70e7c4d3ce81fc7afd86fbc2a024f4cfb2a97cf49ce04b75d3", size = 200956, upload-time = "2025-10-02T14:36:09.106Z" }, + { url = "https://files.pythonhosted.org/packages/26/a5/d749334130de9411783873e9b98ecc46688dad5db64ca6e04b02acc8b473/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9b3222c686a919a0f3253cfc12bb118b8b103506612253b5baeaac10d8027cf6", size = 213401, upload-time = "2025-10-02T14:36:10.585Z" }, + { url = "https://files.pythonhosted.org/packages/89/72/abed959c956a4bfc72b58c0384bb7940663c678127538634d896b1195c10/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:c5aa639bc113e9286137cec8fadc20e9cd732b2cc385c0b7fa673b84fc1f2a93", size = 417083, upload-time = "2025-10-02T14:36:12.276Z" }, + { url = "https://files.pythonhosted.org/packages/0c/b3/62fd2b586283b7d7d665fb98e266decadf31f058f1cf6c478741f68af0cb/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5c1343d49ac102799905e115aee590183c3921d475356cb24b4de29a4bc56518", size = 193913, upload-time = "2025-10-02T14:36:14.025Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/c19c42c5b3f5a4aad748a6d5b4f23df3bed7ee5445accc65a0fb3ff03953/xxhash-3.6.0-cp314-cp314t-win32.whl", hash = "sha256:5851f033c3030dd95c086b4a36a2683c2ff4a799b23af60977188b057e467119", size = 31586, upload-time = "2025-10-02T14:36:15.603Z" }, + { url = "https://files.pythonhosted.org/packages/03/d6/4cc450345be9924fd5dc8c590ceda1db5b43a0a889587b0ae81a95511360/xxhash-3.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0444e7967dac37569052d2409b00a8860c2135cff05502df4da80267d384849f", size = 32526, upload-time = "2025-10-02T14:36:16.708Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c9/7243eb3f9eaabd1a88a5a5acadf06df2d83b100c62684b7425c6a11bcaa8/xxhash-3.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:bb79b1e63f6fd84ec778a4b1916dfe0a7c3fdb986c06addd5db3a0d413819d95", size = 28898, upload-time = "2025-10-02T14:36:17.843Z" }, +] + +[[package]] +name = "yarl" +version = "1.23.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/23/6e/beb1beec874a72f23815c1434518bfc4ed2175065173fb138c3705f658d4/yarl-1.23.0.tar.gz", hash = "sha256:53b1ea6ca88ebd4420379c330aea57e258408dd0df9af0992e5de2078dc9f5d5", size = 194676, upload-time = "2026-03-01T22:07:53.373Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/8a/94615bc31022f711add374097ad4144d569e95ff3c38d39215d07ac153a0/yarl-1.23.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1932b6b8bba8d0160a9d1078aae5838a66039e8832d41d2992daa9a3a08f7860", size = 124737, upload-time = "2026-03-01T22:05:12.897Z" }, + { url = "https://files.pythonhosted.org/packages/e3/6f/c6554045d59d64052698add01226bc867b52fe4a12373415d7991fdca95d/yarl-1.23.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:411225bae281f114067578891bc75534cfb3d92a3b4dfef7a6ca78ba354e6069", size = 87029, upload-time = "2026-03-01T22:05:14.376Z" }, + { url = "https://files.pythonhosted.org/packages/19/2a/725ecc166d53438bc88f76822ed4b1e3b10756e790bafd7b523fe97c322d/yarl-1.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13a563739ae600a631c36ce096615fe307f131344588b0bc0daec108cdb47b25", size = 86310, upload-time = "2026-03-01T22:05:15.71Z" }, + { url = "https://files.pythonhosted.org/packages/99/30/58260ed98e6ff7f90ba84442c1ddd758c9170d70327394a6227b310cd60f/yarl-1.23.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cbf44c5cb4a7633d078788e1b56387e3d3cf2b8139a3be38040b22d6c3221c8", size = 97587, upload-time = "2026-03-01T22:05:17.384Z" }, + { url = "https://files.pythonhosted.org/packages/76/0a/8b08aac08b50682e65759f7f8dde98ae8168f72487e7357a5d684c581ef9/yarl-1.23.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53ad387048f6f09a8969631e4de3f1bf70c50e93545d64af4f751b2498755072", size = 92528, upload-time = "2026-03-01T22:05:18.804Z" }, + { url = "https://files.pythonhosted.org/packages/52/07/0b7179101fe5f8385ec6c6bb5d0cb9f76bd9fb4a769591ab6fb5cdbfc69a/yarl-1.23.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4a59ba56f340334766f3a4442e0efd0af895fae9e2b204741ef885c446b3a1a8", size = 105339, upload-time = "2026-03-01T22:05:20.235Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8a/36d82869ab5ec829ca8574dfcb92b51286fcfb1e9c7a73659616362dc880/yarl-1.23.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:803a3c3ce4acc62eaf01eaca1208dcf0783025ef27572c3336502b9c232005e7", size = 105061, upload-time = "2026-03-01T22:05:22.268Z" }, + { url = "https://files.pythonhosted.org/packages/66/3e/868e5c3364b6cee19ff3e1a122194fa4ce51def02c61023970442162859e/yarl-1.23.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3d2bff8f37f8d0f96c7ec554d16945050d54462d6e95414babaa18bfafc7f51", size = 100132, upload-time = "2026-03-01T22:05:23.638Z" }, + { url = "https://files.pythonhosted.org/packages/cf/26/9c89acf82f08a52cb52d6d39454f8d18af15f9d386a23795389d1d423823/yarl-1.23.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c75eb09e8d55bceb4367e83496ff8ef2bc7ea6960efb38e978e8073ea59ecb67", size = 99289, upload-time = "2026-03-01T22:05:25.749Z" }, + { url = "https://files.pythonhosted.org/packages/6f/54/5b0db00d2cb056922356104468019c0a132e89c8d3ab67d8ede9f4483d2a/yarl-1.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877b0738624280e34c55680d6054a307aa94f7d52fa0e3034a9cc6e790871da7", size = 96950, upload-time = "2026-03-01T22:05:27.318Z" }, + { url = "https://files.pythonhosted.org/packages/f6/40/10fa93811fd439341fad7e0718a86aca0de9548023bbb403668d6555acab/yarl-1.23.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b5405bb8f0e783a988172993cfc627e4d9d00432d6bbac65a923041edacf997d", size = 93960, upload-time = "2026-03-01T22:05:28.738Z" }, + { url = "https://files.pythonhosted.org/packages/bc/d2/8ae2e6cd77d0805f4526e30ec43b6f9a3dfc542d401ac4990d178e4bf0cf/yarl-1.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1c3a3598a832590c5a3ce56ab5576361b5688c12cb1d39429cf5dba30b510760", size = 104703, upload-time = "2026-03-01T22:05:30.438Z" }, + { url = "https://files.pythonhosted.org/packages/2f/0c/b3ceacf82c3fe21183ce35fa2acf5320af003d52bc1fcf5915077681142e/yarl-1.23.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:8419ebd326430d1cbb7efb5292330a2cf39114e82df5cc3d83c9a0d5ebeaf2f2", size = 98325, upload-time = "2026-03-01T22:05:31.835Z" }, + { url = "https://files.pythonhosted.org/packages/9d/e0/12900edd28bdab91a69bd2554b85ad7b151f64e8b521fe16f9ad2f56477a/yarl-1.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:be61f6fff406ca40e3b1d84716fde398fc08bc63dd96d15f3a14230a0973ed86", size = 105067, upload-time = "2026-03-01T22:05:33.358Z" }, + { url = "https://files.pythonhosted.org/packages/15/61/74bb1182cf79c9bbe4eb6b1f14a57a22d7a0be5e9cedf8e2d5c2086474c3/yarl-1.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ceb13c5c858d01321b5d9bb65e4cf37a92169ea470b70fec6f236b2c9dd7e34", size = 100285, upload-time = "2026-03-01T22:05:35.4Z" }, + { url = "https://files.pythonhosted.org/packages/69/7f/cd5ef733f2550de6241bd8bd8c3febc78158b9d75f197d9c7baa113436af/yarl-1.23.0-cp312-cp312-win32.whl", hash = "sha256:fffc45637bcd6538de8b85f51e3df3223e4ad89bccbfca0481c08c7fc8b7ed7d", size = 82359, upload-time = "2026-03-01T22:05:36.811Z" }, + { url = "https://files.pythonhosted.org/packages/f5/be/25216a49daeeb7af2bec0db22d5e7df08ed1d7c9f65d78b14f3b74fd72fc/yarl-1.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:f69f57305656a4852f2a7203efc661d8c042e6cc67f7acd97d8667fb448a426e", size = 87674, upload-time = "2026-03-01T22:05:38.171Z" }, + { url = "https://files.pythonhosted.org/packages/d2/35/aeab955d6c425b227d5b7247eafb24f2653fedc32f95373a001af5dfeb9e/yarl-1.23.0-cp312-cp312-win_arm64.whl", hash = "sha256:6e87a6e8735b44816e7db0b2fbc9686932df473c826b0d9743148432e10bb9b9", size = 81879, upload-time = "2026-03-01T22:05:40.006Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4b/a0a6e5d0ee8a2f3a373ddef8a4097d74ac901ac363eea1440464ccbe0898/yarl-1.23.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:16c6994ac35c3e74fb0ae93323bf8b9c2a9088d55946109489667c510a7d010e", size = 123796, upload-time = "2026-03-01T22:05:41.412Z" }, + { url = "https://files.pythonhosted.org/packages/67/b6/8925d68af039b835ae876db5838e82e76ec87b9782ecc97e192b809c4831/yarl-1.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4a42e651629dafb64fd5b0286a3580613702b5809ad3f24934ea87595804f2c5", size = 86547, upload-time = "2026-03-01T22:05:42.841Z" }, + { url = "https://files.pythonhosted.org/packages/ae/50/06d511cc4b8e0360d3c94af051a768e84b755c5eb031b12adaaab6dec6e5/yarl-1.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7c6b9461a2a8b47c65eef63bb1c76a4f1c119618ffa99ea79bc5bb1e46c5821b", size = 85854, upload-time = "2026-03-01T22:05:44.85Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f4/4e30b250927ffdab4db70da08b9b8d2194d7c7b400167b8fbeca1e4701ca/yarl-1.23.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2569b67d616eab450d262ca7cb9f9e19d2f718c70a8b88712859359d0ab17035", size = 98351, upload-time = "2026-03-01T22:05:46.836Z" }, + { url = "https://files.pythonhosted.org/packages/86/fc/4118c5671ea948208bdb1492d8b76bdf1453d3e73df051f939f563e7dcc5/yarl-1.23.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e9d9a4d06d3481eab79803beb4d9bd6f6a8e781ec078ac70d7ef2dcc29d1bea5", size = 92711, upload-time = "2026-03-01T22:05:48.316Z" }, + { url = "https://files.pythonhosted.org/packages/56/11/1ed91d42bd9e73c13dc9e7eb0dd92298d75e7ac4dd7f046ad0c472e231cd/yarl-1.23.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f514f6474e04179d3d33175ed3f3e31434d3130d42ec153540d5b157deefd735", size = 106014, upload-time = "2026-03-01T22:05:50.028Z" }, + { url = "https://files.pythonhosted.org/packages/ce/c9/74e44e056a23fbc33aca71779ef450ca648a5bc472bdad7a82339918f818/yarl-1.23.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fda207c815b253e34f7e1909840fd14299567b1c0eb4908f8c2ce01a41265401", size = 105557, upload-time = "2026-03-01T22:05:51.416Z" }, + { url = "https://files.pythonhosted.org/packages/66/fe/b1e10b08d287f518994f1e2ff9b6d26f0adeecd8dd7d533b01bab29a3eda/yarl-1.23.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34b6cf500e61c90f305094911f9acc9c86da1a05a7a3f5be9f68817043f486e4", size = 101559, upload-time = "2026-03-01T22:05:52.872Z" }, + { url = "https://files.pythonhosted.org/packages/72/59/c5b8d94b14e3d3c2a9c20cb100119fd534ab5a14b93673ab4cc4a4141ea5/yarl-1.23.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d7504f2b476d21653e4d143f44a175f7f751cd41233525312696c76aa3dbb23f", size = 100502, upload-time = "2026-03-01T22:05:54.954Z" }, + { url = "https://files.pythonhosted.org/packages/77/4f/96976cb54cbfc5c9fd73ed4c51804f92f209481d1fb190981c0f8a07a1d7/yarl-1.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:578110dd426f0d209d1509244e6d4a3f1a3e9077655d98c5f22583d63252a08a", size = 98027, upload-time = "2026-03-01T22:05:56.409Z" }, + { url = "https://files.pythonhosted.org/packages/63/6e/904c4f476471afdbad6b7e5b70362fb5810e35cd7466529a97322b6f5556/yarl-1.23.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:609d3614d78d74ebe35f54953c5bbd2ac647a7ddb9c30a5d877580f5e86b22f2", size = 95369, upload-time = "2026-03-01T22:05:58.141Z" }, + { url = "https://files.pythonhosted.org/packages/9d/40/acfcdb3b5f9d68ef499e39e04d25e141fe90661f9d54114556cf83be8353/yarl-1.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4966242ec68afc74c122f8459abd597afd7d8a60dc93d695c1334c5fd25f762f", size = 105565, upload-time = "2026-03-01T22:06:00.286Z" }, + { url = "https://files.pythonhosted.org/packages/5e/c6/31e28f3a6ba2869c43d124f37ea5260cac9c9281df803c354b31f4dd1f3c/yarl-1.23.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e0fd068364a6759bc794459f0a735ab151d11304346332489c7972bacbe9e72b", size = 99813, upload-time = "2026-03-01T22:06:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/08/1f/6f65f59e72d54aa467119b63fc0b0b1762eff0232db1f4720cd89e2f4a17/yarl-1.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:39004f0ad156da43e86aa71f44e033de68a44e5a31fc53507b36dd253970054a", size = 105632, upload-time = "2026-03-01T22:06:03.188Z" }, + { url = "https://files.pythonhosted.org/packages/a3/c4/18b178a69935f9e7a338127d5b77d868fdc0f0e49becd286d51b3a18c61d/yarl-1.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e5723c01a56c5028c807c701aa66722916d2747ad737a046853f6c46f4875543", size = 101895, upload-time = "2026-03-01T22:06:04.651Z" }, + { url = "https://files.pythonhosted.org/packages/8f/54/f5b870b5505663911dba950a8e4776a0dbd51c9c54c0ae88e823e4b874a0/yarl-1.23.0-cp313-cp313-win32.whl", hash = "sha256:1b6b572edd95b4fa8df75de10b04bc81acc87c1c7d16bcdd2035b09d30acc957", size = 82356, upload-time = "2026-03-01T22:06:06.04Z" }, + { url = "https://files.pythonhosted.org/packages/7a/84/266e8da36879c6edcd37b02b547e2d9ecdfea776be49598e75696e3316e1/yarl-1.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:baaf55442359053c7d62f6f8413a62adba3205119bcb6f49594894d8be47e5e3", size = 87515, upload-time = "2026-03-01T22:06:08.107Z" }, + { url = "https://files.pythonhosted.org/packages/00/fd/7e1c66efad35e1649114fa13f17485f62881ad58edeeb7f49f8c5e748bf9/yarl-1.23.0-cp313-cp313-win_arm64.whl", hash = "sha256:fb4948814a2a98e3912505f09c9e7493b1506226afb1f881825368d6fb776ee3", size = 81785, upload-time = "2026-03-01T22:06:10.181Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fc/119dd07004f17ea43bb91e3ece6587759edd7519d6b086d16bfbd3319982/yarl-1.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:aecfed0b41aa72b7881712c65cf764e39ce2ec352324f5e0837c7048d9e6daaa", size = 130719, upload-time = "2026-03-01T22:06:11.708Z" }, + { url = "https://files.pythonhosted.org/packages/e6/0d/9f2348502fbb3af409e8f47730282cd6bc80dec6630c1e06374d882d6eb2/yarl-1.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a41bcf68efd19073376eb8cf948b8d9be0af26256403e512bb18f3966f1f9120", size = 89690, upload-time = "2026-03-01T22:06:13.429Z" }, + { url = "https://files.pythonhosted.org/packages/50/93/e88f3c80971b42cfc83f50a51b9d165a1dbf154b97005f2994a79f212a07/yarl-1.23.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cde9a2ecd91668bcb7f077c4966d8ceddb60af01b52e6e3e2680e4cf00ad1a59", size = 89851, upload-time = "2026-03-01T22:06:15.53Z" }, + { url = "https://files.pythonhosted.org/packages/1c/07/61c9dd8ba8f86473263b4036f70fb594c09e99c0d9737a799dfd8bc85651/yarl-1.23.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5023346c4ee7992febc0068e7593de5fa2bf611848c08404b35ebbb76b1b0512", size = 95874, upload-time = "2026-03-01T22:06:17.553Z" }, + { url = "https://files.pythonhosted.org/packages/9e/e9/f9ff8ceefba599eac6abddcfb0b3bee9b9e636e96dbf54342a8577252379/yarl-1.23.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1009abedb49ae95b136a8904a3f71b342f849ffeced2d3747bf29caeda218c4", size = 88710, upload-time = "2026-03-01T22:06:19.004Z" }, + { url = "https://files.pythonhosted.org/packages/eb/78/0231bfcc5d4c8eec220bc2f9ef82cb4566192ea867a7c5b4148f44f6cbcd/yarl-1.23.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a8d00f29b42f534cc8aa3931cfe773b13b23e561e10d2b26f27a8d309b0e82a1", size = 101033, upload-time = "2026-03-01T22:06:21.203Z" }, + { url = "https://files.pythonhosted.org/packages/cd/9b/30ea5239a61786f18fd25797151a17fbb3be176977187a48d541b5447dd4/yarl-1.23.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:95451e6ce06c3e104556d73b559f5da6c34a069b6b62946d3ad66afcd51642ea", size = 100817, upload-time = "2026-03-01T22:06:22.738Z" }, + { url = "https://files.pythonhosted.org/packages/62/e2/a4980481071791bc83bce2b7a1a1f7adcabfa366007518b4b845e92eeee3/yarl-1.23.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531ef597132086b6cf96faa7c6c1dcd0361dd5f1694e5cc30375907b9b7d3ea9", size = 97482, upload-time = "2026-03-01T22:06:24.21Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1e/304a00cf5f6100414c4b5a01fc7ff9ee724b62158a08df2f8170dfc72a2d/yarl-1.23.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:88f9fb0116fbfcefcab70f85cf4b74a2b6ce5d199c41345296f49d974ddb4123", size = 95949, upload-time = "2026-03-01T22:06:25.697Z" }, + { url = "https://files.pythonhosted.org/packages/68/03/093f4055ed4cae649ac53bca3d180bd37102e9e11d048588e9ab0c0108d0/yarl-1.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e7b0460976dc75cb87ad9cc1f9899a4b97751e7d4e77ab840fc9b6d377b8fd24", size = 95839, upload-time = "2026-03-01T22:06:27.309Z" }, + { url = "https://files.pythonhosted.org/packages/b9/28/4c75ebb108f322aa8f917ae10a8ffa4f07cae10a8a627b64e578617df6a0/yarl-1.23.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:115136c4a426f9da976187d238e84139ff6b51a20839aa6e3720cd1026d768de", size = 90696, upload-time = "2026-03-01T22:06:29.048Z" }, + { url = "https://files.pythonhosted.org/packages/23/9c/42c2e2dd91c1a570402f51bdf066bfdb1241c2240ba001967bad778e77b7/yarl-1.23.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ead11956716a940c1abc816b7df3fa2b84d06eaed8832ca32f5c5e058c65506b", size = 100865, upload-time = "2026-03-01T22:06:30.525Z" }, + { url = "https://files.pythonhosted.org/packages/74/05/1bcd60a8a0a914d462c305137246b6f9d167628d73568505fce3f1cb2e65/yarl-1.23.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:fe8f8f5e70e6dbdfca9882cd9deaac058729bcf323cf7a58660901e55c9c94f6", size = 96234, upload-time = "2026-03-01T22:06:32.692Z" }, + { url = "https://files.pythonhosted.org/packages/90/b2/f52381aac396d6778ce516b7bc149c79e65bfc068b5de2857ab69eeea3b7/yarl-1.23.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:a0e317df055958a0c1e79e5d2aa5a5eaa4a6d05a20d4b0c9c3f48918139c9fc6", size = 100295, upload-time = "2026-03-01T22:06:34.268Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e8/638bae5bbf1113a659b2435d8895474598afe38b4a837103764f603aba56/yarl-1.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f0fd84de0c957b2d280143522c4f91a73aada1923caee763e24a2b3fda9f8a5", size = 97784, upload-time = "2026-03-01T22:06:35.864Z" }, + { url = "https://files.pythonhosted.org/packages/80/25/a3892b46182c586c202629fc2159aa13975d3741d52ebd7347fd501d48d5/yarl-1.23.0-cp313-cp313t-win32.whl", hash = "sha256:93a784271881035ab4406a172edb0faecb6e7d00f4b53dc2f55919d6c9688595", size = 88313, upload-time = "2026-03-01T22:06:37.39Z" }, + { url = "https://files.pythonhosted.org/packages/43/68/8c5b36aa5178900b37387937bc2c2fe0e9505537f713495472dcf6f6fccc/yarl-1.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:dd00607bffbf30250fe108065f07453ec124dbf223420f57f5e749b04295e090", size = 94932, upload-time = "2026-03-01T22:06:39.579Z" }, + { url = "https://files.pythonhosted.org/packages/c6/cc/d79ba8292f51f81f4dc533a8ccfb9fc6992cabf0998ed3245de7589dc07c/yarl-1.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ac09d42f48f80c9ee1635b2fcaa819496a44502737660d3c0f2ade7526d29144", size = 84786, upload-time = "2026-03-01T22:06:41.988Z" }, + { url = "https://files.pythonhosted.org/packages/90/98/b85a038d65d1b92c3903ab89444f48d3cee490a883477b716d7a24b1a78c/yarl-1.23.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:21d1b7305a71a15b4794b5ff22e8eef96ff4a6d7f9657155e5aa419444b28912", size = 124455, upload-time = "2026-03-01T22:06:43.615Z" }, + { url = "https://files.pythonhosted.org/packages/39/54/bc2b45559f86543d163b6e294417a107bb87557609007c007ad889afec18/yarl-1.23.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:85610b4f27f69984932a7abbe52703688de3724d9f72bceb1cca667deff27474", size = 86752, upload-time = "2026-03-01T22:06:45.425Z" }, + { url = "https://files.pythonhosted.org/packages/24/f9/e8242b68362bffe6fb536c8db5076861466fc780f0f1b479fc4ffbebb128/yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23f371bd662cf44a7630d4d113101eafc0cfa7518a2760d20760b26021454719", size = 86291, upload-time = "2026-03-01T22:06:46.974Z" }, + { url = "https://files.pythonhosted.org/packages/ea/d8/d1cb2378c81dd729e98c716582b1ccb08357e8488e4c24714658cc6630e8/yarl-1.23.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4a80f77dc1acaaa61f0934176fccca7096d9b1ff08c8ba9cddf5ae034a24319", size = 99026, upload-time = "2026-03-01T22:06:48.459Z" }, + { url = "https://files.pythonhosted.org/packages/0a/ff/7196790538f31debe3341283b5b0707e7feb947620fc5e8236ef28d44f72/yarl-1.23.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:bd654fad46d8d9e823afbb4f87c79160b5a374ed1ff5bde24e542e6ba8f41434", size = 92355, upload-time = "2026-03-01T22:06:50.306Z" }, + { url = "https://files.pythonhosted.org/packages/c1/56/25d58c3eddde825890a5fe6aa1866228377354a3c39262235234ab5f616b/yarl-1.23.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:682bae25f0a0dd23a056739f23a134db9f52a63e2afd6bfb37ddc76292bbd723", size = 106417, upload-time = "2026-03-01T22:06:52.1Z" }, + { url = "https://files.pythonhosted.org/packages/51/8a/882c0e7bc8277eb895b31bce0138f51a1ba551fc2e1ec6753ffc1e7c1377/yarl-1.23.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a82836cab5f197a0514235aaf7ffccdc886ccdaa2324bc0aafdd4ae898103039", size = 106422, upload-time = "2026-03-01T22:06:54.424Z" }, + { url = "https://files.pythonhosted.org/packages/42/2b/fef67d616931055bf3d6764885990a3ac647d68734a2d6a9e1d13de437a2/yarl-1.23.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c57676bdedc94cd3bc37724cf6f8cd2779f02f6aba48de45feca073e714fe52", size = 101915, upload-time = "2026-03-01T22:06:55.895Z" }, + { url = "https://files.pythonhosted.org/packages/18/6a/530e16aebce27c5937920f3431c628a29a4b6b430fab3fd1c117b26ff3f6/yarl-1.23.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c7f8dc16c498ff06497c015642333219871effba93e4a2e8604a06264aca5c5c", size = 100690, upload-time = "2026-03-01T22:06:58.21Z" }, + { url = "https://files.pythonhosted.org/packages/88/08/93749219179a45e27b036e03260fda05190b911de8e18225c294ac95bbc9/yarl-1.23.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5ee586fb17ff8f90c91cf73c6108a434b02d69925f44f5f8e0d7f2f260607eae", size = 98750, upload-time = "2026-03-01T22:06:59.794Z" }, + { url = "https://files.pythonhosted.org/packages/d9/cf/ea424a004969f5d81a362110a6ac1496d79efdc6d50c2c4b2e3ea0fc2519/yarl-1.23.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:17235362f580149742739cc3828b80e24029d08cbb9c4bda0242c7b5bc610a8e", size = 94685, upload-time = "2026-03-01T22:07:01.375Z" }, + { url = "https://files.pythonhosted.org/packages/e2/b7/14341481fe568e2b0408bcf1484c652accafe06a0ade9387b5d3fd9df446/yarl-1.23.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:0793e2bd0cf14234983bbb371591e6bea9e876ddf6896cdcc93450996b0b5c85", size = 106009, upload-time = "2026-03-01T22:07:03.151Z" }, + { url = "https://files.pythonhosted.org/packages/0a/e6/5c744a9b54f4e8007ad35bce96fbc9218338e84812d36f3390cea616881a/yarl-1.23.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:3650dc2480f94f7116c364096bc84b1d602f44224ef7d5c7208425915c0475dd", size = 100033, upload-time = "2026-03-01T22:07:04.701Z" }, + { url = "https://files.pythonhosted.org/packages/0c/23/e3bfc188d0b400f025bc49d99793d02c9abe15752138dcc27e4eaf0c4a9e/yarl-1.23.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f40e782d49630ad384db66d4d8b73ff4f1b8955dc12e26b09a3e3af064b3b9d6", size = 106483, upload-time = "2026-03-01T22:07:06.231Z" }, + { url = "https://files.pythonhosted.org/packages/72/42/f0505f949a90b3f8b7a363d6cbdf398f6e6c58946d85c6d3a3bc70595b26/yarl-1.23.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:94f8575fbdf81749008d980c17796097e645574a3b8c28ee313931068dad14fe", size = 102175, upload-time = "2026-03-01T22:07:08.4Z" }, + { url = "https://files.pythonhosted.org/packages/aa/65/b39290f1d892a9dd671d1c722014ca062a9c35d60885d57e5375db0404b5/yarl-1.23.0-cp314-cp314-win32.whl", hash = "sha256:c8aa34a5c864db1087d911a0b902d60d203ea3607d91f615acd3f3108ac32169", size = 83871, upload-time = "2026-03-01T22:07:09.968Z" }, + { url = "https://files.pythonhosted.org/packages/a9/5b/9b92f54c784c26e2a422e55a8d2607ab15b7ea3349e28359282f84f01d43/yarl-1.23.0-cp314-cp314-win_amd64.whl", hash = "sha256:63e92247f383c85ab00dd0091e8c3fa331a96e865459f5ee80353c70a4a42d70", size = 89093, upload-time = "2026-03-01T22:07:11.501Z" }, + { url = "https://files.pythonhosted.org/packages/e0/7d/8a84dc9381fd4412d5e7ff04926f9865f6372b4c2fd91e10092e65d29eb8/yarl-1.23.0-cp314-cp314-win_arm64.whl", hash = "sha256:70efd20be968c76ece7baa8dafe04c5be06abc57f754d6f36f3741f7aa7a208e", size = 83384, upload-time = "2026-03-01T22:07:13.069Z" }, + { url = "https://files.pythonhosted.org/packages/dd/8d/d2fad34b1c08aa161b74394183daa7d800141aaaee207317e82c790b418d/yarl-1.23.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:9a18d6f9359e45722c064c97464ec883eb0e0366d33eda61cb19a244bf222679", size = 131019, upload-time = "2026-03-01T22:07:14.903Z" }, + { url = "https://files.pythonhosted.org/packages/19/ff/33009a39d3ccf4b94d7d7880dfe17fb5816c5a4fe0096d9b56abceea9ac7/yarl-1.23.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2803ed8b21ca47a43da80a6fd1ed3019d30061f7061daa35ac54f63933409412", size = 89894, upload-time = "2026-03-01T22:07:17.372Z" }, + { url = "https://files.pythonhosted.org/packages/0c/f1/dab7ac5e7306fb79c0190766a3c00b4cb8d09a1f390ded68c85a5934faf5/yarl-1.23.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:394906945aa8b19fc14a61cf69743a868bb8c465efe85eee687109cc540b98f4", size = 89979, upload-time = "2026-03-01T22:07:19.361Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b1/08e95f3caee1fad6e65017b9f26c1d79877b502622d60e517de01e72f95d/yarl-1.23.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:71d006bee8397a4a89f469b8deb22469fe7508132d3c17fa6ed871e79832691c", size = 95943, upload-time = "2026-03-01T22:07:21.266Z" }, + { url = "https://files.pythonhosted.org/packages/c0/cc/6409f9018864a6aa186c61175b977131f373f1988e198e031236916e87e4/yarl-1.23.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:62694e275c93d54f7ccedcfef57d42761b2aad5234b6be1f3e3026cae4001cd4", size = 88786, upload-time = "2026-03-01T22:07:23.129Z" }, + { url = "https://files.pythonhosted.org/packages/76/40/cc22d1d7714b717fde2006fad2ced5efe5580606cb059ae42117542122f3/yarl-1.23.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31de1613658308efdb21ada98cbc86a97c181aa050ba22a808120bb5be3ab94", size = 101307, upload-time = "2026-03-01T22:07:24.689Z" }, + { url = "https://files.pythonhosted.org/packages/8f/0d/476c38e85ddb4c6ec6b20b815bdd779aa386a013f3d8b85516feee55c8dc/yarl-1.23.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb1e8b8d66c278b21d13b0a7ca22c41dd757a7c209c6b12c313e445c31dd3b28", size = 100904, upload-time = "2026-03-01T22:07:26.287Z" }, + { url = "https://files.pythonhosted.org/packages/72/32/0abe4a76d59adf2081dcb0397168553ece4616ada1c54d1c49d8936c74f8/yarl-1.23.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50f9d8d531dfb767c565f348f33dd5139a6c43f5cbdf3f67da40d54241df93f6", size = 97728, upload-time = "2026-03-01T22:07:27.906Z" }, + { url = "https://files.pythonhosted.org/packages/b7/35/7b30f4810fba112f60f5a43237545867504e15b1c7647a785fbaf588fac2/yarl-1.23.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:575aa4405a656e61a540f4a80eaa5260f2a38fff7bfdc4b5f611840d76e9e277", size = 95964, upload-time = "2026-03-01T22:07:30.198Z" }, + { url = "https://files.pythonhosted.org/packages/2d/86/ed7a73ab85ef00e8bb70b0cb5421d8a2a625b81a333941a469a6f4022828/yarl-1.23.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:041b1a4cefacf65840b4e295c6985f334ba83c30607441ae3cf206a0eed1a2e4", size = 95882, upload-time = "2026-03-01T22:07:32.132Z" }, + { url = "https://files.pythonhosted.org/packages/19/90/d56967f61a29d8498efb7afb651e0b2b422a1e9b47b0ab5f4e40a19b699b/yarl-1.23.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:d38c1e8231722c4ce40d7593f28d92b5fc72f3e9774fe73d7e800ec32299f63a", size = 90797, upload-time = "2026-03-01T22:07:34.404Z" }, + { url = "https://files.pythonhosted.org/packages/72/00/8b8f76909259f56647adb1011d7ed8b321bcf97e464515c65016a47ecdf0/yarl-1.23.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:d53834e23c015ee83a99377db6e5e37d8484f333edb03bd15b4bc312cc7254fb", size = 101023, upload-time = "2026-03-01T22:07:35.953Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e2/cab11b126fb7d440281b7df8e9ddbe4851e70a4dde47a202b6642586b8d9/yarl-1.23.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:2e27c8841126e017dd2a054a95771569e6070b9ee1b133366d8b31beb5018a41", size = 96227, upload-time = "2026-03-01T22:07:37.594Z" }, + { url = "https://files.pythonhosted.org/packages/c2/9b/2c893e16bfc50e6b2edf76c1a9eb6cb0c744346197e74c65e99ad8d634d0/yarl-1.23.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:76855800ac56f878847a09ce6dba727c93ca2d89c9e9d63002d26b916810b0a2", size = 100302, upload-time = "2026-03-01T22:07:39.334Z" }, + { url = "https://files.pythonhosted.org/packages/28/ec/5498c4e3a6d5f1003beb23405671c2eb9cdbf3067d1c80f15eeafe301010/yarl-1.23.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e09fd068c2e169a7070d83d3bde728a4d48de0549f975290be3c108c02e499b4", size = 98202, upload-time = "2026-03-01T22:07:41.717Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c3/cd737e2d45e70717907f83e146f6949f20cc23cd4bf7b2688727763aa458/yarl-1.23.0-cp314-cp314t-win32.whl", hash = "sha256:73309162a6a571d4cbd3b6a1dcc703c7311843ae0d1578df6f09be4e98df38d4", size = 90558, upload-time = "2026-03-01T22:07:43.433Z" }, + { url = "https://files.pythonhosted.org/packages/e1/19/3774d162f6732d1cfb0b47b4140a942a35ca82bb19b6db1f80e9e7bdc8f8/yarl-1.23.0-cp314-cp314t-win_amd64.whl", hash = "sha256:4503053d296bc6e4cbd1fad61cf3b6e33b939886c4f249ba7c78b602214fabe2", size = 97610, upload-time = "2026-03-01T22:07:45.773Z" }, + { url = "https://files.pythonhosted.org/packages/51/47/3fa2286c3cb162c71cdb34c4224d5745a1ceceb391b2bd9b19b668a8d724/yarl-1.23.0-cp314-cp314t-win_arm64.whl", hash = "sha256:44bb7bef4ea409384e3f8bc36c063d77ea1b8d4a5b2706956c0d6695f07dcc25", size = 86041, upload-time = "2026-03-01T22:07:49.026Z" }, + { url = "https://files.pythonhosted.org/packages/69/68/c8739671f5699c7dc470580a4f821ef37c32c4cb0b047ce223a7f115757f/yarl-1.23.0-py3-none-any.whl", hash = "sha256:a2df6afe50dea8ae15fa34c9f824a3ee958d785fd5d089063d960bae1daa0a3f", size = 48288, upload-time = "2026-03-01T22:07:51.388Z" }, +]