# Best way to import the dogscats dataset

**URL:** <https://discourse.julialang.org/t/best-way-to-import-the-dogscats-dataset/41006>\
**Category:** New to Julia\
**Tags:** images, review, flux\
**Created:** [June 8, 2020, 5:33pm UTC](https://discourse.julialang.org/t/best-way-to-import-the-dogscats-dataset/41006 "2020-06-08T17:33:19Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![natema](https://avatars.discourse-cdn.com/v4/letter/n/ba9def/32.png) [@natema](https://discourse.julialang.org/u/natema)\
**Post date:** [June 8, 2020, 5:33pm UTC](https://discourse.julialang.org/t/best-way-to-import-the-dogscats-dataset/41006/1 "2020-06-08T17:33:19Z")

</div>

I would like to reproduce in julia some pytorch transfer-learning experiments which use Resnet18 on the Kaggle’s Dogs vs. Cats dataset ([direct download from fast.ai](http://files.fast.ai/data/dogscats.zip)).  
I would like some feedback on how I’m importing the data.

I’m using the package `Images` to import the images represented as CHW arrays (this should be what the code I’m trying to reproduce does, by calling `torchvision.datasets.ImageFolder()` with `torchvision.transforms.ToTensor()` as a parameter).  
Resnet18 takes as input 224\times 224 images, so I’m also using `Images.PaddedView` to crop them.

Here’s my code:

```julia
using Images

cd("~/data/dogscats/")

# Storing data as an array of tuples
img_example = load("train/dogs/dog.1933.jpg")
data_elem_example = (img = copy(channelview(img_example)), class = "dog", filename = "dog.1933.jpg")
data_elem_type = typeof(data_elem_example)

train_set = Array{data_elem_type}(undef,0)
valid_set = Array{data_elem_type}(undef,0)

function crop_center(new_size::Number, img::Array{RGB{Normed{UInt8,8}},2})
   radius = new_size/2
   h_size, v_size = size(img)
   h_shift = floor(Int32, radius - h_size/2)
   v_shift = floor(Int32, radius - v_size/2)

   shift_img = (h_shift, v_shift)
   out_dims= (new_size, new_size)
   return copy(PaddedView(0, img, out_dims, shift_img))
end

for s in ["train", "valid"]
   for (root, dirs, files) in walkdir(data_path*"/"*s)
      for file in files
         img_path = joinpath(root, file)
         img_cropped = crop_center(224, load(img_path))
         CHW_img = copy(channelview(img_cropped))
         class = splitpath(root)[end]
         target_set = s == "train" ? train_set : valid_set
         push!(target_set, (img = CHW_img, class = class, filename = file))
      end
   end
end

```

Thanks in advance for your time and suggestions.
