attention

#include "darknet.h"

#include <sys/time.h>
#include <assert.h>

extend_data_truth

void extend_data_truth(data *d, int n, float val)
{
    int i, j;
    for(i = 0; i < d->y.rows; ++i){
        d->y.vals[i] = realloc(d->y.vals[i], (d->y.cols+n)*sizeof(float));
        for(j = 0; j < n; ++j){
            d->y.vals[i][d->y.cols + j] = val;
        }
    }
    d->y.cols += n;
}

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

์ž…๋ ฅ:

  • (data *d): ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ

  • (int n): ์ถ”๊ฐ€ํ•  ์—ด ์ˆ˜

  • (float val): ์ถ”๊ฐ€ํ•  ๊ฐ’

๋™์ž‘:

  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด d์˜ y ํ–‰๋ ฌ์˜ ๊ฐ ํ–‰์— ๋Œ€ํ•ด n๊ฐœ์˜ ์—ด์„ ์ถ”๊ฐ€ํ•˜๊ณ , ํ•ด๋‹น ์—ด์˜ ๊ฐ’์„ ๋ชจ๋‘ val๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  • ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ d์˜ y ํ–‰๋ ฌ์— n๊ฐœ์˜ ์—ด์„ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ฐ ํ–‰์˜ ์ถ”๊ฐ€๋œ ์—ด๋“ค์˜ ๊ฐ’์„ ๋ชจ๋‘ val๋กœ ์„ค์ •ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

  • ์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ์…‹์˜ y๊ฐ’์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

network_loss_data

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

์ž…๋ ฅ:

  • network *net: ์‹ ๊ฒฝ๋ง ๋ชจ๋ธ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํฌ์ธํ„ฐ

  • data test: ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ

๋™์ž‘:

  • ์ฃผ์–ด์ง„ ์‹ ๊ฒฝ๋ง ๋ชจ๋ธ๊ณผ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ๋ชจ๋ธ์˜ ์†์‹ค๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜

  • ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์‹ ๊ฒฝ๋ง ๋ชจ๋ธ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ๊ณ ์ •์‹œํ‚ค๊ณ , ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์ˆœ์ „ํŒŒ(forward) ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ถœ๋ ฅ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ณ , ์ด๋ฅผ ํ† ๋Œ€๋กœ ์†์‹ค๊ฐ’์„ ๊ณ„์‚ฐํ•จ

  • ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋Š” ๋ฐฐ์น˜(batch) ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌ๋จ

์„ค๋ช…:

  • ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ๋‰ด๋Ÿด ๋„คํŠธ์›Œํฌ "net"์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

    • "net->batch" ๊ฐœ์ˆ˜ ๋งŒํผ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ "X"์™€ ์ •๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ "y"๋ฅผ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

    • "test.X"์™€ "test.y"์—์„œ "net->batch" ๊ฐœ์ˆ˜ ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ "X"์™€ "y"์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

    • "net->train" ๋ณ€์ˆ˜๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๋‰ด๋Ÿด ๋„คํŠธ์›Œํฌ๋ฅผ ํ…Œ์ŠคํŠธ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    • "net->delta" ๋ณ€์ˆ˜๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

    • "forward_network" ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋‰ด๋Ÿด ๋„คํŠธ์›Œํฌ์˜ ์ถœ๋ ฅ๊ฐ’์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

    • ๋‰ด๋Ÿด ๋„คํŠธ์›Œํฌ๋ฅผ ์›๋ž˜์˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.

  • ๊ณ„์‚ฐ๋œ ์ถœ๋ ฅ๊ฐ’ "delta"๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

    • ๊ฐ mini-batch์— ๋Œ€ํ•ด ์˜ค์ฐจ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

    • ๊ณ„์‚ฐ๋œ ์˜ค์ฐจ๋ฅผ "matrix" ํ˜•ํƒœ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  • ๋งˆ์ง€๋ง‰์œผ๋กœ, ๊ณ„์‚ฐ๋œ ์˜ค์ฐจ๋ฅผ ์ €์žฅํ•œ "matrix"๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

train_attention

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

์ž…๋ ฅ:

  • datacfg (str): ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ์„ ์œ„ํ•œ ์„ค์ • ํŒŒ์ผ

  • cfgfile (str): YOLOv3 ์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„ํ•œ ์„ค์ • ํŒŒ์ผ

  • weightfile (str): YOLOv3์˜ ๊ฐ€์ค‘์น˜ ํŒŒ์ผ

  • gpus (list of int): ์‚ฌ์šฉํ•  GPU์˜ ๋ฒˆํ˜ธ๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด

  • ngpus (int): ์‚ฌ์šฉํ•  GPU์˜ ๊ฐœ์ˆ˜

  • clear (bool): ๋ˆ„์ ๋œ ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ์ง€์šธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ

๋™์ž‘:

  • YOLOv3 ๋„คํŠธ์›Œํฌ๋ฅผ load_network ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋“œํ•œ๋‹ค.

  • ํ•™์Šต๋ฅ ์„ ngpus * learning_rate๋กœ ์„ค์ •ํ•˜๊ณ , ์ด๋•Œ learning_rate๋Š” ์„ค์ • ํŒŒ์ผ์— ์ •์˜๋œ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ์ด๋‹ค.

  • train_list์—์„œ ํ•™์Šต ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•œ๋‹ค.

  • ํ•™์Šต ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ , tile_data ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์€ ํƒ€์ผ๋กœ ๋‚˜๋ˆ„์–ด ๋„คํŠธ์›Œํฌ์—์„œ ํ•™์Šตํ•œ๋‹ค.

  • ์ตœ๋Œ€ ๋ฐฐ์น˜ ์ˆ˜๊ฐ€ ๋„๋‹ฌํ•˜๊ฑฐ๋‚˜ ์„ค์ • ํŒŒ์ผ์˜ max_batches ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ 0์œผ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ, ํ•™์Šต์€ ๋ฌด๊ธฐํ•œ์œผ๋กœ ๊ณ„์†๋œ๋‹ค.

  • ๊ฐ ๋ฐ˜๋ณต์—์„œ, ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฐฐ์น˜๋ฅผ ๋กœ๋“œํ•˜๊ณ  ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•œ ํ›„, divs*divs ์•ต์ปค ๋ฐ•์Šค๋ฅผ ํฌํ•จํ•˜๋Š” ์ง„์‹ค ๊ฐ’์„ ํ™•์žฅํ•˜์—ฌ ์„ ํƒ๋œ ํƒ€์ผ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ํ•™์Šตํ•˜๊ณ  ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

  • ์ตœ์ƒ์˜ ํƒ€์ผ์„ ์„ ํƒํ•˜๊ณ  ๋‹ค๋ฅธ ํƒ€์ผ์„ ํ•ด์ œํ•œ ํ›„, ์„ ํƒ๋œ ํƒ€์ผ์˜ ์–ดํ…์…˜ ๋งต์„ ์ถœ๋ ฅํ•˜๊ณ  ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์™€ ์–ดํ…์…˜ ๋งต์„ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ์ง€๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  • ํ•จ์ˆ˜๋Š” ๋ฐ˜ํ™˜๊ฐ’์ด ์—†๋‹ค.

validate_attention_single

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

์ž…๋ ฅ:

  • datacfg: ๋ฐ์ดํ„ฐ ์„ค์ • ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ž์—ด ํฌ์ธํ„ฐ

  • filename: ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ž์—ด ํฌ์ธํ„ฐ

  • weightfile: ๋„คํŠธ์›Œํฌ ๊ฐ€์ค‘์น˜ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ž์—ด ํฌ์ธํ„ฐ

๋™์ž‘:

  • ์ฃผ์–ด์ง„ ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ์— ๋Œ€ํ•ด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

  • ์ฃผ์–ด์ง„ ๊ฒฝ๋กœ์— ์žˆ๋Š” ์„ค์ • ํŒŒ์ผ์„ ์ฝ์–ด ๋ฐ์ดํ„ฐ์™€ ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ ํ›„, ์ž…๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๊ณ  ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๋ฉฐ ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฒฐ๊ณผ๋ฅผ ํ‰๊ฐ€ํ•˜๊ณ  ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

    1. ๋ฐ์ดํ„ฐ ์„ค์ • ํŒŒ์ผ(datacfg)์„ ์ฝ์–ด๋“ค์ž…๋‹ˆ๋‹ค.

    2. ์ž…๋ ฅ ์ด๋ฏธ์ง€์˜ ํด๋ž˜์Šค ์ˆ˜(classes), ์ƒ์œ„ K(topk) ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    3. ์ž…๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๊ณ , ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

    4. ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•œ ์ด๋ฏธ์ง€๋ฅผ cropํ•ฉ๋‹ˆ๋‹ค.

    5. cropํ•œ ์ด๋ฏธ์ง€๋ฅผ ์ด์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    6. ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ์˜ ์ถœ๋ ฅ ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ์ •ํ™•๋„๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    7. ํ‰๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  • ์ด ํ•จ์ˆ˜๋Š” Darknet ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฝ”๋“œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

  • ์ฃผ์–ด์ง„ ๊ฒฝ๋กœ์˜ ๋ฐ์ดํ„ฐ ์„ค์ • ํŒŒ์ผ(datacfg), ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ ํŒŒ์ผ(filename), ๋„คํŠธ์›Œํฌ ๊ฐ€์ค‘์น˜ ํŒŒ์ผ(weightfile)์„ ์ด์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฒ€์ฆ ๊ฒฐ๊ณผ๋Š” ํ‰๊ท  ์ •ํ™•๋„(avg_acc)์™€ ํ‰๊ท  ์ƒ์œ„ K(topk) ์ •ํ™•๋„(avg_topk)๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

validate_attention_multi

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

์ž…๋ ฅ:

  • char* datacfg: ๋ฐ์ดํ„ฐ ์„ค์ • ํŒŒ์ผ ๊ฒฝ๋กœ

  • char* filename: ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ ํŒŒ์ผ ๊ฒฝ๋กœ

  • char* weightfile: ํ•™์Šต๋œ ๋ชจ๋ธ์˜ ๊ฐ€์ค‘์น˜ ํŒŒ์ผ ๊ฒฝ๋กœ

๋™์ž‘:

  • ๋‹ค์ค‘ ํฌ๊ธฐ์˜ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •๋œ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

  • ๋„คํŠธ์›Œํฌ๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฅ˜ํ•˜๋Š” ์ด๋ฏธ์ง€์˜ ๋น„์œจ๊ณผ ์ƒ์œ„ k๊ฐœ ๋ถ„๋ฅ˜ ์ค‘ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ถ„๋ฅ˜ํ•˜๋Š” ์ด๋ฏธ์ง€์˜ ๋น„์œจ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  • ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ ํŒŒ์ผ๊ณผ ๊ฐ€์ค‘์น˜ ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ , ๋ฐฐ์น˜ ํฌ๊ธฐ๋ฅผ 1๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ์„ค์ • ํŒŒ์ผ์—์„œ ๋ ˆ์ด๋ธ” ๋ชฉ๋ก, ๊ฒ€์ฆ ์ด๋ฏธ์ง€ ๋ชฉ๋ก, ํด๋ž˜์Šค ์ˆ˜, ์ƒ์œ„ k๊ฐœ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

  • ๊ฒ€์ฆ ์ด๋ฏธ์ง€๋ฅผ ์ฝ์–ด๋“ค์ด๊ณ , ๋‹ค์ค‘ ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์กฐ์ •ํ•˜๊ณ , ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์˜ˆ์ธกํ•ฉ๋‹ˆ๋‹ค.

  • ์˜ˆ์ธก ๊ฒฐ๊ณผ์—์„œ ์ƒ์œ„ k๊ฐœ ๋ถ„๋ฅ˜๋ฅผ ์„ ํƒํ•˜๊ณ , ์ •ํ™•๋„์™€ ์ƒ์œ„ k๊ฐœ์˜ ์ •ํ™•๋„๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ๊ฒ€์ฆ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ์ •ํ™•๋„์™€ ์ƒ์œ„ k๊ฐœ์˜ ์ •ํ™•๋„๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

predict_attention

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

์ž…๋ ฅ:

  • char *datacfg: ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ํฌ์ธํ„ฐ

  • char *cfgfile: YOLO ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ํฌ์ธํ„ฐ

  • char *weightfile: YOLO ๋„คํŠธ์›Œํฌ ๊ฐ€์ค‘์น˜ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ํฌ์ธํ„ฐ

  • char *filename: ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ํฌ์ธํ„ฐ (์„ ํƒ์ )

  • int top: ์˜ˆ์ธก ๊ฒฐ๊ณผ์—์„œ ์ƒ์œ„ N๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ๋ณด์—ฌ์ค„์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์ •์ˆ˜

๋™์ž‘:

  • YOLO ๋„คํŠธ์›Œํฌ๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์ž…๋ ฅ ์ด๋ฏธ์ง€์—์„œ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ์˜ˆ์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜

  • ์ž…๋ ฅ ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์€ ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉ

  • ์˜ˆ์ธก ๊ฒฐ๊ณผ์—์„œ ์ƒ์œ„ N๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ๋ณด์—ฌ์คŒ

  • ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ณ„์†ํ•ด์„œ ์ž…๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ

์„ค๋ช…:

  • ํ•จ์ˆ˜๋Š” YOLO ๋„คํŠธ์›Œํฌ๋ฅผ ๋กœ๋“œํ•˜๊ณ , ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž…๋ ฅ ์ด๋ฏธ์ง€์—์„œ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์˜ˆ์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•จ

  • ์˜ˆ์ธก ๊ฒฐ๊ณผ์—์„œ ๋ณด์—ฌ์ค„ ํด๋ž˜์Šค์˜ ์ˆ˜(top)๋Š” ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๊ฑฐ๋‚˜, ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ์ฐพ๊ฑฐ๋‚˜ ๊ธฐ๋ณธ๊ฐ’ 1๋กœ ์„ค์ •๋จ

  • ํ•จ์ˆ˜๋Š” ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์€ ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์ธก์„ ์ˆ˜ํ–‰ํ•จ

  • ์˜ˆ์ธก ๊ฒฐ๊ณผ์—์„œ๋Š” ๊ฐ ํด๋ž˜์Šค์˜ ์ด๋ฆ„๊ณผ ํ•ด๋‹น ํด๋ž˜์Šค์ผ ํ™•๋ฅ ์ด ๋ฐฑ๋ถ„์œจ๋กœ ์ถœ๋ ฅ๋จ

  • ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋จผ์ € ์ž…๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๊ณ , YOLO ๋„คํŠธ์›Œํฌ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํฌ๊ธฐ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์กฐ์ ˆํ•จ

  • ์ดํ›„, ์˜ˆ์ธก์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์˜ˆ์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•จ

  • ์˜ˆ์ธก ๊ฒฐ๊ณผ๋Š” ํด๋ž˜์Šค์˜ ์ด๋ฆ„๊ณผ ํ™•๋ฅ ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์ƒ์œ„ N๊ฐœ์˜ ํด๋ž˜์Šค๋งŒ ์ถœ๋ ฅํ•จ

  • ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ณ„์†ํ•ด์„œ ์ž…๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ

run_attention

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

์ž…๋ ฅ:

  • argc: int, ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ์ „๋‹ฌ๋œ ์ธ์ž์˜ ๊ฐœ์ˆ˜

  • argv: char**, ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ์ „๋‹ฌ๋œ ์ธ์ž๋“ค์˜ ๋ฐฐ์—ด

๋™์ž‘:

  • ์ฃผ์–ด์ง„ ์ธ์ž๋“ค์„ ๋ถ„์„ํ•˜์—ฌ ํ•ด๋‹นํ•˜๋Š” ์ž‘์—…์„ ์‹คํ–‰ํ•จ

  • "predict" ์ธ์ž๊ฐ€ ์ฃผ์–ด์ง€๋ฉด, predict_attention ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ  ํ•ด๋‹น ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ๊ฐ์ฒด ์ธ์‹ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•จ

  • "train" ์ธ์ž๊ฐ€ ์ฃผ์–ด์ง€๋ฉด, train_attention ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ง€์ •๋œ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ๋ถ€ํ„ฐ ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ด

  • "valid" ์ธ์ž๊ฐ€ ์ฃผ์–ด์ง€๋ฉด, validate_attention_single ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ง€์ •๋œ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ๋ถ€ํ„ฐ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•จ

  • "validmulti" ์ธ์ž๊ฐ€ ์ฃผ์–ด์ง€๋ฉด, validate_attention_multi ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ง€์ •๋œ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ๋ถ€ํ„ฐ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•จ

์„ค๋ช…:

  • gpu_list: char*, ์‚ฌ์šฉํ•  GPU ๋ชฉ๋ก์„ ์ง€์ •ํ•จ

  • ngpus: int, ์‚ฌ์šฉํ•  GPU์˜ ๊ฐœ์ˆ˜

  • gpus: int*, ์‚ฌ์šฉํ•  GPU์˜ ์ธ๋ฑ์Šค

  • top: int, ๊ฐ์ฒด ์ธ์‹ ๊ฒฐ๊ณผ ์ค‘ ์ƒ์œ„ ๋ช‡ ๊ฐœ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ• ์ง€ ์ง€์ •ํ•จ

  • clear: int, ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ด์ „์— ํ•™์Šต๋œ ๋‚ด์šฉ์„ ์‚ญ์ œํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•จ

  • data: char*, ๋ฐ์ดํ„ฐ์…‹์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•จ

  • cfg: char*, ๋ชจ๋ธ์˜ ์„ค์ • ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•จ

  • weights: char*, ๋ชจ๋ธ์˜ ๊ฐ€์ค‘์น˜ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•จ (์ƒ๋žต ๊ฐ€๋Šฅ)

  • filename: char*, ๊ฐ์ฒด ์ธ์‹์„ ์ˆ˜ํ–‰ํ•  ์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•จ (์ƒ๋žต ๊ฐ€๋Šฅ)

  • layer_s: char*, ๋ชจ๋ธ์—์„œ ์ถœ๋ ฅํ•  ๋ ˆ์ด์–ด ์ด๋ฆ„์„ ์ง€์ •ํ•จ (์ƒ๋žต ๊ฐ€๋Šฅ)

Last updated

Was this helpful?