You can't cross-fade a single background image using CSS.
A possible solution is to have two containers inside the hero <div> you have there.
E.g:
<div class="hero">
    <div class="img-container" id="first"></div>
    <div class="img-container" id="second"></div>
</div>
For your desired effect of the crossfade you will need these images to cover the desired area on top of the hero <div>.
This can be done by these CSS rules:
.img-container {
    background-repeat: no-repeat;
    background-size: cover;
    background-position: 50% 50%;
    background-color: transparent;
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}
Now we need to have the images load in and cross-fade over one another.
$(document).ready(function() {
  var urls = [
    'imgURL1',
    'imgURL2',
    'imgURL3'
  ];
  // Preload the images
  var tempImg = []
  for (var i = 0; i < urls.length; i++) {
    (new Image()).src = urls[i]
  }
  // The currently shown image's index
  var currentShown = 0;
  
  // Get the containers
  var first = $("#first");
  var second = $("#second");
  // This shows whether the second object is on top or not
  var secondOnTop = true;
  // Set the first container's value so that there is something on the screen and load the second image on top.
  first.css('background-image', 'url("' + urls[urls.length - 1] + '")');
  second.css({
    backgroundImage: 'url("' + urls[0] + '")',
    opacity: 1
  });
  // Change the image every X seconds
  setInterval(function() {
    var animationSpeed = 1000; // In milliseconds
    // Increment currently shown image index
    currentShown === urls.length - 1 ? currentShown = 0 : currentShown++;
    // Determine which object has visual priority
    var primaryObj = first;
    var auxObj = second;
    if (secondOnTop) {
      primaryObj = second;
      auxObj = first;
    }
    secondOnTop = !secondOnTop;
    // Show aux obj background
    auxObj.css({backgroundImage: 'url("' + urls[currentShown] + '")'});
    auxObj.animate({
      opacity: 1
    }, animationSpeed);
    // Change shown object's background and set to 0
    primaryObj.animate({
      opacity: 0,
    }, animationSpeed, function() {
      // Change the primary's background to the next in queue
      var nextImg = currentShown === urls.length - 1 ? 0 : currentShown + 1;
      primaryObj.css('background-image', 'url("' + urls[nextImg] + '")');
    });
  }, 6000);
});
I have created a fork of your fiddle available here: https://jsfiddle.net/YeloPartyHat/uLfr389g/88/