Error call_user_func_array() expects parameter 1 to be a valid callback when using image_size_names_choose

You can’t define a hook callback function inside another function.

You’ve defined my_custom_sizes() inside setup(), which means that my_custom_sizes() cannot be called outside of the scope of setup(). This is a problem because the hook, image_size_names_choose, is not run inside your setup() function. You need to define your callback in the global scope:

function setup()
{
    add_image_size( 'banner-ad', 655, 100, true );
    add_image_size( 'banner-rectangle', 655, 250, true );

}
add_action('after_setup_theme', __NAMESPACE__ . '\\setup');

function my_custom_sizes( $sizes )
{
    return array_merge( $sizes, array(
        'banner-ad' => __( 'Banner Ad' ),
        'banner-rectangle' => __( 'Banner Rectangle' ),
    ) );
}
add_filter( 'image_size_names_choose', __NAMESPACE__ . '\\my_custom_sizes' );