분류 전체보기 228

[Programmers] 67259. 경주로 건설 (java)

해당 문제는 bfs와 dp를 함께 사용하여 해결할 수 있습니다. 일반적인 bfs문제와 크게 다르지 않지만, 2차원 배열만으로 문제를 해결할 경우 코너에 대한 예외 경우가 너무 많아져 문제를 해결하기 어렵습니다. 따라서 height * width * 4 (4는 방향의 수) 크기의 배열을 만들어 방향 별로 가장 비용이 덜 드는 경우를 저장해주면 됩니다. 어떤 지점으로 이동하고자 할 때에 해당 지점의 해당 방향으로 이미 지나간 경로가 있는지를 확인하고, 이미 지나간 경로가 있다면, 해당 경로보다 비용이 적을 경우 큐에 추가해주는 형식으로 해결해 나가시면 됩니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31..

프로그래머스 2021.09.10

[Programmers] 60057. 문자열 압축 (java)

해당 문제는 2중 for문을 이용해 해결할 수 있습니다. 우선 문자열 s의 길이가 1이거나 2이면, 어떤 방법을 사용하더라도 문자열의 길이를 압축할 수 없기 때문에 그냥 문자열의 길이를 그대로 리턴해줍니다. 그 외의 경우에 대해 두 개의 반복문을 이용해 문제를 해결합니다. 외부 반복문: 압축을 진행할 단위 수를 조절해줍니다. 처음에는 1글자로 시작해서 문자열 s의 길이까지 확인해 줍니다. 내부 반복문: 문자열 내부에서 특정 문자열이 압축이 가능한 지를 확인합니다. 문자열에서 substring 함수는 문자열을 잘라주는 역할을 합니다. 즉 문자열 s에 대해 s.substring(0,3)과 같이 사용하면 index 0부터 2까지의 문자열을 잘라서 저장해줍니다. 예를 들면, String s = "hello"; ..

프로그래머스 2021.09.10

[Programmers] 12973. 짝지어 제거하기 (java)

해당 문제는 스택을 이용하면 쉽게 해결할 수 있습니다. 입력으로부터 받은 s로부터 앞에서부터 한 글자씩 확인하며, 다음의 단계를 수행합니다. 1. 스택이 비어있다면, 해당 글자를 스택에 push한다. 2. 스택 최상단의 글자와 해당 글자가 같다면 스택을 pop 해준다. 3. 스택 최상단의 글자와 해당 글자가 다르다면, 스택에 push한다. 전체 문자열 s에 대해 위의 단계를 수행했다면, 정답을 도출해 낼 수 있게 됩니다. 만일 스택이 비어있다면, 모든 문자열이 제거된 것이므로 1을 리턴합니다. 반면, 스택에 하나의 글자라도 차있다면, 모든 문자열을 제거하지 못했으므로 0을 리턴합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2..

프로그래머스 2021.09.10

[Computer Vision] HRNet에 대해 알아보자

Human Pose Estimation에 대한 프로젝트를 진행하려다보니 자연스럽게 HRNet이라는 CNN 아키텍처를 사용하게 되었습니다. 물론 코드야 그냥 깃에서 가져와서 돌리면 되는거지만, 어떤 구조인지는 한 번 알아보고 싶어 조금이나마 공부를 해보게 되었습니다. 컴퓨터 비전의 CNN 아키텍처들은 AlexNET으로부터 시작해 GoogLeNET, VGG NET, ResNET, DenseNET 등을 거치면서 발전해왔습니다. 그리고 이들을 잇는 모델로 2019년 HRNet이 등장했습니다. 대부분의 CNN 아키텍처들의 경우 High Resolution에서 Low Resolution으로 점점 해상도를 줄여나가는 방식이라면, HRNet은 High Resolution을 유지한 채로 병렬적으로 Low Resoluti..

[Selenium] 인스타그램 해쉬태그 크롤링 (2) - 크롤링 및 시각화

인스타그램 자동 로그인까지는 이전 게시물을 참조하시면 됩니다. https://jooona.tistory.com/146 [Selenium] 인스타그램 해쉬태그 크롤링 (1) - 인스타그램 로그인 오늘은 Selenium을 이용한 인스타그램 해쉬태그 크롤링을 실행해보도록 하겠습니다. 이번 글에서는 인스타그램 자동 로그인을 하는 방법에 대해서 우선 알아보겠습니다. 1 2 3 from selenium import web jooona.tistory.com 이제 검색할 키워드를 설정해야겠죠? 1 2 _keyword = 'chelsea' # 검색할 키워드 driver.get('https://www.instagram.com/explore/tags/' + _keyword + '/') cs 이 코드를 실행하면 자신이 원하는..

[Selenium] 인스타그램 해쉬태그 크롤링 (1) - 인스타그램 자동 로그인

오늘은 Selenium을 이용한 인스타그램 해쉬태그 크롤링을 실행해보도록 하겠습니다. 이번 글에서는 인스타그램 자동 로그인을 하는 방법에 대해서 우선 알아보겠습니다. 1 2 3 from selenium import webdriver import time import pandas as pd cs 우선 import 할 거 import 해주고, 1 2 driver = webdriver.Chrome("C:/chromedriver.exe") driver.get("https://www.instagram.com/accounts/login/" ) cs Chrome Driver를 연결해줍니다. Chrome Driver는 아래의 링크에서 다운받을 수 있고, 자신이 다운받은 경로로 따옴표 안을 고쳐줍니다. https://c..

[Pytorch] 분류기 뉴럴 네트워크 개발 일기 (2) - 모델 성능 향상

지난 번 초기 모델들에서 외투를 상의와 제대로 구별 못하는 문제점이 나타났다. 이번 글에서는 이 문제점을 고치는 과정을 작성해보려고 한다. 1. 데이터 불균형 문제 개선을 위한 데이터 증폭 첫번째로 시도해 본 방법은 데이터 불균형 문제 개선. 훈련 집합에 외투의 데이터가 4984개, 상의의 데이터가 20218개로 크게 차이가 난다는 점을 개선하고자 한 것이다. 가장 먼저 해 본 것은 훈련 집합의 모든 외투 사진에 대해 3개의 변형 이미지를 생성해 본 것. 이 방법을 통해 외투 사진을 19936개로 늘려서 상의의 데이터와 비슷한 수준으로 증폭시켰다. 결과는? 위의 사진은 VGG 11의 결과를 나타낸 것이다. 외투에 대해서는 정확도가 높아졌지만, 상의에 대한 정확도가 떨어지며, 전체적인 정확도는 유사하게 유..

[Pytorch] 분류기 뉴럴 네트워크 개발 일기 (1) - 모델 생성

1. 환경 세팅 어떤 프로젝트든 환경 세팅에 가장 많은 시간이 들어가는 것 같다. 이번에도 GPU 호환 문제, Nvidia Driver 연결 오류, CUDA 버전 문제 등 각종 오류들을 이겨내고 겨우겨우 환경 세팅에 성공했다. 2. 데이터 구성 필자가 수행할 프로젝트는 모자, 외투, 상의, 하의, 신발 등 총 5개 클래스의 이미지를 분류하는 분류기를 만드는 것이다. 데이터 구성은 다음과 같다. 여기서 캐치할 수 있는 부분은 첫째, 상의의 데이터가 다른 모든 데이터의 합 보다 많다는 점. 둘째, 신발과 특히 모자에 대한 데이터가 부족하다는 점. 그리고 데이터를 실제로 열어보면 외투와 상의의 모양이 비슷해 과연 잘 구분을 해 낼 수 있을지에 대한 의문도 존재했다. 3. 데이터 전처리 데이터를 살펴보면 모든 ..

[Pytorch] Ubuntu 20.04에 Jupyter Notebook 설치 및 서버 컴퓨터에 원격 실행

이 글은 이미 Nvidia Driver, Cuda, Anaconda, Pytorch가 설치되어 있다는 가정 하에 진행됩니다. 혹시 아직 설치 안 하신 분이 계신다면 아래의 링크를 참고하시면 됩니다. https://jooona.tistory.com/140 [Pytorch] Ubuntu 20.04에서 환경 세팅 Ubuntu 20.04에서 GPU 모드로 Pytorch를 이용하기 위해 Nvidia driver와 Cuda, Pytorch 등 필요한 프로그램들을 설치하는 방법을 알아보겠습니다. - Nvidia Driver 설치 sudo lspci -v | less sudo ubuntu-dri.. jooona.tistory.com 우선 가상환경을 활성화 한 뒤에 jupyter notebook을 설치합니다. jupyt..

[NVIDIA] NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

Ubuntu에서 NVIDIA Driver를 설치하다 보면, 또는 사용하다 보면 가끔 nvidia-smi가 안 먹힐 때가 있다. NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running. 위와 같은 에러 메시지가 출력되며 드라이버가 연결되지 않았다고 한다. 필자도 이 문제를 해결하는데 하루 이상 삽질을 했는데, 해결 방법을 공유하고자 한다. 1. 지웠다가 재설치 구글링을 해보면 대부분의 경우에 nvidia driver를 재설치하면 해결된다고 나와있다. 실제로도 해결되는 사람이 많은 것 같지만 필자의 컴퓨터에는 ..