분류 전체보기
[백준] 1920번: 수 찾기, 10815번: 숫자 카드 (Python)
풀이 import sys from collections import Counter N = int(sys.stdin.readline()) N_list = list(map(int, sys.stdin.readline().split(' '))) M = int(sys.stdin.readline()) M_list = list(map(int, sys.stdin.readline().split(' '))) N_cnt = Counter(N_list) for num in M_list: if N_cnt[num]: print(1) else: print(0) split( )으로 input을 받아주는게 포인트 나는 몇개인지 출력하는지 알고 Counter를 사용했다. 단순히 중복 여부라면 더 가벼운 코드로 구현하지만... 통과했으니..
Lightweight Deep Learning
모델 경량화의 필요성 경량화란 모델의 기존의 성능을 유지한채 더 적은 파라미터 수와 연산량을 가지는 모델을 만드는 것이다. 그렇다면 왜 경량화가 필요할까? AI 모델 학습에 들어가는 연산은 시간이 지나면서, 기하급수적으로 증가하고 있다. 또한 AI를 산업에 적용되기 위해서는 다양한 요구조건들이 고려된다. 이러한 상황에서 동일한 조건으로 최대의 결과를 얻기 위해서는 모델의 경량화/최적화 과정이 필요하다. 대표적인 경량화/최적화의 종류 네트워크 구조 관점 Efficient Architecture Design Network Pruning Knowledge Distillation Matrix / Tensor Decomposition Hardward 관점 Network Quantization Network Com..
[백준] 2108번: 통계학 (Python)
풀이 import sys from collections import Counter cnt = int(sys.stdin.readline()) numbers = [] for i in range(cnt): num = int(sys.stdin.readline()) numbers.append(num) if cnt == 1: print(numbers[0], numbers[0], numbers[0], 0, sep='\n') else: numbers.sort() mode = Counter(numbers).most_common(2) print(round(sum(numbers)/cnt)) print(numbers[cnt//2]) if mode[0][1] == mode[1][1]: print(mode[1][0]) else:..
Software 1.0 vs Software 2.0
Software 1.0과 Software 2.0은 일종의 프로그래밍의 기술의 방법이다. Software 2.0이 나온 이후로 딥러닝은 엄청난 속도로 발전했다. 그렇다면 Software 1.0과 Software의 2.0이란 무엇이고 그 차이는 무엇일까? 먼저, Software 1.0의 정의는 다음과 같다. The “classical stack” of Software 1.0 is what we’re all familiar with — it is written in languages such as Python, C++, etc. It consists of explicit instructions to the computer written by a programmer. By writing each line of ..
재활용 품목 분류를 위한 Semantic Segmentation 대회 Wrap-up
Project Outline Task 재활용 품목 분류를 위한 Semantic Segmentation (https://stages.ai/competitions/78/overview/description) 쓰레기가 찍힌 사진에서 쓰레기를 Segmentation 하는 모델을 통한 분리수거 인공지능 만들기 Metric mIoU (Mean Intersection over Union) : 각 클래스 별 IoU를 계산하고, 이 값들의 평균을 구한다. Result Public : 0.779(mIoU), 19팀 중 6등 Private : 0.760(mIoU), 19팀 중 3등 Trial and Errors Augment 모델이 학습한 결과를 시각화하면서, 다양한 문제점을 발견했다. 그림자나 객체의 프린팅 된 그림에 의..
재활용 품목 분류를 위한 Semantic Segmentation 대회 [3/3]
Trial and Errors Ensemble 단일 모델 Ensemble 일반화를 높이기 위해서는 K-fold로 나뉜 valid를 앙상블 하는 방법이 가장 일반적이다. 하지만, 5번의 학습에 너무 많은 시간이 필요하여 다른 방법을 시도했다. 시간을 최소한으로 일반화를 높이기 위해서 먼저, Valid를 나누지 않은 데이터 셋을 이용하여 학습을 진행했다. Validation이 없기 때문에, 학습의 정도를 확인할 수 없고 이를 보완하고자 epoch과 seed를 기준으로도 앙상블을 진행했다. 결과적으로는 기존 성능보다는 근소하게 낮은 점수가 나왔다. 하지만, 실제로 시각화하여 확인한 결과로는 조금 깔끔한 결과를 확인할 수 있었다. 다른 모델과의 Ensemble 최종적으로 높은 성능을 보인 모델이, MMSegme..
[주간 회고] WEEK 13
Retrospective Goal 다양한 실험 진행 SOTA Model Augment CRF Ensemble Activity Project 2021.10.29 - [Project/Semantic Sementation] - 재활용 품목 분류를 위한 Semantic Segmentation 대회 [2/3] Retrospective 이번 주에는 다양한 논문을 읽어보며 모델의 구조를 공부하고, SOTA 모델을 따라서 적용해보기도 하며 다양한 실험을 진행했다. 결론적으로는, Object Detection Task와 마찬가지로 Swin의 성능이 뛰어났다. 논문을 읽으면서 느낀 점은 성능을 올리기 위해서 정말 다양한 방법을 적용하는 것이다. 하지만, 다른 Task의 경우 결국 최종적으로 종합해서 사용한 최종적인 모델이..
재활용 품목 분류를 위한 Semantic Segmentation 대회 [2/3]
Trial and Errors Model SOTA 모델 사용하기 Semantic Segmentation 모델의 구조는 크게 FCN, Multi-scale, Encoder-Decoder, R-CNN, Attention, GAN 등으로 나뉜다. 이 중에서 나는 high-level API인 MMSegmentation를 활용해 최근의 SOTA 모델 위주로 실험을 진행했다. 이번 대회에서는 DeepLabv3+, HRNetV2+OCR, UperNet+Swin-B, Danet, DEiT, DNL 등 최대한 다양한 모델을 사용해서 이후 앙상블에 사용하고자 했다. 좋은 앙상블을 위해서는 어느정도 우수한 성능을 갖는 모델을 다양하게 가질 필요가 있다. 특히, Atrous Spatial Pyramid Pooling을 사용하..