struct Image <: AbstractImage
    channels::AbstractArray{Float32, 3}
end

channels(x::Image) = x.channels
Base.size(image::Image) = size(image.channels)
tensorize(image::Image) = Flux.unsqueeze(channels(image), 4)
tensorize(images::Vector{Image}) = reduce((x,y)->cat(x, y; dims=4), map(tensorize, images))

function Base.show(io::IO, x::Image)
    show(io, "text/plain", x.channels)
    println(io, "\n")
end