전체 글 153

MFC - CRuntimeClass

기능 클래스 이름을 사용하지 않고 객체를 생성한다. 메모리 상에 객체의 자료형을 검사한다. 메모리 상에 객체의 유효성을 검사한다. 객체 직렬화(Serialization)에 대한 정보를 제공한다. 사용조건 CRuntimeClass 구조체를 이 기능을 사용하려는 클래스의 static 멤버변수로 입력 CRuntimeClass 구조체를 static 멤버변수로 사용하기 위해 3가지 매크로 이용 선언부 : DECLARE_DYNAMIC, DYNCREATE, SERIAL 정의부 : IMPLEMENT_DYNAMIC 나머지 같음 뒤의 매개변수에 따라 기능이 달라짐 CObject로부터 상속받아야 한다. (CObject는 MFC의 최상위 클래스) MFC 내부에서 CRuntimeClass를 이용하는 객체에 접근할 때, CObj..

YOLO - Colab 이용해서 Custom 학습하기 (3)

파이썬을 이용하는 다른 플랫폼에 적용시키기 darknet에서만 사용하는 것이 아닌 라즈베리파이, 웹사이트, 모바일 등에 적용할 수 있다. 준비물은 3가지이다. CFG 파일 훈련된 weight 파일 names 파일 라이브러리와 YOLO 로드 import cv2 import numpy as np from matplotlib import pyplot as plt net = cv2.dnn.readNet("yolov4_19000.weights", "yolov4.cfg") #CFG 파일, weight 파일을 넣어준다. classes = [] with open("food30.names", "rt",encoding = "UTF8") as f: #클래스 이름을 따로 저장해준다. 이 형식은 클래스가 한글이름 일 때 불러오..

백준 - 마법사 상어와 파이어스톰 (C++)

문제 : www.acmicpc.net/problem/20058 20058번: 마법사 상어와 파이어스톰 마법사 상어는 파이어볼과 토네이도를 조합해 파이어스톰을 시전할 수 있다. 오늘은 파이어스톰을 크기가 2N × 2N인 격자로 나누어진 얼음판에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c www.acmicpc.net 문제설명 단순 구현 시뮬레이션 문제이다. 배열 회전하는 방법과 BFS를 사용하면 쉽게 풀 수 있다. 알고리즘 1. 배열을 스캔하며 나눠진 구역마다 회전해준다. 회전 방법은 코드에 주석처리 해놨다. 2. 회전 후 인접한 4방향을 탐색하고 조건을 실행한다. 3. 모든 명령을 마친 후 BFS을 통해 가장 큰 덩어리의 개수를 구한다. 주의사항 1. 구역을 나누고 회전하는 부분이 까다로웠는데..

백준 - 마법사 상어와 토네이도 (C++)

문제 : www.acmicpc.net/problem/20057 20057번: 마법사 상어와 토네이도 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을 www.acmicpc.net 문제설명 단순 구현 시뮬레이션 문제이다. 알고리즘 1. 문제 설명에 나와있는 5x5의 흩날리는 비율을 각 토네이도 방향마다 적용시켜준다. 2. 4방향 모두 만들어준다. 3. 토네이도를 이동하며 방향에 맞는 배열을 적용시켜 계산한다. 주의사항 1. 구현 문제는 조건을 주의해야한다. 조건을 미리 종이나 메모장에 적어논 다음 코딩하는 것이 실수를 줄이는 방법같다. 2. 4방향..

YOLO - Colab 이용해서 Custom 학습하기 (2)

YOLO를 훈련시키려면 필요한 3가지 데이터가 있다. 1. data 2. cfg 3. weight 1. data 만들기 data는 이런 형식을 가진다. classes는 훈련하려는 객체 개수 train은 훈련에 사용되는 이미지의 경로 valid는 평가에 사용되는 이미지의 경로 names는 객체의 이름 backup은 훈련된 weight를 저장하는 경로이다. 좀더 자세히 살펴보자면 data의 하위폴더에 txt와 names 파일이 존재한다. 이 파일들의 형식은 다음과 같다. 여기서 주의할 사항은 폴더경로를 잘 설정해줘야한다. train.txt에서 경로/번호/음식사진.jpg 로 설정되있다. 즉 번호에 names의 index와 같은 음식 사진이 들어가야한다. 위를 예로 들자면 names의 첫번째 index가 밥 -..

YOLO - Colab 이용해서 Custom 학습하기 (1)

자율 프로젝트에서는 YOLO를 Colab 환경에서 사용하기로 했다. Colab 환경에서의 장점은 성능 좋은 GPU를 무료로 사용 가능한 점과 환경 구축이 간편한 점이다. 단점은 학습 데이터를 구글 드라이브에 넣어야하는데 용량이 부족하고 동기화 반응이 느리다. 또한 무료로 12시간만 사용 가능하기 때문에 오랜시간 학습이 필요한 모델을 훈련하는데 제약이 있다. 그러나 몇일 걸리는 환경을 단 몇 시간만에 구축할 수 있다는 점은 매우 큰 메리트인 것 같다. Colab에 Darknet 설치 1. 구글 드라이브 접근 from google.colab import drive drive.mount('/content/gdrive') 2. cudnn 설치 GPU에 맞는 cudnn을 설치해야한다. 2020-10..

YOLO - Windows에서 Ubuntu 앱 이용해서 구현하기

심화 프로젝트를 진행하며 YOLO를 사용하는데 Window 환경에서 사용하려니 문제가 많다. 다양한 방법을 진행했지만 가장 간단하고 오류 없는 방법은 Microsoft store 에서 Ubuntu를 다운받는 것 같다. Ubuntu 다운 PowerShell 관리자 실행 후 아래 명령어 입력 Enable-windowsOptionalFeature -Online -FetureName Microsoft-Wondows-Subsystem-Linux Microsoft store 에서 Ubuntu 다운로드 참고로 Ubuntu 경로는 아래와 같다. C:\Users\window 사용자이름\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\L..

SWEA- 보호필름 (JAVA)

문제 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V1SYKAaUDFAWu SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제설명 다양한 푸는 방법이 존재한다. 조합을 이용하여 풀면 쉽게 풀 수 있다. 알고리즘 1. DFS를 이용하는데 종료조건은 투약횟수보다 cnt가 커지거나 세로길이를 넘어갈 때 이다. 2. 조건을 만족하면 최솟값을 구하고 return 한다. 3. 투여했을 때 안했을 때를 나눠서 조합으로 탐색한다. 구현 static int D; //두께 static int W; //가로크기 static in..

백준 - 소문난 칠공주(JAVA)

문제 : https://www.acmicpc.net/problem/1941 1941번: 소문난 칠공주 총 25명의 여학생들로 이루어진 여학생반은 5*5의 정사각형 격자 형태로 자리가 배치되었고, 얼마 지나지 않아 이다솜과 임도연이라는 두 학생이 두각을 나타내며 다른 학생들을 휘어잡기 시작�� www.acmicpc.net 문제설명 문제를 처음 보면 단순한 DFS/BFS 문제로 느껴진다. 그러나 단순 탐색으로 찾는다면 많은 반례들이 있다. 예를 들어 십자가 모양으로 있는 TK를 통과하진 못한다. 사실 5x5 배열에 제한시간이 2초라는 것은 단순 탐색으로는 풀 수 없다는 걸 뜻한다. 그러므로 5x5 = 25개의 학생중에 7명을 뽑는다고 생각해야한다. 알고리즘 1. 25명의 학생중 7명을 뽑는다. 2. 뽑은 학..

백준 - 줄세우기 (JAVA)

문제 : https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 첫째 줄에 N(1≤N≤32,000), M(1≤M≤100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의미이�� www.acmicpc.net 문제설명 단순해 보이지만 생각하기 어려운 문제이다. 대부분 위상정렬을 이용해 해결한다. 알고리즘 1. 시작 정점과 도착정점을 이어주고, 다른 정점으로부터 도착되는 개수를 count배열에 할당한다. 2. count가 0인 정점부터 queue에 집어넣는다. 2. BFS를 실행하며 count가 0이 되는 정점을 출력한다. 주의사항 1. BFS 실행전에 cou..

728x90