pycocotools: 이미지 인식 및 객체 감지 작업을 위한 도구 모음
[ 주요기능 ]
1) 주석 파일을 읽고 객체 인스턴스에 대한 정보를 추출하는 기능
이를 통해 객체 감지, 객체 분할 및 객체 인식 작업에 필요한 데이터를 사용할 수 있다.
2) COCO 형식의 결과 파일을 생성하는 기능
이를 통해 모델의 출력 결과를 COCO 형식으로 저장하고, 이를 평가 및 시각화하는 데 사용할 수 있다.
→ COCO(Common Objects in Context) 데이터셋과 관련된 작업을 수행하는 데 도움이 된다. (* COCO: 데이터셋은 객체 인식, 객체 검출 및 객체 분할과 같은 컴퓨터 비전 작업에 널리 사용되는 대규모 데이터셋으로 실제 이미지에서 다양한 객체 카테고리의 인스턴스를 주석으로 제공한다.)
labels 에 대한 참고사항
1) 클래스 0 을 배경으로 취급
ex) 고양이 와 강아지 의 오직 2개의 클래스만 분류한다고 가정하면, (0 이 아닌) 1 이 고양이 를, 2 가 강아지 를 나타내도록 정의
2) 학습 중에 가로 세로 비율 그룹화를 사용하려는 경우 get_height_and_width 메소드를 구현하기를 추천
→ 이 메소드가 구현되지 않은 경우에는 모든 데이터셋은 getitem 를 통해 메모리에 이미지가 로드되며 사용자 정의 메소드를 제공하는 것보다 느릴 수 있기 때문
R-CNN의 한계점
1) RoI (Region of Interest) 마다 CNN연산을 함으로써 속도저하
2) multi-stage pipelines으로써 모델을 한번에 학습시키지 못함
→ RoI pooling, CNN 특징 추출부터 classification, bounding box regression까지 하나의 모델에서 학습을 통해 극복
RoI Pooling: Fast R-CNN에서 적용된 1개의 피라미드 SPP로 고정된 크기의 feature vector를 만드는 과정
R-CNN에서 CNN output이 FC layer의 input으로 들어가야했기 때문에 CNN input을 동일 size로 맞춰줘야 했기때문에 원래 이미지에서 추출한 RoI를 crop, warp을 통해 동일 size로 조정하였다.
→ 그러나 실제로 "FC layer의 input이 고정인거지 CNN input은 고정이 아니다" 따라서 CNN에는 입력 이미지 크기, 비율 관계없이 input으로 들어갈 수 있고 FC layer의 input으로 들어갈때만 size를 맞춰주기만 하면된다.
Spatial Pyramid Pooling(SPP):
4x4, 2x2, 1x1 세 가지 피라미드가 존재하고, max pooling을 적용하여 각 피라미드 크기에 맞게 max값을 뽑아낸다. 각 피라미드 별로 뽑아낸 max값들을 쭉 이어붙여 고정된 크기 vector를 만들고 이게 FC layer의 input으로 들어간다.
→ 2천개의 region proposal마다 해야했던 2천번의 CNN연산이 1번으로 줄었다.
Faster R-CNN:기존 Fast RCNN 구조를 그대로 계승하면서 selective search를 제거하고 RPN(Region Proposal Network)을 통해서 RoI를 계산
→ GPU를 통한 RoI 계산이 가능, RoI 계산도 학습시켜 정확도를 높일 수 있음
다양한 범주의 적대적 공격이 있는데 보통 가장 중요한 목표는 입력 데이터 최소한의 작은 변화를 추가하여 이것이 의도적으로 잘못 분류되게 하는 것이다.
공격자가 가지고 있는 정보에 대한 가정
1. 화이트 박스: 공격자가 모델에 대해 아키텍처, 입력, 출력, 가중치를 포함한 모든 것을 알고 있고 접근 가능하다고 가정
2. 블랙 박스: 공격자가 모델의 입력과 출력에 대해서만 접근 가능하고 모델의 가중치와 아키텍처에 관한 내용은 모른다고 가정
Fast Gradient Sign Attack: 화이트 박스 공격
→ 변화도를 활용하여 신경망을 공격: 조그만 변화로 판다를 긴팔원숭이로 인식
→ Generative model의 한 종류로써 데이터를 생성하는 generator와 데이터를 구별하는 discriminator가 경쟁하는 과정을 통해서 데이터를 학습한다.
→ GAN에서는 Fully-connected layer 구조였던 네트워크들을 Convolutional layer 구조로 전부 치환
모델의 구조
discriminator: convolution 계층, batch norm 계층, 그리고 LeakyReLU 활성함수가 사용
generator: convolutional-transpose 계층, 배치 정규화(batch norm) 계층, 그리고 ReLU 활성함수가 사용