title: ClientError: train channel is not specified with AWS object_detection_augmented_manifest_training using ground truth images
body: <p>I have completed a labelling job in AWS ground truth and started working on the notebook template for object detection.</p>
  
  <p>I have 2 manifests which has 293 labeled images for birds in a train and validation set like this:</p>
  
  <pre><code>{"source-ref":"s3://XXXXXXX/Train/Blackbird_1.JPG","Bird-Label-Train":{"workerId":XXXXXXXX,"imageSource":{"s3Uri":"s3://XXXXXXX/Train/Blackbird_1.JPG"},"boxesInfo":{"annotatedResult":{"boundingBoxes":[{"width":1612,"top":841,"label":"Blackbird","left":1276,"height":757}],"inputImageProperties":{"width":3872,"height":2592}}}},"Bird-Label-Train-metadata":{"type":"groundtruth/custom","job-name":"bird-label-train","human-annotated":"yes","creation-date":"2019-01-16T17:28:23+0000"}}
  </code></pre>
  
  <p>Below are the parameters I am using for the notebook instance:</p>
  
  <pre><code>training_params = \
  {
      "AlgorithmSpecification": {
          "TrainingImage": training_image, # NB. This is one of the named constants defined in the first cell.
          "TrainingInputMode": "Pipe"
      },
      "RoleArn": role,
      "OutputDataConfig": {
          "S3OutputPath": s3_output_path
      },
      "ResourceConfig": {
          "InstanceCount": 1,   
          "InstanceType": "ml.p3.2xlarge",
          "VolumeSizeInGB": 5
      },
      "TrainingJobName": job_name,
      "HyperParameters": { # NB. These hyperparameters are at the user's discretion and are beyond the scope of this demo.
           "base_network": "resnet-50",
           "use_pretrained_model": "1",
           "num_classes": "1",
           "mini_batch_size": "16",
           "epochs": "5",
           "learning_rate": "0.001",
           "lr_scheduler_step": "3,6",
           "lr_scheduler_factor": "0.1",
           "optimizer": "rmsprop",
           "momentum": "0.9",
           "weight_decay": "0.0005",
           "overlap_threshold": "0.5",
           "nms_threshold": "0.45",
           "image_shape": "300",
           "label_width": "350",
           "num_training_samples": str(num_training_samples)
      },
      "StoppingCondition": {
          "MaxRuntimeInSeconds": 86400
      },
   "InputDataConfig": [
      {
          "ChannelName": "train",
          "DataSource": {
              "S3DataSource": {
                  "S3DataType": "AugmentedManifestFile", # NB. Augmented Manifest
                  "S3Uri": s3_train_data_path,
                  "S3DataDistributionType": "FullyReplicated",
                  "AttributeNames": ["source-ref","Bird-Label-Train"] # NB. This must correspond to the JSON field names in your augmented manifest.
              }
          },
          "ContentType": "image/jpeg",
          "RecordWrapperType": "None",
          "CompressionType": "None"
      },
      {
          "ChannelName": "validation",
          "DataSource": {
              "S3DataSource": {
                  "S3DataType": "AugmentedManifestFile", # NB. Augmented Manifest
                  "S3Uri": s3_validation_data_path,
                  "S3DataDistributionType": "FullyReplicated",
                  "AttributeNames": ["source-ref","Bird-Label"] # NB. This must correspond to the JSON field names in your augmented manifest.
              }
          },
          "ContentType": "image/jpeg",
          "RecordWrapperType": "None",
          "CompressionType": "None"
      }
  ]
  </code></pre>
  
  <p>I would end up with this being printed after running my ml.p3.2xlarge instance:</p>
  
  <pre><code>InProgress Starting
  InProgress Starting
  InProgress Starting
  InProgress Training
  Failed Failed
  </code></pre>
  
  <p>Followed by this error message: 
  <strong>'ClientError: train channel is not specified.'</strong></p>
  
  <p>Does anyone have any thoughts for how I can get this running with no errors? Any help is much apreciated!</p>
  
  <p><strong>Successful run:</strong> Below is the paramaters that were used, along with the Augmented Manifest JSON Objects for a successful run.</p>
  
  <pre><code>training_params = \
  {
      "AlgorithmSpecification": {
          "TrainingImage": training_image, # NB. This is one of the named constants defined in the first cell.
          "TrainingInputMode": "Pipe"
      },
      "RoleArn": role,
      "OutputDataConfig": {
          "S3OutputPath": s3_output_path
      },
      "ResourceConfig": {
          "InstanceCount": 1,   
          "InstanceType": "ml.p3.2xlarge",
          "VolumeSizeInGB": 50
      },
      "TrainingJobName": job_name,
      "HyperParameters": { # NB. These hyperparameters are at the user's discretion and are beyond the scope of this demo.
           "base_network": "resnet-50",
           "use_pretrained_model": "1",
           "num_classes": "3",
           "mini_batch_size": "1",
           "epochs": "5",
           "learning_rate": "0.001",
           "lr_scheduler_step": "3,6",
           "lr_scheduler_factor": "0.1",
           "optimizer": "rmsprop",
           "momentum": "0.9",
           "weight_decay": "0.0005",
           "overlap_threshold": "0.5",
           "nms_threshold": "0.45",
           "image_shape": "300",
           "label_width": "350",
           "num_training_samples": str(num_training_samples)
      },
      "StoppingCondition": {
          "MaxRuntimeInSeconds": 86400
      },
      "InputDataConfig": [
          {
              "ChannelName": "train",
              "DataSource": {
                  "S3DataSource": {
                      "S3DataType": "AugmentedManifestFile", # NB. Augmented Manifest
                      "S3Uri": s3_train_data_path,
                      "S3DataDistributionType": "FullyReplicated",
                      "AttributeNames": attribute_names # NB. This must correspond to the JSON field names in your **TRAIN** augmented manifest.
                  }
              },
              "ContentType": "application/x-recordio",
              "RecordWrapperType": "RecordIO",
              "CompressionType": "None"
          },
          {
              "ChannelName": "validation",
              "DataSource": {
                  "S3DataSource": {
                      "S3DataType": "AugmentedManifestFile", # NB. Augmented Manifest
                      "S3Uri": s3_validation_data_path,
                      "S3DataDistributionType": "FullyReplicated",
                      "AttributeNames": ["source-ref","ValidateBird"] # NB. This must correspond to the JSON field names in your **VALIDATION** augmented manifest.
                  }
              },
              "ContentType": "application/x-recordio",
              "RecordWrapperType": "RecordIO",
              "CompressionType": "None"
          }
      ]
  }
  </code></pre>
  
  <p>Training Augmented Manifest File generated during the running of the training job</p>
  
  <pre><code>Line 1
  {"source-ref":"s3://XXXXX/Train/Blackbird_1.JPG","TrainBird":{"annotations":[{"class_id":0,"width":1613,"top":840,"height":766,"left":1293}],"image_size":[{"width":3872,"depth":3,"height":2592}]},"TrainBird-metadata":{"job-name":"labeling-job/trainbird","class-map":{"0":"Blackbird"},"human-annotated":"yes","objects":[{"confidence":0.09}],"creation-date":"2019-02-09T14:21:29.829003","type":"groundtruth/object-detection"}}
  
  
  Line 2
  {"source-ref":"s3://xxxxx/Train/Blackbird_2.JPG","TrainBird":{"annotations":[{"class_id":0,"width":897,"top":665,"height":1601,"left":1598}],"image_size":[{"width":3872,"depth":3,"height":2592}]},"TrainBird-metadata":{"job-name":"labeling-job/trainbird","class-map":{"0":"Blackbird"},"human-annotated":"yes","objects":[{"confidence":0.09}],"creation-date":"2019-02-09T14:22:34.502274","type":"groundtruth/object-detection"}}
  
  
  Line 3
  {"source-ref":"s3://XXXXX/Train/Blackbird_3.JPG","TrainBird":{"annotations":[{"class_id":0,"width":1040,"top":509,"height":1695,"left":1548}],"image_size":[{"width":3872,"depth":3,"height":2592}]},"TrainBird-metadata":{"job-name":"labeling-job/trainbird","class-map":{"0":"Blackbird"},"human-annotated":"yes","objects":[{"confidence":0.09}],"creation-date":"2019-02-09T14:20:26.660164","type":"groundtruth/object-detection"}}
  </code></pre>
  
  <p>I then unzip the model.tar file to get the following files:hyperparams.JSON, model_algo_1-0000.params and model_algo_1-symbol</p>
  
  <p>hyperparams.JSON looks like this:</p>
  
  <pre><code>{"label_width": "350", "early_stopping_min_epochs": "10", "epochs": "5", "overlap_threshold": "0.5", "lr_scheduler_factor": "0.1", "_num_kv_servers": "auto", "weight_decay": "0.0005", "mini_batch_size": "1", "use_pretrained_model": "1", "freeze_layer_pattern": "", "lr_scheduler_step": "3,6", "early_stopping": "False", "early_stopping_patience": "5", "momentum": "0.9", "num_training_samples": "11", "optimizer": "rmsprop", "_tuning_objective_metric": "", "early_stopping_tolerance": "0.0", "learning_rate": "0.001", "kv_store": "device", "nms_threshold": "0.45", "num_classes": "1", "base_network": "resnet-50", "nms_topk": "400", "_kvstore": "device", "image_shape": "300"}
  </code></pre>