1. 인벤토리의 책임 UAugmentInventoryComponent 가 들고 있던 것 보유 목록 플레이어가 가진 증강 후보 추첨 이번 라운드에 제시할 카드 뽑기 시드 생성 추첨에 쓸 난수 시드 걷어낸 함수 목록 ServerRollOffers // 후보 뽑기 GatherCandidatesByTier // 등급별 후보 수집 GetTierDraftWeight // 등급 확률 MakeDraftSeed // 시드 생성 떼어낸 계기 기획이 바뀌어 등급 추첨이 팀 단위 로 변경 같은 팀이면 같은 등급을 받고, 그 등급은 팀 점수로 정해짐 하지만 인벤토리는 플레이어 하나에 붙은 컴포넌트라 팀을 모름 여기에 더해 인벤토리가 지는 책임이 이미 너무 많았음 2. 세 층으로 분리 층 어디 무엇 상태 정책 RogueAugmentDraft 등급, 자격, 버킷, 추첨 없음 (순수 함수) 조정 UAugmentDraftManager 규칙 조립, 시드, 팀 등급, 정책 호출 라운드 상태 UAugmentInventoryComponent 보유 목록, 후보 보관, 등장 이력 플레이어 정책 층은 네임스페이스에 둔 순수 함수 // 증강 드래프트 관련 함수 namespace RogueAugmentDraft { // 이번 라운드에 한 팀이 받을 등급 FPS_API EAugmentTier ResolveTier( const FAugmentDraftRules& Rules, int32 RoundNumber, int32 Seed, ...); } 팀 점수를 누가 아는지는 정책이 신경 쓰지 않음 매니저가 점수를 계산해 인자로 넘기고, 정책은 받은 값으로 등급만 돌려줌 인벤토리에 남긴 것은 셋 SetOffers // 뽑힌 후보를 보관 FillDraftEligibility // 보유 상태를 자격 판정에 넘겨줌 MarkOffersSeen // 등장 이력 기록 전부 자기가 들고 있는 상태를 읽거나 쓰는 일 이고, 판단은 하나도 없음 3. 순수 추가 세 번, 스위치 한 번 정책 층을 한 번에 옮기지 않고, 호출자가 없는 상태로 세 번 쌓았음 커밋 추가한 것 삭제 1 ResolveTier 등급 추첨 0 2 IsCandidateEligible , GetOfferLevel 자격 판정 0 3 BuildCandidateBucket , PickOffers 버킷과 추첨 0 세 커밋 모두 AugmentDraft.h/.cpp 에만 손댔고 기존 파일은 수정하지 않음 이후 네 번째 커밋에서 한 번에 전환 인벤토리에서 추첨을 걷어내고, 매니저가 새 정책 층을 호출하도록 변경 커밋을 분할한 이유 어느 커밋에서 멈춰도 게임은 이전과 똑같이 동작함 문제가 생기면 네 번째 하나만 되돌리면 됨 리뷰할 때 앞 셋은 "새 함수가 맞게 짜였나", 넷째만 "동작이 바뀌었나" 4. 결과 정책 층을 쌓는 세 커밋은 415줄을 추가했고 삭제는 0 네 번째 전환 커밋에서만 삭제가 있음 추가 삭제 AugmentInventoryComponent 73 241 AugmentDraftManager 181 17 곁들여 정리한 것 RPC 가 아닌데 Server 접두사가 붙은 함수들을 수정 ServerRemoveAllAugments -> RemoveAllAugments ServerSetOfferSelectionEnabled -> SetOfferSelectionEnabled ServerAutoSelectOffer -> AutoSelectOffer ServerClearOffers -> ClearOffers 이름만 보고 RPC 라고 믿으면 호출 위치를 잘못 잡게 됨 어차피 인벤토리의 공개 함수를 손보는 커밋이라 같이 수정
The hotel nearest to Tribhuvan International Airport (TIA) on a map does not necessarily mean the most convenient. For an early international flight, a short and reliable airport transfer can be invaluable. The airport pick-up and 24-hour reception are more important if you arrive late. If you're staying in Kathmandu for a longer period, however, traveling out of town each day to and from the airport might result in more time spent on the road to reach your destination. When considering hotels close to Tribhuvan International Airport, the following question is not just “which hotel is closest?” The better question is: Which hotel suits your flight, length of stay, and travel plans? Begin With Actual Travel Time Distance is useful, but it does not tell the whole story. Current hotel listings include properties less than 1 km from TIA. MakeMyTrip, for instance, is now showing Apex Business Hotel 610 metres away from the airport and Meridian Suite Hotel 830 metres away from the airport. Tripadvisor also has a Meridian Suite roughly 0.5 miles away from TIA. That proximity can be helpful when you are leaving early, returning late, or you only have one night in Kathmandu. But if you are staying for several days, consider the rest of your itinerary. A hotel that saves a few minutes on the airport journey may take considerably longer to reach Thamel, Boudha, Patan or other parts of Kathmandu. Match the Hotel to Your Flight Your hotel booking should be determined by your flight schedule. Early morning departure: Check out the airport location, punctual service, early breakfast and night-time reception. Late arrival: Confirm late arrival airport pickup and late arrival check-in. One-night transit: Ensure easy access to and from the airport, room to store luggage, and convenient check-in/out. Extended stay in Kathmandu: Consider dining, sleep comfort, business facilities and sightseeing access. See if there is an airport shuttle provided or not. The availability of an airport transfer service is sometimes stated on properties, but the charges may vary, as may the hours of operation and booking procedures. What Should You Compare Besides Distance? When comparing hotels near Kathmandu airport, examine the information that may impact the functionality of your trip: Airport pickup and drop-off Transfer cost and availability Actual travel time to TIA 24-hour reception Early breakfast or room service. Wi-Fi reliability Hot water and climate control Luggage storage On-site dining Parking, if required Cancellation conditions Taxes and additional charges Noise is another factor to consider. Airports and main roads can cause traffic, or aircraft noise, so it may help to look at recent hotel reviews to see if there are any common complaints regarding sleep disturbances and room insulation. Airport Hotel or Full Service Hotel? There are two different needs hiding behind the search for an airport hotel in Kathmandu. If your priority is simply getting to TIA quickly, an airport-area property can make sense. Current listings show numerous options within walking or short-driving distance of the terminal. But some travelers want their hotel to do more than provide a convenient bed before a flight. The Soaltee Kathmandu Autograph Collection is an example of this second category. Its Tahachal location is about 9 km from TIA, so it is not the natural choice for someone whose only requirement is being immediately beside the terminal. Its airport arrangement works differently: guests can arrange hotel pickup or drop-off in advance, with the private transfer handled separately from the room booking. The hotel's current airport guide notes that transfer pricing should be confirmed when arranging the service. The reason to consider a property like this is therefore not its airport distance. It is the combination of accommodation and on-site facilities: 285 rooms and suites, five dining destinations, landscaped grounds, a pool, fitness facilities, and substantial meeting and event space. For a traveler spending several nights in Kathmandu, traveling for business or with family, those facilities may be more relevant than being within walking distance of the terminal. For a traveler catching a flight at dawn, an airport-area hotel may still be the more practical choice. That is the important trade-off: Closest airport hotels: prioritize minimum transfer time. Nearby city properties: balance airport access with regular hotel facilities. Full-service properties: trade airport proximity for more services and facilities on-site. Compare the Total Cost The lowest room rate is not necessarily the lowest overall cost. When comparing Kathmandu airport accommodation, consider the room price, taxes, breakfast, airport transfer, transport to other parts of the city and any services you are likely to use. For a one-night stopover, paying more for airport convenience may be worthwhile. For a longer stay, a cheaper room may become less attractive if you repeatedly pay for transport around Kathmandu. Always check whether breakfast, transfers, and other advertised benefits are included or charged separately. Read reviews For Practical problems While hotel ratings are a good indicator, recent reviews can help you determine if the hotel is right for your visit. Search for recurring comments about airport transfers, noise, cleanliness, Wi-Fi, hot water, breakfast, room comfort, and staff response. Consider also volume of reviews. If you have hundreds of recent reviews, you have a larger sample of guests' experiences than if you have just a handful. A Checklist for Airport-Hotel Trips Before booking, ask: How far is the hotel from TIA? How long will the transfer take? Is pickup or drop-off available at my flight time? Is it free or paid? Can I check in late? Do you have an early breakfast? Are there luggage storage facilities? What will the complete stay cost? First and foremost, consider the rest of your Kathmandu itinerary: Does the hotel still make sense? Closest does not necessarily equal right. While airport proximity is important for a short transit, comfort, facilities, transport and access to Kathmandu can be as important for several nights. FAQs What is the best hotel to stay near Tribhuvan International Airport for early flights? Choose a hotel that offers a quick and dependable airport shuttle, a 24-hour front desk, early breakfast (or room service), and an obvious pick-up or drop-off point. Is it better to stay near TIA or in central Kathmandu? This depends on your trip itinerary. TIA is convenient for early morning and late evening flights, and short stops, and central areas are good for sightseeing, shopping and overnight stays. Do hotels near Kathmandu airport provide airport pickup and drop-off? Airport transfers are available in some hotels but are not always available and may have different hours and prices. Check if it is a free or paid service, and if it needs to be booked in advance. Should I stay near Kathmandu airport for two nights? Not necessarily. If you're staying longer, look for transportation to and from the airport, business districts, restaurants, hotel amenities, and expenses.
Quando a nostalgia encontra a informação organizada Existe um momento mágico na jornada de todo treinador: aquele instante em que a memória afetiva dos jogos antigos se cruza com a vontade de redescobrir cada criatura com olhos mais atentos. A Pokédex BR nasceu exatamente nesse ponto de encontro, oferecendo uma enciclopédia completa em português que transforma saudade em conhecimento aprofundado sobre o universo Pokémon. O desafio de quem busca dados confiáveis em português Qualquer pessoa que já tentou pesquisar sobre tipos, evoluções ou estatísticas de base sabe como é frustrante encontrar apenas conteúdo fragmentado ou em idiomas estrangeiros. Páginas desatualizadas, traduções automáticas confusas e informações contraditórias criam uma barreira enorme para quem deseja aprender de verdade. Essa dificuldade afasta especialmente os jogadores mais novos, que ainda estão construindo seu repertório sobre o universo dessas criaturas. Como a enciclopédia resolve esse problema A plataforma reúne dados detalhados sobre cada Pokémon, desde a primeira até a mais recente geração, tudo redigido de forma nativa em português. Cada verbete apresenta informações sobre tipagem, habilidades, movimentos aprendidos por nível e compatibilidade evolutiva. Não se trata de uma simples tradução mecânica, mas de um conteúdo elaborado com cuidado editorial, pensado para o público brasileiro. Redescoberta através de um olhar enciclopédico Muitos treinadores veteranos acreditam conhecer tudo, mas ao navegar pelas fichas detalhadas, percebem nuances que passaram despercebidas durante anos de jogo. Curiosidades sobre a inspiração biológica de cada criatura, relações entre linhagens evolutivas e dados comparativos entre gerações tornam a experiência de consulta genuinamente enriquecedora. Para quem deseja explorar esse acervo completo, basta acessar https://pokedexbr.com/ e iniciar a navegação por qualquer geração ou tipo de interesse. A interface foi pensada para facilitar buscas rápidas sem sacrificar a profundidade do conteúdo disponível. Um convite permanente à curiosidade A verdadeira riqueza de uma enciclopédia não está apenas nos dados que ela guarda, mas na capacidade de despertar perguntas que o leitor ainda nem sabia que tinha. Cada ficha consultada abre caminho para outra descoberta, criando um ciclo virtuoso de aprendizado que honra tanto a memória afetiva quanto a busca por conhecimento genuíno.
오늘은 이미지 세그멘테이션 첫 수업일이었다. 전반적으로는 그렇게 어렵지는 않은 내용이었으나 긴 수업 끝에 집중력이 흐려져 후반 부분은 추가 공부가 필요한 상황이다. 전반부는 수업중 잠깜의 복습시간이 있어 자습시간을 활용해 복습해 보았다. 챗gpt에게 강의자료와 함께 학습 목표, 분량, 소요시간 등을 적고 그에 따라 중요 부분들을 학습했다. 관련된 질문과 답변을 아래에 남겨 본다. Q1. 왜 세그멘테이션에서는 사진처럼 마스크를 그냥 bilinear 방식으로 resize하면 안 될까요? A1. 배경은 0 동물은 1로 답을 정해놓았는데 bilinear 방식으로 resize하게 되면 값이 필요한 부분을 주변 값들로 섞어서 채우기 때문에 정답에 없는 번호가 나와 안되는 것이다. Q2. 원본 이미지가 7×7인데 이것을 4×4로 줄인다고 할 때, 왜 “그냥 픽셀 몇 개를 골라서 남기면 된다”가 아니라 보간을 사용하는 게 더 나을까요? A2. 이미지 크기를 줄일 때 원본 픽셀 일부만 선택하면 그 사이에 있는 특징이나 색 정보가 사라질 수 있다. 따라서 주변 픽셀 값을 참고해 새로운 출력 격자의 값을 추정함으로써 원본 정보를 조금 더 잘 반영하기 위해 보간을 사용한다. Q3. “세그멘테이션이면 그냥 각 픽셀이 동물인지 배경인지 하나씩 분류하면 되는 거 아냐?” 이 사람에게 왜 그렇게 단순하게 하면 안 되는지를 설명해보세요. A3. 세그멘테이션은 픽셀마다 답해야 하지만, 각 픽셀을 독립적으로 보면 맥락이 부족하고, 각각 주변을 따로 보면 중복 계산이 너무 많으며, 해상도를 유지한 채 넓게 보려 하면 너무 많은 층과 메모리가 필요하다. 남은 시간은 미션7을 하며 오늘 하루를 마무리 해야겠다. 내일도 화이팅!
The aviation industry offers exciting career opportunities for individuals who enjoy meeting people, travelling, and working in a professional environment. For students interested in becoming cabin crew members, the right training can help develop the knowledge, communication skills, confidence, and professional attitude required for the role. Cabin Crew Training in Mumbai provides aspiring candidates with an opportunity to prepare for the expectations of the modern aviation industry. The Skyline Aviation Club offers aviation-focused training designed to help students understand the professional requirements of cabin crew careers. With structured learning and practical career guidance, candidates can work toward developing skills that are valuable for airline and aviation-related opportunities. Why Is Cabin Crew Training Important? Cabin crew professionals have responsibilities that go beyond passenger service. They contribute to passenger safety, provide assistance during flights, handle customer requirements, and maintain professional standards throughout the journey. Proper training helps aspiring candidates understand these responsibilities before entering the aviation industry. It can also help students improve communication, grooming, teamwork, confidence, and customer-handling skills. Learn Essential Aviation Skills A good cabin crew training program introduces students to various aspects of aviation and passenger service. Depending on the course structure, students can learn about airline operations, passenger handling, aviation safety, emergency procedures, professional communication, and service standards. These areas help candidates understand how cabin crew members work as part of an airline team and respond professionally to different situations. Develop Strong Communication Skills Communication is an important quality for cabin crew professionals. They regularly interact with passengers from different backgrounds and need to communicate information clearly and politely. Cabin Crew Training in Mumbai can help students develop verbal communication, listening, interpersonal, and customer-service skills. Building confidence in communication can be particularly useful during interviews and future airline responsibilities. Grooming and Professional Personality Airlines generally expect cabin crew members to maintain a professional appearance and demonstrate positive body language. Training can help candidates understand professional grooming, etiquette, posture, presentation, and workplace behavior. The Skyline Aviation Club encourages aspiring aviation professionals to focus on developing a confident and professional personality alongside their technical and theoretical knowledge. Prepare for Airline Opportunities Entering the aviation industry requires more than completing a course. Candidates need to understand interview expectations and develop the confidence to present their skills effectively. Career-focused training can help students prepare for different stages of the recruitment process. Mock interview practice, communication development, professional presentation, and general aviation awareness can support candidates as they prepare to pursue airline opportunities. Why Choose The Skyline Aviation Club? The Skyline Aviation Club provides aviation-oriented education for students interested in different career paths. Along with cabin crew training, the club offers programs and learning opportunities related to CPL, DGCA Ground Classes, Air Hostess, Flight Attendant, and Airport Management. The focus is on helping aspiring aviation professionals build a strong foundation and understand the expectations of their chosen career. Start Your Cabin Crew Journey in Mumbai Mumbai is an important aviation and commercial hub, making it a popular location for students interested in aviation careers. Choosing a suitable training institute can help candidates begin their journey with better preparation and professional guidance. If you are searching for Cabin Crew Training in Mumbai, The Skyline Aviation Club can help you explore aviation-focused training and develop the skills needed to pursue a career in the cabin crew profession. Visit : https://share.google/Pxh0riFawz1JkWiLP Contact : 9820891262
Discover 12 smart space-saving ideas to make a small UK bedroom feel bigger, from fitted storage to clever layouts and light-enhancing tips. Read More :- [ https://blogz.life/blog/how-to-make-a-small-uk-bedroom-feel-bigger-12-space-saving-ideas-7bd49c42] (Discover 12 smart space-saving ideas to make a small UK bedroom feel bigger, from fitted storage to clever layouts and light-enhancing tips. Read More :- https://blogz.life/blog/how-to-make-a-small-uk-bedroom-feel-bigger-12-space-saving-ideas-7bd49c42 )
Como a enciclopédia Pokémon em português desfaz mitos comuns entre treinadores Muitos treinadores brasileiros cresceram cercados por informações incorretas sobre o universo Pokémon, transmitidas de jogador para jogador sem qualquer verificação. A Pokédex BR surge como uma ferramenta essencial para separar fatos de ficções, oferecendo dados precisos e completamente traduzidos para o nosso idioma. Equívocos que persistem na comunidade Quem nunca ouviu que determinado Pokémon só evolui em horário específico do dia sem que isso fosse verdade? Ou que certos golpes funcionam de maneira diferente do que realmente acontece nas mecânicas do jogo? Essas crenças se espalham rapidamente em fóruns e conversas informais, gerando frustração quando os resultados esperados não aparecem durante as batalhas. O problema se agrava quando o treinador não domina outro idioma e depende exclusivamente de fontes estrangeiras mal interpretadas. Traduções automáticas distorcem nomes de habilidades, tipos e características, criando uma camada extra de confusão que prejudica tanto iniciantes quanto veteranos. Informação confiável como base para decisões estratégicas Ter acesso a uma enciclopédia completa em português transforma a experiência de qualquer treinador. Cada ficha de criatura apresenta estatísticas verificadas, descrições fiéis e detalhes sobre evoluções, movimentos e fraquezas. Isso elimina a necessidade de adivinhar ou confiar em boatos repetidos sem fundamento. Quando um treinador consulta dados corretos antes de montar seu time, ele ganha confiança para enfrentar desafios competitivos e aproveitar melhor cada aspecto dos jogos. A diferença entre vencer e perder uma batalha muitas vezes está em um detalhe que só uma fonte organizada e atualizada consegue revelar. Um acervo construído para a comunidade brasileira A plataforma disponível em https://pokedexbr.com/ foi pensada especificamente para atender quem busca conteúdo nativo em português, sem depender de traduções aproximadas. Cada entrada é elaborada com cuidado editorial, garantindo clareza e precisão que respeitam o conhecimento acumulado pela comunidade ao longo de décadas. Desmentir equívocos não é apenas uma questão de orgulho para treinadores experientes. É uma forma de acolher novos jogadores, oferecendo a eles uma base sólida desde o primeiro passo na jornada Pokémon, fortalecendo toda a comunidade lusófona que compartilha essa paixão.
Buying a plot is a big decision. Unlike an apartment, a plot is a piece of land that you will own for decades, so the paperwork, the approvals and the developer's track record matter a lot. This guide covers Sobha Boulevard in detail, with a special focus on its RERA registration and current project status. If you have been searching for Sobha Boulevard Mysore , you will find everything here in plain words: the location, plot sizes, amenities, price details, connectivity and the legal side. Sobha Boulevard at a Glance Here is a quick snapshot before we go deeper. Detail Information Project Name Sobha Boulevard Developer SOBHA Limited Project Type Premium Plotted Development Configuration Residential Plots Total Area 9 Acres 31.5 Guntas Total Units 126 Residential Plots Plot Types 30'×40', 30'×50', 40'×60' and odd-sized plots Starting Price Available on request* RERA Number PRM/KA/RERA/1267/374/PR/100626/008716 Project Status New Launch This table is a handy reference. Now let us look at each point in more detail. About Sobha Boulevard Let us start with the basics. Sobha Boulevard is a premium plotted development by SOBHA Limited, one of the most recognised real estate brands in India. It is located in the Mysuru-Mandya belt, close to Shrirangapattna, and it is planned as a gated community. The project covers 9 acres and 31.5 guntas of land. Within this land, there are 126 residential plots. That is a fairly modest number, which usually means less crowding, more open space and a calmer living environment. Large townships can feel busy, but a compact layout like this tends to feel more private. The plots come in popular sizes, which makes the project useful for different types of buyers. A family planning a spacious independent house can pick a larger plot. A buyer who wants a smaller, easier-to-manage home can choose a compact one. Odd-sized plots are also available, which suits people who want something a little different. Another reason people look at this project is the developer. SOBHA has built a reputation for quality and for finishing what it starts. For plot buyers, that reputation counts for a lot, because the developer's work on roads, drainage and utilities decides how comfortable daily life will be. Why Mysuru Is Attracting Plot Buyers Mysuru has always been a city people love. It is calm, clean and rich in culture. Over the last few years, however, the city has also become a serious option for people who want to settle down outside Bengaluru. Several things are driving this interest. First, better road connectivity has reduced travel time between Bengaluru and Mysuru. Second, more people now work from home or follow hybrid schedules, so living far from the main office is no longer a problem. Third, many buyers simply want more space, more greenery and a slower pace of life. As a result, plotted developments around Mysuru are getting more attention. People want land they can design on their own terms. They also see land as a safer long-term asset than many other options. This is the background in which Sobha Boulevard was launched. It offers the comfort of a planned layout in a region that is growing steadily. Moreover, the area around Shrirangapattna adds historical and scenic value, which many buyers enjoy. Sobha Boulevard RERA Details Now to the main topic of this article. RERA stands for the Real Estate (Regulation and Development) Act, 2016. The law was introduced to bring transparency to the property market and to protect buyers from delays, false promises and unclear paperwork. Under this law, a developer has to register a project with the state regulator before advertising or selling units. In Karnataka, this is handled by the Karnataka Real Estate Regulatory Authority. Sobha Boulevard is registered under the following number: PRM/KA/RERA/1267/374/PR/100626/008716 Here is what this registration means for you as a buyer. 1. Project details are on public record. The developer has to submit details such as the land area, number of plots, layout, timeline and approvals. Anyone can view these on the official portal. 2. The developer has a defined completion timeline. The registration carries a committed date, so the developer cannot keep extending the timeline without answering for it. 3. Funds are handled with discipline. RERA requires a large share of the money collected from buyers to be kept in a separate account and used for that project only. 4. Buyers have a way to complain. If something goes wrong, you can approach the authority instead of depending only on civil courts. 5. Marketing has to be honest. Brochures and advertisements should match the registered details. How to Verify the RERA Number Yourself You should never rely only on what is written in a brochure or an advertisement. Checking the number takes only a few minutes. Open the official Karnataka RERA website. Look for the section on registered projects. Enter the project name or the RERA number. Check the developer name, project address, number of plots and completion date. Compare these with what the sales team has told you. If everything matches, you can move ahead with more confidence. If something does not match, ask questions before paying any booking amount. Registered Address The registered location of the project is Sy. No. 1174 of Belagola Village and Sy. No. 5/2 of Pura Village, Belagola Hobli, Shrirangapattna, Mandya, Karnataka - 571606. Survey numbers matter because they identify the exact land parcel. When you do your own legal checks, keep these numbers handy, as your lawyer will need them to verify the title and other records. Sobha Boulevard Project Status The current status of the project is New Launch . This is an important point, so let us understand what it means in practice. A new launch means the project has recently been introduced to the market. Sales have started, and buyers get the first choice of plots. On the other hand, large-scale development work is usually still in its early phase, and the final handover will happen later. As per the developer's own information, the project is expected to be completed by December 2028. Since this is a plotted development, completion mainly covers the layout work: roads, drainage, utility lines, landscaping and common areas. Pros of Buying in a New Launch You get a wider choice of plots, including better corner plots or preferred orientations. Initial pricing is often lower than what it becomes closer to completion. Payment plans may be more flexible at the early stage. There is time to plan your finances and house design. Things to Keep in Mind Development takes time, so you cannot move in right away. You should track progress through site visits and RERA updates. Promised features should be confirmed in writing in the agreement. In short, a new launch suits buyers who are patient and planning for the medium term. If you want to build a house immediately, you should check the registration and handover timeline carefully before booking. Sobha Boulevard Location Location is the heart of any property decision, and this one has some clear strengths. Sobha Boulevard Location is near Shrirangapattna, in the Belagola area of the Mysuru-Mandya corridor. The project is also described as being close to the Infosys campus area and the Hebbal industrial belt of Mysuru. What Makes This Location Useful Closeness to Mysuru city. Mysuru offers schools, colleges, hospitals, markets and entertainment. Since the project is on the Mysuru side of the Mandya belt, daily needs are within reach. Access to the Bengaluru-Mysuru corridor. The expressway has changed the way people travel between the two cities. A well-connected plot near this corridor has the advantage of better long-term demand. Growing employment zone. The Hebbal industrial area and nearby campuses create regular job opportunities. Where jobs grow, housing demand usually follows. Heritage and nature around. Shrirangapattna is known for its temples, the Kaveri river and its historical sites. For people who like a peaceful setting, this adds charm that a busy city area cannot offer. A Practical Tip Distances and travel times can change depending on traffic and road work. Therefore, visit the site yourself, drive from your workplace or from the places you visit often, and note the actual time it takes. This simple test tells you more than any map. Plot Sizes and Configuration The project offers 126 residential plots . The main sizes are: 30' × 40' , which is 1,200 sq. ft. 30' × 50' , which is 1,500 sq. ft. 40' × 60' , which is 2,400 sq. ft. Odd-sized plots , with varying dimensions The developer's published information also mentions a larger range, with some plots going beyond 3,000 sq. ft. Since odd-sized plots differ in shape and area, always ask for the exact measurement of the plot you like. Choosing the Right Size For a compact family home: A 30' × 40' plot is a common choice. It gives enough room for a comfortable house with a small garden or parking area. For a bigger home with open space: A 30' × 50' plot allows a larger layout, more bedrooms and some outdoor space. For a villa-style home: A 40' × 60' plot gives room for a spacious villa, a lawn and even a small seating area. For something unique: Odd-sized plots are good for buyers who want a unique layout, and they sometimes come with interesting shapes or corner positions. Before you decide, think about your family size, your budget, your future needs and the building rules that apply to the layout. A bigger plot costs more, but it also offers more freedom. Sobha Boulevard Amenities The amenities in a plotted development are different from those in an apartment complex. There are no lifts or lobbies. Instead, the focus is on infrastructure and open space. According to the developer, Sobha Boulevard Amenities are planned around a clean civic framework. Key Infrastructure Features Wide central boulevard. The project has a 12-metre-wide central boulevard. This gives
크기별 전용 영역 테스트 케이스 7, 8번은 아래 이미지와 같다. 작은 크기(64)와 큰 크기(448)을 반복적으로 할당한 뒤, 큰 크기를 모두 free한다. 그리고 큰 크기(448)에 할당되지 않는 조금 더 큰 크기(512)를 요청한다. 이렇게 하면 작은 크기(64)때문에 모든 큰 크기(448)을 사용할 수가 없게 되어 단편화가 매우 심하게 일어난다. 이것을 개선하기위해 전용 영역을 구현하였다. 핵심 아이디어는 같은 크기의 작은 free블록들을 한 곳에 몰아넣는 것이다. 그리고 그 크기를 변경하지 않고 오직 그 크기만을 위한 블록으로 사용한다. 설계 확장 malloc 요청 크기가 1024 이하인 경우 크기(ex. 64)를 small bin에서 검색한다. 검색한 head가 null 이면 힙을 요청크기 * n개만큼 확장해서 첫 번째 블록을 할당한다. 전용영역은 헤더와 푸터를 가지고 있다. 전용블록인지 아닌지를 저장한다. 하위 2번째 비트로 판단한다. 사용하고 남는 n - 1개는 classify 로 분류한다. static void *extend_heap(size_t words) { char *block_pointer; // 새 free 블록의 첫 주소를 가리키는 포인터 size_t size; // 블록의 사이즈 size = (words % 2) ? (words + 1) * WSIZE : words * WSIZE; // size를 짝수로 → 8바이트 정렬 size_t small_size = size; // small 전용 영역 만들기 if (size <= MAX_SMALL_BIN) { size = size * EXCLUSIVE; } // mem_sbrk는 확장하기 전 힙의 끝 주소를 반환한다. if ((long)(block_pointer = mem_sbrk(size)) == -1) return NULL; // 힙 확장 실패시 NULL write_end_of_heap_block(block_pointer, size); // 포인터 초기화 PUT_PTR(PREV_FREE_PTR(block_pointer), NULL); PUT_PTR(NEXT_FREE_PTR(block_pointer), NULL); if (small_size <= MAX_SMALL_BIN) { PUT(HDRP(block_pointer), EX_PACK(small_size, 1, 1)); // 전용 블록의 헤더 작성 PUT(FTRP(block_pointer), EX_PACK(small_size, 1, 1)); // 전용 블록의 푸터 작성 char *cur = block_pointer + small_size; for (int i = 2; i <= EXCLUSIVE; i++) { PUT(HDRP(cur), EX_PACK(small_size, 1, 0)); // 전용 블록의 헤더 작성 PUT(FTRP(cur), EX_PACK(small_size, 1, 0)); // 전용 블록의 푸터 작성 classify_block(cur, small_size); cur += small_size; } return block_pointer; // small 전용 } return coalesce(block_pointer); } 분할 하지 않는다. 병합 하지 않는다. free 일단 small bin에 넣어둔다. void mm_free(void *bp) { size_t size = GET_SIZE(HDRP(bp)); size_t is_exclusive = IS_EX(HDRP(bp)); if(is_exclusive) is_exclusive = 1; else is_exclusive = 0; PUT(HDRP(bp), EX_PACK(size, is_exclusive, 0)); PUT(FTRP(bp), EX_PACK(size, is_exclusive, 0)); // unsoretd bin에 넣기 if(!IS_EX(HDRP(bp))) { char *merged = coalesce(bp); char *unsorted_head = arena.unsorted_bin; insert_head(unsorted_head, merged); arena.unsorted_bin = merged; } else { classify_block(bp, GET_SIZE(HDRP(bp))); } } --- ### realloc 1. 전용 공간에 따라 병합 여부를 결정한다. (조건만 변경) 1. 전용 공간이면 합치지 않고 분할하지도 않는다. ```c void *mm_realloc(void *ptr, size_t size) { ... // 블록을 병합해야할 경우 size_t prev_alloc = GET_ALLOC(FTRP(PREV_BLKP(ptr))); // 이전 빈 블록 할당 플래그 size_t next_alloc = GET_ALLOC(HDRP(NEXT_BLKP(ptr))); // 다음 빈 블록 할당 플래그 size_t is_exclusive = IS_EX(HDRP(ptr)); size_t is_prev_exclusive = IS_EX(FTRP(PREV_BLKP(ptr))); size_t is_next_exclusive = IS_EX(HDRP(NEXT_BLKP(ptr))); size_t prev_block_size = GET_SIZE(HDRP(PREV_BLKP(ptr))); size_t next_block_size = GET_SIZE(HDRP(NEXT_BLKP(ptr))); if (!is_exclusive) // 현재블록이 전용블록이 아니어야함. { if (prev_alloc && next_alloc) { } else if ((prev_alloc || is_prev_exclusive) && !next_alloc && !is_next_exclusive) { // 1. 제자리, 오른쪽 블록 병합 ... } else if (!prev_alloc && !is_prev_exclusive && (next_alloc || is_next_exclusive)) { // 2. 블록을 왼쪽으로 옮겨야 할 경우 // 2 - 1. 왼쪽이 비어있는데 병합하면 공간이 충분한 경우 } } else if (!prev_alloc && !next_alloc && !is_prev_exclusive && !is_next_exclusive) { // 2 - 1 - 3. 왼쪽과 오른쪽이 비어있는데 병합하면 공간이 충분한 경우 } } } // asize 이상 크기의 free block을 찾고 할당해야하는 경우 if ((newptr = find_fit(asize)) != NULL) { // 완전히 다른곳으로 이동 // 3 - 1. 적절한 블록이 있는지 탐색후 위치 옮기기 // 3 - 2. 적절한 블록이 없으면 확장 후 할당(malloc) } // 블록을 확장해야할 경우 // 1. 왼쪽은 할당, 요청받은 블록이 힙 끝이면 그대로 확장만 if ((prev_alloc || is_prev_exclusive) && next_alloc && next_block_size == 0) { } // 2. 왼쪽 병합했는데 공간이 부족, 그런데 힙의 끝이어서 제자리 확장이 가능한 경우 if (!prev_alloc && !is_prev_exclusive && (old_size + prev_block_size < asize) && next_alloc && next_block_size == 0) { // mem_sbrk는 확장하기 전 힙의 끝 주소를 반환한다. // 필요한 payload만큼 요청 } // 3. 제자리, 오른쪽 블록 병합 해도 부족한데, 힙 끝인 경우 확장 if ((prev_alloc || is_prev_exclusive) && (!next_alloc || !is_next_exclusive) && old_size + next_block_size < asize && GET_SIZE(HDRP(NEXT_BLKP(NEXT_BLKP(oldptr)))) == 0) { // mem_sbrk는 확장하기 전 힙의 끝 주소를 반환한다. // 필요한 payload만큼 요청 } // 적절한 블록이 없어서 힙을 확장해야하는 경우 } 결과 Results for mm malloc: trace valid util ops secs Kops 0 yes 99% 5694 0.002349 2424 1 yes 99% 5848 0.002057 2843 2 yes 99% 6648 0.003098 2146 3 yes 99% 5380 0.002304 2335 4 yes 100% 14400 0.005293 2720 5 yes 96% 4800 0.004807 999 6 yes 94% 4800 0.002095 2292 7 yes 55% 12000 0.024931 481 8 yes 51% 24000 0.076473 314 9 yes 96% 14401 0.002309 6238 10 yes 87% 14401 0.000382 37669 Total 89% 112372 0.126099 891 Perf index = 53 (util) + 40 (thru) = 93/100 캬 4점 신기록 추가 free 전용 영역 내부가 전부 free일 경우 small bin에서 내부를 전부 해제하고 large bin으로 분류한다. 이를위해 하위 3비트중 세번째 비트를 가장 처음인지의 여부로 본다. void mm_free(void *bp) { size_t size = GET_SIZE(HDRP(bp)); size_t is_exclusive = IS_EX(HDRP(bp)); if(is_exclusive) is_exclusive = 1; else is_exclusive = 0; size_t is_first = IS_FIRST(HDRP(bp)); if(is_first) is_first = 1; else is_first = 0; PUT(HDRP(bp), EX_PACK(size, is_first, is_exclusive, 0)); PUT(FTRP(bp), EX_PACK(size, is_first, is_exclusive, 0)); // 전용 블록이 아니면 unsoretd bin에 넣기 if(!is_exclusive) { char *merged = coalesce(bp); char *unsorted_head = arena.unsorted_bin; insert_head(unsorted_head, merged); arena.unsorted_bin = merged; return; } // 전용 블록이라면 첫번째 전용 블록까지 탐색 char *first_ex = bp; while(!IS_FIRST(HDRP(first_ex))) { first_ex = PREV_BLKP(first_ex); } char *cur = first_ex; size_t small_size = GET_SIZE(HDRP(bp)); for (int i = 0; i < EXCLUSIVE; i++) { // 중간에 하나라도 할당되어있으면 그냥 분류시킴 if (GET_ALLOC(HDRP(cur))) { classify_block(bp, small_size); return; } cur = NEXT_BLKP(cur); } // 한 영역이 전부 free 상태이므로 일반 블록으로 병합하고 분류한다. cur = first_ex; for (int i = 0; i < EXCLUSIVE; i++) { if(bp != cur) del_from_bin(cur, small_size); cur = NEXT_BLKP(cur); } // 일반 블록으로 만들고 분류 size_t large_size = small_size * EXCLUSIVE; // 포인터 초기화 PUT_PTR(PREV_FREE_PTR(first_ex), NULL); PUT_PTR(NEXT_FREE_PTR(first_ex), NULL); // 일반 블록 PUT(HDRP(first_ex), EX_PACK(large_size, 0, 0, 0)); PUT(FTRP(first_ex), EX_PACK(large_size, 0, 0, 0)); classify_block(first_ex, large_size); } 여기에 exclusive 개수를 5로 낮췄다. 결과 Results for mm malloc: trace valid util ops secs Kops 0 yes 99% 5694 0.002531 2249 1 yes 99% 5848 0.003479 1681 2 yes 99% 6648 0.002110 3151 3 yes 100% 5380 0.002296 2343 4 yes 100% 14400 0.005215 2761 5 yes 96% 4800 0.004710 1019 6 yes 94% 4800 0.003256 1474 7 yes 91% 12000 0.003394 3535 8 yes 84% 24000 0.006025 3984 9 yes 56% 14401 0.006282 2292 10 yes 87% 14401 0.000398 36147 Total 91% 112372 0.039696 2831 Perf index = 55 (util) + 40 (thru) = 95/100 +2!!!! 개선 그런데 이 전용 영역을 합쳐서 바로 free해버리면 오히려 realloc 효율이 떨어져버린다. 아마도 작은 영역들을 원래 사용하고 있었는데 큰 블록으로 합쳐버리면서 나중에 잘라 사용하고 단편화가 생기는 것으로 보인다. 그래서 한 영역이 전부 free되더라도 합치는건 그 전용 크기가 몇개 있는지 탐색하고 충분하다면 큰 블록으로 합치고, 충분하지 않으면 그대로 전용 블록으로 사용하도록한다. void mm_free(void *bp) { // 전용 블록이 아니면 unsoretd bin에 넣기 // 전용 블록이라면 첫번째 전용 블록까지 탐색 // 중간에 하나라도 할당되어있으면 그냥 분류시킴 // 전용 블록의 개수가 별로 없으면 합치지 말고 분류 if (small_block_count(small_size) < MAX_SMALL_BLOCK) { classify_block(bp, small_size); return; } // 한 영역이 전부 free 상태이므로 일반 블록으로 병합하고 분류한다. // 일반 블록으로 만들고 분류 //classify_block(first_ex, large_size); char *merged = coalesce(first_ex); classify_block(merged, GET_SIZE(HDRP(merged))); } static size_t small_block_count(size_t asize) { // small bin에서 블록 개수 size_t s_i = (size_t)(asize / SMALL_BIN_UNIT); if (arena.small_bin[s_i] == NULL) return 0; size_t count = 0; char *cur = arena.small_bin[s_i]; while (cur != NULL) { cur = GET_PTR(NEXT_FREE_PTR(cur)); count++; } return count; } 이렇게 하고 분류하기전 병합까지 시킨다. 결과 Results for mm malloc: trace valid util ops secs Kops 0 yes 99% 5694 0.003507 1624 1 yes 99% 5848 0.001488 3931 2 yes 99% 6648 0.001315 5057 3 yes 100% 5380 0.001785 3013 4 yes 100% 14400 0.005394 2669 5 yes 96% 4800 0.004860 988 6 yes 94% 4800 0.004648 1033 7 yes 91% 12000 0.003064 3917 8 yes 84% 24000 0.005492 4370 9 yes 98% 14401 0.002685 5363 10 yes 87% 14401 0.000498 28918 Total 95% 112372 0.034735 3235 Perf index = 57 (util) + 40 (thru) = 97/100 2점!! 더 올릴게 있을까여기서 realloc 전용 영역 옮기기 void *mm_realloc(void *ptr, size_t size) { ... // 요청한 크기보다 이미 가지고 있는 크기가 더 크면 분할 후 리턴 if (old_size >= asize) { // 전용 영역인 경우 크기에 맞는 전용 영역 찾기 if (IS_EX(HDRP(oldptr))) { // asize 이상 크기의 free block을 찾고 할당 if ((newptr = find_fit(asize)) != NULL) { place(newptr, asize); return newptr; } // free block을 못찾았을 때 힙을 늘림 //extendsize = MAX(asize, CHUNKSIZE); size_t extendsize = asize; if ((newptr = extend_heap(extendsize / WSIZE)) == NULL) return NULL; place(newptr, asize); return newptr; } // 일반영역인경우 분할 후 리턴 place(oldptr, asize); return oldptr; } ... 결과 Results for mm malloc: trace valid util ops secs Kops 0 yes 99% 5694 0.001880 3028 1 yes 99% 5848 0.002285 2559 2 yes 99% 6648 0.002234 2976 3 yes 100% 5380 0.002316 2323 4 yes 100% 14400 0.003104 4640 5 yes 96% 4800 0.003880 1237 6 yes 94% 4800 0.004627 1037 7 yes 91% 12000 0.003455 3474 8 yes 84% 24000 0.005192 4623 9 yes 98% 14401 0.002605 5528 10 yes 87% 14401 0.000438 32902 Total 95% 112372 0.032014 3510 Perf index = 57 (util) + 40 (thru) = 97/100 시간 줄어듬 (?)
📚 [AI활용 멀티모달&MCP PJ] 멀티모달 (14) - CLIP CLIP은 이미지와 텍스트를 하나의 공통 의미 공간(Common Semantic Space) 에 정렬하기 위해 대비 학습(Contrastive Learning) 을 사용하는 대표적인 Pretrained Vision–Language 모델이다. 이미지와 텍스트를 각각 인코더를 통해 임베딩으로 변환한 뒤, 올바른 이미지–텍스트 쌍은 서로 가깝게 , 관련 없는 쌍은 서로 멀어지도록 학습한다. 이러한 구조를 통해 별도의 태스크별 학습 없이도 텍스트로 정의한 클래스 설명만으로 이미지를 분류하는 Zero-shot Image Classification 이 가능하다. 또한 이미지와 텍스트를 같은 의미 공간에서 비교하기 때문에 다음과 같은 검색 작업에도 강점을 가진다. 🔍 Text-to-Image Retrieval 🔎 Image-to-Text Retrieval 🏷️ Zero-shot Image Classification 다만 CLIP은 이미지와 텍스트의 이해 및 정렬(alignment) 에 초점이 맞춰진 모델이기 때문에, 직접 문장을 생성하는 생성형 모델과는 목적이 다르다. 🌐 1. CLIP이 등장한 배경 기존 컴퓨터 비전 모델은 특정 데이터셋의 고정된 라벨 구조 에 의존하는 경우가 많았다. 예를 들어 학습 데이터에 다음과 같은 클래스가 존재한다고 가정하면, dog cat car 모델은 주어진 클래스에 맞춰 학습하게 된다. 하지만 새로운 클래스가 등장하면 기존 모델을 그대로 사용하는 것이 어렵고, 새로운 데이터를 이용해 다시 학습해야 할 수 있다. 기존 모델의 한계 데이터셋마다 고정된 라벨 구조에 의존 새로운 클래스가 등장하면 재학습 필요 현실 세계의 다양한 개념을 다루는 Open-world 환경에 한계 CLIP은 이러한 문제에 접근하기 위해 대규모 웹 이미지–텍스트 데이터를 활용 한다. 핵심적인 관점은 다음과 같다. 이미지는 언어로 설명될 수 있고, 언어는 이미지와 대응될 수 있다. 즉, 사람이 이미지에 붙인 자연어 설명 자체를 학습에 활용하여 이미지와 언어 사이의 의미적 연결 관계를 학습하는 것이다. 🎯 2. CLIP의 핵심 아이디어 — Contrastive Learning CLIP의 핵심은 Contrastive Learning(대비 학습) 이다. 여러 개의 이미지와 텍스트가 존재할 때, 서로 올바르게 대응되는 쌍과 그렇지 않은 쌍을 구분하면서 이미지와 텍스트의 임베딩 공간을 학습한다. ✅ 올바른 이미지–텍스트 쌍 🐶 강아지 이미지 ↕ "a photo of a dog" → 임베딩 공간에서 가깝게 ❌ 관계없는 이미지–텍스트 쌍 🐶 강아지 이미지 ↕ "a photo of a car" → 임베딩 공간에서 멀어지게 즉, 올바른 쌍 Image ↔ Text ↓ 유사도 ↑ 잘못된 쌍 Image ↔ Text ↓ 유사도 ↓ 이러한 학습을 반복하면서 이미지와 텍스트 사이의 의미적 대응 관계 를 학습하게 된다. 🏗️ 3. CLIP 모델 구조 CLIP은 크게 두 개의 독립적인 인코더로 구성된다. ┌── Vision Encoder ──→ Image Embedding Image ────────┤ │ └── Text Encoder ────→ Text Embedding Text ────────┘ ↓ 공통 임베딩 공간에서 비교 ↓ Cosine Similarity 👁️ Vision Encoder 이미지를 입력받아 하나의 Image Embedding Vector 로 변환한다. CLIP에서는 대표적으로 다음과 같은 구조를 Vision Encoder로 사용할 수 있다. CNN 기반 ResNet Transformer 기반 ViT(Vision Transformer) 즉, Image ↓ Vision Encoder ↓ Image Embedding 과 같은 흐름으로 이미지의 시각적 정보를 벡터로 표현한다. 📝 Text Encoder 텍스트를 입력받아 하나의 Text Embedding Vector 로 변환한다. CLIP에서는 Transformer 기반 Text Encoder를 사용한다. Text ↓ Tokenization ↓ Transformer ↓ Text Embedding 이렇게 변환된 텍스트 임베딩은 Vision Encoder가 만든 이미지 임베딩과 같은 공간에서 비교할 수 있다. 🔗 4. 공통 임베딩 공간 CLIP에서 중요한 개념 중 하나는 이미지와 텍스트가 같은 임베딩 공간에서 비교된다는 것 이다. 각각의 Encoder가 생성한 임베딩을 같은 의미 공간으로 정렬하기 때문에 이미지와 문장의 의미적 유사도를 계산할 수 있다. Common Embedding Space 🐶 Image ● / / 높은 유사도 / ● "a photo of a dog" 반대로 의미가 다른 텍스트는 이미지와 더 멀어지도록 학습된다. 이때 두 임베딩 사이의 유사도를 계산하는 대표적인 방법이 Cosine Similarity(코사인 유사도) 이다. 📊 5. 학습 방식 — Training Objective CLIP은 이미지 임베딩과 텍스트 임베딩 사이의 유사도 행렬(Similarity Matrix) 을 계산한다. 예를 들어 이미지 4개와 텍스트 4개가 있다면 각각의 이미지와 텍스트 사이 유사도를 계산해 행렬을 만들 수 있다. Text 1 Text 2 Text 3 Text 4 Image 1 ● Image 2 ● Image 3 ● Image 4 ● 올바른 이미지–텍스트 쌍에 해당하는 위치의 유사도가 높아지고, 나머지 위치의 유사도는 낮아지도록 학습한다. CLIP에서는 Softmax 기반의 대칭적 Cross-Entropy Loss 를 사용한다. 두 방향 모두 학습한다. 1 Image → Text 하나의 이미지가 주어졌을 때 정답 텍스트를 찾도록 학습 Image ↓ 여러 Text와 유사도 비교 ↓ 가장 잘 맞는 Text 선택 2 Text → Image 하나의 텍스트가 주어졌을 때 정답 이미지를 찾도록 학습 Text ↓ 여러 Image와 유사도 비교 ↓ 가장 잘 맞는 Image 선택 따라서 CLIP은 이미지에서 텍스트를 찾는 방향과 텍스트에서 이미지를 찾는 방향을 동시에 학습 하게 된다. 🚀 6. Zero-shot Image Classification CLIP의 가장 대표적인 특징 중 하나가 Zero-shot Image Classification 이다. 기존 이미지 분류 모델은 새로운 클래스를 추가하려면 해당 클래스의 데이터를 이용해 학습해야 하는 경우가 많았다. 하지만 CLIP은 클래스 이름을 텍스트로 표현한 뒤 이미지와 비교 하는 방식으로 분류할 수 있다. 🧩 Zero-shot Classification 과정 예를 들어 강아지와 고양이를 분류한다고 생각해보자. 1 클래스를 텍스트로 표현 "a photo of a dog" "a photo of a cat" 2 각각의 텍스트를 Text Encoder로 변환 "a photo of a dog" ↓ Text Embedding 1 "a photo of a cat" ↓ Text Embedding 2 3 입력 이미지를 Vision Encoder로 변환 Image ↓ Vision Encoder ↓ Image Embedding 4 이미지와 각 텍스트의 유사도 계산 Image Embedding ↓ ┌───────────────┐ ↓ ↓ Dog Text Cat Text Similarity Similarity 0.92 0.18 5 가장 높은 유사도를 가진 클래스를 선택 Dog Similarity = 0.92 Cat Similarity = 0.18 → Dog 결국 별도의 분류 헤드를 새로 학습하지 않고도 텍스트 프롬프트를 이용해 이미지를 분류 할 수 있다. 💬 7. CLIP에서 중요한 Prompt 개념 CLIP에서는 단순히 클래스 이름만 사용하는 것보다 자연어 문장 형태로 클래스를 표현 할 수 있다. 예를 들어, dog cat car 처럼 사용하는 대신, "a photo of a dog" "a photo of a cat" "a photo of a car" 처럼 문장 형태로 표현할 수 있다. 이렇게 텍스트로 클래스를 정의하고 이미지와 비교하는 방식이 Zero-shot Classification의 핵심적인 아이디어 다. 즉, 클래스 Label ↓ 텍스트 Prompt ↓ Text Encoder ↓ Text Embedding ↓ Image Embedding과 비교 ↓ 가장 높은 유사도의 클래스 선택 이러한 방식은 이후 LLM 기반 멀티모달 모델에서 사용하는 중요한 사고방식 과도 연결된다. 🔎 8. CLIP의 주요 활용 분야 🖼️ Text-to-Image Retrieval 텍스트를 입력하고 관련된 이미지를 찾는 작업이다. "a dog running on the beach" ↓ Text Encoder ↓ Text Embedding ↓ 이미지 임베딩들과 유사도 비교 ↓ 가장 관련 있는 이미지 📝 Image-to-Text Retrieval 이미지를 입력하고 가장 관련성이 높은 텍스트를 찾는 작업이다. Image ↓ Vision Encoder ↓ Image Embedding ↓ 텍스트 임베딩들과 유사도 비교 ↓ 가장 관련 있는 Text 🏷️ Zero-shot Classification 이미지와 여러 텍스트 클래스 설명을 비교해서 가장 유사한 클래스를 선택 한다. 따라서 새로운 클래스에 대해서도 별도의 태스크별 학습 없이 적용할 수 있다는 장점이 있다. 🆚 CLIP의 특징 정리 항목 CLIP 핵심 기술 Contrastive Learning 입력 이미지 + 텍스트 Vision Encoder ResNet / ViT Text Encoder Transformer 핵심 목표 Image-Text Alignment 임베딩 공통 의미 공간 유사도 Cosine Similarity 주요 활용 Retrieval, Zero-shot Classification 생성 능력 없음 핵심 특징 이미지와 텍스트의 이해 및 정렬 🎯 핵심요약 1️⃣ CLIP이란? Contrastive Language–Image Pre-training 대표적인 Pretrained Vision-Language Model 이미지와 텍스트를 하나의 공통 의미 공간으로 정렬 Contrastive Learning 을 이용해 이미지와 텍스트의 관계 학습 2️⃣ 핵심 학습 방식 올바른 Image ↔ Text ↓ 유사도 증가 잘못된 Image ↔ Text ↓ 유사도 감소 3️⃣ 모델 구조 Image ↓ Vision Encoder ↓ Image Embedding ↘ Similarity ↗ Text Embedding ↑ Text Encoder ↑ Text 4️⃣ Training Objective 이미지와 텍스트의 Similarity Matrix 계산 Softmax 기반 대칭적 Cross-Entropy Loss 사용 Image → Text Text → Image 양방향으로 이미지–텍스트 정렬 학습 5️⃣ Zero-shot Classification 이미지 ↓ Image Embedding ↓ ↔ 유사도 비교 ↔ Text Prompt ↓ Text Embedding ↓ 가장 높은 유사도 ↓ Class Prediction 6️⃣ CLIP의 가장 중요한 개념 라벨을 숫자로만 보는 것이 아니라 텍스트 프롬프트로 표현하고, 이미지와 텍스트의 의미적 유사도를 이용해 분류한다. 💭 느낀점 이번 학습에서는 CLIP이 왜 기존 이미지 분류 모델과 다른 방식으로 동작하는지 를 이해할 수 있었다. 기존의 분류 모델은 정해진 클래스와 데이터셋에 맞춰 학습하는 방식이었다면, CLIP은 이미지와 텍스트를 연결해서 학습하기 때문에 훨씬 유연하게 새로운 개념을 다룰 수 있다는 점이 인상적이었다. 특히 Contrastive Learning 의 개념이 중요하게 느껴졌다. 단순히 이미지를 분류하는 것이 아니라, 올바른 이미지–텍스트 쌍은 가까워지게 만들고 관련 없는 쌍은 멀어지도록 학습함으로써 이미지와 언어 사이의 의미 공간 자체를 만드는 과정 이라는 점이 흥미로웠다. 또한 CLIP의 두 개의 Encoder 구조를 보면서 이전에 공부했던 ViT와 Transformer가 실제 Vision-Language 모델의 기반으로 어떻게 연결되는지 를 다시 확인할 수 있었다. Vision Encoder가 이미지 정보를 벡터로 만들고, Text Encoder가 언어 정보를 벡터로 만든 뒤 같은 공간에서 비교하는 구조가 멀티모달 모델의 기본적인 형태라는 것을 이해하게 되었다. 가장 인상적인 부분은 Zero-shot Image Classification 이었다. 별도의 분류 모델을 새로 학습하지 않고 "a photo of a dog" , "a photo of a cat" 처럼 클래스 자체를 텍스트로 표현해서 이미지와 비교한다는 방식이 기존의 지도학습 분류와 상당히 다르게 느껴졌다. 특히 이전에 학습했던 BLIP과 비교했을 때 차이점 도 이해할 수 있었다. BLIP 계열은 이미지와 텍스트를 이해하고 생성하는 방향으로 활용되는 반면, CLIP은 이미지와 텍스트를 같은 의미 공간에 정렬하고 서로의 관계를 이해하는 것 에 더 초점이 맞춰져 있다는 점이 중요하다고 느꼈다. 전체적으로 지금까지 배운 CNN → ViT → Transformer → PLM → VLM → BLIP → CLIP 의 흐름이 점점 하나로 연결되는 느낌이 들었다. 앞으로의 멀티모달 모델도 결국 이미지를 이해하는 Vision Encoder와 언어를 이해하는 Language Model을 어떻게 연결하고, 두 모달리티의 의미를 어떻게 정렬할 것인지가 핵심적인 문제라는 생각이 들었다.
https://www.youtube.com/watch?v=frkVgBvp850&list=PL_iJu012NOxea6yN2PUzw8hQ2Aniog8ql 오늘부터 AI를 위한 수학에 대한 강의를 들으며, 수학공부를 시작해보겠듭니다. (강의는 추천받았다...) 목표는 1달 안에 완강하기 !! 물론 완강 + 이해하기가 목표이다. SKT FLY AI 과정이 끝난 1달동안,,, BOAZ ADV 및 캡스톤밖에 진행하지 않았기에... 10월부터 본격적으로 열심히 해보자 !! ((응원해주세요 ^_^ ))
1. Cloud concepts Public Cloud Private Cloud Hybrid Cloud IaaS PaaS SaaS 사용량 기반 과금 고가용성 확장성 안정성 보안 관리 용이성 클라우드 컴퓨팅 설명 / 클라우드 서비스 사용의 이점 / 클라우드 서비스 유형 2. Azure architecture and services Azure Region Availability Zone Resource Group Subscription Management Group Compute Networking Storage Microsoft Entra ID RBAC Zero Trust Microsoft Defender for Cloud Azure 핵심 아키텍처 구성요소 / 컴퓨팅 및 네트워킹 서비스 / 스토리지 서비스 / Azure ID, 엑세스 및 보안 3. Azure management and governance Cost Management Azure Policy Resource Lock Azure Portal Azure Cloud Shell Azure CLI Azure PowerShell Azure Resource Manager ARM Template Azure Monitor Azure Advisor Azure Service Health Azure 비용 관리 / 거버넌스 및 규정준스를 위한 Azure 기능 / 리소스 관리 및 배포 기능 / 모니터링 도구