Cloud detection is a fundamental pre-processing task for high resolution satellite images, where the presence or the absence of the cloud plays an important role in making a decision for further processing. Existing techniques are based on per-pixel classification for region segmentation. However, due to the similarity of the features with other patterns like ice or snow, it may lead to misclassification. Moreover, cloud detection imposes the detection of cloud shadow as well since it also covers land areas. In order to come up with an efficient technique to tackle the complexity of pattern diversity, we exploit the recent advances in machine learning by designing and training a deep convolutional neural network model (ConvNet) based on multi-scale feature learning. Our proposed technique claims that different types of features can be learned at different scales to discriminate between image patterns. We chose two publicly available datasets for training. First, the 38-Cloud dataset was annotated as cloudy and non-cloudy classes. Second, the SPARCS (Spatial Procedures for Automated Removal of Cloud and Shadow) dataset with seven classes including cloud, ice/snow, and shadow. Both datasets contain images with four bands (R: Red, G: Green, B: Blue, Nir: Near Infrared), which we use as inputs of the ConvNet model for training and testing. The experimental results show that our proposed method can effectively detect clouds in complex scenes.