crop_layer

input(image, feature map)์„ cropํ•˜๊ธฐ ์œ„ํ•œ layer์ž…๋‹ˆ๋‹ค.

get_crop_image

image get_crop_image(crop_layer l)
{
    int h = l.out_h;
    int w = l.out_w;
    int c = l.out_c;
    return float_to_image(w,h,c,l.output);
}

ํ•จ์ˆ˜ ์ด๋ฆ„: get_crop_image

์ž…๋ ฅ:

  • crop_layer ํƒ€์ž… ๋ณ€์ˆ˜ l

๋™์ž‘:

  • ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ crop_layer ํƒ€์ž… ๋ณ€์ˆ˜ l์˜ output ๋ฐฐ์—ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ float_to_image ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  • ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ crop_layer ํƒ€์ž… ๋ณ€์ˆ˜ l์€ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜๋ผ๋‚ด๊ธฐ ์œ„ํ•œ ์ •๋ณด๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด ํ•จ์ˆ˜๋Š” ๊ทธ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž˜๋ผ๋‚ธ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ float_to_image ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ํ•จ์ˆ˜๋Š” ์ด๋ฏธ์ง€ ์ธ์‹ ๋ถ„์•ผ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

forward_crop_layer

void forward_crop_layer(const crop_layer l, network net)
{
    int i,j,c,b,row,col;
    int index;
    int count = 0;
    int flip = (l.flip && rand()%2);
    int dh = rand()%(l.h - l.out_h + 1);
    int dw = rand()%(l.w - l.out_w + 1);
    float scale = 2;
    float trans = -1;
    if(l.noadjust){
        scale = 1;
        trans = 0;
    }
    if(!net.train){
        flip = 0;
        dh = (l.h - l.out_h)/2;
        dw = (l.w - l.out_w)/2;
    }
    for(b = 0; b < l.batch; ++b){
        for(c = 0; c < l.c; ++c){
            for(i = 0; i < l.out_h; ++i){
                for(j = 0; j < l.out_w; ++j){
                    if(flip){
                        col = l.w - dw - j - 1;    
                    }else{
                        col = j + dw;
                    }
                    row = i + dh;
                    index = col+l.w*(row+l.h*(c + l.c*b));
                    l.output[count++] = net.input[index]*scale + trans;
                }
            }
        }
    }
}

ํ•จ์ˆ˜ ์ด๋ฆ„: forward_crop_layer

์ž…๋ ฅ:

  • const crop_layer l: crop_layer ํƒ€์ž…์˜ l ๋ณ€์ˆ˜. ํฌ๋กญ ๋ ˆ์ด์–ด์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ.

  • network net: network ํƒ€์ž…์˜ net ๋ณ€์ˆ˜. ์‹ ๊ฒฝ๋ง ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ.

๋™์ž‘:

  • ๋žœ๋ค์œผ๋กœ ์ขŒ์šฐ ๋ฐ˜์ „๊ณผ ์ด๋ฏธ์ง€๋ฅผ ์ž˜๋ผ๋‚ธ ํ›„, ํฌ๋กญ ๋ ˆ์ด์–ด์˜ ์ถœ๋ ฅ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ l.output ๋ฐฐ์—ด์— ์ €์žฅํ•จ.

์„ค๋ช…:

  • ํฌ๋กญ ๋ ˆ์ด์–ด๋Š” ์ž…๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ๋žœ๋ค์œผ๋กœ ์ž๋ฅธ ํ›„, ์ถœ๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•จ.

  • ์ž…๋ ฅ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋Š” l.h x l.w x l.c์ด๊ณ , ์ถœ๋ ฅ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋Š” l.out_h x l.out_w x l.out_c์ž„.

  • ์ขŒ์šฐ ๋ฐ˜์ „ ์—ฌ๋ถ€๋Š” l.flip ๊ฐ’์— ๋”ฐ๋ผ ๋žœ๋ค์œผ๋กœ ๊ฒฐ์ •๋จ.

  • ์ž˜๋ผ๋‚ธ ์ด๋ฏธ์ง€์˜ ์œ„์น˜๋Š” l.h, l.w์—์„œ ๊ฐ๊ฐ l.out_h, l.out_w ํฌ๊ธฐ๋งŒํผ ๋žœ๋คํ•˜๊ฒŒ ์„ ํƒ๋จ.

  • ํฌ๋กญ ๋ ˆ์ด์–ด๋Š” ๋„คํŠธ์›Œํฌ๊ฐ€ ํ•™์Šต ์ค‘์ผ ๋•Œ๋งŒ ์ขŒ์šฐ ๋ฐ˜์ „์„ ํ•˜๊ณ  ์ด๋ฏธ์ง€๋ฅผ ์ž˜๋ผ๋ƒ„. ํ•™์Šต์ด ์•„๋‹ ๋•Œ๋Š” ์ขŒ์šฐ ๋ฐ˜์ „์„ ํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ์ง€ ์ค‘์•™์—์„œ ์ž˜๋ผ๋ƒ„.

  • scale๊ณผ trans ๊ฐ’์€ ์ด๋ฏธ์ง€๋ฅผ ์ •๊ทœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋จ.

backward_crop_layer

void backward_crop_layer(const crop_layer l, network net){}

ํ•จ์ˆ˜ ์ด๋ฆ„: backward_crop_layer

์ž…๋ ฅ:

  • crop_layer l

  • network net

๋™์ž‘:

  • crop_layer์˜ ์—ญ์ „ํŒŒ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ํ•จ์ˆ˜๋Š” backward ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„ค๋ช…:

  • crop_layer๋Š” ์ž…๋ ฅ ์ด๋ฏธ์ง€์˜ ์ผ๋ถ€๋ถ„์„ ๋ฌด์ž‘์œ„๋กœ ์ž˜๋ผ๋‚ด์–ด ์ถœ๋ ฅ์œผ๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.

  • ์ด ํ•จ์ˆ˜๋Š” ํ•ด๋‹น ๋ ˆ์ด์–ด์—์„œ์˜ ์—ญ์ „ํŒŒ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ ˆ์ด์–ด๋Š” ์—ญ์ „ํŒŒ๋ฅผ ์œ„ํ•œ ํ•™์Šต ๊ฐ€๋Šฅํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋”ฐ๋ผ์„œ ์ด ํ•จ์ˆ˜๋Š” ๋นˆ ํ•จ์ˆ˜๋กœ ๋‚จ๊ฒจ๋‘ก๋‹ˆ๋‹ค.

resize_crop_layer

void resize_crop_layer(layer *l, int w, int h)
{
    l->w = w;
    l->h = h;

    l->out_w =  l->scale*w;
    l->out_h =  l->scale*h;

    l->inputs = l->w * l->h * l->c;
    l->outputs = l->out_h * l->out_w * l->out_c;

    l->output = realloc(l->output, l->batch*l->outputs*sizeof(float));
}

ํ•จ์ˆ˜ ์ด๋ฆ„: resize_crop_layer

์ž…๋ ฅ:

  • layer *l: ํฌ๋กญ ๋ ˆ์ด์–ด ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ

  • int w: ์ƒˆ๋กœ์šด ๊ฐ€๋กœ ํฌ๊ธฐ

  • int h: ์ƒˆ๋กœ์šด ์„ธ๋กœ ํฌ๊ธฐ

๋™์ž‘:

  • ํฌ๋กญ ๋ ˆ์ด์–ด์˜ ๊ฐ€๋กœ ์„ธ๋กœ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ , ์ถœ๋ ฅ ํฌ๊ธฐ๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๊ณ , ์ถœ๋ ฅ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์žฌํ• ๋‹นํ•œ๋‹ค.

์„ค๋ช…:

  • ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ํฌ๋กญ ๋ ˆ์ด์–ด ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋กœ์™€ ์„ธ๋กœ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.

  • ๊ทธ ํ›„, ์ƒˆ๋กœ์šด ๊ฐ€๋กœ์™€ ์„ธ๋กœ ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ๋ ฅ ํฌ๊ธฐ๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๊ณ , ์ž…๋ ฅ ํฌ๊ธฐ์™€ ์ถœ๋ ฅ ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ๋ ฅ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์žฌํ• ๋‹นํ•œ๋‹ค.

make_crop_layer

crop_layer make_crop_layer(int batch, int h, int w, int c, int crop_height, int crop_width, int flip, float angle, float saturation, float exposure)
{
    fprintf(stderr, "Crop Layer: %d x %d -> %d x %d x %d image\n", h,w,crop_height,crop_width,c);
    crop_layer l = {0};
    l.type = CROP;
    l.batch = batch;
    l.h = h;
    l.w = w;
    l.c = c;
    l.scale = (float)crop_height / h;
    l.flip = flip;
    l.angle = angle;
    l.saturation = saturation;
    l.exposure = exposure;
    l.out_w = crop_width;
    l.out_h = crop_height;
    l.out_c = c;
    l.inputs = l.w * l.h * l.c;
    l.outputs = l.out_w * l.out_h * l.out_c;
    l.output = calloc(l.outputs*batch, sizeof(float));
    l.forward = forward_crop_layer;
    l.backward = backward_crop_layer;

    return l;
}

ํ•จ์ˆ˜ ์ด๋ฆ„: make_crop_layer

์ž…๋ ฅ:

  • batch: int, ๋ฏธ๋‹ˆ๋ฐฐ์น˜ ํฌ๊ธฐ

  • h: int, ์ž…๋ ฅ ์ด๋ฏธ์ง€์˜ ๋†’์ด

  • w: int, ์ž…๋ ฅ ์ด๋ฏธ์ง€์˜ ๋„ˆ๋น„

  • c: int, ์ž…๋ ฅ ์ด๋ฏธ์ง€์˜ ์ฑ„๋„ ์ˆ˜

  • crop_height: int, ์ž๋ฅผ ์˜์—ญ์˜ ๋†’์ด

  • crop_width: int, ์ž๋ฅผ ์˜์—ญ์˜ ๋„ˆ๋น„

  • flip: int, ์ž๋ฅด๊ธฐ ์ „ ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜ํ‰์œผ๋กœ ๋’ค์ง‘์„์ง€ ์—ฌ๋ถ€

  • angle: float, ์ด๋ฏธ์ง€ ํšŒ์ „ ๊ฐ๋„

  • saturation: float, ์ด๋ฏธ์ง€ ํฌํ™”๋„ ์กฐ์ ˆ ๊ฐ’

  • exposure: float, ์ด๋ฏธ์ง€ ๋…ธ์ถœ ์กฐ์ ˆ ๊ฐ’

๋™์ž‘:

  • ์ž…๋ ฅ๋œ ๊ฐ’์„ ๋ฐ”ํƒ•์œผ๋กœ crop_layer ๊ตฌ์กฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

  • ์ถœ๋ ฅ๋˜๋Š” ์˜์ƒ์˜ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

  • ํ•„์š”ํ•œ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•œ๋‹ค.

  • forward_crop_layer ํ•จ์ˆ˜์™€ backward_crop_layer ํ•จ์ˆ˜๋ฅผ ์„ค์ •ํ•œ๋‹ค.

  • ์ดˆ๊ธฐํ™”๋œ crop_layer ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์„ค๋ช…:

  • ์ด ํ•จ์ˆ˜๋Š” crop_layer๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

  • crop_layer๋Š” ์ž…๋ ฅ๋œ ์ด๋ฏธ์ง€์—์„œ ์ฃผ์–ด์ง„ ํฌ๊ธฐ์˜ ์˜์—ญ์„ ์ž˜๋ผ๋‚ด๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

  • ์ž…๋ ฅ๋œ ์ธ์ž๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ crop_layer ๊ตฌ์กฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•œ ํ›„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ์ด๋•Œ forward_crop_layer ํ•จ์ˆ˜์™€ backward_crop_layer ํ•จ์ˆ˜๋ฅผ ์„ค์ •ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

Last updated

Was this helpful?