get error field is required when #access is false with field permission  in image field
This fieldpermission bug with image and file cck field.

You can get all element in form_alter and if #access set false remove #require of it

    if ($profile_type == 'profile_main') {
    foreach($form[$profile_type] as $index=&gt;$value) {
          if (preg_match('/^field_/', $index)){
                if ($form[$profile_type][$index]['#access'] == FALSE)  
                  $form[$profile_type][$index]['und'][0]['#required']=FALSE;
          }
        }
    }